diff --git a/README.md b/README.md
index 33af762..dce5df7 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,7 @@ https://github.com/user-attachments/assets/f9f6a933-d388-4c8b-9c9a-011dfa37617b
Cameras are tiles too, not only part of an alert: any camera or snapshot in Home Assistant (a doorbell's last ring, for example) goes on a Guition like any other tile. Tap it for the picture full screen, refreshed every four seconds; an alert can carry the same picture. The CYD has no memory for pictures (how it works).
+Cameras are tiles too, not only part of an alert: any camera or snapshot in Home Assistant (a doorbell's last ring, for example) goes on a Guition like any other tile. Tap it for the picture full screen, refreshed every four seconds, or let the tile itself show a small live picture in the icon's place (Display → Live picture, every 15 or 30 s); an alert can carry the same picture. The CYD has no memory for pictures (how it works).
diff --git a/README_EXTENDED.md b/README_EXTENDED.md
index 726f9be..71fe01f 100644
--- a/README_EXTENDED.md
+++ b/README_EXTENDED.md
@@ -53,11 +53,9 @@ on the screen itself, and how updates work.
**presence** (`person.*`). Pick them in the library like any other tile, or
drag them straight into the screen mockup; **Double-width** is an option for every tile, and so is
**Full page** (firmware 0.2.62+; not for a Go to page tile): the tile takes the whole page and is
- one big button that lights up in its state colour while on, so a screen by the door switches the
- light when you push anywhere on it.
- Only something that can be off lights up: a light, switch, airco, fan, blind, speaker, robot, script,
- timer, camera, person or binary sensor. Sensors, numbers, selects, scenes, the weather and the sun stay plain
- (firmware 0.2.71+).
+ one big button, so a screen by the door switches the light when you push anywhere on it. It is white
+ or its own pastel like every other tile, and its icon shows the state (firmware 0.2.77+; before that
+ the whole tile took its state colour while on).
Its small slider, direct controls or graph sit at the bottom of the page. A **Go to page** tile
(`screen.page_1` to `screen.page_8`) opens another page: a full-page light switch on page 1, a menu on page 2.
Under **Goes to page** the editor offers the pages the screen has and the next, empty one, where a new sub-page
@@ -254,7 +252,8 @@ Home Assistant asks for all seven fields; leave a field empty (`""`, `0`, `false
don't use it. A new alert replaces the current one. Every end is reported as the event
**`esphome.screen_alert`** with `action` (`ok`, `timeout`, `replaced`, or `remote`), `title`,
`screen`, and the `device_id` that Home Assistant adds, so an automation can wait for OK.
-**`esphome.
de?ne(w,j,V,!0,!1,Q):L(x,N,z,j,V,X,J,G,Q)},le=(w,x,N,z,j,V,X,J,G)=>{let H=0;const de=x.length;let Q=w.length-1,Z=de-1;for(;H<=Q&&H<=Z;){const P=w[H],F=x[H]=G?Jt(x[H]):Vt(x[H]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;H++}for(;H<=Q&&H<=Z;){const P=w[Q],F=x[Z]=G?Jt(x[Z]):Vt(x[Z]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;Q--,Z--}if(H>Q){if(H<=Z){const P=Z+1,F=PZ)for(;H<=Q;)ce(w[H],j,V,!0),H++;else{const P=H,F=H,ue=new Map;for(H=F;H<=Z;H++){const ht=x[H]=G?Jt(x[H]):Vt(x[H]);ht.key!=null&&ue.set(ht.key,H)}let fe,Oe=0;const De=Z-F+1;let Ve=!1,wt=0;const Yn=new Array(De);for(H=0;H =De){ce(ht,j,V,!0);continue}let Ft;if(ht.key!=null)Ft=ue.get(ht.key);else for(fe=F;fe<=Z;fe++)if(Yn[fe-F]===0&&fs(ht,x[fe])){Ft=fe;break}Ft===void 0?ce(ht,j,V,!0):(Yn[Ft-F]=H+1,Ft>=wt?wt=Ft:Ve=!0,T(ht,x[Ft],N,null,j,V,X,J,G),Oe++)}const Al=Ve?pf(Yn):Un;for(fe=Al.length-1,H=De-1;H>=0;H--){const ht=F+H,Ft=x[ht],Pl=x[ht+1],Ol=ht+1 {const{el:V,type:X,transition:J,children:G,shapeFlag:H}=w;if(H&6){ee(w.component.subTree,x,N,z);return}if(H&128){w.suspense.move(x,N,z);return}if(H&64){X.move(w,x,N,Mn);return}if(X===q){s(V,x,N);for(let Q=0;Q J.enter(V),j));else{const{leave:Q,delayLeave:Z,afterLeave:P}=J,F=()=>{w.ctx.isUnmounted?i(V):s(V,x,N)},ue=()=>{const fe=V._isLeaving||!!V[Qi];V._isLeaving&&V[Qi](!0),J.persisted&&!fe?F():Q(V,()=>{F(),P&&P()})};Z?Z(V,F,ue):ue()}else s(V,x,N)},ce=(w,x,N,z=!1,j=!1)=>{const{type:V,props:X,ref:J,children:G,dynamicChildren:H,shapeFlag:de,patchFlag:Q,dirs:Z,cacheIndex:P,memo:F}=w;if((Q===-2||H&&H.hasOnce)&&(j=!1),J!=null&&(an(),xs(J,null,N,w,!0),rn()),P!=null&&(!w.ctx||w.ctx===x)&&(x.renderCache[P]=void 0),de&256){x.ctx.deactivate(w);return}const ue=de&1&&Z,fe=!Ss(w);let Oe;if(fe&&(Oe=X&&X.onVnodeBeforeUnmount)&&Dt(Oe,x,w),de&6)K(w.component,N,z);else{if(de&128){w.suspense.unmount(N,z);return}ue&&Rn(w,null,x,"beforeUnmount"),de&64?w.type.remove(w,x,N,Mn,z):H&&!H.hasOnce&&(V!==q||Q>0&&Q&64)?ne(H,x,N,!1,!0):(V===q&&Q&384||!j&&de&16)&&ne(G,x,N),z&&tt(w)}const De=F!=null&&P==null;(fe&&(Oe=X&&X.onVnodeUnmounted)||ue||De)&&dt(()=>{Oe&&Dt(Oe,x,w),ue&&Rn(w,null,x,"unmounted"),De&&(w.el=null)},N)},tt=w=>{const{type:x,el:N,anchor:z,transition:j}=w;if(x===q){$e(N,z);return}if(x===no){C(w),j&&!j.persisted&&j.afterLeave&&j.afterLeave();return}const V=()=>{i(N),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(w.shapeFlag&1&&j&&!j.persisted){const{leave:X,delayLeave:J}=j,G=()=>X(N,V);J?J(w.el,V,G):G()}else V()},$e=(w,x)=>{let N;for(;w!==x;)N=v(w),i(w),w=N;i(x)},K=(w,x,N)=>{const{bum:z,scope:j,job:V,subTree:X,um:J,m:G,a:H}=w;Gl(G),Gl(H),z&&si(z),j.stop(),V?(V.flags|=8,ce(X,w,x,N)):w.vnode.el&&X&&(X.transition=w.vnode.transition,ce(X,w,x,N)),J&&dt(J,x),dt(()=>{w.isUnmounted=!0},x)},ne=(w,x,N,z=!1,j=!1,V=0)=>{for(let X=V;X {if(w.shapeFlag&6)return ie(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const x=v(w.anchor||w.el),N=x&&x[Ad];return N?v(N):x};let yt=!1;const Ln=(w,x,N)=>{let z;w==null?x._vnode&&(ce(x._vnode,null,null,!0),z=x._vnode.component):T(x._vnode||null,w,x,null,null,null,N),x._vnode=w,yt||(yt=!0,Dl(z),Vr(),yt=!1)},Mn={p:T,um:ce,m:ee,r:tt,mt:ye,mc:L,pc:we,pbc:U,n:ie,o:e};return{render:Ln,hydrate:void 0,createApp:Gd(Ln)}}function to({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Nn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fc(e,t,n=!1){const s=e.children,i=t.children;if(pe(s)&&pe(i))for(let l=0;l >1,e[n[u]] 0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function pc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pc(t)}function Gl(e){if(e)for(let t=0;t e.__isSuspense;function hf(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):xd(e)}const q=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),cn=Symbol.for("v-cmt"),no=Symbol.for("v-stc"),Vn=[];let bt=null;function g(e=!1){Vn.push(bt=e?null:[])}function bc(){Vn.pop(),bt=Vn[Vn.length-1]||null}let Ps=1;function fi(e,t=!1){Ps+=e,e<0&&bt&&t&&(bt.hasOnce=!0)}function vc(e){return e.dynamicChildren=Ps>0?bt||Un:null,bc(),Ps>0&&bt&&bt.push(e),e}function _(e,t,n,s,i,l){return vc(o(e,t,n,s,i,l,!0))}function it(e,t,n,s,i){return vc(se(e,t,n,s,i,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function fs(e,t){return e.type===t.type&&e.key===t.key}const gc=({key:e})=>e??null,ii=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||Qe(e)||_e(e)?{i:mt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,s=0,i=null,l=e===q?0:1,r=!1,u=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&gc(t),ref:t&&ii(t),scopeId:Br,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:mt};return u?(hi(f,n),l&128&&e.normalize(f)):n&&(f.shapeFlag|=We(n)?8:16),Ps>0&&!r&&bt&&(f.patchFlag>0||l&6)&&f.patchFlag!==32&&bt.push(f),f}const se=mf;function mf(e,t=null,n=null,s=0,i=null,l=!1){if((!e||e===Xr)&&(e=cn),pi(e)){const u=ss(e,t,!0);return n&&hi(u,n),Ps>0&&!l&&bt&&(u.shapeFlag&6?bt[bt.indexOf(e)]=u:bt.push(u)),u.patchFlag=-2,u}if(Cf(e)&&(e=e.__vccOpts),t){t=bf(t);let{class:u,style:f}=t;u&&!We(u)&&(t.class=me(u)),Pe(f)&&(ol(f)&&!pe(f)&&(f=et({},f)),t.style=Ue(f))}const r=We(e)?1:mc(e)?128:Fi(e)?64:Pe(e)?4:_e(e)?2:0;return o(e,t,n,s,i,r,l,!0)}function bf(e){return e?ol(e)||lc(e)?et({},e):e:null}function ss(e,t,n=!1,s=!1){const{props:i,ref:l,patchFlag:r,children:u,transition:f}=e,h=t?vf(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&gc(h),ref:t&&t.ref?n&&l?pe(l)?l.concat(ii(t)):[l,ii(t)]:ii(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==q?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ss(e.ssContent),ssFallback:e.ssFallback&&ss(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&s&&al(p,f.clone(p)),p}function Me(e=" ",t=0){return se(Bs,null,e,t)}function W(e="",t=!1){return t?(g(),it(cn,null,e)):se(cn,null,e)}function Vt(e){return e==null||typeof e=="boolean"?se(cn):pe(e)?se(q,null,e.slice()):pi(e)?Jt(e):se(Bs,null,String(e))}function Jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ss(e)}function hi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),hi(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!lc(t)?t._ctx=mt:i===3&&mt&&(mt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(_e(t)){if(s&65){hi(e,{default:t});return}t={default:t,_ctx:mt},n=32}else t=String(t),s&64?(n=16,t=[Me(t)]):n=8;e.children=t,e.shapeFlag|=n}function vf(...e){const t={};for(let n=0;n st||mt;let mi,Os;{const e=Li(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),l=>{i.length>1?i.forEach(r=>r(l)):i[0](l)}};mi=t("__VUE_INSTANCE_SETTERS__",n=>st=n),Os=t("__VUE_SSR_SETTERS__",n=>Is=n)}const Ks=e=>{const t=st;return mi(e),e.scope.on(),()=>{e.scope.off(),mi(t)}},Jl=()=>{st&&st.scope.off(),mi(null)};function yc(e){return e.vnode.shapeFlag&4}let Is=!1;function wf(e,t=!1,n=!1){t&&Os(t);const{props:s,children:i}=e.vnode,l=yc(e);sf(e,s,l,t),rf(e,i,n||t);const r=l?kf(e,t):void 0;return t&&Os(!1),r}function kf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vd);const{setup:s}=n;if(s){an();const i=e.setupContext=s.length>1?xf(e):null,l=Ks(e),r=Vs(s,e,0,[e.props,i]),u=mr(r);if(rn(),l(),(u||e.sp)&&!Ss(e)&&Yr(e),u){if(r.then(Jl,Jl),t)return r.then(f=>{Os(!0);try{Xl(e,f,t)}finally{Os(!1)}}).catch(f=>{Ri(f,e,0)});e.asyncDep=r}else Xl(e,r)}else wc(e)}function Xl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Pe(t)&&(e.setupState=Ur(t)),wc(e)}function wc(e,t,n){const s=e.type;e.render||(e.render=s.render||Bt);{const i=Ks(e);an();try{Wd(e)}finally{rn(),i()}}}const $f={get(e,t){return nt(e,"get",""),e[t]}};function xf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$f),slots:e.slots,emit:e.emit,expose:t}}function ji(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ur(hd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Sf(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Cf(e){return _e(e)&&"__vccOpts"in e}const k=(e,t)=>_d(e,t,Is);function bi(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Pe(t)&&!pe(t)?pi(t)?se(e,null,[t]):se(e,t):se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pi(n)&&(n=[n]),se(e,t,n))}finally{fi(1)}}const Tf="3.5.43";let Eo;const Zl=typeof window<"u"&&window.trustedTypes;if(Zl)try{Eo=Zl.createPolicy("vue",{createHTML:e=>e})}catch{}const kc=Eo?e=>Eo.createHTML(e):e=>e,Ef="http://www.w3.org/2000/svg",Af="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,Ql=Gt&&Gt.createElement("template"),Pf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Gt.createElementNS(Ef,e):t==="mathml"?Gt.createElementNS(Af,e):n?Gt.createElement(e,{is:n}):Gt.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,l){const r=n?n.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===l||!(i=i.nextSibling)););else{Ql.innerHTML=kc(s==="svg"?``:s==="mathml"?``:e);const u=Ql.content;if(s==="svg"||s==="mathml"){const f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Of=Symbol("_vtc");function If(e,t,n){const s=e[Of];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ea=Symbol("_vod"),Lf=Symbol("_vsh"),Mf=Symbol(""),Rf=/(?:^|;)\s*display\s*:/;function Nf(e,t,n){const s=e.style,i=We(n);let l=!1;if(n&&!i){if(t)if(We(t))for(const r of t.split(";")){const u=r.slice(0,r.indexOf(":")).trim();n[u]==null&&bs(s,u,"")}else for(const r in t)n[r]==null&&bs(s,r,"");for(const r in n){r==="display"&&(l=!0);const u=n[r];u!=null?Df(e,r,!We(t)&&t?t[r]:void 0,u)||bs(s,r,u):bs(s,r,"")}}else if(i){if(t!==n){const r=s[Mf];r&&(n+=";"+r),s.cssText=n,l=Rf.test(n)}}else t&&e.removeAttribute("style");ea in e&&(e[ea]=l?s.display:"",e[Lf]&&(s.display="none"))}const Zs=/\s*!important$/;function bs(e,t,n){if(pe(n))n.forEach(s=>bs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))Zs.test(n)?e.setProperty(t,n.replace(Zs,""),"important"):e.setProperty(t,n);else{const s=Ff(e,t);Zs.test(n)?e.setProperty(En(s),n.replace(Zs,""),"important"):e[s]=n}}const ta=["Webkit","Moz","ms"],so={};function Ff(e,t){const n=so[t];if(n)return n;let s=ct(t);if(s!=="filter"&&s in e)return so[t]=s;s=Oi(s);for(let i=0;i io||(Bf.then(()=>io=0),io=Date.now());function zf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const i=n.value;if(pe(i)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=i.slice(),u=[s];for(let f=0;f e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,qf=(e,t,n,s,i,l)=>{const r=i==="svg";t==="class"?If(e,s,r):t==="style"?Nf(e,n,s):Ei(t)?Ai(t)||jf(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yf(e,t,s,r))?(ia(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sa(e,t,s,r,l,t!=="value")):e._isVueCE&&(Gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!We(s)))?ia(e,ct(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sa(e,t,s,r))};function Yf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&la(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return la(t)&&We(n)?!1:t in e}function Gf(e,t){const n=e._def.props;if(!n)return!1;const s=ct(t);return Array.isArray(n)?n.some(i=>ct(i)===s):Object.keys(n).some(i=>ct(i)===s)}const xn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>si(t,n):t};function Jf(e){e.target.composing=!0}function aa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vt=Symbol("_assign"),Qs=Symbol("_initialValue");function oo(e,t,n){return t&&(e=e.trim()),n&&(e=Ii(e)),e}const Je={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e.parentNode&&(e.type==="text"?e[Qs]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Qs]=e.defaultValue.replace(/\r\n?/g,` -`))),e[vt]=xn(i);const l=s||i.props&&i.props.type==="number";en(e,t?"change":"input",r=>{r.target.composing||e[vt](oo(e.value,n,l))}),(n||l)&&en(e,"change",()=>{e.value=oo(e.value,n,l)}),t||(en(e,"compositionstart",Jf),en(e,"compositionend",aa),en(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const i=t??"",l=e[Qs];delete e[Qs],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[vt](oo(e.value,n,s)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:l}},r){if(e[vt]=xn(r),e.composing)return;const u=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ii(e.value):e.value,f=t??"";if(u===f)return;const h=e.getRootNode();(h instanceof Document||h instanceof ShadowRoot)&&h.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f)}},Xf={deep:!0,created(e,t,n){e[vt]=xn(n),en(e,"change",()=>{const s=e._modelValue,i=is(e),l=e.checked,r=e[vt];if(pe(s)){const u=Zo(s,i),f=u!==-1;if(l&&!f)r(s.concat(i));else if(!l&&f){const h=[...s];h.splice(u,1),r(h)}}else if(ln(s)){const u=new Set(s);l?u.add(i):u.delete(i),r(u)}else r($c(e,l))})},mounted:ra,beforeUpdate(e,t,n){e[vt]=xn(n),ra(e,t,n)}};function ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(pe(t))i=Zo(t,s.props.value)>-1;else if(ln(t))i=t.has(s.props.value);else{if(t===n)return;i=Mt(t,$c(e,!0))}e.checked!==i&&(e.checked=i)}const ca={created(e,{value:t},n){e.checked=Mt(t,n.props.value),e[vt]=xn(n),en(e,"change",()=>{e[vt](is(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vt]=xn(s),t!==n&&(e.checked=Mt(t,s.props.value))}},Wn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,en(e,"change",()=>{const i=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?Ii(is(f)):is(f)),l=e.multiple,r=l?ln(e._modelValue)?new Set(i):i:i[0],u=e._pendingValue=[l,l?pe(r)?i.slice():i:r];try{e[vt](r)}finally{Ni(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[vt]=xn(s)},mounted(e,{value:t}){ua(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[vt]=xn(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Zf(t,n[1],n[0]))&&ua(e,t)}};function Zf(e,t,n){if(!n||pe(e))return Mt(e,t);if(ln(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function ua(e,t){const n=e.multiple,s=pe(t);if(!(n&&!s&&!ln(t))){for(let i=0,l=e.options.length;i String(h)===String(u)):r.selected=Zo(t,u)>-1}else r.selected=t.has(u);else if(Mt(is(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function is(e){return"_value"in e?e._value:e.value}function $c(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qf=["ctrl","shift","alt","meta"],ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qf.some(n=>e[`${n}Key`]&&!t.includes(n))},Pt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((i,...l)=>{for(let r=0;r {const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(i=>{if(!("key"in i))return;const l=En(i.key);if(t.some(r=>r===l||tp[r]===l))return e(i)}))},np=et({patchProp:qf},Pf);let da;function sp(){return da||(da=uf(np))}const ip=((...e)=>{const t=sp().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=lp(s);if(!i)return;const l=t._component;!_e(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,op(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function op(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lp(e){return We(e)?document.querySelector(e):e}const ap="modulepreload",rp=function(e,t){return new URL(e,t).href},fa={},hn=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let h=function(p){return Promise.all(p.map(b=>Promise.resolve(b).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),f=u?.nonce||u?.getAttribute("nonce");i=h(n.map(p=>{if(p=rp(p,s),p in fa)return;fa[p]=!0;const b=p.endsWith(".css"),v=b?'[rel="stylesheet"]':"";if(s)for(let I=r.length-1;I>=0;I--){const T=r[I];if(T.href===p&&(!b||T.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${p}"]${v}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":ap,b||(y.as="script"),y.crossOrigin="",y.href=p,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((I,T)=>{y.addEventListener("load",I),y.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${p}`)))})}))}function l(r){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=r,window.dispatchEvent(u),!u.defaultPrevented)throw r}return i.then(r=>{for(const u of r||[])u.status==="rejected"&&l(u.reason);return t().catch(l)})},cp={de:{name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},"en-GB":{name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},en:{name:"English (US)",english:"English (US)",script:"latin",plural:"one_other",clock:"12",checked:!0},es:{name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},fr:{name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},it:{name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},nl:{name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},pl:{name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},pt:{name:"Português",english:"Portuguese",script:"latin",plural:"one_other",clock:"24",checked:!1}};const vi=typeof window<"u",Pn=(e,t=!1)=>t?Symbol.for(e):Symbol(e),up=(e,t,n)=>dp({l:e,k:t,s:n}),dp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),qe=e=>typeof e=="number"&&isFinite(e),Sc=e=>pl(e)==="[object Date]",gi=e=>pl(e)==="[object RegExp]",fl=e=>Fe(e)&&Object.keys(e).length===0,ot=Object.assign,fp=Object.create,Ie=(e=null)=>fp(e);let pa;const pp=()=>pa||(pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Ie()),hp=Object.prototype.hasOwnProperty;function xt(e,t){return hp.call(e,t)}const je=Array.isArray,Be=e=>typeof e=="function",ae=e=>typeof e=="string",Ke=e=>typeof e=="boolean",Se=e=>e!==null&&typeof e=="object",mp=e=>Se(e)&&Be(e.then)&&Be(e.catch),Cc=Object.prototype.toString,pl=e=>Cc.call(e),Fe=e=>pl(e)==="[object Object]",bp=e=>e==null?"":je(e)||Fe(e)&&e.toString===Cc?JSON.stringify(e,null,2):String(e);function vp(e,t=""){return e.reduce((n,s,i)=>i===0?n+s:n+t+s,"")}function gp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}function ha(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function _p(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}const yp=/^javascript:/i,wp=/^(?:href|src|action|formaction)$/i,kp=/(?:x([0-9a-f]+)|(\d+));?/gi,$p=/&(?:Tab|NewLine);/g,xp=/:?/gi,Sp=/[\u0000-\u0020\u007f-\u009f]/g,Cp=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Tp=/(^|[\s"'<>/])on(\w+\s*=)/gi,Ep=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function Ap(e,t,n){const s=t||n;if(!s)return e;const i=Number.parseInt(s,t?16:10);return i<=127?String.fromCharCode(i):e}function hl(e){const t=e.replace(kp,Ap).replace($p,"").replace(xp,":").replace(Sp,"");return yp.test(t)}function Pp(e){const t=/url\s*\(/gi;let n="",s=0,i;for(;(i=t.exec(e))!==null;){const l=i.index,r=t.lastIndex-1;let u=r+1,f=1,h=null;for(;u `${n}="${ma(n,s)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(t,n,s)=>`${n}='${ma(n,s)}'`),Cp.test(e)&&(e=e.replace(Tp,"$1on$2")),e=e.replace(Ep,(t,n,s,i)=>hl(i)?`${n}${s}about:blank`:t),e}const ba=e=>!Se(e)||je(e);function oi(e,t){if(ba(e)||ba(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:s,des:i}=n.pop();Object.keys(s).forEach(l=>{if(l==="__proto__")return;const r=s[l];if(je(r)){const u=[];u.length=r.length,i[l]=u,n.push({src:r,des:u})}else Se(r)?((!Se(i[l])||je(i[l]))&&(i[l]=Ie()),n.push({src:r,des:i[l]})):i[l]=r})}}const Ip=17;function Tc(e,t,n={}){const{domain:s,messages:i,args:l}=n,r=e,u=new SyntaxError(String(r));return u.code=e,u.domain=s,u}function Kt(e){return Se(e)&&ml(e)===0&&(xt(e,"b")||xt(e,"body"))}const Ec=["b","body"];function Lp(e){return On(e,Ec)}const Ac=["c","cases"];function Mp(e){return On(e,Ac,[])}const Pc=["s","static"];function Rp(e){return On(e,Pc)}const Oc=["i","items"];function Np(e){return On(e,Oc,[])}const Ic=["t","type"];function ml(e){return On(e,Ic)}const Lc=["v","value"];function ei(e,t){const n=On(e,Lc);if(n!=null)return n;throw Ls(t)}const Mc=["m","modifier"];function Fp(e){return On(e,Mc)}const Rc=["k","key"];function Dp(e){const t=On(e,Rc);if(t)return t;throw Ls(6)}function On(e,t,n){for(let s=0;s Up(n,e)}function Up(e,t){const n=Lp(t);if(n==null)throw Ls(0);if(ml(n)===1){const l=Mp(n);return e.plural(l.reduce((r,u)=>[...r,ga(e,u)],[]))}else return ga(e,n)}function ga(e,t){const n=Rp(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const s=Np(t).reduce((i,l)=>[...i,Ao(e,l)],[]);return e.normalize(s)}}function Ao(e,t){const n=ml(t);switch(n){case 3:return ei(t,n);case 9:return ei(t,n);case 4:{const s=t;if(xt(s,"k")&&s.k)return e.interpolate(e.named(s.k));if(xt(s,"key")&&s.key)return e.interpolate(e.named(s.key));throw Ls(n)}case 5:{const s=t;if(xt(s,"i")&&qe(s.i))return e.interpolate(e.list(s.i));if(xt(s,"index")&&qe(s.index))return e.interpolate(e.list(s.index));throw Ls(n)}case 6:{const s=t,i=Fp(s),l=Dp(s);return e.linked(Ao(e,l),i?Ao(e,i):void 0,e.type)}case 7:return ei(t,n);case 8:return ei(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}let _a=Ie();function jp(e,t){{const n=e.cacheKey;if(n){const s=_a[n];return s||(_a[n]=va(e))}else return va(e)}}const tn={INVALID_ARGUMENT:Ip,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Hp=24;function nn(e){return Tc(e,null,void 0)}function bl(e,t){return t.locale!=null?ya(t.locale):ya(e.locale)}let lo;function ya(e){if(ae(e))return e;if(Be(e)){if(e.resolvedOnce&&lo!=null)return lo;if(e.constructor.name==="Function"){const t=e();if(mp(t))throw nn(tn.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return lo=t}else throw nn(tn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw nn(tn.NOT_SUPPORT_LOCALE_TYPE)}function Vp(e,t,n){return[...new Set([n,...je(t)?t:Se(t)?Object.keys(t).filter(s=>s!=="default"):ae(t)?[t]:[n]])]}function Po(e,t,n){const s=ae(n)?n:_i,i=e;let l;Se(t)?(i.__localeChainObjectCache||(i.__localeChainObjectCache=new WeakMap),l=i.__localeChainObjectCache.get(t),l||(l=new Map,i.__localeChainObjectCache.set(t,l))):(i.__localeChainCache||(i.__localeChainCache=new Map),l=i.__localeChainCache.get(t),l||(l=new Map,i.__localeChainCache.set(t,l)));const r=l.get(s);if(r)return r;const u=[];let f=[n];for(;je(f);)f=wa(u,f,t);const h=je(t)||!Fe(t)?t:t.default?t.default:null;return f=ae(h)?[h]:h,je(f)&&wa(u,f,!1),l.set(s,u),u}function wa(e,t,n){let s=!0;for(let i=0;i {r===void 0?r=u:r+=u},v[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},v[2]=()=>{v[0](),i++},v[3]=()=>{if(i>0)i--,s=4,v[0]();else{if(i=0,r===void 0||(r=Gp(r),r===!1))return!1;v[1]()}};function y(){const I=e[n+1];if(s===5&&I==="'"||s===6&&I==='"')return n++,u="\\"+I,v[0](),!0}for(;s!==null;)if(n++,l=e[n],!(l==="\\"&&y())){if(f=Yp(l),b=In[s],h=b[f]||b.l||8,h===8||(s=h[0],h[1]!==void 0&&(p=v[h[1]],p&&(u=l,p()===!1))))return;if(s===7)return t}}const ka=new Map;function Xp(e,t){return Se(e)?e[t]:null}function Zp(e,t){if(!Se(e))return null;let n=ka.get(t);if(n||(n=Jp(t),n&&ka.set(t,n)),!n)return null;const s=n.length;let i=e,l=0;for(;l `${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function eh(){return{upper:(e,t)=>t==="text"&&ae(e)?e.toUpperCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&ae(e)?e.toLowerCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&ae(e)?$a(e):t==="vnode"&&Se(e)&&"__v_isVNode"in e?$a(e.children):e}}let Fc;function th(e){Fc=e}let Dc;function nh(e){Dc=e}let Uc;function sh(e){Uc=e}let jc=null;const xa=e=>{jc=e},Sa=()=>jc;let Ca=0;function ih(e={}){const t=Be(e.onWarn)?e.onWarn:gp,n=ae(e.version)?e.version:Qp,s=ae(e.locale)||Be(e.locale)?e.locale:_i,i=Be(s)?_i:s,l=je(e.fallbackLocale)||Fe(e.fallbackLocale)||ae(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,r=Fe(e.messages)?e.messages:ao(i),u=Fe(e.datetimeFormats)?e.datetimeFormats:ao(i),f=Fe(e.numberFormats)?e.numberFormats:ao(i),h=ot(Ie(),e.modifiers,eh()),p=e.pluralRules||Ie(),b=Be(e.missing)?e.missing:null,v=Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=!!e.fallbackFormat,T=!!e.unresolving,$=Be(e.postTranslation)?e.postTranslation:null,A=Fe(e.processor)?e.processor:null,S=Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,D=!!e.escapeParameter,C=Be(e.messageCompiler)?e.messageCompiler:Fc,B=Be(e.messageResolver)?e.messageResolver:Dc||Xp,O=Be(e.localeFallbacker)?e.localeFallbacker:Uc||Vp,E=Se(e.fallbackContext)?e.fallbackContext:void 0,L=e,M=Se(L.__datetimeFormatters)?L.__datetimeFormatters:new Map,U=Se(L.__numberFormatters)?L.__numberFormatters:new Map,R=Se(L.__meta)?L.__meta:{};Ca++;const Y={version:n,cid:Ca,locale:s,fallbackLocale:l,messages:r,modifiers:h,pluralRules:p,missing:b,missingWarn:v,fallbackWarn:y,fallbackFormat:I,unresolving:T,postTranslation:$,processor:A,warnHtmlMessage:S,escapeParameter:D,messageCompiler:C,messageResolver:B,localeFallbacker:O,fallbackContext:E,onWarn:t,__meta:R};return Y.datetimeFormats=u,Y.numberFormats=f,Y.__datetimeFormatters=M,Y.__numberFormatters=U,Y}const ao=e=>({[e]:Ie()});function Hc(e,t,n,s,i){const{missing:l,onWarn:r}=e;if(l!==null){const u=l(e,n,t,i);return ae(u)?u:t}else return t}function Ta(e,t){const n=e;Se(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ti(e,t,n){Ta(e,n),e.fallbackContext&&Ta(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function oh(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function lh(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let s=n+1;s{s.includes(f)?u[f]=i[f]:t[f]=i[f]}),ae(l)?t.locale=l:Fe(l)&&(u=l),Fe(r)&&(u=r),u}function Ea(e,...t){const{datetimeFormats:n,unresolving:s,onWarn:i}=e,{__datetimeFormatters:l}=e;if(!ae(t[0])&&!Sc(t[0])&&!qe(t[0]))return yi;const[r,u,f,h]=Oo(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.DateTimeFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"datetime format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.DateTimeFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const zc=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Oo(...e){const[t]=e,n=Ie(),s=Ie();let i;if(ae(t)){const r=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!r)throw nn(tn.INVALID_ISO_DATE_ARGUMENT);const u=r[3]?r[3].trim().startsWith("T")?`${r[1].trim()}${r[3].trim()}`:`${r[1].trim()}T${r[3].trim()}`:r[1].trim();i=new Date(u);try{i.toISOString()}catch{throw nn(tn.INVALID_ISO_DATE_ARGUMENT)}}else if(Sc(t)){if(isNaN(t.getTime()))throw nn(tn.INVALID_DATE_ARGUMENT);i=t}else if(qe(t))i=t;else throw nn(tn.INVALID_ARGUMENT);const l=Kc(e,n,s,zc);return[n.key||"",i,n,l]}function Aa(e,t,n){Bc(e.__datetimeFormatters,t,n)}function Pa(e,...t){const{numberFormats:n,unresolving:s,onWarn:i}=e,{__numberFormatters:l}=e;if(!qe(t[0]))return yi;const[r,u,f,h]=Io(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.NumberFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"number format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.NumberFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const qc=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Io(...e){const[t]=e,n=Ie(),s=Ie();if(!qe(t))throw nn(tn.INVALID_ARGUMENT);const i=t,l=Kc(e,n,s,qc);return[n.key||"",i,n,l]}function Oa(e,t,n){Bc(e.__numberFormatters,t,n)}const ah=e=>e,rh=e=>"",ch="text",uh=e=>e.length===0?"":vp(e),dh=bp;function ro(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function fh(e){const t=qe(e.pluralIndex)?e.pluralIndex:-1;return qe(e.named?.count)?e.named.count:qe(e.named?.n)?e.named.n:t}function ph(e={}){const t=e.locale,n=fh(e),s=ae(t)&&Be(e.pluralRules?.[t])?e.pluralRules[t]:ro,i=s===ro?void 0:ro,l=A=>A[s(n,A.length,i)],r=e.list||[],u=A=>r[A],f=e.named||Ie();qe(e.pluralIndex)&&(f.count||=e.pluralIndex,f.n||=e.pluralIndex);const h=A=>f[A];function p(A,S){const D=Be(e.messages)?e.messages(A,!!S):Se(e.messages)?e.messages[A]:!1;return D||(e.parent?e.parent.message(A):rh)}const b=A=>e.modifiers?e.modifiers[A]:ah,v=Be(e.processor?.normalize)?e.processor.normalize:uh,y=Be(e.processor?.interpolate)?e.processor.interpolate:dh,I=ae(e.processor?.type)?e.processor.type:ch,$={list:u,named:h,plural:l,linked:(A,...S)=>{const[D,C]=S;let B="text",O="";S.length===1?Se(D)?(O=D.modifier||O,B=D.type||B):ae(D)&&(O=D||O):S.length===2&&(ae(D)&&(O=D||O),ae(C)&&(B=C||B));const E=p(A,!0)($),L=E===""||E===void 0?A:E,M=B==="vnode"&&je(L)&&O?L[0]:L;return O?b(O)(M,B):M},message:p,type:I,interpolate:y,normalize:v,values:ot(Ie(),r,f)};return $}const Ia=()=>"",sn=e=>Be(e);function La(e,...t){const{fallbackFormat:n,postTranslation:s,unresolving:i,messageCompiler:l,fallbackLocale:r,messages:u}=e,[f,h]=Lo(...t),p=Ke(h.missingWarn)?h.missingWarn:e.missingWarn,b=Ke(h.fallbackWarn)?h.fallbackWarn:e.fallbackWarn,v=Ke(h.escapeParameter)?h.escapeParameter:e.escapeParameter,y=!!h.resolvedMessage,I=ae(h.default)||Ke(h.default)?Ke(h.default)?l?f:()=>f:h.default:n?l?f:()=>f:null,T=n||I!=null&&(ae(I)||Be(I)),$=bl(e,h);v&&hh(h);let[A,S,D]=y?[f,$,u[$]||Ie()]:Yc(e,f,$,r,b,p),C=A,B=f;if(!y&&!(ae(C)||Kt(C)||sn(C))&&T&&(C=I,B=C),!y&&(!(ae(C)||Kt(C)||sn(C))||!ae(S)))return i?Hi:f;let O=!1;const E=()=>{O=!0},L=sn(C)?C:Gc(e,f,S,C,B,E);if(O)return C;const M=vh(e,S,D,h),U=ph(M),R=mh(e,L,U);let Y=s?s(R,f):R;return v&&ae(Y)&&(Y=Op(Y)),Y}function hh(e){je(e.list)?e.list=e.list.map(t=>ae(t)?ha(t):t):Se(e.named)&&Object.keys(e.named).forEach(t=>{ae(e.named[t])&&(e.named[t]=ha(e.named[t]))})}function Yc(e,t,n,s,i,l){const{messages:r,onWarn:u,messageResolver:f,localeFallbacker:h}=e,p=h(e,s,n);let b=Ie(),v,y=null;const I="translate";for(let T=0;T s);return h.locale=n,h.key=t,h}const f=r(s,bh(e,n,i,s,u,l));return f.locale=n,f.key=t,f.source=s,f}function mh(e,t,n){return t(n)}function Lo(...e){const[t,n,s]=e,i=Ie();if(!ae(t)&&!qe(t)&&!sn(t)&&!Kt(t))throw nn(tn.INVALID_ARGUMENT);const l=qe(t)?String(t):(sn(t),t);return qe(n)?i.plural=n:ae(n)?i.default=n:Fe(n)&&!fl(n)?i.named=n:je(n)&&(i.list=n),qe(s)?i.plural=s:ae(s)?i.default=s:Fe(s)&&ot(i,s),[l,i]}function bh(e,t,n,s,i,l){return{locale:t,key:n,warnHtmlMessage:i,onError:r=>{throw l&&l(r),r},onCacheKey:r=>up(t,n,r)}}function vh(e,t,n,s){const{modifiers:i,pluralRules:l,messageResolver:r,fallbackLocale:u,fallbackWarn:f,missingWarn:h,fallbackContext:p}=e,v={locale:t,modifiers:i,pluralRules:l,messages:(y,I)=>{let T=r(n,y);if(T==null&&(p||I)){const[$,,A]=Yc(p||e,y,t,u,f,h);T=$??r(A,y)}if(ae(T)||Kt(T)){let $=!1;const S=Gc(e,y,t,T,y,()=>{$=!0});return $?Ia:S}else return sn(T)?T:Ia}};return e.processor&&(v.processor=e.processor),s.list&&(v.list=s.list),s.named&&(v.named=s.named),qe(s.plural)&&(v.pluralIndex=s.plural),v}const gh="11.4.12",gt={UNEXPECTED_RETURN_TYPE:Hp,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Tt(e,...t){return Tc(e,null,void 0)}const Mo=Pn("__translateVNode"),Ro=Pn("__datetimeParts"),No=Pn("__numberParts"),_h=Pn("__setPluralRules"),yh=Pn("__injectWithOption"),Zn=Pn("__dispose");let Jc=null;{const e=pp().__VUE_INSTANCE_SETTERS__;je(e)&&e.push(t=>{Jc=t})}function Ms(e){if(!Se(e)||Kt(e))return e;for(const t in e)if(xt(e,t))if(!t.includes("."))Se(e[t])&&Ms(e[t]);else{const n=t.split("."),s=n.length-1;let i=e,l=!1;for(let r=0;r {if("locale"in u&&"resource"in u){const{locale:f,resource:h}=u;f?(r[f]=r[f]||Ie(),oi(h,r[f])):oi(h,r)}else ae(u)&&oi(JSON.parse(u),r)}),i==null&&l)for(const u in r)xt(r,u)&&Ms(r[u]);return r}function wh(e){return e.type}function kh(e,t,n){let s=Se(t.messages)?t.messages:Ie();"__i18nGlobal"in n&&(s=Xc(e.locale.value,{messages:s,__i18n:n.__i18nGlobal}));const i=Object.keys(s);i.length&&i.forEach(l=>{e.mergeLocaleMessage(l,s[l])});{if(Se(t.datetimeFormats)){const l=Object.keys(t.datetimeFormats);l.length&&l.forEach(r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])})}if(Se(t.numberFormats)){const l=Object.keys(t.numberFormats);l.length&&l.forEach(r=>{e.mergeNumberFormat(r,t.numberFormats[r])})}}}function Ma(e){return se(Bs,null,e,0)}function Zc(){return Jc??_c()}const Ra=()=>[],$h=()=>!1;let Na=0;function Fa(e){return((t,n,s,i)=>e(n,s,Zc()||void 0,i))}function Fo(e={}){const{__root:t,__injectWithOption:n}=e,s=t===void 0,i=e.flatJson,l=vi?ke:md;let r=Ke(e.inheritLocale)?e.inheritLocale:!0;const u=l(t&&r?t.locale.value:ae(e.locale)?e.locale:_i),f=l(t&&r?t.fallbackLocale.value:ae(e.fallbackLocale)||je(e.fallbackLocale)||Fe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),h=l(Xc(u.value,e)),p=l(Fe(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),b=l(Fe(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=t?t.missingWarn:Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=t?t.fallbackWarn:Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=t?t.fallbackRoot:Ke(e.fallbackRoot)?e.fallbackRoot:!0,T=!!e.fallbackFormat,$=Be(e.missing)?e.missing:null,A=Be(e.missing)?Fa(e.missing):null,S=Be(e.postTranslation)?e.postTranslation:null,D=t?t.warnHtmlMessage:Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,C=!!e.escapeParameter;const B=t?t.modifiers:Fe(e.modifiers)?e.modifiers:{};let O=e.pluralRules||t&&t.pluralRules,E;E=(()=>{s&&xa(null);const P={version:gh,locale:u.value,fallbackLocale:f.value,messages:h.value,modifiers:B,pluralRules:O,missing:A===null?void 0:A,missingWarn:v,fallbackWarn:y,fallbackFormat:T,unresolving:!0,postTranslation:S===null?void 0:S,warnHtmlMessage:D,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};P.datetimeFormats=p.value,P.numberFormats=b.value,P.__datetimeFormatters=Fe(E)?E.__datetimeFormatters:void 0,P.__numberFormatters=Fe(E)?E.__numberFormatters:void 0;const F=ih(P);return s&&xa(F),F})(),ti(E,u.value,f.value);function M(){return[u.value,f.value,h.value,p.value,b.value]}const U=k({get:()=>u.value,set:P=>{E.locale=P,u.value=P}});function R(P){s||(E.fallbackContext=t?Sa():void 0);try{ti(E,u.value,P)}finally{s||(E.fallbackContext=void 0)}}const Y=k({get:()=>f.value,set:P=>{f.value=P,E.fallbackLocale=f.value,R(f.value)}}),te=k(()=>h.value),ye=k(()=>p.value),re=k(()=>b.value);function be(){return Be(S)?S:null}function ge(P){S=P,E.postTranslation=P}function we(){return $}function Ye(P){P!==null&&(A=Fa(P)),$=P,E.missing=A}const le=(P,F,ue,fe,Oe,De)=>{M();let Ve;try{s||(E.fallbackContext=t?Sa():void 0),Ve=P(E)}finally{s||(E.fallbackContext=void 0)}if(ue!=="translate exists"&&qe(Ve)&&Ve===Hi||ue==="translate exists"&&!Ve){const[wt,Yn]=F();return t&&I?fe(t):Oe(wt)}else{if(De(Ve))return Ve;throw Tt(gt.UNEXPECTED_RETURN_TYPE)}};function ee(...P){return le(F=>Reflect.apply(La,null,[F,...P]),()=>Lo(...P),"translate",F=>Reflect.apply(F.t,F,[...P]),F=>F,F=>ae(F))}function ce(...P){const[F,ue,fe]=P;if(fe&&!Se(fe))throw Tt(gt.INVALID_ARGUMENT);return ee(F,ue,ot({resolvedMessage:!0},fe||{}))}function tt(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>Reflect.apply(F.d,F,[...P]),()=>yi,F=>ae(F)||je(F))}function $e(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>Reflect.apply(F.n,F,[...P]),()=>yi,F=>ae(F)||je(F))}function K(P){return P.map(F=>ae(F)||qe(F)||Ke(F)?Ma(String(F)):F)}const ie={normalize:K,interpolate:P=>P,type:"vnode"};function yt(...P){return le(F=>{let ue;const fe=F;try{fe.processor=ie,ue=Reflect.apply(La,null,[fe,...P])}finally{fe.processor=null}return ue},()=>Lo(...P),"translate",F=>F[Mo](...P),F=>[Ma(F)],F=>je(F))}function Ln(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>F[No](...P),Ra,F=>ae(F)||je(F))}function Mn(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>F[Ro](...P),Ra,F=>ae(F)||je(F))}function El(P){O=P,E.pluralRules=O}function w(P,F){return le(()=>{if(!P)return!1;const ue=ae(F)?F:u.value,fe=ae(F)?[ue]:Po(E,f.value,ue);for(let Oe=0;Oe[P],"translate exists",ue=>Reflect.apply(ue.te,ue,[P,F]),$h,ue=>Ke(ue))}function x(P){let F=null;const ue=Po(E,f.value,u.value);for(let fe=0;fe R(f.value),{deep:!0,flush:"sync"}),t&&vi&&(Ct(t.locale,P=>{r&&(u.value=P,E.locale=P,ti(E,u.value,f.value))}),Ct(t.fallbackLocale,P=>{r&&(f.value=P,E.fallbackLocale=f.value,ti(E,u.value,f.value))}));const Z={id:Na,locale:U,fallbackLocale:Y,get inheritLocale(){return r},set inheritLocale(P){r=P,P&&t&&(U.value=t.locale.value,Y.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(h.value).sort()},messages:te,get modifiers(){return B},get pluralRules(){return O||{}},get isGlobal(){return s},get missingWarn(){return v},set missingWarn(P){v=P,E.missingWarn=v},get fallbackWarn(){return y},set fallbackWarn(P){y=P,E.fallbackWarn=y},get fallbackRoot(){return I},set fallbackRoot(P){I=P},get fallbackFormat(){return T},set fallbackFormat(P){T=P,E.fallbackFormat=T},get warnHtmlMessage(){return D},set warnHtmlMessage(P){D=P,E.warnHtmlMessage=P},get escapeParameter(){return C},set escapeParameter(P){C=P,E.escapeParameter=P},t:ee,getLocaleMessage:z,setLocaleMessage:j,mergeLocaleMessage:V,getPostTranslationHandler:be,setPostTranslationHandler:ge,getMissingHandler:we,setMissingHandler:Ye,[_h]:El};return Z.datetimeFormats=ye,Z.numberFormats=re,Z.rt=ce,Z.te=w,Z.tm=N,Z.d=tt,Z.n=$e,Z.getDateTimeFormat=X,Z.setDateTimeFormat=J,Z.mergeDateTimeFormat=G,Z.getNumberFormat=H,Z.setNumberFormat=de,Z.mergeNumberFormat=Q,Z[yh]=n,Z[Mo]=yt,Z[Ro]=Mn,Z[No]=Ln,Z}const vl={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function xh({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((s,i)=>[...s,...i.type===q?i.children:[i]],[]):t.reduce((n,s)=>{const i=e[s];return i&&(n[s]=i()),n},Ie())}function Qc(){return q}const Sh=Le({name:"i18n-t",props:ot({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>qe(e)||!isNaN(e)}},vl),setup(e,t){const{slots:n,attrs:s}=t,i=e.i18n||gl({useScope:e.scope,__useComponent:!0});return()=>{const l=()=>{const f=Object.keys(n).filter(b=>b[0]!=="_"),h=Ie();e.locale&&(h.locale=e.locale),e.plural!==void 0&&(h.plural=ae(e.plural)?+e.plural:e.plural);const p=xh(t,f);return i[Mo](e.keypath,p,h)},r=ot(Ie(),s),u=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(u)?bi(u,r,{default:l}):bi(u,r,l())}}}),Da=Sh;function Ch(e){return je(e)&&!ae(e[0])}function eu(e,t,n,s){const{slots:i,attrs:l}=t;return()=>{const r=()=>{const h={part:!0};let p=Ie();e.locale&&(h.locale=e.locale),ae(e.format)?h.key=e.format:Se(e.format)&&(ae(e.format.key)&&(h.key=e.format.key),p=Object.keys(e.format).reduce((y,I)=>n.includes(I)?ot(Ie(),y,{[I]:e.format[I]}):y,Ie()));const b=s(e.value,h,p);let v=[h.key];return je(b)?v=b.map((y,I)=>{const T=i[y.type],$=T?T({[y.type]:y.value,index:I,parts:b}):[y.value];return Ch($)&&($[0].key=`${y.type}-${I}`),$}):ae(b)&&(v=[b]),v},u=ot(Ie(),l),f=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(f)?bi(f,u,{default:r}):bi(f,u,r())}}const Th=Le({name:"i18n-n",props:ot({value:{type:Number,required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,qc,(...s)=>n[No](...s))}}),Ua=Th;function Eh(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const s=n.__getInstance(t);return s!=null?s.__composer:e.global.__composer}}function Ah(e){const t=r=>{const{instance:u,value:f}=r;if(!u||!u.$)throw Tt(gt.UNEXPECTED_ERROR);const h=Eh(e,u.$),p=ja(f);return[Reflect.apply(h.t,h,[...Ha(p)]),h]};return{created:(r,u)=>{const[f,h]=t(u);vi&&(r.__i18nWatcher=Ct(h.locale,()=>{u.instance&&u.instance.$forceUpdate()})),r.__composer=h,r.textContent=f},unmounted:r=>{vi&&r.__i18nWatcher&&(r.__i18nWatcher(),r.__i18nWatcher=void 0,delete r.__i18nWatcher),r.__composer&&(r.__composer=void 0,delete r.__composer)},beforeUpdate:(r,{value:u})=>{if(r.__composer){const f=r.__composer,h=ja(u);r.textContent=Reflect.apply(f.t,f,[...Ha(h)])}},getSSRProps:r=>{const[u]=t(r);return{textContent:u}}}}function ja(e){if(ae(e))return{path:e};if(Fe(e)){if(!("path"in e))throw Tt(gt.REQUIRED_VALUE,"path");return e}else throw Tt(gt.INVALID_VALUE)}function Ha(e){const{path:t,locale:n,args:s,choice:i,plural:l}=e,r={},u=s||{};return ae(n)&&(r.locale=n),qe(i)&&(r.plural=i),qe(l)&&(r.plural=l),[t,u,r]}function Ph(e,t,...n){const s=Fe(n[0])?n[0]:{};(!Ke(s.globalInstall)||s.globalInstall)&&([Da.name,"I18nT"].forEach(l=>e.component(l,Da)),[Ua.name,"I18nN"].forEach(l=>e.component(l,Ua)),[Ba.name,"I18nD"].forEach(l=>e.component(l,Ba))),e.directive("t",Ah(t))}const Oh=Pn("global-vue-i18n");function Ih(e={}){const t=Ke(e.globalInjection)?e.globalInjection:!0,n=new Map,[s,i]=Lh(e),l=Pn("");function r(p){return n.get(p)||null}function u(p,b){n.set(p,b)}function f(p){n.delete(p)}const h={get mode(){return"composition"},async install(p,...b){if(p.__VUE_I18N_SYMBOL__=l,p.provide(p.__VUE_I18N_SYMBOL__,h),Fe(b[0])){const I=b[0];h.__composerExtend=I.__composerExtend,h.__vueI18nExtend=I.__vueI18nExtend}let v=null;t&&(v=jh(p,h.global)),Ph(p,h,...b);const y=p.unmount;p.unmount=()=>{v&&v(),h.dispose(),y()}},get global(){return i},dispose(){s.stop()},__instances:n,__getInstance:r,__setInstance:u,__deleteInstance:f};return h}function gl(e={}){const t=Zc();if(t==null)throw Tt(gt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Tt(gt.NOT_INSTALLED);const n=Mh(t),s=Nh(n),i=wh(t),l=Rh(e,i);if(l==="global")return kh(s,e,i),s;if(l==="parent"){let f=Va(n,t,e.__useComponent);return f==null&&(f=s),f}if(l==="isolated"){if(n.mode!=="composition")throw Tt(gt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const f=n,h=ot({},e),p=Va(n,t);h.__root=p||s;const b=Fo(h);return f.__composerExtend&&(b[Zn]=f.__composerExtend(b)),$r()&&Gu(()=>{const y=b[Zn];y&&(y(),delete b[Zn])}),b}const r=n;let u=r.__getInstance(t);if(u==null){const f=ot({},e);"__i18n"in i&&(f.__i18n=i.__i18n),s&&(f.__root=s),u=Fo(f),r.__composerExtend&&(u[Zn]=r.__composerExtend(u)),Dh(r,t,u),r.__setInstance(t,u)}return u}function Lh(e,t){const n=Yu(),s=n.run(()=>Fo(e));if(s==null)throw Tt(gt.UNEXPECTED_ERROR);return[n,s]}function Mh(e){const t=$s(e.isCE?Oh:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Tt(e.isCE?gt.NOT_INSTALLED_WITH_PROVIDE:gt.UNEXPECTED_ERROR);return t}function Rh(e,t){return fl(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Nh(e){return e.mode==="composition"?e.global:e.global.__composer}function Va(e,t,n=!1){let s=null;const i=t.root;let l=Fh(t,n);for(;l!=null;){const r=e;if(e.mode==="composition"&&(s=r.__getInstance(l)),s!=null||i===l)break;l=l.parent}return s}function Fh(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Dh(e,t,n){An(()=>{},t),cl(()=>{const s=n;e.__deleteInstance(t);const i=s[Zn];i&&(i(),delete s[Zn])},t)}const Uh=["locale","fallbackLocale","availableLocales"],Wa=["t","rt","d","n","tm","te"];function jh(e,t){const n=Object.create(null);return Uh.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l)throw Tt(gt.UNEXPECTED_ERROR);const r=Qe(l.value)?{get(){return l.value.value},set(u){l.value.value=u}}:{get(){return l.get&&l.get()}};Object.defineProperty(n,i,r)}),e.config.globalProperties.$i18n=n,Wa.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l||!l.value)throw Tt(gt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,l)}),()=>{delete e.config.globalProperties.$i18n,Wa.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}const Hh=Le({name:"i18n-d",props:ot({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,zc,(...s)=>n[Ro](...s))}}),Ba=Hh;th(jp);nh(Zp);sh(Po);const Vh={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Undo"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unknown"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Unsaved changes"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Open Devices & services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Save & send"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Saving…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Read current data"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 result. Keep typing to narrow it down."},{t:2,i:[{t:4,k:"n"},{t:3,v:" results. Keep typing to narrow it down."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Close"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Change"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Back"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"New screen"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work. Refresh the page and try again."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API key copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API key is selected. Copy with Ctrl+C or Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON is selected. Copy with Ctrl+C or Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Action name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Action name is selected. Copy with Ctrl+C or Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is selected. Copy with Ctrl+C or Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icon name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icon name is selected. Copy with Ctrl+C or Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Empty color copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Empty color is selected. Copy with Ctrl+C or Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Color name is selected. Copy with Ctrl+C or Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Management page unreachable · retrying…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connected"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnecting to Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Refresh"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Queued for the update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found with this device name."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"What's new"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Full log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"The IP address, once; new firmware reports it itself."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP address, e.g. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP address"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Start"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installed, but not yet in Home Assistant. Add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and turn on “Allow the device to perform Home Assistant actions” under Configure."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware downloaded, not yet in Home Assistant. Put it on the screen with ESPHome Web, then add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and allow the Home Assistant actions under Configure."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Not yet in Home Assistant. Already flashed? Add the ESPHome device under Settings → Devices & services, then allow the Home Assistant actions under Configure. Not flashed yet? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copy API key"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Add to this screen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet and a test alert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nothing to save"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify this screen"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Blinks the backlight and shows a card"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs a newer firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Download and copy as JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Search screens, entities, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nothing matches. Type part of a screen, entity or action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choose a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Pick one of your screens on the left to change its tiles, top bar and settings."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Start with a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Connect a CYD or Guition via USB to your Home Assistant machine. Profile, firmware, and the first flash happen in one go."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Install new screen"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"You have unsaved changes. Open a different screen anyway?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with a copy of the other screen's?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with the imported one?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your screen is being updated."}},other:{t:0,b:{t:2,i:[{t:3,v:"Saved. "},{t:4,k:"name"},{t:3,v:" is being updated."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The screen is being updated."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your newest change isn't sent yet: press Save & send again."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinks and shows a card for a few seconds."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · changes are saved"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Screen settings"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Saved · sent to screen"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"All saved"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"blink the screen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs firmware 0.2.31 or newer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"from Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy layout from…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" screen"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" screens"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no other screen"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Import layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"advanced"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found for this screen"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"There is no room for this tile on page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No page is free for a full-page tile. Free a page first."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"This screen already has a tile that goes to page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied. Save & send when it looks right."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout imported. Save & send when it looks right."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout imported: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"That isn't JSON. Export a layout first, or paste one from another ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"No tiles in this file. Expected a layout exported from ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Add your first light, scene, or device from the library."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tap the top bar or a tile to change it. Drag to move; drop on the next page for a new one."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Empty slots and fixed positions work from firmware 0.2.26. This screen (firmware "},{t:4,k:"firmware"},{t:3,v:") shifts the tiles up to the first free slot until that update."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Screen layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Add page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 page is the most"},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages is the most"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"The pages after this one shift up one slot"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edit top bar"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empty slot. Click to add a tile here, or drag one over."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Empty slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:": add the next tile here"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Next tile goes here"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Empty"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Library"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entity"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entities"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, device, or room…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Add an entity"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"All"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lights"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switches"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fans"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Covers"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scenes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensors"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Values"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selects"}},person:{t:0,b:{t:2,i:[{t:3}],s:"People"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Room"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"All rooms"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Hide placed"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Hide what is already on this screen"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Everything here is already on this screen."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found. Try a different name, room or filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile; update its firmware for 48."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles; update its firmware for 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Drag onto a page, or tap + to add to the first free slot. ⌘K searches everything."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Light"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cover"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entity"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graph"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analog clock"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"sun path"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"full page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name on the screen"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (from Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (default)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows a chosen icon from firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Goes to page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (empty)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigation tiles need firmware 0.2.62: press Update on the screen first."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"This screen has no page "},{t:4,k:"page"},{t:3,v:", so a tap opens its last page. Choose another page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"A tap on the tile opens that page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Display"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analog clock"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name and status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graph"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sun path"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"This weather service has no daily forecast in Home Assistant. Choose another display."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Size"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double-width"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Full page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"A full-page tile needs firmware 0.2.62: press Update on the screen first."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"New page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direct control on the tile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this control for this entity, so it stays empty on the screen. Choose another one."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"At the bottom of the full-page tile; a tap anywhere else works as set below."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"On the right of the double-width tile, like the rows in Home Assistant. Tapping the name works as set below."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows direct control from firmware 0.2.19; until then the tile stays as it was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"On tap"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatic"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Open control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"View only"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"On / off"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Perform action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant can't turn this on and off, so a tap does nothing. Choose another option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen switches this from firmware 0.2.58: press Update on the screen. Until then a tap opens its card."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Hold the tile to open its card."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Small slider on the tile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Yes, control directly"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has nothing a slider can change for this entity. Choose No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"History"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hour"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastel background"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Background: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:". Enter: configure, arrow keys: move"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove tile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Asking Home Assistant which actions this entity has…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant isn't answering right now. Try again in a moment."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose an action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example toggle, position, or play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No action found."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this action for this entity any more, so a tap does nothing. Choose another one."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Not set"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant needs "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen performs an action from firmware 0.2.58: press Update on the screen. Until then a tap works as Automatic."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"No icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example lamp, music, or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"No icon, text only"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No icon found."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Current data"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connection, status, and supported properties"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Reading…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Fetching current HA status…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Small slider: "},{t:4,k:"slider"},{t:3,v:" · Display: "},{t:4,k:"display"},{t:3,v:" · Size: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Background: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"yes"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"none"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Default"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Read again"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed from the top bar"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"The top bar has room for 1 item."},{t:2,i:[{t:3,v:"The top bar has room for "},{t:4,k:"n"},{t:3,v:" items."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"This is already in the top bar."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Top bar"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Top bar: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself, also works without Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" item"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" items"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Left: name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"For example: Living room"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Right: time, sensors, or a clock"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:". Enter: configure, arrows: move"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"},{t:3,v:" from the top bar"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximum 1 item"},{t:2,i:[{t:3,v:"Maximum "},{t:4,k:"n"},{t:3,v:" items"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Add the time, date, analog clock, or an entity"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Add time, date, or an entity"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Not everything fits next to the name: the screen drops the dashed items. Remove one or choose a shorter name."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Drag to reorder; tap an item to configure it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensors, the date, and the analog clock appear from firmware "},{t:4,k:"version"},{t:3,v:"; until that update, this screen shows the name and, if the time is in the bar, the clock."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden: not active right now"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't fit next to the name"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Dial"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden right now: not active"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't currently fit next to the name"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"How it looks on the screen"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Small dial with the time"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"What to show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Last changed keeps counting on the screen itself: “Just now”, “5 min ago”, “Yesterday”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (like Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Only when active hides the item as long as it's off, closed, away, or 0. Handy for an open door, a running washing machine, or who's home."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24 hour clock · change under "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12 hour clock · change under "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings → Language & region"}},date_hint:{t:0,b:{t:2,i:[{t:4,k:"date"},{t:3,v:" today. The date follows the screen's own clock."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Up"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Down"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Add to the top bar"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slot used"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slots used"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Already added"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions from Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"An entity"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, room, or entity, e.g. temperature or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an entity for the top bar"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Night"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dark mode"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby after"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Standby brightness"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Night mode"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Starts"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Ends"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Night brightness"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Back to page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"After"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Also on standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Swipe between pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Still saving the other screen's settings. Try again in a moment."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons and swiping are off, so only Go to page tiles change the page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"You have no Go to page tiles."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"The tiles to "},{t:4,k:"pages"},{t:3,v:" are only on pages you can't reach."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"From "},{t:4,k:"pages"},{t:3,v:" no tile leads back to page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"This screen is offline. Its settings can change once it's back."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply on the screen at once, and show up here when they change there."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply at once. Firmware 0.2.49 lets the screen keep them itself."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"This entity is off in Home Assistant, or the screen is restarting."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lower"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" higher"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Starting update…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building the firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Writing the firmware over Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Building and installing…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Waiting for the screen to come back…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Checking that it stays stable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"New language: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Screens will now update automatically at night."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatic updates are off."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Updating to firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"No screen paired yet. New screens get firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"All screens have firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Update 1 screen"},{t:2,i:[{t:3,v:"Update all "},{t:4,k:"n"},{t:3,v:" screens"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"What's new in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Update automatically every night"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Between 03:00 and 06:00, one screen at a time. Stops on an error and reports it in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Claude Code picks it up right away."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Restart Claude Code once so it finds the new skills folder."}},text:{t:0,b:{t:2,i:[{t:3}],s:'Teach Claude about ESP Screens, then ask: "Show an alert on all my screens when the mailbox is full." Claude knows the alert events, every field, color, and icon.'}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install for Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Install again"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update the skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Not installed"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installed"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installed · a newer version is ready"}},writes:{t:0,b:{t:2,i:[{t:3,v:"For Claude Code in Home Assistant. Writes one file to "},{t:4,k:"path"},{t:3,v:"; installing again replaces it."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download for claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload the zip in Claude under Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Everything around your screens."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← My screens"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Add a screen, or build and reinstall the firmware of one you already have."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Build and install via USB or Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Language & region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Screen language"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant's language ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant's language"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"The screens use English until Home Assistant's language is available."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not checked yet, help welcome"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is not checked yet, help welcome: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"how to translate"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"After a change every screen needs a firmware update, one build each: with its Update button, or in the nightly updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Time format"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 hour"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 hour"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Number format"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Your Home Assistant profile: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Use these"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"The editor itself follows the language of your Home Assistant profile."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Every screen takes the new language with its next update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"A card over the whole screen from an automation, on one screen or on all of them. The cheatsheet has the action names, fields, icons, and colors, and a form to try one."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Full-screen notifications, from an automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Build and install screen firmware"}},intro:{t:0,b:{t:2,i:[{t:3,v:"The built-in ESPHome CLI uses your own profile (YAML with keys) and secrets. Choose the screen's profile, then a USB port (screen connected to the Home Assistant machine), "},{t:4,k:"ota"},{t:3,v:" with the hostname, or "},{t:4,k:"download"},{t:3,v:" to put the firmware on the screen from your own computer. "},{t:4,k:"check"},{t:3,v:" only validates, "},{t:4,k:"build"},{t:3,v:" compiles, "},{t:4,k:"install"},{t:3,v:" puts the firmware on the screen. Your tiles stay as they are in ESP Screens. The first build takes a few minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Check"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Build only"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Build & install"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Build & download"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing. Update the app to 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose the intended profile, then a USB port, an IP address, or Download."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome profile"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Install to"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · no board found on the Home Assistant machine yet"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · flash from your own computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP address or hostname"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Download "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Put it on the screen with "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome or Edge: Connect, choose the screen's USB port, Install, and select this file. It holds your Wi-Fi password and the screen's keys: keep it to yourself."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profile saved."}},running:{t:0,b:{t:2,i:[{t:3}],s:"One moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to download."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens creates the screen's own profile with unique keys and builds the firmware. Connect the screen with a USB data cable to the machine running Home Assistant, or download the firmware and put it on the screen from your own computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Which screen do you have?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2.8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Living room screen"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Device name"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"customize"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Every screen gets its own profile with its own keys. Four screens? Go through this four times with a different name."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lowercase letters, digits, and dashes. A different name for each screen."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi name (2.4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi password"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Fill in once: ESP Screens saves this in ESPHome secrets.yaml, later screens use it automatically."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Your ESPHome secrets.yaml is still missing Wi-Fi details. ESP Screens only fills in the missing lines."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi comes from your ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in the ESPHome folder isn't valid YAML. Fix the file first; it won't be overwritten."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Install via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · save profile only"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Connect the screen with a USB data cable to the Home Assistant machine; the list refreshes on its own. Or choose Download to use your own computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download the firmware and put it on the screen from your own computer, in Chrome or Edge. After that, updates go over Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"The profile goes into the ESPHome folder. You can install later via Firmware & USB, or from ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"More than one board connected: choose this screen's port."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Once over USB; after that, everything is wireless."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Save profile"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A build or installation is already running ("},{t:4,k:"file"},{t:3,v:"). Wait for it to finish."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing from this installation; only saving the profile is possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" is in the ESPHome folder"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Writing firmware to "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware for "},{t:4,k:"name"},{t:3,v:" is ready"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware is on "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Build failed"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Install failed"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Install it later from Firmware & USB: choose this profile, then the USB port of the Home Assistant machine, or Download to put the firmware on the screen from your own computer. Save the API key for pairing:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Don't disconnect the USB cable yet."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the installation keeps running and you'll find it again under New screen."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the build keeps running and you'll find it again under New screen."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Put it on the screen from your own computer, then pair the screen with Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. Pair it with Home Assistant now:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs. Pair it with Home Assistant now:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"See the log below."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" with a USB data cable."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plug the screen into your computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome or Edge, click Connect and choose the screen's USB port."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Click Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"The file holds your Wi-Fi password and the screen's keys: keep it to yourself."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API key"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" This happens outside ESP Screens. Home Assistant discovers "},{t:4,k:"name"},{t:3,v:" as an ESPHome device; click Add. Not discovered? Add ESPHome manually with the screen's IP address."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Go to Home Assistant → Settings → Devices & services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" above when Home Assistant asks for an encryption key."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Paste the API key"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome integration → Configure → “Allow the device to perform Home Assistant actions”. Without this, the screen sees everything but controls nothing."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allow HA actions:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Back in ESP Screens, the screen appears in the list on the left within about thirty seconds; until then it's shown there as “not yet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choose your tiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome log"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Retry"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Install another screen"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Start over"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"A full-screen notification, from an automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Every screen has the "},{t:4,k:"action"},{t:3,v:" action. It places a card over everything, wakes the screen, and keeps the backlight at normal brightness until someone taps the button or the timeout runs out. Home Assistant itself shows no explanation or dropdowns for ESPHome actions; everything you can fill in is listed here."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"The cheatsheet is still loading; one moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Someone is at the door"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Door 3, back"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Coming"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Try it"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Your screens"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In an automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"All screens"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"The fields"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icons"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colors"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Behavior"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Events"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Send one alert now, with the same fields an automation sends. The screen shows the card and, with blinking on, flashes its backlight."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},all:{t:0,b:{t:2,i:[{t:3,v:"All screens ("},{t:4,k:"ready"},{t:3,v:" ready)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not ready"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Title"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtitle"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Button text"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconds, 0 waits for the button)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Blink the backlight"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Four times when the alert arrives."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Sending…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Send alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Sent to the screen."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 skipped (offline or old firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" skipped (offline or old firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Left empty: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"No screen could show it: check that a screen is online with firmware "},{t:4,k:"version"},{t:3,v:" or newer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"White (default)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Every screen has its own action, with the device name in it. From firmware "},{t:4,k:"version"},{t:3,v:"; update an older screen with its Update button under Screens."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No screen paired yet. Install one via New screen; the action appears once Home Assistant sees the screen."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update needed · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Device name unknown · update the screen"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Show alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Dismiss alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" and search for "},{t:4,k:"esphome"},{t:3,v:`. Choose your screen's action: Home Assistant calls it "Performs the action show_alert of the node `},{t:4,k:"device"},{t:3,v:'".'}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Add action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"device name"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant asks for all seven; leave what you don't use empty ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", off)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fill in the fields."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefer YAML? Choose "},{t:4,k:"edit"},{t:3,v:" on the action and paste the example below."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Example for"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"a screen (not paired yet)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edit in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copy YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"All screens at once"}},text:{t:0,b:{t:2,i:[{t:3,v:"Fire the event "},{t:4,k:"show"},{t:3,v:" with the same fields, and ESP Screens passes the alert on to every screen that is online, including screens you add later. "},{t:4,k:"dismiss"},{t:3,v:" clears it everywhere. In an automation, add the "},{t:4,k:"event"},{t:3,v:" action or paste the example under "},{t:4,k:"edit"},{t:3,v:". Leave out the fields you don't use. ESP Screens has to be running for this."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Fire manual event"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text is free-form; the limit is in bytes, and an accented letter counts as two. What doesn't fit gets an ellipsis (title) or is dropped (subtitle)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Field"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"What it does"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Example"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"number"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"on / off"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entity"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 to 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:", for example "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" and the hex codepoint ("},{t:4,k:"hex"},{t:3,v:") also work. Only these icons are included in the firmware; any other name shows the warning triangle. Tap an icon to copy its name."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handy for notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name or description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Also available: control and weather icons"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copy "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:'No icon for "'},{t:4,k:"query"},{t:3,v:'". Unknown names show the warning triangle ('},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:". These are the pastel shades of the tiles, with dark text. Empty or unknown gives the white card. Tap to copy."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" An alert immediately wakes a dimmed or dark screen and appears above every page, every open light card, and the standby layer."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wakes the screen."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" As long as the card is showing, the backlight stays at normal brightness. Standby and night hours wait. After the button, the regular standby time starts again."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"On until the button."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" waits for the button, however long that takes. With "},{t:4,k:"minute"},{t:3,v:" the card disappears after a minute, but the button closes it sooner."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" blinks the backlight four times when the alert arrives (about a second) and leaves the screen on afterward."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinking."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" A new alert replaces the current one; there's no stack. The replaced alert reports itself as "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Replacing."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" clears the card, for example if the door is already open. Without an alert, that action does nothing."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Closing remotely."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" does nothing; only the button closes it. That way a wake-up tap never accidentally dismisses the alert."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tapping beside the card"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Every end fires the event "},{t:4,k:"event"},{t:3,v:" with "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (the device name) and the "},{t:4,k:"device_id"},{t:3,v:" that Home Assistant adds. Visible under Settings → Tools → Events."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"When"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Waiting until someone presses the button"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use a "},{t:4,k:"bold"},{t:3,v:': orange for the door, red for smoke or water, green for "done". The text always stays dark and readable.'}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color per kind of notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Keep the title "},{t:4,k:"bold"},{t:3,v:"; a screen shows about twenty characters on one line and ends a longer title with an ellipsis. Put details in the subtitle."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"short"}},button:{t:0,b:{t:2,i:[{t:3,v:"A "},{t:4,k:"bold"},{t:3,v:' turns the notification into a question: "Coming", "Seen", "Turn off". The event then tells you who responded.'}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"custom button text"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"For an alert that resolves itself (the door opens, the laundry gets taken out) close it in the same automation with "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Every screen? Fire "},{t:4,k:"event"},{t:3,v:" once (see All screens at once). The screens still work independently and each reports with its own "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Rather "},{t:4,k:"bold"},{t:3,v:" for the automation? Install the ESP Screens skill under Settings → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"ask Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Doorbell: show the alert and wait until someone presses the button."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Someone is coming to the door."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Advanced · local override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Override YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"This small file is yours. It is loaded after the shared screen package and stays in place when ESP Screens updates. Change hardware-specific details here, such as a display model."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"What is safe to change?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pins and other device details. Name, Wi-Fi, API, OTA and package links remain managed."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Active"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to attach"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Local override YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Use example"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 character"},{t:2,i:[{t:4,k:"n"},{t:3,v:" characters"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 line"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lines"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Save & check"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Save override"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile was found for this screen."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Changes here apply on the next build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Save once to attach this file to the profile."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Checking and saving…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The override is kept during firmware updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML saved."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Saved. ESPHome is checking the complete profile…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome is checking the profile…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome is checking the profile… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"The complete profile is valid. Safe to build and install."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome rejected the complete profile. See Firmware & USB for the full log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Replace the current text with the example?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Example loaded. Save it when you are ready."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear the local override?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"The override will be empty after you save."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unknown"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Unavailable"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heat"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Cool"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heat/Cool"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Fan only"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heating"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Cooling"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drying"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preheating"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Opening"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Closing"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Playing"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Away"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Above horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Below horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Docked"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Cleaning"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Returning to dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sunny"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Clear, night"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Cloudy"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Partly cloudy"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Rainy"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Pouring"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy, rainy"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Fog"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hail"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Lightning"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lightning, rainy"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windy"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Not charging"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Cold"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connected"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnected"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Hot"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Light detected"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"No light"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Unlocked"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Locked"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Wet"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Moving"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Not moving"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Plugged in"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Unplugged"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Running"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Not running"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsafe"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Safe"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update available"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activate"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Run"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Press"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Medium"}},high:{t:0,b:{t:2,i:[{t:3}],s:"High"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Middle"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Focus"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Diffuse"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Top"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Both"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Vertical"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Horizontal"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Just now"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min ago"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 hour ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours ago"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Yesterday"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 day ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" days ago"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weeks ago"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 month ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" months ago"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 year ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" years ago"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 hour"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" hours"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Tomorrow"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 day"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" days"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sunday"}},{t:0,b:{t:2,i:[{t:3}],s:"Monday"}},{t:0,b:{t:2,i:[{t:3}],s:"Tuesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Wednesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Thursday"}},{t:0,b:{t:2,i:[{t:3}],s:"Friday"}},{t:0,b:{t:2,i:[{t:3}],s:"Saturday"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},{t:0,b:{t:2,i:[{t:3}],s:"Mon"}},{t:0,b:{t:2,i:[{t:3}],s:"Tue"}},{t:0,b:{t:2,i:[{t:3}],s:"Wed"}},{t:0,b:{t:2,i:[{t:3}],s:"Thu"}},{t:0,b:{t:2,i:[{t:3}],s:"Fri"}},{t:0,b:{t:2,i:[{t:3}],s:"Sat"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"Su"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Tu"}},{t:0,b:{t:2,i:[{t:3}],s:"We"}},{t:0,b:{t:2,i:[{t:3}],s:"Th"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"January"}},{t:0,b:{t:2,i:[{t:3}],s:"February"}},{t:0,b:{t:2,i:[{t:3}],s:"March"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"June"}},{t:0,b:{t:2,i:[{t:3}],s:"July"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"October"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"December"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan"}},{t:0,b:{t:2,i:[{t:3}],s:"Feb"}},{t:0,b:{t:2,i:[{t:3}],s:"Mar"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"Jun"}},{t:0,b:{t:2,i:[{t:3}],s:"Jul"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug"}},{t:0,b:{t:2,i:[{t:3}],s:"Sep"}},{t:0,b:{t:2,i:[{t:3}],s:"Oct"}},{t:0,b:{t:2,i:[{t:3}],s:"Nov"}},{t:0,b:{t:2,i:[{t:3}],s:"Dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday_min"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:"."}},group:{t:0,b:{t:2,i:[{t:3}],s:","}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}},Wh=Vh,Ka=e=>e%10>=2&&e%10<=4&&(e%100<12||e%100>14),za={one_other:e=>e===1?0:1,one_upto_1:e=>Math.abs(e)<=1?0:1,slavic_pl:e=>e===1?0:Ka(e)?1:2,east_slavic:e=>e%10===1&&e%100!==11?0:Ka(e)?1:2,none:()=>0},Bh=Object.assign({"../../screen_manager/translations/de.json":()=>hn(()=>import("./de-BQ4C7BOc.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/en-GB.json":()=>hn(()=>import("./en-GB-v7qWKoyN.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/es.json":()=>hn(()=>import("./es-BwrO3SjC.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/fr.json":()=>hn(()=>import("./fr-DH38JOXX.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/it.json":()=>hn(()=>import("./it-DNPtPX-v.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/nl.json":()=>hn(()=>import("./nl-CYBsud_S.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pl.json":()=>hn(()=>import("./pl-B9ELWpRl.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pt.json":()=>hn(()=>import("./pt-BhcOiGzq.js"),[],import.meta.url).then(e=>e.default)}),Kh=Object.fromEntries(Object.entries(Bh).map(([e,t])=>[e.slice(e.lastIndexOf("/")+1,-5),t])),Rs={...cp},tu=new Set(["en"]),_l={},nu=e=>_l[e]=(t,n)=>Math.min((za[Rs[e]?.plural]||za.one_other)(t),n-1),yl=()=>["en",...Object.keys(Rs).filter(e=>e!=="en").sort()];yl().forEach(nu);const cs=Ih({locale:"en",fallbackLocale:"en",messages:{en:Wh},pluralRules:_l,missingWarn:!1,fallbackWarn:!1,missing:(e,t)=>{}}),c=cs.global.t,zh=(e,t="en")=>cs.global.te(e,t),wl=()=>cs.global.locale.value,qh=e=>Rs[e];function Yh(e=window){try{if(e.parent!==e){const t=e.parent.document.documentElement.lang;if(t)return t}}catch{}return e.navigator.language||"en"}function su(e,t=yl()){const n=i=>t.find(l=>l.toLowerCase()===i.toLowerCase()),s=(e||"").trim();return s?n(s)||n(s.split("-")[0]):void 0}const iu=(e,t=yl())=>su(e,t)||"en";function Gh(e,t,n=Rs[e]){n&&(Rs[e]=n),_l[e]||nu(e),cs.global.setLocaleMessage(e,t),tu.add(e)}const qa={};function ou(e){if(tu.has(e))return Promise.resolve(!0);const t=Kh[e];return t?qa[e]??=t().then(n=>(Gh(e,n),!0),()=>(delete qa[e],!1)):Promise.resolve(!1)}async function Jh(e=iu(Yh())){const t=await ou(e)?e:"en";return cs.global.locale.value=t,document.documentElement.lang=t,t}const os={point:{decimal:".",group:",",from:4},comma:{decimal:",",group:".",from:4},space:{decimal:",",group:" ",from:4}};function lu(e,t){const n=String(e),s=/^(-?)(\d+)(?:\.(\d+))?$/.exec(n);if(!s)return n;const i=s[2].length>=t.from?s[2].replace(/\B(?=(\d{3})+$)/g,t.group):s[2];return`${s[1]}${i}${s[3]!==void 0?t.decimal+s[3]:""}`}const Ya={comma_decimal:"point",decimal_comma:"comma",space_comma:"space"};function Xh(e=window){try{if(e.parent===e)return{};const t=e.parent.document.querySelector("home-assistant")?.hass?.locale,n=["12","24"].includes(t?.time_format)?t.time_format:void 0;return{...n?{clock:n}:{},...Ya[t?.number_format]?{numbers:Ya[t.number_format]}:{}}}catch{return{}}}const Zh=(e,t=wl())=>new Intl.ListFormat(t==="en"?"en-GB":t,{type:"conjunction"}).format(e.map(String)),ze=6,un=8,Ns=un*ze,au=["single","wide","full"],Sn=e=>e===!0?"wide":e===!1?"single":e,us=e=>/^screen\.page_[1-8]$/.test(e)?Number(e.slice(-1)):0,ut=e=>au.includes(e.options?.size)?e.options.size:"single",Do=e=>ut(e)!=="single",ru=e=>ut(e)==="full",cu=e=>e-e%ze,uu=e=>e-e%2,Et=e=>Math.floor(e/ze),kl=e=>Sn(e)==="full"?ze:Sn(e)==="wide"?2:1,Bn=(e,t)=>Sn(t)==="full"?Array.from({length:ze},(n,s)=>cu(e)+s):Sn(t)==="wide"?[e,e+1]:[e],Ga=(e,t)=>Sn(t)==="full"?cu(e):Sn(t)==="wide"?uu(e):e,Xe=e=>e.tiles.map(t=>({tile:t,slot:t.slot}));function du(e){let t=0;return e.map(n=>{const s=ut(n);s==="full"&&t%ze?t+=ze-t%ze:s==="wide"&&t%2===1&&t++;const i=t;return t+=kl(s),i})}function Qh(e){const t=du(e);return e.some((n,s)=>n.slot!==t[s])}function Vi(e){if(e.tiles.some(t=>!Number.isInteger(t.slot))){const t=du(e.tiles);e.tiles.forEach((n,s)=>n.slot=t[s])}e.tiles.sort((t,n)=>t.slot-n.slot)}function ts(e){const t=new Set;for(const{tile:n,slot:s}of e)for(const i of Bn(s,ut(n)))t.add(i);return t}const Fs=(e,t,n)=>Number.isInteger(t)&&t>=0&&t !e.has(s));function wi(e,t,n=0){for(let s=n;s i.includes(h))?u.push(f):r.push({tile:f,slot:f.slot}));for(const f of u){const h=ut(f),p=ts(r);let b=l.map(v=>Ga(v,h)).find(v=>Fs(p,v,h));if(b===void 0&&(b=fu(p,h,f.slot)),b<0)return null;r.push({tile:f,slot:b})}return r.sort((f,h)=>f.slot-h.slot)}function Ot(e,t=1){const n=Math.max(0,...e.map(({tile:s,slot:i})=>i+kl(ut(s))));return Math.min(un,Math.max(1,Math.ceil(n/ze),t||1))}function em(e,t){const n=Array.from({length:t},()=>new Set);let s=0;for(const{tile:h,slot:p}of e){const b=us(h.entity)-1,v=Et(p);b<0||b>=t||v>=t||(s++,n[v].add(b))}const i=h=>{const p=new Set([0]),b=[0];for(;b.length;)for(const v of h(b.shift()))p.has(v)||(p.add(v),b.push(v));return p},l=i(h=>[...n[h]]),r=i(h=>n.flatMap((p,b)=>p.has(h)?[b]:[])),u=Array.from({length:t},(h,p)=>p),f=h=>h.map(p=>p+1);return{tiles:s,targets:f(u.filter(h=>n.some(p=>p.has(h)))),unreachable:f(u.filter(h=>!l.has(h))),noWayBack:f(u.filter(h=>l.has(h)&&!r.has(h)))}}function tm(e){const t=e.split(".")[0];return t==="sun"?{options:{display:"sunpath",size:"wide"}}:t==="weather"?{options:{display:"forecast",size:"wide"}}:us(e)?{}:t==="screen"?{options:{display:"digital",size:"wide"}}:{}}const hu=e=>({entity:e,name:"",slot:-1,...tm(e)});function mu(e,t){const n=e.entity.split(".")[0],s=t.controls?.[n],i=e.options||{};if(!s||!["wide","full"].includes(i.size)||(i.display||"standard")!=="standard"||i.inline==="slider")return null;const l=i.controls??(i.size==="full"?"none":s.default);return l==="none"?null:l}function nm(e,t){const n=mu(e,t);return n?t.controls?.[e.entity.split(".")[0]]?.choices.find(s=>s.key===n)?.label||n:c("editor.inspect.control_none")}const Uo=e=>(/^(\d+)\.(\d+)\.(\d+)$/.exec(e||"")||[]).slice(1).map(Number);function dn(e,t){const[n,s]=[Uo(e),Uo(t)];if(n.length!==3||s.length!==3)return!1;for(let i=0;i<3;i++)if(n[i]!==s[i])return n[i]>s[i];return!0}const sm=(e,t,n,s)=>dn(e,`${t}.${n}.${s}`),im=Ns;function om(e){return Uo(e).length!==3?10:dn(e,"0.2.62")?im:dn(e,"0.2.7")?20:10}const lm=["standard","watch","forecast","graph","digital","analog","sunpath"],bu=e=>lm.includes(e)?c(`editor.displays.${e}`):e,am=e=>c(`editor.sizes.${au.includes(e)?e:"single"}`),Ja=["light","switch","input_boolean","fan","media_player","climate"],rm=["light","fan","cover","number","input_number","media_player"],cm={light:["☀","#ad7600","#fff3d3"],climate:["❄","#c86620","#ffebdc"],vacuum:["◉","#008577","#def3ed"],fan:["✣","#008aab","#def5fa"],cover:["▤","#8053af","#eee5f8"],media_player:["▶","#007cad","#def2fc"],sensor:["⌁","#3476b1","#e5effa"],binary_sensor:["◈","#ad7600","#fff3d3"],switch:["⏻","#ad7600","#fff3d3"],input_boolean:["⏻","#ad7600","#fff3d3"],scene:["✦","#8053af","#eee5f8"],script:["▷","#8053af","#eee5f8"],weather:["☁","#007cad","#def2fc"],number:["±","#008577","#def3ed"],input_number:["±","#008577","#def3ed"],select:["≡","#5862af","#eaecfa"],input_select:["≡","#5862af","#eaecfa"],button:["↗","#5862af","#eaecfa"],input_button:["↗","#5862af","#eaecfa"],screen:["◷","#25282c","#e9ecf1"],sun:["☼","#c86620","#ffebdc"],timer:["⏱","#008577","#def3ed"],person:["☺","#2f7d32","#e1f2e2"],camera:["◧","#3d4a57","#e6ebf0"],image:["◧","#3d4a57","#e6ebf0"]};function jt(e){const t=e.split(".")[0],n=cm[t];return n?[c(`editor.domains.${t}`),...n]:[c("editor.domains.entity"),"◇","#637184","#edf0f4"]}const vu={clock:"clock-outline",analog:"clock-outline",date:"calendar"},at=e=>JSON.stringify(e),Ae=e=>String.fromCodePoint(parseInt(e,16));function Wi(e,t=new Date,n){const s=String(t.getMinutes()).padStart(2,"0");if(e)return`${String(t.getHours()).padStart(2,"0")}:${s}`;const i=`${t.getHours()%12||12}:${s}`;return n?`${i} ${c(`screen.time.${t.getHours()<12?"am":"pm"}`,{},{locale:n})}`:i}const $l=(e=new Date,t="en")=>c("screen.date.top_bar",{weekday:c(`screen.date.weekdays_short.${e.getDay()}`,{},{locale:t}),weekday_min:c(`screen.date.weekdays_min.${e.getDay()}`,{},{locale:t}),day:e.getDate(),month:c(`screen.date.months_short.${e.getMonth()}`,{},{locale:t})},{locale:t});function um(e,t=Math.floor(Date.now()/1e3),n="en"){const s=t-e,i=Math.abs(s),l=u=>Math.floor(i/u),r=(u,f)=>f===void 0?c(`screen.time.${u}`,{},{locale:n}):c(`screen.time.${u}`,f,{locale:n});return s<0?i<3600?r("in_minutes",Math.max(1,l(60))):i<86400?r("in_hours",l(3600)):i<172800?r("tomorrow"):r("in_days",l(86400)):i<60?r("just_now"):i<3600?r("minutes_ago",l(60)):i<86400?r("hours_ago",l(3600)):i<172800?r("yesterday"):i<604800?r("days_ago",l(86400)):i<2592e3?r("weeks_ago",l(604800)):i<31536e3?r("months_ago",l(2592e3)):r("years_ago",l(31536e3))}const dm={guition:{width:448,top:36,name:27,text:21,icon:26},cyd:{width:298,top:24,name:18,text:14,icon:18}};let ps;const jo=new Map,fm=()=>jo.clear();function Dn(e,t){const n=`${t}|${e}`;let s=jo.get(n);if(!s){if(ps===void 0&&(ps=document.createElement("canvas").getContext("2d")),ps){ps.font=t;const i=ps.measureText(e);s={left:-i.actualBoundingBoxLeft,right:i.actualBoundingBoxRight,top:-i.actualBoundingBoxAscent,bottom:i.actualBoundingBoxDescent,advance:i.width}}else{const i=Number(/(\d+(?:\.\d+)?)px/.exec(t)?.[1]||14),l=[...e].length*i*.55;s={left:0,right:l,top:-i*.72,bottom:i*.02,advance:l}}jo.set(n,s)}return s}const pm=e=>({name:`500 ${e.name}px "Bar Roboto"`,text:`400 ${e.text}px "Bar Roboto"`,icon:`${e.icon}px "Tile Icons"`});function hm(e){return{icon:Math.max(2,Math.floor((e*4+5)/10)),item:Math.max(6,Math.floor((e*125+50)/100)),name:Math.max(8,Math.floor((e*16+5)/10))}}function gu(e,t,n,s){const i=pm(t),l=Dn("0",i.text),r=Math.round(l.bottom-l.top),u=hm(r),f=Dn(String.fromCodePoint(983376),i.icon),h=Math.round(f.bottom-f.top),p=e.map((C,B)=>{const O=s(C),E={index:B,item:C,view:O,shown:O.shown,width:0};return O.analog?(E.dial=h,E.width=h,E):(O.icon&&(E.icon={glyph:Ae(O.icon),ink:Dn(Ae(O.icon),i.icon)},E.width+=E.icon.ink.right-E.icon.ink.left),O.text&&(E.text={value:O.text,ink:Dn(O.text,i.text)},E.width+=(E.icon?u.icon:0)+E.text.ink.right-E.text.ink.left),E)}),b=p.filter(C=>C.shown),v=Dn(n,i.name).advance,y=Math.min(v,Math.floor(t.width*35/100)),I=C=>C.reduce((B,O)=>B+O.width,0)+Math.max(0,C.length-1)*u.item;let T=0;for(;T t.width;)T++;const $=b.slice(T),A=new Set(b.slice(0,T).map(C=>C.index));let S=t.width-I($);for(const C of $)C.x=S,S+=C.width+u.item;const D=$.length?$[0].x-u.name:t.width;return{metrics:t,fonts:i,cap:r,zero:l,gaps:u,parts:p,placed:$,dropped:A,nameText:n,natural:v,nameRoom:D}}function mm(e,t,n){if(Dn(e,t).advance<=n)return e;const s=[...e];for(;s.length&&Dn(s.join("")+"...",t).advance>n;)s.pop();return s.join("")+"..."}function bm(e){"fonts"in document&&Promise.all([document.fonts.load('500 27px "Bar Roboto"',"Studio 0"),document.fonts.load('400 21px "Bar Roboto"',"Away 0"),document.fonts.load('26px "Tile Icons"',String.fromCodePoint(983376))]).then(()=>{fm(),e()}).catch(()=>{})}let _u="";function vm(e){_u=e||""}async function xl(e,t={}){const n=await fetch(`api/${e}`,{...t,headers:{"Content-Type":"application/json","X-Screen-CSRF":_u,"X-ESP-Screens-Language":wl(),...t.headers}});if(!n.ok){let s=c("editor.api.failed");try{const i=(await n.json())?.error;typeof i=="string"&&i.trim()&&(s=i)}catch{}throw new Error(s)}return n}const Nt=async e=>(await xl(e)).json(),ft=async(e,t,n,s={})=>{const l=await(await xl(e,{method:t,body:n===void 0?void 0:JSON.stringify(n),...s})).text();return l?JSON.parse(l):null},m=qn({inventory:{screens:[],entities:[]},connected:!1,reachable:!0,selected:null,layout:null,dirty:!1,busy:!1,saved:0,tab:"layout",selectedTile:null,inspector:null,iconPickerOpen:!1,actionPickerOpen:!1,actionSearch:"",insertAt:-1,filter:"",search:"",capabilities:{},entityActions:{},topbarPreviews:{},topbarAdded:null,topbarOverflow:[],settingEdits:{},settingPending:!1,updating:[],toast:null,now:Date.now(),fontsVersion:0,route:location.hash,overrideProfile:null,overrideFriendly:"",drag:{active:!1,moving:null,preview:null},menuOpen:!1,liveStates:{},room:"",hidePlaced:!1,palette:!1,firmwareJob:null}),_t=k(()=>m.inventory.screens.find(e=>e.id===m.selected)),ls=e=>(e&&"firmware_known"in e?e.firmware_known:e?.firmware)||"",yu=k(()=>ls(_t.value)),kn=(e,t,n)=>sm(yu.value,e,t,n),Kn=k(()=>{const e=_t.value?.tile_limit;return typeof e=="number"&&Number.isInteger(e)&&e>0?e:om(yu.value)}),Xa=k(()=>{const e=_t.value?.full_page;return typeof e=="boolean"?e:kn(0,2,62)}),gm=k(()=>{const e=_t.value?.page_tiles_repeat;return typeof e=="boolean"?e:kn(0,2,65)}),Bi=e=>gm.value&&us(e)>0,Sl=k(()=>_t.value?.board==="guition"),wu=k(()=>dm[Sl.value?"guition":"cyd"]),co=k(()=>m.selectedTile&&m.layout?.tiles.includes(m.selectedTile)?m.selectedTile:void 0),Cl=e=>!!m.selectedTile&&xe(m.selectedTile)===xe(e);let Za=0;function Ce(e,t){m.toast={message:e,action:t},clearTimeout(Za),Za=window.setTimeout(()=>m.toast=null,t?8e3:5e3)}function _m(){m.toast=null}async function It(e,t,n="api_key"){try{if(!navigator.clipboard||!window.isSecureContext)throw new Error;await navigator.clipboard.writeText(e),Ce(c(`editor.copy.${n}.copied`))}catch{if(t){const s=document.createRange();s.selectNodeContents(t);const i=window.getSelection();i?.removeAllRanges(),i?.addRange(s)}Ce(c(document.execCommand("copy")?`editor.copy.${n}.copied`:`editor.copy.${n}.selected`))}}function ki(){const e="/config/integrations/dashboard";try{window.top.location.assign(e)}catch{window.open(e,"_blank")}}const ym=["","#settings","#new-screen","#firmware","#alerts","#override"],$t=k(()=>ym.includes(m.route)?m.route:"");function He(e){if(location.hash===e){m.route=e;return}location.hash=e}window.addEventListener("hashchange",()=>{m.route=location.hash,window.scrollTo(0,0)});function zs(e){return m.inventory.entities.find(t=>t.id===e)?.name||m.inventory.builtin?.find(t=>t.id===e)?.name||e}let uo={source:null,byName:{}};function qs(e){return uo.source!==m.inventory.icons&&(uo={source:m.inventory.icons,byName:Object.fromEntries((m.inventory.icons?.groups||[]).flatMap(t=>t.icons.map(n=>[n.name,n])))}),e?uo.byName[e]:void 0}function Cn(e){const t=m.inventory.icons;if(!t)return"F0335";const n=m.inventory.entities.find(i=>i.id===e),s=e.split(".")[0];return t.builtin?.[e]?t.builtin[e]:n?.icon?n.icon:s==="weather"?t.weather[n?.state||""]||t.weather.partlycloudy:s==="sun"?t.sun[n?.state||""]||t.sun.below_horizon:t.defaults[s]||t.fallback}const vs=e=>qs(e.options?.icon)?.cp||Cn(e.entity),fo=new Set;async function Ki(e){const t=[...new Set(e)].filter(n=>!fo.has(n)&&!n.startsWith("screen."));if(t.length){t.forEach(n=>fo.add(n));try{for(let n=0;n `entity=${encodeURIComponent(i)}`).join("&");Object.assign(m.capabilities,(await Nt(`capabilities?${s}`)).capabilities||{})}}catch{t.forEach(n=>fo.delete(n))}}}const po=new Set;async function wm(e){if(!po.has(e)){po.add(e);try{m.entityActions[e]=(await Nt(`entity-actions?entity=${encodeURIComponent(e)}`)).actions}catch{po.delete(e)}}}let ho=!1;async function zi(){const e=[...new Set((m.layout?.tiles||[]).map(t=>t.entity).filter(t=>!t.startsWith("screen.")))];if(!(!e.length||ho)){ho=!0;try{for(let t=0;t `entity=${encodeURIComponent(s)}`).join("&");Object.assign(m.liveStates,(await Nt(`states?${n}`)).states||{})}}catch{}finally{ho=!1}}}function km(e){const t=m.liveStates[e];if(t)return t;const n=m.inventory.entities.find(s=>s.id===e);return n?.state?{state:n.state,word:null,a:{}}:null}let Ho=0;function pt(){m.dirty=!0,m.saved=0,Ho++}function ku(e){if(e===m.selected&&m.layout&&m.dirty){Ze(),m.tab="layout",m.menuOpen=!1,He("");return}if(e!==m.selected&&m.dirty&&!confirm(c("editor.screen_view.confirm.switch")))return;e!==m.selected&&(Us(),m.settingEdits={}),m.selected=e,m.selectedTile=null,m.inspector=null,m.tab="layout",m.menuOpen=!1;const t=m.inventory.screens.find(s=>s.id===e);if(!t){m.layout=null;return}const n=JSON.parse(JSON.stringify(t.layout));Vi(n),n.pages=Ot(Xe(n),n.pages),m.layout=n,m.insertAt=-1,m.dirty=!1,m.saved=0,qi(0),Ki(n.tiles.map(s=>s.entity)),zi(),He("")}const $m=()=>m.layout?Xe(m.layout):[];function xm(e){const t=m.layout,n=t.tiles.map(i=>`${i.entity}@${i.slot}`).join();for(const{tile:i,slot:l}of e)i.slot=l,t.tiles.includes(i)||t.tiles.push(i);Vi(t),t.pages=Ot(Xe(t),t.pages);const s=t.tiles.map(i=>`${i.entity}@${i.slot}`).join()!==n;return s&&pt(),s}function Ys(e,t){if(!m.layout)return!1;Ki([e.entity]);const n=pu(m.layout.tiles,e,t),s=n?xm(n):!1;return s&&!m.liveStates[e.entity]&&zi(),s}function $u(e){const t=m.layout;if(!t||!Bi(e)&&t.tiles.some(i=>i.entity===e)||t.tiles.length>=Kn.value)return;const n=hu(e),s=m.insertAt>=0?m.insertAt:wi(ts(Xe(t)),ut(n));m.insertAt=-1,s>=0&&Ys(n,s)&&Vo(n)}function xu(e){const t=m.layout;if(!t)return;const n=t.tiles.indexOf(e);n<0||(t.tiles.splice(n,1),Cl(e)&&Ze(),pt(),t.pages=Ot(Xe(t),t.pages),Ce(c("editor.layout.removed",{name:e.name||zs(e.entity)}),{label:c("editor.common.undo"),run:()=>Ys(e,e.slot)}))}function Qa(){const e=m.layout;e&&(e.pages=Math.min(un,Ot(Xe(e),e.pages)+1),pt())}function Sm(e){const t=m.layout;if(t){for(const n of t.tiles)Et(n.slot)>e&&(n.slot-=ze);t.pages=Math.max(1,Ot(Xe(t),t.pages)-1),pt()}}function Cm(e,t){const n=m.layout;if(!n||!Number.isInteger(t)||t<0||t>=un||t===Et(e.slot))return!1;const s=wi(ts(Xe(n).filter(l=>l.tile!==e)),ut(e),t*ze),i=Ys(e,s>=0&&Et(s)===t?s:t*ze);return i||Ce(c("editor.layout.no_room",{page:t+1})),i}function Tm(){const e=m.layout;if(!e)return 1;const t=m.drag.preview||Xe(e),n=Ot(t,e.pages);return m.drag.active&&n h.key!=="none"&&i.controls.includes(h.key))?.key||"none"),pt();const f=m.layout;if(f){if(ru(e)&&r!=="full"){const h=Et(e.slot),p=f.tiles.filter(y=>y!==e&&Et(y.slot)===h),b=ts(Xe(f).filter(y=>y.tile!==e&&!p.includes(y.tile))),v=[];for(const y of p){const I=wi(b,ut(y),(h+1)*ze);if(I<0){v.length=0;break}v.push([y,I]);for(const T of Bn(I,ut(y)))b.add(T)}if(v.length===p.length){for(const[y,I]of v)y.slot=I;e.slot=h*ze}else{const y=wi(ts(Xe(f).filter(I=>I.tile!==e)),"full");y>=0?e.slot=y:(e.options.size=r,Ce(c("editor.layout.no_free_page")))}}else if(Do(e)&&!l){const h=ts(Xe(f).filter(v=>v.tile!==e)),p=uu(e.slot),b=Fs(h,p,"wide")?p:fu(h,"wide",p);b>=0&&(e.slot=b)}Vi(f),f.pages=Ot(Xe(f),f.pages)}}function Em(e,t){const n=`screen.page_${t}`,s=m.layout;return!s||n===e.entity||!us(n)?!1:!Bi(n)&&s.tiles.some(i=>i.entity===n)?(Ce(c("editor.layout.page_taken",{page:t})),!1):(e.entity=n,s.pages=Math.max(Ot(Xe(s),s.pages),t),pt(),!0)}function Vo(e){Cl(e)||(m.iconPickerOpen=!1,m.actionPickerOpen=!1,m.actionSearch=""),m.selectedTile=e,m.inspector={kind:"tile"},Ki([e.entity])}function Xt(e){m.inspector?.kind==="bar"&&m.inspector.index===e||(m.iconPickerOpen=!1),m.selectedTile=null,m.inspector={kind:"bar",index:e}}function er(){m.selectedTile=null,m.inspector={kind:"bar-add"}}function Ze(){m.inspector=null,m.selectedTile=null}async function Wo(){if(m.busy||!m.layout||!m.selected)return;m.busy=!0;const e=Ho,t=m.selected;try{const{settings:n,...s}=m.layout;if(await ft(`screens/${encodeURIComponent(m.selected)}`,"PUT",s),m.selected!==t){const i=m.inventory.screens.find(l=>l.id===t)?.name;Ce(i?c("editor.screen_view.saved.other",{name:i}):c("editor.screen_view.saved.other_unnamed"))}else Ho===e?(m.dirty=!1,m.saved=Date.now(),Ce(c("editor.screen_view.saved.current"))):Ce(c("editor.screen_view.saved.newer_edit"));await Tn()}catch(n){Ce(n.message)}finally{m.busy=!1}}const zn=e=>!!(e&&e.alert_action&&dn(ls(e),m.inventory.alerts?.min_firmware||"0.2.31"));async function Su(e){try{await ft(`screens/${encodeURIComponent(e.id)}/identify`,"POST"),Ce(c("editor.screen_view.identified",{name:e.name}))}catch(t){Ce(t.message)}}async function Am(e,t){return await ft("alerts/test","POST",{screen:e,data:t})}const Pm=["title","tiles","header","pages"];function Cu(e,t){const n=m.layout;if(!n)return;const s=(Array.isArray(e.tiles)?e.tiles:[]).filter(u=>!!(u&&typeof u=="object"&&typeof u.entity=="string"&&u.entity.includes("."))).map(u=>({entity:u.entity,name:typeof u.name=="string"?u.name:"",slot:Number.isInteger(u.slot)?u.slot:-1,...u.options&&typeof u.options=="object"?{options:{...u.options}}:{}})),i=new Set,l=s.filter(u=>Bi(u.entity)||!i.has(u.entity)&&i.add(u.entity)),r=l.slice(0,Kn.value);n.tiles=r,e.header&&Array.isArray(e.header.items)?n.header={items:e.header.items.map(u=>({...u}))}:delete n.header,n.pages=Number.isInteger(e.pages)?e.pages:1,Vi(n),n.pages=Ot(Xe(n),n.pages),Ze(),pt(),Ki(r.map(u=>u.entity)),zi(),qi(0),Ce(t(r.length n.id===e);!t||!m.layout||Cu(JSON.parse(JSON.stringify(t.layout)),n=>n?c("editor.layout.copied_part",{name:t.name,...n}):c("editor.layout.copied",{name:t.name}))}function Im(){const e=m.layout;if(!e)return"";const t={esp_screens_layout:1};for(const n of Pm)e[n]!==void 0&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Tu(){const e=Im();if(!e)return;const t=`${(_t.value?.name||"screen").toLowerCase().replace(/[^a-z0-9]+/g,"-")}.layout.json`,n=URL.createObjectURL(new Blob([e],{type:"application/json"})),s=document.createElement("a");s.href=n,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(n),5e3),It(e,void 0,"layout_json")}function Lm(e){let t;try{t=JSON.parse(e)}catch{Ce(c("editor.layout.not_json"));return}if(!t||typeof t!="object"||!Array.isArray(t.tiles)){Ce(c("editor.layout.no_tiles_in_file"));return}Cu(t,n=>n?c("editor.layout.imported_part",n):c("editor.layout.imported"))}function Mm(e){const t=m.inventory.updates?.target,n=m.inventory.changelog;if(!Array.isArray(n)||!t)return[];const s=ls(e),i=[];for(const l of n)if(!(dn(l.firmware,t)&&l.firmware!==t)&&!(s&&dn(s,l.firmware)))for(const r of l.lines)i.includes(r)||i.push(r);return i}let mo=!1;async function Rm(){if(!mo){mo=!0;try{const e=await Nt("firmware");m.firmwareJob={job:e.job,logs:e.logs||[]}}catch{}finally{mo=!1}}}const Bo=()=>m.inventory.screens.some(e=>e.update?.state==="running")||m.updating.length>0;function Xn(e){const t=e.update||{};if(!(t.state==="running"||m.updating.includes(e.id)))return null;const n=m.firmwareJob?.job?.stage;return t.phase==="verify"?{percent:78,text:_s("verify")}:t.phase==="settle"?{percent:92,text:_s("settle")}:t.phase==="install"||!t.phase?n==="upload"?{percent:66,text:c("editor.update.writing")}:n?{percent:40,text:c("editor.update.building")}:{percent:12,text:_s("install")}:{percent:12,text:_s(t.phase)}}const fn=()=>m.layout?.header?.items??(m.layout?.settings?.show_clock??!0?[{type:"clock"}]:[]),gn=()=>m.inventory.header?.max_items||6;function Ds(e){m.layout&&(m.layout.header={items:e},pt(),qi())}let tr=0;function qi(e=150){clearTimeout(tr),tr=window.setTimeout(async()=>{const t=fn();if(t.some(n=>n.type==="entity"))try{const n=await ft("header-preview","POST",{header:{items:t}});t.forEach((s,i)=>m.topbarPreviews[at(s)]=n.items[i])}catch{}},e)}function gs(e){return e.type==="entity"?zs(e.entity):m.inventory.header?.builtin.find(t=>t.type===e.type)?.label||e.type}function bn(e){const t=new Date(m.now);if(e.type==="clock")return{text:Wi(as.value,t,on.value),shown:!0};if(e.type==="date")return{text:$l(t,on.value),shown:!0};if(e.type==="analog")return{analog:!0,shown:!0};const n=m.topbarPreviews[at(e)];return n?{icon:n.i||null,text:n.k==="ago"?um(n.e,Math.floor(m.now/1e3),on.value):n.t,color:n.c?`#${n.c}`:null,shown:n.shown}:{icon:e.icon==="none"?null:qs(e.icon)?.cp||Cn(e.entity),text:"…",shown:!0,loading:!0}}function bo(e,t){const n=[...fn()];return t<0||t>=n.length||e===t?!1:(n.splice(t,0,...n.splice(e,1)),Ds(n),!0)}function nr(e){const t=[...fn()],[n]=t.splice(e,1);n&&(m.inspector?.kind==="bar"&&Ze(),Ds(t),Ce(c("editor.topbar.removed",{name:gs(n)}),{label:c("editor.common.undo"),run:()=>{const s=[...fn()];s.splice(Math.min(e,s.length),0,n),Ds(s)}}))}function vo(e){const t=fn();if(t.length>=gn())return Ce(c("editor.topbar.full",gn()));if(t.some(n=>at(n)===at(e)))return Ce(c("editor.topbar.already"));m.topbarAdded={key:at(e),time:Date.now()},Ds([...t,e]),Xt(t.length)}const Nm=[{group:"brightness",icon:"F0599",rows:[{key:"brightness",kind:"number",min:5,max:100,step:5,unit:"%"},{key:"dark_mode",kind:"toggle"},{key:"standby_enabled",kind:"toggle"},{key:"standby_seconds",kind:"duration",min:60,max:86400,needs:"standby_enabled"},{key:"standby_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"standby_enabled",cap:"brightness"}]},{group:"night",icon:"F0594",rows:[{key:"night_enabled",kind:"toggle"},{key:"night_start",kind:"moment",needs:"night_enabled"},{key:"night_end",kind:"moment",needs:"night_enabled"},{key:"night_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"night_enabled",cap:"brightness"}]},{group:"screen",icon:"F0379",rows:[{key:"auto_home",kind:"toggle"},{key:"auto_home_seconds",kind:"duration",min:30,max:3600,needs:"auto_home"},{key:"home_on_standby",kind:"toggle"},{key:"swipe_pages",kind:"toggle"},{key:"page_buttons",kind:"toggle"},{key:"rotation",kind:"choice",options:[0,90,180,270]}]}],go=e=>c(`editor.screen_settings.rows.${e.key}`),Fm=(e,t)=>`${t}°`;function Eu(e=$m(),t=m.layout?Ot(e,m.layout.pages):1){const n=xi();if(t<2||n.page_buttons!==!1||n.swipe_pages!==!1)return"";const{tiles:s,targets:i,unreachable:l,noWayBack:r}=em(e,t);if(!l.length&&!r.length)return"";const u=v=>c("editor.screen_settings.reach.pages",{list:Zh(v)},v.length),f=l.filter(v=>!i.includes(v)),h=l.filter(v=>i.includes(v)),p=f.length===1?"one":"more",b=[c("editor.screen_settings.reach.intro")];return s&&f.length?b.push(c(`editor.screen_settings.reach.tiles_missing_${p}`,{targets:u(i),missing:u(f)},s)):s?b.push(c("editor.screen_settings.reach.tiles",{targets:u(i)},s)):f.length?b.push(c(`editor.screen_settings.reach.none_missing_${p}`,{missing:u(f)})):b.push(c("editor.screen_settings.reach.none")),h.length&&b.push(c("editor.screen_settings.reach.cut_off",{pages:u(h)})),r.length&&b.push(c("editor.screen_settings.reach.no_way_back",{pages:u(r)})),b.join(" ")}const Au=4e3;let _n={},ns=null,$i=0,li=null;const Tl=()=>_t.value?.settings;function xi(){const e=Tl(),t={...e?.values||{}};for(const[n,s]of Object.entries(m.settingEdits))t[n]=s.value;return t}const Dm=e=>e<300?30:e<900?60:e<3600?300:e<7200?900:1800;function sr(e,t,n,s,i){if(e.kind==="moment"){let u=s&&t%60?Math.floor(t/60)*60+(n>0?60:0):t+n*(s?60:15);return u%=1440,u<0?u+1440:u}const l=e.kind==="duration"?Dm(n<0?t-1:t):e.step,r=e.cap?Math.min(e.max,i[e.cap]):e.max;return Math.min(r,Math.max(e.min,t+n*l))}function Um(e){if(e<60)return c("editor.screen_settings.duration.seconds",{n:e});if(e<3600)return c("editor.screen_settings.duration.minutes",{n:Math.floor(e/60)});const t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n?c("editor.screen_settings.duration.hours_minutes",{h:t,m:String(n).padStart(2,"0")}):c("editor.screen_settings.duration.hours",{n:t})}function jm(e,t){const n=Math.floor(e/60),s=String(e%60).padStart(2,"0");return t?`${String(n).padStart(2,"0")}:${s}`:c(n<12?"editor.screen_settings.time.am":"editor.screen_settings.time.pm",{time:`${n%12||12}:${s}`})}function Hm(e,t){const n=t[e.key];return n==null?"—":e.kind==="number"?`${n}${e.unit||""}`:e.kind==="duration"?Um(n):e.kind==="moment"?jm(n,as.value):""}function ni(e,t,n){if(ns&&ns!==m.selected&&Object.keys(_n).length){Us(),Ce(c("editor.screen_settings.other_screen_busy"));return}ns=m.selected;const s=xi();if(m.settingEdits[e]={value:t,at:Date.now()},_n[e]=t,e==="brightness")for(const i of["standby_brightness","night_brightness"])s[i]>t&&(m.settingEdits[i]={value:t,at:Date.now()});m.settingPending=!0,clearTimeout($i),$i=window.setTimeout(()=>Us(),n)}async function Us(e=!1){if(clearTimeout($i),li||!Object.keys(_n).length||!ns)return;const t=ns,n=_n;_n={};const s=xl(`screens/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify({settings:n}),keepalive:e});li=s;try{const i=await(await s).json(),l=m.inventory.screens.find(r=>r.id===t);l&&(l.settings=i)}catch(i){if(Ce(i.message),t===m.selected)for(const l of Object.keys(n))delete m.settingEdits[l];if(t===m.selected&&n.brightness!==void 0)for(const l of["standby_brightness","night_brightness"])delete m.settingEdits[l]}finally{li=null,Object.keys(_n).length?$i=window.setTimeout(()=>Us(),150):ns=null,m.settingPending=!!Object.keys(_n).length,t===m.selected&&Si(),setTimeout(()=>{t===m.selected&&Si()},Au+100)}}function Si(){const e=Tl();for(const[t,n]of Object.entries(m.settingEdits))_n[t]!==void 0||li||(e&&e.values[t]===n.value||Date.now()-n.at>Au)&&delete m.settingEdits[t]}const _s=e=>["install","verify","settle"].includes(e||"")?c(`editor.update.phases.${e}`):c("editor.update.starting");async function Ko(e,t){m.updating.push(e.id);try{await ft(`screens/${encodeURIComponent(e.id)}/update`,"POST",t?{host:t}:{}),await Tn()}catch(n){m.updating=m.updating.filter(s=>s!==e.id),Ce(n.message)}}async function ir(){try{await ft("updates/run","POST"),await Tn()}catch(e){Ce(e.message)}}async function Vm(e){try{await ft("updates","PUT",{auto:e}),m.inventory.updates&&(m.inventory.updates.auto=e),Ce(c(e?"editor.settings.updates.auto_on":"editor.settings.updates.auto_off"))}catch(t){Ce(t.message)}}async function Wm(){try{m.inventory.claude_skill=await ft("claude-skill","POST"),Ce(c(m.inventory.claude_skill?.restart?"editor.settings.claude.installed_restart":"editor.settings.claude.installed"))}catch(e){Ce(e.message)}}const on=k(()=>iu(m.inventory.language?.effective));Ct(on,e=>ou(e),{immediate:!0});const jn=(e,t={})=>c(e,t,{locale:on.value}),Bm=e=>m.inventory.language?.languages?.find(t=>t.code===e)?.name||qh(e||"")?.name||e||"",Pu=e=>!!(e.update?.available||e.update?.language),or=()=>c("editor.update.new_language",{name:Bm(m.inventory.language?.effective)}),as=k(()=>m.inventory.language?.clock_effective!=="12"),Km=k(()=>{const e=m.inventory.language;return{...os[e?.numbers_effective||"point"]||os.point,from:(e?.group_min||1)>=2?5:4}}),zm=k(()=>{const e=m.inventory.language;return{...os[e?.numbers_auto||"point"]||os.point,from:(e?.group_min_auto||1)>=2?5:4}});function lr(e){return!e||e==="°"?e||"":e==="%"?m.inventory.language?.percent_space?" %":"%":` ${e}`}const qm=e=>m.inventory.builtin?.find(t=>t.id===e)?.screen_name;async function ar(e){try{const t=await ft("language","PUT",e);return t?.language&&(m.inventory.language=t.language),Ce(c(e.setting===void 0?"editor.settings.language.saved":"editor.settings.language.saved_language")),await Tn(),!0}catch(t){return Ce(t.message),!1}}async function Tn(e=!0){try{const t=await Nt(e?"inventory":"inventory?light=1");m.inventory=e?t:{...m.inventory,...t},t.csrf&&vm(t.csrf),m.connected=!!m.inventory.connected,m.reachable=!0;for(const n of m.inventory.screens)n.update?.state==="running"&&(m.updating=m.updating.filter(s=>s!==n.id));m.selected&&Si()}catch{m.reachable=!1}}function Ym(e){m.inventory={...m.inventory,...e},m.connected=!!m.inventory.connected;for(const t of m.inventory.screens)t.update?.state==="running"&&(m.updating=m.updating.filter(n=>n!==t.id));m.selected&&Si()}let rr=0,zo=Date.now(),Ci=!1,hs=null;function Gm(){hs||typeof EventSource>"u"||(hs=new EventSource(`api/events?language=${encodeURIComponent(wl())}`),hs.onopen=()=>{Ci=!0,js()},hs.onmessage=e=>{document.hidden||Ym(JSON.parse(e.data))},hs.onerror=()=>{Ci=!1,js()})}function js(){clearTimeout(rr);const e=Ci?6e4:m.inventory.updates?.busy?3e3:1e4;rr=window.setTimeout(async()=>{if(!document.hidden){const t=Date.now()-zo>=3e5;t&&(zo=Date.now()),(t||!Ci)&&await Tn(t)}js()},e)}let cr=!1;function Jm(){cr||(cr=!0,Tn(),Gm(),js(),bm(()=>m.fontsVersion++),setInterval(()=>{!m.layout||document.hidden||m.drag.active||(m.now=Date.now(),qi(0))},3e4),setInterval(()=>{!document.hidden&&m.layout&&m.tab==="layout"&&$t.value===""&&zi()},8e3),setInterval(()=>{!document.hidden&&Bo()?Rm():m.firmwareJob&&!Bo()&&(m.firmwareJob=null)},3e3),document.addEventListener("visibilitychange",async()=>{document.hidden||(zo=Date.now(),m.now=Date.now(),await Tn(),js())}),window.addEventListener("pagehide",()=>Us(!0)),window.addEventListener("beforeunload",e=>{m.dirty&&(e.preventDefault(),e.returnValue="")}))}const Xm={class:"side"},Zm={class:"label"},Qm={id:"screens"},eb=["aria-current","onClick"],tb={class:"txt"},nb=["aria-label","title"],sb={key:1,class:"pill"},ib={key:2,class:"spin small"},ob=["onSubmit"],lb=["placeholder","aria-label"],ab={type:"submit",class:"btn mini primary"},rb=["aria-label"],cb=["disabled","title","onClick"],ub={key:2,class:"whatsnew"},db=["aria-valuenow"],fb={class:"progress-text"},pb=["title"],hb=["title"],mb={id:"pending"},bb={class:"pending-actions"},vb=["onClick"],gb=["aria-current"],_b={class:"txt"},yb={class:"more"},wb={class:"label"},kb=["aria-current"],$b={class:"mdi"},xb={class:"txt"},Sb=["aria-current"],Cb={class:"mdi"},Tb={class:"txt"},Eb=["aria-current"],Ab={class:"mdi"},Pb={class:"txt"},Ob={class:"txt"},Ib=Le({__name:"Sidebar",setup(e){const t=ke(null),n=ke(""),s=p=>{const b=p.update||{};return!!b.language&&(!b.target||dn(ls(p),b.target))};function i(p){const b=p.update||{};return b.state==="running"||m.updating.includes(p.id)?{kind:"running",text:_s(b.phase)}:b.state==="queued"?{kind:"queued",text:c("editor.sidebar.update.queued")}:Pu(p)&&p.online?{kind:"available",text:s(p)?or():c("editor.sidebar.update.available",{version:b.target})}:b.result&&Date.now()/1e3-b.result.time<86400?{kind:b.result.state==="failed"?"failed":"done",text:b.result.message}:null}const l=p=>[...p.update?.language&&!s(p)?[or()]:[],...Mm(p)];function r(p){const b=p.update||{};b.host&&b.profile?Ko(p):b.profile&&(t.value=p.id,n.value="")}function u(p){const b=n.value.trim();b&&(t.value=null,Ko(p,b))}const f=()=>{const p=m.firmwareJob?.logs||[];return p.length?p[p.length-1]:""},h=p=>p.installed?c("editor.sidebar.pending.installed"):p.downloaded?c("editor.sidebar.pending.downloaded"):c("editor.sidebar.pending.not_flashed",{file:p.file});return(p,b)=>(g(),_("aside",Xm,[b[13]||(b[13]=o("div",{class:"brand"},[o("span",{class:"mark"},"▦"),o("span",null,"ESP Screens")],-1)),o("span",{id:"connection",class:me(["conn",{online:a(m).connected}]),role:"status"},d(a(m).reachable?a(m).connected?a(c)("editor.sidebar.connection.connected"):a(c)("editor.sidebar.connection.reconnecting"):a(c)("editor.sidebar.connection.unreachable")),3),o("button",{type:"button",class:"search-btn",id:"open-palette",onClick:b[0]||(b[0]=v=>a(m).palette=!0)},[Me("⌕ "+d(a(c)("editor.sidebar.search")),1),b[10]||(b[10]=o("kbd",null,"⌘K",-1))]),o("div",Zm,d(a(c)("editor.sidebar.screens")),1),o("div",Qm,[(g(!0),_(q,null,he(a(m).inventory.screens,v=>(g(),_("div",{key:v.id,class:me(["screen-item",{selected:v.id===a(m).selected&&a($t)===""}])},[o("button",{type:"button",class:"nav-item","aria-current":v.id===a(m).selected&&a($t)===""?"true":"false",onClick:y=>a(ku)(v.id)},[o("span",{class:me(["dot",{off:!v.online}])},null,2),o("span",tb,[o("span",null,d(v.name),1),o("small",null,d(v.online?a(c)("editor.common.online"):a(c)("editor.common.offline"))+d(v.area?" · "+v.area:"")+" · "+d(v.firmware||a(c)("editor.common.unknown")),1)]),v.id===a(m).selected&&a(m).dirty?(g(),_("span",{key:0,class:"unsaved",role:"img","aria-label":a(c)("editor.common.unsaved"),title:a(c)("editor.common.unsaved")},null,8,nb)):W("",!0),i(v)?.kind==="available"?(g(),_("span",sb,d(a(c)("editor.sidebar.update.pill")),1)):i(v)?.kind==="running"?(g(),_("span",ib)):W("",!0)],8,eb),i(v)?(g(),_("div",{key:0,class:me(["screen-update",i(v).kind])},[i(v).kind==="available"?(g(),_(q,{key:0},[t.value===v.id?(g(),_(q,{key:0},[o("small",null,d(a(c)("editor.sidebar.host.hint")),1),o("form",{class:"screen-host",onSubmit:Pt(y=>u(v),["prevent"])},[Ee(o("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>n.value=y),placeholder:a(c)("editor.sidebar.host.placeholder"),required:"",pattern:"[A-Za-z0-9][A-Za-z0-9.\\-]*","aria-label":a(c)("editor.sidebar.host.label"),autofocus:""},null,8,lb),[[Je,n.value]]),o("button",ab,d(a(c)("editor.sidebar.host.start")),1),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.cancel"),onClick:b[2]||(b[2]=y=>t.value=null)},"✕",8,rb)],40,ob)],64)):(g(),_(q,{key:1},[o("small",null,d(i(v).text),1),o("button",{type:"button",class:"btn mini primary",disabled:!v.update?.profile,title:v.update?.profile?"":a(c)("editor.sidebar.update.no_profile"),onClick:y=>r(v)},d(a(c)("editor.sidebar.update.button")),9,cb)],64)),l(v).length?(g(),_("details",ub,[o("summary",null,d(a(c)("editor.sidebar.update.whats_new")),1),o("ul",null,[(g(!0),_(q,null,he(l(v).slice(0,8),y=>(g(),_("li",{key:y},d(y),1))),128))])])):W("",!0)],64)):i(v).kind==="running"&&a(Xn)(v)?(g(),_(q,{key:1},[o("div",{class:"progress",role:"progressbar","aria-valuenow":a(Xn)(v).percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:a(Xn)(v).percent+"%"})},null,4)],8,db),o("div",fb,[o("span",null,d(a(Xn)(v).percent)+" %",1),o("span",{title:f()},d(a(Xn)(v).text),9,pb)]),f()?(g(),_("small",{key:0,title:f(),style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},d(f()),9,hb)):W("",!0),o("button",{type:"button",class:"btn link mini",style:{"justify-self":"start"},onClick:b[3]||(b[3]=y=>a(He)("#firmware"))},d(a(c)("editor.sidebar.update.full_log")),1)],64)):(g(),_("small",{key:2,class:me({failed:i(v).kind==="failed"})},d(i(v).text),3))],2)):W("",!0)],2))),128))]),o("div",mb,[(g(!0),_(q,null,he(a(m).inventory.pending||[],v=>(g(),_("div",{key:v.file,class:"pending"},[o("strong",null,d(v.friendly),1),o("small",null,d(h(v)),1),o("div",bb,[o("button",{type:"button",class:"btn mini quiet",onClick:b[4]||(b[4]=(...y)=>a(ki)&&a(ki)(...y))},d(a(c)("editor.common.open_integrations")),1),v.api_key?(g(),_("button",{key:0,type:"button",class:"btn mini quiet",onClick:y=>a(It)(v.api_key)},d(a(c)("editor.sidebar.copy_api_key")),9,vb)):W("",!0)])]))),128))]),o("button",{id:"new-screen",type:"button",class:"nav-item ghost","aria-current":a($t)==="#new-screen"?"true":"false",onClick:b[5]||(b[5]=v=>a(He)("#new-screen"))},[b[11]||(b[11]=o("span",{class:"plus"},"+",-1)),o("span",_b,d(a(c)("editor.nav.new_screen")),1)],8,gb),b[14]||(b[14]=o("div",{class:"spacer"},null,-1)),o("div",yb,[o("div",wb,d(a(c)("editor.sidebar.more")),1),o("button",{id:"open-firmware",type:"button",class:"nav-item","aria-current":a($t)==="#firmware"?"true":"false",onClick:b[6]||(b[6]=v=>a(He)("#firmware"))},[o("span",$b,d(a(Ae)("F0241")),1),o("span",xb,d(a(c)("editor.nav.firmware")),1)],8,kb),o("button",{id:"open-alerts",type:"button",class:"nav-item","aria-current":a($t)==="#alerts"?"true":"false",onClick:b[7]||(b[7]=v=>a(He)("#alerts"))},[o("span",Cb,d(a(Ae)("F0594")),1),o("span",Tb,d(a(c)("editor.nav.alerts")),1)],8,Sb),o("button",{id:"open-settings",type:"button",class:"nav-item","aria-current":a($t)==="#settings"?"true":"false",onClick:b[8]||(b[8]=v=>a(He)("#settings"))},[o("span",Ab,d(a(Ae)("F0493")),1),o("span",Pb,d(a(c)("editor.nav.settings")),1)],8,Eb),o("button",{id:"refresh",type:"button",class:"nav-item ghost",onClick:b[9]||(b[9]=v=>a(Tn)())},[b[12]||(b[12]=o("span",{class:"plus"},"↻",-1)),o("span",Ob,d(a(c)("editor.sidebar.refresh")),1)])])]))}}),Lb={key:0,id:"toast",class:"toast",role:"status"},Mb=Le({__name:"Toast",setup(e){return(t,n)=>a(m).toast?(g(),_("div",Lb,[o("span",null,d(a(m).toast.message),1),a(m).toast.action?(g(),_("button",{key:0,type:"button",onClick:n[0]||(n[0]=s=>{a(m).toast.action.run(),a(_m)()})},d(a(m).toast.action.label),1)):W("",!0)])):W("",!0)}}),Rb=["aria-label"],Nb=["placeholder","aria-label"],Fb={class:"palette-list"},Db={class:"palette-group"},Ub=["onMouseenter","onClick"],jb={key:0,class:"mdi"},Hb={key:1,class:"glyph"},Vb={class:"tx"},Wb={key:0},Bb={key:2,class:"hint-key"},Kb={key:0,class:"palette-empty"},zb=Le({__name:"CommandPalette",setup(e){const t=ke(""),n=ke(0),s=ke(null),i=k(()=>{const h=t.value.trim().toLocaleLowerCase(),p=[],b=c("editor.palette.groups.screens"),v=c("editor.palette.groups.actions");for(const T of m.inventory.screens)p.push({group:b,label:T.name,detail:`${T.online?c("editor.common.online"):c("editor.common.offline")} · ${T.firmware||c("editor.common.unknown")}`,glyphText:"▦",run:()=>ku(T.id)});const y=_t.value,I=[{group:v,label:c("editor.nav.new_screen"),detail:c("editor.nav.new_screen_detail"),glyphText:"+",run:()=>He("#new-screen")},{group:v,label:c("editor.nav.firmware"),icon:"F0241",run:()=>He("#firmware")},{group:v,label:c("editor.nav.alerts"),detail:c("editor.palette.alerts_detail"),icon:"F0594",run:()=>He("#alerts")},{group:v,label:c("editor.nav.settings"),detail:c("editor.palette.settings_detail"),icon:"F0493",run:()=>He("#settings")}];if(y&&m.layout&&I.unshift({group:v,label:c("editor.common.save_send"),detail:m.dirty?c("editor.common.unsaved"):c("editor.palette.nothing_to_save"),key:"⌘S",run:()=>Wo()},{group:v,label:c("editor.screen_view.tabs.layout"),detail:y.name,run:()=>{He(""),m.tab="layout"}},{group:v,label:c("editor.screen_view.tabs.settings"),detail:y.name,run:()=>{He(""),m.tab="settings"}},{group:v,label:c("editor.palette.identify"),detail:zn(y)?c("editor.palette.identify_detail"):c("editor.palette.identify_needs"),run:()=>{zn(y)&&Su(y)}},{group:v,label:c("editor.palette.export"),detail:c("editor.palette.export_detail"),run:Tu}),p.push(...I),y&&m.layout&&h){const T=new Set(m.layout.tiles.map(A=>A.entity)),$=m.layout.tiles.length>=Kn.value;for(const A of m.inventory.entities)if(!(A.tile===!1||T.has(A.id))&&`${A.name} ${A.id} ${A.area||""} ${A.device||""}`.toLocaleLowerCase().includes(h)&&(p.push({group:c("editor.palette.groups.add"),label:A.name,detail:[jt(A.id)[0],A.area].filter(Boolean).join(" · "),icon:m.inventory.icons?Cn(A.id):void 0,run:()=>{$||$u(A.id)}}),p.length>60))break}return h?p.filter(T=>`${T.label} ${T.detail||""}`.toLocaleLowerCase().includes(h)):p}),l=k(()=>{const h=[];return i.value.forEach((p,b)=>{(h.find(y=>y.group===p.group)||(h.push({group:p.group,items:[]}),h[h.length-1])).items.push({item:p,index:b})}),h});function r(){m.palette=!1}function u(h){r(),h.run()}function f(h){if(h.key==="Escape")h.preventDefault(),r();else if(h.key==="ArrowDown")h.preventDefault(),n.value=Math.min(i.value.length-1,n.value+1);else if(h.key==="ArrowUp")h.preventDefault(),n.value=Math.max(0,n.value-1);else if(h.key==="Enter"){h.preventDefault();const p=i.value[n.value];p&&u(p)}}return Ct(t,()=>n.value=0),Ct(()=>m.palette,async h=>{h&&(t.value="",n.value=0,await Ni(),s.value?.focus())}),(h,p)=>a(m).palette?(g(),_("div",{key:0,class:"palette-backdrop",onClick:r},[o("div",{class:"palette",role:"dialog","aria-label":a(c)("editor.sidebar.search"),onClick:p[1]||(p[1]=Pt(()=>{},["stop"])),onKeydown:f},[Ee(o("input",{ref_key:"input",ref:s,"onUpdate:modelValue":p[0]||(p[0]=b=>t.value=b),id:"palette-input",placeholder:a(c)("editor.palette.placeholder"),"aria-label":a(c)("editor.sidebar.search"),autocomplete:"off"},null,8,Nb),[[Je,t.value]]),o("div",Fb,[(g(!0),_(q,null,he(l.value,b=>(g(),_(q,{key:b.group},[o("div",Db,d(b.group),1),(g(!0),_(q,null,he(b.items,({item:v,index:y})=>(g(),_("button",{key:y,type:"button",class:me(["palette-item",{active:y===n.value}]),onMouseenter:I=>n.value=y,onClick:I=>u(v)},[v.icon?(g(),_("span",jb,d(a(Ae)(v.icon)),1)):(g(),_("span",Hb,d(v.glyphText||"›"),1)),o("span",Vb,[o("span",null,d(v.label),1),v.detail?(g(),_("small",Wb,d(v.detail),1)):W("",!0)]),v.key?(g(),_("kbd",Bb,d(v.key),1)):W("",!0)],42,Ub))),128))],64))),128)),i.value.length?W("",!0):(g(),_("p",Kb,d(a(c)("editor.palette.empty")),1))])],40,Rb)])):W("",!0)}}),ve={source:null,element:null,ghost:null,timer:0,start:null,offset:{x:0,y:0},pointerId:null,suppressUntil:0,last:null,scroller:0,target:null},Ou={mounted(e,t){e.__dragSource=t.value,e.addEventListener("pointerdown",s=>{const i=e.__dragSource;if(!(s.button!==0||e.disabled||s.target.closest(".remove"))){s.pointerType!=="touch"&&s.preventDefault(),Object.assign(ve,{source:i,element:e,start:{x:s.clientX,y:s.clientY},pointerId:s.pointerId});try{e.setPointerCapture(s.pointerId)}catch{}clearTimeout(ve.timer),s.pointerType==="touch"&&(ve.timer=window.setTimeout(()=>ur(s),260))}}),e.addEventListener("pointermove",s=>{if(m.drag.active||!ve.start||ve.element!==e)return;const i=Math.hypot(s.clientX-ve.start.x,s.clientY-ve.start.y);if(s.pointerType==="touch"){i>10&&(clearTimeout(ve.timer),ve.start=null);return}i>=6&&ur(s)});const n=()=>{ve.element===e&&!m.drag.active&&(clearTimeout(ve.timer),ve.start=null)};e.addEventListener("pointerup",n),e.addEventListener("pointercancel",n)},updated(e,t){e.__dragSource=t.value}};function ur(e){if(m.drag.active||!ve.start||!ve.source||!ve.element)return;m.drag.active=!0,m.drag.moving=ve.source.kind==="tile"?ve.source.tile:hu(ve.source.id),m.drag.preview=null,ve.target=null,getSelection()?.removeAllRanges();const t=ve.element.getBoundingClientRect(),n=ve.element.cloneNode(!0);n.classList.add("drag-ghost"),n.style.width=`${t.width}px`,n.style.height=`${t.height}px`,ve.offset={x:e.clientX-t.left,y:e.clientY-t.top},document.body.append(n),ve.ghost=n,document.addEventListener("pointermove",qo),document.addEventListener("pointerup",Ti),document.addEventListener("pointercancel",Ti);try{ve.element.releasePointerCapture(ve.pointerId)}catch{}try{document.documentElement.setPointerCapture(ve.pointerId)}catch{}document.addEventListener("touchmove",Iu,{passive:!1}),ve.scroller=window.setInterval(()=>{if(!ve.last)return;const{x:s,y:i}=qb(document),l=s?pr(ve.last.x,fr(s,"x")):0,r=i?pr(ve.last.y,fr(i,"y")):0;l&&s.scrollBy(l,0),r&&i.scrollBy(0,r),(l||r)&&Yo(Lu(ve.last.x,ve.last.y))},16),Yo(-1),qo(e)}function dr(e,t){if(!e)return!1;const n=t==="x"?e.scrollWidth>e.clientWidth:e.scrollHeight>e.clientHeight,s=getComputedStyle(e)[t==="x"?"overflowX":"overflowY"];return n&&(s==="auto"||s==="scroll")}function qb(e){const t=e.querySelector(".pages"),n=e.querySelector(".canvas");return{x:dr(t,"x")?t:n,y:dr(n,"y")?n:e.scrollingElement}}function fr(e,t){const n=t==="x"?window.innerWidth:window.innerHeight;if(e===e.ownerDocument.scrollingElement)return[0,n];const s=e.getBoundingClientRect();return t==="x"?[Math.max(s.left,0),Math.min(s.right,n)]:[Math.max(s.top,0),Math.min(s.bottom,n)]}function pr(e,[t,n]){return e n-60?12:0}function Iu(e){m.drag.active&&e.preventDefault()}function Ti(e){e.pointerId===ve.pointerId&&Yb(e.type==="pointerup")}function qo(e){!ve.ghost||e.pointerId!==ve.pointerId||(ve.last={x:e.clientX,y:e.clientY},ve.ghost.style.transform=`translate(${e.clientX-ve.offset.x}px, ${e.clientY-ve.offset.y}px)`,Yo(Lu(e.clientX,e.clientY)))}function Lu(e,t){let n=null,s=1/0;for(const l of document.querySelectorAll(".pages [data-slot]")){const r=l.getBoundingClientRect(),u=Math.hypot(Math.max(r.left-e,0,e-r.right),Math.max(r.top-t,0,t-r.bottom));u 16)return-1;let i=Number(n.cell.dataset.slot);return n.cell.classList.contains("wide")&&e>(n.r.left+n.r.right)/2&&(i+=1),i}function Yo(e){ve.target===e||!m.layout||!m.drag.moving||(ve.target=e,m.drag.preview=e>=0?pu(m.layout.tiles,m.drag.moving,e):null)}function Yb(e){const t=m.drag.preview,n=m.drag.moving;document.removeEventListener("pointermove",qo),document.removeEventListener("pointerup",Ti),document.removeEventListener("pointercancel",Ti),document.removeEventListener("touchmove",Iu);try{document.documentElement.releasePointerCapture(ve.pointerId)}catch{}if(ve.ghost?.remove(),Object.assign(ve,{ghost:null,suppressUntil:Date.now()+400,last:null,start:null,target:null,element:null,source:null}),clearInterval(ve.scroller),m.drag.active=!1,m.drag.preview=null,m.drag.moving=null,e&&t&&n&&m.layout){const s=m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join(),i=!m.layout.tiles.includes(n);for(const{tile:l,slot:r}of t)l.slot=r,m.layout.tiles.includes(l)||m.layout.tiles.push(l);m.layout.tiles.sort((l,r)=>l.slot-r.slot),m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join()!==s&&pt(),i&&Ys(n,n.slot)}}window.addEventListener("click",e=>{Date.now()t.tile.name||b.value==="screen"&&qm(t.tile.entity)||zs(t.tile.entity)),s=k(()=>ru(t.tile)),i=k(()=>Do(t.tile)&&!s.value),l=k(()=>us(t.tile.entity)),r=k(()=>m.inventory.backgrounds?.[t.tile.options?.background||""]?.color),u=k(()=>t.tile.options?.background==="none"),f=k(()=>t.tile.options?.display||"standard"),h=k(()=>f.value!=="standard"?bu(f.value):""),p=k(()=>mu(t.tile,m.inventory)),b=k(()=>t.tile.entity.split(".")[0]),v=k(()=>m.inventory.icons?.controls||{}),y=K=>v.value[K]?Ae(v.value[K]):"",I=k(()=>Cl(t.tile)&&m.inspector?.kind==="tile"),T=k(()=>!t.placeholder&&m.layout?.tiles.includes(t.tile)),$=k(()=>c("editor.tile_card.label",{name:n.value,slot:t.slot%ze+1,page:Et(t.slot)+1})),A=k(()=>new Date(m.now)),S=k(()=>(A.value.getHours()%12+A.value.getMinutes()/60)*30),D=k(()=>A.value.getMinutes()*6),C=k(()=>b.value==="screen"?null:km(t.tile.entity)),B=k(()=>!C.value||["unavailable","unknown",""].includes(C.value.state)),O=k(()=>!!C.value&&!B.value&&C.value.state!=="off"&&C.value.state!=="closed"&&C.value.state!=="standby"&&C.value.state!=="idle"&&C.value.state!=="docked"),E=k(()=>["light","switch","input_boolean","fan"].includes(b.value)&&C.value?.state==="on"),L=k(()=>C.value?.a?.unit_of_measurement),M=K=>K.charAt(0).toUpperCase()+K.slice(1).replace(/_/g," "),U=K=>lu(K,Km.value),R=["number","input_number","counter"],Y=K=>L.value||R.includes(b.value)?`${U(K)}${lr(L.value)}`:K,te={climate:"climate",cover:"cover",media_player:"media",person:"person",sun:"sun",vacuum:"vacuum",weather:"weather"};function ye(K){const ne=yt=>zh(`screen.ha.${yt}`)?jn(`screen.ha.${yt}`):"",ie=K.state==="windy-variant"?"windy":K.state.replace(/-/g,"_");return b.value==="binary_sensor"&&["on","off"].includes(ie)?ne(`binary.${K.a?.device_class}_${ie}`)||ne(ie):te[b.value]?ne(`${te[b.value]}.${ie}`)||(["on","off"].includes(ie)?ne(ie):""):["on","off"].includes(ie)?ne(ie):""}const re=["scene","script","button","input_button"],be=k(()=>{const K=C.value;if(!K||re.includes(b.value))return h.value;if(B.value)return jn(K.state==="unknown"?"editor.mockup.unknown":"screen.ha.unavailable");const ne=K.a||{},ie=K.word||ye(K)||M(K.state);return b.value==="climate"?`${ne.current_temperature!==void 0?`${U(ne.current_temperature)}° · `:""}${ie}`:b.value==="weather"?`${ie}${ne.temperature!==void 0?` · ${U(ne.temperature)}°`:""}`:b.value==="cover"&&ne.current_position!==void 0&&ne.current_position>0&&ne.current_position<100?`${ie} · ${ne.current_position}${lr("%")}`:b.value==="media_player"&&ne.media_title?`${ie} · ${ne.media_title}`:b.value==="sensor"||R.includes(b.value)?Y(K.state):ie}),ge=k(()=>C.value&&!B.value?L.value||R.includes(b.value)?U(C.value.state):C.value.state:"—"),we=k(()=>{const K=C.value;if(!K||B.value)return 0;const ne=K.a||{};if(b.value==="light")return K.state==="on"?ne.brightness!==void 0?Math.round(ne.brightness/255*100):100:0;if(b.value==="fan")return K.state==="on"?ne.percentage??100:0;if(b.value==="cover")return 100-(ne.current_position??(K.state==="open"?100:0));if(b.value==="media_player")return Math.round((ne.volume_level??0)*100);if(b.value==="number"||b.value==="input_number"){const ie=Number(K.state),yt=Number(ne.min??0),Ln=Number(ne.max??100);return Number.isFinite(ie)&&Ln>yt?Math.round((ie-yt)/(Ln-yt)*100):0}return 0}),Ye=k(()=>jn(`screen.ha.button.${{scene:"activate",script:"run"}[b.value]||"press"}`)),le=k(()=>`${jn("screen.tile.page",{n:l.value})} ›`),ee=k(()=>({background:`linear-gradient(to right, ${we.value?"#ffbf38":"#c9ccd1"} ${we.value}%, ${we.value?"#fff1d3":"#e6e8ec"} ${we.value}%)`})),ce=k(()=>({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})),tt=k(()=>{const K=C.value?.a?.temperature;return K!=null?`${U(K)}°`:"—"});async function $e(K){if(K.key==="Enter"||K.key===" "){K.preventDefault(),Vo(t.tile);return}const ne={ArrowLeft:-1,ArrowRight:1,ArrowUp:-2,ArrowDown:2}[K.key];ne&&(K.preventDefault(),Ys(t.tile,t.tile.slot+(s.value?Math.sign(ne)*ze:i.value?Math.sign(ne)*2:ne))&&(await Ni(),document.querySelector(`.pages [data-slot="${t.tile.slot}"]`)?.focus()))}return(K,ne)=>Ee((g(),_("div",{class:me(["tile",{wide:i.value,full:s.value,bare:u.value,placeholder:e.placeholder||!T.value,chosen:I.value}]),"data-slot":e.slot,style:Ue(r.value&&!u.value?{backgroundColor:r.value}:void 0),tabindex:T.value?0:-1,role:T.value?"button":void 0,"aria-label":T.value?$.value:void 0,onClick:ne[1]||(ne[1]=ie=>T.value&&a(Vo)(e.tile)),onKeydown:ne[2]||(ne[2]=ie=>T.value&&$e(ie))},[f.value==="analog"?(g(),_(q,{key:0},[(g(),_("svg",Jb,[ne[3]||(ne[3]=o("circle",{cx:"30",cy:"30",r:"27",fill:"#fff",stroke:"#c9ccd1"},null,-1)),(g(),_(q,null,he([0,90,180,270],ie=>o("line",{key:ie,x1:"30",y1:"5",x2:"30",y2:"9",stroke:"#1b1b1b","stroke-width":"1.5",transform:`rotate(${ie} 30 30)`},null,8,Xb)),64)),o("line",{x1:"30",y1:"30",x2:"30",y2:"16",stroke:"#1b1b1b","stroke-width":"2.4","stroke-linecap":"round",transform:`rotate(${S.value} 30 30)`},null,8,Zb),o("line",{x1:"30",y1:"30",x2:"30",y2:"11",stroke:"#1b1b1b","stroke-width":"1.6","stroke-linecap":"round",transform:`rotate(${D.value} 30 30)`},null,8,Qb),ne[4]||(ne[4]=o("circle",{cx:"30",cy:"30",r:"1.8",fill:"#1b1b1b"},null,-1))])),i.value?(g(),_("span",ev,[o("span",tv,[o("span",nv,d(n.value),1),o("span",sv,d(h.value),1)])])):W("",!0)],64)):f.value==="digital"&&b.value==="screen"?(g(),_(q,{key:1},[o("span",iv,d(a(Ae)(a(vs)(e.tile))),1),o("span",ov,[o("span",lv,d(a(Wi)(a(as),A.value)),1),o("span",av,d(n.value),1)])],64)):s.value?(g(),_(q,{key:2},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",rv,[o("span",cv,d(n.value),1),l.value?(g(),_("span",uv,d(le.value),1)):f.value==="watch"?(g(),_("span",dv,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",fv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",pv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",hv,[o("span",mv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",bv,d(y("plus")||"+"),1)])):p.value==="volume"?(g(),_(q,{key:2},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",vv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(q,{key:3},[o("span",gv,d(y("skip-previous")),1),o("span",_v,d(y(O.value?"pause":"play")||y("play")),1),o("span",yv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(q,{key:4},[o("span",wv,d(y("arrow-expand-horizontal")),1),o("span",kv,d(y("stop")),1),o("span",$v,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="run"?(g(),_("span",xv,d(Ye.value),1)):(g(),_("span",{key:6,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):i.value?(g(),_(q,{key:3},[o("span",Sv,[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",Cv,[o("span",Tv,d(n.value),1),l.value?(g(),_("span",Ev,d(le.value),1)):f.value==="watch"?(g(),_("span",Av,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",Pv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",Ov,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",Iv,[o("span",Lv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",Mv,d(y("plus")||"+"),1)])):p.value==="stepper"&&b.value.endsWith("select")?(g(),_(q,{key:2},[o("span",Rv,d(y("chevron-left")),1),o("span",Nv,d(y("chevron-right")),1)],64)):p.value==="stepper"?(g(),_("span",Fv,[o("span",Dv,d(y("minus")||"−"),1),o("b",null,d(ge.value),1),o("span",Uv,d(y("plus")||"+"),1)])):p.value==="mode"?(g(),_(q,{key:4},[o("span",jv,d(y("power")),1),o("span",Hv,d(y("fire")),1),o("span",Vv,d(y("snowflake")),1)],64)):p.value==="volume"?(g(),_(q,{key:5},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",Wv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(q,{key:6},[o("span",Bv,d(y("skip-previous")),1),o("span",Kv,d(y(O.value?"pause":"play")||y("play")),1),o("span",zv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(q,{key:7},[o("span",qv,d(y("arrow-expand-horizontal")),1),o("span",Yv,d(y("stop")),1),o("span",Gv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="buttons"&&b.value==="vacuum"?(g(),_(q,{key:8},[o("span",Jv,d(y("play")),1),o("span",Xv,d(y("stop")),1),o("span",Zv,d(y("home-map-marker")),1)],64)):p.value==="buttons"&&b.value==="timer"?(g(),_(q,{key:9},[o("span",Qv,d(y("play")),1),o("span",eg,d(y("close")),1)],64)):p.value==="run"?(g(),_("span",tg,d(Ye.value),1)):(g(),_("span",{key:11,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):(g(),_(q,{key:4},[o("span",{class:me(["head",{top:f.value==="watch"}])},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",ng,[o("span",sg,d(n.value),1),l.value?(g(),_("span",ig,d(le.value),1)):f.value!=="watch"&&be.value?(g(),_("span",{key:1,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])],2),f.value==="watch"?(g(),_("span",og,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",lg,d(L.value),1)):W("",!0)])):W("",!0),e.tile.options?.inline==="slider"?(g(),_("span",{key:1,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0)],64)),T.value?(g(),_("button",{key:5,type:"button",class:"remove",title:a(c)("editor.tile_card.remove"),"aria-label":a(c)("editor.tile_card.remove_named",{name:n.value}),onClick:ne[0]||(ne[0]=Pt(ie=>a(xu)(e.tile),["stop"]))},"✕",8,ag)):W("",!0)],46,Gb)),[[a(Ou),{kind:"tile",tile:e.tile}]])}}),cg=["viewBox","aria-label"],ug=["y"],dg=["cx","cy","r","stroke","stroke-width"],fg=["x1","y1","x2","y2","stroke","stroke-width"],pg=["x","y","fill"],hg=["x","y"],Mu=Le({__name:"TopbarSvg",props:{items:{},nameText:{},single:{type:Boolean}},setup(e,{expose:t}){const n=e,s=k(()=>{m.fontsVersion,m.now,m.topbarPreviews;const $=n.items||fn();return gu($,wu.value,n.nameText??(m.layout?.title||jn("editor.mockup.home")),bn)}),i=k(()=>s.value.metrics),l=k(()=>n.single?Math.round(i.value.text*1.4):i.value.top+Math.round(i.value.name*.45)),r=k(()=>n.single?Math.round(i.value.text*1.05):i.value.top),u=k(()=>{if(!n.single)return s.value.placed;const $=s.value.parts[0];return $&&($.x=0),$?[$]:[]}),f=k(()=>n.single?`-2 0 ${Math.max(1,u.value[0]?.width||1)+4} ${l.value}`:`0 0 ${i.value.width} ${l.value}`),h=k(()=>r.value+(s.value.zero.top+s.value.zero.bottom)/2),p=k(()=>mm(s.value.nameText,s.value.fonts.name,Math.min(s.value.natural,s.value.nameRoom))),b=k(()=>new Date(m.now));function v($){const A=b.value;return[[(A.getHours()%12+A.getMinutes()/60)*30,$*.24],[A.getMinutes()*6,$*.34]].map(([S,D])=>{const C=S*Math.PI/180;return{x2:D*Math.sin(C),y2:-D*Math.cos(C)}})}const y=$=>$.x-$.icon.ink.left,I=$=>($.icon?$.x+($.icon.ink.right-$.icon.ink.left)+s.value.gaps.icon:$.x)-$.text.ink.left,T=k(()=>`${(Math.max(1,u.value[0]?.width||1)+4)*(26/i.value.icon)}px`);return t({lay:s}),($,A)=>(g(),_("svg",{viewBox:f.value,role:"img","aria-label":e.single?a(c)("editor.topbar.live.looks"):a(c)("editor.topbar.aria",{name:s.value.nameText}),style:Ue(e.single?{width:T.value}:void 0)},[e.single?W("",!0):(g(),_("text",{key:0,x:"0",y:i.value.top,fill:"#1b1b1b",style:Ue({font:s.value.fonts.name})},d(p.value),13,ug)),o("g",null,[(g(!0),_(q,null,he(u.value,S=>(g(),_(q,{key:S.index},[S.dial?(g(),_(q,{key:0},[o("circle",{cx:S.x+S.dial/2,cy:h.value,r:S.dial/2-Math.max(1,Math.round(S.dial/10))/2,fill:"none",stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial/10))},null,8,dg),(g(!0),_(q,null,he(v(S.dial),(D,C)=>(g(),_("line",{key:C,x1:S.x+S.dial/2,y1:h.value,x2:S.x+S.dial/2+D.x2,y2:h.value+D.y2,stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial*.075)),"stroke-linecap":"round"},null,8,fg))),128))],64)):(g(),_(q,{key:1},[S.icon?(g(),_("text",{key:0,x:y(S),y:h.value-(S.icon.ink.top+S.icon.ink.bottom)/2,fill:S.view.color||"#46525e",style:Ue({font:s.value.fonts.icon})},d(S.icon.glyph),13,pg)):W("",!0),S.text?(g(),_("text",{key:1,x:I(S),y:r.value,fill:"#46525e",style:Ue({font:s.value.fonts.text})},d(S.text.value),13,hg)):W("",!0)],64))],64))),128))])],12,cg))}}),mg={class:"page"},bg={class:"page-label"},vg=["title"],gg={key:1},_g=["title"],yg={class:"tiles"},wg=["data-slot","title","aria-label","onClick"],kg=Le({__name:"DevicePage",props:{page:{},entries:{},pages:{},moving:{}},setup(e){const t=e,n=k(()=>new Map(t.entries.map(h=>[h.slot,h]))),s=k(()=>new Set(t.entries.flatMap(h=>Bn(h.slot,ut(h.tile)).slice(1)))),i=k(()=>Array.from({length:ze},(h,p)=>t.page*ze+p).filter(h=>!s.value.has(h))),l=k(()=>t.pages>1&&!t.entries.some(h=>Et(h.slot)===t.page)),r=k(()=>m.inspector?.kind==="bar"||m.inspector?.kind==="bar-add"),u=k(()=>t.entries.filter(h=>Et(h.slot)===t.page).reduce((h,p)=>h+kl(ut(p.tile)),0));function f(h){const p=m.insertAt===h;m.insertAt=p?-1:h,m.insertAt>=0&&document.querySelector("#search")?.focus()}return(h,p)=>(g(),_("div",mg,[o("div",bg,[o("span",null,d(a(c)("editor.page.label",{page:e.page+1})),1),l.value?(g(),_("button",{key:0,type:"button",class:"btn mini",title:a(c)("editor.page.remove_title"),onClick:p[0]||(p[0]=b=>a(Sm)(e.page))},d(a(c)("editor.page.remove")),9,vg)):(g(),_("span",gg,d(u.value)+" / "+d(a(ze)),1))]),o("div",{class:me(["device",{cyd:!a(Sl)}])},[o("div",{class:me(["bar-wrap",{selected:r.value}]),title:a(c)("editor.page.edit_bar"),role:"button",tabindex:"0",onClick:p[1]||(p[1]=b=>a(Xt)(0)),onKeydown:p[2]||(p[2]=xc(Pt(b=>a(Xt)(0),["prevent"]),["enter"]))},[se(Mu)],42,_g),o("div",yg,[(g(!0),_(q,null,he(i.value,b=>(g(),_(q,{key:b},[n.value.get(b)?(g(),it(rg,{key:0,tile:n.value.get(b).tile,slot:b,placeholder:n.value.get(b).tile===e.moving},null,8,["tile","slot","placeholder"])):(g(),_("button",{key:1,type:"button",class:me(["cell",{"insert-here":a(m).insertAt===b}]),"data-slot":b,title:a(c)("editor.page.cell.title"),"aria-label":a(c)("editor.page.cell.aria",{slot:b%a(ze)+1,page:e.page+1}),onClick:v=>f(b)},[p[3]||(p[3]=o("span",null,"+",-1)),o("small",null,d(a(m).insertAt===b?a(c)("editor.page.cell.next"):a(c)("editor.page.cell.empty")),1)],10,wg))],64))),128))])],2)]))}}),$g={class:"library",id:"library"},xg={class:"lib-head"},Sg={class:"lib-title"},Cg=["placeholder","aria-label"],Tg={class:"filters",id:"filters"},Eg=["aria-pressed","onClick"],Ag={class:"lib-row"},Pg=["aria-label"],Og={value:""},Ig=["value"],Lg=["aria-pressed","title"],Mg={class:"lib-list",id:"results","aria-live":"polite"},Rg=["title","disabled","onClick"],Ng={class:"tx"},Fg={key:0,class:"hint"},Dg={key:1,class:"hint"},Ug={class:"lib-foot"},jg=Le({__name:"Library",setup(e){const t=["","light","climate","switch","binary_sensor","button","script","fan","cover","scene","vacuum","sensor","media_player","weather","number","select","person","timer","screen"],n={switch:"input_boolean",number:"input_number",select:"input_select",weather:"sun",button:"input_button"},s=k(()=>new Set(m.layout?.tiles.map(p=>p.entity)||[])),i=p=>s.value.has(p)&&!Bi(p),l=k(()=>[...new Set(m.inventory.entities.map(p=>p.area).filter(p=>!!p))].sort((p,b)=>p.localeCompare(b))),r=k(()=>{const p=m.search.toLocaleLowerCase(),b=m.filter,v=m.room;return[...m.inventory.builtin||[],...m.inventory.entities].filter(y=>y.tile!==!1&&(Sl.value||!["camera","image"].includes(y.id.split(".")[0]))&&(!b||y.id.startsWith(b+".")||n[b]===y.id.split(".")[0])&&(!v||y.area===v)&&(!m.hidePlaced||!i(y.id))&&`${y.name} ${y.id} ${y.device||""} ${y.area||""}`.toLocaleLowerCase().includes(p))}),u=k(()=>(m.layout?.tiles.length||0)>=Kn.value),f=k(()=>m.inventory.entities.length),h=p=>{const b=p.id.split(".")[0];return p.state==="unavailable"||p.state==="unknown"?"gone":["light","switch","input_boolean","fan"].includes(b)&&p.state==="on"?"on":""};return(p,b)=>(g(),_("aside",$g,[o("div",xg,[o("div",Sg,[Me(d(a(c)("editor.library.title"))+" ",1),o("small",null,d(a(c)("editor.library.entities",f.value)),1)]),Ee(o("input",{id:"search","onUpdate:modelValue":b[0]||(b[0]=v=>a(m).search=v),type:"search",placeholder:a(c)("editor.library.search"),autocomplete:"off","aria-label":a(c)("editor.library.search_label")},null,8,Cg),[[Je,a(m).search]]),o("div",Tg,[(g(),_(q,null,he(t,v=>o("button",{key:v,type:"button","aria-pressed":a(m).filter===v?"true":"false",onClick:y=>a(m).filter=v},[v?(g(),_("span",{key:0,class:"domain-icon",style:Ue({color:a(jt)(v+".")[2],background:a(jt)(v+".")[3]}),"aria-hidden":"true"},d(a(jt)(v+".")[1]),5)):W("",!0),Me(d(a(c)(`editor.library.filters.${v||"all"}`)),1)],8,Eg)),64))]),o("div",Ag,[Ee(o("select",{id:"room","onUpdate:modelValue":b[1]||(b[1]=v=>a(m).room=v),"aria-label":a(c)("editor.library.room")},[o("option",Og,d(a(c)("editor.library.all_rooms")),1),(g(!0),_(q,null,he(l.value,v=>(g(),_("option",{key:v,value:v},d(v),9,Ig))),128))],8,Pg),[[Wn,a(m).room]]),o("button",{type:"button",class:"chip-toggle",id:"hide-placed","aria-pressed":a(m).hidePlaced?"true":"false",title:a(c)("editor.library.hide_placed_title"),onClick:b[2]||(b[2]=v=>a(m).hidePlaced=!a(m).hidePlaced)},d(a(c)("editor.library.hide_placed")),9,Lg)])]),o("div",Mg,[(g(!0),_(q,null,he(r.value.slice(0,80),v=>Ee((g(),_("button",{key:v.id,type:"button",class:"ent",title:v.id,disabled:i(v.id)||u.value,onClick:y=>a($u)(v.id)},[o("span",{class:me(["av mdi",h(v)]),style:Ue({color:a(jt)(v.id)[2],background:a(jt)(v.id)[3]})},d(a(m).inventory.icons?a(Ae)(a(Cn)(v.id)):a(jt)(v.id)[1]),7),o("span",Ng,[o("b",null,d(v.name),1),o("small",null,d([a(jt)(v.id)[0],v.area,v.device].filter(Boolean).join(" · ")),1)]),o("span",{class:me(["add",{done:i(v.id)}])},d(i(v.id)?"✓":"+"),3)],8,Rg)),[[a(Ou),{kind:"entity",id:v.id}]])),128)),r.value.length?r.value.length>80?(g(),_("p",Dg,d(a(c)("editor.common.results",r.value.length)),1)):W("",!0):(g(),_("p",Fg,d(a(m).hidePlaced&&!a(m).search&&!a(m).filter&&!a(m).room?a(c)("editor.library.all_placed"):a(c)("editor.library.none_found")),1))]),o("div",Ug,d(u.value?a(c)(a(Kn)<48?"editor.library.full_update":"editor.library.full",a(Kn)):a(c)("editor.library.hint")),1)]))}}),Hg={class:"canvas-head"},Vg={id:"count"},Wg={key:0,id:"no-tiles"},Bg={key:1},Kg={key:2,id:"positions-hint",class:"warn"},zg={key:3,id:"page-reach-hint",class:"warn"},qg=["aria-label"],Yg={class:"page-label"},Gg=["tabindex"],Jg=Le({__name:"LayoutView",setup(e){const t=k(()=>m.layout),n=k(()=>m.drag.preview||Xe(t.value)),s=k(()=>Ot(n.value,t.value.pages)),i=k(()=>Tm()),l=k(()=>s.value Qh(t.value.tiles)&&!kn(0,2,26)?c("editor.layout.positions_hint",{firmware:_t.value?.firmware||c("editor.common.unknown")}):""),u=k(()=>Eu(n.value,s.value));function f(h){h.target.closest(".device, .page-label, .canvas-head")||m.inspector&&Ze()}return(h,p)=>(g(),_(q,null,[o("div",{class:"canvas",id:"canvas",onClick:f},[o("div",Hg,[o("b",Vg,d(a(c)("editor.layout.count",{tiles:t.value.tiles.length,limit:a(Kn)},s.value)),1),t.value.tiles.length?(g(),_("span",Bg,d(a(c)("editor.layout.how_to")),1)):(g(),_("span",Wg,d(a(c)("editor.layout.no_tiles")),1)),r.value?(g(),_("span",Kg,d(r.value),1)):W("",!0),u.value?(g(),_("span",zg,d(u.value),1)):W("",!0)]),o("div",{class:"pages",id:"layout-preview","aria-label":a(c)("editor.layout.aria")},[(g(!0),_(q,null,he(i.value,b=>(g(),it(kg,{key:b,page:b-1,entries:n.value,pages:s.value,moving:a(m).drag.moving},null,8,["page","entries","pages","moving"]))),128)),o("div",{class:me(["page ghost",{disabled:!l.value}])},[o("div",Yg,[o("span",null,d(a(c)("editor.page.label",{page:i.value+1})),1)]),o("div",{class:me(["device",{cyd:a(_t)?.board!=="guition"}]),id:"add-page",role:"button",tabindex:l.value?0:-1,onClick:p[0]||(p[0]=b=>l.value&&a(Qa)()),onKeydown:p[1]||(p[1]=xc(Pt(b=>l.value&&a(Qa)(),["prevent"]),["enter"]))},d(l.value?a(c)("editor.layout.add_page"):a(c)("editor.layout.max_pages",a(un))),43,Gg)],2)],8,qg)]),se(jg)],64))}}),Xg={class:"status",id:"settings-status",role:"status"},Zg={key:0,class:"set-grid",id:"settings-groups"},Qg={class:"mdi"},e_=["data-setting","title","onClick"],t_=["id"],n_={class:"s-control"},s_=["id","aria-checked","aria-labelledby","disabled","onClick"],i_=["aria-labelledby"],o_=["aria-pressed","disabled","onClick"],l_={key:2,class:"step"},a_=["aria-label","disabled","onPointerdown","onClick"],r_={class:"mdi"},c_=["id","aria-labelledby"],u_=["aria-label","disabled","onPointerdown","onClick"],d_={class:"mdi"},f_={key:0,class:"hint warn",id:"settings-page-reach"},p_=Le({__name:"SettingsTab",setup(e){const t=k(()=>Tl()),n=k(()=>xi()),s=k(()=>t.value?.owner==="screen"&&!_t.value?.online),i=k(()=>Nm.map(T=>({...T,rows:T.rows.filter($=>t.value?.keys.includes($.key))})).filter(T=>T.rows.length)),l=k(()=>Eu()),r=T=>s.value||!!t.value?.unavailable.includes(T.key),u=T=>T.needs?!!n.value[T.needs]:!0,f=k(()=>s.value?c("editor.screen_settings.status.offline"):m.settingPending?c("editor.common.saving"):t.value?.owner==="screen"?c("editor.screen_settings.status.screen"):c("editor.screen_settings.status.app")),h=(T,$)=>{const A=n.value[T.key];return r(T)||!u(T)||A===null||A===void 0?!0:T.kind!=="moment"&&sr(T,A,$,!1,n.value)===A},p=new WeakMap;function b(T,$,A){const S=xi(),D=sr(T,S[T.key],$,A,S);D!==S[T.key]&&ni(T.key,D,600)}function v(T,$,A){const S=T.currentTarget;if(S.disabled||T.button!==0)return;const D={timer:0,held:!1};p.set(S,D);let C=0;D.timer=window.setTimeout(function B(){D.held=!0,C+=1,b($,A,C>5),D.timer=window.setTimeout(B,180)},450)}function y(T){const $=p.get(T.currentTarget);$&&clearTimeout($.timer)}function I(T,$,A){const S=p.get(T.currentTarget);if(S?.held){S.held=!1;return}b($,A,!1)}return(T,$)=>(g(),_("div",{class:me(["settings",{offline:s.value}]),id:"general-settings"},[o("span",Xg,d(f.value),1),t.value?(g(),_("div",Zg,[(g(!0),_(q,null,he(i.value,A=>(g(),_("section",{key:A.group,class:"set-card"},[o("h4",null,[o("span",Qg,d(a(Ae)(A.icon)),1),Me(d(a(c)(`editor.screen_settings.groups.${A.group}`)),1)]),(g(!0),_(q,null,he(A.rows,S=>(g(),_("div",{key:S.key,class:me(["srow",[`setting-${S.kind}`,{inactive:!u(S)||r(S)}]]),"data-setting":S.key,title:r(S)&&!s.value?a(c)("editor.screen_settings.unavailable"):"",onClick:D=>S.kind==="toggle"&&D.target.closest(".srow")===D.currentTarget&&!D.target.closest("button")&&!r(S)&&a(ni)(S.key,!n.value[S.key],150)},[o("span",{class:"s-label",id:`setting-label-${S.key}`},d(a(go)(S)),9,t_),o("div",n_,[S.kind==="toggle"?(g(),_("button",{key:0,type:"button",class:me(["switch",{unknown:n.value[S.key]===null||n.value[S.key]===void 0}]),role:"switch",id:`setting-${S.key}`,"aria-checked":n.value[S.key]?"true":"false","aria-labelledby":`setting-label-${S.key}`,disabled:r(S),onClick:Pt(D=>a(ni)(S.key,!n.value[S.key],150),["stop"])},null,10,s_)):S.kind==="choice"?(g(),_("div",{key:1,class:"seg",role:"group","aria-labelledby":`setting-label-${S.key}`},[(g(!0),_(q,null,he(S.options,D=>(g(),_("button",{key:String(D),type:"button","aria-pressed":n.value[S.key]===D?"true":"false",disabled:r(S),onClick:C=>a(ni)(S.key,D,150)},d(a(Fm)(S,D)),9,o_))),128))],8,i_)):(g(),_("div",l_,[o("button",{type:"button","aria-label":a(c)("editor.screen_settings.lower",{name:a(go)(S)}),disabled:h(S,-1),onPointerdown:D=>v(D,S,-1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,-1)},[o("span",r_,d(a(Ae)("F0374")),1)],40,a_),o("output",{id:`setting-${S.key}`,"aria-labelledby":`setting-label-${S.key}`},d(a(Hm)(S,n.value)),9,c_),o("button",{type:"button","aria-label":a(c)("editor.screen_settings.higher",{name:a(go)(S)}),disabled:h(S,1),onPointerdown:D=>v(D,S,1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,1)},[o("span",d_,d(a(Ae)("F0415")),1)],40,u_)]))])],10,e_))),128)),l.value&&A.rows.some(S=>S.key==="page_buttons")?(g(),_("p",f_,d(l.value),1)):W("",!0)]))),128))])):W("",!0)],2))}}),h_={class:"seg wrap",role:"group"},m_=["disabled","aria-pressed","onClick"],kt=Le({__name:"Segmented",props:{choices:{},value:{},disabled:{type:Boolean}},emits:["pick"],setup(e,{emit:t}){const n=t;return(s,i)=>(g(),_("div",h_,[(g(!0),_(q,null,he(e.choices,([l,r])=>(g(),_("button",{key:String(l),type:"button",disabled:e.disabled,"aria-pressed":String(l)===String(e.value)?"true":"false",onClick:u=>n("pick",l)},d(r),9,m_))),128))]))}}),b_={class:"f"},v_={class:"f-label"},g_={key:0},__={key:1,class:"warn"},y_=["aria-expanded"],w_={class:"tx"},k_={key:0,class:"mono"},$_={class:"link"},x_={key:0,class:"picker"},S_=["placeholder","aria-label"],C_={class:"action-list"},T_=["aria-pressed","onClick"],E_={key:0,class:"hint"},A_={key:1,class:"warn"},P_={class:"f-label"},O_=["aria-label","value","onChange"],I_={value:""},L_=["value"],M_={key:3,class:"action-number"},R_=["aria-label","value","onInput"],N_=["onClick"],F_={key:4,class:"action-number"},D_=["aria-label","min","max","step","value","placeholder","onInput"],U_={key:0},j_=["aria-label","value","placeholder","onInput"],H_={key:6},V_={key:0,class:"warn"},W_={key:3},B_=Le({__name:"ActionPicker",props:{tile:{}},setup(e){const t=e,n=k(()=>m.entityActions[t.tile.entity]),s=k(()=>t.tile.options?.action),i=k(()=>n.value?.find(C=>C.action===s.value?.action)),l=k(()=>m.actionPickerOpen||!s.value),r=k(()=>{const C=m.actionSearch.trim().toLocaleLowerCase();return(n.value||[]).filter(B=>`${B.name} ${B.action} ${B.description}`.toLocaleLowerCase().includes(C))});n.value===void 0&&wm(t.tile.entity);function u(C){const B=C.action===s.value?.action;t.tile.options={...t.tile.options,action:B?s.value:{action:C.action}},m.actionPickerOpen=!1,pt()}function f(C,B){const O={...t.tile.options?.action?.data||{}};B===void 0?delete O[C]:O[C]=B,t.tile.options={...t.tile.options,action:{action:s.value.action,...Object.keys(O).length?{data:O}:{}}},pt()}const h=k(()=>{if(!i.value)return[];const C=t.tile.options?.action?.data||{};return i.value.fields.filter(B=>B.required&&C[B.key]===void 0).map(B=>B.name)}),p=C=>Object.keys(C.selector||{})[0]||"text",b=C=>(C.selector||{})[p(C)]||{},v=C=>C.example===void 0?"":typeof C.example=="string"?C.example:JSON.stringify(C.example);function y(C){const B=b(C),O=p(C);return Array.isArray(C.options)?C.options.map(E=>[E,E]):O==="select"&&Array.isArray(B.options)&&!B.multiple?B.options.map(E=>E&&typeof E=="object"?[String(E.value),String(E.label??E.value)]:[String(E),String(E)]):null}const I=C=>"#"+C.map(B=>Math.max(0,Math.min(255,Number(B)||0)).toString(16).padStart(2,"0")).join(""),T=C=>Array.isArray(C)&&C.length===3?I(C):"#ffffff",$=C=>C===void 0?"":typeof C=="string"?C:JSON.stringify(C);function A(C,B){const O=B.trim();if(!O)return f(C.key,void 0);if(p(C)==="text")return f(C.key,B);try{f(C.key,JSON.parse(O))}catch{f(C.key,B)}}function S(C,B){f(C.key,B===""||!Number.isFinite(Number(B))?void 0:Number(B))}const D=C=>b(C).unit_of_measurement||p(C)==="color_temp"&&b(C).unit||"";return(C,B)=>(g(),_("div",b_,[o("span",v_,d(a(c)("editor.action.label")),1),n.value===void 0?(g(),_("small",g_,d(a(c)("editor.action.asking")),1)):n.value===null?(g(),_("small",__,d(a(c)("editor.action.not_answering")),1)):(g(),_(q,{key:2},[o("button",{type:"button",class:"row","aria-expanded":l.value?"true":"false",onClick:B[0]||(B[0]=O=>a(m).actionPickerOpen=!l.value)},[o("span",w_,[o("b",null,d(i.value?i.value.name:s.value?s.value.action:a(c)("editor.action.choose")),1),s.value?(g(),_("small",k_,d(s.value.action),1)):W("",!0)]),o("span",$_,d(l.value?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,y_),l.value?(g(),_("div",x_,[Ee(o("input",{"onUpdate:modelValue":B[1]||(B[1]=O=>a(m).actionSearch=O),type:"search",placeholder:a(c)("editor.action.search"),"aria-label":a(c)("editor.action.search_label")},null,8,S_),[[Je,a(m).actionSearch]]),o("div",C_,[(g(!0),_(q,null,he(r.value,O=>(g(),_("button",{key:O.action,type:"button",class:"action-choice","aria-pressed":O.action===s.value?.action?"true":"false",onClick:E=>u(O)},[o("strong",null,d(O.name),1),o("small",null,d(O.description?`${O.action} · ${O.description}`:O.action),1)],8,T_))),128)),r.value.length?W("",!0):(g(),_("p",E_,d(a(c)("editor.action.none_found")),1))])])):W("",!0),s.value&&!i.value?(g(),_("small",A_,d(a(c)("editor.action.gone")),1)):W("",!0),i.value&&!l.value?(g(),_(q,{key:2},[(g(!0),_(q,null,he(i.value.fields,O=>(g(),_("div",{key:O.key,class:"f"},[o("span",P_,d(O.required?O.name:a(c)("editor.action.optional",{name:O.name})),1),p(O)==="boolean"?(g(),it(kt,{key:0,choices:[["",a(c)("editor.action.not_set")],["true",a(c)("editor.action.on")],["false",a(c)("editor.action.off")]],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E==="true")},null,8,["choices","value","onPick"])):y(O)&&y(O).length<=4?(g(),it(kt,{key:1,choices:[["",a(c)("editor.action.not_set")],...y(O)],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E)},null,8,["choices","value","onPick"])):y(O)?(g(),_("select",{key:2,"aria-label":O.name,value:String(s.value?.data?.[O.key]??""),onChange:E=>f(O.key,E.target.value===""?void 0:E.target.value)},[o("option",I_,d(a(c)("editor.action.not_set")),1),(g(!0),_(q,null,he(y(O),([E,L])=>(g(),_("option",{key:E,value:E},d(L),9,L_))),128))],40,O_)):p(O)==="color_rgb"?(g(),_("div",M_,[o("input",{type:"color","aria-label":O.name,value:T(s.value?.data?.[O.key]),onInput:E=>f(O.key,[1,3,5].map(L=>parseInt(E.target.value.slice(L,L+2),16)))},null,40,R_),o("button",{type:"button",class:"btn quiet mini",onClick:E=>f(O.key,void 0)},d(a(c)("editor.action.not_set")),9,N_)])):p(O)==="number"||p(O)==="color_temp"?(g(),_("div",F_,[o("input",{type:"number","aria-label":O.name,min:b(O).min,max:b(O).max,step:b(O).step==="any"?"any":b(O).step,value:s.value?.data?.[O.key]??"",placeholder:v(O),onInput:E=>S(O,E.target.value)},null,40,D_),D(O)?(g(),_("span",U_,d(D(O)),1)):W("",!0)])):(g(),_("input",{key:5,type:"text","aria-label":O.name,value:$(s.value?.data?.[O.key]),placeholder:v(O),onInput:E=>A(O,E.target.value)},null,40,j_)),O.description?(g(),_("small",H_,d(O.description),1)):W("",!0)]))),128)),h.value.length?(g(),_("small",V_,d(a(c)("editor.action.needs",{fields:h.value.join(", ")})),1)):W("",!0)],64)):W("",!0),a(kn)(0,2,58)?W("",!0):(g(),_("small",W_,d(a(c)("editor.action.needs_firmware")),1))],64))]))}}),K_={class:"f"},z_={class:"f-label"},q_=["aria-expanded"],Y_={class:"av mdi"},G_={class:"tx"},J_={class:"link"},X_={key:0,class:"picker"},Z_=["placeholder","aria-label"],Q_=["aria-pressed","title"],ey={class:"mdi"},ty=["aria-pressed","title"],ny={class:"icon-list"},sy={class:"icon-grid"},iy=["title","aria-label","aria-pressed","onClick"],oy={class:"mdi"},ly={key:0,class:"hint"},ay={key:1},Ru=Le({__name:"IconPicker",props:{selected:{},automatic:{},autoLabel:{},allowNone:{type:Boolean},note:{}},emits:["pick"],setup(e,{emit:t}){const n=e,s=t,i=ke(""),l=k(()=>qs(n.selected)),r=k(()=>n.selected==="none"?"":Ae(l.value?.cp||n.automatic)),u=k(()=>n.selected==="none"?c("editor.icon.none"):l.value?.label||n.autoLabel),f=k(()=>{const h=i.value.trim().toLocaleLowerCase();return(m.inventory.icons?.groups||[]).map(p=>({label:p.label,icons:p.icons.filter(b=>!h||`${b.label} ${b.name.replaceAll("-"," ")} ${p.label}`.toLocaleLowerCase().includes(h))})).filter(p=>p.icons.length)});return(h,p)=>(g(),_("div",K_,[o("span",z_,d(a(c)("editor.icon.label")),1),o("button",{type:"button",class:"row","aria-expanded":a(m).iconPickerOpen?"true":"false",onClick:p[0]||(p[0]=b=>a(m).iconPickerOpen=!a(m).iconPickerOpen)},[o("span",Y_,d(r.value),1),o("span",G_,[o("b",null,d(u.value),1)]),o("span",J_,d(a(m).iconPickerOpen?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,q_),a(m).iconPickerOpen?(g(),_("div",X_,[Ee(o("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>i.value=b),type:"search",placeholder:a(c)("editor.icon.search"),"aria-label":a(c)("editor.icon.search_label")},null,8,Z_),[[Je,i.value]]),o("button",{type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="auto"?"true":"false",title:e.autoLabel,onClick:p[2]||(p[2]=b=>s("pick","auto"))},[o("span",ey,d(a(Ae)(e.automatic)),1),o("span",null,d(e.autoLabel),1)],8,Q_),e.allowNone?(g(),_("button",{key:0,type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="none"?"true":"false",title:a(c)("editor.icon.none"),onClick:p[3]||(p[3]=b=>s("pick","none"))},[p[4]||(p[4]=o("span",{class:"mdi"},null,-1)),o("span",null,d(a(c)("editor.icon.none_text_only")),1)],8,ty)):W("",!0),o("div",ny,[(g(!0),_(q,null,he(f.value,b=>(g(),_("section",{key:b.label},[o("small",null,d(b.label),1),o("div",sy,[(g(!0),_(q,null,he(b.icons,v=>(g(),_("button",{key:v.name,type:"button",class:"icon-choice",title:v.label,"aria-label":a(c)("editor.icon.aria",{name:v.label}),"aria-pressed":e.selected===v.name?"true":"false",onClick:y=>s("pick",v.name)},[o("span",oy,d(a(Ae)(v.cp)),1)],8,iy))),128))])]))),128)),f.value.length?W("",!0):(g(),_("p",ly,d(a(c)("editor.icon.none_found")),1))])])):W("",!0),e.note?(g(),_("small",ay,d(e.note),1)):W("",!0)]))}}),ry={class:"dr-head"},cy={class:"tx"},uy={class:"mono"},dy=["aria-label"],fy={class:"dr-body"},py={class:"f"},hy={class:"f-label",for:"tile-name"},my=["value","placeholder"],by={key:1,class:"f"},vy={class:"f-label"},gy={key:2,class:"f"},_y={class:"f-label"},yy={key:0,class:"warn"},wy={class:"f"},ky={class:"f-label"},$y={key:0},xy={key:3,class:"f"},Sy={class:"f-label"},Cy={key:4,class:"f"},Ty={class:"f-label"},Ey={key:5,class:"f"},Ay={class:"f-label"},Py={key:7,class:"f"},Oy={class:"f-label"},Iy={key:0,class:"warn"},Ly={key:8,class:"f"},My={class:"f-label"},Ry={class:"f"},Ny={class:"f-label"},Fy={class:"sw"},Dy=["aria-label","aria-pressed","onClick"],Uy={class:"dr-foot"},jy=Le({__name:"TileInspector",props:{tile:{}},setup(e){const t=e,n=k(()=>t.tile.entity.split(".")[0]),s=k(()=>zs(t.tile.entity)),i=k(()=>us(t.tile.entity)),l=k(()=>m.layout?Ot(Xe(m.layout),m.layout.pages):1),r=k(()=>Et(t.tile.slot)+1),u=le=>!m.layout?.tiles.some(ee=>Et(ee.slot)===le-1),f=k(()=>{const le=Array.from({length:Math.min(un,l.value+1)},(ee,ce)=>ce+1);return i.value>le.length&&le.push(i.value),le.map(ee=>[ee,u(ee)?c("editor.tile.goes_to.empty",{page:ee}):String(ee)])}),h=k(()=>Xa.value?i.value>l.value?{text:c("editor.tile.goes_to.no_page",{page:i.value}),warn:!0}:{text:c("editor.tile.goes_to.hint"),warn:!1}:{text:c("editor.tile.goes_to.needs_firmware"),warn:!1}),p=k(()=>!m.layout?.tiles.some(le=>xe(le)!==xe(t.tile)&&Et(le.slot)===r.value-1)),b=k(()=>{const le=Array.from({length:l.value},(ee,ce)=>[ce+1,String(ce+1)]);return l.value (i.value?["single","wide"]:["single","wide","full"]).map(le=>[le,c(`editor.tile.size.${le}`)])),y=k(()=>i.value?"":Xa.value?c("editor.tile.size.full_hint"):c("editor.tile.size.needs_firmware")),I=k(()=>m.capabilities[t.tile.entity]),T=(le,ee)=>t.tile.options?.[le]??ee,$=k(()=>T("display",n.value==="screen"?"digital":"standard")),A=k(()=>{const le=n.value==="screen"?["digital","analog"]:["standard","watch"],ee=I.value;return n.value==="weather"&&(!ee||ee.displays.includes("forecast")||$.value==="forecast")&&le.push("forecast"),n.value==="sensor"&&(!ee||ee.displays.includes("graph")||$.value==="graph")&&le.push("graph"),n.value==="sun"&&le.push("sunpath"),le.map(ce=>[ce,c(`editor.tile.display.${ce}`)])}),S=k(()=>{const le=I.value;return le&&$.value==="graph"&&!le.displays.includes("graph")?c("editor.tile.display.no_graph"):le&&$.value==="forecast"&&!le.displays.includes("forecast")?c("editor.tile.display.no_forecast"):""}),D=k(()=>T("size","single")),C=k(()=>m.inventory.controls?.[n.value]),B=k(()=>T("controls",D.value==="full"?"none":C.value?.default)),O=k(()=>{const le=I.value;return(C.value?.choices||[]).filter(ee=>!le||ee.key==="none"||ee.key===B.value||le.controls.includes(ee.key)).map(ee=>[ee.key,ee.label])}),E=k(()=>{const le=I.value;return le&&B.value!=="none"&&!le.controls.includes(B.value)?{text:c("editor.tile.controls.not_offered"),warn:!0}:{text:kn(0,2,19)?c(D.value==="full"?"editor.tile.controls.full_hint":"editor.tile.controls.wide_hint"):c("editor.tile.controls.needs_firmware"),warn:!1}}),L=k(()=>T("tap","auto")),M=k(()=>{const le=["auto","detail","none"];return((I.value?I.value.toggle:Ja.includes(n.value))||L.value==="toggle")&&le.push("toggle"),le.push("action"),le.map(ee=>[ee,c(`editor.tile.tap.${ee}`)])}),U=k(()=>L.value==="toggle"&&I.value&&!I.value.toggle?{text:c("editor.tile.tap.no_toggle"),warn:!0}:L.value==="toggle"&&!Ja.includes(n.value)&&!kn(0,2,58)?{text:c("editor.tile.tap.toggle_needs_firmware"),warn:!1}:L.value==="toggle"?{text:c("editor.tile.tap.hold"),warn:!1}:null),R=k(()=>T("inline","none")),Y=k(()=>rm.includes(n.value)&&(!I.value||I.value.inline||R.value==="slider")),te=k(()=>R.value==="slider"&&I.value&&!I.value.inline),ye=k(()=>T("history_hours",24)),re=k(()=>Object.entries(m.inventory.backgrounds||{})),be=k(()=>!!m.inventory.entities.find(le=>le.id===t.tile.entity)?.icon),ge=k(()=>!!m.inventory.icons&&(n.value!=="screen"||i.value>0)&&!["forecast","sunpath"].includes($.value));function we(le){t.tile.name=le,pt()}function Ye(){m.inspector={kind:"inspect",entity:t.tile.entity}}return(le,ee)=>(g(),_(q,null,[o("div",ry,[o("span",{class:"av mdi",style:Ue({color:a(jt)(e.tile.entity)[2],background:a(jt)(e.tile.entity)[3]})},d(a(Ae)(a(vs)(e.tile))),5),o("span",cy,[o("b",null,d(e.tile.name||s.value),1),o("small",uy,d(e.tile.entity),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ee[0]||(ee[0]=(...ce)=>a(Ze)&&a(Ze)(...ce))},"✕",8,dy)]),o("div",fy,[o("div",py,[o("label",hy,d(a(c)("editor.tile.name")),1),o("input",{id:"tile-name",value:e.tile.name,placeholder:s.value,maxlength:"60",onInput:ee[1]||(ee[1]=ce=>we(ce.target.value))},null,40,my)]),ge.value?(g(),it(Ru,{key:0,selected:e.tile.options?.icon||"auto",automatic:a(Cn)(e.tile.entity),"auto-label":a(c)(be.value?"editor.tile.icon.auto_ha":"editor.tile.icon.auto_default"),note:a(kn)(0,2,18)?"":a(c)("editor.tile.icon.needs_firmware"),onPick:ee[2]||(ee[2]=ce=>a(mn)(e.tile,"icon",ce))},null,8,["selected","automatic","auto-label","note"])):W("",!0),i.value?(g(),_("div",by,[o("span",vy,d(a(c)("editor.tile.goes_to.label")),1),se(kt,{choices:f.value,value:i.value,onPick:ee[3]||(ee[3]=ce=>a(Em)(e.tile,Number(ce)))},null,8,["choices","value"]),o("small",{class:me({warn:h.value.warn})},d(h.value.text),3)])):(g(),_("div",gy,[o("span",_y,d(a(c)("editor.tile.display.label")),1),se(kt,{choices:A.value,value:$.value,onPick:ee[4]||(ee[4]=ce=>a(mn)(e.tile,"display",ce))},null,8,["choices","value"]),S.value?(g(),_("small",yy,d(S.value),1)):W("",!0)])),o("div",wy,[o("span",ky,d(a(c)("editor.tile.size.label")),1),se(kt,{choices:v.value,value:D.value,onPick:ee[5]||(ee[5]=ce=>a(mn)(e.tile,"size",ce))},null,8,["choices","value"]),y.value?(g(),_("small",$y,d(y.value),1)):W("",!0)]),b.value.length>1?(g(),_("div",xy,[o("span",Sy,d(a(c)("editor.tile.page.label")),1),se(kt,{choices:b.value,value:r.value,onPick:ee[6]||(ee[6]=ce=>a(Cm)(e.tile,Number(ce)-1))},null,8,["choices","value"])])):W("",!0),C.value&&D.value!=="single"&&!i.value?(g(),_("div",Cy,[o("span",Ty,d(a(c)("editor.tile.controls.label")),1),se(kt,{choices:O.value,value:B.value,onPick:ee[7]||(ee[7]=ce=>a(mn)(e.tile,"controls",ce))},null,8,["choices","value"]),o("small",{class:me({warn:E.value.warn})},d(E.value.text),3)])):W("",!0),n.value!=="screen"&&!i.value?(g(),_("div",Ey,[o("span",Ay,d(a(c)("editor.tile.tap.label")),1),se(kt,{choices:M.value,value:L.value,onPick:ee[8]||(ee[8]=ce=>a(mn)(e.tile,"tap",ce))},null,8,["choices","value"]),U.value?(g(),_("small",{key:0,class:me({warn:U.value.warn})},d(U.value.text),3)):W("",!0)])):W("",!0),n.value!=="screen"&&!i.value&&L.value==="action"?(g(),it(B_,{key:6,tile:e.tile},null,8,["tile"])):W("",!0),Y.value&&!i.value?(g(),_("div",Py,[o("span",Oy,d(a(c)("editor.tile.slider.label")),1),se(kt,{choices:[["none",a(c)("editor.tile.slider.no")],["slider",a(c)("editor.tile.slider.yes")]],value:R.value,onPick:ee[9]||(ee[9]=ce=>a(mn)(e.tile,"inline",ce))},null,8,["choices","value"]),te.value?(g(),_("small",Iy,d(a(c)("editor.tile.slider.nothing")),1)):W("",!0)])):W("",!0),n.value==="sensor"&&!i.value?(g(),_("div",Ly,[o("span",My,d(a(c)("editor.tile.history.label")),1),se(kt,{choices:[1,6,24].map(ce=>[ce,a(c)("editor.tile.history.hours",ce)]),value:ye.value,onPick:ee[10]||(ee[10]=ce=>a(mn)(e.tile,"history_hours",Number(ce)))},null,8,["choices","value"])])):W("",!0),o("div",Ry,[o("span",Ny,d(a(c)("editor.tile.background.label")),1),o("div",Fy,[(g(!0),_(q,null,he(re.value,([ce,tt])=>(g(),_("button",{key:ce,type:"button","aria-label":a(c)("editor.tile.background.aria",{name:tt.label}),"aria-pressed":(e.tile.options?.background||"auto")===ce?"true":"false",onClick:$e=>a(mn)(e.tile,"background",ce)},[o("i",{class:me(tt.color?"":ce==="none"?"none":"auto"),style:Ue(tt.color?{background:tt.color}:void 0)},null,6),Me(d(tt.label),1)],8,Dy))),128))])])]),o("div",Uy,[o("button",{type:"button",class:"btn danger",onClick:ee[11]||(ee[11]=ce=>a(xu)(e.tile))},d(a(c)("editor.common.remove")),1),ee[12]||(ee[12]=o("span",{class:"spacer"},null,-1)),n.value!=="screen"?(g(),_("button",{key:0,type:"button",class:"btn quiet",onClick:Ye},d(a(c)("editor.common.read_current_data")),1)):W("",!0)])],64))}}),Hy={class:"dr-head"},Vy={class:"av mdi",style:{background:"var(--seg)",color:"var(--ink-2)"}},Wy={class:"tx"},By=["aria-label"],Ky={class:"dr-body"},zy={class:"f"},qy={class:"f-label",for:"title"},Yy=["value","placeholder"],Gy={class:"f"},Jy={class:"f-label",id:"topbar-caption"},Xy={style:{"text-transform":"none","letter-spacing":"0","font-weight":"500"}},Zy={class:"items",id:"topbar-chips",role:"list","aria-labelledby":"topbar-caption"},Qy=["data-index","aria-label","onPointerdown","onClick","onKeydown"],e0={class:"tx"},t0=["aria-label","onClick"],n0=["disabled","title"],s0={class:"live",id:"topbar-live"},i0={class:"f"},o0={class:"f-label"},l0={class:"f"},a0={class:"f-label"},r0={href:"#settings"},c0={key:2},u0={key:0,class:"dr-foot"},d0=["disabled"],f0=["disabled"],p0=Le({__name:"TopbarInspector",props:{index:{}},setup(e){const t=e,n=k(()=>fn()),s=k(()=>n.value[t.index]),i=k(()=>(m.fontsVersion,m.now,m.topbarPreviews,gu(n.value,wu.value,m.layout?.title||jn("editor.mockup.home"),bn))),l=k(()=>i.value.dropped),r=k(()=>m.inventory.header?.min_firmware||"0.2.32"),u=k(()=>{const[Y,te,ye]=r.value.split(".").map(Number);return kn(Y,te,ye)}),f=k(()=>u.value?c(l.value.size?"editor.topbar.hint.overflow":"editor.topbar.hint.reorder"):c("editor.topbar.hint.needs_firmware",{version:r.value})),h=(Y,te)=>{const ye=bn(Y);return ye.shown?l.value.has(te)?c("editor.topbar.detail.overflow"):ye.analog?c("editor.topbar.detail.dial"):ye.text:c("editor.topbar.detail.hidden")},p=Y=>{const te=bn(Y);return te.analog||Y.type!=="entity"?qs(vu[Y.type])?.cp:te.icon},b=Y=>m.topbarAdded?.key===at(Y)&&Date.now()-m.topbarAdded.time<1200;function v(Y){m.layout&&(m.layout.title=Y,pt())}function y(Y){const te=[...n.value];te[t.index]={...te[t.index],...Y},Ds(te)}const I=k(()=>s.value?bn(s.value).shown?l.value.has(t.index)?c("editor.topbar.live.overflow"):c("editor.topbar.live.looks"):c("editor.topbar.live.hidden"):""),T=k(()=>({clock:Wi(as.value,new Date(m.now),on.value),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),on.value)})),$=ke({index:-1,active:!1,moved:!1});let A=null,S=0,D=null,C=0;function B(Y,te){Y.button!==0||Y.target.closest(".x")||(Y.pointerType!=="touch"&&Y.preventDefault(),$.value={index:te,active:!1,moved:!1},A={x:Y.clientX,y:Y.clientY},D=Y.pointerId,clearTimeout(S),Y.pointerType==="touch"&&(S=window.setTimeout(O,260)),document.addEventListener("pointermove",L),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",M))}function O(){$.value.active=!0,document.addEventListener("touchmove",E,{passive:!1})}function E(Y){$.value.active&&Y.preventDefault()}function L(Y){if(Y.pointerId!==D||!A)return;if(!$.value.active){const re=Math.hypot(Y.clientX-A.x,Y.clientY-A.y);if(Y.pointerType==="touch"){re>10&&(clearTimeout(S),A=null);return}if(re<6)return;O()}const te=[...document.querySelectorAll(".items .item[data-index]")];let ye=$.value.index;if(te.forEach((re,be)=>{const ge=re.getBoundingClientRect();be<$.value.index&&Y.clientY $.value.index&&Y.clientY>ge.top+ge.height/2&&(ye=Math.max(ye,be))}),ye!==$.value.index&&m.layout){const re=[...n.value];re.splice(ye,0,...re.splice($.value.index,1)),m.layout.header={items:re};const be=t.index===$.value.index;$.value.index=ye,$.value.moved=!0,be&&Xt(ye)}}function M(Y){Y.pointerId===D&&(clearTimeout(S),document.removeEventListener("pointermove",L),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",M),document.removeEventListener("touchmove",E),$.value.active&&(C=Date.now()+400,$.value.moved&&pt()),$.value={index:-1,active:!1,moved:!1},A=null,D=null)}function U(Y){Date.now() {const ye=Ws("i18n-t");return g(),_(q,null,[o("div",Hy,[o("span",Vy,d(s.value?a(Ae)(p(s.value)||"F0150"):a(Ae)("F0150")),1),o("span",Wy,[o("b",null,d(s.value?s.value.type==="entity"?a(zs)(s.value.entity):a(gs)(s.value):a(c)("editor.topbar.title")),1),o("small",{class:me({mono:s.value?.type==="entity"})},d(s.value?s.value.type==="entity"?s.value.entity:a(c)("editor.topbar.builtin"):a(c)("editor.topbar.items",{used:n.value.length},a(gn)())),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:te[0]||(te[0]=(...re)=>a(Ze)&&a(Ze)(...re))},"✕",8,By)]),o("div",Ky,[o("div",zy,[o("label",qy,d(a(c)("editor.topbar.name")),1),o("input",{id:"title",value:a(m).layout?.title,maxlength:"60",placeholder:a(c)("editor.topbar.name_placeholder"),onInput:te[1]||(te[1]=re=>v(re.target.value))},null,40,Yy)]),o("div",Gy,[o("span",Jy,[Me(d(a(c)("editor.topbar.right"))+" ",1),o("span",Xy," · "+d(n.value.length)+" / "+d(a(gn)()),1)]),o("div",Zy,[(g(!0),_(q,null,he(n.value,(re,be)=>(g(),_("div",{key:a(at)(re)+be,class:me(["item",{selected:be===e.index,"is-hidden":!a(bn)(re).shown,"is-overflow":l.value.has(be),"just-added":b(re),"dragging-chip":$.value.active&&$.value.index===be}]),role:"listitem",tabindex:"0","data-index":be,"aria-label":a(c)("editor.topbar.item_label",{name:a(gs)(re),slot:be+1}),onPointerdown:ge=>B(ge,be),onClick:ge=>U(be),onKeydown:ge=>R(ge,be)},[te[9]||(te[9]=o("span",{class:"grip","aria-hidden":"true"},"⋮⋮",-1)),o("span",{class:"av mdi",style:Ue(a(bn)(re).color?{color:a(bn)(re).color}:void 0)},d(p(re)?a(Ae)(p(re)):""),5),o("span",e0,[o("b",null,d(a(gs)(re)),1),o("small",null,d(h(re,be)),1)]),o("button",{type:"button",class:"x","aria-label":a(c)("editor.topbar.remove_named",{name:a(gs)(re)}),onClick:Pt(ge=>a(nr)(be),["stop"])},"✕",8,t0)],42,Qy))),128)),o("button",{type:"button",class:"ghost-btn",id:"topbar-add",disabled:n.value.length>=a(gn)(),title:n.value.length>=a(gn)()?a(c)("editor.topbar.max",a(gn)()):a(c)("editor.topbar.add_title"),onClick:te[2]||(te[2]=(...re)=>a(er)&&a(er)(...re))},d(a(c)("editor.topbar.add_button")),9,n0)]),o("small",{id:"topbar-hint",class:me({warn:l.value.size>0&&u.value})},d(f.value),3)]),s.value?(g(),_(q,{key:0},[o("div",s0,[o("small",null,d(I.value),1),se(Mu,{items:[s.value],single:""},null,8,["items"])]),s.value.type==="entity"?(g(),_(q,{key:0},[o("div",i0,[o("span",o0,d(a(c)("editor.topbar.content.label")),1),se(kt,{choices:(a(m).inventory.header?.contents||[]).map(re=>[re.key,re.label]),value:s.value.content,onPick:te[3]||(te[3]=re=>y({content:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.content.hint")),1)]),se(Ru,{selected:s.value.icon||"auto",automatic:a(m).topbarPreviews[a(at)(s.value)]?.auto_icon||a(Cn)(s.value.entity),"auto-label":a(c)("editor.topbar.auto_icon"),"allow-none":"",onPick:te[4]||(te[4]=re=>y({icon:re}))},null,8,["selected","automatic","auto-label"]),o("div",l0,[o("span",a0,d(a(c)("editor.topbar.show.label")),1),se(kt,{choices:(a(m).inventory.header?.shows||[]).map(re=>[re.key,re.label]),value:s.value.show,onPick:te[5]||(te[5]=re=>y({show:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.show.hint")),1)])],64)):s.value.type!=="date"?(g(),it(ye,{key:1,keypath:a(as)?"editor.topbar.clock_24":"editor.topbar.clock_12",tag:"small",id:"topbar-clock",scope:"global"},{settings:oe(()=>[o("a",r0,d(a(c)("editor.topbar.clock_settings")),1)]),_:1},8,["keypath"])):(g(),_("small",c0,d(a(c)("editor.topbar.date_hint",{date:T.value.date})),1))],64)):W("",!0)]),s.value?(g(),_("div",u0,[o("button",{type:"button",class:"btn danger",onClick:te[6]||(te[6]=re=>a(nr)(e.index))},d(a(c)("editor.common.remove")),1),te[10]||(te[10]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",disabled:e.index===0,onClick:te[7]||(te[7]=re=>a(bo)(e.index,e.index-1)&&a(Xt)(e.index-1))},d(a(c)("editor.topbar.up")),9,d0),o("button",{type:"button",class:"btn quiet",disabled:e.index>=n.value.length-1,onClick:te[8]||(te[8]=re=>a(bo)(e.index,e.index+1)&&a(Xt)(e.index+1))},d(a(c)("editor.topbar.down")),9,f0)])):W("",!0)],64)}}}),h0={class:"dr-head"},m0={class:"tx"},b0=["aria-label"],v0={class:"dr-body"},g0={class:"f"},_0={class:"f-label"},y0={class:"options"},w0=["disabled","onClick"],k0={class:"mdi"},$0={class:"tx"},x0={key:0,class:"f"},S0={class:"f-label"},C0={class:"options"},T0=["disabled","onClick"],E0={class:"mdi"},A0={class:"tx"},P0={class:"f"},O0={class:"f-label",for:"topbar-search"},I0=["placeholder","aria-label"],L0={class:"options"},M0=["disabled","onClick"],R0={class:"mdi"},N0={class:"tx"},F0={key:0,class:"hint"},D0={key:1,class:"hint"},U0={class:"dr-foot"},j0=Le({__name:"TopbarAdd",setup(e){const t=ke(""),n=k(()=>new Set(fn().map(at))),s=k(()=>({clock:Wi(as.value,new Date(m.now),on.value),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),on.value)})),i=k(()=>m.inventory.header?.suggestions?.[m.selected||""]||[]),l=k(()=>{const u=t.value.trim().toLocaleLowerCase();return m.inventory.entities.filter(f=>`${f.name} ${f.id} ${f.area||""} ${f.device||""}`.toLocaleLowerCase().includes(u))}),r=u=>({type:"entity",entity:u,content:"state",icon:"auto",show:"always"});return(u,f)=>(g(),_(q,null,[o("div",h0,[f[3]||(f[3]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"18px"}},"+",-1)),o("span",m0,[o("b",null,d(a(c)("editor.topbar.add.title")),1),o("small",null,d(a(c)("editor.topbar.add.slots",{used:a(fn)().length},a(gn)())),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,b0)]),o("div",v0,[o("div",g0,[o("span",_0,d(a(c)("editor.topbar.add.builtin")),1),o("div",y0,[(g(!0),_(q,null,he(a(m).inventory.header?.builtin||[],h=>(g(),_("button",{key:h.type,type:"button",class:"option",disabled:n.value.has(a(at)({type:h.type})),onClick:p=>a(vo)({type:h.type})},[o("span",k0,d(a(Ae)(a(qs)(a(vu)[h.type])?.cp||"F0150")),1),o("span",$0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)({type:h.type}))?a(c)("editor.topbar.add.added"):s.value[h.type]),1)])],8,w0))),128))])]),i.value.length?(g(),_("div",x0,[o("span",S0,d(a(c)("editor.topbar.add.suggestions")),1),o("div",C0,[(g(!0),_(q,null,he(i.value,h=>(g(),_("button",{key:a(at)(h.item),type:"button",class:"option",disabled:n.value.has(a(at)(h.item)),onClick:p=>a(vo)(h.item)},[o("span",E0,d(a(Ae)(h.icon||a(Cn)(h.item.entity))),1),o("span",A0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)(h.item))?a(c)("editor.topbar.add.added"):[h.name,h.area].filter(Boolean).join(" · ")),1)])],8,T0))),128))])])):W("",!0),o("div",P0,[o("label",O0,d(a(c)("editor.topbar.add.entity")),1),Ee(o("input",{id:"topbar-search","onUpdate:modelValue":f[1]||(f[1]=h=>t.value=h),type:"search",placeholder:a(c)("editor.topbar.add.search"),"aria-label":a(c)("editor.topbar.add.search_label")},null,8,I0),[[Je,t.value]]),o("div",L0,[(g(!0),_(q,null,he(l.value.slice(0,40),h=>(g(),_("button",{key:h.id,type:"button",class:"option",disabled:n.value.has(a(at)(r(h.id))),onClick:p=>a(vo)(r(h.id))},[o("span",R0,d(a(Ae)(a(Cn)(h.id))),1),o("span",N0,[o("strong",null,d(h.name),1),o("small",null,d([h.area,h.id].filter(Boolean).join(" · ")),1)])],8,M0))),128)),l.value.length?l.value.length>40?(g(),_("p",D0,d(a(c)("editor.common.results",l.value.length)),1)):W("",!0):(g(),_("p",F0,d(a(c)("editor.topbar.add.none_found")),1))])])]),o("div",U0,[f[4]||(f[4]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",onClick:f[2]||(f[2]=(...h)=>a(Ze)&&a(Ze)(...h))},d(a(c)("editor.common.cancel")),1)])],64))}}),H0={class:"dr-head"},V0={class:"tx"},W0=["aria-label"],B0={class:"dr-body",id:"inspector-section"},K0={id:"inspection-summary"},z0={key:0,class:"hint warn"},q0={key:1,class:"hint"},Y0={id:"inspection"},G0={class:"dr-foot"},J0=Le({__name:"InspectPanel",props:{entity:{}},setup(e){const t=e,n=ke(null),s=ke(c("editor.inspect.reading")),i=ke("");async function l(){if(m.selected){n.value=null,i.value="",s.value=c("editor.inspect.fetching");try{const u=await Nt(`screens/${encodeURIComponent(m.selected)}/inspect`),f=t.entity?u.tiles.filter(h=>h.entity===t.entity):u.tiles;n.value=f,s.value=JSON.stringify(t.entity?f[0]:u,null,2)}catch(u){i.value=u.message,s.value="",Ce(u.message)}}}const r=u=>{const f=m.layout?.tiles.find(h=>h.entity===u)?.options||{};return c("editor.inspect.options",{slider:c(f.inline==="slider"?"editor.inspect.yes":"editor.inspect.no"),display:bu(f.display||"standard"),size:am(f.size),control:nm({entity:u,options:f},m.inventory),background:m.inventory.backgrounds?.[f.background||"auto"]?.label||c("editor.inspect.background_default")})};return An(l),Ct(()=>t.entity,l),(u,f)=>(g(),_(q,null,[o("div",H0,[f[1]||(f[1]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"16px"}},"⌕",-1)),o("span",V0,[o("b",null,d(a(c)("editor.inspect.title")),1),o("small",{class:me({mono:e.entity})},d(e.entity||a(c)("editor.inspect.subtitle")),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,W0)]),o("div",B0,[o("div",K0,[i.value?(g(),_("p",z0,d(i.value),1)):n.value?W("",!0):(g(),_("p",q0,d(a(c)("editor.inspect.fetching")),1)),(g(!0),_(q,null,he(n.value||[],(h,p)=>(g(),_("article",{key:p,class:"inspection-tile"},[o("strong",null,d(h.entity),1),o("span",null,d(a(c)("editor.inspect.status",{status:h.word||h.state})),1),o("small",null,d(r(h.entity)),1)]))),128))]),o("pre",Y0,d(s.value),1)]),o("div",G0,[o("button",{type:"button",class:"btn quiet",onClick:l},d(a(c)("editor.inspect.read_again")),1),f[2]||(f[2]=o("span",{class:"spacer"},null,-1))])],64))}}),X0=["aria-hidden"],Z0=Le({__name:"Drawer",setup(e){const t=k(()=>!!(m.inspector&&(m.inspector.kind!=="tile"||co.value)));return(n,s)=>(g(),_("aside",{class:me(["drawer",{open:t.value}]),id:"tile-sheet","aria-hidden":t.value?"false":"true",onClick:s[0]||(s[0]=Pt(()=>{},["stop"]))},[a(m).inspector?(g(),_(q,{key:0},[a(m).inspector.kind==="tile"&&a(co)?(g(),it(jy,{key:0,tile:a(co)},null,8,["tile"])):a(m).inspector.kind==="bar"?(g(),it(p0,{key:1,index:a(m).inspector.index},null,8,["index"])):a(m).inspector.kind==="bar-add"?(g(),it(j0,{key:2})):a(m).inspector.kind==="inspect"?(g(),it(J0,{key:3,entity:a(m).inspector.entity},null,8,["entity"])):W("",!0)],64)):W("",!0)],10,X0))}}),Q0={class:"main-head"},e1={class:"eyebrow",id:"screen-name"},t1=["title"],n1={class:"head-right"},s1={class:"seg",role:"tablist"},i1=["aria-pressed"],o1=["aria-pressed"],l1={key:1,id:"dirty",class:"chip dirty"},a1=["disabled"],r1={key:0,class:"spin small"},c1=["aria-label","aria-expanded"],u1={key:3,class:"menu",role:"menu"},d1=["disabled","title"],f1=["disabled","aria-expanded"],p1={key:0,class:"sub"},h1=["onClick"],m1=["disabled","title"],b1={class:"body",id:"body"},v1=Le({__name:"ScreenView",setup(e){const t=k(()=>_t.value),n=k(()=>t.value.online?`${t.value.delivery} · ${t.value.status}`:c("editor.screen_view.offline")),s=k(()=>Pu(t.value)&&t.value.online&&t.value.update?.profile&&t.value.update?.host),i=k(()=>m.inventory.screens.filter(T=>T.id!==t.value.id&&T.layout?.tiles?.length)),l=ke(!1),r=ke(null);function u(){m.menuOpen=!1,l.value=!1}function f(){u(),m.overrideProfile=t.value.update?.profile||null,m.overrideFriendly=t.value.name,He("#override")}function h(){u(),m.selectedTile=null,m.inspector={kind:"inspect"}}function p(T){u(),!(m.dirty&&!confirm(c("editor.screen_view.confirm.copy")))&&Om(T)}function b(){u(),r.value?.click()}async function v(T){const $=T.target,A=$.files?.[0];$.value="",A&&(m.dirty&&!confirm(c("editor.screen_view.confirm.import"))||Lm(await A.text()))}function y(T){if(T.key==="Escape")if(m.menuOpen)u();else{if(m.palette)return;m.inspector&&!T.target?.closest?.(".picker")&&Ze()}else(T.metaKey||T.ctrlKey)&&T.key.toLowerCase()==="s"&&(T.preventDefault(),m.dirty&&Wo())}function I(T){m.menuOpen&&!T.target.closest(".head-right .menu, #more")&&u()}return An(()=>{document.addEventListener("keydown",y),document.addEventListener("click",I)}),rs(()=>{document.removeEventListener("keydown",y),document.removeEventListener("click",I)}),(T,$)=>(g(),_(q,null,[o("header",Q0,[o("div",null,[o("span",e1,d(t.value.name),1),o("h1",null,d(a(m).layout?.title||a(jn)("editor.mockup.home")),1)]),o("span",{id:"delivery",class:me(["chip",{off:!t.value.online}]),title:n.value},[$[9]||($[9]=o("span",{class:"dot"},null,-1)),Me(d(n.value),1)],10,t1),o("div",n1,[o("div",s1,[o("button",{type:"button",id:"tab-layout",role:"tab","aria-pressed":a(m).tab==="layout"?"true":"false",onClick:$[0]||($[0]=A=>a(m).tab="layout")},d(a(c)("editor.screen_view.tabs.layout")),9,i1),o("button",{type:"button",id:"tab-settings",role:"tab","aria-pressed":a(m).tab==="settings"?"true":"false",onClick:$[1]||($[1]=A=>{a(m).tab="settings",a(Ze)()})},d(a(c)("editor.screen_view.tabs.settings")),9,o1)]),a(m).dirty?(g(),_("span",l1,d(a(c)("editor.common.unsaved")),1)):(g(),_("span",{key:0,id:"dirty",class:me(["chip",{sent:a(m).saved}])},d(a(m).saved?a(c)("editor.screen_view.sent"):a(c)("editor.screen_view.all_saved")),3)),a(m).dirty?(g(),_("button",{key:2,id:"save",type:"button",class:"btn primary",disabled:a(m).busy,title:"⌘S",onClick:$[2]||($[2]=A=>a(Wo)())},[a(m).busy?(g(),_("span",r1)):W("",!0),Me(d(a(m).busy?a(c)("editor.common.saving"):a(c)("editor.common.save_send")),1)],8,a1)):W("",!0),o("button",{id:"more",type:"button",class:"icon-btn","aria-label":a(c)("editor.screen_view.more"),"aria-haspopup":"menu","aria-expanded":a(m).menuOpen?"true":"false",onClick:$[3]||($[3]=Pt(A=>{a(m).menuOpen=!a(m).menuOpen,l.value=!1},["stop"]))},"···",8,c1),a(m).menuOpen?(g(),_("div",u1,[o("button",{type:"button",role:"menuitem",id:"identify",disabled:!a(zn)(t.value)||!t.value.online,title:a(zn)(t.value)?"":a(c)("editor.screen_view.menu.identify_needs"),onClick:$[4]||($[4]=A=>{u(),a(Su)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.identify"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.identify_hint")),1)],8,d1),o("button",{type:"button",role:"menuitem",id:"inspect",onClick:h},[Me(d(a(c)("editor.common.read_current_data"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.inspect_hint")),1)]),$[12]||($[12]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"copy-layout",disabled:!i.value.length,"aria-expanded":l.value?"true":"false",onClick:$[5]||($[5]=Pt(A=>l.value=!l.value,["stop"]))},[Me(d(a(c)("editor.screen_view.menu.copy"))+" ",1),o("small",null,d(i.value.length?a(c)("editor.screen_view.menu.copy_screens",i.value.length):a(c)("editor.screen_view.menu.copy_none")),1)],8,f1),l.value?(g(),_("div",p1,[(g(!0),_(q,null,he(i.value,A=>(g(),_("button",{key:A.id,type:"button",role:"menuitem",onClick:S=>p(A.id)},[Me(d(A.name)+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.copy_tiles",A.layout.tiles.length)),1)],8,h1))),128))])):W("",!0),o("button",{type:"button",role:"menuitem",id:"export-layout",onClick:$[6]||($[6]=A=>{u(),a(Tu)()})},[Me(d(a(c)("editor.screen_view.menu.export"))+" ",1),$[10]||($[10]=o("small",null,"JSON",-1))]),o("button",{type:"button",role:"menuitem",id:"import-layout",onClick:b},[Me(d(a(c)("editor.screen_view.menu.import"))+" ",1),$[11]||($[11]=o("small",null,"JSON",-1))]),$[13]||($[13]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"open-override",disabled:!t.value.update?.profile,title:t.value.update?.profile?"":a(c)("editor.screen_view.menu.override_none"),onClick:f},[Me(d(a(c)("editor.screen_view.menu.override"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.override_hint")),1)],8,m1),o("button",{type:"button",role:"menuitem",onClick:$[7]||($[7]=A=>{u(),a(He)("#firmware")})},d(a(c)("editor.nav.firmware")),1),s.value?(g(),_("button",{key:1,type:"button",role:"menuitem",onClick:$[8]||($[8]=A=>{u(),a(Ko)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.update"))+" ",1),o("small",null,d(t.value.update?.target),1)])):W("",!0)])):W("",!0),o("input",{ref_key:"fileInput",ref:r,type:"file",accept:"application/json,.json",hidden:"",onChange:v},null,544)])]),o("div",b1,[a(m).tab==="layout"?(g(),it(Jg,{key:0})):(g(),it(p_,{key:1})),se(Z0)])],64))}}),g1={key:0,id:"choose",class:"empty"},_1={key:1,id:"empty",class:"empty"},y1=Le({__name:"EmptyState",setup(e){return(t,n)=>a(m).inventory.screens.length?(g(),_("section",g1,[n[1]||(n[1]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.choose.title")),1),o("p",null,d(a(c)("editor.empty.choose.text")),1)])):(g(),_("section",_1,[n[2]||(n[2]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.start.title")),1),o("p",null,d(a(c)("editor.empty.start.text")),1),o("button",{id:"start",type:"button",class:"btn primary",onClick:n[0]||(n[0]=s=>a(He)("#new-screen"))},d(a(c)("editor.empty.start.button")),1)]))}}),w1={class:"panel",id:"settings-view"},k1={class:"panel-head"},$1={class:"tx"},x1={class:"eyebrow"},S1={id:"settings-title"},C1={class:"card-grid"},T1={class:"card"},E1={class:"tools"},A1={class:"tx"},P1={class:"tx"},O1={key:0,class:"card updates",id:"updates"},I1={id:"updates-hint"},L1=["aria-valuenow"],M1={class:"progress-text"},R1={key:0,class:"log-lines"},N1={key:2,class:"whatsnew"},F1={class:"check"},D1=["checked"],U1={key:1,class:"card",id:"language"},j1={class:"field"},H1={class:"f-label",for:"screen-language"},V1=["value","disabled"],W1={value:"auto"},B1=["value"],K1={key:0,id:"language-ha-missing"},z1={class:"field"},q1={class:"f-label",for:"time-format"},Y1=["value","disabled"],G1={value:"auto"},J1={value:"24"},X1={value:"12"},Z1={class:"field"},Q1={class:"f-label",for:"number-format"},e2=["value","disabled"],t2={value:"auto"},n2=["value"],s2={key:0,class:"actions",id:"language-profile"},i2=["disabled"],o2={class:"card"},l2={class:"tools"},a2={class:"tx"},r2={class:"card",id:"claude"},c2={class:"actions"},u2=["disabled"],d2={id:"claude-path"},f2={class:"actions"},p2={class:"btn quiet",id:"claude-download",href:"api/claude-skill.zip",download:"esp-screens.zip"},h2="https://github.com/MaxGramser/homeassistant_espscreen/blob/main/docs/TRANSLATING.md",m2=Le({__name:"AppSettingsView",setup(e){const t=k(()=>m.inventory.updates),n=k(()=>m.inventory.screens.filter(E=>E.update?.available).length),s=k(()=>t.value?t.value.busy?c("editor.settings.updates.busy",{version:t.value.target}):m.inventory.screens.length?n.value?c("editor.settings.updates.available",{version:t.value.target},n.value):c("editor.settings.updates.current",{version:t.value.target}):c("editor.settings.updates.no_screens",{version:t.value.target}):""),i=k(()=>m.inventory.screens.find(E=>E.update?.state==="running"||m.updating.includes(E.id))),l=k(()=>i.value?Xn(i.value):null),r=k(()=>(m.firmwareJob?.logs||[]).slice(-12).join(` -`)),u=k(()=>{const E=m.inventory.changelog,L=t.value?.target;return!Array.isArray(E)||!L?[]:E.filter(M=>M.firmware===L).flatMap(M=>M.lines).slice(0,10)}),f=k(()=>m.inventory.claude_skill),h=ke(!1);async function p(){h.value=!0;try{await Wm()}finally{h.value=!1}}const b=["point","comma","space"],v=k(()=>m.inventory.language),y=k(()=>{const E=v.value,L=E?.ha?su(E.ha,E.languages.map(M=>M.code)):void 0;return E?.languages.find(M=>M.code===L)?.name}),I=k(()=>v.value?.languages.find(E=>E.code===v.value.effective&&!E.checked)),T=E=>c(E==="12"?"editor.settings.language.clock_12":"editor.settings.language.clock_24"),$=E=>lu("1234.5",E),A=Xh(),S=k(()=>{const E=v.value;return E?{...A.clock&&A.clock!==(E.clock_effective||"24")?{clock:A.clock}:{},...A.numbers&&A.numbers!==(E.numbers_effective||"point")?{numbers:A.numbers}:{}}:{}}),D=k(()=>[S.value.clock&&T(S.value.clock),S.value.numbers&&$(os[S.value.numbers])].filter(Boolean).join(" · ")),C=ke(!1);async function B(E,L){const M=L.target;C.value=!0;const U=await ar({[E]:M.value});C.value=!1,U||(M.value=String(v.value?.[E]??"auto"))}async function O(){C.value=!0,await ar(S.value),C.value=!1}return(E,L)=>{const M=Ws("i18n-t");return g(),_("div",w1,[o("div",k1,[o("div",$1,[o("span",x1,d(a(c)("editor.nav.settings")),1),o("h1",S1,d(a(c)("editor.settings.title")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-settings",onClick:L[0]||(L[0]=U=>a(He)(""))},d(a(c)("editor.settings.back")),1)]),o("div",C1,[o("section",T1,[o("h2",null,d(a(c)("editor.settings.screens.title")),1),o("p",null,d(a(c)("editor.settings.screens.text")),1),o("div",E1,[o("button",{type:"button",class:"tool",onClick:L[1]||(L[1]=U=>a(He)("#new-screen"))},[L[9]||(L[9]=o("span",{class:"tool-icon"},"+",-1)),o("span",A1,[o("b",null,d(a(c)("editor.nav.new_screen")),1),o("small",null,d(a(c)("editor.nav.new_screen_detail")),1)])]),o("button",{type:"button",class:"tool",onClick:L[2]||(L[2]=U=>a(He)("#firmware"))},[L[10]||(L[10]=o("span",{class:"tool-icon"},"⇪",-1)),o("span",P1,[o("b",null,d(a(c)("editor.nav.firmware")),1),o("small",null,d(a(c)("editor.settings.screens.firmware_detail")),1)])])])]),t.value?(g(),_("section",O1,[o("h2",null,d(a(c)("editor.settings.updates.title")),1),o("p",I1,d(s.value),1),i.value&&l.value?(g(),_(q,{key:0},[o("div",{class:"progress",role:"progressbar","aria-valuenow":l.value.percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:l.value.percent+"%"})},null,4)],8,L1),o("div",M1,[o("span",null,d(i.value.name)+" · "+d(l.value.percent)+" %",1),o("span",null,d(l.value.text),1)]),r.value?(g(),_("pre",R1,d(r.value),1)):W("",!0)],64)):W("",!0),t.value.pending&&!t.value.busy&&t.value.pending>=2?(g(),_("button",{key:1,id:"update-all",type:"button",class:"btn primary",onClick:L[3]||(L[3]=(...U)=>a(ir)&&a(ir)(...U))},d(a(c)("editor.settings.updates.all",t.value.pending)),1)):W("",!0),u.value.length&&!a(Bo)()?(g(),_("details",N1,[o("summary",null,d(a(c)("editor.settings.updates.whats_new",{version:t.value.target})),1),o("ul",null,[(g(!0),_(q,null,he(u.value,U=>(g(),_("li",{key:U},d(U),1))),128))])])):W("",!0),o("label",F1,[o("input",{type:"checkbox",id:"auto-update",checked:!!t.value.auto,onChange:L[4]||(L[4]=U=>a(Vm)(U.target.checked))},null,40,D1),o("span",null,[Me(d(a(c)("editor.settings.updates.auto_label")),1),o("small",null,d(a(c)("editor.settings.updates.auto_hint")),1)])])])):W("",!0),v.value?(g(),_("section",U1,[o("h2",null,d(a(c)("editor.settings.language.title")),1),o("div",j1,[o("label",H1,d(a(c)("editor.settings.language.screen_language")),1),o("select",{id:"screen-language",value:v.value.setting,disabled:C.value,onChange:L[5]||(L[5]=U=>B("setting",U))},[o("option",W1,d(y.value?a(c)("editor.settings.language.auto",{name:y.value}):a(c)("editor.settings.language.auto_plain")),1),(g(!0),_(q,null,he(v.value.languages,U=>(g(),_("option",{key:U.code,value:U.code},d(U.checked?U.name:a(c)("editor.settings.language.unchecked",{name:U.name})),9,B1))),128))],40,V1),v.value.setting==="auto"&&!y.value?(g(),_("small",K1,d(a(c)("editor.settings.language.ha_missing")),1)):W("",!0),I.value?(g(),it(M,{key:1,keypath:"editor.settings.language.help",tag:"small",id:"language-help",scope:"global"},{name:oe(()=>[Me(d(I.value.name),1)]),guide:oe(()=>[o("a",{href:h2,target:"_blank",rel:"noopener"},d(a(c)("editor.settings.language.guide")),1)]),_:1})):W("",!0),o("small",null,d(a(c)("editor.settings.language.update_hint")),1)]),o("div",z1,[o("label",q1,d(a(c)("editor.settings.language.time")),1),o("select",{id:"time-format",value:v.value.clock||"auto",disabled:C.value,onChange:L[6]||(L[6]=U=>B("clock",U))},[o("option",G1,d(a(c)("editor.settings.language.time_auto",{clock:T(v.value.clock_auto||v.value.clock_effective)})),1),o("option",J1,d(T("24")),1),o("option",X1,d(T("12")),1)],40,Y1)]),o("div",Z1,[o("label",Q1,d(a(c)("editor.settings.language.numbers")),1),o("select",{id:"number-format",value:v.value.numbers||"auto",disabled:C.value,onChange:L[7]||(L[7]=U=>B("numbers",U))},[o("option",t2,d(a(c)("editor.settings.language.numbers_auto",{example:$(a(zm))})),1),(g(),_(q,null,he(b,U=>o("option",{key:U,value:U},d($(a(os)[U])),9,n2)),64))],40,e2)]),D.value?(g(),_("div",s2,[o("small",null,d(a(c)("editor.settings.language.profile",{formats:D.value})),1),o("button",{type:"button",class:"btn quiet mini",disabled:C.value,onClick:O},d(a(c)("editor.settings.language.use_profile")),9,i2)])):W("",!0),o("small",null,d(a(c)("editor.settings.language.editor_hint")),1)])):W("",!0),o("section",o2,[o("h2",null,d(a(c)("editor.nav.alerts")),1),o("p",null,d(a(c)("editor.settings.alerts.text")),1),o("div",l2,[o("button",{type:"button",class:"tool",onClick:L[8]||(L[8]=U=>a(He)("#alerts"))},[L[11]||(L[11]=o("span",{class:"tool-icon"},"!",-1)),o("span",a2,[o("b",null,d(a(c)("editor.nav.alerts")),1),o("small",null,d(a(c)("editor.settings.alerts.detail")),1)])])])]),o("section",r2,[L[12]||(L[12]=o("h2",null,"Claude",-1)),o("p",null,d(a(c)("editor.settings.claude.text")),1),o("div",c2,[o("button",{type:"button",id:"claude-install",class:me(["btn",f.value?.installed&&f.value.current?"quiet":"primary"]),disabled:!f.value||h.value,onClick:p},d(!f.value||!f.value.installed?a(c)("editor.settings.claude.install"):f.value.current?a(c)("editor.settings.claude.install_again"):a(c)("editor.settings.claude.update")),11,u2),o("span",{id:"claude-status",class:me(["chip",f.value&&f.value.installed?f.value.current?"good":"update":""]),role:"status"},d(f.value?f.value.installed?f.value.current?a(c)("editor.settings.claude.installed_chip"):a(c)("editor.settings.claude.newer"):a(c)("editor.settings.claude.not_installed"):a(c)("editor.common.loading")),3)]),se(M,{keypath:"editor.settings.claude.writes",tag:"small",scope:"global"},{path:oe(()=>[o("code",d2,d(f.value?.path||"/homeassistant/.claude/skills/esp-screens"),1)]),_:1}),o("div",f2,[o("a",p2,d(a(c)("editor.settings.claude.download")),1),o("small",null,d(a(c)("editor.settings.claude.upload")),1)])])])])}}}),b2={class:"panel",id:"installer"},v2={class:"panel-head"},g2={class:"tx"},_2={class:"eyebrow"},y2={id:"install-title"},w2={key:0},k2=["aria-label"],$2={class:"boards"},x2={class:"board"},S2={class:"board"},C2={class:"field"},T2={class:"f-label",for:"friendly_name"},E2=["placeholder"],A2={class:"node-line"},P2={id:"node-preview"},O2={key:0,class:"field",id:"node-label"},I2={class:"f-label",for:"node-name"},L2={key:1,id:"wifi-fields",class:"wifi"},M2={class:"hint",id:"wifi-status"},R2={key:0,class:"field",id:"wifi-ssid-label"},N2={class:"f-label",for:"wifi_ssid"},F2={key:1,class:"field",id:"wifi-password-label"},D2={class:"f-label",for:"wifi_password"},U2={class:"field"},j2={class:"f-label",for:"install-target"},H2={key:0,value:"usb"},V2=["value"],W2={value:"download"},B2={value:""},K2={id:"target-hint"},z2={key:2,class:"hint",id:"install-note"},q2={class:"actions"},Y2=["disabled"],G2={id:"install-status",class:"status-line error",role:"status"},J2={key:1,id:"install-progress",class:"card"},X2={class:"progress-head"},Z2={key:0,class:"spin",id:"progress-spin"},Q2={id:"progress-title"},ew={id:"progress-detail"},tw={key:0,id:"install-download",class:"card",style:{background:"var(--surface-2)"}},nw=["href","download"],sw={class:"steps",id:"download-steps"},iw={key:1,id:"install-result",class:"field"},ow={class:"key-box"},lw={class:"steps",id:"install-steps"},aw=["open"],rw={id:"install-log",class:"log"},cw={class:"actions"},uw="https://web.esphome.io/?dashboard_install",dw=Le({__name:"InstallerView",setup(e){const t=qn({board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),n=qn({view:"setup",file:null,friendly:"",board:"cyd",target:"",apiKey:null,nodeEdited:!1,jobState:null,picked:!1,action:null}),s=ke(!1),i=ke(null),l=ke(null),r=ke([]),u=ke(""),f=ke(""),h=ke(!1),p=ke(!1),b=ke(null);let v=0;function y($e){return $e.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,30).replace(/-+$/,"")||"screen"}function I($e){const K=$e.replace(/^\/dev\/serial\/by-id\/usb-/,"").replace(/-if\d+(-port\d+)?$/,"").replace(/_/g," ");return`USB · ${K===$e?$e.replace(/^\/dev\//,""):K}`}Ct(()=>t.friendly_name,()=>{n.nodeEdited||(t.name=y(t.friendly_name))});const T=k(()=>t.name||"…"),$=k(()=>i.value?.ports||[]),A=k(()=>i.value?.wifi),S=k(()=>A.value?.state==="new"||A.value?.state==="missing"),D=k(()=>A.value?.missing||[]),C=k(()=>c(A.value?.state==="new"?"editor.installer.wifi.new":"editor.installer.wifi.missing")),B=k(()=>A.value?.state==="ready"?c("editor.installer.wifi.ready"):A.value?.state==="invalid"?c("editor.installer.wifi.invalid"):""),O=k(()=>c(t.target==="usb"?"editor.installer.target.usb":t.target==="download"?"editor.installer.target.download":t.target?$.value.length>1?"editor.installer.target.several":"editor.installer.target.once":"editor.installer.target.later")),E=k(()=>t.target==="download"?c("editor.firmware.build_download"):t.target?c("editor.installer.install"):c("editor.installer.save_profile")),L=k(()=>i.value?.job?.state==="running"&&!(n.file&&i.value.job.file===n.file)),M=k(()=>h.value||A.value?.state==="invalid"||t.target==="usb"||!!t.target&&(L.value||!i.value?.available));function U(){const $e=t.target;($e==="download"||$e===""?n.picked:$.value.includes($e))||(t.target=$.value[0]||"usb")}async function R(){let $e;try{$e=await Nt("firmware")}catch(ie){u.value=ie.message;return}i.value=$e;const K=$e.job,ne=K&&n.file&&K.file===n.file;if(ne&&(n.jobState=K.state),n.view==="setup"){if(ne&&K.state==="running"){Y(K,$e.logs||[]);return}U(),u.value=L.value?c("editor.installer.busy",{file:K.file}):!$e.available&&t.target?c("editor.installer.no_cli"):B.value}else n.view==="progress"&&ne&&(l.value=K,r.value=$e.logs||[],K.state!=="running"&&K.state!=="success"&&(p.value=!0))}function Y($e,K){n.view="progress",n.jobState=$e.state,n.action=$e.action,l.value=$e,r.value=K}const te=k(()=>l.value?.state==="running"),ye=k(()=>n.view==="done"||l.value?.state==="success"),re=k(()=>n.action==="download"),be=k(()=>c(n.view==="done"?"editor.installer.title.saved":te.value?"editor.installer.title.running":ye.value?re.value?"editor.installer.title.ready":"editor.installer.title.done":"editor.installer.title.failed")),ge=k(()=>n.view==="done"?c("editor.installer.progress.saved",{file:n.file}):te.value?l.value?.stage==="upload"?c("editor.installer.progress.writing",{name:n.friendly}):c("editor.installer.progress.building"):ye.value?re.value?c("editor.installer.progress.ready",{name:n.friendly}):c("editor.installer.progress.installed",{name:n.friendly}):c(re.value?"editor.installer.progress.build_failed":"editor.installer.progress.install_failed")),we=k(()=>n.view==="done"?c("editor.installer.detail.saved"):te.value?l.value?.stage==="upload"?c("editor.installer.detail.uploading"):c(re.value?"editor.installer.detail.building_download":"editor.installer.detail.building"):ye.value?re.value?c("editor.installer.detail.downloaded"):c(n.board==="cyd"?"editor.installer.detail.booted_cyd":"editor.installer.detail.booted"):r.value.filter($e=>/error/i.test($e)).pop()||r.value.filter($e=>/failed/i.test($e)).pop()||c("editor.installer.detail.see_log")),Ye=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.file||"")}/download`,name:(n.file||"").replace(/\.yaml$/,"")+".factory.bin"}));async function le($e){const K=$e.target;if(n.nodeEdited||(t.name=y(t.friendly_name)),!!K.reportValidity()){h.value=!0,f.value="";try{const ne={board:t.board,friendly_name:t.friendly_name,name:t.name,target:t.target};S.value&&(D.value.includes("wifi_ssid")&&(ne.wifi_ssid=t.wifi_ssid),D.value.includes("wifi_password")&&(ne.wifi_password=t.wifi_password));const ie=await ft("firmware/profiles","POST",ne);Object.assign(n,{file:ie.file,apiKey:ie.api_key,friendly:t.friendly_name.trim(),board:t.board,target:t.target}),t.wifi_password="",ie.job?Y(ie.job,[]):n.view="done"}catch(ne){f.value=ne.message}finally{h.value=!1}}}async function ee(){try{if(!re.value){const{ports:K}=await Nt("firmware");!K.includes(n.target)&&K.length===1&&(n.target=K[0])}const $e=await ft("firmware/jobs","POST",re.value?{file:n.file,action:"download"}:{file:n.file,action:"install",target:n.target});Y($e,[])}catch($e){Ce($e.message)}}function ce(){Object.assign(n,{view:"setup",file:null,apiKey:null,nodeEdited:!1,jobState:null,target:"",picked:!1,action:null}),Object.assign(t,{board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),s.value=!1,l.value=null,r.value=[],f.value="",u.value="",p.value=!1,R()}function tt(){n.view==="progress"&&n.jobState!=="running"&&(n.view="done"),He("")}return An(()=>{R(),v=window.setInterval(R,3e3)}),rs(()=>clearInterval(v)),($e,K)=>{const ne=Ws("i18n-t");return g(),_("div",b2,[o("div",v2,[o("div",g2,[o("span",_2,d(a(c)("editor.nav.new_screen")),1),o("h1",y2,d(n.view==="setup"?a(c)("editor.installer.title.setup"):be.value),1),n.view==="setup"?(g(),_("p",w2,d(a(c)("editor.installer.intro")),1)):W("",!0)]),o("button",{type:"button",class:"btn quiet",id:"close-install","aria-label":a(c)("editor.common.close"),onClick:tt},d(a(c)("editor.common.back")),9,k2)]),n.view==="setup"?(g(),_("form",{key:0,id:"install-form",class:"card",onSubmit:Pt(le,["prevent"])},[o("fieldset",null,[o("legend",null,d(a(c)("editor.installer.board")),1),o("div",$2,[o("label",x2,[Ee(o("input",{type:"radio",name:"board",value:"cyd","onUpdate:modelValue":K[0]||(K[0]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_cyd")),1),K[13]||(K[13]=o("small",null,"ESP32-2432S028 · 320 × 240",-1))])]),o("label",S2,[Ee(o("input",{type:"radio",name:"board",value:"guition","onUpdate:modelValue":K[1]||(K[1]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_guition")),1),K[14]||(K[14]=o("small",null,"ESP32-S3-4848S040 · 480 × 480 · GT911",-1))])])])]),o("div",C2,[o("label",T2,d(a(c)("editor.installer.name")),1),Ee(o("input",{id:"friendly_name",name:"friendly_name","onUpdate:modelValue":K[2]||(K[2]=ie=>t.friendly_name=ie),required:"",maxlength:"60",placeholder:a(c)("editor.installer.name_placeholder"),autocomplete:"off"},null,8,E2),[[Je,t.friendly_name]]),o("small",A2,[Me(d(a(c)("editor.installer.device_name"))+" ",1),o("code",P2,d(T.value),1),o("button",{type:"button",class:"btn link mini",id:"edit-node",onClick:K[3]||(K[3]=ie=>{n.nodeEdited=!0,s.value=!0})},d(a(c)("editor.installer.customize")),1)]),o("small",null,d(a(c)("editor.installer.name_hint")),1)]),s.value?(g(),_("div",O2,[o("label",I2,d(a(c)("editor.installer.device_name")),1),Ee(o("input",{id:"node-name",name:"name","onUpdate:modelValue":K[4]||(K[4]=ie=>t.name=ie),pattern:"[a-z][a-z0-9\\-]{0,29}",maxlength:"30",autocomplete:"off",onInput:K[5]||(K[5]=ie=>n.nodeEdited=!0)},null,544),[[Je,t.name]]),o("small",null,d(a(c)("editor.installer.device_name_hint")),1)])):W("",!0),S.value?(g(),_("fieldset",L2,[o("legend",null,d(a(c)("editor.installer.wifi.title")),1),o("p",M2,d(C.value),1),D.value.includes("wifi_ssid")?(g(),_("div",R2,[o("label",N2,d(a(c)("editor.installer.wifi.ssid")),1),Ee(o("input",{id:"wifi_ssid",name:"wifi_ssid","onUpdate:modelValue":K[6]||(K[6]=ie=>t.wifi_ssid=ie),autocomplete:"off"},null,512),[[Je,t.wifi_ssid]])])):W("",!0),D.value.includes("wifi_password")?(g(),_("div",F2,[o("label",D2,d(a(c)("editor.installer.wifi.password")),1),Ee(o("input",{id:"wifi_password",name:"wifi_password",type:"password","onUpdate:modelValue":K[7]||(K[7]=ie=>t.wifi_password=ie),autocomplete:"new-password"},null,512),[[Je,t.wifi_password]])])):W("",!0)])):W("",!0),o("div",U2,[o("label",j2,d(a(c)("editor.installer.install_via")),1),Ee(o("select",{id:"install-target",name:"target","onUpdate:modelValue":K[8]||(K[8]=ie=>t.target=ie),onChange:K[9]||(K[9]=ie=>{n.picked=!0,R()})},[$.value.length?W("",!0):(g(),_("option",H2,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(q,null,he($.value,ie=>(g(),_("option",{key:ie,value:ie},d(I(ie)),9,V2))),128)),o("option",W2,d(a(c)("editor.firmware.download_target")),1),o("option",B2,d(a(c)("editor.installer.later")),1)],544),[[Wn,t.target]]),o("small",K2,d(O.value),1)]),u.value?(g(),_("p",z2,d(u.value),1)):W("",!0),o("div",q2,[o("button",{type:"submit",class:"btn primary",id:"install-go",disabled:M.value},d(E.value),9,Y2),o("span",G2,d(f.value),1)])],32)):(g(),_("div",J2,[o("div",X2,[te.value?(g(),_("span",Z2)):(g(),_("span",{key:1,class:me(["outcome",ye.value?"ok":"bad"]),id:"progress-mark"},d(ye.value?"✓":"✕"),3)),o("strong",Q2,d(ge.value),1)]),o("p",ew,d(we.value),1),ye.value&&re.value&&n.view!=="done"?(g(),_("div",tw,[o("a",{class:"btn primary",id:"download-firmware",href:Ye.value.href,download:Ye.value.name},d(a(c)("editor.firmware.download_file",{name:Ye.value.name})),9,nw),o("ol",sw,[o("li",null,[se(ne,{keypath:"editor.installer.download_steps.plug",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.plug_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.download_steps.open",scope:"global"},{bold:oe(()=>[o("b",null,[se(ne,{keypath:"editor.installer.download_steps.open_bold",scope:"global"},{esphome_web:oe(()=>[o("a",{href:uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])]),_:1})]),o("li",null,[se(ne,{keypath:n.board==="cyd"?"editor.installer.download_steps.install_cyd":"editor.installer.download_steps.install",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.install_bold")),1)]),file:oe(()=>[Me(d(Ye.value.name),1)]),_:1},8,["keypath"])])]),o("small",null,d(a(c)("editor.installer.download_keep")),1)])):W("",!0),ye.value?(g(),_("div",iw,[o("div",ow,[o("span",null,d(a(c)("editor.installer.api_key")),1),o("code",{id:"api-key",ref_key:"keyBox",ref:b},d(n.apiKey||""),513),o("button",{type:"button",class:"btn quiet mini",id:"copy-key",onClick:K[10]||(K[10]=ie=>a(It)(n.apiKey||"",b.value))},d(a(c)("editor.common.copy")),1)]),o("ol",lw,[o("li",null,[se(ne,{keypath:"editor.installer.pairing.ha",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.ha_bold")),1)]),name:oe(()=>[Me(d(n.friendly),1)]),_:1}),K[15]||(K[15]=Me()),o("button",{type:"button",class:"btn quiet mini",onClick:K[11]||(K[11]=(...ie)=>a(ki)&&a(ki)(...ie))},d(a(c)("editor.common.open_integrations")),1)]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.key",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.key_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.actions",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.actions_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.tiles",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.tiles_bold")),1)]),_:1})])])])):W("",!0),n.view!=="done"?(g(),_("details",{key:2,id:"install-log-wrap",class:"log-wrap",open:p.value,onToggle:K[12]||(K[12]=ie=>p.value=ie.target.open)},[o("summary",null,d(a(c)("editor.installer.log")),1),o("pre",rw,d(r.value.join(` -`)),1)],40,aw)):W("",!0),o("div",cw,[!te.value&&!ye.value?(g(),_("button",{key:0,type:"button",class:"btn primary",id:"install-retry",onClick:ee},d(a(c)("editor.installer.retry")),1)):W("",!0),o("button",{type:"button",class:"btn quiet",id:"install-close",onClick:ce},d(ye.value?a(c)("editor.installer.another"):a(c)("editor.installer.start_over")),1),o("button",{type:"button",class:me(["btn",ye.value?"primary":"quiet"]),onClick:tt},d(ye.value?a(c)("editor.installer.done"):a(c)("editor.common.close")),3)])]))])}}}),fw={class:"panel",id:"firmware-dialog"},pw={class:"panel-head"},hw={class:"tx"},mw={class:"eyebrow"},bw={class:"card"},vw={class:"card-grid"},gw={class:"field"},_w={class:"f-label",for:"firmware-file"},yw=["value"],ww={class:"field"},kw={class:"f-label",for:"firmware-port"},$w={value:"ota"},xw={key:0,value:"usb"},Sw=["value"],Cw={value:"download"},Tw={key:0,class:"field",id:"firmware-host-label"},Ew={class:"f-label",for:"firmware-host"},Aw=["placeholder"],Pw={class:"actions"},Ow=["disabled"],Iw=["disabled"],Lw=["disabled"],Mw={key:0,class:"spin"},Rw={id:"firmware-status",class:"status-line",role:"status"},Nw={key:0,id:"firmware-download",class:"card",style:{background:"var(--surface-2)"}},Fw=["href","download"],Dw={id:"firmware-log",class:"log"},Uw="https://web.esphome.io/?dashboard_install",jw=Le({__name:"FirmwareView",setup(e){const t=ke(null),n=ke(""),s=ke("ota"),i=ke("");let l=0;async function r(T=!1){try{const $=await Nt("firmware");t.value=$,(T||!n.value)&&(n.value=$.profiles[0]?.file||"");const A=$.ports||[];s.value.startsWith("/")&&!A.includes(s.value)&&(s.value=A[0]||"usb"),s.value==="usb"&&A.length&&(s.value=A[0])}catch($){Ce($.message)}}const u=k(()=>t.value?.job?.state==="running"),f=k(()=>!t.value||u.value||!t.value.available||!t.value.profiles?.length),h=k(()=>f.value||s.value==="usb"),p=k(()=>t.value?.ports||[]),b=k(()=>t.value?t.value.available?t.value.job?`${t.value.job.file} · ${t.value.job.action} · ${t.value.job.state}`:c("editor.firmware.choose"):c("editor.firmware.no_cli"):c("editor.common.loading")),v=k(()=>s.value==="download"&&!!n.value&&!!t.value?.downloads?.includes(n.value)),y=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.value)}/download`,name:n.value.replace(/\.yaml$/,"")+".factory.bin"}));async function I(T){try{await ft("firmware/jobs","POST",{file:n.value,action:T==="validate"?"validate":T==="build"?"build":s.value==="download"?"download":"install",target:s.value==="ota"?i.value.trim():s.value==="download"?"":s.value}),await r()}catch($){Ce($.message)}}return An(()=>{r(!0),l=window.setInterval(()=>r(),3e3)}),rs(()=>clearInterval(l)),(T,$)=>{const A=Ws("i18n-t");return g(),_("div",fw,[o("div",pw,[o("div",hw,[o("span",mw,d(a(c)("editor.nav.firmware")),1),o("h1",null,d(a(c)("editor.firmware.title")),1),se(A,{keypath:"editor.firmware.intro",tag:"p",scope:"global"},{ota:oe(()=>[o("b",null,d(a(c)("editor.firmware.ota")),1)]),download:oe(()=>[o("b",null,d(a(c)("editor.firmware.download")),1)]),check:oe(()=>[o("b",null,d(a(c)("editor.firmware.check")),1)]),build:oe(()=>[o("b",null,d(a(c)("editor.firmware.build")),1)]),install:oe(()=>[o("b",null,d(a(c)("editor.firmware.install")),1)]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-firmware",onClick:$[0]||($[0]=S=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",bw,[o("div",vw,[o("div",gw,[o("label",_w,d(a(c)("editor.firmware.profile")),1),Ee(o("select",{id:"firmware-file","onUpdate:modelValue":$[1]||($[1]=S=>n.value=S)},[(g(!0),_(q,null,he(t.value?.profiles||[],S=>(g(),_("option",{key:S.file,value:S.file},d(S.file),9,yw))),128))],512),[[Wn,n.value]])]),o("div",ww,[o("label",kw,d(a(c)("editor.firmware.install_to")),1),Ee(o("select",{id:"firmware-port","onUpdate:modelValue":$[2]||($[2]=S=>s.value=S)},[o("option",$w,d(a(c)("editor.firmware.ota")),1),p.value.length?W("",!0):(g(),_("option",xw,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(q,null,he(p.value,S=>(g(),_("option",{key:S,value:S},d(S),9,Sw))),128)),o("option",Cw,d(a(c)("editor.firmware.download_target")),1)],512),[[Wn,s.value]])]),s.value==="ota"?(g(),_("div",Tw,[o("label",Ew,d(a(c)("editor.firmware.host")),1),Ee(o("input",{id:"firmware-host","onUpdate:modelValue":$[3]||($[3]=S=>i.value=S),placeholder:n.value?n.value.replace(/\.yaml$/,".local"):"screen-livingroom.local"},null,8,Aw),[[Je,i.value]])])):W("",!0)]),o("div",Pw,[o("button",{type:"button",class:"btn quiet",id:"firmware-validate",disabled:f.value,onClick:$[4]||($[4]=S=>I("validate"))},d(a(c)("editor.firmware.check")),9,Ow),o("button",{type:"button",class:"btn quiet",id:"firmware-build",disabled:f.value,onClick:$[5]||($[5]=S=>I("build"))},d(a(c)("editor.firmware.build")),9,Iw),o("button",{type:"button",class:"btn primary",id:"firmware-install",disabled:h.value,onClick:$[6]||($[6]=S=>I("install"))},d(s.value==="download"?a(c)("editor.firmware.build_download"):a(c)("editor.firmware.install")),9,Lw),u.value?(g(),_("span",Mw)):W("",!0)]),o("p",Rw,d(b.value),1),v.value?(g(),_("div",Nw,[o("a",{class:"btn primary",id:"firmware-download-link",href:y.value.href,download:y.value.name},d(a(c)("editor.firmware.download_file",{name:y.value.name})),9,Fw),se(A,{keypath:"editor.firmware.download_how",tag:"small",scope:"global"},{esphome_web:oe(()=>[o("a",{href:Uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])):W("",!0)]),o("pre",Dw,d((t.value?.logs||[]).join(` -`)),1)])}}}),Hw={class:"panel wide alerts",id:"alerts-dialog"},Vw={class:"panel-head"},Ww={class:"tx"},Bw={class:"eyebrow"},Kw={key:0,class:"hint"},zw={class:"alert-hero"},qw={class:"alert-mock",id:"alert-mock","aria-hidden":"true"},Yw={class:"mdi alert-mock-icon",id:"alert-mock-icon"},Gw={id:"alert-mock-title"},Jw={id:"alert-mock-subtitle"},Xw={class:"fake",id:"alert-mock-button"},Zw=["aria-label"],Qw=["data-jump","onClick"],ek={id:"alerts-try",class:"card"},tk={class:"field"},nk={class:"f-label",for:"try-screen"},sk={value:"all"},ik=["value","disabled"],ok={class:"field"},lk={class:"f-label",for:"try-title"},ak={class:"field"},rk={class:"f-label",for:"try-subtitle"},ck={class:"field"},uk={class:"f-label",for:"try-icon"},dk={id:"try-icons"},fk=["value"],pk={class:"field"},hk={class:"f-label",for:"try-color"},mk={value:""},bk=["value"],vk={class:"field"},gk={class:"f-label",for:"try-button"},_k={class:"field"},yk={class:"f-label",for:"try-timeout"},wk={class:"check field"},kk={class:"actions field wide"},$k=["disabled"],xk={class:"status-line",id:"try-result",role:"status"},Sk={id:"alerts-screens",class:"card"},Ck={id:"alerts-min-firmware"},Tk={id:"alerts-screen-list",class:"options"},Ek={key:0,class:"hint"},Ak={class:"alert-screen-head"},Pk={class:"copy-label"},Ok=["onClick"],Ik={id:"alerts-howto",class:"card"},Lk={class:"steps"},Mk={class:"field"},Rk={class:"f-label",for:"alerts-example-screen"},Nk=["value"],Fk={key:0,value:""},Dk={class:"copy-line"},Uk={id:"alerts-example"},jk={id:"alerts-all",class:"card"},Hk={id:"alerts-all-event"},Vk={id:"alerts-all-dismiss"},Wk={class:"copy-line"},Bk={id:"alerts-all-example"},Kk={id:"alerts-fields",class:"card"},zk={class:"table-scroll"},qk={id:"alerts-field-table"},Yk={key:0},Gk={id:"alerts-icons",class:"card"},Jk={class:"subhead"},Xk={class:"chips",id:"alerts-suggested"},Zk=["onClick"],Qk={class:"mdi"},e3={class:"field"},t3={class:"f-label",for:"alerts-icon-search"},n3=["placeholder"],s3={id:"alerts-icon-groups"},i3={class:"subhead"},o3={class:"alert-icon-grid"},l3=["title","onClick"],a3={class:"mdi"},r3={key:0},c3={key:0,class:"hint"},u3={id:"alerts-colors",class:"card"},d3={class:"swatches",id:"alerts-swatches"},f3=["onClick"],p3={id:"alerts-behaviour",class:"card"},h3={class:"alerts-list"},m3={id:"alerts-events",class:"card"},b3={id:"alerts-event-name"},v3={class:"table-scroll"},g3={id:"alerts-ending-table"},_3={class:"subhead"},y3={class:"copy-line"},w3={id:"alerts-wait-example"},k3={id:"alerts-tips",class:"card"},$3={class:"alerts-list"},x3=Le({__name:"AlertsView",setup(e){const t=k(()=>m.inventory.alerts),n=qn({screen:"all",title:c("editor.alerts.example.title"),subtitle:c("editor.alerts.example.subtitle"),icon:"doorbell",color:"orange",button_text:c("editor.alerts.example.button"),timeout:30,flash:!0}),s=ke(!1),i=ke(""),l=k(()=>m.inventory.screens.filter(L=>zn(L)&&L.online));async function r(){s.value=!0,i.value="";try{const{screen:L,...M}=n,U=await Am(L,M),R=m.inventory.screens.find(te=>te.id===L)?.name,Y=L==="all"?c("editor.alerts.try.sent_all",U.sent):R?c("editor.alerts.try.sent_to",{name:R}):c("editor.alerts.try.sent_one");i.value=U.sent?[Y,U.skipped?c("editor.alerts.try.skipped",U.skipped):"",U.unusable?.length?c("editor.alerts.try.left_empty",{fields:U.unusable.join(", ")}):""].filter(Boolean).join(" "):c("editor.alerts.try.nothing",{version:t.value?.min_firmware||"0.2.31"})}catch(L){i.value=L.message}finally{s.value=!1}}const u=k(()=>m.inventory.icons),f=ke(""),h=ke(""),p=L=>`"${String(L).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,b=L=>L.type==="string"?/^[a-z][a-z0-9-]*$/.test(L.example)?L.example:p(L.example):L.example===!0?"true":L.example===!1?"false":String(L.example),v=k(()=>m.inventory.screens.filter(L=>L.alert_action)),y=k(()=>f.value||v.value[0]?.alert_action||""),I=k(()=>{const L=(t.value?.fields||[]).map(M=>` ${M.name}: ${b(M)}`);return`action: ${y.value||"esphome. _show_alert"} -data: -${L.join(` -`)}`}),T=(L,M)=>p((t.value?.fields||[]).find(U=>U.name===L)?.example||M),$=k(()=>[`# ${c("editor.alerts.wait_yaml.comment")}`,"actions:",` - action: ${y.value||"esphome. _show_alert"}`," data:",` title: ${T("title","Someone is at the door")}`,` subtitle: ${T("subtitle","Door 3, back")}`," icon: doorbell"," color: orange",` button_text: ${T("button_text","Coming")}`," timeout: 0"," flash: true"," - wait_for_trigger:"," - trigger: event",` event_type: ${t.value?.event||"esphome.screen_alert"}`," event_data:"," action: ok",' timeout: "00:05:00"'," - if:"," - condition: template",' value_template: "{{ wait.trigger is not none }}"'," then:"," - action: notify.notify"," data:",` message: ${p(c("editor.alerts.wait_yaml.message"))}`].join(` -`)),A=k(()=>{const L=(t.value?.fields||[]).map(U=>` ${U.name}: ${b(U)}`),M=t.value?.camera;return M&&L.push(` # ${M.name}: ${M.example} # a Guition shows its picture on the card`),`event: ${t.value?.broadcast?.show||"esp_screens_show_alert"} -event_data: -${L.join(` -`)}`}),S=k(()=>{if(!t.value||!u.value)return[];const L=h.value.trim().toLowerCase();return[...u.value.groups,{label:c("editor.alerts.icons.extra"),icons:t.value.extra_icons}].map(U=>({label:U.label,icons:U.icons.filter(R=>!L||R.name.includes(L)||(R.label||"").toLowerCase().includes(L))})).filter(U=>U.icons.length)}),D=k(()=>t.value?.suggested_icons?.find(L=>L.name==="doorbell")),C=k(()=>t.value?.colors?.find(L=>L.name==="orange")),B=L=>["string","int","bool"].includes(L)?c(`editor.alerts.fields.types.${L}`):L;function O(L){document.getElementById(L)?.scrollIntoView({behavior:"smooth",block:"start"})}const E=["alerts-try","alerts-screens","alerts-howto","alerts-all","alerts-fields","alerts-icons","alerts-colors","alerts-behaviour","alerts-events","alerts-tips"];return(L,M)=>{const U=Ws("i18n-t");return g(),_("div",Hw,[o("div",Vw,[o("div",Ww,[o("span",Bw,d(a(c)("editor.alerts.eyebrow")),1),o("h1",null,d(a(c)("editor.alerts.title")),1),se(U,{keypath:"editor.alerts.intro",tag:"p",scope:"global"},{action:oe(()=>[...M[15]||(M[15]=[o("code",null,"show_alert",-1)])]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-alerts",onClick:M[0]||(M[0]=R=>a(He)(""))},d(a(c)("editor.common.back")),1)]),t.value?(g(),_(q,{key:1},[o("div",zw,[o("div",qw,[o("div",{class:"alert-mock-card",style:Ue(C.value?{background:C.value.color}:void 0)},[o("span",Yw,d(D.value?a(Ae)(D.value.cp):""),1),o("strong",Gw,d(a(c)("editor.alerts.example.title")),1),o("span",Jw,d(a(c)("editor.alerts.example.subtitle")),1),o("span",Xw,d(a(c)("editor.alerts.example.button")),1)],4)]),o("nav",{class:"alerts-nav","aria-label":a(c)("editor.alerts.sections")},[(g(),_(q,null,he(E,R=>o("button",{key:R,type:"button","data-jump":R,onClick:Y=>O(R)},d(a(c)(`editor.alerts.nav.${R.slice(7)}`)),9,Qw)),64))],8,Zw)]),o("section",ek,[o("h2",null,d(a(c)("editor.alerts.nav.try")),1),o("p",null,d(a(c)("editor.alerts.try.text")),1),o("form",{class:"try-grid",onSubmit:Pt(r,["prevent"])},[o("div",tk,[o("label",nk,d(a(c)("editor.alerts.try.screen")),1),Ee(o("select",{id:"try-screen","onUpdate:modelValue":M[1]||(M[1]=R=>n.screen=R)},[o("option",sk,d(a(c)("editor.alerts.try.all",{ready:l.value.length})),1),(g(!0),_(q,null,he(a(m).inventory.screens,R=>(g(),_("option",{key:R.id,value:R.id,disabled:!a(zn)(R)||!R.online},d(a(zn)(R)&&R.online?R.name:a(c)("editor.alerts.try.not_ready",{name:R.name})),9,ik))),128))],512),[[Wn,n.screen]])]),o("div",ok,[o("label",lk,d(a(c)("editor.alerts.try.title")),1),Ee(o("input",{id:"try-title","onUpdate:modelValue":M[2]||(M[2]=R=>n.title=R),maxlength:"64"},null,512),[[Je,n.title]])]),o("div",ak,[o("label",rk,d(a(c)("editor.alerts.try.subtitle")),1),Ee(o("input",{id:"try-subtitle","onUpdate:modelValue":M[3]||(M[3]=R=>n.subtitle=R),maxlength:"240"},null,512),[[Je,n.subtitle]])]),o("div",ck,[o("label",uk,d(a(c)("editor.alerts.try.icon")),1),Ee(o("input",{id:"try-icon","onUpdate:modelValue":M[4]||(M[4]=R=>n.icon=R),list:"try-icons",placeholder:"doorbell"},null,512),[[Je,n.icon]]),o("datalist",dk,[(g(!0),_(q,null,he(t.value.suggested_icons,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label||R.name),9,fk))),128))])]),o("div",pk,[o("label",hk,d(a(c)("editor.alerts.try.color")),1),Ee(o("select",{id:"try-color","onUpdate:modelValue":M[5]||(M[5]=R=>n.color=R)},[o("option",mk,d(a(c)("editor.alerts.white")),1),(g(!0),_(q,null,he(t.value.colors,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label),9,bk))),128))],512),[[Wn,n.color]])]),o("div",vk,[o("label",gk,d(a(c)("editor.alerts.try.button")),1),Ee(o("input",{id:"try-button","onUpdate:modelValue":M[6]||(M[6]=R=>n.button_text=R),maxlength:"16"},null,512),[[Je,n.button_text]])]),o("div",_k,[o("label",yk,d(a(c)("editor.alerts.try.timeout")),1),Ee(o("input",{id:"try-timeout","onUpdate:modelValue":M[7]||(M[7]=R=>n.timeout=R),type:"number",min:"0",max:"86400"},null,512),[[Je,n.timeout,void 0,{number:!0}]])]),o("label",wk,[Ee(o("input",{type:"checkbox",id:"try-flash","onUpdate:modelValue":M[8]||(M[8]=R=>n.flash=R)},null,512),[[Xf,n.flash]]),o("span",null,[Me(d(a(c)("editor.alerts.try.flash")),1),o("small",null,d(a(c)("editor.alerts.try.flash_hint")),1)])]),o("div",kk,[o("button",{type:"submit",class:"btn primary",id:"try-send",disabled:s.value||!l.value.length},d(s.value?a(c)("editor.alerts.try.sending"):a(c)("editor.alerts.try.send")),9,$k),o("span",xk,d(i.value),1)])],32)]),o("section",Sk,[o("h2",null,d(a(c)("editor.alerts.nav.screens")),1),se(U,{keypath:"editor.alerts.screens.text",tag:"p",scope:"global"},{version:oe(()=>[o("code",Ck,d(t.value.min_firmware),1)]),_:1}),o("div",Tk,[a(m).inventory.screens.length?W("",!0):(g(),_("p",Ek,d(a(c)("editor.alerts.screens.none")),1)),(g(!0),_(q,null,he(a(m).inventory.screens,R=>(g(),_("div",{key:R.id,class:"alert-screen"},[o("div",Ak,[o("strong",null,d(R.name),1),o("span",{class:me(["chip",a(dn)(a(ls)(R),t.value.min_firmware)&&R.alert_action?"good":"update"])},d(a(dn)(a(ls)(R),t.value.min_firmware)&&R.alert_action?a(c)("editor.alerts.screens.ready",{version:R.firmware}):R.alert_action?a(c)("editor.alerts.screens.update",{version:R.firmware||a(c)("editor.common.unknown")}):a(c)("editor.alerts.screens.unknown")),3)]),(g(!0),_(q,null,he([[a(c)("editor.alerts.screens.show"),R.alert_action],[a(c)("editor.alerts.screens.dismiss"),R.dismiss_action]],([Y,te])=>(g(),_("div",{key:Y,class:"copy-line"},[o("span",Pk,d(Y),1),o("code",null,d(te||"esphome. _show_alert"),1),te?(g(),_("button",{key:0,type:"button",class:"btn quiet mini",onClick:ye=>a(It)(te,void 0,"action_name")},d(a(c)("editor.common.copy")),9,Ok)):W("",!0)]))),128))]))),128))])]),o("section",Ik,[o("h2",null,d(a(c)("editor.alerts.nav.howto")),1),o("ol",Lk,[se(U,{keypath:"editor.alerts.howto.add",tag:"li",scope:"global"},{add:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.add_bold")),1)]),esphome:oe(()=>[...M[16]||(M[16]=[o("b",null,"ESPHome",-1)])]),device:oe(()=>[o("i",null,d(a(c)("editor.alerts.howto.device")),1)]),_:1}),se(U,{keypath:"editor.alerts.howto.fields",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.fields_bold")),1)]),empty:oe(()=>[...M[17]||(M[17]=[o("code",null,'""',-1)])]),zero:oe(()=>[...M[18]||(M[18]=[o("code",null,"0",-1)])]),_:1}),se(U,{keypath:"editor.alerts.howto.yaml",tag:"li",scope:"global"},{edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1})]),o("div",Mk,[o("label",Rk,d(a(c)("editor.alerts.howto.example_for")),1),Ee(o("select",{id:"alerts-example-screen","onUpdate:modelValue":M[9]||(M[9]=R=>f.value=R),style:{"max-width":"360px"}},[(g(!0),_(q,null,he(v.value,R=>(g(),_("option",{key:R.id,value:R.alert_action},d(R.name),9,Nk))),128)),v.value.length?W("",!0):(g(),_("option",Fk,d(a(c)("editor.alerts.howto.no_screen")),1))],512),[[Wn,f.value]])]),o("div",Dk,[o("pre",Uk,d(I.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-example-copy",onClick:M[10]||(M[10]=R=>a(It)(I.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",jk,[o("h2",null,d(a(c)("editor.alerts.all.title")),1),se(U,{keypath:"editor.alerts.all.text",tag:"p",scope:"global"},{show:oe(()=>[o("code",Hk,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),dismiss:oe(()=>[o("code",Vk,d(t.value.broadcast?.dismiss||"esp_screens_dismiss_alert"),1)]),event:oe(()=>[o("b",null,d(a(c)("editor.alerts.all.event")),1)]),edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1}),o("div",Wk,[o("pre",Bk,d(A.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-all-copy",onClick:M[11]||(M[11]=R=>a(It)(A.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Kk,[o("h2",null,d(a(c)("editor.alerts.nav.fields")),1),o("p",null,d(a(c)("editor.alerts.fields.text")),1),o("div",zk,[o("table",qk,[o("tr",null,[o("th",null,d(a(c)("editor.alerts.fields.field")),1),o("th",null,d(a(c)("editor.alerts.fields.type")),1),o("th",null,d(a(c)("editor.alerts.fields.what")),1),o("th",null,d(a(c)("editor.alerts.fields.example")),1),o("th",null,d(a(c)("editor.alerts.fields.limit")),1)]),(g(!0),_(q,null,he(t.value.fields,R=>(g(),_("tr",{key:R.name},[o("td",null,[o("code",null,d(R.name),1),o("small",null,d(R.label),1)]),o("td",null,d(B(R.type)),1),o("td",null,d(R.help),1),o("td",null,[o("code",null,d(typeof R.example=="string"?R.example:String(R.example)),1)]),o("td",null,d(t.value.limits.cyd[R.name]?a(c)("editor.alerts.fields.bytes",{cyd:t.value.limits.cyd[R.name],guition:t.value.limits.guition[R.name]}):R.type==="int"?a(c)("editor.alerts.fields.seconds"):"—"),1)]))),128)),t.value.camera?(g(),_("tr",Yk,[o("td",null,[o("code",null,d(t.value.camera.name),1),o("small",null,d(t.value.camera.label),1)]),o("td",null,d(a(c)("editor.alerts.fields.types.entity")),1),o("td",null,d(t.value.camera.help),1),o("td",null,[o("code",null,d(t.value.camera.example),1)]),o("td",null,d(a(c)("editor.alerts.fields.camera_limit")),1)])):W("",!0)])])]),o("section",Gk,[o("h2",null,d(a(c)("editor.alerts.nav.icons")),1),se(U,{keypath:"editor.alerts.icons.text",tag:"p",scope:"global"},{field:oe(()=>[...M[19]||(M[19]=[o("code",null,"icon",-1)])]),example:oe(()=>[...M[20]||(M[20]=[o("code",null,"doorbell",-1)])]),mdi:oe(()=>[...M[21]||(M[21]=[o("code",null,"mdi:doorbell",-1)])]),hex:oe(()=>[...M[22]||(M[22]=[o("code",null,"F12E6",-1)])]),_:1}),o("p",Jk,d(a(c)("editor.alerts.icons.handy")),1),o("div",Xk,[(g(!0),_(q,null,he(t.value.suggested_icons,R=>(g(),_("button",{key:R.name,type:"button",class:"chip",onClick:Y=>a(It)(R.name,void 0,"icon_name")},[o("span",Qk,d(a(Ae)(R.cp)),1),o("code",null,d(R.name),1)],8,Zk))),128))]),o("div",e3,[o("label",t3,d(a(c)("editor.alerts.icons.search_label")),1),Ee(o("input",{id:"alerts-icon-search","onUpdate:modelValue":M[12]||(M[12]=R=>h.value=R),type:"search",placeholder:a(c)("editor.alerts.icons.search"),autocomplete:"off"},null,8,n3),[[Je,h.value]])]),o("div",s3,[(g(!0),_(q,null,he(S.value,R=>(g(),_("div",{key:R.label,class:"field"},[o("p",i3,d(R.label)+" · "+d(R.icons.length),1),o("div",o3,[(g(!0),_(q,null,he(R.icons,Y=>(g(),_("button",{key:Y.name,type:"button",class:"alert-icon",title:a(c)("editor.alerts.icons.copy",{name:Y.name}),onClick:te=>a(It)(Y.name,void 0,"icon_name")},[o("span",a3,d(a(Ae)(Y.cp)),1),o("code",null,d(Y.name),1),Y.label?(g(),_("small",r3,d(Y.label),1)):W("",!0)],8,l3))),128))])]))),128)),S.value.length?W("",!0):(g(),_("p",c3,d(a(c)("editor.alerts.icons.none",{query:h.value,fallback:t.value.fallback_icon})),1))])]),o("section",u3,[o("h2",null,d(a(c)("editor.alerts.nav.colors")),1),se(U,{keypath:"editor.alerts.colors.text",tag:"p",scope:"global"},{field:oe(()=>[...M[23]||(M[23]=[o("code",null,"color",-1)])]),_:1}),o("div",d3,[o("button",{type:"button",class:"swatch",onClick:M[13]||(M[13]=R=>a(It)("",void 0,"empty_color"))},[M[25]||(M[25]=o("i",{style:{background:"#ffffff"}},null,-1)),o("span",null,[M[24]||(M[24]=o("code",null,"empty",-1)),o("small",null,d(a(c)("editor.alerts.white")),1)])]),(g(!0),_(q,null,he(t.value.colors,R=>(g(),_("button",{key:R.name,type:"button",class:"swatch",onClick:Y=>a(It)(R.name,void 0,"color_name")},[o("i",{style:Ue({background:R.color})},null,4),o("span",null,[o("code",null,d(R.name),1),o("small",null,d(R.label)+" · "+d(R.color),1)])],8,f3))),128))])]),o("section",p3,[o("h2",null,d(a(c)("editor.alerts.nav.behaviour")),1),o("ul",h3,[se(U,{keypath:"editor.alerts.behaviour.wakes",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.wakes_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.on",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.on_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.timeout",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.timeout_bold")),1)]),zero:oe(()=>[...M[26]||(M[26]=[o("code",null,"timeout: 0",-1)])]),minute:oe(()=>[...M[27]||(M[27]=[o("code",null,"timeout: 60",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.blinking",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.blinking_bold")),1)]),flash:oe(()=>[...M[28]||(M[28]=[o("code",null,"flash: true",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.replacing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.replacing_bold")),1)]),replaced:oe(()=>[...M[29]||(M[29]=[o("code",null,"replaced",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.closing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.closing_bold")),1)]),dismiss:oe(()=>[...M[30]||(M[30]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.beside",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.beside_bold")),1)]),_:1})])]),o("section",m3,[o("h2",null,d(a(c)("editor.alerts.nav.events")),1),se(U,{keypath:"editor.alerts.events.text",tag:"p",scope:"global"},{event:oe(()=>[o("code",b3,d(t.value.event),1)]),action:oe(()=>[...M[31]||(M[31]=[o("code",null,"action",-1)])]),title:oe(()=>[...M[32]||(M[32]=[o("code",null,"title",-1)])]),screen:oe(()=>[...M[33]||(M[33]=[o("code",null,"screen",-1)])]),device_id:oe(()=>[...M[34]||(M[34]=[o("code",null,"device_id",-1)])]),_:1}),o("div",v3,[o("table",g3,[o("tr",null,[M[35]||(M[35]=o("th",null,"action",-1)),o("th",null,d(a(c)("editor.alerts.events.when")),1)]),(g(!0),_(q,null,he(t.value.endings,R=>(g(),_("tr",{key:R.action},[o("td",null,[o("code",null,d(R.action),1)]),o("td",null,d(R.label),1)]))),128))])]),o("p",_3,d(a(c)("editor.alerts.events.wait")),1),o("div",y3,[o("pre",w3,d($.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-wait-copy",onClick:M[14]||(M[14]=R=>a(It)($.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",k3,[o("h2",null,d(a(c)("editor.alerts.nav.tips")),1),o("ul",$3,[se(U,{keypath:"editor.alerts.tips.color",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.color_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.short",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.short_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.button",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.button_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.resolve",tag:"li",scope:"global"},{dismiss:oe(()=>[...M[36]||(M[36]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.every",tag:"li",scope:"global"},{event:oe(()=>[o("code",null,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),screen:oe(()=>[...M[37]||(M[37]=[o("code",null,"screen",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.claude",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.claude_bold")),1)]),_:1})])])],64)):(g(),_("p",Kw,d(a(c)("editor.alerts.loading")),1))])}}}),S3={class:"panel",id:"override-dialog"},C3={class:"panel-head"},T3={class:"tx"},E3={class:"eyebrow"},A3={id:"override-title"},P3={class:"notice"},O3={class:"mdi"},I3={class:"file-row"},L3={id:"override-file"},M3={class:"yaml-editor",id:"yaml-editor-wrap"},R3=["aria-label"],N3={class:"actions"},F3={id:"override-count",class:"hint"},D3={class:"actions"},U3=["disabled"],j3=["disabled"],H3=`# Hardware-specific changes for this screen. -# This file is kept when the shared firmware package updates. -# Do not add esphome:, api:, ota:, wifi: or packages: here. - -# Example: a CYD with the ST7789V display controller. -# "!extend" changes the display the shared package already defines; -# a bare id would add a second, incomplete display and fail the build. -display: - - id: !extend my_display - model: ST7789V -`,V3=Le({__name:"OverrideView",setup(e){const t=k(()=>m.overrideProfile),n=ke(""),s=ke(""),i=ke(!1),l=ke(c("editor.common.loading")),r=ke(""),u=ke(!1),f=ke(null),h=ke(null),p=k(()=>n.value.split(` -`).length),b=k(()=>Array.from({length:p.value},(O,E)=>E+1).join(` -`)),v=k(()=>`${c("editor.override.characters",n.value.length)} · ${c("editor.override.lines",p.value)}`);let y=!0;function I(O,E=""){l.value=O,r.value=E}async function T(){if(!t.value){I(c("editor.override.no_profile"),"error");return}I(c("editor.common.loading"));try{const O=await Nt(`firmware/profiles/${encodeURIComponent(t.value)}/override`);s.value=O.override_file,i.value=!!O.attached,n.value=O.exists&&O.content!==`{} -`?O.content:"",I(c(O.attached?"editor.override.attached":"editor.override.not_attached"))}catch(O){I(O.message,"error")}}async function $(O=!1){if(!(!t.value||u.value)){u.value=!0,I(c("editor.override.saving"));try{const E=await ft(`firmware/profiles/${encodeURIComponent(t.value)}/override`,"PUT",{content:n.value});if(s.value=E.override_file,i.value=!0,!O){I(c("editor.override.saved"),"ok"),Ce(c("editor.override.saved_toast"));return}I(c("editor.override.checking")),await ft("firmware/jobs","POST",{file:t.value,action:"validate"}),A()}catch(E){I(E.message,"error")}finally{u.value=!1}}}function A(){const O=Date.now(),E=t.value,L=async()=>{if(!(!y||t.value!==E))try{const M=await Nt("firmware"),U=M.job;if(U&&U.file===E&&U.state==="running")I(U.stage?c("editor.override.checking_stage",{stage:U.stage}):c("editor.override.checking_profile"));else if(U&&U.file===E&&U.state==="success"){I(c("editor.override.valid"),"ok");return}else if(U&&U.file===E&&U.state==="failed"){const R=(M.logs||[]).filter(Y=>/error|failed/i.test(Y)).pop();I(R||c("editor.override.rejected"),"error");return}Date.now()-O<72e5&&setTimeout(L,1200)}catch(M){I(M.message,"error")}};L()}function S(){(!n.value.trim()||confirm(c("editor.override.confirm_example")))&&(n.value=H3,I(c("editor.override.example_loaded")),f.value?.focus())}function D(){(!n.value.trim()||confirm(c("editor.override.confirm_clear")))&&(n.value="",I(c("editor.override.cleared")),f.value?.focus())}function C(O){const E=f.value;if(O.key==="Tab"){O.preventDefault();const L=E.selectionStart,M=E.selectionEnd;E.setRangeText(" ",L,M,"end"),n.value=E.value}else(O.ctrlKey||O.metaKey)&&O.key.toLowerCase()==="s"&&(O.preventDefault(),$(!1))}function B(){h.value&&f.value&&(h.value.scrollTop=f.value.scrollTop)}return An(T),rs(()=>{y=!1}),(O,E)=>(g(),_("div",S3,[o("div",C3,[o("div",T3,[o("span",E3,d(a(c)("editor.override.eyebrow")),1),o("h1",A3,d(a(m).overrideFriendly?a(c)("editor.override.title_named",{name:a(m).overrideFriendly}):a(c)("editor.override.title")),1),o("p",null,d(a(c)("editor.override.intro")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-override",onClick:E[0]||(E[0]=L=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",P3,[o("span",O3,d(a(Ae)("F0493")),1),o("div",null,[o("strong",null,d(a(c)("editor.override.safe_title")),1),o("span",null,d(a(c)("editor.override.safe_text")),1)])]),o("div",I3,[o("code",L3,d(s.value||t.value||""),1),o("span",{id:"override-state",class:me(["chip",{good:i.value}])},d(i.value?a(c)("editor.override.active"):a(c)("editor.override.ready")),3)]),o("div",M3,[o("div",{ref_key:"gutter",ref:h,class:"yaml-gutter",id:"override-gutter","aria-hidden":"true"},d(b.value),513),Ee(o("textarea",{ref_key:"editor",ref:f,id:"override-editor","onUpdate:modelValue":E[1]||(E[1]=L=>n.value=L),spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","aria-label":a(c)("editor.override.editor_label"),placeholder:`# Example -display: - - id: !extend my_display - model: ST7789V`,onKeydown:C,onScroll:B},null,40,R3),[[Je,n.value]])]),o("div",N3,[o("button",{type:"button",class:"btn quiet mini",id:"override-example",onClick:S},d(a(c)("editor.override.use_example")),1),o("button",{type:"button",class:"btn quiet mini",id:"override-empty",onClick:D},d(a(c)("editor.override.clear")),1),o("span",F3,d(v.value),1)]),o("p",{id:"override-status",class:me(["status-line",r.value]),role:"status"},d(l.value),3),o("div",D3,[o("button",{type:"button",class:"btn quiet",id:"override-check",disabled:u.value||!t.value,onClick:E[2]||(E[2]=L=>$(!0))},d(a(c)("editor.override.save_check")),9,U3),o("button",{type:"button",class:"btn primary",id:"override-save",disabled:u.value||!t.value,onClick:E[3]||(E[3]=L=>$(!1))},d(a(c)("editor.override.save")),9,j3)])]))}}),W3={class:"main"},B3=Le({__name:"App",setup(e){const t=k(()=>$t.value==="#settings"?m2:$t.value==="#new-screen"?dw:$t.value==="#firmware"?jw:$t.value==="#alerts"?x3:$t.value==="#override"?V3:_t.value&&m.layout?v1:y1);function n(s){(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="k"&&(s.preventDefault(),m.palette=!m.palette)}return An(()=>document.addEventListener("keydown",n)),rs(()=>document.removeEventListener("keydown",n)),(s,i)=>(g(),_("div",{class:me(["app",{dragging:a(m).drag.active}])},[se(Ib),o("main",W3,[(g(),it(Hd(t.value)))]),se(Mb),se(zb)],2))}});Jh().finally(()=>{ip(B3).use(cs).mount("#app"),Jm()}); diff --git a/screen_manager/app/static/assets/index-DQxVdm_5.css b/screen_manager/app/static/assets/index-DQxVdm_5.css new file mode 100644 index 0000000..f4e6524 --- /dev/null +++ b/screen_manager/app/static/assets/index-DQxVdm_5.css @@ -0,0 +1 @@ +:root{color-scheme:light dark;--ground: #f5f6f8;--surface: #ffffff;--surface-2: #f9fafb;--line: #e4e7ec;--line-strong: #d3d8e0;--ink: #16181d;--ink-2: #565d6b;--muted: #7a8290;--accent: #2f63f0;--accent-ink: #ffffff;--accent-soft: #edf2ff;--good: #1e9a5f;--good-soft: #e6f6ee;--warn: #b56d00;--warn-soft: #fff3df;--danger: #c6372e;--danger-soft: #fdecea;--seg: #eef0f3;--shadow: 0 12px 40px rgba(20, 24, 40, .12), 0 1px 2px rgba(20, 24, 40, .06);--code-bg: #f1f3f6;--ui-font: -apple-system, BlinkMacSystemFont, system-ui, "SF Pro Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}@media(prefers-color-scheme:dark){:root{--ground: #0e1014;--surface: #161a21;--surface-2: #1b2029;--line: #262c37;--line-strong: #333b49;--ink: #e9ecf1;--ink-2: #b4bbc7;--muted: #8a93a3;--accent: #6d93ff;--accent-ink: #0b1633;--accent-soft: #1b2540;--good: #3fbf7f;--good-soft: #14302a;--warn: #e0a03a;--warn-soft: #302610;--danger: #f07167;--danger-soft: #3a1b19;--seg: #222834;--shadow: 0 16px 48px rgba(0, 0, 0, .55), 0 1px 2px rgba(0, 0, 0, .4);--code-bg: #12151b}}@font-face{font-family:Tile Icons;src:url(./tile-icons-DVbFlNHb.woff) format("woff");font-display:block}@font-face{font-family:Bar Roboto;font-weight:400;src:url(./bar-roboto-400-Dv8XhZ6y.woff) format("woff");font-display:block}@font-face{font-family:Bar Roboto;font-weight:500;src:url(./bar-roboto-500-CGWR3VLQ.woff) format("woff");font-display:block}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--ground);color:var(--ink);font:13px/1.45 var(--ui-font);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}button,input,select,textarea{font:inherit;color:inherit}button{background:none;border:0;padding:0;cursor:pointer;border-radius:8px}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input,select,textarea{background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;padding:7px 10px;width:100%;color:var(--ink)}input::placeholder,textarea::placeholder{color:var(--muted)}select{appearance:auto}h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.01em}h1{font-size:20px;letter-spacing:-.02em}h2{font-size:15px}h3,h4{font-size:13px}p{margin:0}small,.hint{display:block;color:var(--muted);font-size:11.5px;font-weight:400;line-height:1.4}.hint.warn,small.warn{color:var(--warn)}code{font-family:var(--mono);font-size:.92em;background:var(--code-bg);padding:1px 6px;border-radius:5px;overflow-wrap:anywhere}pre{margin:0;padding:12px 14px;background:var(--code-bg);border:1px solid var(--line);border-radius:10px;overflow:auto;font:12px/1.5 var(--mono);color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.mdi{font-family:Tile Icons;font-style:normal;font-weight:400;line-height:1}[hidden]{display:none!important}.app{display:grid;grid-template-columns:232px minmax(0,1fr);height:100%;min-height:100vh}.app.dragging{user-select:none;-webkit-user-select:none;cursor:grabbing}.main{display:flex;flex-direction:column;min-width:0;min-height:0}.side{background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 10px;gap:4px;min-height:0;overflow:auto;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:9px;padding:4px 8px 6px;font-weight:600;font-size:13px}.brand .mark{width:22px;height:22px;border-radius:6px;background:var(--ink);color:var(--surface);display:grid;place-items:center;font-size:14px;line-height:1}.conn{display:block;padding:0 8px 8px;font-size:11px;color:var(--muted)}.conn:before{content:"●";margin-right:6px;color:var(--warn)}.conn.online:before{color:var(--good)}.side .label{font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:10px 8px 4px}.nav-item{display:flex;align-items:center;gap:9px;width:100%;padding:7px 8px;border-radius:8px;text-align:left;color:var(--ink-2)}.nav-item:hover{background:var(--surface-2);color:var(--ink)}.nav-item[aria-current=true]{background:var(--seg);color:var(--ink);font-weight:500}.nav-item .dot{width:7px;height:7px;border-radius:50%;background:var(--good);flex:none}.nav-item .dot.off{background:var(--line-strong)}.nav-item .unsaved{width:7px;height:7px;border-radius:50%;background:var(--warn);flex:none}.nav-item .txt{display:grid;min-width:0;flex:1}.nav-item .txt small{font-size:11px;color:var(--muted);font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-item .mdi{font-size:16px;width:18px;text-align:center;color:var(--muted)}.nav-item .plus{width:18px;text-align:center;font-size:14px}.nav-item.ghost{color:var(--muted)}.nav-item.ghost:hover{color:var(--accent);background:var(--accent-soft)}.pill{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:999px;background:var(--warn-soft);color:var(--warn);flex:none}.side .spacer{flex:1}.screen-item{display:grid;gap:4px}.screen-update{display:grid;gap:6px;padding:2px 8px 8px 24px}.screen-update.available{grid-template-columns:1fr auto;align-items:center}.screen-update.available:has(.screen-host){grid-template-columns:1fr}.screen-update small.failed{color:var(--danger)}.screen-host{display:flex;gap:6px;align-items:center}.screen-host input{padding:5px 8px;font-size:12px}.pending{margin:4px 0;padding:10px;border:1px dashed var(--line-strong);border-radius:10px;display:grid;gap:6px}.pending strong{font-size:12.5px}.pending-actions{display:flex;flex-wrap:wrap;gap:6px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border-radius:8px;font-weight:600;font-size:12.5px;white-space:nowrap}.btn.primary{background:var(--accent);color:var(--accent-ink)}.btn.primary:hover:not(:disabled){filter:brightness(1.06)}.btn.quiet{color:var(--ink-2);border:1px solid var(--line-strong);background:var(--surface)}.btn.quiet:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.btn.danger{color:var(--danger)}.btn.danger:hover:not(:disabled){background:var(--danger-soft)}.btn.mini{padding:4px 9px;font-size:11.5px}.btn.link{color:var(--accent);padding:0;font-weight:600}.icon-btn{width:30px;height:30px;display:grid;place-items:center;border-radius:8px;color:var(--ink-2);font-size:15px;flex:none}.icon-btn:hover{background:var(--seg);color:var(--ink)}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:500;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);white-space:nowrap}.chip .dot{width:6px;height:6px;border-radius:50%;background:var(--good);flex:none}.chip.off .dot{background:var(--line-strong)}.chip.dirty{color:var(--warn);background:var(--warn-soft);border-color:transparent}.chip.sent,.chip.good{color:var(--good);background:var(--good-soft);border-color:transparent}.chip.update{color:var(--warn);background:var(--warn-soft);border-color:transparent}.seg{display:inline-flex;padding:2px;background:var(--seg);border-radius:8px;gap:2px}.seg button{padding:4px 11px;border-radius:6px;font-size:12px;font-weight:500;color:var(--ink-2);white-space:nowrap}.seg button[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #14182824}.seg.wrap{flex-wrap:wrap}.seg button:hover:not(:disabled):not([aria-pressed=true]){color:var(--ink)}.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex:none}.spin.small{width:11px;height:11px;border-width:1.5px}@keyframes spin{to{transform:rotate(360deg)}}.switch{width:34px;height:20px;border-radius:10px;background:var(--line-strong);position:relative;flex:none;padding:0}.switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:left .12s}.switch[aria-checked=true]{background:var(--accent)}.switch[aria-checked=true]:after{left:16px}.switch.unknown:after{left:9px;opacity:.6}@media(prefers-reduced-motion:reduce){.switch:after,.drawer,.spin{transition:none;animation:none}}.main-head{display:flex;align-items:center;gap:12px;padding:0 18px;min-height:52px;border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:4}.main-head h1{font-size:15px}.main-head .eyebrow{font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.head-right{margin-left:auto;display:flex;align-items:center;gap:8px;position:relative}.menu{position:absolute;top:38px;right:0;min-width:210px;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:6px;display:grid;z-index:6}.menu button{text-align:left;padding:7px 10px;border-radius:7px;color:var(--ink);display:flex;justify-content:space-between;gap:12px;width:100%}.menu button small{color:var(--muted);display:inline}.menu button:hover:not(:disabled){background:var(--surface-2)}.body{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 300px;flex:1;min-height:0;overflow:hidden}.canvas{overflow:auto;padding:22px 22px 26px;min-width:0}.canvas-head{display:flex;align-items:baseline;gap:12px;margin-bottom:14px;color:var(--muted);font-size:12px;flex-wrap:wrap}.canvas-head b{color:var(--ink);font-weight:600;font-size:13px}.canvas-head .warn{color:var(--warn)}.pages{display:flex;gap:18px;align-items:flex-start}.page{flex:0 0 292px;display:grid;gap:8px}.page-label{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--muted);padding:0 4px;min-height:22px}.page-label .btn.mini{color:var(--muted)}.page-label .btn.mini:hover{color:var(--danger);background:var(--danger-soft)}.page.ghost .device{display:grid;place-items:center;border:1.5px dashed var(--line-strong);background:transparent;color:var(--muted);font-weight:500;cursor:pointer}.page.ghost .device:hover,.page.ghost .device:focus-visible{color:var(--accent);border-color:var(--accent)}.page.ghost .device.drop{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.page.ghost.disabled .device{opacity:.5;cursor:default}.device{background:#e7e7e7;border-radius:18px;padding:10px;display:grid;grid-template-rows:auto minmax(0,1fr);gap:8px;color:#1b1b1b;aspect-ratio:1 / 1}.device.cyd{aspect-ratio:4 / 3}.bar-wrap{cursor:pointer;border-radius:8px;padding:0 2px}.bar-wrap:hover{background:#dedede}.bar-wrap.selected{outline:2px solid var(--accent);outline-offset:1px}.bar-wrap svg{display:block;width:100%;height:auto}.tiles{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:minmax(0,1fr);gap:8px;min-height:0}.tile{position:relative;background:#fff;border:1px solid #dcdcdc;border-radius:12px;padding:8px 9px;display:flex;flex-direction:column;justify-content:space-between;gap:4px;min-height:0;cursor:pointer;text-align:left;overflow:hidden;color:#1b1b1b;touch-action:manipulation}.tile:hover{border-color:#b9c4d3}.tile.chosen{outline:2px solid var(--accent);outline-offset:1px}.tile.wide{grid-column:span 2;flex-direction:row;align-items:center;gap:8px}.tile.bare{background:transparent;border-style:dashed;border-color:#c3c9d0}.tile.placeholder{opacity:.55;border:2px dashed var(--accent);background:var(--accent-soft);cursor:default}.tile .ic{font-size:18px;line-height:1;color:#1b1b1b;flex:none}.tile .lead{display:grid;gap:2px;min-width:0;flex:1;align-content:end}.tile.wide .lead{display:flex;align-items:center;gap:8px;align-content:initial}.tile .tx{display:grid;min-width:0;gap:1px}.tile .head{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.tile .head.top{flex:none}.tile .nm{font-size:11.5px;font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile .st{font-size:10.5px;color:#5a5f66;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device.cyd .tile{padding:6px 7px}.device.cyd .tile .nm{font-size:10.5px}.device.cyd .tile .ic{font-size:15px}.device.cyd .tile .head{gap:6px}.device.cyd .tile:has(>.mini-slider){padding-block:4px;gap:3px}.device.cyd .tile .mini-slider{height:8px}.tile .mini-slider{height:10px;border-radius:5px;background:linear-gradient(to right,#ffbf38 60%,#fff1d3 60%);flex:none;width:100%}.tile.wide .mini-slider{width:70px}.tile .ctl{flex:none;display:flex;align-items:center;gap:4px;color:#1b1b1b}.tile .tog{width:30px;height:17px;border-radius:9px;background:#2196f3;position:relative}.tile .tog:after{content:"";position:absolute;top:2px;right:2px;width:13px;height:13px;border-radius:50%;background:#fff}.tile .tog.off{background:#c9ccd1}.tile .tog.off:after{right:auto;left:2px}.tile .ic.lit{color:#d9930f}.tile .ic.thumb{width:28px;height:28px;border-radius:7px;background:#d7dbe1;display:grid;place-items:center;font-size:15px;color:#5a5f66}.tile.full .ic.thumb{width:54px;height:54px;border-radius:12px;font-size:26px}.device.cyd .tile .ic.thumb{width:22px;height:22px;font-size:12px}.tile .big{font-size:19px;font-weight:600;letter-spacing:-.02em;line-height:1.05;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile .big small{display:inline;font-size:10.5px;font-weight:500;color:#5a5f66;margin-left:2px}.device.cyd .tile .big{font-size:16px}.tile .range{width:56px;height:14px;border-radius:7px;background:linear-gradient(to right,#2196f3 35%,#d3e8fb 35%)}.tile .key{height:20px;min-width:22px;padding:0 5px;border-radius:6px;background:#eceef1;display:grid;place-items:center;font-size:12px}.tile .stp{display:flex;align-items:center;gap:5px;height:20px;padding:0 7px;border-radius:10px;background:#eceef1;font-size:11px;font-weight:600}.tile .stp .mdi{font-size:12px}.tile .run{height:20px;padding:0 9px;border-radius:10px;background:#eceef1;font-size:11px;font-weight:600;line-height:20px}.tile .remove{position:absolute;top:5px;right:5px;width:22px;height:22px;border-radius:50%;background:#ffffffd9;color:#5a5f66;border:1px solid #dcdcdc;font-size:10px;line-height:1;display:grid;place-items:center;opacity:0;transition:opacity .12s}.tile:hover .remove,.tile:focus-within .remove{opacity:1}.tile .remove:hover{color:var(--danger);border-color:#e7b4b0;background:#fff}@media(hover:none){.tile .remove{opacity:1}}.tile .clockface{width:46px;height:46px;margin:auto}.tile.wide .clockface{margin:0;flex:none}.cell{min-height:0;border:1px dashed #cfd4da;border-radius:12px;background:transparent;color:#a3abb5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;font-weight:500;cursor:pointer;padding:6px}.cell span{font-size:18px;line-height:1}.cell small{font-size:10.5px;color:inherit}.cell:hover,.cell:focus-visible{border-color:#9eb6cf;color:#4b5563;background:#f6f7f9}.cell.insert-here{border:2px dashed var(--accent);color:var(--accent);background:var(--accent-soft)}.drag-ghost{position:fixed;left:0;top:0;pointer-events:none;z-index:50;opacity:.92;box-shadow:var(--shadow);border-radius:12px}.library{border-left:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;min-height:0}.lib-head{padding:14px 14px 10px;display:grid;gap:10px;border-bottom:1px solid var(--line)}.lib-title{display:flex;align-items:baseline;justify-content:space-between;font-weight:600;gap:8px}.lib-title small{color:var(--muted);font-weight:400;font-size:11.5px}.filters{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.filters::-webkit-scrollbar{display:none}.filters button{flex:none;display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;font-size:11.5px;font-weight:500;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line)}.filters button[aria-pressed=true]{background:var(--ink);color:var(--surface);border-color:var(--ink)}.filters .domain-icon{width:16px;height:16px;font-size:11px;border-radius:50%;display:grid;place-items:center}.lib-list{overflow:auto;padding:8px;display:grid;gap:2px;align-content:start;flex:1}.ent{display:flex;align-items:center;gap:10px;padding:8px;border-radius:9px;width:100%;text-align:left;cursor:grab;touch-action:manipulation}.ent:hover:not(:disabled){background:var(--surface-2)}.ent:disabled{opacity:.55;cursor:default}.ent .av{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:17px;flex:none}.ent .tx{display:grid;min-width:0;flex:1}.ent .tx b{font-weight:500;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ent .tx small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ent .add{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;color:var(--accent);background:var(--accent-soft);font-size:15px;font-weight:600;flex:none}.ent .add.done{color:var(--good);background:var(--good-soft);font-size:12px}.lib-foot{padding:10px 14px;border-top:1px solid var(--line);font-size:11.5px;color:var(--muted)}.domain-icon{display:inline-grid;place-items:center;border-radius:50%;font-weight:500}.drawer{position:absolute;top:0;right:0;bottom:0;width:360px;max-width:100%;background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow);transform:translate(102%);transition:transform .18s cubic-bezier(.2,.7,.2,1);display:flex;flex-direction:column;min-height:0;z-index:5}.drawer.open{transform:none}.dr-head{display:flex;align-items:center;gap:10px;padding:12px 12px 12px 16px;border-bottom:1px solid var(--line)}.dr-head .av{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:20px;flex:none}.dr-head .tx{flex:1;min-width:0;display:grid}.dr-head .tx b{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dr-head .tx small{color:var(--muted);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dr-head .tx small.mono{font-family:var(--mono)}.dr-body{overflow:auto;padding:14px 16px 18px;display:grid;gap:16px;align-content:start;flex:1}.f{display:grid;gap:7px}.f>.f-label{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.f input,.f select{font-size:13px}.row{display:flex;align-items:center;gap:10px;padding:7px 10px 7px 8px;border:1px solid var(--line-strong);border-radius:9px;background:var(--surface);width:100%;text-align:left}.row .av{width:30px;height:30px;border-radius:8px;background:var(--surface-2);display:grid;place-items:center;font-size:18px;flex:none}.row .tx{flex:1;min-width:0;display:grid}.row .tx b{font-weight:500}.row .tx small{font-size:11px}.row .link{color:var(--accent);font-weight:600;font-size:12px;flex:none}.sw{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.sw button{display:grid;justify-items:center;gap:4px;padding:6px 4px 5px;border-radius:9px;border:1.5px solid transparent;font-size:10.5px;color:var(--ink-2)}.sw button i{width:30px;height:22px;border-radius:6px;border:1px solid rgba(0,0,0,.08);display:block}.sw button i.auto{background:linear-gradient(135deg,#fff 50%,#e5e7eb 50%)}.sw button i.none{background:linear-gradient(135deg,transparent 46%,#8b95a1 46%,#8b95a1 54%,transparent 54%),#e7e7e7;border-style:dashed}.sw button[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--ink)}.picker{display:grid;gap:10px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}.picker input{background:var(--surface)}.icon-list{display:grid;gap:12px;max-height:300px;overflow:auto;padding-right:2px}.icon-list small{margin-bottom:6px}.icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:6px}.icon-choice{display:grid;place-items:center;height:40px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:9px}.icon-choice .mdi{font-size:22px}.icon-choice[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.icon-choice.icon-auto{display:flex;justify-content:flex-start;gap:10px;padding:0 12px;font-size:12.5px;font-weight:500;height:38px}.action-list{display:grid;gap:6px;max-height:300px;overflow:auto;padding-right:2px}.action-choice{display:grid;gap:2px;padding:8px 12px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:9px;font-size:12.5px;text-align:left}.action-choice strong{font-weight:600}.action-choice[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}.action-number{display:flex;align-items:center;gap:8px}.action-number input{flex:1;min-width:0}.items{display:grid;gap:6px}.item{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid var(--line-strong);border-radius:9px;background:var(--surface);width:100%;text-align:left;cursor:pointer;touch-action:pan-y}.item:hover{border-color:var(--accent)}.item.selected{border-color:var(--accent);background:var(--accent-soft)}.item.is-hidden{border-style:dashed}.item.is-hidden .av,.item.is-hidden b{opacity:.55}.item.is-overflow{border-style:dashed;border-color:var(--warn)}.item.is-overflow small{color:var(--warn)}.item.dragging-chip{border:2px dashed var(--accent);background:var(--accent-soft);cursor:grabbing}.item.just-added{animation:chip-added 1.2s ease-out}@keyframes chip-added{0%{background:var(--accent-soft)}to{background:var(--surface)}}.item .grip{color:var(--line-strong);font-size:13px;cursor:grab;letter-spacing:-2px;flex:none}.item .av{width:26px;height:26px;border-radius:7px;background:var(--surface-2);display:grid;place-items:center;font-size:15px;flex:none}.item .tx{flex:1;min-width:0;display:grid}.item .tx b{font-weight:500;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item .tx small{color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item .x{color:var(--muted);width:22px;height:22px;display:grid;place-items:center;border-radius:6px;flex:none;font-size:11px}.item .x:hover{color:var(--danger);background:var(--danger-soft)}.ghost-btn{border:1.5px dashed var(--line-strong);border-radius:9px;padding:8px;color:var(--accent);font-weight:600;width:100%;background:transparent}.ghost-btn:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}.dr-foot{margin-top:auto;display:flex;align-items:center;gap:8px;padding:10px 12px;border-top:1px solid var(--line);background:var(--surface-2);flex-wrap:wrap}.dr-foot .spacer{flex:1}.live{display:grid;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#e7e7e7;color:#1b1b1b;justify-items:start}.live small{color:#5a5f66}.live svg{display:block;height:28px}.option{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface);width:100%;text-align:left}.option:hover:not(:disabled){border-color:var(--accent)}.option .mdi{font-size:20px;width:26px;text-align:center;color:var(--ink-2);flex:none}.option .tx{display:grid;min-width:0}.option .tx strong{font-weight:500;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.option .tx small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.options{display:grid;gap:6px}.inspection-tile{display:grid;gap:3px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;margin-bottom:6px}.inspection-tile strong{font-size:12.5px}.settings{padding:22px;overflow:auto;display:grid;gap:14px;align-content:start;grid-column:1 / -1}.settings .status{font-size:12px;color:var(--muted)}.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px}.set-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:6px 14px 8px}.set-card h4{display:flex;align-items:center;gap:8px;padding:10px 0 8px}.set-card h4 .mdi{color:var(--muted);font-size:16px}.set-card>.hint{margin:6px 0 4px}.srow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--line)}.srow>.s-label{color:var(--ink-2)}.srow.inactive .s-label,.srow.inactive .s-control{opacity:.45}.settings.offline .set-grid{opacity:.6}.step{display:inline-flex;align-items:center;gap:2px}.step button{width:26px;height:26px;border-radius:6px;color:var(--ink-2);background:var(--seg);display:grid;place-items:center}.step button .mdi{font-size:15px}.step button:hover:not(:disabled){color:var(--ink);background:var(--line-strong)}.step output{min-width:56px;text-align:center;font-weight:500}.panel{padding:22px 26px 40px;overflow:auto;display:grid;gap:18px;align-content:start;max-width:960px;width:100%}.panel.wide{max-width:1120px}.panel-head{display:flex;align-items:flex-start;gap:12px}.panel-head .tx{display:grid;gap:2px;flex:1;min-width:0}.panel-head h1{font-size:20px}.panel-head p{color:var(--muted);font-size:13px}.panel p,.panel li{color:var(--ink-2);font-size:13px}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;display:grid;gap:12px;align-content:start}.card h2{font-size:14px}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.field{display:grid;gap:6px}.field>.f-label,fieldset legend{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}fieldset{border:0;padding:0;margin:0;display:grid;gap:8px;min-width:0}fieldset:disabled{opacity:.6}.boards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}.board{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line-strong);border-radius:10px;cursor:pointer}.board:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}.board input{width:auto;margin:0;accent-color:var(--accent)}.board b{display:block;font-weight:600}.actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.status-line{font-size:12.5px;color:var(--ink-2)}.status-line.ok{color:var(--good)}.status-line.error{color:var(--danger)}.progress-head{display:flex;align-items:center;gap:10px;font-weight:600;font-size:14px}.outcome{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:12px;font-weight:700}.outcome.ok{background:var(--good)}.outcome.bad{background:var(--danger)}.steps{margin:0;padding-left:20px;display:grid;gap:8px}.steps li b{color:var(--ink)}.key-box{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);flex-wrap:wrap}.key-box code{flex:1;min-width:0;background:none;padding:0;font-size:12px}.log{max-height:320px}details.log-wrap summary{cursor:pointer;font-weight:500;color:var(--ink-2);font-size:12.5px}details.log-wrap pre{margin-top:8px}.check{display:flex;align-items:flex-start;gap:10px;cursor:pointer}.check input{width:18px;height:18px;margin:1px 0 0;accent-color:var(--accent)}.check span{display:grid;gap:2px;font-weight:500}.node-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.tools{display:flex;gap:10px;flex-wrap:wrap}.tool{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface);text-align:left;min-width:220px}.tool:hover{border-color:var(--accent)}.tool .tool-icon{width:30px;height:30px;border-radius:8px;background:var(--seg);display:grid;place-items:center;font-size:15px;color:var(--ink-2);flex:none}.tool .tx{display:grid}.tool .tx b{font-weight:600}.yaml-editor{display:grid;grid-template-columns:44px minmax(0,1fr);border:1px solid var(--line-strong);border-radius:10px;overflow:hidden;background:var(--code-bg);min-height:280px;max-height:60vh}.yaml-gutter{padding:12px 8px;text-align:right;color:var(--muted);font:12px/1.5 var(--mono);white-space:pre;user-select:none;overflow:hidden;border-right:1px solid var(--line)}.yaml-editor textarea{border:0;border-radius:0;background:transparent;resize:none;font:12px/1.5 var(--mono);padding:12px;white-space:pre;overflow:auto;min-height:280px;tab-size:2}.file-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.file-row code{font-size:12px}.notice{display:flex;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}.notice .mdi{font-size:20px;color:var(--ink-2)}.notice strong{display:block;font-weight:600;margin-bottom:2px}.alerts section{display:grid;gap:10px}.alerts h2{font-size:15px}.alerts-nav{display:flex;flex-wrap:wrap;gap:6px}.alerts-nav button{background:var(--accent-soft);color:var(--accent);padding:5px 11px;font-size:12px;border-radius:20px;font-weight:500}.alert-hero{display:grid;grid-template-columns:minmax(0,300px) 1fr;gap:20px;align-items:center}.alert-mock{background:#101820;border-radius:16px;padding:22px 18px;display:grid;place-items:center}.alert-mock-card{position:relative;width:100%;background:#ffe1c6;border:1px solid #0001;border-radius:14px;padding:12px 12px 48px 52px;color:#1b1b1b;display:grid;gap:2px}.alert-mock-icon{position:absolute;left:12px;top:12px;font-size:30px}.alert-mock-card strong{font-size:15px;line-height:1.2}.alert-mock-card>span{font-size:12px;color:#3a3a3c}.alert-mock-card .fake{position:absolute;right:10px;bottom:10px;padding:6px 16px;border-radius:999px;background:#1b1b1b;color:#fff;font-size:13px}.alert-screen{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:grid;gap:8px;background:var(--surface)}.alert-screen-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.copy-line{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}.copy-line .copy-label{flex:none;width:96px;font-size:12px;color:var(--muted);padding-top:2px}.copy-line>code{flex:1;min-width:0;padding:4px 8px}.copy-line pre{flex:1;min-width:0}.table-scroll{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:560px}th,td{text-align:left;vertical-align:top;padding:8px 12px 8px 0;border-bottom:1px solid var(--line)}th{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}td code{white-space:nowrap}.chips{display:flex;flex-wrap:wrap;gap:6px}.chips .chip .mdi{font-size:16px}.chips .chip code{background:none;padding:0}.alert-icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}.alert-icon{display:grid;justify-items:center;align-content:start;gap:4px;min-height:86px;padding:10px 6px 8px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;font-weight:500}.alert-icon:hover{border-color:var(--accent)}.alert-icon .mdi{font-size:26px}.alert-icon code{background:none;padding:0;font-size:11px;color:var(--accent);text-align:center;white-space:normal}.alert-icon small{font-size:11px;text-align:center}.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.swatch{display:flex;align-items:center;gap:10px;padding:7px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:12px;text-align:left;font-weight:500}.swatch:hover{border-color:var(--accent)}.swatch i{width:32px;height:32px;border-radius:8px;border:1px solid #0001;flex:none;display:block}.swatch span{display:grid;gap:2px;min-width:0}.swatch code{background:none;padding:0}.alerts-list{padding-left:18px;margin:0;display:grid;gap:8px}.alerts-list b{color:var(--ink)}.subhead{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:6px}.empty{margin:auto;max-width:420px;text-align:center;display:grid;gap:10px;justify-items:center;padding:60px 20px}.empty-icon{width:48px;height:48px;border-radius:14px;background:var(--seg);color:var(--muted);display:grid;place-items:center;font-size:26px}.empty h2{font-size:18px}.empty p{color:var(--muted)}.toast{position:fixed;left:50%;bottom:20px;transform:translate(-50%);display:flex;align-items:center;gap:14px;padding:10px 16px;background:var(--ink);color:var(--surface);border-radius:10px;box-shadow:var(--shadow);font-size:13px;z-index:60;max-width:min(92vw,560px)}.toast button{color:#9fc4ff;font-weight:650}@media(max-width:960px){.app{grid-template-columns:1fr;min-height:100vh}.side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;border-right:0;border-bottom:1px solid var(--line);padding:10px;gap:4px 6px}.side .label,.side .spacer,.conn{display:none}.side #screens,.screen-item{display:contents}.screen-update{display:none}.side #pending{flex-basis:100%}.nav-item{width:auto}.more{display:contents}.main-head{flex-wrap:wrap;padding:10px 14px;gap:8px;position:static}.head-right{margin-left:0;width:100%}.body{grid-template-columns:1fr;overflow:visible}.canvas{padding:16px;overflow:visible}.pages{overflow-x:auto;padding-bottom:8px}.library{border-left:0;border-top:1px solid var(--line)}.lib-list{flex:none;max-height:360px}.drawer{position:fixed;top:0;width:100%}.panel{padding:16px}.alert-hero{grid-template-columns:1fr}}.progress{position:relative;height:6px;border-radius:3px;background:var(--seg);overflow:hidden}.progress i{position:absolute;inset:0 auto 0 0;background:var(--accent);border-radius:3px;transition:width .4s}.progress-text{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:var(--muted)}.progress-text span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:right}.whatsnew summary{cursor:pointer;font-size:11.5px;color:var(--accent);font-weight:500;list-style:none}.whatsnew summary::-webkit-details-marker{display:none}.whatsnew ul{margin:6px 0 0;padding-left:14px;display:grid;gap:4px;font-size:11px;color:var(--ink-2)}.whatsnew ul li{line-height:1.35}.log-lines{max-height:160px;font-size:11px}.palette-backdrop{position:fixed;inset:0;background:#0a0c1247;z-index:70;display:grid;align-items:start;justify-items:center;padding:12vh 16px 16px}.palette{width:min(640px,100%);background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;max-height:70vh}.palette input{border:0;border-radius:0;border-bottom:1px solid var(--line);padding:14px 16px;font-size:15px;background:transparent}.palette-list{overflow:auto;padding:6px;display:grid;gap:2px}.palette-group{font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:8px 10px 4px}.palette-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;width:100%;text-align:left;color:var(--ink)}.palette-item .mdi,.palette-item .glyph{width:22px;text-align:center;color:var(--muted);font-size:16px;flex:none}.palette-item .tx{flex:1;min-width:0;display:grid}.palette-item .tx small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.palette-item .hint-key{font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:1px 5px}.palette-item.active,.palette-item:hover{background:var(--accent-soft)}.palette-empty{padding:18px;color:var(--muted);font-size:12.5px;text-align:center}.side .search-btn{display:flex;align-items:center;gap:8px;width:100%;margin:4px 0 6px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);color:var(--muted);font-size:12px;text-align:left}.side .search-btn kbd{margin-left:auto;font:10.5px var(--ui-font);border:1px solid var(--line);border-radius:4px;padding:1px 5px;background:var(--surface)}.side .search-btn:hover{color:var(--ink);border-color:var(--line-strong)}.menu .sub{display:grid;padding:2px 0 4px 10px}.menu .sub button{font-size:12.5px;padding:6px 10px}.menu .sep{height:1px;background:var(--line);margin:4px 6px}.lib-row{display:flex;gap:6px;align-items:center}.lib-row select{padding:5px 8px;font-size:12px;flex:1;min-width:0}.lib-row .chip-toggle{flex:none;padding:5px 10px;border-radius:999px;font-size:11.5px;font-weight:500;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line)}.lib-row .chip-toggle[aria-pressed=true]{background:var(--ink);color:var(--surface);border-color:var(--ink)}.ent .av.on{background:#fff3d6!important;color:#b7791f!important}.ent .av.gone{background:var(--seg)!important;color:var(--muted)!important}.try-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.try-grid .field.wide{grid-column:1 / -1}.tile.full{grid-column:span 2;grid-row:span 3;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px}.tile.full .ic{font-size:34px}.tile.full .lead{flex:0 0 auto;align-content:center;justify-items:center}.tile.full .nm{font-size:14px}.tile.full .st{font-size:11px}.tile.full .ctl{margin-top:6px}.tile.full .mini-slider{width:60%}.tile .goto{font-size:10.5px;color:#5a5f66}.device.cyd .tile.full .ic{font-size:26px} diff --git a/screen_manager/app/static/assets/it-DNPtPX-v.js b/screen_manager/app/static/assets/it-DNPtPX-v.js deleted file mode 100644 index bb27bc0..0000000 --- a/screen_manager/app/static/assets/it-DNPtPX-v.js +++ /dev/null @@ -1 +0,0 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"sconosciuto"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifiche non salvate"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apri Dispositivi e servizi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Salva e invia"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Salvataggio…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leggi i dati attuali"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 risultato. Continua a scrivere per restringere l'elenco."},{t:2,i:[{t:4,k:"n"},{t:3,v:" risultati. Continua a scrivere per restringere l'elenco."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambia"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Caricamento…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Indietro"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nuovo schermo"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato. Ricarica la pagina e riprova."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API copiata."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La chiave API è selezionata. Copiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON della disposizione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il JSON della disposizione è selezionato. Copialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'azione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'azione è selezionato. Copialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML è selezionato. Copialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'icona copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'icona è selezionato. Copialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Colore vuoto copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il colore vuoto è selezionato. Copialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome del colore copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome del colore è selezionato. Copialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Pagina di gestione non raggiungibile · nuovo tentativo…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connesso"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Riconnessione a Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Ricarica"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In coda per l'aggiornamento"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato con questo nome dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novità"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'indirizzo IP, una sola volta; poi il nuovo firmware lo comunica da solo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP, es. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Avvia"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installato, ma non ancora in Home Assistant. Aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e attiva «Allow the device to perform Home Assistant actions» in Configura."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware scaricato, non ancora in Home Assistant. Mettilo sullo schermo con ESPHome Web, poi aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e consenti le azioni di Home Assistant in Configura."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Non ancora in Home Assistant. Firmware già installato? Aggiungi il dispositivo ESPHome in Impostazioni → Dispositivi e servizi, poi consenti le azioni di Home Assistant in Configura. Non ancora installato? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copia chiave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi a questo schermo"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guida rapida e avviso di prova"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niente da salvare"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica questo schermo"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fa lampeggiare la retroilluminazione e mostra una scheda"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede un firmware più recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Scarica e copia come JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Cerca schermi, entità, azioni…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nessun risultato. Scrivi parte del nome di uno schermo, di un'entità o di un'azione."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno dei tuoi schermi a sinistra per modificarne i riquadri, la barra superiore e le impostazioni."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Inizia con uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Collega un CYD o un Guition via USB alla macchina di Home Assistant. Profilo, firmware e prima installazione in un colpo solo."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installa un nuovo schermo"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Hai modifiche non salvate. Aprire comunque un altro schermo?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con una copia di quella dell'altro schermo?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con quella importata?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Il tuo schermo si sta aggiornando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Salvato. "},{t:4,k:"name"},{t:3,v:" si sta aggiornando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo schermo si sta aggiornando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. La tua ultima modifica non è ancora stata inviata: premi di nuovo Salva e invia."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lampeggia e mostra una scheda per qualche secondo."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · modifiche salvate"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni schermo"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Salvato · inviato allo schermo"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tutto salvato"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"fa lampeggiare lo schermo"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede il firmware 0.2.31 o più recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"da Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia disposizione da…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" schermo"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nessun altro schermo"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadro"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadri"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importa disposizione…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzato"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato per questo schermo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Riquadro rimosso: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Non c'è spazio per questo riquadro a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna pagina è libera per un riquadro a pagina intera. Libera prima una pagina."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo ha già un riquadro che porta a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Salva e invia quando ti sembra giusta."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione importata. Salva e invia quando ti sembra giusta."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione importata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Questo non è JSON. Esporta prima una disposizione, oppure incollane una da un altro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Nessun riquadro in questo file. Serve una disposizione esportata da ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagine · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi la tua prima luce, scena o dispositivo dalla libreria."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tocca la barra superiore o un riquadro per cambiarne le impostazioni. Trascina per spostare; rilascia sulla pagina successiva per crearne una nuova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Gli spazi vuoti e le posizioni fisse funzionano a partire dal firmware 0.2.26. Fino a quell'aggiornamento, questo schermo (firmware "},{t:4,k:"firmware"},{t:3,v:") sposta i riquadri verso il primo spazio libero."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione dello schermo"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi pagina"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Al massimo 1 pagina"},{t:2,i:[{t:3,v:"Al massimo "},{t:4,k:"n"},{t:3,v:" pagine"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi pagina"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Le pagine successive scalano di un posto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifica barra superiore"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Spazio vuoto. Fai clic per aggiungere un riquadro qui, o trascinane uno."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Spazio vuoto "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:": aggiungi qui il prossimo riquadro"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Il prossimo riquadro va qui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vuoto"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Libreria"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, dispositivo o area…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi un'entità"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luci"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttori"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatori"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coperture"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensori"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valori"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezioni"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persone"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Area"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Tutte le aree"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi quelle già inserite"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi ciò che è già su questo schermo"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che è qui è già su questo schermo."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata. Prova un altro nome, un'altra area o un altro filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro; aggiorna il suo firmware per averne 48."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri; aggiorna il suo firmware per averne 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Trascina su una pagina, o tocca + per aggiungere al primo spazio libero. ⌘K cerca ovunque."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luce"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Copertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensore"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sole"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Telecamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Immagine"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entità"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"orologio analogico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"percorso del sole"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pagina intera"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome sullo schermo"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (da Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (predefinita)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra l'icona scelta a partire dal firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Porta alla pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vuota)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"I riquadri di navigazione richiedono il firmware 0.2.62: premi prima Aggiorna per questo schermo."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo non ha la pagina "},{t:4,k:"page"},{t:3,v:", quindi un tocco apre la sua ultima pagina. Scegli un'altra pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Un tocco sul riquadro apre quella pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Visualizzazione"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Orologio analogico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e stato"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Percorso del sole"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Dimensione"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Larghezza doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera: un grande pulsante che si illumina quando è acceso; in basso trovano posto un cursore, i comandi o un grafico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nuova pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controllo diretto sul riquadro"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre questo controllo per questa entità, quindi sullo schermo resta vuoto. Scegline un altro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"In basso nel riquadro a pagina intera; un tocco altrove funziona come impostato qui sotto."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A destra del riquadro a larghezza doppia, come le righe in Home Assistant. Un tocco sul nome funziona come impostato qui sotto."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra il controllo diretto a partire dal firmware 0.2.19; fino ad allora il riquadro resta com'era."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocco"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Apri i controlli"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo visualizzazione"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Accendi / spegni"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Esegui azione"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non può accendere e spegnere questa entità, quindi un tocco non fa nulla. Scegli un'altra opzione."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo accende e spegne questa entità a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco apre la sua scheda."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Tieni premuto il riquadro per aprire la sua scheda."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo cursore sul riquadro"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sì, controllo diretto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha nulla che un cursore possa regolare per questa entità. Scegli No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Storico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Sfondo pastello"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Sfondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:". Enter: configura, tasti freccia: sposta"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi riquadro"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Chiedo a Home Assistant quali azioni ha questa entità…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non risponde al momento. Riprova tra poco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli un'azione"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio toggle, position o play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'azione"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna azione trovata."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre più questa azione per questa entità, quindi un tocco non fa nulla. Scegline un'altra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facoltativo)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non impostato"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Disattivo"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant richiede: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo esegue un'azione a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco funziona come Automatico."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio lampada, musica o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona, solo testo"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona trovata."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dati attuali"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connessione, stato e proprietà supportate"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lettura…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Recupero dello stato attuale da HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stato: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Piccolo cursore: "},{t:4,k:"slider"},{t:3,v:" · Visualizzazione: "},{t:4,k:"display"},{t:3,v:" · Dimensione: "},{t:4,k:"size"},{t:3,v:" · Controllo: "},{t:4,k:"control"},{t:3,v:" · Sfondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sì"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nessuno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinito"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Leggi di nuovo"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Rimosso dalla barra superiore: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"La barra superiore ha spazio per 1 elemento."},{t:2,i:[{t:3,v:"La barra superiore ha spazio per "},{t:4,k:"n"},{t:3,v:" elementi."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"È già nella barra superiore."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superiore"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superiore: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso, funziona anche senza Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Sinistra: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Per esempio: Soggiorno"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Destra: ora, sensori o orologio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:". Enter: configura, frecce: sposta"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"},{t:3,v:" dalla barra superiore"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Massimo 1 elemento"},{t:2,i:[{t:3,v:"Massimo "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi l'ora, la data, l'orologio analogico o un'entità"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi ora, data o un'entità"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non tutto sta accanto al nome: lo schermo tralascia gli elementi tratteggiati. Rimuovine uno o scegli un nome più corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Trascina per riordinare; tocca un elemento per configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensori, data e orologio analogico compaiono a partire dal firmware "},{t:4,k:"version"},{t:3,v:"; fino a quell'aggiornamento questo schermo mostra il nome e, se l'ora è nella barra, l'orologio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto: non attivo al momento"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non sta accanto al nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Quadrante"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto al momento: non attivo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Al momento non sta accanto al nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Come appare sullo schermo"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo quadrante con l'ora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Cosa mostrare"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Ultima modifica» continua a contare sullo schermo stesso: «Proprio ora», «5 min fa», «Ieri»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (come Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostra"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo quando attivo» nasconde l'elemento finché è spento, chiuso, fuori casa o a 0. Utile per una porta aperta, una lavatrice in funzione o per sapere chi è a casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 24 ore · si cambia in "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 12 ore · si cambia in "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni → Lingua e regione"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Oggi: "},{t:4,k:"date"},{t:3,v:". La data segue l'orologio dello schermo stesso."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Su"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Giù"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi alla barra superiore"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazio usato"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazi usati"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Già aggiunto"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti da Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Un'entità"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, area o entità, es. temperatura o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'entità per la barra superiore"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Notte"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modalità scura"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Standby automatico"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby dopo"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modalità notte"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Inizio"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fine"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità notte"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Torna a pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Dopo"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Anche in standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Scorri tra le pagine"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Pulsanti pagina"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotazione"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Sto ancora salvando le impostazioni dell'altro schermo. Riprova tra poco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"I pulsanti pagina e lo scorrimento sono disattivati, quindi solo i riquadri «Vai alla pagina» cambiano pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagine "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Non hai riquadri «Vai alla pagina»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"I riquadri che portano a "},{t:4,k:"pages"},{t:3,v:" sono solo su pagine che non puoi raggiungere."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Da "},{t:4,k:"pages"},{t:3,v:" nessun riquadro riporta a pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Questo schermo è offline. Le sue impostazioni si potranno cambiare quando torna online."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito sullo schermo, e quelle fatte sullo schermo compaiono qui."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito. A partire dal firmware 0.2.49 lo schermo le conserva da solo."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Questa entità è disattivata in Home Assistant, oppure lo schermo si sta riavviando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": diminuisci"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": aumenta"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Avvio dell'aggiornamento…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Scrittura del firmware via Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione e installazione…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"In attesa che lo schermo torni online…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Verifica della stabilità…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nuova lingua: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi ora si aggiorneranno automaticamente di notte."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Gli aggiornamenti automatici sono disattivati."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti del firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo associato finora. I nuovi schermi ricevono il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi hanno il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aggiorna 1 schermo"},{t:2,i:[{t:3,v:"Aggiorna tutti i "},{t:4,k:"n"},{t:3,v:" schermi"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novità del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna automaticamente ogni notte"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tra le 03:00 e le 06:00, uno schermo alla volta. Si ferma in caso di errore e lo segnala in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Claude Code la rileva subito."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Riavvia Claude Code una volta perché trovi la nuova cartella delle skill."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Insegna ESP Screens a Claude, poi chiedi: «Mostra un avviso su tutti i miei schermi quando la cassetta della posta è piena». Claude conosce gli eventi degli avvisi, ogni campo, colore e icona."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa per Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Installa di nuovo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna la skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installata"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installata"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installata · è pronta una versione più recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Per Claude Code in Home Assistant. Scrive un file in "},{t:4,k:"path"},{t:3,v:"; installando di nuovo lo sostituisci."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica per claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carica lo zip in Claude, in Personalizza → Skill."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che riguarda i tuoi schermi."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← I miei schermi"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi uno schermo, oppure compila e reinstalla il firmware di uno che hai già."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa via USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lingua e regione"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Lingua degli schermi"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Lingua di Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Lingua di Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi usano l'inglese finché la lingua di Home Assistant non è disponibile."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non ancora verificato, aiuto benvenuto"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" non è ancora verificato, ogni aiuto è benvenuto: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"come tradurre"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Dopo una modifica ogni schermo ha bisogno di un aggiornamento del firmware, una compilazione per schermo: con il suo pulsante Aggiorna, o con gli aggiornamenti notturni."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato orario"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 ore"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 ore"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numerico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Il tuo profilo Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usa questi"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'editor segue la lingua del tuo profilo Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Ogni schermo passa alla nuova lingua con il suo prossimo aggiornamento."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una scheda a tutto schermo da un'automazione, su uno schermo o su tutti. La guida rapida contiene i nomi delle azioni, i campi, le icone e i colori, e un modulo per provarne uno."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifiche a schermo intero, da un'automazione"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa il firmware degli schermi"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI di ESPHome integrata usa il tuo profilo (YAML con le chiavi) e i tuoi segreti. Scegli il profilo dello schermo, poi una porta USB (schermo collegato alla macchina di Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con il nome host, oppure "},{t:4,k:"download"},{t:3,v:" per mettere il firmware sullo schermo dal tuo computer. "},{t:4,k:"check"},{t:3,v:" verifica soltanto, "},{t:4,k:"build"},{t:3,v:" compila, "},{t:4,k:"install"},{t:3,v:" mette il firmware sullo schermo. I tuoi riquadri restano come sono in ESP Screens. La prima compilazione richiede qualche minuto."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verifica"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilazione"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compila e scarica"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Manca la CLI di ESPHome. Aggiorna l'app alla versione 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli il profilo giusto, poi una porta USB, un indirizzo IP o Scarica."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profilo ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installa su"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nessuno schermo rilevato finora sulla macchina di Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Scarica · installa dal tuo computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP o nome host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Scarica "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Mettilo sullo schermo con "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome o Edge: Connect, scegli la porta USB dello schermo, Install e seleziona questo file. Contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profilo salvato."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un attimo…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da scaricare."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea il profilo dello schermo con chiavi uniche e compila il firmware. Collega lo schermo con un cavo USB dati alla macchina su cui gira Home Assistant, oppure scarica il firmware e mettilo sullo schermo dal tuo computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quale schermo hai?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pollici"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pollici"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Schermo del soggiorno"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizza"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ogni schermo ha il suo profilo con le sue chiavi. Quattro schermi? Ripeti questi passaggi quattro volte con un nome diverso."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettere minuscole, cifre e trattini. Un nome diverso per ogni schermo."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Password Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Da compilare una sola volta: ESP Screens lo salva nel secrets.yaml di ESPHome e gli schermi successivi lo usano automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Nel tuo secrets.yaml di ESPHome mancano ancora i dati Wi-Fi. ESP Screens compila solo le righe mancanti."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Il Wi-Fi viene dal tuo secrets.yaml di ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Il secrets.yaml nella cartella di ESPHome non è YAML valido. Correggi prima il file; non verrà sovrascritto."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installa tramite"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Più tardi · salva solo il profilo"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo con un cavo USB dati alla macchina di Home Assistant; l'elenco si aggiorna da solo. Oppure scegli Scarica per usare il tuo computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica il firmware e mettilo sullo schermo dal tuo computer, in Chrome o Edge. Dopo, gli aggiornamenti arrivano via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo va nella cartella di ESPHome. Puoi installarlo più tardi da Firmware e USB, o da ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Più schermi collegati: scegli la porta di questo schermo."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una sola volta via USB; dopo, tutto senza fili."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Salva profilo"}},busy:{t:0,b:{t:2,i:[{t:3,v:"È già in corso una compilazione o un'installazione ("},{t:4,k:"file"},{t:3,v:"). Attendi che finisca."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In questa installazione manca la CLI di ESPHome; puoi solo salvare il profilo."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" è nella cartella di ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Scrittura del firmware su "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Il firmware per "},{t:4,k:"name"},{t:3,v:" è pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Il firmware è su "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione non riuscita"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installazione non riuscita"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installalo più tardi da Firmware e USB: scegli questo profilo, poi la porta USB della macchina di Home Assistant, oppure Scarica per mettere il firmware sullo schermo dal tuo computer. Conserva la chiave API per l'associazione:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Non scollegare ancora il cavo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: l'installazione continua e la ritrovi in Nuovo schermo."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: la compilazione continua e la ritrovi in Nuovo schermo."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Mettilo sullo schermo dal tuo computer, poi associa lo schermo a Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Ora associalo a Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci. Ora associalo a Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Vedi il registro qui sotto."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cavo USB dati."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo al tuo computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome o Edge, fai clic su Connect e scegli la porta USB dello schermo."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Apri "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fai clic su Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Il file contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Questo avviene fuori da ESP Screens. Home Assistant rileva "},{t:4,k:"name"},{t:3,v:" come dispositivo ESPHome; fai clic su Aggiungi. Non rilevato? Aggiungi ESPHome manualmente con l'indirizzo IP dello schermo."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vai in Home Assistant → Impostazioni → Dispositivi e servizi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" qui sopra quando Home Assistant chiede una chiave di cifratura."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Incolla la chiave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integrazione ESPHome → Configura → «Allow the device to perform Home Assistant actions». Senza questo, lo schermo vede tutto ma non controlla nulla."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Consenti le azioni di HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" In ESP Screens lo schermo compare nell'elenco a sinistra entro una trentina di secondi; fino ad allora è indicato lì come «non ancora in Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Scegli i tuoi riquadri."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Riprova"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installa un altro schermo"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Ricomincia"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi · guida rapida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notifica a schermo intero, da un'automazione."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha l'azione "},{t:4,k:"action"},{t:3,v:". Mette una scheda sopra tutto, riattiva lo schermo e mantiene la retroilluminazione a luminosità normale finché qualcuno non tocca il pulsante o non scade il timeout. Home Assistant da solo non mostra spiegazioni né menu a tendina per le azioni ESPHome; qui trovi tutto quello che puoi compilare."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guida rapida si sta ancora caricando; un attimo."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"C'è qualcuno alla porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, retro"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Arrivo"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sezioni"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Prova"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"I tuoi schermi"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In un'automazione"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"I campi"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icone"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colori"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventi"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Invia subito un avviso, con gli stessi campi che invia un'automazione. Lo schermo mostra la scheda e, con il lampeggio attivo, fa lampeggiare la retroilluminazione."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi (pronti: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titolo"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sottotitolo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Colore"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Testo del pulsante"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (secondi, 0 aspetta il pulsante)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fai lampeggiare la retroilluminazione"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quattro volte all'arrivo dell'avviso."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Invio…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Invia avviso"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Inviato allo schermo."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 schermo saltato (offline o firmware troppo vecchio)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi saltati (offline o firmware troppo vecchio)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Campi lasciati vuoti: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo ha potuto mostrarlo: verifica che uno schermo sia online con il firmware "},{t:4,k:"version"},{t:3,v:" o più recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Bianco (predefinito)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha la sua azione, con il nome del dispositivo. A partire dal firmware "},{t:4,k:"version"},{t:3,v:"; aggiorna uno schermo più vecchio con il suo pulsante Aggiorna in Schermi."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuno schermo associato finora. Installane uno da Nuovo schermo; l'azione compare appena Home Assistant vede lo schermo."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento necessario · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo sconosciuto · aggiorna lo schermo"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostra avviso"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi avviso"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" e cerca "},{t:4,k:"esphome"},{t:3,v:". Scegli l'azione del tuo schermo: Home Assistant la chiama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi azione"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant li chiede tutti e sette; lascia vuoto ciò che non usi ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", disattivo)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Compila i campi."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Preferisci lo YAML? Scegli "},{t:4,k:"edit"},{t:3,v:" sull'azione e incolla l'esempio qui sotto."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Esempio per"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"uno schermo (non ancora associato)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifica in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copia YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi insieme"}},text:{t:0,b:{t:2,i:[{t:3,v:"Attiva l'evento "},{t:4,k:"show"},{t:3,v:" con gli stessi campi ed ESP Screens inoltra l'avviso a ogni schermo online, compresi quelli che aggiungerai in seguito. "},{t:4,k:"dismiss"},{t:3,v:" lo rimuove ovunque. In un'automazione, aggiungi l'azione "},{t:4,k:"event"},{t:3,v:" o incolla l'esempio in "},{t:4,k:"edit"},{t:3,v:". Tralascia i campi che non usi. Perché funzioni, ESP Screens deve essere in esecuzione."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Attiva manualmente evento"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Il testo è libero; il limite è in byte e una lettera accentata conta per due. Ciò che non ci sta finisce con i puntini di sospensione (titolo) o viene tagliato (sottotitolo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Cosa fa"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Esempio"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"testo"}},int:{t:0,b:{t:2,i:[{t:3}],s:"numero"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"attivo / disattivo"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entità"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" byte"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"da 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:", per esempio "},{t:4,k:"example"},{t:3,v:". Funzionano anche "},{t:4,k:"mdi"},{t:3,v:" e il codice esadecimale ("},{t:4,k:"hex"},{t:3,v:"). Nel firmware ci sono solo queste icone; qualsiasi altro nome mostra il triangolo di avvertimento. Tocca un'icona per copiarne il nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Utili per le notifiche"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome o descrizione…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Disponibili anche: icone di controllo e meteo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copia "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nessuna icona per «"},{t:4,k:"query"},{t:3,v:"». I nomi sconosciuti mostrano il triangolo di avvertimento ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:". Sono le tonalità pastello dei riquadri, con testo scuro. Un nome vuoto o sconosciuto dà la scheda bianca. Tocca per copiare."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un avviso riattiva subito uno schermo attenuato o spento e compare sopra ogni pagina, ogni scheda luce aperta e il livello di standby."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Riattiva lo schermo."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Finché la scheda è visibile, la retroilluminazione resta a luminosità normale. Standby e ore notturne aspettano. Dopo il pulsante, riparte il normale tempo di standby."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acceso fino al pulsante."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" aspetta il pulsante, per tutto il tempo necessario. Con "},{t:4,k:"minute"},{t:3,v:" la scheda sparisce dopo un minuto, ma il pulsante la chiude prima."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fa lampeggiare la retroilluminazione quattro volte all'arrivo dell'avviso (circa un secondo) e poi lascia lo schermo acceso."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Lampeggio."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un nuovo avviso sostituisce quello attuale; gli avvisi non si accumulano. L'avviso sostituito si segnala come "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sostituzione."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" rimuove la scheda, per esempio se la porta è già aperta. Senza un avviso, quell'azione non fa nulla."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Chiusura a distanza."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" non fa nulla; solo il pulsante la chiude. Così un tocco per riattivare lo schermo non chiude mai l'avviso per sbaglio."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toccare accanto alla scheda"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni volta che un avviso termina, parte l'evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (il nome del dispositivo) e il "},{t:4,k:"device_id"},{t:3,v:" che aggiunge Home Assistant. Visibile in Impostazioni → Strumenti → Eventi."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Aspettare che qualcuno prema il pulsante"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": arancione per la porta, rosso per fumo o acqua, verde per «fatto». Il testo resta sempre scuro e leggibile."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"colore per ogni tipo di notifica"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tieni il titolo "},{t:4,k:"bold"},{t:3,v:": uno schermo mostra circa venti caratteri su una riga e chiude un titolo più lungo con i puntini di sospensione. Metti i dettagli nel sottotitolo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"breve"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" trasforma la notifica in una domanda: «Arrivo», «Visto», «Spegni». L'evento poi ti dice chi ha risposto."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"testo del pulsante personalizzato"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Per un avviso che si risolve da solo (la porta si apre, il bucato viene ritirato), chiudilo nella stessa automazione con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi? Attiva "},{t:4,k:"event"},{t:3,v:" una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Preferisci "},{t:4,k:"bold"},{t:3,v:" l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"chiedere a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Qualcuno sta arrivando alla porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzate · personalizzazione locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizzato · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Questo piccolo file è tuo. Viene caricato dopo il pacchetto condiviso degli schermi e resta al suo posto quando ESP Screens si aggiorna. Cambia qui i dettagli specifici dell'hardware, come il modello del display."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Cosa si può cambiare senza rischi?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pin e altri dettagli del dispositivo. Nome, Wi-Fi, API, OTA e collegamenti ai package restano gestiti automaticamente."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da collegare"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato locale"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usa l'esempio"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancella"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carattere"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caratteri"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 riga"},{t:2,i:[{t:4,k:"n"},{t:3,v:" righe"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Salva e verifica"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Salva YAML personalizzato"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Non è stato trovato nessun profilo ESPHome per questo schermo."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche fatte qui valgono dalla prossima compilazione."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Salva una volta per collegare questo file al profilo."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Verifica e salvataggio…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo YAML personalizzato viene mantenuto negli aggiornamenti del firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato salvato."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. ESPHome sta verificando il profilo completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sta verificando il profilo…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sta verificando il profilo… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo completo è valido. Puoi compilare e installare senza rischi."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rifiutato il profilo completo. Vedi Firmware e USB per il registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire il testo attuale con l'esempio?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Esempio caricato. Salvalo quando vuoi."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancellare lo YAML personalizzato locale?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML personalizzato sarà vuoto dopo il salvataggio."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Sconosciuto"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Medio/a"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Alto/a"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Mezzo"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Focalizzato"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Diffuso"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Superiore"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Entrambi"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Verticale"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Orizzontale"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"lu"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"me"}},{t:0,b:{t:2,i:[{t:3}],s:"gi"}},{t:0,b:{t:2,i:[{t:3}],s:"ve"}},{t:0,b:{t:2,i:[{t:3}],s:"sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/it-DtjIhLzc.js b/screen_manager/app/static/assets/it-DtjIhLzc.js new file mode 100644 index 0000000..eacd87c --- /dev/null +++ b/screen_manager/app/static/assets/it-DtjIhLzc.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"sconosciuto"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifiche non salvate"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apri Dispositivi e servizi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Salva e invia"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Salvataggio…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leggi i dati attuali"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 risultato. Continua a scrivere per restringere l'elenco."},{t:2,i:[{t:4,k:"n"},{t:3,v:" risultati. Continua a scrivere per restringere l'elenco."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambia"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Caricamento…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Indietro"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nuovo schermo"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato. Ricarica la pagina e riprova."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API copiata."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La chiave API è selezionata. Copiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON della disposizione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il JSON della disposizione è selezionato. Copialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'azione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'azione è selezionato. Copialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML è selezionato. Copialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'icona copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'icona è selezionato. Copialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Colore vuoto copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il colore vuoto è selezionato. Copialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome del colore copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome del colore è selezionato. Copialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Pagina di gestione non raggiungibile · nuovo tentativo…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connesso"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Riconnessione a Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Ricarica"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In coda per l'aggiornamento"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato con questo nome dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novità"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'indirizzo IP, una sola volta; poi il nuovo firmware lo comunica da solo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP, es. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Avvia"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installato, ma non ancora in Home Assistant. Aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e attiva «Allow the device to perform Home Assistant actions» in Configura."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware scaricato, non ancora in Home Assistant. Mettilo sullo schermo con ESPHome Web, poi aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e consenti le azioni di Home Assistant in Configura."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Non ancora in Home Assistant. Firmware già installato? Aggiungi il dispositivo ESPHome in Impostazioni → Dispositivi e servizi, poi consenti le azioni di Home Assistant in Configura. Non ancora installato? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copia chiave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi a questo schermo"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guida rapida e avviso di prova"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niente da salvare"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica questo schermo"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fa lampeggiare la retroilluminazione e mostra una scheda"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede un firmware più recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Scarica e copia come JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Cerca schermi, entità, azioni…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nessun risultato. Scrivi parte del nome di uno schermo, di un'entità o di un'azione."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno dei tuoi schermi a sinistra per modificarne i riquadri, la barra superiore e le impostazioni."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Inizia con uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Collega un CYD o un Guition via USB alla macchina di Home Assistant. Profilo, firmware e prima installazione in un colpo solo."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installa un nuovo schermo"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Hai modifiche non salvate. Aprire comunque un altro schermo?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con una copia di quella dell'altro schermo?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con quella importata?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Il tuo schermo si sta aggiornando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Salvato. "},{t:4,k:"name"},{t:3,v:" si sta aggiornando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo schermo si sta aggiornando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. La tua ultima modifica non è ancora stata inviata: premi di nuovo Salva e invia."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lampeggia e mostra una scheda per qualche secondo."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · modifiche salvate"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni schermo"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Salvato · inviato allo schermo"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tutto salvato"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"fa lampeggiare lo schermo"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede il firmware 0.2.31 o più recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"da Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia disposizione da…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" schermo"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nessun altro schermo"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadro"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadri"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importa disposizione…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzato"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato per questo schermo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Riquadro rimosso: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Non c'è spazio per questo riquadro a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna pagina è libera per un riquadro a pagina intera. Libera prima una pagina."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo ha già un riquadro che porta a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Salva e invia quando ti sembra giusta."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione importata. Salva e invia quando ti sembra giusta."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione importata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Questo non è JSON. Esporta prima una disposizione, oppure incollane una da un altro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Nessun riquadro in questo file. Serve una disposizione esportata da ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagine · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi la tua prima luce, scena o dispositivo dalla libreria."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tocca la barra superiore o un riquadro per cambiarne le impostazioni. Trascina per spostare; rilascia sulla pagina successiva per crearne una nuova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Gli spazi vuoti e le posizioni fisse funzionano a partire dal firmware 0.2.26. Fino a quell'aggiornamento, questo schermo (firmware "},{t:4,k:"firmware"},{t:3,v:") sposta i riquadri verso il primo spazio libero."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione dello schermo"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi pagina"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Al massimo 1 pagina"},{t:2,i:[{t:3,v:"Al massimo "},{t:4,k:"n"},{t:3,v:" pagine"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi pagina"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Le pagine successive scalano di un posto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifica barra superiore"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Spazio vuoto. Fai clic per aggiungere un riquadro qui, o trascinane uno."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Spazio vuoto "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:": aggiungi qui il prossimo riquadro"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Il prossimo riquadro va qui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vuoto"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Libreria"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, dispositivo o area…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi un'entità"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luci"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttori"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatori"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coperture"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensori"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valori"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezioni"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persone"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Area"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Tutte le aree"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi quelle già inserite"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi ciò che è già su questo schermo"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che è qui è già su questo schermo."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata. Prova un altro nome, un'altra area o un altro filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro; aggiorna il suo firmware per averne 48."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri; aggiorna il suo firmware per averne 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Trascina su una pagina, o tocca + per aggiungere al primo spazio libero. ⌘K cerca ovunque."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luce"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Copertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensore"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sole"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Telecamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Immagine"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entità"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"orologio analogico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"percorso del sole"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pagina intera"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome sullo schermo"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (da Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (predefinita)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra l'icona scelta a partire dal firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Porta alla pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vuota)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"I riquadri di navigazione richiedono il firmware 0.2.62: premi prima Aggiorna per questo schermo."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo non ha la pagina "},{t:4,k:"page"},{t:3,v:", quindi un tocco apre la sua ultima pagina. Scegli un'altra pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Un tocco sul riquadro apre quella pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Visualizzazione"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Orologio analogico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e stato"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Percorso del sole"}},live:{t:0,b:{t:2,i:[{t:3}],s:"Immagine dal vivo"}},live_hint:{t:0,b:{t:2,i:[{t:3}],s:"Una piccola immagine della telecamera al posto dell'icona, aggiornata al ritmo qui sotto finché la pagina è sullo schermo. Un tocco la apre ancora a schermo intero."}},live_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un'immagine dal vivo richiede il firmware 0.2.77 o più recente: premi Aggiorna sullo schermo dopo il salvataggio."}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione."}}},refresh:{label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},seconds:{t:0,b:{t:2,i:[{t:3,v:"Ogni "},{t:4,k:"n"},{t:3,v:" s"}]}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Dimensione"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Larghezza doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera: un grande pulsante nel colore del riquadro; in basso trovano posto un cursore, i comandi o un grafico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nuova pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controllo diretto sul riquadro"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre questo controllo per questa entità, quindi sullo schermo resta vuoto. Scegline un altro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"In basso nel riquadro a pagina intera; un tocco altrove funziona come impostato qui sotto."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A destra del riquadro a larghezza doppia, come le righe in Home Assistant. Un tocco sul nome funziona come impostato qui sotto."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra il controllo diretto a partire dal firmware 0.2.19; fino ad allora il riquadro resta com'era."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocco"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Apri i controlli"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo visualizzazione"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Accendi / spegni"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Esegui azione"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non può accendere e spegnere questa entità, quindi un tocco non fa nulla. Scegli un'altra opzione."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo accende e spegne questa entità a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco apre la sua scheda."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Tieni premuto il riquadro per aprire la sua scheda."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo cursore sul riquadro"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sì, controllo diretto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha nulla che un cursore possa regolare per questa entità. Scegli No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Storico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Sfondo pastello"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Sfondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:". Enter: configura, tasti freccia: sposta"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi riquadro"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Chiedo a Home Assistant quali azioni ha questa entità…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non risponde al momento. Riprova tra poco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli un'azione"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio toggle, position o play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'azione"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna azione trovata."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre più questa azione per questa entità, quindi un tocco non fa nulla. Scegline un'altra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facoltativo)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non impostato"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Disattivo"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant richiede: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo esegue un'azione a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco funziona come Automatico."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio lampada, musica o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona, solo testo"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona trovata."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dati attuali"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connessione, stato e proprietà supportate"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lettura…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Recupero dello stato attuale da HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stato: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Piccolo cursore: "},{t:4,k:"slider"},{t:3,v:" · Visualizzazione: "},{t:4,k:"display"},{t:3,v:" · Dimensione: "},{t:4,k:"size"},{t:3,v:" · Controllo: "},{t:4,k:"control"},{t:3,v:" · Sfondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sì"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nessuno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinito"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Leggi di nuovo"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Rimosso dalla barra superiore: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"La barra superiore ha spazio per 1 elemento."},{t:2,i:[{t:3,v:"La barra superiore ha spazio per "},{t:4,k:"n"},{t:3,v:" elementi."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"È già nella barra superiore."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superiore"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superiore: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso, funziona anche senza Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Sinistra: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Per esempio: Soggiorno"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Destra: ora, sensori o orologio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:". Enter: configura, frecce: sposta"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"},{t:3,v:" dalla barra superiore"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Massimo 1 elemento"},{t:2,i:[{t:3,v:"Massimo "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi l'ora, la data, l'orologio analogico o un'entità"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi ora, data o un'entità"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non tutto sta accanto al nome: lo schermo tralascia gli elementi tratteggiati. Rimuovine uno o scegli un nome più corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Trascina per riordinare; tocca un elemento per configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensori, data e orologio analogico compaiono a partire dal firmware "},{t:4,k:"version"},{t:3,v:"; fino a quell'aggiornamento questo schermo mostra il nome e, se l'ora è nella barra, l'orologio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto: non attivo al momento"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non sta accanto al nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Quadrante"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto al momento: non attivo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Al momento non sta accanto al nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Come appare sullo schermo"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo quadrante con l'ora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Cosa mostrare"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Ultima modifica» continua a contare sullo schermo stesso: «Proprio ora», «5 min fa», «Ieri»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (come Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostra"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo quando attivo» nasconde l'elemento finché è spento, chiuso, fuori casa o a 0. Utile per una porta aperta, una lavatrice in funzione o per sapere chi è a casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 24 ore · si cambia in "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 12 ore · si cambia in "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni → Lingua e regione"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Oggi: "},{t:4,k:"date"},{t:3,v:". La data segue l'orologio dello schermo stesso."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Su"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Giù"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi alla barra superiore"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazio usato"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazi usati"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Già aggiunto"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti da Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Un'entità"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, area o entità, es. temperatura o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'entità per la barra superiore"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Notte"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modalità scura"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Standby automatico"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby dopo"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modalità notte"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Inizio"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fine"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità notte"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Torna a pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Dopo"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Anche in standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Scorri tra le pagine"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Pulsanti pagina"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotazione"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Sto ancora salvando le impostazioni dell'altro schermo. Riprova tra poco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"I pulsanti pagina e lo scorrimento sono disattivati, quindi solo i riquadri «Vai alla pagina» cambiano pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagine "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Non hai riquadri «Vai alla pagina»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"I riquadri che portano a "},{t:4,k:"pages"},{t:3,v:" sono solo su pagine che non puoi raggiungere."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Da "},{t:4,k:"pages"},{t:3,v:" nessun riquadro riporta a pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Questo schermo è offline. Le sue impostazioni si potranno cambiare quando torna online."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito sullo schermo, e quelle fatte sullo schermo compaiono qui."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito. A partire dal firmware 0.2.49 lo schermo le conserva da solo."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Questa entità è disattivata in Home Assistant, oppure lo schermo si sta riavviando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": diminuisci"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": aumenta"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Avvio dell'aggiornamento…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Scrittura del firmware via Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione e installazione…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"In attesa che lo schermo torni online…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Verifica della stabilità…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nuova lingua: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi ora si aggiorneranno automaticamente di notte."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Gli aggiornamenti automatici sono disattivati."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti del firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo associato finora. I nuovi schermi ricevono il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi hanno il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aggiorna 1 schermo"},{t:2,i:[{t:3,v:"Aggiorna tutti i "},{t:4,k:"n"},{t:3,v:" schermi"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novità del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna automaticamente ogni notte"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tra le 03:00 e le 06:00, uno schermo alla volta. Si ferma in caso di errore e lo segnala in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Claude Code la rileva subito."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Riavvia Claude Code una volta perché trovi la nuova cartella delle skill."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Insegna ESP Screens a Claude, poi chiedi: «Mostra un avviso su tutti i miei schermi quando la cassetta della posta è piena». Claude conosce gli eventi degli avvisi, ogni campo, colore e icona."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa per Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Installa di nuovo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna la skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installata"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installata"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installata · è pronta una versione più recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Per Claude Code in Home Assistant. Scrive un file in "},{t:4,k:"path"},{t:3,v:"; installando di nuovo lo sostituisci."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica per claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carica lo zip in Claude, in Personalizza → Skill."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che riguarda i tuoi schermi."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← I miei schermi"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi uno schermo, oppure compila e reinstalla il firmware di uno che hai già."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa via USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lingua e regione"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Lingua degli schermi"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Lingua di Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Lingua di Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi usano l'inglese finché la lingua di Home Assistant non è disponibile."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non ancora verificato, aiuto benvenuto"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" non è ancora verificato, ogni aiuto è benvenuto: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"come tradurre"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Dopo una modifica ogni schermo ha bisogno di un aggiornamento del firmware, una compilazione per schermo: con il suo pulsante Aggiorna, o con gli aggiornamenti notturni."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato orario"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 ore"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 ore"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numerico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Il tuo profilo Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usa questi"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'editor segue la lingua del tuo profilo Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Ogni schermo passa alla nuova lingua con il suo prossimo aggiornamento."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una scheda a tutto schermo da un'automazione, su uno schermo o su tutti. La guida rapida contiene i nomi delle azioni, i campi, le icone e i colori, e un modulo per provarne uno."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifiche a schermo intero, da un'automazione"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa il firmware degli schermi"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI di ESPHome integrata usa il tuo profilo (YAML con le chiavi) e i tuoi segreti. Scegli il profilo dello schermo, poi una porta USB (schermo collegato alla macchina di Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con il nome host, oppure "},{t:4,k:"download"},{t:3,v:" per mettere il firmware sullo schermo dal tuo computer. "},{t:4,k:"check"},{t:3,v:" verifica soltanto, "},{t:4,k:"build"},{t:3,v:" compila, "},{t:4,k:"install"},{t:3,v:" mette il firmware sullo schermo. I tuoi riquadri restano come sono in ESP Screens. La prima compilazione richiede qualche minuto."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verifica"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilazione"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compila e scarica"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Manca la CLI di ESPHome. Aggiorna l'app alla versione 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli il profilo giusto, poi una porta USB, un indirizzo IP o Scarica."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profilo ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installa su"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nessuno schermo rilevato finora sulla macchina di Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Scarica · installa dal tuo computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP o nome host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Scarica "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Mettilo sullo schermo con "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome o Edge: Connect, scegli la porta USB dello schermo, Install e seleziona questo file. Contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profilo salvato."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un attimo…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da scaricare."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea il profilo dello schermo con chiavi uniche e compila il firmware. Collega lo schermo con un cavo USB dati alla macchina su cui gira Home Assistant, oppure scarica il firmware e mettilo sullo schermo dal tuo computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quale schermo hai?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pollici"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pollici"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Schermo del soggiorno"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizza"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ogni schermo ha il suo profilo con le sue chiavi. Quattro schermi? Ripeti questi passaggi quattro volte con un nome diverso."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettere minuscole, cifre e trattini. Un nome diverso per ogni schermo."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Password Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Da compilare una sola volta: ESP Screens lo salva nel secrets.yaml di ESPHome e gli schermi successivi lo usano automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Nel tuo secrets.yaml di ESPHome mancano ancora i dati Wi-Fi. ESP Screens compila solo le righe mancanti."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Il Wi-Fi viene dal tuo secrets.yaml di ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Il secrets.yaml nella cartella di ESPHome non è YAML valido. Correggi prima il file; non verrà sovrascritto."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installa tramite"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Più tardi · salva solo il profilo"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo con un cavo USB dati alla macchina di Home Assistant; l'elenco si aggiorna da solo. Oppure scegli Scarica per usare il tuo computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica il firmware e mettilo sullo schermo dal tuo computer, in Chrome o Edge. Dopo, gli aggiornamenti arrivano via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo va nella cartella di ESPHome. Puoi installarlo più tardi da Firmware e USB, o da ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Più schermi collegati: scegli la porta di questo schermo."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una sola volta via USB; dopo, tutto senza fili."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Salva profilo"}},busy:{t:0,b:{t:2,i:[{t:3,v:"È già in corso una compilazione o un'installazione ("},{t:4,k:"file"},{t:3,v:"). Attendi che finisca."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In questa installazione manca la CLI di ESPHome; puoi solo salvare il profilo."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" è nella cartella di ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Scrittura del firmware su "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Il firmware per "},{t:4,k:"name"},{t:3,v:" è pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Il firmware è su "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione non riuscita"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installazione non riuscita"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installalo più tardi da Firmware e USB: scegli questo profilo, poi la porta USB della macchina di Home Assistant, oppure Scarica per mettere il firmware sullo schermo dal tuo computer. Conserva la chiave API per l'associazione:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Non scollegare ancora il cavo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: l'installazione continua e la ritrovi in Nuovo schermo."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: la compilazione continua e la ritrovi in Nuovo schermo."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Mettilo sullo schermo dal tuo computer, poi associa lo schermo a Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Ora associalo a Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci. Ora associalo a Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Vedi il registro qui sotto."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cavo USB dati."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo al tuo computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome o Edge, fai clic su Connect e scegli la porta USB dello schermo."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Apri "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fai clic su Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Il file contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Questo avviene fuori da ESP Screens. Home Assistant rileva "},{t:4,k:"name"},{t:3,v:" come dispositivo ESPHome; fai clic su Aggiungi. Non rilevato? Aggiungi ESPHome manualmente con l'indirizzo IP dello schermo."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vai in Home Assistant → Impostazioni → Dispositivi e servizi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" qui sopra quando Home Assistant chiede una chiave di cifratura."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Incolla la chiave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integrazione ESPHome → Configura → «Allow the device to perform Home Assistant actions». Senza questo, lo schermo vede tutto ma non controlla nulla."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Consenti le azioni di HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" In ESP Screens lo schermo compare nell'elenco a sinistra entro una trentina di secondi; fino ad allora è indicato lì come «non ancora in Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Scegli i tuoi riquadri."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Riprova"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installa un altro schermo"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Ricomincia"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi · guida rapida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notifica a schermo intero, da un'automazione."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha l'azione "},{t:4,k:"action"},{t:3,v:". Mette una scheda sopra tutto, riattiva lo schermo e mantiene la retroilluminazione a luminosità normale finché qualcuno non tocca il pulsante o non scade il timeout. Home Assistant da solo non mostra spiegazioni né menu a tendina per le azioni ESPHome; qui trovi tutto quello che puoi compilare."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guida rapida si sta ancora caricando; un attimo."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"C'è qualcuno alla porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, retro"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Arrivo"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sezioni"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Prova"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"I tuoi schermi"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In un'automazione"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"I campi"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icone"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colori"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventi"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Invia subito un avviso, con gli stessi campi che invia un'automazione. Lo schermo mostra la scheda e, con il lampeggio attivo, fa lampeggiare la retroilluminazione."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi (pronti: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titolo"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sottotitolo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Colore"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Testo del pulsante"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (secondi, 0 aspetta il pulsante)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fai lampeggiare la retroilluminazione"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quattro volte all'arrivo dell'avviso."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Invio…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Invia avviso"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Inviato allo schermo."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 schermo saltato (offline o firmware troppo vecchio)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi saltati (offline o firmware troppo vecchio)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Campi lasciati vuoti: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo ha potuto mostrarlo: verifica che uno schermo sia online con il firmware "},{t:4,k:"version"},{t:3,v:" o più recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Bianco (predefinito)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha la sua azione, con il nome del dispositivo. A partire dal firmware "},{t:4,k:"version"},{t:3,v:"; aggiorna uno schermo più vecchio con il suo pulsante Aggiorna in Schermi."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuno schermo associato finora. Installane uno da Nuovo schermo; l'azione compare appena Home Assistant vede lo schermo."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento necessario · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo sconosciuto · aggiorna lo schermo"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostra avviso"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi avviso"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" e cerca "},{t:4,k:"esphome"},{t:3,v:". Scegli l'azione del tuo schermo: Home Assistant la chiama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi azione"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant li chiede tutti e sette; lascia vuoto ciò che non usi ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", disattivo)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Compila i campi."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Preferisci lo YAML? Scegli "},{t:4,k:"edit"},{t:3,v:" sull'azione e incolla l'esempio qui sotto."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Esempio per"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"uno schermo (non ancora associato)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifica in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copia YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi insieme"}},text:{t:0,b:{t:2,i:[{t:3,v:"Attiva l'evento "},{t:4,k:"show"},{t:3,v:" con gli stessi campi ed ESP Screens inoltra l'avviso a ogni schermo online, compresi quelli che aggiungerai in seguito. "},{t:4,k:"dismiss"},{t:3,v:" lo rimuove ovunque. In un'automazione, aggiungi l'azione "},{t:4,k:"event"},{t:3,v:" o incolla l'esempio in "},{t:4,k:"edit"},{t:3,v:". Tralascia i campi che non usi. Perché funzioni, ESP Screens deve essere in esecuzione."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Attiva manualmente evento"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Il testo è libero; il limite è in byte e una lettera accentata conta per due. Ciò che non ci sta finisce con i puntini di sospensione (titolo) o viene tagliato (sottotitolo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Cosa fa"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Esempio"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"testo"}},int:{t:0,b:{t:2,i:[{t:3}],s:"numero"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"attivo / disattivo"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entità"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" byte"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"da 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:", per esempio "},{t:4,k:"example"},{t:3,v:". Funzionano anche "},{t:4,k:"mdi"},{t:3,v:" e il codice esadecimale ("},{t:4,k:"hex"},{t:3,v:"). Nel firmware ci sono solo queste icone; qualsiasi altro nome mostra il triangolo di avvertimento. Tocca un'icona per copiarne il nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Utili per le notifiche"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome o descrizione…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Disponibili anche: icone di controllo e meteo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copia "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nessuna icona per «"},{t:4,k:"query"},{t:3,v:"». I nomi sconosciuti mostrano il triangolo di avvertimento ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:". Sono le tonalità pastello dei riquadri, con testo scuro. Un nome vuoto o sconosciuto dà la scheda bianca. Tocca per copiare."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un avviso riattiva subito uno schermo attenuato o spento e compare sopra ogni pagina, ogni scheda luce aperta e il livello di standby."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Riattiva lo schermo."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Finché la scheda è visibile, la retroilluminazione resta a luminosità normale. Standby e ore notturne aspettano. Dopo il pulsante, riparte il normale tempo di standby."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acceso fino al pulsante."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" aspetta il pulsante, per tutto il tempo necessario. Con "},{t:4,k:"minute"},{t:3,v:" la scheda sparisce dopo un minuto, ma il pulsante la chiude prima."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fa lampeggiare la retroilluminazione quattro volte all'arrivo dell'avviso (circa un secondo) e poi lascia lo schermo acceso."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Lampeggio."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un nuovo avviso sostituisce quello attuale; gli avvisi non si accumulano. L'avviso sostituito si segnala come "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sostituzione."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" rimuove la scheda, per esempio se la porta è già aperta. Senza un avviso, quell'azione non fa nulla."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Chiusura a distanza."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" non fa nulla; solo il pulsante la chiude. Così un tocco per riattivare lo schermo non chiude mai l'avviso per sbaglio."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toccare accanto alla scheda"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni volta che un avviso termina, parte l'evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (il nome del dispositivo) e il "},{t:4,k:"device_id"},{t:3,v:" che aggiunge Home Assistant. Visibile in Impostazioni → Strumenti → Eventi."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Aspettare che qualcuno prema il pulsante"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": arancione per la porta, rosso per fumo o acqua, verde per «fatto». Il testo resta sempre scuro e leggibile."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"colore per ogni tipo di notifica"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tieni il titolo "},{t:4,k:"bold"},{t:3,v:": uno schermo mostra circa venti caratteri su una riga e chiude un titolo più lungo con i puntini di sospensione. Metti i dettagli nel sottotitolo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"breve"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" trasforma la notifica in una domanda: «Arrivo», «Visto», «Spegni». L'evento poi ti dice chi ha risposto."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"testo del pulsante personalizzato"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Per un avviso che si risolve da solo (la porta si apre, il bucato viene ritirato), chiudilo nella stessa automazione con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi? Attiva "},{t:4,k:"event"},{t:3,v:" una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Preferisci "},{t:4,k:"bold"},{t:3,v:" l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"chiedere a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Qualcuno sta arrivando alla porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzate · personalizzazione locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizzato · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Questo piccolo file è tuo. Viene caricato dopo il pacchetto condiviso degli schermi e resta al suo posto quando ESP Screens si aggiorna. Cambia qui i dettagli specifici dell'hardware, come il modello del display."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Cosa si può cambiare senza rischi?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pin e altri dettagli del dispositivo. Nome, Wi-Fi, API, OTA e collegamenti ai package restano gestiti automaticamente."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da collegare"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato locale"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usa l'esempio"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancella"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carattere"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caratteri"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 riga"},{t:2,i:[{t:4,k:"n"},{t:3,v:" righe"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Salva e verifica"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Salva YAML personalizzato"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Non è stato trovato nessun profilo ESPHome per questo schermo."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche fatte qui valgono dalla prossima compilazione."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Salva una volta per collegare questo file al profilo."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Verifica e salvataggio…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo YAML personalizzato viene mantenuto negli aggiornamenti del firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato salvato."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. ESPHome sta verificando il profilo completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sta verificando il profilo…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sta verificando il profilo… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo completo è valido. Puoi compilare e installare senza rischi."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rifiutato il profilo completo. Vedi Firmware e USB per il registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire il testo attuale con l'esempio?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Esempio caricato. Salvalo quando vuoi."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancellare lo YAML personalizzato locale?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML personalizzato sarà vuoto dopo il salvataggio."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Sconosciuto"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Medio/a"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Alto/a"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Mezzo"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Focalizzato"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Diffuso"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Superiore"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Entrambi"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Verticale"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Orizzontale"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"lu"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"me"}},{t:0,b:{t:2,i:[{t:3}],s:"gi"}},{t:0,b:{t:2,i:[{t:3}],s:"ve"}},{t:0,b:{t:2,i:[{t:3}],s:"sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/nl-CYBsud_S.js b/screen_manager/app/static/assets/nl-CYBsud_S.js deleted file mode 100644 index 3031e4b..0000000 --- a/screen_manager/app/static/assets/nl-CYBsud_S.js +++ /dev/null @@ -1 +0,0 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Ongedaan maken"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"onbekend"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niet-opgeslagen wijzigingen"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annuleren"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apparaten & diensten openen"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & versturen"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens lezen"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 resultaat. Typ verder om te verfijnen."},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultaten. Typ verder om te verfijnen."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Verwijderen"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigen"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Laden…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Terug"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiëren"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet. Vernieuw de pagina en probeer het opnieuw."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Beheerpagina niet bereikbaar · opnieuw proberen…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant verbonden"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding met Home Assistant herstellen…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoeken"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Vernieuwen"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Bijwerken"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In de wachtrij voor de update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel met deze apparaatnaam gevonden."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Wat is er nieuw"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Volledig log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Eenmalig het IP-adres; nieuwe firmware meldt het zelf."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres, bijv. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Starten"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd, maar nog niet in Home Assistant. Voeg het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en zet bij Configureren “Allow the device to perform Home Assistant actions” aan."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware gedownload, nog niet in Home Assistant. Zet die met ESPHome Web op het scherm, voeg daarna het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en sta bij Configureren de Home Assistant-acties toe."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Nog niet in Home Assistant. Al geflasht? Voeg het ESPHome-apparaat toe onder Instellingen → Apparaten & diensten en sta daarna bij Configureren de Home Assistant-acties toe. Nog niet geflasht? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel kopiëren"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan dit scherm"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet en een testalert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niets om op te slaan"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm identificeren"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Laat de backlight knipperen en toont een kaart"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwere firmware nodig"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Als JSON downloaden en kopiëren"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Zoek schermen, entiteiten, acties…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Niets gevonden. Typ een deel van een scherm, entiteit of actie."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kies een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Kies links een van je schermen om de tegels, de bovenbalk en de instellingen aan te passen."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Begin met een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Sluit een CYD of Guition via USB aan op je Home Assistant-machine. Profiel, firmware en de eerste flash gebeuren in één keer."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm installeren"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt niet-opgeslagen wijzigingen. Toch een ander scherm openen?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door een kopie van die van het andere scherm?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door de geïmporteerde?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je scherm wordt bijgewerkt."}},other:{t:0,b:{t:2,i:[{t:3,v:"Opgeslagen. "},{t:4,k:"name"},{t:3,v:" wordt bijgewerkt."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Het scherm wordt bijgewerkt."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je laatste wijziging is nog niet verstuurd: druk nog eens op Opslaan & versturen."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" knippert en toont een paar seconden een kaart."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · wijzigingen worden bewaard"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Indeling"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Scherminstellingen"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen · naar scherm verstuurd"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Alles opgeslagen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificeren"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"scherm laten knipperen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Firmware 0.2.31 of nieuwer nodig"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"uit Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Indeling kopiëren van…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" scherm"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermen"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"geen ander scherm"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tegel"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tegels"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Indeling importeren…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"geavanceerd"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel gevonden voor dit scherm"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bijwerken"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderd"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Er is geen plek voor deze tegel op pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen lege pagina voor een paginavullende tegel. Maak eerst een pagina vrij."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft al een tegel die naar pagina "},{t:4,k:"page"},{t:3,v:" gaat."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd. Druk op Opslaan & versturen als alles klopt."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Indeling geïmporteerd. Druk op Opslaan & versturen als alles klopt."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling geïmporteerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Dat is geen JSON. Exporteer eerst een indeling, of plak er een uit een andere ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Dit bestand heeft geen tegels. Gebruik een indeling die uit ESP Screens is geëxporteerd."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina's · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Voeg je eerste lamp, scène of apparaat toe uit de bibliotheek."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tik op de bovenbalk of een tegel om die aan te passen. Sleep om te verplaatsen, of naar de volgende pagina voor een nieuwe pagina."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Lege plekken en vaste posities werken vanaf firmware 0.2.26. Tot die update schuift dit scherm (firmware "},{t:4,k:"firmware"},{t:3,v:") de tegels op naar de eerste vrije plek."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Schermindeling"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Pagina toevoegen"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 pagina"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" pagina's"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Pagina weghalen"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"De pagina's erna schuiven een plek op"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk aanpassen"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lege plek. Klik om hier een tegel toe te voegen, of sleep er een naartoe."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Lege plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:": hier de volgende tegel toevoegen"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Volgende tegel komt hier"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Leeg"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bibliotheek"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteiten"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, apparaat of ruimte…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een entiteit toe"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Alles"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lampen"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaars"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatoren"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scènes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuigers"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensoren"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarden"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijsten"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personen"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Ruimte"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Alle ruimtes"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Geplaatste verbergen"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Verberg wat al op dit scherm staat"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Alles hier staat al op dit scherm."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden. Probeer een andere naam, ruimte of filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel; werk de firmware bij voor 48."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels; werk de firmware bij voor 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Sleep naar een pagina, of tik op + voor de eerste vrije plek. ⌘K doorzoekt alles."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Licht"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuiger"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scène"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Zon"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persoon"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Afbeelding"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entiteit"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standaard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafiek"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analoge klok"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"zonnebaan"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"dubbel"}},full:{t:0,b:{t:2,i:[{t:3}],s:"hele pagina"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Naam op het scherm"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (uit Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (standaard)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont een gekozen icoon vanaf firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Gaat naar pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (leeg)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigatietegels hebben firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft geen pagina "},{t:4,k:"page"},{t:3,v:", dus een tik opent de laatste pagina. Kies een andere pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Een tik op de tegel opent die pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Weergave"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analoge klok"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Naam en status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafiek"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Zonnebaan"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft geen getallen voor deze entiteit, dus de grafiek blijft leeg. Kies een andere weergave."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Deze weerdienst heeft geen dagverwachting in Home Assistant. Kies een andere weergave."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Grootte"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Dubbelbreed"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina: één grote knop die oplicht zolang hij aan is; onderaan staat een slider, bediening of grafiek."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Een paginavullende tegel heeft firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwe pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Directe bediening op de tegel"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze bediening niet voor deze entiteit, dus die blijft leeg op het scherm. Kies een andere."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Onderaan de paginavullende tegel; een tik ergens anders werkt zoals hieronder ingesteld."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Rechts op de dubbelbrede tegel, zoals de rijen in Home Assistant. Tikken op de naam werkt zoals hieronder ingesteld."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont directe bediening vanaf firmware 0.2.19; tot die tijd blijft de tegel zoals hij was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bij aantikken"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Bediening openen"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bekijken"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Aan / uit"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Actie uitvoeren"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant kan dit niet aan- en uitzetten, dus een tik doet niets. Kies een andere optie."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm schakelt dit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan opent een tik de kaart."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Houd de tegel vast om de kaart te openen."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Kleine slider op de tegel"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nee"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Ja, direct bedienen"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft niets wat een slider bij deze entiteit kan aanpassen. Kies Nee."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Geschiedenis"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelachtergrond"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Achtergrond: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:". Enter: instellen, pijltjestoetsen: verplaatsen"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Tegel verwijderen"}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderen"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant vragen welke acties deze entiteit heeft…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant reageert nu niet. Probeer het zo nog eens."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies een actie"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld schakelen, positie of afspelen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een actie"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen actie gevonden."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze actie niet meer voor deze entiteit, dus een tik doet niets. Kies een andere."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optioneel)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Niet ingesteld"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant heeft "},{t:4,k:"fields"},{t:3,v:" nodig."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm voert een actie uit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan werkt een tik als Automatisch."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld lamp, muziek of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon, alleen tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icoon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon gevonden."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding, status en ondersteunde eigenschappen"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lezen…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Actuele HA-status ophalen…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Kleine slider: "},{t:4,k:"slider"},{t:3,v:" · Weergave: "},{t:4,k:"display"},{t:3,v:" · Grootte: "},{t:4,k:"size"},{t:3,v:" · Bediening: "},{t:4,k:"control"},{t:3,v:" · Achtergrond: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"ja"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nee"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"geen"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Standaard"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw lezen"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk gehaald"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"De bovenbalk heeft plaats voor 1 onderdeel."},{t:2,i:[{t:3,v:"De bovenbalk heeft plaats voor "},{t:4,k:"n"},{t:3,v:" onderdelen."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Dit staat al in de bovenbalk."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Bovenbalk: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf, werkt ook zonder Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdeel"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Links: naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Bijvoorbeeld: Woonkamer"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Rechts: tijd, sensoren of een klok"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:". Enter: instellen, pijltjes: verplaatsen"}]}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk halen"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 onderdeel"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Tijd, datum, analoge klok of een entiteit toevoegen"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Tijd, datum of entiteit toevoegen"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Niet alles past naast de naam: het scherm laat de gestreepte onderdelen weg. Haal er een weg of kies een kortere naam."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Sleep om de volgorde te wijzigen; tik op een onderdeel om het in te stellen."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensoren, de datum en de analoge klok verschijnen vanaf firmware "},{t:4,k:"version"},{t:3,v:"; tot die update toont dit scherm de naam en, als de tijd in de balk staat, de klok."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Verborgen: nu niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past niet naast de naam"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Wijzerplaat"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nu verborgen: niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past nu niet naast de naam"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Zo staat het op het scherm"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Kleine wijzerplaat met de tijd"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Wat laten zien"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Laatst gewijzigd” telt op het scherm zelf door: “Zojuist”, “5 min geleden”, “Gisteren”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (zoals Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tonen"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Alleen als actief” verbergt het onderdeel zolang het uit, dicht, afwezig of 0 is. Handig voor een open deur, een draaiende wasmachine of wie er thuis is."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen → Taal & regio"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Vandaag is het "},{t:4,k:"date"},{t:3,v:". De datum volgt de eigen klok van het scherm."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Omhoog"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Omlaag"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan de bovenbalk"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plek gebruikt"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plekken gebruikt"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Staat er al in"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggesties uit Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Een entiteit"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, ruimte of entiteit, bijv. temperatuur of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een entiteit voor de bovenbalk"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Nacht"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Donkere modus"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch stand-by"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by na"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid stand-by"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Nachtmodus"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Begint"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Eindigt"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid nacht"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Terug naar pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Na"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Ook bij stand-by"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Vegen tussen pagina's"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotatie"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" u"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" u "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" a.m."}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" p.m."}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"De instellingen van het andere scherm worden nog opgeslagen. Probeer het zo nog eens."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen en vegen staan uit, dus alleen “Ga naar pagina”-tegels wisselen van pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagina's "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt geen “Ga naar pagina”-tegels."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"De tegels naar "},{t:4,k:"pages"},{t:3,v:" staan alleen op pagina's die je niet kunt bereiken."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Vanaf "},{t:4,k:"pages"},{t:3,v:" leidt geen tegel terug naar pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm is offline. Je kunt de instellingen wijzigen zodra het terug is."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen op het scherm en verschijnen hier als ze daar veranderen."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen. Met firmware 0.2.49 bewaart het scherm ze zelf."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Deze entiteit is uitgeschakeld in Home Assistant, of het scherm herstart."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verlagen"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verhogen"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Update starten…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Firmware via Wi-Fi schrijven…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot het scherm terug is…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Controleren of het stabiel blijft…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nieuwe taal: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Schermen worden voortaan 's nachts automatisch bijgewerkt."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch bijwerken staat uit."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware-updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Bezig met bijwerken naar firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nog geen scherm gekoppeld. Nieuwe schermen krijgen firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen hebben firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 scherm bijwerken"},{t:2,i:[{t:3,v:"Alle "},{t:4,k:"n"},{t:3,v:" schermen bijwerken"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Nieuw in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Elke nacht automatisch bijwerken"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tussen 03:00 en 06:00, één scherm tegelijk. Stopt bij een fout en meldt die in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Claude Code vindt hem meteen."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Start Claude Code één keer opnieuw, zodat het de nieuwe skills-map vindt."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Leer Claude ESP Screens kennen en vraag dan: “Laat een melding zien op al mijn schermen als de brievenbus vol is.” Claude kent de gebeurtenissen van alerts en elk veld, elke kleur en elk icoon."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren voor Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw installeren"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Skill bijwerken"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Niet geïnstalleerd"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Geïnstalleerd"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd · er is een nieuwere versie"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Voor Claude Code in Home Assistant. Schrijft één bestand naar "},{t:4,k:"path"},{t:3,v:"; opnieuw installeren vervangt het."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden voor claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload de zip in Claude onder Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Alles rond je schermen."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Mijn schermen"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een scherm toe, of bouw en installeer de firmware van een bestaand scherm opnieuw."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren via USB of Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Taal & regio"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Taal van de schermen"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Taal van Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Taal van Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"De schermen gebruiken Engels tot de taal van Home Assistant beschikbaar is."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · nog niet nagekeken, hulp welkom"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is nog niet nagekeken, hulp welkom: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"zo vertaal je mee"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na een wijziging heeft elk scherm een firmware-update nodig, één build per scherm: met de knop Bijwerken, of via de nachtelijke updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Tijdnotatie"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 uur"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 uur"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Getalnotatie"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Je Home Assistant-profiel: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Deze gebruiken"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"De editor zelf volgt de taal van je Home Assistant-profiel."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Elk scherm krijgt de nieuwe taal bij zijn volgende update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Een kaart over het hele scherm vanuit een automatisering, op één scherm of op allemaal. De cheatsheet heeft de actienamen, velden, iconen en kleuren, en een formulier om er een te proberen."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Meldingen over het hele scherm, vanuit een automatisering"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermfirmware bouwen en installeren"}},intro:{t:0,b:{t:2,i:[{t:3,v:"De ingebouwde ESPHome CLI gebruikt je eigen profiel (YAML met sleutels) en secrets. Kies het profiel van het scherm, dan een USB-poort (scherm aan de Home Assistant-machine), "},{t:4,k:"ota"},{t:3,v:" met de hostnaam, of "},{t:4,k:"download"},{t:3,v:" om de firmware vanaf je eigen computer op het scherm te zetten. "},{t:4,k:"check"},{t:3,v:" valideert alleen, "},{t:4,k:"build"},{t:3,v:" compileert, "},{t:4,k:"install"},{t:3,v:" zet de firmware op het scherm. Je tegels blijven zoals ze in ESP Screens staan. De eerste build duurt enkele minuten."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Controleren"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bouwen"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & installeren"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & downloaden"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt. Werk de app bij naar 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies het bedoelde profiel, dan een USB-poort, een IP-adres of Downloaden."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome-profiel"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installeren naar"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nog geen bord gevonden op de Home Assistant-machine"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden · flashen vanaf je eigen computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres of hostnaam"}},download_file:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" downloaden"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Zet het met "},{t:4,k:"esphome_web"},{t:3,v:" op het scherm, in Chrome of Edge: klik op Connect, kies de USB-poort van het scherm, klik op Install en selecteer dit bestand. Het bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaard."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Even geduld…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te downloaden."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens maakt een eigen profiel voor het scherm, met unieke sleutels, en bouwt de firmware. Sluit het scherm met een USB-datakabel aan op de machine waarop Home Assistant draait, of download de firmware en zet die vanaf je eigen computer op het scherm."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Welk scherm heb je?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Scherm woonkamer"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"aanpassen"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Elk scherm krijgt een eigen profiel met eigen sleutels. Vier schermen? Doorloop dit vier keer met een andere naam."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Kleine letters, cijfers en streepjes. Elk scherm een andere naam."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-naam (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-wachtwoord"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer invullen: ESP Screens bewaart dit in ESPHome secrets.yaml, volgende schermen gebruiken het automatisch."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Je ESPHome secrets.yaml mist nog Wi-Fi-gegevens. ESP Screens vult alleen de ontbrekende regels aan."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi komt uit je ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in de ESPHome-map is geen geldige YAML. Herstel het bestand eerst; het wordt niet overschreven."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installeren via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · alleen het profiel bewaren"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm met een USB-datakabel aan op de Home Assistant-machine; de lijst ververst vanzelf. Of kies Downloaden om je eigen computer te gebruiken."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download de firmware en zet die vanaf je eigen computer op het scherm, in Chrome of Edge. Daarna gaan updates via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Het profiel komt in de ESPHome-map. Installeren kan later via Firmware & USB, of vanuit ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Meer dan één bord aangesloten: kies de poort van dit scherm."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer via USB; daarna gaat alles draadloos."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaren"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Er loopt al een build of installatie ("},{t:4,k:"file"},{t:3,v:"). Wacht tot die klaar is."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt in deze installatie; alleen het profiel bewaren kan."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" staat in de ESPHome-map"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Firmware naar "},{t:4,k:"name"},{t:3,v:" schrijven…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware voor "},{t:4,k:"name"},{t:3,v:" is klaar"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware staat op "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen mislukt"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installeren mislukt"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installeren kan later via Firmware & USB: kies dit profiel, dan de USB-poort van de Home Assistant-machine, of Downloaden om de firmware vanaf je eigen computer op het scherm te zetten. Bewaar de API-sleutel voor de koppeling:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Haal de USB-kabel nog niet los."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de installatie loopt door en je vindt hem terug onder Nieuw scherm."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de build loopt door en je vindt hem terug onder Nieuw scherm."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Zet de firmware vanaf je eigen computer op het scherm en koppel het scherm daarna aan Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. Koppel het nu aan Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes. Koppel het nu aan Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Bekijk het log hieronder."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" met een USB-datakabel."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm aan op je computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome of Edge, klik op Connect en kies de USB-poort van het scherm."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Klik op Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Het bestand bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dit gebeurt buiten ESP Screens. Home Assistant ontdekt "},{t:4,k:"name"},{t:3,v:" als ESPHome-apparaat; klik op Toevoegen. Niet ontdekt? Voeg ESPHome handmatig toe met het IP-adres van het scherm."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ga naar Home Assistant → Instellingen → Apparaten & diensten."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" van hierboven zodra Home Assistant om een encryptiesleutel vraagt."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plak de API-sleutel"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome-integratie → Configureren → “Allow the device to perform Home Assistant actions”. Zonder dit ziet het scherm alles, maar bedient het niets."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sta HA-acties toe:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Terug in ESP Screens verschijnt het scherm binnen een halve minuut in de lijst links; tot die tijd staat het daar als “nog niet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kies je tegels."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log van ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw proberen"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Nog een scherm installeren"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw beginnen"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Een melding over het hele scherm, vanuit een automatisering."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft de actie "},{t:4,k:"action"},{t:3,v:". Die legt een kaart over alles heen, wekt het scherm en houdt de backlight op de normale helderheid tot iemand op de knop tikt of de timeout verstrijkt. Home Assistant toont bij ESPHome-acties zelf geen uitleg of keuzelijsten; alles wat je kunt invullen staat hier."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"De cheatsheet laadt nog; even geduld."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Iemand belt aan"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Deur 3, achterkant"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ik kom"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Onderdelen"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Uitproberen"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Jouw schermen"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In een automatisering"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"De velden"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Iconen"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kleuren"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Gedrag"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Gebeurtenissen"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Stuur nu één alert, met dezelfde velden die een automatisering stuurt. Het scherm toont de kaart en laat, met knipperen aan, de backlight knipperen."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},all:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen ("},{t:4,k:"ready"},{t:3,v:" klaar)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niet klaar"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titel"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ondertitel"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kleur"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Knoptekst"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconden, 0 wacht op de knop)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Backlight laten knipperen"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Vier keer als de alert binnenkomt."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Versturen…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Alert versturen"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Verstuurd naar het scherm."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 overgeslagen (offline of oude firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" overgeslagen (offline of oude firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Leeg gelaten: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Geen enkel scherm kon hem tonen: controleer of er een scherm online is met firmware "},{t:4,k:"version"},{t:3,v:" of nieuwer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Wit (standaard)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft zijn eigen actie, met de apparaatnaam erin. Vanaf firmware "},{t:4,k:"version"},{t:3,v:"; een ouder scherm werk je bij met de knop Bijwerken onder Schermen."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nog geen scherm gekoppeld. Installeer er een via Nieuw scherm; de actie verschijnt zodra Home Assistant het scherm ziet."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update nodig · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam onbekend · werk het scherm bij"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Alert tonen"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Alert sluiten"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Klik op "},{t:4,k:"add"},{t:3,v:" en zoek op "},{t:4,k:"esphome"},{t:3,v:". Kies de actie van je scherm: Home Assistant noemt die “Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Actie toevoegen"}},device:{t:0,b:{t:2,i:[{t:3}],s:"apparaatnaam"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant vraagt om alle zeven; laat wat je niet gebruikt leeg ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", uit)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vul de velden in."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Liever YAML? Kies "},{t:4,k:"edit"},{t:3,v:" bij de actie en plak het voorbeeld hieronder."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld voor"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"een scherm (nog niet gekoppeld)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Bewerken in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"YAML kopiëren"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen tegelijk"}},text:{t:0,b:{t:2,i:[{t:3,v:"Vuur de gebeurtenis "},{t:4,k:"show"},{t:3,v:" af met dezelfde velden, en ESP Screens geeft de alert door aan elk scherm dat online is, ook aan schermen die je later toevoegt. "},{t:4,k:"dismiss"},{t:3,v:" haalt hem overal weg. Voeg in een automatisering de actie "},{t:4,k:"event"},{t:3,v:" toe, of plak het voorbeeld onder "},{t:4,k:"edit"},{t:3,v:". Laat de velden die je niet gebruikt weg. ESP Screens moet hiervoor draaien."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Handmatige gebeurtenis activeren"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst is vrij in te vullen; de limiet is in bytes en een letter met accent telt voor twee. Wat niet past krijgt puntjes (titel) of valt weg (ondertitel)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Veld"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Wat het doet"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limiet"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"getal"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"aan / uit"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entiteit"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 tot 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:", bijvoorbeeld "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" en de hex-codepoint ("},{t:4,k:"hex"},{t:3,v:") werken ook. Alleen deze iconen zitten in de firmware; elke andere naam toont de waarschuwingsdriehoek. Tik op een icoon om de naam te kopiëren."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handig voor meldingen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam of omschrijving…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Ook beschikbaar: bedienings- en weericonen"}},copy:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" kopiëren"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Geen icoon voor “"},{t:4,k:"query"},{t:3,v:"”. Onbekende namen tonen de waarschuwingsdriehoek ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:". Dit zijn de pasteltinten van de tegels, met donkere tekst. Leeg of onbekend geeft de witte kaart. Tik om te kopiëren."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een alert maakt een gedimd of donker scherm meteen wakker en verschijnt boven elke pagina, elke open lichtkaart en de stand-bylaag."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wekt het scherm."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Zolang de kaart in beeld is, blijft de backlight op de normale helderheid. Stand-by en de nachturen wachten. Na de knop begint de gewone stand-bytijd opnieuw."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aan tot de knop."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" wacht op de knop, hoe lang dat ook duurt. Met "},{t:4,k:"minute"},{t:3,v:" verdwijnt de kaart na een minuut, maar de knop sluit hem eerder."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" laat de backlight vier keer knipperen als de alert binnenkomt (ongeveer een seconde) en laat het scherm daarna aan."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Knipperen."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een nieuwe alert vervangt de huidige; er is geen stapel. De vervangen alert meldt zich als "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vervangen."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" haalt de kaart weg, bijvoorbeeld als de deur al open is. Zonder alert doet die actie niets."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Op afstand sluiten."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" doet niets; alleen de knop sluit hem. Zo drukt een tik om het scherm te wekken de alert nooit per ongeluk weg."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tikken naast de kaart"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk einde vuurt de gebeurtenis "},{t:4,k:"event"},{t:3,v:" af, met "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (de apparaatnaam) en het "},{t:4,k:"device_id"},{t:3,v:" dat Home Assistant toevoegt. Te zien onder Instellingen → Hulpmiddelen → Gebeurtenissen."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Wanneer"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot iemand op de knop drukt"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Gebruik een "},{t:4,k:"bold"},{t:3,v:": oranje voor de deur, rood voor rook of water, groen voor “klaar”. De tekst blijft altijd donker en leesbaar."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"kleur per soort melding"}},short:{t:0,b:{t:2,i:[{t:3,v:"Houd de titel "},{t:4,k:"bold"},{t:3,v:"; een scherm toont zo'n twintig tekens op één regel en kort een langere titel af met puntjes. Zet details in de ondertitel."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"kort"}},button:{t:0,b:{t:2,i:[{t:3,v:"Een "},{t:4,k:"bold"},{t:3,v:" maakt van de melding een vraag: “Ik kom”, “Gezien”, “Uitzetten”. De gebeurtenis vertelt je dan wie reageerde."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"eigen knoptekst"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Een alert die zichzelf oplost (de deur gaat open, de was is eruit gehaald) sluit je in dezelfde automatisering met "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen? Vuur "},{t:4,k:"event"},{t:3,v:" één keer af (zie Alle schermen tegelijk). De schermen werken nog steeds los van elkaar en melden zich elk met hun eigen "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Liever "},{t:4,k:"bold"},{t:3,v:" om de automatisering te schrijven? Installeer de ESP Screens-skill onder Instellingen → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"Claude vragen"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Deurbel: toon de alert en wacht tot iemand op de knop drukt."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Er komt iemand naar de deur."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Geavanceerd · lokale override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML-override · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Dit kleine bestand is van jou. Het wordt na het gedeelde schermpakket geladen en blijft staan als ESP Screens wordt bijgewerkt. Pas hier hardwaredetails aan, zoals een displaymodel."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Wat kun je veilig aanpassen?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pinnen en andere apparaatdetails. Naam, Wi-Fi, API, OTA en de koppelingen naar de packages beheert ESP Screens zelf."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te koppelen"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokale YAML-override"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld gebruiken"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wissen"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 teken"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tekens"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 regel"},{t:2,i:[{t:4,k:"n"},{t:3,v:" regels"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & controleren"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Override opslaan"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen ESPHome-profiel gevonden voor dit scherm."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen hier gelden bij de volgende build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Sla één keer op om dit bestand aan het profiel te koppelen."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Controleren en opslaan…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. De override blijft bewaard bij firmware-updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override opgeslagen."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. ESPHome controleert het complete profiel…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome controleert het profiel…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome controleert het profiel… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Het complete profiel is geldig. Je kunt veilig bouwen en installeren."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome heeft het complete profiel afgekeurd. Zie Firmware & USB voor het volledige log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"De huidige tekst vervangen door het voorbeeld?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld geladen. Sla het op zodra je klaar bent."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"De lokale override wissen?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Na opslaan is de override leeg."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Onbekend"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen/koelen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Alleen ventilator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drogen"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Voorverwarmen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Ontdooien"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Openen"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Speelt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Boven de horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Onder de horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Gedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Schoonmaken"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Terugkeren naar dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Zonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Helder, nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewolkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Half bewolkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regenachtig"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuwachtig"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuw-, regenachtig"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Mist"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem, regenachtig"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Winderig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Uitzonderlijk"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Opladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet aan het opladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Koud"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbonden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Verbroken"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heet"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht gedetecteerd"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Ontgrendeld"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Vergrendeld"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nat"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Beweging"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen beweging"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ingeplugd"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Losgekoppeld"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Probleem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet actief"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Onveilig"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Veilig"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Sabotage ontdekt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update beschikbaar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Niet beschikbaar"}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Inschakelen"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uitvoeren"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Klik"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Gemiddeld"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Hoog"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Midden"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Concentratie"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Diffuus"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Boven"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Beide"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Verticaal"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Horizontaal"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Zojuist"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min geleden"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 uur geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur geleden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gisteren"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dag geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dagen geleden"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weken geleden"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 maand geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" maanden geleden"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 jaar geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" jaar geleden"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 uur"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" uur"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 dag"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" dagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a.m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p.m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"zondag"}},{t:0,b:{t:2,i:[{t:3}],s:"maandag"}},{t:0,b:{t:2,i:[{t:3}],s:"dinsdag"}},{t:0,b:{t:2,i:[{t:3}],s:"woensdag"}},{t:0,b:{t:2,i:[{t:3}],s:"donderdag"}},{t:0,b:{t:2,i:[{t:3}],s:"vrijdag"}},{t:0,b:{t:2,i:[{t:3}],s:"zaterdag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"januari"}},{t:0,b:{t:2,i:[{t:3}],s:"februari"}},{t:0,b:{t:2,i:[{t:3}],s:"maart"}},{t:0,b:{t:2,i:[{t:3}],s:"april"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"juni"}},{t:0,b:{t:2,i:[{t:3}],s:"juli"}},{t:0,b:{t:2,i:[{t:3}],s:"augustus"}},{t:0,b:{t:2,i:[{t:3}],s:"september"}},{t:0,b:{t:2,i:[{t:3}],s:"oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"november"}},{t:0,b:{t:2,i:[{t:3}],s:"december"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mrt"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"aug"}},{t:0,b:{t:2,i:[{t:3}],s:"sep"}},{t:0,b:{t:2,i:[{t:3}],s:"okt"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/nl-JhS-GNwa.js b/screen_manager/app/static/assets/nl-JhS-GNwa.js new file mode 100644 index 0000000..619c889 --- /dev/null +++ b/screen_manager/app/static/assets/nl-JhS-GNwa.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Ongedaan maken"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"onbekend"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niet-opgeslagen wijzigingen"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annuleren"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apparaten & diensten openen"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & versturen"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens lezen"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 resultaat. Typ verder om te verfijnen."},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultaten. Typ verder om te verfijnen."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Verwijderen"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigen"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Laden…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Terug"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiëren"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet. Vernieuw de pagina en probeer het opnieuw."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Beheerpagina niet bereikbaar · opnieuw proberen…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant verbonden"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding met Home Assistant herstellen…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoeken"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Vernieuwen"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Bijwerken"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In de wachtrij voor de update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel met deze apparaatnaam gevonden."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Wat is er nieuw"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Volledig log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Eenmalig het IP-adres; nieuwe firmware meldt het zelf."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres, bijv. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Starten"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd, maar nog niet in Home Assistant. Voeg het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en zet bij Configureren “Allow the device to perform Home Assistant actions” aan."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware gedownload, nog niet in Home Assistant. Zet die met ESPHome Web op het scherm, voeg daarna het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en sta bij Configureren de Home Assistant-acties toe."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Nog niet in Home Assistant. Al geflasht? Voeg het ESPHome-apparaat toe onder Instellingen → Apparaten & diensten en sta daarna bij Configureren de Home Assistant-acties toe. Nog niet geflasht? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel kopiëren"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan dit scherm"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet en een testalert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niets om op te slaan"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm identificeren"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Laat de backlight knipperen en toont een kaart"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwere firmware nodig"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Als JSON downloaden en kopiëren"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Zoek schermen, entiteiten, acties…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Niets gevonden. Typ een deel van een scherm, entiteit of actie."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kies een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Kies links een van je schermen om de tegels, de bovenbalk en de instellingen aan te passen."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Begin met een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Sluit een CYD of Guition via USB aan op je Home Assistant-machine. Profiel, firmware en de eerste flash gebeuren in één keer."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm installeren"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt niet-opgeslagen wijzigingen. Toch een ander scherm openen?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door een kopie van die van het andere scherm?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door de geïmporteerde?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je scherm wordt bijgewerkt."}},other:{t:0,b:{t:2,i:[{t:3,v:"Opgeslagen. "},{t:4,k:"name"},{t:3,v:" wordt bijgewerkt."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Het scherm wordt bijgewerkt."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je laatste wijziging is nog niet verstuurd: druk nog eens op Opslaan & versturen."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" knippert en toont een paar seconden een kaart."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · wijzigingen worden bewaard"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Indeling"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Scherminstellingen"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen · naar scherm verstuurd"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Alles opgeslagen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificeren"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"scherm laten knipperen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Firmware 0.2.31 of nieuwer nodig"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"uit Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Indeling kopiëren van…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" scherm"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermen"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"geen ander scherm"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tegel"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tegels"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Indeling importeren…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"geavanceerd"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel gevonden voor dit scherm"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bijwerken"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderd"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Er is geen plek voor deze tegel op pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen lege pagina voor een paginavullende tegel. Maak eerst een pagina vrij."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft al een tegel die naar pagina "},{t:4,k:"page"},{t:3,v:" gaat."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd. Druk op Opslaan & versturen als alles klopt."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Indeling geïmporteerd. Druk op Opslaan & versturen als alles klopt."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling geïmporteerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Dat is geen JSON. Exporteer eerst een indeling, of plak er een uit een andere ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Dit bestand heeft geen tegels. Gebruik een indeling die uit ESP Screens is geëxporteerd."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina's · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Voeg je eerste lamp, scène of apparaat toe uit de bibliotheek."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tik op de bovenbalk of een tegel om die aan te passen. Sleep om te verplaatsen, of naar de volgende pagina voor een nieuwe pagina."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Lege plekken en vaste posities werken vanaf firmware 0.2.26. Tot die update schuift dit scherm (firmware "},{t:4,k:"firmware"},{t:3,v:") de tegels op naar de eerste vrije plek."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Schermindeling"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Pagina toevoegen"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 pagina"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" pagina's"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Pagina weghalen"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"De pagina's erna schuiven een plek op"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk aanpassen"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lege plek. Klik om hier een tegel toe te voegen, of sleep er een naartoe."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Lege plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:": hier de volgende tegel toevoegen"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Volgende tegel komt hier"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Leeg"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bibliotheek"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteiten"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, apparaat of ruimte…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een entiteit toe"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Alles"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lampen"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaars"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatoren"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scènes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuigers"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensoren"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarden"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijsten"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personen"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Ruimte"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Alle ruimtes"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Geplaatste verbergen"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Verberg wat al op dit scherm staat"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Alles hier staat al op dit scherm."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden. Probeer een andere naam, ruimte of filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel; werk de firmware bij voor 48."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels; werk de firmware bij voor 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Sleep naar een pagina, of tik op + voor de eerste vrije plek. ⌘K doorzoekt alles."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Licht"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuiger"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scène"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Zon"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persoon"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Afbeelding"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entiteit"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standaard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafiek"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analoge klok"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"zonnebaan"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"dubbel"}},full:{t:0,b:{t:2,i:[{t:3}],s:"hele pagina"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Naam op het scherm"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (uit Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (standaard)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont een gekozen icoon vanaf firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Gaat naar pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (leeg)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigatietegels hebben firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft geen pagina "},{t:4,k:"page"},{t:3,v:", dus een tik opent de laatste pagina. Kies een andere pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Een tik op de tegel opent die pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Weergave"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analoge klok"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Naam en status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafiek"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Zonnebaan"}},live:{t:0,b:{t:2,i:[{t:3}],s:"Livebeeld"}},live_hint:{t:0,b:{t:2,i:[{t:3}],s:"Een klein beeld van de camera op de plek van het icoon, ververst in het tempo hieronder zolang de pagina in beeld is. Een tik opent hem nog steeds schermvullend."}},live_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Een livebeeld heeft firmware 0.2.77 of nieuwer nodig: druk na het opslaan op Bijwerken bij het scherm."}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft geen getallen voor deze entiteit, dus de grafiek blijft leeg. Kies een andere weergave."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Deze weerdienst heeft geen dagverwachting in Home Assistant. Kies een andere weergave."}}},refresh:{label:{t:0,b:{t:2,i:[{t:3}],s:"Verversen"}},seconds:{t:0,b:{t:2,i:[{t:3,v:"Elke "},{t:4,k:"n"},{t:3,v:" s"}]}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Grootte"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Dubbelbreed"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina: één grote knop in de eigen kleur van de tile; onderaan staat een slider, bediening of grafiek."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Een paginavullende tegel heeft firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwe pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Directe bediening op de tegel"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze bediening niet voor deze entiteit, dus die blijft leeg op het scherm. Kies een andere."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Onderaan de paginavullende tegel; een tik ergens anders werkt zoals hieronder ingesteld."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Rechts op de dubbelbrede tegel, zoals de rijen in Home Assistant. Tikken op de naam werkt zoals hieronder ingesteld."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont directe bediening vanaf firmware 0.2.19; tot die tijd blijft de tegel zoals hij was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bij aantikken"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Bediening openen"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bekijken"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Aan / uit"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Actie uitvoeren"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant kan dit niet aan- en uitzetten, dus een tik doet niets. Kies een andere optie."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm schakelt dit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan opent een tik de kaart."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Houd de tegel vast om de kaart te openen."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Kleine slider op de tegel"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nee"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Ja, direct bedienen"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft niets wat een slider bij deze entiteit kan aanpassen. Kies Nee."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Geschiedenis"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelachtergrond"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Achtergrond: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:". Enter: instellen, pijltjestoetsen: verplaatsen"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Tegel verwijderen"}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderen"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant vragen welke acties deze entiteit heeft…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant reageert nu niet. Probeer het zo nog eens."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies een actie"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld schakelen, positie of afspelen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een actie"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen actie gevonden."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze actie niet meer voor deze entiteit, dus een tik doet niets. Kies een andere."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optioneel)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Niet ingesteld"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant heeft "},{t:4,k:"fields"},{t:3,v:" nodig."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm voert een actie uit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan werkt een tik als Automatisch."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld lamp, muziek of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon, alleen tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icoon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon gevonden."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding, status en ondersteunde eigenschappen"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lezen…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Actuele HA-status ophalen…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Kleine slider: "},{t:4,k:"slider"},{t:3,v:" · Weergave: "},{t:4,k:"display"},{t:3,v:" · Grootte: "},{t:4,k:"size"},{t:3,v:" · Bediening: "},{t:4,k:"control"},{t:3,v:" · Achtergrond: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"ja"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nee"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"geen"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Standaard"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw lezen"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk gehaald"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"De bovenbalk heeft plaats voor 1 onderdeel."},{t:2,i:[{t:3,v:"De bovenbalk heeft plaats voor "},{t:4,k:"n"},{t:3,v:" onderdelen."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Dit staat al in de bovenbalk."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Bovenbalk: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf, werkt ook zonder Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdeel"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Links: naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Bijvoorbeeld: Woonkamer"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Rechts: tijd, sensoren of een klok"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:". Enter: instellen, pijltjes: verplaatsen"}]}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk halen"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 onderdeel"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Tijd, datum, analoge klok of een entiteit toevoegen"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Tijd, datum of entiteit toevoegen"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Niet alles past naast de naam: het scherm laat de gestreepte onderdelen weg. Haal er een weg of kies een kortere naam."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Sleep om de volgorde te wijzigen; tik op een onderdeel om het in te stellen."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensoren, de datum en de analoge klok verschijnen vanaf firmware "},{t:4,k:"version"},{t:3,v:"; tot die update toont dit scherm de naam en, als de tijd in de balk staat, de klok."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Verborgen: nu niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past niet naast de naam"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Wijzerplaat"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nu verborgen: niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past nu niet naast de naam"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Zo staat het op het scherm"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Kleine wijzerplaat met de tijd"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Wat laten zien"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Laatst gewijzigd” telt op het scherm zelf door: “Zojuist”, “5 min geleden”, “Gisteren”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (zoals Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tonen"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Alleen als actief” verbergt het onderdeel zolang het uit, dicht, afwezig of 0 is. Handig voor een open deur, een draaiende wasmachine of wie er thuis is."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen → Taal & regio"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Vandaag is het "},{t:4,k:"date"},{t:3,v:". De datum volgt de eigen klok van het scherm."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Omhoog"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Omlaag"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan de bovenbalk"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plek gebruikt"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plekken gebruikt"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Staat er al in"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggesties uit Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Een entiteit"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, ruimte of entiteit, bijv. temperatuur of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een entiteit voor de bovenbalk"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Nacht"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Donkere modus"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch stand-by"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by na"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid stand-by"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Nachtmodus"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Begint"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Eindigt"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid nacht"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Terug naar pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Na"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Ook bij stand-by"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Vegen tussen pagina's"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotatie"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" u"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" u "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" a.m."}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" p.m."}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"De instellingen van het andere scherm worden nog opgeslagen. Probeer het zo nog eens."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen en vegen staan uit, dus alleen “Ga naar pagina”-tegels wisselen van pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagina's "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt geen “Ga naar pagina”-tegels."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"De tegels naar "},{t:4,k:"pages"},{t:3,v:" staan alleen op pagina's die je niet kunt bereiken."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Vanaf "},{t:4,k:"pages"},{t:3,v:" leidt geen tegel terug naar pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm is offline. Je kunt de instellingen wijzigen zodra het terug is."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen op het scherm en verschijnen hier als ze daar veranderen."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen. Met firmware 0.2.49 bewaart het scherm ze zelf."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Deze entiteit is uitgeschakeld in Home Assistant, of het scherm herstart."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verlagen"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verhogen"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Update starten…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Firmware via Wi-Fi schrijven…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot het scherm terug is…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Controleren of het stabiel blijft…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nieuwe taal: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Schermen worden voortaan 's nachts automatisch bijgewerkt."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch bijwerken staat uit."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware-updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Bezig met bijwerken naar firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nog geen scherm gekoppeld. Nieuwe schermen krijgen firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen hebben firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 scherm bijwerken"},{t:2,i:[{t:3,v:"Alle "},{t:4,k:"n"},{t:3,v:" schermen bijwerken"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Nieuw in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Elke nacht automatisch bijwerken"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tussen 03:00 en 06:00, één scherm tegelijk. Stopt bij een fout en meldt die in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Claude Code vindt hem meteen."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Start Claude Code één keer opnieuw, zodat het de nieuwe skills-map vindt."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Leer Claude ESP Screens kennen en vraag dan: “Laat een melding zien op al mijn schermen als de brievenbus vol is.” Claude kent de gebeurtenissen van alerts en elk veld, elke kleur en elk icoon."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren voor Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw installeren"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Skill bijwerken"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Niet geïnstalleerd"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Geïnstalleerd"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd · er is een nieuwere versie"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Voor Claude Code in Home Assistant. Schrijft één bestand naar "},{t:4,k:"path"},{t:3,v:"; opnieuw installeren vervangt het."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden voor claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload de zip in Claude onder Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Alles rond je schermen."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Mijn schermen"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een scherm toe, of bouw en installeer de firmware van een bestaand scherm opnieuw."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren via USB of Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Taal & regio"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Taal van de schermen"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Taal van Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Taal van Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"De schermen gebruiken Engels tot de taal van Home Assistant beschikbaar is."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · nog niet nagekeken, hulp welkom"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is nog niet nagekeken, hulp welkom: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"zo vertaal je mee"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na een wijziging heeft elk scherm een firmware-update nodig, één build per scherm: met de knop Bijwerken, of via de nachtelijke updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Tijdnotatie"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 uur"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 uur"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Getalnotatie"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Je Home Assistant-profiel: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Deze gebruiken"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"De editor zelf volgt de taal van je Home Assistant-profiel."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Elk scherm krijgt de nieuwe taal bij zijn volgende update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Een kaart over het hele scherm vanuit een automatisering, op één scherm of op allemaal. De cheatsheet heeft de actienamen, velden, iconen en kleuren, en een formulier om er een te proberen."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Meldingen over het hele scherm, vanuit een automatisering"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermfirmware bouwen en installeren"}},intro:{t:0,b:{t:2,i:[{t:3,v:"De ingebouwde ESPHome CLI gebruikt je eigen profiel (YAML met sleutels) en secrets. Kies het profiel van het scherm, dan een USB-poort (scherm aan de Home Assistant-machine), "},{t:4,k:"ota"},{t:3,v:" met de hostnaam, of "},{t:4,k:"download"},{t:3,v:" om de firmware vanaf je eigen computer op het scherm te zetten. "},{t:4,k:"check"},{t:3,v:" valideert alleen, "},{t:4,k:"build"},{t:3,v:" compileert, "},{t:4,k:"install"},{t:3,v:" zet de firmware op het scherm. Je tegels blijven zoals ze in ESP Screens staan. De eerste build duurt enkele minuten."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Controleren"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bouwen"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & installeren"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & downloaden"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt. Werk de app bij naar 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies het bedoelde profiel, dan een USB-poort, een IP-adres of Downloaden."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome-profiel"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installeren naar"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nog geen bord gevonden op de Home Assistant-machine"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden · flashen vanaf je eigen computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres of hostnaam"}},download_file:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" downloaden"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Zet het met "},{t:4,k:"esphome_web"},{t:3,v:" op het scherm, in Chrome of Edge: klik op Connect, kies de USB-poort van het scherm, klik op Install en selecteer dit bestand. Het bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaard."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Even geduld…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te downloaden."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens maakt een eigen profiel voor het scherm, met unieke sleutels, en bouwt de firmware. Sluit het scherm met een USB-datakabel aan op de machine waarop Home Assistant draait, of download de firmware en zet die vanaf je eigen computer op het scherm."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Welk scherm heb je?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Scherm woonkamer"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"aanpassen"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Elk scherm krijgt een eigen profiel met eigen sleutels. Vier schermen? Doorloop dit vier keer met een andere naam."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Kleine letters, cijfers en streepjes. Elk scherm een andere naam."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-naam (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-wachtwoord"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer invullen: ESP Screens bewaart dit in ESPHome secrets.yaml, volgende schermen gebruiken het automatisch."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Je ESPHome secrets.yaml mist nog Wi-Fi-gegevens. ESP Screens vult alleen de ontbrekende regels aan."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi komt uit je ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in de ESPHome-map is geen geldige YAML. Herstel het bestand eerst; het wordt niet overschreven."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installeren via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · alleen het profiel bewaren"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm met een USB-datakabel aan op de Home Assistant-machine; de lijst ververst vanzelf. Of kies Downloaden om je eigen computer te gebruiken."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download de firmware en zet die vanaf je eigen computer op het scherm, in Chrome of Edge. Daarna gaan updates via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Het profiel komt in de ESPHome-map. Installeren kan later via Firmware & USB, of vanuit ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Meer dan één bord aangesloten: kies de poort van dit scherm."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer via USB; daarna gaat alles draadloos."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaren"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Er loopt al een build of installatie ("},{t:4,k:"file"},{t:3,v:"). Wacht tot die klaar is."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt in deze installatie; alleen het profiel bewaren kan."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" staat in de ESPHome-map"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Firmware naar "},{t:4,k:"name"},{t:3,v:" schrijven…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware voor "},{t:4,k:"name"},{t:3,v:" is klaar"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware staat op "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen mislukt"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installeren mislukt"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installeren kan later via Firmware & USB: kies dit profiel, dan de USB-poort van de Home Assistant-machine, of Downloaden om de firmware vanaf je eigen computer op het scherm te zetten. Bewaar de API-sleutel voor de koppeling:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Haal de USB-kabel nog niet los."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de installatie loopt door en je vindt hem terug onder Nieuw scherm."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de build loopt door en je vindt hem terug onder Nieuw scherm."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Zet de firmware vanaf je eigen computer op het scherm en koppel het scherm daarna aan Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. Koppel het nu aan Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes. Koppel het nu aan Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Bekijk het log hieronder."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" met een USB-datakabel."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm aan op je computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome of Edge, klik op Connect en kies de USB-poort van het scherm."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Klik op Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Het bestand bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dit gebeurt buiten ESP Screens. Home Assistant ontdekt "},{t:4,k:"name"},{t:3,v:" als ESPHome-apparaat; klik op Toevoegen. Niet ontdekt? Voeg ESPHome handmatig toe met het IP-adres van het scherm."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ga naar Home Assistant → Instellingen → Apparaten & diensten."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" van hierboven zodra Home Assistant om een encryptiesleutel vraagt."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plak de API-sleutel"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome-integratie → Configureren → “Allow the device to perform Home Assistant actions”. Zonder dit ziet het scherm alles, maar bedient het niets."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sta HA-acties toe:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Terug in ESP Screens verschijnt het scherm binnen een halve minuut in de lijst links; tot die tijd staat het daar als “nog niet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kies je tegels."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log van ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw proberen"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Nog een scherm installeren"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw beginnen"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Een melding over het hele scherm, vanuit een automatisering."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft de actie "},{t:4,k:"action"},{t:3,v:". Die legt een kaart over alles heen, wekt het scherm en houdt de backlight op de normale helderheid tot iemand op de knop tikt of de timeout verstrijkt. Home Assistant toont bij ESPHome-acties zelf geen uitleg of keuzelijsten; alles wat je kunt invullen staat hier."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"De cheatsheet laadt nog; even geduld."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Iemand belt aan"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Deur 3, achterkant"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ik kom"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Onderdelen"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Uitproberen"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Jouw schermen"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In een automatisering"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"De velden"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Iconen"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kleuren"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Gedrag"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Gebeurtenissen"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Stuur nu één alert, met dezelfde velden die een automatisering stuurt. Het scherm toont de kaart en laat, met knipperen aan, de backlight knipperen."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},all:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen ("},{t:4,k:"ready"},{t:3,v:" klaar)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niet klaar"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titel"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ondertitel"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kleur"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Knoptekst"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconden, 0 wacht op de knop)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Backlight laten knipperen"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Vier keer als de alert binnenkomt."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Versturen…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Alert versturen"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Verstuurd naar het scherm."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 overgeslagen (offline of oude firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" overgeslagen (offline of oude firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Leeg gelaten: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Geen enkel scherm kon hem tonen: controleer of er een scherm online is met firmware "},{t:4,k:"version"},{t:3,v:" of nieuwer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Wit (standaard)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft zijn eigen actie, met de apparaatnaam erin. Vanaf firmware "},{t:4,k:"version"},{t:3,v:"; een ouder scherm werk je bij met de knop Bijwerken onder Schermen."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nog geen scherm gekoppeld. Installeer er een via Nieuw scherm; de actie verschijnt zodra Home Assistant het scherm ziet."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update nodig · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam onbekend · werk het scherm bij"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Alert tonen"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Alert sluiten"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Klik op "},{t:4,k:"add"},{t:3,v:" en zoek op "},{t:4,k:"esphome"},{t:3,v:". Kies de actie van je scherm: Home Assistant noemt die “Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Actie toevoegen"}},device:{t:0,b:{t:2,i:[{t:3}],s:"apparaatnaam"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant vraagt om alle zeven; laat wat je niet gebruikt leeg ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", uit)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vul de velden in."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Liever YAML? Kies "},{t:4,k:"edit"},{t:3,v:" bij de actie en plak het voorbeeld hieronder."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld voor"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"een scherm (nog niet gekoppeld)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Bewerken in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"YAML kopiëren"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen tegelijk"}},text:{t:0,b:{t:2,i:[{t:3,v:"Vuur de gebeurtenis "},{t:4,k:"show"},{t:3,v:" af met dezelfde velden, en ESP Screens geeft de alert door aan elk scherm dat online is, ook aan schermen die je later toevoegt. "},{t:4,k:"dismiss"},{t:3,v:" haalt hem overal weg. Voeg in een automatisering de actie "},{t:4,k:"event"},{t:3,v:" toe, of plak het voorbeeld onder "},{t:4,k:"edit"},{t:3,v:". Laat de velden die je niet gebruikt weg. ESP Screens moet hiervoor draaien."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Handmatige gebeurtenis activeren"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst is vrij in te vullen; de limiet is in bytes en een letter met accent telt voor twee. Wat niet past krijgt puntjes (titel) of valt weg (ondertitel)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Veld"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Wat het doet"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limiet"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"getal"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"aan / uit"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entiteit"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 tot 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:", bijvoorbeeld "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" en de hex-codepoint ("},{t:4,k:"hex"},{t:3,v:") werken ook. Alleen deze iconen zitten in de firmware; elke andere naam toont de waarschuwingsdriehoek. Tik op een icoon om de naam te kopiëren."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handig voor meldingen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam of omschrijving…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Ook beschikbaar: bedienings- en weericonen"}},copy:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" kopiëren"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Geen icoon voor “"},{t:4,k:"query"},{t:3,v:"”. Onbekende namen tonen de waarschuwingsdriehoek ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:". Dit zijn de pasteltinten van de tegels, met donkere tekst. Leeg of onbekend geeft de witte kaart. Tik om te kopiëren."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een alert maakt een gedimd of donker scherm meteen wakker en verschijnt boven elke pagina, elke open lichtkaart en de stand-bylaag."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wekt het scherm."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Zolang de kaart in beeld is, blijft de backlight op de normale helderheid. Stand-by en de nachturen wachten. Na de knop begint de gewone stand-bytijd opnieuw."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aan tot de knop."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" wacht op de knop, hoe lang dat ook duurt. Met "},{t:4,k:"minute"},{t:3,v:" verdwijnt de kaart na een minuut, maar de knop sluit hem eerder."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" laat de backlight vier keer knipperen als de alert binnenkomt (ongeveer een seconde) en laat het scherm daarna aan."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Knipperen."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een nieuwe alert vervangt de huidige; er is geen stapel. De vervangen alert meldt zich als "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vervangen."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" haalt de kaart weg, bijvoorbeeld als de deur al open is. Zonder alert doet die actie niets."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Op afstand sluiten."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" doet niets; alleen de knop sluit hem. Zo drukt een tik om het scherm te wekken de alert nooit per ongeluk weg."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tikken naast de kaart"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk einde vuurt de gebeurtenis "},{t:4,k:"event"},{t:3,v:" af, met "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (de apparaatnaam) en het "},{t:4,k:"device_id"},{t:3,v:" dat Home Assistant toevoegt. Te zien onder Instellingen → Hulpmiddelen → Gebeurtenissen."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Wanneer"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot iemand op de knop drukt"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Gebruik een "},{t:4,k:"bold"},{t:3,v:": oranje voor de deur, rood voor rook of water, groen voor “klaar”. De tekst blijft altijd donker en leesbaar."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"kleur per soort melding"}},short:{t:0,b:{t:2,i:[{t:3,v:"Houd de titel "},{t:4,k:"bold"},{t:3,v:"; een scherm toont zo'n twintig tekens op één regel en kort een langere titel af met puntjes. Zet details in de ondertitel."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"kort"}},button:{t:0,b:{t:2,i:[{t:3,v:"Een "},{t:4,k:"bold"},{t:3,v:" maakt van de melding een vraag: “Ik kom”, “Gezien”, “Uitzetten”. De gebeurtenis vertelt je dan wie reageerde."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"eigen knoptekst"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Een alert die zichzelf oplost (de deur gaat open, de was is eruit gehaald) sluit je in dezelfde automatisering met "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen? Vuur "},{t:4,k:"event"},{t:3,v:" één keer af (zie Alle schermen tegelijk). De schermen werken nog steeds los van elkaar en melden zich elk met hun eigen "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Liever "},{t:4,k:"bold"},{t:3,v:" om de automatisering te schrijven? Installeer de ESP Screens-skill onder Instellingen → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"Claude vragen"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Deurbel: toon de alert en wacht tot iemand op de knop drukt."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Er komt iemand naar de deur."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Geavanceerd · lokale override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML-override · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Dit kleine bestand is van jou. Het wordt na het gedeelde schermpakket geladen en blijft staan als ESP Screens wordt bijgewerkt. Pas hier hardwaredetails aan, zoals een displaymodel."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Wat kun je veilig aanpassen?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pinnen en andere apparaatdetails. Naam, Wi-Fi, API, OTA en de koppelingen naar de packages beheert ESP Screens zelf."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te koppelen"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokale YAML-override"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld gebruiken"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wissen"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 teken"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tekens"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 regel"},{t:2,i:[{t:4,k:"n"},{t:3,v:" regels"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & controleren"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Override opslaan"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen ESPHome-profiel gevonden voor dit scherm."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen hier gelden bij de volgende build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Sla één keer op om dit bestand aan het profiel te koppelen."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Controleren en opslaan…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. De override blijft bewaard bij firmware-updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override opgeslagen."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. ESPHome controleert het complete profiel…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome controleert het profiel…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome controleert het profiel… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Het complete profiel is geldig. Je kunt veilig bouwen en installeren."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome heeft het complete profiel afgekeurd. Zie Firmware & USB voor het volledige log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"De huidige tekst vervangen door het voorbeeld?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld geladen. Sla het op zodra je klaar bent."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"De lokale override wissen?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Na opslaan is de override leeg."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Onbekend"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen/koelen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Alleen ventilator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drogen"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Voorverwarmen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Ontdooien"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Openen"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Speelt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Boven de horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Onder de horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Gedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Schoonmaken"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Terugkeren naar dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Zonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Helder, nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewolkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Half bewolkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regenachtig"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuwachtig"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuw-, regenachtig"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Mist"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem, regenachtig"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Winderig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Uitzonderlijk"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Opladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet aan het opladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Koud"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbonden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Verbroken"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heet"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht gedetecteerd"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Ontgrendeld"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Vergrendeld"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nat"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Beweging"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen beweging"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ingeplugd"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Losgekoppeld"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Probleem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet actief"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Onveilig"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Veilig"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Sabotage ontdekt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update beschikbaar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Niet beschikbaar"}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Inschakelen"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uitvoeren"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Klik"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Gemiddeld"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Hoog"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Midden"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Concentratie"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Diffuus"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Boven"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Beide"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Verticaal"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Horizontaal"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Zojuist"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min geleden"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 uur geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur geleden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gisteren"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dag geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dagen geleden"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weken geleden"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 maand geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" maanden geleden"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 jaar geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" jaar geleden"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 uur"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" uur"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 dag"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" dagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a.m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p.m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"zondag"}},{t:0,b:{t:2,i:[{t:3}],s:"maandag"}},{t:0,b:{t:2,i:[{t:3}],s:"dinsdag"}},{t:0,b:{t:2,i:[{t:3}],s:"woensdag"}},{t:0,b:{t:2,i:[{t:3}],s:"donderdag"}},{t:0,b:{t:2,i:[{t:3}],s:"vrijdag"}},{t:0,b:{t:2,i:[{t:3}],s:"zaterdag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"januari"}},{t:0,b:{t:2,i:[{t:3}],s:"februari"}},{t:0,b:{t:2,i:[{t:3}],s:"maart"}},{t:0,b:{t:2,i:[{t:3}],s:"april"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"juni"}},{t:0,b:{t:2,i:[{t:3}],s:"juli"}},{t:0,b:{t:2,i:[{t:3}],s:"augustus"}},{t:0,b:{t:2,i:[{t:3}],s:"september"}},{t:0,b:{t:2,i:[{t:3}],s:"oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"november"}},{t:0,b:{t:2,i:[{t:3}],s:"december"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mrt"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"aug"}},{t:0,b:{t:2,i:[{t:3}],s:"sep"}},{t:0,b:{t:2,i:[{t:3}],s:"okt"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pl-B9ELWpRl.js b/screen_manager/app/static/assets/pl-B9ELWpRl.js deleted file mode 100644 index c97f797..0000000 --- a/screen_manager/app/static/assets/pl-B9ELWpRl.js +++ /dev/null @@ -1 +0,0 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Cofnij"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"nieznany"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niezapisane zmiany"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Anuluj"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz Urządzenia oraz usługi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i wyślij"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Zapisywanie…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj bieżące dane"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wynik. Pisz dalej, aby zawęzić."},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyniki. Pisz dalej, aby zawęzić."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyników. Pisz dalej, aby zawęzić."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Zmień"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ładowanie…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Wstecz"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nowy ekran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware i USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerty"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się. Odśwież stronę i spróbuj ponownie."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano klucz API."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano JSON układu."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON układu jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę akcji."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa akcji jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano YAML."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę ikony."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa ikony jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano pusty kolor."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Pusty kolor jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę koloru."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa koloru jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Strona zarządzania nieosiągalna · ponawianie…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Połączono z Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Ponowne łączenie z Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Odśwież"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacja"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"W kolejce do aktualizacji"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aktualizacja "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome o tej nazwie urządzenia."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Co nowego"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Pełny log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, tylko ten jeden raz; nowy firmware sam go zgłasza."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, np. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Rozpocznij"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowany, ale jeszcze nie w Home Assistant. Dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, a potem kliknij „Konfiguruj” i włącz „Zezwól urządzeniu na wykonywanie akcji Home Assistant”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware pobrany, jeszcze nie w Home Assistant. Wgraj go na ekran przez ESPHome Web, potem dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, kliknij „Konfiguruj” i zezwól na akcje Home Assistant."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Jeszcze nie w Home Assistant. Firmware już wgrany? Dodaj urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, potem kliknij „Konfiguruj” i zezwól na akcje Home Assistant. Jeszcze nie wgrany? Firmware i USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj klucz API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Polecenia"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do tego ekranu"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga i alert testowy"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nic do zapisania"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Zidentyfikuj ten ekran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Miga podświetleniem i pokazuje kartę"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga nowszej wersji firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz i skopiuj jako JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ekranów, encji, poleceń…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Brak wyników. Wpisz część nazwy ekranu, encji lub polecenia."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz ekran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz jeden ze swoich ekranów po lewej, aby zmienić jego kafelki, górny pasek i ustawienia."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od ekranu"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz CYD lub Guition przez USB do komputera z Home Assistant. Profil, firmware i pierwsze wgranie za jednym razem."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj nowy ekran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Masz niezapisane zmiany. Mimo to otworzyć inny ekran?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ kopią układu innego ekranu?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ zaimportowanym?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twój ekran jest aktualizowany."}},other:{t:0,b:{t:2,i:[{t:3,v:"Zapisano. Trwa aktualizacja: "},{t:4,k:"name"},{t:3,v:"."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Ekran jest aktualizowany."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twoja najnowsza zmiana nie została jeszcze wysłana: naciśnij ponownie „Zapisz i wyślij”."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" miga i przez kilka sekund pokazuje kartę."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · zmiany są zapisywane"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Układ"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia ekranu"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano · wysłano na ekran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko zapisane"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identyfikuj"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"mignij ekranem"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga wersji firmware 0.2.31 lub nowszej"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"z Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj układ z…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ekran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekrany"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekranów"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"brak innych ekranów"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelek"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelków"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importuj układ…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"zaawansowane"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Na stronie "},{t:4,k:"page"},{t:3,v:" nie ma miejsca na ten kafelek."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Brak wolnej strony dla kafelka na całą stronę. Najpierw zwolnij stronę."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran ma już kafelek, który prowadzi do strony "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Zaimportowano układ. Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Zaimportowano układ. Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"To nie jest JSON. Najpierw wyeksportuj układ albo wklej układ z innej instalacji ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Brak kafelków w tym pliku. Oczekiwano układu wyeksportowanego z ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" strona · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" strony · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" stron · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj pierwsze światło, scenę lub urządzenie z biblioteki."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij górny pasek lub kafelek, aby go zmienić. Przeciągnij, aby przenieść; upuść na następnej stronie, aby utworzyć nową."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsca i stałe pozycje działają od wersji firmware 0.2.26. Do czasu tej aktualizacji ten ekran (firmware "},{t:4,k:"firmware"},{t:3,v:") przesuwa kafelki w górę, na pierwsze wolne miejsce."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Układ ekranu"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj stronę"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 strona"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" strony"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" stron"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń stronę"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Strony po tej przesuną się o jedno miejsce w górę"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj górny pasek"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Puste miejsce. Kliknij, aby dodać tu kafelek, albo przeciągnij go tutaj."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:": dodaj tu następny kafelek"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Tu trafi następny kafelek"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Puste"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteka"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" encja"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encje"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encji"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, urządzeniu lub obszarze…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj encję"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Światła"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełączniki"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcje"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypty"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylatory"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłony"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Sceny"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacze"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensory"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartości"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektory"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoby"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutniki"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Obszar"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie obszary"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj dodane"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj to, co już jest na tym ekranie"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko z tej listy jest już na tym ekranie."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji. Spróbuj innej nazwy, obszaru lub filtra."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek; zaktualizuj jego firmware, aby zmieścić 48."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki; zaktualizuj jego firmware, aby zmieścić 48."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków; zaktualizuj jego firmware, aby zmieścić 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij na stronę albo kliknij +, aby dodać w pierwszym wolnym miejscu. ⌘K przeszukuje wszystko."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Światło"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacz"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłona"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypt"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Słońce"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutnik"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoba"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Obraz"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standardowy"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"wykres"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"zegar analogowy"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"tor słońca"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"podwójny"}},full:{t:0,b:{t:2,i:[{t:3}],s:"cała strona"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa na ekranie"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (z Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (domyślna)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje wybraną ikonę od wersji firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Przechodzi do strony"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (pusta)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelki nawigacji wymagają wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran nie ma strony "},{t:4,k:"page"},{t:3,v:", więc dotknięcie otwiera jego ostatnią stronę. Wybierz inną stronę."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie kafelka otwiera tę stronę."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Widok"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Zegar analogowy"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa i stan"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Wykres"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Tor słońca"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Rozmiar"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Podwójna szerokość"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona: jeden duży przycisk, który świeci, gdy encja jest włączona; suwak, przyciski lub wykres są na jego dole."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Strona"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nowa strona"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bezpośrednie sterowanie na kafelku"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje tego sterowania dla tej encji, więc na ekranie to miejsce pozostanie puste. Wybierz inne."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na dole kafelka na całą stronę; dotknięcie w innym miejscu działa zgodnie z ustawieniem poniżej."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej stronie kafelka podwójnej szerokości, jak w wierszach encji w Home Assistant. Dotknięcie nazwy działa zgodnie z ustawieniem poniżej."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje bezpośrednie sterowanie od wersji firmware 0.2.19; do tego czasu kafelek pozostaje bez zmian."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Po dotknięciu"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz sterowanie"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Tylko podgląd"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Włącz / wyłącz"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Wykonaj akcję"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie może tego włączać ani wyłączać, więc dotknięcie nic nie robi. Wybierz inną opcję."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Włączanie i wyłączanie dotknięciem działa od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie otwiera kartę."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Przytrzymaj kafelek, aby otworzyć jego kartę."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mały suwak na kafelku"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nie"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Tak, steruj bezpośrednio"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma dla tej encji niczego, co suwak mógłby zmieniać. Wybierz „Nie”."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historia"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" godzina"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelowe tło"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Tło: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń kafelek"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie akcji tej encji z Home Assistant…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant teraz nie odpowiada. Spróbuj ponownie za chwilę."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz akcję"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład toggle, position lub play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj akcji"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono akcji."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje już tej akcji dla tej encji, więc dotknięcie nic nie robi. Wybierz inną."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcjonalnie)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nie ustawiono"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Włączone"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Wyłączone"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant wymaga: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran wykonuje akcje od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie działa jak „Automatycznie”."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład lampa, muzyka lub drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony, tylko tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ikona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono ikony."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bieżące dane"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Połączenie, stan i obsługiwane właściwości"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Odczytywanie…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie bieżącego stanu z HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stan: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Mały suwak: "},{t:4,k:"slider"},{t:3,v:" · Widok: "},{t:4,k:"display"},{t:3,v:" · Rozmiar: "},{t:4,k:"size"},{t:3,v:" · Sterowanie: "},{t:4,k:"control"},{t:3,v:" · Tło: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"tak"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nie"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Domyślne"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj ponownie"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto z górnego paska: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Górny pasek mieści 1 element."},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementy."}]},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementów."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"To już jest na górnym pasku."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Górny pasek"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Górny pasek: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu, działa też bez Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementu"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Po lewej: nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Na przykład: Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej: godzina, sensory lub zegar"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"},{t:3,v:" z górnego paska"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 element"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementy"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj godzinę, datę, zegar analogowy lub encję"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj godzinę, datę lub encję"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie wszystko mieści się obok nazwy: ekran pomija elementy z przerywaną ramką. Usuń jeden z nich albo wybierz krótszą nazwę."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij, aby zmienić kolejność; kliknij element, aby go skonfigurować."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensory, data i zegar analogowy pojawiają się od wersji firmware "},{t:4,k:"version"},{t:3,v:"; do tej aktualizacji ekran pokazuje nazwę oraz zegar, jeśli godzina jest na pasku."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ukryty: teraz nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie mieści się obok nazwy"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Tarcza"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Teraz ukryty: nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Obecnie nie mieści się obok nazwy"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Tak wygląda na ekranie"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mała tarcza z godziną"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Co pokazać"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Ostatnia zmiana” aktualizuje się na samym ekranie: „Przed chwilą”, „5 min temu”, „Wczoraj”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (jak w Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pokazuj"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Tylko gdy aktywne” ukrywa element, dopóki jest wyłączony, zamknięty, poza domem albo równy 0. Przydatne dla otwartych drzwi, pracującej pralki albo tego, kto jest w domu."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Zegar 24-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Zegar 12-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia → Język i region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Dziś: "},{t:4,k:"date"},{t:3,v:". Data pochodzi z zegara samego ekranu."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ W górę"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ W dół"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do górnego paska"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsca"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Już dodano"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Propozycje z Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, obszarze lub encji, np. temperatura albo drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj encji dla górnego paska"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noc"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Tryb ciemny"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto czuwanie"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Czuwanie po"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność czuwania"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Tryb nocny"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Początek"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Koniec"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność nocna"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Wróć do strony 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Po"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Także w czuwaniu"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Przesuwanie stron"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Obrót"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" godz."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" godz. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Trwa jeszcze zapisywanie ustawień innego ekranu. Spróbuj ponownie za chwilę."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron i przesuwanie są wyłączone, więc stronę zmieniają tylko kafelki „Przejdź do strony”."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"strony "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie masz kafelków „Przejdź do strony”."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Kafelki do "},{t:4,k:"pages"},{t:3,v:" są tylko na stronach, do których nie możesz dotrzeć."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Ze "},{t:4,k:"pages"},{t:3,v:" żaden kafelek nie prowadzi z powrotem do strony 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Ten ekran jest offline. Jego ustawienia można zmienić, gdy wróci."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają na ekranie od razu, a gdy zmienisz coś na ekranie, zobaczysz to tutaj."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają od razu. Od wersji firmware 0.2.49 ekran przechowuje je sam."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Ta encja jest wyłączona w Home Assistant albo ekran uruchamia się ponownie."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zmniejsz"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zwiększ"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Rozpoczynanie aktualizacji…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Wgrywanie firmware przez Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie i instalowanie…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Oczekiwanie na powrót ekranu…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie, czy działa stabilnie…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nowy język: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany będą teraz aktualizowane automatycznie w nocy."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatyczne aktualizacje są wyłączone."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualizowanie do firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nie sparowano jeszcze żadnego ekranu. Nowe ekrany dostaną firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranu."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany mają firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aktualizuj 1 ekran"},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Co nowego w firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj automatycznie co noc"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Między 03:00 a 06:00, po jednym ekranie naraz. Przy błędzie zatrzymuje się i zgłasza go w Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Claude Code od razu ją wykrywa."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Uruchom ponownie Claude Code jeden raz, aby znalazł nowy folder umiejętności."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dzięki tej umiejętności Claude pozna ESP Screens. Potem poproś: „Pokaż alert na wszystkich moich ekranach, gdy skrzynka na listy jest pełna”. Claude zna zdarzenia alertów, każde pole, kolor i ikonę."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj dla Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj ponownie"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Zaktualizuj umiejętność"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nie zainstalowano"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Zainstalowano"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowano · dostępna jest nowsza wersja"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Dla Claude Code w Home Assistant. Zapisuje jeden plik w "},{t:4,k:"path"},{t:3,v:"; ponowna instalacja go zastępuje."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz dla claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Prześlij plik zip w Claude: Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko wokół Twoich ekranów."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Moje ekrany"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj ekran albo skompiluj i ponownie zainstaluj firmware ekranu, który już masz."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj przez USB lub Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Język i region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Język ekranów"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Język Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Język Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany używają angielskiego, dopóki język Home Assistant nie będzie dostępny."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · jeszcze niesprawdzony, pomoc mile widziana"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" nie jest jeszcze sprawdzony, pomoc mile widziana: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"jak tłumaczyć"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po zmianie każdy ekran wymaga aktualizacji firmware, po jednej kompilacji na ekran: przyciskiem „Aktualizuj” albo w nocnych aktualizacjach."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format czasu"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24-godzinny"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12-godzinny"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format liczbowy"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Twój profil Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Użyj tych"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Sam edytor używa języka Twojego profilu Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Każdy ekran przejdzie na nowy język przy najbliższej aktualizacji."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Karta na cały ekran uruchamiana z automatyzacji, na jednym ekranie lub na wszystkich. Ściąga zawiera nazwy akcji, pola, ikony i kolory oraz formularz do wypróbowania alertu."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienia na cały ekran, z automatyzacji"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj firmware ekranu"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Wbudowane narzędzie ESPHome CLI korzysta z Twojego własnego profilu (YAML z kluczami) i sekretów. Wybierz profil ekranu, a potem port USB (ekran podłączony do komputera z Home Assistant), "},{t:4,k:"ota"},{t:3,v:" z nazwą hosta albo "},{t:4,k:"download"},{t:3,v:", aby wgrać firmware na ekran z własnego komputera. "},{t:4,k:"check"},{t:3,v:" tylko sprawdza poprawność, "},{t:4,k:"build"},{t:3,v:" kompiluje, "},{t:4,k:"install"},{t:3,v:" wgrywa firmware na ekran. Twoje kafelki w ESP Screens zostają bez zmian. Pierwsza kompilacja trwa kilka minut."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdź"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Tylko kompiluj"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i zainstaluj"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i pobierz"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Brak narzędzia ESPHome CLI. Zaktualizuj aplikację do wersji 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz właściwy profil, a potem port USB, adres IP lub „Pobierz”."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj na"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nie znaleziono jeszcze płytki na komputerze z Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz · wgraj z własnego komputera"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP lub nazwa hosta"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Pobierz "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Wgraj go na ekran przez "},{t:4,k:"esphome_web"},{t:3,v:" w Chrome lub Edge: „Connect”, wybierz port USB ekranu, „Install” i wskaż ten plik. Zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil zapisany."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Chwileczkę…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do pobrania."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens tworzy własny profil ekranu z unikalnymi kluczami i kompiluje firmware. Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant albo pobierz firmware i wgraj go na ekran z własnego komputera."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Jaki masz ekran?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 cala"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 cale"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ekran w salonie"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa urządzenia"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"dostosuj"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Każdy ekran dostaje własny profil z własnymi kluczami. Cztery ekrany? Przejdź przez to cztery razy, za każdym razem z inną nazwą."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Małe litery, cyfry i myślniki. Inna nazwa dla każdego ekranu."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa sieci Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Hasło Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij raz: ESP Screens zapisze to w pliku secrets.yaml ESPHome, a kolejne ekrany użyją tego automatycznie."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"W Twoim pliku secrets.yaml ESPHome wciąż brakuje danych Wi-Fi. ESP Screens uzupełni tylko brakujące wiersze."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Dane Wi-Fi pochodzą z Twojego pliku secrets.yaml ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Plik secrets.yaml w folderze ESPHome nie jest poprawnym YAML. Najpierw popraw plik; nie zostanie nadpisany."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj przez"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Później · tylko zapisz profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant; lista odświeża się sama. Albo wybierz „Pobierz”, aby użyć własnego komputera."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz firmware i wgraj go na ekran z własnego komputera, w Chrome lub Edge. Potem aktualizacje idą przez Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Profil trafi do folderu ESPHome. Zainstalujesz go później w sekcji „Firmware i USB” albo w ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Podłączono więcej niż jedną płytkę: wybierz port tego ekranu."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Raz przez USB; potem wszystko bezprzewodowo."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Kompilacja lub instalacja już trwa ("},{t:4,k:"file"},{t:3,v:"). Poczekaj, aż się zakończy."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"W tej instalacji brakuje narzędzia ESPHome CLI; można tylko zapisać profil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" jest w folderze ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Wgrywanie firmware: "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware gotowy: "},{t:4,k:"name"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware wgrany: "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Kompilacja nieudana"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Instalacja nieudana"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj go później w sekcji „Firmware i USB”: wybierz ten profil, a potem port USB komputera z Home Assistant albo „Pobierz”, aby wgrać firmware na ekran z własnego komputera. Zachowaj klucz API do parowania:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Nie odłączaj jeszcze kabla USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: instalacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: kompilacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Wgraj go na ekran z własnego komputera, a potem sparuj ekran z Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. Teraz sparuj go z Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków. Teraz sparuj go z Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Zobacz log poniżej."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" kablem USB do transmisji danych."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran do komputera"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" w Chrome lub Edge, kliknij „Connect” i wybierz port USB ekranu."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Otwórz "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij „Install”"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Plik zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" To dzieje się poza ESP Screens. Home Assistant wykryje "},{t:4,k:"name"},{t:3,v:" jako urządzenie ESPHome; kliknij „Dodaj”. Nie wykryto? Dodaj ESPHome ręcznie, podając adres IP ekranu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Przejdź do Home Assistant → Ustawienia → Urządzenia oraz usługi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" widoczny powyżej, gdy Home Assistant poprosi o klucz szyfrujący."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wklej klucz API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integracja ESPHome → Konfiguruj → „Zezwól urządzeniu na wykonywanie akcji Home Assistant”. Bez tego ekran widzi wszystko, ale niczym nie steruje."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zezwól na akcje HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Po powrocie do ESP Screens ekran pojawi się na liście po lewej w ciągu około trzydziestu sekund; do tego czasu jest tam opisany jako „jeszcze nie w Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz kafelki."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Ponów"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj kolejny ekran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od nowa"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerty · ściąga"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienie na cały ekran, z automatyzacji."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma akcję "},{t:4,k:"action"},{t:3,v:". Wyświetla ona kartę nad wszystkim, budzi ekran i utrzymuje normalną jasność podświetlenia, dopóki ktoś nie dotknie przycisku albo nie upłynie limit czasu. Sam Home Assistant nie pokazuje dla akcji ESPHome żadnych objaśnień ani list rozwijanych; wszystko, co możesz wypełnić, znajdziesz tutaj."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga wciąż się ładuje; chwileczkę."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś jest przy drzwiach"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Drzwi 3, tylne"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Idę"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sekcje"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Wypróbuj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Twoje ekrany"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"W automatyzacji"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Pola"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ikony"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kolory"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Działanie"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Zdarzenia"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Wskazówki"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij teraz jeden alert z tymi samymi polami, które wysyła automatyzacja. Ekran pokaże kartę, a przy włączonym miganiu mignie podświetleniem."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany (gotowe: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niegotowy"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tytuł"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Podtytuł"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kolor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tekst przycisku"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu (sekundy, 0 czeka na przycisk)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Migaj podświetleniem"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cztery razy, gdy przychodzi alert."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wysyłanie…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekran."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekrany."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Wysłano na ekran "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Wysłano na ekran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Pominięto 1 ekran (offline lub stary firmware)."},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekrany (offline lub stary firmware)."}]},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekranów (offline lub stary firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Puste pola: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Żaden ekran nie mógł go pokazać: sprawdź, czy któryś ekran jest online i ma firmware "},{t:4,k:"version"},{t:3,v:" lub nowszy."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Biały (domyślny)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma własną akcję, której nazwa zawiera nazwę urządzenia. Od wersji firmware "},{t:4,k:"version"},{t:3,v:"; starszy ekran zaktualizuj przyciskiem „Aktualizuj” na liście ekranów."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie sparowano jeszcze żadnego ekranu. Zainstaluj go w sekcji „Nowy ekran”; akcja pojawi się, gdy Home Assistant zobaczy ekran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Potrzebna aktualizacja · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznana nazwa urządzenia · zaktualizuj ekran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Pokaż alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" i wyszukaj "},{t:4,k:"esphome"},{t:3,v:". Wybierz akcję swojego ekranu: Home Assistant opisuje ją po angielsku jako „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj akcję"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nazwa urządzenia"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pyta o wszystkie siedem; to, czego nie używasz, zostaw puste ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", wyłączone)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij pola."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Wolisz YAML? Wybierz "},{t:4,k:"edit"},{t:3,v:" w menu akcji i wklej poniższy przykład."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Przykład dla"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"ekranu (jeszcze niesparowanego)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj w YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany naraz"}},text:{t:0,b:{t:2,i:[{t:3,v:"Wywołaj zdarzenie "},{t:4,k:"show"},{t:3,v:" z tymi samymi polami, a ESP Screens przekaże alert każdemu ekranowi, który jest online, także ekranom dodanym później. "},{t:4,k:"dismiss"},{t:3,v:" usuwa go wszędzie. W automatyzacji dodaj akcję "},{t:4,k:"event"},{t:3,v:" albo wybierz "},{t:4,k:"edit"},{t:3,v:" i wklej przykład. Pomiń pola, których nie używasz. ESP Screens musi przy tym działać."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom zdarzenie ręcznie"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst jest dowolny; limit liczy się w bajtach, a litera ze znakiem diakrytycznym (np. ą, ł, ś) liczy się jako dwa. Co się nie zmieści, kończy się wielokropkiem (tytuł) lub zostaje pominięte (podtytuł)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Pole"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Co robi"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Przykład"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"liczba"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"wł. / wył."}},entity:{t:0,b:{t:2,i:[{t:3}],s:"encja"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" B · Guition "},{t:4,k:"guition"},{t:3,v:" B"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"od 0 do 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:", na przykład "},{t:4,k:"example"},{t:3,v:". Działa też "},{t:4,k:"mdi"},{t:3,v:" i kod szesnastkowy ("},{t:4,k:"hex"},{t:3,v:"). Firmware zawiera tylko te ikony; każda inna nazwa pokazuje trójkąt ostrzegawczy. Kliknij ikonę, aby skopiować jej nazwę."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Przydatne do powiadomień"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie lub opisie…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Dostępne też: ikony sterowania i pogody"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Kopiuj "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Brak ikony dla „"},{t:4,k:"query"},{t:3,v:"”. Nieznane nazwy pokazują trójkąt ostrzegawczy ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:". To pastelowe odcienie kafelków, z ciemnym tekstem. Pusta lub nieznana nazwa daje białą kartę. Kliknij, aby skopiować."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Alert od razu budzi przyciemniony lub wygaszony ekran i pojawia się nad każdą stroną, każdą otwartą kartą światła i warstwą czuwania."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Budzi ekran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dopóki karta jest widoczna, podświetlenie ma normalną jasność. Czuwanie i godziny nocne czekają. Po naciśnięciu przycisku zwykły czas do czuwania biegnie od nowa."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Świeci do naciśnięcia przycisku."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" czeka na przycisk bez względu na to, jak długo to trwa. Przy "},{t:4,k:"minute"},{t:3,v:" karta znika po minucie, ale przycisk zamyka ją wcześniej."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" miga podświetleniem cztery razy, gdy przychodzi alert (około sekundy), a potem zostawia ekran włączony."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Miganie."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Nowy alert zastępuje bieżący; alerty się nie kumulują. Zastąpiony alert zgłasza się jako "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zastępowanie."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" usuwa kartę, na przykład gdy drzwi są już otwarte. Gdy nie ma alertu, ta akcja nic nie robi."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zdalne zamykanie."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" nic nie robi; kartę zamyka tylko przycisk. Dzięki temu dotknięcie budzące ekran nigdy przypadkiem nie zamknie alertu."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie obok karty"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Każde zakończenie alertu wywołuje zdarzenie "},{t:4,k:"event"},{t:3,v:" z polami "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (nazwa urządzenia) i "},{t:4,k:"device_id"},{t:3,v:", które dodaje Home Assistant. Zobaczysz je w sekcji Ustawienia → Narzędzia → Zdarzenia."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Kiedy"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Czekanie, aż ktoś naciśnie przycisk"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Użyj "},{t:4,k:"bold"},{t:3,v:": pomarańczowy dla drzwi, czerwony dla dymu lub wody, zielony dla „gotowe”. Tekst zawsze pozostaje ciemny i czytelny."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"osobnego koloru dla każdego rodzaju powiadomienia"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tytuł niech będzie "},{t:4,k:"bold"},{t:3,v:"; ekran pokazuje około dwudziestu znaków w jednym wierszu, a dłuższy tytuł kończy wielokropkiem. Szczegóły umieść w podtytule."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"krótki"}},button:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" zamienia powiadomienie w pytanie: „Idę”, „Widzę”, „Wyłącz”. Zdarzenie powie Ci potem, kto odpowiedział."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"Własny tekst przycisku"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Alert, który sam się rozwiązuje (drzwi się otwierają, ktoś wyjmuje pranie), zamknij w tej samej automatyzacji akcją "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany? Wywołaj "},{t:4,k:"event"},{t:3,v:" raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Wolisz "},{t:4,k:"bold"},{t:3,v:" o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"poprosić Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś idzie do drzwi."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Zaawansowane · lokalne nadpisanie"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Nadpisanie YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ten mały plik należy do Ciebie. Jest wczytywany po wspólnym pakiecie ekranu i zostaje na miejscu, gdy ESP Screens się aktualizuje. Zmieniaj tu szczegóły sprzętu, na przykład model wyświetlacza."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Co można bezpiecznie zmieniać?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Wyświetlacz, ekran dotykowy, substitutions, piny i inne szczegóły urządzenia. Nazwa, Wi-Fi, API, OTA i odnośniki do pakietów pozostają zarządzane przez aplikację."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktywne"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do dołączenia"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokalne nadpisanie YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Użyj przykładu"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyść"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 znak"},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaków"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wiersz"},{t:2,i:[{t:4,k:"n"},{t:3,v:" wiersze"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wierszy"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i sprawdź"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz nadpisanie"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany tutaj zadziałają przy następnej kompilacji."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz raz, aby dołączyć ten plik do profilu."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie i zapisywanie…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Nadpisanie zostaje zachowane podczas aktualizacji firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano nadpisanie YAML."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. ESPHome sprawdza cały profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sprawdza profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sprawdza profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Cały profil jest poprawny. Można bezpiecznie kompilować i instalować."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome odrzucił cały profil. Pełny log znajdziesz w sekcji „Firmware i USB”."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić obecny tekst przykładem?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Wczytano przykład. Zapisz go, kiedy zechcesz."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyścić lokalne nadpisanie?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Po zapisaniu nadpisanie będzie puste."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Dom"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznany"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Medium"}},high:{t:0,b:{t:2,i:[{t:3}],s:"High"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"pośredni"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"skupiony nawiew"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"rozproszony nawiew"}},top:{t:0,b:{t:2,i:[{t:3}],s:"nawiew górny"}},on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},both:{t:0,b:{t:2,i:[{t:3}],s:"ruch w obu płaszczyznach"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"ruch pionowy"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"ruch poziomy"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"nd"}},{t:0,b:{t:2,i:[{t:3}],s:"pn"}},{t:0,b:{t:2,i:[{t:3}],s:"wt"}},{t:0,b:{t:2,i:[{t:3}],s:"śr"}},{t:0,b:{t:2,i:[{t:3}],s:"cz"}},{t:0,b:{t:2,i:[{t:3}],s:"pt"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pl-Bfq2Pcew.js b/screen_manager/app/static/assets/pl-Bfq2Pcew.js new file mode 100644 index 0000000..99ad1f2 --- /dev/null +++ b/screen_manager/app/static/assets/pl-Bfq2Pcew.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Cofnij"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"nieznany"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niezapisane zmiany"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Anuluj"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz Urządzenia oraz usługi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i wyślij"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Zapisywanie…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj bieżące dane"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wynik. Pisz dalej, aby zawęzić."},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyniki. Pisz dalej, aby zawęzić."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyników. Pisz dalej, aby zawęzić."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Zmień"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ładowanie…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Wstecz"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nowy ekran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware i USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerty"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się. Odśwież stronę i spróbuj ponownie."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano klucz API."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano JSON układu."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON układu jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę akcji."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa akcji jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano YAML."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę ikony."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa ikony jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano pusty kolor."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Pusty kolor jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę koloru."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa koloru jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Strona zarządzania nieosiągalna · ponawianie…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Połączono z Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Ponowne łączenie z Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Odśwież"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacja"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"W kolejce do aktualizacji"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aktualizacja "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome o tej nazwie urządzenia."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Co nowego"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Pełny log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, tylko ten jeden raz; nowy firmware sam go zgłasza."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, np. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Rozpocznij"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowany, ale jeszcze nie w Home Assistant. Dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, a potem kliknij „Konfiguruj” i włącz „Zezwól urządzeniu na wykonywanie akcji Home Assistant”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware pobrany, jeszcze nie w Home Assistant. Wgraj go na ekran przez ESPHome Web, potem dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, kliknij „Konfiguruj” i zezwól na akcje Home Assistant."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Jeszcze nie w Home Assistant. Firmware już wgrany? Dodaj urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, potem kliknij „Konfiguruj” i zezwól na akcje Home Assistant. Jeszcze nie wgrany? Firmware i USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj klucz API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Polecenia"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do tego ekranu"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga i alert testowy"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nic do zapisania"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Zidentyfikuj ten ekran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Miga podświetleniem i pokazuje kartę"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga nowszej wersji firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz i skopiuj jako JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ekranów, encji, poleceń…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Brak wyników. Wpisz część nazwy ekranu, encji lub polecenia."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz ekran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz jeden ze swoich ekranów po lewej, aby zmienić jego kafelki, górny pasek i ustawienia."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od ekranu"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz CYD lub Guition przez USB do komputera z Home Assistant. Profil, firmware i pierwsze wgranie za jednym razem."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj nowy ekran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Masz niezapisane zmiany. Mimo to otworzyć inny ekran?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ kopią układu innego ekranu?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ zaimportowanym?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twój ekran jest aktualizowany."}},other:{t:0,b:{t:2,i:[{t:3,v:"Zapisano. Trwa aktualizacja: "},{t:4,k:"name"},{t:3,v:"."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Ekran jest aktualizowany."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twoja najnowsza zmiana nie została jeszcze wysłana: naciśnij ponownie „Zapisz i wyślij”."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" miga i przez kilka sekund pokazuje kartę."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · zmiany są zapisywane"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Układ"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia ekranu"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano · wysłano na ekran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko zapisane"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identyfikuj"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"mignij ekranem"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga wersji firmware 0.2.31 lub nowszej"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"z Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj układ z…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ekran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekrany"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekranów"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"brak innych ekranów"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelek"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelków"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importuj układ…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"zaawansowane"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Na stronie "},{t:4,k:"page"},{t:3,v:" nie ma miejsca na ten kafelek."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Brak wolnej strony dla kafelka na całą stronę. Najpierw zwolnij stronę."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran ma już kafelek, który prowadzi do strony "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Zaimportowano układ. Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Zaimportowano układ. Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"To nie jest JSON. Najpierw wyeksportuj układ albo wklej układ z innej instalacji ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Brak kafelków w tym pliku. Oczekiwano układu wyeksportowanego z ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" strona · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" strony · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" stron · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj pierwsze światło, scenę lub urządzenie z biblioteki."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij górny pasek lub kafelek, aby go zmienić. Przeciągnij, aby przenieść; upuść na następnej stronie, aby utworzyć nową."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsca i stałe pozycje działają od wersji firmware 0.2.26. Do czasu tej aktualizacji ten ekran (firmware "},{t:4,k:"firmware"},{t:3,v:") przesuwa kafelki w górę, na pierwsze wolne miejsce."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Układ ekranu"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj stronę"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 strona"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" strony"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" stron"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń stronę"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Strony po tej przesuną się o jedno miejsce w górę"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj górny pasek"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Puste miejsce. Kliknij, aby dodać tu kafelek, albo przeciągnij go tutaj."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:": dodaj tu następny kafelek"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Tu trafi następny kafelek"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Puste"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteka"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" encja"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encje"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encji"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, urządzeniu lub obszarze…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj encję"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Światła"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełączniki"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcje"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypty"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylatory"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłony"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Sceny"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacze"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensory"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartości"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektory"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoby"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutniki"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Obszar"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie obszary"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj dodane"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj to, co już jest na tym ekranie"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko z tej listy jest już na tym ekranie."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji. Spróbuj innej nazwy, obszaru lub filtra."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek; zaktualizuj jego firmware, aby zmieścić 48."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki; zaktualizuj jego firmware, aby zmieścić 48."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków; zaktualizuj jego firmware, aby zmieścić 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij na stronę albo kliknij +, aby dodać w pierwszym wolnym miejscu. ⌘K przeszukuje wszystko."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Światło"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacz"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłona"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypt"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Słońce"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutnik"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoba"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Obraz"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standardowy"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"wykres"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"zegar analogowy"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"tor słońca"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"podwójny"}},full:{t:0,b:{t:2,i:[{t:3}],s:"cała strona"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa na ekranie"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (z Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (domyślna)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje wybraną ikonę od wersji firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Przechodzi do strony"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (pusta)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelki nawigacji wymagają wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran nie ma strony "},{t:4,k:"page"},{t:3,v:", więc dotknięcie otwiera jego ostatnią stronę. Wybierz inną stronę."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie kafelka otwiera tę stronę."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Widok"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Zegar analogowy"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa i stan"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Wykres"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Tor słońca"}},live:{t:0,b:{t:2,i:[{t:3}],s:"Obraz na żywo"}},live_hint:{t:0,b:{t:2,i:[{t:3}],s:"Mały obraz z kamery w miejscu ikony, odświeżany w tempie poniżej, dopóki strona jest na ekranie. Dotknięcie nadal otwiera go na pełnym ekranie."}},live_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Obraz na żywo wymaga firmware 0.2.77 lub nowszego: po zapisaniu naciśnij Aktualizuj przy ekranie."}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok."}}},refresh:{label:{t:0,b:{t:2,i:[{t:3}],s:"Odświeżanie"}},seconds:{t:0,b:{t:2,i:[{t:3,v:"Co "},{t:4,k:"n"},{t:3,v:" s"}]}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Rozmiar"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Podwójna szerokość"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona: jeden duży przycisk w kolorze kafelka; suwak, przyciski lub wykres są na jego dole."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Strona"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nowa strona"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bezpośrednie sterowanie na kafelku"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje tego sterowania dla tej encji, więc na ekranie to miejsce pozostanie puste. Wybierz inne."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na dole kafelka na całą stronę; dotknięcie w innym miejscu działa zgodnie z ustawieniem poniżej."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej stronie kafelka podwójnej szerokości, jak w wierszach encji w Home Assistant. Dotknięcie nazwy działa zgodnie z ustawieniem poniżej."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje bezpośrednie sterowanie od wersji firmware 0.2.19; do tego czasu kafelek pozostaje bez zmian."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Po dotknięciu"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz sterowanie"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Tylko podgląd"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Włącz / wyłącz"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Wykonaj akcję"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie może tego włączać ani wyłączać, więc dotknięcie nic nie robi. Wybierz inną opcję."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Włączanie i wyłączanie dotknięciem działa od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie otwiera kartę."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Przytrzymaj kafelek, aby otworzyć jego kartę."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mały suwak na kafelku"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nie"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Tak, steruj bezpośrednio"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma dla tej encji niczego, co suwak mógłby zmieniać. Wybierz „Nie”."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historia"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" godzina"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelowe tło"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Tło: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń kafelek"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie akcji tej encji z Home Assistant…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant teraz nie odpowiada. Spróbuj ponownie za chwilę."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz akcję"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład toggle, position lub play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj akcji"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono akcji."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje już tej akcji dla tej encji, więc dotknięcie nic nie robi. Wybierz inną."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcjonalnie)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nie ustawiono"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Włączone"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Wyłączone"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant wymaga: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran wykonuje akcje od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie działa jak „Automatycznie”."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład lampa, muzyka lub drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony, tylko tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ikona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono ikony."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bieżące dane"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Połączenie, stan i obsługiwane właściwości"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Odczytywanie…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie bieżącego stanu z HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stan: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Mały suwak: "},{t:4,k:"slider"},{t:3,v:" · Widok: "},{t:4,k:"display"},{t:3,v:" · Rozmiar: "},{t:4,k:"size"},{t:3,v:" · Sterowanie: "},{t:4,k:"control"},{t:3,v:" · Tło: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"tak"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nie"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Domyślne"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj ponownie"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto z górnego paska: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Górny pasek mieści 1 element."},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementy."}]},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementów."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"To już jest na górnym pasku."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Górny pasek"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Górny pasek: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu, działa też bez Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementu"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Po lewej: nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Na przykład: Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej: godzina, sensory lub zegar"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"},{t:3,v:" z górnego paska"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 element"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementy"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj godzinę, datę, zegar analogowy lub encję"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj godzinę, datę lub encję"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie wszystko mieści się obok nazwy: ekran pomija elementy z przerywaną ramką. Usuń jeden z nich albo wybierz krótszą nazwę."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij, aby zmienić kolejność; kliknij element, aby go skonfigurować."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensory, data i zegar analogowy pojawiają się od wersji firmware "},{t:4,k:"version"},{t:3,v:"; do tej aktualizacji ekran pokazuje nazwę oraz zegar, jeśli godzina jest na pasku."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ukryty: teraz nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie mieści się obok nazwy"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Tarcza"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Teraz ukryty: nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Obecnie nie mieści się obok nazwy"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Tak wygląda na ekranie"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mała tarcza z godziną"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Co pokazać"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Ostatnia zmiana” aktualizuje się na samym ekranie: „Przed chwilą”, „5 min temu”, „Wczoraj”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (jak w Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pokazuj"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Tylko gdy aktywne” ukrywa element, dopóki jest wyłączony, zamknięty, poza domem albo równy 0. Przydatne dla otwartych drzwi, pracującej pralki albo tego, kto jest w domu."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Zegar 24-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Zegar 12-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia → Język i region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Dziś: "},{t:4,k:"date"},{t:3,v:". Data pochodzi z zegara samego ekranu."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ W górę"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ W dół"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do górnego paska"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsca"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Już dodano"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Propozycje z Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, obszarze lub encji, np. temperatura albo drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj encji dla górnego paska"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noc"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Tryb ciemny"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto czuwanie"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Czuwanie po"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność czuwania"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Tryb nocny"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Początek"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Koniec"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność nocna"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Wróć do strony 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Po"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Także w czuwaniu"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Przesuwanie stron"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Obrót"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" godz."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" godz. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Trwa jeszcze zapisywanie ustawień innego ekranu. Spróbuj ponownie za chwilę."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron i przesuwanie są wyłączone, więc stronę zmieniają tylko kafelki „Przejdź do strony”."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"strony "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie masz kafelków „Przejdź do strony”."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Kafelki do "},{t:4,k:"pages"},{t:3,v:" są tylko na stronach, do których nie możesz dotrzeć."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Ze "},{t:4,k:"pages"},{t:3,v:" żaden kafelek nie prowadzi z powrotem do strony 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Ten ekran jest offline. Jego ustawienia można zmienić, gdy wróci."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają na ekranie od razu, a gdy zmienisz coś na ekranie, zobaczysz to tutaj."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają od razu. Od wersji firmware 0.2.49 ekran przechowuje je sam."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Ta encja jest wyłączona w Home Assistant albo ekran uruchamia się ponownie."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zmniejsz"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zwiększ"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Rozpoczynanie aktualizacji…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Wgrywanie firmware przez Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie i instalowanie…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Oczekiwanie na powrót ekranu…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie, czy działa stabilnie…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nowy język: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany będą teraz aktualizowane automatycznie w nocy."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatyczne aktualizacje są wyłączone."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualizowanie do firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nie sparowano jeszcze żadnego ekranu. Nowe ekrany dostaną firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranu."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany mają firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aktualizuj 1 ekran"},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Co nowego w firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj automatycznie co noc"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Między 03:00 a 06:00, po jednym ekranie naraz. Przy błędzie zatrzymuje się i zgłasza go w Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Claude Code od razu ją wykrywa."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Uruchom ponownie Claude Code jeden raz, aby znalazł nowy folder umiejętności."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dzięki tej umiejętności Claude pozna ESP Screens. Potem poproś: „Pokaż alert na wszystkich moich ekranach, gdy skrzynka na listy jest pełna”. Claude zna zdarzenia alertów, każde pole, kolor i ikonę."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj dla Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj ponownie"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Zaktualizuj umiejętność"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nie zainstalowano"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Zainstalowano"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowano · dostępna jest nowsza wersja"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Dla Claude Code w Home Assistant. Zapisuje jeden plik w "},{t:4,k:"path"},{t:3,v:"; ponowna instalacja go zastępuje."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz dla claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Prześlij plik zip w Claude: Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko wokół Twoich ekranów."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Moje ekrany"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj ekran albo skompiluj i ponownie zainstaluj firmware ekranu, który już masz."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj przez USB lub Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Język i region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Język ekranów"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Język Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Język Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany używają angielskiego, dopóki język Home Assistant nie będzie dostępny."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · jeszcze niesprawdzony, pomoc mile widziana"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" nie jest jeszcze sprawdzony, pomoc mile widziana: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"jak tłumaczyć"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po zmianie każdy ekran wymaga aktualizacji firmware, po jednej kompilacji na ekran: przyciskiem „Aktualizuj” albo w nocnych aktualizacjach."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format czasu"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24-godzinny"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12-godzinny"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format liczbowy"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Twój profil Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Użyj tych"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Sam edytor używa języka Twojego profilu Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Każdy ekran przejdzie na nowy język przy najbliższej aktualizacji."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Karta na cały ekran uruchamiana z automatyzacji, na jednym ekranie lub na wszystkich. Ściąga zawiera nazwy akcji, pola, ikony i kolory oraz formularz do wypróbowania alertu."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienia na cały ekran, z automatyzacji"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj firmware ekranu"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Wbudowane narzędzie ESPHome CLI korzysta z Twojego własnego profilu (YAML z kluczami) i sekretów. Wybierz profil ekranu, a potem port USB (ekran podłączony do komputera z Home Assistant), "},{t:4,k:"ota"},{t:3,v:" z nazwą hosta albo "},{t:4,k:"download"},{t:3,v:", aby wgrać firmware na ekran z własnego komputera. "},{t:4,k:"check"},{t:3,v:" tylko sprawdza poprawność, "},{t:4,k:"build"},{t:3,v:" kompiluje, "},{t:4,k:"install"},{t:3,v:" wgrywa firmware na ekran. Twoje kafelki w ESP Screens zostają bez zmian. Pierwsza kompilacja trwa kilka minut."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdź"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Tylko kompiluj"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i zainstaluj"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i pobierz"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Brak narzędzia ESPHome CLI. Zaktualizuj aplikację do wersji 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz właściwy profil, a potem port USB, adres IP lub „Pobierz”."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj na"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nie znaleziono jeszcze płytki na komputerze z Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz · wgraj z własnego komputera"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP lub nazwa hosta"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Pobierz "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Wgraj go na ekran przez "},{t:4,k:"esphome_web"},{t:3,v:" w Chrome lub Edge: „Connect”, wybierz port USB ekranu, „Install” i wskaż ten plik. Zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil zapisany."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Chwileczkę…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do pobrania."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens tworzy własny profil ekranu z unikalnymi kluczami i kompiluje firmware. Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant albo pobierz firmware i wgraj go na ekran z własnego komputera."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Jaki masz ekran?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 cala"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 cale"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ekran w salonie"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa urządzenia"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"dostosuj"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Każdy ekran dostaje własny profil z własnymi kluczami. Cztery ekrany? Przejdź przez to cztery razy, za każdym razem z inną nazwą."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Małe litery, cyfry i myślniki. Inna nazwa dla każdego ekranu."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa sieci Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Hasło Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij raz: ESP Screens zapisze to w pliku secrets.yaml ESPHome, a kolejne ekrany użyją tego automatycznie."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"W Twoim pliku secrets.yaml ESPHome wciąż brakuje danych Wi-Fi. ESP Screens uzupełni tylko brakujące wiersze."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Dane Wi-Fi pochodzą z Twojego pliku secrets.yaml ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Plik secrets.yaml w folderze ESPHome nie jest poprawnym YAML. Najpierw popraw plik; nie zostanie nadpisany."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj przez"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Później · tylko zapisz profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant; lista odświeża się sama. Albo wybierz „Pobierz”, aby użyć własnego komputera."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz firmware i wgraj go na ekran z własnego komputera, w Chrome lub Edge. Potem aktualizacje idą przez Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Profil trafi do folderu ESPHome. Zainstalujesz go później w sekcji „Firmware i USB” albo w ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Podłączono więcej niż jedną płytkę: wybierz port tego ekranu."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Raz przez USB; potem wszystko bezprzewodowo."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Kompilacja lub instalacja już trwa ("},{t:4,k:"file"},{t:3,v:"). Poczekaj, aż się zakończy."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"W tej instalacji brakuje narzędzia ESPHome CLI; można tylko zapisać profil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" jest w folderze ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Wgrywanie firmware: "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware gotowy: "},{t:4,k:"name"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware wgrany: "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Kompilacja nieudana"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Instalacja nieudana"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj go później w sekcji „Firmware i USB”: wybierz ten profil, a potem port USB komputera z Home Assistant albo „Pobierz”, aby wgrać firmware na ekran z własnego komputera. Zachowaj klucz API do parowania:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Nie odłączaj jeszcze kabla USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: instalacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: kompilacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Wgraj go na ekran z własnego komputera, a potem sparuj ekran z Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. Teraz sparuj go z Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków. Teraz sparuj go z Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Zobacz log poniżej."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" kablem USB do transmisji danych."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran do komputera"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" w Chrome lub Edge, kliknij „Connect” i wybierz port USB ekranu."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Otwórz "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij „Install”"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Plik zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" To dzieje się poza ESP Screens. Home Assistant wykryje "},{t:4,k:"name"},{t:3,v:" jako urządzenie ESPHome; kliknij „Dodaj”. Nie wykryto? Dodaj ESPHome ręcznie, podając adres IP ekranu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Przejdź do Home Assistant → Ustawienia → Urządzenia oraz usługi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" widoczny powyżej, gdy Home Assistant poprosi o klucz szyfrujący."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wklej klucz API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integracja ESPHome → Konfiguruj → „Zezwól urządzeniu na wykonywanie akcji Home Assistant”. Bez tego ekran widzi wszystko, ale niczym nie steruje."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zezwól na akcje HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Po powrocie do ESP Screens ekran pojawi się na liście po lewej w ciągu około trzydziestu sekund; do tego czasu jest tam opisany jako „jeszcze nie w Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz kafelki."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Ponów"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj kolejny ekran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od nowa"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerty · ściąga"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienie na cały ekran, z automatyzacji."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma akcję "},{t:4,k:"action"},{t:3,v:". Wyświetla ona kartę nad wszystkim, budzi ekran i utrzymuje normalną jasność podświetlenia, dopóki ktoś nie dotknie przycisku albo nie upłynie limit czasu. Sam Home Assistant nie pokazuje dla akcji ESPHome żadnych objaśnień ani list rozwijanych; wszystko, co możesz wypełnić, znajdziesz tutaj."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga wciąż się ładuje; chwileczkę."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś jest przy drzwiach"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Drzwi 3, tylne"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Idę"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sekcje"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Wypróbuj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Twoje ekrany"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"W automatyzacji"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Pola"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ikony"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kolory"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Działanie"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Zdarzenia"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Wskazówki"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij teraz jeden alert z tymi samymi polami, które wysyła automatyzacja. Ekran pokaże kartę, a przy włączonym miganiu mignie podświetleniem."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany (gotowe: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niegotowy"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tytuł"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Podtytuł"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kolor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tekst przycisku"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu (sekundy, 0 czeka na przycisk)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Migaj podświetleniem"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cztery razy, gdy przychodzi alert."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wysyłanie…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekran."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekrany."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Wysłano na ekran "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Wysłano na ekran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Pominięto 1 ekran (offline lub stary firmware)."},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekrany (offline lub stary firmware)."}]},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekranów (offline lub stary firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Puste pola: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Żaden ekran nie mógł go pokazać: sprawdź, czy któryś ekran jest online i ma firmware "},{t:4,k:"version"},{t:3,v:" lub nowszy."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Biały (domyślny)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma własną akcję, której nazwa zawiera nazwę urządzenia. Od wersji firmware "},{t:4,k:"version"},{t:3,v:"; starszy ekran zaktualizuj przyciskiem „Aktualizuj” na liście ekranów."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie sparowano jeszcze żadnego ekranu. Zainstaluj go w sekcji „Nowy ekran”; akcja pojawi się, gdy Home Assistant zobaczy ekran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Potrzebna aktualizacja · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznana nazwa urządzenia · zaktualizuj ekran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Pokaż alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" i wyszukaj "},{t:4,k:"esphome"},{t:3,v:". Wybierz akcję swojego ekranu: Home Assistant opisuje ją po angielsku jako „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj akcję"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nazwa urządzenia"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pyta o wszystkie siedem; to, czego nie używasz, zostaw puste ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", wyłączone)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij pola."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Wolisz YAML? Wybierz "},{t:4,k:"edit"},{t:3,v:" w menu akcji i wklej poniższy przykład."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Przykład dla"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"ekranu (jeszcze niesparowanego)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj w YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany naraz"}},text:{t:0,b:{t:2,i:[{t:3,v:"Wywołaj zdarzenie "},{t:4,k:"show"},{t:3,v:" z tymi samymi polami, a ESP Screens przekaże alert każdemu ekranowi, który jest online, także ekranom dodanym później. "},{t:4,k:"dismiss"},{t:3,v:" usuwa go wszędzie. W automatyzacji dodaj akcję "},{t:4,k:"event"},{t:3,v:" albo wybierz "},{t:4,k:"edit"},{t:3,v:" i wklej przykład. Pomiń pola, których nie używasz. ESP Screens musi przy tym działać."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom zdarzenie ręcznie"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst jest dowolny; limit liczy się w bajtach, a litera ze znakiem diakrytycznym (np. ą, ł, ś) liczy się jako dwa. Co się nie zmieści, kończy się wielokropkiem (tytuł) lub zostaje pominięte (podtytuł)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Pole"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Co robi"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Przykład"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"liczba"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"wł. / wył."}},entity:{t:0,b:{t:2,i:[{t:3}],s:"encja"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" B · Guition "},{t:4,k:"guition"},{t:3,v:" B"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"od 0 do 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:", na przykład "},{t:4,k:"example"},{t:3,v:". Działa też "},{t:4,k:"mdi"},{t:3,v:" i kod szesnastkowy ("},{t:4,k:"hex"},{t:3,v:"). Firmware zawiera tylko te ikony; każda inna nazwa pokazuje trójkąt ostrzegawczy. Kliknij ikonę, aby skopiować jej nazwę."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Przydatne do powiadomień"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie lub opisie…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Dostępne też: ikony sterowania i pogody"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Kopiuj "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Brak ikony dla „"},{t:4,k:"query"},{t:3,v:"”. Nieznane nazwy pokazują trójkąt ostrzegawczy ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:". To pastelowe odcienie kafelków, z ciemnym tekstem. Pusta lub nieznana nazwa daje białą kartę. Kliknij, aby skopiować."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Alert od razu budzi przyciemniony lub wygaszony ekran i pojawia się nad każdą stroną, każdą otwartą kartą światła i warstwą czuwania."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Budzi ekran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dopóki karta jest widoczna, podświetlenie ma normalną jasność. Czuwanie i godziny nocne czekają. Po naciśnięciu przycisku zwykły czas do czuwania biegnie od nowa."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Świeci do naciśnięcia przycisku."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" czeka na przycisk bez względu na to, jak długo to trwa. Przy "},{t:4,k:"minute"},{t:3,v:" karta znika po minucie, ale przycisk zamyka ją wcześniej."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" miga podświetleniem cztery razy, gdy przychodzi alert (około sekundy), a potem zostawia ekran włączony."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Miganie."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Nowy alert zastępuje bieżący; alerty się nie kumulują. Zastąpiony alert zgłasza się jako "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zastępowanie."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" usuwa kartę, na przykład gdy drzwi są już otwarte. Gdy nie ma alertu, ta akcja nic nie robi."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zdalne zamykanie."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" nic nie robi; kartę zamyka tylko przycisk. Dzięki temu dotknięcie budzące ekran nigdy przypadkiem nie zamknie alertu."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie obok karty"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Każde zakończenie alertu wywołuje zdarzenie "},{t:4,k:"event"},{t:3,v:" z polami "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (nazwa urządzenia) i "},{t:4,k:"device_id"},{t:3,v:", które dodaje Home Assistant. Zobaczysz je w sekcji Ustawienia → Narzędzia → Zdarzenia."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Kiedy"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Czekanie, aż ktoś naciśnie przycisk"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Użyj "},{t:4,k:"bold"},{t:3,v:": pomarańczowy dla drzwi, czerwony dla dymu lub wody, zielony dla „gotowe”. Tekst zawsze pozostaje ciemny i czytelny."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"osobnego koloru dla każdego rodzaju powiadomienia"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tytuł niech będzie "},{t:4,k:"bold"},{t:3,v:"; ekran pokazuje około dwudziestu znaków w jednym wierszu, a dłuższy tytuł kończy wielokropkiem. Szczegóły umieść w podtytule."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"krótki"}},button:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" zamienia powiadomienie w pytanie: „Idę”, „Widzę”, „Wyłącz”. Zdarzenie powie Ci potem, kto odpowiedział."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"Własny tekst przycisku"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Alert, który sam się rozwiązuje (drzwi się otwierają, ktoś wyjmuje pranie), zamknij w tej samej automatyzacji akcją "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany? Wywołaj "},{t:4,k:"event"},{t:3,v:" raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Wolisz "},{t:4,k:"bold"},{t:3,v:" o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"poprosić Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś idzie do drzwi."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Zaawansowane · lokalne nadpisanie"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Nadpisanie YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ten mały plik należy do Ciebie. Jest wczytywany po wspólnym pakiecie ekranu i zostaje na miejscu, gdy ESP Screens się aktualizuje. Zmieniaj tu szczegóły sprzętu, na przykład model wyświetlacza."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Co można bezpiecznie zmieniać?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Wyświetlacz, ekran dotykowy, substitutions, piny i inne szczegóły urządzenia. Nazwa, Wi-Fi, API, OTA i odnośniki do pakietów pozostają zarządzane przez aplikację."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktywne"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do dołączenia"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokalne nadpisanie YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Użyj przykładu"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyść"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 znak"},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaków"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wiersz"},{t:2,i:[{t:4,k:"n"},{t:3,v:" wiersze"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wierszy"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i sprawdź"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz nadpisanie"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany tutaj zadziałają przy następnej kompilacji."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz raz, aby dołączyć ten plik do profilu."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie i zapisywanie…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Nadpisanie zostaje zachowane podczas aktualizacji firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano nadpisanie YAML."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. ESPHome sprawdza cały profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sprawdza profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sprawdza profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Cały profil jest poprawny. Można bezpiecznie kompilować i instalować."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome odrzucił cały profil. Pełny log znajdziesz w sekcji „Firmware i USB”."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić obecny tekst przykładem?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Wczytano przykład. Zapisz go, kiedy zechcesz."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyścić lokalne nadpisanie?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Po zapisaniu nadpisanie będzie puste."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Dom"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznany"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Medium"}},high:{t:0,b:{t:2,i:[{t:3}],s:"High"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"pośredni"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"skupiony nawiew"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"rozproszony nawiew"}},top:{t:0,b:{t:2,i:[{t:3}],s:"nawiew górny"}},on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},both:{t:0,b:{t:2,i:[{t:3}],s:"ruch w obu płaszczyznach"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"ruch pionowy"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"ruch poziomy"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"nd"}},{t:0,b:{t:2,i:[{t:3}],s:"pn"}},{t:0,b:{t:2,i:[{t:3}],s:"wt"}},{t:0,b:{t:2,i:[{t:3}],s:"śr"}},{t:0,b:{t:2,i:[{t:3}],s:"cz"}},{t:0,b:{t:2,i:[{t:3}],s:"pt"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pt-8eheIFes.js b/screen_manager/app/static/assets/pt-8eheIFes.js new file mode 100644 index 0000000..f149c13 --- /dev/null +++ b/screen_manager/app/static/assets/pt-8eheIFes.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Desfazer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconhecido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Alterações não guardadas"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos & serviços"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A guardar…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Ler dados atuais"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" resultado. Continue a escrever para filtrar."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Continue a escrever para filtrar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fechar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Alterar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"A carregar…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Voltar"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Novo ecrã"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou. Recarregue a página e tente novamente."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A chave API está selecionada. Copie-a com Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON do layout copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O JSON do layout está selecionado. Copie-o com Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da ação copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da ação está selecionado. Copie-o com Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O YAML está selecionado. Copie-o com Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome do ícone copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome do ícone está selecionado. Copie-o com Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Cor vazia copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A cor vazia está selecionada. Copie-a com Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da cor copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da cor está selecionado. Copie-o com Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestão inacessível · a tentar novamente…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Ligado ao Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"A ligar novamente ao Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recarregar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Na fila para atualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Atualização para "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome com este nome de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novidades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registo completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"O endereço IP, só desta vez; o firmware novo passa a comunicá-lo sozinho."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalado, mas ainda não está no Home Assistant. Adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e ative «Permitir que o dispositivo execute ações do Home Assistant» em Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descarregado; ainda não está no Home Assistant. Instale-o no ecrã com o ESPHome Web e depois adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e permita as ações do Home Assistant em Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Ainda não está no Home Assistant. Já instalou o firmware? Adicione o dispositivo ESPHome em Configuração → Dispositivos & serviços e depois permita as ações do Home Assistant em Configurar. Ainda não? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar chave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar a este ecrã"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guia rápido e um alerta de teste"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada para guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar este ecrã"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Faz piscar a retroiluminação e mostra um cartão"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa de um firmware mais recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar e copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Procurar ecrãs, entidades, ações…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Sem resultados. Escreva parte do nome de um ecrã, entidade ou ação."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um dos seus ecrãs à esquerda para alterar os mosaicos, a barra superior e as definições."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Comece com um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ligue um CYD ou um Guition por USB à máquina do Home Assistant. Perfil, firmware e primeira instalação ficam feitos de uma só vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novo ecrã"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tem alterações não guardadas. Abrir outro ecrã mesmo assim?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado por uma cópia do layout do outro ecrã?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado pelo importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O seu ecrã está a ser atualizado."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" está a ser atualizado."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ecrã está a ser atualizado."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. A sua alteração mais recente ainda não foi enviada: prima Guardar e enviar outra vez."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" pisca e mostra um cartão durante alguns segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · as alterações ficam guardadas"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições do ecrã"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado para o ecrã"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tudo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faz piscar o ecrã"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa do firmware 0.2.31 ou mais recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"do Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar layout de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum outro ecrã"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avançado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Não há espaço para este mosaico na página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Não há nenhuma página livre para um mosaico de página inteira. Liberte primeiro uma página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã já tem um mosaico que leva à página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado. Prima Guardar e enviar quando estiver bem."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importado. Prima Guardar e enviar quando estiver bem."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Isso não é JSON. Exporte primeiro um layout ou cole um de outro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este ficheiro não tem mosaicos. Era esperado um layout exportado do ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a primeira luz, cena ou dispositivo a partir da biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toque na barra superior ou num mosaico para o alterar. Arraste para mover; largue na página seguinte para criar uma nova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Os espaços vazios e as posições fixas funcionam a partir do firmware 0.2.26. Até essa atualização, este ecrã (firmware "},{t:4,k:"firmware"},{t:3,v:") sobe os mosaicos para o primeiro espaço livre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Layout do ecrã"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" página"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"As páginas seguintes sobem uma posição"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Espaço vazio. Clique para adicionar aqui um mosaico ou arraste um para cá."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Espaço vazio "},{t:4,k:"slot"},{t:3,v:" na página "},{t:4,k:"page"},{t:3,v:": adicione aqui o próximo mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"O próximo mosaico fica aqui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vazio"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidade"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome, dispositivo ou divisão…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar uma entidade"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tudo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luzes"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinhas"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coberturas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Divisão"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas as divisões"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar adicionadas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar o que já está neste ecrã"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que está aqui já está neste ecrã."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada. Experimente outro nome, divisão ou filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico; atualize o firmware para ter 48."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos; atualize o firmware para ter 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para uma página ou toque em + para adicionar ao primeiro espaço livre. ⌘K procura em tudo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinha"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cobertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoa"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Câmara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagem"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidade"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"padrão"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"relógio analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"trajetória do sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"duplo"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página inteira"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome no ecrã"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (do Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predefinido)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o ícone escolhido a partir do firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Leva à página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vazia)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Os mosaicos de navegação precisam do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã não tem página "},{t:4,k:"page"},{t:3,v:", por isso um toque abre a última página. Escolha outra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Um toque no mosaico abre essa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Apresentação"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Relógio analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Trajetória do sol"}},live:{t:0,b:{t:2,i:[{t:3}],s:"Imagem ao vivo"}},live_hint:{t:0,b:{t:2,i:[{t:3}],s:"Uma pequena imagem da câmara no lugar do ícone, atualizada ao ritmo abaixo enquanto a página está no ecrã. Um toque continua a abri-la em ecrã inteiro."}},live_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Uma imagem ao vivo precisa do firmware 0.2.77 ou mais recente: prima Atualizar no ecrã depois de guardar."}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação."}}},refresh:{label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},seconds:{t:0,b:{t:2,i:[{t:3,v:"A cada "},{t:4,k:"n"},{t:3,v:" s"}]}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamanho"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Largura dupla"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira: um botão grande na cor do próprio mosaico; em baixo ficam um deslizador, controlos ou um gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nova página"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo direto no mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não oferece este controlo para esta entidade, por isso fica vazio no ecrã. Escolha outro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na parte de baixo do mosaico de página inteira; um toque em qualquer outro sítio funciona como definido abaixo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À direita do mosaico de largura dupla, como as linhas no Home Assistant. Tocar no nome funciona como definido abaixo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o controlo direto a partir do firmware 0.2.19; até lá, o mosaico fica como estava."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ao tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir controlo"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Só ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ligar / desligar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Executar ação"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não consegue ligar e desligar isto, por isso um toque não faz nada. Escolha outra opção."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã liga e desliga isto a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque abre o respetivo cartão."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantenha o mosaico premido para abrir o respetivo cartão."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo deslizante pequeno no mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Não"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sim, controlo direto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem nada que um controlo deslizante possa alterar nesta entidade. Escolha Não."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Histórico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fundo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fundo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:" da página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de seta: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"A perguntar ao Home Assistant que ações tem esta entidade…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não está a responder neste momento. Tente novamente daqui a pouco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha uma ação"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo alternar, posição ou reproduzir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma ação"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma ação encontrada."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant já não oferece esta ação para esta entidade, por isso um toque não faz nada. Escolha outra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Não definido"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ativado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desativado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"O Home Assistant precisa de "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã executa ações a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo candeeiro, música ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone, só texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ícone: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhum ícone encontrado."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dados atuais"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ligação, estado e propriedades suportadas"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"A ler…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"A obter o estado atual do HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Controlo deslizante pequeno: "},{t:4,k:"slider"},{t:3,v:" · Apresentação: "},{t:4,k:"display"},{t:3,v:" · Tamanho: "},{t:4,k:"size"},{t:3,v:" · Controlo: "},{t:4,k:"control"},{t:3,v:" · Fundo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sim"}},no:{t:0,b:{t:2,i:[{t:3}],s:"não"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinido"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Ler novamente"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido da barra superior: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Na barra superior cabe "},{t:4,k:"n"},{t:3,v:" elemento."}]},{t:2,i:[{t:3,v:"Na barra superior cabem "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Isto já está na barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã; também funciona sem o Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Esquerda: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por exemplo: Sala de estar"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Direita: hora, sensores ou um relógio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; setas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"},{t:3,v:" da barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a hora, a data, o relógio analógico ou uma entidade"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar hora, data ou uma entidade"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nem tudo cabe ao lado do nome: o ecrã omite os elementos tracejados. Remova um ou escolha um nome mais curto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para reordenar; toque num elemento para o configurar."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Os sensores, a data e o relógio analógico aparecem a partir do firmware "},{t:4,k:"version"},{t:3,v:"; até essa atualização, este ecrã mostra o nome e, se a hora estiver na barra, o relógio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: agora não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Não cabe ao lado do nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto neste momento: não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"De momento não cabe ao lado do nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Assim fica no ecrã"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador pequeno com a hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"O que mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Última alteração» continua a contar no próprio ecrã: «Agora mesmo», «Há 5 min», «Ontem»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como no Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Apenas quando ativo» oculta o elemento enquanto estiver desligado, fechado, ausente ou a 0. Útil para uma porta aberta, uma máquina de lavar a funcionar ou quem está em casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 24 horas · altere em "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 12 horas · altere em "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições → Idioma e região"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoje: "},{t:4,k:"date"},{t:3,v:". A data segue o relógio do próprio ecrã."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descer"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar à barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaço usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaços usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Já adicionado"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugestões do Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Uma entidade"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure por nome, divisão ou entidade, p. ex. temperatura ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma entidade para a barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noite"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo escuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Espera automática"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Espera após"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho em espera"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noturno"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Início"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fim"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho noturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Voltar à página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Após"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Também em espera"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botões de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotação"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da manhã"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da tarde"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Ainda se estão a guardar as definições do outro ecrã. Tente novamente daqui a pouco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Os botões de página e o deslizar estão desativados, por isso só os mosaicos «Ir para a página» mudam de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"a página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"as páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Não tem mosaicos «Ir para a página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Os mosaicos para "},{t:4,k:"pages"},{t:3,v:" só estão em páginas a que não consegue chegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:", nenhum mosaico leva de volta à página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Este ecrã está offline. Poderá alterar as definições quando voltar."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato no ecrã e aparecem aqui quando são feitas lá."}},app:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato. Com o firmware 0.2.49, o próprio ecrã guarda-as."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidade está desativada no Home Assistant ou o ecrã está a reiniciar."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": mais"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"A iniciar a atualização…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"A gravar o firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"A compilar e a instalar…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"À espera que o ecrã volte…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"A verificar se se mantém estável…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Novo idioma: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs vão passar a atualizar-se automaticamente à noite."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"As atualizações automáticas estão desativadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A atualizar para o firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Ainda não há nenhum ecrã emparelhado. Os novos ecrãs recebem o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs têm o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Atualizar "},{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:3,v:"Atualizar os "},{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novidades do firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar automaticamente todas as noites"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre as 03:00 e as 06:00, um ecrã de cada vez. Para se houver um erro e comunica-o no Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. O Claude Code deteta-a de imediato."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. Reinicie o Claude Code uma vez para que encontre a nova pasta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ensine o Claude a usar o ESP Screens e depois peça: «Mostra um alerta em todos os meus ecrãs quando a caixa do correio estiver cheia.» O Claude conhece os eventos de alerta e todos os campos, cores e ícones."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para o Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novamente"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar a habilidade"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Não instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · há uma versão mais recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para o Claude Code no Home Assistant. Escreve um ficheiro em "},{t:4,k:"path"},{t:3,v:"; instalar novamente substitui-o."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar para o claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carregue o zip no Claude, em Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que rodeia os seus ecrãs."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Os meus ecrãs"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Adicione um ecrã, ou compile e reinstale o firmware de um que já tenha."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma e região"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma dos ecrãs"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma do Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma do Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs usam inglês até o idioma do Home Assistant estar disponível."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · ainda não revisto, ajuda bem-vinda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ainda não foi revisto; toda a ajuda é bem-vinda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"como traduzir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Depois de uma alteração, cada ecrã precisa de uma atualização de firmware, uma compilação por ecrã: com o respetivo botão Atualizar ou nas atualizações noturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formatação numérica"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"O seu perfil do Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estes"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"O próprio editor segue o idioma do seu perfil do Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada ecrã passa a usar o novo idioma na próxima atualização."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Um cartão sobre todo o ecrã a partir de uma automatização, num ecrã ou em todos. O guia rápido tem os nomes das ações, os campos, os ícones e as cores, e um formulário para experimentar um alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificações em ecrã inteiro, a partir de uma automatização"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar o firmware dos ecrãs"}},intro:{t:0,b:{t:2,i:[{t:3,v:"A CLI do ESPHome integrada usa o seu próprio perfil (YAML com chaves) e os seus segredos. Escolha o perfil do ecrã e depois uma porta USB (ecrã ligado à máquina do Home Assistant), "},{t:4,k:"ota"},{t:3,v:" com o nome do anfitrião, ou "},{t:4,k:"download"},{t:3,v:" para instalar o firmware no ecrã a partir do seu próprio computador. "},{t:4,k:"check"},{t:3,v:" só valida, "},{t:4,k:"build"},{t:3,v:" compila e "},{t:4,k:"install"},{t:3,v:" instala o firmware no ecrã. Os seus mosaicos ficam como estão no ESP Screens. A primeira compilação demora alguns minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verificar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Só compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e descarregar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome. Atualize a app para a versão 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha o perfil pretendido e depois uma porta USB, um endereço IP ou Descarregar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar em"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · ainda não foi encontrada nenhuma placa na máquina do Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar · instalar a partir do seu próprio computador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP ou nome do anfitrião"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descarregar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instale-o no ecrã com o "},{t:4,k:"esphome_web"},{t:3,v:" no Chrome ou no Edge: Connect, escolha a porta USB do ecrã, Install e selecione este ficheiro. Contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Um momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para descarregar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"O ESP Screens cria o perfil próprio do ecrã com chaves únicas e compila o firmware. Ligue o ecrã com um cabo USB de dados à máquina onde corre o Home Assistant, ou descarregue o firmware e instale-o no ecrã a partir do seu próprio computador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Que ecrã tem?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 polegadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 polegadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã da sala"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada ecrã tem o seu próprio perfil com as suas próprias chaves. Quatro ecrãs? Faça isto quatro vezes com um nome diferente."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, algarismos e hífenes. Um nome diferente para cada ecrã."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome da rede Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Palavra-passe da rede Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Preencha só uma vez: o ESP Screens guarda isto no secrets.yaml do ESPHome e os ecrãs seguintes usam-no automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Ainda faltam os dados de Wi-Fi no seu secrets.yaml do ESPHome. O ESP Screens só preenche as linhas em falta."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"A rede Wi-Fi vem do seu secrets.yaml do ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"O secrets.yaml na pasta do ESPHome não é YAML válido. Corrija primeiro o ficheiro; não vai ser substituído."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar através de"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Mais tarde · só guardar o perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã com um cabo USB de dados à máquina do Home Assistant; a lista atualiza-se sozinha. Ou escolha Descarregar para usar o seu próprio computador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregue o firmware e instale-o no ecrã a partir do seu próprio computador, no Chrome ou no Edge. Depois disso, as atualizações são feitas por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"O perfil fica na pasta do ESPHome. Pode instalar mais tarde através de Firmware e USB ou a partir do ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Há mais do que uma placa ligada: escolha a porta deste ecrã."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Uma vez por USB; depois disso, tudo é sem fios."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Já está a decorrer uma compilação ou instalação ("},{t:4,k:"file"},{t:3,v:"). Aguarde que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome nesta instalação; só é possível guardar o perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está na pasta do ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"A gravar o firmware em "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"O firmware para "},{t:4,k:"name"},{t:3,v:" está pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"O firmware já está em "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"A compilação falhou"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"A instalação falhou"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o mais tarde a partir de Firmware e USB: escolha este perfil e depois a porta USB da máquina do Home Assistant, ou Descarregar para instalar o firmware no ecrã a partir do seu próprio computador. Guarde a chave API para o emparelhamento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Não desligue ainda o cabo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a instalação continua e volta a encontrá-la em Novo ecrã."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a compilação continua e volta a encontrá-la em Novo ecrã."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o no ecrã a partir do seu próprio computador e depois emparelhe o ecrã com o Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. Emparelhe-o agora com o Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes. Emparelhe-o agora com o Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulte o registo abaixo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" com um cabo USB de dados."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã ao seu computador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no Chrome ou no Edge, clique em Connect e escolha a porta USB do ecrã."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abra o "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clique em Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"O ficheiro contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Isto acontece fora do ESP Screens. O Home Assistant descobre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; clique em Adicionar. Não foi descoberto? Adicione o ESPHome manualmente com o endereço IP do ecrã."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vá ao Home Assistant → Configuração → Dispositivos & serviços."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" acima quando o Home Assistant pedir a chave de encriptação."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cole a chave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integração ESPHome → Configurar → «Permitir que o dispositivo execute ações do Home Assistant». Sem isto, o ecrã vê tudo mas não controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permita as ações do HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De volta ao ESP Screens, o ecrã aparece na lista à esquerda em cerca de trinta segundos; até lá, aparece aí como «ainda não está no Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Escolha os seus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registo do ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Tentar novamente"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar outro ecrã"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recomeçar"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guia rápido"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Uma notificação em ecrã inteiro, a partir de uma automatização."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a ação "},{t:4,k:"action"},{t:3,v:". Coloca um cartão por cima de tudo, acorda o ecrã e mantém a retroiluminação no brilho normal até alguém tocar no botão ou o tempo limite acabar. O próprio Home Assistant não mostra explicações nem listas pendentes para as ações do ESPHome; tudo o que pode preencher está aqui."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"O guia rápido ainda está a carregar; um momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Está alguém à porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, traseira"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Já vou"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secções"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Experimente"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Os seus ecrãs"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Numa automatização"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Os campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ícones"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Cores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Dicas"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envie agora um alerta, com os mesmos campos que uma automatização envia. O ecrã mostra o cartão e, com a intermitência ativada, faz piscar a retroiluminação."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs (prontos: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · não está pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Cor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto do botão"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite (segundos; 0 espera pelo botão)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fazer piscar a retroiluminação"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatro vezes quando o alerta chega."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"A enviar…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviado para o ecrã."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã ignorado (offline ou firmware antigo)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs ignorados (offline ou firmware antigo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Deixados vazios: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ecrã o conseguiu mostrar: verifique se há um ecrã online com o firmware "},{t:4,k:"version"},{t:3,v:" ou mais recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Branco (predefinido)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a sua própria ação, com o nome do dispositivo. A partir do firmware "},{t:4,k:"version"},{t:3,v:"; atualize um ecrã mais antigo com o respetivo botão Atualizar em Ecrãs."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Ainda não há nenhum ecrã emparelhado. Instale um através de Novo ecrã; a ação aparece assim que o Home Assistant vir o ecrã."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Atualização necessária · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo desconhecido · atualize o ecrã"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Clique em "},{t:4,k:"add"},{t:3,v:" e procure "},{t:4,k:"esphome"},{t:3,v:". Escolha a ação do seu ecrã: o Home Assistant chama-lhe «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar ação"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome do dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" O Home Assistant pede os sete; deixe vazio o que não usar ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desativado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Preencha os campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefere YAML? Escolha "},{t:4,k:"edit"},{t:3,v:" na ação e cole o exemplo abaixo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"um ecrã (ainda não emparelhado)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar em YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs de uma vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispare o evento "},{t:4,k:"show"},{t:3,v:" com os mesmos campos e o ESP Screens passa o alerta a todos os ecrãs online, incluindo os que adicionar mais tarde. "},{t:4,k:"dismiss"},{t:3,v:" remove-o em todo o lado. Numa automatização, adicione a ação "},{t:4,k:"event"},{t:3,v:" ou cole o exemplo em "},{t:4,k:"edit"},{t:3,v:". Omita os campos que não usar. Para isto, o ESP Screens tem de estar em execução."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Dispara evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"O texto é livre; o limite é em bytes e uma letra acentuada conta como dois. O que não couber termina em reticências (título) ou é descartado (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"O que faz"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ativado / desativado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidade"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:", por exemplo "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" e o código hexadecimal ("},{t:4,k:"hex"},{t:3,v:") também funcionam. O firmware só inclui estes ícones; qualquer outro nome mostra o triângulo de aviso. Toque num ícone para copiar o nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Úteis para notificações"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome ou descrição…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Também disponíveis: ícones de controlo e de meteorologia"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ícone para «"},{t:4,k:"query"},{t:3,v:"». Os nomes desconhecidos mostram o triângulo de aviso ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:". São os tons pastel dos mosaicos, com texto escuro. Vazio ou desconhecido dá o cartão branco. Toque para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta acorda de imediato um ecrã com brilho reduzido ou apagado e aparece por cima de todas as páginas, de todos os cartões de luz abertos e da camada de espera."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acorda o ecrã."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Enquanto o cartão estiver visível, a retroiluminação mantém o brilho normal. A espera automática e o modo noturno ficam em pausa. Depois de premir o botão, o tempo de espera normal recomeça."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aceso até premir o botão."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera pelo botão, demore o que demorar. Com "},{t:4,k:"minute"},{t:3,v:", o cartão desaparece ao fim de um minuto, mas o botão fecha-o mais cedo."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" faz piscar a retroiluminação quatro vezes quando o alerta chega (cerca de um segundo) e depois deixa o ecrã ligado."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Intermitência."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta novo substitui o atual; não se acumulam. O alerta substituído é reportado como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Substituição."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" remove o cartão, por exemplo se a porta já estiver aberta. Sem alerta, essa ação não faz nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fecho remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" não faz nada; só o botão o fecha. Assim, um toque para acordar o ecrã nunca descarta o alerta por acidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fora do cartão"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Sempre que um alerta termina, é disparado o evento "},{t:4,k:"event"},{t:3,v:" com "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (o nome do dispositivo) e o "},{t:4,k:"device_id"},{t:3,v:" que o Home Assistant acrescenta. Visível em Configuração → Ferramentas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar que alguém prima o botão"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use uma "},{t:4,k:"bold"},{t:3,v:": laranja para a porta, vermelho para fumo ou água, verde para «concluído». O texto fica sempre escuro e legível."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"cor por tipo de notificação"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantenha o título "},{t:4,k:"bold"},{t:3,v:"; um ecrã mostra cerca de vinte caracteres numa linha e termina um título mais longo com reticências. Coloque os detalhes no subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"curto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Um "},{t:4,k:"bold"},{t:3,v:" transforma a notificação numa pergunta: «Já vou», «Visto», «Desligar». Depois, o evento diz-lhe quem respondeu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botão personalizado"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para um alerta que se resolve sozinho (a porta abre-se, alguém tira a roupa da máquina), feche-o na mesma automatização com "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs? Dispare "},{t:4,k:"event"},{t:3,v:" uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Prefere "},{t:4,k:"bold"},{t:3,v:" que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedir ao Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campainha: mostra o alerta e espera que alguém prima o botão."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Vem alguém à porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avançado · personalização local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeno ficheiro é seu. É carregado depois do pacote partilhado dos ecrãs e mantém-se quando o ESP Screens é atualizado. Altere aqui detalhes específicos do hardware, como o modelo do ecrã."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"O que é seguro alterar?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"As secções display, touchscreen e substitutions, os pinos e outros detalhes do dispositivo. O nome, a rede Wi-Fi, a API, a OTA e as ligações aos pacotes continuam a ser geridos pelo ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Ativo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para associar"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar exemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" carácter"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" linha"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" linhas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e verificar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"As alterações feitas aqui aplicam-se na próxima compilação."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarde uma vez para associar este ficheiro ao perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A verificar e a guardar…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O YAML personalizado mantém-se nas atualizações de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ESPHome está a verificar o perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome está a verificar o perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"O ESPHome está a verificar o perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"O perfil completo é válido. Pode compilar e instalar com segurança."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome rejeitou o perfil completo. Consulte Firmware e USB para ver o registo completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o texto atual pelo exemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo carregado. Guarde-o quando estiver pronto."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar o YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"O YAML personalizado ficará vazio quando guardar."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconhecido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Médio"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Alto"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Meio"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Concentrado"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Difuso"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Total"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Ambos"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Vertical"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Horizontal"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"sg"}},{t:0,b:{t:2,i:[{t:3}],s:"te"}},{t:0,b:{t:2,i:[{t:3}],s:"qu"}},{t:0,b:{t:2,i:[{t:3}],s:"qi"}},{t:0,b:{t:2,i:[{t:3}],s:"sx"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pt-BhcOiGzq.js b/screen_manager/app/static/assets/pt-BhcOiGzq.js deleted file mode 100644 index 803c3fd..0000000 --- a/screen_manager/app/static/assets/pt-BhcOiGzq.js +++ /dev/null @@ -1 +0,0 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Desfazer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconhecido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Alterações não guardadas"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos & serviços"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A guardar…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Ler dados atuais"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" resultado. Continue a escrever para filtrar."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Continue a escrever para filtrar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fechar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Alterar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"A carregar…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Voltar"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Novo ecrã"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou. Recarregue a página e tente novamente."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A chave API está selecionada. Copie-a com Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON do layout copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O JSON do layout está selecionado. Copie-o com Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da ação copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da ação está selecionado. Copie-o com Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O YAML está selecionado. Copie-o com Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome do ícone copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome do ícone está selecionado. Copie-o com Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Cor vazia copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A cor vazia está selecionada. Copie-a com Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da cor copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da cor está selecionado. Copie-o com Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestão inacessível · a tentar novamente…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Ligado ao Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"A ligar novamente ao Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recarregar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Na fila para atualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Atualização para "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome com este nome de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novidades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registo completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"O endereço IP, só desta vez; o firmware novo passa a comunicá-lo sozinho."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalado, mas ainda não está no Home Assistant. Adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e ative «Permitir que o dispositivo execute ações do Home Assistant» em Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descarregado; ainda não está no Home Assistant. Instale-o no ecrã com o ESPHome Web e depois adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e permita as ações do Home Assistant em Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Ainda não está no Home Assistant. Já instalou o firmware? Adicione o dispositivo ESPHome em Configuração → Dispositivos & serviços e depois permita as ações do Home Assistant em Configurar. Ainda não? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar chave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar a este ecrã"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guia rápido e um alerta de teste"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada para guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar este ecrã"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Faz piscar a retroiluminação e mostra um cartão"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa de um firmware mais recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar e copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Procurar ecrãs, entidades, ações…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Sem resultados. Escreva parte do nome de um ecrã, entidade ou ação."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um dos seus ecrãs à esquerda para alterar os mosaicos, a barra superior e as definições."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Comece com um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ligue um CYD ou um Guition por USB à máquina do Home Assistant. Perfil, firmware e primeira instalação ficam feitos de uma só vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novo ecrã"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tem alterações não guardadas. Abrir outro ecrã mesmo assim?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado por uma cópia do layout do outro ecrã?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado pelo importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O seu ecrã está a ser atualizado."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" está a ser atualizado."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ecrã está a ser atualizado."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. A sua alteração mais recente ainda não foi enviada: prima Guardar e enviar outra vez."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" pisca e mostra um cartão durante alguns segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · as alterações ficam guardadas"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições do ecrã"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado para o ecrã"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tudo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faz piscar o ecrã"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa do firmware 0.2.31 ou mais recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"do Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar layout de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum outro ecrã"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avançado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Não há espaço para este mosaico na página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Não há nenhuma página livre para um mosaico de página inteira. Liberte primeiro uma página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã já tem um mosaico que leva à página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado. Prima Guardar e enviar quando estiver bem."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importado. Prima Guardar e enviar quando estiver bem."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Isso não é JSON. Exporte primeiro um layout ou cole um de outro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este ficheiro não tem mosaicos. Era esperado um layout exportado do ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a primeira luz, cena ou dispositivo a partir da biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toque na barra superior ou num mosaico para o alterar. Arraste para mover; largue na página seguinte para criar uma nova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Os espaços vazios e as posições fixas funcionam a partir do firmware 0.2.26. Até essa atualização, este ecrã (firmware "},{t:4,k:"firmware"},{t:3,v:") sobe os mosaicos para o primeiro espaço livre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Layout do ecrã"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" página"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"As páginas seguintes sobem uma posição"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Espaço vazio. Clique para adicionar aqui um mosaico ou arraste um para cá."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Espaço vazio "},{t:4,k:"slot"},{t:3,v:" na página "},{t:4,k:"page"},{t:3,v:": adicione aqui o próximo mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"O próximo mosaico fica aqui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vazio"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidade"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome, dispositivo ou divisão…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar uma entidade"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tudo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luzes"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinhas"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coberturas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Divisão"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas as divisões"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar adicionadas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar o que já está neste ecrã"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que está aqui já está neste ecrã."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada. Experimente outro nome, divisão ou filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico; atualize o firmware para ter 48."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos; atualize o firmware para ter 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para uma página ou toque em + para adicionar ao primeiro espaço livre. ⌘K procura em tudo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinha"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cobertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoa"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Câmara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagem"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidade"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"padrão"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"relógio analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"trajetória do sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"duplo"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página inteira"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome no ecrã"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (do Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predefinido)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o ícone escolhido a partir do firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Leva à página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vazia)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Os mosaicos de navegação precisam do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã não tem página "},{t:4,k:"page"},{t:3,v:", por isso um toque abre a última página. Escolha outra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Um toque no mosaico abre essa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Apresentação"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Relógio analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Trajetória do sol"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamanho"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Largura dupla"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira: um botão grande que se ilumina enquanto está ligado; em baixo fica um controlo deslizante, controlos ou um gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nova página"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo direto no mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não oferece este controlo para esta entidade, por isso fica vazio no ecrã. Escolha outro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na parte de baixo do mosaico de página inteira; um toque em qualquer outro sítio funciona como definido abaixo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À direita do mosaico de largura dupla, como as linhas no Home Assistant. Tocar no nome funciona como definido abaixo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o controlo direto a partir do firmware 0.2.19; até lá, o mosaico fica como estava."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ao tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir controlo"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Só ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ligar / desligar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Executar ação"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não consegue ligar e desligar isto, por isso um toque não faz nada. Escolha outra opção."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã liga e desliga isto a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque abre o respetivo cartão."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantenha o mosaico premido para abrir o respetivo cartão."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo deslizante pequeno no mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Não"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sim, controlo direto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem nada que um controlo deslizante possa alterar nesta entidade. Escolha Não."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Histórico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fundo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fundo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:" da página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de seta: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"A perguntar ao Home Assistant que ações tem esta entidade…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não está a responder neste momento. Tente novamente daqui a pouco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha uma ação"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo alternar, posição ou reproduzir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma ação"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma ação encontrada."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant já não oferece esta ação para esta entidade, por isso um toque não faz nada. Escolha outra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Não definido"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ativado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desativado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"O Home Assistant precisa de "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã executa ações a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo candeeiro, música ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone, só texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ícone: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhum ícone encontrado."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dados atuais"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ligação, estado e propriedades suportadas"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"A ler…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"A obter o estado atual do HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Controlo deslizante pequeno: "},{t:4,k:"slider"},{t:3,v:" · Apresentação: "},{t:4,k:"display"},{t:3,v:" · Tamanho: "},{t:4,k:"size"},{t:3,v:" · Controlo: "},{t:4,k:"control"},{t:3,v:" · Fundo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sim"}},no:{t:0,b:{t:2,i:[{t:3}],s:"não"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinido"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Ler novamente"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido da barra superior: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Na barra superior cabe "},{t:4,k:"n"},{t:3,v:" elemento."}]},{t:2,i:[{t:3,v:"Na barra superior cabem "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Isto já está na barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã; também funciona sem o Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Esquerda: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por exemplo: Sala de estar"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Direita: hora, sensores ou um relógio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; setas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"},{t:3,v:" da barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a hora, a data, o relógio analógico ou uma entidade"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar hora, data ou uma entidade"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nem tudo cabe ao lado do nome: o ecrã omite os elementos tracejados. Remova um ou escolha um nome mais curto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para reordenar; toque num elemento para o configurar."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Os sensores, a data e o relógio analógico aparecem a partir do firmware "},{t:4,k:"version"},{t:3,v:"; até essa atualização, este ecrã mostra o nome e, se a hora estiver na barra, o relógio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: agora não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Não cabe ao lado do nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto neste momento: não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"De momento não cabe ao lado do nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Assim fica no ecrã"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador pequeno com a hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"O que mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Última alteração» continua a contar no próprio ecrã: «Agora mesmo», «Há 5 min», «Ontem»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como no Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Apenas quando ativo» oculta o elemento enquanto estiver desligado, fechado, ausente ou a 0. Útil para uma porta aberta, uma máquina de lavar a funcionar ou quem está em casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 24 horas · altere em "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 12 horas · altere em "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições → Idioma e região"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoje: "},{t:4,k:"date"},{t:3,v:". A data segue o relógio do próprio ecrã."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descer"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar à barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaço usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaços usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Já adicionado"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugestões do Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Uma entidade"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure por nome, divisão ou entidade, p. ex. temperatura ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma entidade para a barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noite"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo escuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Espera automática"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Espera após"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho em espera"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noturno"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Início"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fim"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho noturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Voltar à página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Após"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Também em espera"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botões de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotação"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da manhã"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da tarde"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Ainda se estão a guardar as definições do outro ecrã. Tente novamente daqui a pouco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Os botões de página e o deslizar estão desativados, por isso só os mosaicos «Ir para a página» mudam de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"a página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"as páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Não tem mosaicos «Ir para a página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Os mosaicos para "},{t:4,k:"pages"},{t:3,v:" só estão em páginas a que não consegue chegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:", nenhum mosaico leva de volta à página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Este ecrã está offline. Poderá alterar as definições quando voltar."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato no ecrã e aparecem aqui quando são feitas lá."}},app:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato. Com o firmware 0.2.49, o próprio ecrã guarda-as."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidade está desativada no Home Assistant ou o ecrã está a reiniciar."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": mais"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"A iniciar a atualização…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"A gravar o firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"A compilar e a instalar…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"À espera que o ecrã volte…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"A verificar se se mantém estável…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Novo idioma: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs vão passar a atualizar-se automaticamente à noite."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"As atualizações automáticas estão desativadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A atualizar para o firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Ainda não há nenhum ecrã emparelhado. Os novos ecrãs recebem o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs têm o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Atualizar "},{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:3,v:"Atualizar os "},{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novidades do firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar automaticamente todas as noites"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre as 03:00 e as 06:00, um ecrã de cada vez. Para se houver um erro e comunica-o no Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. O Claude Code deteta-a de imediato."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. Reinicie o Claude Code uma vez para que encontre a nova pasta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ensine o Claude a usar o ESP Screens e depois peça: «Mostra um alerta em todos os meus ecrãs quando a caixa do correio estiver cheia.» O Claude conhece os eventos de alerta e todos os campos, cores e ícones."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para o Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novamente"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar a habilidade"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Não instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · há uma versão mais recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para o Claude Code no Home Assistant. Escreve um ficheiro em "},{t:4,k:"path"},{t:3,v:"; instalar novamente substitui-o."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar para o claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carregue o zip no Claude, em Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que rodeia os seus ecrãs."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Os meus ecrãs"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Adicione um ecrã, ou compile e reinstale o firmware de um que já tenha."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma e região"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma dos ecrãs"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma do Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma do Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs usam inglês até o idioma do Home Assistant estar disponível."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · ainda não revisto, ajuda bem-vinda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ainda não foi revisto; toda a ajuda é bem-vinda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"como traduzir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Depois de uma alteração, cada ecrã precisa de uma atualização de firmware, uma compilação por ecrã: com o respetivo botão Atualizar ou nas atualizações noturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formatação numérica"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"O seu perfil do Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estes"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"O próprio editor segue o idioma do seu perfil do Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada ecrã passa a usar o novo idioma na próxima atualização."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Um cartão sobre todo o ecrã a partir de uma automatização, num ecrã ou em todos. O guia rápido tem os nomes das ações, os campos, os ícones e as cores, e um formulário para experimentar um alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificações em ecrã inteiro, a partir de uma automatização"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar o firmware dos ecrãs"}},intro:{t:0,b:{t:2,i:[{t:3,v:"A CLI do ESPHome integrada usa o seu próprio perfil (YAML com chaves) e os seus segredos. Escolha o perfil do ecrã e depois uma porta USB (ecrã ligado à máquina do Home Assistant), "},{t:4,k:"ota"},{t:3,v:" com o nome do anfitrião, ou "},{t:4,k:"download"},{t:3,v:" para instalar o firmware no ecrã a partir do seu próprio computador. "},{t:4,k:"check"},{t:3,v:" só valida, "},{t:4,k:"build"},{t:3,v:" compila e "},{t:4,k:"install"},{t:3,v:" instala o firmware no ecrã. Os seus mosaicos ficam como estão no ESP Screens. A primeira compilação demora alguns minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verificar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Só compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e descarregar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome. Atualize a app para a versão 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha o perfil pretendido e depois uma porta USB, um endereço IP ou Descarregar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar em"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · ainda não foi encontrada nenhuma placa na máquina do Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar · instalar a partir do seu próprio computador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP ou nome do anfitrião"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descarregar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instale-o no ecrã com o "},{t:4,k:"esphome_web"},{t:3,v:" no Chrome ou no Edge: Connect, escolha a porta USB do ecrã, Install e selecione este ficheiro. Contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Um momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para descarregar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"O ESP Screens cria o perfil próprio do ecrã com chaves únicas e compila o firmware. Ligue o ecrã com um cabo USB de dados à máquina onde corre o Home Assistant, ou descarregue o firmware e instale-o no ecrã a partir do seu próprio computador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Que ecrã tem?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 polegadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 polegadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã da sala"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada ecrã tem o seu próprio perfil com as suas próprias chaves. Quatro ecrãs? Faça isto quatro vezes com um nome diferente."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, algarismos e hífenes. Um nome diferente para cada ecrã."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome da rede Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Palavra-passe da rede Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Preencha só uma vez: o ESP Screens guarda isto no secrets.yaml do ESPHome e os ecrãs seguintes usam-no automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Ainda faltam os dados de Wi-Fi no seu secrets.yaml do ESPHome. O ESP Screens só preenche as linhas em falta."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"A rede Wi-Fi vem do seu secrets.yaml do ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"O secrets.yaml na pasta do ESPHome não é YAML válido. Corrija primeiro o ficheiro; não vai ser substituído."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar através de"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Mais tarde · só guardar o perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã com um cabo USB de dados à máquina do Home Assistant; a lista atualiza-se sozinha. Ou escolha Descarregar para usar o seu próprio computador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregue o firmware e instale-o no ecrã a partir do seu próprio computador, no Chrome ou no Edge. Depois disso, as atualizações são feitas por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"O perfil fica na pasta do ESPHome. Pode instalar mais tarde através de Firmware e USB ou a partir do ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Há mais do que uma placa ligada: escolha a porta deste ecrã."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Uma vez por USB; depois disso, tudo é sem fios."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Já está a decorrer uma compilação ou instalação ("},{t:4,k:"file"},{t:3,v:"). Aguarde que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome nesta instalação; só é possível guardar o perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está na pasta do ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"A gravar o firmware em "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"O firmware para "},{t:4,k:"name"},{t:3,v:" está pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"O firmware já está em "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"A compilação falhou"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"A instalação falhou"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o mais tarde a partir de Firmware e USB: escolha este perfil e depois a porta USB da máquina do Home Assistant, ou Descarregar para instalar o firmware no ecrã a partir do seu próprio computador. Guarde a chave API para o emparelhamento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Não desligue ainda o cabo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a instalação continua e volta a encontrá-la em Novo ecrã."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a compilação continua e volta a encontrá-la em Novo ecrã."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o no ecrã a partir do seu próprio computador e depois emparelhe o ecrã com o Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. Emparelhe-o agora com o Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes. Emparelhe-o agora com o Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulte o registo abaixo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" com um cabo USB de dados."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã ao seu computador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no Chrome ou no Edge, clique em Connect e escolha a porta USB do ecrã."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abra o "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clique em Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"O ficheiro contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Isto acontece fora do ESP Screens. O Home Assistant descobre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; clique em Adicionar. Não foi descoberto? Adicione o ESPHome manualmente com o endereço IP do ecrã."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vá ao Home Assistant → Configuração → Dispositivos & serviços."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" acima quando o Home Assistant pedir a chave de encriptação."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cole a chave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integração ESPHome → Configurar → «Permitir que o dispositivo execute ações do Home Assistant». Sem isto, o ecrã vê tudo mas não controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permita as ações do HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De volta ao ESP Screens, o ecrã aparece na lista à esquerda em cerca de trinta segundos; até lá, aparece aí como «ainda não está no Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Escolha os seus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registo do ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Tentar novamente"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar outro ecrã"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recomeçar"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guia rápido"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Uma notificação em ecrã inteiro, a partir de uma automatização."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a ação "},{t:4,k:"action"},{t:3,v:". Coloca um cartão por cima de tudo, acorda o ecrã e mantém a retroiluminação no brilho normal até alguém tocar no botão ou o tempo limite acabar. O próprio Home Assistant não mostra explicações nem listas pendentes para as ações do ESPHome; tudo o que pode preencher está aqui."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"O guia rápido ainda está a carregar; um momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Está alguém à porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, traseira"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Já vou"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secções"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Experimente"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Os seus ecrãs"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Numa automatização"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Os campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ícones"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Cores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Dicas"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envie agora um alerta, com os mesmos campos que uma automatização envia. O ecrã mostra o cartão e, com a intermitência ativada, faz piscar a retroiluminação."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs (prontos: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · não está pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Cor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto do botão"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite (segundos; 0 espera pelo botão)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fazer piscar a retroiluminação"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatro vezes quando o alerta chega."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"A enviar…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviado para o ecrã."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã ignorado (offline ou firmware antigo)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs ignorados (offline ou firmware antigo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Deixados vazios: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ecrã o conseguiu mostrar: verifique se há um ecrã online com o firmware "},{t:4,k:"version"},{t:3,v:" ou mais recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Branco (predefinido)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a sua própria ação, com o nome do dispositivo. A partir do firmware "},{t:4,k:"version"},{t:3,v:"; atualize um ecrã mais antigo com o respetivo botão Atualizar em Ecrãs."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Ainda não há nenhum ecrã emparelhado. Instale um através de Novo ecrã; a ação aparece assim que o Home Assistant vir o ecrã."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Atualização necessária · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo desconhecido · atualize o ecrã"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Clique em "},{t:4,k:"add"},{t:3,v:" e procure "},{t:4,k:"esphome"},{t:3,v:". Escolha a ação do seu ecrã: o Home Assistant chama-lhe «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar ação"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome do dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" O Home Assistant pede os sete; deixe vazio o que não usar ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desativado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Preencha os campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefere YAML? Escolha "},{t:4,k:"edit"},{t:3,v:" na ação e cole o exemplo abaixo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"um ecrã (ainda não emparelhado)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar em YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs de uma vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispare o evento "},{t:4,k:"show"},{t:3,v:" com os mesmos campos e o ESP Screens passa o alerta a todos os ecrãs online, incluindo os que adicionar mais tarde. "},{t:4,k:"dismiss"},{t:3,v:" remove-o em todo o lado. Numa automatização, adicione a ação "},{t:4,k:"event"},{t:3,v:" ou cole o exemplo em "},{t:4,k:"edit"},{t:3,v:". Omita os campos que não usar. Para isto, o ESP Screens tem de estar em execução."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Dispara evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"O texto é livre; o limite é em bytes e uma letra acentuada conta como dois. O que não couber termina em reticências (título) ou é descartado (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"O que faz"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ativado / desativado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidade"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:", por exemplo "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" e o código hexadecimal ("},{t:4,k:"hex"},{t:3,v:") também funcionam. O firmware só inclui estes ícones; qualquer outro nome mostra o triângulo de aviso. Toque num ícone para copiar o nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Úteis para notificações"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome ou descrição…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Também disponíveis: ícones de controlo e de meteorologia"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ícone para «"},{t:4,k:"query"},{t:3,v:"». Os nomes desconhecidos mostram o triângulo de aviso ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:". São os tons pastel dos mosaicos, com texto escuro. Vazio ou desconhecido dá o cartão branco. Toque para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta acorda de imediato um ecrã com brilho reduzido ou apagado e aparece por cima de todas as páginas, de todos os cartões de luz abertos e da camada de espera."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acorda o ecrã."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Enquanto o cartão estiver visível, a retroiluminação mantém o brilho normal. A espera automática e o modo noturno ficam em pausa. Depois de premir o botão, o tempo de espera normal recomeça."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aceso até premir o botão."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera pelo botão, demore o que demorar. Com "},{t:4,k:"minute"},{t:3,v:", o cartão desaparece ao fim de um minuto, mas o botão fecha-o mais cedo."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" faz piscar a retroiluminação quatro vezes quando o alerta chega (cerca de um segundo) e depois deixa o ecrã ligado."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Intermitência."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta novo substitui o atual; não se acumulam. O alerta substituído é reportado como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Substituição."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" remove o cartão, por exemplo se a porta já estiver aberta. Sem alerta, essa ação não faz nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fecho remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" não faz nada; só o botão o fecha. Assim, um toque para acordar o ecrã nunca descarta o alerta por acidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fora do cartão"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Sempre que um alerta termina, é disparado o evento "},{t:4,k:"event"},{t:3,v:" com "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (o nome do dispositivo) e o "},{t:4,k:"device_id"},{t:3,v:" que o Home Assistant acrescenta. Visível em Configuração → Ferramentas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar que alguém prima o botão"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use uma "},{t:4,k:"bold"},{t:3,v:": laranja para a porta, vermelho para fumo ou água, verde para «concluído». O texto fica sempre escuro e legível."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"cor por tipo de notificação"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantenha o título "},{t:4,k:"bold"},{t:3,v:"; um ecrã mostra cerca de vinte caracteres numa linha e termina um título mais longo com reticências. Coloque os detalhes no subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"curto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Um "},{t:4,k:"bold"},{t:3,v:" transforma a notificação numa pergunta: «Já vou», «Visto», «Desligar». Depois, o evento diz-lhe quem respondeu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botão personalizado"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para um alerta que se resolve sozinho (a porta abre-se, alguém tira a roupa da máquina), feche-o na mesma automatização com "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs? Dispare "},{t:4,k:"event"},{t:3,v:" uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Prefere "},{t:4,k:"bold"},{t:3,v:" que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedir ao Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campainha: mostra o alerta e espera que alguém prima o botão."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Vem alguém à porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avançado · personalização local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeno ficheiro é seu. É carregado depois do pacote partilhado dos ecrãs e mantém-se quando o ESP Screens é atualizado. Altere aqui detalhes específicos do hardware, como o modelo do ecrã."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"O que é seguro alterar?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"As secções display, touchscreen e substitutions, os pinos e outros detalhes do dispositivo. O nome, a rede Wi-Fi, a API, a OTA e as ligações aos pacotes continuam a ser geridos pelo ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Ativo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para associar"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar exemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" carácter"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" linha"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" linhas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e verificar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"As alterações feitas aqui aplicam-se na próxima compilação."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarde uma vez para associar este ficheiro ao perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A verificar e a guardar…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O YAML personalizado mantém-se nas atualizações de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ESPHome está a verificar o perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome está a verificar o perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"O ESPHome está a verificar o perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"O perfil completo é válido. Pode compilar e instalar com segurança."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome rejeitou o perfil completo. Consulte Firmware e USB para ver o registo completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o texto atual pelo exemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo carregado. Guarde-o quando estiver pronto."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar o YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"O YAML personalizado ficará vazio quando guardar."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconhecido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}},climate_fan:{auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},low:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},medium:{t:0,b:{t:2,i:[{t:3}],s:"Médio"}},high:{t:0,b:{t:2,i:[{t:3}],s:"Alto"}},middle:{t:0,b:{t:2,i:[{t:3}],s:"Meio"}},focus:{t:0,b:{t:2,i:[{t:3}],s:"Concentrado"}},diffuse:{t:0,b:{t:2,i:[{t:3}],s:"Difuso"}},top:{t:0,b:{t:2,i:[{t:3}],s:"Total"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}}},climate_swing:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},both:{t:0,b:{t:2,i:[{t:3}],s:"Ambos"}},vertical:{t:0,b:{t:2,i:[{t:3}],s:"Vertical"}},horizontal:{t:0,b:{t:2,i:[{t:3}],s:"Horizontal"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"sg"}},{t:0,b:{t:2,i:[{t:3}],s:"te"}},{t:0,b:{t:2,i:[{t:3}],s:"qu"}},{t:0,b:{t:2,i:[{t:3}],s:"qi"}},{t:0,b:{t:2,i:[{t:3}],s:"sx"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/index.html b/screen_manager/app/static/index.html index 7556dd5..3d5e396 100644 --- a/screen_manager/app/static/index.html +++ b/screen_manager/app/static/index.html @@ -5,8 +5,8 @@ ESP Screens - - + + diff --git a/screen_manager/config.yaml b/screen_manager/config.yaml index df563ba..9fee211 100644 --- a/screen_manager/config.yaml +++ b/screen_manager/config.yaml @@ -1,5 +1,5 @@ name: ESP Screen Manager -version: "0.2.90" +version: "0.2.91" slug: esp_screen_manager description: Choose tiles for your CYD and Guition touchscreen, without reflashing. url: https://github.com/MaxGramser/homeassistant_espscreen diff --git a/screen_manager/translations/de.json b/screen_manager/translations/de.json index 7031623..f1e4362 100644 --- a/screen_manager/translations/de.json +++ b/screen_manager/translations/de.json @@ -448,6 +448,7 @@ "builtin_action": "Eine eingebaute Karte kann keine Aktion ausführen.", "no_mini_slider": "Diese Entität unterstützt keinen kleinen Schieberegler.", "history_hours": "Verlauf: Wähle 1, 6 oder 24 Stunden.", + "refresh": "Livebild: alle 15 oder 30 Sekunden auffrischen.", "watch_or_slider": "Wähle „Großer Wert“ oder den kleinen Schieberegler.", "no_direct_control": "Diese Entität unterstützt diese direkte Steuerung nicht.", "position": "Ungültige Kachelposition; lade die Verwaltungsseite neu.", @@ -739,6 +740,10 @@ "camera": { "label": "Kamera", "help": "Eine Kamera- oder Bild-Entität. Ein Guition mit Firmware 0.2.57+ zeigt ihr Bild von diesem Moment oben über die ganze Breite der Karte; ein Tippen darauf öffnet die Kamera im Vollbild. Andere Bildschirme zeigen die Meldung ohne Bild. Nur über das Ereignis esp_screens_show_alert." + }, + "action": { + "label": "Aktion", + "help": "Eine Home-Assistant-Aktion wie script.open_gate oder light.turn_off, einmal ausgeführt, sobald die Taste auf einem der Bildschirme gedrückt wird. `data` gibt ihre Felder an (entity_id, brightness, ...). Bei einem Timeout oder einem neuen Alarm bleibt sie aus. Nur über das Ereignis esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Wettervorhersage", "graph": "Diagramm", "sunpath": "Sonnenbahn", + "live": "Livebild", + "live_hint": "Ein kleines Bild der Kamera anstelle des Symbols, im Takt unten aufgefrischt, solange die Seite zu sehen ist. Ein Tipp öffnet sie weiterhin bildschirmfüllend.", + "live_needs_firmware": "Ein Livebild braucht Firmware 0.2.77 oder neuer: Nach dem Speichern beim Bildschirm auf Aktualisieren drücken.", "no_graph": "Home Assistant hat für diese Entität keine Zahlen, daher bleibt das Diagramm leer. Wähle eine andere Anzeige.", "no_forecast": "Dieser Wetterdienst hat in Home Assistant keine Tagesvorhersage. Wähle eine andere Anzeige." }, + "refresh": { + "label": "Auffrischen", + "seconds": "Alle {n} s" + }, "size": { "label": "Größe", "single": "Normal", "wide": "Doppelt breit", "full": "Ganze Seite", - "full_hint": "Ganze Seite: eine große Taste, die im eingeschalteten Zustand leuchtet; am unteren Rand sitzen ein Schieberegler, Bedienelemente oder ein Diagramm.", + "full_hint": "Ganze Seite: eine große Taste in der eigenen Farbe der Kachel; am unteren Rand sitzen ein Schieberegler, Bedienelemente oder ein Diagramm.", "needs_firmware": "Eine ganzseitige Kachel braucht Firmware 0.2.62: Drücke zuerst beim Bildschirm auf „Aktualisieren“." }, "page": { diff --git a/screen_manager/translations/en.json b/screen_manager/translations/en.json index 8c8e6b5..aa2ee95 100644 --- a/screen_manager/translations/en.json +++ b/screen_manager/translations/en.json @@ -448,6 +448,7 @@ "builtin_action": "A built-in card can't perform an action.", "no_mini_slider": "This entity doesn't support a mini-slider.", "history_hours": "History: choose 1, 6, or 24 hours.", + "refresh": "Live picture: refresh every 15 or 30 seconds.", "watch_or_slider": "Choose large value or mini-slider.", "no_direct_control": "This entity doesn't support that direct control.", "position": "Invalid tile position; refresh the management page.", @@ -739,6 +740,10 @@ "camera": { "label": "Camera", "help": "A camera or image entity. A Guition with firmware 0.2.57+ shows its picture of that moment across the top of the card; a tap on it opens the camera full screen. Other screens show the alert without it. Only through the esp_screens_show_alert event." + }, + "action": { + "label": "Action", + "help": "A Home Assistant action, such as script.open_gate or light.turn_off, performed once when the button is pressed on any screen. `data` gives its fields (entity_id, brightness, ...). A timeout or a new alert leaves it unperformed. Only through the esp_screens_show_alert event." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Weather forecast", "graph": "Graph", "sunpath": "Sun path", + "live": "Live picture", + "live_hint": "A small picture of the camera in the icon's place, refreshed at the pace below while the page is on screen. A tap still opens it full screen.", + "live_needs_firmware": "A live picture needs firmware 0.2.77 or newer: press Update on the screen after saving.", "no_graph": "Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display.", "no_forecast": "This weather service has no daily forecast in Home Assistant. Choose another display." }, + "refresh": { + "label": "Refresh", + "seconds": "Every {n} s" + }, "size": { "label": "Size", "single": "Normal", "wide": "Double-width", "full": "Full page", - "full_hint": "Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it.", + "full_hint": "Full page: one big button in the tile's own colour; a slider, controls or a graph sit at the bottom of it.", "needs_firmware": "A full-page tile needs firmware 0.2.62: press Update on the screen first." }, "page": { diff --git a/screen_manager/translations/es.json b/screen_manager/translations/es.json index 7c16d5d..20864d6 100644 --- a/screen_manager/translations/es.json +++ b/screen_manager/translations/es.json @@ -448,6 +448,7 @@ "builtin_action": "Una tarjeta integrada no puede realizar acciones.", "no_mini_slider": "Esta entidad no admite un control deslizante pequeño.", "history_hours": "Historial: elige 1, 6 o 24 horas.", + "refresh": "Imagen en vivo: actualiza cada 15 o 30 segundos.", "watch_or_slider": "Elige valor grande o control deslizante pequeño.", "no_direct_control": "Esta entidad no admite ese control directo.", "position": "Posición de mosaico no válida; recarga la página de gestión.", @@ -739,6 +740,10 @@ "camera": { "label": "Cámara", "help": "Una entidad de cámara o de imagen. Un Guition con firmware 0.2.57+ muestra su imagen de ese momento en la parte superior de la tarjeta; al tocarla se abre la cámara a pantalla completa. Las demás pantallas muestran la alerta sin ella. Solo mediante el evento esp_screens_show_alert." + }, + "action": { + "label": "Acción", + "help": "Una acción de Home Assistant, como script.open_gate o light.turn_off, realizada una vez cuando se pulsa el botón en cualquier pantalla. `data` da sus campos (entity_id, brightness, ...). Un tiempo agotado o una nueva alerta la deja sin realizar. Solo mediante el evento esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Previsión del tiempo", "graph": "Gráfico", "sunpath": "Recorrido del sol", + "live": "Imagen en vivo", + "live_hint": "Una imagen pequeña de la cámara en el lugar del icono, actualizada al ritmo de abajo mientras la página está en pantalla. Un toque la sigue abriendo a pantalla completa.", + "live_needs_firmware": "Una imagen en vivo necesita el firmware 0.2.77 o más reciente: pulsa Actualizar en la pantalla después de guardar.", "no_graph": "Home Assistant no tiene valores numéricos para esta entidad, así que el gráfico queda vacío. Elige otra presentación.", "no_forecast": "Este servicio meteorológico no tiene previsión diaria en Home Assistant. Elige otra presentación." }, + "refresh": { + "label": "Actualizar", + "seconds": "Cada {n} s" + }, "size": { "label": "Tamaño", "single": "Normal", "wide": "Doble ancho", "full": "Página completa", - "full_hint": "Página completa: un botón grande que se ilumina mientras está encendido; en la parte inferior va un control deslizante, unos controles o un gráfico.", + "full_hint": "Página completa: un botón grande en el color del propio mosaico; en la parte inferior va un control deslizante, unos controles o un gráfico.", "needs_firmware": "Un mosaico de página completa necesita el firmware 0.2.62: pulsa antes Actualizar en la lista de pantallas." }, "page": { diff --git a/screen_manager/translations/fr.json b/screen_manager/translations/fr.json index e867b2a..3affd5e 100644 --- a/screen_manager/translations/fr.json +++ b/screen_manager/translations/fr.json @@ -448,6 +448,7 @@ "builtin_action": "Une tuile intégrée à l'écran ne peut pas effectuer d'action.", "no_mini_slider": "Cette entité ne prend pas en charge le petit curseur.", "history_hours": "Historique : choisissez 1, 6 ou 24 heures.", + "refresh": "Image en direct : rafraîchir toutes les 15 ou 30 secondes.", "watch_or_slider": "Choisissez grande valeur ou petit curseur.", "no_direct_control": "Cette entité ne prend pas en charge cette commande directe.", "position": "Position de tuile non valide ; actualisez la page de gestion.", @@ -739,6 +740,10 @@ "camera": { "label": "Caméra", "help": "Une entité caméra ou image. Un Guition avec le firmware 0.2.57+ affiche son image du moment en haut de la carte ; la toucher ouvre la caméra en plein écran. Les autres écrans affichent l'alerte sans elle. Uniquement via l'événement esp_screens_show_alert." + }, + "action": { + "label": "Action", + "help": "Une action Home Assistant, comme script.open_gate ou light.turn_off, exécutée une fois quand le bouton est pressé sur n'importe quel écran. `data` donne ses champs (entity_id, brightness, ...). Un délai dépassé ou une nouvelle alerte la laisse sans effet. Uniquement via l'événement esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Prévisions météo", "graph": "Graphique", "sunpath": "Course du soleil", + "live": "Image en direct", + "live_hint": "Une petite image de la caméra à la place de l'icône, rafraîchie au rythme ci-dessous tant que la page est affichée. Un appui l'ouvre toujours en plein écran.", + "live_needs_firmware": "Une image en direct demande le firmware 0.2.77 ou plus récent : appuyez sur Mettre à jour sur l'écran après l'enregistrement.", "no_graph": "Home Assistant n'a pas de valeurs numériques pour cette entité : le graphique reste donc vide. Choisissez un autre affichage.", "no_forecast": "Ce service météo n'a pas de prévisions journalières dans Home Assistant. Choisissez un autre affichage." }, + "refresh": { + "label": "Rafraîchir", + "seconds": "Toutes les {n} s" + }, "size": { "label": "Taille", "single": "Normale", "wide": "Double largeur", "full": "Pleine page", - "full_hint": "Pleine page : un grand bouton qui s'illumine quand l'entité est allumée ; un curseur, des commandes ou un graphique se placent en bas.", + "full_hint": "Pleine page : un grand bouton dans la couleur de la tuile ; un curseur, des commandes ou un graphique se placent en bas.", "needs_firmware": "Une tuile pleine page nécessite le firmware 0.2.62 : appuyez d'abord sur Mettre à jour pour cet écran." }, "page": { diff --git a/screen_manager/translations/it.json b/screen_manager/translations/it.json index ddd5617..30f37d5 100644 --- a/screen_manager/translations/it.json +++ b/screen_manager/translations/it.json @@ -448,6 +448,7 @@ "builtin_action": "Un riquadro integrato nello schermo non può eseguire un'azione.", "no_mini_slider": "Questa entità non supporta il piccolo cursore.", "history_hours": "Storico: scegli 1, 6 o 24 ore.", + "refresh": "Immagine dal vivo: aggiorna ogni 15 o 30 secondi.", "watch_or_slider": "Scegli valore grande o piccolo cursore.", "no_direct_control": "Questa entità non supporta questo controllo diretto.", "position": "Posizione del riquadro non valida; ricarica la pagina di gestione.", @@ -739,6 +740,10 @@ "camera": { "label": "Telecamera", "help": "Un'entità telecamera o immagine. Un Guition con firmware 0.2.57+ mostra la sua immagine di quel momento in cima alla scheda; un tocco apre la telecamera a schermo intero. Gli altri schermi mostrano l'avviso senza immagine. Solo tramite l'evento esp_screens_show_alert." + }, + "action": { + "label": "Azione", + "help": "Un'azione di Home Assistant, come script.open_gate o light.turn_off, eseguita una volta quando il pulsante viene premuto su uno qualsiasi degli schermi. `data` fornisce i suoi campi (entity_id, brightness, ...). Un timeout o un nuovo avviso la lascia non eseguita. Solo tramite l'evento esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Previsioni meteo", "graph": "Grafico", "sunpath": "Percorso del sole", + "live": "Immagine dal vivo", + "live_hint": "Una piccola immagine della telecamera al posto dell'icona, aggiornata al ritmo qui sotto finché la pagina è sullo schermo. Un tocco la apre ancora a schermo intero.", + "live_needs_firmware": "Un'immagine dal vivo richiede il firmware 0.2.77 o più recente: premi Aggiorna sullo schermo dopo il salvataggio.", "no_graph": "Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione.", "no_forecast": "Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione." }, + "refresh": { + "label": "Aggiorna", + "seconds": "Ogni {n} s" + }, "size": { "label": "Dimensione", "single": "Normale", "wide": "Larghezza doppia", "full": "Pagina intera", - "full_hint": "Pagina intera: un grande pulsante che si illumina quando è acceso; in basso trovano posto un cursore, i comandi o un grafico.", + "full_hint": "Pagina intera: un grande pulsante nel colore del riquadro; in basso trovano posto un cursore, i comandi o un grafico.", "needs_firmware": "Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo." }, "page": { diff --git a/screen_manager/translations/nl.json b/screen_manager/translations/nl.json index 51e4453..0b63f08 100644 --- a/screen_manager/translations/nl.json +++ b/screen_manager/translations/nl.json @@ -448,6 +448,7 @@ "builtin_action": "Een ingebouwde kaart kan geen actie uitvoeren.", "no_mini_slider": "Deze entiteit ondersteunt geen kleine slider.", "history_hours": "Geschiedenis: kies 1, 6 of 24 uur.", + "refresh": "Livebeeld: ververs elke 15 of 30 seconden.", "watch_or_slider": "Kies een grote waarde of een kleine slider, niet allebei.", "no_direct_control": "Deze entiteit ondersteunt die directe bediening niet.", "position": "Ongeldige tegelpositie; vernieuw de beheerpagina.", @@ -739,6 +740,10 @@ "camera": { "label": "Camera", "help": "Een camera- of afbeeldingsentiteit. Een Guition met firmware 0.2.57+ toont het beeld van dat moment bovenaan de kaart; een tik erop opent de camera schermvullend. Andere schermen tonen de alert zonder beeld. Alleen via de gebeurtenis esp_screens_show_alert." + }, + "action": { + "label": "Actie", + "help": "Een Home Assistant-actie, zoals script.open_gate of light.turn_off, eenmaal uitgevoerd zodra de knop op een van de schermen wordt ingedrukt. `data` geeft de velden (entity_id, brightness, ...). Bij een time-out of een nieuwe alert blijft hij achterwege. Alleen via de gebeurtenis esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Weersverwachting", "graph": "Grafiek", "sunpath": "Zonnebaan", + "live": "Livebeeld", + "live_hint": "Een klein beeld van de camera op de plek van het icoon, ververst in het tempo hieronder zolang de pagina in beeld is. Een tik opent hem nog steeds schermvullend.", + "live_needs_firmware": "Een livebeeld heeft firmware 0.2.77 of nieuwer nodig: druk na het opslaan op Bijwerken bij het scherm.", "no_graph": "Home Assistant heeft geen getallen voor deze entiteit, dus de grafiek blijft leeg. Kies een andere weergave.", "no_forecast": "Deze weerdienst heeft geen dagverwachting in Home Assistant. Kies een andere weergave." }, + "refresh": { + "label": "Verversen", + "seconds": "Elke {n} s" + }, "size": { "label": "Grootte", "single": "Normaal", "wide": "Dubbelbreed", "full": "Hele pagina", - "full_hint": "Hele pagina: één grote knop die oplicht zolang hij aan is; onderaan staat een slider, bediening of grafiek.", + "full_hint": "Hele pagina: één grote knop in de eigen kleur van de tile; onderaan staat een slider, bediening of grafiek.", "needs_firmware": "Een paginavullende tegel heeft firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken." }, "page": { diff --git a/screen_manager/translations/pl.json b/screen_manager/translations/pl.json index 7ce46e6..db654de 100644 --- a/screen_manager/translations/pl.json +++ b/screen_manager/translations/pl.json @@ -448,6 +448,7 @@ "builtin_action": "Wbudowana karta nie może wykonać akcji.", "no_mini_slider": "Ta encja nie obsługuje małego suwaka.", "history_hours": "Historia: wybierz 1, 6 lub 24 godziny.", + "refresh": "Obraz na żywo: odświeżaj co 15 lub 30 sekund.", "watch_or_slider": "Wybierz dużą wartość albo mały suwak.", "no_direct_control": "Ta encja nie obsługuje takiego bezpośredniego sterowania.", "position": "Nieprawidłowa pozycja kafelka; odśwież stronę zarządzania.", @@ -739,6 +740,10 @@ "camera": { "label": "Kamera", "help": "Encja kamery lub obrazu. Guition z firmware 0.2.57+ pokazuje jej zdjęcie z tej chwili u góry karty; dotknięcie go otwiera kamerę na pełnym ekranie. Inne ekrany pokazują alert bez zdjęcia. Tylko przez zdarzenie esp_screens_show_alert." + }, + "action": { + "label": "Akcja", + "help": "Akcja Home Assistant, na przykład script.open_gate lub light.turn_off, wykonywana raz po naciśnięciu przycisku na dowolnym ekranie. `data` podaje jej pola (entity_id, brightness, ...). Po upływie czasu lub przy nowym alercie pozostaje niewykonana. Tylko przez zdarzenie esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Prognoza pogody", "graph": "Wykres", "sunpath": "Tor słońca", + "live": "Obraz na żywo", + "live_hint": "Mały obraz z kamery w miejscu ikony, odświeżany w tempie poniżej, dopóki strona jest na ekranie. Dotknięcie nadal otwiera go na pełnym ekranie.", + "live_needs_firmware": "Obraz na żywo wymaga firmware 0.2.77 lub nowszego: po zapisaniu naciśnij Aktualizuj przy ekranie.", "no_graph": "Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok.", "no_forecast": "Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok." }, + "refresh": { + "label": "Odświeżanie", + "seconds": "Co {n} s" + }, "size": { "label": "Rozmiar", "single": "Normalny", "wide": "Podwójna szerokość", "full": "Cała strona", - "full_hint": "Cała strona: jeden duży przycisk, który świeci, gdy encja jest włączona; suwak, przyciski lub wykres są na jego dole.", + "full_hint": "Cała strona: jeden duży przycisk w kolorze kafelka; suwak, przyciski lub wykres są na jego dole.", "needs_firmware": "Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie." }, "page": { diff --git a/screen_manager/translations/pt.json b/screen_manager/translations/pt.json index 297a885..78685d5 100644 --- a/screen_manager/translations/pt.json +++ b/screen_manager/translations/pt.json @@ -448,6 +448,7 @@ "builtin_action": "Um cartão integrado não pode executar ações.", "no_mini_slider": "Esta entidade não suporta um controlo deslizante pequeno.", "history_hours": "Histórico: escolha 1, 6 ou 24 horas.", + "refresh": "Imagem ao vivo: atualiza a cada 15 ou 30 segundos.", "watch_or_slider": "Escolha valor grande ou controlo deslizante pequeno.", "no_direct_control": "Esta entidade não suporta esse controlo direto.", "position": "Posição de mosaico inválida; recarregue a página de gestão.", @@ -739,6 +740,10 @@ "camera": { "label": "Câmara", "help": "Uma entidade de câmara ou de imagem. Um Guition com firmware 0.2.57+ mostra a imagem desse momento no topo do cartão; um toque nela abre a câmara em ecrã inteiro. Os outros ecrãs mostram o alerta sem ela. Só através do evento esp_screens_show_alert." + }, + "action": { + "label": "Ação", + "help": "Uma ação do Home Assistant, como script.open_gate ou light.turn_off, executada uma vez quando o botão é premido em qualquer ecrã. `data` dá os seus campos (entity_id, brightness, ...). Um tempo esgotado ou um novo alerta deixa-a por executar. Só através do evento esp_screens_show_alert." } }, "endings": { @@ -1266,15 +1271,22 @@ "forecast": "Previsão do tempo", "graph": "Gráfico", "sunpath": "Trajetória do sol", + "live": "Imagem ao vivo", + "live_hint": "Uma pequena imagem da câmara no lugar do ícone, atualizada ao ritmo abaixo enquanto a página está no ecrã. Um toque continua a abri-la em ecrã inteiro.", + "live_needs_firmware": "Uma imagem ao vivo precisa do firmware 0.2.77 ou mais recente: prima Atualizar no ecrã depois de guardar.", "no_graph": "O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação.", "no_forecast": "Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação." }, + "refresh": { + "label": "Atualizar", + "seconds": "A cada {n} s" + }, "size": { "label": "Tamanho", "single": "Normal", "wide": "Largura dupla", "full": "Página inteira", - "full_hint": "Página inteira: um botão grande que se ilumina enquanto está ligado; em baixo fica um controlo deslizante, controlos ou um gráfico.", + "full_hint": "Página inteira: um botão grande na cor do próprio mosaico; em baixo ficam um deslizador, controlos ou um gráfico.", "needs_firmware": "Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs." }, "page": { diff --git a/tests/test_alert_broadcast.py b/tests/test_alert_broadcast.py index ad07d0a..9ab28c4 100644 --- a/tests/test_alert_broadcast.py +++ b/tests/test_alert_broadcast.py @@ -11,8 +11,8 @@ import unittest ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT / 'screen_manager/app')) sys.path.insert(0, str(ROOT / 'tests')) -from core import (ALERT_FIELDS, ALERT_MAX_TIMEOUT, BROADCAST_DISMISS, BROADCAST_EVENTS, BROADCAST_SHOW, # noqa: E402 - alert_data, alert_reference, alert_targets) +from core import (ALERT_EVENT, ALERT_FIELDS, ALERT_MAX_TIMEOUT, BROADCAST_DISMISS, BROADCAST_EVENTS, BROADCAST_SHOW, # noqa: E402 + alert_action, alert_data, alert_reference, alert_targets) HAS_AIOHTTP = importlib.util.find_spec('aiohttp') is not None if HAS_AIOHTTP: @@ -57,6 +57,21 @@ class AlertData(unittest.TestCase): self.assertEqual(alert_reference()['broadcast'], {'show': BROADCAST_SHOW, 'dismiss': BROADCAST_DISMISS}) +class AlertAction(unittest.TestCase): + """An action behind the button (app 0.2.91): the event names it, the app performs it on the press.""" + + def test_the_action_and_its_data(self): + self.assertEqual(alert_action({'title': 'Gate', 'action': 'script.open_gate'}), (('script.open_gate', {}), True)) + self.assertEqual(alert_action({'action': ' light.turn_off ', 'data': {'entity_id': 'light.hall', 'transition': 2}}), + (('light.turn_off', {'entity_id': 'light.hall', 'transition': 2}), True)) + for data in ({}, {'action': ''}, {'action': None}, None, 'text'): + self.assertEqual(alert_action(data), (None, True), data) + for data in ({'action': 'open the gate'}, {'action': 42}, {'action': 'script.x', 'data': 'no'}, {'action': 'script.x', 'data': ['a']}, + {'action': 'script.x', 'data': {'big': 'x' * 5000}}, {'action': 'script.x', 'data': {'nan': float('nan')}}): + self.assertEqual(alert_action(data), (None, False), data) + self.assertEqual(alert_reference()['action']['name'], 'action') + + class AlertTargets(unittest.TestCase): def test_only_screens_that_can_show_it_now(self): screens = [{'name': 'Kitchen', 'node': 'kitchen', 'online': True, 'firmware': '0.2.31'}, @@ -91,6 +106,12 @@ def fake_ha(): self.changed = asyncio.Event() self.broadcasts = asyncio.Queue() self.calls, self.failing = [], set() + self.subscriptions = [] + + async def request(self, kind, **data): + if kind == 'subscribe_events': + self.subscriptions.append(data.get('event_type')) + return {} async def call(self, action, data): self.calls.append((action, data)) @@ -139,6 +160,59 @@ class Broadcast(unittest.IsolatedAsyncioTestCase): self.assertTrue(any('unusable timeout left empty' in line for line in logs.output), logs.output) self.assertIn('1 of 3 screens (not: Attic firmware 0.2.30; Hall ConnectionError)', logs.output[-1]) + async def test_the_button_performs_the_alert_action_once(self): + with tempfile.TemporaryDirectory() as tmp: + m = Manager(fake_ha(), Path(tmp) / 'screens.json') + with self.assertLogs('screen_manager', 'INFO'): + await m.broadcast(BROADCAST_SHOW, {'title': 'Gate', 'button_text': 'Open', 'action': 'script.open_gate', 'data': {'seconds': 5}}) + self.assertEqual(sorted(m.alert_actions), ['hall', 'kitchen-screen']) + self.assertNotIn('action', m.ha.calls[0][1], 'show_alert keeps its seven fields') + m.ha.calls.clear() + # Hall presses the button: the action runs; Kitchen pressing it later runs nothing again. + with self.assertLogs('screen_manager', 'INFO') as logs: + await m.alert_ended({'action': 'ok', 'title': 'Gate', 'screen': 'hall'}) + self.assertEqual(m.ha.calls, [('script.open_gate', {'seconds': 5})]) + self.assertIn('script.open_gate performed', logs.output[-1]) + self.assertEqual(m.alert_actions, {}) + await m.alert_ended({'action': 'ok', 'title': 'Gate', 'screen': 'kitchen-screen'}) + await m.alert_ended({'action': 'ok', 'title': 'Other', 'screen': 'unknown'}) + self.assertEqual(len(m.ha.calls), 1) + # A timeout, a new alert or a dismissal leaves it unperformed. + await m.broadcast(BROADCAST_SHOW, {'title': 'Gate', 'action': 'script.open_gate'}) + await m.alert_ended({'action': 'timeout', 'title': 'Gate', 'screen': 'hall'}) + self.assertNotIn('hall', m.alert_actions) + await m.broadcast(BROADCAST_SHOW, {'title': 'Plain'}) + self.assertEqual(m.alert_actions, {}) + await m.broadcast(BROADCAST_SHOW, {'title': 'Gate', 'action': 'script.open_gate'}) + await m.broadcast(BROADCAST_DISMISS, {}) + self.assertEqual(m.alert_actions, {}) + m.ha.calls.clear() + # An action Home Assistant refuses is logged, not fatal; an unusable action is named and left out. + await m.broadcast(BROADCAST_SHOW, {'title': 'Gate', 'action': 'script.open_gate'}) + m.ha.failing.add('script.open_gate') + with self.assertLogs('screen_manager', 'WARNING') as logs: + await m.alert_ended({'action': 'ok', 'title': 'Gate', 'screen': 'hall'}) + self.assertIn('script.open_gate failed (ConnectionError)', logs.output[-1]) + with self.assertLogs('screen_manager', 'INFO') as logs: + await m.broadcast(BROADCAST_SHOW, {'title': 'Gate', 'action': 'open the gate'}) + self.assertTrue(any('unusable action left empty' in line for line in logs.output), logs.output) + self.assertEqual(m.alert_actions, {}) + + async def test_the_reports_of_the_screens_go_through_the_alert_loop(self): + with tempfile.TemporaryDirectory() as tmp: + m = Manager(fake_ha(), Path(tmp) / 'screens.json') + task = asyncio.create_task(m.alert_loop()) + m.ha.broadcasts.put_nowait((BROADCAST_SHOW, {'title': 'Gate', 'action': 'script.open_gate'})) + m.ha.broadcasts.put_nowait((ALERT_EVENT, {'action': 'ok', 'title': 'Gate', 'screen': 'hall'})) + with self.assertLogs('screen_manager', 'INFO'): + for _ in range(50): + if ('script.open_gate', {}) in m.ha.calls: + break + await asyncio.sleep(0.01) + task.cancel() + self.assertIn(('script.open_gate', {}), m.ha.calls) + self.assertIn("ALERT_EVENT, *TILE_EVENTS", (ROOT / 'screen_manager/app/server.py').read_text(), 'subscribed on connect') + async def test_the_loop_keeps_the_order_and_survives_errors(self): with tempfile.TemporaryDirectory() as tmp: m = Manager(fake_ha(), Path(tmp) / 'screens.json') @@ -173,11 +247,12 @@ class Broadcast(unittest.IsolatedAsyncioTestCase): ha = HomeAssistant(None, 'http://ha/api', 'token') ha.ws = Socket([{'type': 'event', 'event': {'event_type': BROADCAST_SHOW, 'data': {'title': 'Mail!'}}}, {'type': 'event', 'event': {'event_type': 'call_service', 'data': {}}}, + {'type': 'event', 'event': {'event_type': ALERT_EVENT, 'data': {'action': 'ok', 'title': 'Mail!', 'screen': 'hall'}}}, {'type': 'event', 'event': {'event_type': BROADCAST_DISMISS, 'data': {}}}]) with self.assertRaises(ConnectionError): await ha.read() self.assertEqual([ha.broadcasts.get_nowait() for _ in range(ha.broadcasts.qsize())], - [(BROADCAST_SHOW, {'title': 'Mail!'}), (BROADCAST_DISMISS, {})]) + [(BROADCAST_SHOW, {'title': 'Mail!'}), (ALERT_EVENT, {'action': 'ok', 'title': 'Mail!', 'screen': 'hall'}), (BROADCAST_DISMISS, {})]) self.assertIn('*BROADCAST_EVENTS', (ROOT / 'screen_manager/app/server.py').read_text(), 'subscribed on connect') diff --git a/tests/test_camera.py b/tests/test_camera.py index 6760add..ff90387 100644 --- a/tests/test_camera.py +++ b/tests/test_camera.py @@ -1,6 +1,7 @@ """Camera images on a Guition (app 0.2.66, firmware 0.2.57): the app fetches, sizes and serves the image on its own port; the screen asks with esphome.screen_camera and loads the link with ESPHome's online_image.""" import asyncio +import contextlib import importlib.util import io from pathlib import Path @@ -86,7 +87,10 @@ class Rules(unittest.TestCase): 'runtime_tiles::alert_clear();', 'runtime_tiles::camera_close();', 'id: alert_image_frame'): self.assertIn(needle, PROFILE, needle) # A link only replaces the URL when it is new: set_url() forgets the ETag that makes an unchanged picture a 304. - self.assertEqual(PROFILE.count('if (url != current) {'), 2) + # Three images: the camera full screen (and the cover), the alert's picture, the live tiles' strip (app 0.2.91). + self.assertEqual(PROFILE.count('if (url != current) {'), 3) + for needle in (' - id: tile_image', 'runtime_tiles::live_loaded(cached);', 'runtime_tiles::live_failed();', 'runtime_tiles::camera_live.load'): + self.assertIn(needle, PROFILE, needle) # A busy camera port leaves the rest of the app running. self.assertIn("except OSError as error:\n # Everything else still works; only camera images stay away.", (ROOT / 'screen_manager/app/server.py').read_text()) cyd = profiles.text('home-like-2432s028.yaml') @@ -428,5 +432,132 @@ class App(unittest.IsolatedAsyncioTestCase): self.assertEqual(ha.camera_requests.get_nowait(), {'inbox': 'text.d1_tiles', 'entity': 'camera.max'}) +class LiveTiles(unittest.TestCase): + """A live picture on a camera tile (app 0.2.91, firmware 0.2.77): the page's tiles as one strip.""" + + def test_the_live_display_and_its_pace_are_tile_settings(self): + from core import LIVE_MIN_FIRMWARE, LIVE_REFRESH + self.assertEqual((camera_feed.LIVE_MIN_FIRMWARE, camera_feed.LIVE_REFRESH), (LIVE_MIN_FIRMWARE, LIVE_REFRESH)) + layout = validate_layout({'title': 'Hall', 'tiles': [{'entity': 'camera.front_door', 'name': '', 'options': {'display': 'live', 'refresh': 30}}, + {'entity': 'image.doorbell', 'name': '', 'options': {'display': 'live'}}]}) + self.assertEqual(min_firmware(layout), LIVE_MIN_FIRMWARE) + self.assertEqual(layout['tiles'][0]['options'], {'display': 'live', 'refresh': 30}) + # The icon again: the pace goes with the live display. + plain = validate_layout({'title': 'Hall', 'tiles': [{'entity': 'camera.front_door', 'name': '', 'options': {'display': 'standard', 'refresh': 30}}]}) + self.assertEqual(plain['tiles'][0]['options'], {'display': 'standard'}) + self.assertEqual(min_firmware(plain), CAMERA_MIN_FIRMWARE) + for options in ({'display': 'live', 'refresh': 20}, {'display': 'live', 'refresh': '15'}, {'display': 'live', 'refresh': True}): + with self.assertRaises(ValueError, msg=options): + validate_layout({'title': 'Hall', 'tiles': [{'entity': 'camera.front_door', 'name': '', 'options': options}]}) + with self.assertRaises(ValueError): + validate_layout({'title': 'Hall', 'tiles': [{'entity': 'light.hall', 'name': '', 'options': {'display': 'live'}}]}) + # A tile event may ask for it too. + from core import tile_options + self.assertEqual(tile_options({'display': 'live', 'refresh': '30'}), {'display': 'live', 'refresh': 30}) + # The editor learns the choice from the capabilities. + import ha_catalogue + self.assertEqual(ha_catalogue.capabilities('camera.front_door', [], {}, {})['displays'], ['standard', 'watch', 'live']) + self.assertNotIn('live', ha_catalogue.capabilities('light.hall', [], {}, {})['displays']) + + def test_which_screens_draw_live_pictures(self): + self.assertTrue(camera_feed.can_show_live({'board': 'guition', 'firmware': '0.2.77'})) + for screen in ({'board': 'guition', 'firmware': '0.2.76'}, {'board': 'cyd', 'firmware': '0.2.77'}, None): + self.assertFalse(camera_feed.can_show_live(screen), screen) + + def test_the_request_names_the_tiles_their_size_and_their_grounds(self): + self.assertEqual(camera_feed.live_request({'tiles': 'camera.front_door,image.doorbell', 'size': '54', 'bg': 'FFFFFF,fadadd'}), + (['camera.front_door', 'image.doorbell'], 54, [0xFFFFFF, 0xFADADD])) + for bad in ({'tiles': 'camera.a', 'size': '54'}, {'tiles': 'camera.a,light.b', 'size': '54', 'bg': 'FFFFFF,FFFFFF'}, + {'tiles': 'camera.a,camera.a', 'size': '54', 'bg': 'FFFFFF,FFFFFF'}, {'tiles': 'camera.a', 'size': '54', 'bg': 'FFFFFF,FFFFFF'}, + {'tiles': 'camera.a', 'size': '8', 'bg': 'FFFFFF'}, {'tiles': 'camera.a', 'size': 'x', 'bg': 'FFFFFF'}, + {'tiles': ','.join(f'camera.c{i}' for i in range(7)), 'size': '54', 'bg': ','.join(['FFFFFF'] * 7)}, {'tiles': '', 'size': '54', 'bg': ''}): + self.assertIsNone(camera_feed.live_request(bad), bad) + + @unittest.skipUnless(HAS_PIL, 'Pillow') + def test_the_strip_is_one_square_per_tile_with_rounded_corners_over_its_own_ground(self): + from PIL import Image + out = camera_feed.encode_live([picture('JPEG', (1920, 1080)), None, picture('PNG', (100, 100), 'RGBA')], 54, [0xFFFFFF, 0x1A1A1A, 0x00FF00]) + with Image.open(io.BytesIO(out)) as image: + self.assertEqual((image.format, image.size, image.mode), ('BMP', (54, 162), 'RGB')) + self.assertEqual(image.getpixel((0, 0)), (255, 255, 255)) # the first square's corner: its ground + self.assertEqual(image.getpixel((27, 27))[::2], (200, 90)) # its middle: the picture (JPEG, a shade off) + self.assertEqual(image.getpixel((27, 54 + 27)), (26, 26, 26)) # no picture: a plain square of its ground + self.assertEqual(image.getpixel((0, 108)), (0, 255, 0)) # the third square's corner: its ground + + @unittest.skipUnless(HAS_PIL, 'Pillow') + def test_each_load_fetches_the_cameras_whose_pace_has_passed(self): + clock = [1000.0] + fetched = [] + + async def fetch(entity): + fetched.append((entity, clock[0])) + return picture('JPEG', (640, 360)) + + async def run(): + feed = camera_feed.CameraFeed(fetch, clock=lambda: clock[0]) + tiles, grounds, paces = ['camera.a', 'camera.b'], [0xFFFFFF, 0xFFFFFF], [15, 30] + token = feed.link(','.join(tiles), (54, 54), live=(tiles, 54, grounds, paces)) + status, body, etag = await feed.serve(token) + self.assertEqual(status, 200) + self.assertEqual(sorted(e for e, _ in fetched), ['camera.a', 'camera.b'], 'the first load waits for both') + # 15 s later the page loads again: only the 15 s camera is fetched again. The strip comes whole each + # time, never a 304, whatever ETag the screen offers: ESPHome's http_request logs a 304 as an error (seen + # on the bench Guition with a radar camera). + clock[0] += 15 + again = await feed.serve(token, etag) + self.assertEqual((again[0], again[2] == etag), (200, True)) + self.assertEqual([e for e, at in fetched if at == 1015.0], ['camera.a']) + clock[0] += 15 + await feed.serve(token, etag) + self.assertEqual(sorted(e for e, at in fetched if at == 1030.0), ['camera.a', 'camera.b']) + # Nobody loading means nothing fetched. + clock[0] += 60 + self.assertEqual(len([e for e, at in fetched if at > 1030.0]), 0) + asyncio.run(run()) + + +@unittest.skipUnless(HAS_AIOHTTP and HAS_PIL, 'Run using .venv-portal/bin/python for server tests') +class LiveApp(unittest.IsolatedAsyncioTestCase): + def setUp(self): + camera_feed.base_url.__defaults__[0].clear() + + async def test_a_screen_asks_for_the_live_tiles_of_its_page(self): + with tempfile.TemporaryDirectory() as tmp: + ha = fake_ha(picture('JPEG', (1920, 1080))) + ha.states['sensor.d1_fw']['state'] = '0.2.77' + m = Manager(ha, Path(tmp) / 'screens.json') + m.layouts['text.d1_tiles'] = validate_layout({'title': 'Hall', 'tiles': [ + {'entity': 'camera.max', 'name': '', 'options': {'display': 'live'}}, + {'entity': 'camera.garden', 'name': '', 'options': {'display': 'live', 'refresh': 30}}, + {'entity': 'camera.shed', 'name': ''}]}) + with self.assertLogs('screen_manager', 'INFO'): + await m.answer_camera({'inbox': 'text.d1_tiles', 'tiles': 'camera.max,camera.garden', 'size': '54', 'bg': 'FFFFFF,FADADD'}) + (_, inbox, message), = [entry for entry in ha.log if entry[0] == 'send'] + self.assertEqual((inbox, message['op'], message['t'], message['e']), ('text.d1_tiles', 'camera', 'live', 'camera.max,camera.garden')) + token = message['u'].rsplit('/', 1)[1][:-4] + self.assertEqual(m.camera.links[token].live, (['camera.max', 'camera.garden'], 54, [0xFFFFFF, 0xFADADD], [15, 30])) + ha.log.clear() + # A tile that shows its icon, a camera off the layout, a screen on older firmware, a CYD: no strip. + for request in ({'inbox': 'text.d1_tiles', 'tiles': 'camera.max,camera.shed', 'size': '54', 'bg': 'FFFFFF,FFFFFF'}, + {'inbox': 'text.d1_tiles', 'tiles': 'camera.other', 'size': '54', 'bg': 'FFFFFF'}, + {'inbox': 'text.d3_tiles', 'tiles': 'camera.max', 'size': '54', 'bg': 'FFFFFF'}, + {'inbox': 'text.d2_tiles', 'tiles': 'camera.max', 'size': '54', 'bg': 'FFFFFF'}): + with self.assertLogs('screen_manager', 'INFO') if request['inbox'] == 'text.d1_tiles' and 'shed' in request['tiles'] else contextlib.nullcontext(): + await m.answer_camera(request) + self.assertEqual([entry for entry in ha.log if entry[0] == 'send'], []) + + async def test_a_camera_without_a_picture_keeps_its_icon(self): + with tempfile.TemporaryDirectory() as tmp: + ha = fake_ha(None) + ha.states['sensor.d1_fw']['state'] = '0.2.77' + m = Manager(ha, Path(tmp) / 'screens.json') + m.layouts['text.d1_tiles'] = validate_layout({'title': 'Hall', 'tiles': [{'entity': 'camera.max', 'name': '', 'options': {'display': 'live'}}]}) + with self.assertLogs('screen_manager', 'INFO') as logs: + await m.answer_camera({'inbox': 'text.d1_tiles', 'tiles': 'camera.max', 'size': '54', 'bg': 'FFFFFF'}) + (_, _, message), = [entry for entry in ha.log if entry[0] == 'send'] + self.assertEqual((message['t'], message['e'], message['u']), ('live', 'camera.max', '')) + self.assertIn('no image', logs.output[-1]) + + if __name__ == '__main__': unittest.main() diff --git a/tests/test_camera_view.cpp b/tests/test_camera_view.cpp index d556308..3056fc0 100644 --- a/tests/test_camera_view.cpp +++ b/tests/test_camera_view.cpp @@ -63,6 +63,21 @@ int main() { feed.finish(10, true); assert(!feed.should_load(REFRESH_MS - 1) && feed.should_load(REFRESH_MS + 1)); + // The live pictures of a page's camera tiles (firmware 0.2.77+) load at the tiles' own pace instead of REFRESH_MS. + Feed tiles; + tiles.open("camera.front_door,camera.garden", false, 15000); + tiles.ask(0); + tiles.link("http://h/camera/tiles.bmp"); + tiles.start(100); + tiles.finish(400, true); + assert(!tiles.should_load(100 + 15000 - 1) && tiles.should_load(100 + 15000)); + assert(tiles.every == 15000 && feed.every == REFRESH_MS); + // Without a picture (an empty link) they ask again at that pace, not every ASK_AGAIN_MS. + tiles.open("camera.front_door", false, 30000); + tiles.ask(0); + tiles.link(""); + assert(tiles.empty && !tiles.should_ask(ASK_AGAIN_MS) && !tiles.should_ask(30000 - 1) && tiles.should_ask(30000)); + // An album cover (firmware 0.2.64+) loads once per link: it stays on screen, never refreshed on a clock. Feed cover; cover.open("media_player.office", true); diff --git a/tests/test_editor_live.py b/tests/test_editor_live.py index ab266b1..1aeecec 100644 --- a/tests/test_editor_live.py +++ b/tests/test_editor_live.py @@ -192,7 +192,7 @@ class Editor(unittest.TestCase): def test_the_mockup_polls_live_values_and_draws_them(self): self.assertIn('getJson(`states?${query}`)', self.store) self.assertIn('if (!document.hidden && state.layout && state.tab === "layout" && route.value === "") loadStates();', self.store) - for marker in ('liveOf(props.tile.entity)', ':class="{ lit: isOn }"', ':style="sliderStyle"', "class=\"tog\" :class=\"{ off: !on }\""): + for marker in ('liveOf(props.tile.entity)', 'lit: isOn', ':style="sliderStyle"', "class=\"tog\" :class=\"{ off: !on }\""): self.assertIn(marker, self.page, marker) def test_identify_and_the_test_alert_have_their_buttons(self): diff --git a/tests/test_media_card.py b/tests/test_media_card.py index ff4cf16..8f60610 100644 --- a/tests/test_media_card.py +++ b/tests/test_media_card.py @@ -194,6 +194,10 @@ class Covers(unittest.TestCase): class Answer(unittest.TestCase): """The app's answer to a screen's request, through Manager.answer_camera with a Home Assistant stand-in.""" + def setUp(self): + # base_url keeps the last address for ten minutes; another test's Home Assistant may have left one behind. + camera_feed.base_url.__defaults__[0].clear() + class HA: online = True diff --git a/tests/test_runtime_model.cpp b/tests/test_runtime_model.cpp index 51a41a7..102f9cb 100644 --- a/tests/test_runtime_model.cpp +++ b/tests/test_runtime_model.cpp @@ -188,8 +188,8 @@ static void test_slider_colours() { setpoint.state = "55.0"; assert(setpoint.slider_active()); } struct RunSliderColours { RunSliderColours() { test_slider_colours(); } } run_slider_colours; -// Home Assistant's stateActive() (firmware 0.2.71+): what it calls inactive is grey on the screen, and only a tile -// that can be off lights up over a whole page, while it is on. +// Home Assistant's stateActive() (firmware 0.2.71+): what it calls inactive is grey on the screen. (`lights` was the +// full-page tint of firmware 0.2.62 to 0.2.76, gone since 0.2.77: the cases stay as a record of the rule.) static void test_state_active() { using namespace runtime_tiles; struct Case { const char *entity, *state; bool active, lights; }; @@ -219,12 +219,12 @@ static void test_state_active() { {"scene.a", "unavailable", false, false}}) { Tile t; t.entity = c.entity; t.state = c.state; t.received = true; assert(t.active() == c.active); - assert(t.lights_up() == c.lights); + (void) c.lights; } - // Nothing received yet is inactive; a built-in card has no state, is always active and never lit. - { Tile t; t.entity = "light.a"; t.state = "on"; assert(!t.active() && !t.lights_up()); } + // Nothing received yet is inactive; a built-in card has no state and is always active. + { Tile t; t.entity = "light.a"; t.state = "on"; assert(!t.active()); } for (const char *entity : {"screen.clock", "screen.settings", "screen.page_2"}) { - Tile t; t.entity = entity; assert(t.active() && !t.lights_up()); + Tile t; t.entity = entity; assert(t.active()); } // A closed blind: grey card, coloured slider. { Tile t; t.entity = "cover.a"; t.state = "closed"; t.received = true; assert(!t.active() && t.slider_active()); } diff --git a/tests/test_state_colours.py b/tests/test_state_colours.py index 1abadce..ef6f33b 100644 --- a/tests/test_state_colours.py +++ b/tests/test_state_colours.py @@ -59,7 +59,10 @@ class StateColours(unittest.TestCase): def test_the_tile_greys_and_lights_up_by_home_assistants_rule(self): self.assertIn('uint32_t accent=tile_controls::accent(t);', TILES) - self.assertIn('bool lit=w.full && on && t.lights_up() && available && !t.transparent;', TILES) + # A full-page card is white or its own pastel like every other card (firmware 0.2.77+; 0.2.62-0.2.76 tinted it). + self.assertNotIn('lights_up()', TILES) + self.assertNotIn('lights_up', MODEL) + self.assertIn('set_color(w.tile,LV_STYLE_BG_COLOR,lv_color_hex(theme::surface(t.background)));', TILES) self.assertIn('const uint32_t fill=slider_on?accent:theme::STATE_OFF;', TILES) self.assertNotIn('domain_accent', TILES) self.assertIn('frontend src/common/entity/state_active.ts', MODEL) diff --git a/web/src/components/TileCard.vue b/web/src/components/TileCard.vue index c7ced76..1c1ec60 100644 --- a/web/src/components/TileCard.vue +++ b/web/src/components/TileCard.vue @@ -130,7 +130,7 @@ async function onKey(e: KeyboardEvent) { {{ clockText(clock24, now) }}{{ name }} - {{ glyph(tileIconCp(tile)) }} + {{ glyph(tileIconCp(tile)) }} {{ name }} {{ pageLink }} @@ -150,7 +150,7 @@ async function onKey(e: KeyboardEvent) { - {{ glyph(tileIconCp(tile)) }} + {{ glyph(tileIconCp(tile)) }} {{ name }} {{ pageLink }} @@ -178,7 +178,7 @@ async function onKey(e: KeyboardEvent) { - {{ glyph(tileIconCp(tile)) }} + {{ glyph(tileIconCp(tile)) }} {{ name }} {{ pageLink }} diff --git a/web/src/components/TileInspector.vue b/web/src/components/TileInspector.vue index 62859ad..ad218a6 100644 --- a/web/src/components/TileInspector.vue +++ b/web/src/components/TileInspector.vue @@ -49,14 +49,18 @@ const displays = computed(() => { if (domain.value === "weather" && (!c || c.displays.includes("forecast") || display.value === "forecast")) keys.push("forecast"); if (domain.value === "sensor" && (!c || c.displays.includes("graph") || display.value === "graph")) keys.push("graph"); if (domain.value === "sun") keys.push("sunpath"); + // A live picture on a camera tile (app 0.2.91): the picker only offers cameras on a Guition, the board that draws images. + if (["camera", "image"].includes(domain.value)) keys.push("live"); return keys.map((key) => [key, t(`editor.tile.display.${key}`)] as [string, string]); }); const displayHint = computed(() => { const c = caps.value; if (c && display.value === "graph" && !c.displays.includes("graph")) return t("editor.tile.display.no_graph"); if (c && display.value === "forecast" && !c.displays.includes("forecast")) return t("editor.tile.display.no_forecast"); + if (display.value === "live") return t(supports(0, 2, 77) ? "editor.tile.display.live_hint" : "editor.tile.display.live_needs_firmware"); return ""; }); +const refresh = computed(() => current("refresh", 15) as number); const size = computed(() => current("size", "single") as string); const catalogue = computed(() => state.inventory.controls?.[domain.value]); const controls = computed(() => current("controls", size.value === "full" ? "none" : catalogue.value?.default) as string); @@ -124,7 +128,11 @@ function inspect() {{{ t("editor.tile.display.label") }}+setTileOption(tile, 'display', v)" /> - {{ displayHint }} + {{ displayHint }} + + {{ t("editor.tile.refresh.label") }} +setTileOption(tile, 'refresh', Number(v))" /> {{ t("editor.tile.size.label") }} diff --git a/web/src/styles/app.css b/web/src/styles/app.css index 34842e4..cb68224 100644 --- a/web/src/styles/app.css +++ b/web/src/styles/app.css @@ -173,6 +173,10 @@ a:hover { text-decoration: underline; } .tile .tog.off { background: #c9ccd1; } .tile .tog.off::after { right: auto; left: 2px; } .tile .ic.lit { color: #d9930f; } +/* A live camera tile (app 0.2.91): the picture's rounded square stands in for the icon on the mockup. */ +.tile .ic.thumb { width: 28px; height: 28px; border-radius: 7px; background: #d7dbe1; display: grid; place-items: center; font-size: 15px; color: #5a5f66; } +.tile.full .ic.thumb { width: 54px; height: 54px; border-radius: 12px; font-size: 26px; } +.device.cyd .tile .ic.thumb { width: 22px; height: 22px; font-size: 12px; } .tile .big { font-size: 19px; font-weight: 600; letter-spacing: -0.02em; line-height: 1.05; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tile .big small { display: inline; font-size: 10.5px; font-weight: 500; color: #5a5f66; margin-left: 2px; } .device.cyd .tile .big { font-size: 16px; } diff --git a/web/tests/components.spec.ts b/web/tests/components.spec.ts index cc40c93..4a3a6bf 100644 --- a/web/tests/components.spec.ts +++ b/web/tests/components.spec.ts @@ -183,6 +183,38 @@ describe("several tiles that go to the same page in the library (firmware 0.2.65 }); }); +describe("TileInspector: a live picture on a camera tile (app 0.2.91)", () => { + const row = (wrapper: ReturnType, label: string) => + wrapper.findAll(".f").find((f) => f.find(".f-label").exists() && f.find(".f-label").text() === label)!; + const choices = (wrapper: ReturnType , label: string) => row(wrapper, label).findAll(".seg button").map((b) => b.text()); + it("offers the live picture for a camera, with its pace once chosen, and says which firmware it needs", async () => { + state.inventory.entities.push({ id: "camera.front", name: "Front", state: "idle", area: "Hall" } as any); + const tile: Tile = { entity: "camera.front", name: "", slot: 0 }; + state.layout!.tiles.push(tile); + const drawer = mount(TileInspector, { props: { tile } }); + expect(choices(drawer, "Display")).toEqual(["Name and status", "Large value", "Live picture"]); + expect(row(drawer, "Refresh")).toBeUndefined(); + await row(drawer, "Display").findAll(".seg button")[2].trigger("click"); + expect(tile.options).toEqual({ display: "live" }); + expect(choices(drawer, "Refresh")).toEqual(["Every 15 s", "Every 30 s"]); + expect(row(drawer, "Refresh").find('[aria-pressed="true"]').text()).toBe("Every 15 s"); + expect(row(drawer, "Display").find("small").text()).toMatch(/firmware 0\.2\.77/); + expect(row(drawer, "Display").find("small").classes()).toContain("warn"); + await row(drawer, "Refresh").findAll(".seg button")[1].trigger("click"); + expect(tile.options).toEqual({ display: "live", refresh: 30 }); + Object.assign(state.inventory.screens[0], { firmware: "0.2.77" }); + await drawer.vm.$nextTick(); + expect(row(drawer, "Display").find("small").text()).toMatch(/icon's place/); + expect(row(drawer, "Display").find("small").classes()).not.toContain("warn"); + // A light has no such choice. + const lamp = mount(TileInspector, { props: { tile: { entity: "light.a", name: "", slot: 1 } } }); + expect(choices(lamp, "Display")).not.toContain("Live picture"); + // The mockup draws the picture's rounded square instead of the icon. + const card = mount(TileCard, { props: { tile, slot: 0 } }); + expect(card.find(".ic").classes()).toContain("thumb"); + }); +}); + describe("TileInspector: pages (app 0.2.78)", () => { const row = (wrapper: ReturnType , label: string) => wrapper.findAll(".f").find((f) => f.find(".f-label").exists() && f.find(".f-label").text() === label)!;