dsh-mobile-plugin 0.5.19 → 0.5.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@
12
12
  `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(`<anonymous>`)&&(u=u.replace(`<anonymous>`,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{be=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?ye(n):``}function Se(e,t){switch(e.tag){case 26:case 27:case 5:return ye(e.type);case 16:return ye(`Lazy`);case 13:return e.child!==t&&t!==null?ye(`Suspense Fallback`):ye(`Suspense`);case 19:return ye(`SuspenseList`);case 0:case 15:return xe(e.type,!1);case 11:return xe(e.type.render,!1);case 1:return xe(e.type,!0);case 31:return ye(`Activity`);case 30:return ye(`ViewTransition`);default:return``}}function Ce(e){try{var t=``,n=null;do t+=Se(e,n),n=e,e=e.return;while(e);return t}catch(e){return`
13
13
  Error generating stack: `+e.message+`
14
14
  `+e.stack}}var we=Object.prototype.hasOwnProperty,Te=t.unstable_scheduleCallback,Ee=t.unstable_cancelCallback,De=t.unstable_shouldYield,Oe=t.unstable_requestPaint,ke=t.unstable_now,Ae=t.unstable_getCurrentPriorityLevel,je=t.unstable_ImmediatePriority,Me=t.unstable_UserBlockingPriority,Ne=t.unstable_NormalPriority,Pe=t.unstable_LowPriority,Fe=t.unstable_IdlePriority,Ie=t.log,Le=t.unstable_setDisableYieldValue,Re=null,ze=null;function Be(e){if(typeof Ie==`function`&&Le(e),ze&&typeof ze.setStrictMode==`function`)try{ze.setStrictMode(Re,e)}catch{}}var Ve=Math.clz32?Math.clz32:We,He=Math.log,Ue=Math.LN2;function We(e){return e>>>=0,e===0?32:31-(He(e)/Ue|0)|0}var Ge=256,Ke=262144,qe=4194304;function Je(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ye(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Je(n))):i=Je(o):i=Je(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Je(n))):i=Je(o)):i=Je(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Xe(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ze(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0<n;){var r=31-Ve(n),i=1<<r;t|=e[r],n&=~i}return t}function Qe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function $e(){var e=qe;return qe<<=1,!(qe&62914560)&&(qe=4194304),e}function et(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function tt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function nt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0<n;){var u=31-Ve(n),d=1<<u;s[u]=0,c[u]=-1;var f=l[u];if(f!==null)for(l[u]=null,u=0;u<f.length;u++){var p=f[u];p!==null&&(p.lane&=-536870913)}n&=~d}r!==0&&rt(e,r,0),a!==0&&i===0&&e.tag!==0&&(e.suspendedLanes|=a&~(o&~t))}function rt(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-Ve(t);e.entangledLanes|=t,e.entanglements[r]=e.entanglements[r]|1073741824|n&261930}function it(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Ve(n),i=1<<r;i&t|e[r]&t&&(e[r]|=t),n&=~i}}function Y(e,t){var n=t&-t;return n=n&42?1:at(n),(n&(e.suspendedLanes|t))===0?n:0}function at(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function ot(e){return e&=-e,2<e?8<e?e&134217727?32:268435456:8:2}function st(){var e=K.p;return e===0?(e=window.event,e===void 0?32:Ch(e.type)):e}function ct(e,t){var n=K.p;try{return K.p=e,t()}finally{K.p=n}}var lt=Math.random().toString(36).slice(2),ut=`__reactFiber$`+lt,dt=`__reactProps$`+lt,ft=`__reactContainer$`+lt,pt=`__reactEvents$`+lt,mt=`__reactListeners$`+lt,ht=`__reactHandles$`+lt,gt=`__reactResources$`+lt,_t=`__reactMarker$`+lt,vt=`__reactLoad$`+lt;function yt(e){delete e[ut],delete e[dt],delete e[mt],delete e[ht]}function bt(e){var t;if(t=e[ut])return t;for(var n=e.parentNode;n;){if(t=n[ft]||n[ut]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=fm(e);e!==null;){if(n=e[ut])return n;e=fm(e)}return t}e=n,n=e.parentNode}return null}function xt(e){if(e=e[ut]||e[ft]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function St(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(i(33))}function Ct(e){var t=e[gt];return t||=e[gt]={hoistableStyles:new Map,hoistableScripts:new Map},t}function wt(e){e[_t]=!0}function Tt(e){e[vt]=void 0}var Et=new Set,Dt={};function Ot(e,t){kt(e,t),kt(e+`Capture`,t)}function kt(e,t){for(Dt[e]=t,e=0;e<t.length;e++)Et.add(t[e])}var At=RegExp(`^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$`),jt={},Mt={};function Nt(e){return we.call(Mt,e)?!0:we.call(jt,e)?!1:At.test(e)?Mt[e]=!0:(jt[e]=!0,!1)}var Pt=!1;function Ft(){var e=Pt;return Pt=!1,e}function It(e,t,n){if(Nt(t)){if(n===null)e.removeAttribute(t);else{switch(typeof n){case`undefined`:case`function`:case`symbol`:e.removeAttribute(t);return;case`boolean`:var r=t.toLowerCase().slice(0,5);if(r!==`data-`&&r!==`aria-`){e.removeAttribute(t);return}}e.setAttribute(t,n)}}}function Lt(e,t,n){if(n===null)e.removeAttribute(t);else{switch(typeof n){case`undefined`:case`function`:case`symbol`:case`boolean`:e.removeAttribute(t);return}e.setAttribute(t,n)}}function Rt(e,t,n,r){if(r===null)e.removeAttribute(n);else{switch(typeof r){case`undefined`:case`function`:case`symbol`:case`boolean`:e.removeAttribute(n);return}e.setAttributeNS(t,n,r)}}function zt(e){switch(typeof e){case`bigint`:case`boolean`:case`number`:case`string`:case`undefined`:return e;case`object`:return e;default:return``}}function Bt(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===`input`&&(t===`checkbox`||t===`radio`)}function Vt(e,t,n){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&r!==void 0&&typeof r.get==`function`&&typeof r.set==`function`){var i=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(e){n=``+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=``+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ht(e){if(!e._valueTracker){var t=Bt(e)?`checked`:`value`;e._valueTracker=Vt(e,t,``+e[t])}}function Ut(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=``;return e&&(r=Bt(e)?e.checked?`true`:`false`:e.value),e=r,e!==n&&(t.setValue(e),!0)}var Wt=/[\n"\\]/g;function Gt(e){return e.replace(Wt,function(e){return`\\`+e.charCodeAt(0).toString(16)+` `})}function Kt(e,t,n,r,i,a,o,s){e.name=``,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`?e.type=o:e.removeAttribute(`type`),t==null?o!==`submit`&&o!==`reset`||e.removeAttribute(`value`):o===`number`?(t===0&&e.value===``||e.value!=t)&&(e.value=``+zt(t)):e.value!==``+zt(t)&&(e.value=``+zt(t)),t==null?n==null?r!=null&&e.removeAttribute(`value`):Jt(e,zt(n)):o===`number`&&e.value==t?Jt(e,zt(e.value)):Jt(e,zt(t)),i==null&&a!=null&&(e.defaultChecked=!!a),i!=null&&(e.checked=i&&typeof i!=`function`&&typeof i!=`symbol`),s!=null&&typeof s!=`function`&&typeof s!=`symbol`&&typeof s!=`boolean`?e.name=``+zt(s):e.removeAttribute(`name`)}function qt(e,t,n,r,i,a,o,s){if(a!=null&&typeof a!=`function`&&typeof a!=`symbol`&&typeof a!=`boolean`&&(e.type=a),t!=null||n!=null){if(!(a!==`submit`&&a!==`reset`||t!=null)){Ht(e);return}n=n==null?``:``+zt(n),t=t==null?n:``+zt(t),s||t===e.value||(e.value=t),e.defaultValue=t}r??=i,r=typeof r!=`function`&&typeof r!=`symbol`&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`&&(e.name=o),Ht(e)}function Jt(e,t){e.defaultValue!==``+t&&(e.defaultValue=``+t)}function Yt(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i<n.length;i++)t[`$`+n[i]]=!0;for(n=0;n<e.length;n++)i=t.hasOwnProperty(`$`+e[n].value),e[n].selected!==i&&(e[n].selected=i),i&&r&&(e[n].defaultSelected=!0)}else{for(n=``+zt(n),t=null,i=0;i<e.length;i++){if(e[i].value===n){e[i].selected=!0,r&&(e[i].defaultSelected=!0);return}t!==null||e[i].disabled||(t=e[i])}t!==null&&(t.selected=!0)}}function Xt(e,t,n){if(t!=null&&(t=``+zt(t),t!==e.value&&(e.value=t),n==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=n==null?``:``+zt(n)}function Zt(e,t,n,r){if(t==null){if(r!=null){if(n!=null)throw Error(i(92));if(re(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}n??=``,t=n}n=zt(t),e.defaultValue=n,r=e.textContent,r===n&&r!==``&&r!==null&&(e.value=r),Ht(e)}function Qt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var $t=new Set(`animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp`.split(` `));function en(e,t,n){var r=t.indexOf(`--`)===0;n==null||typeof n==`boolean`||n===``?r?e.setProperty(t,``):t===`float`?e.cssFloat=``:e[t]=``:r?e.setProperty(t,n):typeof n!=`number`||n===0||$t.has(t)?t===`float`?e.cssFloat=n:e[t]=(``+n).trim():e[t]=n+`px`}function tn(e,t,n){if(t!=null&&typeof t!=`object`)throw Error(i(62));if(e=e.style,n!=null){for(var r in n)!n.hasOwnProperty(r)||t!=null&&t.hasOwnProperty(r)||(r.indexOf(`--`)===0?e.setProperty(r,``):r===`float`?e.cssFloat=``:e[r]=``,Pt=!0);for(var a in t)r=t[a],t.hasOwnProperty(a)&&n[a]!==r&&(en(e,a,r),Pt=!0)}else for(var o in t)t.hasOwnProperty(o)&&en(e,o,t[o])}function nn(e){if(e.indexOf(`-`)===-1)return!1;switch(e){case`annotation-xml`:case`color-profile`:case`font-face`:case`font-face-src`:case`font-face-uri`:case`font-face-format`:case`font-face-name`:case`missing-glyph`:return!1;default:return!0}}var rn=new Map([[`acceptCharset`,`accept-charset`],[`htmlFor`,`for`],[`httpEquiv`,`http-equiv`],[`crossOrigin`,`crossorigin`],[`accentHeight`,`accent-height`],[`alignmentBaseline`,`alignment-baseline`],[`arabicForm`,`arabic-form`],[`baselineShift`,`baseline-shift`],[`capHeight`,`cap-height`],[`clipPath`,`clip-path`],[`clipRule`,`clip-rule`],[`colorInterpolation`,`color-interpolation`],[`colorInterpolationFilters`,`color-interpolation-filters`],[`colorProfile`,`color-profile`],[`colorRendering`,`color-rendering`],[`dominantBaseline`,`dominant-baseline`],[`enableBackground`,`enable-background`],[`fillOpacity`,`fill-opacity`],[`fillRule`,`fill-rule`],[`floodColor`,`flood-color`],[`floodOpacity`,`flood-opacity`],[`fontFamily`,`font-family`],[`fontSize`,`font-size`],[`fontSizeAdjust`,`font-size-adjust`],[`fontStretch`,`font-stretch`],[`fontStyle`,`font-style`],[`fontVariant`,`font-variant`],[`fontWeight`,`font-weight`],[`glyphName`,`glyph-name`],[`glyphOrientationHorizontal`,`glyph-orientation-horizontal`],[`glyphOrientationVertical`,`glyph-orientation-vertical`],[`horizAdvX`,`horiz-adv-x`],[`horizOriginX`,`horiz-origin-x`],[`imageRendering`,`image-rendering`],[`letterSpacing`,`letter-spacing`],[`lightingColor`,`lighting-color`],[`markerEnd`,`marker-end`],[`markerMid`,`marker-mid`],[`markerStart`,`marker-start`],[`maskType`,`mask-type`],[`overlinePosition`,`overline-position`],[`overlineThickness`,`overline-thickness`],[`paintOrder`,`paint-order`],[`panose-1`,`panose-1`],[`pointerEvents`,`pointer-events`],[`renderingIntent`,`rendering-intent`],[`shapeRendering`,`shape-rendering`],[`stopColor`,`stop-color`],[`stopOpacity`,`stop-opacity`],[`strikethroughPosition`,`strikethrough-position`],[`strikethroughThickness`,`strikethrough-thickness`],[`strokeDasharray`,`stroke-dasharray`],[`strokeDashoffset`,`stroke-dashoffset`],[`strokeLinecap`,`stroke-linecap`],[`strokeLinejoin`,`stroke-linejoin`],[`strokeMiterlimit`,`stroke-miterlimit`],[`strokeOpacity`,`stroke-opacity`],[`strokeWidth`,`stroke-width`],[`textAnchor`,`text-anchor`],[`textDecoration`,`text-decoration`],[`textRendering`,`text-rendering`],[`transformOrigin`,`transform-origin`],[`underlinePosition`,`underline-position`],[`underlineThickness`,`underline-thickness`],[`unicodeBidi`,`unicode-bidi`],[`unicodeRange`,`unicode-range`],[`unitsPerEm`,`units-per-em`],[`vAlphabetic`,`v-alphabetic`],[`vHanging`,`v-hanging`],[`vIdeographic`,`v-ideographic`],[`vMathematical`,`v-mathematical`],[`vectorEffect`,`vector-effect`],[`vertAdvY`,`vert-adv-y`],[`vertOriginX`,`vert-origin-x`],[`vertOriginY`,`vert-origin-y`],[`wordSpacing`,`word-spacing`],[`writingMode`,`writing-mode`],[`xmlnsXlink`,`xmlns:xlink`],[`xHeight`,`x-height`]]),an=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function on(e){return an.test(``+e)?`javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')`:e}function sn(){}var cn=null;function ln(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var un=null,dn=null;function fn(e){var t=xt(e);if(t&&(e=t.stateNode)){var n=e[dt]||null;a:switch(e=t.stateNode,t.type){case`input`:if(Kt(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,n.type===`radio`&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(`input[name="`+Gt(``+t)+`"][type="radio"]`),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=r[dt]||null;if(!a)throw Error(i(90));Kt(r,a.value,a.defaultValue,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name)}}for(t=0;t<n.length;t++)r=n[t],r.form===e.form&&Ut(r)}break a;case`textarea`:Xt(e,n.value,n.defaultValue);break a;case`select`:t=n.value,t!=null&&Yt(e,!!n.multiple,t,!1)}}}var pn=!1;function mn(e,t,n){if(pn)return e(t,n);pn=!0;try{return e(t)}finally{if(pn=!1,(un!==null||dn!==null)&&(Ld(),un&&(t=un,e=dn,dn=un=null,fn(t),e)))for(t=0;t<e.length;t++)fn(e[t])}}function hn(e,t){var n=e.stateNode;if(n===null)return null;var r=n[dt]||null;if(r===null)return null;n=r[t];a:switch(t){case`onClick`:case`onClickCapture`:case`onDoubleClick`:case`onDoubleClickCapture`:case`onMouseDown`:case`onMouseDownCapture`:case`onMouseMove`:case`onMouseMoveCapture`:case`onMouseUp`:case`onMouseUpCapture`:case`onMouseEnter`:(r=!r.disabled)||(e=e.type,r=e!==`button`&&e!==`input`&&e!==`select`&&e!==`textarea`),e=!r;break a;default:e=!1}if(e)return null;if(n&&typeof n!=`function`)throw Error(i(231,t,typeof n));return n}var gn=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,_n=!1;if(gn)try{var vn={};Object.defineProperty(vn,"passive",{get:function(){_n=!0}}),window.addEventListener(`test`,vn,vn),window.removeEventListener(`test`,vn,vn)}catch{_n=!1}var yn=null,bn=null,xn=null;function Sn(){if(xn)return xn;var e,t=bn,n=t.length,r,i=`value`in yn?yn.value:yn.textContent,a=i.length;for(e=0;e<n&&t[e]===i[e];e++);var o=n-e;for(r=1;r<=o&&t[n-r]===i[a-r];r++);return xn=i.slice(e,1<r?1-r:void 0)}function Cn(e){var t=e.keyCode;return`charCode`in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function wn(){return!0}function Tn(){return!1}function En(e){function t(t,n,r,i,a){for(var o in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=i,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(o)&&(t=e[o],this[o]=t?t(i):i[o]);return this.isDefaultPrevented=(i.defaultPrevented==null?!1===i.returnValue:i.defaultPrevented)?wn:Tn,this.isPropagationStopped=Tn,this}return T(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():typeof e.returnValue!=`unknown`&&(e.returnValue=!1),this.isDefaultPrevented=wn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():typeof e.cancelBubble!=`unknown`&&(e.cancelBubble=!0),this.isPropagationStopped=wn)},persist:function(){},isPersistent:wn}),t}var Dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},On=En(Dn),kn=T({},Dn,{view:0,detail:0}),An=En(kn),jn,Mn,Nn,Pn=T({},kn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Gn,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return`movementX`in e?e.movementX:(e!==Nn&&(Nn&&e.type===`mousemove`?(jn=e.screenX-Nn.screenX,Mn=e.screenY-Nn.screenY):Mn=jn=0,Nn=e),jn)},movementY:function(e){return`movementY`in e?e.movementY:Mn}}),Fn=En(Pn),In=En(T({},Pn,{dataTransfer:0})),Ln=En(T({},kn,{relatedTarget:0})),Rn=En(T({},Dn,{animationName:0,elapsedTime:0,pseudoElement:0})),zn=En(T({},Dn,{clipboardData:function(e){return`clipboardData`in e?e.clipboardData:window.clipboardData}})),Bn=En(T({},Dn,{data:0})),Vn={Esc:`Escape`,Spacebar:` `,Left:`ArrowLeft`,Up:`ArrowUp`,Right:`ArrowRight`,Down:`ArrowDown`,Del:`Delete`,Win:`OS`,Menu:`ContextMenu`,Apps:`ContextMenu`,Scroll:`ScrollLock`,MozPrintableKey:`Unidentified`},Hn={8:`Backspace`,9:`Tab`,12:`Clear`,13:`Enter`,16:`Shift`,17:`Control`,18:`Alt`,19:`Pause`,20:`CapsLock`,27:`Escape`,32:` `,33:`PageUp`,34:`PageDown`,35:`End`,36:`Home`,37:`ArrowLeft`,38:`ArrowUp`,39:`ArrowRight`,40:`ArrowDown`,45:`Insert`,46:`Delete`,112:`F1`,113:`F2`,114:`F3`,115:`F4`,116:`F5`,117:`F6`,118:`F7`,119:`F8`,120:`F9`,121:`F10`,122:`F11`,123:`F12`,144:`NumLock`,145:`ScrollLock`,224:`Meta`},Un={Alt:`altKey`,Control:`ctrlKey`,Meta:`metaKey`,Shift:`shiftKey`};function Wn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Un[e])?!!t[e]:!1}function Gn(){return Wn}var Kn=En(T({},kn,{key:function(e){if(e.key){var t=Vn[e.key]||e.key;if(t!==`Unidentified`)return t}return e.type===`keypress`?(e=Cn(e),e===13?`Enter`:String.fromCharCode(e)):e.type===`keydown`||e.type===`keyup`?Hn[e.keyCode]||`Unidentified`:``},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Gn,charCode:function(e){return e.type===`keypress`?Cn(e):0},keyCode:function(e){return e.type===`keydown`||e.type===`keyup`?e.keyCode:0},which:function(e){return e.type===`keypress`?Cn(e):e.type===`keydown`||e.type===`keyup`?e.keyCode:0}})),qn=En(T({},Pn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Jn=En(T({},Dn,{submitter:0})),Yn=En(T({},kn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Gn})),Xn=En(T({},Dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Zn=En(T({},Pn,{deltaX:function(e){return`deltaX`in e?e.deltaX:`wheelDeltaX`in e?-e.wheelDeltaX:0},deltaY:function(e){return`deltaY`in e?e.deltaY:`wheelDeltaY`in e?-e.wheelDeltaY:`wheelDelta`in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),Qn=En(T({},Dn,{newState:0,oldState:0,source:0})),$n=[9,13,27,32],er=gn&&`CompositionEvent`in window,tr=null;gn&&`documentMode`in document&&(tr=document.documentMode);var nr=gn&&`TextEvent`in window&&!tr,rr=gn&&(!er||tr&&8<tr&&11>=tr),X=` `,ir=!1;function ar(e,t){switch(e){case`keyup`:return $n.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function or(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var sr=!1;function cr(e,t){switch(e){case`compositionend`:return or(t);case`keypress`:return t.which===32?(ir=!0,X):null;case`textInput`:return e=t.data,e===X&&ir?null:e;default:return null}}function lr(e,t){if(sr)return e===`compositionend`||!er&&ar(e,t)?(e=Sn(),xn=bn=yn=null,sr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case`compositionend`:return rr&&t.locale!==`ko`?null:t.data;default:return null}}var ur={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function dr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t===`input`?!!ur[e.type]:t===`textarea`}function fr(e,t,n,r){un?dn?dn.push(r):dn=[r]:un=r,t=Jf(t,`onChange`),0<t.length&&(n=new On(`onChange`,`change`,null,n,r),e.push({event:n,listeners:t}))}var pr=null,mr=null;function hr(e){Bf(e,0)}function gr(e){if(Ut(St(e)))return e}function _r(e,t){if(e===`change`)return t}var vr=!1;if(gn){var yr;if(gn){var br=`oninput`in document;if(!br){var xr=document.createElement(`div`);xr.setAttribute(`oninput`,`return;`),br=typeof xr.oninput==`function`}yr=br}else yr=!1;vr=yr&&(!document.documentMode||9<document.documentMode)}function Sr(){pr&&(pr.detachEvent(`onpropertychange`,Cr),mr=pr=null)}function Cr(e){if(e.propertyName===`value`&&gr(mr)){var t=[];fr(t,mr,e,ln(e)),mn(hr,t)}}function wr(e,t,n){e===`focusin`?(Sr(),pr=t,mr=n,pr.attachEvent(`onpropertychange`,Cr)):e===`focusout`&&Sr()}function Tr(e){if(e===`selectionchange`||e===`keyup`||e===`keydown`)return gr(mr)}function Er(e,t){if(e===`click`)return gr(t)}function Dr(e,t){if(e===`input`||e===`change`)return gr(t)}function Or(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var kr=typeof Object.is==`function`?Object.is:Or;function Ar(e,t){if(kr(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var i=n[r];if(!we.call(t,i)||!kr(e[i],t[i]))return!1}return!0}function jr(e){if(e||=typeof document<`u`?document:void 0,e===void 0)return null;try{return e.activeElement||e.body}catch{return e.body}}function Mr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Nr(e,t){var n=Mr(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Mr(n)}}function Pr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Pr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Fr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=jr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=jr(e.document)}return t}function Ir(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Lr=gn&&`documentMode`in document&&11>=document.documentMode,Rr=null,zr=null,Br=null,Vr=!1;function Hr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Vr||Rr==null||Rr!==jr(r)||(r=Rr,`selectionStart`in r&&Ir(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Br&&Ar(Br,r)||(Br=r,r=Jf(zr,`onSelect`),0<r.length&&(t=new On(`onSelect`,`select`,null,t,n),e.push({event:t,listeners:r}),t.target=Rr)))}function Ur(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[`Webkit`+e]=`webkit`+t,n[`Moz`+e]=`moz`+t,n}var Wr={animationend:Ur(`Animation`,`AnimationEnd`),animationiteration:Ur(`Animation`,`AnimationIteration`),animationstart:Ur(`Animation`,`AnimationStart`),transitionrun:Ur(`Transition`,`TransitionRun`),transitionstart:Ur(`Transition`,`TransitionStart`),transitioncancel:Ur(`Transition`,`TransitionCancel`),transitionend:Ur(`Transition`,`TransitionEnd`)},Gr={},Kr={};gn&&(Kr=document.createElement(`div`).style,`AnimationEvent`in window||(delete Wr.animationend.animation,delete Wr.animationiteration.animation,delete Wr.animationstart.animation),`TransitionEvent`in window||delete Wr.transitionend.transition);function qr(e){if(Gr[e])return Gr[e];if(!Wr[e])return e;var t=Wr[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in Kr)return Gr[e]=t[n];return e}var Jr=qr(`animationend`),Yr=qr(`animationiteration`),Xr=qr(`animationstart`),Zr=qr(`transitionrun`),Qr=qr(`transitionstart`),$r=qr(`transitioncancel`),ei=qr(`transitionend`),ti=new Map,ni=`abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel`.split(` `);ni.push(`scrollEnd`);function ri(e,t){ti.set(e,t),Ot(t,[e])}var ii=0;function ai(e,t){if(e.name!=null&&e.name!==`auto`)return e.name;if(t.autoName!==null)return t.autoName;e=_d.identifierPrefix;var n=ii++;return e=`_`+e+`t_`+n.toString(32)+`_`,t.autoName=e}function oi(e){if(e==null||typeof e==`string`)return e;var t=null,n=Ed;if(n!==null)for(var r=0;r<n.length;r++){var i=e[n[r]];if(i!=null){if(i===`none`)return`none`;t=t==null?i:t+(` `+i)}}return t??e.default}function si(e,t){return e=oi(e),t=oi(t),t==null?e===`auto`?null:e:t===`auto`?null:t}var ci=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},li=[],ui=0,di=0;function fi(){for(var e=ui,t=di=ui=0;t<e;){var n=li[t];li[t++]=null;var r=li[t];li[t++]=null;var i=li[t];li[t++]=null;var a=li[t];if(li[t++]=null,r!==null&&i!==null){var o=r.pending;o===null?i.next=i:(i.next=o.next,o.next=i),r.pending=i}a!==0&&gi(n,i,a)}}function pi(e,t,n,r){li[ui++]=e,li[ui++]=t,li[ui++]=n,li[ui++]=r,di|=r,e.lanes|=r,e=e.alternate,e!==null&&(e.lanes|=r)}function mi(e,t,n,r){return pi(e,t,n,r),_i(e)}function hi(e,t){return pi(e,null,null,t),_i(e)}function gi(e,t,n){e.lanes|=n;var r=e.alternate;r!==null&&(r.lanes|=n);for(var i=!1,a=e.return;a!==null;)a.childLanes|=n,r=a.alternate,r!==null&&(r.childLanes|=n),a.tag===22&&(e=a.stateNode,e===null||e._visibility&1||(i=!0)),e=a,a=a.return;return e.tag===3?(a=e.stateNode,i&&t!==null&&(i=31-Ve(n),e=a.hiddenUpdates,r=e[i],r===null?e[i]=[t]:r.push(t),t.lane=n|536870912),a):null}function _i(e){if(50<Dd)throw Dd=0,Od=null,Error(i(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var vi={};function yi(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bi(e,t,n,r){return new yi(e,t,n,r)}function xi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Si(e,t){var n=e.alternate;return n===null?(n=bi(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&1206910976,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function Ci(e,t){e.flags&=1206910978;var n=e.alternate;return n===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function wi(e,t,n,r,a,o){var s=0;if(r=e,typeof r==`function`)xi(r)&&(s=1);else if(typeof r==`string`)s=qm(e,n,ue.current)?26:e===`html`||e===`head`||e===`body`?27:5;else a:switch(r){case z:return e=bi(31,n,t,a),e.elementType=z,e.lanes=o,e;case k:return Ti(n.children,a,o,t);case A:s=8,a|=24;break;case j:return e=bi(12,n,t,a|2),e.elementType=j,e.lanes=o,e;case F:return e=bi(13,n,t,a),e.elementType=F,e.lanes=o,e;case I:return e=bi(19,n,t,a),e.elementType=I,e.lanes=o,e;case B:case H:return e=a|32,e=bi(30,n,t,e),e.elementType=H,e.lanes=o,e.stateNode={autoName:null,paired:null,clones:null,ref:null},e;default:if(typeof r==`object`&&r)switch(r.$$typeof){case N:s=10;break a;case M:s=9;break a;case P:s=11;break a;case L:s=14;break a;case R:s=16,r=null;break a}s=29,n=Error(i(130,e===null?`null`:typeof e,``)),r=null}return t=bi(s,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function Ti(e,t,n,r){return e=bi(7,e,r,t),e.lanes=n,e}function Ei(e,t,n){return e=bi(6,e,null,t),e.lanes=n,e}function Di(e){var t=bi(18,null,null,0);return t.stateNode=e,t}function Oi(e,t,n){return t=bi(4,e.children===null?[]:e.children,e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var ki=new WeakMap;function Ai(e,t){if(typeof e==`object`&&e){var n=ki.get(e);return n===void 0?(t={value:e,source:t,stack:Ce(t)},ki.set(e,t),t):n}return{value:e,source:t,stack:Ce(t)}}var ji=[],Mi=0,Ni=null,Pi=0,Fi=[],Ii=0,Li=null,Ri=1,zi=``;function Bi(e,t){ji[Mi++]=Pi,ji[Mi++]=Ni,Ni=e,Pi=t}function Vi(e,t,n){Fi[Ii++]=Ri,Fi[Ii++]=zi,Fi[Ii++]=Li,Li=e;var r=Ri;e=zi;var i=32-Ve(r)-1;r&=~(1<<i),n+=1;var a=32-Ve(t)+i;if(30<a){var o=i-i%5;a=(r&(1<<o)-1).toString(32),r>>=o,i-=o,Ri=1<<32-Ve(t)+i|n<<i|r,zi=a+e}else Ri=1<<a|n<<i|r,zi=e}function Hi(e){e.return!==null&&(Bi(e,1),Vi(e,1,0))}function Ui(e){for(;e===Ni;)Ni=ji[--Mi],ji[Mi]=null,Pi=ji[--Mi],ji[Mi]=null;for(;e===Li;)Li=Fi[--Ii],Fi[Ii]=null,zi=Fi[--Ii],Fi[Ii]=null,Ri=Fi[--Ii],Fi[Ii]=null}function Wi(e,t){Fi[Ii++]=Ri,Fi[Ii++]=zi,Fi[Ii++]=Li,Ri=t.id,zi=t.overflow,Li=e}var Gi=null,Ki=null,qi=!1,Ji=null,Yi=!1,Xi=Error(i(519));function Zi(e){throw ra(Ai(Error(i(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?`text`:`HTML`,``)),e)),Xi}function Qi(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[ut]=e,t[dt]=r,n){case`dialog`:Vf(`cancel`,t),Vf(`close`,t);break;case`iframe`:case`object`:case`embed`:Vf(`load`,t);break;case`video`:case`audio`:for(n=0;n<Rf.length;n++)Vf(Rf[n],t);break;case`source`:Vf(`error`,t);break;case`img`:case`image`:case`link`:Vf(`error`,t),Vf(`load`,t);break;case`details`:Vf(`toggle`,t);break;case`input`:Vf(`invalid`,t),qt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case`select`:Vf(`invalid`,t);break;case`textarea`:Vf(`invalid`,t),Zt(t,r.value,r.defaultValue,r.children)}n=r.children,typeof n!=`string`&&typeof n!=`number`&&typeof n!=`bigint`||t.textContent===``+n||!0===r.suppressHydrationWarning||ep(t.textContent,n)?(r.popover!=null&&(Vf(`beforetoggle`,t),Vf(`toggle`,t)),r.onScroll!=null&&Vf(`scroll`,t),r.onScrollEnd!=null&&Vf(`scrollend`,t),r.onClick!=null&&(t.onclick=sn),t=!0):t=!1,t||Zi(e,!0)}function $i(e){for(Gi=e.return;Gi;)switch(Gi.tag){case 5:case 31:case 13:Yi=!1;return;case 27:case 3:Yi=!0;return;default:Gi=Gi.return}}function ea(e){if(e!==Gi)return!1;if(!qi)return $i(e),qi=!0,!1;var t=e.tag,n;if((n=t!==3&&t!==27)&&((n=t===5)&&(n=e.type,n=n===`form`||n===`button`||pp(e.type,e.memoizedProps)),n=!n),n&&Ki&&Zi(e),$i(e),t===13){if(e=e.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(317));Ki=dm(e)}else if(t===31){if(e=e.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(317));Ki=dm(e)}else t===27?(t=Ki,Sp(e.type)?(e=um,um=null,Ki=e):Ki=t):Ki=Gi?lm(e.stateNode.nextSibling):null;return!0}function ta(){Ki=Gi=null,qi=!1}function na(){var e=Ji;return e!==null&&(ld===null?ld=e:ld.push.apply(ld,e),Ji=null),e}function ra(e){Ji===null?Ji=[e]:Ji.push(e)}var ia=ce(null),aa=null,oa=null;function sa(e,t,n){q(ia,t._currentValue),t._currentValue=n}function ca(e){e._currentValue=ia.current,le(ia)}function la(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)===t?r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t):(e.childLanes|=t,r!==null&&(r.childLanes|=t)),e===n)break;e=e.return}}function ua(e,t,n,r){var a=e.child;for(a!==null&&(a.return=e);a!==null;){var o=a.dependencies;if(o!==null){var s=a.child;o=o.firstContext;a:for(;o!==null;){var c=o;o=a;for(var l=0;l<t.length;l++)if(c.context===t[l]){o.lanes|=n,c=o.alternate,c!==null&&(c.lanes|=n),la(o.return,n,e),r||(s=null);break a}o=c.next}}else if(a.tag===18){if(s=a.return,s===null)throw Error(i(341));s.lanes|=n,o=s.alternate,o!==null&&(o.lanes|=n),la(s,n,e),s=null}else a.tag===13&&a.memoizedState!==null&&a.memoizedState.dehydrated===null?(a.lanes|=n,s=a.alternate,s!==null&&(s.lanes|=n),la(a.return,n,e),s=a.child,s=s===null?null:s.sibling):s=a.child;if(s!==null)s.return=a;else for(s=a;s!==null;){if(s===e){s=null;break}if(a=s.sibling,a!==null){a.return=s.return,s=a;break}s=s.return}a=s}}function da(e,t,n,r){e=null;for(var a=t,o=!1;a!==null;){if(!o){if(a.flags&524288)o=!0;else if(a.flags&262144)break}if(a.tag===10){var s=a.alternate;if(s===null)throw Error(i(387));if(s=s.memoizedProps,s!==null){var c=a.type;kr(a.pendingProps.value,s.value)||(e===null?e=[c]:e.push(c))}}else if(a===fe.current){if(s=a.alternate,s===null)throw Error(i(387));s.memoizedState.memoizedState!==a.memoizedState.memoizedState&&(e===null?e=[sh]:e.push(sh))}a=a.return}return e!==null&&ua(t,e,n,r),t.flags|=262144,e!==null}function fa(e){for(e=e.firstContext;e!==null;){if(!kr(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function pa(e){aa=e,oa=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function ma(e){return ga(aa,e)}function ha(e,t){return aa===null&&pa(e),ga(e,t)}function ga(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},oa===null){if(e===null)throw Error(i(308));oa=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else oa=oa.next=t;return n}var _a=typeof AbortController<`u`?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},va=t.unstable_scheduleCallback,ya=t.unstable_NormalPriority,ba={$$typeof:N,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function xa(){return{controller:new _a,data:new Map,refCount:0}}function Sa(e){e.refCount--,e.refCount===0&&va(ya,function(){e.controller.abort()})}function Ca(e,t){if(e.pendingLanes&4194048){var n=e.transitionTypes;for(n===null&&(n=e.transitionTypes=[]),e=0;e<t.length;e++){var r=t[e];n.indexOf(r)===-1&&n.push(r)}}}var wa=null;function Ta(e){var t=e.transitionTypes;return e.transitionTypes=null,t}var Ea=null,Da=0,Oa=0,ka=null;function Aa(e,t){if(Ea===null){var n=Ea=[];Da=0,Oa=Nf(),ka={status:`pending`,value:void 0,then:function(e){n.push(e)}}}return Da++,t.then(ja,ja),t}function ja(){if(--Da===0&&(wa=null,Ea!==null)){ka!==null&&(ka.status=`fulfilled`);var e=Ea;Ea=null,Oa=0,ka=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function Ma(e,t){var n=[],r={status:`pending`,value:null,reason:null,then:function(e){n.push(e)}};return e.then(function(){r.status=`fulfilled`,r.value=t;for(var e=0;e<n.length;e++)(0,n[e])(t)},function(e){for(r.status=`rejected`,r.reason=e,e=0;e<n.length;e++)(0,n[e])(void 0)}),r}var Na=G.S;G.S=function(e,t){if(fd=ke(),typeof t==`object`&&t&&typeof t.then==`function`&&Aa(e,t),wa!==null)for(var n=yf;n!==null;)Ca(n,wa),n=n.next;if(n=e.types,n!==null){for(var r=yf;r!==null;)Ca(r,n),r=r.next;if(Oa!==0){r=wa,r===null&&(r=wa=[]);for(var i=0;i<n.length;i++){var a=n[i];r.indexOf(a)===-1&&r.push(a)}}}Na!==null&&Na(e,t)};var Pa=ce(null);function Fa(){var e=Pa.current;return e===null?qu.pooledCache:e}function Ia(e,t){t===null?q(Pa,Pa.current):q(Pa,t.pool)}function La(){var e=Fa();return e===null?null:{parent:ba._currentValue,pool:e}}var Ra=Error(i(460)),za=Error(i(474)),Ba=Error(i(542)),Va={then:function(){}};function Ha(e){return e=e.status,e===`fulfilled`||e===`rejected`}function Ua(e,t,n){switch(n=e[n],n===void 0?e.push(t):n!==t&&(t.then(sn,sn),t=n),t.status){case`fulfilled`:return t.value;case`rejected`:throw e=t.reason,qa(e),e===void 0&&!(`reason`in t)?Error(i(600)):e;default:if(typeof t.status==`string`)t.then(sn,sn);else{if(e=qu,e!==null&&100<e.shellSuspendCounter)throw Error(i(482));e=t,e.status=`pending`,e.then(function(e){if(t.status===`pending`){var n=t;n.status=`fulfilled`,n.value=e}},function(e){if(t.status===`pending`){var n=t;n.status=`rejected`,n.reason=e}})}switch(t.status){case`fulfilled`:return t.value;case`rejected`:throw e=t.reason,qa(e),e}throw Ga=t,Ra}}function Wa(e){try{var t=e._init;return t(e._payload)}catch(e){throw typeof e==`object`&&e&&typeof e.then==`function`?(Ga=e,Ra):e}}var Ga=null;function Ka(){if(Ga===null)throw Error(i(459));var e=Ga;return Ga=null,e}function qa(e){if(e===Ra||e===Ba)throw Error(i(483))}var Ja=null,Ya=0;function Xa(e){var t=Ya;return Ya+=1,Ja===null&&(Ja=[]),Ua(Ja,e,t)}function Za(e,t){t=t.props.ref,e.ref=t===void 0?null:t}function Qa(e,t){throw t.$$typeof===E?Error(i(525)):(e=Object.prototype.toString.call(t),Error(i(31,e===`[object Object]`?`object with keys {`+Object.keys(t).join(`, `)+`}`:e)))}function $a(e){function t(t,n){if(e){var r=t.deletions;r===null?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;r!==null;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;e!==null;)e.key===null?t.set(e.index,e):t.set(e.key,e),e=e.sibling;return t}function a(e,t){return e=Si(e,t),e.index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?(r=t.alternate,r===null?(t.flags|=134217730,n):(r=r.index,r<n?(t.flags|=2,n):r)):(t.flags|=1048576,n)}function s(t){return e&&t.alternate===null&&(t.flags|=134217730),t}function c(e,t,n,r){return t===null||t.tag!==6?(t=Ei(n,e.mode,r),t.return=e,t):(t=a(t,n),t.return=e,t)}function l(e,t,n,r){var i=n.type;return i===k?(e=d(e,t,n.props.children,r,n.key),Za(e,n),e):t!==null&&(t.elementType===i||typeof i==`object`&&i&&i.$$typeof===R&&Wa(i)===t.type)?(t=a(t,n.props),Za(t,n),t.return=e,t):(t=wi(n.type,n.key,n.props,null,e.mode,r),Za(t,n),t.return=e,t)}function u(e,t,n,r){return t===null||t.tag!==4||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?(t=Oi(n,e.mode,r),t.return=e,t):(t=a(t,n.children||[]),t.return=e,t)}function d(e,t,n,r,i){return t===null||t.tag!==7?(t=Ti(n,e.mode,r,i),t.return=e,t):(t=a(t,n),t.return=e,t)}function f(e,t,n){if(typeof t==`string`&&t!==``||typeof t==`number`||typeof t==`bigint`)return t=Ei(``+t,e.mode,n),t.return=e,t;if(typeof t==`object`&&t){switch(t.$$typeof){case D:return n=wi(t.type,t.key,t.props,null,e.mode,n),Za(n,t),n.return=e,n;case O:return t=Oi(t,e.mode,n),t.return=e,t;case R:return t=Wa(t),f(e,t,n)}if(re(t)||U(t))return t=Ti(t,e.mode,n,null),t.return=e,t;if(typeof t.then==`function`)return f(e,Xa(t),n);if(t.$$typeof===N)return f(e,ha(e,t),n);Qa(e,t)}return null}function p(e,t,n,r){var i=t===null?null:t.key;if(typeof n==`string`&&n!==``||typeof n==`number`||typeof n==`bigint`)return i===null?c(e,t,``+n,r):null;if(typeof n==`object`&&n){switch(n.$$typeof){case D:return n.key===i?l(e,t,n,r):null;case O:return n.key===i?u(e,t,n,r):null;case R:return n=Wa(n),p(e,t,n,r)}if(re(n)||U(n))return i===null?d(e,t,n,r,null):null;if(typeof n.then==`function`)return p(e,t,Xa(n),r);if(n.$$typeof===N)return p(e,t,ha(e,n),r);Qa(e,n)}return null}function m(e,t,n,r,i){if(typeof r==`string`&&r!==``||typeof r==`number`||typeof r==`bigint`)return e=e.get(n)||null,c(t,e,``+r,i);if(typeof r==`object`&&r){switch(r.$$typeof){case D:return e=e.get(r.key===null?n:r.key)||null,l(t,e,r,i);case O:return e=e.get(r.key===null?n:r.key)||null,u(t,e,r,i);case R:return r=Wa(r),m(e,t,n,r,i)}if(re(r)||U(r))return e=e.get(n)||null,d(t,e,r,i,null);if(typeof r.then==`function`)return m(e,t,n,Xa(r),i);if(r.$$typeof===N)return m(e,t,n,ha(t,r),i);Qa(t,r)}return null}function h(i,a,s,c){for(var l=null,u=null,d=a,h=a=0,g=null;d!==null&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),qi&&Bi(i,h),l;if(d===null){for(;h<s.length;h++)d=f(i,s[h],c),d!==null&&(a=o(d,a,h),u===null?l=d:u.sibling=d,u=d);return qi&&Bi(i,h),l}for(d=r(d);h<s.length;h++)g=m(d,i,h,s[h],c),g!==null&&(e&&(_=g.alternate,_!==null&&d.delete(_.key===null?h:_.key)),a=o(g,a,h),u===null?l=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return t(i,e)}),qi&&Bi(i,h),l}function g(a,s,c,l){if(c==null)throw Error(i(151));for(var u=null,d=null,h=s,g=s=0,_=null,v=c.next();h!==null&&!v.done;g++,v=c.next()){h.index>g?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),qi&&Bi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return qi&&Bi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),qi&&Bi(a,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===k&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case D:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===k){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),Za(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===R&&Wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Za(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===k?(c=Ti(o.props.children,e.mode,c,o.key),Za(c,o),c.return=e,e=c):(c=wi(o.type,o.key,o.props,null,e.mode,c),Za(c,o),c.return=e,e=c)}return s(e);case O:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Oi(o,e.mode,c),c.return=e,e=c}return s(e);case R:return o=Wa(o),_(e,r,o,c)}if(re(o))return h(e,r,o,c);if(U(o)){if(l=U(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,Xa(o),c);if(o.$$typeof===N)return _(e,r,ha(e,o),c);Qa(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=Ei(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Ya=0;var i=_(e,t,n,r);return Ja=null,i}catch(t){if(t===Ra||t===Ba)throw t;var a=bi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var eo=$a(!0),to=$a(!1),no=!1;function ro(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function io(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ao(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function oo(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Ku&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=_i(e),gi(e,null,n),t}return pi(e,r,t,n),_i(e)}function so(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,it(e,n)}}function co(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var lo=!1;function uo(){if(lo){var e=ka;if(e!==null)throw e}}function fo(e,t,n,r){lo=!1;var i=e.updateQueue;no=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Yu&f)===f:(r&f)===f){f!==0&&f===Oa&&(lo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=T({},d,f);break a;case 2:no=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),rd|=o,e.lanes=o,e.memoizedState=d}}function po(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function mo(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;e<n.length;e++)po(n[e],t)}var ho=ce(null),go=ce(0);function _o(e,t){e=td,q(go,e),q(ho,t),td=e|t.baseLanes}function vo(){q(go,td),q(ho,ho.current)}function yo(){td=go.current,le(ho),le(go)}var bo=ce(null),xo=null;function So(e){var t=e.alternate;q(Do,Do.current&1),q(bo,e),xo===null&&(t===null||ho.current!==null||t.memoizedState!==null)&&(xo=e)}function Co(e){q(Do,Do.current),q(bo,e),xo===null&&(xo=e)}function wo(e){e.tag===22?(q(Do,Do.current),q(bo,e),xo===null&&(xo=e)):To()}function To(){q(Do,Do.current),q(bo,bo.current)}function Eo(e){le(bo),xo===e&&(xo=null),le(Do)}var Do=ce(0);function Oo(e,t){q(bo,bo.current),q(Do,t)}function ko(e){le(Do),le(bo),xo===e&&(xo=null)}function Ao(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||om(n)||sm(n)))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==`independent`){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var jo=0,Mo=null,No=null,Po=null,Fo=!1,Io=!1,Lo=!1,Ro=0,zo=0,Bo=null,Vo=0;function Ho(){throw Error(i(321))}function Uo(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!kr(e[n],t[n]))return!1;return!0}function Wo(e,t,n,r,i,a){return jo=a,Mo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,G.H=e===null||e.memoizedState===null?sc:cc,Lo=!1,a=n(r,i),Lo=!1,Io&&(a=Ko(t,n,r,i)),Go(e),a}function Go(e){G.H=oc;var t=No!==null&&No.next!==null;if(jo=0,Po=No=Mo=null,Fo=!1,zo=0,Bo=null,t)throw Error(i(300));e===null||Tc||(e=e.dependencies,e!==null&&fa(e)&&(Tc=!0))}function Ko(e,t,n,r){Mo=e;var a=0;do{if(Io&&(Bo=null),zo=0,Io=!1,25<=a)throw Error(i(301));if(a+=1,Po=No=null,e.updateQueue!=null){var o=e.updateQueue;o.lastEffect=null,o.events=null,o.stores=null,o.memoCache!=null&&(o.memoCache.index=0)}G.H=lc,o=t(n,r)}while(Io);return o}function qo(){var e=G.H,t=e.useState()[0];return t=typeof t.then==`function`?es(t):t,e=e.useState()[0],(No===null?null:No.memoizedState)!==e&&(Mo.flags|=1024),t}function Jo(){var e=Ro!==0;return Ro=0,e}function Yo(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Xo(e){if(Fo){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}Fo=!1}jo=0,Po=No=Mo=null,Io=!1,zo=Ro=0,Bo=null}function Zo(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Po===null?Mo.memoizedState=Po=e:Po=Po.next=e,Po}function Qo(){if(No===null){var e=Mo.alternate;e=e===null?null:e.memoizedState}else e=No.next;var t=Po===null?Mo.memoizedState:Po.next;if(t!==null)Po=t,No=e;else{if(e===null)throw Mo.alternate===null?Error(i(467)):Error(i(310));No=e,e={memoizedState:No.memoizedState,baseState:No.baseState,baseQueue:No.baseQueue,queue:No.queue,next:null},Po===null?Mo.memoizedState=Po=e:Po=Po.next=e}return Po}function $o(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function es(e){var t=zo;return zo+=1,Bo===null&&(Bo=[]),e=Ua(Bo,e,t),t=Mo,(Po===null?t.memoizedState:Po.next)===null&&(t=t.alternate,G.H=t===null||t.memoizedState===null?sc:cc),e}function ts(e){if(typeof e==`object`&&e){if(typeof e.then==`function`)return es(e);if(e.$$typeof===ee)return;if(e.$$typeof===N)return ma(e)}throw Error(i(438,String(e)))}function ns(e){var t=null,n=Mo.updateQueue;if(n!==null&&(t=n.memoCache),t==null){var r=Mo.alternate;r!==null&&(r=r.updateQueue,r!==null&&(r=r.memoCache,r!=null&&(t={data:r.data.map(function(e){return e.slice()}),index:0})))}if(t??={data:[],index:0},n===null&&(n=$o(),Mo.updateQueue=n),n.memoCache=t,n=t.data[t.index],n===void 0)for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=V;return t.index++,n}function rs(e,t){return typeof t==`function`?t(e):t}function is(e){return as(Qo(),No,e)}function as(e,t,n){var r=e.queue;if(r===null)throw Error(i(311));r.lastRenderedReducer=n;var a=e.baseQueue,o=r.pending;if(o!==null){if(a!==null){var s=a.next;a.next=o.next,o.next=s}t.baseQueue=a=o,r.pending=null}if(o=e.baseState,a===null)e.memoizedState=o;else{t=a.next;var c=s=null,l=null,u=t,d=!1;do{var f=u.lane&-536870913;if(f===u.lane?(jo&f)===f:(Yu&f)===f){var p=u.revertLane;if(p===0)l!==null&&(l=l.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===Oa&&(d=!0);else if((jo&p)===p){u=u.next,p===Oa&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},l===null?(c=l=f,s=o):l=l.next=f,Mo.lanes|=p,rd|=p;f=u.action,Lo&&n(o,f),o=u.hasEagerState?u.eagerState:n(o,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},l===null?(c=l=p,s=o):l=l.next=p,Mo.lanes|=f,rd|=f;u=u.next}while(u!==null&&u!==t);if(l===null?s=o:l.next=c,!kr(o,e.memoizedState)&&(Tc=!0,d&&(n=ka,n!==null)))throw n;e.memoizedState=o,e.baseState=s,e.baseQueue=l,r.lastRenderedState=o}return a===null&&(r.lanes=0),[e.memoizedState,r.dispatch]}function os(e){var t=Qo(),n=t.queue;if(n===null)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var s=a=a.next;do o=e(o,s.action),s=s.next;while(s!==a);kr(o,t.memoizedState)||(Tc=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function ss(e,t,n){var r=Mo,a=Qo(),o=qi;if(o){if(n===void 0)throw Error(i(407));n=n()}else n=t();var s=!kr((No||a).memoizedState,n);if(s&&(a.memoizedState=n,Tc=!0),a=a.queue,Ms(us.bind(null,r,a,e),[e]),e=a.getSnapshot!==t||s||Po!==null&&!!(Po.memoizedState.tag&1),Ds(e?9:8,{destroy:void 0},ls.bind(null,r,a,n,t),null),e){if(r.flags|=2048,qu===null)throw Error(i(349));o||jo&127||cs(r,t,n)}return n}function cs(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Mo.updateQueue,t===null?(t=$o(),Mo.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function ls(e,t,n,r){t.value=n,t.getSnapshot=r,ds(t)&&fs(e)}function us(e,t,n){return n(function(){ds(t)&&fs(e)})}function ds(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!kr(e,n)}catch{return!0}}function fs(e){var t=hi(e,2);t!==null&&Md(t,e,2)}function ps(e){var t=Zo();if(typeof e==`function`){var n=e;if(e=n(),Lo){Be(!0);try{n()}finally{Be(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:rs,lastRenderedState:e},t}function ms(e,t,n,r){return e.baseState=n,as(e,No,typeof r==`function`?r:rs)}function hs(e,t,n,r,a){if(rc(e))throw Error(i(485));if(e=t.action,e!==null){var o={payload:a,action:e,next:null,isTransition:!0,status:`pending`,value:null,reason:null,listeners:[],then:function(e){o.listeners.push(e)}};G.T===null?o.isTransition=!1:n(!0),r(o),n=t.pending,n===null?(o.next=t.pending=o,gs(t,o)):(o.next=n.next,t.pending=n.next=o)}}function gs(e,t){var n=t.action,r=t.payload,i=e.state;if(t.isTransition){var a=G.T,o={};o.types=a===null?null:a.types,G.T=o;try{var s=n(i,r),c=G.S;c!==null&&c(o,s),_s(e,t,s)}catch(n){ys(e,t,n)}finally{a!==null&&o.types!==null&&(a.types=o.types),G.T=a}}else try{a=n(i,r),_s(e,t,a)}catch(n){ys(e,t,n)}}function _s(e,t,n){typeof n==`object`&&n&&typeof n.then==`function`?n.then(function(n){vs(e,t,n)},function(n){return ys(e,t,n)}):vs(e,t,n)}function vs(e,t,n){t.status=`fulfilled`,t.value=n,bs(t),e.state=n,t=e.pending,t!==null&&(n=t.next,n===t?e.pending=null:(n=n.next,t.next=n,gs(e,n)))}function ys(e,t,n){var r=e.pending;if(e.pending=null,r!==null){r=r.next;do t.status=`rejected`,t.reason=n,bs(t),t=t.next;while(t!==r)}e.action=null}function bs(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function xs(e,t){return t}function Ss(e,t){if(qi){var n=qu.formState;if(n!==null){a:{var r=Mo;if(qi){if(Ki){b:{for(var i=Ki,a=Yi;i.nodeType!==8;){if(!a){i=null;break b}if(i=lm(i.nextSibling),i===null){i=null;break b}}a=i.data,i=a===`F!`||a===`F`?i:null}if(i){Ki=lm(i.nextSibling),r=i.data===`F!`;break a}}Zi(r)}r=!1}r&&(t=n[0])}}return n=Zo(),n.memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:xs,lastRenderedState:t},n.queue=r,n=ec.bind(null,Mo,r),r.dispatch=n,r=ps(!1),a=nc.bind(null,Mo,!1,r.queue),r=Zo(),i={state:t,dispatch:null,action:e,pending:null},r.queue=i,n=hs.bind(null,Mo,i,a,n),i.dispatch=n,r.memoizedState=e,[t,n,!1]}function Cs(e){return ws(Qo(),No,e)}function ws(e,t,n){if(t=as(e,t,xs)[0],e=is(rs)[0],typeof t==`object`&&t&&typeof t.then==`function`)try{var r=es(t)}catch(e){throw e===Ra?Ba:e}else r=t;t=Qo();var i=t.queue,a=i.dispatch;return n!==t.memoizedState&&(Mo.flags|=2048,Ds(9,{destroy:void 0},Ts.bind(null,i,n),null)),[r,a,e]}function Ts(e,t){e.action=t}function Es(e){var t=Qo(),n=No;if(n!==null)return ws(t,n,e);Qo(),t=t.memoizedState,n=Qo();var r=n.queue.dispatch;return n.memoizedState=e,[t,r,!1]}function Ds(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},t=Mo.updateQueue,t===null&&(t=$o(),Mo.updateQueue=t),n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Os(){return Qo().memoizedState}function ks(e,t,n,r){var i=Zo();Mo.flags|=e,i.memoizedState=Ds(1|t,{destroy:void 0},n,r===void 0?null:r)}function As(e,t,n,r){var i=Qo();r=r===void 0?null:r;var a=i.memoizedState.inst;No!==null&&r!==null&&Uo(r,No.memoizedState.deps)?i.memoizedState=Ds(t,a,n,r):(Mo.flags|=e,i.memoizedState=Ds(1|t,a,n,r))}function js(e,t){ks(8390656,8,e,t)}function Ms(e,t){As(2048,8,e,t)}function Ns(e){Mo.flags|=4;var t=Mo.updateQueue;if(t===null)t=$o(),Mo.updateQueue=t,t.events=[e];else{var n=t.events;n===null?t.events=[e]:n.push(e)}}function Ps(e){var t=Qo().memoizedState;return Ns({ref:t,nextImpl:e}),function(){if(Ku&2)throw Error(i(440));return t.impl.apply(void 0,arguments)}}function Fs(e,t){return As(4,2,e,t)}function Is(e,t){return As(4,4,e,t)}function Ls(e,t){if(typeof t==`function`){e=e();var n=t(e);return function(){typeof n==`function`?n():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Rs(e,t,n){n=n==null?null:n.concat([e]),As(4,4,Ls.bind(null,t,e),n)}function zs(){}function Bs(e,t){var n=Qo();t=t===void 0?null:t;var r=n.memoizedState;return t!==null&&Uo(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Vs(e,t){var n=Qo();t=t===void 0?null:t;var r=n.memoizedState;if(t!==null&&Uo(t,r[1]))return r[0];if(r=e(),Lo){Be(!0);try{e()}finally{Be(!1)}}return n.memoizedState=[r,t],r}function Hs(e,t,n){return n===void 0||jo&1073741824&&!(Yu&261930)?e.memoizedState=t:(e.memoizedState=n,e=Ad(),Mo.lanes|=e,rd|=e,n)}function Us(e,t,n,r){return kr(n,t)?n:ho.current===null?!(jo&106)||jo&1073741824&&!(Yu&261930)?(Tc=!0,e.memoizedState=n):(e=Ad(),Mo.lanes|=e,rd|=e,t):(e=Hs(e,n,r),kr(e,t)||(Tc=!0),e)}function Ws(e,t,n,r,i){var a=K.p;K.p=a!==0&&8>a?a:8;var o=G.T,s={};s.types=o===null?null:o.types,G.T=s,nc(e,!1,t,n);try{var c=i(),l=G.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?tc(e,t,Ma(c,r),kd(e)):tc(e,t,r,kd(e))}catch(n){tc(e,t,{then:function(){},status:`rejected`,reason:n},kd())}finally{K.p=a,o!==null&&s.types!==null&&(o.types=s.types),G.T=o}}function Gs(){}function Ks(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=qs(e).queue;Ws(e,a,t,ie,n===null?Gs:function(){return Js(e),n(r)})}function qs(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ie,baseState:ie,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:rs,lastRenderedState:ie},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:rs,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Js(e){var t=qs(e);t.next===null&&(t=e.alternate.memoizedState),tc(e,t.next.queue,{},kd())}function Ys(){return ma(sh)}function Xs(){return Qo().memoizedState}function Zs(){return Qo().memoizedState}function Qs(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=kd();e=ao(n);var r=oo(t,e,n);r!==null&&(Md(r,t,n),so(r,t,n)),t={cache:xa()},e.payload=t;return}t=t.return}}function $s(e,t,n){var r=kd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},rc(e)?ic(t,n):(n=mi(e,t,n,r),n!==null&&(Md(n,e,r),ac(n,t,r)))}function ec(e,t,n){tc(e,t,n,kd())}function tc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(rc(e))ic(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,kr(s,o))return pi(e,t,i,0),qu===null&&fi(),!1}catch{}if(n=mi(e,t,i,r),n!==null)return Md(n,e,r),ac(n,t,r),!0}return!1}function nc(e,t,n,r){if(r={lane:2,revertLane:Nf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},rc(e)){if(t)throw Error(i(479))}else t=mi(e,n,r,2),t!==null&&Md(t,e,2)}function rc(e){var t=e.alternate;return e===Mo||t!==null&&t===Mo}function ic(e,t){Io=Fo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ac(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,it(e,n)}}var oc={readContext:ma,use:ts,useCallback:Ho,useContext:Ho,useEffect:Ho,useImperativeHandle:Ho,useLayoutEffect:Ho,useInsertionEffect:Ho,useMemo:Ho,useReducer:Ho,useRef:Ho,useState:Ho,useDebugValue:Ho,useDeferredValue:Ho,useTransition:Ho,useSyncExternalStore:Ho,useId:Ho,useHostTransitionStatus:Ho,useFormState:Ho,useActionState:Ho,useOptimistic:Ho,useMemoCache:Ho,useCacheRefresh:Ho,useEffectEvent:Ho},sc={readContext:ma,use:ts,useCallback:function(e,t){return Zo().memoizedState=[e,t===void 0?null:t],e},useContext:ma,useEffect:js,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ks(4194308,4,Ls.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ks(4194308,4,e,t)},useInsertionEffect:function(e,t){ks(4,2,e,t)},useMemo:function(e,t){var n=Zo();t=t===void 0?null:t;var r=e();if(Lo){Be(!0);try{e()}finally{Be(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Zo();if(n!==void 0){var i=n(t);if(Lo){Be(!0);try{n(t)}finally{Be(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=$s.bind(null,Mo,e),[r.memoizedState,e]},useRef:function(e){var t=Zo();return e={current:e},t.memoizedState=e},useState:function(e){e=ps(e);var t=e.queue,n=ec.bind(null,Mo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:zs,useDeferredValue:function(e,t){return Hs(Zo(),e,t)},useTransition:function(){var e=ps(!1);return e=Ws.bind(null,Mo,e.queue,!0,!1),Zo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=Mo,a=Zo();if(qi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),qu===null)throw Error(i(349));Yu&127||cs(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,js(us.bind(null,r,o,e),[e]),r.flags|=2048,Ds(9,{destroy:void 0},ls.bind(null,r,o,n,t),null),n},useId:function(){var e=Zo(),t=qu.identifierPrefix;if(qi){var n=zi,r=Ri;n=(r&~(1<<32-Ve(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Ro++,0<n&&(t+=`H`+n.toString(32)),t+=`_`}else n=Vo++,t=`_`+t+`r_`+n.toString(32)+`_`;return e.memoizedState=t},useHostTransitionStatus:Ys,useFormState:Ss,useActionState:Ss,useOptimistic:function(e){var t=Zo();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=nc.bind(null,Mo,!0,n),n.dispatch=t,[e,t]},useMemoCache:ns,useCacheRefresh:function(){return Zo().memoizedState=Qs.bind(null,Mo)},useEffectEvent:function(e){var t=Zo(),n={impl:e};return t.memoizedState=n,function(){if(Ku&2)throw Error(i(440));return n.impl.apply(void 0,arguments)}}},cc={readContext:ma,use:ts,useCallback:Bs,useContext:ma,useEffect:Ms,useImperativeHandle:Rs,useInsertionEffect:Fs,useLayoutEffect:Is,useMemo:Vs,useReducer:is,useRef:Os,useState:function(){return is(rs)},useDebugValue:zs,useDeferredValue:function(e,t){return Us(Qo(),No.memoizedState,e,t)},useTransition:function(){var e=is(rs)[0],t=Qo().memoizedState;return[typeof e==`boolean`?e:es(e),t]},useSyncExternalStore:ss,useId:Xs,useHostTransitionStatus:Ys,useFormState:Cs,useActionState:Cs,useOptimistic:function(e,t){return ms(Qo(),No,e,t)},useMemoCache:ns,useCacheRefresh:Zs,useEffectEvent:Ps},lc={readContext:ma,use:ts,useCallback:Bs,useContext:ma,useEffect:Ms,useImperativeHandle:Rs,useInsertionEffect:Fs,useLayoutEffect:Is,useMemo:Vs,useReducer:os,useRef:Os,useState:function(){return os(rs)},useDebugValue:zs,useDeferredValue:function(e,t){var n=Qo();return No===null?Hs(n,e,t):Us(n,No.memoizedState,e,t)},useTransition:function(){var e=os(rs)[0],t=Qo().memoizedState;return[typeof e==`boolean`?e:es(e),t]},useSyncExternalStore:ss,useId:Xs,useHostTransitionStatus:Ys,useFormState:Es,useActionState:Es,useOptimistic:function(e,t){var n=Qo();return No===null?(n.baseState=e,[e,n.queue.dispatch]):ms(n,No,e,t)},useMemoCache:ns,useCacheRefresh:Zs,useEffectEvent:Ps};function uc(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:T({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var dc={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=kd(),i=ao(r);i.payload=t,n!=null&&(i.callback=n),t=oo(e,i,r),t!==null&&(Md(t,e,r),so(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=kd(),i=ao(r);i.tag=1,i.payload=t,n!=null&&(i.callback=n),t=oo(e,i,r),t!==null&&(Md(t,e,r),so(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=kd(),r=ao(n);r.tag=2,t!=null&&(r.callback=t),t=oo(e,r,n),t!==null&&(Md(t,e,n),so(t,e,n))}};function fc(e,t,n,r,i,a,o){return e=e.stateNode,typeof e.shouldComponentUpdate==`function`?e.shouldComponentUpdate(r,a,o):t.prototype&&t.prototype.isPureReactComponent?!Ar(n,r)||!Ar(i,a):!0}function pc(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps==`function`&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps==`function`&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&dc.enqueueReplaceState(t,t.state,null)}function mc(e,t){var n=t;if(`ref`in t)for(var r in n={},t)r!==`ref`&&(n[r]=t[r]);if(e=e.defaultProps)for(var i in n===t&&(n=T({},n)),e)n[i]===void 0&&(n[i]=e[i]);return n}function hc(e){ci(e)}function gc(e){console.error(e)}function _c(e){ci(e)}function vc(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(e){setTimeout(function(){throw e})}}function yc(e,t,n){try{var r=e.onCaughtError;r(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function bc(e,t,n){return n=ao(n),n.tag=3,n.payload={element:null},n.callback=function(){vc(e,t)},n}function xc(e){return e=ao(e),e.tag=3,e}function Sc(e,t,n,r){var i=n.type.getDerivedStateFromError;if(typeof i==`function`){var a=r.value;e.payload=function(){return i(a)},e.callback=function(){yc(t,n,r)}}var o=n.stateNode;o!==null&&typeof o.componentDidCatch==`function`&&(e.callback=function(){yc(t,n,r),typeof i!=`function`&&(hd===null?hd=new Set([this]):hd.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:e===null?``:e})})}function Cc(e,t,n,r,a){if(n.flags|=32768,typeof r==`object`&&r&&typeof r.then==`function`){if(t=n.alternate,t!==null&&da(t,n,a,!0),n=bo.current,n!==null){switch(n.tag){case 31:case 13:case 19:return xo===null?Wd():n.alternate===null&&nd===0&&(nd=3),n.flags&=-257,n.flags|=65536,n.lanes=a,r===Va?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([r]):t.add(r),pf(e,r,a)),!1;case 22:return n.flags|=65536,r===Va?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([r]):n.add(r)),pf(e,r,a)),!1}throw Error(i(435,n.tag))}return pf(e,r,a),Wd(),!1}if(qi)return t=bo.current,t===null?(r!==Xi&&(t=Error(i(423),{cause:r}),ra(Ai(t,n))),e=e.current.alternate,e.flags|=65536,a&=-a,e.lanes|=a,r=Ai(r,n),a=bc(e.stateNode,r,a),co(e,a),nd!==4&&(nd=2)):(!(t.flags&65536)&&(t.flags|=256),t.flags|=65536,t.lanes=a,r!==Xi&&(e=Error(i(422),{cause:r}),ra(Ai(e,n)))),!1;var o=Error(i(520),{cause:r});if(o=Ai(o,n),cd===null?cd=[o]:cd.push(o),nd!==4&&(nd=2),t===null)return!0;r=Ai(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=a&-a,n.lanes|=e,e=bc(n.stateNode,r,e),co(n,e),!1;case 1:if(t=n.type,o=n.stateNode,!(n.flags&128)&&(typeof t.getDerivedStateFromError==`function`||o!==null&&typeof o.componentDidCatch==`function`&&(hd===null||!hd.has(o))))return n.flags|=65536,a&=-a,n.lanes|=a,a=xc(a),Sc(a,e,n,r),co(n,a),!1;break;case 22:if(n.memoizedState!==null)return n.flags|=65536,!1}n=n.return}while(n!==null);return!1}var wc=Error(i(461)),Tc=!1;function Ec(e,t,n,r){t.child=e===null?to(t,null,n,r):eo(t,e.child,n,r)}function Dc(e,t,n,r,i){n=n.render;var a=t.ref;if(`ref`in r){var o={};for(var s in r)s!==`ref`&&(o[s]=r[s])}else o=r;return pa(t),r=Wo(e,t,n,o,a,i),s=Jo(),e!==null&&!Tc?(Yo(e,t,i),tl(e,t,i)):(qi&&s&&Hi(t),t.flags|=1,Ec(e,t,r,i),t.child)}function Oc(e,t,n,r,i){if(e===null){var a=n.type;return typeof a==`function`&&!xi(a)&&a.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=a,kc(e,t,a,r,i)):(e=wi(n.type,null,r,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(a=e.child,!nl(e,i)){var o=a.memoizedProps;if(n=n.compare,n=n===null?Ar:n,n(o,r)&&e.ref===t.ref)return tl(e,t,i)}return t.flags|=1,e=Si(a,r),e.ref=t.ref,e.return=t,t.child=e}function kc(e,t,n,r,i){if(e!==null){var a=e.memoizedProps;if(Ar(a,r)&&e.ref===t.ref){if(Tc=!1,t.pendingProps=r=a,nl(e,i))e.flags&131072&&(Tc=!0);else return t.lanes=e.lanes,tl(e,t,i)}}return Lc(e,t,n,r,i)}function Ac(e,t,n,r){var i=r.children,a=e===null?null:e.memoizedState;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),r.mode===`hidden`){if(t.flags&128){if(a=a===null?n:a.baseLanes|n,e!==null){for(r=t.child=e.child,i=0;r!==null;)i=i|r.lanes|r.childLanes,r=r.sibling;r=i&~a}else r=0,t.child=null;return Mc(e,t,a,n,r)}if(n&536870912)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Ia(t,a===null?null:a.cachePool),a===null?vo():_o(t,a),wo(t);else return r=t.lanes=536870912,Mc(e,t,a===null?n:a.baseLanes|n,n,r)}else a===null?(e!==null&&Ia(t,null),vo(),To()):(Ia(t,a.cachePool),_o(t,a),To(),t.memoizedState=null);return Ec(e,t,i,n),t.child}function jc(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function Mc(e,t,n,r,i){var a=Fa();return a=a===null?null:{parent:ba._currentValue,pool:a},t.memoizedState={baseLanes:n,cachePool:a},e!==null&&Ia(t,null),vo(),wo(t),e!==null&&da(e,t,r,!0),t.childLanes=i,null}function Nc(e,t){return t=Kc({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function Pc(e,t,n){return eo(t,e.child,null,n),e=Nc(t,t.pendingProps),e.flags|=2,Eo(t),t.memoizedState=null,e}function Fc(e,t,n){var r=t.pendingProps,a=!!(t.flags&128);if(t.flags&=-129,e===null){if(qi){if(r.mode===`hidden`)return e=Nc(t,r),t.lanes=536870912,e.memoizedState={baseLanes:0,cachePool:null},jc(null,e);if(Co(t),(e=Ki)?(e=am(e,Yi),e=e!==null&&e.data===`&`?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Li===null?null:{id:Ri,overflow:zi},retryLane:536870912,hydrationErrors:null},n=Di(e),n.return=t,t.child=n,Gi=t,Ki=null)):e=null,e===null)throw Zi(t);return t.lanes=536870912,null}return Nc(t,r)}var o=e.memoizedState;if(o!==null){var s=o.dehydrated;if(Co(t),a){if(t.flags&256)t.flags&=-257,t=Pc(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(i(558))}else if(Tc||da(e,t,n,!1),a=(n&e.childLanes)!==0,Tc||a){if(ho.current===null){if(r=qu,r!==null&&(s=Y(r,n),s!==0&&s!==o.retryLane))throw o.retryLane=s,hi(e,s),Md(r,e,s),wc;Wd()}t=Pc(e,t,n)}else e=o.treeContext,Ki=lm(s.nextSibling),Gi=t,qi=!0,Ji=null,Yi=!1,e!==null&&Wi(t,e),t=Nc(t,r),t.flags|=134221824;return t}return e=Si(e.child,{mode:r.mode,children:r.children}),e.ref=t.ref,t.child=e,e.return=t,e}function Ic(e,t){var n=t.ref;if(n===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof n!=`function`&&typeof n!=`object`)throw Error(i(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function Lc(e,t,n,r,i){return pa(t),n=Wo(e,t,n,r,void 0,i),r=Jo(),e!==null&&!Tc?(Yo(e,t,i),tl(e,t,i)):(qi&&r&&Hi(t),t.flags|=1,Ec(e,t,n,i),t.child)}function Rc(e,t,n,r,i,a){return pa(t),t.updateQueue=null,n=Ko(t,r,n,i),Go(e),r=Jo(),e!==null&&!Tc?(Yo(e,t,a),tl(e,t,a)):(qi&&r&&Hi(t),t.flags|=1,Ec(e,t,n,a),t.child)}function zc(e,t,n,r,i){if(pa(t),t.stateNode===null){var a=vi,o=n.contextType;typeof o==`object`&&o&&(a=ma(o)),a=new n(r,a),t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,a.updater=dc,t.stateNode=a,a._reactInternals=t,a=t.stateNode,a.props=r,a.state=t.memoizedState,a.refs={},ro(t),o=n.contextType,a.context=typeof o==`object`&&o?ma(o):vi,a.state=t.memoizedState,o=n.getDerivedStateFromProps,typeof o==`function`&&(uc(t,n,o,r),a.state=t.memoizedState),typeof n.getDerivedStateFromProps==`function`||typeof a.getSnapshotBeforeUpdate==`function`||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(o=a.state,typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount(),o!==a.state&&dc.enqueueReplaceState(a,a.state,null),fo(t,r,a,i),uo(),a.state=t.memoizedState),typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!0}else if(e===null){a=t.stateNode;var s=t.memoizedProps,c=mc(n,s);a.props=c;var l=a.context,u=n.contextType;o=vi,typeof u==`object`&&u&&(o=ma(u));var d=n.getDerivedStateFromProps;u=typeof d==`function`||typeof a.getSnapshotBeforeUpdate==`function`,s=t.pendingProps!==s,u||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(s||l!==o)&&pc(t,a,r,o),no=!1;var f=t.memoizedState;a.state=f,fo(t,r,a,i),uo(),l=t.memoizedState,s||f!==l||no?(typeof d==`function`&&(uc(t,n,d,r),l=t.memoizedState),(c=no||fc(t,n,c,r,f,l,o))?(u||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount==`function`&&(t.flags|=4194308)):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),a.props=r,a.state=l,a.context=o,r=c):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,io(e,t),o=t.memoizedProps,u=mc(n,o),a.props=u,d=t.pendingProps,f=a.context,l=n.contextType,c=vi,typeof l==`object`&&l&&(c=ma(l)),s=n.getDerivedStateFromProps,(l=typeof s==`function`||typeof a.getSnapshotBeforeUpdate==`function`)||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(o!==d||f!==c)&&pc(t,a,r,c),no=!1,f=t.memoizedState,a.state=f,fo(t,r,a,i),uo();var p=t.memoizedState;o!==d||f!==p||no||e!==null&&e.dependencies!==null&&fa(e.dependencies)?(typeof s==`function`&&(uc(t,n,s,r),p=t.memoizedState),(u=no||fc(t,n,u,r,f,p,c)||e!==null&&e.dependencies!==null&&fa(e.dependencies))?(l||typeof a.UNSAFE_componentWillUpdate!=`function`&&typeof a.componentWillUpdate!=`function`||(typeof a.componentWillUpdate==`function`&&a.componentWillUpdate(r,p,c),typeof a.UNSAFE_componentWillUpdate==`function`&&a.UNSAFE_componentWillUpdate(r,p,c)),typeof a.componentDidUpdate==`function`&&(t.flags|=4),typeof a.getSnapshotBeforeUpdate==`function`&&(t.flags|=1024)):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=c,r=u):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Ic(e,t),r=!!(t.flags&128),a||r?(a=t.stateNode,n=r&&typeof n.getDerivedStateFromError!=`function`?null:a.render(),t.flags|=1,e!==null&&r?(t.child=eo(t,e.child,null,i),t.child=eo(t,null,n,i)):Ec(e,t,n,i),t.memoizedState=a.state,e=t.child):e=tl(e,t,i),e}function Bc(e,t,n,r){return ta(),t.flags|=256,Ec(e,t,n,r),t.child}var Vc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Hc(e){return{baseLanes:e,cachePool:La()}}function Uc(e,t,n){return e=e===null?0:e.childLanes&~n,t&&(e|=od),e}function Wc(e,t,n){var r=t.pendingProps,i=!1,a=!!(t.flags&128),o;if((o=a)||(o=e!==null&&e.memoizedState===null?!1:!!(Do.current&2)),o&&(i=!0,t.flags&=-129),o=!!(t.flags&32),t.flags&=-33,e===null){if(qi){if(i?So(t):To(),(e=Ki)?(e=am(e,Yi),e=e!==null&&e.data!==`&`?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Li===null?null:{id:Ri,overflow:zi},retryLane:536870912,hydrationErrors:null},n=Di(e),n.return=t,t.child=n,Gi=t,Ki=null)):e=null,e===null)throw Zi(t);return t.lanes=sm(e)?32:536870912,null}return a=r.children,r=r.fallback,i?(To(),i=t.mode,a=Kc({mode:`hidden`,children:a},i),r=Ti(r,i,n,null),a.return=t,r.return=t,a.sibling=r,t.child=a,r=t.child,r.memoizedState=Hc(n),r.childLanes=Uc(e,o,n),t.memoizedState=Vc,jc(null,r)):(So(t),Gc(t,a))}var s=e.memoizedState;if(s!==null){var c=s.dehydrated;if(c!==null)return Jc(e,t,a,o,r,c,s,n)}return i?(To(),i=r.fallback,a=t.mode,s=e.child,c=s.sibling,r=Si(s,{mode:`hidden`,children:r.children}),r.subtreeFlags=s.subtreeFlags&1206910976,c===null?(i=Ti(i,a,n,null),i.flags|=2):i=Si(c,i),i.return=t,r.return=t,r.sibling=i,t.child=r,jc(null,r),r=t.child,i=e.child.memoizedState,i===null?i=Hc(n):(a=i.cachePool,a===null?a=La():(s=ba._currentValue,a=a.parent===s?a:{parent:s,pool:s}),i={baseLanes:i.baseLanes|n,cachePool:a}),r.memoizedState=i,r.childLanes=Uc(e,o,n),t.memoizedState=Vc,jc(e.child,r)):(So(t),n=e.child,e=n.sibling,n=Si(n,{mode:`visible`,children:r.children}),n.return=t,n.sibling=null,e!==null&&(o=t.deletions,o===null?(t.deletions=[e],t.flags|=16):o.push(e)),t.child=n,t.memoizedState=null,n)}function Gc(e,t){return t=Kc({mode:`visible`,children:t},e.mode),t.return=e,e.child=t}function Kc(e,t){return e=bi(22,e,null,t),e.lanes=0,e}function qc(e,t,n){return eo(t,e.child,null,n),e=Gc(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Jc(e,t,n,r,a,o,s,c){if(n)return t.flags&256?(So(t),t.flags&=-257,qc(e,t,c)):t.memoizedState===null?(To(),o=a.fallback,s=t.mode,a=Kc({mode:`visible`,children:a.children},s),o=Ti(o,s,c,null),o.flags|=2,a.return=t,o.return=t,a.sibling=o,t.child=a,eo(t,e.child,null,c),a=t.child,a.memoizedState=Hc(c),a.childLanes=Uc(e,r,c),t.memoizedState=Vc,jc(null,a)):(To(),t.child=e.child,t.flags|=128,null);if(So(t),sm(o)){if(r=o.nextSibling&&o.nextSibling.dataset,r)var l=r.dgst;return r=l,r!==``&&(a=Error(i(419)),a.stack=``,a.digest=r,ra({value:a,source:null,stack:null})),qc(e,t,c)}if(Tc||da(e,t,c,!1),r=(c&e.childLanes)!==0,Tc||r){if(ho.current!==null)return qc(e,t,c);if(r=qu,r!==null&&(a=Y(r,c),a!==0&&a!==s.retryLane))throw s.retryLane=a,hi(e,a),Md(r,e,a),wc;return om(o)||Wd(),qc(e,t,c)}return om(o)?(t.flags|=192,t.child=e.child,null):(e=s.treeContext,Ki=lm(o.nextSibling),Gi=t,qi=!0,Ji=null,Yi=!1,e!==null&&Wi(t,e),t=Gc(t,a.children),t.flags|=134221824,t)}function Yc(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),la(e.return,t,n)}function Xc(e){for(var t=null;e!==null;){var n=e.alternate;n!==null&&Ao(n)===null&&(t=e),e=e.sibling}return t}function Zc(e,t,n,r,i,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:i,treeForkCount:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=i,o.treeForkCount=a)}function Qc(e){var t=e.child;for(e.child=null;t!==null;){var n=t.sibling;t.sibling=e.child,e.child=t,t=n}}function $c(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;r=r.children;var o=Do.current;if(t.flags&128)return Oo(t,o),null;var s=!!(o&2);if(s?(o=o&1|2,t.flags|=128):o&=1,Oo(t,o),i===`backwards`&&e!==null?(Qc(e),Ec(e,t,r,n),Qc(e)):Ec(e,t,r,n),r=qi?Pi:0,!s&&e!==null&&e.flags&128)a:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Yc(e,n,t);else if(e.tag===19)Yc(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break a;for(;e.sibling===null;){if(e.return===null||e.return===t)break a;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(i){case`backwards`:n=Xc(t.child),n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null,Qc(t)),Zc(t,!0,i,null,a,r);break;case`unstable_legacy-backwards`:for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&Ao(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Zc(t,!0,n,null,a,r);break;case`together`:Zc(t,!1,null,null,void 0,r);break;case`independent`:t.memoizedState=null;break;default:n=Xc(t.child),n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Zc(t,!1,i,n,a,r)}return t.child}function el(e,t,n){var r=t.pendingProps;return sa(t,t.type,r.value),Ec(e,t,r.children,n),t.child}function tl(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),rd|=t.lanes,(n&t.childLanes)===0){if(e!==null){if(da(e,t,n,!1),(n&t.childLanes)===0)return null}else return null}if(e!==null&&t.child!==e.child)throw Error(i(153));if(t.child!==null){for(e=t.child,n=Si(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Si(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function nl(e,t){return(e.lanes&t)!==0||(e=e.dependencies,!!(e!==null&&fa(e)))}function rl(e,t,n){switch(t.tag){case 3:pe(t,t.stateNode.containerInfo),sa(t,ba,e.memoizedState.cache),ta();break;case 27:case 5:he(t);break;case 4:pe(t,t.stateNode.containerInfo);break;case 10:sa(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,Co(t),null;break;case 13:var r=t.memoizedState;if(r!==null){if(r.dehydrated!==null)return So(t),t.flags|=128,null;r=da(e,t,n,!1);var i=t.child.childLanes;return r||(n&i)!==0?Wc(e,t,n):(So(t),e=tl(e,t,n),e===null?null:e.sibling)}So(t);break;case 19:if(t.flags&128)return $c(e,t,n);if(i=!!(e.flags&128),r=(n&t.childLanes)!==0,r||=(da(e,t,n,!1),(n&t.childLanes)!==0),i){if(r)return $c(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),Oo(t,Do.current),r)break;return null;case 22:return t.lanes=0,Ac(e,t,n,t.pendingProps);case 24:sa(t,ba,e.memoizedState.cache)}return tl(e,t,n)}function il(e,t,n){if(e!==null){if(e.memoizedProps!==t.pendingProps)Tc=!0;else{if(!nl(e,n)&&!(t.flags&128))return Tc=!1,rl(e,t,n);Tc=!!(e.flags&131072)}}else Tc=!1,qi&&t.flags&1048576&&Vi(t,Pi,t.index);switch(t.lanes=0,t.tag){case 16:a:{var r=t.pendingProps;if(e=Wa(t.elementType),t.type=e,typeof e==`function`)xi(e)?(r=mc(e,r),t.tag=1,t=zc(null,t,e,r,n)):(t.tag=0,t=Lc(null,t,e,r,n));else{if(e!=null){var a=e.$$typeof;if(a===P){t.tag=11,t=Dc(null,t,e,r,n);break a}if(a===L){t.tag=14,t=Oc(null,t,e,r,n);break a}if(a===N){t.tag=10,t.type=e,t=el(null,t,n);break a}}throw t=ne(e)||e,Error(i(306,t,``))}}return t;case 0:return Lc(e,t,t.type,t.pendingProps,n);case 1:return r=t.type,a=mc(r,t.pendingProps),zc(e,t,r,a,n);case 3:a:{if(pe(t,t.stateNode.containerInfo),e===null)throw Error(i(387));r=t.pendingProps;var o=t.memoizedState;a=o.element,io(e,t),fo(t,r,null,n);var s=t.memoizedState;if(r=s.cache,sa(t,ba,r),r!==o.cache&&ua(t,[ba],n,!0),uo(),r=s.element,o.isDehydrated){if(o={element:r,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){t=Bc(e,t,r,n);break a}if(r!==a){a=Ai(Error(i(424)),t),ra(a),t=Bc(e,t,r,n);break a}switch(e=t.stateNode.containerInfo,e.nodeType){case 9:e=e.body;break;default:e=e.nodeName===`HTML`?e.ownerDocument.body:e}for(Ki=lm(e.firstChild),Gi=t,qi=!0,Ji=null,Yi=!0,n=to(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|134221824,n=n.sibling}else{if(ta(),r===a){t=tl(e,t,n);break a}Ec(e,t,r,n)}t=t.child}return t;case 26:return Ic(e,t),e===null?(n=Nm(t.type,null,t.pendingProps,null))?t.memoizedState=n:qi||(t.stateNode=fp(t.type,t.pendingProps,J.current,t)):t.memoizedState=Nm(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return he(t),e===null&&qi&&(r=t.stateNode=hm(t.type,t.pendingProps,J.current),Gi=t,Yi=!0,a=Ki,Sp(t.type)?(um=a,Ki=lm(r.firstChild)):Ki=a),Ec(e,t,t.pendingProps.children,n),Ic(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&qi&&((a=r=Ki)&&(r=rm(r,t.type,t.pendingProps,Yi),r===null?a=!1:(t.stateNode=r,Gi=t,Ki=lm(r.firstChild),Yi=!1,a=!0)),a||Zi(t)),he(t),a=t.type,o=t.pendingProps,s=e===null?null:e.memoizedProps,r=o.children,pp(a,o)?r=null:s!==null&&pp(a,s)&&(t.flags|=32),t.memoizedState!==null&&(a=Wo(e,t,qo,null,null,n),sh._currentValue=a),Ic(e,t),Ec(e,t,r,n),t.child;case 6:return e===null&&qi&&((e=n=Ki)&&(n=im(n,t.pendingProps,Yi),n===null?e=!1:(t.stateNode=n,Gi=t,Ki=null,e=!0)),e||Zi(t)),null;case 13:return Wc(e,t,n);case 4:return pe(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=eo(t,null,r,n):Ec(e,t,r,n),t.child;case 11:return Dc(e,t,t.type,t.pendingProps,n);case 7:return r=t.pendingProps,Ic(e,t),Ec(e,t,r,n),t.child;case 8:return Ec(e,t,t.pendingProps.children,n),t.child;case 12:return Ec(e,t,t.pendingProps.children,n),t.child;case 10:return el(e,t,n);case 9:return a=t.type._context,r=t.pendingProps.children,pa(t),a=ma(a),r=r(a),t.flags|=1,Ec(e,t,r,n),t.child;case 14:return Oc(e,t,t.type,t.pendingProps,n);case 15:return kc(e,t,t.type,t.pendingProps,n);case 19:return $c(e,t,n);case 31:return Fc(e,t,n);case 22:return Ac(e,t,n,t.pendingProps);case 24:return pa(t),r=ma(ba),e===null?(a=Fa(),a===null&&(a=qu,o=xa(),a.pooledCache=o,o.refCount++,o!==null&&(a.pooledCacheLanes|=n),a=o),t.memoizedState={parent:r,cache:a},ro(t),sa(t,ba,a)):((e.lanes&n)!==0&&(io(e,t),fo(t,null,null,n),uo()),a=e.memoizedState,o=t.memoizedState,a.parent===r?(r=o.cache,sa(t,ba,r),r!==a.cache&&ua(t,[ba],n,!0)):(a={parent:r,cache:r},t.memoizedState=a,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=a),sa(t,ba,r))),Ec(e,t,t.pendingProps.children,n),t.child;case 30:return t.stateNode===null&&(t.stateNode={autoName:null,paired:null,clones:null,ref:null}),r=t.pendingProps,r.name!=null&&r.name!==`auto`?t.flags|=e===null?18882560:18874368:qi&&Hi(t),e!==null&&e.memoizedProps.name!==r.name?t.flags|=4194816:Ic(e,t),Ec(e,t,r.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function al(e){e.flags|=4}function ol(e,t,n,r,i){var a;if((a=!!(e.mode&32))&&(a=n===null?Jm(t,r):Jm(t,r)&&(r.src!==n.src||r.srcSet!==n.srcSet)),a){if(e.flags|=16777216,(i&335544128)===i){if(e.stateNode.complete)e.flags|=8192;else if(Vd())e.flags|=8192;else throw Ga=Va,za}}else e.flags&=-16777217}function sl(e,t){if(t.type!==`stylesheet`||t.state.loading&4)e.flags&=-16777217;else if(e.flags|=16777216,!Ym(t)){if(Vd())e.flags|=8192;else throw Ga=Va,za}}function cl(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag===22?536870912:$e(),e.lanes|=t,sd|=t)}function ll(e,t){if(!qi)switch(e.tailMode){case`visible`:break;case`collapsed`:for(var n=e.tail,r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null;break;default:for(t=e.tail,n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null}}function ul(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags&1206910976,r|=i.flags&1206910976,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags,r|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function dl(e,t,n){var r=t.pendingProps;switch(Ui(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ul(t),null;case 1:return ul(t),null;case 3:return n=t.stateNode,r=null,e!==null&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),ca(ba),me(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(ea(t)?al(t):e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,na())),ul(t),null;case 26:var a=t.type,o=t.memoizedState;return e===null?(al(t),o===null?(ul(t),ol(t,a,null,r,n)):(ul(t),sl(t,o))):o?o===e.memoizedState?(ul(t),t.flags&=-16777217):(al(t),ul(t),sl(t,o)):(e=e.memoizedProps,e!==r&&al(t),ul(t),ol(t,a,e,r,n)),null;case 27:if(ge(t),n=J.current,a=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==r&&al(t);else{if(!r){if(t.stateNode===null)throw Error(i(166));return ul(t),t.subtreeFlags&=-33554433,null}e=ue.current,ea(t)?Qi(t,e):(e=hm(a,r,n),t.stateNode=e,al(t))}return ul(t),t.subtreeFlags&=-33554433,null;case 5:if(ge(t),a=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==r&&al(t);else{if(!r){if(t.stateNode===null)throw Error(i(166));return ul(t),t.subtreeFlags&=-33554433,null}if(o=ue.current,ea(t))Qi(t,o);else{var s=up(J.current);switch(o){case 1:o=s.createElementNS(`http://www.w3.org/2000/svg`,a);break;case 2:o=s.createElementNS(`http://www.w3.org/1998/Math/MathML`,a);break;default:switch(a){case`svg`:o=s.createElementNS(`http://www.w3.org/2000/svg`,a);break;case`math`:o=s.createElementNS(`http://www.w3.org/1998/Math/MathML`,a);break;case`script`:o=s.createElement(`div`),o.innerHTML=`<script><\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[ut]=t,o[dt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(rp(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&al(t)}}return ul(t),t.subtreeFlags&=-33554433,ol(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&al(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=J.current,ea(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Gi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[ut]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||ep(e.nodeValue,n)),e||Zi(t,!0)}else e=up(e).createTextNode(r),e[ut]=t,t.stateNode=e}return ul(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ea(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[ut]=t}else ta(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;ul(t),e=!1}else n=na(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Eo(t),t):(Eo(t),null);if(t.flags&128)throw Error(i(558))}return ul(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=ea(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[ut]=t}else ta(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;ul(t),a=!1}else a=na(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(Eo(t),t):(Eo(t),null)}return Eo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),cl(t,t.updateQueue),ul(t),null);case 4:return me(),e===null&&Wf(t.stateNode.containerInfo),t.flags|=67108864,ul(t),null;case 10:return ca(t.type),ul(t),null;case 19:if(ko(t),r=t.memoizedState,r===null)return ul(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)ll(r,!1);else{if(nd!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Ao(e),o!==null){for(t.flags|=128,ll(r,!1),e=o.updateQueue,t.updateQueue=e,cl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Ci(n,e),n=n.sibling;return Oo(t,Do.current&1|2),qi&&Bi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&ke()>pd&&(t.flags|=128,a=!0,ll(r,!1),t.lanes=4194304)}}else{if(!a){if(e=Ao(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,cl(t,e),ll(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!qi)return ul(t),null}else 2*ke()-r.renderingStartTime>pd&&n!==536870912&&(t.flags|=128,a=!0,ll(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=ke(),e.sibling=null,o=Do.current,o=a?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||qi?Oo(t,o):(n=o,q(bo,t),q(Do,n),xo===null&&(xo=t)),qi&&Bi(t,r.treeForkCount),e}return ul(t),null;case 22:case 23:return Eo(t),yo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(ul(t),t.subtreeFlags&6&&(t.flags|=8192)):ul(t),n=t.updateQueue,n!==null&&cl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&le(Pa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ca(ba),ul(t),null;case 25:return null;case 30:return t.flags|=33554432,ul(t),null}throw Error(i(156,t.tag))}function fl(e,t){switch(Ui(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ca(ba),me(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ge(t),null;case 31:if(t.memoizedState!==null){if(Eo(t),t.alternate===null)throw Error(i(340));ta()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Eo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));ta()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ko(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return me(),null;case 10:return ca(t.type),null;case 22:case 23:return Eo(t),yo(),e!==null&&le(Pa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ca(ba),null;case 25:return null;default:return null}}function pl(e,t){switch(Ui(t),t.tag){case 3:ca(ba),me();break;case 26:case 27:case 5:ge(t);break;case 4:me();break;case 31:t.memoizedState!==null&&Eo(t);break;case 13:Eo(t);break;case 19:ko(t);break;case 10:ca(t.type);break;case 22:case 23:Eo(t),yo(),e!==null&&le(Pa);break;case 24:ca(ba)}}function ml(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){ff(t,t.return,e)}}function hl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){ff(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){ff(t,t.return,e)}}function gl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{mo(t,n)}catch(t){ff(e,e.return,t)}}}function _l(e,t,n){n.props=mc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){ff(e,t,n)}}function vl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=ai(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);p(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){ff(e,t,n)}}function yl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){ff(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){ff(e,t,n)}else n.current=null}}function bl(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n<t.length;n++)em(e.stateNode,t[n])}function xl(e){for(var t=e.return;t!==null&&(wl(t)&&em(e.stateNode,t.stateNode),!Cl(t));)t=t.return}function Sl(e){for(var t=e.return;t!==null&&(wl(t)&&tm(e.stateNode,t.stateNode),!Cl(t));)t=t.return}function Cl(e){return e.tag===5||e.tag===3||e.tag===27}function wl(e){return e&&e.tag===7&&e.stateNode!==null}function Tl(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){ff(e,e.return,t)}}function El(e,t,n){try{var r=e.stateNode;ap(r,e.type,n,t),r[dt]=t}catch(t){ff(e,e.return,t)}}function Dl(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Sp(e.type)||e.tag===4}function Ol(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Dl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Sp(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function kl(e,t,n,r){var i=e.tag;if(i===5||i===6)i=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(i,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(i),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=sn)),bl(e,r),Pt=!0;else if(i!==4&&(i===27&&(bl(e,r),r=null,Sp(e.type)&&(n=e.stateNode,t=null)),e=e.child,e!==null))for(kl(e,t,n,r),e=e.sibling;e!==null;)kl(e,t,n,r),e=e.sibling}function Al(e,t,n,r){var i=e.tag;if(i===5||i===6)i=e.stateNode,t?n.insertBefore(i,t):n.appendChild(i),bl(e,r),Pt=!0;else if(i!==4&&(i===27&&(bl(e,r),r=null,Sp(e.type)&&(n=e.stateNode)),e=e.child,e!==null))for(Al(e,t,n,r),e=e.sibling;e!==null;)Al(e,t,n,r),e=e.sibling}function jl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);rp(t,r,n),t[ut]=e,t[dt]=n}catch(t){ff(e,e.return,t)}}var Ml=!1,Nl=null;function Pl(e){(e.tag===30||e.subtreeFlags&33554432)&&(Ml=!0)}var Fl=null;function Il(){var e=Fl;return Fl=null,e}var Ll=0;function Rl(e,t,n,r,i){return Ll=0,zl(e.child,t,n,r,i)}function zl(e,t,n,r,i){for(var a=!1;e!==null;){if(e.tag===5){var o=e.stateNode;if(r!==null){var s=Op(o);r.push(s),s.view&&(a=!0)}else a||Op(o).view&&(a=!0);Ml=!0,Tp(o,Ll===0?t:t+`_`+Ll,n),Ll++}else(e.tag!==22||e.memoizedState===null)&&(e.tag===30&&i||zl(e.child,t,n,r,i)&&(a=!0));e=e.sibling}return a}function Bl(e,t){for(;e!==null;)e.tag===5?Ep(e.stateNode,e.memoizedProps):(e.tag!==22||e.memoizedState===null)&&(e.tag===30&&t||Bl(e.child,t)),e=e.sibling}function Vl(e){if(e.subtreeFlags&18874368)for(e=e.child;e!==null;){if((e.tag!==22||e.memoizedState===null)&&(Vl(e),e.tag===30&&e.flags&18874368&&e.stateNode.paired)){var t=e.memoizedProps;if(t.name==null||t.name===`auto`)throw Error(i(544));var n=t.name;t=si(t.default,t.share),t!==`none`&&(Rl(e,n,t,null,!1)||Bl(e.child,!1))}e=e.sibling}}function Hl(e,t){if(e.tag===30){var n=e.stateNode,r=e.memoizedProps,i=ai(r,n),a=si(r.default,n.paired?r.share:r.enter);a===`none`?Vl(e):Rl(e,i,a,null,!1)?(Vl(e),n.paired||t||jd(e,r.onEnter)):Bl(e.child,!1)}else if(e.subtreeFlags&33554432)for(e=e.child;e!==null;)Hl(e,t),e=e.sibling;else Vl(e)}function Ul(e){if(Nl!==null&&Nl.size!==0){var t=Nl;if(e.subtreeFlags&18874368)for(e=e.child;e!==null;){if(e.tag!==22||e.memoizedState===null){if(e.tag===30&&e.flags&18874368){var n=e.memoizedProps,r=n.name;if(r!=null&&r!==`auto`){var i=t.get(r);if(i!==void 0){var a=si(n.default,n.share);if(a!==`none`&&(Rl(e,r,a,null,!1)?(a=e.stateNode,i.paired=a,a.paired=i,jd(e,n.onShare)):Bl(e.child,!1)),t.delete(r),t.size===0)break}}}Ul(e)}e=e.sibling}}}function Wl(e){if(e.tag===30){var t=e.memoizedProps,n=ai(t,e.stateNode),r=Nl===null?void 0:Nl.get(n),i=si(t.default,r===void 0?t.exit:t.share);i!==`none`&&(Rl(e,n,i,null,!1)?r===void 0?jd(e,t.onExit):(i=e.stateNode,r.paired=i,i.paired=r,Nl.delete(n),jd(e,t.onShare)):Bl(e.child,!1)),Nl!==null&&Ul(e)}else if(e.subtreeFlags&33554432)for(e=e.child;e!==null;)Wl(e),e=e.sibling;else Nl!==null&&Ul(e)}function Gl(e){for(e=e.child;e!==null;){if(e.tag===30){var t=e.memoizedProps,n=ai(t,e.stateNode);t=si(t.default,t.update),e.flags&=-5,t!==`none`&&Rl(e,n,t,e.memoizedState=[],!1)}else e.subtreeFlags&33554432&&Gl(e);e=e.sibling}}function Kl(e){if(e.subtreeFlags&18874368)for(e=e.child;e!==null;){if(e.tag!==22||e.memoizedState===null){if(e.tag===30&&e.flags&18874368){var t=e.stateNode;t.paired!==null&&(t.paired=null,Bl(e.child,!1))}Kl(e)}e=e.sibling}}function ql(e){if(e.tag===30)e.stateNode.paired=null,Bl(e.child,!1),Kl(e);else if(e.subtreeFlags&33554432)for(e=e.child;e!==null;)ql(e),e=e.sibling;else Kl(e)}function Jl(e){for(e=e.child;e!==null;)e.tag===30?Bl(e.child,!1):e.subtreeFlags&33554432&&Jl(e),e=e.sibling}function Yl(e,t,n,r,i,a,o){for(var s=!1;t!==null;){if(t.tag===5){var c=t.stateNode;if(a!==null&&Ll<a.length){var l=a[Ll],u=Op(c);(l.view||u.view)&&(s=!0);var d;if(d=!(e.flags&4)){if(u.clip)d=!0;else{d=l.rect;var f=u.rect;d=d.y!==f.y||d.x!==f.x||d.height!==f.height||d.width!==f.width}}d&&(e.flags|=4),u.abs?u=!l.abs:(l=l.rect,u=u.rect,u=l.height!==u.height||l.width!==u.width),u&&(e.flags|=32)}else e.flags|=32;e.flags&4&&Tp(c,Ll===0?n:n+`_`+Ll,i),s&&e.flags&4||(Fl===null&&(Fl=[]),Fl.push(c,Ll===0?r:r+`_`+Ll,t.memoizedProps)),Ll++}else(t.tag!==22||t.memoizedState===null)&&(t.tag===30&&o?e.flags|=t.flags&32:Yl(e,t.child,n,r,i,a,o)&&(s=!0));t=t.sibling}return s}function Xl(e,t){for(e=e.child;e!==null;){if(e.tag===30){var n=e.memoizedProps,r=e.stateNode,i=ai(n,r),a=si(n.default,n.update);if(t){r=r.clones;var o=r===null?null:r.map(kp)}else o=e.memoizedState,e.memoizedState=null;r=e;var s=e.child;Ll=0,i=Yl(r,s,i,i,a,o,!1),e.flags&4&&i&&(t||jd(e,n.onUpdate))}else e.subtreeFlags&33554432&&Xl(e,t);e=e.sibling}}var Zl=!1,Z=!1,Ql=!1,$l=!1,eu=typeof WeakSet==`function`?WeakSet:Set,tu=null,nu=!1,ru=!1,iu=!1,au=!1;function ou(e,t,n){if(e=e.containerInfo,cp=gh,e=Fr(e),Ir(e)){if(`selectionStart`in e)var r={start:e.selectionStart,end:e.selectionEnd};else a:{r=(r=e.ownerDocument)&&r.defaultView||window;var i=r.getSelection&&r.getSelection();if(i&&i.rangeCount!==0){r=i.anchorNode;var a=i.anchorOffset,o=i.focusNode;i=i.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==r||a!==0&&f.nodeType!==3||(c=s+a),f!==o||i!==0&&f.nodeType!==3||(l=s+i),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===r&&++u===a&&(c=s),p===o&&++d===i&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}r=c===-1||l===-1?null:{start:c,end:l}}else r=null}r||={start:0,end:0}}else r=null;for(lp={focusedElem:e,selectionRange:r},gh=!1,n=(n&335544064)===n,tu=t,t=n?9270:1024;tu!==null;){if(e=tu,n&&(r=e.deletions,r!==null))for(a=0;a<r.length;a++)n&&Wl(r[a]);if(e.alternate===null&&e.flags&2)n&&Pl(e),su(n);else{if(e.tag===22){if(r=e.alternate,e.memoizedState!==null){r!==null&&r.memoizedState===null&&n&&Wl(r),su(n);continue}if(r!==null&&r.memoizedState!==null){n&&Pl(e),su(n);continue}}r=e.child,(e.subtreeFlags&t)!==0&&r!==null?(r.return=e,tu=r):(n&&Gl(e),su(n))}}Nl=null}function su(e){for(;tu!==null;){var t=tu,n=e,r=t.alternate,a=t.flags;switch(t.tag){case 0:case 11:case 15:break;case 1:if(a&1024&&r!==null){n=void 0,a=r.memoizedProps,r=r.memoizedState;var o=t.stateNode;try{var s=mc(t.type,a);n=o.getSnapshotBeforeUpdate(s,r),o.__reactInternalSnapshotBeforeUpdate=n}catch(e){ff(t,t.return,e)}}break;case 3:if(a&1024){if(r=t.stateNode.containerInfo,n=r.nodeType,n===9)nm(r);else if(n===1)switch(r.nodeName){case`HEAD`:case`HTML`:case`BODY`:nm(r);break;default:r.textContent=``}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;case 30:n&&r!==null&&(n=ai(r.memoizedProps,r.stateNode),a=t.memoizedProps,a=si(a.default,a.update),a!==`none`&&Rl(r,n,a,r.memoizedState=[],!0));break;default:if(a&1024)throw Error(i(163))}if(r=t.sibling,r!==null){r.return=t.return,tu=r;break}tu=t.return}}function cu(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Du(e,n),r&4&&ml(5,n);break;case 1:if(Du(e,n),r&4){if(e=n.stateNode,t===null)try{e.componentDidMount()}catch(e){ff(n,n.return,e)}else{var i=mc(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(i,t,e.__reactInternalSnapshotBeforeUpdate)}catch(e){ff(n,n.return,e)}}}r&64&&gl(n),r&512&&vl(n,n.return);break;case 3:if(Du(e,n),r&64&&(e=n.updateQueue,e!==null)){if(t=null,n.child!==null)switch(n.child.tag){case 27:case 5:t=n.child.stateNode;break;case 1:t=n.child.stateNode}try{mo(e,t)}catch(e){ff(n,n.return,e)}}break;case 27:t===null&&r&4&&jl(n);case 26:case 5:Du(e,n),t===null&&r&4&&Tl(n),r&512&&vl(n,n.return);break;case 12:Du(e,n);break;case 31:Du(e,n),r&4&&_u(e,n);break;case 13:Du(e,n),r&4&&vu(e,n),r&64&&(e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(n=gf.bind(null,n),cm(e,n))));break;case 22:if(r=n.memoizedState!==null||Zl,!r){var a=t!==null&&t.memoizedState!==null||Z;t=Zl,i=Z,Zl=r,(Z=a)&&!i?(r=2,n.subtreeFlags&8772&&(r|=1),ku(e,n,r)):Du(e,n),Zl=t,Z=i}break;case 30:Du(e,n),r&512&&vl(n,n.return);break;case 7:r&512&&vl(n,n.return);default:Du(e,n)}}function lu(e,t){for(e=e.child;e!==null;)uu(e,t),e=e.sibling}function uu(e,t){switch(e.tag){case 5:case 26:try{var n=e.stateNode;if(t){var r=n.style;typeof r.setProperty==`function`?r.setProperty(`display`,`none`,`important`):r.display=`none`}else{var i=e.stateNode,a=e.memoizedProps.style,o=a!=null&&a.hasOwnProperty(`display`)?a.display:null;i.style.display=o==null||typeof o==`boolean`?``:(``+o).trim()}}catch(t){ff(e,e.return,t)}du(e,t);break;case 6:try{e.stateNode.nodeValue=t?``:e.memoizedProps,Pt=!0}catch(t){ff(e,e.return,t)}break;case 18:try{var s=e.stateNode;t?wp(s,!0):wp(e.stateNode,!1)}catch(t){ff(e,e.return,t)}break;case 22:case 23:e.memoizedState===null&&lu(e,t);break;default:lu(e,t)}}function du(e,t){if(e.subtreeFlags&67108864)for(e=e.child;e!==null;){a:{var n=e,r=t;switch(n.tag){case 4:uu(n,r);break a;case 22:n.memoizedState===null&&du(n,r);break a;default:du(n,r)}}e=e.sibling}}function fu(e){var t=e.alternate;t!==null&&(e.alternate=null,fu(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&yt(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var pu=null,mu=!1;function hu(e,t,n){for(n=n.child;n!==null;)gu(e,t,n),n=n.sibling}function gu(e,t,n){if(ze&&typeof ze.onCommitFiberUnmount==`function`)try{ze.onCommitFiberUnmount(Re,n)}catch{}switch(n.tag){case 26:Z||yl(n,t),hu(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&!Z&&(n=n.stateNode,n.parentNode.removeChild(n));break;case 27:Z||yl(n,t),Sl(n);var r=pu,i=mu;Sp(n.type)&&(pu=n.stateNode,mu=!1),hu(e,t,n),gm(n.stateNode,n.type,n.memoizedProps),pu=r,mu=i;break;case 5:Z||yl(n,t),Sl(n);case 6:if(n.tag===6&&Sl(n),r=pu,i=mu,pu=null,hu(e,t,n),pu=r,mu=i,pu!==null){if(mu)try{(pu.nodeType===9?pu.body:pu.nodeName===`HTML`?pu.ownerDocument.body:pu).removeChild(n.stateNode),Pt=!0}catch(e){ff(n,t,e)}else try{pu.removeChild(n.stateNode),Pt=!0}catch(e){ff(n,t,e)}}break;case 18:pu!==null&&(mu?(e=pu,Cp(e.nodeType===9?e.body:e.nodeName===`HTML`?e.ownerDocument.body:e,n.stateNode),Hh(e)):Cp(pu,n.stateNode));break;case 4:r=pu,i=mu,pu=n.stateNode.containerInfo,mu=!0,hu(e,t,n),pu=r,mu=i;break;case 0:case 11:case 14:case 15:hl(2,n,t),Z||hl(4,n,t),hu(e,t,n);break;case 1:Z||(yl(n,t),r=n.stateNode,typeof r.componentWillUnmount==`function`&&_l(n,t,r)),hu(e,t,n);break;case 21:hu(e,t,n);break;case 22:Z=(r=Z)||n.memoizedState!==null,hu(e,t,n),Z=r;break;case 30:yl(n,t),hu(e,t,n);break;case 7:Z||yl(n,t),hu(e,t,n);break;default:hu(e,t,n)}}function _u(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Hh(e)}catch(e){ff(t,t.return,e)}}}function vu(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Hh(e)}catch(e){ff(t,t.return,e)}}function yu(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new eu),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new eu),t;default:throw Error(i(435,e.tag))}}function bu(e,t){var n=yu(e);t.forEach(function(t){if(!n.has(t)){n.add(t);var r=_f.bind(null,e,t);t.then(r,r)}})}function xu(e,t,n){var r=t.deletions;if(r!==null)for(var a=0;a<r.length;a++){var o=r[a],s=e,c=t,l=c;a:for(;l!==null;){switch(l.tag){case 27:if(Sp(l.type)){pu=l.stateNode,mu=!1;break a}break;case 5:pu=l.stateNode,mu=!1;break a;case 3:case 4:pu=l.stateNode.containerInfo,mu=!0;break a}l=l.return}if(pu===null)throw Error(i(160));gu(s,c,o),pu=null,mu=!1,s=o.alternate,s!==null&&(s.return=null),o.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)Cu(t,e,n),t=t.sibling}var Su=null;function Cu(e,t,n){var r=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(a&4&&(r=e.updateQueue,r=r===null?null:r.events,r!==null))for(var o=0;o<r.length;o++){var s=r[o];s.ref.impl=s.nextImpl}xu(t,e,n),Q(e),a&4&&(hl(3,e,e.return),ml(3,e),hl(5,e,e.return));break;case 1:xu(t,e,n),Q(e),a&512&&(Z||r===null||yl(r,r.return)),a&64&&Zl&&(e=e.updateQueue,e!==null&&(t=e.callbacks,t!==null&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=n===null?t:n.concat(t))));break;case 26:if(o=Su,xu(t,e,n),Q(e),a&512&&(Z||r===null||yl(r,r.return)),a&4){if(a=r===null?null:r.memoizedState,n=e.memoizedState,r===null){if(n===null){if(e.stateNode===null){if(Zl)e.stateNode=fp(e.type,e.memoizedProps,t.containerInfo,e);else{a:{t=e.type,n=e.memoizedProps,a=o.ownerDocument||o;b:switch(t){case`title`:r=a.getElementsByTagName(`title`)[0],(!r||r[_t]||r[ut]||r.namespaceURI===`http://www.w3.org/2000/svg`||r.hasAttribute(`itemprop`))&&(r=a.createElement(t),a.head.insertBefore(r,a.querySelector(`head > title`))),rp(r,t,n),r[ut]=e,wt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,a).get(t+(n.href||``))){for(s=0;s<o.length;s++)if(r=o[s],r.getAttribute(`href`)===(n.href==null||n.href===``?null:n.href)&&r.getAttribute(`rel`)===(n.rel==null?null:n.rel)&&r.getAttribute(`title`)===(n.title==null?null:n.title)&&r.getAttribute(`crossorigin`)===(n.crossOrigin==null?null:n.crossOrigin)){o.splice(s,1);break b}}r=a.createElement(t),rp(r,t,n),a.head.appendChild(r);break;case`meta`:if(o=Gm(`meta`,`content`,a).get(t+(n.content||``))){for(s=0;s<o.length;s++)if(r=o[s],r.getAttribute(`content`)===(n.content==null?null:``+n.content)&&r.getAttribute(`name`)===(n.name==null?null:n.name)&&r.getAttribute(`property`)===(n.property==null?null:n.property)&&r.getAttribute(`http-equiv`)===(n.httpEquiv==null?null:n.httpEquiv)&&r.getAttribute(`charset`)===(n.charSet==null?null:n.charSet)){o.splice(s,1);break b}}r=a.createElement(t),rp(r,t,n),a.head.appendChild(r);break;default:throw Error(i(468,t))}r[ut]=e,wt(r),t=r}e.stateNode=t}}else Zl||Km(o,e.type,e.stateNode)}else e.stateNode=Bm(o,n,e.memoizedProps)}else a===n?n===null&&e.stateNode!==null&&El(e,e.memoizedProps,r.memoizedProps):(a===null?(t=r.stateNode,t===null||Z||t.parentNode.removeChild(t)):a.count--,n===null?Zl||Km(o,e.type,e.stateNode):Bm(o,n,e.memoizedProps))}break;case 27:xu(t,e,n),Q(e),a&512&&(Z||r===null||yl(r,r.return)),r!==null&&a&4&&El(e,e.memoizedProps,r.memoizedProps);break;case 5:if(o=Ql,Ql=!1,xu(t,e,n),Ql=o,Q(e),a&512&&(Z||r===null||yl(r,r.return)),e.flags&32){t=e.stateNode;try{Qt(t,``),Pt=!0}catch(t){ff(e,e.return,t)}}a&4&&e.stateNode!=null&&(t=e.memoizedProps,El(e,t,r===null?t:r.memoizedProps)),a&1024&&($l=!0);break;case 6:if(xu(t,e,n),Q(e),a&4){if(e.stateNode===null)throw Error(i(162));t=e.memoizedProps,n=e.stateNode;try{n.nodeValue=t,Pt=!0}catch(t){ff(e,e.return,t)}}break;case 3:if(Pt=!1,Wm=null,o=Su,Su=bm(t.containerInfo),xu(t,e,n),Su=o,Q(e),a&4&&r!==null&&r.memoizedState.isDehydrated)try{Hh(t.containerInfo)}catch(t){ff(e,e.return,t)}$l&&($l=!1,wu(e)),Pt=!1;break;case 4:a=Ql,Ql=Zl,r=Ft(),o=Su,Su=bm(e.stateNode.containerInfo),xu(t,e,n),Q(e),Su=o,Pt&&ru&&(iu=!0),Pt=r,Ql=a;break;case 12:xu(t,e,n),Q(e);break;case 31:xu(t,e,n),Q(e),a&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,bu(e,t)));break;case 13:xu(t,e,n),Q(e),e.child.flags&8192&&e.memoizedState!==null!=(r!==null&&r.memoizedState!==null)&&(dd=ke()),a&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,bu(e,t)));break;case 22:o=e.memoizedState!==null,s=r!==null&&r.memoizedState!==null;var c=Zl,l=Z,u=Ql;Zl=c||o,Ql=u||o,Z=l||s,xu(t,e,n),Z=l,Ql=u,Zl=c,Q(e),a&8192&&(t=e.stateNode,t._visibility=o?t._visibility&-2:t._visibility|1,!o||r===null||s||Zl||Z||(t=s||Z,n=Zl,r=Z,Zl=o||Zl,Z=t,Ou(e,2),Zl=n,Z=r),!o&&Ql||lu(e,o)),a&4&&(t=e.updateQueue,t!==null&&(n=t.retryQueue,n!==null&&(t.retryQueue=null,bu(e,n))));break;case 19:xu(t,e,n),Q(e),a&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,bu(e,t)));break;case 30:a&512&&(Z||r===null||yl(r,r.return)),a=Ft(),o=ru,s=(n&335544064)===n,c=e.memoizedProps,ru=s&&si(c.default,c.update)!==`none`,xu(t,e,n),Q(e),s&&r!==null&&Pt&&(e.flags|=4),ru=o,Pt=a;break;case 21:break;case 7:a&512&&(Z||r===null||yl(r,r.return)),r&&r.stateNode!==null&&(r.stateNode._fragmentFiber=e);default:xu(t,e,n),Q(e)}}function Q(e){var t=e.flags;if(t&2){try{for(var n,r=e.return;r!==null;){if(Dl(r)){n=r;break}r=r.return}r=null;for(var a=e.return;a!==null;){if(wl(a)){var o=a.stateNode;r===null?r=[o]:r.push(o)}if(Cl(a))break;a=a.return}var s=r;if(n==null)throw Error(i(160));switch(n.tag){case 27:var c=n.stateNode;Al(e,Ol(e),c,s);break;case 5:var l=n.stateNode;n.flags&32&&(Qt(l,``),n.flags&=-33),Al(e,Ol(e),l,s);break;case 3:case 4:var u=n.stateNode.containerInfo;kl(e,Ol(e),u,s);break;default:throw Error(i(161))}}catch(t){ff(e,e.return,t)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function wu(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;wu(t),t.tag===5&&t.flags&1024&&(t=t.stateNode,gh=!0,t.reset(),gh=!1),e=e.sibling}}function Tu(e,t){if(t.subtreeFlags&9270)for(t=t.child;t!==null;)Eu(t,e),t=t.sibling;else Xl(t,!1)}function Eu(e,t){var n=e.alternate;if(n===null)Hl(e,!1);else switch(e.tag){case 3:if(au=nu=!1,Il(),Tu(t,e),!nu&&!iu){if(e=Fl,e!==null)for(var r=0;r<e.length;r+=3){n=e[r];var i=e[r+1];Ep(n,e[r+2]),n=n.ownerDocument.documentElement,n!==null&&n.animate({opacity:[0,0],pointerEvents:[`none`,`none`]},{duration:0,fill:`forwards`,pseudoElement:`::view-transition-group(`+i+`)`})}e=t.containerInfo,e=e.nodeType===9?e.documentElement:e.ownerDocument.documentElement,e!==null&&e.style.viewTransitionName===``&&(e.style.viewTransitionName=`none`,e.animate({opacity:[0,0],pointerEvents:[`none`,`none`]},{duration:0,fill:`forwards`,pseudoElement:`::view-transition-group(root)`}),e.animate({width:[0,0],height:[0,0]},{duration:0,fill:`forwards`,pseudoElement:`::view-transition`})),au=!0}Fl=null;break;case 5:Tu(t,e);break;case 4:r=nu,nu=!1,Tu(t,e),nu&&(iu=!0),nu=r;break;case 22:e.memoizedState===null&&(n.memoizedState===null?Tu(t,e):Hl(e,!1));break;case 30:r=nu,i=Il(),nu=!1,Tu(t,e),nu&&(e.flags|=4);var a=e.memoizedProps,o=e.stateNode;t=ai(a,o),o=ai(n.memoizedProps,o);var s=si(a.default,a.update);s===`none`?t=!1:(a=n.memoizedState,n.memoizedState=null,n=e.child,Ll=0,t=Yl(e,n,t,o,s,a,!0),Ll!==(a===null?0:a.length)&&(e.flags|=32)),e.flags&4&&t?(jd(e,e.memoizedProps.onUpdate),Fl=i):i!==null&&(i.push.apply(i,Fl),Fl=i),nu=e.flags&32?!0:r;break;default:Tu(t,e)}}function Du(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)cu(e,t.alternate,t),t=t.sibling}function Ou(e,t){for(e=e.child;e!==null;){var n=e,r=t;switch(n.tag){case 0:case 11:case 14:case 15:hl(4,n,n.return),Ou(n,r);break;case 1:yl(n,n.return);var i=n.stateNode;typeof i.componentWillUnmount==`function`&&_l(n,n.return,i),Ou(n,r);break;case 27:r&2&&gm(n.stateNode,n.type,n.memoizedProps);case 5:yl(n,n.return),n.tag!==5&&n.tag!==27||Sl(n),Ou(n,r);break;case 6:Sl(n);break;case 26:yl(n,n.return),i=n.stateNode,n.memoizedState!==null||i===null||Z||i.parentNode.removeChild(i),Ou(n,r);break;case 22:n.memoizedState===null&&Ou(n,r);break;case 30:yl(n,n.return),Ou(n,r);break;case 7:yl(n,n.return);default:Ou(n,r)}e=e.sibling}}function ku(e,t,n){for(n=t.subtreeFlags&8772?n:n&-2,t=t.child;t!==null;){var r=t.alternate,i=e,a=t,o=a.flags,s=!!(n&1);switch(a.tag){case 0:case 11:case 15:ku(i,a,n),ml(4,a);break;case 1:if(ku(i,a,n),r=a,i=r.stateNode,typeof i.componentDidMount==`function`)try{i.componentDidMount()}catch(e){ff(r,r.return,e)}if(r=a,i=r.updateQueue,i!==null){var c=r.stateNode;try{var l=i.shared.hiddenCallbacks;if(l!==null)for(i.shared.hiddenCallbacks=null,i=0;i<l.length;i++)po(l[i],c)}catch(e){ff(r,r.return,e)}}s&&o&64&&gl(a),vl(a,a.return);break;case 27:n&2&&jl(a);case 5:a.tag!==5&&a.tag!==27||xl(a),ku(i,a,n),s&&r===null&&o&4&&Tl(a),vl(a,a.return);break;case 6:xl(a);break;case 26:c=a.stateNode,a.memoizedState!==null||c===null||Zl||Km(bm(c.ownerDocument),a.type,c),ku(i,a,n),s&&r===null&&o&4&&Tl(a),vl(a,a.return);break;case 12:ku(i,a,n);break;case 31:ku(i,a,n),s&&o&4&&_u(i,a);break;case 13:ku(i,a,n),s&&o&4&&vu(i,a);break;case 22:a.memoizedState===null&&ku(i,a,n),vl(a,a.return);break;case 30:ku(i,a,n),vl(a,a.return);break;case 7:vl(a,a.return);default:ku(i,a,n)}t=t.sibling}}function Au(e,t){var n=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==n&&(e!=null&&e.refCount++,n!=null&&Sa(n))}function ju(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Sa(e))}function Mu(e,t,n,r){var i=(n&335544064)===n;if(t.subtreeFlags&(i?10262:10256))for(t=t.child;t!==null;)Nu(e,t,n,r),t=t.sibling;else i&&Jl(t)}function Nu(e,t,n,r){var i=(n&335544064)===n;i&&t.alternate===null&&t.return!==null&&t.return.alternate!==null&&ql(t);var a=t.flags;switch(t.tag){case 0:case 11:case 15:Mu(e,t,n,r),a&2048&&ml(9,t);break;case 1:Mu(e,t,n,r);break;case 3:Mu(e,t,n,r),i&&au&&(e=e.containerInfo,e=e.nodeType===9?e.body:e.nodeName===`HTML`?e.ownerDocument.body:e,e.style.viewTransitionName===`root`&&(e.style.viewTransitionName=``),e=e.ownerDocument.documentElement,e!==null&&e.style.viewTransitionName===`none`&&(e.style.viewTransitionName=``)),a&2048&&(a=null,t.alternate!==null&&(a=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==a&&(t.refCount++,a!=null&&Sa(a)));break;case 12:if(a&2048){Mu(e,t,n,r),a=t.stateNode;try{var o=t.memoizedProps,s=o.id,c=o.onPostCommit;typeof c==`function`&&c(s,t.alternate===null?`mount`:`update`,a.passiveEffectDuration,-0)}catch(e){ff(t,t.return,e)}}else Mu(e,t,n,r);break;case 31:Mu(e,t,n,r);break;case 13:Mu(e,t,n,r);break;case 23:break;case 22:o=t.stateNode,s=t.alternate,t.memoizedState===null?(i&&s!==null&&s.memoizedState!==null&&ql(t),o._visibility&2?Mu(e,t,n,r):(o._visibility|=2,Pu(e,t,n,r,!!(t.subtreeFlags&10256)||!1))):(i&&s!==null&&s.memoizedState===null&&ql(s),o._visibility&2?Mu(e,t,n,r):Fu(e,t)),a&2048&&Au(s,t);break;case 24:Mu(e,t,n,r),a&2048&&ju(t.alternate,t);break;case 30:i&&(a=t.alternate,a!==null&&(Bl(a.child,!0),Bl(t.child,!0))),Mu(e,t,n,r);break;default:Mu(e,t,n,r)}}function Pu(e,t,n,r,i){for(i&&=!!(t.subtreeFlags&10256)||!1,t=t.child;t!==null;){var a=e,o=t,s=n,c=r,l=o.flags;switch(o.tag){case 0:case 11:case 15:Pu(a,o,s,c,i),ml(8,o);break;case 23:break;case 22:var u=o.stateNode;o.memoizedState===null?(u._visibility|=2,Pu(a,o,s,c,i)):u._visibility&2?Pu(a,o,s,c,i):Fu(a,o),i&&l&2048&&Au(o.alternate,o);break;case 24:Pu(a,o,s,c,i),i&&l&2048&&ju(o.alternate,o);break;default:Pu(a,o,s,c,i)}t=t.sibling}}function Fu(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var n=e,r=t,i=r.flags;switch(r.tag){case 22:Fu(n,r),i&2048&&Au(r.alternate,r);break;case 24:Fu(n,r),i&2048&&ju(r.alternate,r);break;default:Fu(n,r)}t=t.sibling}}var Iu=8192;function Lu(e,t,n){if(e.subtreeFlags&Iu)for(e=e.child;e!==null;)Ru(e,t,n),e=e.sibling}function Ru(e,t,n){switch(e.tag){case 26:Lu(e,t,n),e.flags&Iu&&(e.memoizedState===null?(e=e.stateNode,(t&335544128)===t&&Zm(n,e)):Qm(n,Su,e.memoizedState,e.memoizedProps));break;case 5:Lu(e,t,n),e.flags&Iu&&(e=e.stateNode,(t&335544128)===t&&Zm(n,e));break;case 3:case 4:var r=Su;Su=bm(e.stateNode.containerInfo),Lu(e,t,n),Su=r;break;case 22:e.memoizedState===null&&(r=e.alternate,r!==null&&r.memoizedState!==null?(r=Iu,Iu=16777216,Lu(e,t,n),Iu=r):Lu(e,t,n));break;case 30:if((e.flags&Iu)!==0&&(r=e.memoizedProps.name,r!=null&&r!==`auto`)){var i=e.stateNode;i.paired=null,Nl===null&&(Nl=new Map),Nl.set(r,i)}Lu(e,t,n);break;default:Lu(e,t,n)}}function zu(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function Bu(e){var t=e.deletions;if(e.flags&16){if(t!==null)for(var n=0;n<t.length;n++){var r=t[n];tu=r,Uu(r,e)}zu(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)Vu(e),e=e.sibling}function Vu(e){switch(e.tag){case 0:case 11:case 15:Bu(e),e.flags&2048&&hl(9,e,e.return);break;case 3:Bu(e);break;case 12:Bu(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Hu(e)):Bu(e);break;default:Bu(e)}}function Hu(e){var t=e.deletions;if(e.flags&16){if(t!==null)for(var n=0;n<t.length;n++){var r=t[n];tu=r,Uu(r,e)}zu(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:hl(8,t,t.return),Hu(t);break;case 22:n=t.stateNode,n._visibility&2&&(n._visibility&=-3,Hu(t));break;default:Hu(t)}e=e.sibling}}function Uu(e,t){for(;tu!==null;){var n=tu;switch(n.tag){case 0:case 11:case 15:hl(8,n,t);break;case 23:case 22:if(n.memoizedState!==null&&n.memoizedState.cachePool!==null){var r=n.memoizedState.cachePool.pool;r!=null&&r.refCount++}break;case 24:Sa(n.memoizedState.cache)}if(r=n.child,r!==null)r.return=n,tu=r;else a:for(n=e;tu!==null;){r=tu;var i=r.sibling,a=r.return;if(fu(r),r===n){tu=null;break a}if(i!==null){i.return=a,tu=i;break a}tu=a}}}var Wu={getCacheForType:function(e){var t=ma(ba),n=t.data.get(e);return n===void 0&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return ma(ba).controller.signal}},Gu=typeof WeakMap==`function`?WeakMap:Map,Ku=0,qu=null,Ju=null,Yu=0,Xu=0,Zu=null,Qu=!1,$u=!1,ed=!1,td=0,nd=0,rd=0,id=0,ad=0,od=0,sd=0,cd=null,ld=null,ud=!1,dd=0,fd=0,pd=1/0,md=null,hd=null,gd=0,_d=null,vd=null,yd=0,bd=0,xd=null,Sd=null,Cd=null,Td=null,Ed=null,Dd=0,Od=null;function kd(){return Ku&2&&Yu!==0?Yu&-Yu:G.T===null?st():Nf()}function Ad(){if(od===0){if(!(Yu&536870912)||qi){var e=Ke;Ke<<=1,!(Ke&3932160)&&(Ke=262144),od=e}else od=536870912}return e=bo.current,e!==null&&(e.flags|=32),od}function jd(e,t){if(t!=null){var n=e.stateNode,r=n.ref;r===null&&(r=n.ref=Pp(ai(e.memoizedProps,n))),Td===null&&(Td=[]),Td.push(t.bind(null,r))}}function Md(e,t,n){(e===qu&&(Xu===2||Xu===9)||e.cancelPendingCommit!==null)&&(zd(e,0),Id(e,Yu,od,!1)),tt(e,n),(!(Ku&2)||e!==qu)&&(e===qu&&(!(Ku&2)&&(id|=n),nd===4&&Id(e,Yu,od,!1)),Tf(e))}function Nd(e,t,n){if(Ku&6)throw Error(i(327));var r=!n&&!(t&127)&&(t&e.expiredLanes)===0||Xe(e,t),a=r?qd(e,t):Gd(e,t,!0),o=r;do{if(a===0){$u&&!r&&Id(e,t,0,!1);break}if(n=e.current.alternate,o&&!Fd(n)){a=Gd(e,t,!1),o=!1;continue}if(a===2){if(o=t,e.errorRecoveryDisabledLanes&o)var s=0;else s=e.pendingLanes&-536870913,s=s===0?s&536870912?536870912:0:s;if(s!==0){t=s;a:{var c=e;a=cd;var l=c.current.memoizedState.isDehydrated;if(l&&(zd(c,s).flags|=256),s=Gd(c,s,!1),s!==2&&s!==6){if(ed&&!l){c.errorRecoveryDisabledLanes|=o,id|=o,a=4;break a}o=ld,ld=a,o!==null&&(ld===null?ld=o:ld.push.apply(ld,o))}a=s}if(o=!1,a!==2)continue}}if(a===1){zd(e,0),Id(e,t,0,!0);break}a:{switch(r=e,o=a,o){case 0:case 1:throw Error(i(345));case 4:if((t&4194048)!==t&&(t&62914560)!==t)break;case 6:Id(r,t,od,!Qu);break a;case 2:ld=null;break;case 3:case 5:break;default:throw Error(i(329))}if((t&62914560)===t&&(a=dd+300-ke(),10<a)){if(Id(r,t,od,!Qu),Ye(r,0,!0)!==0)break a;yd=t,r.timeoutHandle=gp(Pd.bind(null,r,n,ld,md,ud,t,od,id,sd,Qu,o,`Throttled`,-0,0),a);break a}Pd(r,n,ld,md,ud,t,od,id,sd,Qu,o,null,-0,0)}break}while(1);Tf(e)}function Pd(e,t,n,r,i,a,o,s,c,l,u,d,f,p){e.timeoutHandle=-1;var m=t.subtreeFlags,h=(a&335544064)===a;if(d=null,(h||m&8192||(m&16785408)==16785408)&&(d={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:sn},Nl=null,Ru(t,a,d),h&&(m=d,h=e.containerInfo,h=(h.nodeType===9?h:h.ownerDocument).__reactViewTransition,h!=null&&(m.count++,m.waitingForViewTransition=!0,m=nh.bind(m),h.finished.then(m,m))),m=(a&62914560)===a?dd-ke():(a&4194048)===a?fd-ke():0,m=eh(d,m),m!==null)){yd=a,e.cancelPendingCommit=m(ef.bind(null,e,t,a,n,r,i,o,s,c,l,u,d,null,f,p)),Id(e,a,o,!l);return}ef(e,t,a,n,r,i,o,s,c,l,u,d)}function Fd(e){for(var t=e;;){var n=t.tag;if((n===0||n===11||n===15)&&t.flags&16384&&(n=t.updateQueue,n!==null&&(n=n.stores,n!==null)))for(var r=0;r<n.length;r++){var i=n[r],a=i.getSnapshot;i=i.value;try{if(!kr(a(),i))return!1}catch{return!1}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Id(e,t,n,r){t=Ze(e,t),t&=~ad,t&=~id,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var i=t;0<i;){var a=31-Ve(i),o=1<<a;r[a]=-1,i&=~o}n!==0&&rt(e,n,t)}function Ld(){return Ku&6?!0:(Ef(0,!1),!1)}function Rd(){if(Ju!==null){if(Xu===0)var e=Ju.return;else e=Ju,oa=aa=null,Xo(e),Ja=null,Ya=0,e=Ju;for(;e!==null;)pl(e.alternate,e),e=e.return;Ju=null}}function zd(e,t){var n=e.timeoutHandle;return n!==-1&&(e.timeoutHandle=-1,_p(n)),n=e.cancelPendingCommit,n!==null&&(e.cancelPendingCommit=null,n()),yd=0,Rd(),qu=e,Ju=n=Si(e.current,null),Yu=t,Xu=0,Zu=null,Qu=!1,$u=Xe(e,t),ed=!1,sd=od=ad=id=rd=nd=0,ld=cd=null,ud=!1,td=Ze(e,t),fi(),n}function Bd(e,t){Mo=null,G.H=oc,t===Ra||t===Ba?(t=Ka(),Xu=3):t===za?(t=Ka(),Xu=4):Xu=t===wc?8:typeof t==`object`&&t&&typeof t.then==`function`?6:1,Zu=t,Ju===null&&(nd=1,vc(e,Ai(t,e.current)))}function Vd(){var e=bo.current;return e===null?!0:(Yu&4194048)===Yu?xo===null:(Yu&62914560)===Yu||Yu&536870912?e===xo:!1}function Hd(){var e=G.H;return G.H=oc,e===null?oc:e}function Ud(){var e=G.A;return G.A=Wu,e}function Wd(){nd=4,Qu||(Yu&4194048)!==Yu&&bo.current!==null||($u=!0),!(rd&134217727)&&!(id&134217727)||qu===null||Id(qu,Yu,od,!1)}function Gd(e,t,n){var r=Ku;Ku|=2;var i=Hd(),a=Ud();(qu!==e||Yu!==t)&&(md=null,zd(e,t)),t=!1;var o=nd;a:do try{if(Xu!==0&&Ju!==null){var s=Ju,c=Zu;switch(Xu){case 8:Rd(),o=6;break a;case 3:case 2:case 9:case 6:bo.current===null&&(t=!0);var l=Xu;if(Xu=0,Zu=null,Zd(e,s,c,l),n&&$u){o=0;break a}break;default:l=Xu,Xu=0,Zu=null,Zd(e,s,c,l)}}Kd(),o=nd;break}catch(t){Bd(e,t)}while(1);return t&&e.shellSuspendCounter++,oa=aa=null,Ku=r,G.H=i,G.A=a,Ju===null&&(qu=null,Yu=0,fi()),o}function Kd(){for(;Ju!==null;)Yd(Ju)}function qd(e,t){var n=Ku;Ku|=2;var r=Hd(),a=Ud();qu!==e||Yu!==t?(md=null,pd=ke()+500,zd(e,t)):$u=Xe(e,t);a:do try{if(Xu!==0&&Ju!==null){t=Ju;var o=Zu;b:switch(Xu){case 1:Xu=0,Zu=null,Zd(e,t,o,1);break;case 2:case 9:if(Ha(o)){Xu=0,Zu=null,Xd(t);break}t=function(){Xu!==2&&Xu!==9||qu!==e||(Xu=7),Tf(e)},o.then(t,t);break a;case 3:Xu=7;break a;case 4:Xu=5;break a;case 7:Ha(o)?(Xu=0,Zu=null,Xd(t)):(Xu=0,Zu=null,Zd(e,t,o,7));break;case 5:var s=null;switch(Ju.tag){case 26:s=Ju.memoizedState;case 5:case 27:var c=Ju;if(s?Ym(s):c.stateNode.complete){Xu=0,Zu=null;var l=c.sibling;if(l!==null)Ju=l;else{var u=c.return;u===null?Ju=null:(Ju=u,Qd(u))}break b}}Xu=0,Zu=null,Zd(e,t,o,5);break;case 6:Xu=0,Zu=null,Zd(e,t,o,6);break;case 8:Rd(),nd=6;break a;default:throw Error(i(462))}}Jd();break}catch(t){Bd(e,t)}while(1);return oa=aa=null,G.H=r,G.A=a,Ku=n,Ju===null?(qu=null,Yu=0,fi(),nd):0}function Jd(){for(;Ju!==null&&!De();)Yd(Ju)}function Yd(e){var t=il(e.alternate,e,td);e.memoizedProps=e.pendingProps,t===null?Qd(e):Ju=t}function Xd(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Rc(n,t,t.pendingProps,t.type,void 0,Yu);break;case 11:t=Rc(n,t,t.pendingProps,t.type.render,t.ref,Yu);break;case 5:Xo(t);var r=t;r===Gi&&(qi?($i(r),r.tag===5&&r.stateNode!=null&&(Ki=r.stateNode)):($i(r),qi=!0));default:pl(n,t),t=Ju=Ci(t,td),t=il(n,t,td)}e.memoizedProps=e.pendingProps,t===null?Qd(e):Ju=t}function Zd(e,t,n,r){oa=aa=null,Xo(t),Ja=null,Ya=0;var i=t.return;try{if(Cc(e,i,t,n,Yu)){nd=1,vc(e,Ai(n,e.current)),Ju=null;return}}catch(t){if(i!==null)throw Ju=i,t;nd=1,vc(e,Ai(n,e.current)),Ju=null;return}t.flags&32768?(qi||r===1?e=!0:$u||Yu&536870912?e=!1:(Qu=e=!0,(r===2||r===9||r===3||r===6)&&(r=bo.current,r!==null&&r.tag===13&&(r.flags|=16384))),$d(t,e)):Qd(t)}function Qd(e){var t=e;do{if(t.flags&32768){$d(t,Qu);return}e=t.return;var n=dl(t.alternate,t,td);if(n!==null){Ju=n;return}if(t=t.sibling,t!==null){Ju=t;return}Ju=t=e}while(t!==null);nd===0&&(nd=5)}function $d(e,t){do{var n=fl(e.alternate,e);if(n!==null){n.flags&=32767,Ju=n;return}if(n=e.return,n!==null&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&(e=e.sibling,e!==null)){Ju=e;return}Ju=e=n}while(e!==null);nd=6,Ju=null}function ef(e,t,n,r,a,o,s,c,l,u,d,f){e.cancelPendingCommit=null;do lf();while(gd!==0);if(Ku&6)throw Error(i(327));if(t!==null){if(t===e.current)throw Error(i(177));e===qu&&(Ju=qu=null,Yu=0),vd=t,_d=e,yd=n,xd=a,Sd=r,tf(e,t,n,s,c,l,f)}}function tf(e,t,n,r,i,a,o){var s=t.lanes|t.childLanes;if(bd=s,s|=di,nt(e,n,s,r,i,a),Td=null,(n&335544064)===n?(Ed=Ta(e),r=10262):(Ed=null,r=10256),(t.subtreeFlags&r)!==0||(t.flags&r)!==0?(e.callbackNode=null,e.callbackPriority=0,vf(Ne,function(){return uf(),null})):(e.callbackNode=null,e.callbackPriority=0),Ml=!1,r=!!(t.flags&13878),t.subtreeFlags&13878||r){r=G.T,G.T=null,i=K.p,K.p=2,a=Ku,Ku|=4;try{ou(e,t,n)}finally{Ku=a,K.p=i,G.T=r}}gd=1,Ml?Cd=Mp(o,e.containerInfo,Ed,af,of,rf,sf,uf,nf,null,null):(af(),of(),sf())}function nf(e){if(gd!==0){var t=_d.onRecoverableError;t(e,{componentStack:null})}}function rf(){gd===3&&(gd=0,Eu(vd,_d),gd=4)}function af(){if(gd===1){gd=0;var e=_d,t=vd,n=yd,r=!!(t.flags&13878);if(t.subtreeFlags&13878||r){r=G.T,G.T=null;var i=K.p;K.p=2;var a=Ku;Ku|=4;try{ru=iu=!1,Cu(t,e,n),n=lp;var o=Fr(e.containerInfo),s=n.focusedElem,c=n.selectionRange;if(o!==s&&s&&s.ownerDocument&&Pr(s.ownerDocument.documentElement,s)){if(c!==null&&Ir(s)){var l=c.start,u=c.end;if(u===void 0&&(u=l),`selectionStart`in s)s.selectionStart=l,s.selectionEnd=Math.min(u,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),m=s.textContent.length,h=Math.min(c.start,m),g=c.end===void 0?h:Math.min(c.end,m);!p.extend&&h>g&&(o=g,g=h,h=o);var _=Nr(s,h),v=Nr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;s<d.length;s++){var b=d[s];b.element.scrollLeft=b.left,b.element.scrollTop=b.top}}gh=!!cp,lp=cp=null}finally{Ku=a,K.p=i,G.T=r}}e.current=t,gd=2}}function of(){if(gd===2){gd=0;var e=_d,t=vd,n=!!(t.flags&8772);if(t.subtreeFlags&8772||n){n=G.T,G.T=null;var r=K.p;K.p=2;var i=Ku;Ku|=4;try{cu(e,t.alternate,t)}finally{Ku=i,K.p=r,G.T=n}}gd=3}}function sf(){if(gd===4||gd===3){gd=0;var e=Cd;Cd=null,Oe();var t=_d,n=vd,r=yd,i=Sd,a=(r&335544064)===r?10262:10256;if((n.subtreeFlags&a)!==0||(n.flags&a)!==0?gd=5:(gd=0,vd=_d=null,cf(t,t.pendingLanes)),a=t.pendingLanes,a===0&&(hd=null),ot(r),n=n.stateNode,ze&&typeof ze.onCommitFiberRoot==`function`)try{ze.onCommitFiberRoot(Re,n,void 0,(n.current.flags&128)==128)}catch{}if(i!==null){n=G.T,a=K.p,K.p=2,G.T=null;try{for(var o=t.onRecoverableError,s=0;s<i.length;s++){var c=i[s];o(c.value,{componentStack:c.stack})}}finally{G.T=n,K.p=a}}if(i=Td,o=Ed,Ed=null,i!==null&&(Td=null,o===null&&(o=[]),e!==null))for(c=0;c<i.length;c++)n=(0,i[c])(o),n!==void 0&&e.finished.finally(n);yd&3&&lf(),Tf(t),a=t.pendingLanes,r&261930&&a&42?t===Od?Dd++:(Dd=0,Od=t):(Dd=0,Od=null),Ef(0,!1)}}function cf(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,Sa(t)))}function lf(){return Cd!==null&&(Cd.skipTransition(),Cd=null),af(),of(),sf(),uf()}function uf(){if(gd!==5)return!1;var e=_d,t=bd;bd=0;var n=ot(yd),r=G.T,a=K.p;try{K.p=32>n?32:n,G.T=null,n=xd,xd=null;var o=_d,s=yd;if(gd=0,vd=_d=null,yd=0,Ku&6)throw Error(i(331));var c=Ku;if(Ku|=4,Vu(o.current),Nu(o,o.current,s,n),Ku=c,Ef(0,!1),ze&&typeof ze.onPostCommitFiberRoot==`function`)try{ze.onPostCommitFiberRoot(Re,o)}catch{}return!0}finally{K.p=a,G.T=r,cf(e,t)}}function df(e,t,n){t=Ai(n,t),t=bc(e.stateNode,t,2),e=oo(e,t,2),e!==null&&(tt(e,2),Tf(e))}function ff(e,t,n){if(e.tag===3)df(e,e,n);else for(;t!==null;){if(t.tag===3){df(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(hd===null||!hd.has(r))){e=Ai(n,e),n=xc(2),r=oo(t,n,2),r!==null&&(Sc(n,r,t,e),tt(r,2),Tf(r));break}}t=t.return}}function pf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Gu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(ed=!0,i.add(n),e=mf.bind(null,e,t,n),t.then(e,e))}function mf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,qu===e&&(Yu&n)===n&&(nd===4||nd===3&&(Yu&62914560)===Yu&&300>ke()-dd?Ku&2?ad|=n:zd(e,0):ad|=n,sd===Yu&&(sd=0)),Tf(e)}function hf(e,t){t===0&&(t=$e()),e=hi(e,t),e!==null&&(tt(e,t),Tf(e))}function gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),hf(e,n)}function _f(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),hf(e,n)}function vf(e,t){return Te(e,t)}var yf=null,bf=null,xf=!1,Sf=!1,Cf=!1,wf=0;function Tf(e){e!==bf&&e.next===null&&(bf===null?yf=bf=e:bf=bf.next=e),Sf=!0,xf||(xf=!0,Mf())}function Ef(e,t){if(!Cf&&Sf){Cf=!0;do for(var n=!1,r=yf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ve(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,jf(r,a))}else a=Yu,a=Ye(r,r===qu?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Xe(r,a)||(n=!0,jf(r,a))}r=r.next}while(n);Cf=!1}}function Df(){Of()}function Of(){Sf=xf=!1;var e=0;wf!==0&&hp()&&(e=wf);for(var t=ke(),n=null,r=yf;r!==null;){var i=r.next,a=kf(r,t);a===0?(r.next=null,n===null?yf=i:n.next=i,i===null&&(bf=n)):(n=r,(e!==0||a&3)&&(Sf=!0)),r=i}gd!==0&&gd!==5||Ef(e,!1),wf!==0&&(wf=0)}function kf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0<a;){var o=31-Ve(a),s=1<<o,c=i[o];c===-1?((s&n)===0||(s&r)!==0)&&(i[o]=Qe(s,t)):c<=t&&(e.expiredLanes|=s),a&=~s}if(t=qu,n=Yu,n=Ye(e,e===t?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),r=e.callbackNode,n===0||e===t&&(Xu===2||Xu===9)||e.cancelPendingCommit!==null)return r!==null&&r!==null&&Ee(r),e.callbackNode=null,e.callbackPriority=0;if(!(n&3)||Xe(e,n)){if(t=n&-n,t===e.callbackPriority)return t;switch(r!==null&&Ee(r),ot(n)){case 2:case 8:n=Me;break;case 32:n=Ne;break;case 268435456:n=Fe;break;default:n=Ne}return r=Af.bind(null,e),n=Te(n,r),e.callbackPriority=t,e.callbackNode=n,t}return r!==null&&r!==null&&Ee(r),e.callbackPriority=2,e.callbackNode=null,2}function Af(e,t){if(gd!==0&&gd!==5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(lf()&&e.callbackNode!==n)return null;var r=Yu;return r=Ye(e,e===qu?r:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),r===0?null:(Nd(e,r,t),kf(e,ke()),e.callbackNode!=null&&e.callbackNode===n?Af.bind(null,e):null)}function jf(e,t){if(lf())return null;Nd(e,t,!0)}function Mf(){bp(function(){Ku&6?Te(je,Df):Of()})}function Nf(){if(wf===0){var e=Oa;e===0&&(e=Ge,Ge<<=1,!(Ge&261888)&&(Ge=256)),wf=e}return wf}function Pf(e){return e==null||typeof e==`symbol`||typeof e==`boolean`?null:typeof e==`function`?e:on(e)}function Ff(e,t,n,r,i){if(t===`submit`&&n&&n.stateNode===i){var a=Pf((i[dt]||null).action),o=r.submitter;o&&(t=(t=o[dt]||null)?Pf(t.formAction):o.getAttribute(`formAction`),t!==null&&(a=t,o=null));var s=new On(`action`,`action`,null,r,i);e.push({event:s,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(wf!==0){var e=new FormData(i,o);Ks(n,{pending:!0,data:e,method:i.method,action:a},null,e)}}else typeof a==`function`&&(s.preventDefault(),e=new FormData(i,o),Ks(n,{pending:!0,data:e,method:i.method,action:a},a,e))},currentTarget:i}]})}}for(var If=0;If<ni.length;If++){var Lf=ni[If];ri(Lf.toLowerCase(),`on`+(Lf[0].toUpperCase()+Lf.slice(1)))}ri(Jr,`onAnimationEnd`),ri(Yr,`onAnimationIteration`),ri(Xr,`onAnimationStart`),ri(`dblclick`,`onDoubleClick`),ri(`focusin`,`onFocus`),ri(`focusout`,`onBlur`),ri(Zr,`onTransitionRun`),ri(Qr,`onTransitionStart`),ri($r,`onTransitionCancel`),ri(ei,`onTransitionEnd`),kt(`onMouseEnter`,[`mouseout`,`mouseover`]),kt(`onMouseLeave`,[`mouseout`,`mouseover`]),kt(`onPointerEnter`,[`pointerout`,`pointerover`]),kt(`onPointerLeave`,[`pointerout`,`pointerover`]),Ot(`onChange`,`change click focusin focusout input keydown keyup selectionchange`.split(` `)),Ot(`onSelect`,`focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange`.split(` `)),Ot(`onBeforeInput`,[`compositionend`,`keypress`,`textInput`,`paste`]),Ot(`onCompositionEnd`,`compositionend focusout keydown keypress keyup mousedown`.split(` `)),Ot(`onCompositionStart`,`compositionstart focusout keydown keypress keyup mousedown`.split(` `)),Ot(`onCompositionUpdate`,`compositionupdate focusout keydown keypress keyup mousedown`.split(` `));var Rf=`abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting`.split(` `),zf=new Set(`beforetoggle cancel close invalid load scroll scrollend toggle`.split(` `).concat(Rf));function Bf(e,t){t=!!(t&4);for(var n=0;n<e.length;n++){var r=e[n],i=r.event;r=r.listeners;a:{var a=void 0;if(t)for(var o=r.length-1;0<=o;o--){var s=r[o],c=s.instance,l=s.currentTarget;if(s=s.listener,c!==a&&i.isPropagationStopped())break a;a=s,i.currentTarget=l;try{a(i)}catch(e){ci(e)}i.currentTarget=null,a=c}else for(o=0;o<r.length;o++){if(s=r[o],c=s.instance,l=s.currentTarget,s=s.listener,c!==a&&i.isPropagationStopped())break a;a=s,i.currentTarget=l;try{a(i)}catch(e){ci(e)}i.currentTarget=null,a=c}}}}function Vf(e,t){var n=t[pt];n===void 0&&(n=t[pt]=new Set);var r=e+`__bubble`;n.has(r)||(Gf(t,e,2,!1),n.add(r))}function Hf(e,t,n){var r=0;t&&(r|=4),Gf(n,e,r,t)}var Uf=`_reactListening`+Math.random().toString(36).slice(2);function Wf(e){if(!e[Uf]){e[Uf]=!0,Et.forEach(function(t){t!==`selectionchange`&&(zf.has(t)||Hf(t,!1,e),Hf(t,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Uf]||(t[Uf]=!0,Hf(`selectionchange`,!1,t))}}function Gf(e,t,n,r){switch(Ch(t)){case 2:var i=_h;break;case 8:i=vh;break;default:i=yh}n=i.bind(null,t,n,e),i=void 0,!_n||t!==`touchstart`&&t!==`touchmove`&&t!==`wheel`||(i=!0),r?i===void 0?e.addEventListener(t,n,!0):e.addEventListener(t,n,{capture:!0,passive:i}):i===void 0?e.addEventListener(t,n,!1):e.addEventListener(t,n,{passive:i})}function Kf(e,t,n,r,i){var a=r;if(!(t&1)&&!(t&2)&&r!==null)a:for(;;){if(r===null)return;var s=r.tag;if(s===3||s===4){var c=r.stateNode.containerInfo;if(c===i)break;if(s===4)for(s=r.return;s!==null;){var l=s.tag;if((l===3||l===4)&&s.stateNode.containerInfo===i)return;s=s.return}for(;c!==null;){if(s=bt(c),s===null)return;if(l=s.tag,l===5||l===6||l===26||l===27){r=a=s;continue a}c=c.parentNode}}r=r.return}mn(function(){var r=a,i=ln(n),s=[];a:{var c=ti.get(e);if(c!==void 0){var l=On,u=e;switch(e){case`keypress`:if(Cn(n)===0)break a;case`keydown`:case`keyup`:l=Kn;break;case`focusin`:u=`focus`,l=Ln;break;case`focusout`:u=`blur`,l=Ln;break;case`beforeblur`:case`afterblur`:l=Ln;break;case`click`:if(n.button===2)break a;case`auxclick`:case`dblclick`:case`mousedown`:case`mousemove`:case`mouseup`:case`mouseout`:case`mouseover`:case`contextmenu`:l=Fn;break;case`drag`:case`dragend`:case`dragenter`:case`dragexit`:case`dragleave`:case`dragover`:case`dragstart`:case`drop`:l=In;break;case`touchcancel`:case`touchend`:case`touchmove`:case`touchstart`:l=Yn;break;case Jr:case Yr:case Xr:l=Rn;break;case ei:l=Xn;break;case`scroll`:case`scrollend`:l=An;break;case`wheel`:l=Zn;break;case`copy`:case`cut`:case`paste`:l=zn;break;case`gotpointercapture`:case`lostpointercapture`:case`pointercancel`:case`pointerdown`:case`pointermove`:case`pointerout`:case`pointerover`:case`pointerup`:l=qn;break;case`submit`:l=Jn;break;case`toggle`:case`beforetoggle`:l=Qn}var d=!!(t&4),f=!d&&(e===`scroll`||e===`scrollend`),p=d?c===null?null:c+`Capture`:c;d=[];for(var m=r,h;m!==null;){var g=m;if(h=g.stateNode,g=g.tag,g!==5&&g!==26&&g!==27||h===null||p===null||(g=hn(m,p),g!=null&&d.push(qf(m,g,h))),f)break;m=m.return}0<d.length&&(c=new l(c,u,null,n,i),s.push({event:c,listeners:d}))}}if(!(t&7)){a:{if(l=e===`mouseover`||e===`pointerover`,c=e===`mouseout`||e===`pointerout`,l&&n!==cn&&(u=n.relatedTarget||n.fromElement)&&(bt(u)||u[ft]))break a;(c||l)&&(u=i.window===i?i:(l=i.ownerDocument)?l.defaultView||l.parentWindow:window,c?(l=n.relatedTarget||n.toElement,c=r,l=l?bt(l):null,l!==null&&(f=o(l),d=l.tag,l!==f||d!==5&&d!==27&&d!==6)&&(l=null)):(c=null,l=r),c!==l&&(d=Fn,g=`onMouseLeave`,p=`onMouseEnter`,m=`mouse`,(e===`pointerout`||e===`pointerover`)&&(d=qn,g=`onPointerLeave`,p=`onPointerEnter`,m=`pointer`),f=c==null?u:St(c),h=l==null?u:St(l),u=new d(g,m+`leave`,c,n,i),u.target=f,u.relatedTarget=h,g=null,bt(i)===r&&(d=new d(p,m+`enter`,l,n,i),d.target=h,d.relatedTarget=f,g=d),f=g,d=c&&l?w(c,l,Yf):null,c!==null&&Xf(s,u,c,d,!1),l!==null&&f!==null&&Xf(s,f,l,d,!0)))}a:{if(c=r?St(r):window,l=c.nodeName&&c.nodeName.toLowerCase(),l===`select`||l===`input`&&c.type===`file`)var _=_r;else if(dr(c)){if(vr)_=Dr;else{_=Tr;var v=wr}}else l=c.nodeName,!l||l.toLowerCase()!==`input`||c.type!==`checkbox`&&c.type!==`radio`?r&&nn(r.elementType)&&(_=_r):_=Er;if(_&&=_(e,r)){fr(s,_,n,i);break a}v&&v(e,c,r)}switch(v=r?St(r):window,e){case`focusin`:(dr(v)||v.contentEditable===`true`)&&(Rr=v,zr=r,Br=null);break;case`focusout`:Br=zr=Rr=null;break;case`mousedown`:Vr=!0;break;case`contextmenu`:case`mouseup`:case`dragend`:Vr=!1,Hr(s,n,i);break;case`selectionchange`:if(Lr)break;case`keydown`:case`keyup`:Hr(s,n,i)}var y;if(er)b:{switch(e){case`compositionstart`:var b=`onCompositionStart`;break b;case`compositionend`:b=`onCompositionEnd`;break b;case`compositionupdate`:b=`onCompositionUpdate`;break b}b=void 0}else sr?ar(e,n)&&(b=`onCompositionEnd`):e===`keydown`&&n.keyCode===229&&(b=`onCompositionStart`);b&&(rr&&n.locale!==`ko`&&(sr||b!==`onCompositionStart`?b===`onCompositionEnd`&&sr&&(y=Sn()):(yn=i,bn=`value`in yn?yn.value:yn.textContent,sr=!0)),v=Jf(r,b),0<v.length&&(b=new Bn(b,e,null,n,i),s.push({event:b,listeners:v}),y?b.data=y:(y=or(n),y!==null&&(b.data=y)))),(y=nr?cr(e,n):lr(e,n))&&(b=Jf(r,`onBeforeInput`),0<b.length&&(v=new Bn(`onBeforeInput`,`beforeinput`,null,n,i),s.push({event:v,listeners:b}),v.data=y)),Ff(s,e,r,n,i)}Bf(s,t)})}function qf(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Jf(e,t){for(var n=t+`Capture`,r=[];e!==null;){var i=e,a=i.stateNode;if(i=i.tag,i!==5&&i!==26&&i!==27||a===null||(i=hn(e,n),i!=null&&r.unshift(qf(e,i,a)),i=hn(e,t),i!=null&&r.push(qf(e,i,a))),e.tag===3)return r;e=e.return}return[]}function Yf(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function Xf(e,t,n,r,i){for(var a=t._reactName,o=[];n!==null&&n!==r;){var s=n,c=s.alternate,l=s.stateNode;if(s=s.tag,c!==null&&c===r)break;s!==5&&s!==26&&s!==27||l===null||(c=l,i?(l=hn(n,a),l!=null&&o.unshift(qf(n,l,c))):i||(l=hn(n,a),l!=null&&o.push(qf(n,l,c)))),n=n.return}o.length!==0&&e.push({event:t,listeners:o})}var Zf=/\r\n?/g,Qf=/\u0000|\uFFFD/g;function $f(e){return(typeof e==`string`?e:``+e).replace(Zf,`
15
- `).replace(Qf,``)}function ep(e,t){return t=$f(t),$f(e)===t}function tp(e,t,n,r,a,o){switch(n){case`children`:if(typeof r==`string`)t===`body`||t===`textarea`&&r===``||Qt(e,r);else if(typeof r==`number`||typeof r==`bigint`)t!==`body`&&Qt(e,``+r);else return;break;case`className`:Lt(e,`class`,r);break;case`tabIndex`:Lt(e,`tabindex`,r);break;case`dir`:case`role`:case`viewBox`:case`width`:case`height`:Lt(e,n,r);break;case`style`:tn(e,r,o);return;case`data`:if(t!==`object`){Lt(e,`data`,r);break}case`src`:case`href`:if(r===``&&(t!==`a`||n!==`href`)){e.removeAttribute(n);break}if(r==null||typeof r==`function`||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=on(r),e.setAttribute(n,r);break;case`action`:case`formAction`:if(typeof r==`function`){e.setAttribute(n,`javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')`);break}if(typeof o==`function`&&(n===`formAction`?(t!==`input`&&tp(e,t,`name`,a.name,a,null),tp(e,t,`formEncType`,a.formEncType,a,null),tp(e,t,`formMethod`,a.formMethod,a,null),tp(e,t,`formTarget`,a.formTarget,a,null)):(tp(e,t,`encType`,a.encType,a,null),tp(e,t,`method`,a.method,a,null),tp(e,t,`target`,a.target,a,null))),r==null||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=on(r),e.setAttribute(n,r);break;case`onClick`:r!=null&&(e.onclick=sn);return;case`onScroll`:r!=null&&Vf(`scroll`,e);return;case`onScrollEnd`:r!=null&&Vf(`scrollend`,e);return;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));o?.__html!==n&&(e.innerHTML=n)}}break;case`multiple`:e.multiple=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`muted`:e.muted=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`defaultValue`:case`defaultChecked`:case`innerHTML`:case`ref`:break;case`autoFocus`:break;case`xlinkHref`:if(r==null||typeof r==`function`||typeof r==`boolean`||typeof r==`symbol`){e.removeAttribute(`xlink:href`);break}n=on(r),e.setAttributeNS(`http://www.w3.org/1999/xlink`,`xlink:href`,n);break;case`contentEditable`:case`spellCheck`:case`draggable`:case`value`:case`autoReverse`:case`externalResourcesRequired`:case`focusable`:case`preserveAlpha`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`inert`:case`allowFullScreen`:case`async`:case`autoPlay`:case`controls`:case`credentialless`:case`default`:case`defer`:case`disabled`:case`disablePictureInPicture`:case`disableRemotePlayback`:case`formNoValidate`:case`hidden`:case`loop`:case`noModule`:case`noValidate`:case`open`:case`playsInline`:case`readOnly`:case`required`:case`reversed`:case`scoped`:case`seamless`:case`itemScope`:r&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,``):e.removeAttribute(n);break;case`capture`:case`download`:!0===r?e.setAttribute(n,``):!1!==r&&r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`cols`:case`rows`:case`size`:case`span`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case`rowSpan`:case`start`:r==null||typeof r==`function`||typeof r==`symbol`||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case`popover`:Vf(`beforetoggle`,e),Vf(`toggle`,e),It(e,`popover`,r);break;case`xlinkActuate`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:actuate`,r);break;case`xlinkArcrole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:arcrole`,r);break;case`xlinkRole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:role`,r);break;case`xlinkShow`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:show`,r);break;case`xlinkTitle`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:title`,r);break;case`xlinkType`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:type`,r);break;case`xmlBase`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:base`,r);break;case`xmlLang`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:lang`,r);break;case`xmlSpace`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:space`,r);break;case`is`:It(e,`is`,r);break;case`innerText`:case`textContent`:return;default:if(!(2<n.length)||n[0]!==`o`&&n[0]!==`O`||n[1]!==`n`&&n[1]!==`N`)n=rn.get(n)||n,It(e,n,r);else return}Pt=!0}function np(e,t,n,r,a,o){switch(n){case`style`:tn(e,r,o);return;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));o?.__html!==n&&(e.innerHTML=n)}}break;case`children`:if(typeof r==`string`)Qt(e,r);else if(typeof r==`number`||typeof r==`bigint`)Qt(e,``+r);else return;break;case`onScroll`:r!=null&&Vf(`scroll`,e);return;case`onScrollEnd`:r!=null&&Vf(`scrollend`,e);return;case`onClick`:r!=null&&(e.onclick=sn);return;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`innerHTML`:case`ref`:return;case`innerText`:case`textContent`:return;default:if(!Dt.hasOwnProperty(n))a:{if(n[0]===`o`&&n[1]===`n`&&(a=n.endsWith(`Capture`),o=n.slice(2,a?n.length-7:void 0),t=e[dt]||null,t=t==null?null:t[n],typeof t==`function`&&e.removeEventListener(o,t,a),typeof r==`function`)){typeof t!=`function`&&t!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(o,r,a);break a}Pt=!0,n in e?e[n]=r:!0===r?e.setAttribute(n,``):It(e,n,r)}return}Pt=!0}function rp(e,t,n){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`img`:Vf(`error`,e),Vf(`load`,e);var r=!1,a=!1,o;for(o in n)if(n.hasOwnProperty(o)){var s=n[o];if(s!=null)switch(o){case`src`:r=!0;break;case`srcSet`:a=!0;break;case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:tp(e,t,o,s,n,null)}}a&&tp(e,t,`srcSet`,n.srcSet,n,null),r&&tp(e,t,`src`,n.src,n,null);return;case`input`:Vf(`invalid`,e);var c=o=s=a=null,l=null,u=null;for(r in n)if(n.hasOwnProperty(r)){var d=n[r];if(d!=null)switch(r){case`name`:a=d;break;case`type`:s=d;break;case`checked`:l=d;break;case`defaultChecked`:u=d;break;case`value`:o=d;break;case`defaultValue`:c=d;break;case`children`:case`dangerouslySetInnerHTML`:if(d!=null)throw Error(i(137,t));break;default:tp(e,t,r,d,n,null)}}qt(e,o,c,l,u,s,a,!1);return;case`select`:for(a in Vf(`invalid`,e),r=s=o=null,n)if(n.hasOwnProperty(a)&&(c=n[a],c!=null))switch(a){case`value`:o=c;break;case`defaultValue`:s=c;break;case`multiple`:r=c;default:tp(e,t,a,c,n,null)}t=o,n=s,e.multiple=!!r,t==null?n!=null&&Yt(e,!!r,n,!0):Yt(e,!!r,t,!1);return;case`textarea`:for(s in Vf(`invalid`,e),o=a=r=null,n)if(n.hasOwnProperty(s)&&(c=n[s],c!=null))switch(s){case`value`:r=c;break;case`defaultValue`:a=c;break;case`children`:o=c;break;case`dangerouslySetInnerHTML`:if(c!=null)throw Error(i(91));break;default:tp(e,t,s,c,n,null)}Zt(e,r,a,o);return;case`option`:for(l in n)if(n.hasOwnProperty(l)&&(r=n[l],r!=null))switch(l){case`selected`:e.selected=r&&typeof r!=`function`&&typeof r!=`symbol`;break;default:tp(e,t,l,r,n,null)}return;case`dialog`:Vf(`beforetoggle`,e),Vf(`toggle`,e),Vf(`cancel`,e),Vf(`close`,e);break;case`iframe`:case`object`:Vf(`load`,e);break;case`video`:case`audio`:for(r=0;r<Rf.length;r++)Vf(Rf[r],e);break;case`image`:Vf(`error`,e),Vf(`load`,e);break;case`details`:Vf(`toggle`,e);break;case`embed`:case`source`:case`link`:Vf(`error`,e),Vf(`load`,e);case`area`:case`base`:case`br`:case`col`:case`hr`:case`keygen`:case`meta`:case`param`:case`track`:case`wbr`:case`menuitem`:for(u in n)if(n.hasOwnProperty(u)&&(r=n[u],r!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:tp(e,t,u,r,n,null)}return;default:if(nn(t)){for(d in n)n.hasOwnProperty(d)&&(r=n[d],r!==void 0&&np(e,t,d,r,n,void 0));return}}for(c in n)n.hasOwnProperty(c)&&(r=n[c],r!=null&&tp(e,t,c,r,n,null))}var ip={};function ap(e,t,n,r){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`input`:var a=null,o=null,s=null,c=null,l=null,u=null,d=null;for(m in n){var f=n[m];if(n.hasOwnProperty(m)&&f!=null)switch(m){case`checked`:break;case`value`:break;case`defaultValue`:l=f;default:r.hasOwnProperty(m)||tp(e,t,m,null,r,f)}}for(var p in r){var m=r[p];if(f=n[p],r.hasOwnProperty(p)&&(m!=null||f!=null))switch(p){case`type`:m!==f&&(Pt=!0),o=m;break;case`name`:m!==f&&(Pt=!0),a=m;break;case`checked`:m!==f&&(Pt=!0),u=m;break;case`defaultChecked`:m!==f&&(Pt=!0),d=m;break;case`value`:m!==f&&(Pt=!0),s=m;break;case`defaultValue`:m!==f&&(Pt=!0),c=m;break;case`children`:case`dangerouslySetInnerHTML`:if(m!=null)throw Error(i(137,t));break;default:m!==f&&tp(e,t,p,m,r,f)}}Kt(e,s,c,l,u,d,o,a);return;case`select`:for(o in m=s=c=p=null,n)if(l=n[o],n.hasOwnProperty(o)&&l!=null)switch(o){case`value`:break;case`multiple`:m=l;default:r.hasOwnProperty(o)||tp(e,t,o,null,r,l)}for(a in r)if(o=r[a],l=n[a],r.hasOwnProperty(a)&&(o!=null||l!=null))switch(a){case`value`:o!==l&&(Pt=!0),p=o;break;case`defaultValue`:o!==l&&(Pt=!0),c=o;break;case`multiple`:o!==l&&(Pt=!0),s=o;default:o!==l&&tp(e,t,a,o,r,l)}t=c,n=s,r=m,p==null?!!r!=!!n&&(t==null?Yt(e,!!n,n?[]:``,!1):Yt(e,!!n,t,!0)):Yt(e,!!n,p,!1);return;case`textarea`:for(c in m=p=null,n)if(a=n[c],n.hasOwnProperty(c)&&a!=null&&!r.hasOwnProperty(c))switch(c){case`value`:break;case`children`:break;default:tp(e,t,c,null,r,a)}for(s in r)if(a=r[s],o=n[s],r.hasOwnProperty(s)&&(a!=null||o!=null))switch(s){case`value`:a!==o&&(Pt=!0),p=a;break;case`defaultValue`:a!==o&&(Pt=!0),m=a;break;case`children`:break;case`dangerouslySetInnerHTML`:if(a!=null)throw Error(i(91));break;default:a!==o&&tp(e,t,s,a,r,o)}Xt(e,p,m);return;case`option`:for(var h in n)if(p=n[h],n.hasOwnProperty(h)&&p!=null&&!r.hasOwnProperty(h))switch(h){case`selected`:e.selected=!1;break;default:tp(e,t,h,null,r,p)}for(l in r)if(p=r[l],m=n[l],r.hasOwnProperty(l)&&p!==m&&(p!=null||m!=null))switch(l){case`selected`:p!==m&&(Pt=!0),e.selected=p&&typeof p!=`function`&&typeof p!=`symbol`;break;default:tp(e,t,l,p,r,m)}return;case`img`:case`link`:case`area`:case`base`:case`br`:case`col`:case`embed`:case`hr`:case`keygen`:case`meta`:case`param`:case`source`:case`track`:case`wbr`:case`menuitem`:for(var g in n)p=n[g],n.hasOwnProperty(g)&&p!=null&&!r.hasOwnProperty(g)&&tp(e,t,g,null,r,p);for(u in r)if(p=r[u],m=n[u],r.hasOwnProperty(u)&&p!==m&&(p!=null||m!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:if(p!=null)throw Error(i(137,t));break;default:tp(e,t,u,p,r,m)}return;default:if(nn(t)){for(var _ in n)p=n[_],n.hasOwnProperty(_)&&p!==void 0&&!r.hasOwnProperty(_)&&np(e,t,_,void 0,r,p);for(d in r)p=r[d],m=n[d],!r.hasOwnProperty(d)||p===m||p===void 0&&m===void 0||np(e,t,d,p,r,m);return}}for(var v in n)p=n[v],n.hasOwnProperty(v)&&p!=null&&!r.hasOwnProperty(v)&&tp(e,t,v,null,r,p);for(f in r)p=r[f],m=n[f],!r.hasOwnProperty(f)||p===m||p==null&&m==null||tp(e,t,f,p,r,m)}function op(e){switch(e){case`css`:case`script`:case`font`:case`img`:case`image`:case`input`:case`link`:return!0;default:return!1}}function sp(){if(typeof performance.getEntriesByType==`function`){for(var e=0,t=0,n=performance.getEntriesByType(`resource`),r=0;r<n.length;r++){var i=n[r],a=i.transferSize,o=i.initiatorType,s=i.duration;if(a&&s&&op(o)){for(o=0,s=i.responseEnd,r+=1;r<n.length;r++){var c=n[r],l=c.startTime;if(l>s)break;var u=c.transferSize,d=c.initiatorType;u&&op(d)&&(c=c.responseEnd,o+=u*(c<s?1:(s-l)/(c-l)))}if(--r,t+=8*(a+o)/(i.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e==`number`)?e:5}var cp=null,lp=null;function up(e){return e.nodeType===9?e:e.ownerDocument}function $(e){switch(e){case`http://www.w3.org/2000/svg`:return 1;case`http://www.w3.org/1998/Math/MathML`:return 2;default:return 0}}function dp(e,t){if(e===0)switch(t){case`svg`:return 1;case`math`:return 2;default:return 0}return e===1&&t===`foreignObject`?0:e}function fp(e,t,n,r){return n=up(n).createElement(e),n[ut]=r,n[dt]=t,rp(n,e,t),wt(n),n}function pp(e,t){return e===`textarea`||e===`noscript`||typeof t.children==`string`||typeof t.children==`number`||typeof t.children==`bigint`||typeof t.dangerouslySetInnerHTML==`object`&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var mp=null;function hp(){var e=window.event;return e&&e.type===`popstate`?e!==mp&&(mp=e,!0):(mp=null,!1)}var gp=typeof setTimeout==`function`?setTimeout:void 0,_p=typeof clearTimeout==`function`?clearTimeout:void 0,vp=typeof Promise==`function`?Promise:void 0,yp=typeof requestAnimationFrame==`function`?requestAnimationFrame:gp,bp=typeof queueMicrotask==`function`?queueMicrotask:vp===void 0?gp:function(e){return vp.resolve(null).then(e).catch(xp)};function xp(e){setTimeout(function(){throw e})}function Sp(e){return e===`head`}function Cp(e,t){var n=t,r=0;do{var i=n.nextSibling;if(e.removeChild(n),i&&i.nodeType===8){if(n=i.data,n===`/$`||n===`/&`){if(r===0){e.removeChild(i),Hh(t);return}r--}else if(n===`$`||n===`$?`||n===`$~`||n===`$!`||n===`&`)r++;else if(n===`html`)_m(e.ownerDocument.documentElement);else if(n===`head`){n=e.ownerDocument.head,_m(n);for(var a=n.firstChild;a;){var o=a.nextSibling,s=a.nodeName;a[_t]||s===`SCRIPT`||s===`STYLE`||s===`LINK`&&a.rel.toLowerCase()===`stylesheet`||n.removeChild(a),a=o}}else n===`body`&&_m(e.ownerDocument.body)}n=i}while(n);Hh(t)}function wp(e,t){var n=e;e=0;do{var r=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display=`none`):(n.style.display=n._stashedDisplay||``,n.getAttribute(`style`)===``&&n.removeAttribute(`style`)):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=``):n.nodeValue=n._stashedText||``),r&&r.nodeType===8){if(n=r.data,n===`/$`){if(e===0)break;e--}else n!==`$`&&n!==`$?`&&n!==`$~`&&n!==`$!`||e++}n=r}while(n)}function Tp(e,t,n){if(t=CSS.escape(t)===t?t:`r-`+btoa(t).replace(/=/g,``),e.style.viewTransitionName=t,n!=null&&(e.style.viewTransitionClass=n),n=getComputedStyle(e),n.display===`inline`){if(t=e.getClientRects(),t.length===1)var r=1;else for(var i=r=0;i<t.length;i++){var a=t[i];0<a.width&&0<a.height&&r++}r===1&&(e=e.style,e.display=t.length===1?`inline-block`:`block`,e.marginTop=`-`+n.paddingTop,e.marginBottom=`-`+n.paddingBottom)}}function Ep(e,t){e=e.style,t=t.style;var n=t==null?null:t.hasOwnProperty(`viewTransitionName`)?t.viewTransitionName:t.hasOwnProperty(`view-transition-name`)?t[`view-transition-name`]:null;e.viewTransitionName=n==null||typeof n==`boolean`?``:(``+n).trim(),n=t==null?null:t.hasOwnProperty(`viewTransitionClass`)?t.viewTransitionClass:t.hasOwnProperty(`view-transition-class`)?t[`view-transition-class`]:null,e.viewTransitionClass=n==null||typeof n==`boolean`?``:(``+n).trim(),e.display===`inline-block`&&(t==null?e.display=e.margin=``:(n=t.display,e.display=n==null||typeof n==`boolean`?``:n,n=t.margin,n==null?(n=t.hasOwnProperty(`marginTop`)?t.marginTop:t[`margin-top`],e.marginTop=n==null||typeof n==`boolean`?``:n,t=t.hasOwnProperty(`marginBottom`)?t.marginBottom:t[`margin-bottom`],e.marginBottom=t==null||typeof t==`boolean`?``:t):e.margin=n))}function Dp(e,t,n){return n=n.ownerDocument.defaultView,{rect:e,abs:t.position===`absolute`||t.position===`fixed`,clip:t.clipPath!==`none`||t.overflow!==`visible`||t.filter!==`none`||t.mask!==`none`||t.mask!==`none`||t.borderRadius!==`0px`,view:0<=e.bottom&&0<=e.right&&e.top<=n.innerHeight&&e.left<=n.innerWidth}}function Op(e){return Dp(e.getBoundingClientRect(),getComputedStyle(e),e)}function kp(e){var t=e.getBoundingClientRect();t=new DOMRect(t.x+2e4,t.y+2e4,t.width,t.height);var n=getComputedStyle(e);return Dp(t,n,e)}function Ap(e){return e.documentElement.clientHeight}function jp(e){this.addEventListener(`load`,e),this.addEventListener(`error`,e)}function Mp(e,t,n,r,i,a,o,s,c){var l=t.nodeType===9?t:t.ownerDocument;try{var u=l.startViewTransition({update:function(){var t=l.defaultView,n=t.navigation&&t.navigation.transition,o=l.fonts.status;r();var s=[];if(o===`loaded`&&(Ap(l),l.fonts.status===`loading`&&s.push(l.fonts.ready)),o=s.length,e!==null)for(var c=e.suspenseyImages,u=0,d=0;d<c.length;d++){var f=c[d];if(!f.complete){var p=f.getBoundingClientRect();if(0<p.bottom&&0<p.right&&p.top<t.innerHeight&&p.left<t.innerWidth){if(u+=Xm(f),u>$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0<s.length)return t=Promise.race([Promise.all(s),new Promise(function(e){return setTimeout(e,500)})]).then(i,i),(n?Promise.allSettled([n.finished,t]):t).then(a,a);if(i(),n)return n.finished.then(a,a);a()},types:n});l.__reactViewTransition=u;var d=[];return u.ready.then(function(){for(var e=l.documentElement.getAnimations({subtree:!0}),t=0;t<e.length;t++){var n=e[t],r=n.effect,i=r.pseudoElement;if(i!=null&&i.startsWith(`::view-transition`)){d.push(n),n=r.getKeyframes();for(var a=i=void 0,s=!0,c=0;c<n.length;c++){var u=n[c],f=u.width;if(i===void 0)i=f;else if(i!==f){s=!1;break}if(f=u.height,a===void 0)a=f;else if(a!==f){s=!1;break}delete u.width,delete u.height,u.transform===`none`&&delete u.transform}s&&i!==void 0&&a!==void 0&&(r.setKeyframes(n),s=getComputedStyle(r.target,r.pseudoElement),s.width!==i||s.height!==a)&&(s=n[0],s.width=i,s.height=a,s=n[n.length-1],s.width=i,s.height=a,r.setKeyframes(n))}}o()},function(e){l.__reactViewTransition===u&&(l.__reactViewTransition=null);try{if(typeof e==`object`&&e)switch(e.name){case`InvalidStateError`:(e.message===`View transition was skipped because document visibility state is hidden.`||e.message===`Skipping view transition because document visibility state has become hidden.`||e.message===`Skipping view transition because viewport size changed.`||e.message===`Transition was aborted because of invalid state`)&&(e=null)}e!==null&&c(e)}finally{r(),i(),o()}}),u.finished.finally(function(){for(var e=0;e<d.length;e++)d[e].cancel();l.__reactViewTransition===u&&(l.__reactViewTransition=null),s()}),u}catch{return r(),i(),o(),null}}function Np(e,t){this._scope=document.documentElement,this._selector=`::view-transition-`+e+`(`+t+`)`}Np.prototype.animate=function(e,t){return t=typeof t==`number`?{duration:t}:T({},t),t.pseudoElement=this._selector,this._scope.animate(e,t)},Np.prototype.getAnimations=function(){for(var e=this._scope,t=this._selector,n=e.getAnimations({subtree:!0}),r=[],i=0;i<n.length;i++){var a=n[i].effect;a!==null&&a.target===e&&a.pseudoElement===t&&r.push(n[i])}return r},Np.prototype.getComputedStyle=function(){return getComputedStyle(this._scope,this._selector)};function Pp(e){return{name:e,group:new Np(`group`,e),imagePair:new Np(`image-pair`,e),old:new Np(`old`,e),new:new Np(`new`,e)}}function Fp(e){this._fragmentFiber=e,this._observers=this._eventListeners=null}Fp.prototype.addEventListener=function(e,t,n){var r=null,i=null;if(!(n!=null&&typeof n!=`boolean`&&(r=n.signal||null,r!==null&&r.aborted))){this._eventListeners===null&&(this._eventListeners=[]);var a=this._eventListeners;if(Bp(a,e,t,n)===-1){var o=this,s=t;n!=null&&typeof n!=`boolean`&&!0===n.once&&(s=function(r){o.removeEventListener(e,t,n),typeof t==`function`?t.call(this,r):t.handleEvent(r)}),r!==null&&(i=o.removeEventListener.bind(o,e,t,n),r.addEventListener(`abort`,i,{once:!0}),i=r.removeEventListener.bind(r,`abort`,i)),r=Rp(n),a.push({type:e,listener:t,optionsOrUseCapture:n,attachedListener:s,cleanup:i}),p(this._fragmentFiber.child,!1,Ip,e,s,r)}this._eventListeners=a}};function Ip(e,t,n,r){return v(e).addEventListener(t,n,r),!1}Fp.prototype.removeEventListener=function(e,t,n){var r=this._eventListeners;if(r!==null&&(t=Bp(r,e,t,n),t!==-1)){var i=r[t];n=i.attachedListener;var a=i.cleanup;i=Rp(i.optionsOrUseCapture),p(this._fragmentFiber.child,!1,Lp,e,n,i),r.splice(t,1),a!==null&&a()}};function Lp(e,t,n,r){return v(e).removeEventListener(t,n,r),!1}function Rp(e){return e!=null&&typeof e!=`boolean`&&(!0===e.once||e.signal instanceof AbortSignal)?{capture:e.capture,passive:e.passive}:e}function zp(e){return e==null?`c=0`:typeof e==`boolean`?`c=`+(e?`1`:`0`):`c=`+(e.capture?`1`:`0`)}function Bp(e,t,n,r){if(e.length===0)return-1;r=zp(r);for(var i=0;i<e.length;i++){var a=e[i];if(a.type===t&&a.listener===n&&zp(a.optionsOrUseCapture)===r)return i}return-1}Fp.prototype.dispatchEvent=function(e){var t=m(this._fragmentFiber);if(t===null)return!0;t=v(t);var n=this._eventListeners;if(n!==null&&0<n.length||!e.bubbles){var r=t.nodeType===9?t.createComment(``):document.createTextNode(``);if(n)for(var i=0;i<n.length;i++){var a=n[i];r.addEventListener(a.type,a.attachedListener,Rp(a.optionsOrUseCapture))}if(t.appendChild(r),e=r.dispatchEvent(e),n)for(i=0;i<n.length;i++)a=n[i],r.removeEventListener(a.type,a.attachedListener,Rp(a.optionsOrUseCapture));return t.removeChild(r),e}return t.dispatchEvent(e)},Fp.prototype.focus=function(e){p(this._fragmentFiber.child,!0,Vp,e,void 0,void 0)};function Vp(e,t){return e.tag!==6&&(e=v(e),pm(e,t))}Fp.prototype.focusLast=function(e){var t=[];p(this._fragmentFiber.child,!0,Hp,t,void 0,void 0);for(var n=t.length-1;0<=n&&!Vp(t[n],e);n--);};function Hp(e,t){return t.push(e),!1}Fp.prototype.blur=function(){var e=m(this._fragmentFiber);e!==null&&(e=v(e),e=up(e).activeElement,e!==null&&p(this._fragmentFiber.child,!1,Up,e,void 0,void 0))};function Up(e,t){return e.tag!==6&&(e=v(e),e===t||e.contains(t)?(t.blur(),!0):!1)}Fp.prototype.observeUsing=function(e){this._observers===null&&(this._observers=new Set),this._observers.add(e),p(this._fragmentFiber.child,!1,Wp,e,void 0,void 0)};function Wp(e,t){return e.tag!==6&&(e=v(e),t.observe(e),!1)}Fp.prototype.unobserveUsing=function(e){var t=this._observers;if(t!==null&&t.has(e)){t.delete(e),p(this._fragmentFiber.child,!1,Gp,e,void 0,void 0);for(var n=t=0;n<Kp.length;n++){var r=Kp[n];r.fragmentInstance===this&&r.observer===e?e.unobserve(r.instance):Kp[t++]=r}Kp.length=t}};function Gp(e,t){return e.tag!==6&&(e=v(e),t.unobserve(e),!1)}var Kp=[],qp=!1;function Jp(e,t,n){Kp.push({fragmentInstance:e,observer:t,instance:n}),qp||(qp=!0,mm(function(){qp=!1;var e=Kp;Kp=[];for(var t=0;t<e.length;t++){var n=e[t];n.observer.unobserve(n.instance)}}))}Fp.prototype.getClientRects=function(){var e=[];return p(this._fragmentFiber.child,!1,Yp,e,void 0,void 0),e};function Yp(e,t){if(e.tag===6){e=e.stateNode;var n=e.ownerDocument.createRange();n.selectNodeContents(e),t.push.apply(t,n.getClientRects())}else e=v(e),t.push.apply(t,e.getClientRects());return!1}Fp.prototype.getRootNode=function(e){var t=m(this._fragmentFiber);return t===null?this:v(t).getRootNode(e)},Fp.prototype.compareDocumentPosition=function(e){var t=m(this._fragmentFiber);if(t===null)return Node.DOCUMENT_POSITION_DISCONNECTED;var n=[];p(this._fragmentFiber.child,!1,Hp,n,void 0,void 0);var r=v(t);if(n.length===0){if(n=r,h(this._fragmentFiber)){a:{for(t=this._fragmentFiber.return;t!==null;){if(t.tag===4){t=t.stateNode.containerInfo;break a}if(t.tag===3||t.tag===5||t.tag===27)break;t=t.return}t=null}t!=null&&(n=t)}t=this._fragmentFiber;var i=r=n.compareDocumentPosition(e);return n===e?i=Node.DOCUMENT_POSITION_CONTAINS:r&Node.DOCUMENT_POSITION_CONTAINED_BY&&(n=g(t)[1],n===null?i=Node.DOCUMENT_POSITION_PRECEDING:(e=v(n).compareDocumentPosition(e),i=e===0||e&Node.DOCUMENT_POSITION_FOLLOWING?Node.DOCUMENT_POSITION_FOLLOWING:Node.DOCUMENT_POSITION_PRECEDING)),i|=Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC}t=v(n[0]),i=v(n[n.length-1]);var a=h(this._fragmentFiber)?t.parentElement:r;if(a==null)return Node.DOCUMENT_POSITION_DISCONNECTED;r=a.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY,a=a.compareDocumentPosition(i)&Node.DOCUMENT_POSITION_CONTAINED_BY;var o=t.compareDocumentPosition(e),s=i.compareDocumentPosition(e),c=o&Node.DOCUMENT_POSITION_CONTAINED_BY||s&Node.DOCUMENT_POSITION_CONTAINED_BY;return s=r&&a&&o&Node.DOCUMENT_POSITION_FOLLOWING&&s&Node.DOCUMENT_POSITION_PRECEDING,t=r&&t===e||a&&i===e||c||s?Node.DOCUMENT_POSITION_CONTAINED_BY:!r&&t===e||!a&&i===e?Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:o,t&Node.DOCUMENT_POSITION_DISCONNECTED||t&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC||Xp(t,this._fragmentFiber,n[0],n[n.length-1],e)?t:Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC};function Xp(e,t,n,r,i){var a=bt(i);if(e&Node.DOCUMENT_POSITION_CONTAINED_BY){if(n=!!a)a:{for(;a!==null;){if(a.tag===7&&(a===t||a.alternate===t)){n=!0;break a}a=a.return}n=!1}return n}if(e&Node.DOCUMENT_POSITION_CONTAINS){if(a===null)return a=i.ownerDocument,i===a||i===a.documentElement||i===a.body;a:{for(a=t,t=m(t);a!==null;){if(!(a.tag!==5&&a.tag!==3&&a.tag!==27||a!==t&&a.alternate!==t)){a=!0;break a}a=a.return}a=!1}return a}return e&Node.DOCUMENT_POSITION_PRECEDING?((t=!!a)&&!(t=a===n)&&(t=w(n,a,C),t===null?t=!1:(p(t,!0,x,a,n),a=y,y=null,t=a!==null)),t):e&Node.DOCUMENT_POSITION_FOLLOWING?((t=!!a)&&!(t=a===r)&&(t=w(r,a,C),t===null?t=!1:(p(t,!0,S,a,r),a=y,b=y=null,t=a!==null)),t):!1}function Zp(e,t){var n=e.ownerDocument.createRange();n.selectNodeContents(e),e=n.getBoundingClientRect(),window.scrollTo(window.scrollX+e.left,t?window.scrollY+e.top:window.scrollY+e.bottom-window.innerHeight)}Fp.prototype.scrollIntoView=function(e){if(typeof e==`object`)throw Error(i(566));var t=[];p(this._fragmentFiber.child,!1,Hp,t,void 0,void 0);var n=!1!==e;if(t.length===0){var r=g(this._fragmentFiber);if(r=n?r[1]||r[0]||m(this._fragmentFiber):r[0]||r[1],r===null)return;if(r.tag===6){e=v(r),Zp(e,n);return}if(r=v(r),r.nodeType!==9){if(r.nodeType===11){n=`host`in r?r.host:null,n!==null&&n.scrollIntoView(e);return}r.scrollIntoView(e)}}for(r=n?t.length-1:0;r!==(n?-1:t.length);){var a=t[r];a.tag===6?(a=v(a),Zp(a,n)):v(a).scrollIntoView(e),r+=n?-1:1}};function Qp(e,t){return e=v(e),$p(e,t),!1}function $p(e,t){e.reactFragments??=new Set,e.reactFragments.add(t)}function em(e,t){var n=t._eventListeners;if(n!==null)for(var r=0;r<n.length;r++){var i=n[r];e.addEventListener(i.type,i.attachedListener,Rp(i.optionsOrUseCapture))}e.nodeType!==3&&(n=t._observers,n!==null&&n.forEach(function(n){for(var r=0,i=0;i<Kp.length;i++){var a=Kp[i];(a.fragmentInstance!==t||a.observer!==n||a.instance!==e)&&(Kp[r++]=a)}Kp.length=r,n.observe(e)}),$p(e,t))}function tm(e,t){var n=t._eventListeners;if(n!==null)for(var r=0;r<n.length;r++){var i=n[r];e.removeEventListener(i.type,i.attachedListener,Rp(i.optionsOrUseCapture))}e.nodeType!==3&&(n=t._observers,n!==null&&n.forEach(function(n){typeof n.rootMargin==`string`?Jp(t,n,e):n.unobserve(e)}),e.reactFragments!=null&&e.reactFragments.delete(t))}function nm(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case`HTML`:case`HEAD`:case`BODY`:nm(n),yt(n);continue;case`SCRIPT`:case`STYLE`:continue;case`LINK`:if(n.rel.toLowerCase()===`stylesheet`)continue}e.removeChild(n)}}function rm(e,t,n,r){for(;e.nodeType===1;){var i=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&(e.nodeName!==`INPUT`||e.type!==`hidden`))break}else if(!r){if(t===`input`&&e.type===`hidden`){var a=i.name==null?null:``+i.name;if(i.type===`hidden`&&e.getAttribute(`name`)===a)return e}else return e}else if(!e[_t])switch(t){case`meta`:if(!e.hasAttribute(`itemprop`))break;return e;case`link`:if(a=e.getAttribute(`rel`),a===`stylesheet`&&e.hasAttribute(`data-precedence`)||a!==i.rel||e.getAttribute(`href`)!==(i.href==null||i.href===``?null:i.href)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute(`title`)!==(i.title==null?null:i.title))break;return e;case`style`:if(e.hasAttribute(`data-precedence`))break;return e;case`script`:if(a=e.getAttribute(`src`),(a!==(i.src==null?null:i.src)||e.getAttribute(`type`)!==(i.type==null?null:i.type)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin))&&a&&e.hasAttribute(`async`)&&!e.hasAttribute(`itemprop`))break;return e;default:return e}if(e=lm(e.nextSibling),e===null)break}return null}function im(e,t,n){if(t===``)return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!n||(e=lm(e.nextSibling),e===null))return null;return e}function am(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!t||(e=lm(e.nextSibling),e===null))return null;return e}function om(e){return e.data===`$?`||e.data===`$~`}function sm(e){return e.data===`$!`||e.data===`$?`&&e.ownerDocument.readyState!==`loading`}function cm(e,t){var n=e.ownerDocument;if(e.data===`$~`)e._reactRetry=t;else if(e.data!==`$?`||n.readyState!==`loading`)t();else{var r=function(){t(),n.removeEventListener(`DOMContentLoaded`,r)};n.addEventListener(`DOMContentLoaded`,r),e._reactRetry=r}}function lm(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t===`$`||t===`$!`||t===`$?`||t===`$~`||t===`&`||t===`F!`||t===`F`)break;if(t===`/$`||t===`/&`)return null}}return e}var um=null;function dm(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`/$`||n===`/&`){if(t===0)return lm(e.nextSibling);t--}else n!==`$`&&n!==`$!`&&n!==`$?`&&n!==`$~`&&n!==`&`||t++}e=e.nextSibling}return null}function fm(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`$`||n===`$!`||n===`$?`||n===`$~`||n===`&`){if(t===0)return e;t--}else n!==`/$`&&n!==`/&`||t++}e=e.previousSibling}return null}function pm(e,t){function n(){r=!0}if(e.ownerDocument.activeElement===e)return!0;var r=!1;try{e.ownerDocument.addEventListener(`focus`,n,!0),(e.focus||HTMLElement.prototype.focus).call(e,t)}finally{e.ownerDocument.removeEventListener(`focus`,n,!0)}return r}function mm(e){yp(function(){yp(function(t){return e(t)})})}function hm(e,t,n){switch(t=up(n),e){case`html`:if(e=t.documentElement,!e)throw Error(i(452));return e;case`head`:if(e=t.head,!e)throw Error(i(453));return e;case`body`:if(e=t.body,!e)throw Error(i(454));return e;default:throw Error(i(451))}}function gm(e,t,n){for(var r in n){var i=n[r];n.hasOwnProperty(r)&&i!=null&&tp(e,t,r,null,ip,i)}n.dangerouslySetInnerHTML!=null&&(e.textContent=``),e.onclick===sn&&(e.onclick=null),yt(e)}function _m(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);yt(e)}var vm=new Map,ym=new Set;function bm(e){if(typeof e.getRootNode==`function`){var t=e.getRootNode();if(t.nodeType===9||t.nodeType===11)return t}return e.nodeType===9?e:e.ownerDocument}var xm=K.d;K.d={f:Sm,r:Cm,D:Em,C:Dm,L:Om,m:km,X:jm,S:Am,M:Mm};function Sm(){var e=xm.f(),t=Ld();return e||t}function Cm(e){var t=xt(e);t!==null&&t.tag===5&&t.type===`form`?Js(t):xm.r(e)}var wm=typeof document>`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=Gt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),rp(t,`link`,e),wt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+Gt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Gt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Gt(n.imageSizes)+`"]`)):i+=`[href="`+Gt(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);rp(o,`link`,e),t===`style`&&(o[vt]=!0,o.onload=o.onerror=function(){Tt(o)}),wt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Gt(r)+`"][href="`+Gt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),rp(r,`link`,e),wt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Ct(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);wt(c),rp(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Ct(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),wt(a),rp(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Ct(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),wt(a),rp(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var a=(a=J.current)?bm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Ct(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Ct(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Ct(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pm(e){return`href="`+Gt(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[vt]){r.loading=1;return}}else t=e.createElement(`link`),t[vt]=!0,t.onload=t.onerror=Tt.bind(null,t),rp(t,`link`,n),wt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+Gt(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Gt(n.href)+`"]`);if(r)return t.instance=r,wt(r),r;var a=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),wt(r),rp(r,`style`,a),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pm(n.href);var o=e.querySelector(Fm(a));if(o)return t.state.loading|=4,t.instance=o,wt(o),o;r=Im(n),(a=vm.get(a))&&Hm(r,a),o=(e.ownerDocument||e).createElement(`link`),wt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),rp(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(a=e.querySelector(zm(o)))?(t.instance=a,wt(a),a):(r=n,(a=vm.get(o))&&(r=T({},n),Um(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),wt(a),rp(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o<r.length;o++){var s=r[o];if(s.dataset.precedence===t)a=s;else if(a!==i)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function Hm(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.title??=t.title}function Um(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.integrity??=t.integrity}var Wm=null;function Gm(e,t,n){if(Wm===null){var r=new Map,i=Wm=new Map;i.set(n,r)}else i=Wm,r=i.get(n),r||(r=new Map,i.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),i=0;i<n.length;i++){var a=n[i];if(!(a[_t]||a[ut]||e===`link`&&a.getAttribute(`rel`)===`stylesheet`)&&a.namespaceURI!==`http://www.w3.org/2000/svg`){var o=a.getAttribute(t)||``;o=e+o;var s=r.get(o);s?s.push(a):r.set(o,[a])}}return r}function Km(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t===`title`?e.querySelector(`head > title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,wt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),wt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),rp(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var r=setTimeout(function(){if(e.stylesheets&&ah(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4+t);0<e.imgBytes&&$m===0&&($m=62500*sp());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&ah(e,e.stylesheets),e.unsuspend)){var t=e.unsuspend;e.unsuspend=null,t()}},(e.imgBytes>$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a<i.length;a++){var o=i[a];(o.nodeName===`LINK`||o.getAttribute(`media`)!==`not all`)&&(n.set(o.dataset.precedence,o),r=o)}r&&n.set(null,r)}i=t.instance,o=i.getAttribute(`data-precedence`),a=n.get(o)||r,a===r&&n.set(null,i),n.set(o,i),this.count++,r=nh.bind(this),i.addEventListener(`load`,r),i.addEventListener(`error`,r),a?a.parentNode.insertBefore(i,a.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var sh={$$typeof:N,Provider:null,Consumer:null,_currentValue:ie,_currentValue2:ie,_threadCount:0};function ch(e,t,n,r,i,a,o,s,c){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=et(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=et(0),this.hiddenUpdates=et(null),this.identifierPrefix=r,this.onUncaughtError=i,this.onCaughtError=a,this.onRecoverableError=o,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=c,this.transitionTypes=null,this.incompleteTransitions=new Map}function lh(e,t,n,r,i,a,o,s,c,l,u,d){return e=new ch(e,t,n,o,c,l,u,d,s),t=1,!0===a&&(t|=24),a=bi(3,null,null,t),e.current=a,a.stateNode=e,t=xa(),t.refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ro(a),e}function uh(e){return e?(e=vi,e):vi}function dh(e,t,n,r,i,a){i=uh(i),r.context===null?r.context=i:r.pendingContext=i,r=ao(t),r.payload={element:n},a=a===void 0?null:a,a!==null&&(r.callback=a),n=oo(e,r,t),n!==null&&(Md(n,e,t),so(n,e,t))}function fh(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function ph(e,t){fh(e,t),(e=e.alternate)&&fh(e,t)}function mh(e){if(e.tag===13||e.tag===31){var t=hi(e,67108864);t!==null&&Md(t,e,67108864),ph(e,67108864)}}function hh(e){if(e.tag===13||e.tag===31){var t=kd();t=at(t);var n=hi(e,t);n!==null&&Md(n,e,t),ph(e,t)}}var gh=!0;function _h(e,t,n,r){var i=G.T;G.T=null;var a=K.p;try{K.p=2,yh(e,t,n,r)}finally{K.p=a,G.T=i}}function vh(e,t,n,r){var i=G.T;G.T=null;var a=K.p;try{K.p=8,yh(e,t,n,r)}finally{K.p=a,G.T=i}}function yh(e,t,n,r){if(gh){var i=bh(r);if(i===null)Kf(e,t,r,xh,n),Mh(e,r);else if(Ph(i,e,t,n,r))r.stopPropagation();else if(Mh(e,r),t&4&&-1<jh.indexOf(e)){for(;i!==null;){var a=xt(i);if(a!==null)switch(a.tag){case 3:if(a=a.stateNode,a.current.memoizedState.isDehydrated){var o=Je(a.pendingLanes);if(o!==0){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;o;){var c=1<<31-Ve(o);s.entanglements[1]|=c,o&=~c}Tf(a),!(Ku&6)&&(pd=ke()+500,Ef(0,!1))}}break;case 31:case 13:s=hi(a,2),s!==null&&Md(s,a,2),Ld(),ph(a,2)}if(a=bh(r),a===null&&Kf(e,t,r,xh,n),a===i)break;i=a}i!==null&&r.stopPropagation()}else Kf(e,t,r,null,n)}}function bh(e){return e=ln(e),Sh(e)}var xh=null;function Sh(e){if(xh=null,e=bt(e),e!==null){var t=o(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=s(t),e!==null)return e;e=null}else if(n===31){if(e=c(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return xh=e,null}function Ch(e){switch(e){case`beforetoggle`:case`cancel`:case`click`:case`close`:case`contextmenu`:case`copy`:case`cut`:case`auxclick`:case`dblclick`:case`dragend`:case`dragstart`:case`drop`:case`focusin`:case`focusout`:case`input`:case`invalid`:case`keydown`:case`keypress`:case`keyup`:case`mousedown`:case`mouseup`:case`paste`:case`pause`:case`play`:case`pointercancel`:case`pointerdown`:case`pointerup`:case`ratechange`:case`reset`:case`seeked`:case`submit`:case`toggle`:case`touchcancel`:case`touchend`:case`touchstart`:case`volumechange`:case`change`:case`selectionchange`:case`textInput`:case`compositionstart`:case`compositionend`:case`compositionupdate`:case`beforeblur`:case`afterblur`:case`beforeinput`:case`blur`:case`fullscreenchange`:case`fullscreenerror`:case`focus`:case`hashchange`:case`popstate`:case`select`:case`selectstart`:return 2;case`drag`:case`dragenter`:case`dragexit`:case`dragleave`:case`dragover`:case`mousemove`:case`mouseout`:case`mouseover`:case`pointermove`:case`pointerout`:case`pointerover`:case`resize`:case`scroll`:case`touchmove`:case`wheel`:case`mouseenter`:case`mouseleave`:case`pointerenter`:case`pointerleave`:return 8;case`message`:switch(Ae()){case je:return 2;case Me:return 8;case Ne:case Pe:return 32;case Fe:return 268435456;default:return 32}default:return 32}}var wh=!1,Th=null,Eh=null,Dh=null,Oh=new Map,kh=new Map,Ah=[],jh=`mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset`.split(` `);function Mh(e,t){switch(e){case`focusin`:case`focusout`:Th=null;break;case`dragenter`:case`dragleave`:Eh=null;break;case`mouseover`:case`mouseout`:Dh=null;break;case`pointerover`:case`pointerout`:Oh.delete(t.pointerId);break;case`gotpointercapture`:case`lostpointercapture`:kh.delete(t.pointerId)}}function Nh(e,t,n,r,i,a){return e===null||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[i]},t!==null&&(t=xt(t),t!==null&&mh(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function Ph(e,t,n,r,i){switch(t){case`focusin`:return Th=Nh(Th,e,t,n,r,i),!0;case`dragenter`:return Eh=Nh(Eh,e,t,n,r,i),!0;case`mouseover`:return Dh=Nh(Dh,e,t,n,r,i),!0;case`pointerover`:var a=i.pointerId;return Oh.set(a,Nh(Oh.get(a)||null,e,t,n,r,i)),!0;case`gotpointercapture`:return a=i.pointerId,kh.set(a,Nh(kh.get(a)||null,e,t,n,r,i)),!0}return!1}function Fh(e){var t=bt(e.target);if(t!==null){var n=o(t);if(n!==null){if(t=n.tag,t===13){if(t=s(n),t!==null){e.blockedOn=t,ct(e.priority,function(){hh(n)});return}}else if(t===31){if(t=c(n),t!==null){e.blockedOn=t,ct(e.priority,function(){hh(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ih(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=bh(e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);cn=r,n.target.dispatchEvent(r),cn=null}else return t=xt(n),t!==null&&mh(t),e.blockedOn=n,!1;t.shift()}return!0}function Lh(e,t,n){Ih(e)&&n.delete(t)}function Rh(){wh=!1,Th!==null&&Ih(Th)&&(Th=null),Eh!==null&&Ih(Eh)&&(Eh=null),Dh!==null&&Ih(Dh)&&(Dh=null),Oh.forEach(Lh),kh.forEach(Lh)}function zh(e,n){e.blockedOn===n&&(e.blockedOn=null,wh||(wh=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,Rh)))}var Bh=null;function Vh(e){Bh!==e&&(Bh=e,t.unstable_scheduleCallback(t.unstable_NormalPriority,function(){Bh===e&&(Bh=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],i=e[t+2];if(typeof r!=`function`){if(Sh(r||n)===null)continue;break}var a=xt(n);a!==null&&(e.splice(t,3),t-=3,Ks(a,{pending:!0,data:i,method:n.method,action:r},r,i))}}))}function Hh(e){function t(t){return zh(t,e)}Th!==null&&zh(Th,e),Eh!==null&&zh(Eh,e),Dh!==null&&zh(Dh,e),Oh.forEach(t),kh.forEach(t);for(var n=0;n<Ah.length;n++){var r=Ah[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<Ah.length&&(n=Ah[0],n.blockedOn===null);)Fh(n),n.blockedOn===null&&Ah.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(r=0;r<n.length;r+=3){var i=n[r],a=n[r+1],o=i[dt]||null;if(typeof a==`function`)o||Vh(n);else if(o){var s=null;if(a&&a.hasAttribute(`formAction`)){if(i=a,o=a[dt]||null)s=o.formAction;else if(Sh(i)!==null)continue}else s=o.action;typeof s==`function`?n[r+1]=s:(n.splice(r,3),r-=3),Vh(n)}}}function Uh(){function e(e){e.canIntercept&&e.info===`react-transition`&&e.intercept({handler:function(){return new Promise(function(e){return i=e})},focusReset:`manual`,scroll:`manual`})}function t(){i!==null&&(i(),i=null),r||setTimeout(n,20)}function n(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&e.url!=null&&navigation.navigate(e.url,{state:e.getState(),info:`react-transition`,history:`replace`})}}if(typeof navigation==`object`){var r=!1,i=null;return navigation.addEventListener(`navigate`,e),navigation.addEventListener(`navigatesuccess`,t),navigation.addEventListener(`navigateerror`,t),setTimeout(n,100),function(){r=!0,navigation.removeEventListener(`navigate`,e),navigation.removeEventListener(`navigatesuccess`,t),navigation.removeEventListener(`navigateerror`,t),i!==null&&(i(),i=null)}}}function Wh(e){this._internalRoot=e}Gh.prototype.render=Wh.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(i(409));var n=t.current;dh(n,kd(),e,t,null,null)},Gh.prototype.unmount=Wh.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;dh(e.current,2,null,e,null,null),Ld(),t[ft]=null}};function Gh(e){this._internalRoot=e}Gh.prototype.unstable_scheduleHydration=function(e){if(e){var t=st();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Ah.length&&t!==0&&t<Ah[n].priority;n++);Ah.splice(n,0,e),n===0&&Fh(e)}};var Kh=n.version;if(Kh!==`19.3.0`)throw Error(i(527,Kh,`19.3.0`));K.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render==`function`?Error(i(188)):(e=Object.keys(e).join(`,`),Error(i(268,e)));return e=u(t),e=e===null?null:d(e),e=e===null?null:e.stateNode,e};var qh={bundleType:0,version:`19.3.0`,rendererPackageName:`react-dom`,currentDispatcherRef:G,reconcilerVersion:`19.3.0`};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`){var Jh=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Jh.isDisabled&&Jh.supportsFiber)try{Re=Jh.inject(qh),ze=Jh}catch{}}e.createRoot=function(e,t){if(!a(e))throw Error(i(299));var n=!1,r=``,o=hc,s=gc,c=_c;return t!=null&&(!0===t.unstable_strictMode&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onUncaughtError!==void 0&&(o=t.onUncaughtError),t.onCaughtError!==void 0&&(s=t.onCaughtError),t.onRecoverableError!==void 0&&(c=t.onRecoverableError)),t=lh(e,1,!1,null,null,n,r,null,o,s,c,Uh),e[ft]=t.current,Wf(e),new Wh(t)}})),Ed=o(((e,t)=>{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Td()}))(),Dd=g.createContext(void 0);function Od(e){let t=g.useContext(Dd);if(!e&&t===void 0)throw Error(S(27));return t}var kd=g.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...o}=e,s=Od(),c=s.useState(`open`),l=s.useState(`nested`),u=s.useState(`mounted`);return Ir(`div`,e,{state:{open:c,transitionStatus:s.useState(`transitionStatus`)},ref:[s.context.backdropRef,t],stateAttributesMapping:At,props:[{role:`presentation`,hidden:!u,style:{userSelect:`none`,WebkitUserSelect:`none`}},o],enabled:a||!l})}),Ad=g.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,...s}=e,c=Od(),l=c.useState(`open`),{getButtonProps:u,buttonRef:d}=ia({disabled:a,native:o}),f={disabled:a};function p(e){l&&c.setOpen(!1,wa(ha,e.nativeEvent))}return Ir(`button`,e,{state:f,ref:[t,d],props:[{onClick:p},s,u]})});function jd(e){return qi(e,`base-ui`)}var Md=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,s=Od(),c=jd(a);return s.useSyncedValueWithCleanup(`descriptionElementId`,c),Ir(`p`,e,{ref:t,props:[{id:c},o]})}),Nd=g.createContext(void 0);function Pd(){let e=g.useContext(Nd);if(e===void 0)throw Error(S(26));return e}var Fd=`ArrowUp`,Id=`ArrowDown`,Ld=`ArrowLeft`,Rd=`ArrowRight`,zd=new Set([Fd,Id,Ld,Rd,`Home`,`End`]),Bd=`Shift`,Vd=[Bd,`Control`,`Alt`,`Meta`];function Hd(e){return fe(e)&&e.tagName===`INPUT`}function Ud(e){return!!(Hd(e)&&e.selectionStart!=null||fe(e)&&e.tagName===`TEXTAREA`)}function Wd(e,t,n,r){if(!e||!t||!t.scrollTo)return;let i=e.scrollLeft,a=e.scrollTop,o=e.clientWidth<e.scrollWidth,s=e.clientHeight<e.scrollHeight;if(o&&r!==`vertical`){let r=Gd(e,t,`left`),a=Kd(e),o=Kd(t);n===`ltr`&&(r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight?i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight:r-o.scrollMarginLeft<e.scrollLeft+a.scrollPaddingLeft&&(i=r-o.scrollMarginLeft-a.scrollPaddingLeft)),n===`rtl`&&(r-o.scrollMarginLeft<e.scrollLeft+a.scrollPaddingLeft?i=r-o.scrollMarginLeft-a.scrollPaddingLeft:r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight&&(i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight))}if(s&&r!==`horizontal`){let n=Gd(e,t,`top`),r=Kd(e),i=Kd(t);n-i.scrollMarginTop<e.scrollTop+r.scrollPaddingTop?a=n-i.scrollMarginTop-r.scrollPaddingTop:n+t.offsetHeight+i.scrollMarginBottom>e.scrollTop+e.clientHeight-r.scrollPaddingBottom&&(a=n+t.offsetHeight+i.scrollMarginBottom-e.clientHeight+r.scrollPaddingBottom)}e.scrollTo({left:i,top:a,behavior:`auto`})}function Gd(e,t,n){let r=n===`left`?`offsetLeft`:`offsetTop`,i=0;for(;t.offsetParent&&(i+=t[r],t.offsetParent!==e);)t=t.offsetParent;return i}function Kd(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}var qd=`--nested-dialogs`,Jd=`data-nested-dialog-open`,Yd={...kt,...gt,nestedDialogOpen(e){return e?{[Jd]:``}:null}},Xd=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,initialFocus:o,...s}=e,c=Od(),l=c.useState(`descriptionElementId`),u=c.useState(`disablePointerDismissal`),d=c.useState(`floatingRootContext`),f=c.useState(`popupProps`),p=c.useState(`modal`),m=c.useState(`mounted`),h=c.useState(`nested`),g=c.useState(`nestedOpenDialogCount`),_=c.useState(`open`),v=c.useState(`openMethod`),y=c.useState(`titleElementId`),b=c.useState(`transitionStatus`),x=c.useState(`role`),S=d.useState(`floatingId`);Pd(),$r({open:_,ref:c.context.popupRef,onComplete(){_&&c.context.onOpenChangeComplete?.(!0)}});let C=o===void 0?Ms(c.context.popupRef):o,w=g>0,T=c.useStateSetter(`popupElement`),E=Ir(`div`,e,{state:{open:_,nested:h,transitionStatus:b,nestedDialogOpen:w},props:[f,{id:S,"aria-labelledby":y,"aria-describedby":l,role:x,...js,hidden:!m,onKeyDown(e){zd.has(e.key)&&e.stopPropagation()},style:{[qd]:g}},s],ref:[t,c.context.popupRef,T],stateAttributesMapping:Yd});return(0,X.jsx)(vo,{context:d,openInteractionType:v,disabled:!m,closeOnFocusOut:!u,initialFocus:C,returnFocus:a,modal:p!==!1,restoreFocus:`popup`,children:E})}),Zd=g.forwardRef(function(e,t){let{cutout:n,...r}=e,i;if(n){let e=n.getBoundingClientRect();i=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${e.left}px ${e.top}px,${e.left}px ${e.bottom}px,${e.right}px ${e.bottom}px,${e.right}px ${e.top}px,${e.left}px ${e.top}px)`}return(0,X.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),Qd=g.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,i=Od(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,X.jsx)(Nd.Provider,{value:n,children:(0,X.jsxs)(Aa,{ref:t,...r,children:[a&&o===!0&&(0,X.jsx)(Zd,{ref:i.context.internalBackdropRef,inert:Gr(!s)}),e.children]})}):null}),$d={},ef={},tf=``;function nf(e,t){return me(e)?e:t}function rf(e,t,n){return/hidden|clip/.test(e.getComputedStyle(nf(t,n)).overflowY)}function af(e){if(typeof document>`u`)return!1;let t=Me(e);return q(t).innerWidth-t.documentElement.clientWidth>0}function of(e){if(!(typeof CSS<`u`&&CSS.supports&&CSS.supports(`scrollbar-gutter`,`stable`))||typeof document>`u`)return!1;let t=Me(e),n=t.documentElement,r=t.body,i=nf(n,r),a=i.style.overflowY,o=n.style.scrollbarGutter;n.style.scrollbarGutter=`stable`,i.style.overflowY=`scroll`;let s=i.offsetWidth;i.style.overflowY=`hidden`;let c=i.offsetWidth;return i.style.overflowY=a,n.style.scrollbarGutter=o,s===c}function sf(e){let t=Me(e),n=t.documentElement,r=t.body,i=nf(n,r),a={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:`hidden`,overflowX:`hidden`}),()=>{Object.assign(i.style,a)}}function cf(e){let t=Me(e),n=t.documentElement,r=t.body,i=q(n),a=0,o=0,s=!1,c=Ie.create();if(tt&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let t=i.getComputedStyle(n),c=i.getComputedStyle(r),l=(t.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,$d={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},tf=n.style.scrollBehavior,ef={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let u=n.scrollHeight>n.clientHeight,d=n.scrollWidth>n.clientWidth,f=t.overflowY===`scroll`||c.overflowY===`scroll`,p=t.overflowX===`scroll`||c.overflowX===`scroll`,m=Math.max(0,i.innerWidth-r.clientWidth),h=Math.max(0,i.innerHeight-r.clientHeight),g=parseFloat(c.marginTop)+parseFloat(c.marginBottom),_=parseFloat(c.marginLeft)+parseFloat(c.marginRight),v=nf(n,r);if(s=of(e),s){n.style.scrollbarGutter=l,v.style.overflowY=`hidden`,v.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:l,overflowY:`hidden`,overflowX:`hidden`}),(u||f)&&(n.style.overflowY=`scroll`),(d||p)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:g||h?`calc(100dvh - ${g+h}px)`:`100dvh`,width:_||m?`calc(100vw - ${_+m}px)`:`100vw`,boxSizing:`border-box`,overflowY:`hidden`,overflowX:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function u(){Object.assign(n.style,$d),Object.assign(r.style,ef),s||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=tf)}function d(){u(),c.request(l)}l();let f=Ne(i,`resize`,d);return()=>{c.cancel(),u(),typeof i.removeEventListener==`function`&&f()}}var lf=new class{lockCount=0;restore=null;timeoutLock=ze.create();timeoutUnlock=ze.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=Me(e),n=t.documentElement,r=t.body,i=q(n);if(rf(i,n,r)){let t=new i.MutationObserver(()=>{rf(i,n,r)||(t.disconnect(),this.restore=null,this.lock(e))}),a={attributes:!0};t.observe(n,a),t.observe(r,a),this.restore=()=>t.disconnect();return}let a=Xe||!af(e);this.restore=a?sf(e):cf(e)}};function uf(e=!0,t=null){b(()=>{if(e)return lf.acquire(t)},[e,t])}function df({store:e,parentContext:t,isDrawer:n}){let r=e.useState(`open`),i=e.useState(`disablePointerDismissal`),a=e.useState(`modal`),o=e.useState(`popupElement`),s=e.useState(`floatingRootContext`),[c,l]=g.useState(0),[u,d]=g.useState(0),f=c===0,p=So(s,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:a===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0)return!1;if(`touches`in t){if(t.type===`touchend`){if(t.changedTouches.length!==1||t.touches.length!==0)return!1}else if(t.touches.length!==1)return!1}let n=at(t);if(f&&!i){if(a){let t=e.context.internalBackdropRef.current,r=e.context.backdropRef.current;return t||r?t===n||r===n||Y(n,o)&&!n?.hasAttribute(`data-base-ui-portal`):!0}return!0}return!1},escapeKey:f});return uf(r&&a===!0,o),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{l(e),d(t)}),b(()=>(t?.onNestedDialogOpen&&(r?t.onNestedDialogOpen(c+1,u+ +!!n):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&r&&t.onNestedDialogOpen(0,0)}),[n,r,c,u,t]),Hs(e,{activeTriggerProps:p.reference,inactiveTriggerProps:p.trigger,popupProps:p.floating,nestedOpenDialogCount:c,nestedOpenDrawerCount:u}),null}var ff=class extends ae{setState(e){}update(e){}set(e,t){}notifyAll(){}},pf={...Zs,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role},mf=class extends ae{constructor(e,t,n){let r=new Ws,i=gf(e,r,t,n);super(i,_f(r),pf)}setOpen=(e,t)=>{t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),!t.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(e,t),this.update(Ls(this.state,e,t.trigger)))}};function hf(){let e=new Ws;return new ff(Object.freeze(gf(void 0,e)),Object.freeze(_f(e)),pf)}function gf(e,t,n,r=!1){return{...Gs(t,n,r),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function _f(e){return{popupRef:g.createRef(),backdropRef:g.createRef(),internalBackdropRef:g.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function vf(e,t){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=t,p=e===`drawer`,m=e===`alert-dialog`,h=m?!0:c,_=m||s,v=m?`alertdialog`:`dialog`,y=Od(!0),b={modal:h,disablePointerDismissal:_,nested:y!=null,role:v},x=Ns((e,t)=>new mf({open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...b},e,t),!0);x.useControlledProp(`openProp`,r),x.useControlledProp(`triggerIdProp`,d),x.useSyncedValues(b),x.useContextCallback(`onOpenChange`,a),x.useContextCallback(`onOpenChangeComplete`,o);let S=x.useState(`open`),C=x.useState(`mounted`),w=x.useState(`payload`);Us(x,S),Bs(x);let{forceUnmount:T}=Vs(S,x);g.useImperativeHandle(l,()=>({unmount:T,close:()=>x.setOpen(!1,wa(Sa))}),[T,x]);let E=S||C;return(0,X.jsxs)(Dd.Provider,{value:x,children:[u&&(0,X.jsx)(Ps,{handle:u,store:x}),E&&(0,X.jsx)(df,{store:x,parentContext:y?.context,isDrawer:p}),typeof n==`function`?n({payload:w}):n]})}var yf=F(function(e){return vf(`dialog`,e)}),bf=g.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,...o}=e,s=Pd(),c=Od(),l=c.useState(`open`),u=c.useState(`nested`),d=c.useState(`transitionStatus`),f=c.useState(`nestedOpenDialogCount`),p=c.useState(`mounted`),m=c.useStateSetter(`viewportElement`);return Ir(`div`,e,{enabled:s||p,state:{open:l,nested:u,transitionStatus:d,nestedDialogOpen:f>0},ref:[t,m],stateAttributesMapping:Yd,props:[{role:`presentation`,hidden:!p,style:{pointerEvents:l?void 0:`none`},children:a},o]})}),xf=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,s=Od(),c=jd(a);return s.useSyncedValueWithCleanup(`titleElementId`,c),Ir(`h2`,e,{ref:t,props:[{id:c},o]})});function Sf(e){let t=g.useRef(``),n=g.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:g.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function Cf(e,t){let n=g.useRef(e),r=G(t);b(()=>{n.current!==e&&r(n.current),n.current=e},[e,r])}function wf(e,t){let{onClick:n,onPointerDown:r}=Sf(G((n,r)=>{(typeof e==`function`?e():e)||t(r||(Xe?`touch`:``))}));return g.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function Tf(e){let[t,n]=g.useState(null),r=wf(e,n);return Cf(e,t=>{t&&!e&&n(null)}),g.useMemo(()=>({openMethod:t,triggerProps:r}),[t,r])}var Ef=I(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,id:s,payload:c,handle:l,...u}=e,d=Od(!0),f=Qs(l)??d;if(!f)throw Error(S(79));let p=jd(s),m=f.useState(`floatingRootContext`),h=f.useState(`isOpenedByTrigger`,p),_=f.useState(`triggerPopupId`,p),v=g.useRef(null),{registerTrigger:y,isMountedByThisTrigger:b}=zs(p,v,f,{payload:c}),{getButtonProps:x,buttonRef:C}=ia({disabled:a,native:o}),w=yo(m),T=wf(()=>f.select(`open`),e=>{f.set(`openMethod`,e)}),E={disabled:a,open:h},D=f.useState(`triggerProps`,b);return Ir(`button`,e,{state:E,ref:[C,t,y,v],props:[w.reference,D,T,{[ti]:``,id:p,"aria-haspopup":`dialog`,"aria-expanded":h,"aria-controls":_},u,x],stateAttributesMapping:Dt})}),Df=class extends Es{constructor(){super(hf(),`Dialog`,!1)}open(e){this.openByTrigger(e)}openWithPayload(e){let t=this.attachedStore;t!==null&&(t.set(`payload`,e),t.setOpen(!0,wa(Sa)))}close(){this.closePopup()}get isOpen(){return this.attachedStore?.select(`open`)??!1}};function Of(){return new Df}var kf=[`container`,`keepMounted`];function Af(e){let{portalProps:t,...n}=e,r={...t},i={};for(let e of Object.keys(n)){let t=n[e];kf.includes(e)?t!==void 0&&(r[e]=t):i[e]=t}return{portal:r,popup:i}}var jf=Object.assign(function(e){return(0,X.jsx)(yf,{...e})},{createHandle:Of});function Mf({className:e,children:t,closeButton:n=!0,closeLabel:r=`Close`,backdrop:i=!0,frame:a=!0,backdropProps:o,viewportProps:s,...c}){let l=a&&i,{portal:u,popup:d}=Af(c);return(0,X.jsxs)(Qd,{...u,children:[i&&(0,X.jsx)(kd,{"data-slot":`dialog-backdrop`,...o,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`motion-safe:transition-opacity motion-safe:duration-250 motion-safe:ease-out`,`data-ending-style:motion-safe:opacity-0 data-starting-style:motion-safe:opacity-0`,o?.className)}),(0,X.jsx)(bf,{"data-slot":`dialog-viewport`,...s,className:Q(`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,s?.className),children:(0,X.jsx)(Xd,{"data-slot":`dialog-popup`,...l?{"data-frame":``}:{},className:Q(`group/dialog-popup relative flex max-h-full min-h-0 w-150 max-w-full flex-col`,`rounded-2xl border`,l?`border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`:`bg-background border-border-overlay`,!l&&`shadow-2xl`,`isolate transform-gpu outline-none`,`motion-safe:transition-[opacity,scale] motion-safe:duration-250 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-95 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,`data-nested-dialog-open:pointer-events-none data-nested-dialog-open:scale-95 data-nested-dialog-open:opacity-0`,e),...d,children:(0,X.jsxs)(`div`,{"data-slot":`dialog-content`,className:Q(`relative flex min-h-0 flex-col overflow-hidden not-has-[>[data-slot=dialog-footer]]:pb-6 not-has-[>[data-slot=dialog-header]]:pt-6 [&>[data-slot=dialog-header]+[data-slot=dialog-footer]]:pt-0`,l&&`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`),children:[t,n&&(0,X.jsx)(Ad,{"aria-label":r,"data-slot":`dialog-close-button`,className:Q(Mu({variant:`outline`,size:`icon-sm`}),`absolute inset-e-3 top-3 z-10`),children:(0,X.jsx)(Lf,{})})]})})})]})}function Nf({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function Pf({className:e,...t}){return(0,X.jsx)(xf,{"data-slot":`dialog-title`,className:Q(`text-foreground-intense text-2xl font-semibold`,e),...t})}function Ff({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-body`,className:Q(`min-h-0 flex-1 px-6`,e),...t})}function If({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-footer`,className:Q(`flex flex-col-reverse gap-2 p-6 sm:flex-row sm:justify-end`,e),...t})}function Lf(e){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,...e,children:(0,X.jsx)(`path`,{d:`M11.594 3.594c.225-.225.588-.225.813 0s.225.588 0 .812L8.813 8l3.594 3.594c.225.225.225.588 0 .813s-.588.225-.812 0L8 8.812l-3.594 3.594c-.225.225-.588.225-.812 0s-.225-.588 0-.812L7.188 8 3.594 4.406c-.225-.225-.225-.588 0-.812s.588-.225.813 0L8 7.187l3.594-3.594z`})})}var Rf=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,focusableWhenDisabled:a=!1,nativeButton:o=!0,style:s,...c}=e,{getButtonProps:l,buttonRef:u}=ia({disabled:i,focusableWhenDisabled:a,native:o});return Ir(`button`,e,{state:{disabled:i},ref:[t,u],props:[c,l]})}),zf=g.createContext(null);function Bf({className:e,variant:t,size:n,disabled:r,...i}){let a=g.useContext(zf),o=t??a?.variant,s=n??a?.size,c=r||a?.disabled;return(0,X.jsx)(Rf,{"data-slot":`button`,disabled:c,className:Q(Mu({variant:o,size:s}),e),...i})}var Vf=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxgAAAMYAQAAAABgBnzJAAAGdElEQVR42u2dXY7yOBBFbyY8IoWlsICWiPQtYFY8UtCwAJYCEo8deR4gxPFPOgE62MzJQ0Q3kNOmnL5UuVxVGP368ZdgwIABAwYMGDBg5MjYF86xevhywUu987M6F7V0LupidS5qSVKx6k/9s847mFcwYMCA8cMRk4rKdCfdIhHGPvXPDt+BPV7CKI11NE9dMHCpN+t5sRqc7N91om4/y30OAwYMGE/r+VDDPXl3XoI9XsnYP+uae076KoXPytHu3it3PPXBE8wrGDBgwHiFng+9ck/lrSewB4yJDEesPVHvg+7E22HAgAHjGT3vDkesTUzjibfDmLx+7i+Y96LuRSTQcxgwYMB43j8PL5iHHXL0/KX22JmXXdO9VIL+uZct10k+9zkMGDBg/Ip/7mfLSQZ7vNoebfGyCwYulUJ++8wT8woGDBgwns5vn3XCHk8exf+hrsEgKW7kR/QcBgwYMNAPGG9nOOvivkQ7YXUvq90X+sHedewBAwYMGOg5jIUYA+22ve1IWD3sswerzWAPGDBgwEDPYSzpnw+S1x1h9orK+JF3L+iOfw4DBgwY6DmMBfU8ugXNqejqFIQLP3I0HnvAgAEDBnoOYyk99/ehhfamOYF4T8/xz2HAgAEDPYeh966fe3vNf6jjai+Ye+lxVgYd9oABAwYM9BzGQuvn/rp4OAavSXXkBu469oABAwYM9BzG4no+Vpf9HOs8M7KbLcHP6ryR2lX2Nm83/TnncRxuVsl8HG034zd5j+Nwv03yHkcdeJShnp/76VR+Z2yPo6TKmJOkNjl7yEw+rsO4DmRnZhxLjeNk/1kq+x9P2vXPft8H3Q3o9hKVxpjbqftx8N605tVFqq6PTtIl3/vjKG2vj6qZN0ha46hVNreHTd76se4ebOcpSFLjaO/TSlpf/wnnao/7dCoz9s/PG0vE9/UcRU/X59zme58f+9tcWs/6x7vgOEKNzH/sgzp0yOPtWZKyR21PpvJzYjJ1tuNoPjBG1hBPfC+jzaPe66Cb+Wjp9ttx+tt+XeCVVvnXlL6XtCsZ5u6Ceq5Am/O4nt9jvGN73TJYPz+cP8Pmda56XnIPps04ZjuOOg89D7U5t6SvqX/ukx5p2ZJgvL3/vnv5iPvjK+V6MtGtatcQiWWB859TO2XpPEk9t766H5uqqfOcV2v7H9YfaXvMcxyldaOf7aB1fvf55R4iXUvltqizHEdzv0E22kr6Z7KkpzWO+6JH21nnkpieV7Ee5oM+K+uRFmwa7YmeqA5euvBVm+W8Kp2//DjZJ1k+3h7dV3690ZtDIRVjnVNDu96S6D84uNHbWoW0TnFdbdb33YPt4taTvywmd59fp0vdfG0kqWoy6msZOnbNSmrLU+b+x1Fqpcs6dz/qIjUbHU+55l810q655l6dZP5NK/9qRl5f0afzzYu+JzevvtJd55SVBeeks90e9fOqtHP8qmHKXJ8U56TRJZcPp+3XZ8RFJ+seMWSxfv7oG7cfMY7tHIukvF/tuGXfHYxp/nm0I+qkejIKlJJh/zkMGDBgoIMwlq736ihxOG9disfbw11XsQcMGDBgoOcwlu6vNtJuLdol1W147mx4wx4wYMCAgZ7DeE99uEgR95CKO0+8Jx8OBgwYMNBz7IGe+6Ve/YXwUPlXb5ubUwUe/xwGDBgw0HMYy+8/9/PcxtfKbSfd2XWedP12GDBgwEDPYbyasS/6Y/XWeLvjXo80T3NS5qL14bA5DBgwYPyenu8tn2tY3R17vIdR9oUDkhmHHzj3MuOcNDr0HAYMGDD0RJ2iynhlYO1CsE5d2OgFsMcDDNuzDrjX85z0VVqflVMfLuKLRxLgyG+HAQMGjAf1/C7bVbCmu1/gVQo0dMEecxmlU5fv4WNnvpPTc8cDd75xTCg5072DeQUDBgwYs/zzcAc180M/Fuu32OMBe9yWL+Z1mh8ebZHeZ+WsqQ889fAietzLZ17BgAEDxkQ9r0zEU/c7uBjto98KsMfv9mmIueYpflahlPWo9+5vPR/E5ZlXMGDAgDFHz6ON1/y+qpFeq9gDhrzaMeOL46GFdfafw4ABA8ZD/mCnyaOL46GFdTeXDns8YI+d+fDPypHtaS8euPDMKxgwYMCYE991g+4TX1yh54/bI7bynf9nFaod44Tap1abYV7BgAEDxvx4eyjUHorBB+Py2EPU94EBAwYMGDBgwIDx1PEfwPfvNJna2O0AAAAASUVORK5CYII=`,Hf=[`zh-Hans`,`zh-Hant`,`en`,`ja`,`ko`,`de`,`es`,`fr`,`pt`,`ru`],Uf={"zh-Hans":`简体中文`,"zh-Hant":`繁體中文`,en:`English`,ja:`日本語`,ko:`한국어`,de:`Deutsch`,es:`Español`,fr:`Français`,pt:`Português`,ru:`Русский`},Wf=`zh-Hans`,Gf=`dsh-mobile-panel-language`;function Kf(e){let t=String(e??``).trim().replace(/_/g,`-`).toLowerCase();if(!t)return null;let n=t.split(`-`),r=n[0];return r===`zh`?n.slice(1).some(e=>e===`hant`||e===`tw`||e===`hk`||e===`mo`)?`zh-Hant`:`zh-Hans`:r===`en`?`en`:r===`ja`?`ja`:r===`ko`?`ko`:r===`de`?`de`:r===`es`?`es`:r===`fr`?`fr`:r===`pt`?`pt`:r===`ru`?`ru`:null}function qf(){try{let e=typeof navigator>`u`?null:navigator;if(!e)return[];if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages;if(typeof e.language==`string`&&e.language)return[e.language]}catch{}return[]}function Jf(){for(let e of qf()){let t=Kf(e);if(t)return t}return`en`}function Yf(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Xf(){let e=Yf();if(!e)return`system`;try{let t=e.getItem(Gf);return t?Kf(t)??`system`:`system`}catch{return`system`}}var Zf=null,Qf=null,$f=new Set;function ep(){return Zf===null&&(Zf=Xf()),Zf}function tp(){return ep()}function np(){let e=ep();return e===`system`?(Qf||=Jf(),Qf):e}function rp(e){let t=e===`system`?`system`:Kf(e)??`system`;Zf=t,Qf=null;let n=Yf();try{n&&(t===`system`?n.removeItem(Gf):n.setItem(Gf,t))}catch{}for(let e of $f)e()}function ip(e){return $f.add(e),()=>{$f.delete(e)}}function ap(){return np()}function op(e,t){return t?e.replace(/\{([a-zA-Z0-9_]+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)}):e}function sp(e){let t={};for(let n of e)Object.assign(t,n);return t}function cp(e,t,n,r){let i=e[t]?.[n]||e[Wf]?.[n];return typeof i!=`string`||i.length===0?n:op(i,r)}var lp=[{"zh-Hans":{"panel.common.show":`显示`,"panel.common.hide":`隐藏`,"panel.common.close":`关闭`,"panel.common.none":`暂无`,"panel.common.cores":`核`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`,"panel.webAccess.title":`网页管理`,"panel.webAccess.state":`公网 / 局域网访问`,"panel.webAccess.closed":`未开放(默认关闭)`,"panel.webAccess.expires":`开放到 {time}`,"panel.webAccess.open":`开放 2 小时`,"panel.webAccess.close":`立即关闭`,"panel.webAccess.hint":`网页管理默认只对这台机器开放。从这里或侧边栏那颗手机图标打开后,2 小时内公网与局域网地址都能操作这一页;访问不会延长到期时间,到点自动关闭。`,"panel.webAccess.opened":`已开放网页管理 2 小时。`,"panel.webAccess.closedNotice":`已关闭网页管理。`,"panel.common.cancel":`取消`,"panel.common.save":`保存`,"panel.common.view":`查看`,"panel.common.edit":`修改`,"panel.shell.loading":`正在读取插件状态…`,"panel.language.open":`界面语言`,"panel.language.system":`跟随浏览器`},"zh-Hant":{"panel.common.show":`顯示`,"panel.common.hide":`隱藏`,"panel.common.close":`關閉`,"panel.common.none":`暫無`,"panel.common.cores":`核`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`,"panel.webAccess.title":`網頁管理`,"panel.webAccess.state":`公網 / 區域網路存取`,"panel.webAccess.closed":`未開放(預設關閉)`,"panel.webAccess.expires":`開放到 {time}`,"panel.webAccess.open":`開放 2 小時`,"panel.webAccess.close":`立即關閉`,"panel.webAccess.hint":`網頁管理預設只對這台機器開放。從這裡或側邊欄那顆手機圖示開啟後,2 小時內公網與區域網路位址都能操作這一頁;存取不會延長到期時間,到點自動關閉。`,"panel.webAccess.opened":`已開放網頁管理 2 小時。`,"panel.webAccess.closedNotice":`已關閉網頁管理。`,"panel.common.cancel":`取消`,"panel.common.save":`儲存`,"panel.common.view":`檢視`,"panel.common.edit":`修改`,"panel.shell.loading":`正在讀取外掛狀態…`,"panel.language.open":`介面語言`,"panel.language.system":`跟隨瀏覽器`},en:{"panel.common.show":`Show`,"panel.common.hide":`Hide`,"panel.common.close":`Close`,"panel.common.none":`None`,"panel.common.cores":`cores`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`,"panel.webAccess.title":`Web management`,"panel.webAccess.state":`Public / LAN access`,"panel.webAccess.closed":`Closed (the default)`,"panel.webAccess.expires":`Open until {time}`,"panel.webAccess.open":`Open for 2 hours`,"panel.webAccess.close":`Close now`,"panel.webAccess.hint":`Web management is reachable from this machine only by default. Opening it here or from the phone icon in the sidebar lets public and LAN addresses operate this page for 2 hours; visits do not extend it and it closes on its own.`,"panel.webAccess.opened":`Web management is open for 2 hours.`,"panel.webAccess.closedNotice":`Web management closed.`,"panel.common.cancel":`Cancel`,"panel.common.save":`Save`,"panel.common.view":`View`,"panel.common.edit":`Change`,"panel.shell.loading":`Reading plugin status…`,"panel.language.open":`Language`,"panel.language.system":`Follow browser`},ja:{"panel.common.show":`表示`,"panel.common.hide":`隠す`,"panel.common.close":`閉じる`,"panel.common.none":`なし`,"panel.common.cores":`コア`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`,"panel.webAccess.title":`ウェブ管理`,"panel.webAccess.state":`公衆 / LAN アクセス`,"panel.webAccess.closed":`未開放(既定はオフ)`,"panel.webAccess.expires":`{time} まで開放`,"panel.webAccess.open":`2 時間開放する`,"panel.webAccess.close":`今すぐ閉じる`,"panel.webAccess.hint":`ウェブ管理は既定ではこのマシンからのみ開けます。ここまたはサイドバーのスマートフォンアイコンから開くと、2 時間は公衆・LAN のアドレスからこのページを操作できます。アクセスしても期限は延びず、時間が来れば自動で閉じます。`,"panel.webAccess.opened":`ウェブ管理を 2 時間開放しました。`,"panel.webAccess.closedNotice":`ウェブ管理を閉じました。`,"panel.common.cancel":`キャンセル`,"panel.common.save":`保存`,"panel.common.view":`表示`,"panel.common.edit":`変更`,"panel.shell.loading":`プラグインの状態を読み込み中…`,"panel.language.open":`表示言語`,"panel.language.system":`ブラウザに合わせる`},ko:{"panel.common.show":`표시`,"panel.common.hide":`숨기기`,"panel.common.close":`닫기`,"panel.common.none":`없음`,"panel.common.cores":`코어`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`,"panel.webAccess.title":`웹 관리`,"panel.webAccess.state":`공용 / LAN 접속`,"panel.webAccess.closed":`열리지 않음(기본값)`,"panel.webAccess.expires":`{time}까지 열림`,"panel.webAccess.open":`2시간 열기`,"panel.webAccess.close":`지금 닫기`,"panel.webAccess.hint":`웹 관리는 기본적으로 이 컴퓨터에서만 열립니다. 여기 또는 사이드바의 휴대폰 아이콘에서 열면 2시간 동안 공용·LAN 주소에서 이 페이지를 조작할 수 있습니다. 접속해도 만료 시간은 늘어나지 않으며 시간이 되면 자동으로 닫힙니다.`,"panel.webAccess.opened":`웹 관리를 2시간 열었습니다.`,"panel.webAccess.closedNotice":`웹 관리를 닫았습니다.`,"panel.common.cancel":`취소`,"panel.common.save":`저장`,"panel.common.view":`보기`,"panel.common.edit":`변경`,"panel.shell.loading":`플러그인 상태를 불러오는 중…`,"panel.language.open":`표시 언어`,"panel.language.system":`브라우저 설정 따르기`},de:{"panel.common.show":`Anzeigen`,"panel.common.hide":`Ausblenden`,"panel.common.close":`Schließen`,"panel.common.none":`Keine`,"panel.common.cores":`Kerne`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt gekoppelt werden.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`,"panel.webAccess.title":`Webverwaltung`,"panel.webAccess.state":`Öffentlich-/LAN-Zugriff`,"panel.webAccess.closed":`Geschlossen (Standard)`,"panel.webAccess.expires":`Offen bis {time}`,"panel.webAccess.open":`Für 2 Stunden öffnen`,"panel.webAccess.close":`Sofort schließen`,"panel.webAccess.hint":`Die Webverwaltung ist standardmäßig nur von diesem Rechner erreichbar. Wird sie hier oder über das Handy-Symbol in der Seitenleiste geöffnet, können öffentliche und LAN-Adressen diese Seite 2 Stunden lang bedienen; Aufrufe verlängern die Frist nicht, danach schließt sie sich selbst.`,"panel.webAccess.opened":`Webverwaltung ist für 2 Stunden offen.`,"panel.webAccess.closedNotice":`Webverwaltung geschlossen.`,"panel.common.cancel":`Abbrechen`,"panel.common.save":`Speichern`,"panel.common.view":`Ansehen`,"panel.common.edit":`Ändern`,"panel.shell.loading":`Plugin-Status wird gelesen…`,"panel.language.open":`Sprache`,"panel.language.system":`Browser folgen`},es:{"panel.common.show":`Mostrar`,"panel.common.hide":`Ocultar`,"panel.common.close":`Cerrar`,"panel.common.none":`Ninguno`,"panel.common.cores":`núcleos`,"panel.shell.deviceAllowed":`Ya se pueden vincular dispositivos nuevos.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`,"panel.webAccess.title":`Gestión web`,"panel.webAccess.state":`Acceso público / LAN`,"panel.webAccess.closed":`Cerrada (por defecto)`,"panel.webAccess.expires":`Abierta hasta {time}`,"panel.webAccess.open":`Abrir 2 horas`,"panel.webAccess.close":`Cerrar ahora`,"panel.webAccess.hint":`La gestión web solo es accesible desde este equipo de forma predeterminada. Al abrirla aquí o desde el icono del teléfono en la barra lateral, las direcciones públicas y de LAN pueden usar esta página durante 2 horas; las visitas no amplían el plazo y se cierra sola.`,"panel.webAccess.opened":`Gestión web abierta durante 2 horas.`,"panel.webAccess.closedNotice":`Gestión web cerrada.`,"panel.common.cancel":`Cancelar`,"panel.common.save":`Guardar`,"panel.common.view":`Ver`,"panel.common.edit":`Cambiar`,"panel.shell.loading":`Leyendo el estado del complemento…`,"panel.language.open":`Idioma`,"panel.language.system":`Seguir al navegador`},fr:{"panel.common.show":`Afficher`,"panel.common.hide":`Masquer`,"panel.common.close":`Fermer`,"panel.common.none":`Aucun`,"panel.common.cores":`cœurs`,"panel.shell.deviceAllowed":`De nouveaux appareils peuvent être appairés.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`,"panel.webAccess.title":`Gestion web`,"panel.webAccess.state":`Accès public / LAN`,"panel.webAccess.closed":`Fermée (par défaut)`,"panel.webAccess.expires":`Ouverte jusqu'à {time}`,"panel.webAccess.open":`Ouvrir 2 heures`,"panel.webAccess.close":`Fermer maintenant`,"panel.webAccess.hint":`La gestion web n'est accessible que depuis cette machine par défaut. En l'ouvrant ici ou depuis l'icône téléphone de la barre latérale, les adresses publiques et LAN peuvent utiliser cette page pendant 2 heures ; les visites ne prolongent pas le délai et elle se ferme d'elle-même.`,"panel.webAccess.opened":`Gestion web ouverte pour 2 heures.`,"panel.webAccess.closedNotice":`Gestion web fermée.`,"panel.common.cancel":`Annuler`,"panel.common.save":`Enregistrer`,"panel.common.view":`Voir`,"panel.common.edit":`Modifier`,"panel.shell.loading":`Lecture de l'état du greffon…`,"panel.language.open":`Langue`,"panel.language.system":`Suivre le navigateur`},pt:{"panel.common.show":`Mostrar`,"panel.common.hide":`Ocultar`,"panel.common.close":`Fechar`,"panel.common.none":`Nenhum`,"panel.common.cores":`núcleos`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`,"panel.webAccess.title":`Gerenciamento web`,"panel.webAccess.state":`Acesso público / LAN`,"panel.webAccess.closed":`Fechado (padrão)`,"panel.webAccess.expires":`Aberto até {time}`,"panel.webAccess.open":`Abrir por 2 horas`,"panel.webAccess.close":`Fechar agora`,"panel.webAccess.hint":`O gerenciamento web só é acessível a partir deste computador por padrão. Ao abri-lo aqui ou pelo ícone de celular na barra lateral, endereços públicos e de LAN podem usar esta página por 2 horas; os acessos não estendem o prazo e ele se fecha sozinho.`,"panel.webAccess.opened":`Gerenciamento web aberto por 2 horas.`,"panel.webAccess.closedNotice":`Gerenciamento web fechado.`,"panel.common.cancel":`Cancelar`,"panel.common.save":`Salvar`,"panel.common.view":`Ver`,"panel.common.edit":`Alterar`,"panel.shell.loading":`Lendo o status do plugin…`,"panel.language.open":`Idioma`,"panel.language.system":`Seguir o navegador`},ru:{"panel.common.show":`Показать`,"panel.common.hide":`Скрыть`,"panel.common.close":`Закрыть`,"panel.common.none":`Нет`,"panel.common.cores":`ядра`,"panel.shell.deviceAllowed":`Сопряжение новых устройств разрешено.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как обычно.`,"panel.webAccess.title":`Веб-управление`,"panel.webAccess.state":`Доступ из интернета / LAN`,"panel.webAccess.closed":`Закрыто (по умолчанию)`,"panel.webAccess.expires":`Открыто до {time}`,"panel.webAccess.open":`Открыть на 2 часа`,"panel.webAccess.close":`Закрыть сейчас`,"panel.webAccess.hint":`По умолчанию веб-управление доступно только с этой машины. Если открыть его здесь или значком телефона на боковой панели, публичные и LAN-адреса смогут работать с этой страницей 2 часа; обращения срок не продлевают, и оно закроется само.`,"panel.webAccess.opened":`Веб-управление открыто на 2 часа.`,"panel.webAccess.closedNotice":`Веб-управление закрыто.`,"panel.common.cancel":`Отмена`,"panel.common.save":`Сохранить`,"panel.common.view":`Просмотр`,"panel.common.edit":`Изменить`,"panel.shell.loading":`Чтение состояния плагина…`,"panel.language.open":`Язык`,"panel.language.system":`Как в браузере`}},{"zh-Hans":{"panel.status.connected":`已连接`,"panel.status.connecting":`连接中`,"panel.status.error":`被关闭`,"panel.status.off":`未启用`,"panel.lan.off":`未启用`,"panel.lan.listening":`正在监听`,"panel.lan.error":`启动失败`,"panel.sidecar.healthy":`运行中`,"panel.sidecar.starting":`启动中`,"panel.sidecar.restarting":`正在重启`,"panel.sidecar.error":`异常`,"panel.sidecar.stopped":`已停止`,"panel.ago.justNow":`刚刚`,"panel.ago.minutes":`{count} 分钟前`,"panel.ago.hours":`{count} 小时前`,"panel.ago.days":`{count} 天前`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.status.connected":`已連線`,"panel.status.connecting":`連線中`,"panel.status.error":`被關閉`,"panel.status.off":`未啟用`,"panel.lan.off":`未啟用`,"panel.lan.listening":`正在監聽`,"panel.lan.error":`啟動失敗`,"panel.sidecar.healthy":`執行中`,"panel.sidecar.starting":`啟動中`,"panel.sidecar.restarting":`正在重新啟動`,"panel.sidecar.error":`異常`,"panel.sidecar.stopped":`已停止`,"panel.ago.justNow":`剛剛`,"panel.ago.minutes":`{count} 分鐘前`,"panel.ago.hours":`{count} 小時前`,"panel.ago.days":`{count} 天前`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.status.connected":`Connected`,"panel.status.connecting":`Connecting`,"panel.status.error":`Shut down`,"panel.status.off":`Off`,"panel.lan.off":`Off`,"panel.lan.listening":`Listening`,"panel.lan.error":`Failed to start`,"panel.sidecar.healthy":`Running`,"panel.sidecar.starting":`Starting`,"panel.sidecar.restarting":`Restarting`,"panel.sidecar.error":`Error`,"panel.sidecar.stopped":`Stopped`,"panel.ago.justNow":`just now`,"panel.ago.minutes":`{count} min ago`,"panel.ago.hours":`{count} h ago`,"panel.ago.days":`{count} d ago`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`},ja:{"panel.status.connected":`接続済み`,"panel.status.connecting":`接続中`,"panel.status.error":`閉じられました`,"panel.status.off":`オフ`,"panel.lan.off":`オフ`,"panel.lan.listening":`待ち受け中`,"panel.lan.error":`起動に失敗`,"panel.sidecar.healthy":`実行中`,"panel.sidecar.starting":`起動中`,"panel.sidecar.restarting":`再起動中`,"panel.sidecar.error":`異常`,"panel.sidecar.stopped":`停止済み`,"panel.ago.justNow":`たった今`,"panel.ago.minutes":`{count} 分前`,"panel.ago.hours":`{count} 時間前`,"panel.ago.days":`{count} 日前`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`},ko:{"panel.status.connected":`연결됨`,"panel.status.connecting":`연결 중`,"panel.status.error":`종료됨`,"panel.status.off":`꺼짐`,"panel.lan.off":`꺼짐`,"panel.lan.listening":`수신 대기 중`,"panel.lan.error":`시작 실패`,"panel.sidecar.healthy":`실행 중`,"panel.sidecar.starting":`시작 중`,"panel.sidecar.restarting":`재시작 중`,"panel.sidecar.error":`오류`,"panel.sidecar.stopped":`중지됨`,"panel.ago.justNow":`방금`,"panel.ago.minutes":`{count}분 전`,"panel.ago.hours":`{count}시간 전`,"panel.ago.days":`{count}일 전`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`},de:{"panel.status.connected":`Verbunden`,"panel.status.connecting":`Verbinden…`,"panel.status.error":`Beendet`,"panel.status.off":`Aus`,"panel.lan.off":`Aus`,"panel.lan.listening":`Lauscht`,"panel.lan.error":`Start fehlgeschlagen`,"panel.sidecar.healthy":`Läuft`,"panel.sidecar.starting":`Startet…`,"panel.sidecar.restarting":`Startet neu…`,"panel.sidecar.error":`Fehler`,"panel.sidecar.stopped":`Gestoppt`,"panel.ago.justNow":`Gerade eben`,"panel.ago.minutes":`vor {count} Min.`,"panel.ago.hours":`vor {count} Std.`,"panel.ago.days":`vor {count} T.`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt koppeln.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`},es:{"panel.status.connected":`Conectado`,"panel.status.connecting":`Conectando…`,"panel.status.error":`Cerrado`,"panel.status.off":`Desactivado`,"panel.lan.off":`Desactivado`,"panel.lan.listening":`Escuchando`,"panel.lan.error":`Error al iniciar`,"panel.sidecar.healthy":`En marcha`,"panel.sidecar.starting":`Iniciando…`,"panel.sidecar.restarting":`Reiniciando…`,"panel.sidecar.error":`Error`,"panel.sidecar.stopped":`Detenido`,"panel.ago.justNow":`Ahora mismo`,"panel.ago.minutes":`hace {count} min`,"panel.ago.hours":`hace {count} h`,"panel.ago.days":`hace {count} d`,"panel.shell.deviceAllowed":`Los dispositivos nuevos ya pueden vincularse.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`},fr:{"panel.status.connected":`Connecté`,"panel.status.connecting":`Connexion…`,"panel.status.error":`Fermé`,"panel.status.off":`Désactivé`,"panel.lan.off":`Désactivé`,"panel.lan.listening":`En écoute`,"panel.lan.error":`Échec du démarrage`,"panel.sidecar.healthy":`En marche`,"panel.sidecar.starting":`Démarrage…`,"panel.sidecar.restarting":`Redémarrage…`,"panel.sidecar.error":`Erreur`,"panel.sidecar.stopped":`Arrêté`,"panel.ago.justNow":`À l'instant`,"panel.ago.minutes":`il y a {count} min`,"panel.ago.hours":`il y a {count} h`,"panel.ago.days":`il y a {count} j`,"panel.shell.deviceAllowed":`Les nouveaux appareils peuvent s'appairer.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`},pt:{"panel.status.connected":`Conectado`,"panel.status.connecting":`Conectando…`,"panel.status.error":`Fechado`,"panel.status.off":`Desativado`,"panel.lan.off":`Desativado`,"panel.lan.listening":`Escutando`,"panel.lan.error":`Falha ao iniciar`,"panel.sidecar.healthy":`Em execução`,"panel.sidecar.starting":`Iniciando…`,"panel.sidecar.restarting":`Reiniciando…`,"panel.sidecar.error":`Erro`,"panel.sidecar.stopped":`Parado`,"panel.ago.justNow":`Agora mesmo`,"panel.ago.minutes":`há {count} min`,"panel.ago.hours":`há {count} h`,"panel.ago.days":`há {count} d`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`},ru:{"panel.status.connected":`Подключено`,"panel.status.connecting":`Подключение…`,"panel.status.error":`Закрыто`,"panel.status.off":`Выключено`,"panel.lan.off":`Выключено`,"panel.lan.listening":`Прослушивание`,"panel.lan.error":`Не удалось запустить`,"panel.sidecar.healthy":`Работает`,"panel.sidecar.starting":`Запуск…`,"panel.sidecar.restarting":`Перезапуск…`,"panel.sidecar.error":`Ошибка`,"panel.sidecar.stopped":`Остановлен`,"panel.ago.justNow":`Только что`,"panel.ago.minutes":`{count} мин назад`,"panel.ago.hours":`{count} ч назад`,"panel.ago.days":`{count} дн. назад`,"panel.shell.deviceAllowed":`Новые устройства теперь могут пройти сопряжение.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как прежде.`}},{"zh-Hans":{"panel.shell.remoteEnabled":`已启用远程控制。`,"panel.shell.remoteDisabled":`已停用远程控制,手机将断开。`,"panel.shell.reconnecting":`已发起重连。`,"panel.shell.sidecarRestarted":`旁挂进程已重启。`,"panel.shell.revokeConfirm":`吊销全部设备授权?所有手机都要重新配对,这一步不能撤销。`,"panel.shell.revoked":`已吊销 {count} 个授权`,"panel.shell.revokedRelay":`(中转侧 {count} 个)`,"panel.shell.configSaved":`配置已保存。`,"panel.shell.lanSaved":`局域网配置已保存。`,"panel.shell.preferredAddress":`手机优先使用 {address}。`,"panel.shell.preferredAuto":`已改回按网卡顺序自动选。`,"panel.shell.unknownVersion":`未知版本`,"panel.shell.title":`移动端`,"panel.shell.subtitle":`把手机连上这台电脑上的 DSH`,"panel.shell.statusFailed":`读不到插件状态`,"panel.shell.readingStatus":`正在读取状态…`,"panel.shell.busy":`处理中…`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.shell.remoteEnabled":`已啟用遠端控制。`,"panel.shell.remoteDisabled":`已停用遠端控制,手機將斷開。`,"panel.shell.reconnecting":`已發起重新連線。`,"panel.shell.sidecarRestarted":`旁掛程序已重新啟動。`,"panel.shell.revokeConfirm":`吊銷全部裝置授權?所有手機都要重新配對,這一步不能撤銷。`,"panel.shell.revoked":`已吊銷 {count} 個授權`,"panel.shell.revokedRelay":`(中轉側 {count} 個)`,"panel.shell.configSaved":`設定已儲存。`,"panel.shell.lanSaved":`區域網路設定已儲存。`,"panel.shell.preferredAddress":`手機優先使用 {address}。`,"panel.shell.preferredAuto":`已改回依網卡順序自動選。`,"panel.shell.unknownVersion":`未知版本`,"panel.shell.title":`行動端`,"panel.shell.subtitle":`把手機連上這台電腦上的 DSH`,"panel.shell.statusFailed":`讀不到外掛狀態`,"panel.shell.readingStatus":`正在讀取狀態…`,"panel.shell.busy":`處理中…`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.shell.remoteEnabled":`Remote control enabled.`,"panel.shell.remoteDisabled":`Remote control disabled — your phone will disconnect.`,"panel.shell.reconnecting":`Reconnecting.`,"panel.shell.sidecarRestarted":`Sidecar process restarted.`,"panel.shell.revokeConfirm":`Revoke all device authorisations? Every phone has to be paired again, and this cannot be undone.`,"panel.shell.revoked":`Revoked {count} authorisation(s)`,"panel.shell.revokedRelay":` ({count} on the relay)`,"panel.shell.configSaved":`Configuration saved.`,"panel.shell.lanSaved":`Local-network settings saved.`,"panel.shell.preferredAddress":`Your phone will prefer {address}.`,"panel.shell.preferredAuto":`Back to automatic order by network interface.`,"panel.shell.unknownVersion":`Unknown version`,"panel.shell.title":`Mobile`,"panel.shell.subtitle":`Connect your phone to DSH on this computer`,"panel.shell.statusFailed":`Could not read plugin status`,"panel.shell.readingStatus":`Reading status…`,"panel.shell.busy":`Working…`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`},ja:{"panel.shell.remoteEnabled":`リモート操作をオンにしました。`,"panel.shell.remoteDisabled":`リモート操作をオフにしました。スマートフォンは切断されます。`,"panel.shell.reconnecting":`再接続を開始しました。`,"panel.shell.sidecarRestarted":`サイドカープロセスを再起動しました。`,"panel.shell.revokeConfirm":`すべてのデバイス認証を取り消しますか?すべてのスマートフォンで再ペアリングが必要になり、元に戻せません。`,"panel.shell.revoked":`{count} 件の認証を取り消しました`,"panel.shell.revokedRelay":`(リレー側 {count} 件)`,"panel.shell.configSaved":`設定を保存しました。`,"panel.shell.lanSaved":`LAN 設定を保存しました。`,"panel.shell.preferredAddress":`スマートフォンは {address} を優先します。`,"panel.shell.preferredAuto":`ネットワークインターフェース順の自動選択に戻しました。`,"panel.shell.unknownVersion":`不明なバージョン`,"panel.shell.title":`モバイル`,"panel.shell.subtitle":`このパソコンの DSH にスマートフォンをつなぐ`,"panel.shell.statusFailed":`プラグインの状態を取得できません`,"panel.shell.readingStatus":`状態を読み込み中…`,"panel.shell.busy":`処理中…`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`},ko:{"panel.shell.remoteEnabled":`원격 제어를 켰습니다.`,"panel.shell.remoteDisabled":`원격 제어를 껐습니다. 휴대폰 연결이 끊깁니다.`,"panel.shell.reconnecting":`재연결을 시작했습니다.`,"panel.shell.sidecarRestarted":`사이드카 프로세스를 재시작했습니다.`,"panel.shell.revokeConfirm":`모든 기기 인증을 취소할까요? 모든 휴대폰을 다시 페어링해야 하며 되돌릴 수 없습니다.`,"panel.shell.revoked":`인증 {count}개를 취소했습니다`,"panel.shell.revokedRelay":` (릴레이 측 {count}개)`,"panel.shell.configSaved":`설정을 저장했습니다.`,"panel.shell.lanSaved":`LAN 설정을 저장했습니다.`,"panel.shell.preferredAddress":`휴대폰이 {address}을(를) 우선 사용합니다.`,"panel.shell.preferredAuto":`네트워크 인터페이스 순서 자동 선택으로 되돌렸습니다.`,"panel.shell.unknownVersion":`알 수 없는 버전`,"panel.shell.title":`모바일`,"panel.shell.subtitle":`이 컴퓨터의 DSH에 휴대폰을 연결`,"panel.shell.statusFailed":`플러그인 상태를 읽을 수 없습니다`,"panel.shell.readingStatus":`상태를 읽는 중…`,"panel.shell.busy":`처리 중…`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`},de:{"panel.shell.remoteEnabled":`Fernsteuerung aktiviert.`,"panel.shell.remoteDisabled":`Fernsteuerung deaktiviert – dein Handy wird getrennt.`,"panel.shell.reconnecting":`Verbindung wird neu aufgebaut.`,"panel.shell.sidecarRestarted":`Sidecar-Prozess neu gestartet.`,"panel.shell.revokeConfirm":`Alle Geräteautorisierungen widerrufen? Jedes Handy muss neu gekoppelt werden, das lässt sich nicht rückgängig machen.`,"panel.shell.revoked":`{count} Autorisierung(en) widerrufen`,"panel.shell.revokedRelay":` ({count} auf dem Relay)`,"panel.shell.configSaved":`Konfiguration gespeichert.`,"panel.shell.lanSaved":`LAN-Einstellungen gespeichert.`,"panel.shell.preferredAddress":`Dein Handy bevorzugt {address}.`,"panel.shell.preferredAuto":`Wieder automatische Reihenfolge nach Netzwerkschnittstelle.`,"panel.shell.unknownVersion":`Unbekannte Version`,"panel.shell.title":`Mobil`,"panel.shell.subtitle":`Verbinde dein Handy mit DSH auf diesem Computer`,"panel.shell.statusFailed":`Plugin-Status nicht lesbar`,"panel.shell.readingStatus":`Status wird gelesen…`,"panel.shell.busy":`Wird verarbeitet…`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt koppeln.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`},es:{"panel.shell.remoteEnabled":`Control remoto activado.`,"panel.shell.remoteDisabled":`Control remoto desactivado: tu teléfono se desconectará.`,"panel.shell.reconnecting":`Reconectando.`,"panel.shell.sidecarRestarted":`Proceso sidecar reiniciado.`,"panel.shell.revokeConfirm":`¿Revocar todas las autorizaciones de dispositivos? Todos los teléfonos deberán vincularse de nuevo y esto no se puede deshacer.`,"panel.shell.revoked":`{count} autorización(es) revocada(s)`,"panel.shell.revokedRelay":` ({count} en el retransmisor)`,"panel.shell.configSaved":`Configuración guardada.`,"panel.shell.lanSaved":`Ajustes de LAN guardados.`,"panel.shell.preferredAddress":`Tu teléfono preferirá {address}.`,"panel.shell.preferredAuto":`De vuelta al orden automático por interfaz de red.`,"panel.shell.unknownVersion":`Versión desconocida`,"panel.shell.title":`Móvil`,"panel.shell.subtitle":`Conecta tu teléfono con DSH en este ordenador`,"panel.shell.statusFailed":`No se pudo leer el estado del complemento`,"panel.shell.readingStatus":`Leyendo el estado…`,"panel.shell.busy":`Procesando…`,"panel.shell.deviceAllowed":`Los dispositivos nuevos ya pueden vincularse.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`},fr:{"panel.shell.remoteEnabled":`Contrôle à distance activé.`,"panel.shell.remoteDisabled":`Contrôle à distance désactivé : ton téléphone va se déconnecter.`,"panel.shell.reconnecting":`Reconnexion en cours.`,"panel.shell.sidecarRestarted":`Processus sidecar redémarré.`,"panel.shell.revokeConfirm":`Révoquer toutes les autorisations d'appareil ? Chaque téléphone devra être appairé à nouveau, et c'est irréversible.`,"panel.shell.revoked":`{count} autorisation(s) révoquée(s)`,"panel.shell.revokedRelay":` ({count} côté relais)`,"panel.shell.configSaved":`Configuration enregistrée.`,"panel.shell.lanSaved":`Réglages réseau local enregistrés.`,"panel.shell.preferredAddress":`Ton téléphone privilégiera {address}.`,"panel.shell.preferredAuto":`Retour à l'ordre automatique par interface réseau.`,"panel.shell.unknownVersion":`Version inconnue`,"panel.shell.title":`Mobile`,"panel.shell.subtitle":`Connecte ton téléphone à DSH sur cet ordinateur`,"panel.shell.statusFailed":`Impossible de lire l'état du greffon`,"panel.shell.readingStatus":`Lecture de l'état…`,"panel.shell.busy":`En cours…`,"panel.shell.deviceAllowed":`Les nouveaux appareils peuvent s'appairer.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`},pt:{"panel.shell.remoteEnabled":`Controle remoto ativado.`,"panel.shell.remoteDisabled":`Controle remoto desativado — o celular vai se desconectar.`,"panel.shell.reconnecting":`Reconectando.`,"panel.shell.sidecarRestarted":`Processo sidecar reiniciado.`,"panel.shell.revokeConfirm":`Revogar todas as autorizações de dispositivos? Todos os celulares precisarão ser emparelhados de novo, e isso não pode ser desfeito.`,"panel.shell.revoked":`{count} autorização(ões) revogada(s)`,"panel.shell.revokedRelay":` ({count} no relay)`,"panel.shell.configSaved":`Configuração salva.`,"panel.shell.lanSaved":`Configurações de rede local salvas.`,"panel.shell.preferredAddress":`O celular vai preferir {address}.`,"panel.shell.preferredAuto":`De volta à ordem automática por interface de rede.`,"panel.shell.unknownVersion":`Versão desconhecida`,"panel.shell.title":`Celular`,"panel.shell.subtitle":`Conecte o celular ao DSH neste computador`,"panel.shell.statusFailed":`Não foi possível ler o status do plugin`,"panel.shell.readingStatus":`Lendo o status…`,"panel.shell.busy":`Processando…`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`},ru:{"panel.shell.remoteEnabled":`Удалённое управление включено.`,"panel.shell.remoteDisabled":`Удалённое управление отключено — телефон отключится.`,"panel.shell.reconnecting":`Переподключение.`,"panel.shell.sidecarRestarted":`Процесс sidecar перезапущен.`,"panel.shell.revokeConfirm":`Отозвать все разрешения устройств? Каждому телефону придётся пройти сопряжение заново, отменить это нельзя.`,"panel.shell.revoked":`Отозвано авторизаций: {count}`,"panel.shell.revokedRelay":` ({count} на ретрансляторе)`,"panel.shell.configSaved":`Конфигурация сохранена.`,"panel.shell.lanSaved":`Настройки локальной сети сохранены.`,"panel.shell.preferredAddress":`Телефон будет использовать {address}.`,"panel.shell.preferredAuto":`Снова автоматический выбор по порядку интерфейсов.`,"panel.shell.unknownVersion":`Неизвестная версия`,"panel.shell.title":`Мобильный`,"panel.shell.subtitle":`Подключи телефон к DSH на этом компьютере`,"panel.shell.statusFailed":`Не удалось прочитать состояние плагина`,"panel.shell.readingStatus":`Чтение состояния…`,"panel.shell.busy":`Обработка…`,"panel.shell.deviceAllowed":`Новые устройства теперь могут пройти сопряжение.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как прежде.`}},{"zh-Hans":{"panel.connection.remoteControl":`远程控制`,"panel.connection.deviceName":`设备名`,"panel.connection.instanceId":`实例 ID`,"panel.connection.platform":`平台`,"panel.connection.relayUrl":`中转地址`,"panel.connection.tunnel":`中转隧道`,"panel.connection.lan":`局域网直连`,"panel.connection.sidecar":`旁挂进程`,"panel.connection.sidecarRestarts":`已重启 {count} 次`,"panel.connection.mirror":`会话镜像`,"panel.connection.mirrorOk":`推送正常`,"panel.connection.mirrorOff":`未推送`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.connection.relayNeedsSecretBody":`中转服务器开了准入,当前连接被拒绝。这台中转需要注册密钥,而面板已经不再提供填写入口 —— 如果是自己搭的中转,把它改成开放模式,或按部署文档在宿主侧配置。`,"panel.connection.relayRejectedBody":`中转开了实例白名单,而上面的实例 ID 不在名单里。把这个实例 ID 交给中转的部署者,让他加进 instances.json。`},"zh-Hant":{"panel.connection.remoteControl":`遠端控制`,"panel.connection.deviceName":`裝置名稱`,"panel.connection.instanceId":`實例 ID`,"panel.connection.platform":`平台`,"panel.connection.relayUrl":`中轉位址`,"panel.connection.tunnel":`中轉通道`,"panel.connection.lan":`區域網路直連`,"panel.connection.sidecar":`旁掛程序`,"panel.connection.sidecarRestarts":`已重新啟動 {count} 次`,"panel.connection.mirror":`會話鏡像`,"panel.connection.mirrorOk":`推送正常`,"panel.connection.mirrorOff":`未推送`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.connection.relayNeedsSecretBody":`中轉伺服器開了准入,目前連線被拒絕。這台中轉需要註冊金鑰,而面板已經不再提供填寫入口 —— 如果是自己架設的中轉,請改成開放模式,或依部署文件在宿主端設定。`,"panel.connection.relayRejectedBody":`中轉開了執行個體白名單,而上面的執行個體 ID 不在名單裡。把這個執行個體 ID 交給中轉的部署者,請他加進 instances.json。`},en:{"panel.connection.remoteControl":`Remote control`,"panel.connection.deviceName":`Device name`,"panel.connection.instanceId":`Instance ID`,"panel.connection.platform":`Platform`,"panel.connection.relayUrl":`Relay address`,"panel.connection.tunnel":`Relay tunnel`,"panel.connection.lan":`LAN direct`,"panel.connection.sidecar":`Sidecar process`,"panel.connection.sidecarRestarts":`restarted {count} time(s)`,"panel.connection.mirror":`Session mirror`,"panel.connection.mirrorOk":`Pushing`,"panel.connection.mirrorOff":`Not pushing`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.connection.relayNeedsSecretBody":`The relay requires admission, so this connection is refused. It needs a registration secret, and the panel no longer has a field for it — if you run this relay yourself, switch it to open mode or configure it on the host as described in the deployment docs.`,"panel.connection.relayRejectedBody":`The relay has an instance allowlist and the instance ID above is not on it. Hand that ID to whoever deployed the relay so they can add it to instances.json.`},ja:{"panel.connection.remoteControl":`リモート操作`,"panel.connection.deviceName":`デバイス名`,"panel.connection.instanceId":`インスタンス ID`,"panel.connection.platform":`プラットフォーム`,"panel.connection.relayUrl":`リレーのアドレス`,"panel.connection.tunnel":`リレートンネル`,"panel.connection.lan":`LAN 直結`,"panel.connection.sidecar":`サイドカープロセス`,"panel.connection.sidecarRestarts":`{count} 回再起動しました`,"panel.connection.mirror":`セッションのミラー`,"panel.connection.mirrorOk":`送信中`,"panel.connection.mirrorOff":`送信していません`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.connection.relayNeedsSecretBody":`リレーが接続許可を有効にしているため、この接続は拒否されました。このリレーは登録シークレットを必要としますが、パネルには入力欄がなくなりました。自分で運用しているリレーなら開放モードに変更するか、配備ドキュメントに従ってホスト側で設定してください。`,"panel.connection.relayRejectedBody":`リレーにはインスタンスの許可リストがあり、上のインスタンス ID はそこに入っていません。この ID をリレーの配備者に伝え、instances.json に追加してもらってください。`},ko:{"panel.connection.remoteControl":`원격 제어`,"panel.connection.deviceName":`기기 이름`,"panel.connection.instanceId":`인스턴스 ID`,"panel.connection.platform":`플랫폼`,"panel.connection.relayUrl":`릴레이 주소`,"panel.connection.tunnel":`릴레이 터널`,"panel.connection.lan":`LAN 직접 연결`,"panel.connection.sidecar":`사이드카 프로세스`,"panel.connection.sidecarRestarts":`{count}회 재시작됨`,"panel.connection.mirror":`세션 미러`,"panel.connection.mirrorOk":`전송 중`,"panel.connection.mirrorOff":`전송 안 함`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.connection.relayNeedsSecretBody":`릴레이에서 승인 모드를 켜 두어 현재 연결이 거부되었습니다. 이 릴레이는 등록 시크릿이 필요하지만 패널에는 더 이상 입력란이 없습니다. 직접 운영하는 릴레이라면 개방 모드로 바꾸거나 배포 문서대로 호스트에서 설정하세요.`,"panel.connection.relayRejectedBody":`릴레이에 인스턴스 허용 목록이 있는데 위의 인스턴스 ID가 목록에 없습니다. 이 ID를 릴레이 배포자에게 전달해 instances.json에 추가하도록 하세요.`},de:{"panel.connection.remoteControl":`Fernsteuerung`,"panel.connection.deviceName":`Gerätename`,"panel.connection.instanceId":`Instanz-ID`,"panel.connection.platform":`Plattform`,"panel.connection.relayUrl":`Relay-Adresse`,"panel.connection.tunnel":`Relay-Tunnel`,"panel.connection.lan":`LAN-Direktverbindung`,"panel.connection.sidecar":`Sidecar-Prozess`,"panel.connection.sidecarRestarts":`{count}-Mal neu gestartet`,"panel.connection.mirror":`Sitzungsspiegelung`,"panel.connection.mirrorOk":`Wird gesendet`,"panel.connection.mirrorOff":`Wird nicht gesendet`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Das Relay lehnt dieses Gerät ab`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.connection.relayNeedsSecretBody":`Das Relay verlangt eine Freigabe, deshalb wird diese Verbindung abgelehnt. Es braucht ein Registrierungsgeheimnis, und das Panel bietet dafür keinen Eingabeort mehr — wenn du dieses Relay selbst betreibst, stelle es auf offenen Modus um oder konfiguriere es wie in der Deployment-Doku beschrieben auf dem Host.`,"panel.connection.relayRejectedBody":`Das Relay nutzt eine Instanz-Whitelist, und die Instanz-ID oben steht nicht darauf. Gib diese ID der Person, die das Relay betreibt, damit sie sie in instances.json einträgt.`},es:{"panel.connection.remoteControl":`Control remoto`,"panel.connection.deviceName":`Nombre del dispositivo`,"panel.connection.instanceId":`ID de instancia`,"panel.connection.platform":`Plataforma`,"panel.connection.relayUrl":`Dirección del retransmisor`,"panel.connection.tunnel":`Túnel del retransmisor`,"panel.connection.lan":`Conexión directa LAN`,"panel.connection.sidecar":`Proceso sidecar`,"panel.connection.sidecarRestarts":`Reiniciado {count} veces`,"panel.connection.mirror":`Espejo de sesión`,"panel.connection.mirrorOk":`Enviando`,"panel.connection.mirrorOff":`Sin enviar`,"panel.connection.state":`Estado de la conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(puerto preferido ocupado, se cambió solo)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`La conexión directa LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.connection.relayNeedsSecretBody":`El retransmisor exige admisión, así que esta conexión se rechaza. Necesita una clave de registro y el panel ya no ofrece dónde introducirla: si este retransmisor lo gestionas tú, ponlo en modo abierto o configúralo en el host como indica la documentación de despliegue.`,"panel.connection.relayRejectedBody":`El retransmisor usa una lista de instancias permitidas y el ID de instancia de arriba no está en ella. Pasa ese ID a quien despliegue el retransmisor para que lo añada a instances.json.`},fr:{"panel.connection.remoteControl":`Contrôle à distance`,"panel.connection.deviceName":`Nom de l'appareil`,"panel.connection.instanceId":`ID d'instance`,"panel.connection.platform":`Plateforme`,"panel.connection.relayUrl":`Adresse du relais`,"panel.connection.tunnel":`Tunnel du relais`,"panel.connection.lan":`Connexion directe LAN`,"panel.connection.sidecar":`Processus sidecar`,"panel.connection.sidecarRestarts":`Redémarré {count} fois`,"panel.connection.mirror":`Miroir de session`,"panel.connection.mirrorOk":`Envoi en cours`,"panel.connection.mirrorOff":`Aucun envoi`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Le relais refuse cet appareil`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`La connexion directe LAN est désactivée`,"panel.connection.lanPort":`Port LAN`,"panel.connection.relayNeedsSecretBody":`Le relais exige une autorisation : cette connexion est refusée. Il nécessite un secret d'enregistrement et le panneau ne propose plus de champ pour le saisir — si vous exploitez ce relais vous-même, passez-le en mode ouvert ou configurez-le côté hôte comme décrit dans la documentation de déploiement.`,"panel.connection.relayRejectedBody":`Le relais applique une liste d'instances autorisées et l'ID d'instance ci-dessus n'y figure pas. Transmets cet ID à qui déploie le relais pour qu'il l'ajoute à instances.json.`},pt:{"panel.connection.remoteControl":`Controle remoto`,"panel.connection.deviceName":`Nome do dispositivo`,"panel.connection.instanceId":`ID da instância`,"panel.connection.platform":`Plataforma`,"panel.connection.relayUrl":`Endereço do relay`,"panel.connection.tunnel":`Túnel do relay`,"panel.connection.lan":`Conexão direta LAN`,"panel.connection.sidecar":`Processo sidecar`,"panel.connection.sidecarRestarts":`Reiniciado {count} vezes`,"panel.connection.mirror":`Espelho de sessão`,"panel.connection.mirrorOk":`Enviando`,"panel.connection.mirrorOff":`Sem envio`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay rejeita este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(porta preferida ocupada, trocada automaticamente)`,"panel.pairing.sidecarRestartFailed":`Falha no último reinício do sidecar`,"panel.onboarding.lanOff":`A conexão direta LAN está desativada`,"panel.connection.lanPort":`Porta LAN`,"panel.connection.relayNeedsSecretBody":`O relay exige admissão, então esta conexão é recusada. Ele precisa de uma chave de registro e o painel não oferece mais onde informá-la — se você mesmo opera esse relay, mude-o para o modo aberto ou configure-o no host conforme a documentação de implantação.`,"panel.connection.relayRejectedBody":`O relay usa uma lista de instâncias permitidas e o ID da instância acima não está nela. Passe esse ID a quem implantou o relay para adicioná-lo a instances.json.`},ru:{"panel.connection.remoteControl":`Удалённое управление`,"panel.connection.deviceName":`Имя устройства`,"panel.connection.instanceId":`ID экземпляра`,"panel.connection.platform":`Платформа`,"panel.connection.relayUrl":`Адрес ретранслятора`,"panel.connection.tunnel":`Туннель ретранслятора`,"panel.connection.lan":`Прямое подключение по локальной сети`,"panel.connection.sidecar":`Процесс sidecar`,"panel.connection.sidecarRestarts":`Перезапущен {count} раз`,"panel.connection.mirror":`Зеркалирование сеанса`,"panel.connection.mirrorOk":`Отправляется`,"panel.connection.mirrorOff":`Не отправляется`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, переключено автоматически)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети отключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.connection.relayNeedsSecretBody":`Ретранслятор требует допуска, поэтому это подключение отклонено. Ему нужен ключ регистрации, а в панели больше нет поля для его ввода — если вы сами разворачиваете этот ретранслятор, включите открытый режим или настройте его на хосте, как описано в документации по развёртыванию.`,"panel.connection.relayRejectedBody":`Ретранслятор использует список разрешённых экземпляров, а ID экземпляра выше в нём нет. Передайте этот ID тому, кто развернул ретранслятор, чтобы он добавил его в instances.json.`}},{"zh-Hans":{"panel.pairing.copied":`已复制`,"panel.pairing.noQr":`还没取到二维码`,"panel.pairing.qr":`二维码`,"panel.pairing.policy":`配对策略`,"panel.pairing.allowPairing":`允许新设备配对`,"panel.pairing.port":`局域网端口`,"panel.pairing.phoneAddress":`本地识别地址`,"panel.pairing.hidden":`已隐藏`,"panel.pairing.noAddress":`还没取到地址`,"panel.pairing.cardTitle":`配对与二维码`,"panel.pairing.qrFailed":`拿不到二维码`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.portTitle":`修改局域网端口`,"panel.pairing.portHint":`1024–65535 之间的整数;首选端口被占用时,宿主会自动换一个。`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.pairing.qrZoom":`看大图`,"panel.pairing.openConfig":`网络配置`,"panel.pairing.reconnect":`重新连接`,"panel.pairing.checkNetwork":`检查网络`,"panel.pairing.revokeAll":`吊销全部设备授权`},"zh-Hant":{"panel.pairing.copied":`已複製`,"panel.pairing.noQr":`還沒取得 QR 碼`,"panel.pairing.qr":`QR 碼`,"panel.pairing.policy":`配對策略`,"panel.pairing.allowPairing":`允許新裝置配對`,"panel.pairing.port":`區域網路連接埠`,"panel.pairing.phoneAddress":`本機識別位址`,"panel.pairing.hidden":`已隱藏`,"panel.pairing.noAddress":`還沒取得位址`,"panel.pairing.cardTitle":`配對與 QR 碼`,"panel.pairing.qrFailed":`拿不到 QR 碼`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.portTitle":`修改區域網路連接埠`,"panel.pairing.portHint":`1024–65535 之間的整數;首選連接埠被佔用時,宿主會自動換一個。`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.pairing.qrZoom":`看大圖`,"panel.pairing.openConfig":`網路設定`,"panel.pairing.reconnect":`重新連線`,"panel.pairing.checkNetwork":`檢查網路`,"panel.pairing.revokeAll":`撤銷全部裝置授權`},en:{"panel.pairing.copied":`Copied`,"panel.pairing.noQr":`QR code not loaded yet`,"panel.pairing.qr":`QR code`,"panel.pairing.policy":`Pairing policy`,"panel.pairing.allowPairing":`Allow new devices to pair`,"panel.pairing.port":`LAN port`,"panel.pairing.phoneAddress":`Local address`,"panel.pairing.hidden":`Hidden`,"panel.pairing.noAddress":`Address not available yet`,"panel.pairing.cardTitle":`Pairing & QR code`,"panel.pairing.qrFailed":`Could not get the QR code`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.portTitle":`Change the LAN port`,"panel.pairing.portHint":`An integer from 1024 to 65535; if that port is taken, the host picks another one automatically.`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.pairing.qrZoom":`Enlarge QR`,"panel.pairing.openConfig":`Network settings`,"panel.pairing.reconnect":`Reconnect`,"panel.pairing.checkNetwork":`Check network`,"panel.pairing.revokeAll":`Revoke all device grants`},ja:{"panel.pairing.copied":`コピーしました`,"panel.pairing.noQr":`QR コードをまだ取得していません`,"panel.pairing.qr":`QR コード`,"panel.pairing.policy":`ペアリングポリシー`,"panel.pairing.allowPairing":`新しいデバイスのペアリングを許可`,"panel.pairing.port":`LAN ポート`,"panel.pairing.phoneAddress":`ローカルアドレス`,"panel.pairing.hidden":`非表示`,"panel.pairing.noAddress":`アドレスをまだ取得していません`,"panel.pairing.cardTitle":`ペアリングと QR コード`,"panel.pairing.qrFailed":`QR コードを取得できません`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.portTitle":`LAN ポートを変更`,"panel.pairing.portHint":`1024〜65535 の整数。使用中なら宿主が自動で別のポートに切り替えます。`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.pairing.qrZoom":`拡大表示`,"panel.pairing.openConfig":`ネットワーク設定`,"panel.pairing.reconnect":`再接続`,"panel.pairing.checkNetwork":`ネットワークを確認`,"panel.pairing.revokeAll":`すべてのデバイス認証を取り消す`},ko:{"panel.pairing.copied":`복사됨`,"panel.pairing.noQr":`QR 코드를 아직 가져오지 못했습니다`,"panel.pairing.qr":`QR 코드`,"panel.pairing.policy":`페어링 정책`,"panel.pairing.allowPairing":`새 기기 페어링 허용`,"panel.pairing.port":`LAN 포트`,"panel.pairing.phoneAddress":`로컬 주소`,"panel.pairing.hidden":`숨김`,"panel.pairing.noAddress":`주소를 아직 가져오지 못했습니다`,"panel.pairing.cardTitle":`페어링 및 QR 코드`,"panel.pairing.qrFailed":`QR 코드를 가져올 수 없습니다`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.portTitle":`LAN 포트 변경`,"panel.pairing.portHint":`1024~65535 사이의 정수. 사용 중이면 호스트가 자동으로 다른 포트를 씁니다.`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.pairing.qrZoom":`크게 보기`,"panel.pairing.openConfig":`네트워크 설정`,"panel.pairing.reconnect":`다시 연결`,"panel.pairing.checkNetwork":`네트워크 확인`,"panel.pairing.revokeAll":`모든 기기 권한 취소`},de:{"panel.pairing.copied":`Kopiert`,"panel.pairing.noQr":`Noch kein QR-Code`,"panel.pairing.qr":`QR-Code`,"panel.pairing.policy":`Kopplungsrichtlinie`,"panel.pairing.allowPairing":`Neue Geräte koppeln lassen`,"panel.pairing.port":`LAN-Port`,"panel.pairing.phoneAddress":`Lokale Adresse`,"panel.pairing.hidden":`Ausgeblendet`,"panel.pairing.noAddress":`Noch keine Adresse`,"panel.pairing.cardTitle":`Koppeln & QR-Code`,"panel.pairing.qrFailed":`QR-Code nicht verfügbar`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.portTitle":`LAN-Port ändern`,"panel.pairing.portHint":`Ganzzahl zwischen 1024 und 65535; ist der Port belegt, nimmt der Host automatisch einen anderen.`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung aus`,"panel.connection.lanPort":`LAN-Port`,"panel.pairing.qrZoom":`QR-Code vergrößern`,"panel.pairing.openConfig":`Netzwerkeinstellungen`,"panel.pairing.reconnect":`Neu verbinden`,"panel.pairing.checkNetwork":`Netzwerk prüfen`,"panel.pairing.revokeAll":`Alle Geräteberechtigungen widerrufen`},es:{"panel.pairing.copied":`Copiado`,"panel.pairing.noQr":`Aún no hay código QR`,"panel.pairing.qr":`Código QR`,"panel.pairing.policy":`Política de vinculación`,"panel.pairing.allowPairing":`Permitir emparejar dispositivos nuevos`,"panel.pairing.port":`Puerto LAN`,"panel.pairing.phoneAddress":`Dirección local`,"panel.pairing.hidden":`Oculto`,"panel.pairing.noAddress":`Aún no hay dirección`,"panel.pairing.cardTitle":`Vinculación y código QR`,"panel.pairing.qrFailed":`Código QR no disponible`,"panel.connection.state":`Estado de la conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido está ocupado; se cambió solo)`,"panel.pairing.portTitle":`Cambiar el puerto de LAN`,"panel.pairing.portHint":`Un entero entre 1024 y 65535; si está ocupado, el host elige otro automáticamente.`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`Conexión directa LAN desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.pairing.qrZoom":`Ampliar el código QR`,"panel.pairing.openConfig":`Ajustes de red`,"panel.pairing.reconnect":`Reconectar`,"panel.pairing.checkNetwork":`Comprobar la red`,"panel.pairing.revokeAll":`Revocar todos los permisos de dispositivos`},fr:{"panel.pairing.copied":`Copié`,"panel.pairing.noQr":`Pas encore de code QR`,"panel.pairing.qr":`Code QR`,"panel.pairing.policy":`Politique d'appairage`,"panel.pairing.allowPairing":`Autoriser l'appairage de nouveaux appareils`,"panel.pairing.port":`Port réseau local`,"panel.pairing.phoneAddress":`Adresse locale`,"panel.pairing.hidden":`Masqué`,"panel.pairing.noAddress":`Pas encore d'adresse`,"panel.pairing.cardTitle":`Appairage et code QR`,"panel.pairing.qrFailed":`Code QR indisponible`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`Code QR masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.portTitle":`Modifier le port LAN`,"panel.pairing.portHint":`Un entier entre 1024 et 65535 ; si le port est occupé, l’hôte en choisit un autre automatiquement.`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`Connexion directe par réseau local désactivée`,"panel.connection.lanPort":`Port réseau local`,"panel.pairing.qrZoom":`Agrandir le code QR`,"panel.pairing.openConfig":`Réglages réseau`,"panel.pairing.reconnect":`Reconnecter`,"panel.pairing.checkNetwork":`Vérifier le réseau`,"panel.pairing.revokeAll":`Révoquer toutes les autorisations d'appareil`},pt:{"panel.pairing.copied":`Copiado`,"panel.pairing.noQr":`Ainda sem código QR`,"panel.pairing.qr":`Código QR`,"panel.pairing.policy":`Política de emparelhamento`,"panel.pairing.allowPairing":`Permitir emparelhar novos dispositivos`,"panel.pairing.port":`Porta da rede local`,"panel.pairing.phoneAddress":`Endereço local`,"panel.pairing.hidden":`Oculto`,"panel.pairing.noAddress":`Ainda sem endereço`,"panel.pairing.cardTitle":`Emparelhamento e código QR`,"panel.pairing.qrFailed":`Código QR indisponível`,"panel.connection.state":`Status da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay recusa este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(porta preferida ocupada; trocada automaticamente)`,"panel.pairing.portTitle":`Alterar a porta da LAN`,"panel.pairing.portHint":`Um inteiro entre 1024 e 65535; se estiver ocupado, o host escolhe outro automaticamente.`,"panel.pairing.sidecarRestartFailed":`Falhou o último reinício do sidecar`,"panel.onboarding.lanOff":`Conexão direta LAN desativada`,"panel.connection.lanPort":`Porta da rede local`,"panel.pairing.qrZoom":`Ampliar o código QR`,"panel.pairing.openConfig":`Configurações de rede`,"panel.pairing.reconnect":`Reconectar`,"panel.pairing.checkNetwork":`Verificar a rede`,"panel.pairing.revokeAll":`Revogar todas as autorizações de dispositivos`},ru:{"panel.pairing.copied":`Скопировано`,"panel.pairing.noQr":`QR-код ещё не получен`,"panel.pairing.qr":`QR-код`,"panel.pairing.policy":`Политика сопряжения`,"panel.pairing.allowPairing":`Разрешить сопряжение новых устройств`,"panel.pairing.port":`Порт локальной сети`,"panel.pairing.phoneAddress":`Локальный адрес`,"panel.pairing.hidden":`Скрыто`,"panel.pairing.noAddress":`Адрес ещё не получен`,"panel.pairing.cardTitle":`Сопряжение и QR-код`,"panel.pairing.qrFailed":`QR-код недоступен`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, переключено автоматически)`,"panel.pairing.portTitle":`Изменить порт локальной сети`,"panel.pairing.portHint":`Целое число от 1024 до 65535; если порт занят, хост сам выберет другой.`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.pairing.qrZoom":`Увеличить QR-код`,"panel.pairing.openConfig":`Настройки сети`,"panel.pairing.reconnect":`Переподключиться`,"panel.pairing.checkNetwork":`Проверить сеть`,"panel.pairing.revokeAll":`Отозвать все разрешения устройств`}},{"zh-Hans":{"panel.address.lan":`局域网地址`,"panel.address.lanPlaceholder":`例如 192.168.1.20`,"panel.address.lanUnknown":`这个地址不在本机检测到的网络地址里,手机拨不到它。`,"panel.address.ipv6":`IPv6 直连`,"panel.address.public":`公网地址`,"panel.address.empty":`还没取到地址`,"panel.address.ipv6Hint":`(手机按实测择优)`,"panel.address.publicHint":`(不在二维码里)`,"panel.address.hint":`手机先试选中的那条,试不通会自动换下一条。`,"panel.address.pick":`手机优先用这条`,"panel.address.direct":`直连地址`,"panel.address.directPlaceholder":`https://你的穿透域名:8443`,"panel.address.ipv6Url":`IPv6 直连地址`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`内网穿透地址`,"panel.relay.selected":`已选`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.address.ipv6Pick":`{kind}(手机按实测择优)`},"zh-Hant":{"panel.address.lan":`區域網路位址`,"panel.address.lanPlaceholder":`例如 192.168.1.20`,"panel.address.lanUnknown":`這個位址不在本機偵測到的網路位址裡,手機撥不到它。`,"panel.address.ipv6":`IPv6 直連`,"panel.address.public":`公網位址`,"panel.address.empty":`還沒取得位址`,"panel.address.ipv6Hint":`(手機依實測擇優)`,"panel.address.publicHint":`(不在 QR 碼裡)`,"panel.address.hint":`手機先試選中的那條,試不通會自動換下一條。`,"panel.address.pick":`手機優先使用這條`,"panel.address.direct":`直連位址`,"panel.address.directPlaceholder":`https://你的穿透網域:8443`,"panel.address.ipv6Url":`IPv6 直連位址`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`內網穿透位址`,"panel.relay.selected":`已選`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.address.ipv6Pick":`{kind}(手機依實測擇優)`},en:{"panel.address.lan":`LAN address`,"panel.address.lanPlaceholder":`e.g. 192.168.1.20`,"panel.address.lanUnknown":`That address is not one of this machine’s detected addresses, so the phone cannot reach it.`,"panel.address.ipv6":`IPv6 direct`,"panel.address.public":`Public address`,"panel.address.empty":`Address not available yet`,"panel.address.ipv6Hint":` (phone picks the fastest)`,"panel.address.publicHint":` (not in the QR code)`,"panel.address.hint":`Your phone tries the selected one first and falls back automatically.`,"panel.address.pick":`Prefer this one on the phone`,"panel.address.direct":`Direct address`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 direct address`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Tunnel address`,"panel.relay.selected":`Selected`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.address.ipv6Pick":`{kind} (the phone picks whichever is faster)`},ja:{"panel.address.lan":`LAN アドレス`,"panel.address.lanPlaceholder":`例: 192.168.1.20`,"panel.address.lanUnknown":`このアドレスはこのマシンで検出されたものではないため、スマホから到達できません。`,"panel.address.ipv6":`IPv6 直結`,"panel.address.public":`パブリックアドレス`,"panel.address.empty":`アドレスをまだ取得していません`,"panel.address.ipv6Hint":`(スマートフォンが実測で選択)`,"panel.address.publicHint":`(QR コードには入りません)`,"panel.address.hint":`スマートフォンは選択したものを先に試し、通らなければ自動で次に切り替えます。`,"panel.address.pick":`スマートフォンで優先する`,"panel.address.direct":`直接接続アドレス`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 直接接続アドレス`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`トンネルのアドレス`,"panel.relay.selected":`選択済み`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.address.ipv6Pick":`{kind}(実測で速い方をスマホが選びます)`},ko:{"panel.address.lan":`LAN 주소`,"panel.address.lanPlaceholder":`예: 192.168.1.20`,"panel.address.lanUnknown":`이 주소는 이 기기에서 감지된 주소가 아니어서 휴대폰이 연결할 수 없습니다.`,"panel.address.ipv6":`IPv6 직접 연결`,"panel.address.public":`공인 주소`,"panel.address.empty":`주소를 아직 가져오지 못했습니다`,"panel.address.ipv6Hint":` (휴대폰이 실측으로 선택)`,"panel.address.publicHint":` (QR 코드에 없음)`,"panel.address.hint":`휴대폰은 선택한 주소를 먼저 시도하고, 안 되면 자동으로 다음으로 넘어갑니다.`,"panel.address.pick":`휴대폰에서 우선 사용`,"panel.address.direct":`직접 연결 주소`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 직접 연결 주소`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`터널 주소`,"panel.relay.selected":`선택됨`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.address.ipv6Pick":`{kind} (휴대폰이 실측으로 더 빠른 쪽을 고릅니다)`},de:{"panel.address.lan":`LAN-Adresse`,"panel.address.lanPlaceholder":`z. B. 192.168.1.20`,"panel.address.lanUnknown":`Diese Adresse gehört nicht zu den erkannten Adressen dieses Rechners – das Handy erreicht sie nicht.`,"panel.address.ipv6":`IPv6 direkt`,"panel.address.public":`Öffentliche Adresse`,"panel.address.empty":`Adresse noch nicht verfügbar`,"panel.address.ipv6Hint":`(Handy wählt das schnellste)`,"panel.address.publicHint":`(nicht im QR-Code)`,"panel.address.hint":`Dein Handy versucht zuerst die gewählte und wechselt automatisch zur nächsten.`,"panel.address.pick":`Auf dem Handy bevorzugen`,"panel.address.direct":`Direktadresse`,"panel.address.directPlaceholder":`https://dein-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6-Direktadresse`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Tunnel-Adresse`,"panel.relay.selected":`Ausgewählt`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.address.ipv6Pick":`{kind} (Handy wählt das schnellste)`},es:{"panel.address.lan":`Dirección LAN`,"panel.address.lanPlaceholder":`p. ej., 192.168.1.20`,"panel.address.lanUnknown":`Esa dirección no está entre las detectadas en esta máquina, así que el teléfono no puede alcanzarla.`,"panel.address.ipv6":`IPv6 directa`,"panel.address.public":`Dirección pública`,"panel.address.empty":`Dirección aún no disponible`,"panel.address.ipv6Hint":`(el teléfono elige el más rápido)`,"panel.address.publicHint":`(no está en el código QR)`,"panel.address.hint":`Tu teléfono prueba primero la elegida y cambia solo a la siguiente.`,"panel.address.pick":`Preferir en el teléfono`,"panel.address.direct":`Dirección directa`,"panel.address.directPlaceholder":`https://tu-tunel.example.com:8443`,"panel.address.ipv6Url":`Dirección directa IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Dirección de túnel`,"panel.relay.selected":`Seleccionado`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; se cambió solo)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`Conexión directa LAN desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.address.ipv6Pick":`{kind} (el teléfono elige el más rápido)`},fr:{"panel.address.lan":`Adresse réseau local`,"panel.address.lanPlaceholder":`ex. 192.168.1.20`,"panel.address.lanUnknown":`Cette adresse ne fait pas partie de celles détectées sur cette machine : le téléphone ne peut pas l’atteindre.`,"panel.address.ipv6":`IPv6 direct`,"panel.address.public":`Adresse publique`,"panel.address.empty":`Adresse pas encore disponible`,"panel.address.ipv6Hint":`(le téléphone choisit le plus rapide)`,"panel.address.publicHint":`(pas dans le QR code)`,"panel.address.hint":`Ton téléphone essaie d'abord celle qui est sélectionnée et bascule tout seul sur la suivante.`,"panel.address.pick":`Préférer sur le téléphone`,"panel.address.direct":`Adresse directe`,"panel.address.directPlaceholder":`https://ton-tunnel.example.com:8443`,"panel.address.ipv6Url":`Adresse directe IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Adresse tunnel`,"panel.relay.selected":`Sélectionné`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`Connexion directe réseau local désactivée`,"panel.connection.lanPort":`Port du réseau local`,"panel.address.ipv6Pick":`{kind} (le téléphone choisit le plus rapide)`},pt:{"panel.address.lan":`Endereço da rede local`,"panel.address.lanPlaceholder":`ex.: 192.168.1.20`,"panel.address.lanUnknown":`Esse endereço não está entre os detectados nesta máquina, então o telefone não consegue alcançá-lo.`,"panel.address.ipv6":`IPv6 direto`,"panel.address.public":`Endereço público`,"panel.address.empty":`Endereço ainda indisponível`,"panel.address.ipv6Hint":`(o telemóvel escolhe o mais rápido)`,"panel.address.publicHint":`(não está no código QR)`,"panel.address.hint":`O teu telemóvel tenta primeiro a selecionada e passa sozinho para a seguinte.`,"panel.address.pick":`Preferir no telemóvel`,"panel.address.direct":`Endereço direto`,"panel.address.directPlaceholder":`https://o-teu-tunel.example.com:8443`,"panel.address.ipv6Url":`Endereço direto IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Endereço de túnel`,"panel.relay.selected":`Selecionado`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`Este dispositivo é recusado pelo relay`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(a porta preferida estava ocupada; mudou sozinho)`,"panel.pairing.sidecarRestartFailed":`A última reinicialização do sidecar falhou`,"panel.onboarding.lanOff":`Ligação direta à rede local desligada`,"panel.connection.lanPort":`Porta da rede local`,"panel.address.ipv6Pick":`{kind} (o telemóvel escolhe o mais rápido)`},ru:{"panel.address.lan":`Адрес локальной сети`,"panel.address.lanPlaceholder":`например, 192.168.1.20`,"panel.address.lanUnknown":`Этот адрес не входит в обнаруженные на этой машине — телефон до него не дозвонится.`,"panel.address.ipv6":`IPv6 напрямую`,"panel.address.public":`Публичный адрес`,"panel.address.empty":`Адрес пока недоступен`,"panel.address.ipv6Hint":`(телефон выбирает быстрейший)`,"panel.address.publicHint":`(нет в QR-коде)`,"panel.address.hint":`Твой телефон сначала пробует выбранный, а если не выходит, переключается на следующий.`,"panel.address.pick":`Предпочитать на телефоне`,"panel.address.direct":`Адрес прямого подключения`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`Адрес прямого подключения IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Адрес туннеля`,"panel.relay.selected":`Выбрано`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(предпочитаемый порт занят, выбран другой)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.address.ipv6Pick":`{kind} (телефон выбирает быстрейший)`}},{"zh-Hans":{"panel.links.android":`安卓`,"panel.links.apple":`苹果`,"panel.links.distPlatform":`APP 分发平台`,"panel.links.domesticRecommended":`国内下载推荐`,"panel.links.overseasRecommended":`海外下载推荐`,"panel.links.appStore":`正式版,随系统自动更新`,"panel.links.testFlight":`测试版,比商店版先拿到新版本`,"panel.links.publicRelay":`公用中转 1`,"panel.links.wechatQrAlt":`微信群二维码:用微信或企业微信扫码加入`,"panel.links.joinGroup":`加入交流群`,"panel.theme.toDay":`切换到日间模式`,"panel.theme.toNight":`切换到夜间模式`,"panel.net.requestFailed":`请求失败(HTTP {status})`,"panel.net.requestFailedNoStatus":`请求失败`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.download.open":`下载 APP`,"panel.download.title":`下载 AI-HUB`,"panel.relay.clear":`清空(只走局域网直连)`,"panel.relay.saveConfig":`保存配置`,"panel.relay.choosePublicRelay":`选择公用中转`,"panel.net.marketUnreachable":`连不上插件市场:{message}`,"panel.net.marketHttp":`插件市场返回 HTTP {status}`,"panel.net.hostHttp":`宿主返回 HTTP {status}`},"zh-Hant":{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`APP 分發平台`,"panel.links.domesticRecommended":`國內下載推薦`,"panel.links.overseasRecommended":`海外下載推薦`,"panel.links.appStore":`正式版,隨系統自動更新`,"panel.links.testFlight":`測試版,比商店版先拿到新版本`,"panel.links.publicRelay":`公用中轉 1`,"panel.links.wechatQrAlt":`微信群 QR 碼:用微信或企業微信掃碼加入`,"panel.links.joinGroup":`加入交流群`,"panel.theme.toDay":`切換到日間模式`,"panel.theme.toNight":`切換到夜間模式`,"panel.net.requestFailed":`請求失敗(HTTP {status})`,"panel.net.requestFailedNoStatus":`請求失敗`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.download.open":`下載 APP`,"panel.download.title":`下載 AI-HUB`,"panel.relay.clear":`清空(只走區域網路直連)`,"panel.relay.saveConfig":`儲存設定`,"panel.relay.choosePublicRelay":`選擇公用中轉`,"panel.net.marketUnreachable":`連不上外掛市集:{message}`,"panel.net.marketHttp":`外掛市集傳回 HTTP {status}`,"panel.net.hostHttp":`宿主傳回 HTTP {status}`},en:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`App distribution platform`,"panel.links.domesticRecommended":`Recommended in China`,"panel.links.overseasRecommended":`Recommended overseas`,"panel.links.appStore":`Release build, updates with the system`,"panel.links.testFlight":`Beta build, gets new versions before the store`,"panel.links.publicRelay":`Public relay 1`,"panel.links.wechatQrAlt":`WeChat group QR code: scan with WeChat or WeCom`,"panel.links.joinGroup":`Join the group`,"panel.theme.toDay":`Switch to light mode`,"panel.theme.toNight":`Switch to dark mode`,"panel.net.requestFailed":`Request failed (HTTP {status})`,"panel.net.requestFailedNoStatus":`Request failed`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.download.open":`Download app`,"panel.download.title":`Download AI-HUB`,"panel.relay.clear":`Clear (LAN direct only)`,"panel.relay.saveConfig":`Save settings`,"panel.relay.choosePublicRelay":`Choose public relay`,"panel.net.marketUnreachable":`Cannot reach the plugin market: {message}`,"panel.net.marketHttp":`The plugin market returned HTTP {status}`,"panel.net.hostHttp":`The host returned HTTP {status}`},ja:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`アプリ配布プラットフォーム`,"panel.links.domesticRecommended":`中国国内向けの推奨`,"panel.links.overseasRecommended":`海外向けの推奨`,"panel.links.appStore":`正式版。システムと一緒に更新されます`,"panel.links.testFlight":`ベータ版。ストア版より早く新バージョンを取得できます`,"panel.links.publicRelay":`共用リレー 1`,"panel.links.wechatQrAlt":`WeChat グループの QR コード:WeChat または WeCom でスキャン`,"panel.links.joinGroup":`グループに参加`,"panel.theme.toDay":`ライトモードに切り替え`,"panel.theme.toNight":`ダークモードに切り替え`,"panel.net.requestFailed":`リクエストに失敗しました(HTTP {status})`,"panel.net.requestFailedNoStatus":`リクエストに失敗しました`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.download.open":`アプリをダウンロード`,"panel.download.title":`AI-HUB をダウンロード`,"panel.relay.clear":`クリア(LAN 直結のみ)`,"panel.relay.saveConfig":`設定を保存`,"panel.relay.choosePublicRelay":`公用リレーを選ぶ`,"panel.net.marketUnreachable":`プラグインマーケットに接続できません:{message}`,"panel.net.marketHttp":`プラグインマーケットが HTTP {status} を返しました`,"panel.net.hostHttp":`ホストが HTTP {status} を返しました`},ko:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`앱 배포 플랫폼`,"panel.links.domesticRecommended":`중국 내 다운로드 권장`,"panel.links.overseasRecommended":`해외 다운로드 권장`,"panel.links.appStore":`정식 버전, 시스템과 함께 자동 업데이트`,"panel.links.testFlight":`베타 버전, 스토어보다 먼저 새 버전 제공`,"panel.links.publicRelay":`공용 릴레이 1`,"panel.links.wechatQrAlt":`WeChat 그룹 QR 코드: WeChat 또는 WeCom으로 스캔`,"panel.links.joinGroup":`그룹 참여`,"panel.theme.toDay":`라이트 모드로 전환`,"panel.theme.toNight":`다크 모드로 전환`,"panel.net.requestFailed":`요청 실패 (HTTP {status})`,"panel.net.requestFailedNoStatus":`요청 실패`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.download.open":`앱 다운로드`,"panel.download.title":`AI-HUB 다운로드`,"panel.relay.clear":`지우기(LAN 직접 연결만)`,"panel.relay.saveConfig":`설정 저장`,"panel.relay.choosePublicRelay":`공용 릴레이 선택`,"panel.net.marketUnreachable":`플러그인 마켓에 연결할 수 없습니다: {message}`,"panel.net.marketHttp":`플러그인 마켓이 HTTP {status}를 반환했습니다`,"panel.net.hostHttp":`호스트가 HTTP {status}를 반환했습니다`},de:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`App-Vertriebsplattform`,"panel.links.domesticRecommended":`Empfehlung für China`,"panel.links.overseasRecommended":`Empfehlung fürs Ausland`,"panel.links.appStore":`Release-Version, aktualisiert sich mit dem System`,"panel.links.testFlight":`Beta-Version, neue Builds vor dem Store`,"panel.links.publicRelay":`Öffentliches Relay 1`,"panel.links.wechatQrAlt":`WeChat-Gruppen-QR-Code: mit WeChat oder WeCom scannen und beitreten`,"panel.links.joinGroup":`Gruppe beitreten`,"panel.theme.toDay":`Zum hellen Modus wechseln`,"panel.theme.toNight":`Zum dunklen Modus wechseln`,"panel.net.requestFailed":`Anfrage fehlgeschlagen (HTTP {status})`,"panel.net.requestFailedNoStatus":`Anfrage fehlgeschlagen`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.download.open":`App herunterladen`,"panel.download.title":`AI-HUB herunterladen`,"panel.relay.clear":`Leeren (nur LAN direkt)`,"panel.relay.saveConfig":`Einstellungen speichern`,"panel.relay.choosePublicRelay":`Öffentlichen Relay wählen`,"panel.net.marketUnreachable":`Plugin-Markt nicht erreichbar: {message}`,"panel.net.marketHttp":`Plugin-Markt antwortet HTTP {status}`,"panel.net.hostHttp":`Host antwortete HTTP {status}`},es:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plataforma de distribución de apps`,"panel.links.domesticRecommended":`Recomendado en China`,"panel.links.overseasRecommended":`Recomendado en el extranjero`,"panel.links.appStore":`Versión estable, se actualiza con el sistema`,"panel.links.testFlight":`Versión beta, recibe novedades antes que la tienda`,"panel.links.publicRelay":`Retransmisor público 1`,"panel.links.wechatQrAlt":`Código QR del grupo de WeChat: escanea con WeChat o WeCom para unirte`,"panel.links.joinGroup":`Unirse al grupo`,"panel.theme.toDay":`Cambiar al modo claro`,"panel.theme.toNight":`Cambiar al modo oscuro`,"panel.net.requestFailed":`Error en la solicitud (HTTP {status})`,"panel.net.requestFailedNoStatus":`Error en la solicitud`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; cambiado automáticamente)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`La conexión directa por LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.download.open":`Descargar app`,"panel.download.title":`Descargar AI-HUB`,"panel.relay.clear":`Borrar (solo LAN directa)`,"panel.relay.saveConfig":`Guardar ajustes`,"panel.relay.choosePublicRelay":`Elegir relé público`,"panel.net.marketUnreachable":`No se puede conectar con el mercado de complementos: {message}`,"panel.net.marketHttp":`El mercado de complementos devolvió HTTP {status}`,"panel.net.hostHttp":`El host devolvió HTTP {status}`},fr:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plateforme de distribution d'apps`,"panel.links.domesticRecommended":`Recommandé en Chine`,"panel.links.overseasRecommended":`Recommandé à l'étranger`,"panel.links.appStore":`Version stable, mise à jour avec le système`,"panel.links.testFlight":`Version bêta, reçoit les nouveautés avant le store`,"panel.links.publicRelay":`Relais public 1`,"panel.links.wechatQrAlt":`QR code du groupe WeChat : scannez avec WeChat ou WeCom pour rejoindre`,"panel.links.joinGroup":`Rejoindre le groupe`,"panel.theme.toDay":`Passer en mode clair`,"panel.theme.toNight":`Passer en mode sombre`,"panel.net.requestFailed":`Échec de la requête (HTTP {status})`,"panel.net.requestFailedNoStatus":`Échec de la requête`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changé automatiquement)`,"panel.pairing.sidecarRestartFailed":`Échec du dernier redémarrage du sidecar`,"panel.onboarding.lanOff":`La connexion directe en réseau local est désactivée`,"panel.connection.lanPort":`Port réseau local`,"panel.download.open":`Télécharger l'app`,"panel.download.title":`Télécharger AI-HUB`,"panel.relay.clear":`Effacer (réseau local uniquement)`,"panel.relay.saveConfig":`Enregistrer les réglages`,"panel.relay.choosePublicRelay":`Choisir le relais public`,"panel.net.marketUnreachable":`Impossible de joindre la boutique de greffons : {message}`,"panel.net.marketHttp":`La boutique de greffons a renvoyé HTTP {status}`,"panel.net.hostHttp":`L'hôte a renvoyé HTTP {status}`},pt:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plataforma de distribuição de apps`,"panel.links.domesticRecommended":`Recomendado na China`,"panel.links.overseasRecommended":`Recomendado no exterior`,"panel.links.appStore":`Versão estável, atualiza com o sistema`,"panel.links.testFlight":`Versão beta, recebe novidades antes da loja`,"panel.links.publicRelay":`Relay público 1`,"panel.links.wechatQrAlt":`QR code do grupo do WeChat: escaneie com WeChat ou WeCom para entrar`,"panel.links.joinGroup":`Entrar no grupo`,"panel.theme.toDay":`Mudar para o modo claro`,"panel.theme.toNight":`Mudar para o modo escuro`,"panel.net.requestFailed":`Falha na requisição (HTTP {status})`,"panel.net.requestFailedNoStatus":`Falha na requisição`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay recusa este dispositivo`,"panel.pairing.qrHidden":`QR code oculto`,"panel.pairing.portFallback":`(porta preferida ocupada; trocada automaticamente)`,"panel.pairing.sidecarRestartFailed":`Falhou o último reinício do sidecar`,"panel.onboarding.lanOff":`A ligação direta por rede local está desativada`,"panel.connection.lanPort":`Porta da rede local`,"panel.download.open":`Baixar o app`,"panel.download.title":`Baixar AI-HUB`,"panel.relay.clear":`Limpar (só rede local)`,"panel.relay.saveConfig":`Salvar configurações`,"panel.relay.choosePublicRelay":`Escolher relay público`,"panel.net.marketUnreachable":`Não foi possível acessar o mercado de plugins: {message}`,"panel.net.marketHttp":`O mercado de plugins retornou HTTP {status}`,"panel.net.hostHttp":`O host retornou HTTP {status}`},ru:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Площадка распространения приложений`,"panel.links.domesticRecommended":`Рекомендуем в Китае`,"panel.links.overseasRecommended":`Рекомендуем за рубежом`,"panel.links.appStore":`Стабильная версия, обновляется вместе с системой`,"panel.links.testFlight":`Бета-версия, новые сборки раньше магазина`,"panel.links.publicRelay":`Публичный ретранслятор 1`,"panel.links.wechatQrAlt":`QR-код группы WeChat: отсканируйте в WeChat или WeCom, чтобы вступить`,"panel.links.joinGroup":`Вступить в группу`,"panel.theme.toDay":`Включить светлую тему`,"panel.theme.toNight":`Включить тёмную тему`,"panel.net.requestFailed":`Запрос не выполнен (HTTP {status})`,"panel.net.requestFailedNoStatus":`Запрос не выполнен`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, выбран другой автоматически)`,"panel.pairing.sidecarRestartFailed":`Прошлый перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.download.open":`Скачать приложение`,"panel.download.title":`Скачать AI-HUB`,"panel.relay.clear":`Очистить (только локальная сеть)`,"panel.relay.saveConfig":`Сохранить настройки`,"panel.relay.choosePublicRelay":`Выбрать публичный релей`,"panel.net.marketUnreachable":`Не удаётся подключиться к магазину плагинов: {message}`,"panel.net.marketHttp":`Магазин плагинов вернул HTTP {status}`,"panel.net.hostHttp":`Хост вернул HTTP {status}`}},{"zh-Hans":{"panel.inbox.title":`收件文件`,"panel.inbox.reading":`正在读收件目录…`,"panel.inbox.unreadableTitle":`这一版读不到收件目录`,"panel.inbox.unreadableBody":`这台宿主上的插件还没有这两条接口,更新插件后重启 DSH 就能看到占用并清理。`,"panel.inbox.used":`占用`,"panel.inbox.usedValue":`{bytes} · {count} 个文件`,"panel.inbox.deletable":`可清理`,"panel.inbox.deletableValue":`{bytes} · {count} 个`,"panel.inbox.keep":`保留期`,"panel.inbox.keepValue":`{hours} 小时`,"panel.inbox.keepValueOldest":`{hours} 小时(最老那份已放 {age})`,"panel.inbox.staging":`其中 {bytes} 是上传中途断掉留下的残片({count} 个),一并清掉。`,"panel.inbox.auto":`自动清理`,"panel.inbox.autoA11y":`自动清理收件文件`,"panel.inbox.clearing":`正在清理…`,"panel.inbox.clear":`清理收件文件`,"panel.inbox.confirmTitle":`清理收件文件?`,"panel.inbox.confirmDetail":`会删掉 {count} 个满 {hours} 小时的文件,释放 {bytes};不满这个时间的会留着。`,"panel.inbox.confirmNothing":`目前没有满 {hours} 小时的文件,点了什么都不会删。`,"panel.inbox.confirmIrreversible":`这个动作不可恢复。`,"panel.inbox.cleared":`收件文件已清理:释放了 {bytes}({count} 个文件)`,"panel.inbox.clearedSomeFailed":`,{count} 个没删掉`,"panel.inbox.nothingToClear":`没有满保留期的文件可清。`,"panel.inbox.clearFailed":`清理收件文件失败:{message}`,"panel.inbox.autoFailed":`自动清理开关没改成功:{message}`,"panel.inbox.ageLessThanHour":`不到 1 小时`,"panel.inbox.ageHours":`{hours} 小时`,"panel.inbox.ageDays":`{days} 天`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`},"zh-Hant":{"panel.inbox.title":`收件檔案`,"panel.inbox.reading":`正在讀取收件目錄…`,"panel.inbox.unreadableTitle":`這一版讀不到收件目錄`,"panel.inbox.unreadableBody":`這台宿主上的外掛還沒有這兩條介面,更新外掛後重新啟動 DSH 就能看到佔用並清理。`,"panel.inbox.used":`佔用`,"panel.inbox.usedValue":`{bytes} · {count} 個檔案`,"panel.inbox.deletable":`可清理`,"panel.inbox.deletableValue":`{bytes} · {count} 個`,"panel.inbox.keep":`保留期`,"panel.inbox.keepValue":`{hours} 小時`,"panel.inbox.keepValueOldest":`{hours} 小時(最舊那份已放 {age})`,"panel.inbox.staging":`其中 {bytes} 是上傳中途斷掉留下的殘片({count} 個),一併清掉。`,"panel.inbox.auto":`自動清理`,"panel.inbox.autoA11y":`自動清理收件檔案`,"panel.inbox.clearing":`正在清理…`,"panel.inbox.clear":`清理收件檔案`,"panel.inbox.confirmTitle":`清理收件檔案?`,"panel.inbox.confirmDetail":`會刪掉 {count} 個滿 {hours} 小時的檔案,釋放 {bytes};不滿這個時間的會留著。`,"panel.inbox.confirmNothing":`目前沒有滿 {hours} 小時的檔案,點了什麼都不會刪。`,"panel.inbox.confirmIrreversible":`這個動作不可恢復。`,"panel.inbox.cleared":`收件檔案已清理:釋放了 {bytes}({count} 個檔案)`,"panel.inbox.clearedSomeFailed":`,{count} 個沒刪掉`,"panel.inbox.nothingToClear":`沒有滿保留期的檔案可清。`,"panel.inbox.clearFailed":`清理收件檔案失敗:{message}`,"panel.inbox.autoFailed":`自動清理開關沒有改成功:{message}`,"panel.inbox.ageLessThanHour":`不到 1 小時`,"panel.inbox.ageHours":`{hours} 小時`,"panel.inbox.ageDays":`{days} 天`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`},en:{"panel.inbox.title":`Received files`,"panel.inbox.reading":`Reading the inbox directory…`,"panel.inbox.unreadableTitle":`This build cannot read the inbox directory`,"panel.inbox.unreadableBody":`The plugin on this host does not have these two endpoints yet. Update the plugin and restart DSH to see usage and clean up.`,"panel.inbox.used":`Used`,"panel.inbox.usedValue":`{bytes} · {count} files`,"panel.inbox.deletable":`Cleanable`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retention`,"panel.inbox.keepValue":`{hours} hours`,"panel.inbox.keepValueOldest":`{hours} hours (oldest kept for {age})`,"panel.inbox.staging":`{bytes} of that are fragments left by interrupted uploads ({count}), which are cleared too.`,"panel.inbox.auto":`Auto cleanup`,"panel.inbox.autoA11y":`Automatically clean received files`,"panel.inbox.clearing":`Cleaning…`,"panel.inbox.clear":`Clean received files`,"panel.inbox.confirmTitle":`Clean received files?`,"panel.inbox.confirmDetail":`This deletes {count} file(s) older than {hours} hours and frees {bytes}; newer ones stay.`,"panel.inbox.confirmNothing":`No files are older than {hours} hours, so nothing will be deleted.`,"panel.inbox.confirmIrreversible":`This cannot be undone.`,"panel.inbox.cleared":`Received files cleaned: freed {bytes} ({count} files)`,"panel.inbox.clearedSomeFailed":`, {count} could not be deleted`,"panel.inbox.nothingToClear":`No files older than the retention window to clean.`,"panel.inbox.clearFailed":`Could not clean received files: {message}`,"panel.inbox.autoFailed":`Could not change the auto-cleanup switch: {message}`,"panel.inbox.ageLessThanHour":`less than 1 hour`,"panel.inbox.ageHours":`{hours} hours`,"panel.inbox.ageDays":`{days} days`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`},ja:{"panel.inbox.title":`受信ファイル`,"panel.inbox.reading":`受信ディレクトリを読み込み中…`,"panel.inbox.unreadableTitle":`この版では受信ディレクトリを読めません`,"panel.inbox.unreadableBody":`このホストのプラグインにはまだこの 2 つの API がありません。プラグインを更新して DSH を再起動すると、使用量の確認とクリーンアップができます。`,"panel.inbox.used":`使用量`,"panel.inbox.usedValue":`{bytes} · {count} ファイル`,"panel.inbox.deletable":`削除可能`,"panel.inbox.deletableValue":`{bytes} · {count} 個`,"panel.inbox.keep":`保存期間`,"panel.inbox.keepValue":`{hours} 時間`,"panel.inbox.keepValueOldest":`{hours} 時間(最も古いものは {age} 前)`,"panel.inbox.staging":`うち {bytes} はアップロード中断で残った断片({count} 個)で、これも一緒に削除されます。`,"panel.inbox.auto":`自動クリーンアップ`,"panel.inbox.autoA11y":`受信ファイルを自動でクリーンアップ`,"panel.inbox.clearing":`クリーンアップ中…`,"panel.inbox.clear":`受信ファイルをクリーンアップ`,"panel.inbox.confirmTitle":`受信ファイルをクリーンアップしますか?`,"panel.inbox.confirmDetail":`{hours} 時間を超えた {count} 個のファイルを削除し、{bytes} を解放します。それより新しいものは残します。`,"panel.inbox.confirmNothing":`{hours} 時間を超えたファイルがないため、何も削除されません。`,"panel.inbox.confirmIrreversible":`この操作は元に戻せません。`,"panel.inbox.cleared":`受信ファイルを整理しました:{bytes} を解放({count} ファイル)`,"panel.inbox.clearedSomeFailed":`、{count} 個は削除できませんでした`,"panel.inbox.nothingToClear":`保存期間を超えたファイルはありません。`,"panel.inbox.clearFailed":`受信ファイルの整理に失敗しました:{message}`,"panel.inbox.autoFailed":`自動クリーンアップの切り替えに失敗しました:{message}`,"panel.inbox.ageLessThanHour":`1 時間未満`,"panel.inbox.ageHours":`{hours} 時間`,"panel.inbox.ageDays":`{days} 日`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`},ko:{"panel.inbox.title":`받은 파일`,"panel.inbox.reading":`수신 디렉터리를 읽는 중…`,"panel.inbox.unreadableTitle":`이 버전에서는 수신 디렉터리를 읽을 수 없습니다`,"panel.inbox.unreadableBody":`이 호스트의 플러그인에는 아직 이 두 API가 없습니다. 플러그인을 업데이트하고 DSH를 재시작하면 사용량 확인과 정리가 가능합니다.`,"panel.inbox.used":`사용량`,"panel.inbox.usedValue":`{bytes} · 파일 {count}개`,"panel.inbox.deletable":`정리 가능`,"panel.inbox.deletableValue":`{bytes} · {count}개`,"panel.inbox.keep":`보존 기간`,"panel.inbox.keepValue":`{hours}시간`,"panel.inbox.keepValueOldest":`{hours}시간(가장 오래된 것은 {age} 전)`,"panel.inbox.staging":`그중 {bytes}는 업로드가 중단되어 남은 조각({count}개)이며 함께 삭제됩니다.`,"panel.inbox.auto":`자동 정리`,"panel.inbox.autoA11y":`받은 파일 자동 정리`,"panel.inbox.clearing":`정리 중…`,"panel.inbox.clear":`받은 파일 정리`,"panel.inbox.confirmTitle":`받은 파일을 정리할까요?`,"panel.inbox.confirmDetail":`{hours}시간이 지난 파일 {count}개를 삭제하고 {bytes}를 확보합니다. 그보다 최근 파일은 남습니다.`,"panel.inbox.confirmNothing":`{hours}시간이 지난 파일이 없어 아무것도 삭제되지 않습니다.`,"panel.inbox.confirmIrreversible":`이 작업은 되돌릴 수 없습니다.`,"panel.inbox.cleared":`받은 파일을 정리했습니다: {bytes} 확보(파일 {count}개)`,"panel.inbox.clearedSomeFailed":`, {count}개는 삭제하지 못했습니다`,"panel.inbox.nothingToClear":`보존 기간이 지난 파일이 없습니다.`,"panel.inbox.clearFailed":`받은 파일 정리에 실패했습니다: {message}`,"panel.inbox.autoFailed":`자동 정리 스위치를 변경하지 못했습니다: {message}`,"panel.inbox.ageLessThanHour":`1시간 미만`,"panel.inbox.ageHours":`{hours}시간`,"panel.inbox.ageDays":`{days}일`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`},de:{"panel.inbox.title":`Posteingang-Dateien`,"panel.inbox.reading":`Posteingangsordner wird gelesen…`,"panel.inbox.unreadableTitle":`Diese Version kann den Posteingangsordner nicht lesen`,"panel.inbox.unreadableBody":`Das Plugin auf diesem Host hat diese beiden Endpunkte noch nicht. Aktualisiere das Plugin und starte DSH neu, dann siehst du die Belegung und kannst bereinigen.`,"panel.inbox.used":`Belegt`,"panel.inbox.usedValue":`{bytes} · {count} Dateien`,"panel.inbox.deletable":`Bereinigbar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Aufbewahrung`,"panel.inbox.keepValue":`{hours} Stunden`,"panel.inbox.keepValueOldest":`{hours} Stunden (älteste seit {age})`,"panel.inbox.staging":`Davon sind {bytes} Reste abgebrochener Uploads ({count} Dateien); sie werden mit entfernt.`,"panel.inbox.auto":`Automatisch bereinigen`,"panel.inbox.autoA11y":`Posteingang-Dateien automatisch bereinigen`,"panel.inbox.clearing":`Wird bereinigt…`,"panel.inbox.clear":`Posteingang-Dateien bereinigen`,"panel.inbox.confirmTitle":`Posteingang-Dateien bereinigen?`,"panel.inbox.confirmDetail":`{count} Dateien älter als {hours} Stunden werden gelöscht, {bytes} werden frei; jüngere bleiben.`,"panel.inbox.confirmNothing":`Es gibt keine Dateien älter als {hours} Stunden, es wird also nichts gelöscht.`,"panel.inbox.confirmIrreversible":`Das lässt sich nicht rückgängig machen.`,"panel.inbox.cleared":`Posteingang-Dateien bereinigt: {bytes} freigegeben ({count} Dateien)`,"panel.inbox.clearedSomeFailed":`, {count} konnten nicht gelöscht werden`,"panel.inbox.nothingToClear":`Keine Dateien älter als die Aufbewahrungsfrist zu bereinigen.`,"panel.inbox.clearFailed":`Posteingang-Dateien bereinigen fehlgeschlagen: {message}`,"panel.inbox.autoFailed":`Automatisches Bereinigen konnte nicht umgeschaltet werden: {message}`,"panel.inbox.ageLessThanHour":`unter 1 Stunde`,"panel.inbox.ageHours":`{hours} Stunden`,"panel.inbox.ageDays":`{days} Tage`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`},es:{"panel.inbox.title":`Archivos recibidos`,"panel.inbox.reading":`Leyendo la carpeta de entrada…`,"panel.inbox.unreadableTitle":`Esta versión no puede leer la carpeta de entrada`,"panel.inbox.unreadableBody":`El complemento de este host aún no tiene estos dos endpoints. Actualiza el complemento y reinicia DSH para ver el uso y limpiar.`,"panel.inbox.used":`Ocupado`,"panel.inbox.usedValue":`{bytes} · {count} archivos`,"panel.inbox.deletable":`Se puede limpiar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retención`,"panel.inbox.keepValue":`{hours} horas`,"panel.inbox.keepValueOldest":`{hours} horas (la más antigua lleva {age})`,"panel.inbox.staging":`{bytes} de eso son restos de subidas interrumpidas ({count} archivos); también se borran.`,"panel.inbox.auto":`Limpieza automática`,"panel.inbox.autoA11y":`Limpiar automáticamente los archivos recibidos`,"panel.inbox.clearing":`Limpiando…`,"panel.inbox.clear":`Limpiar archivos recibidos`,"panel.inbox.confirmTitle":`¿Limpiar los archivos recibidos?`,"panel.inbox.confirmDetail":`Se borrarán {count} archivos con más de {hours} horas y se liberarán {bytes}; los más recientes se quedan.`,"panel.inbox.confirmNothing":`No hay archivos de más de {hours} horas, así que no se borrará nada.`,"panel.inbox.confirmIrreversible":`Esto no se puede deshacer.`,"panel.inbox.cleared":`Archivos recibidos limpiados: se liberaron {bytes} ({count} archivos)`,"panel.inbox.clearedSomeFailed":`, {count} no se pudieron borrar`,"panel.inbox.nothingToClear":`No hay archivos que superen la retención para limpiar.`,"panel.inbox.clearFailed":`No se pudieron limpiar los archivos recibidos: {message}`,"panel.inbox.autoFailed":`No se pudo cambiar el interruptor de limpieza automática: {message}`,"panel.inbox.ageLessThanHour":`menos de 1 hora`,"panel.inbox.ageHours":`{hours} horas`,"panel.inbox.ageDays":`{days} días`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`Este dispositivo no es aceptado por el retransmisor`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; se cambió solo)`,"panel.pairing.sidecarRestartFailed":`El último reinicio del sidecar falló`,"panel.onboarding.lanOff":`La conexión directa por LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`},fr:{"panel.inbox.title":`Fichiers reçus`,"panel.inbox.reading":`Lecture du dossier de réception…`,"panel.inbox.unreadableTitle":`Cette version ne peut pas lire le dossier de réception`,"panel.inbox.unreadableBody":`Le greffon de cet hôte n'a pas encore ces deux points d'accès. Mets-le à jour et redémarre DSH pour voir l'occupation et nettoyer.`,"panel.inbox.used":`Occupé`,"panel.inbox.usedValue":`{bytes} · {count} fichiers`,"panel.inbox.deletable":`Nettoyable`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Conservation`,"panel.inbox.keepValue":`{hours} heures`,"panel.inbox.keepValueOldest":`{hours} heures (la plus ancienne depuis {age})`,"panel.inbox.staging":`{bytes} correspondent à des restes d'envois interrompus ({count} fichiers) ; ils sont supprimés aussi.`,"panel.inbox.auto":`Nettoyage auto`,"panel.inbox.autoA11y":`Nettoyer automatiquement les fichiers reçus`,"panel.inbox.clearing":`Nettoyage…`,"panel.inbox.clear":`Nettoyer les fichiers reçus`,"panel.inbox.confirmTitle":`Nettoyer les fichiers reçus ?`,"panel.inbox.confirmDetail":`{count} fichiers de plus de {hours} heures seront supprimés, libérant {bytes} ; les plus récents restent.`,"panel.inbox.confirmNothing":`Aucun fichier de plus de {hours} heures : rien ne sera supprimé.`,"panel.inbox.confirmIrreversible":`Cette action est irréversible.`,"panel.inbox.cleared":`Fichiers reçus nettoyés : {bytes} libérés ({count} fichiers)`,"panel.inbox.clearedSomeFailed":`, {count} n'ont pas pu être supprimés`,"panel.inbox.nothingToClear":`Aucun fichier au-delà de la durée de conservation à nettoyer.`,"panel.inbox.clearFailed":`Échec du nettoyage des fichiers reçus : {message}`,"panel.inbox.autoFailed":`Impossible de changer l'option de nettoyage auto : {message}`,"panel.inbox.ageLessThanHour":`moins d'une heure`,"panel.inbox.ageHours":`{hours} heures`,"panel.inbox.ageDays":`{days} jours`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, bascule automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`La connexion directe en réseau local est désactivée`,"panel.connection.lanPort":`Port réseau local`},pt:{"panel.inbox.title":`Arquivos recebidos`,"panel.inbox.reading":`Lendo a pasta de entrada…`,"panel.inbox.unreadableTitle":`Esta versão não consegue ler a pasta de entrada`,"panel.inbox.unreadableBody":`O plugin deste host ainda não tem esses dois endpoints. Atualize o plugin e reinicie o DSH para ver o uso e limpar.`,"panel.inbox.used":`Em uso`,"panel.inbox.usedValue":`{bytes} · {count} arquivos`,"panel.inbox.deletable":`Pode limpar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retenção`,"panel.inbox.keepValue":`{hours} horas`,"panel.inbox.keepValueOldest":`{hours} horas (a mais antiga há {age})`,"panel.inbox.staging":`{bytes} disso são restos de envios interrompidos ({count} arquivos); eles também são apagados.`,"panel.inbox.auto":`Limpeza automática`,"panel.inbox.autoA11y":`Limpar automaticamente os arquivos recebidos`,"panel.inbox.clearing":`Limpando…`,"panel.inbox.clear":`Limpar arquivos recebidos`,"panel.inbox.confirmTitle":`Limpar os arquivos recebidos?`,"panel.inbox.confirmDetail":`{count} arquivos com mais de {hours} horas serão apagados, liberando {bytes}; os mais recentes ficam.`,"panel.inbox.confirmNothing":`Não há arquivos com mais de {hours} horas, então nada será apagado.`,"panel.inbox.confirmIrreversible":`Isso não pode ser desfeito.`,"panel.inbox.cleared":`Arquivos recebidos limpos: {bytes} liberados ({count} arquivos)`,"panel.inbox.clearedSomeFailed":`, {count} não puderam ser apagados`,"panel.inbox.nothingToClear":`Nenhum arquivo além do prazo de retenção para limpar.`,"panel.inbox.clearFailed":`Falha ao limpar os arquivos recebidos: {message}`,"panel.inbox.autoFailed":`Não foi possível mudar o interruptor da limpeza automática: {message}`,"panel.inbox.ageLessThanHour":`menos de 1 hora`,"panel.inbox.ageHours":`{hours} horas`,"panel.inbox.ageDays":`{days} dias`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`Este dispositivo não é aceito pelo relay`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(a porta preferida estava ocupada; trocado automaticamente)`,"panel.pairing.sidecarRestartFailed":`A última reinicialização do sidecar falhou`,"panel.onboarding.lanOff":`A conexão direta por LAN está desligada`,"panel.connection.lanPort":`Porta LAN`},ru:{"panel.inbox.title":`Файлы входящих`,"panel.inbox.reading":`Чтение папки входящих…`,"panel.inbox.unreadableTitle":`Эта версия не видит папку входящих`,"panel.inbox.unreadableBody":`У плагина на этом хосте ещё нет этих двух эндпоинтов. Обнови плагин и перезапусти DSH, чтобы увидеть занятое место и очистить.`,"panel.inbox.used":`Занято`,"panel.inbox.usedValue":`{bytes} · файлов: {count}`,"panel.inbox.deletable":`Можно очистить`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Срок хранения`,"panel.inbox.keepValue":`{hours} ч`,"panel.inbox.keepValueOldest":`{hours} ч (самый старый лежит {age})`,"panel.inbox.staging":`{bytes} из них — обрывки прерванных загрузок ({count} шт.); они тоже удаляются.`,"panel.inbox.auto":`Автоочистка`,"panel.inbox.autoA11y":`Автоматически очищать файлы входящих`,"panel.inbox.clearing":`Очистка…`,"panel.inbox.clear":`Очистить файлы входящих`,"panel.inbox.confirmTitle":`Очистить файлы входящих?`,"panel.inbox.confirmDetail":`Будет удалено {count} файлов старше {hours} ч, освободится {bytes}; более свежие останутся.`,"panel.inbox.confirmNothing":`Файлов старше {hours} ч нет, так что ничего не удалится.`,"panel.inbox.confirmIrreversible":`Действие необратимо.`,"panel.inbox.cleared":`Файлы входящих очищены: освобождено {bytes} ({count} файлов)`,"panel.inbox.clearedSomeFailed":`, {count} удалить не удалось`,"panel.inbox.nothingToClear":`Нет файлов старше срока хранения — чистить нечего.`,"panel.inbox.clearFailed":`Не удалось очистить файлы входящих: {message}`,"panel.inbox.autoFailed":`Не удалось переключить автоочистку: {message}`,"panel.inbox.ageLessThanHour":`меньше часа`,"panel.inbox.ageHours":`{hours} ч`,"panel.inbox.ageDays":`{days} дн.`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Это устройство отклонено ретранслятором`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(предпочтительный порт занят, переключено автоматически)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`}},{"zh-Hans":{"panel.onboarding.pairingHint":`扫码连接`,"panel.onboarding.statusFailed":`读不到插件状态`,"panel.onboarding.stepFailed":`这一步没成功`,"panel.onboarding.qrAfterRelay":`填好下面的中转地址后`,"panel.onboarding.qrAfterRelayLine2":`这里才会生成二维码`,"panel.onboarding.qrAfterAddress":`这个地址连上之后,这里才会生成二维码`,"panel.onboarding.noQr":`没取到二维码`,"panel.onboarding.preview":`这是按你填的地址生成的预览,点「进入插件」才会把这个地址存进配置。`,"panel.onboarding.relayNotConnected":`中转还没连上,连上之后扫码才有用。`,"panel.onboarding.direct":`直连`,"panel.onboarding.thisAddress":`这个地址`,"panel.onboarding.lanFailed":`没能开始直连`,"panel.onboarding.relayFailed":`中转没连上`,"panel.onboarding.lanErrorWithPort":`{error}(端口可能被占用,到主页的「局域网直连」里换一个。)`,"panel.onboarding.lanNoStart":`直连没起来,端口可能被别的程序占了。`,"panel.onboarding.tunnelErrorHint":`{error}(检查中转地址填对没有、那台中转是不是在跑。)`,"panel.onboarding.tunnelNoStart":`隧道没建起来,检查中转地址。`,"panel.onboarding.pickAddress":`手机连哪条地址`,"panel.onboarding.relayAddressHint":`中转地址`,"panel.onboarding.recheckSaved":`这台机器正在用的中转地址 {url} 现在连不上,先确认那台中转在不在跑。`,"panel.onboarding.relayNoAnswer":`中转地址 {value} 上没有中转在应答。确认域名写对、那台 dsh-relay 在运行。`,"panel.onboarding.relayNoAnswerUnsaved":`中转地址 {value} 上没有中转在应答,配置没改。确认域名写对、那台 dsh-relay 在运行。`,"panel.onboarding.probe.empty":`还没填地址`,"panel.onboarding.probe.busy":`检测中`,"panel.onboarding.probe.ok":`连得通,还没存进配置`,"panel.onboarding.probe.failed":`连不上`,"panel.onboarding.probe.idle":`还没检测`,"panel.onboarding.probe.okWithHint":`这个地址连得通,二维码已按它生成(还没存进配置)。`,"panel.onboarding.checkFirewall":`连不上?检查防火墙`,"panel.onboarding.lanDirect":`局域网直连`,"panel.onboarding.chooseAddress":`选择地址`,"panel.onboarding.setAddress":`填写地址`,"panel.onboarding.publicRelay":`公用中转`,"panel.onboarding.publicRelayTemporary":`建议临时使用`,"panel.onboarding.ownRelay":`自建中转`,"panel.onboarding.penetration":`内网穿透`,"panel.onboarding.penetrationAddress":`内网穿透地址`,"panel.onboarding.penetrationPlaceholder":`https://你的穿透域名`,"panel.onboarding.githubRepo":`GitHub 仓库`,"panel.onboarding.currentLan":`当前选择的局域网地址`,"panel.onboarding.public":`公网`,"panel.onboarding.ipv6More":`另有 {count} 条 IPv6 地址,手机按实测择优`,"panel.onboarding.collapse":`收起`,"panel.onboarding.expand":`展开`,"panel.onboarding.relayListTitle":`公用中转地址(按实测耗时排)`,"panel.onboarding.probing":`测速中…`,"panel.onboarding.autoBest":`自动优选`,"panel.onboarding.autoBestHint":`取最快的那条`,"panel.onboarding.probeUnreachable":`测不通`,"panel.onboarding.check":`检测`,"panel.onboarding.enterPlugin":`进入插件`,"panel.onboarding.connecting":`正在连接…`,"panel.onboarding.fixFirst":`先解决上面的问题`,"panel.onboarding.fillRelayFirst":`先填中转地址`,"panel.onboarding.opening":`正在打开…`,"panel.onboarding.openDirect":`打开直连`,"panel.onboarding.connectRelay":`连接中转`,"panel.onboarding.firewallTitle":`检查防火墙`,"panel.onboarding.firewallIntro":`手机连不上这台电脑的直连端口时,多半是电脑这边把端口挡了。直连默认端口`,"panel.onboarding.firewallIntroTail":`(首页「局域网直连」里可以改),下面按系统查。`,"panel.onboarding.copiedOk":`已复制,粘贴给你的 AI 就行。`,"panel.onboarding.copiedFailed":`复制失败,可以手动选中内容复制。`,"panel.onboarding.lanDialogTitle":`选择局域网地址`,"panel.onboarding.lanDialogHint":`手机先试选中的这条,其余继续排在后面兜底。`,"panel.onboarding.referenceOnly":`仅供参考的地址`,"panel.onboarding.lanGroupA11y":`局域网地址`,"panel.onboarding.lan":`局域网`,"panel.onboarding.copyPromptHint":`点我复制内容,让自己的 AI 去检查`,"panel.onboarding.copyPrompt":`复制这段排查提示词`,"panel.onboarding.linuxStep1":`1. 看防火墙状态(firewalld 或 ufw,装哪个查哪个):`,"panel.onboarding.linuxStep2":`2. 放行直连端口:`,"panel.onboarding.linuxStep3":`3. 云服务器还要去服务商控制台的安全组里放行同一个端口 —— 这台机器上查不到。`,"panel.onboarding.macStep1":`1. 看应用防火墙是不是开着:`,"panel.onboarding.macStep2":`2. 开着的话,在「系统设置 → 网络 → 防火墙 → 选项」里把 DSH / node 设成「允许传入连接」;排查时可以整个关掉:`,"panel.onboarding.macStep3":`3. 同一 Wi-Fi 还连不上:确认手机和电脑真在同一个网段,别连到访客网络。`,"panel.onboarding.winStep1":`1. 在 PowerShell(管理员)里看防火墙配置文件:`,"panel.onboarding.winStep2":`2. 放行直连端口:`,"panel.onboarding.winStep3":`3. 如果以前给 node 配过拒绝规则,记得把那条 Block 删掉;网络类型选「专用」而不是「公用」。`,"panel.onboarding.prompt.intro":`帮我排查一个问题。`,"panel.onboarding.prompt.situation":`我的情况:电脑上装了 DSH(DeepSeek Harness)的移动端插件,手机 App 通过局域网直连连不上这台电脑。`,"panel.onboarding.prompt.address":`手机上填的地址是这台电脑的局域网地址加端口(具体的地址和端口你需要到移动端插件的那个网页里看,注意是局域网地址)。`,"panel.onboarding.prompt.guess":`电脑这边显示插件已经在监听,但手机连不上。我判断是电脑的防火墙(或者云服务器的安全组)把这个端口挡了。`,"panel.onboarding.prompt.ask":`请你:`,"panel.onboarding.prompt.ask1":`1. 先确认我的系统是 Linux、macOS 还是 Windows(不确定就问我,或者告诉我怎么确认)。`,"panel.onboarding.prompt.ask2":`2. 按属于我这一套的步骤逐条检查,告诉我那个端口现在通不通、卡在哪一步。`,"panel.onboarding.prompt.ask3":`3. 给出具体该执行的命令或点击路径,把端口放行;需要管理员权限的地方明确说明。`,"panel.onboarding.prompt.ask4":`4. 最后告诉我怎么验证已经通了(比如用哪条命令从本机、从手机分别确认)。`,"panel.onboarding.prompt.extra":`补充:如果这台电脑是云服务器,服务商控制台里的安全组/防火墙也要放行同一个端口,这一项在本机查不到。`,"panel.onboarding.relayPlaceholder":`https://你的中转域名`,"panel.onboarding.probe.failedBody":`这个地址连不上,二维码不会生成。确认它是 http:// 或 https:// 开头、那台中转在运行、域名解析到它。`},"zh-Hant":{"panel.onboarding.pairingHint":`掃碼連線`,"panel.onboarding.statusFailed":`讀不到外掛狀態`,"panel.onboarding.stepFailed":`這一步沒有成功`,"panel.onboarding.qrAfterRelay":`填好下面的中轉位址後`,"panel.onboarding.qrAfterRelayLine2":`這裡才會產生 QR 碼`,"panel.onboarding.qrAfterAddress":`這個位址連上之後,這裡才會產生 QR 碼`,"panel.onboarding.noQr":`沒取得 QR 碼`,"panel.onboarding.preview":`這是依你填的位址產生的預覽,點「進入外掛」才會把這個位址存進設定。`,"panel.onboarding.relayNotConnected":`中轉還沒連上,連上之後掃碼才有用。`,"panel.onboarding.direct":`直連`,"panel.onboarding.thisAddress":`這個位址`,"panel.onboarding.lanFailed":`沒能開始直連`,"panel.onboarding.relayFailed":`中轉沒連上`,"panel.onboarding.lanErrorWithPort":`{error}(連接埠可能被佔用,到主頁的「區域網路直連」裡換一個。)`,"panel.onboarding.lanNoStart":`直連沒起來,連接埠可能被別的程式佔用。`,"panel.onboarding.tunnelErrorHint":`{error}(檢查中轉位址填對沒有、那台中轉是不是在跑。)`,"panel.onboarding.tunnelNoStart":`通道沒建起來,檢查中轉位址。`,"panel.onboarding.pickAddress":`手機連哪條位址`,"panel.onboarding.relayAddressHint":`中轉位址`,"panel.onboarding.recheckSaved":`這台機器正在用的中轉位址 {url} 現在連不上,先確認那台中轉在不在跑。`,"panel.onboarding.relayNoAnswer":`中轉位址 {value} 上沒有中轉在應答。確認網域名稱寫對、那台 dsh-relay 在執行。`,"panel.onboarding.relayNoAnswerUnsaved":`中轉位址 {value} 上沒有中轉在應答,設定沒改。確認網域名稱寫對、那台 dsh-relay 在執行。`,"panel.onboarding.probe.empty":`還沒填位址`,"panel.onboarding.probe.busy":`檢查中`,"panel.onboarding.probe.ok":`連得通,還沒存進設定`,"panel.onboarding.probe.failed":`連不上`,"panel.onboarding.probe.idle":`還沒檢查`,"panel.onboarding.probe.okWithHint":`這個位址連得通,QR 碼已依它產生(還沒存進設定)。`,"panel.onboarding.checkFirewall":`連不上?檢查防火牆`,"panel.onboarding.lanDirect":`區域網路直連`,"panel.onboarding.chooseAddress":`選擇位址`,"panel.onboarding.setAddress":`填寫地址`,"panel.onboarding.publicRelay":`公用中轉`,"panel.onboarding.publicRelayTemporary":`建議臨時使用`,"panel.onboarding.ownRelay":`自建中轉`,"panel.onboarding.penetration":`內網穿透`,"panel.onboarding.penetrationAddress":`內網穿透位址`,"panel.onboarding.penetrationPlaceholder":`https://你的穿透網域`,"panel.onboarding.githubRepo":`GitHub 儲存庫`,"panel.onboarding.currentLan":`目前選擇的區域網路位址`,"panel.onboarding.public":`公網`,"panel.onboarding.ipv6More":`另有 {count} 條 IPv6 位址,手機依實測擇優`,"panel.onboarding.collapse":`收合`,"panel.onboarding.expand":`展開`,"panel.onboarding.relayListTitle":`公用中轉位址(依實測耗時排)`,"panel.onboarding.probing":`測速中…`,"panel.onboarding.autoBest":`自動優選`,"panel.onboarding.autoBestHint":`取最快的那條`,"panel.onboarding.probeUnreachable":`測不通`,"panel.onboarding.check":`檢查`,"panel.onboarding.enterPlugin":`進入外掛`,"panel.onboarding.connecting":`正在連線…`,"panel.onboarding.fixFirst":`先解決上面的問題`,"panel.onboarding.fillRelayFirst":`先填中轉位址`,"panel.onboarding.opening":`正在開啟…`,"panel.onboarding.openDirect":`開啟直連`,"panel.onboarding.connectRelay":`連線中轉`,"panel.onboarding.firewallTitle":`檢查防火牆`,"panel.onboarding.firewallIntro":`手機連不上這台電腦的直連連接埠時,多半是電腦這邊把連接埠擋了。直連預設連接埠`,"panel.onboarding.firewallIntroTail":`(首頁「區域網路直連」裡可以改),下面依系統查。`,"panel.onboarding.copiedOk":`已複製,貼給你的 AI 就行。`,"panel.onboarding.copiedFailed":`複製失敗,可以手動選取內容複製。`,"panel.onboarding.lanDialogTitle":`選擇區域網路位址`,"panel.onboarding.lanDialogHint":`手機先試選中的這條,其餘繼續排在後面兜底。`,"panel.onboarding.referenceOnly":`僅供參考的位址`,"panel.onboarding.lanGroupA11y":`區域網路位址`,"panel.onboarding.lan":`區域網路`,"panel.onboarding.copyPromptHint":`點我複製內容,讓自己的 AI 去檢查`,"panel.onboarding.copyPrompt":`複製這段排查提示詞`,"panel.onboarding.linuxStep1":`1. 看防火牆狀態(firewalld 或 ufw,裝哪個查哪個):`,"panel.onboarding.linuxStep2":`2. 放行直連連接埠:`,"panel.onboarding.linuxStep3":`3. 雲端伺服器還要去服務商主控台的安全群組裡放行同一個連接埠 —— 這台機器上查不到。`,"panel.onboarding.macStep1":`1. 看應用程式防火牆是不是開著:`,"panel.onboarding.macStep2":`2. 開著的話,在「系統設定 → 網路 → 防火牆 → 選項」裡把 DSH / node 設成「允許傳入連線」;排查時可以整個關掉:`,"panel.onboarding.macStep3":`3. 同一 Wi-Fi 還連不上:確認手機和電腦真在同一個網段,別連到訪客網路。`,"panel.onboarding.winStep1":`1. 在 PowerShell(系統管理員)裡看防火牆設定檔:`,"panel.onboarding.winStep2":`2. 放行直連連接埠:`,"panel.onboarding.winStep3":`3. 如果以前給 node 設過拒絕規則,記得把那條 Block 刪掉;網路類型選「專用」而不是「公用」。`,"panel.onboarding.prompt.intro":`幫我排查一個問題。`,"panel.onboarding.prompt.situation":`我的情況:電腦上裝了 DSH(DeepSeek Harness)的行動端外掛,手機 App 透過區域網路直連連不上這台電腦。`,"panel.onboarding.prompt.address":`手機上填的位址是這台電腦的區域網路位址加連接埠(具體的位址和連接埠你需要到行動端外掛的那個網頁裡看,注意是區域網路位址)。`,"panel.onboarding.prompt.guess":`電腦這邊顯示外掛已經在監聽,但手機連不上。我判斷是電腦的防火牆(或者雲端伺服器的安全群組)把這個連接埠擋了。`,"panel.onboarding.prompt.ask":`請你:`,"panel.onboarding.prompt.ask1":`1. 先確認我的系統是 Linux、macOS 還是 Windows(不確定就問我,或者告訴我怎麼確認)。`,"panel.onboarding.prompt.ask2":`2. 依屬於我這一套的步驟逐條檢查,告訴我那個連接埠現在通不通、卡在哪一步。`,"panel.onboarding.prompt.ask3":`3. 給出具體該執行的命令或點擊路徑,把連接埠放行;需要系統管理員權限的地方明確說明。`,"panel.onboarding.prompt.ask4":`4. 最後告訴我怎麼驗證已經通了(比如用哪條命令從本機、從手機分別確認)。`,"panel.onboarding.prompt.extra":`補充:如果這台電腦是雲端伺服器,服務商主控台裡的安全群組/防火牆也要放行同一個連接埠,這一項在本機查不到。`,"panel.onboarding.relayPlaceholder":`https://你的中轉網域`,"panel.onboarding.probe.failedBody":`這個位址連不上,QR 碼不會產生。確認它是 http:// 或 https:// 開頭、那台中轉正在執行、網域解析到它。`},en:{"panel.onboarding.pairingHint":`Scan to connect`,"panel.onboarding.statusFailed":`Could not read plugin status`,"panel.onboarding.stepFailed":`That step did not succeed`,"panel.onboarding.qrAfterRelay":`Once you fill in the relay address below`,"panel.onboarding.qrAfterRelayLine2":`the QR code appears here`,"panel.onboarding.qrAfterAddress":`Once this address connects, the QR code appears here`,"panel.onboarding.noQr":`No QR code yet`,"panel.onboarding.preview":`This preview uses the address you typed. Tapping “Enter plugin” saves it to the configuration.`,"panel.onboarding.relayNotConnected":`The relay is not connected yet; scanning only works once it is.`,"panel.onboarding.direct":`Direct`,"panel.onboarding.thisAddress":`This address`,"panel.onboarding.lanFailed":`Could not start direct connection`,"panel.onboarding.relayFailed":`Relay not connected`,"panel.onboarding.lanErrorWithPort":`{error} (the port may be taken — pick another under “LAN direct” on the main page.)`,"panel.onboarding.lanNoStart":`The direct listener did not start; another program may be holding the port.`,"panel.onboarding.tunnelErrorHint":`{error} (check that the relay address is correct and that the relay is running.)`,"panel.onboarding.tunnelNoStart":`The tunnel did not come up; check the relay address.`,"panel.onboarding.pickAddress":`Which address your phone uses`,"panel.onboarding.relayAddressHint":`Relay address`,"panel.onboarding.recheckSaved":`The relay this machine uses, {url}, is unreachable right now. Check that the relay is running.`,"panel.onboarding.relayNoAnswer":`Nothing is answering at {value}. Check the domain and that dsh-relay is running.`,"panel.onboarding.relayNoAnswerUnsaved":`Nothing is answering at {value}; the configuration was not changed. Check the domain and that dsh-relay is running.`,"panel.onboarding.probe.empty":`No address yet`,"panel.onboarding.probe.busy":`Testing`,"panel.onboarding.probe.ok":`Reachable, not saved yet`,"panel.onboarding.probe.failed":`Unreachable`,"panel.onboarding.probe.idle":`Not tested yet`,"panel.onboarding.probe.okWithHint":`This address is reachable and the QR code was generated from it (not saved to the configuration yet).`,"panel.onboarding.checkFirewall":`Cannot connect? Check the firewall`,"panel.onboarding.lanDirect":`LAN direct`,"panel.onboarding.chooseAddress":`Choose address`,"panel.onboarding.setAddress":`Fill in address`,"panel.onboarding.publicRelay":`Public relay`,"panel.onboarding.publicRelayTemporary":`For temporary use`,"panel.onboarding.ownRelay":`Self-hosted relay`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Tunnel address`,"panel.onboarding.penetrationPlaceholder":`https://your-tunnel.example`,"panel.onboarding.githubRepo":`GitHub repository`,"panel.onboarding.currentLan":`Currently selected LAN address`,"panel.onboarding.public":`Public`,"panel.onboarding.ipv6More":`{count} more IPv6 addresses; your phone picks the fastest`,"panel.onboarding.collapse":`Collapse`,"panel.onboarding.expand":`Expand`,"panel.onboarding.relayListTitle":`Public relay addresses (by measured latency)`,"panel.onboarding.probing":`Measuring…`,"panel.onboarding.autoBest":`Auto (fastest)`,"panel.onboarding.autoBestHint":`Use the fastest one`,"panel.onboarding.probeUnreachable":`Unreachable`,"panel.onboarding.check":`Test`,"panel.onboarding.enterPlugin":`Enter plugin`,"panel.onboarding.connecting":`Connecting…`,"panel.onboarding.fixFirst":`Fix the problems above first`,"panel.onboarding.fillRelayFirst":`Enter the relay address first`,"panel.onboarding.opening":`Opening…`,"panel.onboarding.openDirect":`Open direct connection`,"panel.onboarding.connectRelay":`Connect relay`,"panel.onboarding.firewallTitle":`Check the firewall`,"panel.onboarding.firewallIntro":`When your phone cannot reach this computer’s direct port, the port is usually blocked on the computer. The default direct port is`,"panel.onboarding.firewallIntroTail":` (you can change it under “LAN direct” on the main page). Check it per system below.`,"panel.onboarding.copiedOk":`Copied — paste it into your AI.`,"panel.onboarding.copiedFailed":`Copy failed; select the text and copy it manually.`,"panel.onboarding.lanDialogTitle":`Choose a LAN address`,"panel.onboarding.lanDialogHint":`Your phone tries the selected one first and falls back to the rest.`,"panel.onboarding.referenceOnly":`For reference only`,"panel.onboarding.lanGroupA11y":`LAN addresses`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Tap to copy — let your own AI check it`,"panel.onboarding.copyPrompt":`Copy this troubleshooting prompt`,"panel.onboarding.linuxStep1":`1. Check the firewall status (firewalld or ufw — whichever is installed):`,"panel.onboarding.linuxStep2":`2. Allow the direct port:`,"panel.onboarding.linuxStep3":`3. On a cloud server also allow the same port in your provider’s console security group — it cannot be checked from this machine.`,"panel.onboarding.macStep1":`1. Check whether the application firewall is on:`,"panel.onboarding.macStep2":`2. If it is on, set DSH / node to “Allow incoming connections” under System Settings → Network → Firewall → Options; for troubleshooting you can turn it off entirely:`,"panel.onboarding.macStep3":`3. Still failing on the same Wi-Fi: make sure the phone and computer are really on the same subnet, not a guest network.`,"panel.onboarding.winStep1":`1. In PowerShell (administrator) list the firewall profiles:`,"panel.onboarding.winStep2":`2. Allow the direct port:`,"panel.onboarding.winStep3":`3. If you previously created a block rule for node, delete it; set the network type to Private rather than Public.`,"panel.onboarding.prompt.intro":`Help me troubleshoot a problem.`,"panel.onboarding.prompt.situation":`My situation: I have the DSH (DeepSeek Harness) mobile plugin installed on my computer, and the phone app cannot reach this computer over a direct LAN connection.`,"panel.onboarding.prompt.address":`The address entered on the phone is this computer’s LAN address plus port (you will need to read the exact address and port from the mobile plugin’s web page — note it must be the LAN address).`,"panel.onboarding.prompt.guess":`The computer side shows the plugin is listening, but the phone cannot connect. I believe the computer’s firewall (or a cloud security group) is blocking that port.`,"panel.onboarding.prompt.ask":`Please:`,"panel.onboarding.prompt.ask1":`1. First confirm whether my system is Linux, macOS or Windows (ask me if you are unsure, or tell me how to check).`,"panel.onboarding.prompt.ask2":`2. Walk me through the steps for my setup one by one and tell me whether that port is currently open and where it gets stuck.`,"panel.onboarding.prompt.ask3":`3. Give me the exact commands or click paths to allow the port, and say clearly where administrator rights are needed.`,"panel.onboarding.prompt.ask4":`4. Finally tell me how to verify it works (for example which command to run on the computer and on the phone).`,"panel.onboarding.prompt.extra":`Note: if this computer is a cloud server, the security group or firewall in the provider’s console must allow the same port too, and that cannot be checked locally.`,"panel.onboarding.relayPlaceholder":`https://your-relay.example`,"panel.onboarding.probe.failedBody":`This address cannot be reached, so no QR code will be generated. Check that it starts with http:// or https://, that the relay is running there, and that the domain resolves to it.`},ja:{"panel.onboarding.pairingHint":`スキャンして接続`,"panel.onboarding.statusFailed":`プラグインの状態を取得できません`,"panel.onboarding.stepFailed":`この手順は完了しませんでした`,"panel.onboarding.qrAfterRelay":`下のリレーのアドレスを入力すると`,"panel.onboarding.qrAfterRelayLine2":`ここに QR コードが表示されます`,"panel.onboarding.qrAfterAddress":`このアドレスに接続できると、ここに QR コードが表示されます`,"panel.onboarding.noQr":`QR コードを取得できません`,"panel.onboarding.preview":`入力したアドレスによるプレビューです。「プラグインに入る」を押すとこのアドレスが設定に保存されます。`,"panel.onboarding.relayNotConnected":`リレーにまだ接続していません。接続後にスキャンが有効になります。`,"panel.onboarding.direct":`直結`,"panel.onboarding.thisAddress":`このアドレス`,"panel.onboarding.lanFailed":`直結を開始できませんでした`,"panel.onboarding.relayFailed":`リレーに接続できません`,"panel.onboarding.lanErrorWithPort":`{error}(ポートが使用中の可能性があります。メイン画面の「LAN 直結」で別のポートに変更してください。)`,"panel.onboarding.lanNoStart":`直結が起動しませんでした。別のアプリがポートを使用している可能性があります。`,"panel.onboarding.tunnelErrorHint":`{error}(リレーのアドレスが正しいか、リレーが動いているかを確認してください。)`,"panel.onboarding.tunnelNoStart":`トンネルが確立しませんでした。リレーのアドレスを確認してください。`,"panel.onboarding.pickAddress":`スマートフォンが使うアドレス`,"panel.onboarding.relayAddressHint":`リレーのアドレス`,"panel.onboarding.recheckSaved":`このマシンが使っているリレー {url} に現在つながりません。リレーが動いているか確認してください。`,"panel.onboarding.relayNoAnswer":`リレーのアドレス {value} に応答がありません。ドメイン名と dsh-relay の稼働を確認してください。`,"panel.onboarding.relayNoAnswerUnsaved":`リレーのアドレス {value} に応答がないため、設定は変更していません。ドメイン名と dsh-relay の稼働を確認してください。`,"panel.onboarding.probe.empty":`アドレス未入力`,"panel.onboarding.probe.busy":`確認中`,"panel.onboarding.probe.ok":`接続できます(未保存)`,"panel.onboarding.probe.failed":`接続できません`,"panel.onboarding.probe.idle":`未確認`,"panel.onboarding.probe.okWithHint":`このアドレスに接続できます。QR コードはこのアドレスで生成済みです(設定には未保存)。`,"panel.onboarding.checkFirewall":`つながらない場合はファイアウォールを確認`,"panel.onboarding.lanDirect":`LAN 直結`,"panel.onboarding.chooseAddress":`アドレスを選択`,"panel.onboarding.setAddress":`アドレスを入力`,"panel.onboarding.publicRelay":`共用リレー`,"panel.onboarding.publicRelayTemporary":`一時利用に推奨`,"panel.onboarding.ownRelay":`自前のリレー`,"panel.onboarding.penetration":`トンネル`,"panel.onboarding.penetrationAddress":`トンネルのアドレス`,"panel.onboarding.penetrationPlaceholder":`https://トンネルのドメイン`,"panel.onboarding.githubRepo":`GitHub リポジトリ`,"panel.onboarding.currentLan":`現在選択中の LAN アドレス`,"panel.onboarding.public":`パブリック`,"panel.onboarding.ipv6More":`ほかに IPv6 アドレスが {count} 件。スマートフォンが実測で選択します`,"panel.onboarding.collapse":`たたむ`,"panel.onboarding.expand":`展開`,"panel.onboarding.relayListTitle":`共用リレーのアドレス(実測の所要時間順)`,"panel.onboarding.probing":`測定中…`,"panel.onboarding.autoBest":`自動(最速)`,"panel.onboarding.autoBestHint":`最も速いものを使用`,"panel.onboarding.probeUnreachable":`到達できません`,"panel.onboarding.check":`確認`,"panel.onboarding.enterPlugin":`プラグインに入る`,"panel.onboarding.connecting":`接続中…`,"panel.onboarding.fixFirst":`まず上の問題を解決してください`,"panel.onboarding.fillRelayFirst":`先にリレーのアドレスを入力`,"panel.onboarding.opening":`開いています…`,"panel.onboarding.openDirect":`直結を開く`,"panel.onboarding.connectRelay":`リレーに接続`,"panel.onboarding.firewallTitle":`ファイアウォールを確認`,"panel.onboarding.firewallIntro":`スマートフォンからこのパソコンの直結ポートにつながらない場合、多くはパソコン側でポートが塞がれています。直結の既定ポートは`,"panel.onboarding.firewallIntroTail":`(メイン画面の「LAN 直結」で変更できます)。以下をシステム別に確認してください。`,"panel.onboarding.copiedOk":`コピーしました。AI に貼り付けてください。`,"panel.onboarding.copiedFailed":`コピーに失敗しました。テキストを選択して手動でコピーしてください。`,"panel.onboarding.lanDialogTitle":`LAN アドレスを選択`,"panel.onboarding.lanDialogHint":`スマートフォンは選択したものを先に試し、残りは後続の候補になります。`,"panel.onboarding.referenceOnly":`参考用アドレス`,"panel.onboarding.lanGroupA11y":`LAN アドレス`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`クリックでコピー。自分の AI に確認させられます`,"panel.onboarding.copyPrompt":`このトラブルシュート用プロンプトをコピー`,"panel.onboarding.linuxStep1":`1. ファイアウォールの状態を確認(firewalld か ufw、入っている方):`,"panel.onboarding.linuxStep2":`2. 直結ポートを許可:`,"panel.onboarding.linuxStep3":`3. クラウドサーバーの場合は、事業者コンソールのセキュリティグループでも同じポートを許可してください(このマシンからは確認できません)。`,"panel.onboarding.macStep1":`1. アプリケーションファイアウォールが有効か確認:`,"panel.onboarding.macStep2":`2. 有効な場合は「システム設定 → ネットワーク → ファイアウォール → オプション」で DSH / node を「着信接続を許可」に設定。切り分け時は丸ごと切ることもできます:`,"panel.onboarding.macStep3":`3. 同じ Wi-Fi でもつながらない場合: スマートフォンとパソコンが同じサブネットにあるか(ゲストネットワークでないか)を確認してください。`,"panel.onboarding.winStep1":`1. PowerShell(管理者)でファイアウォールプロファイルを確認:`,"panel.onboarding.winStep2":`2. 直結ポートを許可:`,"panel.onboarding.winStep3":`3. 以前 node に拒否規則を作った場合はそれを削除し、ネットワークの種類を「パブリック」ではなく「プライベート」にしてください。`,"panel.onboarding.prompt.intro":`問題の切り分けを手伝ってください。`,"panel.onboarding.prompt.situation":`状況: パソコンに DSH(DeepSeek Harness)のモバイルプラグインを入れており、スマートフォンのアプリから LAN 直結でこのパソコンにつながりません。`,"panel.onboarding.prompt.address":`スマートフォンに入力したアドレスは、このパソコンの LAN アドレスとポートです(正確なアドレスとポートはモバイルプラグインの Web ページで確認してください。LAN アドレスである点に注意)。`,"panel.onboarding.prompt.guess":`パソコン側ではプラグインが待ち受けていると表示されていますが、スマートフォンからはつながりません。パソコンのファイアウォール(またはクラウドのセキュリティグループ)がこのポートを塞いでいると思います。`,"panel.onboarding.prompt.ask":`お願いします:`,"panel.onboarding.prompt.ask1":`1. まず私の環境が Linux / macOS / Windows のどれかを確認してください(不明なら私に聞くか、確認方法を教えてください)。`,"panel.onboarding.prompt.ask2":`2. 私の環境に合った手順を 1 つずつ確認し、そのポートが今通るのか、どこで止まっているのかを教えてください。`,"panel.onboarding.prompt.ask3":`3. ポートを許可するための具体的なコマンドやクリック手順を示してください。管理者権限が必要な箇所は明記してください。`,"panel.onboarding.prompt.ask4":`4. 最後に、通ったことを確認する方法(パソコン側とスマートフォン側それぞれで実行するコマンドなど)を教えてください。`,"panel.onboarding.prompt.extra":`補足: このパソコンがクラウドサーバーの場合、事業者コンソールのセキュリティグループ/ファイアウォールでも同じポートを許可する必要があり、それはローカルでは確認できません。`,"panel.onboarding.relayPlaceholder":`https://リレーのドメイン`,"panel.onboarding.probe.failedBody":`このアドレスに接続できないため、QR コードは生成されません。http:// または https:// で始まっているか、そのリレーが動作しているか、ドメインがそこを指しているかを確認してください。`},ko:{"panel.onboarding.pairingHint":`스캔하여 연결`,"panel.onboarding.statusFailed":`플러그인 상태를 읽을 수 없습니다`,"panel.onboarding.stepFailed":`이 단계가 완료되지 않았습니다`,"panel.onboarding.qrAfterRelay":`아래에 릴레이 주소를 입력하면`,"panel.onboarding.qrAfterRelayLine2":`여기에 QR 코드가 생성됩니다`,"panel.onboarding.qrAfterAddress":`이 주소에 연결되면 여기에 QR 코드가 생성됩니다`,"panel.onboarding.noQr":`QR 코드를 가져오지 못했습니다`,"panel.onboarding.preview":`입력한 주소로 만든 미리보기입니다. 「플러그인 들어가기」를 눌러야 이 주소가 설정에 저장됩니다.`,"panel.onboarding.relayNotConnected":`릴레이에 아직 연결되지 않았습니다. 연결된 뒤에야 스캔이 동작합니다.`,"panel.onboarding.direct":`직접 연결`,"panel.onboarding.thisAddress":`이 주소`,"panel.onboarding.lanFailed":`직접 연결을 시작하지 못했습니다`,"panel.onboarding.relayFailed":`릴레이에 연결되지 않았습니다`,"panel.onboarding.lanErrorWithPort":`{error} (포트가 사용 중일 수 있습니다. 메인 화면의 「LAN 직접 연결」에서 다른 포트로 바꾸세요.)`,"panel.onboarding.lanNoStart":`직접 연결이 시작되지 않았습니다. 다른 프로그램이 포트를 쓰고 있을 수 있습니다.`,"panel.onboarding.tunnelErrorHint":`{error} (릴레이 주소가 맞는지, 릴레이가 실행 중인지 확인하세요.)`,"panel.onboarding.tunnelNoStart":`터널이 만들어지지 않았습니다. 릴레이 주소를 확인하세요.`,"panel.onboarding.pickAddress":`휴대폰이 사용할 주소`,"panel.onboarding.relayAddressHint":`릴레이 주소`,"panel.onboarding.recheckSaved":`이 컴퓨터가 쓰는 릴레이 {url}에 지금 연결할 수 없습니다. 릴레이가 실행 중인지 확인하세요.`,"panel.onboarding.relayNoAnswer":`릴레이 주소 {value}에서 응답이 없습니다. 도메인과 dsh-relay 실행 여부를 확인하세요.`,"panel.onboarding.relayNoAnswerUnsaved":`릴레이 주소 {value}에서 응답이 없어 설정을 변경하지 않았습니다. 도메인과 dsh-relay 실행 여부를 확인하세요.`,"panel.onboarding.probe.empty":`주소를 아직 입력하지 않았습니다`,"panel.onboarding.probe.busy":`확인 중`,"panel.onboarding.probe.ok":`연결됩니다 (저장 전)`,"panel.onboarding.probe.failed":`연결되지 않습니다`,"panel.onboarding.probe.idle":`아직 확인하지 않았습니다`,"panel.onboarding.probe.okWithHint":`이 주소로 연결됩니다. QR 코드가 이 주소로 생성되었습니다(설정에는 아직 저장되지 않음).`,"panel.onboarding.checkFirewall":`연결되지 않나요? 방화벽을 확인하세요`,"panel.onboarding.lanDirect":`LAN 직접 연결`,"panel.onboarding.chooseAddress":`주소 선택`,"panel.onboarding.setAddress":`주소 입력`,"panel.onboarding.publicRelay":`공용 릴레이`,"panel.onboarding.publicRelayTemporary":`임시 사용 권장`,"panel.onboarding.ownRelay":`자가 호스팅 릴레이`,"panel.onboarding.penetration":`터널`,"panel.onboarding.penetrationAddress":`터널 주소`,"panel.onboarding.penetrationPlaceholder":`https://터널-도메인`,"panel.onboarding.githubRepo":`GitHub 저장소`,"panel.onboarding.currentLan":`현재 선택된 LAN 주소`,"panel.onboarding.public":`공인`,"panel.onboarding.ipv6More":`IPv6 주소가 {count}개 더 있습니다. 휴대폰이 실측으로 선택합니다`,"panel.onboarding.collapse":`접기`,"panel.onboarding.expand":`펼치기`,"panel.onboarding.relayListTitle":`공용 릴레이 주소(실측 지연 순)`,"panel.onboarding.probing":`측정 중…`,"panel.onboarding.autoBest":`자동(가장 빠른 것)`,"panel.onboarding.autoBestHint":`가장 빠른 것을 사용`,"panel.onboarding.probeUnreachable":`연결되지 않음`,"panel.onboarding.check":`확인`,"panel.onboarding.enterPlugin":`플러그인 들어가기`,"panel.onboarding.connecting":`연결 중…`,"panel.onboarding.fixFirst":`위 문제를 먼저 해결하세요`,"panel.onboarding.fillRelayFirst":`릴레이 주소를 먼저 입력하세요`,"panel.onboarding.opening":`여는 중…`,"panel.onboarding.openDirect":`직접 연결 열기`,"panel.onboarding.connectRelay":`릴레이 연결`,"panel.onboarding.firewallTitle":`방화벽 확인`,"panel.onboarding.firewallIntro":`휴대폰에서 이 컴퓨터의 직접 연결 포트로 접속되지 않을 때는 대개 컴퓨터 쪽에서 포트가 막혀 있습니다. 기본 직접 연결 포트는`,"panel.onboarding.firewallIntroTail":` (메인 화면의 「LAN 직접 연결」에서 바꿀 수 있습니다). 아래에서 시스템별로 확인하세요.`,"panel.onboarding.copiedOk":`복사했습니다. AI에 붙여 넣으세요.`,"panel.onboarding.copiedFailed":`복사하지 못했습니다. 텍스트를 선택해 직접 복사하세요.`,"panel.onboarding.lanDialogTitle":`LAN 주소 선택`,"panel.onboarding.lanDialogHint":`휴대폰은 선택한 주소를 먼저 시도하고 나머지는 뒤에서 대비합니다.`,"panel.onboarding.referenceOnly":`참고용 주소`,"panel.onboarding.lanGroupA11y":`LAN 주소`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`클릭하여 복사하고 자기 AI에게 확인시키세요`,"panel.onboarding.copyPrompt":`이 문제 진단 프롬프트 복사`,"panel.onboarding.linuxStep1":`1. 방화벽 상태 확인(firewalld 또는 ufw, 설치된 것):`,"panel.onboarding.linuxStep2":`2. 직접 연결 포트 허용:`,"panel.onboarding.linuxStep3":`3. 클라우드 서버라면 사업자 콘솔의 보안 그룹에서도 같은 포트를 허용해야 합니다 — 이 컴퓨터에서는 확인할 수 없습니다.`,"panel.onboarding.macStep1":`1. 애플리케이션 방화벽이 켜져 있는지 확인:`,"panel.onboarding.macStep2":`2. 켜져 있다면 시스템 설정 → 네트워크 → 방화벽 → 옵션에서 DSH / node를 「수신 연결 허용」으로 설정하세요. 진단 중에는 아예 꺼도 됩니다:`,"panel.onboarding.macStep3":`3. 같은 Wi-Fi에서도 안 되면 휴대폰과 컴퓨터가 실제로 같은 서브넷인지(게스트 네트워크가 아닌지) 확인하세요.`,"panel.onboarding.winStep1":`1. PowerShell(관리자)에서 방화벽 프로필 확인:`,"panel.onboarding.winStep2":`2. 직접 연결 포트 허용:`,"panel.onboarding.winStep3":`3. 예전에 node에 차단 규칙을 만들었다면 그 Block 규칙을 삭제하고, 네트워크 종류를 「공용」이 아닌 「전용」으로 설정하세요.`,"panel.onboarding.prompt.intro":`문제 하나를 진단해 주세요.`,"panel.onboarding.prompt.situation":`상황: 컴퓨터에 DSH(DeepSeek Harness) 모바일 플러그인이 설치되어 있고, 휴대폰 앱에서 LAN 직접 연결로 이 컴퓨터에 접속되지 않습니다.`,"panel.onboarding.prompt.address":`휴대폰에 입력한 주소는 이 컴퓨터의 LAN 주소와 포트입니다(정확한 주소와 포트는 모바일 플러그인의 웹 페이지에서 확인해야 하며, LAN 주소여야 합니다).`,"panel.onboarding.prompt.guess":`컴퓨터 쪽에서는 플러그인이 수신 대기 중이라고 표시되지만 휴대폰에서는 접속되지 않습니다. 컴퓨터 방화벽(또는 클라우드 보안 그룹)이 그 포트를 막고 있다고 생각합니다.`,"panel.onboarding.prompt.ask":`요청 사항:`,"panel.onboarding.prompt.ask1":`1. 먼저 제 시스템이 Linux / macOS / Windows 중 무엇인지 확인해 주세요(모르면 저에게 물어보거나 확인 방법을 알려주세요).`,"panel.onboarding.prompt.ask2":`2. 제 환경에 맞는 절차를 하나씩 확인하고, 그 포트가 지금 열려 있는지 어디서 막히는지 알려주세요.`,"panel.onboarding.prompt.ask3":`3. 포트를 허용할 구체적인 명령이나 클릭 경로를 제시하고, 관리자 권한이 필요한 곳은 분명히 알려주세요.`,"panel.onboarding.prompt.ask4":`4. 마지막으로 잘 되는지 확인하는 방법(컴퓨터와 휴대폰에서 각각 실행할 명령 등)을 알려주세요.`,"panel.onboarding.prompt.extra":`참고: 이 컴퓨터가 클라우드 서버라면 사업자 콘솔의 보안 그룹/방화벽에서도 같은 포트를 허용해야 하며, 이는 로컬에서 확인할 수 없습니다.`,"panel.onboarding.relayPlaceholder":`https://릴레이-도메인`,"panel.onboarding.probe.failedBody":`이 주소에 연결할 수 없어 QR 코드가 생성되지 않습니다. http:// 또는 https://로 시작하는지, 해당 릴레이가 실행 중인지, 도메인이 이 주소를 가리키는지 확인하세요.`},de:{"panel.onboarding.pairingHint":`Zum Verbinden scannen`,"panel.onboarding.statusFailed":`Plugin-Status nicht lesbar`,"panel.onboarding.stepFailed":`Dieser Schritt hat nicht geklappt`,"panel.onboarding.qrAfterRelay":`Sobald du die Relay-Adresse unten einträgst`,"panel.onboarding.qrAfterRelayLine2":`erscheint hier der QR-Code`,"panel.onboarding.qrAfterAddress":`Sobald diese Adresse verbunden ist, erscheint hier der QR-Code`,"panel.onboarding.noQr":`Noch kein QR-Code`,"panel.onboarding.preview":`Diese Vorschau nutzt die Adresse, die du eingetippt hast. Erst „Plugin öffnen“ speichert sie in der Konfiguration.`,"panel.onboarding.relayNotConnected":`Das Relay ist noch nicht verbunden; Scannen hilft erst danach.`,"panel.onboarding.direct":`Direkt`,"panel.onboarding.thisAddress":`Diese Adresse`,"panel.onboarding.lanFailed":`Direktverbindung konnte nicht starten`,"panel.onboarding.relayFailed":`Relay nicht verbunden`,"panel.onboarding.lanErrorWithPort":`{error} (der Port ist evtl. belegt — wähle auf der Startseite unter „LAN direkt“ einen anderen.)`,"panel.onboarding.lanNoStart":`Der Direkt-Listener startete nicht; ein anderes Programm hält den Port evtl. belegt.`,"panel.onboarding.tunnelErrorHint":`{error} (prüfe, ob die Relay-Adresse stimmt und das Relay läuft.)`,"panel.onboarding.tunnelNoStart":`Der Tunnel kam nicht zustande; prüfe die Relay-Adresse.`,"panel.onboarding.pickAddress":`Welche Adresse das Handy nutzt`,"panel.onboarding.relayAddressHint":`Relay-Adresse`,"panel.onboarding.recheckSaved":`Das Relay, das dieser Rechner nutzt, {url}, ist gerade nicht erreichbar. Prüfe, ob das Relay läuft.`,"panel.onboarding.relayNoAnswer":`Unter {value} antwortet kein Relay. Prüfe die Domain und ob dsh-relay läuft.`,"panel.onboarding.relayNoAnswerUnsaved":`Unter {value} antwortet kein Relay; die Konfiguration wurde nicht geändert. Prüfe die Domain und ob dsh-relay läuft.`,"panel.onboarding.probe.empty":`Noch keine Adresse`,"panel.onboarding.probe.busy":`Wird geprüft`,"panel.onboarding.probe.ok":`Erreichbar, noch nicht gespeichert`,"panel.onboarding.probe.failed":`Nicht erreichbar`,"panel.onboarding.probe.idle":`Noch nicht geprüft`,"panel.onboarding.probe.okWithHint":`Diese Adresse ist erreichbar, der QR-Code wurde daraus erzeugt (noch nicht in der Konfiguration gespeichert).`,"panel.onboarding.checkFirewall":`Keine Verbindung? Firewall prüfen`,"panel.onboarding.lanDirect":`LAN direkt`,"panel.onboarding.chooseAddress":`Adresse wählen`,"panel.onboarding.setAddress":`Adresse eingeben`,"panel.onboarding.publicRelay":`Öffentliches Relay`,"panel.onboarding.publicRelayTemporary":`Nur vorübergehend`,"panel.onboarding.ownRelay":`Eigenes Relay`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Tunnel-Adresse`,"panel.onboarding.penetrationPlaceholder":`https://deine-tunnel-domain.example`,"panel.onboarding.githubRepo":`GitHub-Repository`,"panel.onboarding.currentLan":`Aktuell gewählte LAN-Adresse`,"panel.onboarding.public":`Öffentlich`,"panel.onboarding.ipv6More":`{count} weitere IPv6-Adressen; dein Handy nimmt die schnellste`,"panel.onboarding.collapse":`Einklappen`,"panel.onboarding.expand":`Ausklappen`,"panel.onboarding.relayListTitle":`Öffentliche Relay-Adressen (nach gemessener Latenz)`,"panel.onboarding.probing":`Messung…`,"panel.onboarding.autoBest":`Auto (schnellste)`,"panel.onboarding.autoBestHint":`Die schnellste nehmen`,"panel.onboarding.probeUnreachable":`Nicht erreichbar`,"panel.onboarding.check":`Prüfen`,"panel.onboarding.enterPlugin":`Plugin öffnen`,"panel.onboarding.connecting":`Verbindung…`,"panel.onboarding.fixFirst":`Behebe zuerst die Probleme oben`,"panel.onboarding.fillRelayFirst":`Zuerst Relay-Adresse eintragen`,"panel.onboarding.opening":`Wird geöffnet…`,"panel.onboarding.openDirect":`Direktverbindung öffnen`,"panel.onboarding.connectRelay":`Relay verbinden`,"panel.onboarding.firewallTitle":`Firewall prüfen`,"panel.onboarding.firewallIntro":`Wenn dein Handy den Direkt-Port dieses Rechners nicht erreicht, blockiert meist der Rechner den Port. Standard-Direkt-Port:`,"panel.onboarding.firewallIntroTail":` (änderbar auf der Startseite unter „LAN direkt“). Prüfe es je System unten.`,"panel.onboarding.copiedOk":`Kopiert — füge es in deine KI ein.`,"panel.onboarding.copiedFailed":`Kopieren fehlgeschlagen; markiere den Text und kopiere ihn von Hand.`,"panel.onboarding.lanDialogTitle":`LAN-Adresse wählen`,"panel.onboarding.lanDialogHint":`Das Handy versucht zuerst die gewählte und weicht dann auf die übrigen aus.`,"panel.onboarding.referenceOnly":`Nur zur Orientierung`,"panel.onboarding.lanGroupA11y":`LAN-Adressen`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Tippen zum Kopieren — dann deine eigene KI prüfen lassen`,"panel.onboarding.copyPrompt":`Diesen Fehlersuche-Prompt kopieren`,"panel.onboarding.linuxStep1":`1. Firewall-Status prüfen (firewalld oder ufw, je nachdem was installiert ist):`,"panel.onboarding.linuxStep2":`2. Direkt-Port freigeben:`,"panel.onboarding.linuxStep3":`3. Auf einem Cloud-Server denselben Port zusätzlich in der Security-Group der Anbieter-Konsole freigeben — von diesem Rechner aus nicht prüfbar.`,"panel.onboarding.macStep1":`1. Prüfen, ob die Anwendungsfirewall an ist:`,"panel.onboarding.macStep2":`2. Wenn ja, DSH / node unter Systemeinstellungen → Netzwerk → Firewall → Optionen auf „Eingehende Verbindungen zulassen“ stellen; zur Fehlersuche kannst du sie ganz abschalten:`,"panel.onboarding.macStep3":`3. Geht es im selben WLAN weiterhin nicht: prüfe, ob Handy und Rechner wirklich im selben Subnetz sind und nicht im Gastnetz.`,"panel.onboarding.winStep1":`1. In PowerShell (Administrator) die Firewall-Profile auflisten:`,"panel.onboarding.winStep2":`2. Direkt-Port freigeben:`,"panel.onboarding.winStep3":`3. Falls du früher eine Block-Regel für node erstellt hast, lösche sie; Netzwerktyp auf „Privat“ statt „Öffentlich“ stellen.`,"panel.onboarding.prompt.intro":`Hilf mir, ein Problem zu finden.`,"panel.onboarding.prompt.situation":`Meine Situation: Auf meinem Rechner ist das Mobile-Plugin von DSH (DeepSeek Harness) installiert, und die Handy-App erreicht diesen Rechner nicht über eine direkte LAN-Verbindung.`,"panel.onboarding.prompt.address":`Die im Handy eingetragene Adresse ist die LAN-Adresse dieses Rechners plus Port (die genauen Adress- und Portdaten siehst du auf der Webseite des Mobile-Plugins — es muss die LAN-Adresse sein).`,"panel.onboarding.prompt.guess":`Am Rechner meldet das Plugin, dass es lauscht, aber das Handy verbindet nicht. Ich vermute, die Firewall (oder die Sicherheitsgruppe des Cloud-Servers) blockiert den Port.`,"panel.onboarding.prompt.ask":`Bitte:`,"panel.onboarding.prompt.ask1":`1. Prüfe zuerst, ob mein System Linux, macOS oder Windows ist (frag mich, wenn du unsicher bist, oder sag mir, wie ich es prüfe).`,"panel.onboarding.prompt.ask2":`2. Geh die Schritte für mein Setup einzeln durch und sag mir, ob der Port offen ist und wo es hakt.`,"panel.onboarding.prompt.ask3":`3. Nenne die genauen Befehle oder Klickpfade, um den Port freizugeben, und sag klar, wo Administratorrechte nötig sind.`,"panel.onboarding.prompt.ask4":`4. Sag mir zum Schluss, wie ich prüfe, dass es geht (z. B. mit welchem Befehl am Rechner und am Handy).`,"panel.onboarding.prompt.extra":`Nachtrag: Ist dieser Rechner ein Cloud-Server, muss auch die Sicherheitsgruppe bzw. Firewall in der Konsole des Anbieters denselben Port freigeben — das ist lokal nicht prüfbar.`,"panel.onboarding.relayPlaceholder":`https://deine.relay-domain`,"panel.onboarding.probe.failedBody":`Diese Adresse ist nicht erreichbar, es wird kein QR-Code erzeugt. Prüf, ob sie mit http:// oder https:// beginnt, ob das Relay läuft und ob die Domain darauf zeigt.`},es:{"panel.onboarding.pairingHint":`Escanea para conectar`,"panel.onboarding.statusFailed":`No se pudo leer el estado del complemento`,"panel.onboarding.stepFailed":`Ese paso no salió bien`,"panel.onboarding.qrAfterRelay":`Cuando rellenes la dirección del retransmisor abajo`,"panel.onboarding.qrAfterRelayLine2":`aquí aparecerá el código QR`,"panel.onboarding.qrAfterAddress":`Cuando esta dirección se conecte, aquí aparecerá el código QR`,"panel.onboarding.noQr":`Aún no hay código QR`,"panel.onboarding.preview":`Esta vista previa usa la dirección que escribiste. Solo al pulsar «Entrar al complemento» se guarda en la configuración.`,"panel.onboarding.relayNotConnected":`El retransmisor aún no está conectado; escanear solo sirve cuando lo esté.`,"panel.onboarding.direct":`Directa`,"panel.onboarding.thisAddress":`Esta dirección`,"panel.onboarding.lanFailed":`No se pudo iniciar la conexión directa`,"panel.onboarding.relayFailed":`Retransmisor no conectado`,"panel.onboarding.lanErrorWithPort":`{error} (puede que el puerto esté ocupado: elige otro en «LAN directa» de la página principal).`,"panel.onboarding.lanNoStart":`El receptor directo no arrancó; puede que otro programa esté usando el puerto.`,"panel.onboarding.tunnelErrorHint":`{error} (comprueba que la dirección del retransmisor sea correcta y que esté en marcha).`,"panel.onboarding.tunnelNoStart":`El túnel no se levantó; revisa la dirección del retransmisor.`,"panel.onboarding.pickAddress":`Qué dirección usa el teléfono`,"panel.onboarding.relayAddressHint":`Dirección del retransmisor`,"panel.onboarding.recheckSaved":`El retransmisor que usa este equipo, {url}, no responde ahora. Comprueba que esté en marcha.`,"panel.onboarding.relayNoAnswer":`En {value} no responde ningún retransmisor. Revisa el dominio y que dsh-relay esté en marcha.`,"panel.onboarding.relayNoAnswerUnsaved":`En {value} no responde ningún retransmisor y la configuración no se cambió. Revisa el dominio y que dsh-relay esté en marcha.`,"panel.onboarding.probe.empty":`Aún sin dirección`,"panel.onboarding.probe.busy":`Probando`,"panel.onboarding.probe.ok":`Se conecta, aún sin guardar`,"panel.onboarding.probe.failed":`No se conecta`,"panel.onboarding.probe.idle":`Sin probar aún`,"panel.onboarding.probe.okWithHint":`Esta dirección se conecta y el código QR se generó con ella (aún no está guardada en la configuración).`,"panel.onboarding.checkFirewall":`¿No conecta? Revisa el cortafuegos`,"panel.onboarding.lanDirect":`LAN directa`,"panel.onboarding.chooseAddress":`Elegir dirección`,"panel.onboarding.setAddress":`Escribir dirección`,"panel.onboarding.publicRelay":`Retransmisor público`,"panel.onboarding.publicRelayTemporary":`Para uso temporal`,"panel.onboarding.ownRelay":`Retransmisor propio`,"panel.onboarding.penetration":`Túnel`,"panel.onboarding.penetrationAddress":`Dirección del túnel`,"panel.onboarding.penetrationPlaceholder":`https://tu-dominio-tunel.example`,"panel.onboarding.githubRepo":`Repositorio de GitHub`,"panel.onboarding.currentLan":`Dirección LAN elegida ahora`,"panel.onboarding.public":`Pública`,"panel.onboarding.ipv6More":`{count} direcciones IPv6 más; tu teléfono elige la más rápida`,"panel.onboarding.collapse":`Contraer`,"panel.onboarding.expand":`Desplegar`,"panel.onboarding.relayListTitle":`Direcciones de retransmisor públicas (por latencia medida)`,"panel.onboarding.probing":`Midiendo…`,"panel.onboarding.autoBest":`Auto (más rápida)`,"panel.onboarding.autoBestHint":`Usar la más rápida`,"panel.onboarding.probeUnreachable":`No responde`,"panel.onboarding.check":`Probar`,"panel.onboarding.enterPlugin":`Entrar al complemento`,"panel.onboarding.connecting":`Conectando…`,"panel.onboarding.fixFirst":`Resuelve primero los problemas de arriba`,"panel.onboarding.fillRelayFirst":`Primero pon la dirección del retransmisor`,"panel.onboarding.opening":`Abriendo…`,"panel.onboarding.openDirect":`Abrir conexión directa`,"panel.onboarding.connectRelay":`Conectar retransmisor`,"panel.onboarding.firewallTitle":`Revisar el cortafuegos`,"panel.onboarding.firewallIntro":`Si tu teléfono no alcanza el puerto directo de este ordenador, normalmente el propio ordenador lo bloquea. El puerto directo predeterminado es`,"panel.onboarding.firewallIntroTail":` (se puede cambiar en «LAN directa» de la página principal). Compruébalo según tu sistema abajo.`,"panel.onboarding.copiedOk":`Copiado: pégalo en tu IA.`,"panel.onboarding.copiedFailed":`No se pudo copiar; selecciona el texto y cópialo a mano.`,"panel.onboarding.lanDialogTitle":`Elegir una dirección LAN`,"panel.onboarding.lanDialogHint":`Tu teléfono prueba primero la elegida y recurre al resto.`,"panel.onboarding.referenceOnly":`Solo como referencia`,"panel.onboarding.lanGroupA11y":`Direcciones LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Toca para copiar y que tu propia IA lo revise`,"panel.onboarding.copyPrompt":`Copiar este mensaje de diagnóstico`,"panel.onboarding.linuxStep1":`1. Mira el estado del cortafuegos (firewalld o ufw, el que tengas):`,"panel.onboarding.linuxStep2":`2. Permite el puerto directo:`,"panel.onboarding.linuxStep3":`3. En un servidor en la nube, permite también el mismo puerto en el grupo de seguridad de la consola del proveedor: no se puede comprobar desde este equipo.`,"panel.onboarding.macStep1":`1. Comprueba si el cortafuegos de aplicaciones está activo:`,"panel.onboarding.macStep2":`2. Si lo está, en Ajustes del sistema → Red → Cortafuegos → Opciones pon DSH / node en «Permitir conexiones entrantes»; para diagnosticar puedes desactivarlo del todo:`,"panel.onboarding.macStep3":`3. Si sigue sin ir en la misma Wi-Fi: asegúrate de que el teléfono y el ordenador están en la misma subred y no en una red de invitados.`,"panel.onboarding.winStep1":`1. En PowerShell (administrador) lista los perfiles del cortafuegos:`,"panel.onboarding.winStep2":`2. Permite el puerto directo:`,"panel.onboarding.winStep3":`3. Si antes creaste una regla de bloqueo para node, bórrala; pon el tipo de red en «Privada», no «Pública».`,"panel.onboarding.prompt.intro":`Ayúdame a diagnosticar un problema.`,"panel.onboarding.prompt.situation":`Mi caso: tengo instalado el complemento móvil de DSH (DeepSeek Harness) en el ordenador y la app del teléfono no puede llegar a este ordenador por conexión directa en la LAN.`,"panel.onboarding.prompt.address":`La dirección que puse en el teléfono es la dirección LAN de este ordenador más el puerto (la dirección y el puerto exactos están en la página web del complemento móvil; debe ser la dirección LAN).`,"panel.onboarding.prompt.guess":`En el ordenador el complemento dice que está escuchando, pero el teléfono no conecta. Creo que el cortafuegos (o el grupo de seguridad del servidor en la nube) bloquea ese puerto.`,"panel.onboarding.prompt.ask":`Por favor:`,"panel.onboarding.prompt.ask1":`1. Primero confirma si mi sistema es Linux, macOS o Windows (si no estás seguro, pregúntame o dime cómo comprobarlo).`,"panel.onboarding.prompt.ask2":`2. Repasa paso a paso las etapas de mi configuración y dime si ese puerto está abierto y dónde se atasca.`,"panel.onboarding.prompt.ask3":`3. Dame los comandos o rutas de clic exactos para abrir el puerto y di claramente dónde hacen falta permisos de administrador.`,"panel.onboarding.prompt.ask4":`4. Por último, dime cómo comprobar que ya funciona (por ejemplo, qué comando usar en el ordenador y en el teléfono).`,"panel.onboarding.prompt.extra":`Nota: si este ordenador es un servidor en la nube, el grupo de seguridad o cortafuegos de la consola del proveedor también debe abrir el mismo puerto, y eso no se ve desde la máquina.`,"panel.onboarding.relayPlaceholder":`https://tu.dominio-relay`,"panel.onboarding.probe.failedBody":`No se puede acceder a esta dirección, así que no se generará el código QR. Comprueba que empiece por http:// o https://, que el relay esté en marcha y que el dominio apunte a él.`},fr:{"panel.onboarding.pairingHint":`Scanne pour te connecter`,"panel.onboarding.statusFailed":`Impossible de lire l'état du greffon`,"panel.onboarding.stepFailed":`Cette étape n'a pas réussi`,"panel.onboarding.qrAfterRelay":`Une fois l'adresse du relais saisie ci-dessous`,"panel.onboarding.qrAfterRelayLine2":`le QR code apparaîtra ici`,"panel.onboarding.qrAfterAddress":`Une fois cette adresse connectée, le QR code apparaîtra ici`,"panel.onboarding.noQr":`Pas encore de QR code`,"panel.onboarding.preview":`Cet aperçu utilise l'adresse que tu as saisie. Seul « Entrer dans le greffon » l'enregistre dans la configuration.`,"panel.onboarding.relayNotConnected":`Le relais n'est pas encore connecté ; le scan ne marchera qu'ensuite.`,"panel.onboarding.direct":`Directe`,"panel.onboarding.thisAddress":`Cette adresse`,"panel.onboarding.lanFailed":`Impossible de lancer la connexion directe`,"panel.onboarding.relayFailed":`Relais non connecté`,"panel.onboarding.lanErrorWithPort":`{error} (le port est peut-être pris — choisis-en un autre dans « LAN direct » sur la page d'accueil.)`,"panel.onboarding.lanNoStart":`L'écoute directe n'a pas démarré ; un autre programme occupe peut-être le port.`,"panel.onboarding.tunnelErrorHint":`{error} (vérifie que l'adresse du relais est correcte et que le relais tourne.)`,"panel.onboarding.tunnelNoStart":`Le tunnel ne s'est pas monté ; vérifie l'adresse du relais.`,"panel.onboarding.pickAddress":`Quelle adresse le téléphone utilise`,"panel.onboarding.relayAddressHint":`Adresse du relais`,"panel.onboarding.recheckSaved":`Le relais qu'utilise cette machine, {url}, est injoignable pour l'instant. Vérifie qu'il tourne.`,"panel.onboarding.relayNoAnswer":`Rien ne répond sur {value}. Vérifie le domaine et que dsh-relay tourne.`,"panel.onboarding.relayNoAnswerUnsaved":`Rien ne répond sur {value} ; la configuration n'a pas changé. Vérifie le domaine et que dsh-relay tourne.`,"panel.onboarding.probe.empty":`Pas encore d'adresse`,"panel.onboarding.probe.busy":`Test en cours`,"panel.onboarding.probe.ok":`Joignable, pas encore enregistrée`,"panel.onboarding.probe.failed":`Injoignable`,"panel.onboarding.probe.idle":`Pas encore testée`,"panel.onboarding.probe.okWithHint":`Cette adresse est joignable et le QR code a été généré à partir d'elle (pas encore enregistrée dans la configuration).`,"panel.onboarding.checkFirewall":`Pas de connexion ? Vérifie le pare-feu`,"panel.onboarding.lanDirect":`LAN direct`,"panel.onboarding.chooseAddress":`Choisir l'adresse`,"panel.onboarding.setAddress":`Saisir l’adresse`,"panel.onboarding.publicRelay":`Relais public`,"panel.onboarding.publicRelayTemporary":`Usage temporaire`,"panel.onboarding.ownRelay":`Relais auto-hébergé`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Adresse du tunnel`,"panel.onboarding.penetrationPlaceholder":`https://ton-domaine-tunnel.example`,"panel.onboarding.githubRepo":`Dépôt GitHub`,"panel.onboarding.currentLan":`Adresse LAN choisie`,"panel.onboarding.public":`Publique`,"panel.onboarding.ipv6More":`{count} autres adresses IPv6 ; ton téléphone prend la plus rapide`,"panel.onboarding.collapse":`Réduire`,"panel.onboarding.expand":`Développer`,"panel.onboarding.relayListTitle":`Adresses de relais publics (par latence mesurée)`,"panel.onboarding.probing":`Mesure…`,"panel.onboarding.autoBest":`Auto (plus rapide)`,"panel.onboarding.autoBestHint":`Prendre la plus rapide`,"panel.onboarding.probeUnreachable":`Injoignable`,"panel.onboarding.check":`Tester`,"panel.onboarding.enterPlugin":`Entrer dans le greffon`,"panel.onboarding.connecting":`Connexion…`,"panel.onboarding.fixFirst":`Règle d'abord les problèmes ci-dessus`,"panel.onboarding.fillRelayFirst":`Saisis d'abord l'adresse du relais`,"panel.onboarding.opening":`Ouverture…`,"panel.onboarding.openDirect":`Ouvrir la connexion directe`,"panel.onboarding.connectRelay":`Connecter le relais`,"panel.onboarding.firewallTitle":`Vérifier le pare-feu`,"panel.onboarding.firewallIntro":`Si ton téléphone n'atteint pas le port direct de cet ordinateur, c'est souvent l'ordinateur qui bloque le port. Le port direct par défaut est`,"panel.onboarding.firewallIntroTail":` (modifiable dans « LAN direct » sur la page d'accueil). Vérifie selon ton système ci-dessous.`,"panel.onboarding.copiedOk":`Copié — colle-le dans ton IA.`,"panel.onboarding.copiedFailed":`Échec de la copie ; sélectionne le texte et copie-le à la main.`,"panel.onboarding.lanDialogTitle":`Choisir une adresse LAN`,"panel.onboarding.lanDialogHint":`Ton téléphone essaie d'abord celle qui est choisie, puis se rabat sur les autres.`,"panel.onboarding.referenceOnly":`Pour information`,"panel.onboarding.lanGroupA11y":`Adresses LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Touche pour copier, puis laisse ton IA vérifier`,"panel.onboarding.copyPrompt":`Copier ce message de dépannage`,"panel.onboarding.linuxStep1":`1. Regarde l'état du pare-feu (firewalld ou ufw, selon ce qui est installé) :`,"panel.onboarding.linuxStep2":`2. Autorise le port direct :`,"panel.onboarding.linuxStep3":`3. Sur un serveur cloud, autorise aussi le même port dans le groupe de sécurité de la console du fournisseur — impossible à vérifier depuis cette machine.`,"panel.onboarding.macStep1":`1. Vérifie si le pare-feu d'applications est activé :`,"panel.onboarding.macStep2":`2. S'il l'est, dans Réglages Système → Réseau → Pare-feu → Options, mets DSH / node sur « Autoriser les connexions entrantes » ; pour le diagnostic tu peux le désactiver complètement :`,"panel.onboarding.macStep3":`3. Toujours bloqué sur le même Wi-Fi : vérifie que le téléphone et l'ordinateur sont bien sur le même sous-réseau, pas sur un réseau invité.`,"panel.onboarding.winStep1":`1. Dans PowerShell (administrateur), liste les profils de pare-feu :`,"panel.onboarding.winStep2":`2. Autorise le port direct :`,"panel.onboarding.winStep3":`3. Si tu as déjà créé une règle de blocage pour node, supprime-la ; choisis le type de réseau « Privé » et non « Public ».`,"panel.onboarding.prompt.intro":`Aide-moi à dépanner un problème.`,"panel.onboarding.prompt.situation":`Ma situation : le greffon mobile de DSH (DeepSeek Harness) est installé sur mon ordinateur, et l'app du téléphone n'arrive pas à joindre cet ordinateur en connexion directe sur le LAN.`,"panel.onboarding.prompt.address":`L'adresse saisie sur le téléphone est l'adresse LAN de cet ordinateur suivie du port (les adresse et port exacts sont sur la page web du greffon mobile ; il faut bien l'adresse LAN).`,"panel.onboarding.prompt.guess":`Sur l'ordinateur, le greffon indique qu'il écoute, mais le téléphone ne se connecte pas. Je pense que le pare-feu (ou le groupe de sécurité du serveur cloud) bloque ce port.`,"panel.onboarding.prompt.ask":`Peux-tu :`,"panel.onboarding.prompt.ask1":`1. Vérifie d'abord si mon système est Linux, macOS ou Windows (si tu n'es pas sûr, demande-moi ou dis-moi comment vérifier).`,"panel.onboarding.prompt.ask2":`2. Passe en revue une par une les étapes de ma configuration et dis-moi si ce port est ouvert et où ça bloque.`,"panel.onboarding.prompt.ask3":`3. Donne les commandes ou chemins de clic exacts pour ouvrir le port, et précise clairement où il faut des droits d'administrateur.`,"panel.onboarding.prompt.ask4":`4. Enfin, dis-moi comment vérifier que ça marche (par exemple quelle commande lancer sur l'ordinateur et sur le téléphone).`,"panel.onboarding.prompt.extra":`Remarque : si cet ordinateur est un serveur cloud, le groupe de sécurité ou le pare-feu de la console du fournisseur doit aussi ouvrir le même port, et ça ne se voit pas en local.`,"panel.onboarding.relayPlaceholder":`https://ton.domaine-relais`,"panel.onboarding.probe.failedBody":`Cette adresse est injoignable, aucun code QR ne sera généré. Vérifie qu'elle commence par http:// ou https://, que le relais tourne et que le domaine pointe dessus.`},pt:{"panel.onboarding.pairingHint":`Escaneie para conectar`,"panel.onboarding.statusFailed":`Não foi possível ler o status do plugin`,"panel.onboarding.stepFailed":`Esse passo não deu certo`,"panel.onboarding.qrAfterRelay":`Depois de preencher o endereço do relay abaixo`,"panel.onboarding.qrAfterRelayLine2":`o QR code aparece aqui`,"panel.onboarding.qrAfterAddress":`Quando este endereço conectar, o QR code aparece aqui`,"panel.onboarding.noQr":`Ainda sem QR code`,"panel.onboarding.preview":`Esta prévia usa o endereço que você digitou. Só «Entrar no plugin» salva esse endereço na configuração.`,"panel.onboarding.relayNotConnected":`O relay ainda não está conectado; escanear só funciona depois disso.`,"panel.onboarding.direct":`Direta`,"panel.onboarding.thisAddress":`Este endereço`,"panel.onboarding.lanFailed":`Não foi possível iniciar a conexão direta`,"panel.onboarding.relayFailed":`Relay não conectado`,"panel.onboarding.lanErrorWithPort":`{error} (a porta pode estar ocupada — escolha outra em «LAN direta» na página inicial.)`,"panel.onboarding.lanNoStart":`O listener direto não iniciou; outro programa pode estar usando a porta.`,"panel.onboarding.tunnelErrorHint":`{error} (confira se o endereço do relay está certo e se ele está rodando.)`,"panel.onboarding.tunnelNoStart":`O túnel não subiu; confira o endereço do relay.`,"panel.onboarding.pickAddress":`Qual endereço o celular usa`,"panel.onboarding.relayAddressHint":`Endereço do relay`,"panel.onboarding.recheckSaved":`O relay que esta máquina usa, {url}, está inacessível agora. Confira se ele está rodando.`,"panel.onboarding.relayNoAnswer":`Nada responde em {value}. Confira o domínio e se o dsh-relay está rodando.`,"panel.onboarding.relayNoAnswerUnsaved":`Nada responde em {value}; a configuração não foi alterada. Confira o domínio e se o dsh-relay está rodando.`,"panel.onboarding.probe.empty":`Ainda sem endereço`,"panel.onboarding.probe.busy":`Testando`,"panel.onboarding.probe.ok":`Conecta, ainda não salvo`,"panel.onboarding.probe.failed":`Não conecta`,"panel.onboarding.probe.idle":`Ainda não testado`,"panel.onboarding.probe.okWithHint":`Este endereço conecta e o QR code foi gerado a partir dele (ainda não está salvo na configuração).`,"panel.onboarding.checkFirewall":`Não conecta? Confira o firewall`,"panel.onboarding.lanDirect":`LAN direta`,"panel.onboarding.chooseAddress":`Escolher endereço`,"panel.onboarding.setAddress":`Preencher endereço`,"panel.onboarding.publicRelay":`Relay público`,"panel.onboarding.publicRelayTemporary":`Para uso temporário`,"panel.onboarding.ownRelay":`Relay próprio`,"panel.onboarding.penetration":`Túnel`,"panel.onboarding.penetrationAddress":`Endereço do túnel`,"panel.onboarding.penetrationPlaceholder":`https://seu-dominio-tunel.example`,"panel.onboarding.githubRepo":`Repositório no GitHub`,"panel.onboarding.currentLan":`Endereço LAN selecionado`,"panel.onboarding.public":`Pública`,"panel.onboarding.ipv6More":`Mais {count} endereços IPv6; o celular escolhe o mais rápido`,"panel.onboarding.collapse":`Recolher`,"panel.onboarding.expand":`Expandir`,"panel.onboarding.relayListTitle":`Endereços de relay públicos (por latência medida)`,"panel.onboarding.probing":`Medindo…`,"panel.onboarding.autoBest":`Auto (mais rápido)`,"panel.onboarding.autoBestHint":`Usar o mais rápido`,"panel.onboarding.probeUnreachable":`Inacessível`,"panel.onboarding.check":`Testar`,"panel.onboarding.enterPlugin":`Entrar no plugin`,"panel.onboarding.connecting":`Conectando…`,"panel.onboarding.fixFirst":`Resolva os problemas acima primeiro`,"panel.onboarding.fillRelayFirst":`Informe primeiro o endereço do relay`,"panel.onboarding.opening":`Abrindo…`,"panel.onboarding.openDirect":`Abrir conexão direta`,"panel.onboarding.connectRelay":`Conectar relay`,"panel.onboarding.firewallTitle":`Conferir o firewall`,"panel.onboarding.firewallIntro":`Se o celular não alcança a porta direta deste computador, normalmente é o próprio computador que bloqueia. A porta direta padrão é`,"panel.onboarding.firewallIntroTail":` (dá para mudar em «LAN direta» na página inicial). Confira por sistema abaixo.`,"panel.onboarding.copiedOk":`Copiado — cole na sua IA.`,"panel.onboarding.copiedFailed":`A cópia falhou; selecione o texto e copie manualmente.`,"panel.onboarding.lanDialogTitle":`Escolher um endereço LAN`,"panel.onboarding.lanDialogHint":`O celular tenta primeiro o escolhido e recorre aos outros.`,"panel.onboarding.referenceOnly":`Apenas para referência`,"panel.onboarding.lanGroupA11y":`Endereços LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Toque para copiar e deixar sua própria IA verificar`,"panel.onboarding.copyPrompt":`Copiar este prompt de diagnóstico`,"panel.onboarding.linuxStep1":`1. Veja o status do firewall (firewalld ou ufw, o que estiver instalado):`,"panel.onboarding.linuxStep2":`2. Libere a porta direta:`,"panel.onboarding.linuxStep3":`3. Em servidor na nuvem, libere a mesma porta também no grupo de segurança do console do provedor — não dá para verificar desta máquina.`,"panel.onboarding.macStep1":`1. Veja se o firewall de aplicativos está ativo:`,"panel.onboarding.macStep2":`2. Se estiver, em Ajustes do Sistema → Rede → Firewall → Opções, defina DSH / node como «Permitir conexões de entrada»; para diagnosticar você pode desligá-lo por completo:`,"panel.onboarding.macStep3":`3. Ainda falhando no mesmo Wi-Fi: confirme que celular e computador estão na mesma sub-rede, não em rede de visitantes.`,"panel.onboarding.winStep1":`1. No PowerShell (administrador), liste os perfis de firewall:`,"panel.onboarding.winStep2":`2. Libere a porta direta:`,"panel.onboarding.winStep3":`3. Se você já criou uma regra de bloqueio para node, apague-a; defina o tipo de rede como «Privada», não «Pública».`,"panel.onboarding.prompt.intro":`Me ajude a diagnosticar um problema.`,"panel.onboarding.prompt.situation":`Minha situação: instalei o plugin móvel do DSH (DeepSeek Harness) no computador, e o app do celular não consegue chegar a este computador por conexão direta na LAN.`,"panel.onboarding.prompt.address":`O endereço informado no celular é o endereço LAN deste computador mais a porta (o endereço e a porta exatos estão na página web do plugin móvel; precisa ser o endereço LAN).`,"panel.onboarding.prompt.guess":`No computador o plugin mostra que está escutando, mas o celular não conecta. Acho que o firewall (ou o grupo de segurança do servidor na nuvem) está bloqueando essa porta.`,"panel.onboarding.prompt.ask":`Por favor:`,"panel.onboarding.prompt.ask1":`1. Primeiro confirme se meu sistema é Linux, macOS ou Windows (se não tiver certeza, me pergunte ou me diga como verificar).`,"panel.onboarding.prompt.ask2":`2. Revise passo a passo as etapas da minha configuração e me diga se essa porta está aberta e onde trava.`,"panel.onboarding.prompt.ask3":`3. Me passe os comandos ou caminhos de clique exatos para liberar a porta e diga claramente onde precisa de permissões de administrador.`,"panel.onboarding.prompt.ask4":`4. Por fim, me diga como verificar que já funciona (por exemplo, qual comando rodar no computador e no celular).`,"panel.onboarding.prompt.extra":`Observação: se este computador for um servidor na nuvem, o grupo de segurança ou firewall no console do provedor também precisa liberar a mesma porta, e isso não dá para ver na máquina.`,"panel.onboarding.relayPlaceholder":`https://seu.dominio-relay`,"panel.onboarding.probe.failedBody":`Não dá para acessar este endereço, então o código QR não será gerado. Confirme que ele começa com http:// ou https://, que o relay está rodando e que o domínio aponta para ele.`},ru:{"panel.onboarding.pairingHint":`Сканируй для подключения`,"panel.onboarding.statusFailed":`Не удалось прочитать состояние плагина`,"panel.onboarding.stepFailed":`Этот шаг не удался`,"panel.onboarding.qrAfterRelay":`Когда введёшь адрес ретранслятора ниже`,"panel.onboarding.qrAfterRelayLine2":`здесь появится QR-код`,"panel.onboarding.qrAfterAddress":`Когда этот адрес подключится, здесь появится QR-код`,"panel.onboarding.noQr":`QR-код ещё не получен`,"panel.onboarding.preview":`Это предпросмотр по введённому адресу. В конфигурацию адрес попадёт только после нажатия «Войти в плагин».`,"panel.onboarding.relayNotConnected":`Ретранслятор ещё не подключён; сканировать имеет смысл только после этого.`,"panel.onboarding.direct":`Прямое`,"panel.onboarding.thisAddress":`Этот адрес`,"panel.onboarding.lanFailed":`Не удалось запустить прямое подключение`,"panel.onboarding.relayFailed":`Ретранслятор не подключён`,"panel.onboarding.lanErrorWithPort":`{error} (возможно, порт занят — выбери другой в «LAN напрямую» на главной.)`,"panel.onboarding.lanNoStart":`Прямое прослушивание не запустилось; возможно, порт занят другой программой.`,"panel.onboarding.tunnelErrorHint":`{error} (проверь, верно ли указан адрес ретранслятора и запущен ли он.)`,"panel.onboarding.tunnelNoStart":`Туннель не поднялся; проверь адрес ретранслятора.`,"panel.onboarding.pickAddress":`Какой адрес использует телефон`,"panel.onboarding.relayAddressHint":`Адрес ретранслятора`,"panel.onboarding.recheckSaved":`Ретранслятор, который использует эта машина, {url}, сейчас недоступен. Проверь, запущен ли он.`,"panel.onboarding.relayNoAnswer":`По адресу {value} ретранслятор не отвечает. Проверь домен и что dsh-relay запущен.`,"panel.onboarding.relayNoAnswerUnsaved":`По адресу {value} ретранслятор не отвечает, конфигурация не изменена. Проверь домен и что dsh-relay запущен.`,"panel.onboarding.probe.empty":`Адрес ещё не введён`,"panel.onboarding.probe.busy":`Проверка`,"panel.onboarding.probe.ok":`Доступен, ещё не сохранён`,"panel.onboarding.probe.failed":`Недоступен`,"panel.onboarding.probe.idle":`Ещё не проверялся`,"panel.onboarding.probe.okWithHint":`Этот адрес доступен, QR-код построен по нему (в конфигурацию ещё не сохранён).`,"panel.onboarding.checkFirewall":`Не подключается? Проверь фаервол`,"panel.onboarding.lanDirect":`LAN напрямую`,"panel.onboarding.chooseAddress":`Выбрать адрес`,"panel.onboarding.setAddress":`Указать адрес`,"panel.onboarding.publicRelay":`Публичный ретранслятор`,"panel.onboarding.publicRelayTemporary":`Временно`,"panel.onboarding.ownRelay":`Свой ретранслятор`,"panel.onboarding.penetration":`Туннель`,"panel.onboarding.penetrationAddress":`Адрес туннеля`,"panel.onboarding.penetrationPlaceholder":`https://tvoy-tunnel.example`,"panel.onboarding.githubRepo":`Репозиторий GitHub`,"panel.onboarding.currentLan":`Выбранный адрес LAN`,"panel.onboarding.public":`Публичный`,"panel.onboarding.ipv6More":`Ещё {count} адресов IPv6; телефон выберет самый быстрый`,"panel.onboarding.collapse":`Свернуть`,"panel.onboarding.expand":`Развернуть`,"panel.onboarding.relayListTitle":`Публичные адреса ретрансляторов (по замеренной задержке)`,"panel.onboarding.probing":`Замер…`,"panel.onboarding.autoBest":`Авто (быстрейший)`,"panel.onboarding.autoBestHint":`Взять самый быстрый`,"panel.onboarding.probeUnreachable":`Недоступен`,"panel.onboarding.check":`Проверить`,"panel.onboarding.enterPlugin":`Войти в плагин`,"panel.onboarding.connecting":`Подключение…`,"panel.onboarding.fixFirst":`Сначала реши проблемы выше`,"panel.onboarding.fillRelayFirst":`Сначала введи адрес ретранслятора`,"panel.onboarding.opening":`Открытие…`,"panel.onboarding.openDirect":`Открыть прямое подключение`,"panel.onboarding.connectRelay":`Подключить ретранслятор`,"panel.onboarding.firewallTitle":`Проверить фаервол`,"panel.onboarding.firewallIntro":`Если телефон не достаёт до прямого порта этого компьютера, обычно порт блокирует сам компьютер. Прямой порт по умолчанию —`,"panel.onboarding.firewallIntroTail":` (меняется на главной в «LAN напрямую»). Ниже проверка по системам.`,"panel.onboarding.copiedOk":`Скопировано — вставь в свой ИИ.`,"panel.onboarding.copiedFailed":`Копирование не удалось; выдели текст и скопируй вручную.`,"panel.onboarding.lanDialogTitle":`Выбрать адрес LAN`,"panel.onboarding.lanDialogHint":`Телефон сначала пробует выбранный, затем остальные.`,"panel.onboarding.referenceOnly":`Только для справки`,"panel.onboarding.lanGroupA11y":`Адреса LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Нажми, чтобы скопировать и проверить своим ИИ`,"panel.onboarding.copyPrompt":`Скопировать запрос для диагностики`,"panel.onboarding.linuxStep1":`1. Посмотри состояние фаервола (firewalld или ufw — что установлено):`,"panel.onboarding.linuxStep2":`2. Открой прямой порт:`,"panel.onboarding.linuxStep3":`3. На облачном сервере тот же порт нужно открыть ещё и в группе безопасности консоли провайдера — с этой машины это не проверить.`,"panel.onboarding.macStep1":`1. Проверь, включён ли фаервол приложений:`,"panel.onboarding.macStep2":`2. Если включён, в «Системные настройки → Сеть → Фаервол → Параметры» поставь DSH / node в «Разрешить входящие подключения»; для диагностики его можно отключить совсем:`,"panel.onboarding.macStep3":`3. В той же Wi-Fi всё равно не подключается: убедись, что телефон и компьютер в одной подсети, а не в гостевой сети.`,"panel.onboarding.winStep1":`1. В PowerShell (администратор) посмотри профили фаервола:`,"panel.onboarding.winStep2":`2. Открой прямой порт:`,"panel.onboarding.winStep3":`3. Если раньше создавал правило блокировки для node, удали его; тип сети — «Частная», а не «Общая».`,"panel.onboarding.prompt.intro":`Помоги разобраться с проблемой.`,"panel.onboarding.prompt.situation":`Моя ситуация: на компьютере стоит мобильный плагин DSH (DeepSeek Harness), и приложение на телефоне не может достучаться до этого компьютера по прямому подключению в локальной сети.`,"panel.onboarding.prompt.address":`Адрес, введённый на телефоне, — это адрес LAN этого компьютера плюс порт (точные адрес и порт смотри на веб-странице мобильного плагина; нужен именно адрес LAN).`,"panel.onboarding.prompt.guess":`На компьютере плагин показывает, что слушает, но телефон не подключается. Думаю, порт блокирует брандмауэр (или группа безопасности облачного сервера).`,"panel.onboarding.prompt.ask":`Пожалуйста:`,"panel.onboarding.prompt.ask1":`1. Сначала определи, какая у меня система: Linux, macOS или Windows (если не уверен, спроси меня или подскажи, как это проверить).`,"panel.onboarding.prompt.ask2":`2. Пройди по шагам для моего варианта и скажи, открыт ли сейчас этот порт и на каком шаге всё встаёт.`,"panel.onboarding.prompt.ask3":`3. Дай точные команды или пути в меню, чтобы открыть порт, и явно укажи, где нужны права администратора.`,"panel.onboarding.prompt.ask4":`4. В конце скажи, как проверить, что уже работает (например, какой командой это сделать на компьютере и на телефоне).`,"panel.onboarding.prompt.extra":`Примечание: если этот компьютер — облачный сервер, тот же порт нужно открыть и в группе безопасности или брандмауэре панели провайдера, локально это не проверить.`,"panel.onboarding.relayPlaceholder":`https://твой.домен-ретранслятора`,"panel.onboarding.probe.failedBody":`Этот адрес недоступен, поэтому QR-код не создастся. Проверь, что он начинается с http:// или https://, что ретранслятор запущен и что домен указывает на него.`}},{"zh-Hans":{"panel.update.title":`插件更新`,"panel.update.unknownVersion":`未知版本`,"panel.update.reading":`正在读更新状态…`,"panel.update.runningVersion":`运行中版本`,"panel.update.latestOnline":`线上最新`,"panel.update.notChecked":`还没查过`,"panel.update.neverUpdated":`还没更新过`,"panel.update.lastCheck":`最近一次检查`,"panel.update.lastApply":`最近一次更新`,"panel.update.hasNew":`线上有新版本。`,"panel.update.nothingToInstall":`这台宿主的面板里不装新代码(当前这份实现是直接被挂载的):无头 / 源码同步部署到服务器上同步源码 + 重启宿主服务;桌面端旧版到「设置 → 插件 → 本插件」里更新一版。`,"panel.update.noMarketTitle":`这台机器上没有可用的插件市场`,"panel.update.noMarketBody":`插件从 npm 分发,更新由 DSH 的插件市场负责:到「设置 → 插件」里更新本插件(或装上插件市场)。`,"panel.update.autoUpdate":`自动更新`,"panel.update.shellChangedTitle":`这次更新里外壳也换了`,"panel.update.shellChangedBody":`它有极少数改动要等下次启动 DSH 才生效(更新本身已经生效,不用管)。`,"panel.update.restartSidecar":`重启 sidecar`,"panel.update.checking":`正在检查…`,"panel.update.check":`检查更新`,"panel.update.updating":`正在更新…`,"panel.update.updateNow":`立即更新`,"panel.update.forceHint":`强制更新(有对话在跑、或刚发布的,也照装)`,"panel.update.resultHasNew":`有新版可以装`,"panel.update.resultUpToDate":`已经是最新版`,"panel.update.applyUpToDate":`已经是最新版({version}),没有改动任何文件。`,"panel.update.applyUpToDatePlain":`已经是最新版,没有改动任何文件。`,"panel.update.applyDiskUnchanged":`装了但盘上的版本没变(还是 {version}),这次不算数,可以再点一次。`,"panel.update.applyFailedRetry":`这次更新没成,可以再点一次。`,"panel.update.applySwitched":`已就地切到 {version},无需重启。`,"panel.update.applySwitchedPlain":`已就地切到新版本,无需重启。`,"panel.update.autoOn":`自动更新已开启:每 {minutes} 分钟查一次,有新版直接装好并就地生效,不等正在跑的对话结束。`,"panel.update.autoOff":`自动更新已关闭,之后只在点「检查更新」时才问市场。`,"panel.update.autoToggleFailed":`自动更新开关没保存成功:{message}`,"panel.update.versionDrift":`这两个版本对不上:面板报的 {version} 是进程启动时读进内存的,外壳实际装载的是 {shell}。一般是外壳刚换过代、页面还没重新读取;刷新一下这一页就一致了。`,"panel.update.checkResult":`检查结果`,"panel.update.applyFailed":`这次更新没成:{message}`,"panel.update.lastErrorLine":`最近一次出过错:{message}`},"zh-Hant":{"panel.update.title":`外掛更新`,"panel.update.unknownVersion":`未知版本`,"panel.update.reading":`正在讀取更新狀態…`,"panel.update.runningVersion":`執行中版本`,"panel.update.latestOnline":`線上最新`,"panel.update.notChecked":`還沒查過`,"panel.update.neverUpdated":`還沒更新過`,"panel.update.lastCheck":`最近一次檢查`,"panel.update.lastApply":`最近一次更新`,"panel.update.hasNew":`線上已有新版本。`,"panel.update.nothingToInstall":`這台宿主的面板裡不裝新程式碼(目前這份實作是直接被掛載的):無頭 / 原始碼同步部署到伺服器上同步原始碼 + 重新啟動宿主服務;桌面端舊版到「設定 → 外掛 → 本外掛」裡更新一版。`,"panel.update.noMarketTitle":`這台機器上沒有可用的外掛市場`,"panel.update.noMarketBody":`外掛從 npm 發佈,更新由 DSH 的外掛市場負責:到「設定 → 外掛」裡更新本外掛(或裝上外掛市場)。`,"panel.update.autoUpdate":`自動更新`,"panel.update.shellChangedTitle":`這次更新裡外殼也換了`,"panel.update.shellChangedBody":`它有極少數改動要等下次啟動 DSH 才生效(更新本身已經生效,不用管)。`,"panel.update.restartSidecar":`重新啟動 sidecar`,"panel.update.checking":`正在檢查…`,"panel.update.check":`檢查更新`,"panel.update.updating":`正在更新…`,"panel.update.updateNow":`立即更新`,"panel.update.forceHint":`強制更新(有對話在跑、或剛發佈的,也照裝)`,"panel.update.resultHasNew":`有新版可以裝`,"panel.update.resultUpToDate":`已經是最新版`,"panel.update.applyUpToDate":`已經是最新版({version}),沒有改動任何檔案。`,"panel.update.applyUpToDatePlain":`已經是最新版,沒有改動任何檔案。`,"panel.update.applyDiskUnchanged":`裝了但磁碟上的版本沒變(還是 {version}),這次不算數,可以再點一次。`,"panel.update.applyFailedRetry":`這次更新沒成,可以再點一次。`,"panel.update.applySwitched":`已就地切到 {version},無需重新啟動。`,"panel.update.applySwitchedPlain":`已就地切到新版本,無需重新啟動。`,"panel.update.autoOn":`自動更新已開啟:每 {minutes} 分鐘查一次,有新版直接裝好並就地生效,不等正在跑的對話結束。`,"panel.update.autoOff":`自動更新已關閉,之後只在點「檢查更新」時才問市場。`,"panel.update.autoToggleFailed":`自動更新開關沒有儲存成功:{message}`,"panel.update.versionDrift":`這兩個版本對不上:面板報的 {version} 是程序啟動時讀進記憶體的,外殼實際裝載的是 {shell}。一般是外殼剛換過代、頁面還沒重新讀取;重新整理這一頁就一致了。`,"panel.update.checkResult":`檢查結果`,"panel.update.applyFailed":`這次更新沒成:{message}`,"panel.update.lastErrorLine":`最近一次出錯過:{message}`},en:{"panel.update.title":`Plugin update`,"panel.update.unknownVersion":`Unknown version`,"panel.update.reading":`Reading update status…`,"panel.update.runningVersion":`Running version`,"panel.update.latestOnline":`Latest online`,"panel.update.notChecked":`Not checked yet`,"panel.update.neverUpdated":`Never updated`,"panel.update.lastCheck":`Last check`,"panel.update.lastApply":`Last update`,"panel.update.hasNew":`A new version is available online.`,"panel.update.nothingToInstall":`This host’s panel does not install new code (this implementation is mounted directly): for headless or source-synced deployments, sync the source and restart the host service; on an older desktop build, update it under Settings → Plugins → This plugin.`,"panel.update.noMarketTitle":`No usable plugin marketplace on this machine`,"panel.update.noMarketBody":`The plugin is distributed via npm and updated by DSH’s plugin marketplace: go to Settings → Plugins to update it (or install the marketplace).`,"panel.update.autoUpdate":`Auto-update`,"panel.update.shellChangedTitle":`This update also changed the shell`,"panel.update.shellChangedBody":`A few of its changes take effect the next time DSH starts (the update itself is already in effect — nothing to do).`,"panel.update.restartSidecar":`Restart sidecar`,"panel.update.checking":`Checking…`,"panel.update.check":`Check for updates`,"panel.update.updating":`Updating…`,"panel.update.updateNow":`Update now`,"panel.update.forceHint":`Forced update (installs even with chats running or right after release)`,"panel.update.resultHasNew":`A new version is available`,"panel.update.resultUpToDate":`Already up to date`,"panel.update.applyUpToDate":`Already up to date ({version}); no files changed.`,"panel.update.applyUpToDatePlain":`Already up to date; no files changed.`,"panel.update.applyDiskUnchanged":`Installed but the on-disk version is unchanged ({version}); this attempt did not count — try again.`,"panel.update.applyFailedRetry":`This update did not go through; try again.`,"panel.update.applySwitched":`Switched to {version} in place; no restart needed.`,"panel.update.applySwitchedPlain":`Switched to the new version in place; no restart needed.`,"panel.update.autoOn":`Auto-update on: checks every {minutes} minutes and installs new versions in place without waiting for running conversations to finish.`,"panel.update.autoOff":`Auto-update off: the marketplace is only asked when you tap “Check for updates”.`,"panel.update.autoToggleFailed":`Could not save the auto-update switch: {message}`,"panel.update.versionDrift":`These two versions disagree: the panel reports {version} (read into memory at process start) while the shell actually loaded {shell}. Usually the shell was just replaced and this page has not re-read it; refresh the page.`,"panel.update.checkResult":`Result`,"panel.update.applyFailed":`This update did not go through: {message}`,"panel.update.lastErrorLine":`Last failure: {message}`},ja:{"panel.update.title":`プラグインの更新`,"panel.update.unknownVersion":`不明なバージョン`,"panel.update.reading":`更新状態を読み込み中…`,"panel.update.runningVersion":`実行中のバージョン`,"panel.update.latestOnline":`オンライン最新`,"panel.update.notChecked":`まだ確認していません`,"panel.update.neverUpdated":`まだ更新していません`,"panel.update.lastCheck":`最後の確認`,"panel.update.lastApply":`最後の更新`,"panel.update.hasNew":`オンラインに新しい版があります。`,"panel.update.nothingToInstall":`このホストのパネルでは新しいコードをインストールしません(現在の実装は直接マウントされています)。ヘッドレス/ソース同期配備ではソースを同期してホストサービスを再起動してください。古いデスクトップ版では「設定 → プラグイン → 本プラグイン」から更新してください。`,"panel.update.noMarketTitle":`このマシンには利用可能なプラグインマーケットがありません`,"panel.update.noMarketBody":`プラグインは npm で配布され、更新は DSH のプラグインマーケットが担います。「設定 → プラグイン」から更新してください(またはマーケットを入れてください)。`,"panel.update.autoUpdate":`自動更新`,"panel.update.shellChangedTitle":`この更新では外側も変わりました`,"panel.update.shellChangedBody":`ごく一部の変更は次に DSH を起動したときに有効になります(更新自体は既に有効です。何もする必要はありません)。`,"panel.update.restartSidecar":`サイドカーを再起動`,"panel.update.checking":`確認中…`,"panel.update.check":`更新を確認`,"panel.update.updating":`更新中…`,"panel.update.updateNow":`今すぐ更新`,"panel.update.forceHint":`強制更新(会話が実行中でも、公開直後でもインストールします)`,"panel.update.resultHasNew":`新しい版をインストールできます`,"panel.update.resultUpToDate":`最新版です`,"panel.update.applyUpToDate":`最新版({version})です。ファイルは変更していません。`,"panel.update.applyUpToDatePlain":`最新版です。ファイルは変更していません。`,"panel.update.applyDiskUnchanged":`インストールしましたがディスク上のバージョンが変わりません({version})。今回は反映されていないので、もう一度お試しください。`,"panel.update.applyFailedRetry":`今回の更新は完了しませんでした。もう一度お試しください。`,"panel.update.applySwitched":`{version} にその場で切り替えました。再起動は不要です。`,"panel.update.applySwitchedPlain":`新しい版にその場で切り替えました。再起動は不要です。`,"panel.update.autoOn":`自動更新をオンにしました。{minutes} 分ごとに確認し、新しい版があれば実行中の会話の終了を待たずに自動でインストールして反映します。`,"panel.update.autoOff":`自動更新をオフにしました。以降は「更新を確認」を押したときだけマーケットに問い合わせます。`,"panel.update.autoToggleFailed":`自動更新の切り替えを保存できませんでした:{message}`,"panel.update.versionDrift":`この 2 つのバージョンが一致しません。パネルが報告している {version} はプロセス起動時に読み込んだ値で、実際に読み込まれた外側は {shell} です。多くの場合、外側が入れ替わった直後でページが再読み込みされていないだけです。このページを再読み込みしてください。`,"panel.update.checkResult":`確認結果`,"panel.update.applyFailed":`今回の更新は完了しませんでした:{message}`,"panel.update.lastErrorLine":`直近の失敗:{message}`},ko:{"panel.update.title":`플러그인 업데이트`,"panel.update.unknownVersion":`알 수 없는 버전`,"panel.update.reading":`업데이트 상태를 읽는 중…`,"panel.update.runningVersion":`실행 중 버전`,"panel.update.latestOnline":`온라인 최신`,"panel.update.notChecked":`아직 확인하지 않았습니다`,"panel.update.neverUpdated":`업데이트한 적 없습니다`,"panel.update.lastCheck":`마지막 확인`,"panel.update.lastApply":`마지막 업데이트`,"panel.update.hasNew":`온라인에 새 버전이 있습니다.`,"panel.update.nothingToInstall":`이 호스트의 패널은 새 코드를 설치하지 않습니다(현재 구현은 직접 마운트됩니다). 헤드리스 또는 소스 동기화 배포에서는 소스를 동기화하고 호스트 서비스를 재시작하세요. 이전 데스크톱 버전에서는 설정 → 플러그인 → 이 플러그인에서 업데이트하세요.`,"panel.update.noMarketTitle":`이 컴퓨터에는 사용 가능한 플러그인 마켓이 없습니다`,"panel.update.noMarketBody":`플러그인은 npm으로 배포되며 DSH의 플러그인 마켓에서 업데이트합니다. 설정 → 플러그인에서 업데이트하세요(또는 마켓을 설치하세요).`,"panel.update.autoUpdate":`자동 업데이트`,"panel.update.shellChangedTitle":`이 업데이트에서 외형도 바뀌었습니다`,"panel.update.shellChangedBody":`일부 변경은 DSH를 다음에 시작할 때 적용됩니다(업데이트 자체는 이미 적용되었으니 신경 쓰지 않으셔도 됩니다).`,"panel.update.restartSidecar":`사이드카 재시작`,"panel.update.checking":`확인 중…`,"panel.update.check":`업데이트 확인`,"panel.update.updating":`업데이트 중…`,"panel.update.updateNow":`지금 업데이트`,"panel.update.forceHint":`강제 업데이트(대화가 실행 중이거나 방금 배포된 경우에도 설치)`,"panel.update.resultHasNew":`새 버전을 설치할 수 있습니다`,"panel.update.resultUpToDate":`이미 최신 버전입니다`,"panel.update.applyUpToDate":`이미 최신 버전({version})이며 파일을 변경하지 않았습니다.`,"panel.update.applyUpToDatePlain":`이미 최신 버전이며 파일을 변경하지 않았습니다.`,"panel.update.applyDiskUnchanged":`설치했지만 디스크 버전이 그대로입니다({version}). 이번 시도는 반영되지 않았으니 다시 시도하세요.`,"panel.update.applyFailedRetry":`이번 업데이트가 완료되지 않았습니다. 다시 시도하세요.`,"panel.update.applySwitched":`{version}(으)로 즉시 전환했습니다. 재시작이 필요 없습니다.`,"panel.update.applySwitchedPlain":`새 버전으로 즉시 전환했습니다. 재시작이 필요 없습니다.`,"panel.update.autoOn":`자동 업데이트를 켰습니다. {minutes}분마다 확인하고 새 버전이 있으면 실행 중인 대화가 끝나기를 기다리지 않고 바로 설치해 적용합니다.`,"panel.update.autoOff":`자동 업데이트를 껐습니다. 이후에는 「업데이트 확인」을 눌렀을 때만 마켓에 문의합니다.`,"panel.update.autoToggleFailed":`자동 업데이트 스위치를 저장하지 못했습니다: {message}`,"panel.update.versionDrift":`두 버전이 일치하지 않습니다. 패널이 보고하는 {version}은 프로세스 시작 시 읽은 값이고, 실제로 로드된 외형은 {shell}입니다. 보통 외형이 막 교체되어 페이지가 다시 읽지 않은 경우이니 이 페이지를 새로 고치세요.`,"panel.update.checkResult":`확인 결과`,"panel.update.applyFailed":`이번 업데이트가 완료되지 않았습니다: {message}`,"panel.update.lastErrorLine":`최근 오류: {message}`},de:{"panel.update.title":`Plugin-Update`,"panel.update.unknownVersion":`Unbekannte Version`,"panel.update.reading":`Update-Status wird gelesen…`,"panel.update.runningVersion":`Laufende Version`,"panel.update.latestOnline":`Neueste online`,"panel.update.notChecked":`Noch nicht geprüft`,"panel.update.neverUpdated":`Noch nie aktualisiert`,"panel.update.lastCheck":`Letzte Prüfung`,"panel.update.lastApply":`Letztes Update`,"panel.update.hasNew":`Online ist eine neue Version verfügbar.`,"panel.update.nothingToInstall":`Das Panel dieses Hosts installiert keinen neuen Code (diese Implementierung ist direkt eingebunden): Bei Headless- oder quelltextsynchronisierten Installationen den Quelltext synchronisieren und den Host-Dienst neu starten; in einer älteren Desktop-Version unter Einstellungen → Plugins → Dieses Plugin aktualisieren.`,"panel.update.noMarketTitle":`Auf dieser Maschine gibt es keinen nutzbaren Plugin-Marktplatz`,"panel.update.noMarketBody":`Das Plugin wird über npm verteilt, Updates laufen über den Plugin-Marktplatz von DSH: Unter Einstellungen → Plugins dieses Plugin aktualisieren (oder den Marktplatz installieren).`,"panel.update.autoUpdate":`Automatische Updates`,"panel.update.shellChangedTitle":`Dieses Update hat auch die Shell geändert`,"panel.update.shellChangedBody":`Einige wenige Änderungen werden erst beim nächsten Start von DSH wirksam (das Update selbst ist bereits aktiv, du musst nichts tun).`,"panel.update.restartSidecar":`Sidecar neu starten`,"panel.update.checking":`Wird geprüft…`,"panel.update.check":`Auf Updates prüfen`,"panel.update.updating":`Wird aktualisiert…`,"panel.update.updateNow":`Jetzt aktualisieren`,"panel.update.forceHint":`Erzwungenes Update (wird auch bei laufenden Unterhaltungen oder direkt nach der Veröffentlichung installiert)`,"panel.update.resultHasNew":`Neue Version verfügbar`,"panel.update.resultUpToDate":`Bereits aktuell`,"panel.update.applyUpToDate":`Bereits aktuell ({version}), keine Dateien geändert.`,"panel.update.applyUpToDatePlain":`Bereits aktuell, keine Dateien geändert.`,"panel.update.applyDiskUnchanged":`Installiert, aber die Version auf der Platte ist unverändert (weiterhin {version}); dieser Versuch zählt nicht, bitte noch einmal klicken.`,"panel.update.applyFailedRetry":`Dieses Update ist fehlgeschlagen; bitte noch einmal klicken.`,"panel.update.applySwitched":`In-place auf {version} umgestellt, kein Neustart nötig.`,"panel.update.applySwitchedPlain":`In-place auf die neue Version umgestellt, kein Neustart nötig.`,"panel.update.autoOn":`Automatische Updates an: prüft alle {minutes} Minuten und installiert neue Versionen direkt, ohne auf laufende Unterhaltungen zu warten.`,"panel.update.autoOff":`Automatische Updates aus: der Marktplatz wird nur noch bei „Auf Updates prüfen“ gefragt.`,"panel.update.autoToggleFailed":`Der Schalter für automatische Updates wurde nicht gespeichert: {message}`,"panel.update.versionDrift":`Diese beiden Versionen passen nicht zusammen: Das Panel meldet {version} (beim Prozessstart in den Speicher gelesen), die Shell hat aber {shell} geladen. Meist wurde die Shell gerade ersetzt und die Seite hat noch nicht neu gelesen; nach einem Neuladen stimmen beide überein.`,"panel.update.checkResult":`Prüfergebnis`,"panel.update.applyFailed":`Dieses Update ist fehlgeschlagen: {message}`,"panel.update.lastErrorLine":`Letzter Fehler: {message}`},es:{"panel.update.title":`Actualización del complemento`,"panel.update.unknownVersion":`Versión desconocida`,"panel.update.reading":`Leyendo el estado de la actualización…`,"panel.update.runningVersion":`Versión en ejecución`,"panel.update.latestOnline":`Última en línea`,"panel.update.notChecked":`Aún sin comprobar`,"panel.update.neverUpdated":`Nunca actualizado`,"panel.update.lastCheck":`Última comprobación`,"panel.update.lastApply":`Última actualización`,"panel.update.hasNew":`Hay una nueva versión en línea.`,"panel.update.nothingToInstall":`El panel de este host no instala código nuevo (esta implementación está montada directamente): en despliegues sin cabeza o sincronizados por código fuente, sincroniza el código y reinicia el servicio del host; en una versión de escritorio antigua, actualízalo en Ajustes → Complementos → Este complemento.`,"panel.update.noMarketTitle":`No hay una tienda de complementos disponible en esta máquina`,"panel.update.noMarketBody":`El complemento se distribuye por npm y lo actualiza la tienda de complementos de DSH: ve a Ajustes → Complementos para actualizarlo (o instala la tienda).`,"panel.update.autoUpdate":`Actualización automática`,"panel.update.shellChangedTitle":`Esta actualización también cambió el shell`,"panel.update.shellChangedBody":`Unos pocos cambios se aplican la próxima vez que inicies DSH (la actualización ya está activa, no hace falta hacer nada).`,"panel.update.restartSidecar":`Reiniciar sidecar`,"panel.update.checking":`Comprobando…`,"panel.update.check":`Buscar actualizaciones`,"panel.update.updating":`Actualizando…`,"panel.update.updateNow":`Actualizar ahora`,"panel.update.forceHint":`Actualización forzada (se instala aunque haya conversaciones activas o justo tras publicarse)`,"panel.update.resultHasNew":`Hay una nueva versión para instalar`,"panel.update.resultUpToDate":`Ya está actualizado`,"panel.update.applyUpToDate":`Ya está actualizado ({version}); no se cambió ningún archivo.`,"panel.update.applyUpToDatePlain":`Ya está actualizado; no se cambió ningún archivo.`,"panel.update.applyDiskUnchanged":`Se instaló, pero la versión en disco no cambió (sigue en {version}); este intento no cuenta, vuelve a intentarlo.`,"panel.update.applyFailedRetry":`Esta actualización no salió; vuelve a intentarlo.`,"panel.update.applySwitched":`Cambiado a {version} en el sitio; no hace falta reiniciar.`,"panel.update.applySwitchedPlain":`Cambiado a la nueva versión en el sitio; no hace falta reiniciar.`,"panel.update.autoOn":`Actualización automática activada: comprueba cada {minutes} minutos e instala las nuevas versiones sin esperar a que terminen las conversaciones en curso.`,"panel.update.autoOff":`Actualización automática desactivada: la tienda solo se consulta al pulsar «Buscar actualizaciones».`,"panel.update.autoToggleFailed":`No se pudo guardar el interruptor de actualización automática: {message}`,"panel.update.versionDrift":`Estas dos versiones no coinciden: el panel informa {version} (leída en memoria al iniciar el proceso), mientras que el shell cargó {shell}. Normalmente el shell acaba de cambiar y la página aún no lo ha releído; al refrescar la página coincidirán.`,"panel.update.checkResult":`Resultado de la comprobación`,"panel.update.applyFailed":`Esta actualización no salió: {message}`,"panel.update.lastErrorLine":`Último fallo: {message}`},fr:{"panel.update.title":`Mise à jour du greffon`,"panel.update.unknownVersion":`Version inconnue`,"panel.update.reading":`Lecture de l’état de la mise à jour…`,"panel.update.runningVersion":`Version en cours`,"panel.update.latestOnline":`Dernière en ligne`,"panel.update.notChecked":`Pas encore vérifié`,"panel.update.neverUpdated":`Jamais mis à jour`,"panel.update.lastCheck":`Dernière vérification`,"panel.update.lastApply":`Dernière mise à jour`,"panel.update.hasNew":`Une nouvelle version est disponible en ligne.`,"panel.update.nothingToInstall":`Le panneau de cet hôte n’installe pas de nouveau code (cette implémentation est montée directement) : pour les déploiements sans interface ou synchronisés par code source, synchronisez le code et redémarrez le service de l’hôte ; sur une ancienne version de bureau, mettez-le à jour dans Réglages → Greffons → Ce greffon.`,"panel.update.noMarketTitle":`Aucune place de marché de greffons disponible sur cette machine`,"panel.update.noMarketBody":`Le greffon est distribué via npm et mis à jour par la place de marché de DSH : allez dans Réglages → Greffons pour le mettre à jour (ou installez la place de marché).`,"panel.update.autoUpdate":`Mise à jour automatique`,"panel.update.shellChangedTitle":`Cette mise à jour a aussi changé le shell`,"panel.update.shellChangedBody":`Quelques rares changements prendront effet au prochain démarrage de DSH (la mise à jour elle-même est déjà active, rien à faire).`,"panel.update.restartSidecar":`Redémarrer le sidecar`,"panel.update.checking":`Vérification…`,"panel.update.check":`Vérifier les mises à jour`,"panel.update.updating":`Mise à jour…`,"panel.update.updateNow":`Mettre à jour`,"panel.update.forceHint":`Mise à jour forcée (s’installe même avec des conversations en cours ou juste après la sortie)`,"panel.update.resultHasNew":`Une nouvelle version est à installer`,"panel.update.resultUpToDate":`Déjà à jour`,"panel.update.applyUpToDate":`Déjà à jour ({version}) ; aucun fichier modifié.`,"panel.update.applyUpToDatePlain":`Déjà à jour ; aucun fichier modifié.`,"panel.update.applyDiskUnchanged":`Installé, mais la version sur disque n’a pas changé (toujours {version}) ; cette tentative ne compte pas, réessayez.`,"panel.update.applyFailedRetry":`Cette mise à jour a échoué ; réessayez.`,"panel.update.applySwitched":`Passé à {version} sur place, aucun redémarrage nécessaire.`,"panel.update.applySwitchedPlain":`Passé à la nouvelle version sur place, aucun redémarrage nécessaire.`,"panel.update.autoOn":`Mises à jour automatiques activées : vérifie toutes les {minutes} minutes et installe les nouvelles versions sans attendre la fin des conversations en cours.`,"panel.update.autoOff":`Mises à jour automatiques désactivées : la place de marché n’est interrogée que sur « Vérifier les mises à jour ».`,"panel.update.autoToggleFailed":`Impossible d’enregistrer l’interrupteur de mise à jour automatique : {message}`,"panel.update.versionDrift":`Ces deux versions ne concordent pas : le panneau indique {version} (lue en mémoire au démarrage du processus), alors que le shell a chargé {shell}. En général, le shell vient d’être remplacé et la page ne l’a pas encore relu ; un rafraîchissement les alignera.`,"panel.update.checkResult":`Résultat de la vérification`,"panel.update.applyFailed":`Cette mise à jour a échoué : {message}`,"panel.update.lastErrorLine":`Dernier échec : {message}`},pt:{"panel.update.title":`Atualização do plugin`,"panel.update.unknownVersion":`Versão desconhecida`,"panel.update.reading":`Lendo o estado da atualização…`,"panel.update.runningVersion":`Versão em execução`,"panel.update.latestOnline":`Mais recente online`,"panel.update.notChecked":`Ainda não verificado`,"panel.update.neverUpdated":`Nunca atualizado`,"panel.update.lastCheck":`Última verificação`,"panel.update.lastApply":`Última atualização`,"panel.update.hasNew":`Há uma nova versão online.`,"panel.update.nothingToInstall":`O painel deste host não instala código novo (esta implementação é montada diretamente): em implantações headless ou sincronizadas por código-fonte, sincronize o código e reinicie o serviço do host; em uma versão de desktop antiga, atualize em Configurações → Plugins → Este plugin.`,"panel.update.noMarketTitle":`Não há loja de plugins disponível nesta máquina`,"panel.update.noMarketBody":`O plugin é distribuído via npm e atualizado pela loja de plugins do DSH: vá em Configurações → Plugins para atualizá-lo (ou instale a loja).`,"panel.update.autoUpdate":`Atualização automática`,"panel.update.shellChangedTitle":`Esta atualização também mudou o shell`,"panel.update.shellChangedBody":`Algumas poucas mudanças valem só no próximo início do DSH (a atualização em si já está ativa, não precisa fazer nada).`,"panel.update.restartSidecar":`Reiniciar sidecar`,"panel.update.checking":`Verificando…`,"panel.update.check":`Verificar atualizações`,"panel.update.updating":`Atualizando…`,"panel.update.updateNow":`Atualizar agora`,"panel.update.forceHint":`Atualização forçada (instala mesmo com conversas em andamento ou logo após o lançamento)`,"panel.update.resultHasNew":`Há uma nova versão para instalar`,"panel.update.resultUpToDate":`Já está atualizado`,"panel.update.applyUpToDate":`Já está atualizado ({version}); nenhum arquivo foi alterado.`,"panel.update.applyUpToDatePlain":`Já está atualizado; nenhum arquivo foi alterado.`,"panel.update.applyDiskUnchanged":`Instalou, mas a versão em disco não mudou (continua {version}); esta tentativa não vale, tente de novo.`,"panel.update.applyFailedRetry":`Esta atualização não deu certo; tente de novo.`,"panel.update.applySwitched":`Alterado para {version} no local; não precisa reiniciar.`,"panel.update.applySwitchedPlain":`Alterado para a nova versão no local; não precisa reiniciar.`,"panel.update.autoOn":`Atualização automática ativada: verifica a cada {minutes} minutos e instala novas versões sem esperar conversas em andamento terminarem.`,"panel.update.autoOff":`Atualização automática desativada: a loja só é consultada ao tocar em «Verificar atualizações».`,"panel.update.autoToggleFailed":`Não foi possível salvar o botão de atualização automática: {message}`,"panel.update.versionDrift":`Estas duas versões não batem: o painel informa {version} (lida na memória na inicialização do processo), enquanto o shell carregou {shell}. Normalmente o shell acabou de trocar e a página ainda não releu; atualize a página e elas vão coincidir.`,"panel.update.checkResult":`Resultado da verificação`,"panel.update.applyFailed":`Esta atualização não deu certo: {message}`,"panel.update.lastErrorLine":`Última falha: {message}`},ru:{"panel.update.title":`Обновление плагина`,"panel.update.unknownVersion":`Неизвестная версия`,"panel.update.reading":`Читаем состояние обновления…`,"panel.update.runningVersion":`Работающая версия`,"panel.update.latestOnline":`Последняя в сети`,"panel.update.notChecked":`Ещё не проверялось`,"panel.update.neverUpdated":`Ещё не обновлялось`,"panel.update.lastCheck":`Последняя проверка`,"panel.update.lastApply":`Последнее обновление`,"panel.update.hasNew":`В сети доступна новая версия.`,"panel.update.nothingToInstall":`Панель этого хоста не устанавливает новый код (эта реализация подключена напрямую): при headless-развёртывании или развёртывании с синхронизацией исходников синхронизируйте исходники и перезапустите службу хоста; в старой версии для компьютера обновите её в разделе «Настройки → Плагины → Этот плагин».`,"panel.update.noMarketTitle":`На этой машине нет доступного магазина плагинов`,"panel.update.noMarketBody":`Плагин распространяется через npm, обновлениями занимается магазин плагинов DSH: откройте «Настройки → Плагины» и обновите плагин (или установите магазин).`,"panel.update.autoUpdate":`Автообновление`,"panel.update.shellChangedTitle":`Это обновление затронуло и оболочку`,"panel.update.shellChangedBody":`Несколько изменений вступят в силу при следующем запуске DSH (само обновление уже действует, ничего делать не нужно).`,"panel.update.restartSidecar":`Перезапустить sidecar`,"panel.update.checking":`Проверяем…`,"panel.update.check":`Проверить обновления`,"panel.update.updating":`Обновляем…`,"panel.update.updateNow":`Обновить сейчас`,"panel.update.forceHint":`Принудительное обновление (устанавливается даже при идущих диалогах или сразу после выпуска)`,"panel.update.resultHasNew":`Есть новая версия для установки`,"panel.update.resultUpToDate":`Уже последняя версия`,"panel.update.applyUpToDate":`Уже последняя версия ({version}), файлы не изменялись.`,"panel.update.applyUpToDatePlain":`Уже последняя версия, файлы не изменялись.`,"panel.update.applyDiskUnchanged":`Установлено, но версия на диске не изменилась (по-прежнему {version}); эта попытка не засчитана, нажмите ещё раз.`,"panel.update.applyFailedRetry":`Обновление не удалось, нажмите ещё раз.`,"panel.update.applySwitched":`Переключено на {version} на месте, перезапуск не нужен.`,"panel.update.applySwitchedPlain":`Переключено на новую версию на месте, перезапуск не нужен.`,"panel.update.autoOn":`Автообновление включено: проверка каждые {minutes} минут, новые версии ставятся сразу и работают на месте, не дожидаясь завершения текущих диалогов.`,"panel.update.autoOff":`Автообновление выключено: магазин опрашивается только по нажатию «Проверить обновления».`,"panel.update.autoToggleFailed":`Не удалось сохранить переключатель автообновления: {message}`,"panel.update.versionDrift":`Эти две версии не совпадают: панель сообщает {version} (прочитано в память при запуске процесса), а оболочка загрузила {shell}. Обычно оболочку только что заменили, и страница ещё не перечитала её; обновите страницу — версии совпадут.`,"panel.update.checkResult":`Результат проверки`,"panel.update.applyFailed":`Обновление не удалось: {message}`,"panel.update.lastErrorLine":`Последняя ошибка: {message}`}},{"zh-Hans":{"panel.devices.title":`已绑定的设备`,"panel.devices.unknown":`未知设备`,"panel.devices.unknownPlatform":`未知平台`,"panel.devices.legacy":`旧式`,"panel.devices.extraBindings":`另有 {count} 条旧绑定`,"panel.devices.boundAt":`绑定于 {time}`,"panel.devices.online":`在线`,"panel.devices.noRecord":`无记录`,"panel.devices.channelRelay":`经中转`,"panel.devices.channelLan":`局域网`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`链路已加密`,"panel.devices.plain":`链路未加密`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`刚刚`,"panel.devices.minutesAgo":`{count} 分钟前`,"panel.devices.hoursAgo":`{count} 小时前`,"panel.devices.daysAgo":`{count} 天前`,"panel.devices.cancel":`取消`,"panel.devices.unbind":`解除绑定`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`解除绑定`,"panel.devices.unbindConfirm":`确定要解除「{name}」的绑定?`,"panel.devices.unbindDone":`已解除「{name}」的绑定({count} 条凭据)。`,"panel.devices.unbindDoneClosed":`已解除「{name}」的绑定({count} 条凭据,断开 {closed} 条连接)。`,"panel.devices.unbindFailed":`解除绑定失败:{message}`,"panel.devices.effectIdentity":`下次请求起失效。`,"panel.devices.effectLegacy":`只吊销凭据,旧的通行证仍可能在到期前可用;要立即失效请用『吊销全部』。`,"panel.devices.allowTitle":`允许新设备绑定`,"panel.devices.policyAllowed":`已允许新设备绑定。`,"panel.devices.policyDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.devices.title":`已綁定的裝置`,"panel.devices.unknown":`未知裝置`,"panel.devices.unknownPlatform":`未知平台`,"panel.devices.legacy":`舊式`,"panel.devices.extraBindings":`另有 {count} 條舊綁定`,"panel.devices.boundAt":`綁定於 {time}`,"panel.devices.online":`線上`,"panel.devices.noRecord":`無紀錄`,"panel.devices.channelRelay":`經中轉`,"panel.devices.channelLan":`區域網路`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`链路已加密`,"panel.devices.plain":`链路未加密`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`剛剛`,"panel.devices.minutesAgo":`{count} 分鐘前`,"panel.devices.hoursAgo":`{count} 小時前`,"panel.devices.daysAgo":`{count} 天前`,"panel.devices.cancel":`取消`,"panel.devices.unbind":`解除綁定`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`解除綁定`,"panel.devices.unbindConfirm":`確定要解除「{name}」的綁定?`,"panel.devices.unbindDone":`已解除「{name}」的綁定({count} 條憑證)。`,"panel.devices.unbindDoneClosed":`已解除「{name}」的綁定({count} 條憑證,斷開 {closed} 條連線)。`,"panel.devices.unbindFailed":`解除綁定失敗:{message}`,"panel.devices.effectIdentity":`下次請求起失效。`,"panel.devices.effectLegacy":`只吊銷憑證,舊的通行證仍可能在到期前可用;要立即失效請用『吊銷全部』。`,"panel.devices.allowTitle":`允許新裝置綁定`,"panel.devices.policyAllowed":`已允許新裝置綁定。`,"panel.devices.policyDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.devices.title":`Paired devices`,"panel.devices.unknown":`Unknown device`,"panel.devices.unknownPlatform":`Unknown platform`,"panel.devices.legacy":`Legacy`,"panel.devices.extraBindings":`{count} older pairing(s)`,"panel.devices.boundAt":`Paired {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`No record`,"panel.devices.channelRelay":`Via relay`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Encrypted link`,"panel.devices.plain":`Unencrypted link`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`just now`,"panel.devices.minutesAgo":`{count} min ago`,"panel.devices.hoursAgo":`{count} h ago`,"panel.devices.daysAgo":`{count} d ago`,"panel.devices.cancel":`Cancel`,"panel.devices.unbind":`Unbind`,"panel.devices.unbinding":`Unbinding…`,"panel.devices.unbindTitle":`Unbind device`,"panel.devices.unbindConfirm":`Unbind “{name}”?`,"panel.devices.unbindDone":`Unbound “{name}” ({count} credentials).`,"panel.devices.unbindDoneClosed":`Unbound “{name}” ({count} credentials, {closed} connections closed).`,"panel.devices.unbindFailed":`Could not unbind: {message}`,"panel.devices.effectIdentity":`Takes effect from the next request.`,"panel.devices.effectLegacy":`This revokes the stored credential only; the old pass may still work until it expires. Use “Revoke all” to cut it off immediately.`,"panel.devices.allowTitle":`Allow new devices to pair`,"panel.devices.policyAllowed":`New devices may now pair.`,"panel.devices.policyDenied":`New devices are now refused; already-paired phones keep working.`},ja:{"panel.devices.title":`ペアリング済みのデバイス`,"panel.devices.unknown":`不明なデバイス`,"panel.devices.unknownPlatform":`不明なプラットフォーム`,"panel.devices.legacy":`旧形式`,"panel.devices.extraBindings":`古いペアリング {count} 件`,"panel.devices.boundAt":`{time}にペアリング`,"panel.devices.online":`オンライン`,"panel.devices.noRecord":`記録なし`,"panel.devices.channelRelay":`リレー経由`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`リンクは暗号化`,"panel.devices.plain":`リンクは平文`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`たった今`,"panel.devices.minutesAgo":`{count} 分前`,"panel.devices.hoursAgo":`{count} 時間前`,"panel.devices.daysAgo":`{count} 日前`,"panel.devices.cancel":`キャンセル`,"panel.devices.unbind":`バインド解除`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`バインド解除`,"panel.devices.unbindConfirm":`「{name}」のバインドを解除しますか?`,"panel.devices.unbindDone":`「{name}」のバインドを解除しました(資格情報 {count} 件)。`,"panel.devices.unbindDoneClosed":`「{name}」のバインドを解除しました(資格情報 {count} 件、接続 {closed} 件を切断)。`,"panel.devices.unbindFailed":`バインド解除に失敗しました:{message}`,"panel.devices.effectIdentity":`次のリクエストから無効になります。`,"panel.devices.effectLegacy":`取り消されるのは保存された資格情報だけです。古いパスは有効期限まで使える可能性があります。即時に切るには「すべて取り消す」を使ってください。`,"panel.devices.allowTitle":`新しいデバイスのバインドを許可`,"panel.devices.policyAllowed":`新しいデバイスのバインドを許可しました。`,"panel.devices.policyDenied":`新しいデバイスの受け付けを停止しました。バインド済みのスマートフォンはそのまま使えます。`},ko:{"panel.devices.title":`페어링된 기기`,"panel.devices.unknown":`알 수 없는 기기`,"panel.devices.unknownPlatform":`알 수 없는 플랫폼`,"panel.devices.legacy":`구형`,"panel.devices.extraBindings":`이전 페어링 {count}건`,"panel.devices.boundAt":`{time}에 페어링`,"panel.devices.online":`온라인`,"panel.devices.noRecord":`기록 없음`,"panel.devices.channelRelay":`릴레이 경유`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`링크 암호화됨`,"panel.devices.plain":`링크 평문`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`방금`,"panel.devices.minutesAgo":`{count}분 전`,"panel.devices.hoursAgo":`{count}시간 전`,"panel.devices.daysAgo":`{count}일 전`,"panel.devices.cancel":`취소`,"panel.devices.unbind":`바인딩 해제`,"panel.devices.unbinding":`해제 중…`,"panel.devices.unbindTitle":`바인딩 해제`,"panel.devices.unbindConfirm":`「{name}」의 바인딩을 해제하시겠습니까?`,"panel.devices.unbindDone":`「{name}」의 바인딩을 해제했습니다(자격 증명 {count}개).`,"panel.devices.unbindDoneClosed":`「{name}」의 바인딩을 해제했습니다(자격 증명 {count}개, 연결 {closed}개 종료).`,"panel.devices.unbindFailed":`바인딩 해제에 실패했습니다: {message}`,"panel.devices.effectIdentity":`다음 요청부터 무효가 됩니다.`,"panel.devices.effectLegacy":`저장된 자격 증명만 취소됩니다. 예전 통행증은 만료 전까지 계속 쓸 수 있습니다. 즉시 끊으려면 「모두 취소」를 사용하세요.`,"panel.devices.allowTitle":`새 기기 바인딩 허용`,"panel.devices.policyAllowed":`새 기기 바인딩을 허용했습니다.`,"panel.devices.policyDenied":`새 기기 받기를 중지했습니다. 이미 바인딩된 휴대폰은 그대로 쓸 수 있습니다.`},de:{"panel.devices.title":`Gekoppelte Geräte`,"panel.devices.unknown":`Unbekanntes Gerät`,"panel.devices.unknownPlatform":`Unbekannte Plattform`,"panel.devices.legacy":`Alt`,"panel.devices.extraBindings":`Noch {count} ältere Kopplungen`,"panel.devices.boundAt":`Gekoppelt {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`Kein Eintrag`,"panel.devices.channelRelay":`Über Relay`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Verbindung verschlüsselt`,"panel.devices.plain":`Verbindung unverschlüsselt`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Gerade eben`,"panel.devices.minutesAgo":`vor {count} Min.`,"panel.devices.hoursAgo":`vor {count} Std.`,"panel.devices.daysAgo":`vor {count} Tagen`,"panel.devices.cancel":`Abbrechen`,"panel.devices.unbind":`Entkoppeln`,"panel.devices.unbinding":`Wird entkoppelt…`,"panel.devices.unbindTitle":`Gerät entkoppeln`,"panel.devices.unbindConfirm":`„{name}“ wirklich entkoppeln?`,"panel.devices.unbindDone":`„{name}“ entkoppelt ({count} Anmeldedaten).`,"panel.devices.unbindDoneClosed":`„{name}“ entkoppelt ({count} Anmeldedaten, {closed} Verbindungen getrennt).`,"panel.devices.unbindFailed":`Entkoppeln fehlgeschlagen: {message}`,"panel.devices.effectIdentity":`Gilt ab der nächsten Anfrage.`,"panel.devices.effectLegacy":`Hiermit werden nur die gespeicherten Anmeldedaten widerrufen; der alte Pass funktioniert möglicherweise bis zum Ablauf weiter. Mit „Alle widerrufen“ sperrst du ihn sofort.`,"panel.devices.allowTitle":`Neue Geräte koppeln erlauben`,"panel.devices.policyAllowed":`Neue Geräte können jetzt gekoppelt werden.`,"panel.devices.policyDenied":`Neue Geräte werden abgelehnt; bereits gekoppelte Handys funktionieren weiter.`},es:{"panel.devices.title":`Dispositivos vinculados`,"panel.devices.unknown":`Dispositivo desconocido`,"panel.devices.unknownPlatform":`Plataforma desconocida`,"panel.devices.legacy":`Antiguo`,"panel.devices.extraBindings":`{count} vinculaciones antiguas más`,"panel.devices.boundAt":`Vinculado {time}`,"panel.devices.online":`En línea`,"panel.devices.noRecord":`Sin registro`,"panel.devices.channelRelay":`Vía retransmisor`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Enlace cifrado`,"panel.devices.plain":`Enlace sin cifrar`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Ahora mismo`,"panel.devices.minutesAgo":`hace {count} min`,"panel.devices.hoursAgo":`hace {count} h`,"panel.devices.daysAgo":`hace {count} d`,"panel.devices.cancel":`Cancelar`,"panel.devices.unbind":`Desvincular`,"panel.devices.unbinding":`Desvinculando…`,"panel.devices.unbindTitle":`Desvincular dispositivo`,"panel.devices.unbindConfirm":`¿Desvincular «{name}»?`,"panel.devices.unbindDone":`«{name}» desvinculado ({count} credenciales).`,"panel.devices.unbindDoneClosed":`«{name}» desvinculado ({count} credenciales, {closed} conexiones cerradas).`,"panel.devices.unbindFailed":`No se pudo desvincular: {message}`,"panel.devices.effectIdentity":`Se aplica desde la próxima solicitud.`,"panel.devices.effectLegacy":`Solo se revoca la credencial guardada; el pase antiguo puede seguir funcionando hasta que caduque. Usa «Revocar todo» para cortarlo de inmediato.`,"panel.devices.allowTitle":`Permitir vincular dispositivos nuevos`,"panel.devices.policyAllowed":`Ya se pueden vincular dispositivos nuevos.`,"panel.devices.policyDenied":`Ya no se aceptan dispositivos nuevos; los móviles vinculados siguen funcionando.`},fr:{"panel.devices.title":`Appareils appairés`,"panel.devices.unknown":`Appareil inconnu`,"panel.devices.unknownPlatform":`Plateforme inconnue`,"panel.devices.legacy":`Ancien`,"panel.devices.extraBindings":`{count} appairages plus anciens`,"panel.devices.boundAt":`Appairé {time}`,"panel.devices.online":`En ligne`,"panel.devices.noRecord":`Aucun enregistrement`,"panel.devices.channelRelay":`Via relais`,"panel.devices.channelLan":`Réseau local`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Lien chiffré`,"panel.devices.plain":`Lien non chiffré`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`À l'instant`,"panel.devices.minutesAgo":`il y a {count} min`,"panel.devices.hoursAgo":`il y a {count} h`,"panel.devices.daysAgo":`il y a {count} j`,"panel.devices.cancel":`Annuler`,"panel.devices.unbind":`Dissocier`,"panel.devices.unbinding":`Dissociation…`,"panel.devices.unbindTitle":`Dissocier l'appareil`,"panel.devices.unbindConfirm":`Dissocier « {name} » ?`,"panel.devices.unbindDone":`« {name} » dissocié ({count} identifiants).`,"panel.devices.unbindDoneClosed":`« {name} » dissocié ({count} identifiants, {closed} connexions fermées).`,"panel.devices.unbindFailed":`Échec de la dissociation : {message}`,"panel.devices.effectIdentity":`Prend effet à la prochaine requête.`,"panel.devices.effectLegacy":`Seul l'identifiant stocké est révoqué ; l'ancien laissez-passer peut encore fonctionner jusqu'à son expiration. Utilise « Tout révoquer » pour le couper immédiatement.`,"panel.devices.allowTitle":`Autoriser l'appairage de nouveaux appareils`,"panel.devices.policyAllowed":`Les nouveaux appareils peuvent désormais être appairés.`,"panel.devices.policyDenied":`Les nouveaux appareils sont refusés ; les téléphones appairés continuent de fonctionner.`},pt:{"panel.devices.title":`Dispositivos emparelhados`,"panel.devices.unknown":`Dispositivo desconhecido`,"panel.devices.unknownPlatform":`Plataforma desconhecida`,"panel.devices.legacy":`Antigo`,"panel.devices.extraBindings":`Mais {count} emparelhamentos antigos`,"panel.devices.boundAt":`Emparelhado {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`Sem registo`,"panel.devices.channelRelay":`Via relay`,"panel.devices.channelLan":`Rede local`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Ligação cifrada`,"panel.devices.plain":`Ligação não cifrada`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Agora mesmo`,"panel.devices.minutesAgo":`há {count} min`,"panel.devices.hoursAgo":`há {count} h`,"panel.devices.daysAgo":`há {count} d`,"panel.devices.cancel":`Cancelar`,"panel.devices.unbind":`Desvincular`,"panel.devices.unbinding":`A desvincular…`,"panel.devices.unbindTitle":`Desvincular dispositivo`,"panel.devices.unbindConfirm":`Desvincular «{name}»?`,"panel.devices.unbindDone":`«{name}» desvinculado ({count} credenciais).`,"panel.devices.unbindDoneClosed":`«{name}» desvinculado ({count} credenciais, {closed} ligações fechadas).`,"panel.devices.unbindFailed":`Não foi possível desvincular: {message}`,"panel.devices.effectIdentity":`Passa a valer no próximo pedido.`,"panel.devices.effectLegacy":`Só a credencial guardada é revogada; o passe antigo pode continuar a funcionar até expirar. Usa «Revogar tudo» para o cortar já.`,"panel.devices.allowTitle":`Permitir emparelhar dispositivos novos`,"panel.devices.policyAllowed":`Já é possível emparelhar dispositivos novos.`,"panel.devices.policyDenied":`Já não são aceites dispositivos novos; os telemóveis emparelhados continuam a funcionar.`},ru:{"panel.devices.title":`Сопряжённые устройства`,"panel.devices.unknown":`Неизвестное устройство`,"panel.devices.unknownPlatform":`Неизвестная платформа`,"panel.devices.legacy":`Старое`,"panel.devices.extraBindings":`Ещё {count} старых сопряжений`,"panel.devices.boundAt":`Сопряжено {time}`,"panel.devices.online":`В сети`,"panel.devices.noRecord":`Нет записи`,"panel.devices.channelRelay":`Через ретранслятор`,"panel.devices.channelLan":`Локальная сеть`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Соединение зашифровано`,"panel.devices.plain":`Соединение без шифрования`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Только что`,"panel.devices.minutesAgo":`{count} мин назад`,"panel.devices.hoursAgo":`{count} ч назад`,"panel.devices.daysAgo":`{count} дн. назад`,"panel.devices.cancel":`Отмена`,"panel.devices.unbind":`Отвязать`,"panel.devices.unbinding":`Отвязка…`,"panel.devices.unbindTitle":`Отвязать устройство`,"panel.devices.unbindConfirm":`Отвязать «{name}»?`,"panel.devices.unbindDone":`«{name}» отвязан ({count} учётных данных).`,"panel.devices.unbindDoneClosed":`«{name}» отвязан ({count} учётных данных, {closed} соединений закрыто).`,"panel.devices.unbindFailed":`Не удалось отвязать: {message}`,"panel.devices.effectIdentity":`Действует со следующего запроса.`,"panel.devices.effectLegacy":`Отзываются только сохранённые учётные данные; старый пропуск может работать до истечения срока. Чтобы отключить сразу, выбери «Отозвать все».`,"panel.devices.allowTitle":`Разрешить сопряжение новых устройств`,"panel.devices.policyAllowed":`Новые устройства теперь могут сопрягаться.`,"panel.devices.policyDenied":`Новые устройства больше не принимаются; сопряжённые телефоны работают как раньше.`}},{"zh-Hans":{"panel.notice.title":`公告`,"panel.notice.versionLabel":`最低插件版本`,"panel.notice.effective":`苹果商店版正式发布后生效`,"panel.notice.body":`公用中转要求插件 {version} 或更高;旧版请先升级,否则连不上中转。`,"panel.notice.selfHostTitle":`搭建自己的网络`,"panel.notice.selfHostBody":`公用中转有版本门槛和限流;不想受这些限制,搭建自己的网络`,"panel.notice.selfHostAction":`搭建教程`,"panel.notice.setupGuideTitle":`搭建自己的网络`,"panel.notice.guideRelaySummary":`有公网服务器时最稳;没有服务器的话,不值得为它专门买一台。`,"panel.notice.guideRelayReady":`每个人的经验不一样,那这一块就交给你的 AI 去做吧,中转程序我已经提前编译好并开源了,一般来说直接用编译好的程序,几分钟就能搭起来。`,"panel.notice.guideRelayCopyHint":`点击下面的复制按钮,然后发送给自己的 AI,它会引导你并搭建中转。`,"panel.notice.guideRelayCopy":`点我复制内容发给 AI`,"panel.notice.guideRelayCopied":`已复制`,"panel.notice.guideRelayWarn":`如果自己没有服务器,那建议不要自己搭建中转,因为这条路会很折腾;当然,生命在于折腾,如果自己愿意当我没说。`,"panel.notice.guideTunnelSummary":`没有公网 IP 时用这条:用隧道工具把本机的直连端口映射到一个域名上。`,"panel.notice.guideTunnelOS":`先装工具(以 Cloudflare Tunnel 为例,frp 之类也行):`,"panel.notice.guideTunnelTry":`先跑一条临时隧道试通,终端会打印一个 https://xxx.trycloudflare.com 地址(重启就变,适合先用起来):`,"panel.notice.guideTunnelFixed":`想要固定地址就走命名隧道,四行依次执行,域名换成你自己的:`,"panel.notice.guideTunnelFill":`把那个域名填进面板「网络配置」的「直连地址」,保存后重新连接。`,"panel.notice.guideTailscaleInstall":`先装 Tailscale(macOS 用 brew 或 App Store 版都行),装完 sudo tailscale up 登录:`,"panel.notice.guideTailscaleServe":`起服务,把它挂在本机端口上:`,"panel.notice.guideTailscaleFill":`它会给你一个 https://<主机名>.<你的 tailnet>.ts.net 地址,把它整条填进面板「网络配置」的「直连地址」,保存后重新连接;手机也装 Tailscale 登录同一个账号,在外面也能用,不用把服务开到公网。`,"panel.notice.promptIntro":`我在 DeepSeek Harness 里装了 dsh-mobile-plugin 这个插件,想搭一套自己的中转。你可以先定位分析一下这个插件的实现;中转程序是开源的,也可以直接用。`,"panel.notice.promptRepo":`项目地址`,"panel.notice.promptAsk":`先别动手,按顺序问我这几件事,我回答完再继续:① 有没有一台带公网 IP 的服务器,是哪个系统(Ubuntu / Debian / Rocky / CentOS)?② 有没有一个能改 DNS 解析的域名?③ 那台机器上有没有 nginx,80 和 443 现在空着吗?如果我听起来不清楚你在问什么,那多半就是没有服务器;如果清楚,就让我直接把服务器连接方式给你,你自己去看环境。如果没有服务器,请直接劝我停下——为连一台手机单独买机器不划算,建议改用内网穿透或同一 WiFi——并且不要帮我挑机器。`,"panel.notice.promptDo":`我确认继续的话,按这个来做:中转只负责转发,仓库里已经有编译好的安装包,别让我在本机编译;装好后中转只监听 127.0.0.1:18788,用 nginx 把域名反代到这个端口,WebSocket 的 Upgrade 与 Connection 头必须转发;最后告诉我,在 DSH 面板「网络配置 → 中转地址」里应该填什么。`,"panel.notice.promptAfter":`搭建完成后,最好让我授权你自己把插件里的中转地址配好,并自己测一遍通不通;通了再看我要不要重新绑定设备,可以问我关掉 WiFi 后 App 还能不能连上,连不上你就帮我排查。`,"panel.notice.promptStyle":`每一步都给我可以直接照抄的命令和预期输出;出错就按错误信息继续排查,不要跳过步骤,也不要假装成功。`,"panel.notice.guideRelayTitle":`自建中转`,"panel.notice.guideTunnelTitle":`内网穿透`,"panel.notice.guideTailscaleTitle":`另一个办法:Tailscale`},"zh-Hant":{"panel.notice.title":`公告`,"panel.notice.versionLabel":`最低外掛版本`,"panel.notice.effective":`蘋果商店版正式發布後生效`,"panel.notice.body":`公用中轉要求外掛 {version} 或更高;舊版請先升級,否則連不上中轉。`,"panel.notice.selfHostTitle":`搭建自己的網路`,"panel.notice.selfHostBody":`公用中轉有版本門檻和限流;不想受這些限制,搭建自己的網路`,"panel.notice.selfHostAction":`搭建教學`,"panel.notice.setupGuideTitle":`搭建自己的網路`,"panel.notice.guideRelaySummary":`有公網伺服器時最穩;沒有伺服器的話,不值得為它特地買一台。`,"panel.notice.guideRelayReady":`每個人的經驗不一樣,那這塊就交給你的 AI 來做吧,中轉程式我已經事先編譯好並開源了,一般來說直接用編譯好的程式,幾分鐘就能架起來。`,"panel.notice.guideRelayCopyHint":`點擊下面的複製按鈕,然後發送給自己的 AI,它會引導你並架設中轉。`,"panel.notice.guideRelayCopy":`點我複製內容發給 AI`,"panel.notice.guideRelayCopied":`已複製`,"panel.notice.guideRelayWarn":`如果自己沒有伺服器,那建議不要自己架設中轉,因為這條路會很折騰;當然,生命在於折騰,如果自己願意當我沒說。`,"panel.notice.guideTunnelSummary":`沒有公網 IP 時用這條:用通道工具把本機的直連連接埠映射到一個網域上。`,"panel.notice.guideTunnelOS":`先裝工具(以 Cloudflare Tunnel 為例,frp 之類也行):`,"panel.notice.guideTunnelTry":`先跑一條臨時通道試通,終端機會印出一個 https://xxx.trycloudflare.com 位址(重啟就變,適合先用起來):`,"panel.notice.guideTunnelFixed":`想要固定位址就走命名通道,四行依次執行,網域換成你自己的:`,"panel.notice.guideTunnelFill":`把那個網域填進面板「網路設定」的「直連位址」,儲存後重新連線。`,"panel.notice.guideTailscaleInstall":`先裝 Tailscale(macOS 用 brew 或 App Store 版都行),裝完 sudo tailscale up 登入:`,"panel.notice.guideTailscaleServe":`起服務,把它掛在本機連接埠上:`,"panel.notice.guideTailscaleFill":`它會給你一個 https://<主機名>.<你的 tailnet>.ts.net 位址,把它整條填進面板「網路設定」的「直連位址」,儲存後重新連線;手機也裝 Tailscale 登入同一個帳號,在外面也能用,不用把服務開到公網。`,"panel.notice.promptIntro":`我在 DeepSeek Harness 裡裝了 dsh-mobile-plugin 這個外掛,想架一套自己的中轉。你可以先定位分析一下這個外掛的實作;中轉程式是開源的,也可以直接用。`,"panel.notice.promptRepo":`專案位址`,"panel.notice.promptAsk":`先別動手,按順序問我這幾件事,我回答完再繼續:① 有沒有帶公網 IP 的伺服器,是哪個系統(Ubuntu / Debian / Rocky / CentOS)?② 有沒有能改 DNS 解析的網域?③ 那台機器上有沒有 nginx,80 和 443 現在空著嗎?如果我聽起來不清楚你在問什麼,那多半就是沒有伺服器;如果清楚,就讓我直接把伺服器連線方式給你,你自己去看環境。如果沒有伺服器,請直接勸我停下——為連一台手機單獨買機器不划算,建議改用內網穿透或同一個 Wi-Fi——並且不要幫我挑機器。`,"panel.notice.promptDo":`我確認繼續的話,按這個來做:中轉只負責轉發,倉庫裡已經有編譯好的安裝包,別讓我在本機編譯;裝好後中轉只聽 127.0.0.1:18788,用 nginx 把網域反代到這個連接埠,WebSocket 的 Upgrade 與 Connection 標頭必須轉發;最後告訴我,在 DSH 面板「網路設定 → 中轉位址」裡應該填什麼。`,"panel.notice.promptAfter":`架好之後,最好讓我授權你自己把外掛裡的中轉位址設好,並自己測一遍通不通;通了再看我要不要重新綁定裝置,可以問我關掉 Wi-Fi 後 App 還能不能連上,連不上你就幫我排查。`,"panel.notice.promptStyle":`每一步都給我可以直接照抄的指令和預期輸出;出錯就按錯誤訊息繼續排查,不要跳過步驟,也不要假裝成功。`,"panel.notice.guideRelayTitle":`自建中轉`,"panel.notice.guideTunnelTitle":`內網穿透`,"panel.notice.guideTailscaleTitle":`另一個辦法:Tailscale`},en:{"panel.notice.title":`Announcements`,"panel.notice.versionLabel":`Minimum plugin`,"panel.notice.effective":`Applies after the App Store release`,"panel.notice.body":`The public relay requires plugin {version} or newer. On an older build, update first — otherwise it cannot connect.`,"panel.notice.selfHostTitle":`Build your own network`,"panel.notice.selfHostBody":`The public relay has a version floor and rate limits. If that gets in the way, build your own network`,"panel.notice.selfHostAction":`Setup guide`,"panel.notice.setupGuideTitle":`Build your own network`,"panel.notice.guideRelaySummary":`Best with a server of your own; not worth buying one just for this.`,"panel.notice.guideRelayReady":`Everyone has a different level of experience, so hand this part to your AI: the relay is already built and open source — with the prebuilt program it usually takes just a few minutes.`,"panel.notice.guideRelayCopyHint":`Click the copy button below, then paste it to your own AI — it will guide you and do the setup.`,"panel.notice.guideRelayCopy":`Tap to copy for your AI`,"panel.notice.guideRelayCopied":`Copied`,"panel.notice.guideRelayWarn":`Without a server of your own, I would skip self-hosting: that road is a lot of work. Then again, some people enjoy the tinkering — if that is you, go ahead.`,"panel.notice.guideTunnelSummary":`Use this without a public IP: a tunnel maps this computer’s direct port to a domain.`,"panel.notice.guideTunnelOS":`Install the tool first (Cloudflare Tunnel shown; frp or similar works too):`,"panel.notice.guideTunnelTry":`Start a temporary tunnel to test; the terminal prints a https://xxx.trycloudflare.com address (it changes on restart, fine to begin with):`,"panel.notice.guideTunnelFixed":`For a stable address use a named tunnel — run these four in order with your own domain:`,"panel.notice.guideTunnelFill":`Put that domain into “Direct address” under the panel’s “Network settings”, save, then reconnect.`,"panel.notice.guideTailscaleInstall":`Install Tailscale first (brew or the App Store build both work on macOS), then sign in with sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Start the service and point it at this computer’s port:`,"panel.notice.guideTailscaleFill":`It prints an https://<host>.<your-tailnet>.ts.net address. Put that whole address into “Direct address” under the panel’s “Network settings”, save, then reconnect. Install Tailscale on your phone too and sign in to the same account — it works away from home with nothing exposed to the public internet.`,"panel.notice.promptIntro":`I installed the dsh-mobile-plugin in DeepSeek Harness and want to host my own relay. Start by locating and analyzing how this plugin works; the relay program is open source, so you can use it directly.`,"panel.notice.promptRepo":`Project`,"panel.notice.promptAsk":`Do not start yet. Ask me, in order: (1) do I have a server with a public IP, and which OS (Ubuntu / Debian / Rocky / CentOS)? (2) do I have a domain whose DNS I can edit? (3) is nginx installed there, and are 80/443 free? If I seem unsure what you are asking, I probably have no server; if I am clear, let me hand you the server access so you inspect the environment yourself. If I have no server, tell me to stop: buying a machine just to reach one phone is not worth it, suggest a tunnel or the same Wi-Fi instead, and do not shop for servers for me.`,"panel.notice.promptDo":`If I confirm, do it this way: the relay only forwards; the repo already ships built packages, so never make me compile locally. Once installed it listens only on 127.0.0.1:18788 — reverse-proxy my domain to that port with nginx, forwarding the WebSocket Upgrade and Connection headers. Finally tell me what to put into “Network settings → Relay address” in the DSH panel.`,"panel.notice.promptAfter":`Once it is set up, it is best to let me authorize you to configure the relay address in the plugin yourself and test the connection yourself; once it works, check whether I need to re-pair devices — you can ask me whether the app still connects with Wi-Fi off, and help me troubleshoot if it does not.`,"panel.notice.promptStyle":`Give me copy-pasteable commands and the expected output for every step; if something fails, keep troubleshooting from the error, never skip steps or pretend it worked.`,"panel.notice.guideRelayTitle":`Your own relay`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Another way: Tailscale`},ja:{"panel.notice.title":`お知らせ`,"panel.notice.versionLabel":`プラグイン最低バージョン`,"panel.notice.effective":`App Store 版のリリース後に適用`,"panel.notice.body":`共用リレーはプラグイン {version} 以上が必要です。古い場合は先に更新してください。`,"panel.notice.selfHostTitle":`自分のネットワークを構築`,"panel.notice.selfHostBody":`共用リレーにはバージョン要件と速度制限があります。それが邪魔なら、自分のネットワークを構築しましょう`,"panel.notice.selfHostAction":`構築ガイド`,"panel.notice.setupGuideTitle":`自分のネットワークを構築`,"panel.notice.guideRelaySummary":`自前のサーバーがあるならこれが一番。そのためだけに買うのは割に合いません。`,"panel.notice.guideRelayReady":`経験は人それぞれなので、この部分はあなたの AI に任せてください。リレーはビルド済みで公開しています。ビルド済みのものを使えば、ふつう数分で立ち上がります。`,"panel.notice.guideRelayCopyHint":`下のコピーボタンを押して自分の AI に送ってください。あとは AI が案内して構築まで進めます。`,"panel.notice.guideRelayCopy":`押すとコピーして AI に送れます`,"panel.notice.guideRelayCopied":`コピーしました`,"panel.notice.guideRelayWarn":`自前のサーバーが無いなら、自分で中継を立てるのはおすすめしません。かなり手間がかかります。とはいえ、手を動かすのが好きな人もいます。その場合はどうぞ。`,"panel.notice.guideTunnelSummary":`グローバル IP が無い場合はこちら。トンネルツールでこの PC の直結ポートをドメインに割り当てます。`,"panel.notice.guideTunnelOS":`まずツールを導入します(例は Cloudflare Tunnel。frp などでも可):`,"panel.notice.guideTunnelTry":`まず一時トンネルで疎通確認。ターミナルに https://xxx.trycloudflare.com が表示されます(再起動で変わりますが、最初はこれで十分):`,"panel.notice.guideTunnelFixed":`固定アドレスにしたい場合は名前付きトンネル。4 行を順に、ドメインは自分のものに置き換えます:`,"panel.notice.guideTunnelFill":`そのドメインをパネルの「ネットワーク設定」の「直結アドレス」に入力し、保存して再接続します。`,"panel.notice.guideTailscaleInstall":`まず Tailscale を入れます(macOS は brew でも App Store 版でも可)。入ったら sudo tailscale up でログイン:`,"panel.notice.guideTailscaleServe":`サービスを起動して、この PC のポートに割り当てます:`,"panel.notice.guideTailscaleFill":`https://<ホスト名>.<あなたの tailnet>.ts.net というアドレスが出るので、パネルの「ネットワーク設定」の「直結アドレス」に丸ごと入れて保存し、再接続します。スマホにも Tailscale を入れて同じアカウントでログインすれば、外からでも使えます。`,"panel.notice.promptIntro":`DeepSeek Harness に dsh-mobile-plugin というプラグインを入れて、自前の中継を立てたいと思っています。まずこのプラグインの実装を特定して分析してください。中継プログラムはオープンソースなので、そのまま使えます。`,"panel.notice.promptRepo":`プロジェクト`,"panel.notice.promptAsk":`まだ作業しないでください。順番に確認してください:(1) グローバル IP のサーバーはありますか。OS は(Ubuntu / Debian / Rocky / CentOS)? (2) DNS を編集できるドメインはありますか? (3) そこに nginx は入っていて、80/443 は空いていますか? 私が質問の意味を分かっていないようならサーバーは無いと考えてください。分かる場合は接続方法をそのまま渡すので、環境を見に行ってください。サーバーが無い場合は止めるよう伝えてください。スマホ 1 台のためにマシンを買うのは割に合わないので、トンネルか同じ Wi-Fi を勧め、代わりにマシンを選ばないでください。`,"panel.notice.promptDo":`続行する場合の方針:リレーは転送専用で、リポジトリにコンパイル済みの配布物があるので手元ビルドはさせない。導入後は 127.0.0.1:18788 のみ待ち受け、ドメインを nginx でそこへリバースプロキシし、WebSocket の Upgrade と Connection ヘッダーを必ず転送。最後に DSH パネルの「ネットワーク設定 → リレーアドレス」に何を入れるか教える。`,"panel.notice.promptAfter":`設置できたら、プラグインの中継アドレス設定を私に代わって行う許可をもらい、自分で疎通確認までしてください。通ったら再ペアリングが必要か確認し、Wi-Fi を切って App が繋がるか私に聞いて、繋がらない場合は原因を調べてください。`,"panel.notice.promptStyle":`各手順はそのまま貼れるコマンドと期待される出力を示してください。失敗したらエラーから原因を追い、手順を飛ばしたり成功したふりをしないでください。`,"panel.notice.guideRelayTitle":`自前リレー`,"panel.notice.guideTunnelTitle":`トンネル`,"panel.notice.guideTailscaleTitle":`もう一つの方法:Tailscale`},ko:{"panel.notice.title":`공지`,"panel.notice.versionLabel":`최소 플러그인 버전`,"panel.notice.effective":`App Store 정식 출시 후 적용`,"panel.notice.body":`공용 릴레이는 플러그인 {version} 이상이 필요합니다. 이전 버전이라면 먼저 업데이트하세요.`,"panel.notice.selfHostTitle":`네트워크 직접 구축`,"panel.notice.selfHostBody":`공용 릴레이에는 버전 조건과 속도 제한이 있습니다. 그게 걸린다면 네트워크를 직접 구축하세요`,"panel.notice.selfHostAction":`구축 가이드`,"panel.notice.setupGuideTitle":`네트워크 직접 구축`,"panel.notice.guideRelaySummary":`공인 서버가 있으면 가장 안정적입니다. 그것만 위해 새로 사는 건 권하지 않습니다.`,"panel.notice.guideRelayReady":`경험은 사람마다 다르니 이 부분은 당신의 AI에게 맡기세요. 릴레이는 미리 빌드해 공개해 두었고, 빌드된 것을 쓰면 보통 몇 분이면 됩니다.`,"panel.notice.guideRelayCopyHint":`아래 복사 버튼을 눌러 자신의 AI에게 보내세요. 그러면 AI가 안내하고 구축까지 해 줍니다.`,"panel.notice.guideRelayCopy":`눌러서 복사해 AI에게 보내기`,"panel.notice.guideRelayCopied":`복사됨`,"panel.notice.guideRelayWarn":`공인 서버가 없다면 직접 릴레이를 구축하는 건 권하지 않습니다. 꽤 번거로운 길입니다. 그래도 손대는 걸 즐기는 분이라면 말리지 않겠습니다.`,"panel.notice.guideTunnelSummary":`공인 IP가 없을 때 쓰는 방법입니다. 터널 도구로 이 컴퓨터의 직결 포트를 도메인에 연결합니다.`,"panel.notice.guideTunnelOS":`먼저 도구를 설치합니다(예: Cloudflare Tunnel, frp 등도 가능):`,"panel.notice.guideTunnelTry":`먼저 임시 터널로 확인합니다. 터미널에 https://xxx.trycloudflare.com 주소가 찍힙니다(재시작하면 바뀌지만 처음엔 충분합니다):`,"panel.notice.guideTunnelFixed":`고정 주소가 필요하면 이름 있는 터널을 씁니다. 네 줄을 차례로, 도메인은 본인 것으로 바꾸세요:`,"panel.notice.guideTunnelFill":`그 도메인을 패널 「네트워크 설정」의 「직결 주소」에 넣고 저장한 뒤 다시 연결하세요.`,"panel.notice.guideTailscaleInstall":`먼저 Tailscale를 설치합니다(macOS는 brew 또는 App Store 버전 모두 가능). 설치 후 sudo tailscale up으로 로그인:`,"panel.notice.guideTailscaleServe":`서비스를 띄워 이 컴퓨터의 포트에 연결합니다:`,"panel.notice.guideTailscaleFill":`https://<호스트명>.<당신의 tailnet>.ts.net 주소가 나옵니다. 그 주소를 통째로 패널 「네트워크 설정」의 「직결 주소」에 넣고 저장한 뒤 다시 연결하세요. 휴대폰에도 Tailscale를 설치해 같은 계정으로 로그인하면 밖에서도 쓸 수 있습니다.`,"panel.notice.promptIntro":`DeepSeek Harness에 dsh-mobile-plugin 플러그인을 설치했고, 자체 릴레이를 세우려 합니다. 먼저 이 플러그인의 구현을 찾아서 분석해 주세요. 릴레이 프로그램은 오픈소스라 그대로 써도 됩니다.`,"panel.notice.promptRepo":`프로젝트`,"panel.notice.promptAsk":`아직 작업하지 마세요. 순서대로 물어보세요: (1) 공인 IP 서버가 있나요, OS는 무엇인가요(Ubuntu / Debian / Rocky / CentOS)? (2) DNS를 고칠 수 있는 도메인이 있나요? (3) 그 서버에 nginx가 있고 80/443이 비어 있나요? 제가 무슨 말인지 모르는 것 같으면 서버가 없다고 보세요. 안다면 접속 방법을 그대로 드릴 테니 환경을 직접 확인하세요. 서버가 없다면 중단하라고 알려 주세요. 휴대폰 하나를 위해 장비를 사는 건 손해이니 터널이나 같은 Wi-Fi를 권하고, 대신 장비를 골라 주지 마세요.`,"panel.notice.promptDo":`계속한다면 이렇게 하세요: 릴레이는 전달만 하고, 저장소에 컴파일된 배포물이 있으니 제 로컬에서 빌드하지 마세요. 설치 후에는 127.0.0.1:18788만 수신하며, 도메인을 nginx로 그 포트에 리버스 프록시하고 WebSocket의 Upgrade·Connection 헤더를 반드시 전달합니다. 마지막으로 DSH 패널 「네트워크 설정 → 릴레이 주소」에 무엇을 넣을지 알려 주세요.`,"panel.notice.promptAfter":`설치가 끝나면 플러그인의 릴레이 주소를 제가 직접 설정하도록 허락을 받고, 연결 테스트도 직접 해 주세요. 연결되면 기기 재등록이 필요한지 확인하고, Wi-Fi를 끄고도 App이 붙는지 물어보고, 안 되면 원인을 찾아 주세요.`,"panel.notice.promptStyle":`각 단계마다 그대로 붙여 넣을 명령과 예상 출력을 주세요. 실패하면 오류에서부터 계속 원인을 찾고, 단계를 건너뛰거나 성공한 척하지 마세요.`,"panel.notice.guideRelayTitle":`자체 릴레이`,"panel.notice.guideTunnelTitle":`터널`,"panel.notice.guideTailscaleTitle":`또 다른 방법: Tailscale`},de:{"panel.notice.title":`Hinweise`,"panel.notice.versionLabel":`Mindestversion`,"panel.notice.effective":`Gilt ab dem App-Store-Release`,"panel.notice.body":`Das öffentliche Relay braucht Plugin {version} oder neuer. Sonst erst aktualisieren, sonst keine Verbindung.`,"panel.notice.selfHostTitle":`Eigenes Netzwerk aufbauen`,"panel.notice.selfHostBody":`Der öffentliche Relay hat eine Mindestversion und Rate-Limits. Wenn das stört: eigenes Netzwerk aufbauen`,"panel.notice.selfHostAction":`Einrichtungsanleitung`,"panel.notice.setupGuideTitle":`Eigenes Netzwerk aufbauen`,"panel.notice.guideRelaySummary":`Am besten mit eigenem Server – dafür extra einen zu kaufen lohnt nicht.`,"panel.notice.guideRelayReady":`Erfahrung ist sehr unterschiedlich, also überlass diesen Teil deiner KI: Der Relay ist bereits gebaut und quelloffen; mit dem fertigen Programm steht er meist in wenigen Minuten.`,"panel.notice.guideRelayCopyHint":`Tippe unten auf Kopieren und schick es an deine KI – sie führt dich und richtet es ein.`,"panel.notice.guideRelayCopy":`Tippen zum Kopieren für die KI`,"panel.notice.guideRelayCopied":`Kopiert`,"panel.notice.guideRelayWarn":`Ohne eigenen Server würde ich vom Selbstbau abraten – das ist ein lästiger Weg. Andererseits: Basteln macht manchen Spaß. Wenn du dazugehörst, nur zu.`,"panel.notice.guideTunnelSummary":`Ohne öffentliche IP: Ein Tunnel mappt den Direkt-Port dieses Rechners auf eine Domain.`,"panel.notice.guideTunnelOS":`Zuerst das Tool installieren (Beispiel Cloudflare Tunnel; frp o. Ä. geht auch):`,"panel.notice.guideTunnelTry":`Zuerst einen temporären Tunnel testen: Das Terminal gibt eine https://xxx.trycloudflare.com-Adresse aus (ändert sich beim Neustart, für den Anfang ok):`,"panel.notice.guideTunnelFixed":`Für eine feste Adresse einen benannten Tunnel: die vier Zeilen nacheinander, Domain durch die eigene ersetzen:`,"panel.notice.guideTunnelFill":`Diese Domain im Panel unter „Netzwerkeinstellungen“ als „Direktadresse“ eintragen, speichern, neu verbinden.`,"panel.notice.guideTailscaleInstall":`Zuerst Tailscale installieren (unter macOS geht brew oder die App-Store-Version), danach mit sudo tailscale up anmelden:`,"panel.notice.guideTailscaleServe":`Dienst starten und auf den Port dieses Rechners legen:`,"panel.notice.guideTailscaleFill":`Ausgegeben wird eine Adresse https://<Hostname>.<dein-tailnet>.ts.net. Diese ganze Adresse im Panel unter „Netzwerkeinstellungen“ als „Direktadresse“ eintragen, speichern, neu verbinden. Tailscale auch aufs Handy, mit demselben Konto anmelden — dann geht es auch unterwegs, ohne etwas ins offene Netz zu stellen.`,"panel.notice.promptIntro":`Ich habe in DeepSeek Harness das Plugin dsh-mobile-plugin installiert und möchte einen eigenen Relay betreiben. Finde zuerst heraus, wie dieses Plugin funktioniert, und analysiere es; das Relay-Programm ist Open Source, du kannst es direkt verwenden.`,"panel.notice.promptRepo":`Projekt`,"panel.notice.promptAsk":`Noch nicht anfangen. Frage mich der Reihe nach: (1) Habe ich einen Server mit öffentlicher IP, welches System (Ubuntu / Debian / Rocky / CentOS)? (2) Habe ich eine Domain, deren DNS ich ändern kann? (3) Läuft dort nginx, sind 80/443 frei? Wenn ich nicht verstehe, wonach du fragst, habe ich vermutlich keinen Server; wenn doch, gebe ich dir einfach die Zugangsdaten und du siehst dir die Umgebung selbst an. Ohne Server: sag mir, dass ich aufhören soll – eine Maschine nur für ein Handy zu kaufen lohnt nicht, empfiehl Tunnel oder dasselbe WLAN, und suche keine Server für mich aus.`,"panel.notice.promptDo":`Wenn ich weitermache, so bitte: Der Relay leitet nur weiter; im Repo liegen fertige Pakete, lass mich nie lokal bauen. Nach der Installation lauscht er nur auf 127.0.0.1:18788 – meine Domain per nginx darauf reverse-proxen, Upgrade- und Connection-Header für WebSocket weiterreichen. Sag mir zum Schluss, was ins DSH-Panel unter „Netzwerkeinstellungen → Relay-Adresse“ gehört.`,"panel.notice.promptAfter":`Nach dem Aufbau solltest du mich fragen, ob du die Relay-Adresse im Plugin selbst eintragen und die Verbindung selbst testen darfst; wenn es läuft, prüfe, ob ich die Geräte neu koppeln muss – frag mich, ob die App bei ausgeschaltetem WLAN noch verbindet, und hilf mir bei der Fehlersuche, wenn nicht.`,"panel.notice.promptStyle":`Gib mir zu jedem Schritt kopierbare Befehle und die erwartete Ausgabe; bei Fehlern weiter anhand der Meldung suchen, keine Schritte überspringen und nichts als Erfolg ausgeben, was keiner war.`,"panel.notice.guideRelayTitle":`Eigener Relay`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Noch ein Weg: Tailscale`},es:{"panel.notice.title":`Avisos`,"panel.notice.versionLabel":`Versión mínima`,"panel.notice.effective":`Desde el lanzamiento en App Store`,"panel.notice.body":`El relay público exige el plugin {version} o superior. Si es más antiguo, actualiza primero.`,"panel.notice.selfHostTitle":`Monta tu propia red`,"panel.notice.selfHostBody":`El relé público exige una versión mínima y tiene límites. Si te estorban, monta tu propia red`,"panel.notice.selfHostAction":`Guía de montaje`,"panel.notice.setupGuideTitle":`Monta tu propia red`,"panel.notice.guideRelaySummary":`Lo mejor con un servidor propio; no vale la pena comprar uno solo para esto.`,"panel.notice.guideRelayReady":`La experiencia varía mucho, así que deja esta parte a tu IA: el relé ya está compilado y es de código abierto; con el programa ya hecho suele bastar con unos minutos.`,"panel.notice.guideRelayCopyHint":`Pulsa el botón de copiar de abajo y envíaselo a tu IA: te guiará y lo dejará montado.`,"panel.notice.guideRelayCopy":`Toca para copiar y enviar a tu IA`,"panel.notice.guideRelayCopied":`Copiado`,"panel.notice.guideRelayWarn":`Sin servidor propio, mejor no montar el relé: ese camino da bastante trabajo. Ahora bien, a alguna gente le gusta el lío; si es tu caso, adelante.`,"panel.notice.guideTunnelSummary":`Sin IP pública: un túnel mapea el puerto directo de este ordenador a un dominio.`,"panel.notice.guideTunnelOS":`Primero instala la herramienta (ejemplo con Cloudflare Tunnel; frp o similar también vale):`,"panel.notice.guideTunnelTry":`Prueba primero con un túnel temporal: el terminal imprime una dirección https://xxx.trycloudflare.com (cambia al reiniciar; sirve para empezar):`,"panel.notice.guideTunnelFixed":`Para una dirección fija usa un túnel con nombre: ejecuta estas cuatro en orden con tu dominio:`,"panel.notice.guideTunnelFill":`Pon ese dominio en «Dirección directa» de «Configuración de red», guarda y vuelve a conectar.`,"panel.notice.guideTailscaleInstall":`Instala Tailscale primero (en macOS vale brew o la versión de App Store); después inicia sesión con sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Arranca el servicio y apúntalo al puerto de este ordenador:`,"panel.notice.guideTailscaleFill":`Te da una dirección https://<host>.<tu-tailnet>.ts.net. Ponla entera en «Dirección directa» de «Configuración de red», guarda y vuelve a conectar. Instala Tailscale también en el móvil e inicia sesión con la misma cuenta: funciona fuera de casa, sin exponer nada a internet.`,"panel.notice.promptIntro":`Instalé el plugin dsh-mobile-plugin en DeepSeek Harness y quiero montar mi propio relé. Empieza localizando y analizando cómo funciona este plugin; el programa de relé es de código abierto, así que puedes usarlo directamente.`,"panel.notice.promptRepo":`Proyecto`,"panel.notice.promptAsk":`No empieces todavía. Pregúntame en orden: (1) ¿tengo un servidor con IP pública y qué sistema (Ubuntu / Debian / Rocky / CentOS)? (2) ¿tengo un dominio cuyo DNS pueda editar? (3) ¿hay nginx allí y están libres 80/443? Si no entiendo lo que preguntas, probablemente no tengo servidor; si lo entiendo, te paso el acceso y miras el entorno tú mismo. Si no tengo servidor, dime que pare: comprar una máquina solo para un teléfono no compensa, sugiere un túnel o la misma Wi-Fi y no me elijas servidores.`,"panel.notice.promptDo":`Si confirmo, hazlo así: el relé solo reenvía; en el repositorio ya hay paquetes compilados, así que no me hagas compilar localmente. Una vez instalado escucha solo en 127.0.0.1:18788: haz proxy inverso de mi dominio a ese puerto con nginx, reenviando las cabeceras Upgrade y Connection de WebSocket. Al final dime qué poner en «Configuración de red → Dirección del relé» del panel DSH.`,"panel.notice.promptAfter":`Cuando esté montado, lo mejor es que me pidas permiso para configurar tú la dirección del relé en el plugin y probar tú si conecta; si funciona, mira si necesito volver a vincular dispositivos — puedes preguntarme si la app sigue conectando con el Wi-Fi apagado y ayudarme a diagnosticar si no.`,"panel.notice.promptStyle":`Dame comandos listos para copiar y la salida esperada en cada paso; si falla algo, sigue depurando desde el error, sin saltarte pasos ni fingir que funcionó.`,"panel.notice.guideRelayTitle":`Relé propio`,"panel.notice.guideTunnelTitle":`Túnel`,"panel.notice.guideTailscaleTitle":`Otra vía: Tailscale`},fr:{"panel.notice.title":`Annonces`,"panel.notice.versionLabel":`Version minimale`,"panel.notice.effective":`Dès la sortie App Store`,"panel.notice.body":`Le relais public exige le plugin {version} ou plus. Sinon, mettez-le à jour d’abord.`,"panel.notice.selfHostTitle":`Créez votre propre réseau`,"panel.notice.selfHostBody":`Le relais public impose une version minimale et des limites. Si cela vous gêne, créez votre propre réseau`,"panel.notice.selfHostAction":`Guide d’installation`,"panel.notice.setupGuideTitle":`Créez votre propre réseau`,"panel.notice.guideRelaySummary":`Le mieux avec votre propre serveur ; pas la peine d’en louer un juste pour ça.`,"panel.notice.guideRelayReady":`L’expérience varie beaucoup, alors confiez cette partie à votre IA : le relais est déjà compilé et open source ; avec le programme fourni, quelques minutes suffisent en général.`,"panel.notice.guideRelayCopyHint":`Cliquez sur le bouton copier ci-dessous puis envoyez-le à votre IA : elle vous guidera et fera l’installation.`,"panel.notice.guideRelayCopy":`Touchez pour copier pour votre IA`,"panel.notice.guideRelayCopied":`Copié`,"panel.notice.guideRelayWarn":`Sans serveur à vous, je déconseille de monter le relais vous-même : c’est un chemin laborieux. Après, certains aiment bricoler — si c’est votre cas, allez-y.`,"panel.notice.guideTunnelSummary":`Sans IP publique : un tunnel mappe le port direct de cet ordinateur vers un domaine.`,"panel.notice.guideTunnelOS":`Installez d’abord l’outil (exemple avec Cloudflare Tunnel ; frp ou équivalent convient) :`,"panel.notice.guideTunnelTry":`Testez d’abord un tunnel temporaire : le terminal affiche une adresse https://xxx.trycloudflare.com (elle change au redémarrage, suffisant pour commencer) :`,"panel.notice.guideTunnelFixed":`Pour une adresse fixe, un tunnel nommé : exécutez ces quatre lignes avec votre domaine :`,"panel.notice.guideTunnelFill":`Mettez ce domaine dans « Adresse directe » des « Configuration réseau », enregistrez, reconnectez.`,"panel.notice.guideTailscaleInstall":`Installez Tailscale d’abord (sur macOS, brew ou la version App Store), puis connectez-vous avec sudo tailscale up :`,"panel.notice.guideTailscaleServe":`Lancez le service en le pointant vers le port de cet ordinateur :`,"panel.notice.guideTailscaleFill":`Il affiche une adresse https://<hôte>.<votre-tailnet>.ts.net. Mettez-la entière dans « Adresse directe » de « Configuration réseau », enregistrez, reconnectez. Installez aussi Tailscale sur le téléphone et connectez-vous au même compte : ça marche dehors, sans rien exposer sur Internet.`,"panel.notice.promptIntro":`J’ai installé le plugin dsh-mobile-plugin dans DeepSeek Harness et je veux héberger mon propre relais. Commencez par repérer et analyser comment ce plugin fonctionne ; le programme de relais est open source, vous pouvez l’utiliser directement.`,"panel.notice.promptRepo":`Projet`,"panel.notice.promptAsk":`N’agissez pas encore. Demandez-moi dans l’ordre : (1) ai-je un serveur avec IP publique, et quel système (Ubuntu / Debian / Rocky / CentOS) ? (2) ai-je un domaine dont je peux modifier le DNS ? (3) nginx y est-il installé, et 80/443 sont-ils libres ? Si je ne comprends pas la question, c’est probablement que je n’ai pas de serveur ; si je comprends, je vous donne l’accès et vous inspectez l’environnement vous-même. Si je n’ai pas de serveur, dites-moi d’arrêter : louer une machine juste pour un téléphone n’est pas rentable, proposez un tunnel ou le même Wi-Fi, et ne choisissez pas de serveur à ma place.`,"panel.notice.promptDo":`Si je confirme, procédez ainsi : le relais ne fait que relayer ; le dépôt fournit des paquets déjà compilés, ne me faites jamais compiler en local. Une fois installé, il écoute uniquement 127.0.0.1:18788 : reverse-proxifiez mon domaine vers ce port avec nginx en transmettant les en-têtes Upgrade et Connection du WebSocket. Dites-moi enfin quoi saisir dans « Configuration réseau → Adresse du relais » du panneau DSH.`,"panel.notice.promptAfter":`Une fois en place, demandez-moi l’autorisation de configurer vous-même l’adresse du relais dans le plugin et de tester la connexion ; si ça marche, voyez si je dois réappairer des appareils — vous pouvez me demander si l’app se connecte encore Wi-Fi coupé, et m’aider à diagnostiquer sinon.`,"panel.notice.promptStyle":`Donnez des commandes prêtes à copier et la sortie attendue à chaque étape ; en cas d’échec, continuez à investiguer à partir de l’erreur, sans sauter d’étapes ni faire comme si ça marchait.`,"panel.notice.guideRelayTitle":`Relais maison`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Autre méthode : Tailscale`},pt:{"panel.notice.title":`Avisos`,"panel.notice.versionLabel":`Versão mínima`,"panel.notice.effective":`Vale a partir do lançamento na App Store`,"panel.notice.body":`O relay público exige o plugin {version} ou superior. Se estiver mais antigo, atualize primeiro.`,"panel.notice.selfHostTitle":`Monte sua própria rede`,"panel.notice.selfHostBody":`O relay público exige uma versão mínima e tem limite de taxa. Se isso atrapalha, monte sua própria rede`,"panel.notice.selfHostAction":`Guia de instalação`,"panel.notice.setupGuideTitle":`Monte sua própria rede`,"panel.notice.guideRelaySummary":`O melhor com um servidor próprio; não vale a pena comprar um só para isso.`,"panel.notice.guideRelayReady":`A experiência varia muito, então deixe esta parte para a sua IA: o relay já está compilado e é aberto; com o programa pronto, costuma levar só alguns minutos.`,"panel.notice.guideRelayCopyHint":`Clique no botão de copiar abaixo e envie para sua IA: ela vai te guiar e fazer a instalação.`,"panel.notice.guideRelayCopy":`Toque para copiar para a IA`,"panel.notice.guideRelayCopied":`Copiado`,"panel.notice.guideRelayWarn":`Sem servidor próprio, melhor não montar o relay por conta própria: o caminho dá trabalho. Mas tem quem goste da bagunça; se for o seu caso, vá em frente.`,"panel.notice.guideTunnelSummary":`Sem IP público: um túnel mapeia a porta direta deste computador para um domínio.`,"panel.notice.guideTunnelOS":`Instale a ferramenta primeiro (exemplo com Cloudflare Tunnel; frp ou similar também serve):`,"panel.notice.guideTunnelTry":`Teste primeiro um túnel temporário: o terminal mostra um endereço https://xxx.trycloudflare.com (muda ao reiniciar; serve para começar):`,"panel.notice.guideTunnelFixed":`Para endereço fixo use um túnel nomeado: rode estas quatro em ordem com o seu domínio:`,"panel.notice.guideTunnelFill":`Coloque esse domínio em «Endereço direto» de «Configurações de rede», salve e reconecte.`,"panel.notice.guideTailscaleInstall":`Instale o Tailscale primeiro (no macOS, brew ou a versão da App Store); depois entre com sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Suba o serviço apontando para a porta deste computador:`,"panel.notice.guideTailscaleFill":`Ele mostra um endereço https://<host>.<seu-tailnet>.ts.net. Coloque o endereço inteiro em «Endereço direto» de «Configurações de rede», salve e reconecte. Instale o Tailscale no celular também e entre na mesma conta: funciona na rua, sem expor nada para a internet.`,"panel.notice.promptIntro":`Instalei o plugin dsh-mobile-plugin no DeepSeek Harness e quero hospedar meu próprio relay. Comece localizando e analisando como este plugin funciona; o programa de relay é open source, então você pode usá-lo direto.`,"panel.notice.promptRepo":`Projeto`,"panel.notice.promptAsk":`Não comece ainda. Pergunte em ordem: (1) tenho um servidor com IP público, e qual sistema (Ubuntu / Debian / Rocky / CentOS)? (2) tenho um domínio cujo DNS eu possa editar? (3) há nginx nele e as portas 80/443 estão livres? Se eu não entender o que você está perguntando, provavelmente não tenho servidor; se entender, passo o acesso e você inspeciona o ambiente. Se eu não tiver servidor, me diga para parar: comprar uma máquina só para um celular não compensa; sugira um túnel ou o mesmo Wi-Fi e não escolha servidores por mim.`,"panel.notice.promptDo":`Se eu confirmar, faça assim: o relay só encaminha; o repositório já traz pacotes compilados, então nunca me faça compilar localmente. Depois de instalado, escuta só em 127.0.0.1:18788: faça proxy reverso do meu domínio para essa porta com nginx, repassando os cabeçalhos Upgrade e Connection do WebSocket. No fim, diga o que colocar em «Configurações de rede → Endereço do relay» no painel DSH.`,"panel.notice.promptAfter":`Depois de montado, peça minha permissão para configurar você mesmo o endereço do relay no plugin e testar a conexão; se funcionar, veja se preciso emparelhar os aparelhos de novo — pode me perguntar se o app ainda conecta com o Wi-Fi desligado e me ajudar a investigar se não conectar.`,"panel.notice.promptStyle":`Dê comandos prontos para colar e a saída esperada em cada passo; se falhar, continue investigando a partir do erro, sem pular etapas nem fingir que deu certo.`,"panel.notice.guideRelayTitle":`Relay próprio`,"panel.notice.guideTunnelTitle":`Túnel`,"panel.notice.guideTailscaleTitle":`Outro caminho: Tailscale`},ru:{"panel.notice.title":`Объявления`,"panel.notice.versionLabel":`Минимальная версия`,"panel.notice.effective":`После релиза в App Store`,"panel.notice.body":`Публичному релею нужен плагин {version} или новее. Иначе сначала обновите.`,"panel.notice.selfHostTitle":`Разверните свою сеть`,"panel.notice.selfHostBody":`У публичного релея есть минимальная версия и ограничения. Если это мешает — разверните свою сеть`,"panel.notice.selfHostAction":`Инструкция`,"panel.notice.setupGuideTitle":`Разверните свою сеть`,"panel.notice.guideRelaySummary":`Лучше всего со своим сервером; покупать его только ради этого не стоит.`,"panel.notice.guideRelayReady":`Опыт у всех разный, поэтому поручите эту часть своей ИИ: релей уже собран и открыт; с готовой программой обычно хватает нескольких минут.`,"panel.notice.guideRelayCopyHint":`Нажмите кнопку копирования ниже и отправьте своей ИИ — она проведёт вас и всё настроит.`,"panel.notice.guideRelayCopy":`Нажмите, чтобы скопировать для ИИ`,"panel.notice.guideRelayCopied":`Скопировано`,"panel.notice.guideRelayWarn":`Без своего сервера я бы не советовал поднимать релей самому: это хлопотный путь. Впрочем, кому-то нравится возиться — если это про вас, дерзайте.`,"panel.notice.guideTunnelSummary":`Без публичного IP: туннель пробрасывает прямой порт этого компьютера на домен.`,"panel.notice.guideTunnelOS":`Сначала установите инструмент (пример — Cloudflare Tunnel; frp и подобные тоже подойдут):`,"panel.notice.guideTunnelTry":`Сначала проверьте временным туннелем: терминал выведет адрес https://xxx.trycloudflare.com (после перезапуска меняется — для старта годится):`,"panel.notice.guideTunnelFixed":`Для постоянного адреса — именованный туннель: выполните четыре строки по порядку со своим доменом:`,"panel.notice.guideTunnelFill":`Укажите домен в «Настройках сети» в поле «Прямой адрес», сохраните и переподключитесь.`,"panel.notice.guideTailscaleInstall":`Сначала установите Tailscale (на macOS подойдёт brew или версия из App Store), затем войдите командой sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Запустите сервис и направьте его на порт этого компьютера:`,"panel.notice.guideTailscaleFill":`Появится адрес https://<хост>.<ваш-tailnet>.ts.net. Впишите его целиком в «Настройки сети» в поле «Прямой адрес», сохраните и переподключитесь. Поставьте Tailscale и на телефон, войдите в тот же аккаунт — работает и вне дома, ничего не выставляя в интернет.`,"panel.notice.promptIntro":`Я установил в DeepSeek Harness плагин dsh-mobile-plugin и хочу поднять свой релей. Сначала найди и разбери, как устроен этот плагин; программа релея открытая, её можно использовать как есть.`,"panel.notice.promptRepo":`Проект`,"panel.notice.promptAsk":`Пока не начинайте. Спросите по порядку: (1) есть ли у меня сервер с публичным IP и какая ОС (Ubuntu / Debian / Rocky / CentOS)? (2) есть ли домен, у которого я могу менять DNS? (3) есть ли там nginx и свободны ли 80/443? Если я не понимаю, о чём вы спрашиваете, сервера, скорее всего, нет; если понимаю — я дам доступ, и вы сами посмотрите окружение. Если сервера нет — скажите остановиться: покупать машину ради одного телефона невыгодно, предложите туннель или ту же Wi-Fi, и не подбирайте мне сервер.`,"panel.notice.promptDo":`Если подтвержу — действуйте так: релей только пересылает; в репозитории есть готовые пакеты, не заставляйте меня собирать локально. После установки он слушает только 127.0.0.1:18788: настройте обратный прокси nginx с моего домена на этот порт, пробрасывая заголовки Upgrade и Connection для WebSocket. В конце скажите, что указать в «Настройки сети → Адрес релея» панели DSH.`,"panel.notice.promptAfter":`После установки попросите у меня разрешение самому прописать адрес релея в плагине и самому проверить связь; если заработает, посмотрите, нужно ли заново привязывать устройства — можно спросить, подключается ли приложение с выключенным Wi-Fi, и помочь разобраться, если нет.`,"panel.notice.promptStyle":`Для каждого шага давайте готовые к копированию команды и ожидаемый вывод; при ошибке продолжайте разбираться по сообщению, не пропускайте шаги и не выдавайте неудачу за успех.`,"panel.notice.guideRelayTitle":`Свой релей`,"panel.notice.guideTunnelTitle":`Туннель`,"panel.notice.guideTailscaleTitle":`Ещё один способ: Tailscale`}},{"zh-Hans":{"panel.selfcheck.title":`连接自检`,"panel.selfcheck.firewall":`防火墙`,"panel.selfcheck.mobile":`手机最近来过`,"panel.selfcheck.allowed":`已放行`,"panel.selfcheck.blocked":`挡住了`,"panel.selfcheck.firewallOff":`没开,不会拦`,"panel.selfcheck.unknown":`查不到`,"panel.selfcheck.mobileNever":`还没来过`,"panel.selfcheck.mobileIdle":`三十分钟内没来过`,"panel.selfcheck.mobileRecent":`最近来过`,"panel.selfcheck.verdict.ok":`最近手机连上过,这条链路是通的。`,"panel.selfcheck.verdict.notListening":`直连端口没在监听,手机拨不进来 —— 到主页的「连接状态 → 局域网直连」里重新连一次。`,"panel.selfcheck.verdict.firewallBlocked":`系统防火墙挡住了这个程序 —— 到系统设置里放行它,引导页的「检查防火墙」有逐系统的步骤。`,"panel.selfcheck.verdict.unknown":`这台机器读不到防火墙状态,所以不能算正常 —— 自己确认一下系统防火墙放行了没有。`,"panel.selfcheck.verdict.network":`电脑这侧没问题,但手机最近三十分钟没来过 —— 多半是没连同一个 WiFi、路由器隔离了设备,或者该走中转。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`直连没在监听`,"panel.selfcheck.short.firewallBlocked":`防火墙挡住了`,"panel.selfcheck.short.unknown":`防火墙状态查不到`,"panel.selfcheck.short.network":`手机三十分钟没来过`,"panel.selfcheck.checking":`检查中…`,"panel.selfcheck.notChecked":`还没自检`,"panel.selfcheck.recheck":`重新自检`,"panel.selfcheck.failed":`自检没做成`,"panel.selfcheck.unavailable":`这台宿主还没有自检接口,更新插件后再看。`,"panel.selfcheck.checkedAt":`查于 {time}`,"panel.selfcheck.port":`端口 {port}`},"zh-Hant":{"panel.selfcheck.title":`連線自檢`,"panel.selfcheck.firewall":`防火牆`,"panel.selfcheck.mobile":`手機最近來過`,"panel.selfcheck.allowed":`已放行`,"panel.selfcheck.blocked":`擋住了`,"panel.selfcheck.firewallOff":`沒開,不會擋`,"panel.selfcheck.unknown":`查不到`,"panel.selfcheck.mobileNever":`還沒來過`,"panel.selfcheck.mobileIdle":`三十分鐘內沒來過`,"panel.selfcheck.mobileRecent":`最近來過`,"panel.selfcheck.verdict.ok":`最近手機連上過,這條鏈路是通的。`,"panel.selfcheck.verdict.notListening":`直連連接埠沒在監聽,手機撥不進來 —— 到主頁的「連線狀態 → 區域網路直連」裡重新連一次。`,"panel.selfcheck.verdict.firewallBlocked":`系統防火牆擋住了這個程式 —— 到系統設定裡放行它,引導頁的「檢查防火牆」有逐系統的步驟。`,"panel.selfcheck.verdict.unknown":`這台機器讀不到防火牆狀態,所以不能算正常 —— 自己確認一下系統防火牆放行了沒有。`,"panel.selfcheck.verdict.network":`電腦這側沒問題,但手機最近三十分鐘沒來過 —— 多半是沒連同一個 WiFi、路由器隔離了裝置,或者該走中轉。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`直連沒在監聽`,"panel.selfcheck.short.firewallBlocked":`防火牆擋住了`,"panel.selfcheck.short.unknown":`防火牆狀態查不到`,"panel.selfcheck.short.network":`手機三十分鐘沒來過`,"panel.selfcheck.checking":`檢查中…`,"panel.selfcheck.notChecked":`還沒自檢`,"panel.selfcheck.recheck":`重新自檢`,"panel.selfcheck.failed":`自檢沒做成`,"panel.selfcheck.unavailable":`這台宿主還沒有自檢介面,更新外掛後再看。`,"panel.selfcheck.checkedAt":`查於 {time}`,"panel.selfcheck.port":`連接埠 {port}`},en:{"panel.selfcheck.title":`Connection self-check`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Last phone visit`,"panel.selfcheck.allowed":`Allowed`,"panel.selfcheck.blocked":`Blocked`,"panel.selfcheck.firewallOff":`Off — nothing is blocked`,"panel.selfcheck.unknown":`Unknown`,"panel.selfcheck.mobileNever":`Never`,"panel.selfcheck.mobileIdle":`Not in 30 min`,"panel.selfcheck.mobileRecent":`Recently`,"panel.selfcheck.verdict.ok":`The phone connected recently, so this path works.`,"panel.selfcheck.verdict.notListening":`The LAN port is not listening, so the phone cannot reach it — reconnect from Connection status → LAN direct on the main page.`,"panel.selfcheck.verdict.firewallBlocked":`The system firewall is blocking this program — allow it in your system settings; the setup page has a Check firewall dialog with per-OS steps.`,"panel.selfcheck.verdict.unknown":`This machine will not report its firewall state, so this cannot be called normal — check yourself that the system firewall allows the program.`,"panel.selfcheck.verdict.network":`This side looks fine, but the phone has not been here for 30 minutes — most likely a different Wi-Fi, router client isolation, or it should go through the relay.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN port not listening`,"panel.selfcheck.short.firewallBlocked":`Firewall blocking`,"panel.selfcheck.short.unknown":`Firewall unknown`,"panel.selfcheck.short.network":`No phone for 30 min`,"panel.selfcheck.checking":`Checking…`,"panel.selfcheck.notChecked":`Not checked yet`,"panel.selfcheck.recheck":`Check again`,"panel.selfcheck.failed":`Self-check failed`,"panel.selfcheck.unavailable":`This host has no self-check endpoint yet — update the plugin and look again.`,"panel.selfcheck.checkedAt":`Checked {time}`,"panel.selfcheck.port":`Port {port}`},ja:{"panel.selfcheck.title":`接続セルフチェック`,"panel.selfcheck.firewall":`ファイアウォール`,"panel.selfcheck.mobile":`最後にスマホが来た時刻`,"panel.selfcheck.allowed":`許可済み`,"panel.selfcheck.blocked":`ブロック中`,"panel.selfcheck.firewallOff":`無効(遮断なし)`,"panel.selfcheck.unknown":`取得できません`,"panel.selfcheck.mobileNever":`まだ来ていません`,"panel.selfcheck.mobileIdle":`30 分来ていません`,"panel.selfcheck.mobileRecent":`最近来ました`,"panel.selfcheck.verdict.ok":`最近スマホが接続できているので、この経路は通っています。`,"panel.selfcheck.verdict.notListening":`LAN ポートが待ち受けていないのでスマホから届きません — ホームの「接続状態 → LAN 直結」で接続し直してください。`,"panel.selfcheck.verdict.firewallBlocked":`システムのファイアウォールがこのプログラムを遮断しています — システム設定で許可してください。セットアップ画面の「ファイアウォールを確認」に OS ごとの手順があります。`,"panel.selfcheck.verdict.unknown":`このマシンではファイアウォールの状態を取得できないため、正常とは言えません — システムのファイアウォールが許可しているかご自身で確認してください。`,"panel.selfcheck.verdict.network":`パソコン側は問題なさそうですが、スマホがこの 30 分来ていません — 同じ Wi-Fi にいない、ルーターの端末分離、または中継を使うべき、のいずれかでしょう。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`LAN 待ち受けなし`,"panel.selfcheck.short.firewallBlocked":`FW が遮断`,"panel.selfcheck.short.unknown":`FW 状態が不明`,"panel.selfcheck.short.network":`スマホ 30 分なし`,"panel.selfcheck.checking":`確認中…`,"panel.selfcheck.notChecked":`まだ確認していません`,"panel.selfcheck.recheck":`もう一度確認`,"panel.selfcheck.failed":`セルフチェックに失敗しました`,"panel.selfcheck.unavailable":`このホストにはまだセルフチェックの API がありません。プラグインを更新してからご覧ください。`,"panel.selfcheck.checkedAt":`{time} に確認`,"panel.selfcheck.port":`ポート {port}`},ko:{"panel.selfcheck.title":`연결 자체 점검`,"panel.selfcheck.firewall":`방화벽`,"panel.selfcheck.mobile":`최근 휴대폰 접속`,"panel.selfcheck.allowed":`허용됨`,"panel.selfcheck.blocked":`차단됨`,"panel.selfcheck.firewallOff":`꺼짐(차단 없음)`,"panel.selfcheck.unknown":`알 수 없음`,"panel.selfcheck.mobileNever":`아직 없음`,"panel.selfcheck.mobileIdle":`30분간 없음`,"panel.selfcheck.mobileRecent":`최근 방문`,"panel.selfcheck.verdict.ok":`최근에 휴대폰이 연결되었으므로 이 경로는 정상입니다.`,"panel.selfcheck.verdict.notListening":`LAN 포트가 수신 대기 중이 아니라 휴대폰이 들어올 수 없습니다 — 메인 화면의 "연결 상태 → LAN 직접 연결"에서 다시 연결하세요.`,"panel.selfcheck.verdict.firewallBlocked":`시스템 방화벽이 이 프로그램을 차단하고 있습니다 — 시스템 설정에서 허용하세요. 설정 화면의 "방화벽 확인"에 OS별 절차가 있습니다.`,"panel.selfcheck.verdict.unknown":`이 컴퓨터는 방화벽 상태를 읽을 수 없어 정상이라고 할 수 없습니다 — 시스템 방화벽이 허용하는지 직접 확인하세요.`,"panel.selfcheck.verdict.network":`컴퓨터 쪽은 문제없어 보이지만 휴대폰이 30분 동안 오지 않았습니다 — 같은 Wi-Fi가 아니거나, 공유기가 기기를 격리했거나, 중계를 써야 하는 경우입니다.`,"panel.selfcheck.short.ok":`정상`,"panel.selfcheck.short.notListening":`LAN 수신 없음`,"panel.selfcheck.short.firewallBlocked":`방화벽 차단`,"panel.selfcheck.short.unknown":`방화벽 상태 모름`,"panel.selfcheck.short.network":`30분간 휴대폰 없음`,"panel.selfcheck.checking":`확인 중…`,"panel.selfcheck.notChecked":`아직 점검 안 함`,"panel.selfcheck.recheck":`다시 점검`,"panel.selfcheck.failed":`자체 점검 실패`,"panel.selfcheck.unavailable":`이 호스트에는 아직 자체 점검 API가 없습니다. 플러그인을 업데이트한 뒤 확인하세요.`,"panel.selfcheck.checkedAt":`{time} 확인`,"panel.selfcheck.port":`포트 {port}`},de:{"panel.selfcheck.title":`Verbindungs-Selbsttest`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Letzter Handy-Kontakt`,"panel.selfcheck.allowed":`Erlaubt`,"panel.selfcheck.blocked":`Blockiert`,"panel.selfcheck.firewallOff":`Aus — blockiert nichts`,"panel.selfcheck.unknown":`Unbekannt`,"panel.selfcheck.mobileNever":`Noch nie`,"panel.selfcheck.mobileIdle":`Seit 30 Min. nicht`,"panel.selfcheck.mobileRecent":`Zuletzt da`,"panel.selfcheck.verdict.ok":`Das Handy war zuletzt verbunden, dieser Weg funktioniert.`,"panel.selfcheck.verdict.notListening":`Der LAN-Port lauscht nicht, das Handy kommt nicht durch — verbinde neu über Verbindungsstatus → LAN-Direkt auf der Hauptseite.`,"panel.selfcheck.verdict.firewallBlocked":`Die System-Firewall blockiert dieses Programm — erlaube es in den Systemeinstellungen; im Einrichtungsfenster gibt es den Dialog „Firewall prüfen" mit Schritten je System.`,"panel.selfcheck.verdict.unknown":`Dieser Rechner meldet seinen Firewall-Status nicht, deshalb ist das nicht normal — prüfe selbst, ob die System-Firewall das Programm zulässt.`,"panel.selfcheck.verdict.network":`Auf dieser Seite sieht alles gut aus, aber das Handy war 30 Minuten nicht da — meist ein anderes WLAN, Geräte-Isolation im Router oder der Weg über das Relay.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN lauscht nicht`,"panel.selfcheck.short.firewallBlocked":`Firewall blockiert`,"panel.selfcheck.short.unknown":`Firewall unbekannt`,"panel.selfcheck.short.network":`30 Min. kein Handy`,"panel.selfcheck.checking":`Prüfe…`,"panel.selfcheck.notChecked":`Noch nicht geprüft`,"panel.selfcheck.recheck":`Erneut prüfen`,"panel.selfcheck.failed":`Selbsttest fehlgeschlagen`,"panel.selfcheck.unavailable":`Dieser Host hat noch keine Selbsttest-Schnittstelle — Plugin aktualisieren und erneut sehen.`,"panel.selfcheck.checkedAt":`Geprüft {time}`,"panel.selfcheck.port":`Port {port}`},es:{"panel.selfcheck.title":`Autodiagnóstico de conexión`,"panel.selfcheck.firewall":`Cortafuegos`,"panel.selfcheck.mobile":`Última visita del móvil`,"panel.selfcheck.allowed":`Permitido`,"panel.selfcheck.blocked":`Bloqueado`,"panel.selfcheck.firewallOff":`Apagado: no bloquea`,"panel.selfcheck.unknown":`Sin datos`,"panel.selfcheck.mobileNever":`Nunca`,"panel.selfcheck.mobileIdle":`30 min sin venir`,"panel.selfcheck.mobileRecent":`Hace poco`,"panel.selfcheck.verdict.ok":`El móvil se conectó hace poco, este camino funciona.`,"panel.selfcheck.verdict.notListening":`El puerto LAN no está escuchando, el móvil no puede entrar — vuelve a conectar desde Estado de conexión → LAN directa en la página principal.`,"panel.selfcheck.verdict.firewallBlocked":`El cortafuegos del sistema está bloqueando este programa — permítelo en los ajustes del sistema; en la página de configuración hay un diálogo «Comprobar cortafuegos» con los pasos por sistema.`,"panel.selfcheck.verdict.unknown":`Este equipo no informa del estado del cortafuegos, así que no se puede decir que esté bien — comprueba tú que el cortafuegos permita el programa.`,"panel.selfcheck.verdict.network":`Por este lado parece todo correcto, pero el móvil no aparece desde hace 30 minutos — probablemente otra Wi-Fi, aislamiento de dispositivos en el router, o toca usar el relé.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN sin escuchar`,"panel.selfcheck.short.firewallBlocked":`Cortafuegos bloquea`,"panel.selfcheck.short.unknown":`Cortafuegos sin datos`,"panel.selfcheck.short.network":`30 min sin móvil`,"panel.selfcheck.checking":`Comprobando…`,"panel.selfcheck.notChecked":`Sin comprobar`,"panel.selfcheck.recheck":`Comprobar de nuevo`,"panel.selfcheck.failed":`El autodiagnóstico falló`,"panel.selfcheck.unavailable":`Este host aún no tiene la interfaz de autodiagnóstico — actualiza el plugin y vuelve a mirar.`,"panel.selfcheck.checkedAt":`Comprobado {time}`,"panel.selfcheck.port":`Puerto {port}`},fr:{"panel.selfcheck.title":`Auto-diagnostic de connexion`,"panel.selfcheck.firewall":`Pare-feu`,"panel.selfcheck.mobile":`Dernier passage du téléphone`,"panel.selfcheck.allowed":`Autorisé`,"panel.selfcheck.blocked":`Bloqué`,"panel.selfcheck.firewallOff":`Désactivé : ne bloque rien`,"panel.selfcheck.unknown":`Inconnu`,"panel.selfcheck.mobileNever":`Jamais`,"panel.selfcheck.mobileIdle":`Rien depuis 30 min`,"panel.selfcheck.mobileRecent":`Récemment`,"panel.selfcheck.verdict.ok":`Le téléphone s’est connecté récemment, ce chemin fonctionne.`,"panel.selfcheck.verdict.notListening":`Le port LAN n’écoute pas, le téléphone ne peut pas entrer — reconnecte depuis État de la connexion → LAN direct sur la page principale.`,"panel.selfcheck.verdict.firewallBlocked":`Le pare-feu du système bloque ce programme — autorise-le dans les réglages du système ; la page de configuration propose une fenêtre « Vérifier le pare-feu » avec les étapes par système.`,"panel.selfcheck.verdict.unknown":`Cette machine ne communique pas l’état de son pare-feu, donc on ne peut pas dire que tout va bien — vérifie toi-même que le pare-feu autorise le programme.`,"panel.selfcheck.verdict.network":`De ce côté tout semble correct, mais le téléphone n’est pas venu depuis 30 minutes — sans doute un autre Wi-Fi, l’isolation des appareils sur le routeur, ou il faut passer par le relais.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN n’écoute pas`,"panel.selfcheck.short.firewallBlocked":`Pare-feu bloque`,"panel.selfcheck.short.unknown":`Pare-feu inconnu`,"panel.selfcheck.short.network":`30 min sans téléphone`,"panel.selfcheck.checking":`Vérification…`,"panel.selfcheck.notChecked":`Pas encore vérifié`,"panel.selfcheck.recheck":`Vérifier à nouveau`,"panel.selfcheck.failed":`L’auto-diagnostic a échoué`,"panel.selfcheck.unavailable":`Cet hôte n’a pas encore l’interface d’auto-diagnostic — mets le plugin à jour puis reviens.`,"panel.selfcheck.checkedAt":`Vérifié {time}`,"panel.selfcheck.port":`Port {port}`},pt:{"panel.selfcheck.title":`Autodiagnóstico de conexão`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Última visita do celular`,"panel.selfcheck.allowed":`Permitido`,"panel.selfcheck.blocked":`Bloqueado`,"panel.selfcheck.firewallOff":`Desligado: não bloqueia`,"panel.selfcheck.unknown":`Sem dados`,"panel.selfcheck.mobileNever":`Nunca`,"panel.selfcheck.mobileIdle":`30 min sem vir`,"panel.selfcheck.mobileRecent":`Recentemente`,"panel.selfcheck.verdict.ok":`O celular se conectou há pouco, este caminho funciona.`,"panel.selfcheck.verdict.notListening":`A porta LAN não está escutando, o celular não consegue entrar — reconecte em Estado da conexão → LAN direta na página principal.`,"panel.selfcheck.verdict.firewallBlocked":`O firewall do sistema está bloqueando este programa — permita-o nas configurações do sistema; a página de configuração tem a janela "Verificar firewall" com os passos por sistema.`,"panel.selfcheck.verdict.unknown":`Esta máquina não informa o estado do firewall, então não dá para dizer que está normal — confira você mesmo se o firewall permite o programa.`,"panel.selfcheck.verdict.network":`Deste lado parece tudo certo, mas o celular não aparece há 30 minutos — provavelmente outro Wi-Fi, isolamento de dispositivos no roteador, ou é hora de usar o relé.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN sem escutar`,"panel.selfcheck.short.firewallBlocked":`Firewall bloqueando`,"panel.selfcheck.short.unknown":`Firewall sem dados`,"panel.selfcheck.short.network":`30 min sem celular`,"panel.selfcheck.checking":`Verificando…`,"panel.selfcheck.notChecked":`Ainda não verificado`,"panel.selfcheck.recheck":`Verificar de novo`,"panel.selfcheck.failed":`O autodiagnóstico falhou`,"panel.selfcheck.unavailable":`Este host ainda não tem a interface de autodiagnóstico — atualize o plugin e veja de novo.`,"panel.selfcheck.checkedAt":`Verificado {time}`,"panel.selfcheck.port":`Porta {port}`},ru:{"panel.selfcheck.title":`Самопроверка подключения`,"panel.selfcheck.firewall":`Брандмауэр`,"panel.selfcheck.mobile":`Последний визит телефона`,"panel.selfcheck.allowed":`Разрешено`,"panel.selfcheck.blocked":`Блокирует`,"panel.selfcheck.firewallOff":`Выключен — не блокирует`,"panel.selfcheck.unknown":`Нет данных`,"panel.selfcheck.mobileNever":`Ни разу`,"panel.selfcheck.mobileIdle":`30 мин не заходил`,"panel.selfcheck.mobileRecent":`Недавно`,"panel.selfcheck.verdict.ok":`Телефон недавно подключался, этот путь работает.`,"panel.selfcheck.verdict.notListening":`Порт LAN не слушает, телефон не может подключиться — переподключитесь в «Состояние подключения → Прямое LAN» на главной странице.`,"panel.selfcheck.verdict.firewallBlocked":`Системный брандмауэр блокирует эту программу — разрешите её в настройках системы; на странице настройки есть окно «Проверить брандмауэр» с шагами для каждой системы.`,"panel.selfcheck.verdict.unknown":`Эта машина не сообщает состояние брандмауэра, поэтому назвать это нормой нельзя — проверьте сами, разрешает ли брандмауэр программу.`,"panel.selfcheck.verdict.network":`С этой стороны всё выглядит нормально, но телефон не появлялся 30 минут — скорее всего другой Wi-Fi, изоляция устройств на роутере или пора идти через ретранслятор.`,"panel.selfcheck.short.ok":`Норма`,"panel.selfcheck.short.notListening":`LAN не слушает`,"panel.selfcheck.short.firewallBlocked":`Брандмауэр блокирует`,"panel.selfcheck.short.unknown":`Брандмауэр неизвестен`,"panel.selfcheck.short.network":`30 мин без телефона`,"panel.selfcheck.checking":`Проверка…`,"panel.selfcheck.notChecked":`Ещё не проверялось`,"panel.selfcheck.recheck":`Проверить снова`,"panel.selfcheck.failed":`Самопроверка не удалась`,"panel.selfcheck.unavailable":`На этом хосте ещё нет интерфейса самопроверки — обновите плагин и посмотрите снова.`,"panel.selfcheck.checkedAt":`Проверено {time}`,"panel.selfcheck.port":`Порт {port}`}}],up=(()=>{let e={"zh-Hans":{},"zh-Hant":{},en:{},ja:{},ko:{},de:{},es:{},fr:{},pt:{},ru:{}};for(let t of Object.keys(e))e[t]=sp(lp.map(e=>e[t]??{}));return e})();function $(e,t){return cp(up,ap(),e,t)}var dp=()=>$(`panel.links.wechatQrAlt`);function fp(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,className:`stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z`})})}function pp(){let[e,t]=(0,g.useState)(!1);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`pointer-events-none fixed end-6 bottom-6 z-40`,children:(0,X.jsxs)(Bf,{variant:`primary`,size:`lg`,className:`pointer-events-auto rounded-full shadow-lg`,onClick:()=>t(!0),children:[(0,X.jsx)(fp,{}),$(`panel.links.joinGroup`)]})}),(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-sm`,children:[(0,X.jsx)(Pf,{className:`sr-only`,children:$(`panel.links.joinGroup`)}),(0,X.jsx)(Ff,{className:`flex justify-center`,children:(0,X.jsx)(`img`,{src:Vf,alt:dp(),className:`w-full rounded-md`})})]})})]})}var mp=`--nested-drawers`,hp=`--drawer-height`,gp=`--drawer-frontmost-height`,_p=`--drawer-swipe-movement-x`,vp=`--drawer-swipe-movement-y`,yp=`--drawer-snap-point-offset`,bp=`--drawer-swipe-strength`,xp=`--drawer-swipe-progress`,Sp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...o}=e,s=Od(),c=s.useState(`open`),l=s.useState(`nested`),u=s.useState(`mounted`);return Ir(`div`,e,{state:{open:c,transitionStatus:s.useState(`transitionStatus`)},ref:[s.context.backdropRef,t],stateAttributesMapping:At,props:[{role:`presentation`,hidden:!u,style:{pointerEvents:c?void 0:`none`,userSelect:`none`,WebkitUserSelect:`none`,[xp]:`0`,[bp]:`1`}},o],enabled:a||!l})}),Cp=Ad,wp=`data-drawer-content`,Tp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e;return Od(),Ir(`div`,e,{ref:t,props:[{[wp]:``},a]})}),Ep=g.createContext(void 0);function Dp(){return g.useContext(Ep)}var Op=`data-expanded`,kp=`data-nested-drawer-open`,Ap=`data-nested-drawer-swiping`,jp=`data-swipe-dismiss`,Mp=`data-swipe-direction`,Np=`data-swiping`,Pp=g.createContext(void 0);function Fp(e){let t=g.useContext(Pp);if(e!==!0&&t===void 0)throw Error(S(90));return t}function Ip(e,t){let n=e+t;return n>=0?t:-Math.sqrt(-n)-e}function Lp(e,t,n){if(!Number.isFinite(t)||t<=0)return null;if(typeof e==`number`)return Number.isFinite(e)?e<=1?li(e,0,1)*t:e:null;let r=e.trim();if(r.endsWith(`px`)){let e=Number.parseFloat(r);return Number.isFinite(e)?e:null}if(r.endsWith(`rem`)){let e=Number.parseFloat(r);return Number.isFinite(e)?e*n:null}return null}function Rp(e,t){let n=-1,r=1/0;for(let i=0;i<e.length;i+=1){let a=Math.abs(e[i]-t);a<r&&(r=a,n=i)}return n}function zp(){let e=Od(),{snapPoints:t,activeSnapPoint:n,setActiveSnapPoint:r,popupHeight:i}=Fp(),a=e.useState(`viewportElement`),[o,s]=g.useState(0),[c,l]=g.useState(16),u=G(()=>{let e=Me(a).documentElement;s(a?a.offsetHeight:e.clientHeight);let t=parseFloat(getComputedStyle(e).fontSize);Number.isFinite(t)&&l(t)});b(()=>{if(u(),!a||typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(u);return e.observe(a),()=>{e.disconnect()}},[u,a]);let d=g.useMemo(()=>{if(!t||t.length===0||o<=0||i<=0)return[];let e=Math.min(i,o),n=t.map(t=>{let n=Lp(t,o,c);if(n===null)return null;let r=li(n,0,e);return{value:t,height:r,offset:Math.max(0,i-r)}}).filter(e=>!!e);if(n.length<=1)return n;let r=[],a=[];for(let e=n.length-1;e>=0;--e){let t=n[e];a.some(e=>Math.abs(e-t.height)<=1)||(a.push(t.height),r.push(t))}return r.reverse(),r},[i,c,t,o]);return{snapPoints:t,activeSnapPoint:n,setActiveSnapPoint:r,popupHeight:i,viewportHeight:o,resolvedSnapPoints:d,activeSnapPointOffset:g.useMemo(()=>{if(n===null)return;let e=d.find(e=>Object.is(e.value,n));if(e)return e;let t=Math.min(i,o),r=Lp(n,o,c);if(r===null)return;let a=li(r,0,t);return d[Rp(d.map(e=>e.height),a)]},[n,i,d,c,o])?.offset??null}}var Bp=g.createContext(null);function Vp(){return g.useContext(Bp)}var Hp=!1;function Up(){Hp||=(typeof CSS<`u`&&`registerProperty`in CSS&&([_p,vp,yp].forEach(e=>{try{CSS.registerProperty({name:e,syntax:`<length>`,inherits:!1,initialValue:`0px`})}catch{}}),[{name:xp,initialValue:`0`},{name:bp,initialValue:`1`}].forEach(({name:e,initialValue:t})=>{try{CSS.registerProperty({name:e,syntax:`<number>`,inherits:!1,initialValue:t})}catch{}})),!0)}var Wp={...At,expanded(e){return e?{[Op]:``}:null},nestedDrawerOpen(e){return e?{[kp]:``}:null},nestedDrawerSwiping(e){return e?{[Ap]:``}:null},swipeDirection(e){return{[Mp]:e}},swiping(e){return e?{[Np]:``}:null}},Gp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,initialFocus:o,...s}=e,c=Od(),l=c.context.popupRef,{swipeDirection:u,frontmostHeight:d,hasNestedDrawer:f,nestedSwiping:p,nestedSwipeProgressStore:m,onPopupHeightChange:_,notifyParentFrontmostHeight:v,notifyParentHasNestedDrawer:y}=Fp(),x=c.useState(`descriptionElementId`),S=c.useState(`disablePointerDismissal`),C=c.useState(`floatingRootContext`),w=c.useState(`popupProps`),T=c.useState(`modal`),E=c.useState(`mounted`),D=c.useState(`nested`),O=c.useState(`nestedOpenDrawerCount`),k=c.useState(`transitionStatus`),A=c.useState(`open`),j=c.useState(`openMethod`),M=c.useState(`titleElementId`),N=c.useState(`role`),P=C.useState(`floatingId`),F=s.id??P,I=Vp();Pd();let{snapPoints:L,activeSnapPoint:R,activeSnapPointOffset:z}=zp(),B=O>0,V=I?.swiping??!1,H=I?.swipeStrength??null,[ee,te]=g.useState(0),U=g.useRef(0),W=G(()=>{let e=l.current;if(!e)return;let t=e.offsetHeight;if(U.current>0&&d>U.current&&t>U.current)return;if(U.current>0&&f){let e=U.current;te(e),_(e);return}let n=t;n!==U.current&&(U.current=n,te(n),_(n))});b(()=>{if(!E){U.current=0,te(0),_(0);return}let e=l.current;if(!e||(Up(),W(),typeof ResizeObserver!=`function`))return;let t=new ResizeObserver(W);return t.observe(e),()=>{t.disconnect()}},[W,E,B,_,l]),b(()=>{let e=()=>{let e=l.current;if(!e)return;let t=m.getSnapshot();t>0?e.style.setProperty(xp,`${t}`):e.style.setProperty(xp,`0`)};e();let t=m.subscribe(e),n=l.current;return()=>{t(),n&&n.style.setProperty(xp,`0`)}},[m,l]),b(()=>{if(A)return v?.(d),()=>{v?.(0)}},[d,A,v]),b(()=>{if(y)return y(A||k===`ending`),()=>{y(!1)}},[y,A,k]),$r({open:A,ref:l,onComplete(){A&&c.context.onOpenChangeComplete?.(!0)}});let ne=o===void 0?l:o,re=c.useStateSetter(`popupElement`),K={open:A,nested:D,transitionStatus:k,expanded:R===1,nestedDrawerOpen:B,nestedDrawerSwiping:p,swipeDirection:u,swiping:V},ie;ee&&(f||k===`ending`)&&(ie=`${ee}px`);let ae=L&&L.length>0&&(u===`down`||u===`up`),oe=null;ae&&z!==null&&(oe=u===`up`?-z:z);let se=I?I.getDragStyles():h;if(ae&&u===`down`){let e=z??0,t=Number.parseFloat(String(se[vp]));se=V&&Number.isFinite(t)?{...se,transform:void 0,[vp]:`${Ip(e,t)}px`}:{...se,transform:void 0}}let ce=Ir(`div`,e,{state:K,props:[w,{id:F,"aria-labelledby":M,"aria-describedby":x,role:N,...js,hidden:!E,onKeyDown(e){zd.has(e.key)&&e.stopPropagation()},style:{...se,[xp]:`0`,[mp]:O,[hp]:ie,[yp]:typeof oe==`number`?`${oe}px`:`0px`,[gp]:d?`${d}px`:void 0,[bp]:typeof H==`number`&&Number.isFinite(H)&&H>0?`${H}`:`1`}},s],ref:[t,l,re],stateAttributesMapping:Wp});return(0,X.jsx)(vo,{context:C,openInteractionType:j,disabled:!E,closeOnFocusOut:!S,initialFocus:ne,returnFocus:a,modal:T!==!1,restoreFocus:`popup`,children:ce})}),Kp=Qd;function qp({controlled:e,default:t,name:n,state:r=`value`}){let{current:i}=g.useRef(e!==void 0),[a,o]=g.useState(t);return[i&&e!==void 0?e:a,g.useCallback(e=>{i||o(e)},[])]}var Jp,Yp;function Xp(e){let{children:t,open:n,defaultOpen:r=!1,onOpenChange:i,onOpenChangeComplete:a,disablePointerDismissal:o=!1,modal:s=!0,actionsRef:c,handle:l,triggerId:u,defaultTriggerId:d=null,swipeDirection:f=`down`,snapToSequentialPoints:p=!1,snapPoints:m,snapPoint:h,defaultSnapPoint:_,onSnapPointChange:v}=e,y=Fp(!0),b=y?.onNestedSwipeProgressChange,x=y?.onNestedFrontmostHeightChange,S=y?.onNestedSwipingChange,C=y?.onNestedDrawerPresenceChange,[w,T]=g.useState(0),[E,D]=g.useState(0),[O,k]=g.useState(!1),[A,j]=g.useState(!1),[M]=g.useState(Zp),N=_===void 0?m?.[0]??null:_,P=h!==void 0,[F,I]=qp({controlled:h,default:N,name:`Drawer`,state:`snapPoint`}),L=g.useRef(!1),R=g.useRef(!1),z=G((e,t)=>{let n=t??wa(`none`);v?.(e,n),!n.isCanceled&&I(e)}),B=g.useMemo(()=>P||!m||m.length===0?F:F===null||!m.some(e=>Object.is(e,F))?N:F,[F,P,N,m]),V=G(e=>{T(e),!L.current&&e>0&&D(e)}),H=G(e=>{if(e>0){L.current=!0,D(e);return}L.current=!1,w>0&&D(w)}),ee=G(e=>{k(e)}),te=G(e=>{M.set(e),b?.(e)}),U=G(e=>{j(e),S?.(e)}),W=G((e,t)=>{i?.(e,t),!t.isCanceled&&!e&&m&&m.length>0&&z(N,wa(t.reason,t.event,t.trigger))}),ne=g.useMemo(()=>({swipeDirection:f,swipeAreaActiveRef:R,snapToSequentialPoints:p,snapPoints:m,activeSnapPoint:B,setActiveSnapPoint:z,frontmostHeight:E,popupHeight:w,hasNestedDrawer:O,nestedSwiping:A,nestedSwipeProgressStore:M,onNestedDrawerPresenceChange:ee,onPopupHeightChange:V,onNestedFrontmostHeightChange:H,onNestedSwipingChange:U,onNestedSwipeProgressChange:te,notifyParentFrontmostHeight:x,notifyParentSwipingChange:S,notifyParentSwipeProgressChange:b,notifyParentHasNestedDrawer:C}),[B,E,O,A,M,C,b,S,x,ee,H,te,U,V,w,z,m,p,R,f]),re=vf(`drawer`,{open:n,defaultOpen:r,onOpenChange:W,onOpenChangeComplete:a,disablePointerDismissal:o,modal:s,actionsRef:c,handle:l,triggerId:u,defaultTriggerId:d,children:typeof t==`function`?e=>(0,X.jsxs)(g.Fragment,{children:[Jp||=(0,X.jsx)(Qp,{}),t(e)]}):(0,X.jsxs)(g.Fragment,{children:[Yp||=(0,X.jsx)(Qp,{}),t]})});return(0,X.jsx)(Pp.Provider,{value:ne,children:re})}function Zp(){let e=0,t=new Set;return{getSnapshot:()=>e,set(n){let r=Number.isFinite(n)?n:0;r!==e&&(e=r,t.forEach(e=>{e()}))},subscribe(e){return t.add(e),()=>{t.delete(e)}}}}function Qp(){let e=Dp(),t=Od(!1),n=e?.setDrawerOpen,r=e?.removeDrawer,i=t.useState(`open`),a=t.useState(`nestedOpenDialogCount`),o=t.useState(`popupElement`),s=a===0;return b(()=>{if(r)return()=>{r(t)}},[r,t]),b(()=>{n?.(t,i)},[i,n,t]),g.useEffect(()=>{if(!i||!s||!Qe)return;let e=q(o).CloseWatcher;if(!e)return;function n(e){t.select(`open`)&&t.setOpen(!1,wa(va,e))}let r=new e,a=Ne(r,`close`,n);return()=>{a(),r.destroy()}},[t,s,i,o]),null}var $p=xf,em=Ef,tm=`data-nested-dialog-open`,nm=g.createContext(void 0);function rm(){return g.useContext(nm)}var im=10,am=.5,om=.5,sm=300,cm=4,lm=.2,um=4,dm=80,fm=360,pm=.1,mm=6,hm=2,gm=`[${wp}]`,_m=g.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,...o}=e,s=Od(),c=s.context.popupRef,l=s.context.backdropRef,{swipeDirection:u,notifyParentSwipingChange:d,notifyParentSwipeProgressChange:f,frontmostHeight:p,snapToSequentialPoints:m,swipeAreaActiveRef:h}=Fp(),_=Dp(),{snapPoints:v,resolvedSnapPoints:y,activeSnapPoint:x,activeSnapPointOffset:S,setActiveSnapPoint:C,popupHeight:w}=zp(),T=s.useState(`open`),E=s.useState(`mounted`),D=s.useState(`nested`),O=s.useState(`nestedOpenDrawerCount`),k=s.useState(`viewportElement`),A=s.useState(`popupElement`),j=_?.visualStateStore,M=O>0,N=u===`left`||u===`right`?`horizontal`:`vertical`,P=N===`vertical`,F=P?`horizontal`:`vertical`,[I,L]=g.useState(null),R=g.useRef(void 0),z=g.useRef(null),B=Le(),V=g.useRef(!1),H=g.useRef(!1),ee=g.useRef(``),te=g.useRef(!1),U=g.useRef(!1),W=g.useRef(null),ne=rm(),re=g.useMemo(()=>{if(!v||v.length<2||y.length<2||u!==`down`&&u!==`up`)return null;let e=y.map(e=>e.offset).sort((e,t)=>e-t),t=e[0];return{minOffset:t,range:e[1]-t}},[y,v,u]),K=g.useMemo(()=>!re||S===null?null:li((S-re.minOffset)/re.range,0,1),[S,re]),ie=g.useMemo(()=>v&&v.length>0&&(u===`down`||u===`up`)?u===`down`?[`down`,`up`]:[`up`,`down`]:[u],[v,u]),ae=G(e=>{c.current?.toggleAttribute(jp,e),l.current?.toggleAttribute(jp,e)}),oe=G(()=>{ae(!1),c.current?.removeAttribute(pt),L(null)}),se=G(()=>{H.current&&(H.current=!1,d?.(!1))}),ce=G((e,t,n)=>{let r=T&&!D&&t,i=r?e:0,a=T&&t?e:0;n&&f&&(f(a),a<=0&&se()),j?.set({swipeProgress:i,frontmostHeight:i>0?p:0});let o=l.current;if(!o)return;let s=r&&i>0;o.style.setProperty(xp,s?`${i}`:`0`),s&&p>0?o.style.setProperty(hp,`${p}px`):o.style.removeProperty(hp)});function le(e,t,n,r,i,a,o,s){let c=xm(e,t);if(c<=0)return null;let l=((t===`down`||t===`up`)&&v&&v.length>0?S??0:0)+wi(t,n,r),u=Math.max(0,c-l);if(u<=0)return null;let d=wi(t,o,s),f=Math.abs(d)>0?d:wi(t,i,a);return f<=lm?null:pm+(li(u/li(f,lm,um),dm,fm)-dm)/280*.9}function q(e){if(H.current||!e)return;let t=wi(e.direction??u,e.deltaX,e.deltaY);Math.abs(t)<im||(H.current=!0,d?.(!0))}let ue=ki({enabled:E&&!M,directions:ie,elementRef:s.context.popupRef,ignoreSelectorWhenTouch:!1,ignoreScrollableAncestors:!0,movementCssVars:{x:_p,y:vp},onSwipeStart(e){if(`touches`in e||e.pointerType===`touch`)return;let t=c.current,n=Me(t).getSelection?.();if(!n||n.isCollapsed)return;let r=J(n.anchorNode)?n.anchorNode:n.anchorNode?.parentElement,i=J(n.focusNode)?n.focusNode:n.focusNode?.parentElement;(Y(t,r)||Y(t,i))&&n.removeAllRanges()},onSwipingChange(e){V.current=e,vm(s.context.backdropRef.current,e),!e&&!f&&se()},swipeThreshold({element:e,direction:t}){return Sm(e,t)},canStart(e,t){let n=s.context.popupRef.current;if(!n)return!1;let r=n.ownerDocument,i=hi(n.getRootNode(),e.x,e.y);if(!i||!Y(n,i))return!1;let a=t.nativeEvent;return!((`touches`in a||a.pointerType===`touch`)&&Em(r,n))},onProgress(e,t){let n=V.current;n&&q(t);let r=!!(v&&v.length>0);if(n&&u===`down`&&r&&t){let e=s.context.popupRef.current;e&&(e.style.removeProperty(`transform`),e.style.setProperty(vp,`${Ip(S??0,t.deltaY)}px`))}let i=e;if(re&&w>0){let e=S??re.minOffset;n&&t&&Number.isFinite(t.deltaY)?i=(e=>li((e-re.minOffset)/re.range,0,1))(li(e+t.deltaY,0,w)):K!==null&&(i=K)}n||(f?.(0),se()),ce(i,!0,n)},onRelease({event:e,deltaX:t,deltaY:n,direction:r,velocityX:i,velocityY:a,releaseVelocityX:o,releaseVelocityY:c}){let l=s.context.popupRef.current;if(!l){oe();return}let d=l;function f(e){se(),ae(!0),d.style.removeProperty(`transition`),d.setAttribute(pt,``),Yr.flushSync(()=>{L(le(d,e,t,n,i,a,o,c))})}if(!v||v.length===0){if(!r){oe();return}let e=wi(r,t,n);if(e<=0)return oe(),!1;if(wi(r,i,a)>=am)return f(r),!0;let o=e>Sm(d,r);return o?f(r):oe(),o}if(u!==`down`&&u!==`up`){oe();return}if(!w)return oe(),!1;if(y.length===0){oe();return}let p=u===`down`?n:-n,h=Math.sign(p),g=u===`down`?c:-c,_=u===`down`?a:-a,b=g;if(h!==0&&Math.abs(p)>=im){let e=Math.sign(b);e!==0&&e!==h&&(b=_)}let T=S??0,E=li(T+p,0,w),D=Math.abs(b)>=om?li(b,-4,cm)*sm:0,O=m?E:li(E+D,0,w),k=wa(Ca,e),A=()=>(ce(0,!0,!0),oe(),!1),j=e=>(C(e.value,k),A()),M=e=>r?(C(null,k),k.isCanceled?A():(R.current=x,f(u),!0)):j(e);if(m){let e=[...y].sort((e,t)=>e.offset-t.offset),t=e.map(e=>e.offset),n=Rp(t,T),r=e[Rp(t,O)],i=Math.sign(b),a=h!==0&&i!==0&&i===h&&Math.abs(b)>=om,o=O;if(a){let t=li(n+h,0,e.length-1);if(t!==n){let n=e[t];(h>0?O<n.offset:O>n.offset)&&(r=n,o=n.offset)}else if(h>0)return M(r)}return Math.abs(o-w)<Math.abs(o-r.offset)?M(r):j(r)}let N=y[Rp(y.map(e=>e.offset),O)];return b>=am&&p>0||Math.abs(O-w)<Math.abs(O-N.offset)?M(N):j(N)},onDismiss(e){j?.set({swipeProgress:0,frontmostHeight:0});let t=s.context.backdropRef.current;t&&(t.style.setProperty(xp,`0`),t.style.removeProperty(hp));let n=wa(Ca,e);if(s.setOpen(!1,n),n.isCanceled){let t=R.current;t!==void 0&&C(t,wa(Ca,e)),R.current=void 0,z.current?.(),oe();return}if(s.select(`open`)){let t=e;B.request(()=>{if(s.select(`open`)){let e=R.current;e!==void 0&&C(e,wa(Ca,t)),R.current=void 0,oe(),z.current?.()}else R.current=void 0});return}R.current=void 0,ae(!0)}}),de=ue.getPointerProps(),fe=ue.getTouchProps(),{moveNative:pe,reset:me}=ue;z.current=me,g.useEffect(()=>{let e=k??A;if(!e)return;let t=e,n=Me(t);function r(e,r,i){let a=P?i.clientY-r.lastY:i.clientX-r.lastX;if(e.touches.length===2||Em(n,t)||!T||!E||M||Am(r,e,i,P))return;let o=r.scrollTarget;if(!o||o===n.documentElement||o===n.body){e.cancelable&&e.preventDefault(),e.stopPropagation(),pe(e,t);return}if(!jm(o,N)){e.cancelable&&e.preventDefault(),e.stopPropagation();return}if(a!==0){let t=Pm(o,N,u,a);r.allowSwipe?e.cancelable&&e.preventDefault():e.cancelable&&t?(r.allowSwipe=!0,e.preventDefault()):r.allowSwipe=!1}r.allowSwipe===!0&&(e.stopPropagation(),pe(e,t))}function i(e){if(ne?.onTouchMove(e),U.current)return;let t=W.current,n=e.touches[0];n&&t&&(r(e,t,n),km(t,n))}return Ne(n,`touchmove`,i,{passive:!1,capture:!0})},[E,M,T,A,P,N,u,pe,k,ne]),b(()=>{re&&!ue.swiping&&ce(!T||D?0:K??0,!0,!1)},[ce,p,D,f,T,K,re,ue.swiping,s,j]),b(()=>{if(f)return T||f(0),()=>{f(0)}},[f,T]),b(()=>{T&&(h.current||me(),oe())},[oe,T,me,h]),b(()=>{let e=l.current;return()=>{j?.set({swipeProgress:0,frontmostHeight:0}),vm(e,!1);let t=l.current;t!==e&&vm(t,!1),se()}},[l,se,j]);let he=g.useMemo(()=>({swiping:ue.swiping,getDragStyles:ue.getDragStyles,swipeStrength:I??null,setSwipeDismissed:ae}),[ae,ue.getDragStyles,ue.swiping,I]);function ge(e){U.current=e,W.current=null}function _e(){ge(!1),ee.current=``,te.current=!1}function ve(e){return ee.current=``,e.pointerType!==`touch`}return(0,X.jsx)(bf,{ref:t,className:r,style:i,render:n,...Sr(o,{onPointerDown(e){if(ee.current=e.pointerType,te.current=e.pointerType===`pen`,!T||!E||M)return;let t=hi(e.currentTarget.getRootNode(),e.clientX,e.clientY);ym(t)||bm(t)||e.pointerType!==`touch`&&de.onPointerDown?.(e)},onPointerMove(e){e.pointerType!==`touch`&&de.onPointerMove?.(e)},onPointerUp(e){ve(e)&&de.onPointerUp?.(e)},onPointerCancel(e){ve(e)&&de.onPointerCancel?.(e)},onTouchStart(e){if(ee.current===`pen`&&te.current){te.current=!1,ge(!1);return}if(!T||!E||M){ge(!1);return}let t=e.touches[0];if(!t)return;if(Om(e)){ge(!1);return}let n=e.currentTarget,r=hi(n.getRootNode(),t.clientX,t.clientY),i=at(e.nativeEvent),a=J(i)?i:n;if(!Y(n,a)){ge(!0);return}if(ne?.onTouchStart(e),ym(r)){ge(!0);return}U.current=!1;let o=mi(a,n,N),s=mi(a,n,F)!=null,c=null;o&&(c=Nm(o,N,u)?null:!1),W.current={startX:t.clientX,startY:t.clientY,lastX:t.clientX,lastY:t.clientY,scrollTarget:o,hasCrossAxisScrollableContent:s,allowSwipe:c,preserveNativeCrossAxisScroll:!1,drawerAxisAttributed:!1},fe.onTouchStart?.(e)},onTouchEnd(e){ne?.onTouchEnd(e),_e(),fe.onTouchEnd?.(e)},onTouchCancel(e){ne?.onTouchCancel(),_e(),fe.onTouchCancel?.(e)},[tm]:void 0}),children:(0,X.jsx)(Bp.Provider,{value:he,children:a})})});function vm(e,t){e?.toggleAttribute(Np,t)}function ym(e){return!!e?.closest(ii)}function bm(e){return!!e?.closest(gm)}function xm(e,t){return t===`left`||t===`right`?e.offsetWidth:e.offsetHeight}function Sm(e,t){return Math.max(xm(e,t)*.5,im)}function Cm(e,t){return e instanceof t.HTMLInputElement&&e.type===`range`}function wm(e){return e.tagName===`INPUT`||e.tagName===`TEXTAREA`}function Tm(e,t){let n=J(e.anchorNode)?e.anchorNode:e.anchorNode?.parentElement,r=J(e.focusNode)?e.focusNode:e.focusNode?.parentElement;return e.containsNode(t,!0)||Y(t,n)||Y(t,r)}function Em(e,t){let n=it(e);if(n&&Y(t,n)&&wm(n)){let{selectionStart:e,selectionEnd:t}=n;if(e!=null&&t!=null&&e<t)return!0}let r=e.getSelection?.();return!r||r.isCollapsed?!1:Tm(r,t)}function Dm(e,t){return e.composedPath().some(e=>Cm(e,t))}function Om(e){return Dm(e.nativeEvent,q(e.currentTarget))}function km(e,t){e.lastX=t.clientX,e.lastY=t.clientY}function Am(e,t,n,r){if(e.preserveNativeCrossAxisScroll)return!0;if(e.drawerAxisAttributed||e.allowSwipe===!0||!e.hasCrossAxisScrollableContent)return!1;if(!t.cancelable)return e.preserveNativeCrossAxisScroll=!0,!0;let i=r?n.clientY-e.startY:n.clientX-e.startX,a=r?n.clientX-e.startX:n.clientY-e.startY,o=Math.abs(i),s=Math.abs(a);return s>=mm&&s>o+hm?(e.preserveNativeCrossAxisScroll=!0,!0):o>=mm?(e.drawerAxisAttributed=!0,!1):!0}function jm(e,t){return Mm(e,t).max>0}function Mm(e,t){if(t===`vertical`){let t=Math.max(0,e.scrollHeight-e.clientHeight);return{offset:e.scrollTop,max:t}}let n=Math.max(0,e.scrollWidth-e.clientWidth);return{offset:e.scrollLeft,max:n}}function Nm(e,t,n){let r=Fm(n,t),{offset:i,max:a}=Mm(e,t);return r?i<=0:i>=a}function Pm(e,t,n,r){return(Fm(n,t)?r>0:r<0)&&Nm(e,t,n)}function Fm(e,t){return t===`vertical`?e===`down`:e===`right`}var Im=class extends Df{};function Lm(){return new Im}var Rm={top:`up`,bottom:`down`,left:`left`,right:`right`},zm=g.createContext(`bottom`),Bm=g.createContext(0),Vm=g.createContext(!1),Hm=Object.assign(function({side:e=`bottom`,...t}){let n=g.useContext(Bm)+1;return(0,X.jsx)(Bm,{value:n,children:(0,X.jsx)(Vm,{value:t.snapPoints!=null,children:(0,X.jsx)(zm,{value:e,children:(0,X.jsx)(Xp,{swipeDirection:Rm[e],...t})})})})},{createHandle:Lm});function Um({className:e,...t}){return(0,X.jsx)(em,{"data-slot":`drawer-trigger`,className:Q(e),...t})}var Wm={bottom:`items-end justify-center`,top:`items-start justify-center`,left:`items-stretch justify-start`,right:`items-stretch justify-end`},Gm={bottom:Q(`w-full origin-bottom [height:var(--drawer-height,auto)] max-h-full [--stack-extent:var(--drawer-frontmost-height,var(--drawer-height,0px))]`,`data-nested-drawer-open:[height:var(--drawer-frontmost-height,auto)] data-nested-drawer-open:overflow-hidden`,`[transform:translateY(calc(var(--drawer-swipe-movement-y)-var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateY(calc(100%+0.5rem))] data-ending-style:[transform:translateY(calc(100%+0.5rem))]`),top:Q(`w-full origin-top [height:var(--drawer-height,auto)] max-h-full [--stack-extent:var(--drawer-frontmost-height,var(--drawer-height,0px))]`,`data-nested-drawer-open:[height:var(--drawer-frontmost-height,auto)] data-nested-drawer-open:overflow-hidden`,`[transform:translateY(calc(var(--drawer-swipe-movement-y)+var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateY(calc(-100%-0.5rem))] data-ending-style:[transform:translateY(calc(-100%-0.5rem))]`),left:Q(`h-full w-96 max-w-full origin-left [--stack-extent:25rem]`,`[transform:translateX(calc(var(--drawer-swipe-movement-x)+var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateX(calc(-100%-0.5rem))] data-ending-style:[transform:translateX(calc(-100%-0.5rem))]`),right:Q(`h-full w-96 max-w-full origin-right [--stack-extent:25rem]`,`[transform:translateX(calc(var(--drawer-swipe-movement-x)-var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateX(calc(100%+0.5rem))] data-ending-style:[transform:translateX(calc(100%+0.5rem))]`)},Km={bottom:Q(`h-[calc(100dvh-1rem)] w-full min-h-0 origin-bottom shadow-[0_-24px_32px_-12px_var(--shadow-color)]`,`[--snap-offset:var(--drawer-snap-point-offset,0px)]`,`[transform:translateY(calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)))]`,`data-starting-style:[transform:translateY(calc(100%+0.5rem))] data-ending-style:[transform:translateY(calc(100%+0.5rem))]`),top:Q(`h-[calc(100dvh-1rem)] w-full min-h-0 origin-top`,`[--snap-offset:var(--drawer-snap-point-offset,0px)]`,`[transform:translateY(calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)))]`,`data-starting-style:[transform:translateY(calc(-100%-0.5rem))] data-ending-style:[transform:translateY(calc(-100%-0.5rem))]`)},qm={bottom:`shadow-[0_-24px_32px_-12px_var(--shadow-color)]`,top:`shadow-2xl`,left:`shadow-[24px_0_32px_-12px_var(--shadow-color)]`,right:`shadow-[-24px_0_32px_-12px_var(--shadow-color)]`},Jm={bottom:`before:absolute before:top-1.5 before:left-1/2 before:h-1 before:w-11.5 before:-translate-x-1/2 before:rounded-full`,top:`before:absolute before:bottom-1.5 before:left-1/2 before:h-1 before:w-11.5 before:-translate-x-1/2 before:rounded-full`,left:`before:absolute before:inset-e-1.5 before:top-1/2 before:h-11.5 before:w-1 before:-translate-y-1/2 before:rounded-full`,right:`before:absolute before:inset-s-1.5 before:top-1/2 before:h-11.5 before:w-1 before:-translate-y-1/2 before:rounded-full`},Ym={bottom:`pt-4!`,top:`pb-4!`,left:`pe-4!`,right:`ps-4!`},Xm={bottom:`overflow-hidden [&>[data-slot=drawer-header]]:-mt-4 [&>[data-slot=drawer-close-button]]:top-0`,top:`overflow-hidden [&>[data-slot=drawer-footer]]:-mb-4`,left:`overflow-hidden [&>:not([data-slot=drawer-close-button])]:-me-4 [&>[data-slot=drawer-close-button]]:inset-e-0`,right:`overflow-hidden [&>:not([data-slot=drawer-close-button])]:-ms-4`};function Zm({className:e,children:t,closeButton:n=!0,closeLabel:r=`Close`,backdrop:i,frame:a=!0,backdropProps:o,viewportProps:s,...c}){let l=g.useContext(zm),u=g.useContext(Bm),d=g.useContext(Vm),f=o?.forceRender===!0||(i??u<=1),p=a&&f,m=d&&(l===`bottom`||l===`top`)?l:null,{portal:h,popup:_}=Af(c);return(0,X.jsxs)(Kp,{...h,children:[f&&(0,X.jsx)(Sp,{"data-slot":`drawer-backdrop`,...o,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`opacity-[calc(1-var(--drawer-swipe-progress))]`,`motion-safe:transition-opacity motion-safe:duration-400 motion-safe:ease-out`,`data-ending-style:opacity-0 data-starting-style:opacity-0 data-swiping:duration-0`,o?.className)}),(0,X.jsx)(_m,{"data-slot":`drawer-viewport`,...s,className:Q(`fixed inset-0 z-50 flex overflow-hidden p-2`,Wm[l],m&&`touch-none`,s?.className),children:(0,X.jsx)(Gp,{"data-slot":`drawer-popup`,...p?{"data-frame":``}:{},className:Q(`relative flex min-h-0 flex-col rounded-2xl border`,m?Q(`bg-background border-border-overlay before:bg-background-strong`,p&&Q(`data-expanded:before:bg-background data-expanded:border-white/15 data-expanded:p-1.5`,`data-expanded:bg-white/10 data-expanded:shadow-none data-expanded:backdrop-blur-sm`)):p?`before:bg-background border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`:`bg-background border-border-overlay before:bg-background-strong`,`isolate outline-none`,(d||!p)&&qm[l],Ym[l],Jm[l],`motion-safe:transition-[transform,height] motion-safe:duration-400 motion-safe:ease-[cubic-bezier(0.32,1.2,0.4,1)]`,`data-ending-style:motion-safe:duration-300 data-ending-style:motion-safe:ease-out`,`data-nested-drawer-swiping:duration-0 data-swiping:duration-0 data-swiping:select-none`,m?Q(`touch-none`,Km[m]):Q(`[--stack-progress:clamp(0,var(--drawer-swipe-progress,0),1)] [--stack-step:0.05]`,`[--stack-count:max(0,calc(var(--nested-drawers,0)-var(--stack-progress)))]`,`[--stack-scale:clamp(0,calc(1-var(--stack-step)*var(--stack-count)),1)]`,`[--stack-shrink:calc(1-var(--stack-scale))]`,`[--stack-peek:calc(var(--stack-count)*1.5rem)]`,`[--stack-offset:calc(var(--stack-peek)+var(--stack-shrink)*var(--stack-extent))]`,Gm[l]),e),..._,children:(0,X.jsxs)(`div`,{"data-slot":`drawer-content`,className:Q(`relative flex min-h-0 flex-col not-has-[>[data-slot=drawer-footer]]:pb-6 not-has-[>[data-slot=drawer-header]]:pt-6 [&>[data-slot=drawer-header]+[data-slot=drawer-footer]]:pt-0`,p||m?`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`:Xm[l],m?`h-[calc(100dvh-1.5rem-var(--snap-offset,0))]`:`flex-1`),children:[t,n&&(0,X.jsx)(Cp,{"aria-label":r,"data-slot":`drawer-close-button`,className:Q(Mu({variant:`outline`,size:`icon-sm`}),`absolute inset-e-3 top-3 z-10`),children:(0,X.jsx)(th,{})})]})})})]})}function Qm({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`drawer-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function $m({className:e,...t}){return(0,X.jsx)($p,{"data-slot":`drawer-title`,className:Q(`text-foreground-intense text-2xl font-semibold`,e),...t})}function eh({className:e,...t}){return(0,X.jsx)(Tp,{"data-slot":`drawer-body`,className:Q(`min-h-0 flex-1 overflow-y-auto px-6`,e),...t})}function th(e){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,...e,children:(0,X.jsx)(`path`,{d:`M11.594 3.594c.225-.225.588-.225.813 0s.225.588 0 .812L8.813 8l3.594 3.594c.225.225.225.588 0 .813s-.588.225-.812 0L8 8.812l-3.594 3.594c-.225.225-.588.225-.812 0s-.225-.588 0-.812L7.188 8 3.594 4.406c-.225-.225-.225-.588 0-.812s.588-.225.813 0L8 7.187l3.594-3.594z`})})}var nh=g.createContext(void 0);function rh(e){let t=g.useContext(nh);if(t===void 0&&!e)throw Error(S(33));return t}var ih=g.createContext(void 0);function ah(e){let t=g.useContext(ih);if(t===void 0&&!e)throw Error(S(36));return t}var oh=g.createContext(void 0);function sh(e=!0){let t=g.useContext(oh);if(t===void 0&&!e)throw Error(S(25));return t}function ch(e){let{closeOnClick:t,highlighted:n,id:r,nodeId:i,store:a,typingRef:o,itemRef:s,itemMetadata:c}=e,{events:l}=a.useState(`floatingTreeRoot`),u=a.useState(`open`),d=sh(!0),f=d!==void 0;return g.useMemo(()=>({id:r,role:`menuitem`,tabIndex:u&&n?0:-1,onKeyDown(e){e.key===` `&&o?.current&&e.preventDefault()},onMouseMove(e){i&&l.emit(`itemhover`,{nodeId:i,target:e.currentTarget})},onClick(e){t&&l.emit(`close`,{domEvent:e,reason:ma})},onMouseUp(e){if(d){let t=d.initialCursorPointRef.current;if(d.initialCursorPointRef.current=null,f&&t&&Math.abs(e.clientX-t.x)<=1&&Math.abs(e.clientY-t.y)<=1||f&&!$e&&e.button===2)return}s.current&&a.context.allowMouseUpTriggerRef.current&&(!f||e.button===2)&&c.type===`regular-item`&&ra(s.current,e,{detail:1})}}),[t,n,r,l,i,u,a,o,s,d,f,c])}var lh={type:`regular-item`};function uh(e){let{closeOnClick:t,disabled:n,highlighted:r,id:i,store:a,typingRef:o=a.context.typingRef,nativeButton:s,itemMetadata:c,nodeId:l}=e,u=g.useRef(null),{getButtonProps:d,buttonRef:f}=ia({disabled:n,focusableWhenDisabled:!0,native:s,composite:!0}),p=ch({closeOnClick:t,highlighted:r,id:i,nodeId:l,store:a,typingRef:o,itemRef:u,itemMetadata:c}),m=g.useCallback(e=>Sr(p,{onMouseEnter(){c.type===`submenu-trigger`&&c.setActive()}},e,d),[p,d,c]),h=ur(u,f);return g.useMemo(()=>({getItemProps:m,itemRef:h}),[m,h])}var dh=g.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function fh(){return g.useContext(dh)}function ph(e={}){let{guess:t,label:n,metadata:r,textRef:i,index:a}=e,{register:o,unregister:s,subscribeMapChange:c,nextIndexRef:l}=fh(),u=g.useRef(-1),[d,f]=g.useState(a==null&&t?()=>{if(u.current===-1){let e=l.current;l.current+=1,u.current=e}return u.current}:-1),p=a??d,m=g.useRef(null),h=g.useCallback(e=>{let t=m.current;t&&s(t),m.current=e,e&&o(e,{metadata:r??null,index:a??null,label:n,textRef:i})},[a,o,s,r,n,i]);return b(()=>{if(a==null)return c(e=>{let t=m.current?e.get(m.current)?.index:null;t!=null&&f(t)})},[a,c]),{ref:h,index:p}}var mh=`data-checked`,hh=`data-unchecked`,gh={checked(e){return e?{[mh]:``}:{[hh]:``}},...gt},_h=g.createContext(void 0),vh=g.createContext(void 0);function yh(e){let t=g.useContext(vh);if(t===void 0&&!e)throw Error(S(69));return t}var bh=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,...o}=e,{store:s}=ah(),{side:c,align:l}=rh(),u=yh(!0)!=null,d=s.useState(`open`),f=s.useState(`transitionStatus`),p=s.useState(`popupProps`),m=s.useState(`mounted`),h=s.useState(`instantType`),_=s.useState(`activeTriggerElement`),v=s.useState(`parent`),y=s.useState(`lastOpenChangeReason`),b=s.useState(`rootId`),x=s.useState(`floatingRootContext`),S=s.useState(`floatingTreeRoot`),C=s.useState(`closeDelay`),w=s.useState(`hoverEnabled`),T=s.useState(`disabled`),E=s.useState(`openMethod`),D=v.type===`context-menu`;$r({open:d,ref:s.context.popupRef,onComplete(){d&&s.context.onOpenChangeComplete?.(!0)}}),g.useEffect(()=>{function e(e){s.setOpen(!1,wa(e.reason,e.domEvent))}return S.events.on(`close`,e),()=>{S.events.off(`close`,e)}},[S.events,s]),cc(x,{enabled:w&&!T&&!D&&v.type!==`menubar`,closeDelay:C});let O=s.useStateSetter(`popupElement`),k=Ir(`div`,e,{state:{transitionStatus:f,side:c,align:l,open:d,nested:v.type===`menu`,instant:h},ref:[t,s.context.popupRef,O],stateAttributesMapping:At,props:[p,{onKeyDown(e){u&&zd.has(e.key)&&e.stopPropagation()}},Kc(f),o,{"data-rootownerid":b}]}),A=v.type===void 0||D;return(_||v.type===`menubar`&&y!==`outside-press`)&&(A=!0),(0,X.jsx)(vo,{context:x,openInteractionType:E,modal:D,disabled:!m,returnFocus:a===void 0?A:a,initialFocus:v.type!==`menu`,restoreFocus:!0,externalTree:v.type===`menubar`?void 0:S,previousFocusableElement:_,nextFocusableElement:v.type===void 0?s.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:v.type===void 0?s.context.beforeContentFocusGuardRef:void 0,children:k})}),xh=g.createContext(void 0);function Sh(){let e=g.useContext(xh);if(e===void 0)throw Error(S(32));return e}var Ch=g.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i,parent:a}=ah();if(!(i.useState(`mounted`)||n))return null;let o=a.type===`menu`||a.type===`menubar`?`group`:void 0;return(0,X.jsx)(xh.Provider,{value:n,children:(0,X.jsx)(Aa,{ref:t,...r,portalOwnerRole:o})})});function wh(e){let{children:t,elementsRef:n,labelsRef:r,onMapChange:i}=e,a=G(i),[,o]=g.useState(!1),s=y(Eh).current,c=y(Th).current,l=g.useRef(0),u=g.useRef(!0),d=g.useRef(null),f=g.useRef(null),p=G(()=>{u.current||(u.current=!0,o(e=>!e))}),m=G((e,t)=>{c.set(e,t),p()}),h=G(e=>{c.delete(e),p()}),_=G(e=>{let t=new Map;return n.current.length=0,r&&(r.current.length=0),e.forEach(e=>{t.set(e.element,{...e.registration.metadata??{},index:e.index}),n.current[e.index]=e.element,r&&(r.current[e.index]=e.registration.label===void 0?e.registration.textRef?.current?.textContent??e.element.textContent:e.registration.label)}),l.current=n.current.length,t});function v(e){if(f.current?.disconnect(),f.current=null,typeof MutationObserver!=`function`||e.length<2)return;let t=new MutationObserver(n=>{if(!kh(n))return;let r=null;for(let n of e)if(n.isConnected){if(r&&Ah(r,n)>0){t.disconnect(),p();return}r=n}});f.current=t;let n=new Set;for(let t=1;t<e.length;t+=1){let r=Oh(e[t-1],e[t]);r&&n.add(r)}n.forEach(e=>t.observe(e,{childList:!0}))}let x=G(()=>{let[e,t]=Dh(c),n=_(e),r=d.current,i=!r||r.length!==e.length||e.some((e,t)=>{let n=r[t];return e.index!==n.index||e.element!==n.element||e.registration.index!==n.registration.index||e.registration.metadata!==n.registration.metadata});v(t),d.current=e,u.current=!1,i&&(s.forEach(e=>e(n)),a(n))});b(()=>(!u.current&&d.current&&_(d.current),()=>{n.current=[],r&&(r.current=[])}),[n,r,_]),b(()=>{u.current&&x()}),b(()=>()=>{f.current?.disconnect(),u.current=!0},[]);let S=G(e=>(s.add(e),()=>{s.delete(e)})),C=g.useMemo(()=>({register:m,unregister:h,subscribeMapChange:S,nextIndexRef:l}),[m,h,S,l]);return(0,X.jsx)(dh.Provider,{value:C,children:t})}function Th(){return new Map}function Eh(){return new Set}function Dh(e){let t=new Set,n=[],r=[];e.forEach((e,i)=>{if(!i.isConnected)return;let a=e.index,o={index:a??-1,element:i,registration:e};a===null?r.push(o):a>=0&&(t.add(a),n.push(o))});let i=0;return r.sort((e,t)=>Ah(e.element,t.element)),r.forEach(e=>{for(;t.has(i);)i+=1;e.index=i,n.push(e),i+=1}),t.size>0&&n.sort((e,t)=>e.index-t.index),[n,r.map(e=>e.element)]}function Oh(e,t){let n=e.parentElement;for(;n&&!n.contains(t);)n=n.parentElement;return n}function kh(e){for(let t of e)for(let e=0;e<t.removedNodes.length;e+=1)if(t.removedNodes[e].isConnected)return!0;return!1}function Ah(e,t){return e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}var jh=20;function Mh(e,t,n,r){let[i,a]=g.useState(!1);b(()=>{if(!e||!t||n==null){a(!1);return}let r=Me(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-jh)},[e,t,n]),uf(e&&(!t||i),r)}var Nh=g.forwardRef(function(e,t){let{anchor:n,positionMethod:r=`absolute`,className:i,render:a,side:o,align:s,sideOffset:c=0,alignOffset:l=0,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,disableAnchorTracking:m=!1,collisionAvoidance:h=oi,style:_,...v}=e,{store:y}=ah(),x=Sh(),S=sh(!0),C=y.useState(`parent`),w=y.useState(`floatingRootContext`),T=y.useState(`floatingTreeRoot`),E=y.useState(`mounted`),D=y.useState(`open`),O=y.useState(`modal`),k=y.useState(`openMethod`),A=y.useState(`activeTriggerElement`),j=y.useState(`transitionStatus`),M=y.useState(`positionerElement`),N=y.useState(`instantType`),P=y.useState(`adaptiveOrigin`),F=y.useState(`lastOpenChangeReason`),I=y.useState(`floatingNodeId`),L=y.useState(`floatingParentNodeId`),R=w.useState(`domReferenceElement`),z=g.useRef(null),B=Qr(M),V=n,H=c,ee=l,te=s,U=h;C.type===`context-menu`&&(V=n??C.context?.anchor,te??=`start`,!o&&te!==`center`&&(ee=e.alignOffset??2,H=e.sideOffset??-5));let W=o,ne=te;C.type===`menu`?(W??=`inline-end`,ne??=`start`,U=e.collisionAvoidance??si):C.type===`menubar`&&(W??=C.context.orientation===`vertical`?`inline-end`:`bottom`,ne??=`start`);let re=C.type===`context-menu`,G=Uc({anchor:V,floatingRootContext:w,positionMethod:S?`fixed`:r,mounted:E,side:W,sideOffset:H,align:ne,alignOffset:ee,arrowPadding:re?0:f,collisionBoundary:u,collisionPadding:d,sticky:p,nodeId:I,keepMounted:x,disableAnchorTracking:m,collisionAvoidance:U,shift:re?{crossAxis:!(`side`in U&&U.side===`flip`),rootBoundary:`layoutViewport`}:void 0,externalTree:T,adaptiveOrigin:P});g.useEffect(()=>{function e(e){e.open&&(e.parentNodeId===I&&y.set(`hoverEnabled`,!1),e.nodeId!==I&&e.parentNodeId===y.select(`floatingParentNodeId`)&&y.setOpen(!1,wa(xa)))}return T.events.on(`menuopenchange`,e),()=>{T.events.off(`menuopenchange`,e)}},[y,T.events,I]),g.useEffect(()=>{if(y.select(`floatingParentNodeId`)==null)return;function e(e){if(e.open||e.nodeId!==y.select(`floatingParentNodeId`))return;let t=e.reason??`sibling-open`;y.setOpen(!1,wa(t))}return T.events.on(`menuopenchange`,e),()=>{T.events.off(`menuopenchange`,e)}},[T.events,y]);let K=Be();g.useEffect(()=>{D||K.clear()},[D,K]),g.useEffect(()=>{function e(e){if(D&&e.nodeId===y.select(`floatingParentNodeId`)){if(e.target&&A&&A!==e.target){let e=y.select(`closeDelay`);e>0?K.isStarted()||K.start(e,()=>{y.setOpen(!1,wa(xa))}):y.setOpen(!1,wa(xa))}else K.clear()}}return T.events.on(`itemhover`,e),()=>{T.events.off(`itemhover`,e)}},[T.events,D,A,y,K]),g.useEffect(()=>{let e={open:D,nodeId:I,parentNodeId:L,reason:y.select(`lastOpenChangeReason`)};T.events.emit(`menuopenchange`,e)},[T.events,D,y,I,L]),b(()=>{let e=R,t=z.current;if(e&&(z.current=e),t&&e&&e!==t){y.set(`instantType`,void 0);let e=new AbortController;return B(()=>{y.set(`instantType`,`trigger-change`)},e.signal),()=>{e.abort()}}},[R,B,y]);let ie={open:D,side:G.side,align:G.align,anchorHidden:G.anchorHidden,nested:C.type===`menu`,instant:N},ae=C.type===`menubar`&&C.context.modal;Mh(D&&(ae||O&&F!==`trigger-hover`),k===`touch`,M,A);let oe=qc(e,ie,{styles:G.positionerStyles,transitionStatus:j,props:v,refs:[t,y.useStateSetter(`positionerElement`)],hidden:!E,inert:!D}),se=E&&C.type!==`menu`&&(C.type!==`menubar`&&O&&F!==`trigger-hover`||C.type===`menubar`&&C.context.modal),ce=null;return C.type===`menubar`?ce=C.context.contentElement:C.type===void 0&&(ce=A),(0,X.jsxs)(nh.Provider,{value:G,children:[se&&(0,X.jsx)(Zd,{ref:C.type===`context-menu`||C.type===`nested-context-menu`?C.context.internalBackdropRef:null,inert:Gr(!D),cutout:ce}),(0,X.jsx)(so,{id:I,children:(0,X.jsx)(wh,{elementsRef:y.context.itemDomElements,labelsRef:y.context.itemLabels,children:oe})})]})}),Ph=g.createContext(void 0);function Fh(){let e=g.useContext(Ph);if(e===void 0)throw Error(S(34));return e}var Ih=g.memo(g.forwardRef(function(e,t){let{render:n,className:r,value:i,defaultValue:a,onValueChange:o,disabled:s=!1,style:c,"aria-labelledby":l,...u}=e,[d,f]=g.useState(void 0),[p,m]=qp({controlled:i,default:a,name:`MenuRadioGroup`}),h=G((e,t)=>{o?.(e,t),!t.isCanceled&&m(e)}),_=Ir(`div`,e,{state:{disabled:s},ref:t,props:{role:`group`,"aria-labelledby":l??d,"aria-disabled":s||void 0,...u}}),v=g.useMemo(()=>({value:p,setValue:h,disabled:s}),[p,h,s]);return(0,X.jsx)(_h.Provider,{value:f,children:(0,X.jsx)(Ph.Provider,{value:v,children:_})})})),Lh=g.createContext(void 0);function Rh(){let e=g.useContext(Lh);if(e===void 0)throw Error(S(35));return e}var zh=g.forwardRef(function(e,t){let{render:n,className:r,id:i,label:a,nativeButton:o=!1,disabled:s=!1,closeOnClick:c=!1,value:l,style:u,...d}=e,f=ph({guess:!0,label:a}),m=rh(!0),h=jd(i),{store:_}=ah(),v=_.useState(`isActive`,f.index),y=_.useState(`itemProps`),{value:b,setValue:x,disabled:S}=Fh(),C=_.useState(`disabled`),w=s||S||C,T=b===l,{getItemProps:E,itemRef:D}=uh({closeOnClick:c,disabled:w,highlighted:v,id:h,store:_,nativeButton:o,nodeId:m?.context.nodeId,itemMetadata:lh}),O=g.useMemo(()=>({disabled:w,highlighted:v,checked:T}),[w,v,T]);function k(e){let t=wa(ma,e.nativeEvent,void 0,{preventUnmountOnClose:p});x(l,t)}let A=Ir(`div`,e,{state:O,stateAttributesMapping:gh,props:[y,{role:`menuitemradio`,"aria-checked":T,onClick:k},d,E],ref:[D,t,f.ref]});return(0,X.jsx)(Lh.Provider,{value:O,children:A})}),Bh=g.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=Rh(),c=g.useRef(null),{transitionStatus:l,mounted:u,setMounted:d}=As(s.checked);return $r({batch:!0,enabled:!s.checked,open:s.checked,ref:c,onComplete(){s.checked||d(!1)}}),Ir(`span`,e,{state:{checked:s.checked,disabled:s.disabled,highlighted:s.highlighted,transitionStatus:l},stateAttributesMapping:gh,ref:[t,c],props:{"aria-hidden":!0,...o},enabled:a||u})}),Vh=g.createContext(null);function Hh(e){let t=g.useContext(Vh);if(t===null&&!e)throw Error(S(5));return t}var Uh={...Zs,disabled:e=>e.parent.type===`menubar`&&e.parent.context.disabled||e.disabled,modal:e=>(e.parent.type===void 0||e.parent.type===`context-menu`)&&(e.modal??!0),openMethod:e=>e.openMethod,allowMouseEnter:e=>e.allowMouseEnter,highlightItemOnHover:e=>e.highlightItemOnHover,parent:e=>e.parent,rootId:e=>e.parent.type===`menu`?e.parent.store.select(`rootId`):e.parent.type===void 0?e.rootId:e.parent.context.rootId,activeIndex:e=>e.activeIndex,isActive:(e,t)=>e.activeIndex===t,hoverEnabled:e=>e.hoverEnabled,instantType:e=>e.instantType,lastOpenChangeReason:e=>e.openChangeReason,floatingTreeRoot:e=>e.parent.type===`menu`?e.parent.store.select(`floatingTreeRoot`):e.floatingTreeRoot,floatingNodeId:e=>e.floatingNodeId,floatingParentNodeId:e=>e.floatingParentNodeId,itemProps:e=>e.itemProps,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin,keyboardEventRelay:e=>{if(e.keyboardEventRelay)return e.keyboardEventRelay;if(e.parent.type===`menu`)return e.parent.store.select(`keyboardEventRelay`)}},Wh=class extends ae{constructor(e,t,n=!1){let r=new Ws,i=Kh(r,t,n,e);super(i,Gh(r),Uh),this.unsubscribeParentListener=this.observe(`parent`,e=>{if(this.unsubscribeParentListener?.(),e.type===`menu`){let t=e.store.select(`rootId`),n=e.store.select(`floatingTreeRoot`),r=e.store.select(`keyboardEventRelay`);this.unsubscribeParentListener=e.store.subscribe(()=>{let i=e.store.select(`rootId`),a=e.store.select(`floatingTreeRoot`),o=e.store.select(`keyboardEventRelay`);(t!==i||n!==a||r!==o)&&(t=i,n=a,r=o,this.notifyAll())}),this.context.allowMouseUpTriggerRef=e.store.context.allowMouseUpTriggerRef;return}e.type!==void 0&&(this.context.allowMouseUpTriggerRef=e.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(e,t){this.state.floatingRootContext.context.events.emit(`setOpen`,{open:e,eventDetails:t})}unsubscribeParentListener=null};function Gh(e){return{positionerRef:g.createRef(),popupRef:g.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:g.createRef(),beforeContentFocusGuardRef:g.createRef(),onOpenChangeComplete:void 0,triggerElements:e}}function Kh(e,t,n=!1,r){return{...Gs(e,t,n),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,highlightItemOnHover:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new to,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:h,keyboardEventRelay:void 0,closeDelay:0,adaptiveOrigin:void 0,...r}}var qh=g.createContext(void 0);function Jh(){return g.useContext(qh)}var Yh=F(function(e){let{children:t,open:n,onOpenChange:r,onOpenChangeComplete:i,defaultOpen:a=!1,disabled:o=!1,modal:s,loopFocus:c=!0,orientation:l=`vertical`,actionsRef:u,closeParentOnEsc:d=!1,handle:f,triggerId:p,defaultTriggerId:_=null,highlightItemOnHover:v=!0}=e,x=sh(!0),S=ah(!0),C=Hh(!0),w=Jh(),T=g.useMemo(()=>w&&S?{type:`menu`,store:S.store}:C?{type:`menubar`,context:C}:x&&!S?{type:`context-menu`,context:x}:{type:void 0},[x,S,C,w]),E=qi(),D=qi(),O=io(),k=T.type===`menu`?T.store:void 0,A=(n??a)&&k?.state.transitionStatus===`starting`,j=y(()=>A?k?.state.instantType:void 0).current,M=Xh({open:a,openProp:n,activeTriggerId:_,triggerIdProp:p,parent:T,disabled:o,highlightItemOnHover:v,modal:T.type===void 0?s:void 0,rootId:E,instantType:j},D,O!=null);M.useControlledProp(`openProp`,n),M.useControlledProp(`triggerIdProp`,p),M.useContextCallback(`onOpenChangeComplete`,i);let N=M.useState(`floatingTreeRoot`),P=oo(N),F=M.useState(`open`),I=M.useState(`activeTriggerElement`),L=M.useState(`positionerElement`),R=M.useState(`hoverEnabled`),z=M.useState(`disabled`),B=M.useState(`lastOpenChangeReason`),V=M.useState(`parent`),H=M.useState(`activeIndex`),ee=M.useState(`payload`),te=M.useState(`floatingParentNodeId`),U=g.useRef(null),W=g.useRef(V.type!==`context-menu`),ne=Be(),re=g.useRef(!0),K=Be(),ie=te!=null,{openMethod:ae,triggerProps:oe}=Tf(F);M.useSyncedValues({disabled:o,highlightItemOnHover:v,modal:V.type===void 0?s:void 0,openMethod:ae,rootId:E}),Bs(M);let{forceUnmount:se,transitionStatus:ce}=Vs(F,M,()=>{M.set(`allowMouseEnter`,!1)},A),le=Qr(M.context.popupRef);g.useEffect(()=>{if(j===void 0)return;let e=()=>{M.state.instantType===j&&M.set(`instantType`,void 0)};if(!F){e();return}if(ce!==void 0)return;if(M.context.popupRef.current==null){e();return}let t=new AbortController;return le(e,t.signal),()=>{t.abort()}},[j,F,ce,le,M]),b(()=>{x&&!S?M.update({parent:{type:`context-menu`,context:x},floatingNodeId:P,floatingParentNodeId:O}):S&&M.update({floatingNodeId:P,floatingParentNodeId:O})},[x,S,P,O,M]),g.useEffect(()=>{if(F||(U.current=null),V.type===`context-menu`){if(!F){ne.clear(),W.current=!1;return}ne.start(500,()=>{W.current=!0})}},[ne,F,V.type]),b(()=>{!F&&!R&&M.set(`hoverEnabled`,!0)},[F,R,M]);let q=G((e,t)=>{let n=t.reason;if(!e&&!M.select(`open`)||F===e&&t.trigger===I&&B===n)return;let i=Rs(t);if(!e&&t.trigger==null&&(t.trigger=I??void 0),r?.(e,t),t.isCanceled)return;M.state.floatingRootContext.dispatchOpenChange(e,t);let a=t.event;if(e===!1&&a?.type===`click`&&a.pointerType===`touch`&&!re.current)return;e&&n===`trigger-focus`?(re.current=!1,K.start(300,()=>{re.current=!0})):(re.current=!0,K.clear());let o=(n===`trigger-press`||n===`item-press`)&&a.detail===0,s=!e&&(n===`escape-key`||n==null);U.current=t.event;let c=Ls(M.state,e,t.trigger,i());c.openChangeReason=n,c.instantType=V.type===`menubar`&&(n===`trigger-focus`||n===`focus-out`||n===`trigger-hover`||n===`list-navigation`||n===`sibling-open`)?`group`:o||s?o?`click`:`dismiss`:void 0,M.update(c)}),ue=ks({popupStore:M,floatingRootContext:M.state.floatingRootContext,floatingId:D,nested:O!=null,onOpenChange:q}),de=ue.context.events;b(()=>{let e=({open:e,eventDetails:t})=>q(e,t);return de.on(`setOpen`,e),()=>{de?.off(`setOpen`,e)}},[de,q]);let J=g.useCallback(()=>{M.setOpen(!1,wa(Sa))},[M]);g.useImperativeHandle(u,()=>({unmount:se,close:J}),[se,J]);let fe;V.type===`context-menu`&&(fe=V.context),g.useImperativeHandle(fe?.positionerRef,()=>L,[L]),g.useImperativeHandle(fe?.actionsRef,()=>({setOpen:q}),[q]);let pe=So(ue,{enabled:!z,bubbles:{escapeKey:d&&V.type===`menu`},outsidePress(){return V.type!==`context-menu`||U.current?.type===`contextmenu`||W.current},externalTree:ie?N:void 0}),me=kc(),he=g.useCallback(e=>{M.select(`activeIndex`)!==e&&M.set(`activeIndex`,e)},[M]),ge=vc(ue,{enabled:!z,listRef:M.context.itemDomElements,activeIndex:H,nested:V.type!==void 0,loopFocus:c,orientation:l,parentOrientation:V.type===`menubar`?V.context.orientation:void 0,rtl:me===`rtl`,disabledIndices:m,onNavigate:he,openOnArrowKeyDown:V.type!==`context-menu`,externalTree:ie?N:void 0,focusItemOnHover:v}),_e=g.useCallback(e=>{M.context.typingRef.current=e},[M]),ve=yc(ue,{enabled:!z,listRef:M.context.itemLabels,elementsRef:M.context.itemDomElements,activeIndex:H,resetMs:500,onMatch:e=>{F&&e!==H&&M.set(`activeIndex`,e)},onTyping:_e}),ye=g.useMemo(()=>{let e=Sr(ve.reference,ge.reference,pe.reference,{onMouseMove(){M.set(`allowMouseEnter`,!0)}},oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=F,e},[M,ve.reference,ge.reference,pe.reference,oe,F]),be=g.useMemo(()=>{let e=Sr(ge.trigger,pe.trigger,oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=!1,e},[ge.trigger,pe.trigger,oe]);y(()=>(M.update({inactiveTriggerProps:be}),null)),Hs(M,{floatingRootContext:ue,activeTriggerProps:ye,inactiveTriggerProps:be,popupProps:g.useMemo(()=>Sr(js,{id:D,role:`menu`,"aria-orientation":l===`horizontal`?`horizontal`:void 0,"aria-labelledby":I?.id,onMouseMove(){M.set(`allowMouseEnter`,!0),V.type===`menu`&&M.set(`hoverEnabled`,!1)},onClick(){M.select(`hoverEnabled`)&&M.set(`hoverEnabled`,!1)},onKeyDown(e){let t=M.select(`keyboardEventRelay`);t&&!e.isPropagationStopped()&&t(e)}},ve.floating,ge.floating,pe.floating),[I,D,l,V.type,M,ve.floating,ge.floating,pe.floating]),itemProps:ge.item??h});let xe=g.useMemo(()=>({store:M,parent:T}),[M,T]),Se=(0,X.jsxs)(ih.Provider,{value:xe,children:[f&&(0,X.jsx)(Ps,{handle:f,store:M}),typeof t==`function`?t({payload:ee}):t]});return V.type===void 0||V.type===`context-menu`?(0,X.jsx)(co,{externalTree:N,children:Se}):Se});function Xh(e,t,n){return y(()=>new Wh(e,t,n)).current}var Zh=5;function Qh(e,t){let n=$h(t);return e.clientX>=n.left-Zh&&e.clientX<=n.right+Zh&&e.clientY>=n.top-Zh&&e.clientY<=n.bottom+Zh}function $h(e){let t=e.getBoundingClientRect(),n=q(e);if(rt)return t;let r=n.getComputedStyle(e,`::before`),i=n.getComputedStyle(e,`::after`);if(r.content===`none`&&i.content===`none`)return t;let a=parseFloat(r.width)||0,o=parseFloat(r.height)||0,s=parseFloat(i.width)||0,c=parseFloat(i.height)||0,l=Math.max(t.width,a,s),u=Math.max(t.height,o,c),d=l-t.width,f=u-t.height;return{left:t.left-d/2,right:t.right+d/2,top:t.top-f/2,bottom:t.bottom+f/2}}function eg(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=ta(),{ref:i,index:a}=ph(e),o=n===a,s=g.useRef(null),c=ur(i,s);return{compositeProps:{tabIndex:o?0:-1,onFocus(){r(a)},onMouseMove(){let e=s.current;if(!t||!e)return;let n=e.hasAttribute(`disabled`)||e.ariaDisabled===`true`;!o&&!n&&e.focus()}},compositeRef:c,index:a}}function tg(e){let{render:t,className:n,style:r,state:i=h,props:a=m,refs:o=m,metadata:s,stateAttributesMapping:c,tag:l=`div`,...u}=e,{compositeProps:d,compositeRef:f}=eg({metadata:s});return Ir(l,e,{state:i,ref:[f,...o],props:[d,...a,u],stateAttributesMapping:c})}function ng(e){if(fe(e)&&e.hasAttribute(`data-rootownerid`))return e.getAttribute(`data-rootownerid`);if(!we(e))return ng(De(e))}function rg(e,t){let n=g.useRef(null);function r(t){Yr.flushSync(()=>{e.setOpen(!1,wa(ga,t.nativeEvent,t.currentTarget))}),Xn(n.current)?.focus()}function i(n){let r=e.select(`positionerElement`);if(r&&Zn(n,r))e.context.beforeContentFocusGuardRef.current?.focus();else{Yr.flushSync(()=>{e.setOpen(!1,wa(ga,n.nativeEvent,n.currentTarget))});let i=Yn(e.context.triggerFocusTargetRef.current||t.current);for(;i!==null&&Y(r,i);){let e=i;if(i=Kn(i),i===e)break}i?.focus()}}return{preFocusGuardRef:n,handlePreFocusGuardFocus:r,handleFocusTargetFocus:i}}function ig(e){let{enabled:t=!0,mouseDownAction:n,open:r}=e,i=g.useRef(!1);return g.useMemo(()=>t?{onMouseDown:e=>{(n===`open`&&!r||n===`close`&&r)&&(i.current=!0,Me(e.currentTarget).addEventListener(`click`,()=>{i.current=!1},{once:!0}))},onClick:e=>{i.current&&(i.current=!1,e.preventBaseUIHandler())}}:h,[t,n,r])}var ag=I(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,id:s,openOnHover:c,delay:l=100,closeDelay:u=0,handle:d,payload:f,...p}=e,m=ah(!0),_=Qs(d)??m?.store;if(!_)throw Error(S(85));let v=jd(s),y=_.useState(`isTriggerActive`,v),b=_.useState(`floatingRootContext`),x=_.useState(`isOpenedByTrigger`,v),C=_.useState(`triggerPopupId`,v),w=g.useRef(null),T=sg(),E=ta(!0),D=ao(),O=g.useMemo(()=>D??new to,[D]),{registerTrigger:k,isMountedByThisTrigger:A}=zs(v,w,_,{payload:f,closeDelay:u,parent:T,floatingTreeRoot:O,floatingNodeId:oo(O),floatingParentNodeId:io(),keyboardEventRelay:E?.relayKeyboardEvent}),j=T.type===`menubar`,M=_.useState(`disabled`),N=a||M||j&&T.context.disabled,{getButtonProps:P,buttonRef:F}=ia({disabled:N,native:o});g.useEffect(()=>{!x&&T.type===void 0&&(_.context.allowMouseUpTriggerRef.current=!1)},[_,x,T.type]);let I=g.useRef(null),L=Be(),R=G(e=>{if(!I.current)return;L.clear(),_.context.allowMouseUpTriggerRef.current=!1;let t=e.target;Y(I.current,t)||Y(_.select(`positionerElement`),t)||t===I.current||(t==null||ng(t)!==_.select(`rootId`))&&(Qh(e,I.current)||O.events.emit(`close`,{domEvent:e,reason:ba}))});g.useEffect(()=>{x&&_.select(`lastOpenChangeReason`)===`trigger-hover`&&Me(I.current).addEventListener(`mouseup`,R,{once:!0})},[x,R,_]);let z=j&&T.context.hasSubmenuOpen,B=uc(b,{enabled:(c??z)&&!N&&(!j||z&&!A),handleClose:Dc({blockPointerEvents:!j}),mouseOnly:!0,move:!1,restMs:T.type===void 0?l:void 0,delay:{close:u},triggerElementRef:w,externalTree:O,isActiveTrigger:y,isClosing:()=>_.select(`transitionStatus`)===`ending`}),V=og(x,_.select(`lastOpenChangeReason`)),H=yo(b,{enabled:!N,event:x&&j?`click`:`mousedown`,toggle:!0,ignoreMouse:!1,stickIfOpen:T.type===void 0&&V}),ee=nc(b,{enabled:!N&&z}),te=ig({open:x,enabled:j,mouseDownAction:`open`}),U=g.useMemo(()=>Sr(ee.reference,H.reference),[ee.reference,H.reference]),W=_.useState(`triggerProps`,A),{preFocusGuardRef:ne,handlePreFocusGuardFocus:re,handleFocusTargetFocus:K}=rg(_,w),ie={disabled:N,open:x},ae=[I,t,F,k,w],oe=[U,B??h,W,{"aria-haspopup":`menu`,"aria-controls":C,id:v,onMouseDown:e=>{_.select(`open`)||(L.start(200,()=>{_.context.allowMouseUpTriggerRef.current=!0}),Me(e.currentTarget).addEventListener(`mouseup`,R,{once:!0}))}},j?{role:`menuitem`}:{},te,p,P],se=Ir(`button`,e,{enabled:!j,stateAttributesMapping:Ot,state:ie,ref:ae,props:oe});return j?(0,X.jsx)(tg,{tag:`button`,render:n,className:r,style:i,state:ie,refs:ae,props:oe,stateAttributesMapping:Ot}):x?(0,X.jsxs)(g.Fragment,{children:[(0,X.jsx)(lr,{ref:ne,onFocus:re},`${v}-pre-focus-guard`),(0,X.jsx)(g.Fragment,{children:se},v),(0,X.jsx)(lr,{ref:_.context.triggerFocusTargetRef,onFocus:K},`${v}-post-focus-guard`)]}):(0,X.jsx)(g.Fragment,{children:se},v)});function og(e,t){let n=Be(),[r,i]=g.useState(!1);return b(()=>{e&&t===`trigger-hover`?(i(!0),n.start(500,()=>{i(!1)})):e||(n.clear(),i(!1))},[e,t,n]),r}function sg(){let e=Hh(!0);return g.useMemo(()=>e?{type:`menubar`,context:e}:{type:void 0},[e])}var cg=g.forwardRef(function(e,t){let{className:n,render:r,orientation:i=`horizontal`,style:a,...o}=e;return Ir(`div`,e,{state:{orientation:i},ref:t,props:[{role:`separator`,"aria-orientation":i},o]})});function lg(e){return e==null||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`}var ug=(0,g.createContext)({disableAnimations:!1});function dg(){return(0,g.use)(ug)}var fg=`(prefers-reduced-motion: reduce)`;function pg(){let e=ld(fg),{disableAnimations:t}=dg();return t||e}var mg=[`side`,`sideOffset`,`align`,`alignOffset`,`anchor`,`positionMethod`,`collisionBoundary`,`collisionPadding`,`collisionAvoidance`,`sticky`,`arrowPadding`,`disableAnchorTracking`],hg=[`container`,`keepMounted`];function gg(e){let{positionerProps:t,portalProps:n,...r}=e,i={...t},a={...n},o={};for(let e of Object.keys(r)){let t=r[e];mg.includes(e)?t!==void 0&&(i[e]=t):hg.includes(e)?t!==void 0&&(a[e]=t):o[e]=t}return{positioner:i,portal:a,popup:o}}var _g=[`relative inline-flex items-center gap-1.5 transform-gpu cursor-pointer font-medium outline-none`,`transition duration-250 ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`select-none not-data-popup-open:active:scale-[0.97] not-data-popup-open:active:duration-100 not-data-popup-open:active:ease-in-out not-data-popup-open:active:translate-y-px`,`data-disabled:opacity-disabled data-disabled:pointer-events-none`,`group-data-disabled/submenu-trigger:opacity-disabled group-data-disabled/submenu-trigger:pointer-events-none`,`motion-reduce:transition-none`,`data-[orientation=vertical]:text-start`,`[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`],vg=[`text-foreground-strong hover:text-foreground-intense focus-visible:text-foreground-intense`,`data-active:text-foreground-intense data-popup-open:text-foreground-intense data-pressed:text-foreground-intense`],yg=[...vg,`before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit]`,`before:transition-colors before:duration-300`,`motion-reduce:before:transition-none`,`hover:before:bg-background-muted focus-visible:before:bg-background-muted`,`data-active:before:bg-background-muted`,`data-popup-open:before:bg-background-muted data-pressed:before:bg-background-muted`,`data-highlighted:not-data-disabled:text-foreground-intense`,`data-highlighted:not-data-disabled:before:bg-background-muted`,`group-data-highlighted/submenu-trigger:not-data-disabled:text-foreground-intense`,`group-data-highlighted/submenu-trigger:not-data-disabled:before:bg-background-muted`,`group-data-popup-open/submenu-trigger:not-data-disabled:text-foreground-intense`,`group-data-popup-open/submenu-trigger:not-data-disabled:before:bg-background-muted`],bg=[...vg,`after:absolute after:rounded-full after:bg-no-repeat`,`after:[background-image:linear-gradient(0deg,currentColor,currentColor)]`,`after:transition-[background-size] after:duration-300`,`motion-reduce:after:transition-none`,`data-[orientation=horizontal]:after:inset-x-0`,`data-[orientation=horizontal]:after:h-0.5`,`data-[orientation=horizontal]:after:bg-size-[0_2px]`,`ltr:data-[orientation=horizontal]:after:bg-right rtl:data-[orientation=horizontal]:after:bg-left`,`hover:data-[orientation=horizontal]:after:bg-size-[100%_2px] focus-visible:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:hover:data-[orientation=horizontal]:after:bg-left rtl:hover:data-[orientation=horizontal]:after:bg-right`,`ltr:focus-visible:data-[orientation=horizontal]:after:bg-left rtl:focus-visible:data-[orientation=horizontal]:after:bg-right`,`data-active:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-active:data-[orientation=horizontal]:after:bg-left rtl:data-active:data-[orientation=horizontal]:after:bg-right`,`data-popup-open:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-popup-open:data-[orientation=horizontal]:after:bg-left rtl:data-popup-open:data-[orientation=horizontal]:after:bg-right`,`data-pressed:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-pressed:data-[orientation=horizontal]:after:bg-left rtl:data-pressed:data-[orientation=horizontal]:after:bg-right`,`data-[orientation=vertical]:after:inset-s-0 data-[orientation=vertical]:after:top-[25%] data-[orientation=vertical]:after:bottom-[25%]`,`data-[orientation=vertical]:after:w-0.5`,`data-[orientation=vertical]:after:bg-size-[2px_0]`,`data-[orientation=vertical]:after:[background-position-y:bottom]`,`hover:data-[orientation=vertical]:after:bg-size-[2px_100%] hover:data-[orientation=vertical]:after:[background-position-y:top]`,`focus-visible:data-[orientation=vertical]:after:bg-size-[2px_100%] focus-visible:data-[orientation=vertical]:after:[background-position-y:top]`,`data-active:data-[orientation=vertical]:after:bg-size-[2px_100%] data-active:data-[orientation=vertical]:after:[background-position-y:top]`,`data-popup-open:data-[orientation=vertical]:after:bg-size-[2px_100%] data-popup-open:data-[orientation=vertical]:after:[background-position-y:top]`,`data-pressed:data-[orientation=vertical]:after:bg-size-[2px_100%] data-pressed:data-[orientation=vertical]:after:[background-position-y:top]`],xg=[...vg,`max-w-full`,`**:data-[slot=navigation-link-indicator]:inline-flex`,`**:data-[slot=navigation-link-indicator]:items-center`,`**:data-[slot=navigation-link-indicator]:justify-center`,`**:data-[slot=navigation-link-indicator]:overflow-hidden`,`**:data-[slot=navigation-link-indicator]:shrink-0`,`**:data-[slot=navigation-link-indicator]:w-0`,`**:data-[slot=navigation-link-indicator]:opacity-0`,`rtl:**:data-[slot=navigation-link-indicator]:rotate-180`,`**:data-[slot=navigation-link-indicator]:transition-[width,opacity]`,`**:data-[slot=navigation-link-indicator]:duration-250`,`**:data-[slot=navigation-link-indicator]:ease-out`,`motion-reduce:**:data-[slot=navigation-link-indicator]:transition-none`,`hover:**:data-[slot=navigation-link-indicator]:opacity-100 focus-visible:**:data-[slot=navigation-link-indicator]:opacity-100`,`data-active:**:data-[slot=navigation-link-indicator]:opacity-100`,`**:data-[slot=navigation-link-label]:flex-1`,`**:data-[slot=navigation-link-label]:min-w-0`,`**:data-[slot=navigation-link-label]:truncate`],Sg=Au(Q(_g),{variants:{variant:{pill:Q(yg),line:Q(bg),indicator:Q(xg)},size:{sm:`text-xs [&_svg:not([class*='size-'])]:size-4`,md:`text-sm [&_svg:not([class*='size-'])]:size-4.5`,lg:`text-base [&_svg:not([class*='size-'])]:size-5`}},compoundVariants:[{variant:`pill`,size:`sm`,class:Q(`data-[orientation=horizontal]:rounded-sm data-[orientation=horizontal]:py-2 data-[orientation=horizontal]:px-3 data-[orientation=horizontal]:has-data-[icon=end]:pe-2 data-[orientation=horizontal]:has-data-[icon=start]:ps-2`,`data-[orientation=vertical]:rounded-xs data-[orientation=vertical]:py-1.5 data-[orientation=vertical]:px-2.5 data-[orientation=vertical]:has-data-[icon=end]:pe-1.5 data-[orientation=vertical]:has-data-[icon=start]:ps-1.5`,`in-aria-[orientation=vertical]:rounded-xs in-aria-[orientation=vertical]:py-1.5 in-aria-[orientation=vertical]:px-2.5 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-1.5 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-1.5`)},{variant:`pill`,size:`md`,class:Q(`data-[orientation=horizontal]:rounded-md data-[orientation=horizontal]:py-2.5 data-[orientation=horizontal]:px-3.5 data-[orientation=horizontal]:has-data-[icon=end]:pe-2.5 data-[orientation=horizontal]:has-data-[icon=start]:ps-2.5`,`data-[orientation=vertical]:rounded-sm data-[orientation=vertical]:py-2 data-[orientation=vertical]:px-3 data-[orientation=vertical]:has-data-[icon=end]:pe-2 data-[orientation=vertical]:has-data-[icon=start]:ps-2`,`in-aria-[orientation=vertical]:rounded-sm in-aria-[orientation=vertical]:py-2 in-aria-[orientation=vertical]:px-3 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-2 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-2`)},{variant:`pill`,size:`lg`,class:Q(`data-[orientation=horizontal]:rounded-lg data-[orientation=horizontal]:py-3 data-[orientation=horizontal]:px-4 data-[orientation=horizontal]:has-data-[icon=end]:pe-3 data-[orientation=horizontal]:has-data-[icon=start]:ps-3`,`data-[orientation=vertical]:rounded-md data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:px-3.5 data-[orientation=vertical]:has-data-[icon=end]:pe-2.5 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`in-aria-[orientation=vertical]:rounded-md in-aria-[orientation=vertical]:py-2.5 in-aria-[orientation=vertical]:px-3.5 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-2.5 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-2.5`)},{variant:`line`,size:`sm`,class:Q(`data-[orientation=horizontal]:py-2`,`data-[orientation=vertical]:py-1.5 data-[orientation=vertical]:ps-2.5`,`data-[orientation=vertical]:has-data-[icon=end]:pe-1.5 data-[orientation=vertical]:has-data-[icon=start]:ps-1.5`,`data-[orientation=horizontal]:after:bottom-1`)},{variant:`line`,size:`md`,class:Q(`data-[orientation=horizontal]:py-2.5`,`data-[orientation=vertical]:py-2 data-[orientation=vertical]:ps-3`,`data-[orientation=vertical]:has-data-[icon=end]:pe-2 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`data-[orientation=horizontal]:after:bottom-1.5`)},{variant:`line`,size:`lg`,class:Q(`data-[orientation=horizontal]:py-3`,`data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:ps-3.5`,`data-[orientation=vertical]:has-data-[icon=end]:pe-2.5 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`data-[orientation=horizontal]:after:bottom-2`)},{variant:`indicator`,size:`sm`,class:Q(`data-[orientation=horizontal]:py-2`,`data-[orientation=vertical]:py-1.5`,`hover:**:data-[slot=navigation-link-indicator]:w-4 focus-visible:**:data-[slot=navigation-link-indicator]:w-4 data-active:**:data-[slot=navigation-link-indicator]:w-4`)},{variant:`indicator`,size:`md`,class:Q(`data-[orientation=horizontal]:py-2.5`,`data-[orientation=vertical]:py-2`,`hover:**:data-[slot=navigation-link-indicator]:w-4.5 focus-visible:**:data-[slot=navigation-link-indicator]:w-4.5 data-active:**:data-[slot=navigation-link-indicator]:w-4.5`)},{variant:`indicator`,size:`lg`,class:Q(`data-[orientation=horizontal]:py-3`,`data-[orientation=vertical]:py-2.5`,`hover:**:data-[slot=navigation-link-indicator]:w-5 focus-visible:**:data-[slot=navigation-link-indicator]:w-5 data-active:**:data-[slot=navigation-link-indicator]:w-5`)}],defaultVariants:{variant:`pill`,size:`md`}}),Cg=g.createContext(null);function wg(){let e=g.useContext(Cg);if(!e)throw Error(`DropdownMenu sub-components must be rendered inside <DropdownMenu>`);return e}function Tg({size:e=`md`,children:t,...n}){let r=pg(),i=g.useMemo(()=>({size:e,reducedMotion:r}),[e,r]);return(0,X.jsx)(Cg,{value:i,children:(0,X.jsx)(Yh,{...n,children:t})})}function Eg({className:e,...t}){return(0,X.jsx)(ag,{"data-slot":`dropdown-menu-trigger`,className:Q(e),...t})}var Dg={sm:`min-w-40 rounded-md`,md:`min-w-48 rounded-lg`,lg:`min-w-56 rounded-xl`};function Og(e,t){return Q(`max-h-(--available-height) w-(--anchor-width) bg-background border-border-overlay flex flex-col border shadow-2xl outline-none`,Dg[e],`origin-(--transform-origin)`,`motion-safe:transition-[opacity,scale] motion-safe:duration-200 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-90 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,t)}function kg({className:e,children:t,...n}){let{size:r}=wg(),{positioner:i,portal:a,popup:o}=gg(n);return(0,X.jsx)(Ch,{...a,children:(0,X.jsx)(Nh,{align:`start`,sideOffset:6,...i,className:Q(`isolate z-50`,i.className),children:(0,X.jsx)(bh,{"data-slot":`dropdown-menu-content`,className:Og(r,e),...o,children:(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5 overflow-x-hidden overflow-y-auto p-2`,children:t})})})})}var Ag=`w-full outline-hidden`,jg={sm:`gap-1`,md:`gap-1.5`,lg:`gap-1.5`};function Mg({className:e,...t}){return(0,X.jsx)(cg,{"data-slot":`dropdown-menu-separator`,className:Q(`bg-border -mx-2 my-1.5 h-px shrink-0`,e),...t})}function Ng(e){return(0,X.jsx)(Ih,{"data-slot":`dropdown-menu-radio-group`,...e})}function Pg({className:e,children:t,...n}){let{size:r,reducedMotion:i}=wg();return(0,X.jsxs)(zh,{"data-slot":`dropdown-menu-radio-item`,"data-orientation":`vertical`,className:Q(Sg({variant:`pill`,size:r}),Ag,`justify-between`,e),...n,children:[(0,X.jsx)(`span`,{className:Q(`flex items-center`,jg[r]),children:t}),(0,X.jsx)(Bh,{"data-slot":`dropdown-menu-radio-item-indicator`,keepMounted:!i,className:`group/check text-foreground-intense shrink-0`,children:(0,X.jsx)(Fg,{"data-icon":`end`,className:`me-0.5 size-[1.125em]`})})]})}function Fg({className:e,...t}){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,className:Q(`stroke-2`,e),...t,children:(0,X.jsx)(`path`,{d:`M4.3 12.55 L9.25 17.5 L19.7 6.5`,pathLength:1,strokeDasharray:`1 2`,className:Q(`opacity-0 [stroke-dashoffset:1.02]`,`group-data-checked/check:opacity-100 group-data-checked/check:[stroke-dashoffset:0]`,`motion-safe:transition-[opacity,stroke-dashoffset] motion-safe:ease-out`,`motion-safe:delay-[0ms,150ms] motion-safe:duration-[150ms,0ms]`,`motion-safe:group-data-checked/check:delay-[0ms] motion-safe:group-data-checked/check:duration-[0ms,300ms]`)})})}function Ig(...e){return e.filter(Boolean).join(` `)}var Lg={ok:`bg-success`,warn:`bg-warning`,error:`bg-error`,off:`bg-foreground-subtle`},Rg={ok:`text-success`,warn:`text-warning`,error:`text-error`,off:`text-foreground-muted`};function zg(e){if(e==null||e===0||e===``)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString(`zh-CN`,{hour12:!1})}function Bg(e){return e===`connected`?`ok`:e===`error`?`error`:e===`connecting`?`warn`:`off`}function Vg(e){let t={connected:`panel.status.connected`,connecting:`panel.status.connecting`,error:`panel.status.error`,off:`panel.status.off`};return t[e]?$(t[e]):e}function Hg(e,t){return t?e===`listening`?`ok`:e===`error`?`error`:`warn`:`off`}function Ug(e,t){return t?e===`listening`?$(`panel.lan.listening`):e===`error`?$(`panel.lan.error`):e:$(`panel.lan.off`)}function Wg(e){let t={healthy:`panel.sidecar.healthy`,starting:`panel.sidecar.starting`,restarting:`panel.sidecar.restarting`,error:`panel.sidecar.error`,stopped:`panel.sidecar.stopped`};return t[e]?$(t[e]):e}function Gg(){return(0,g.useSyncExternalStore)(ip,np,np)}var Kg=`(max-width: 767px)`;function qg(){let[e,t]=(0,g.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(Kg).matches);return(0,g.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(Kg),n=()=>t(e.matches);return n(),e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function Jg(){return(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,X.jsx)(`path`,{d:`M3.6 9h16.8M3.6 15h16.8`}),(0,X.jsx)(`path`,{d:`M12 3c2.4 2.4 3.6 5.4 3.6 9s-1.2 6.6-3.6 9c-2.4-2.4-3.6-5.4-3.6-9S9.6 5.4 12 3Z`})]})}function Yg({checked:e}){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,className:Ig(`size-4.5 shrink-0 stroke-2`,e?`visible`:`invisible`),children:(0,X.jsx)(`path`,{d:`M4.3 12.55 L9.25 17.5 L19.7 6.5`})})}function Xg(){let e=Gg(),t=$(`panel.language.open`),n=qg(),[r,i]=(0,g.useState)(!1),a=tp(),o=(0,X.jsx)(Bf,{variant:`soft`,size:`icon-md`,className:`pointer-events-auto rounded-full shadow-sm`,"aria-label":t,title:`${t} · ${Uf[e]}`,children:(0,X.jsx)(Jg,{})});if(n){let e=(e,t)=>{let n=a===e;return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,onClick:()=>{rp(e),i(!1)},className:Ig(`flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-background-muted`,n?`text-foreground-intense`:`text-foreground`),children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t}),(0,X.jsx)(Yg,{checked:n})]},e)};return(0,X.jsxs)(Hm,{open:r,onOpenChange:i,children:[(0,X.jsx)(Um,{render:o}),(0,X.jsxs)(Zm,{closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Qm,{children:(0,X.jsx)($m,{children:t})}),(0,X.jsx)(eh,{className:`px-3 pb-3`,children:(0,X.jsxs)(`div`,{role:`radiogroup`,"aria-label":t,className:`flex flex-col gap-0.5`,children:[e(`system`,$(`panel.language.system`)),(0,X.jsx)(`div`,{className:`my-1 h-px shrink-0 bg-border`}),Hf.map(t=>e(t,Uf[t]))]})})]})]})}return(0,X.jsxs)(Tg,{children:[(0,X.jsx)(Eg,{render:o}),(0,X.jsx)(kg,{align:`end`,style:{width:`auto`,minWidth:`11rem`},children:(0,X.jsxs)(Ng,{value:a,onValueChange:e=>rp(e),children:[(0,X.jsx)(Pg,{value:`system`,children:$(`panel.language.system`)}),(0,X.jsx)(Mg,{}),Hf.map(e=>(0,X.jsx)(Pg,{value:e,children:Uf[e]},e))]})})]})}function Zg(){return yd()}function Qg(){return(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`circle`,{cx:`12`,cy:`12`,r:`4`}),(0,X.jsx)(`path`,{d:`M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41`})]})}function $g(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M20.5 14.5A8.5 8.5 0 0 1 9.5 3.5a8.5 8.5 0 1 0 11 11Z`})})}function e_(){let{resolvedTheme:e,setTheme:t}=Zg(),n=e===`dark`,r=$(n?`panel.theme.toDay`:`panel.theme.toNight`);return(0,X.jsx)(Bf,{variant:`soft`,size:`icon-md`,className:`pointer-events-auto rounded-full shadow-sm`,"aria-label":r,title:r,onClick:()=>t(n?`light`:`dark`),children:n?(0,X.jsx)(Qg,{}):(0,X.jsx)($g,{})})}function t_(){return(0,X.jsxs)(`div`,{className:`pointer-events-none fixed end-6 top-6 z-40 flex items-center gap-2`,children:[(0,X.jsx)(Xg,{}),(0,X.jsx)(e_,{})]})}var n_=(0,g.createContext)({});function r_(e){let t=(0,g.useRef)(null);return t.current===null&&(t.current=e()),t.current}var i_=typeof window<`u`?g.useLayoutEffect:g.useEffect,a_=(0,g.createContext)(null);function o_(e,t){e.indexOf(t)===-1&&e.push(t)}function s_(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}var c_=(e,t,n)=>n>t?t:n<e?e:n,l_={},u_=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e),d_=e=>typeof e==`object`&&!!e,f_=e=>/^0[^.\s]+$/u.test(e);function p_(e){let t;return()=>(t===void 0&&(t=e()),t)}var m_=e=>e,h_=(...e)=>e.reduce((e,t)=>n=>t(e(n))),g_=(e,t,n)=>{let r=t-e;return r?(n-e)/r:1},__=class{constructor(){this.subscriptions=[]}add(e){return o_(this.subscriptions,e),()=>this.remove(e)}remove(e){s_(this.subscriptions,e)}notify(e,t,n){let r=this.subscriptions.length;if(r){if(r===1)this.subscriptions[0](e,t,n);else for(let i=0;i<r;i++){let r=this.subscriptions[i];r&&r(e,t,n)}}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}},v_=e=>e*1e3,y_=e=>e/1e3,b_=(e,t)=>t?1e3/t*e:0,x_=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e},S_=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,C_=1e-7,w_=12;function T_(e,t,n,r,i){let a,o,s=0;do o=t+(n-t)/2,a=S_(o,r,i)-e,a>0?n=o:t=o;while(Math.abs(a)>C_&&++s<w_);return o}function E_(e,t,n,r){if(e===t&&n===r)return m_;let i=t=>T_(t,0,1,e,n);return e=>e===0||e===1?e:S_(i(e),t,r)}var D_=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,O_=e=>t=>1-e(1-t),k_=E_(.33,1.53,.69,.99),A_=O_(k_),j_=D_(A_),M_=e=>e>=1?1:(e*=2)<1?.5*A_(e):.5*(2-2**(-10*(e-1))),N_=e=>1-Math.sin(Math.acos(e)),P_=O_(N_),F_=D_(N_),I_=E_(.42,0,1,1),L_=E_(0,0,.58,1),R_=E_(.42,0,.58,1),z_=e=>Array.isArray(e)&&typeof e[0]!=`number`;function B_(e,t){return z_(e)?e[x_(0,e.length,t)]:e}var V_=e=>Array.isArray(e)&&typeof e[0]==`number`,H_={linear:m_,easeIn:I_,easeInOut:R_,easeOut:L_,circIn:N_,circInOut:F_,circOut:P_,backIn:A_,backInOut:j_,backOut:k_,anticipate:M_},U_=e=>typeof e==`string`,W_=e=>{if(V_(e)){e.length;let[t,n,r,i]=e;return E_(t,n,r,i)}return U_(e)?(H_[e],`${e}`,H_[e]):e},G_={delta:0,timestamp:0,isProcessing:!1},K_;function q_(){K_=void 0}var J_={now:()=>(K_===void 0&&J_.set(G_.isProcessing||l_.useManualTiming?G_.timestamp:performance.now()),K_),set:e=>{K_=e,queueMicrotask(q_)}},Y_=e=>Math.round(e*1e5)/1e5,X_=e=>t=>typeof t==`string`&&t.startsWith(e),Z_=X_(`--`),Q_=X_(`var(--`),$_=e=>Q_(e)?ev.test(e.split(`/*`)[0].trim()):!1,ev=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function tv(e){return typeof e==`string`&&e.split(`/*`)[0].includes(`var(--`)}var nv={test:e=>typeof e==`number`,parse:parseFloat,transform:e=>e},rv={...nv,transform:e=>c_(0,1,e)},iv={...nv,default:1},av=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function ov(e){return e==null}var sv=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,cv=(e,t)=>n=>!!(typeof n==`string`&&sv.test(n)&&n.startsWith(e)||t&&!ov(n)&&Object.prototype.hasOwnProperty.call(n,t)),lv=(e,t,n)=>r=>{if(typeof r!=`string`)return r;let[i,a,o,s]=r.match(av);return{[e]:parseFloat(i),[t]:parseFloat(a),[n]:parseFloat(o),alpha:s===void 0?1:parseFloat(s)}},uv=e=>c_(0,255,e),dv={...nv,transform:e=>Math.round(uv(e))},fv={test:cv(`rgb`,`red`),parse:lv(`red`,`green`,`blue`),transform:({red:e,green:t,blue:n,alpha:r=1})=>`rgba(`+dv.transform(e)+`, `+dv.transform(t)+`, `+dv.transform(n)+`, `+Y_(rv.transform(r))+`)`};function pv(e){let t=``,n=``,r=``,i=``;return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}var mv={test:cv(`#`),parse:pv,transform:fv.transform},hv=e=>({test:t=>typeof t==`string`&&t.endsWith(e)&&t.split(` `).length===1,parse:parseFloat,transform:t=>`${t}${e}`}),gv=hv(`deg`),_v=hv(`%`),vv=hv(`px`),yv=hv(`vh`),bv=hv(`vw`),xv={..._v,parse:e=>_v.parse(e)/100,transform:e=>_v.transform(e*100)},Sv={test:cv(`hsl`,`hue`),parse:lv(`hue`,`saturation`,`lightness`),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>`hsla(`+Math.round(e)+`, `+_v.transform(Y_(t))+`, `+_v.transform(Y_(n))+`, `+Y_(rv.transform(r))+`)`},Cv={test:e=>fv.test(e)||mv.test(e)||Sv.test(e),parse:e=>fv.test(e)?fv.parse(e):Sv.test(e)?Sv.parse(e):mv.parse(e),transform:e=>typeof e==`string`?e:e.hasOwnProperty(`red`)?fv.transform(e):Sv.transform(e),getAnimatableNone:e=>{let t=Cv.parse(e);return t.alpha=0,Cv.transform(t)}},wv=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu,Tv=new RegExp(av.source),Ev=new RegExp(wv.source,`i`);function Dv(e){return isNaN(e)&&typeof e==`string`&&(Tv.test(e)||Ev.test(e))}var Ov=`number`,kv=`color`,Av=`var`,jv=`var(`,Mv="${}",Nv=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Pv(e){let t=e.toString();return Tv.test(t)||Ev.test(t)}function Fv(e){let t=e.toString(),n=[],r={color:[],number:[],var:[]},i=[],a=0;return{values:n,split:t.replace(Nv,e=>(Cv.test(e)?(r.color.push(a),i.push(kv),n.push(Cv.parse(e))):e.startsWith(jv)?(r.var.push(a),i.push(Av),n.push(e)):(r.number.push(a),i.push(Ov),n.push(parseFloat(e))),++a,Mv)).split(Mv),indexes:r,types:i}}function Iv(e){return Fv(e).values}function Lv({split:e,types:t}){let n=e.length;return r=>{let i=``;for(let a=0;a<n;a++)if(i+=e[a],r[a]!==void 0){let e=t[a];i+=e===Ov?Y_(r[a]):e===kv?Cv.transform(r[a]):r[a]}return i}}function Rv(e){return Lv(Fv(e))}var zv=e=>typeof e==`number`?0:Cv.test(e)?Cv.getAnimatableNone(e):e,Bv=(e,t)=>typeof e==`number`?t?.trim().endsWith(`/`)?e:0:zv(e);function Vv(e){let t=Fv(e);return Lv(t)(t.values.map((e,n)=>Bv(e,t.split[n])))}var Hv={test:Dv,parse:Iv,createTransformer:Rv,getAnimatableNone:Vv};function Uv(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Wv({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,a=0,o=0;if(!t)i=a=o=n;else{let r=n<.5?n*(1+t):n+t-n*t,s=2*n-r;i=Uv(s,r,e+1/3),a=Uv(s,r,e),o=Uv(s,r,e-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(o*255),alpha:r}}function Gv(e,t){return n=>n>0?t:e}var Kv=(e,t,n)=>e+(t-e)*n,qv=(e,t,n)=>{let r=e*e,i=n*(t*t-r)+r;return i<0?0:Math.sqrt(i)},Jv=[mv,fv,Sv],Yv=e=>Jv.find(t=>t.test(e));function Xv(e){let t=Yv(e);if(!t)return`${e}`,!1;let n=t.parse(e);return t===Sv&&(n=Wv(n)),n}var Zv=(e,t)=>{let n=Xv(e),r=Xv(t);if(!n||!r)return Gv(e,t);let i={...n};return e=>(i.red=qv(n.red,r.red,e),i.green=qv(n.green,r.green,e),i.blue=qv(n.blue,r.blue,e),i.alpha=Kv(n.alpha,r.alpha,e),fv.transform(i))},Qv=new Set([`none`,`hidden`]);function $v(e,t){return Qv.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function ey(e,t){return n=>Kv(e,t,n)}function ty(e){return typeof e==`number`?ey:typeof e==`string`?$_(e)?Gv:Cv.test(e)?Zv:ay:Array.isArray(e)?ny:typeof e==`object`?Cv.test(e)?Zv:ry:Gv}function ny(e,t){let n=[...e],r=n.length,i=e.map((e,n)=>ty(e)(e,t[n]));return e=>{for(let t=0;t<r;t++)n[t]=i[t](e);return n}}function ry(e,t){let n={...e,...t},r={};for(let i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=ty(e[i])(e[i],t[i]));return e=>{for(let t in r)n[t]=r[t](e);return n}}function iy(e,t){let n=[],r={color:0,var:0,number:0};for(let i=0;i<t.values.length;i++){let a=t.types[i],o=e.indexes[a][r[a]],s=e.values[o]??0;n[i]=s,r[a]++}return n}var ay=(e,t)=>{let n=Hv.createTransformer(t),r=Fv(e),i=Fv(t);return r.indexes.var.length===i.indexes.var.length&&r.indexes.color.length===i.indexes.color.length&&r.indexes.number.length>=i.indexes.number.length?Qv.has(e)&&!i.values.length||Qv.has(t)&&!r.values.length?$v(e,t):h_(ny(iy(r,i),i.values),n):(`${e}${t}`,Gv(e,t))},oy=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/iu;function sy(e,t){let n=oy.exec(e);if(!n)return;let r=oy.exec(t);if(!r||n[2]!==r[2])return;let i=n[2],a=parseFloat(n[1]),o=parseFloat(r[1]);return e=>Y_(Kv(a,o,e))+i}function cy(e,t,n){if(typeof e==`number`&&typeof t==`number`&&typeof n==`number`)return Kv(e,t,n);if(typeof e==`string`&&typeof t==`string`){let n=sy(e,t);if(n)return n}return ty(e)(e,t)}var ly=[`setup`,`read`,`resolveKeyframes`,`preUpdate`,`update`,`preRender`,`render`,`postRender`];function uy(e){let t=new Set,n=new Set,r=!1,i=!1,a=new Set,o={delta:0,timestamp:0,isProcessing:!1};function s(t){a.has(t)&&(n.add(t),e()),t(o)}let c={schedule:(e,i=!1,o=!1)=>{let s=o&&r?t:n;return i&&a.add(e),s.add(e),e},cancel:e=>{n.delete(e),a.delete(e)},process:e=>{if(o=e,r){i=!0;return}r=!0;let a=t;t=n,n=a,t.forEach(s),t.clear(),r=!1,i&&(i=!1,c.process(e))}};return c}var dy=40;function fy(e,t,n={delta:0,timestamp:0,isProcessing:!1}){let r=!1,i=!0,a=()=>r=!0,o=ly.reduce((e,t)=>(e[t]=uy(a),e),{}),{setup:s,read:c,resolveKeyframes:l,preUpdate:u,update:d,preRender:f,render:p,postRender:m}=o,h=()=>{let a=l_.useManualTiming,o=a?n.timestamp:performance.now();r=!1,a||(n.delta=i?1e3/60:Math.max(Math.min(o-n.timestamp,dy),1)),n.timestamp=o,n.isProcessing=!0,s.process(n),c.process(n),l.process(n),u.process(n),d.process(n),f.process(n),p.process(n),m.process(n),n.isProcessing=!1,r&&t&&(i=!1,e(h))},g=()=>{r=!0,i=!0,n.isProcessing||e(h)};return{schedule:ly.reduce((e,t)=>{let n=o[t];return e[t]=(e,t=!1,i=!1)=>(r||g(),n.schedule(e,t,i)),e},{}),cancel:e=>{for(let t=0;t<ly.length;t++)o[ly[t]].cancel(e)},state:n,steps:o}}var{schedule:py,cancel:my,steps:hy}=fy(typeof requestAnimationFrame<`u`?requestAnimationFrame:m_,!0,G_),gy=e=>{let t=({timestamp:t})=>e(t);return{start:(e=!0)=>py.update(t,e),stop:()=>my(t),now:()=>G_.isProcessing?G_.timestamp:J_.now()}},_y=(e,t,n=10)=>{let r=``,i=Math.max(Math.round(t/n),2);for(let t=0;t<i;t++)r+=Math.round(e(t/(i-1))*1e4)/1e4+`, `;return`linear(${r.substring(0,r.length-2)})`},vy=2e4;function yy(e,t=50,n=vy,r){let i=0,a=e.next(i);for(r?.push(a.value);!a.done&&i<n;)i+=t,a=e.next(i),r?.push(a.value);return i>=n?1/0:i}function by(e,t=100,n){let r=n({...e,keyframes:[0,t]}),i=Math.min(yy(r),vy);return{type:`keyframes`,ease:e=>r.next(i*e).value/t,duration:y_(i)}}var xy={stiffness:100,damping:10,mass:1,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05},Sy=e=>e<0?1/Math.max(1+e,xy.minDamping):Math.max(1-e,xy.minDamping);function Cy(e,t){if(!(e>1))return 1;let n=Math.sqrt(e*e-1),r=e-n,i=e+n,a=2*n*Math.exp(-t)*(1+t);return Ey(e=>i*Math.exp(-r*e)-r*Math.exp(-i*e)-a,e=>Math.exp(-i*e)-Math.exp(-r*e),t)/t}function wy(e,t){return e*Math.sqrt(1-t*t)}var Ty=12;function Ey(e,t,n){let r=n;for(let n=1;n<Ty;n++)r-=e(r)/t(r);return r}var Dy=.001;function Oy({duration:e=xy.duration,bounce:t=xy.bounce}){let n,r;xy.maxDuration;let i=Sy(t);e=c_(xy.minDuration,xy.maxDuration,y_(e)),i<1?(n=t=>{let n=t*i,r=n*e,a=wy(t,i),o=Math.exp(-r);return Dy-n/a*o},r=t=>{let r=t*i*e,a=i*i*t*t*e,o=Math.exp(-r),s=wy(t*t,i);return(-n(t)+Dy>0?-1:1)*-a*o/s}):(n=t=>-.001+Math.exp(-t*e)*(t*e+1),r=t=>Math.exp(-t*e)*(-t*(e*e)));let a=5/e,o=Ey(n,r,a),s=o*Cy(i,o*e),c=s*s;return{stiffness:c,damping:i*2*Math.sqrt(c),duration:v_(e)}}var ky=(e,t)=>(t?e>=0:e>0)&&e<1/0;function Ay(e,t){if(ky(e,t))return e}function jy(e){let t=Ay(e.stiffness),n=Ay(e.damping,!0),r=Ay(e.mass),i={...e,stiffness:t??xy.stiffness,damping:n??xy.damping,mass:r??xy.mass,isResolvedFromDuration:!1,isTimeDefined:(t??n??r)===void 0&&(e.duration!==void 0||e.bounce!==void 0)};if(i.isTimeDefined){if(e.visualDuration){let t=Sy(e.bounce||0),n=2*Math.PI/(e.visualDuration*1.2)*Cy(t,2*Math.PI/1.2);i.stiffness=n*n,i.damping=2*t*Math.sqrt(i.stiffness)}else Object.assign(i,Oy(i)),i.isResolvedFromDuration=!0;(!ky(i.stiffness)||!ky(i.damping,!0))&&(i.stiffness=xy.stiffness,i.damping=xy.damping)}return i}function My(e=xy.visualDuration,t=xy.bounce){let n=typeof e==`object`?e:{visualDuration:e,keyframes:[0,1],bounce:t},r=n.keyframes[0],i=n.keyframes[n.keyframes.length-1],a={done:!1,value:r},{stiffness:o,damping:s,mass:c,duration:l,isResolvedFromDuration:u,isTimeDefined:d}=jy({...n}),f=e=>d?0:-y_(e),p=s/(2*Math.sqrt(o*c)),m=y_(Math.sqrt(o/c)),h=p*m,g={target:i,delta:i-r,velocity:f(n.velocity||0)||0,restSpeed:0,restDelta:0},_=()=>{let e=Math.abs(g.delta)<5;g.restSpeed=n.restSpeed||(e?xy.restSpeed.granular:xy.restSpeed.default),g.restDelta=n.restDelta||(e?xy.restDelta.granular:xy.restDelta.default)};_();let v,y,b;if(p<1){let e=wy(m,p),t={A:0,sinC:0,cosC:0,t:-1,env:0,sin:0,cos:0};b=()=>{t.A=(g.velocity+h*g.delta)/e,t.sinC=h*t.A+g.delta*e,t.cosC=h*g.delta-t.A*e};let n=n=>{n!==t.t&&(t.t=n,t.env=Math.exp(-h*n),t.sin=Math.sin(e*n),t.cos=Math.cos(e*n))};v=e=>(n(e),g.target-t.env*(t.A*t.sin+g.delta*t.cos)),y=e=>(n(e),t.env*(t.sinC*t.sin+t.cosC*t.cos))}else if(p===1){v=e=>g.target-Math.exp(-m*e)*(g.delta+(g.velocity+m*g.delta)*e);let e={C:0};b=()=>{e.C=g.velocity+m*g.delta},y=t=>Math.exp(-m*t)*(m*e.C*t-g.velocity)}else{let e=m*Math.sqrt(p*p-1),t=h-e,n=h+e,r=d?1/0:300/e,i=(e,t)=>Math.exp(t>r?-e*r-h*(t-r):-e*t),a={S:0,F:0};b=()=>{let t=(g.velocity+h*g.delta)/e;a.S=(g.delta+t)/2,a.F=(g.delta-t)/2},v=e=>g.target-a.S*i(t,e)-a.F*i(n,e),y=e=>t*a.S*i(t,e)+n*a.F*i(n,e)}b();let x=u&&l||null,S={calculatedDuration:x,retarget:(e,t)=>{g.target=e[e.length-1],g.delta=g.target-e[0],g.velocity=f(t),n.restSpeed&&n.restDelta||_(),S.calculatedDuration=x,a.done=!1,b()},velocity:e=>v_(y(e)),next:e=>{let t=v(e);if(u)a.done=e>=l;else{let n=v_(y(e));a.done=Math.abs(n)<=g.restSpeed&&Math.abs(g.target-t)<=g.restDelta}return a.value=a.done?g.target:t,a},toString:()=>{let e=Math.min(yy(S),vy),t=_y(t=>S.next(e*t).value,e,30);return e+`ms `+t},toTransition:()=>{}};return S}My.applyToOptions=e=>{let t=by(e,100,My);return e.ease=t.ease,e.duration=v_(t.duration),e.type=`keyframes`,e};function Ny({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:o,min:s,max:c,restDelta:l=.5,restSpeed:u}){let d=e[0],f={done:!1,value:d},p=e=>e<s||e>c,m=e=>s===void 0?c:c===void 0||Math.abs(s-e)<Math.abs(c-e)?s:c,h=n*t,g=d+h,_=o===void 0?g:o(g);_!==g&&(h=_-d);let v=e=>-h*Math.exp(-e/r),y=e=>{let t=v(e);f.done=Math.abs(t)<=l,f.value=f.done?_:_+t},b,x,S=e=>{p(f.value)&&(b=e,x=My({keyframes:[f.value,m(f.value)],velocity:-v(e)/r*1e3,damping:i,stiffness:a,restDelta:l,restSpeed:u}))};return S(0),{calculatedDuration:null,next:e=>{let t=!1;return!x&&b===void 0&&(t=!0,y(e),S(e)),b!==void 0&&e>=b?x.next(e-b):(!t&&y(e),f)}}}function Py(e,t,n){let r=[],i=n||l_.mix||cy,a=e.length-1;for(let n=0;n<a;n++){let a=i(e[n],e[n+1]);t&&(a=h_(Array.isArray(t)?t[n]||m_:t,a)),r.push(a)}return r}function Fy(e,t,{clamp:n=!0,ease:r,mixer:i}={}){let a=e.length;if(t.length,a===1)return()=>t[0];if(a===2&&t[0]===t[1])return()=>t[1];let o=e[0]===e[1];e[0]>e[a-1]&&(e=[...e].reverse(),t=[...t].reverse());let s=Py(t,r,i),c=s.length,l=n=>{if(o&&n<e[0])return t[0];let r=0;if(c>1)for(;r<e.length-2&&!(n<e[r+1]);r++);let i=g_(e[r],e[r+1],n);return s[r](i)};return n?t=>l(c_(e[0],e[a-1],t)):l}function Iy(e,t){let n=e[e.length-1];for(let r=1;r<=t;r++){let i=g_(0,t,r);e.push(Kv(n,1,i))}}function Ly(e){let t=[0];return Iy(t,e.length-1),t}function Ry(e,t){return e.map(e=>e*t)}function zy(e,t){return e.map(()=>t||R_).splice(0,e.length-1)}function By({duration:e=300,keyframes:t,times:n,ease:r=`easeInOut`}){let i=z_(r)?r.map(W_):W_(r)||R_,a={done:!1,value:t[0]};if(t.length===2&&!Array.isArray(i)&&(!n||n.length!==2||n[0]===0&&n[1]===1)){let[n,r]=t,o=n===r?void 0:(l_.mix||cy)(n,r);return{calculatedDuration:e,next:t=>(a.value=o?o(i(e>0?c_(0,1,t/e):1)):r,a.done=t>=e,a)}}let o=Fy(Ry(n&&n.length===t.length?n:Ly(t),e),t,{ease:Array.isArray(i)?i:zy(t,i)});return{calculatedDuration:e,next:t=>(a.value=o(t),a.done=t>=e,a)}}var Vy=5;function Hy(e,t,n){let r=Math.max(t-Vy,0);return b_(n-e(r),t-r)}function Uy(e,t,n=0){return t<=0?n:e.velocity?e.velocity(t):Hy(t=>e.next(t).value,t,e.next(t).value)}var Wy=e=>e!==null;function Gy(e,{repeat:t,repeatType:n=`loop`},r,i=1){let a=e.filter(Wy),o=i<0||t&&n!==`loop`&&t%2==1?0:a.length-1;return!o||r===void 0?a[o]:r}var Ky={decay:Ny,inertia:Ny,tween:By,keyframes:By,spring:My};function qy(e){typeof e.type==`string`&&(e.type=Ky[e.type])}function Jy(e,t){return{kind:e,animation:t,timestamp:J_.now(),frameTimestamp:G_.timestamp,frameIsProcessing:G_.isProcessing}}function Yy(e,t,n){let r=globalThis.__MOTION_INSPECT__;if(r)try{r({...Jy(`animation-start`,e),options:n?{...t,...n}:t})}catch{}}var Xy=class{constructor(){this.isResolved=!1}get finished(){return this._finished||=this.isResolved?Promise.resolve():new Promise(e=>{this._resolve=e}),this._finished}updateFinished(){this._finished=this._resolve=void 0,this.isResolved=!1}notifyFinished(){this.isResolved=!0,this._resolve?.()}then(e,t){return this.finished.then(e,t)}},Zy=e=>e/100,Qy=class extends Xy{constructor(e){super(),this.state=`idle`,this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{let{motionValue:e}=this.options;e&&e.updatedAt!==J_.now()&&this.tick(J_.now()),this.isStopped=!0,this.state!==`idle`&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause(),Yy(this,this.options)}initAnimation(){let{options:e}=this;qy(e);let{type:t=By,repeat:n=0,repeatDelay:r=0,repeatType:i,velocity:a=0}=e,{keyframes:o}=e,s=t||By;s!==By&&typeof o[0]!=`number`&&(this.mixKeyframes=h_(Zy,cy(o[0],o[1])),o=[0,100]);let c=s(o===e.keyframes?e:{...e,keyframes:o});i===`mirror`&&(this.mirroredGenerator=s({...e,keyframes:[...o].reverse(),velocity:-a})),c.calculatedDuration===null&&(c.calculatedDuration=yy(c));let{calculatedDuration:l}=c;this.calculatedDuration=l,this.resolvedDuration=l+r,this.totalDuration=this.resolvedDuration*(n+1)-r,this.generator=c}updateTime(e){let t=Math.round(e-this.startTime)*this.playbackSpeed;this.currentTime=this.holdTime===null?t:this.holdTime}tick(e,t=!1){let{generator:n,totalDuration:r,mixKeyframes:i,mirroredGenerator:a,resolvedDuration:o,calculatedDuration:s}=this;if(this.startTime===null)return n.next(0);let{delay:c=0,keyframes:l,repeat:u,repeatType:d,repeatDelay:f,type:p,onUpdate:m,finalKeyframe:h}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-r/this.speed,this.startTime)),t?this.currentTime=e:this.updateTime(e);let g=this.currentTime-c*(this.playbackSpeed>=0?1:-1),_=this.playbackSpeed>=0?g<0:g>r;this.currentTime=Math.max(g,0),this.state===`finished`&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,y=n;if(u){let e=Math.min(this.currentTime,r)/o,t=Math.floor(e),n=e%1;!n&&e>=1&&(n=1),n===1&&t--,t=Math.min(t,u+1),t%2&&(d===`reverse`?(n=1-n,f&&(n-=f/o)):d===`mirror`&&(y=a)),v=c_(0,1,n)*o}let b;_?(this.delayState.value=l[0],b=this.delayState):b=y.next(v),i&&!_&&(b.value=i(b.value));let{done:x}=b;!_&&s!==null&&(x=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);let S=this.holdTime===null&&(this.state===`finished`||this.state===`running`&&x);return S&&p!==Ny&&(b.value=Gy(l,this.options,h,this.speed)),m&&m(b.value),S&&this.finish(),b}then(e,t){return this.finished.then(e,t)}get duration(){return y_(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+y_(e)}get time(){return y_(this.currentTime)}set time(e){e=v_(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state=`paused`,this.holdTime=e,this.tick(e))}getGeneratorVelocity(){return Uy(this.generator,this.currentTime,this.options.velocity)}get speed(){return this.playbackSpeed}set speed(e){let t=this.playbackSpeed!==e;t&&this.driver&&this.updateTime(J_.now()),this.playbackSpeed=e,t&&this.driver&&(this.time=y_(this.currentTime))}play(){if(this.isStopped)return;let{driver:e=gy,startTime:t}=this.options;this.driver||=e(e=>this.tick(e)),this.options.onPlay?.();let n=this.driver.now();this.state===`finished`?(this.updateFinished(),this.startTime=n):this.holdTime===null?this.startTime||=t??n:this.startTime=n-this.holdTime,this.state===`finished`&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state=`running`,this.driver.start()}pause(){this.state=`paused`,this.updateTime(J_.now()),this.holdTime=this.currentTime}complete(){this.state!==`running`&&this.play(),this.state=`finished`,this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state=`finished`,this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state=`idle`,this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&=(this.driver.stop(),void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type=`keyframes`,this.options.ease=`linear`,this.initAnimation()),this.driver?.stop(),e.observe(this)}},$y=new Set([`brightness`,`contrast`,`saturate`,`opacity`]);function eb(e){let[t,n]=e.slice(0,-1).split(`(`);if(t===`drop-shadow`)return e;let[r]=n.match(av)||[];if(!r)return e;let i=n.replace(r,``),a=+!!$y.has(t);return r!==n&&(a*=100),t+`(`+a+i+`)`}var tb=/\b([a-z-]*)\(.*?\)/gu,nb={...Hv,getAnimatableNone:e=>{let t=e.match(tb);return t?t.map(eb).join(` `):e}},rb={...Hv,getAnimatableNone:e=>{let t=Hv.parse(e);return Hv.createTransformer(e)(t.map(e=>typeof e==`number`?0:typeof e==`object`?{...e,alpha:1}:e))}},ib={...nv,transform:Math.round},ab={rotate:gv,pathRotation:gv,rotateX:gv,rotateY:gv,rotateZ:gv,scale:iv,scaleX:iv,scaleY:iv,scaleZ:iv,skew:gv,skewX:gv,skewY:gv,distance:vv,translateX:vv,translateY:vv,translateZ:vv,x:vv,y:vv,z:vv,perspective:vv,transformPerspective:vv,opacity:rv,originX:xv,originY:xv,originZ:vv},ob={borderWidth:vv,borderTopWidth:vv,borderRightWidth:vv,borderBottomWidth:vv,borderLeftWidth:vv,borderRadius:vv,borderTopLeftRadius:vv,borderTopRightRadius:vv,borderBottomRightRadius:vv,borderBottomLeftRadius:vv,width:vv,maxWidth:vv,height:vv,maxHeight:vv,top:vv,right:vv,bottom:vv,left:vv,inset:vv,insetBlock:vv,insetBlockStart:vv,insetBlockEnd:vv,insetInline:vv,insetInlineStart:vv,insetInlineEnd:vv,padding:vv,paddingTop:vv,paddingRight:vv,paddingBottom:vv,paddingLeft:vv,paddingBlock:vv,paddingBlockStart:vv,paddingBlockEnd:vv,paddingInline:vv,paddingInlineStart:vv,paddingInlineEnd:vv,margin:vv,marginTop:vv,marginRight:vv,marginBottom:vv,marginLeft:vv,marginBlock:vv,marginBlockStart:vv,marginBlockEnd:vv,marginInline:vv,marginInlineStart:vv,marginInlineEnd:vv,fontSize:vv,backgroundPositionX:vv,backgroundPositionY:vv,...ab,zIndex:ib,fillOpacity:rv,strokeOpacity:rv,numOctaves:ib},sb={...ob,color:Cv,backgroundColor:Cv,outlineColor:Cv,fill:Cv,stroke:Cv,borderColor:Cv,borderTopColor:Cv,borderRightColor:Cv,borderBottomColor:Cv,borderLeftColor:Cv,filter:nb,WebkitFilter:nb,mask:rb,WebkitMask:rb},cb=e=>sb[e],lb=new Set([nb,rb]);function ub(e,t){let n=cb(e);return lb.has(n)||(n=Hv),n.getAnimatableNone?n.getAnimatableNone(t):void 0}function db(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}var fb=e=>e*180/Math.PI,pb=e=>hb(fb(Math.atan2(e[1],e[0]))),mb={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:pb,rotateZ:pb,skewX:e=>fb(Math.atan(e[1])),skewY:e=>fb(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},hb=e=>(e%=360,e<0&&(e+=360),e),gb=pb,_b=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),vb=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),yb={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:_b,scaleY:vb,scale:e=>(_b(e)+vb(e))/2,rotateX:e=>hb(fb(Math.atan2(e[6],e[5]))),rotateY:e=>hb(fb(Math.atan2(-e[2],e[0]))),rotateZ:gb,rotate:gb,skewX:e=>fb(Math.atan(e[4])),skewY:e=>fb(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function bb(e){return+!!e.includes(`scale`)}function xb(e,t){if(!e||e===`none`)return bb(t);let n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u),r,i;if(n)r=yb,i=n;else{let t=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=mb,i=t}if(!i)return bb(t);let a=r[t],o=i[1].split(`,`).map(Cb);return typeof a==`function`?a(o):o[a]}var Sb=(e,t)=>{let{transform:n=`none`}=getComputedStyle(e);return xb(n,t)};function Cb(e){return parseFloat(e.trim())}var wb=[`transformPerspective`,`x`,`y`,`z`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`],Tb=new Set([...wb,`pathRotation`]),Eb=e=>e===nv||e===vv,Db=new Set([`x`,`y`,`z`]),Ob=wb.filter(e=>!Db.has(e));function kb(e){let t=[];return Ob.forEach(n=>{let r=e.getValue(n);if(r!==void 0){let e=r.get(),i=+!!n.startsWith(`scale`);if(e===i)return;t.push([n,e]),r.set(i)}}),t}var Ab=new Set([`bottom`,`right`]);function jb(e,t,n,r,i,a){let o=parseFloat(e);if(!isNaN(o))return o;let{min:s,max:c}=t()[n],l=c-s;return a===`border-box`?l:l-parseFloat(r)-parseFloat(i)}var Mb={width:({width:e,paddingLeft:t=`0`,paddingRight:n=`0`,boxSizing:r},i)=>jb(e,i,`x`,t,n,r),height:({height:e,paddingTop:t=`0`,paddingBottom:n=`0`,boxSizing:r},i)=>jb(e,i,`y`,t,n,r),top:({top:e})=>parseFloat(e),left:({left:e})=>parseFloat(e),bottom:({top:e},t)=>{let{y:n}=t();return parseFloat(e)+(n.max-n.min)},right:({left:e},t)=>{let{x:n}=t();return parseFloat(e)+(n.max-n.min)},x:({transform:e})=>xb(e,`x`),y:({transform:e})=>xb(e,`y`)};Mb.translateX=Mb.x,Mb.translateY=Mb.y;var Nb=new Set,Pb=!1,Fb=!1,Ib=!1;function Lb(){if(Fb){let e=[],t=new Set,n=new Set;Nb.forEach(r=>{r.needsMeasurement&&(e.push(r),t.add(r.element),Ab.has(r.name)&&n.add(r.element))});let r=new Map;n.forEach(e=>{let t=kb(e);t.length&&(r.set(e,t),e.render())}),e.forEach(e=>e.measureInitialState()),t.forEach(e=>{e.render();let t=r.get(e);t&&t.forEach(([t,n])=>{e.getValue(t)?.set(n)})}),e.forEach(e=>e.measureEndState()),e.forEach(e=>{e.suspendedScrollY!==void 0&&window.scrollTo(0,e.suspendedScrollY)})}Fb=!1,Pb=!1,Nb.forEach(e=>e.complete(Ib)),Nb.clear()}function Rb(){Nb.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Fb=!0)})}function zb(){Ib=!0,Rb(),Lb(),Ib=!1}function Bb(e,t,n){if(typeof e==`string`){if(u_(e)||f_(e))return parseFloat(e);if(!Hv.test(e)&&Hv.test(n))return ub(t,n)}return e??void 0}var Vb=class{constructor(e,t,n,r,i,a=!1){this.state=`pending`,this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=t,this.name=n,this.motionValue=r,this.element=i,this.isAsync=a}scheduleResolve(){this.state=`scheduled`,this.isAsync?(Nb.add(this),Pb||(Pb=!0,py.read(Rb),py.resolveKeyframes(Lb))):(this.readKeyframes(),this.complete())}readKeyframes(){let{unresolvedKeyframes:e,name:t,element:n,motionValue:r}=this;if(e[0]===null){let i=r?.get(),a=e[e.length-1];if(i!==void 0)e[0]=i;else if(n&&t){let r=Bb(n.readValue(t,a),t,a);r!==void 0&&(e[0]=r)}e[0]===void 0&&(e[0]=a),r&&i===void 0&&r.set(e[0])}db(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=`complete`,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),Nb.delete(this)}cancel(){this.state===`scheduled`&&(Nb.delete(this),this.state=`pending`)}resume(){this.state===`pending`&&this.scheduleResolve()}},Hb=e=>e.startsWith(`--`);function Ub(e,t,n){Hb(t)?e.style.setProperty(t,n):e.style[t]=n}var Wb={};function Gb(e,t){let n=p_(e);return()=>Wb[t]??n()}var Kb=Gb(()=>window.ScrollTimeline!==void 0,`scrollTimeline`),qb=Gb(()=>{try{document.createElement(`div`).animate({opacity:0},{easing:`linear(0, 1)`})}catch{return!1}return!0},`linearEasing`),Jb=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,Yb={linear:`linear`,ease:`ease`,easeIn:`ease-in`,easeOut:`ease-out`,easeInOut:`ease-in-out`,circIn:Jb([0,.65,.55,1]),circOut:Jb([.55,0,1,.45]),backIn:Jb([.31,.01,.66,-.59]),backOut:Jb([.33,1.53,.69,.99])};function Xb(e,t){if(e)return typeof e==`function`?qb()?_y(e,t):`ease-out`:V_(e)?Jb(e):Array.isArray(e)?e.map(e=>Xb(e,t)||Yb.easeOut):Yb[e]}function Zb(e,t,n,{delay:r=0,duration:i=300,repeat:a=0,repeatType:o=`loop`,ease:s=`easeOut`,times:c}={},l=void 0){let u={[t]:n};c&&(u.offset=c);let d=Xb(s,i);Array.isArray(d)&&(u.easing=d);let f={delay:r,duration:i,easing:Array.isArray(d)?`linear`:d,fill:`both`,iterations:a+1,direction:o===`reverse`?`alternate`:`normal`};return l&&(f.pseudoElement=l),e.animate(u,f)}function Qb(e){return typeof e==`function`&&`applyToOptions`in e}function $b({type:e,...t}){return Qb(e)&&qb()?e.applyToOptions(t):(t.duration??=300,t.ease??=`easeOut`,t)}var ex=class extends Xy{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;let{element:t,name:n,keyframes:r,pseudoElement:i,allowFlatten:a=!1,finalKeyframe:o,onComplete:s}=e;this.isPseudoElement=!!i,this.allowFlatten=a,this.options=e,e.type;let c=$b(e);this.animation=Zb(t,n,r,c,i),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){let e=Gy(r,this.options,o,this.speed);this.updateMotionValue&&this.updateMotionValue(e),Ub(t,n,e),this.animation.cancel()}s?.(),this.notifyFinished()},Yy(this,e,c)}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state===`finished`&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;let{state:e}=this;e!==`idle`&&e!==`finished`&&(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){let e=this.options?.element;!this.isPseudoElement&&e?.isConnected&&this.animation.commitStyles?.()}get duration(){let e=this.animation.effect?.getComputedTiming?.().duration||0;return y_(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+y_(e)}get time(){return y_(Number(this.animation.currentTime)||0)}set time(e){let t=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=v_(e),t&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime===null?this.animation.playState:`finished`}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(e){this.manualStartTime=this.animation.startTime=e}attachTimeline({timeline:e,onAttach:t,observe:n,...r}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:`linear`}),this.animation.onfinish=null,e&&Kb()?(this.animation.timeline=e,Object.assign(this.animation,r),t?.(this.animation),m_):n(this)}},tx={anticipate:M_,backInOut:j_,circInOut:F_};function nx(e){return e in tx}function rx(e){typeof e.ease==`string`&&nx(e.ease)&&(e.ease=tx[e.ease])}var ix=10,ax=class extends ex{constructor(e){rx(e),qy(e),super(e),e.startTime!==void 0&&e.autoplay!==!1&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){let{motionValue:t,onUpdate:n,onComplete:r,element:i,...a}=this.options;if(!t)return;if(e!==void 0){t.set(e);return}let o=new Qy({...a,autoplay:!1}),s=Math.max(ix,J_.now()-this.startTime),c=c_(0,ix,s-ix),l=o.sample(s).value,{name:u}=this.options;i&&u&&Ub(i,u,l),t.setWithVelocity(o.sample(Math.max(0,s-c)).value,l,c),o.stop()}},ox=(e,t)=>t!==`zIndex`&&!!(typeof e==`number`||Array.isArray(e)||typeof e==`string`&&(Hv.test(e)||e===`0`)&&!e.startsWith(`url(`));function sx(e){let t=e[0];if(e.length===1)return!0;for(let n=0;n<e.length;n++)if(e[n]!==t)return!0}function cx(e,t,n,r){let i=e[0];if(i===null)return!1;if(t===`display`||t===`visibility`)return!0;let a=e[e.length-1],o=ox(i,t),s=ox(a,t);return!o||!s?(o!==s&&`${t}${i}${a}${o?a:i}`,!1):sx(e)||(n===`spring`||Qb(n))&&r}function lx(e){e.duration=0,e.type=`keyframes`}var ux=new Set([`opacity`,`clipPath`,`filter`,`transform`,`backgroundColor`]),dx=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function fx(e){for(let t=0;t<e.length;t++)if(typeof e[t]==`string`&&dx.test(e[t]))return!0;return!1}var px=new Set([`color`,`backgroundColor`,`outlineColor`,`fill`,`stroke`,`borderColor`,`borderTopColor`,`borderRightColor`,`borderBottomColor`,`borderLeftColor`]),mx=p_(()=>Object.hasOwnProperty.call(Element.prototype,`animate`));function hx(e){let{motionValue:t,name:n,repeatDelay:r,repeatType:i,damping:a,type:o,keyframes:s}=e;if(!n||!(ux.has(n)||px.has(n)))return!1;let c=t?.owner?.current;if(!(c instanceof HTMLElement)&&!(c instanceof SVGElement))return!1;let{onUpdate:l,transformTemplate:u}=t.owner.getProps();return mx()&&(ux.has(n)||px.has(n)&&fx(s))&&(n!==`transform`||!u)&&!l&&!r&&i!==`mirror`&&a!==0&&o!==`inertia`}var gx=40,_x=class extends Xy{constructor(e){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=J_.now();let{keyframes:t,name:n,motionValue:r,element:i}=e,a=e;a.autoplay??=!0,a.delay??=0,a.type??=`keyframes`,a.repeat??=0,a.repeatDelay??=0,a.repeatType??=`loop`;let o=i?.KeyframeResolver||Vb;this.keyframeResolver=new o(t,(e,t,n)=>this.onKeyframesResolved(e,t,a,!n),n,r,i),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,t,n,r){this.keyframeResolver=void 0;let{name:i,type:a,velocity:o,delay:s,isHandoff:c,onUpdate:l}=n;this.resolvedAt=J_.now();let u=!0;cx(e,i,a,o)||(u=!1,(l_.instantAnimations||!s)&&l?.(Gy(e,n,t)),e[0]=e[e.length-1],lx(n),n.repeat=0);let d=r?this.resolvedAt&&this.resolvedAt-this.createdAt>gx?this.resolvedAt:this.createdAt:void 0,{onComplete:f}=n;n.startTime??=d,n.finalKeyframe=t,n.keyframes=e,n.onComplete=()=>{f?.(),this.notifyFinished()};let p=u&&!c&&hx(n),m;if(p){n.element=n.motionValue?.owner?.current;try{m=new ax(n)}catch{m=new Qy(n)}}else m=new Qy(n);this.pendingTimeline&&=(this.stopTimeline=m.attachTimeline(this.pendingTimeline),void 0),this._animation=m}get finished(){return this._animation?this._animation.finished:super.finished}then(e,t){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),zb()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}},vx=class{constructor(e){this.stop=()=>this.runAll(`stop`),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll(`time`)}set time(e){this.setAll(`time`,e)}get speed(){return this.getAll(`speed`)}set speed(e){this.setAll(`speed`,e)}get state(){return this.getAll(`state`)}get startTime(){return this.getAll(`startTime`)}get duration(){return yx(this.animations,`duration`)}get iterationDuration(){return yx(this.animations,`iterationDuration`)}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll(`play`)}pause(){this.runAll(`pause`)}cancel(){this.runAll(`cancel`)}complete(){this.runAll(`complete`)}};function yx(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r][t];i!==null&&i>n&&(n=i)}return n}var bx=class extends vx{then(e,t){return this.finished.finally(e).then(()=>{})}};function xx(e,t,n,r=0,i=1){let a=Array.from(e).sort((e,t)=>e.sortNodePosition(t)).indexOf(t),o=e.size,s=(o-1)*r;return typeof n==`function`?n(a,o):i===1?a*r:s-a*r}var Sx=30,Cx=e=>!isNaN(parseFloat(e)),wx={current:void 0},Tx=class{constructor(e,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=e=>{let t=J_.now();if(this.updatedAt!==t&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(e),this.current!==this.prev&&(this.notifyChange(),this.dependents))for(let e of this.dependents)e.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=t.owner}setCurrent(e){this.current=e,this.updatedAt=J_.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Cx(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on(`change`,e)}on(e,t){var n;return e===`change`?this.onChangeSubscribe(t):((n=this.events)[e]||(n[e]=new __)).add(t)}onChangeSubscribe(e){let{events:t}=this;return!t.change&&!this.changeSubscriber?this.changeSubscriber=e:(t.change||(t.change=new __,t.change.add(this.changeSubscriber),this.changeSubscriber=void 0),t.change.add(e)),()=>{this.changeSubscriber===e?this.changeSubscriber=void 0:t.change?.remove(e),this.stopIfUnobserved()}}stopIfUnobserved(){py.read(()=>{!this.changeSubscriber&&!this.events.change?.getSize()&&this.stop()})}clearListeners(){this.changeSubscriber=void 0;for(let e in this.events)this.events[e].clear()}attach(e,t){this.passiveEffect=e,this.stopPassiveEffect=t}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,t,n){this.set(t),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,t=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,t&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.notifyChange()}notifyChange(){let{current:e,changeSubscriber:t}=this;t?t(e):this.events.change?.notify(e)}addDependent(e){this.dependents||=new Set,this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return wx.current&&wx.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=J_.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>Sx)return 0;let t=Math.min(this.updatedAt-this.prevUpdatedAt,Sx);return b_(parseFloat(this.current)-parseFloat(this.prevFrameValue),t)}start(e){return this.stop(),new Promise(t=>{this.hasAnimated=!0;let n=!1,r;r=e(()=>{n=!0,this.events.animationComplete?.notify(),this.animation===r&&this.clearAnimation(),t()}),n||(this.animation=r),this.events.animationStart?.notify()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){this.animation=void 0}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}};function Ex(e,t){return new Tx(e,t)}function Dx(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}function Ox(e,t){let n=e?.[t]??e?.default??e;return n===e?n:Dx(n,e)}var kx={type:`spring`,stiffness:500,damping:25,restSpeed:10},Ax=e=>({type:`spring`,stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),jx={type:`keyframes`,duration:.8},Mx={type:`keyframes`,ease:[.25,.1,.35,1],duration:.3},Nx=(e,{keyframes:t})=>t.length>2?jx:Tb.has(e)?e.startsWith(`scale`)?Ax(t[1]):kx:Mx,Px=new Set([`when`,`delay`,`delayChildren`,`staggerChildren`,`staggerDirection`,`repeat`,`repeatType`,`repeatDelay`,`from`,`elapsed`]);function Fx(e){for(let t in e)if(!Px.has(t))return!0;return!1}var Ix=(e,t,n,r={},i,a)=>o=>{let s=Ox(r,e)||{},c=s.delay||r.delay||0,{elapsed:l=0}=r;l-=v_(c);let u={keyframes:Array.isArray(n)?n:[null,n],ease:`easeOut`,velocity:t.getVelocity(),...s,delay:-l,onUpdate:e=>{t.set(e),s.onUpdate&&s.onUpdate(e)},onComplete:()=>{o(),s.onComplete&&s.onComplete()},name:e,motionValue:t,element:a?void 0:i};Fx(s)||Object.assign(u,Nx(e,u)),u.duration&&=v_(u.duration),u.repeatDelay&&=v_(u.repeatDelay),u.from!==void 0&&(u.keyframes[0]=u.from);let d=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(lx(u),u.delay===0&&(d=!0)),(l_.instantAnimations||l_.skipAnimations||i?.shouldSkipAnimations||s.skipAnimations)&&(d=!0,lx(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,d&&!a&&t.get()!==void 0){let e=Gy(u.keyframes,s);if(e!==void 0){py.update(()=>{u.onUpdate(e),u.onComplete()});return}}return s.isSync?new Qy(u):new _x(u)},Lx=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Rx(e){let t=Lx.exec(e);if(!t)return[,];let[,n,r,i]=t;return[`--${n??r}`,i]}function zx(e,t,n=1){`${e}`;let[r,i]=Rx(e);if(!r)return;let a=window.getComputedStyle(t).getPropertyValue(r);if(a){let e=a.trim();return u_(e)?parseFloat(e):e}return $_(i)?zx(i,t,n+1):i}function Bx(e){let t=[{},{}];return e?.values.forEach((e,n)=>{t[0][n]=e.get(),t[1][n]=e.getVelocity()}),t}function Vx(e,t,n,r){let i=t=>typeof t==`function`?t(n===void 0?e.custom:n,...Bx(r)):t;return t=i(t),typeof t==`string`&&(t=e.variants&&e.variants[t]),i(t)}function Hx(e,t,n){return Vx(e.getProps(),t,n,e)}var Ux=(e,t)=>t===`exit`?e.presenceContext?.custom:void 0,Wx=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,...wb]),Gx=e=>Array.isArray(e);function Kx(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Ex(n))}function qx(e){return Gx(e)?e[e.length-1]||0:e}function Jx(e,t){let{transitionEnd:n={},transition:r={},...i}=Hx(e,t)||{};i={...i,...n};for(let t in i)Kx(e,t,qx(i[t]))}var Yx=e=>!!(e&&e.getVelocity);function Xx(e){return!!(Yx(e)&&e.add)}function Zx(e,t){let n=e.getValue(`willChange`);if(Xx(n))return n.add(t);if(!n&&l_.WillChange){let n=new l_.WillChange(`auto`);e.addValue(`willChange`,n),n.add(t)}}function Qx(e){return e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var $x=`data-`+Qx(`framerAppearId`);function eS(e){return e.props[$x]}var tS=typeof window<`u`;function nS({protectedKeys:e,needsAnimating:t},n){let r=n in e&&!t[n];return t[n]=!1,r}function rS(e,t,{delay:n=0,transitionOverride:r,type:i}={}){let{transition:a,transitionEnd:o,...s}=t,c=e.getDefaultTransition();a=a?Dx(a,c):c;let l=a?.reduceMotion,u=a?.skipAnimations;r&&(a=r);let d=[],f=i&&e.animationState?.getState()[i],p=a?.path;p&&p.animateVisualElement(e,s,a,n,d);for(let t in s){let r=e.getValue(t,e.latestValues[t]??null),i=s[t];if(i===void 0||f&&nS(f,t))continue;let o={delay:n,...Ox(a||{},t)};u&&(o.skipAnimations=!0);let c=r.get();if(c!==void 0&&!r.isAnimating()&&!Array.isArray(i)&&i===c&&!o.velocity){py.update(()=>r.set(i));continue}let p=!1;if(tS&&window.MotionHandoffAnimation){let n=eS(e);if(n){let e=window.MotionHandoffAnimation(n,t,py);e!==null&&(o.startTime=e,p=!0)}}Zx(e,t);let m=l??e.shouldReduceMotion;r.start(Ix(t,r,i,m&&Wx.has(t)?{type:!1}:o,e,p));let h=r.animation;h&&d.push(h)}if(o){let t=()=>py.update(()=>{o&&Jx(e,o)});d.length?Promise.all(d).then(t):t()}return d}function iS(e,t,n={}){let r=Hx(e,t,Ux(e,n.type)),i=n.transitionOverride||(r?.transition??(e.getDefaultTransition()||{})),a=()=>Promise.all(r?rS(e,r,n):[]),o=(r=0)=>{let{variantChildren:a}=e,{delayChildren:o=0,staggerChildren:s,staggerDirection:c}=i,l=[];return a?.forEach(e=>{e.notify(`AnimationStart`,t),l.push(iS(e,t,{...n,delay:r+(typeof o==`function`?0:o)+xx(a,e,o,s,c)}).then(()=>e.notify(`AnimationComplete`,t)))}),Promise.all(l)},{when:s}=i;return s?s===`beforeChildren`?a().then(()=>o()):o().then(a):Promise.all([a(),o(n.delay)])}function aS(e,t,n={}){return e.notify(`AnimationStart`,t),(Array.isArray(t)?Promise.all(t.map(t=>iS(e,t,n))):typeof t==`string`?iS(e,t,n):Promise.all(rS(e,Hx(e,t,n.custom),n))).then(()=>{e.notify(`AnimationComplete`,t)})}var oS={test:e=>e===`auto`,parse:e=>e},sS=e=>t=>t.test(e),cS=[nv,vv,_v,gv,bv,yv,oS],lS=e=>cS.find(sS(e));function uS(e){return typeof e==`number`?e===0:e===null||e===`none`||e===`0`||f_(e)}var dS=new Set([`auto`,`none`,`0`]);function fS(e,t,n){let r=0,i;for(;r<e.length&&!i;){let t=e[r];typeof t==`string`&&!dS.has(t)&&Pv(t)&&(i=e[r]),r++}if(i&&n)for(let r of t)e[r]!==i&&(e[r]=ub(n,i))}var pS=class extends Vb{constructor(e,t,n,r,i){super(e,t,n,r,i,!0)}readKeyframes(){let{unresolvedKeyframes:e,element:t,name:n}=this;if(!t||!t.current)return;super.readKeyframes();for(let n=0;n<e.length;n++){let r=e[n];if(typeof r==`string`&&(r=r.trim(),$_(r))){let i=zx(r,t.current);i!==void 0&&(e[n]=i),n===e.length-1&&(this.finalKeyframe=r)}}if(this.resolveNoneKeyframes(),!Wx.has(n)||e.length!==2)return;let[r,i]=e;if(typeof r==`number`&&typeof i==`number`)return;let a=lS(r),o=lS(i);if(tv(r)!==tv(i)&&Mb[n]){this.needsMeasurement=!0;return}if(a!==o){if(Eb(a)&&Eb(o))for(let t=0;t<e.length;t++){let n=e[t];typeof n==`string`&&(e[t]=parseFloat(n))}else Mb[n]&&(this.needsMeasurement=!0)}}resolveNoneKeyframes(){let{unresolvedKeyframes:e,name:t}=this,n=[];for(let t=0;t<e.length;t++)(e[t]===null||uS(e[t]))&&n.push(t);n.length&&fS(e,n,t)}measure(){let{element:e,name:t}=this;return Mb[t](window.getComputedStyle(e.current),()=>e.measureViewportBox())}measureInitialState(){let{element:e,unresolvedKeyframes:t,name:n}=this;if(!e||!e.current)return;n===`height`&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=this.measure(),t[0]=this.measuredOrigin;let r=t[t.length-1];r!==void 0&&this.motionValue?.jump(r,!1)}measureEndState(){let{element:e,unresolvedKeyframes:t}=this;if(!e||!e.current)return;this.motionValue?.jump(this.measuredOrigin,!1);let n=t.length-1,r=t[n];t[n]=this.measure(),r!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([t,n])=>{e.getValue(t).set(n)}),this.resolveNoneKeyframes()}},mS=[];function hS(e){typeof e.test==`function`&&e.read,gS(e),mS.unshift(e)}function gS(e){s_(mS,e)}function _S(e){return mS.find(t=>t.test(e))}function vS(e,t,n={},r){let i=[],{velocity:a}=n,o=n.reduceMotion??r?.shouldReduceMotion;for(let s in t){if(s===`transition`||s===`transitionEnd`)continue;let c=t[s];if(c===void 0)continue;let l=e(s),u=l.get();if(u!==void 0&&!l.isAnimating()&&!Array.isArray(c)&&c===u&&!a){py.update(()=>l.set(c));continue}l.start(Ix(s,l,c,o&&Wx.has(s)?{type:!1}:n,r)),l.animation&&i.push(l.animation)}let{transitionEnd:s}=t;if(s){let t=()=>py.update(()=>{for(let t in s)e(t).set(s[t])});i.length?Promise.all(i).then(t):t()}return i}function yS(e,t,n,r,i){return vS(r=>{let a=e.get(t,r);if(!a){let o;if(!i){let i=n[r];o=bS(i)??e.read(t,r,i),`${r}`}a=Ex(o,{owner:i}),e(t,{[r]:a})}return a},n,r,i)}function bS(e){let t=Array.isArray(e)?e[0]:void 0;return t===null?void 0:t}function xS(e){return d_(e)&&`offsetHeight`in e&&!(`ownerSVGElement`in e)}function SS(e){return d_(e)&&`ownerSVGElement`in e}var CS=(e,t)=>t&&typeof e==`number`?t.transform(e):e;function wS(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e==`string`){let r=document;t&&(r=t.current);let i=n?.[e]??r.querySelectorAll(e);return i?Array.from(i):[]}return Array.from(e).filter(e=>e!=null)}var TS=class{constructor(e=py.render){this.step=e,this.values=new Map,this.pending=[],this.numPending=0,this.flush=()=>{let{pending:e,numPending:t}=this;this.numPending=0;for(let n=0;n<t;n++)e[n]()}}set(e,t,n,r){if(this.values.get(e)?.onRemove(),r)for(let e of this.values.values())e.value===r&&(n=e.render);let i=()=>n&&this.schedule(n);t.get()!==void 0&&i();let a=t.on(`change`,i),o=()=>{a(),n&&!r&&this.cancel(n),this.values.get(e)?.onRemove===o&&this.values.delete(e)};return this.values.set(e,{value:t,render:r?void 0:n,onRemove:o}),o}get(e){return this.values.get(e)?.value}release(){let e=new Map;return this.values.forEach((t,n)=>{e.set(n,t.value),t.onRemove()}),this.transformKeys=this.transformValues=void 0,e}schedule(e){let{pending:t,numPending:n}=this;for(let r=0;r<n;r++)if(t[r]===e)return;n||this.step(this.flush),t[this.numPending++]=e}cancel(e){let{pending:t}=this;for(let n=0;n<this.numPending;n++)if(t[n]===e){t[n]=t[--this.numPending];return}}};function ES(e,{step:t,...n}={}){let r=new WeakMap;return Object.assign((n,i)=>{let a=r.get(n)??new TS(t);r.set(n,a);let o=[];for(let t in i){let r=i[t],s=e(n,a,t,r);o.push(s)}return()=>{for(let e of o)e()}},n,{get:(e,t)=>r.get(e)?.get(t),flush:e=>r.get(e)?.flush(),state:e=>r.get(e)})}var DS={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},OS={};function kS(e){let t=``,{transformKeys:n=[],transformValues:r={}}=e;for(let e=0;e<n.length;e++){let i=n[e],a=r[i].get();a!==void 0&&(typeof a==`number`?a:parseFloat(a))!==+!!i.startsWith(`scale`)&&(t+=(t&&` `)+(OS[i]||(OS[i]=(DS[i]||i)+`(`))+CS(a,ab[i])+`)`)}let i=e.get(`pathRotation`)?.get();return i&&(t+=(t&&` `)+`rotate(`+CS(i,ab.pathRotation)+`)`),t||`none`}var AS=new Set([`originX`,`originY`,`originZ`]),jS=(e,t)=>CS(e.get(t)?.get(),ob[t]),MS=(e,t,n,r)=>{let i,a;if(Tb.has(n)){if(n!==`pathRotation`){let e=t.transformKeys??=[];(t.transformValues??={})[n]=r,e.includes(n)||(e.push(n),e.sort((e,t)=>wb.indexOf(e)-wb.indexOf(t)))}t.get(`transform`)||(!xS(e)&&!t.get(`transformBox`)&&MS(e,t,`transformBox`,new Tx(`fill-box`)),t.set(`transform`,new Tx(`none`),()=>{e.style.transform=kS(t)})),a=t.get(`transform`)}else AS.has(n)?(t.get(`transformOrigin`)||t.set(`transformOrigin`,new Tx(``),()=>{let n=jS(t,`originX`)??`50%`,r=jS(t,`originY`)??`50%`,i=jS(t,`originZ`)??0;e.style.transformOrigin=`${n} ${r} ${i}`}),a=t.get(`transformOrigin`)):i=Hb(n)?()=>{e.style.setProperty(n,r.get())}:()=>{e.style[n]=CS(r.get(),ob[n])};return t.set(n,r,i,a)},NS=e=>xS(e)||SS(e),PS=(e,t)=>{if(Tb.has(t))return Sb(e,t);let n=getComputedStyle(e),r=Hb(t)?n.getPropertyValue(t):n[t];return typeof r==`string`&&r.trim()||0},FS=ES(MS,{test:NS,read:PS}),IS={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},LS=wb.length;function RS(e,t,n){let r=``,i=!0;for(let a=0;a<LS;a++){let o=wb[a],s=e[o];if(s===void 0)continue;let c=!0;if(typeof s==`number`)c=s===+!!o.startsWith(`scale`);else{let e=parseFloat(s);c=o.startsWith(`scale`)?e===1:e===0}if(!c||n){let e=CS(s,ob[o]);if(!c){i=!1;let t=IS[o]||o;r+=`${t}(${e}) `}n&&(t[o]=e)}}let a=e.pathRotation;return a&&(i=!1,r+=`rotate(${CS(a,ob.pathRotation)}) `),r=r.trim(),n?r=n(t,i?``:r):i&&(r=`none`),r}function zS(e,t,n){let{style:r,vars:i,transformOrigin:a}=e,o=!1,s=!1;for(let e in t){let n=t[e];if(Tb.has(e)){o=!0;continue}if(Z_(e)){i[e]=n;continue}{let t=CS(n,ob[e]);e.startsWith(`origin`)?(s=!0,a[e]=t):r[e]=t}}if(t.transform||(o||n?r.transform=RS(t,e.transform,n):r.transform&&=`none`),s){let{originX:e=`50%`,originY:t=`50%`,originZ:n=0}=a;r.transformOrigin=`${e} ${t} ${n}`}}var BS={offset:`stroke-dashoffset`,array:`stroke-dasharray`},VS={offset:`strokeDashoffset`,array:`strokeDasharray`};function HS(e,t,n=1,r=0,i=!0){e.pathLength=1;let a=i?BS:VS;e[a.offset]=`${-r}`,e[a.array]=`${t} ${n}`}var US=[`transform`,`opacity`,`offsetDistance`,`offsetPath`,`offsetRotate`,`offsetAnchor`];function WS(e,{attrX:t,attrY:n,attrScale:r,pathLength:i,pathSpacing:a=1,pathOffset:o=0,...s},c,l,u){if(zS(e,s,l),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};let{attrs:d,style:f}=e;for(let e of US)d[e]!==void 0&&(f[e]=d[e],delete d[e]);(f.transform||d.transformOrigin)&&(f.transformOrigin=d.transformOrigin??`50% 50%`,delete d.transformOrigin),f.transform&&(f.transformBox=u?.transformBox??`fill-box`,delete d.transformBox),t!==void 0&&(d.x=t),n!==void 0&&(d.y=n),r!==void 0&&(d.scale=r),i!==void 0&&HS(d,i,a,o,!1)}function GS(e,t){if(!(t in e))return!1;let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||Object.getOwnPropertyDescriptor(e,t);return n&&typeof n.set==`function`}var KS=(e,t,n,r,i=n)=>{let a=GS(e,i);!a&&(i.startsWith(`data`)||i.startsWith(`aria`))&&(i=Qx(i));let o=ob[n]||ob[i],s=a?()=>{e[i]=CS(r.get(),ob[n])}:()=>{let t=CS(r.get(),o);t==null?e.removeAttribute(i):e.setAttribute(i,String(t))};return t.set(n,r,s)};function qS(e,t,n,r){return py.render(()=>e.setAttribute(`pathLength`,`1`)),n===`pathOffset`?t.set(n,r,()=>{let t=r.get();e.setAttribute(`stroke-dashoffset`,`${-t}`)}):(t.get(`stroke-dasharray`)||t.set(`stroke-dasharray`,new Tx(`1 1`),()=>{let n=t.get(`pathLength`)?.get()??1,r=t.get(`pathSpacing`)?.get();e.setAttribute(`stroke-dasharray`,`${n} ${r??1-Number(n)}`)}),t.set(n,r,void 0,t.get(`stroke-dasharray`)))}var JS=ES((e,t,n,r)=>n.startsWith(`path`)?qS(e,t,n,r):n.startsWith(`attr`)?KS(e,t,n,r,YS(n)):(Tb.has(n)||AS.has(n)||Hb(n)||n in e.style?MS:KS)(e,t,n,r),{test:SS,read:(e,t)=>Tb.has(t)?ob[t]?.default||0:Hb(t)||US.includes(t)?PS(e,t)||e.getAttribute(Qx(t))||0:(t=YS(t),e.getAttribute(Qx(t))??e.getAttribute(t)??void 0)});function YS(e){return e.replace(/^attr([A-Z])/,(e,t)=>t.toLowerCase())}function XS({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function ZS(e,t){if(!t)return e;let n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function QS(e,t){return XS(ZS(e.getBoundingClientRect(),t))}var $S={},eC=e=>SS(e)?JS:FS,tC=class{constructor(e,t){this.effect=e,this.current=t,this.KeyframeResolver=pS}getValue(e){return this.effect.get(this.current,e)}readValue(e,t){return this.effect.read(this.current,e,t)}render(){this.effect.flush(this.current)}measureViewportBox(){return QS(this.current)}getProps(){return $S}};function nC(e,t,n,r){if(r)return vS(e=>r.getValue(e,null),t,n,r);let i=eC(e);return yS(i,e,t,n,new tC(i,e))}var rC=ES((e,t,n,r)=>t.set(n,r,()=>{e[n]=r.get()}),{test:e=>d_(e),read:(e,t)=>{let n=e[t];return typeof n==`string`||typeof n==`number`?n:void 0}}),{schedule:iC,cancel:aC}=fy(queueMicrotask,!1),oC={x:!1,y:!1};function sC(){return oC.x||oC.y}function cC(e,t){let n=wS(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function lC(e){return!(e.pointerType===`touch`||sC())}function uC(e,t,n={}){let[r,i,a]=cC(e,n);return r.forEach(e=>{let n=!1,r=!1,a,o=()=>{e.removeEventListener(`pointerleave`,u)},s=e=>{a&&=(a(e),void 0),o()},c=e=>{n=!1,window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),r&&(r=!1,s(e))},l=()=>{n=!0,window.addEventListener(`pointerup`,c,i),window.addEventListener(`pointercancel`,c,i)},u=e=>{if(e.pointerType!==`touch`){if(n){r=!0;return}s(e)}};e.addEventListener(`pointerenter`,n=>{if(!lC(n))return;r=!1;let o=t(e,n);typeof o==`function`&&(a=o,e.addEventListener(`pointerleave`,u,i))},i),e.addEventListener(`pointerdown`,l,i)}),a}var dC=(e,t)=>t?e===t||dC(e,t.parentElement):!1,fC=e=>e.pointerType===`mouse`?typeof e.button!=`number`||e.button<=0:e.isPrimary!==!1,pC=new Set([`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`]);function mC(e){return pC.has(e.tagName)||e.isContentEditable===!0}var hC=new WeakSet;function gC(e){return t=>{t.key===`Enter`&&e(t)}}function _C(e,t){e.dispatchEvent(new PointerEvent(`pointer`+t,{isPrimary:!0,bubbles:!0}))}var vC=(e,t)=>{let n=e.currentTarget;if(!n)return;let r=gC(()=>{if(hC.has(n))return;_C(n,`down`);let e=gC(()=>{_C(n,`up`)});n.addEventListener(`keyup`,e,t),n.addEventListener(`blur`,()=>_C(n,`cancel`),t)});n.addEventListener(`keydown`,r,t),n.addEventListener(`blur`,()=>n.removeEventListener(`keydown`,r),t)};function yC(e){return fC(e)&&!sC()}var bC=new WeakSet;function xC(e,t,n={}){let[r,i,a]=cC(e,n),o=e=>{let r=e.currentTarget;if(!yC(e)||bC.has(e))return;hC.add(r),n.stopPropagation&&bC.add(e);let a=t(r,e),o={...i,capture:!0},s=(e,t)=>{window.removeEventListener(`pointerup`,c,o),window.removeEventListener(`pointercancel`,l,o),hC.has(r)&&hC.delete(r),yC(e)&&typeof a==`function`&&a(e,{success:t})},c=e=>{s(e,r===window||r===document||n.useGlobalTarget||dC(r,e.target))},l=e=>{s(e,!1)};window.addEventListener(`pointerup`,c,o),window.addEventListener(`pointercancel`,l,o)};return r.forEach(e=>{(n.useGlobalTarget?window:e).addEventListener(`pointerdown`,o,i),xS(e)&&(e.addEventListener(`focus`,e=>vC(e,i)),!mC(e)&&!e.hasAttribute(`tabindex`)&&(e.tabIndex=0))}),a}function SC(...e){let t=!Array.isArray(e[0]),n=t?0:-1,r=e[0+n],i=e[1+n],a=e[2+n],o=e[3+n],s=Fy(i,a,o);return t?s(r):s}var CC=()=>({min:0,max:0}),wC=()=>({x:CC(),y:CC()}),TC=new WeakMap;function EC(e){return typeof e==`object`&&!!e&&typeof e.start==`function`}function DC(e){return typeof e==`string`||Array.isArray(e)}var OC=[`animate`,`whileInView`,`whileFocus`,`whileHover`,`whileTap`,`whileDrag`,`exit`],kC=[`initial`,...OC];function AC(e){if(EC(e.animate))return!0;for(let t=0;t<kC.length;t++)if(DC(e[kC[t]]))return!0;return!1}function jC(e){return!!(AC(e)||e.variants)}function MC(e,t,n){for(let r in t){let i=t[r],a=n[r];if(Yx(i))e.addValue(r,i);else if(Yx(a))e.addValue(r,Ex(i,{owner:e}));else if(a!==i){if(e.hasValue(r)){let t=e.getValue(r);t.liveStyle===!0?t.jump(i):t.hasAnimated||t.set(i)}else{let t=e.getStaticValue(r);e.addValue(r,Ex(t===void 0?i:t,{owner:e}))}}}for(let r in n)t[r]===void 0&&e.removeValue(r);return t}var NC={current:null},PC={current:!1},FC=typeof window<`u`;function IC(){if(PC.current=!0,FC){if(window.matchMedia){let e=window.matchMedia(`(prefers-reduced-motion)`),t=()=>NC.current=e.matches;e.addEventListener(`change`,t),t()}else NC.current=!1}}var LC=[`AnimationStart`,`AnimationComplete`,`Update`,`BeforeLayoutMeasure`,`LayoutMeasure`,`LayoutAnimationStart`,`LayoutAnimationComplete`],RC={};function zC(e){RC=e}function BC(){return RC}var VC=class{scrapeMotionValuesFromProps(e,t,n){return{}}constructor({parent:e,props:t,presenceContext:n,reducedMotionConfig:r,skipAnimations:i,blockInitialAnimation:a,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=Vb,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify(`Update`,this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{let e=J_.now();this.renderScheduledAt<e&&(this.renderScheduledAt=e,py.render(this.render,!1,!0))};let{latestValues:c,renderState:l}=o;this.latestValues=c,this.baseTarget={...c},this.initialValues=t.initial?{...c}:{},this.renderState=l,this.parent=e,this.props=t,this.presenceContext=n,this.depth=e?e.depth+1:0,this.reducedMotionConfig=r,this.skipAnimationsConfig=i,this.options=s,this.blockInitialAnimation=!!a,this.isControllingVariants=AC(t),this.isVariantNode=jC(t),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);let{willChange:u,...d}=this.scrapeMotionValuesFromProps(t,{},this);for(let e in d){let t=d[e];c[e]!==void 0&&Yx(t)&&t.set(c[e])}}mount(e){if(this.hasBeenMounted)for(let e in this.initialValues)this.values.get(e)?.jump(this.initialValues[e]),this.latestValues[e]=this.initialValues[e];if(this.current=e,TC.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.isVariantNode&&!this.isControllingVariants){let e=this;do e=e.props.inherit!==!1&&e.parent;while(e&&!e.isVariantNode);if(e){let{variantChildren:t}=e;t.add(this),this.removeFromVariantTree=()=>t.delete(this)}}this.values.forEach((e,t)=>this.bindToMotionValue(t,e)),this.reducedMotionConfig===`never`?this.shouldReduceMotion=!1:this.reducedMotionConfig===`always`?this.shouldReduceMotion=!0:(PC.current||IC(),this.shouldReduceMotion=NC.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),my(this.notifyUpdate),my(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(let e in this.events)this.events[e].clear();for(let e in this.features){let t=this.features[e];t&&(t.unmount(),t.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??=new Set,this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,t){if(this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)(),t.accelerate&&ux.has(e)&&this.current instanceof HTMLElement){let{factory:n,keyframes:r,times:i,ease:a,duration:o}=t.accelerate,s=new ex({element:this.current,name:e,keyframes:r,times:i,ease:a,duration:v_(o)}),c=n(s);this.valueSubscriptions.set(e,()=>{c(),s.cancel()});return}let n=Tb.has(e);n&&this.onBindTransform&&this.onBindTransform();let r=t.on(`change`,t=>{this.latestValues[e]=t,this.props.onUpdate&&py.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()}),i;typeof window<`u`&&window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,t)),this.valueSubscriptions.set(e,()=>{r(),i&&i()})}sortNodePosition(e){return!this.current||!e.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e=`animation`;for(e in RC){let t=RC[e];if(!t)continue;let{isEnabled:n,Feature:r}=t;if(!this.features[e]&&r&&n(this.props)&&(this.features[e]=new r(this)),this.features[e]){let t=this.features[e];t.isMounted?t.update():(t.mount(),t.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):wC()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,t){this.latestValues[e]=t}update(e,t){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=t;for(let t=0;t<LC.length;t++){let n=LC[t];this.propEventSubscriptions[n]&&(this.propEventSubscriptions[n](),delete this.propEventSubscriptions[n]);let r=e[`on`+n];r&&(this.propEventSubscriptions[n]=this.on(n,r))}this.prevMotionValues=MC(this,this.scrapeMotionValuesFromProps(e,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}addValue(e,t){let n=this.values.get(e);if(t!==n){n&&this.removeValue(e),this.bindToMotionValue(e,t),this.values.set(e,t);let r=t.get();r!==void 0&&(this.latestValues[e]=r)}}removeValue(e){this.values.delete(e);let t=this.valueSubscriptions.get(e);t&&(t(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,t){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&t!==void 0&&(n=Ex(t??this.getDefaultValue?.(e),{owner:this}),this.addValue(e,n)),n}readValue(e,t){let n=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return n!=null&&(typeof n==`string`&&(u_(n)||f_(n))?n=parseFloat(n):typeof n!=`number`&&!Hv.test(n)&&Hv.test(t)&&(n=ub(e,t)),this.setBaseTarget(e,Yx(n)?n.get():n)),Yx(n)?n.get():n}setBaseTarget(e,t){this.baseTarget[e]=t}on(e,t){return this.events[e]||(this.events[e]=new __),this.events[e].add(t)}notify(e,...t){this.events[e]&&this.events[e].notify(...t)}scheduleRenderMicrotask(){iC.render(this.render)}},HC=class extends VC{constructor(){super(...arguments),this.KeyframeResolver=pS}sortInstanceNodePosition(e,t){return e.compareDocumentPosition(t)&2?1:-1}getBaseTargetFromProps(e,t){let n=e.style;return n?n[t]:void 0}removeValueFromRenderState(e,{vars:t,style:n}){delete t[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);let{children:e}=this.props;Yx(e)&&(this.childSubscription=e.on(`change`,e=>{this.current&&(this.current.textContent=`${e}`)}))}},UC=class{constructor(e){this.isMounted=!1,this.node=e}update(){}};function WC(e,{style:t,vars:n},r,i){let a=e.style,o;for(o in t)a[o]=t[o];for(o in i?.applyProjectionStyles(a,r),n)a.setProperty(o,n[o])}var GC={};function KC(e,{layout:t,layoutId:n}){return Tb.has(e)||e.startsWith(`origin`)||(t||n!==void 0)&&(!!GC[e]||e===`opacity`)}function qC(e,t,n){let r=e.style,i=t?.style,a={};if(!r)return a;for(let t in r)(Yx(r[t])||i&&Yx(i[t])||KC(t,e)||n?.getValue(t)?.liveStyle!==void 0)&&(a[t]=r[t]);return a}function JC(e){return window.getComputedStyle(e)}var YC=class extends HC{constructor(){super(...arguments),this.type=`html`,this.renderInstance=WC}mount(e){e.style,super.mount(e)}readValueFromInstance(e,t){if(Tb.has(t))return this.projection?.isProjecting?bb(t):Sb(e,t);{let n=JC(e),r=(Z_(t)?n.getPropertyValue(t):n[t])||0;return typeof r==`string`?r.trim():r}}measureInstanceViewportBox(e,{transformPagePoint:t}){return QS(e,t)}build(e,t,n){zS(e,t,n.transformTemplate)}scrapeMotionValuesFromProps(e,t,n){return qC(e,t,n)}},XC=new Set([`baseFrequency`,`diffuseConstant`,`kernelMatrix`,`kernelUnitLength`,`keySplines`,`keyTimes`,`limitingConeAngle`,`markerHeight`,`markerWidth`,`numOctaves`,`targetX`,`targetY`,`surfaceScale`,`specularConstant`,`specularExponent`,`stdDeviation`,`tableValues`,`viewBox`,`gradientTransform`,`pathLength`,`startOffset`,`textLength`,`lengthAdjust`]),ZC=e=>typeof e==`string`&&e.toLowerCase()===`svg`;function QC(e,t,n,r){WC(e,t,void 0,r);for(let n in t.attrs)e.setAttribute(XC.has(n)?n:Qx(n),t.attrs[n])}function $C(e,t,n){let r=qC(e,t,n);for(let n in e)if(Yx(e[n])||Yx(t[n])){let t=wb.indexOf(n)===-1?n:`attr`+n.charAt(0).toUpperCase()+n.substring(1);r[t]=e[n]}return r}var ew=class extends HC{constructor(){super(...arguments),this.type=`svg`,this.isSVGTag=!1,this.measureInstanceViewportBox=wC}getBaseTargetFromProps(e,t){return Tb.has(t)?super.getBaseTargetFromProps(e,t)??bb(t):e[t]}getDefaultValue(e){return Tb.has(e)?this.latestValues[e]??bb(e):void 0}readValueFromInstance(e,t){if(Tb.has(t)){let e=cb(t);return e&&e.default||0}if(US.includes(t)){let n=getComputedStyle(e)[t];if(typeof n==`string`&&n)return n.trim()}return t=XC.has(t)?t:Qx(t),e.getAttribute(t)}scrapeMotionValuesFromProps(e,t,n){return $C(e,t,n)}build(e,t,n){WS(e,t,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,t,n,r){QC(e,t,n,r)}mount(e){this.isSVGTag=ZC(e.tagName),super.mount(e)}};function tw(e,t){if(!Array.isArray(t))return!1;let n=t.length;if(n!==e.length)return!1;for(let r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0}var nw=[...OC].reverse();function rw(e){let t=t=>Promise.all(t.map(({animation:t,options:n})=>aS(e,t,n))),n=aw(),r=!0,i=!1;function a(a){let{props:o,parent:s,manuallyAnimateOnMount:c}=e,l=r||i,u=[],d=new Set,f={},p=1/0,m=e;do m=m.props.inherit!==!1&&m.parent;while(m&&!m.isControllingVariants);if(nw.forEach((t,r)=>{let i=n[t],h=o[t],g=m&&m.props[t],_=h===void 0?DC(g)||g===!1?g:void 0:h,v=DC(_),y=t===a?i.isActive:null;y===!1&&(p=r);let b=v&&h===void 0&&!(l&&c);if(i.protectedKeys={...f},!i.isActive&&y===null||!_&&!i.prevProp||EC(_)||typeof _==`boolean`)return;if(t===`exit`&&i.isActive&&y!==!0){f={...f,...i.prevResolvedValues};return}let x=iw(i.prevProp,_),S=x||v&&(y&&!b||r>p),C=!1,w=Array.isArray(_)?_:[_],T={};if(y!==!1)for(let n of w){let{transition:r,transitionEnd:i,...a}=Hx(e,n,Ux(e,t))||{};T={...T,...a,...i}}let{prevResolvedValues:E}=i;for(let t in{...E,...T}){if(t in f)continue;let n=T[t],r=E[t],a=Array.isArray(n)&&Array.isArray(r)?!tw(n,r)||x:n!==r;if(a&&n==null)d.add(t);else if(a||n!==void 0&&d.has(t)){S=!0,d.delete(t)&&(C=!0),i.needsAnimating[t]=!0;let n=e.getValue(t);n&&(n.liveStyle=!1)}else i.protectedKeys[t]=!0}if(i.prevProp=_,i.prevResolvedValues=T,i.isActive&&(f={...f,...T}),S&&(!(b&&x)||C))for(let n of w){let r={type:t};if(typeof n==`string`&&l&&c&&s?.enteringChildren){let t=Hx(s,n)?.transition?.delayChildren;r.delay=xx(s.enteringChildren,e,t)}u.push({animation:n,options:r})}}),d.size){let{initial:t}=o,n={},r=typeof t!=`boolean`&&Hx(e,Array.isArray(t)?t[0]:t,e.presenceContext?.custom);r&&r.transition&&(n.transition=r.transition),d.forEach(i=>{let a=e.getValue(i);a&&(a.liveStyle=!0);let s=r&&!Array.isArray(t)?r[i]:void 0,c=e.getBaseTargetFromProps(o,i);n[i]=(s===void 0?c!==void 0&&!Yx(c)?c:e.initialValues[i]===void 0?e.baseTarget[i]:void 0:s)??null}),u.push({animation:n})}let h=l&&e.blockInitialAnimation||r&&!c&&(o.initial===!1||o.initial===o.animate);return r=i=!1,!h&&u.length?t(u):Promise.resolve()}function o(t,r){if(n[t].isActive===r)return Promise.resolve();e.variantChildren?.forEach(e=>e.animationState?.setActive(t,r)),n[t].isActive=r;let i=a(t);for(let e in n)n[e].protectedKeys={};return i}return{animateChanges:a,setActive:o,setAnimateFunction:n=>{t=n(e)},getState:()=>n,reset:()=>{n=aw(),i=!0}}}function iw(e,t){return typeof t==`string`?t!==e:Array.isArray(t)?!tw(t,e):!1}function aw(){let e={};for(let t of OC)e[t]={isActive:t===`animate`,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}};return e}function ow(e,t,n){let r=Yx(e)?e:Ex(e);return r.start(Ix(``,r,t,n)),r.animation}function sw(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}function cw(e){return Yx(e)?e.get():e}var lw=(0,g.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`});function uw(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function dw(...e){return t=>{let n=!1,r=e.map(e=>{let r=uw(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():uw(e[t],null)}}}}function fw(...e){return g.useCallback(dw(...e),e)}var pw=class extends g.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(xS(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=xS(e)&&e.offsetWidth||0,r=xS(e)&&e.offsetHeight||0,i=getComputedStyle(t),a=this.props.sizeRef.current;a.height=parseFloat(i.height),a.width=parseFloat(i.width),a.top=t.offsetTop,a.left=t.offsetLeft,a.right=n-a.width-a.left,a.bottom=r-a.height-a.top,a.direction=i.direction}return null}componentDidUpdate(){}render(){return this.props.children}};function mw({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,g.useId)(),s=(0,g.useRef)(null),c=(0,g.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,g.useContext)(lw),u=fw(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,g.useInsertionEffect)(()=>{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(`
15
+ `).replace(Qf,``)}function ep(e,t){return t=$f(t),$f(e)===t}function tp(e,t,n,r,a,o){switch(n){case`children`:if(typeof r==`string`)t===`body`||t===`textarea`&&r===``||Qt(e,r);else if(typeof r==`number`||typeof r==`bigint`)t!==`body`&&Qt(e,``+r);else return;break;case`className`:Lt(e,`class`,r);break;case`tabIndex`:Lt(e,`tabindex`,r);break;case`dir`:case`role`:case`viewBox`:case`width`:case`height`:Lt(e,n,r);break;case`style`:tn(e,r,o);return;case`data`:if(t!==`object`){Lt(e,`data`,r);break}case`src`:case`href`:if(r===``&&(t!==`a`||n!==`href`)){e.removeAttribute(n);break}if(r==null||typeof r==`function`||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=on(r),e.setAttribute(n,r);break;case`action`:case`formAction`:if(typeof r==`function`){e.setAttribute(n,`javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')`);break}if(typeof o==`function`&&(n===`formAction`?(t!==`input`&&tp(e,t,`name`,a.name,a,null),tp(e,t,`formEncType`,a.formEncType,a,null),tp(e,t,`formMethod`,a.formMethod,a,null),tp(e,t,`formTarget`,a.formTarget,a,null)):(tp(e,t,`encType`,a.encType,a,null),tp(e,t,`method`,a.method,a,null),tp(e,t,`target`,a.target,a,null))),r==null||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=on(r),e.setAttribute(n,r);break;case`onClick`:r!=null&&(e.onclick=sn);return;case`onScroll`:r!=null&&Vf(`scroll`,e);return;case`onScrollEnd`:r!=null&&Vf(`scrollend`,e);return;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));o?.__html!==n&&(e.innerHTML=n)}}break;case`multiple`:e.multiple=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`muted`:e.muted=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`defaultValue`:case`defaultChecked`:case`innerHTML`:case`ref`:break;case`autoFocus`:break;case`xlinkHref`:if(r==null||typeof r==`function`||typeof r==`boolean`||typeof r==`symbol`){e.removeAttribute(`xlink:href`);break}n=on(r),e.setAttributeNS(`http://www.w3.org/1999/xlink`,`xlink:href`,n);break;case`contentEditable`:case`spellCheck`:case`draggable`:case`value`:case`autoReverse`:case`externalResourcesRequired`:case`focusable`:case`preserveAlpha`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`inert`:case`allowFullScreen`:case`async`:case`autoPlay`:case`controls`:case`credentialless`:case`default`:case`defer`:case`disabled`:case`disablePictureInPicture`:case`disableRemotePlayback`:case`formNoValidate`:case`hidden`:case`loop`:case`noModule`:case`noValidate`:case`open`:case`playsInline`:case`readOnly`:case`required`:case`reversed`:case`scoped`:case`seamless`:case`itemScope`:r&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,``):e.removeAttribute(n);break;case`capture`:case`download`:!0===r?e.setAttribute(n,``):!1!==r&&r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`cols`:case`rows`:case`size`:case`span`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case`rowSpan`:case`start`:r==null||typeof r==`function`||typeof r==`symbol`||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case`popover`:Vf(`beforetoggle`,e),Vf(`toggle`,e),It(e,`popover`,r);break;case`xlinkActuate`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:actuate`,r);break;case`xlinkArcrole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:arcrole`,r);break;case`xlinkRole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:role`,r);break;case`xlinkShow`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:show`,r);break;case`xlinkTitle`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:title`,r);break;case`xlinkType`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:type`,r);break;case`xmlBase`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:base`,r);break;case`xmlLang`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:lang`,r);break;case`xmlSpace`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:space`,r);break;case`is`:It(e,`is`,r);break;case`innerText`:case`textContent`:return;default:if(!(2<n.length)||n[0]!==`o`&&n[0]!==`O`||n[1]!==`n`&&n[1]!==`N`)n=rn.get(n)||n,It(e,n,r);else return}Pt=!0}function np(e,t,n,r,a,o){switch(n){case`style`:tn(e,r,o);return;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));o?.__html!==n&&(e.innerHTML=n)}}break;case`children`:if(typeof r==`string`)Qt(e,r);else if(typeof r==`number`||typeof r==`bigint`)Qt(e,``+r);else return;break;case`onScroll`:r!=null&&Vf(`scroll`,e);return;case`onScrollEnd`:r!=null&&Vf(`scrollend`,e);return;case`onClick`:r!=null&&(e.onclick=sn);return;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`innerHTML`:case`ref`:return;case`innerText`:case`textContent`:return;default:if(!Dt.hasOwnProperty(n))a:{if(n[0]===`o`&&n[1]===`n`&&(a=n.endsWith(`Capture`),o=n.slice(2,a?n.length-7:void 0),t=e[dt]||null,t=t==null?null:t[n],typeof t==`function`&&e.removeEventListener(o,t,a),typeof r==`function`)){typeof t!=`function`&&t!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(o,r,a);break a}Pt=!0,n in e?e[n]=r:!0===r?e.setAttribute(n,``):It(e,n,r)}return}Pt=!0}function rp(e,t,n){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`img`:Vf(`error`,e),Vf(`load`,e);var r=!1,a=!1,o;for(o in n)if(n.hasOwnProperty(o)){var s=n[o];if(s!=null)switch(o){case`src`:r=!0;break;case`srcSet`:a=!0;break;case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:tp(e,t,o,s,n,null)}}a&&tp(e,t,`srcSet`,n.srcSet,n,null),r&&tp(e,t,`src`,n.src,n,null);return;case`input`:Vf(`invalid`,e);var c=o=s=a=null,l=null,u=null;for(r in n)if(n.hasOwnProperty(r)){var d=n[r];if(d!=null)switch(r){case`name`:a=d;break;case`type`:s=d;break;case`checked`:l=d;break;case`defaultChecked`:u=d;break;case`value`:o=d;break;case`defaultValue`:c=d;break;case`children`:case`dangerouslySetInnerHTML`:if(d!=null)throw Error(i(137,t));break;default:tp(e,t,r,d,n,null)}}qt(e,o,c,l,u,s,a,!1);return;case`select`:for(a in Vf(`invalid`,e),r=s=o=null,n)if(n.hasOwnProperty(a)&&(c=n[a],c!=null))switch(a){case`value`:o=c;break;case`defaultValue`:s=c;break;case`multiple`:r=c;default:tp(e,t,a,c,n,null)}t=o,n=s,e.multiple=!!r,t==null?n!=null&&Yt(e,!!r,n,!0):Yt(e,!!r,t,!1);return;case`textarea`:for(s in Vf(`invalid`,e),o=a=r=null,n)if(n.hasOwnProperty(s)&&(c=n[s],c!=null))switch(s){case`value`:r=c;break;case`defaultValue`:a=c;break;case`children`:o=c;break;case`dangerouslySetInnerHTML`:if(c!=null)throw Error(i(91));break;default:tp(e,t,s,c,n,null)}Zt(e,r,a,o);return;case`option`:for(l in n)if(n.hasOwnProperty(l)&&(r=n[l],r!=null))switch(l){case`selected`:e.selected=r&&typeof r!=`function`&&typeof r!=`symbol`;break;default:tp(e,t,l,r,n,null)}return;case`dialog`:Vf(`beforetoggle`,e),Vf(`toggle`,e),Vf(`cancel`,e),Vf(`close`,e);break;case`iframe`:case`object`:Vf(`load`,e);break;case`video`:case`audio`:for(r=0;r<Rf.length;r++)Vf(Rf[r],e);break;case`image`:Vf(`error`,e),Vf(`load`,e);break;case`details`:Vf(`toggle`,e);break;case`embed`:case`source`:case`link`:Vf(`error`,e),Vf(`load`,e);case`area`:case`base`:case`br`:case`col`:case`hr`:case`keygen`:case`meta`:case`param`:case`track`:case`wbr`:case`menuitem`:for(u in n)if(n.hasOwnProperty(u)&&(r=n[u],r!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:tp(e,t,u,r,n,null)}return;default:if(nn(t)){for(d in n)n.hasOwnProperty(d)&&(r=n[d],r!==void 0&&np(e,t,d,r,n,void 0));return}}for(c in n)n.hasOwnProperty(c)&&(r=n[c],r!=null&&tp(e,t,c,r,n,null))}var ip={};function ap(e,t,n,r){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`input`:var a=null,o=null,s=null,c=null,l=null,u=null,d=null;for(m in n){var f=n[m];if(n.hasOwnProperty(m)&&f!=null)switch(m){case`checked`:break;case`value`:break;case`defaultValue`:l=f;default:r.hasOwnProperty(m)||tp(e,t,m,null,r,f)}}for(var p in r){var m=r[p];if(f=n[p],r.hasOwnProperty(p)&&(m!=null||f!=null))switch(p){case`type`:m!==f&&(Pt=!0),o=m;break;case`name`:m!==f&&(Pt=!0),a=m;break;case`checked`:m!==f&&(Pt=!0),u=m;break;case`defaultChecked`:m!==f&&(Pt=!0),d=m;break;case`value`:m!==f&&(Pt=!0),s=m;break;case`defaultValue`:m!==f&&(Pt=!0),c=m;break;case`children`:case`dangerouslySetInnerHTML`:if(m!=null)throw Error(i(137,t));break;default:m!==f&&tp(e,t,p,m,r,f)}}Kt(e,s,c,l,u,d,o,a);return;case`select`:for(o in m=s=c=p=null,n)if(l=n[o],n.hasOwnProperty(o)&&l!=null)switch(o){case`value`:break;case`multiple`:m=l;default:r.hasOwnProperty(o)||tp(e,t,o,null,r,l)}for(a in r)if(o=r[a],l=n[a],r.hasOwnProperty(a)&&(o!=null||l!=null))switch(a){case`value`:o!==l&&(Pt=!0),p=o;break;case`defaultValue`:o!==l&&(Pt=!0),c=o;break;case`multiple`:o!==l&&(Pt=!0),s=o;default:o!==l&&tp(e,t,a,o,r,l)}t=c,n=s,r=m,p==null?!!r!=!!n&&(t==null?Yt(e,!!n,n?[]:``,!1):Yt(e,!!n,t,!0)):Yt(e,!!n,p,!1);return;case`textarea`:for(c in m=p=null,n)if(a=n[c],n.hasOwnProperty(c)&&a!=null&&!r.hasOwnProperty(c))switch(c){case`value`:break;case`children`:break;default:tp(e,t,c,null,r,a)}for(s in r)if(a=r[s],o=n[s],r.hasOwnProperty(s)&&(a!=null||o!=null))switch(s){case`value`:a!==o&&(Pt=!0),p=a;break;case`defaultValue`:a!==o&&(Pt=!0),m=a;break;case`children`:break;case`dangerouslySetInnerHTML`:if(a!=null)throw Error(i(91));break;default:a!==o&&tp(e,t,s,a,r,o)}Xt(e,p,m);return;case`option`:for(var h in n)if(p=n[h],n.hasOwnProperty(h)&&p!=null&&!r.hasOwnProperty(h))switch(h){case`selected`:e.selected=!1;break;default:tp(e,t,h,null,r,p)}for(l in r)if(p=r[l],m=n[l],r.hasOwnProperty(l)&&p!==m&&(p!=null||m!=null))switch(l){case`selected`:p!==m&&(Pt=!0),e.selected=p&&typeof p!=`function`&&typeof p!=`symbol`;break;default:tp(e,t,l,p,r,m)}return;case`img`:case`link`:case`area`:case`base`:case`br`:case`col`:case`embed`:case`hr`:case`keygen`:case`meta`:case`param`:case`source`:case`track`:case`wbr`:case`menuitem`:for(var g in n)p=n[g],n.hasOwnProperty(g)&&p!=null&&!r.hasOwnProperty(g)&&tp(e,t,g,null,r,p);for(u in r)if(p=r[u],m=n[u],r.hasOwnProperty(u)&&p!==m&&(p!=null||m!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:if(p!=null)throw Error(i(137,t));break;default:tp(e,t,u,p,r,m)}return;default:if(nn(t)){for(var _ in n)p=n[_],n.hasOwnProperty(_)&&p!==void 0&&!r.hasOwnProperty(_)&&np(e,t,_,void 0,r,p);for(d in r)p=r[d],m=n[d],!r.hasOwnProperty(d)||p===m||p===void 0&&m===void 0||np(e,t,d,p,r,m);return}}for(var v in n)p=n[v],n.hasOwnProperty(v)&&p!=null&&!r.hasOwnProperty(v)&&tp(e,t,v,null,r,p);for(f in r)p=r[f],m=n[f],!r.hasOwnProperty(f)||p===m||p==null&&m==null||tp(e,t,f,p,r,m)}function op(e){switch(e){case`css`:case`script`:case`font`:case`img`:case`image`:case`input`:case`link`:return!0;default:return!1}}function sp(){if(typeof performance.getEntriesByType==`function`){for(var e=0,t=0,n=performance.getEntriesByType(`resource`),r=0;r<n.length;r++){var i=n[r],a=i.transferSize,o=i.initiatorType,s=i.duration;if(a&&s&&op(o)){for(o=0,s=i.responseEnd,r+=1;r<n.length;r++){var c=n[r],l=c.startTime;if(l>s)break;var u=c.transferSize,d=c.initiatorType;u&&op(d)&&(c=c.responseEnd,o+=u*(c<s?1:(s-l)/(c-l)))}if(--r,t+=8*(a+o)/(i.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e==`number`)?e:5}var cp=null,lp=null;function up(e){return e.nodeType===9?e:e.ownerDocument}function $(e){switch(e){case`http://www.w3.org/2000/svg`:return 1;case`http://www.w3.org/1998/Math/MathML`:return 2;default:return 0}}function dp(e,t){if(e===0)switch(t){case`svg`:return 1;case`math`:return 2;default:return 0}return e===1&&t===`foreignObject`?0:e}function fp(e,t,n,r){return n=up(n).createElement(e),n[ut]=r,n[dt]=t,rp(n,e,t),wt(n),n}function pp(e,t){return e===`textarea`||e===`noscript`||typeof t.children==`string`||typeof t.children==`number`||typeof t.children==`bigint`||typeof t.dangerouslySetInnerHTML==`object`&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var mp=null;function hp(){var e=window.event;return e&&e.type===`popstate`?e!==mp&&(mp=e,!0):(mp=null,!1)}var gp=typeof setTimeout==`function`?setTimeout:void 0,_p=typeof clearTimeout==`function`?clearTimeout:void 0,vp=typeof Promise==`function`?Promise:void 0,yp=typeof requestAnimationFrame==`function`?requestAnimationFrame:gp,bp=typeof queueMicrotask==`function`?queueMicrotask:vp===void 0?gp:function(e){return vp.resolve(null).then(e).catch(xp)};function xp(e){setTimeout(function(){throw e})}function Sp(e){return e===`head`}function Cp(e,t){var n=t,r=0;do{var i=n.nextSibling;if(e.removeChild(n),i&&i.nodeType===8){if(n=i.data,n===`/$`||n===`/&`){if(r===0){e.removeChild(i),Hh(t);return}r--}else if(n===`$`||n===`$?`||n===`$~`||n===`$!`||n===`&`)r++;else if(n===`html`)_m(e.ownerDocument.documentElement);else if(n===`head`){n=e.ownerDocument.head,_m(n);for(var a=n.firstChild;a;){var o=a.nextSibling,s=a.nodeName;a[_t]||s===`SCRIPT`||s===`STYLE`||s===`LINK`&&a.rel.toLowerCase()===`stylesheet`||n.removeChild(a),a=o}}else n===`body`&&_m(e.ownerDocument.body)}n=i}while(n);Hh(t)}function wp(e,t){var n=e;e=0;do{var r=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display=`none`):(n.style.display=n._stashedDisplay||``,n.getAttribute(`style`)===``&&n.removeAttribute(`style`)):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=``):n.nodeValue=n._stashedText||``),r&&r.nodeType===8){if(n=r.data,n===`/$`){if(e===0)break;e--}else n!==`$`&&n!==`$?`&&n!==`$~`&&n!==`$!`||e++}n=r}while(n)}function Tp(e,t,n){if(t=CSS.escape(t)===t?t:`r-`+btoa(t).replace(/=/g,``),e.style.viewTransitionName=t,n!=null&&(e.style.viewTransitionClass=n),n=getComputedStyle(e),n.display===`inline`){if(t=e.getClientRects(),t.length===1)var r=1;else for(var i=r=0;i<t.length;i++){var a=t[i];0<a.width&&0<a.height&&r++}r===1&&(e=e.style,e.display=t.length===1?`inline-block`:`block`,e.marginTop=`-`+n.paddingTop,e.marginBottom=`-`+n.paddingBottom)}}function Ep(e,t){e=e.style,t=t.style;var n=t==null?null:t.hasOwnProperty(`viewTransitionName`)?t.viewTransitionName:t.hasOwnProperty(`view-transition-name`)?t[`view-transition-name`]:null;e.viewTransitionName=n==null||typeof n==`boolean`?``:(``+n).trim(),n=t==null?null:t.hasOwnProperty(`viewTransitionClass`)?t.viewTransitionClass:t.hasOwnProperty(`view-transition-class`)?t[`view-transition-class`]:null,e.viewTransitionClass=n==null||typeof n==`boolean`?``:(``+n).trim(),e.display===`inline-block`&&(t==null?e.display=e.margin=``:(n=t.display,e.display=n==null||typeof n==`boolean`?``:n,n=t.margin,n==null?(n=t.hasOwnProperty(`marginTop`)?t.marginTop:t[`margin-top`],e.marginTop=n==null||typeof n==`boolean`?``:n,t=t.hasOwnProperty(`marginBottom`)?t.marginBottom:t[`margin-bottom`],e.marginBottom=t==null||typeof t==`boolean`?``:t):e.margin=n))}function Dp(e,t,n){return n=n.ownerDocument.defaultView,{rect:e,abs:t.position===`absolute`||t.position===`fixed`,clip:t.clipPath!==`none`||t.overflow!==`visible`||t.filter!==`none`||t.mask!==`none`||t.mask!==`none`||t.borderRadius!==`0px`,view:0<=e.bottom&&0<=e.right&&e.top<=n.innerHeight&&e.left<=n.innerWidth}}function Op(e){return Dp(e.getBoundingClientRect(),getComputedStyle(e),e)}function kp(e){var t=e.getBoundingClientRect();t=new DOMRect(t.x+2e4,t.y+2e4,t.width,t.height);var n=getComputedStyle(e);return Dp(t,n,e)}function Ap(e){return e.documentElement.clientHeight}function jp(e){this.addEventListener(`load`,e),this.addEventListener(`error`,e)}function Mp(e,t,n,r,i,a,o,s,c){var l=t.nodeType===9?t:t.ownerDocument;try{var u=l.startViewTransition({update:function(){var t=l.defaultView,n=t.navigation&&t.navigation.transition,o=l.fonts.status;r();var s=[];if(o===`loaded`&&(Ap(l),l.fonts.status===`loading`&&s.push(l.fonts.ready)),o=s.length,e!==null)for(var c=e.suspenseyImages,u=0,d=0;d<c.length;d++){var f=c[d];if(!f.complete){var p=f.getBoundingClientRect();if(0<p.bottom&&0<p.right&&p.top<t.innerHeight&&p.left<t.innerWidth){if(u+=Xm(f),u>$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0<s.length)return t=Promise.race([Promise.all(s),new Promise(function(e){return setTimeout(e,500)})]).then(i,i),(n?Promise.allSettled([n.finished,t]):t).then(a,a);if(i(),n)return n.finished.then(a,a);a()},types:n});l.__reactViewTransition=u;var d=[];return u.ready.then(function(){for(var e=l.documentElement.getAnimations({subtree:!0}),t=0;t<e.length;t++){var n=e[t],r=n.effect,i=r.pseudoElement;if(i!=null&&i.startsWith(`::view-transition`)){d.push(n),n=r.getKeyframes();for(var a=i=void 0,s=!0,c=0;c<n.length;c++){var u=n[c],f=u.width;if(i===void 0)i=f;else if(i!==f){s=!1;break}if(f=u.height,a===void 0)a=f;else if(a!==f){s=!1;break}delete u.width,delete u.height,u.transform===`none`&&delete u.transform}s&&i!==void 0&&a!==void 0&&(r.setKeyframes(n),s=getComputedStyle(r.target,r.pseudoElement),s.width!==i||s.height!==a)&&(s=n[0],s.width=i,s.height=a,s=n[n.length-1],s.width=i,s.height=a,r.setKeyframes(n))}}o()},function(e){l.__reactViewTransition===u&&(l.__reactViewTransition=null);try{if(typeof e==`object`&&e)switch(e.name){case`InvalidStateError`:(e.message===`View transition was skipped because document visibility state is hidden.`||e.message===`Skipping view transition because document visibility state has become hidden.`||e.message===`Skipping view transition because viewport size changed.`||e.message===`Transition was aborted because of invalid state`)&&(e=null)}e!==null&&c(e)}finally{r(),i(),o()}}),u.finished.finally(function(){for(var e=0;e<d.length;e++)d[e].cancel();l.__reactViewTransition===u&&(l.__reactViewTransition=null),s()}),u}catch{return r(),i(),o(),null}}function Np(e,t){this._scope=document.documentElement,this._selector=`::view-transition-`+e+`(`+t+`)`}Np.prototype.animate=function(e,t){return t=typeof t==`number`?{duration:t}:T({},t),t.pseudoElement=this._selector,this._scope.animate(e,t)},Np.prototype.getAnimations=function(){for(var e=this._scope,t=this._selector,n=e.getAnimations({subtree:!0}),r=[],i=0;i<n.length;i++){var a=n[i].effect;a!==null&&a.target===e&&a.pseudoElement===t&&r.push(n[i])}return r},Np.prototype.getComputedStyle=function(){return getComputedStyle(this._scope,this._selector)};function Pp(e){return{name:e,group:new Np(`group`,e),imagePair:new Np(`image-pair`,e),old:new Np(`old`,e),new:new Np(`new`,e)}}function Fp(e){this._fragmentFiber=e,this._observers=this._eventListeners=null}Fp.prototype.addEventListener=function(e,t,n){var r=null,i=null;if(!(n!=null&&typeof n!=`boolean`&&(r=n.signal||null,r!==null&&r.aborted))){this._eventListeners===null&&(this._eventListeners=[]);var a=this._eventListeners;if(Bp(a,e,t,n)===-1){var o=this,s=t;n!=null&&typeof n!=`boolean`&&!0===n.once&&(s=function(r){o.removeEventListener(e,t,n),typeof t==`function`?t.call(this,r):t.handleEvent(r)}),r!==null&&(i=o.removeEventListener.bind(o,e,t,n),r.addEventListener(`abort`,i,{once:!0}),i=r.removeEventListener.bind(r,`abort`,i)),r=Rp(n),a.push({type:e,listener:t,optionsOrUseCapture:n,attachedListener:s,cleanup:i}),p(this._fragmentFiber.child,!1,Ip,e,s,r)}this._eventListeners=a}};function Ip(e,t,n,r){return v(e).addEventListener(t,n,r),!1}Fp.prototype.removeEventListener=function(e,t,n){var r=this._eventListeners;if(r!==null&&(t=Bp(r,e,t,n),t!==-1)){var i=r[t];n=i.attachedListener;var a=i.cleanup;i=Rp(i.optionsOrUseCapture),p(this._fragmentFiber.child,!1,Lp,e,n,i),r.splice(t,1),a!==null&&a()}};function Lp(e,t,n,r){return v(e).removeEventListener(t,n,r),!1}function Rp(e){return e!=null&&typeof e!=`boolean`&&(!0===e.once||e.signal instanceof AbortSignal)?{capture:e.capture,passive:e.passive}:e}function zp(e){return e==null?`c=0`:typeof e==`boolean`?`c=`+(e?`1`:`0`):`c=`+(e.capture?`1`:`0`)}function Bp(e,t,n,r){if(e.length===0)return-1;r=zp(r);for(var i=0;i<e.length;i++){var a=e[i];if(a.type===t&&a.listener===n&&zp(a.optionsOrUseCapture)===r)return i}return-1}Fp.prototype.dispatchEvent=function(e){var t=m(this._fragmentFiber);if(t===null)return!0;t=v(t);var n=this._eventListeners;if(n!==null&&0<n.length||!e.bubbles){var r=t.nodeType===9?t.createComment(``):document.createTextNode(``);if(n)for(var i=0;i<n.length;i++){var a=n[i];r.addEventListener(a.type,a.attachedListener,Rp(a.optionsOrUseCapture))}if(t.appendChild(r),e=r.dispatchEvent(e),n)for(i=0;i<n.length;i++)a=n[i],r.removeEventListener(a.type,a.attachedListener,Rp(a.optionsOrUseCapture));return t.removeChild(r),e}return t.dispatchEvent(e)},Fp.prototype.focus=function(e){p(this._fragmentFiber.child,!0,Vp,e,void 0,void 0)};function Vp(e,t){return e.tag!==6&&(e=v(e),pm(e,t))}Fp.prototype.focusLast=function(e){var t=[];p(this._fragmentFiber.child,!0,Hp,t,void 0,void 0);for(var n=t.length-1;0<=n&&!Vp(t[n],e);n--);};function Hp(e,t){return t.push(e),!1}Fp.prototype.blur=function(){var e=m(this._fragmentFiber);e!==null&&(e=v(e),e=up(e).activeElement,e!==null&&p(this._fragmentFiber.child,!1,Up,e,void 0,void 0))};function Up(e,t){return e.tag!==6&&(e=v(e),e===t||e.contains(t)?(t.blur(),!0):!1)}Fp.prototype.observeUsing=function(e){this._observers===null&&(this._observers=new Set),this._observers.add(e),p(this._fragmentFiber.child,!1,Wp,e,void 0,void 0)};function Wp(e,t){return e.tag!==6&&(e=v(e),t.observe(e),!1)}Fp.prototype.unobserveUsing=function(e){var t=this._observers;if(t!==null&&t.has(e)){t.delete(e),p(this._fragmentFiber.child,!1,Gp,e,void 0,void 0);for(var n=t=0;n<Kp.length;n++){var r=Kp[n];r.fragmentInstance===this&&r.observer===e?e.unobserve(r.instance):Kp[t++]=r}Kp.length=t}};function Gp(e,t){return e.tag!==6&&(e=v(e),t.unobserve(e),!1)}var Kp=[],qp=!1;function Jp(e,t,n){Kp.push({fragmentInstance:e,observer:t,instance:n}),qp||(qp=!0,mm(function(){qp=!1;var e=Kp;Kp=[];for(var t=0;t<e.length;t++){var n=e[t];n.observer.unobserve(n.instance)}}))}Fp.prototype.getClientRects=function(){var e=[];return p(this._fragmentFiber.child,!1,Yp,e,void 0,void 0),e};function Yp(e,t){if(e.tag===6){e=e.stateNode;var n=e.ownerDocument.createRange();n.selectNodeContents(e),t.push.apply(t,n.getClientRects())}else e=v(e),t.push.apply(t,e.getClientRects());return!1}Fp.prototype.getRootNode=function(e){var t=m(this._fragmentFiber);return t===null?this:v(t).getRootNode(e)},Fp.prototype.compareDocumentPosition=function(e){var t=m(this._fragmentFiber);if(t===null)return Node.DOCUMENT_POSITION_DISCONNECTED;var n=[];p(this._fragmentFiber.child,!1,Hp,n,void 0,void 0);var r=v(t);if(n.length===0){if(n=r,h(this._fragmentFiber)){a:{for(t=this._fragmentFiber.return;t!==null;){if(t.tag===4){t=t.stateNode.containerInfo;break a}if(t.tag===3||t.tag===5||t.tag===27)break;t=t.return}t=null}t!=null&&(n=t)}t=this._fragmentFiber;var i=r=n.compareDocumentPosition(e);return n===e?i=Node.DOCUMENT_POSITION_CONTAINS:r&Node.DOCUMENT_POSITION_CONTAINED_BY&&(n=g(t)[1],n===null?i=Node.DOCUMENT_POSITION_PRECEDING:(e=v(n).compareDocumentPosition(e),i=e===0||e&Node.DOCUMENT_POSITION_FOLLOWING?Node.DOCUMENT_POSITION_FOLLOWING:Node.DOCUMENT_POSITION_PRECEDING)),i|=Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC}t=v(n[0]),i=v(n[n.length-1]);var a=h(this._fragmentFiber)?t.parentElement:r;if(a==null)return Node.DOCUMENT_POSITION_DISCONNECTED;r=a.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY,a=a.compareDocumentPosition(i)&Node.DOCUMENT_POSITION_CONTAINED_BY;var o=t.compareDocumentPosition(e),s=i.compareDocumentPosition(e),c=o&Node.DOCUMENT_POSITION_CONTAINED_BY||s&Node.DOCUMENT_POSITION_CONTAINED_BY;return s=r&&a&&o&Node.DOCUMENT_POSITION_FOLLOWING&&s&Node.DOCUMENT_POSITION_PRECEDING,t=r&&t===e||a&&i===e||c||s?Node.DOCUMENT_POSITION_CONTAINED_BY:!r&&t===e||!a&&i===e?Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:o,t&Node.DOCUMENT_POSITION_DISCONNECTED||t&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC||Xp(t,this._fragmentFiber,n[0],n[n.length-1],e)?t:Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC};function Xp(e,t,n,r,i){var a=bt(i);if(e&Node.DOCUMENT_POSITION_CONTAINED_BY){if(n=!!a)a:{for(;a!==null;){if(a.tag===7&&(a===t||a.alternate===t)){n=!0;break a}a=a.return}n=!1}return n}if(e&Node.DOCUMENT_POSITION_CONTAINS){if(a===null)return a=i.ownerDocument,i===a||i===a.documentElement||i===a.body;a:{for(a=t,t=m(t);a!==null;){if(!(a.tag!==5&&a.tag!==3&&a.tag!==27||a!==t&&a.alternate!==t)){a=!0;break a}a=a.return}a=!1}return a}return e&Node.DOCUMENT_POSITION_PRECEDING?((t=!!a)&&!(t=a===n)&&(t=w(n,a,C),t===null?t=!1:(p(t,!0,x,a,n),a=y,y=null,t=a!==null)),t):e&Node.DOCUMENT_POSITION_FOLLOWING?((t=!!a)&&!(t=a===r)&&(t=w(r,a,C),t===null?t=!1:(p(t,!0,S,a,r),a=y,b=y=null,t=a!==null)),t):!1}function Zp(e,t){var n=e.ownerDocument.createRange();n.selectNodeContents(e),e=n.getBoundingClientRect(),window.scrollTo(window.scrollX+e.left,t?window.scrollY+e.top:window.scrollY+e.bottom-window.innerHeight)}Fp.prototype.scrollIntoView=function(e){if(typeof e==`object`)throw Error(i(566));var t=[];p(this._fragmentFiber.child,!1,Hp,t,void 0,void 0);var n=!1!==e;if(t.length===0){var r=g(this._fragmentFiber);if(r=n?r[1]||r[0]||m(this._fragmentFiber):r[0]||r[1],r===null)return;if(r.tag===6){e=v(r),Zp(e,n);return}if(r=v(r),r.nodeType!==9){if(r.nodeType===11){n=`host`in r?r.host:null,n!==null&&n.scrollIntoView(e);return}r.scrollIntoView(e)}}for(r=n?t.length-1:0;r!==(n?-1:t.length);){var a=t[r];a.tag===6?(a=v(a),Zp(a,n)):v(a).scrollIntoView(e),r+=n?-1:1}};function Qp(e,t){return e=v(e),$p(e,t),!1}function $p(e,t){e.reactFragments??=new Set,e.reactFragments.add(t)}function em(e,t){var n=t._eventListeners;if(n!==null)for(var r=0;r<n.length;r++){var i=n[r];e.addEventListener(i.type,i.attachedListener,Rp(i.optionsOrUseCapture))}e.nodeType!==3&&(n=t._observers,n!==null&&n.forEach(function(n){for(var r=0,i=0;i<Kp.length;i++){var a=Kp[i];(a.fragmentInstance!==t||a.observer!==n||a.instance!==e)&&(Kp[r++]=a)}Kp.length=r,n.observe(e)}),$p(e,t))}function tm(e,t){var n=t._eventListeners;if(n!==null)for(var r=0;r<n.length;r++){var i=n[r];e.removeEventListener(i.type,i.attachedListener,Rp(i.optionsOrUseCapture))}e.nodeType!==3&&(n=t._observers,n!==null&&n.forEach(function(n){typeof n.rootMargin==`string`?Jp(t,n,e):n.unobserve(e)}),e.reactFragments!=null&&e.reactFragments.delete(t))}function nm(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case`HTML`:case`HEAD`:case`BODY`:nm(n),yt(n);continue;case`SCRIPT`:case`STYLE`:continue;case`LINK`:if(n.rel.toLowerCase()===`stylesheet`)continue}e.removeChild(n)}}function rm(e,t,n,r){for(;e.nodeType===1;){var i=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&(e.nodeName!==`INPUT`||e.type!==`hidden`))break}else if(!r){if(t===`input`&&e.type===`hidden`){var a=i.name==null?null:``+i.name;if(i.type===`hidden`&&e.getAttribute(`name`)===a)return e}else return e}else if(!e[_t])switch(t){case`meta`:if(!e.hasAttribute(`itemprop`))break;return e;case`link`:if(a=e.getAttribute(`rel`),a===`stylesheet`&&e.hasAttribute(`data-precedence`)||a!==i.rel||e.getAttribute(`href`)!==(i.href==null||i.href===``?null:i.href)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute(`title`)!==(i.title==null?null:i.title))break;return e;case`style`:if(e.hasAttribute(`data-precedence`))break;return e;case`script`:if(a=e.getAttribute(`src`),(a!==(i.src==null?null:i.src)||e.getAttribute(`type`)!==(i.type==null?null:i.type)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin))&&a&&e.hasAttribute(`async`)&&!e.hasAttribute(`itemprop`))break;return e;default:return e}if(e=lm(e.nextSibling),e===null)break}return null}function im(e,t,n){if(t===``)return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!n||(e=lm(e.nextSibling),e===null))return null;return e}function am(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!t||(e=lm(e.nextSibling),e===null))return null;return e}function om(e){return e.data===`$?`||e.data===`$~`}function sm(e){return e.data===`$!`||e.data===`$?`&&e.ownerDocument.readyState!==`loading`}function cm(e,t){var n=e.ownerDocument;if(e.data===`$~`)e._reactRetry=t;else if(e.data!==`$?`||n.readyState!==`loading`)t();else{var r=function(){t(),n.removeEventListener(`DOMContentLoaded`,r)};n.addEventListener(`DOMContentLoaded`,r),e._reactRetry=r}}function lm(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t===`$`||t===`$!`||t===`$?`||t===`$~`||t===`&`||t===`F!`||t===`F`)break;if(t===`/$`||t===`/&`)return null}}return e}var um=null;function dm(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`/$`||n===`/&`){if(t===0)return lm(e.nextSibling);t--}else n!==`$`&&n!==`$!`&&n!==`$?`&&n!==`$~`&&n!==`&`||t++}e=e.nextSibling}return null}function fm(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`$`||n===`$!`||n===`$?`||n===`$~`||n===`&`){if(t===0)return e;t--}else n!==`/$`&&n!==`/&`||t++}e=e.previousSibling}return null}function pm(e,t){function n(){r=!0}if(e.ownerDocument.activeElement===e)return!0;var r=!1;try{e.ownerDocument.addEventListener(`focus`,n,!0),(e.focus||HTMLElement.prototype.focus).call(e,t)}finally{e.ownerDocument.removeEventListener(`focus`,n,!0)}return r}function mm(e){yp(function(){yp(function(t){return e(t)})})}function hm(e,t,n){switch(t=up(n),e){case`html`:if(e=t.documentElement,!e)throw Error(i(452));return e;case`head`:if(e=t.head,!e)throw Error(i(453));return e;case`body`:if(e=t.body,!e)throw Error(i(454));return e;default:throw Error(i(451))}}function gm(e,t,n){for(var r in n){var i=n[r];n.hasOwnProperty(r)&&i!=null&&tp(e,t,r,null,ip,i)}n.dangerouslySetInnerHTML!=null&&(e.textContent=``),e.onclick===sn&&(e.onclick=null),yt(e)}function _m(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);yt(e)}var vm=new Map,ym=new Set;function bm(e){if(typeof e.getRootNode==`function`){var t=e.getRootNode();if(t.nodeType===9||t.nodeType===11)return t}return e.nodeType===9?e:e.ownerDocument}var xm=K.d;K.d={f:Sm,r:Cm,D:Em,C:Dm,L:Om,m:km,X:jm,S:Am,M:Mm};function Sm(){var e=xm.f(),t=Ld();return e||t}function Cm(e){var t=xt(e);t!==null&&t.tag===5&&t.type===`form`?Js(t):xm.r(e)}var wm=typeof document>`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=Gt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),rp(t,`link`,e),wt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+Gt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Gt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Gt(n.imageSizes)+`"]`)):i+=`[href="`+Gt(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);rp(o,`link`,e),t===`style`&&(o[vt]=!0,o.onload=o.onerror=function(){Tt(o)}),wt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Gt(r)+`"][href="`+Gt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),rp(r,`link`,e),wt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Ct(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);wt(c),rp(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Ct(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),wt(a),rp(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Ct(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),wt(a),rp(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var a=(a=J.current)?bm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Ct(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Ct(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Ct(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pm(e){return`href="`+Gt(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[vt]){r.loading=1;return}}else t=e.createElement(`link`),t[vt]=!0,t.onload=t.onerror=Tt.bind(null,t),rp(t,`link`,n),wt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+Gt(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Gt(n.href)+`"]`);if(r)return t.instance=r,wt(r),r;var a=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),wt(r),rp(r,`style`,a),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pm(n.href);var o=e.querySelector(Fm(a));if(o)return t.state.loading|=4,t.instance=o,wt(o),o;r=Im(n),(a=vm.get(a))&&Hm(r,a),o=(e.ownerDocument||e).createElement(`link`),wt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),rp(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(a=e.querySelector(zm(o)))?(t.instance=a,wt(a),a):(r=n,(a=vm.get(o))&&(r=T({},n),Um(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),wt(a),rp(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o<r.length;o++){var s=r[o];if(s.dataset.precedence===t)a=s;else if(a!==i)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function Hm(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.title??=t.title}function Um(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.integrity??=t.integrity}var Wm=null;function Gm(e,t,n){if(Wm===null){var r=new Map,i=Wm=new Map;i.set(n,r)}else i=Wm,r=i.get(n),r||(r=new Map,i.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),i=0;i<n.length;i++){var a=n[i];if(!(a[_t]||a[ut]||e===`link`&&a.getAttribute(`rel`)===`stylesheet`)&&a.namespaceURI!==`http://www.w3.org/2000/svg`){var o=a.getAttribute(t)||``;o=e+o;var s=r.get(o);s?s.push(a):r.set(o,[a])}}return r}function Km(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t===`title`?e.querySelector(`head > title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,wt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),wt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),rp(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var r=setTimeout(function(){if(e.stylesheets&&ah(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4+t);0<e.imgBytes&&$m===0&&($m=62500*sp());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&ah(e,e.stylesheets),e.unsuspend)){var t=e.unsuspend;e.unsuspend=null,t()}},(e.imgBytes>$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a<i.length;a++){var o=i[a];(o.nodeName===`LINK`||o.getAttribute(`media`)!==`not all`)&&(n.set(o.dataset.precedence,o),r=o)}r&&n.set(null,r)}i=t.instance,o=i.getAttribute(`data-precedence`),a=n.get(o)||r,a===r&&n.set(null,i),n.set(o,i),this.count++,r=nh.bind(this),i.addEventListener(`load`,r),i.addEventListener(`error`,r),a?a.parentNode.insertBefore(i,a.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var sh={$$typeof:N,Provider:null,Consumer:null,_currentValue:ie,_currentValue2:ie,_threadCount:0};function ch(e,t,n,r,i,a,o,s,c){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=et(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=et(0),this.hiddenUpdates=et(null),this.identifierPrefix=r,this.onUncaughtError=i,this.onCaughtError=a,this.onRecoverableError=o,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=c,this.transitionTypes=null,this.incompleteTransitions=new Map}function lh(e,t,n,r,i,a,o,s,c,l,u,d){return e=new ch(e,t,n,o,c,l,u,d,s),t=1,!0===a&&(t|=24),a=bi(3,null,null,t),e.current=a,a.stateNode=e,t=xa(),t.refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ro(a),e}function uh(e){return e?(e=vi,e):vi}function dh(e,t,n,r,i,a){i=uh(i),r.context===null?r.context=i:r.pendingContext=i,r=ao(t),r.payload={element:n},a=a===void 0?null:a,a!==null&&(r.callback=a),n=oo(e,r,t),n!==null&&(Md(n,e,t),so(n,e,t))}function fh(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function ph(e,t){fh(e,t),(e=e.alternate)&&fh(e,t)}function mh(e){if(e.tag===13||e.tag===31){var t=hi(e,67108864);t!==null&&Md(t,e,67108864),ph(e,67108864)}}function hh(e){if(e.tag===13||e.tag===31){var t=kd();t=at(t);var n=hi(e,t);n!==null&&Md(n,e,t),ph(e,t)}}var gh=!0;function _h(e,t,n,r){var i=G.T;G.T=null;var a=K.p;try{K.p=2,yh(e,t,n,r)}finally{K.p=a,G.T=i}}function vh(e,t,n,r){var i=G.T;G.T=null;var a=K.p;try{K.p=8,yh(e,t,n,r)}finally{K.p=a,G.T=i}}function yh(e,t,n,r){if(gh){var i=bh(r);if(i===null)Kf(e,t,r,xh,n),Mh(e,r);else if(Ph(i,e,t,n,r))r.stopPropagation();else if(Mh(e,r),t&4&&-1<jh.indexOf(e)){for(;i!==null;){var a=xt(i);if(a!==null)switch(a.tag){case 3:if(a=a.stateNode,a.current.memoizedState.isDehydrated){var o=Je(a.pendingLanes);if(o!==0){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;o;){var c=1<<31-Ve(o);s.entanglements[1]|=c,o&=~c}Tf(a),!(Ku&6)&&(pd=ke()+500,Ef(0,!1))}}break;case 31:case 13:s=hi(a,2),s!==null&&Md(s,a,2),Ld(),ph(a,2)}if(a=bh(r),a===null&&Kf(e,t,r,xh,n),a===i)break;i=a}i!==null&&r.stopPropagation()}else Kf(e,t,r,null,n)}}function bh(e){return e=ln(e),Sh(e)}var xh=null;function Sh(e){if(xh=null,e=bt(e),e!==null){var t=o(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=s(t),e!==null)return e;e=null}else if(n===31){if(e=c(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return xh=e,null}function Ch(e){switch(e){case`beforetoggle`:case`cancel`:case`click`:case`close`:case`contextmenu`:case`copy`:case`cut`:case`auxclick`:case`dblclick`:case`dragend`:case`dragstart`:case`drop`:case`focusin`:case`focusout`:case`input`:case`invalid`:case`keydown`:case`keypress`:case`keyup`:case`mousedown`:case`mouseup`:case`paste`:case`pause`:case`play`:case`pointercancel`:case`pointerdown`:case`pointerup`:case`ratechange`:case`reset`:case`seeked`:case`submit`:case`toggle`:case`touchcancel`:case`touchend`:case`touchstart`:case`volumechange`:case`change`:case`selectionchange`:case`textInput`:case`compositionstart`:case`compositionend`:case`compositionupdate`:case`beforeblur`:case`afterblur`:case`beforeinput`:case`blur`:case`fullscreenchange`:case`fullscreenerror`:case`focus`:case`hashchange`:case`popstate`:case`select`:case`selectstart`:return 2;case`drag`:case`dragenter`:case`dragexit`:case`dragleave`:case`dragover`:case`mousemove`:case`mouseout`:case`mouseover`:case`pointermove`:case`pointerout`:case`pointerover`:case`resize`:case`scroll`:case`touchmove`:case`wheel`:case`mouseenter`:case`mouseleave`:case`pointerenter`:case`pointerleave`:return 8;case`message`:switch(Ae()){case je:return 2;case Me:return 8;case Ne:case Pe:return 32;case Fe:return 268435456;default:return 32}default:return 32}}var wh=!1,Th=null,Eh=null,Dh=null,Oh=new Map,kh=new Map,Ah=[],jh=`mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset`.split(` `);function Mh(e,t){switch(e){case`focusin`:case`focusout`:Th=null;break;case`dragenter`:case`dragleave`:Eh=null;break;case`mouseover`:case`mouseout`:Dh=null;break;case`pointerover`:case`pointerout`:Oh.delete(t.pointerId);break;case`gotpointercapture`:case`lostpointercapture`:kh.delete(t.pointerId)}}function Nh(e,t,n,r,i,a){return e===null||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[i]},t!==null&&(t=xt(t),t!==null&&mh(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function Ph(e,t,n,r,i){switch(t){case`focusin`:return Th=Nh(Th,e,t,n,r,i),!0;case`dragenter`:return Eh=Nh(Eh,e,t,n,r,i),!0;case`mouseover`:return Dh=Nh(Dh,e,t,n,r,i),!0;case`pointerover`:var a=i.pointerId;return Oh.set(a,Nh(Oh.get(a)||null,e,t,n,r,i)),!0;case`gotpointercapture`:return a=i.pointerId,kh.set(a,Nh(kh.get(a)||null,e,t,n,r,i)),!0}return!1}function Fh(e){var t=bt(e.target);if(t!==null){var n=o(t);if(n!==null){if(t=n.tag,t===13){if(t=s(n),t!==null){e.blockedOn=t,ct(e.priority,function(){hh(n)});return}}else if(t===31){if(t=c(n),t!==null){e.blockedOn=t,ct(e.priority,function(){hh(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ih(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=bh(e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);cn=r,n.target.dispatchEvent(r),cn=null}else return t=xt(n),t!==null&&mh(t),e.blockedOn=n,!1;t.shift()}return!0}function Lh(e,t,n){Ih(e)&&n.delete(t)}function Rh(){wh=!1,Th!==null&&Ih(Th)&&(Th=null),Eh!==null&&Ih(Eh)&&(Eh=null),Dh!==null&&Ih(Dh)&&(Dh=null),Oh.forEach(Lh),kh.forEach(Lh)}function zh(e,n){e.blockedOn===n&&(e.blockedOn=null,wh||(wh=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,Rh)))}var Bh=null;function Vh(e){Bh!==e&&(Bh=e,t.unstable_scheduleCallback(t.unstable_NormalPriority,function(){Bh===e&&(Bh=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],i=e[t+2];if(typeof r!=`function`){if(Sh(r||n)===null)continue;break}var a=xt(n);a!==null&&(e.splice(t,3),t-=3,Ks(a,{pending:!0,data:i,method:n.method,action:r},r,i))}}))}function Hh(e){function t(t){return zh(t,e)}Th!==null&&zh(Th,e),Eh!==null&&zh(Eh,e),Dh!==null&&zh(Dh,e),Oh.forEach(t),kh.forEach(t);for(var n=0;n<Ah.length;n++){var r=Ah[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<Ah.length&&(n=Ah[0],n.blockedOn===null);)Fh(n),n.blockedOn===null&&Ah.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(r=0;r<n.length;r+=3){var i=n[r],a=n[r+1],o=i[dt]||null;if(typeof a==`function`)o||Vh(n);else if(o){var s=null;if(a&&a.hasAttribute(`formAction`)){if(i=a,o=a[dt]||null)s=o.formAction;else if(Sh(i)!==null)continue}else s=o.action;typeof s==`function`?n[r+1]=s:(n.splice(r,3),r-=3),Vh(n)}}}function Uh(){function e(e){e.canIntercept&&e.info===`react-transition`&&e.intercept({handler:function(){return new Promise(function(e){return i=e})},focusReset:`manual`,scroll:`manual`})}function t(){i!==null&&(i(),i=null),r||setTimeout(n,20)}function n(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&e.url!=null&&navigation.navigate(e.url,{state:e.getState(),info:`react-transition`,history:`replace`})}}if(typeof navigation==`object`){var r=!1,i=null;return navigation.addEventListener(`navigate`,e),navigation.addEventListener(`navigatesuccess`,t),navigation.addEventListener(`navigateerror`,t),setTimeout(n,100),function(){r=!0,navigation.removeEventListener(`navigate`,e),navigation.removeEventListener(`navigatesuccess`,t),navigation.removeEventListener(`navigateerror`,t),i!==null&&(i(),i=null)}}}function Wh(e){this._internalRoot=e}Gh.prototype.render=Wh.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(i(409));var n=t.current;dh(n,kd(),e,t,null,null)},Gh.prototype.unmount=Wh.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;dh(e.current,2,null,e,null,null),Ld(),t[ft]=null}};function Gh(e){this._internalRoot=e}Gh.prototype.unstable_scheduleHydration=function(e){if(e){var t=st();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Ah.length&&t!==0&&t<Ah[n].priority;n++);Ah.splice(n,0,e),n===0&&Fh(e)}};var Kh=n.version;if(Kh!==`19.3.0`)throw Error(i(527,Kh,`19.3.0`));K.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render==`function`?Error(i(188)):(e=Object.keys(e).join(`,`),Error(i(268,e)));return e=u(t),e=e===null?null:d(e),e=e===null?null:e.stateNode,e};var qh={bundleType:0,version:`19.3.0`,rendererPackageName:`react-dom`,currentDispatcherRef:G,reconcilerVersion:`19.3.0`};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`){var Jh=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Jh.isDisabled&&Jh.supportsFiber)try{Re=Jh.inject(qh),ze=Jh}catch{}}e.createRoot=function(e,t){if(!a(e))throw Error(i(299));var n=!1,r=``,o=hc,s=gc,c=_c;return t!=null&&(!0===t.unstable_strictMode&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onUncaughtError!==void 0&&(o=t.onUncaughtError),t.onCaughtError!==void 0&&(s=t.onCaughtError),t.onRecoverableError!==void 0&&(c=t.onRecoverableError)),t=lh(e,1,!1,null,null,n,r,null,o,s,c,Uh),e[ft]=t.current,Wf(e),new Wh(t)}})),Ed=o(((e,t)=>{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Td()}))(),Dd=g.createContext(void 0);function Od(e){let t=g.useContext(Dd);if(!e&&t===void 0)throw Error(S(27));return t}var kd=g.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...o}=e,s=Od(),c=s.useState(`open`),l=s.useState(`nested`),u=s.useState(`mounted`);return Ir(`div`,e,{state:{open:c,transitionStatus:s.useState(`transitionStatus`)},ref:[s.context.backdropRef,t],stateAttributesMapping:At,props:[{role:`presentation`,hidden:!u,style:{userSelect:`none`,WebkitUserSelect:`none`}},o],enabled:a||!l})}),Ad=g.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,...s}=e,c=Od(),l=c.useState(`open`),{getButtonProps:u,buttonRef:d}=ia({disabled:a,native:o}),f={disabled:a};function p(e){l&&c.setOpen(!1,wa(ha,e.nativeEvent))}return Ir(`button`,e,{state:f,ref:[t,d],props:[{onClick:p},s,u]})});function jd(e){return qi(e,`base-ui`)}var Md=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,s=Od(),c=jd(a);return s.useSyncedValueWithCleanup(`descriptionElementId`,c),Ir(`p`,e,{ref:t,props:[{id:c},o]})}),Nd=g.createContext(void 0);function Pd(){let e=g.useContext(Nd);if(e===void 0)throw Error(S(26));return e}var Fd=`ArrowUp`,Id=`ArrowDown`,Ld=`ArrowLeft`,Rd=`ArrowRight`,zd=new Set([Fd,Id,Ld,Rd,`Home`,`End`]),Bd=`Shift`,Vd=[Bd,`Control`,`Alt`,`Meta`];function Hd(e){return fe(e)&&e.tagName===`INPUT`}function Ud(e){return!!(Hd(e)&&e.selectionStart!=null||fe(e)&&e.tagName===`TEXTAREA`)}function Wd(e,t,n,r){if(!e||!t||!t.scrollTo)return;let i=e.scrollLeft,a=e.scrollTop,o=e.clientWidth<e.scrollWidth,s=e.clientHeight<e.scrollHeight;if(o&&r!==`vertical`){let r=Gd(e,t,`left`),a=Kd(e),o=Kd(t);n===`ltr`&&(r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight?i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight:r-o.scrollMarginLeft<e.scrollLeft+a.scrollPaddingLeft&&(i=r-o.scrollMarginLeft-a.scrollPaddingLeft)),n===`rtl`&&(r-o.scrollMarginLeft<e.scrollLeft+a.scrollPaddingLeft?i=r-o.scrollMarginLeft-a.scrollPaddingLeft:r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight&&(i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight))}if(s&&r!==`horizontal`){let n=Gd(e,t,`top`),r=Kd(e),i=Kd(t);n-i.scrollMarginTop<e.scrollTop+r.scrollPaddingTop?a=n-i.scrollMarginTop-r.scrollPaddingTop:n+t.offsetHeight+i.scrollMarginBottom>e.scrollTop+e.clientHeight-r.scrollPaddingBottom&&(a=n+t.offsetHeight+i.scrollMarginBottom-e.clientHeight+r.scrollPaddingBottom)}e.scrollTo({left:i,top:a,behavior:`auto`})}function Gd(e,t,n){let r=n===`left`?`offsetLeft`:`offsetTop`,i=0;for(;t.offsetParent&&(i+=t[r],t.offsetParent!==e);)t=t.offsetParent;return i}function Kd(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}var qd=`--nested-dialogs`,Jd=`data-nested-dialog-open`,Yd={...kt,...gt,nestedDialogOpen(e){return e?{[Jd]:``}:null}},Xd=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,initialFocus:o,...s}=e,c=Od(),l=c.useState(`descriptionElementId`),u=c.useState(`disablePointerDismissal`),d=c.useState(`floatingRootContext`),f=c.useState(`popupProps`),p=c.useState(`modal`),m=c.useState(`mounted`),h=c.useState(`nested`),g=c.useState(`nestedOpenDialogCount`),_=c.useState(`open`),v=c.useState(`openMethod`),y=c.useState(`titleElementId`),b=c.useState(`transitionStatus`),x=c.useState(`role`),S=d.useState(`floatingId`);Pd(),$r({open:_,ref:c.context.popupRef,onComplete(){_&&c.context.onOpenChangeComplete?.(!0)}});let C=o===void 0?Ms(c.context.popupRef):o,w=g>0,T=c.useStateSetter(`popupElement`),E=Ir(`div`,e,{state:{open:_,nested:h,transitionStatus:b,nestedDialogOpen:w},props:[f,{id:S,"aria-labelledby":y,"aria-describedby":l,role:x,...js,hidden:!m,onKeyDown(e){zd.has(e.key)&&e.stopPropagation()},style:{[qd]:g}},s],ref:[t,c.context.popupRef,T],stateAttributesMapping:Yd});return(0,X.jsx)(vo,{context:d,openInteractionType:v,disabled:!m,closeOnFocusOut:!u,initialFocus:C,returnFocus:a,modal:p!==!1,restoreFocus:`popup`,children:E})}),Zd=g.forwardRef(function(e,t){let{cutout:n,...r}=e,i;if(n){let e=n.getBoundingClientRect();i=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${e.left}px ${e.top}px,${e.left}px ${e.bottom}px,${e.right}px ${e.bottom}px,${e.right}px ${e.top}px,${e.left}px ${e.top}px)`}return(0,X.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),Qd=g.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,i=Od(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,X.jsx)(Nd.Provider,{value:n,children:(0,X.jsxs)(Aa,{ref:t,...r,children:[a&&o===!0&&(0,X.jsx)(Zd,{ref:i.context.internalBackdropRef,inert:Gr(!s)}),e.children]})}):null}),$d={},ef={},tf=``;function nf(e,t){return me(e)?e:t}function rf(e,t,n){return/hidden|clip/.test(e.getComputedStyle(nf(t,n)).overflowY)}function af(e){if(typeof document>`u`)return!1;let t=Me(e);return q(t).innerWidth-t.documentElement.clientWidth>0}function of(e){if(!(typeof CSS<`u`&&CSS.supports&&CSS.supports(`scrollbar-gutter`,`stable`))||typeof document>`u`)return!1;let t=Me(e),n=t.documentElement,r=t.body,i=nf(n,r),a=i.style.overflowY,o=n.style.scrollbarGutter;n.style.scrollbarGutter=`stable`,i.style.overflowY=`scroll`;let s=i.offsetWidth;i.style.overflowY=`hidden`;let c=i.offsetWidth;return i.style.overflowY=a,n.style.scrollbarGutter=o,s===c}function sf(e){let t=Me(e),n=t.documentElement,r=t.body,i=nf(n,r),a={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:`hidden`,overflowX:`hidden`}),()=>{Object.assign(i.style,a)}}function cf(e){let t=Me(e),n=t.documentElement,r=t.body,i=q(n),a=0,o=0,s=!1,c=Ie.create();if(tt&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let t=i.getComputedStyle(n),c=i.getComputedStyle(r),l=(t.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,$d={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},tf=n.style.scrollBehavior,ef={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let u=n.scrollHeight>n.clientHeight,d=n.scrollWidth>n.clientWidth,f=t.overflowY===`scroll`||c.overflowY===`scroll`,p=t.overflowX===`scroll`||c.overflowX===`scroll`,m=Math.max(0,i.innerWidth-r.clientWidth),h=Math.max(0,i.innerHeight-r.clientHeight),g=parseFloat(c.marginTop)+parseFloat(c.marginBottom),_=parseFloat(c.marginLeft)+parseFloat(c.marginRight),v=nf(n,r);if(s=of(e),s){n.style.scrollbarGutter=l,v.style.overflowY=`hidden`,v.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:l,overflowY:`hidden`,overflowX:`hidden`}),(u||f)&&(n.style.overflowY=`scroll`),(d||p)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:g||h?`calc(100dvh - ${g+h}px)`:`100dvh`,width:_||m?`calc(100vw - ${_+m}px)`:`100vw`,boxSizing:`border-box`,overflowY:`hidden`,overflowX:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function u(){Object.assign(n.style,$d),Object.assign(r.style,ef),s||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=tf)}function d(){u(),c.request(l)}l();let f=Ne(i,`resize`,d);return()=>{c.cancel(),u(),typeof i.removeEventListener==`function`&&f()}}var lf=new class{lockCount=0;restore=null;timeoutLock=ze.create();timeoutUnlock=ze.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=Me(e),n=t.documentElement,r=t.body,i=q(n);if(rf(i,n,r)){let t=new i.MutationObserver(()=>{rf(i,n,r)||(t.disconnect(),this.restore=null,this.lock(e))}),a={attributes:!0};t.observe(n,a),t.observe(r,a),this.restore=()=>t.disconnect();return}let a=Xe||!af(e);this.restore=a?sf(e):cf(e)}};function uf(e=!0,t=null){b(()=>{if(e)return lf.acquire(t)},[e,t])}function df({store:e,parentContext:t,isDrawer:n}){let r=e.useState(`open`),i=e.useState(`disablePointerDismissal`),a=e.useState(`modal`),o=e.useState(`popupElement`),s=e.useState(`floatingRootContext`),[c,l]=g.useState(0),[u,d]=g.useState(0),f=c===0,p=So(s,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:a===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0)return!1;if(`touches`in t){if(t.type===`touchend`){if(t.changedTouches.length!==1||t.touches.length!==0)return!1}else if(t.touches.length!==1)return!1}let n=at(t);if(f&&!i){if(a){let t=e.context.internalBackdropRef.current,r=e.context.backdropRef.current;return t||r?t===n||r===n||Y(n,o)&&!n?.hasAttribute(`data-base-ui-portal`):!0}return!0}return!1},escapeKey:f});return uf(r&&a===!0,o),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{l(e),d(t)}),b(()=>(t?.onNestedDialogOpen&&(r?t.onNestedDialogOpen(c+1,u+ +!!n):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&r&&t.onNestedDialogOpen(0,0)}),[n,r,c,u,t]),Hs(e,{activeTriggerProps:p.reference,inactiveTriggerProps:p.trigger,popupProps:p.floating,nestedOpenDialogCount:c,nestedOpenDrawerCount:u}),null}var ff=class extends ae{setState(e){}update(e){}set(e,t){}notifyAll(){}},pf={...Zs,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role},mf=class extends ae{constructor(e,t,n){let r=new Ws,i=gf(e,r,t,n);super(i,_f(r),pf)}setOpen=(e,t)=>{t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),!t.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(e,t),this.update(Ls(this.state,e,t.trigger)))}};function hf(){let e=new Ws;return new ff(Object.freeze(gf(void 0,e)),Object.freeze(_f(e)),pf)}function gf(e,t,n,r=!1){return{...Gs(t,n,r),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function _f(e){return{popupRef:g.createRef(),backdropRef:g.createRef(),internalBackdropRef:g.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function vf(e,t){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=t,p=e===`drawer`,m=e===`alert-dialog`,h=m?!0:c,_=m||s,v=m?`alertdialog`:`dialog`,y=Od(!0),b={modal:h,disablePointerDismissal:_,nested:y!=null,role:v},x=Ns((e,t)=>new mf({open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...b},e,t),!0);x.useControlledProp(`openProp`,r),x.useControlledProp(`triggerIdProp`,d),x.useSyncedValues(b),x.useContextCallback(`onOpenChange`,a),x.useContextCallback(`onOpenChangeComplete`,o);let S=x.useState(`open`),C=x.useState(`mounted`),w=x.useState(`payload`);Us(x,S),Bs(x);let{forceUnmount:T}=Vs(S,x);g.useImperativeHandle(l,()=>({unmount:T,close:()=>x.setOpen(!1,wa(Sa))}),[T,x]);let E=S||C;return(0,X.jsxs)(Dd.Provider,{value:x,children:[u&&(0,X.jsx)(Ps,{handle:u,store:x}),E&&(0,X.jsx)(df,{store:x,parentContext:y?.context,isDrawer:p}),typeof n==`function`?n({payload:w}):n]})}var yf=F(function(e){return vf(`dialog`,e)}),bf=g.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,...o}=e,s=Pd(),c=Od(),l=c.useState(`open`),u=c.useState(`nested`),d=c.useState(`transitionStatus`),f=c.useState(`nestedOpenDialogCount`),p=c.useState(`mounted`),m=c.useStateSetter(`viewportElement`);return Ir(`div`,e,{enabled:s||p,state:{open:l,nested:u,transitionStatus:d,nestedDialogOpen:f>0},ref:[t,m],stateAttributesMapping:Yd,props:[{role:`presentation`,hidden:!p,style:{pointerEvents:l?void 0:`none`},children:a},o]})}),xf=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,s=Od(),c=jd(a);return s.useSyncedValueWithCleanup(`titleElementId`,c),Ir(`h2`,e,{ref:t,props:[{id:c},o]})});function Sf(e){let t=g.useRef(``),n=g.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:g.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function Cf(e,t){let n=g.useRef(e),r=G(t);b(()=>{n.current!==e&&r(n.current),n.current=e},[e,r])}function wf(e,t){let{onClick:n,onPointerDown:r}=Sf(G((n,r)=>{(typeof e==`function`?e():e)||t(r||(Xe?`touch`:``))}));return g.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function Tf(e){let[t,n]=g.useState(null),r=wf(e,n);return Cf(e,t=>{t&&!e&&n(null)}),g.useMemo(()=>({openMethod:t,triggerProps:r}),[t,r])}var Ef=I(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,id:s,payload:c,handle:l,...u}=e,d=Od(!0),f=Qs(l)??d;if(!f)throw Error(S(79));let p=jd(s),m=f.useState(`floatingRootContext`),h=f.useState(`isOpenedByTrigger`,p),_=f.useState(`triggerPopupId`,p),v=g.useRef(null),{registerTrigger:y,isMountedByThisTrigger:b}=zs(p,v,f,{payload:c}),{getButtonProps:x,buttonRef:C}=ia({disabled:a,native:o}),w=yo(m),T=wf(()=>f.select(`open`),e=>{f.set(`openMethod`,e)}),E={disabled:a,open:h},D=f.useState(`triggerProps`,b);return Ir(`button`,e,{state:E,ref:[C,t,y,v],props:[w.reference,D,T,{[ti]:``,id:p,"aria-haspopup":`dialog`,"aria-expanded":h,"aria-controls":_},u,x],stateAttributesMapping:Dt})}),Df=class extends Es{constructor(){super(hf(),`Dialog`,!1)}open(e){this.openByTrigger(e)}openWithPayload(e){let t=this.attachedStore;t!==null&&(t.set(`payload`,e),t.setOpen(!0,wa(Sa)))}close(){this.closePopup()}get isOpen(){return this.attachedStore?.select(`open`)??!1}};function Of(){return new Df}var kf=[`container`,`keepMounted`];function Af(e){let{portalProps:t,...n}=e,r={...t},i={};for(let e of Object.keys(n)){let t=n[e];kf.includes(e)?t!==void 0&&(r[e]=t):i[e]=t}return{portal:r,popup:i}}var jf=Object.assign(function(e){return(0,X.jsx)(yf,{...e})},{createHandle:Of});function Mf({className:e,children:t,closeButton:n=!0,closeLabel:r=`Close`,backdrop:i=!0,frame:a=!0,backdropProps:o,viewportProps:s,...c}){let l=a&&i,{portal:u,popup:d}=Af(c);return(0,X.jsxs)(Qd,{...u,children:[i&&(0,X.jsx)(kd,{"data-slot":`dialog-backdrop`,...o,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`motion-safe:transition-opacity motion-safe:duration-250 motion-safe:ease-out`,`data-ending-style:motion-safe:opacity-0 data-starting-style:motion-safe:opacity-0`,o?.className)}),(0,X.jsx)(bf,{"data-slot":`dialog-viewport`,...s,className:Q(`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,s?.className),children:(0,X.jsx)(Xd,{"data-slot":`dialog-popup`,...l?{"data-frame":``}:{},className:Q(`group/dialog-popup relative flex max-h-full min-h-0 w-150 max-w-full flex-col`,`rounded-2xl border`,l?`border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`:`bg-background border-border-overlay`,!l&&`shadow-2xl`,`isolate transform-gpu outline-none`,`motion-safe:transition-[opacity,scale] motion-safe:duration-250 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-95 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,`data-nested-dialog-open:pointer-events-none data-nested-dialog-open:scale-95 data-nested-dialog-open:opacity-0`,e),...d,children:(0,X.jsxs)(`div`,{"data-slot":`dialog-content`,className:Q(`relative flex min-h-0 flex-col overflow-hidden not-has-[>[data-slot=dialog-footer]]:pb-6 not-has-[>[data-slot=dialog-header]]:pt-6 [&>[data-slot=dialog-header]+[data-slot=dialog-footer]]:pt-0`,l&&`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`),children:[t,n&&(0,X.jsx)(Ad,{"aria-label":r,"data-slot":`dialog-close-button`,className:Q(Mu({variant:`outline`,size:`icon-sm`}),`absolute inset-e-3 top-3 z-10`),children:(0,X.jsx)(Lf,{})})]})})})]})}function Nf({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function Pf({className:e,...t}){return(0,X.jsx)(xf,{"data-slot":`dialog-title`,className:Q(`text-foreground-intense text-2xl font-semibold`,e),...t})}function Ff({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-body`,className:Q(`min-h-0 flex-1 px-6`,e),...t})}function If({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`dialog-footer`,className:Q(`flex flex-col-reverse gap-2 p-6 sm:flex-row sm:justify-end`,e),...t})}function Lf(e){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,...e,children:(0,X.jsx)(`path`,{d:`M11.594 3.594c.225-.225.588-.225.813 0s.225.588 0 .812L8.813 8l3.594 3.594c.225.225.225.588 0 .813s-.588.225-.812 0L8 8.812l-3.594 3.594c-.225.225-.588.225-.812 0s-.225-.588 0-.812L7.188 8 3.594 4.406c-.225-.225-.225-.588 0-.812s.588-.225.813 0L8 7.187l3.594-3.594z`})})}var Rf=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,focusableWhenDisabled:a=!1,nativeButton:o=!0,style:s,...c}=e,{getButtonProps:l,buttonRef:u}=ia({disabled:i,focusableWhenDisabled:a,native:o});return Ir(`button`,e,{state:{disabled:i},ref:[t,u],props:[c,l]})}),zf=g.createContext(null);function Bf({className:e,variant:t,size:n,disabled:r,...i}){let a=g.useContext(zf),o=t??a?.variant,s=n??a?.size,c=r||a?.disabled;return(0,X.jsx)(Rf,{"data-slot":`button`,disabled:c,className:Q(Mu({variant:o,size:s}),e),...i})}var Vf=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxgAAAMYAQAAAABgBnzJAAAGdElEQVR42u2dXY7yOBBFbyY8IoWlsICWiPQtYFY8UtCwAJYCEo8deR4gxPFPOgE62MzJQ0Q3kNOmnL5UuVxVGP368ZdgwIABAwYMGDBg5MjYF86xevhywUu987M6F7V0LupidS5qSVKx6k/9s847mFcwYMCA8cMRk4rKdCfdIhHGPvXPDt+BPV7CKI11NE9dMHCpN+t5sRqc7N91om4/y30OAwYMGE/r+VDDPXl3XoI9XsnYP+uae076KoXPytHu3it3PPXBE8wrGDBgwHiFng+9ck/lrSewB4yJDEesPVHvg+7E22HAgAHjGT3vDkesTUzjibfDmLx+7i+Y96LuRSTQcxgwYMB43j8PL5iHHXL0/KX22JmXXdO9VIL+uZct10k+9zkMGDBg/Ip/7mfLSQZ7vNoebfGyCwYulUJ++8wT8woGDBgwns5vn3XCHk8exf+hrsEgKW7kR/QcBgwYMNAPGG9nOOvivkQ7YXUvq90X+sHedewBAwYMGOg5jIUYA+22ve1IWD3sswerzWAPGDBgwEDPYSzpnw+S1x1h9orK+JF3L+iOfw4DBgwY6DmMBfU8ugXNqejqFIQLP3I0HnvAgAEDBnoOYyk99/ehhfamOYF4T8/xz2HAgAEDPYeh966fe3vNf6jjai+Ye+lxVgYd9oABAwYM9BzGQuvn/rp4OAavSXXkBu469oABAwYM9BzG4no+Vpf9HOs8M7KbLcHP6ryR2lX2Nm83/TnncRxuVsl8HG034zd5j+Nwv03yHkcdeJShnp/76VR+Z2yPo6TKmJOkNjl7yEw+rsO4DmRnZhxLjeNk/1kq+x9P2vXPft8H3Q3o9hKVxpjbqftx8N605tVFqq6PTtIl3/vjKG2vj6qZN0ha46hVNreHTd76se4ebOcpSFLjaO/TSlpf/wnnao/7dCoz9s/PG0vE9/UcRU/X59zme58f+9tcWs/6x7vgOEKNzH/sgzp0yOPtWZKyR21PpvJzYjJ1tuNoPjBG1hBPfC+jzaPe66Cb+Wjp9ttx+tt+XeCVVvnXlL6XtCsZ5u6Ceq5Am/O4nt9jvGN73TJYPz+cP8Pmda56XnIPps04ZjuOOg89D7U5t6SvqX/ukx5p2ZJgvL3/vnv5iPvjK+V6MtGtatcQiWWB859TO2XpPEk9t766H5uqqfOcV2v7H9YfaXvMcxyldaOf7aB1fvf55R4iXUvltqizHEdzv0E22kr6Z7KkpzWO+6JH21nnkpieV7Ee5oM+K+uRFmwa7YmeqA5euvBVm+W8Kp2//DjZJ1k+3h7dV3690ZtDIRVjnVNDu96S6D84uNHbWoW0TnFdbdb33YPt4taTvywmd59fp0vdfG0kqWoy6msZOnbNSmrLU+b+x1Fqpcs6dz/qIjUbHU+55l810q655l6dZP5NK/9qRl5f0afzzYu+JzevvtJd55SVBeeks90e9fOqtHP8qmHKXJ8U56TRJZcPp+3XZ8RFJ+seMWSxfv7oG7cfMY7tHIukvF/tuGXfHYxp/nm0I+qkejIKlJJh/zkMGDBgoIMwlq736ihxOG9disfbw11XsQcMGDBgoOcwlu6vNtJuLdol1W147mx4wx4wYMCAgZ7DeE99uEgR95CKO0+8Jx8OBgwYMNBz7IGe+6Ve/YXwUPlXb5ubUwUe/xwGDBgw0HMYy+8/9/PcxtfKbSfd2XWedP12GDBgwEDPYbyasS/6Y/XWeLvjXo80T3NS5qL14bA5DBgwYPyenu8tn2tY3R17vIdR9oUDkhmHHzj3MuOcNDr0HAYMGDD0RJ2iynhlYO1CsE5d2OgFsMcDDNuzDrjX85z0VVqflVMfLuKLRxLgyG+HAQMGjAf1/C7bVbCmu1/gVQo0dMEecxmlU5fv4WNnvpPTc8cDd75xTCg5072DeQUDBgwYs/zzcAc180M/Fuu32OMBe9yWL+Z1mh8ebZHeZ+WsqQ889fAietzLZ17BgAEDxkQ9r0zEU/c7uBjto98KsMfv9mmIueYpflahlPWo9+5vPR/E5ZlXMGDAgDFHz6ON1/y+qpFeq9gDhrzaMeOL46GFdfafw4ABA8ZD/mCnyaOL46GFdTeXDns8YI+d+fDPypHtaS8euPDMKxgwYMCYE991g+4TX1yh54/bI7bynf9nFaod44Tap1abYV7BgAEDxvx4eyjUHorBB+Py2EPU94EBAwYMGDBgwIDx1PEfwPfvNJna2O0AAAAASUVORK5CYII=`,Hf=[`zh-Hans`,`zh-Hant`,`en`,`ja`,`ko`,`de`,`es`,`fr`,`pt`,`ru`],Uf={"zh-Hans":`简体中文`,"zh-Hant":`繁體中文`,en:`English`,ja:`日本語`,ko:`한국어`,de:`Deutsch`,es:`Español`,fr:`Français`,pt:`Português`,ru:`Русский`},Wf=`zh-Hans`,Gf=`dsh-mobile-panel-language`;function Kf(e){let t=String(e??``).trim().replace(/_/g,`-`).toLowerCase();if(!t)return null;let n=t.split(`-`),r=n[0];return r===`zh`?n.slice(1).some(e=>e===`hant`||e===`tw`||e===`hk`||e===`mo`)?`zh-Hant`:`zh-Hans`:r===`en`?`en`:r===`ja`?`ja`:r===`ko`?`ko`:r===`de`?`de`:r===`es`?`es`:r===`fr`?`fr`:r===`pt`?`pt`:r===`ru`?`ru`:null}function qf(){try{let e=typeof navigator>`u`?null:navigator;if(!e)return[];if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages;if(typeof e.language==`string`&&e.language)return[e.language]}catch{}return[]}function Jf(){for(let e of qf()){let t=Kf(e);if(t)return t}return`en`}function Yf(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Xf(){let e=Yf();if(!e)return`system`;try{let t=e.getItem(Gf);return t?Kf(t)??`system`:`system`}catch{return`system`}}var Zf=null,Qf=null,$f=new Set;function ep(){return Zf===null&&(Zf=Xf()),Zf}function tp(){return ep()}function np(){let e=ep();return e===`system`?(Qf||=Jf(),Qf):e}function rp(e){let t=e===`system`?`system`:Kf(e)??`system`;Zf=t,Qf=null;let n=Yf();try{n&&(t===`system`?n.removeItem(Gf):n.setItem(Gf,t))}catch{}for(let e of $f)e()}function ip(e){return $f.add(e),()=>{$f.delete(e)}}function ap(){return np()}function op(e,t){return t?e.replace(/\{([a-zA-Z0-9_]+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)}):e}function sp(e){let t={};for(let n of e)Object.assign(t,n);return t}function cp(e,t,n,r){let i=e[t]?.[n]||e[Wf]?.[n];return typeof i!=`string`||i.length===0?n:op(i,r)}var lp=[{"zh-Hans":{"panel.common.show":`显示`,"panel.common.hide":`隐藏`,"panel.common.close":`关闭`,"panel.common.none":`暂无`,"panel.common.cores":`核`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`,"panel.webAccess.title":`网页管理`,"panel.webAccess.state":`公网 / 局域网访问`,"panel.webAccess.closed":`未开放(默认关闭)`,"panel.webAccess.expires":`开放到 {time}`,"panel.webAccess.open":`开放 2 小时`,"panel.webAccess.close":`立即关闭`,"panel.webAccess.hint":`网页管理默认只对这台机器开放。从这里或侧边栏那颗手机图标打开后,2 小时内公网与局域网地址都能操作这一页;访问不会延长到期时间,到点自动关闭。`,"panel.webAccess.opened":`已开放网页管理 2 小时。`,"panel.webAccess.closedNotice":`已关闭网页管理。`,"panel.common.cancel":`取消`,"panel.common.save":`保存`,"panel.common.view":`查看`,"panel.common.edit":`修改`,"panel.shell.loading":`正在读取插件状态…`,"panel.language.open":`界面语言`,"panel.canvas.open":`打开画布`,"panel.language.system":`跟随浏览器`},"zh-Hant":{"panel.common.show":`顯示`,"panel.common.hide":`隱藏`,"panel.common.close":`關閉`,"panel.common.none":`暫無`,"panel.common.cores":`核`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`,"panel.webAccess.title":`網頁管理`,"panel.webAccess.state":`公網 / 區域網路存取`,"panel.webAccess.closed":`未開放(預設關閉)`,"panel.webAccess.expires":`開放到 {time}`,"panel.webAccess.open":`開放 2 小時`,"panel.webAccess.close":`立即關閉`,"panel.webAccess.hint":`網頁管理預設只對這台機器開放。從這裡或側邊欄那顆手機圖示開啟後,2 小時內公網與區域網路位址都能操作這一頁;存取不會延長到期時間,到點自動關閉。`,"panel.webAccess.opened":`已開放網頁管理 2 小時。`,"panel.webAccess.closedNotice":`已關閉網頁管理。`,"panel.common.cancel":`取消`,"panel.common.save":`儲存`,"panel.common.view":`檢視`,"panel.common.edit":`修改`,"panel.shell.loading":`正在讀取外掛狀態…`,"panel.language.open":`介面語言`,"panel.canvas.open":`開啟畫布`,"panel.language.system":`跟隨瀏覽器`},en:{"panel.common.show":`Show`,"panel.common.hide":`Hide`,"panel.common.close":`Close`,"panel.common.none":`None`,"panel.common.cores":`cores`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`,"panel.webAccess.title":`Web management`,"panel.webAccess.state":`Public / LAN access`,"panel.webAccess.closed":`Closed (the default)`,"panel.webAccess.expires":`Open until {time}`,"panel.webAccess.open":`Open for 2 hours`,"panel.webAccess.close":`Close now`,"panel.webAccess.hint":`Web management is reachable from this machine only by default. Opening it here or from the phone icon in the sidebar lets public and LAN addresses operate this page for 2 hours; visits do not extend it and it closes on its own.`,"panel.webAccess.opened":`Web management is open for 2 hours.`,"panel.webAccess.closedNotice":`Web management closed.`,"panel.common.cancel":`Cancel`,"panel.common.save":`Save`,"panel.common.view":`View`,"panel.common.edit":`Change`,"panel.shell.loading":`Reading plugin status…`,"panel.language.open":`Language`,"panel.canvas.open":`Open canvas`,"panel.language.system":`Follow browser`},ja:{"panel.common.show":`表示`,"panel.common.hide":`隠す`,"panel.common.close":`閉じる`,"panel.common.none":`なし`,"panel.common.cores":`コア`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`,"panel.webAccess.title":`ウェブ管理`,"panel.webAccess.state":`公衆 / LAN アクセス`,"panel.webAccess.closed":`未開放(既定はオフ)`,"panel.webAccess.expires":`{time} まで開放`,"panel.webAccess.open":`2 時間開放する`,"panel.webAccess.close":`今すぐ閉じる`,"panel.webAccess.hint":`ウェブ管理は既定ではこのマシンからのみ開けます。ここまたはサイドバーのスマートフォンアイコンから開くと、2 時間は公衆・LAN のアドレスからこのページを操作できます。アクセスしても期限は延びず、時間が来れば自動で閉じます。`,"panel.webAccess.opened":`ウェブ管理を 2 時間開放しました。`,"panel.webAccess.closedNotice":`ウェブ管理を閉じました。`,"panel.common.cancel":`キャンセル`,"panel.common.save":`保存`,"panel.common.view":`表示`,"panel.common.edit":`変更`,"panel.shell.loading":`プラグインの状態を読み込み中…`,"panel.language.open":`表示言語`,"panel.canvas.open":`キャンバスを開く`,"panel.language.system":`ブラウザに合わせる`},ko:{"panel.common.show":`표시`,"panel.common.hide":`숨기기`,"panel.common.close":`닫기`,"panel.common.none":`없음`,"panel.common.cores":`코어`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`,"panel.webAccess.title":`웹 관리`,"panel.webAccess.state":`공용 / LAN 접속`,"panel.webAccess.closed":`열리지 않음(기본값)`,"panel.webAccess.expires":`{time}까지 열림`,"panel.webAccess.open":`2시간 열기`,"panel.webAccess.close":`지금 닫기`,"panel.webAccess.hint":`웹 관리는 기본적으로 이 컴퓨터에서만 열립니다. 여기 또는 사이드바의 휴대폰 아이콘에서 열면 2시간 동안 공용·LAN 주소에서 이 페이지를 조작할 수 있습니다. 접속해도 만료 시간은 늘어나지 않으며 시간이 되면 자동으로 닫힙니다.`,"panel.webAccess.opened":`웹 관리를 2시간 열었습니다.`,"panel.webAccess.closedNotice":`웹 관리를 닫았습니다.`,"panel.common.cancel":`취소`,"panel.common.save":`저장`,"panel.common.view":`보기`,"panel.common.edit":`변경`,"panel.shell.loading":`플러그인 상태를 불러오는 중…`,"panel.language.open":`표시 언어`,"panel.canvas.open":`캔버스 열기`,"panel.language.system":`브라우저 설정 따르기`},de:{"panel.common.show":`Anzeigen`,"panel.common.hide":`Ausblenden`,"panel.common.close":`Schließen`,"panel.common.none":`Keine`,"panel.common.cores":`Kerne`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt gekoppelt werden.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`,"panel.webAccess.title":`Webverwaltung`,"panel.webAccess.state":`Öffentlich-/LAN-Zugriff`,"panel.webAccess.closed":`Geschlossen (Standard)`,"panel.webAccess.expires":`Offen bis {time}`,"panel.webAccess.open":`Für 2 Stunden öffnen`,"panel.webAccess.close":`Sofort schließen`,"panel.webAccess.hint":`Die Webverwaltung ist standardmäßig nur von diesem Rechner erreichbar. Wird sie hier oder über das Handy-Symbol in der Seitenleiste geöffnet, können öffentliche und LAN-Adressen diese Seite 2 Stunden lang bedienen; Aufrufe verlängern die Frist nicht, danach schließt sie sich selbst.`,"panel.webAccess.opened":`Webverwaltung ist für 2 Stunden offen.`,"panel.webAccess.closedNotice":`Webverwaltung geschlossen.`,"panel.common.cancel":`Abbrechen`,"panel.common.save":`Speichern`,"panel.common.view":`Ansehen`,"panel.common.edit":`Ändern`,"panel.shell.loading":`Plugin-Status wird gelesen…`,"panel.language.open":`Sprache`,"panel.canvas.open":`Canvas öffnen`,"panel.language.system":`Browser folgen`},es:{"panel.common.show":`Mostrar`,"panel.common.hide":`Ocultar`,"panel.common.close":`Cerrar`,"panel.common.none":`Ninguno`,"panel.common.cores":`núcleos`,"panel.shell.deviceAllowed":`Ya se pueden vincular dispositivos nuevos.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`,"panel.webAccess.title":`Gestión web`,"panel.webAccess.state":`Acceso público / LAN`,"panel.webAccess.closed":`Cerrada (por defecto)`,"panel.webAccess.expires":`Abierta hasta {time}`,"panel.webAccess.open":`Abrir 2 horas`,"panel.webAccess.close":`Cerrar ahora`,"panel.webAccess.hint":`La gestión web solo es accesible desde este equipo de forma predeterminada. Al abrirla aquí o desde el icono del teléfono en la barra lateral, las direcciones públicas y de LAN pueden usar esta página durante 2 horas; las visitas no amplían el plazo y se cierra sola.`,"panel.webAccess.opened":`Gestión web abierta durante 2 horas.`,"panel.webAccess.closedNotice":`Gestión web cerrada.`,"panel.common.cancel":`Cancelar`,"panel.common.save":`Guardar`,"panel.common.view":`Ver`,"panel.common.edit":`Cambiar`,"panel.shell.loading":`Leyendo el estado del complemento…`,"panel.language.open":`Idioma`,"panel.canvas.open":`Abrir lienzo`,"panel.language.system":`Seguir al navegador`},fr:{"panel.common.show":`Afficher`,"panel.common.hide":`Masquer`,"panel.common.close":`Fermer`,"panel.common.none":`Aucun`,"panel.common.cores":`cœurs`,"panel.shell.deviceAllowed":`De nouveaux appareils peuvent être appairés.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`,"panel.webAccess.title":`Gestion web`,"panel.webAccess.state":`Accès public / LAN`,"panel.webAccess.closed":`Fermée (par défaut)`,"panel.webAccess.expires":`Ouverte jusqu'à {time}`,"panel.webAccess.open":`Ouvrir 2 heures`,"panel.webAccess.close":`Fermer maintenant`,"panel.webAccess.hint":`La gestion web n'est accessible que depuis cette machine par défaut. En l'ouvrant ici ou depuis l'icône téléphone de la barre latérale, les adresses publiques et LAN peuvent utiliser cette page pendant 2 heures ; les visites ne prolongent pas le délai et elle se ferme d'elle-même.`,"panel.webAccess.opened":`Gestion web ouverte pour 2 heures.`,"panel.webAccess.closedNotice":`Gestion web fermée.`,"panel.common.cancel":`Annuler`,"panel.common.save":`Enregistrer`,"panel.common.view":`Voir`,"panel.common.edit":`Modifier`,"panel.shell.loading":`Lecture de l'état du greffon…`,"panel.language.open":`Langue`,"panel.canvas.open":`Ouvrir le canevas`,"panel.language.system":`Suivre le navigateur`},pt:{"panel.common.show":`Mostrar`,"panel.common.hide":`Ocultar`,"panel.common.close":`Fechar`,"panel.common.none":`Nenhum`,"panel.common.cores":`núcleos`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`,"panel.webAccess.title":`Gerenciamento web`,"panel.webAccess.state":`Acesso público / LAN`,"panel.webAccess.closed":`Fechado (padrão)`,"panel.webAccess.expires":`Aberto até {time}`,"panel.webAccess.open":`Abrir por 2 horas`,"panel.webAccess.close":`Fechar agora`,"panel.webAccess.hint":`O gerenciamento web só é acessível a partir deste computador por padrão. Ao abri-lo aqui ou pelo ícone de celular na barra lateral, endereços públicos e de LAN podem usar esta página por 2 horas; os acessos não estendem o prazo e ele se fecha sozinho.`,"panel.webAccess.opened":`Gerenciamento web aberto por 2 horas.`,"panel.webAccess.closedNotice":`Gerenciamento web fechado.`,"panel.common.cancel":`Cancelar`,"panel.common.save":`Salvar`,"panel.common.view":`Ver`,"panel.common.edit":`Alterar`,"panel.shell.loading":`Lendo o status do plugin…`,"panel.language.open":`Idioma`,"panel.canvas.open":`Abrir tela`,"panel.language.system":`Seguir o navegador`},ru:{"panel.common.show":`Показать`,"panel.common.hide":`Скрыть`,"panel.common.close":`Закрыть`,"panel.common.none":`Нет`,"panel.common.cores":`ядра`,"panel.shell.deviceAllowed":`Сопряжение новых устройств разрешено.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как обычно.`,"panel.webAccess.title":`Веб-управление`,"panel.webAccess.state":`Доступ из интернета / LAN`,"panel.webAccess.closed":`Закрыто (по умолчанию)`,"panel.webAccess.expires":`Открыто до {time}`,"panel.webAccess.open":`Открыть на 2 часа`,"panel.webAccess.close":`Закрыть сейчас`,"panel.webAccess.hint":`По умолчанию веб-управление доступно только с этой машины. Если открыть его здесь или значком телефона на боковой панели, публичные и LAN-адреса смогут работать с этой страницей 2 часа; обращения срок не продлевают, и оно закроется само.`,"panel.webAccess.opened":`Веб-управление открыто на 2 часа.`,"panel.webAccess.closedNotice":`Веб-управление закрыто.`,"panel.common.cancel":`Отмена`,"panel.common.save":`Сохранить`,"panel.common.view":`Просмотр`,"panel.common.edit":`Изменить`,"panel.shell.loading":`Чтение состояния плагина…`,"panel.language.open":`Язык`,"panel.canvas.open":`Открыть холст`,"panel.language.system":`Как в браузере`}},{"zh-Hans":{"panel.status.connected":`已连接`,"panel.status.connecting":`连接中`,"panel.status.error":`被关闭`,"panel.status.off":`未启用`,"panel.lan.off":`未启用`,"panel.lan.listening":`正在监听`,"panel.lan.error":`启动失败`,"panel.sidecar.healthy":`运行中`,"panel.sidecar.starting":`启动中`,"panel.sidecar.restarting":`正在重启`,"panel.sidecar.error":`异常`,"panel.sidecar.stopped":`已停止`,"panel.ago.justNow":`刚刚`,"panel.ago.minutes":`{count} 分钟前`,"panel.ago.hours":`{count} 小时前`,"panel.ago.days":`{count} 天前`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.status.connected":`已連線`,"panel.status.connecting":`連線中`,"panel.status.error":`被關閉`,"panel.status.off":`未啟用`,"panel.lan.off":`未啟用`,"panel.lan.listening":`正在監聽`,"panel.lan.error":`啟動失敗`,"panel.sidecar.healthy":`執行中`,"panel.sidecar.starting":`啟動中`,"panel.sidecar.restarting":`正在重新啟動`,"panel.sidecar.error":`異常`,"panel.sidecar.stopped":`已停止`,"panel.ago.justNow":`剛剛`,"panel.ago.minutes":`{count} 分鐘前`,"panel.ago.hours":`{count} 小時前`,"panel.ago.days":`{count} 天前`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.status.connected":`Connected`,"panel.status.connecting":`Connecting`,"panel.status.error":`Shut down`,"panel.status.off":`Off`,"panel.lan.off":`Off`,"panel.lan.listening":`Listening`,"panel.lan.error":`Failed to start`,"panel.sidecar.healthy":`Running`,"panel.sidecar.starting":`Starting`,"panel.sidecar.restarting":`Restarting`,"panel.sidecar.error":`Error`,"panel.sidecar.stopped":`Stopped`,"panel.ago.justNow":`just now`,"panel.ago.minutes":`{count} min ago`,"panel.ago.hours":`{count} h ago`,"panel.ago.days":`{count} d ago`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`},ja:{"panel.status.connected":`接続済み`,"panel.status.connecting":`接続中`,"panel.status.error":`閉じられました`,"panel.status.off":`オフ`,"panel.lan.off":`オフ`,"panel.lan.listening":`待ち受け中`,"panel.lan.error":`起動に失敗`,"panel.sidecar.healthy":`実行中`,"panel.sidecar.starting":`起動中`,"panel.sidecar.restarting":`再起動中`,"panel.sidecar.error":`異常`,"panel.sidecar.stopped":`停止済み`,"panel.ago.justNow":`たった今`,"panel.ago.minutes":`{count} 分前`,"panel.ago.hours":`{count} 時間前`,"panel.ago.days":`{count} 日前`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`},ko:{"panel.status.connected":`연결됨`,"panel.status.connecting":`연결 중`,"panel.status.error":`종료됨`,"panel.status.off":`꺼짐`,"panel.lan.off":`꺼짐`,"panel.lan.listening":`수신 대기 중`,"panel.lan.error":`시작 실패`,"panel.sidecar.healthy":`실행 중`,"panel.sidecar.starting":`시작 중`,"panel.sidecar.restarting":`재시작 중`,"panel.sidecar.error":`오류`,"panel.sidecar.stopped":`중지됨`,"panel.ago.justNow":`방금`,"panel.ago.minutes":`{count}분 전`,"panel.ago.hours":`{count}시간 전`,"panel.ago.days":`{count}일 전`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`},de:{"panel.status.connected":`Verbunden`,"panel.status.connecting":`Verbinden…`,"panel.status.error":`Beendet`,"panel.status.off":`Aus`,"panel.lan.off":`Aus`,"panel.lan.listening":`Lauscht`,"panel.lan.error":`Start fehlgeschlagen`,"panel.sidecar.healthy":`Läuft`,"panel.sidecar.starting":`Startet…`,"panel.sidecar.restarting":`Startet neu…`,"panel.sidecar.error":`Fehler`,"panel.sidecar.stopped":`Gestoppt`,"panel.ago.justNow":`Gerade eben`,"panel.ago.minutes":`vor {count} Min.`,"panel.ago.hours":`vor {count} Std.`,"panel.ago.days":`vor {count} T.`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt koppeln.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`},es:{"panel.status.connected":`Conectado`,"panel.status.connecting":`Conectando…`,"panel.status.error":`Cerrado`,"panel.status.off":`Desactivado`,"panel.lan.off":`Desactivado`,"panel.lan.listening":`Escuchando`,"panel.lan.error":`Error al iniciar`,"panel.sidecar.healthy":`En marcha`,"panel.sidecar.starting":`Iniciando…`,"panel.sidecar.restarting":`Reiniciando…`,"panel.sidecar.error":`Error`,"panel.sidecar.stopped":`Detenido`,"panel.ago.justNow":`Ahora mismo`,"panel.ago.minutes":`hace {count} min`,"panel.ago.hours":`hace {count} h`,"panel.ago.days":`hace {count} d`,"panel.shell.deviceAllowed":`Los dispositivos nuevos ya pueden vincularse.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`},fr:{"panel.status.connected":`Connecté`,"panel.status.connecting":`Connexion…`,"panel.status.error":`Fermé`,"panel.status.off":`Désactivé`,"panel.lan.off":`Désactivé`,"panel.lan.listening":`En écoute`,"panel.lan.error":`Échec du démarrage`,"panel.sidecar.healthy":`En marche`,"panel.sidecar.starting":`Démarrage…`,"panel.sidecar.restarting":`Redémarrage…`,"panel.sidecar.error":`Erreur`,"panel.sidecar.stopped":`Arrêté`,"panel.ago.justNow":`À l'instant`,"panel.ago.minutes":`il y a {count} min`,"panel.ago.hours":`il y a {count} h`,"panel.ago.days":`il y a {count} j`,"panel.shell.deviceAllowed":`Les nouveaux appareils peuvent s'appairer.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`},pt:{"panel.status.connected":`Conectado`,"panel.status.connecting":`Conectando…`,"panel.status.error":`Fechado`,"panel.status.off":`Desativado`,"panel.lan.off":`Desativado`,"panel.lan.listening":`Escutando`,"panel.lan.error":`Falha ao iniciar`,"panel.sidecar.healthy":`Em execução`,"panel.sidecar.starting":`Iniciando…`,"panel.sidecar.restarting":`Reiniciando…`,"panel.sidecar.error":`Erro`,"panel.sidecar.stopped":`Parado`,"panel.ago.justNow":`Agora mesmo`,"panel.ago.minutes":`há {count} min`,"panel.ago.hours":`há {count} h`,"panel.ago.days":`há {count} d`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`},ru:{"panel.status.connected":`Подключено`,"panel.status.connecting":`Подключение…`,"panel.status.error":`Закрыто`,"panel.status.off":`Выключено`,"panel.lan.off":`Выключено`,"panel.lan.listening":`Прослушивание`,"panel.lan.error":`Не удалось запустить`,"panel.sidecar.healthy":`Работает`,"panel.sidecar.starting":`Запуск…`,"panel.sidecar.restarting":`Перезапуск…`,"panel.sidecar.error":`Ошибка`,"panel.sidecar.stopped":`Остановлен`,"panel.ago.justNow":`Только что`,"panel.ago.minutes":`{count} мин назад`,"panel.ago.hours":`{count} ч назад`,"panel.ago.days":`{count} дн. назад`,"panel.shell.deviceAllowed":`Новые устройства теперь могут пройти сопряжение.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как прежде.`}},{"zh-Hans":{"panel.shell.remoteEnabled":`已启用远程控制。`,"panel.shell.remoteDisabled":`已停用远程控制,手机将断开。`,"panel.shell.reconnecting":`已发起重连。`,"panel.shell.sidecarRestarted":`旁挂进程已重启。`,"panel.shell.revokeConfirm":`吊销全部设备授权?所有手机都要重新配对,这一步不能撤销。`,"panel.shell.revoked":`已吊销 {count} 个授权`,"panel.shell.revokedRelay":`(中转侧 {count} 个)`,"panel.shell.configSaved":`配置已保存。`,"panel.shell.lanSaved":`局域网配置已保存。`,"panel.shell.preferredAddress":`手机优先使用 {address}。`,"panel.shell.preferredAuto":`已改回按网卡顺序自动选。`,"panel.shell.unknownVersion":`未知版本`,"panel.shell.title":`移动端`,"panel.shell.subtitle":`把手机连上这台电脑上的 DSH`,"panel.shell.statusFailed":`读不到插件状态`,"panel.shell.readingStatus":`正在读取状态…`,"panel.shell.busy":`处理中…`,"panel.shell.deviceAllowed":`已允许新设备绑定。`,"panel.shell.deviceDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.shell.remoteEnabled":`已啟用遠端控制。`,"panel.shell.remoteDisabled":`已停用遠端控制,手機將斷開。`,"panel.shell.reconnecting":`已發起重新連線。`,"panel.shell.sidecarRestarted":`旁掛程序已重新啟動。`,"panel.shell.revokeConfirm":`吊銷全部裝置授權?所有手機都要重新配對,這一步不能撤銷。`,"panel.shell.revoked":`已吊銷 {count} 個授權`,"panel.shell.revokedRelay":`(中轉側 {count} 個)`,"panel.shell.configSaved":`設定已儲存。`,"panel.shell.lanSaved":`區域網路設定已儲存。`,"panel.shell.preferredAddress":`手機優先使用 {address}。`,"panel.shell.preferredAuto":`已改回依網卡順序自動選。`,"panel.shell.unknownVersion":`未知版本`,"panel.shell.title":`行動端`,"panel.shell.subtitle":`把手機連上這台電腦上的 DSH`,"panel.shell.statusFailed":`讀不到外掛狀態`,"panel.shell.readingStatus":`正在讀取狀態…`,"panel.shell.busy":`處理中…`,"panel.shell.deviceAllowed":`已允許新裝置綁定。`,"panel.shell.deviceDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.shell.remoteEnabled":`Remote control enabled.`,"panel.shell.remoteDisabled":`Remote control disabled — your phone will disconnect.`,"panel.shell.reconnecting":`Reconnecting.`,"panel.shell.sidecarRestarted":`Sidecar process restarted.`,"panel.shell.revokeConfirm":`Revoke all device authorisations? Every phone has to be paired again, and this cannot be undone.`,"panel.shell.revoked":`Revoked {count} authorisation(s)`,"panel.shell.revokedRelay":` ({count} on the relay)`,"panel.shell.configSaved":`Configuration saved.`,"panel.shell.lanSaved":`Local-network settings saved.`,"panel.shell.preferredAddress":`Your phone will prefer {address}.`,"panel.shell.preferredAuto":`Back to automatic order by network interface.`,"panel.shell.unknownVersion":`Unknown version`,"panel.shell.title":`Mobile`,"panel.shell.subtitle":`Connect your phone to DSH on this computer`,"panel.shell.statusFailed":`Could not read plugin status`,"panel.shell.readingStatus":`Reading status…`,"panel.shell.busy":`Working…`,"panel.shell.deviceAllowed":`New devices can pair now.`,"panel.shell.deviceDenied":`New devices are refused; phones already paired keep working.`},ja:{"panel.shell.remoteEnabled":`リモート操作をオンにしました。`,"panel.shell.remoteDisabled":`リモート操作をオフにしました。スマートフォンは切断されます。`,"panel.shell.reconnecting":`再接続を開始しました。`,"panel.shell.sidecarRestarted":`サイドカープロセスを再起動しました。`,"panel.shell.revokeConfirm":`すべてのデバイス認証を取り消しますか?すべてのスマートフォンで再ペアリングが必要になり、元に戻せません。`,"panel.shell.revoked":`{count} 件の認証を取り消しました`,"panel.shell.revokedRelay":`(リレー側 {count} 件)`,"panel.shell.configSaved":`設定を保存しました。`,"panel.shell.lanSaved":`LAN 設定を保存しました。`,"panel.shell.preferredAddress":`スマートフォンは {address} を優先します。`,"panel.shell.preferredAuto":`ネットワークインターフェース順の自動選択に戻しました。`,"panel.shell.unknownVersion":`不明なバージョン`,"panel.shell.title":`モバイル`,"panel.shell.subtitle":`このパソコンの DSH にスマートフォンをつなぐ`,"panel.shell.statusFailed":`プラグインの状態を取得できません`,"panel.shell.readingStatus":`状態を読み込み中…`,"panel.shell.busy":`処理中…`,"panel.shell.deviceAllowed":`新しいデバイスのペアリングを許可しました。`,"panel.shell.deviceDenied":`新しいデバイスの受け付けを停止しました。既にペアリング済みのスマートフォンはそのまま使えます。`},ko:{"panel.shell.remoteEnabled":`원격 제어를 켰습니다.`,"panel.shell.remoteDisabled":`원격 제어를 껐습니다. 휴대폰 연결이 끊깁니다.`,"panel.shell.reconnecting":`재연결을 시작했습니다.`,"panel.shell.sidecarRestarted":`사이드카 프로세스를 재시작했습니다.`,"panel.shell.revokeConfirm":`모든 기기 인증을 취소할까요? 모든 휴대폰을 다시 페어링해야 하며 되돌릴 수 없습니다.`,"panel.shell.revoked":`인증 {count}개를 취소했습니다`,"panel.shell.revokedRelay":` (릴레이 측 {count}개)`,"panel.shell.configSaved":`설정을 저장했습니다.`,"panel.shell.lanSaved":`LAN 설정을 저장했습니다.`,"panel.shell.preferredAddress":`휴대폰이 {address}을(를) 우선 사용합니다.`,"panel.shell.preferredAuto":`네트워크 인터페이스 순서 자동 선택으로 되돌렸습니다.`,"panel.shell.unknownVersion":`알 수 없는 버전`,"panel.shell.title":`모바일`,"panel.shell.subtitle":`이 컴퓨터의 DSH에 휴대폰을 연결`,"panel.shell.statusFailed":`플러그인 상태를 읽을 수 없습니다`,"panel.shell.readingStatus":`상태를 읽는 중…`,"panel.shell.busy":`처리 중…`,"panel.shell.deviceAllowed":`새 기기 페어링을 허용했습니다.`,"panel.shell.deviceDenied":`새 기기 수신을 중지했습니다. 이미 페어링된 휴대폰은 그대로 사용할 수 있습니다.`},de:{"panel.shell.remoteEnabled":`Fernsteuerung aktiviert.`,"panel.shell.remoteDisabled":`Fernsteuerung deaktiviert – dein Handy wird getrennt.`,"panel.shell.reconnecting":`Verbindung wird neu aufgebaut.`,"panel.shell.sidecarRestarted":`Sidecar-Prozess neu gestartet.`,"panel.shell.revokeConfirm":`Alle Geräteautorisierungen widerrufen? Jedes Handy muss neu gekoppelt werden, das lässt sich nicht rückgängig machen.`,"panel.shell.revoked":`{count} Autorisierung(en) widerrufen`,"panel.shell.revokedRelay":` ({count} auf dem Relay)`,"panel.shell.configSaved":`Konfiguration gespeichert.`,"panel.shell.lanSaved":`LAN-Einstellungen gespeichert.`,"panel.shell.preferredAddress":`Dein Handy bevorzugt {address}.`,"panel.shell.preferredAuto":`Wieder automatische Reihenfolge nach Netzwerkschnittstelle.`,"panel.shell.unknownVersion":`Unbekannte Version`,"panel.shell.title":`Mobil`,"panel.shell.subtitle":`Verbinde dein Handy mit DSH auf diesem Computer`,"panel.shell.statusFailed":`Plugin-Status nicht lesbar`,"panel.shell.readingStatus":`Status wird gelesen…`,"panel.shell.busy":`Wird verarbeitet…`,"panel.shell.deviceAllowed":`Neue Geräte können jetzt koppeln.`,"panel.shell.deviceDenied":`Neue Geräte werden abgelehnt; gekoppelte Handys funktionieren weiter.`},es:{"panel.shell.remoteEnabled":`Control remoto activado.`,"panel.shell.remoteDisabled":`Control remoto desactivado: tu teléfono se desconectará.`,"panel.shell.reconnecting":`Reconectando.`,"panel.shell.sidecarRestarted":`Proceso sidecar reiniciado.`,"panel.shell.revokeConfirm":`¿Revocar todas las autorizaciones de dispositivos? Todos los teléfonos deberán vincularse de nuevo y esto no se puede deshacer.`,"panel.shell.revoked":`{count} autorización(es) revocada(s)`,"panel.shell.revokedRelay":` ({count} en el retransmisor)`,"panel.shell.configSaved":`Configuración guardada.`,"panel.shell.lanSaved":`Ajustes de LAN guardados.`,"panel.shell.preferredAddress":`Tu teléfono preferirá {address}.`,"panel.shell.preferredAuto":`De vuelta al orden automático por interfaz de red.`,"panel.shell.unknownVersion":`Versión desconocida`,"panel.shell.title":`Móvil`,"panel.shell.subtitle":`Conecta tu teléfono con DSH en este ordenador`,"panel.shell.statusFailed":`No se pudo leer el estado del complemento`,"panel.shell.readingStatus":`Leyendo el estado…`,"panel.shell.busy":`Procesando…`,"panel.shell.deviceAllowed":`Los dispositivos nuevos ya pueden vincularse.`,"panel.shell.deviceDenied":`Se rechazan los dispositivos nuevos; los teléfonos ya vinculados siguen funcionando.`},fr:{"panel.shell.remoteEnabled":`Contrôle à distance activé.`,"panel.shell.remoteDisabled":`Contrôle à distance désactivé : ton téléphone va se déconnecter.`,"panel.shell.reconnecting":`Reconnexion en cours.`,"panel.shell.sidecarRestarted":`Processus sidecar redémarré.`,"panel.shell.revokeConfirm":`Révoquer toutes les autorisations d'appareil ? Chaque téléphone devra être appairé à nouveau, et c'est irréversible.`,"panel.shell.revoked":`{count} autorisation(s) révoquée(s)`,"panel.shell.revokedRelay":` ({count} côté relais)`,"panel.shell.configSaved":`Configuration enregistrée.`,"panel.shell.lanSaved":`Réglages réseau local enregistrés.`,"panel.shell.preferredAddress":`Ton téléphone privilégiera {address}.`,"panel.shell.preferredAuto":`Retour à l'ordre automatique par interface réseau.`,"panel.shell.unknownVersion":`Version inconnue`,"panel.shell.title":`Mobile`,"panel.shell.subtitle":`Connecte ton téléphone à DSH sur cet ordinateur`,"panel.shell.statusFailed":`Impossible de lire l'état du greffon`,"panel.shell.readingStatus":`Lecture de l'état…`,"panel.shell.busy":`En cours…`,"panel.shell.deviceAllowed":`Les nouveaux appareils peuvent s'appairer.`,"panel.shell.deviceDenied":`Les nouveaux appareils sont refusés ; les téléphones déjà appairés continuent de fonctionner.`},pt:{"panel.shell.remoteEnabled":`Controle remoto ativado.`,"panel.shell.remoteDisabled":`Controle remoto desativado — o celular vai se desconectar.`,"panel.shell.reconnecting":`Reconectando.`,"panel.shell.sidecarRestarted":`Processo sidecar reiniciado.`,"panel.shell.revokeConfirm":`Revogar todas as autorizações de dispositivos? Todos os celulares precisarão ser emparelhados de novo, e isso não pode ser desfeito.`,"panel.shell.revoked":`{count} autorização(ões) revogada(s)`,"panel.shell.revokedRelay":` ({count} no relay)`,"panel.shell.configSaved":`Configuração salva.`,"panel.shell.lanSaved":`Configurações de rede local salvas.`,"panel.shell.preferredAddress":`O celular vai preferir {address}.`,"panel.shell.preferredAuto":`De volta à ordem automática por interface de rede.`,"panel.shell.unknownVersion":`Versão desconhecida`,"panel.shell.title":`Celular`,"panel.shell.subtitle":`Conecte o celular ao DSH neste computador`,"panel.shell.statusFailed":`Não foi possível ler o status do plugin`,"panel.shell.readingStatus":`Lendo o status…`,"panel.shell.busy":`Processando…`,"panel.shell.deviceAllowed":`Novos dispositivos já podem ser emparelhados.`,"panel.shell.deviceDenied":`Novos dispositivos são recusados; os celulares já emparelhados continuam funcionando.`},ru:{"panel.shell.remoteEnabled":`Удалённое управление включено.`,"panel.shell.remoteDisabled":`Удалённое управление отключено — телефон отключится.`,"panel.shell.reconnecting":`Переподключение.`,"panel.shell.sidecarRestarted":`Процесс sidecar перезапущен.`,"panel.shell.revokeConfirm":`Отозвать все разрешения устройств? Каждому телефону придётся пройти сопряжение заново, отменить это нельзя.`,"panel.shell.revoked":`Отозвано авторизаций: {count}`,"panel.shell.revokedRelay":` ({count} на ретрансляторе)`,"panel.shell.configSaved":`Конфигурация сохранена.`,"panel.shell.lanSaved":`Настройки локальной сети сохранены.`,"panel.shell.preferredAddress":`Телефон будет использовать {address}.`,"panel.shell.preferredAuto":`Снова автоматический выбор по порядку интерфейсов.`,"panel.shell.unknownVersion":`Неизвестная версия`,"panel.shell.title":`Мобильный`,"panel.shell.subtitle":`Подключи телефон к DSH на этом компьютере`,"panel.shell.statusFailed":`Не удалось прочитать состояние плагина`,"panel.shell.readingStatus":`Чтение состояния…`,"panel.shell.busy":`Обработка…`,"panel.shell.deviceAllowed":`Новые устройства теперь могут пройти сопряжение.`,"panel.shell.deviceDenied":`Новые устройства отклоняются; уже сопряжённые телефоны работают как прежде.`}},{"zh-Hans":{"panel.connection.remoteControl":`远程控制`,"panel.connection.deviceName":`设备名`,"panel.connection.instanceId":`实例 ID`,"panel.connection.platform":`平台`,"panel.connection.relayUrl":`中转地址`,"panel.connection.tunnel":`中转隧道`,"panel.connection.lan":`局域网直连`,"panel.connection.sidecar":`旁挂进程`,"panel.connection.sidecarRestarts":`已重启 {count} 次`,"panel.connection.mirror":`会话镜像`,"panel.connection.mirrorOk":`推送正常`,"panel.connection.mirrorOff":`未推送`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.connection.relayNeedsSecretBody":`中转服务器开了准入,当前连接被拒绝。这台中转需要注册密钥,而面板已经不再提供填写入口 —— 如果是自己搭的中转,把它改成开放模式,或按部署文档在宿主侧配置。`,"panel.connection.relayRejectedBody":`中转开了实例白名单,而上面的实例 ID 不在名单里。把这个实例 ID 交给中转的部署者,让他加进 instances.json。`},"zh-Hant":{"panel.connection.remoteControl":`遠端控制`,"panel.connection.deviceName":`裝置名稱`,"panel.connection.instanceId":`實例 ID`,"panel.connection.platform":`平台`,"panel.connection.relayUrl":`中轉位址`,"panel.connection.tunnel":`中轉通道`,"panel.connection.lan":`區域網路直連`,"panel.connection.sidecar":`旁掛程序`,"panel.connection.sidecarRestarts":`已重新啟動 {count} 次`,"panel.connection.mirror":`會話鏡像`,"panel.connection.mirrorOk":`推送正常`,"panel.connection.mirrorOff":`未推送`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.connection.relayNeedsSecretBody":`中轉伺服器開了准入,目前連線被拒絕。這台中轉需要註冊金鑰,而面板已經不再提供填寫入口 —— 如果是自己架設的中轉,請改成開放模式,或依部署文件在宿主端設定。`,"panel.connection.relayRejectedBody":`中轉開了執行個體白名單,而上面的執行個體 ID 不在名單裡。把這個執行個體 ID 交給中轉的部署者,請他加進 instances.json。`},en:{"panel.connection.remoteControl":`Remote control`,"panel.connection.deviceName":`Device name`,"panel.connection.instanceId":`Instance ID`,"panel.connection.platform":`Platform`,"panel.connection.relayUrl":`Relay address`,"panel.connection.tunnel":`Relay tunnel`,"panel.connection.lan":`LAN direct`,"panel.connection.sidecar":`Sidecar process`,"panel.connection.sidecarRestarts":`restarted {count} time(s)`,"panel.connection.mirror":`Session mirror`,"panel.connection.mirrorOk":`Pushing`,"panel.connection.mirrorOff":`Not pushing`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.connection.relayNeedsSecretBody":`The relay requires admission, so this connection is refused. It needs a registration secret, and the panel no longer has a field for it — if you run this relay yourself, switch it to open mode or configure it on the host as described in the deployment docs.`,"panel.connection.relayRejectedBody":`The relay has an instance allowlist and the instance ID above is not on it. Hand that ID to whoever deployed the relay so they can add it to instances.json.`},ja:{"panel.connection.remoteControl":`リモート操作`,"panel.connection.deviceName":`デバイス名`,"panel.connection.instanceId":`インスタンス ID`,"panel.connection.platform":`プラットフォーム`,"panel.connection.relayUrl":`リレーのアドレス`,"panel.connection.tunnel":`リレートンネル`,"panel.connection.lan":`LAN 直結`,"panel.connection.sidecar":`サイドカープロセス`,"panel.connection.sidecarRestarts":`{count} 回再起動しました`,"panel.connection.mirror":`セッションのミラー`,"panel.connection.mirrorOk":`送信中`,"panel.connection.mirrorOff":`送信していません`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.connection.relayNeedsSecretBody":`リレーが接続許可を有効にしているため、この接続は拒否されました。このリレーは登録シークレットを必要としますが、パネルには入力欄がなくなりました。自分で運用しているリレーなら開放モードに変更するか、配備ドキュメントに従ってホスト側で設定してください。`,"panel.connection.relayRejectedBody":`リレーにはインスタンスの許可リストがあり、上のインスタンス ID はそこに入っていません。この ID をリレーの配備者に伝え、instances.json に追加してもらってください。`},ko:{"panel.connection.remoteControl":`원격 제어`,"panel.connection.deviceName":`기기 이름`,"panel.connection.instanceId":`인스턴스 ID`,"panel.connection.platform":`플랫폼`,"panel.connection.relayUrl":`릴레이 주소`,"panel.connection.tunnel":`릴레이 터널`,"panel.connection.lan":`LAN 직접 연결`,"panel.connection.sidecar":`사이드카 프로세스`,"panel.connection.sidecarRestarts":`{count}회 재시작됨`,"panel.connection.mirror":`세션 미러`,"panel.connection.mirrorOk":`전송 중`,"panel.connection.mirrorOff":`전송 안 함`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.connection.relayNeedsSecretBody":`릴레이에서 승인 모드를 켜 두어 현재 연결이 거부되었습니다. 이 릴레이는 등록 시크릿이 필요하지만 패널에는 더 이상 입력란이 없습니다. 직접 운영하는 릴레이라면 개방 모드로 바꾸거나 배포 문서대로 호스트에서 설정하세요.`,"panel.connection.relayRejectedBody":`릴레이에 인스턴스 허용 목록이 있는데 위의 인스턴스 ID가 목록에 없습니다. 이 ID를 릴레이 배포자에게 전달해 instances.json에 추가하도록 하세요.`},de:{"panel.connection.remoteControl":`Fernsteuerung`,"panel.connection.deviceName":`Gerätename`,"panel.connection.instanceId":`Instanz-ID`,"panel.connection.platform":`Plattform`,"panel.connection.relayUrl":`Relay-Adresse`,"panel.connection.tunnel":`Relay-Tunnel`,"panel.connection.lan":`LAN-Direktverbindung`,"panel.connection.sidecar":`Sidecar-Prozess`,"panel.connection.sidecarRestarts":`{count}-Mal neu gestartet`,"panel.connection.mirror":`Sitzungsspiegelung`,"panel.connection.mirrorOk":`Wird gesendet`,"panel.connection.mirrorOff":`Wird nicht gesendet`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Das Relay lehnt dieses Gerät ab`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.connection.relayNeedsSecretBody":`Das Relay verlangt eine Freigabe, deshalb wird diese Verbindung abgelehnt. Es braucht ein Registrierungsgeheimnis, und das Panel bietet dafür keinen Eingabeort mehr — wenn du dieses Relay selbst betreibst, stelle es auf offenen Modus um oder konfiguriere es wie in der Deployment-Doku beschrieben auf dem Host.`,"panel.connection.relayRejectedBody":`Das Relay nutzt eine Instanz-Whitelist, und die Instanz-ID oben steht nicht darauf. Gib diese ID der Person, die das Relay betreibt, damit sie sie in instances.json einträgt.`},es:{"panel.connection.remoteControl":`Control remoto`,"panel.connection.deviceName":`Nombre del dispositivo`,"panel.connection.instanceId":`ID de instancia`,"panel.connection.platform":`Plataforma`,"panel.connection.relayUrl":`Dirección del retransmisor`,"panel.connection.tunnel":`Túnel del retransmisor`,"panel.connection.lan":`Conexión directa LAN`,"panel.connection.sidecar":`Proceso sidecar`,"panel.connection.sidecarRestarts":`Reiniciado {count} veces`,"panel.connection.mirror":`Espejo de sesión`,"panel.connection.mirrorOk":`Enviando`,"panel.connection.mirrorOff":`Sin enviar`,"panel.connection.state":`Estado de la conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(puerto preferido ocupado, se cambió solo)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`La conexión directa LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.connection.relayNeedsSecretBody":`El retransmisor exige admisión, así que esta conexión se rechaza. Necesita una clave de registro y el panel ya no ofrece dónde introducirla: si este retransmisor lo gestionas tú, ponlo en modo abierto o configúralo en el host como indica la documentación de despliegue.`,"panel.connection.relayRejectedBody":`El retransmisor usa una lista de instancias permitidas y el ID de instancia de arriba no está en ella. Pasa ese ID a quien despliegue el retransmisor para que lo añada a instances.json.`},fr:{"panel.connection.remoteControl":`Contrôle à distance`,"panel.connection.deviceName":`Nom de l'appareil`,"panel.connection.instanceId":`ID d'instance`,"panel.connection.platform":`Plateforme`,"panel.connection.relayUrl":`Adresse du relais`,"panel.connection.tunnel":`Tunnel du relais`,"panel.connection.lan":`Connexion directe LAN`,"panel.connection.sidecar":`Processus sidecar`,"panel.connection.sidecarRestarts":`Redémarré {count} fois`,"panel.connection.mirror":`Miroir de session`,"panel.connection.mirrorOk":`Envoi en cours`,"panel.connection.mirrorOff":`Aucun envoi`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Le relais refuse cet appareil`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`La connexion directe LAN est désactivée`,"panel.connection.lanPort":`Port LAN`,"panel.connection.relayNeedsSecretBody":`Le relais exige une autorisation : cette connexion est refusée. Il nécessite un secret d'enregistrement et le panneau ne propose plus de champ pour le saisir — si vous exploitez ce relais vous-même, passez-le en mode ouvert ou configurez-le côté hôte comme décrit dans la documentation de déploiement.`,"panel.connection.relayRejectedBody":`Le relais applique une liste d'instances autorisées et l'ID d'instance ci-dessus n'y figure pas. Transmets cet ID à qui déploie le relais pour qu'il l'ajoute à instances.json.`},pt:{"panel.connection.remoteControl":`Controle remoto`,"panel.connection.deviceName":`Nome do dispositivo`,"panel.connection.instanceId":`ID da instância`,"panel.connection.platform":`Plataforma`,"panel.connection.relayUrl":`Endereço do relay`,"panel.connection.tunnel":`Túnel do relay`,"panel.connection.lan":`Conexão direta LAN`,"panel.connection.sidecar":`Processo sidecar`,"panel.connection.sidecarRestarts":`Reiniciado {count} vezes`,"panel.connection.mirror":`Espelho de sessão`,"panel.connection.mirrorOk":`Enviando`,"panel.connection.mirrorOff":`Sem envio`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay rejeita este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(porta preferida ocupada, trocada automaticamente)`,"panel.pairing.sidecarRestartFailed":`Falha no último reinício do sidecar`,"panel.onboarding.lanOff":`A conexão direta LAN está desativada`,"panel.connection.lanPort":`Porta LAN`,"panel.connection.relayNeedsSecretBody":`O relay exige admissão, então esta conexão é recusada. Ele precisa de uma chave de registro e o painel não oferece mais onde informá-la — se você mesmo opera esse relay, mude-o para o modo aberto ou configure-o no host conforme a documentação de implantação.`,"panel.connection.relayRejectedBody":`O relay usa uma lista de instâncias permitidas e o ID da instância acima não está nela. Passe esse ID a quem implantou o relay para adicioná-lo a instances.json.`},ru:{"panel.connection.remoteControl":`Удалённое управление`,"panel.connection.deviceName":`Имя устройства`,"panel.connection.instanceId":`ID экземпляра`,"panel.connection.platform":`Платформа`,"panel.connection.relayUrl":`Адрес ретранслятора`,"panel.connection.tunnel":`Туннель ретранслятора`,"panel.connection.lan":`Прямое подключение по локальной сети`,"panel.connection.sidecar":`Процесс sidecar`,"panel.connection.sidecarRestarts":`Перезапущен {count} раз`,"panel.connection.mirror":`Зеркалирование сеанса`,"panel.connection.mirrorOk":`Отправляется`,"panel.connection.mirrorOff":`Не отправляется`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, переключено автоматически)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети отключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.connection.relayNeedsSecretBody":`Ретранслятор требует допуска, поэтому это подключение отклонено. Ему нужен ключ регистрации, а в панели больше нет поля для его ввода — если вы сами разворачиваете этот ретранслятор, включите открытый режим или настройте его на хосте, как описано в документации по развёртыванию.`,"panel.connection.relayRejectedBody":`Ретранслятор использует список разрешённых экземпляров, а ID экземпляра выше в нём нет. Передайте этот ID тому, кто развернул ретранслятор, чтобы он добавил его в instances.json.`}},{"zh-Hans":{"panel.pairing.copied":`已复制`,"panel.pairing.noQr":`还没取到二维码`,"panel.pairing.qr":`二维码`,"panel.pairing.policy":`配对策略`,"panel.pairing.allowPairing":`允许新设备配对`,"panel.pairing.port":`局域网端口`,"panel.pairing.phoneAddress":`本地识别地址`,"panel.pairing.hidden":`已隐藏`,"panel.pairing.noAddress":`还没取到地址`,"panel.pairing.cardTitle":`配对与二维码`,"panel.pairing.qrFailed":`拿不到二维码`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.portTitle":`修改局域网端口`,"panel.pairing.portHint":`1024–65535 之间的整数;首选端口被占用时,宿主会自动换一个。`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.pairing.qrZoom":`看大图`,"panel.pairing.openConfig":`网络配置`,"panel.pairing.reconnect":`重新连接`,"panel.pairing.checkNetwork":`检查网络`,"panel.pairing.revokeAll":`吊销全部设备授权`},"zh-Hant":{"panel.pairing.copied":`已複製`,"panel.pairing.noQr":`還沒取得 QR 碼`,"panel.pairing.qr":`QR 碼`,"panel.pairing.policy":`配對策略`,"panel.pairing.allowPairing":`允許新裝置配對`,"panel.pairing.port":`區域網路連接埠`,"panel.pairing.phoneAddress":`本機識別位址`,"panel.pairing.hidden":`已隱藏`,"panel.pairing.noAddress":`還沒取得位址`,"panel.pairing.cardTitle":`配對與 QR 碼`,"panel.pairing.qrFailed":`拿不到 QR 碼`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.portTitle":`修改區域網路連接埠`,"panel.pairing.portHint":`1024–65535 之間的整數;首選連接埠被佔用時,宿主會自動換一個。`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.pairing.qrZoom":`看大圖`,"panel.pairing.openConfig":`網路設定`,"panel.pairing.reconnect":`重新連線`,"panel.pairing.checkNetwork":`檢查網路`,"panel.pairing.revokeAll":`撤銷全部裝置授權`},en:{"panel.pairing.copied":`Copied`,"panel.pairing.noQr":`QR code not loaded yet`,"panel.pairing.qr":`QR code`,"panel.pairing.policy":`Pairing policy`,"panel.pairing.allowPairing":`Allow new devices to pair`,"panel.pairing.port":`LAN port`,"panel.pairing.phoneAddress":`Local address`,"panel.pairing.hidden":`Hidden`,"panel.pairing.noAddress":`Address not available yet`,"panel.pairing.cardTitle":`Pairing & QR code`,"panel.pairing.qrFailed":`Could not get the QR code`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.portTitle":`Change the LAN port`,"panel.pairing.portHint":`An integer from 1024 to 65535; if that port is taken, the host picks another one automatically.`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.pairing.qrZoom":`Enlarge QR`,"panel.pairing.openConfig":`Network settings`,"panel.pairing.reconnect":`Reconnect`,"panel.pairing.checkNetwork":`Check network`,"panel.pairing.revokeAll":`Revoke all device grants`},ja:{"panel.pairing.copied":`コピーしました`,"panel.pairing.noQr":`QR コードをまだ取得していません`,"panel.pairing.qr":`QR コード`,"panel.pairing.policy":`ペアリングポリシー`,"panel.pairing.allowPairing":`新しいデバイスのペアリングを許可`,"panel.pairing.port":`LAN ポート`,"panel.pairing.phoneAddress":`ローカルアドレス`,"panel.pairing.hidden":`非表示`,"panel.pairing.noAddress":`アドレスをまだ取得していません`,"panel.pairing.cardTitle":`ペアリングと QR コード`,"panel.pairing.qrFailed":`QR コードを取得できません`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.portTitle":`LAN ポートを変更`,"panel.pairing.portHint":`1024〜65535 の整数。使用中なら宿主が自動で別のポートに切り替えます。`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.pairing.qrZoom":`拡大表示`,"panel.pairing.openConfig":`ネットワーク設定`,"panel.pairing.reconnect":`再接続`,"panel.pairing.checkNetwork":`ネットワークを確認`,"panel.pairing.revokeAll":`すべてのデバイス認証を取り消す`},ko:{"panel.pairing.copied":`복사됨`,"panel.pairing.noQr":`QR 코드를 아직 가져오지 못했습니다`,"panel.pairing.qr":`QR 코드`,"panel.pairing.policy":`페어링 정책`,"panel.pairing.allowPairing":`새 기기 페어링 허용`,"panel.pairing.port":`LAN 포트`,"panel.pairing.phoneAddress":`로컬 주소`,"panel.pairing.hidden":`숨김`,"panel.pairing.noAddress":`주소를 아직 가져오지 못했습니다`,"panel.pairing.cardTitle":`페어링 및 QR 코드`,"panel.pairing.qrFailed":`QR 코드를 가져올 수 없습니다`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.portTitle":`LAN 포트 변경`,"panel.pairing.portHint":`1024~65535 사이의 정수. 사용 중이면 호스트가 자동으로 다른 포트를 씁니다.`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.pairing.qrZoom":`크게 보기`,"panel.pairing.openConfig":`네트워크 설정`,"panel.pairing.reconnect":`다시 연결`,"panel.pairing.checkNetwork":`네트워크 확인`,"panel.pairing.revokeAll":`모든 기기 권한 취소`},de:{"panel.pairing.copied":`Kopiert`,"panel.pairing.noQr":`Noch kein QR-Code`,"panel.pairing.qr":`QR-Code`,"panel.pairing.policy":`Kopplungsrichtlinie`,"panel.pairing.allowPairing":`Neue Geräte koppeln lassen`,"panel.pairing.port":`LAN-Port`,"panel.pairing.phoneAddress":`Lokale Adresse`,"panel.pairing.hidden":`Ausgeblendet`,"panel.pairing.noAddress":`Noch keine Adresse`,"panel.pairing.cardTitle":`Koppeln & QR-Code`,"panel.pairing.qrFailed":`QR-Code nicht verfügbar`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.portTitle":`LAN-Port ändern`,"panel.pairing.portHint":`Ganzzahl zwischen 1024 und 65535; ist der Port belegt, nimmt der Host automatisch einen anderen.`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung aus`,"panel.connection.lanPort":`LAN-Port`,"panel.pairing.qrZoom":`QR-Code vergrößern`,"panel.pairing.openConfig":`Netzwerkeinstellungen`,"panel.pairing.reconnect":`Neu verbinden`,"panel.pairing.checkNetwork":`Netzwerk prüfen`,"panel.pairing.revokeAll":`Alle Geräteberechtigungen widerrufen`},es:{"panel.pairing.copied":`Copiado`,"panel.pairing.noQr":`Aún no hay código QR`,"panel.pairing.qr":`Código QR`,"panel.pairing.policy":`Política de vinculación`,"panel.pairing.allowPairing":`Permitir emparejar dispositivos nuevos`,"panel.pairing.port":`Puerto LAN`,"panel.pairing.phoneAddress":`Dirección local`,"panel.pairing.hidden":`Oculto`,"panel.pairing.noAddress":`Aún no hay dirección`,"panel.pairing.cardTitle":`Vinculación y código QR`,"panel.pairing.qrFailed":`Código QR no disponible`,"panel.connection.state":`Estado de la conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido está ocupado; se cambió solo)`,"panel.pairing.portTitle":`Cambiar el puerto de LAN`,"panel.pairing.portHint":`Un entero entre 1024 y 65535; si está ocupado, el host elige otro automáticamente.`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`Conexión directa LAN desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.pairing.qrZoom":`Ampliar el código QR`,"panel.pairing.openConfig":`Ajustes de red`,"panel.pairing.reconnect":`Reconectar`,"panel.pairing.checkNetwork":`Comprobar la red`,"panel.pairing.revokeAll":`Revocar todos los permisos de dispositivos`},fr:{"panel.pairing.copied":`Copié`,"panel.pairing.noQr":`Pas encore de code QR`,"panel.pairing.qr":`Code QR`,"panel.pairing.policy":`Politique d'appairage`,"panel.pairing.allowPairing":`Autoriser l'appairage de nouveaux appareils`,"panel.pairing.port":`Port réseau local`,"panel.pairing.phoneAddress":`Adresse locale`,"panel.pairing.hidden":`Masqué`,"panel.pairing.noAddress":`Pas encore d'adresse`,"panel.pairing.cardTitle":`Appairage et code QR`,"panel.pairing.qrFailed":`Code QR indisponible`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`Code QR masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.portTitle":`Modifier le port LAN`,"panel.pairing.portHint":`Un entier entre 1024 et 65535 ; si le port est occupé, l’hôte en choisit un autre automatiquement.`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`Connexion directe par réseau local désactivée`,"panel.connection.lanPort":`Port réseau local`,"panel.pairing.qrZoom":`Agrandir le code QR`,"panel.pairing.openConfig":`Réglages réseau`,"panel.pairing.reconnect":`Reconnecter`,"panel.pairing.checkNetwork":`Vérifier le réseau`,"panel.pairing.revokeAll":`Révoquer toutes les autorisations d'appareil`},pt:{"panel.pairing.copied":`Copiado`,"panel.pairing.noQr":`Ainda sem código QR`,"panel.pairing.qr":`Código QR`,"panel.pairing.policy":`Política de emparelhamento`,"panel.pairing.allowPairing":`Permitir emparelhar novos dispositivos`,"panel.pairing.port":`Porta da rede local`,"panel.pairing.phoneAddress":`Endereço local`,"panel.pairing.hidden":`Oculto`,"panel.pairing.noAddress":`Ainda sem endereço`,"panel.pairing.cardTitle":`Emparelhamento e código QR`,"panel.pairing.qrFailed":`Código QR indisponível`,"panel.connection.state":`Status da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay recusa este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(porta preferida ocupada; trocada automaticamente)`,"panel.pairing.portTitle":`Alterar a porta da LAN`,"panel.pairing.portHint":`Um inteiro entre 1024 e 65535; se estiver ocupado, o host escolhe outro automaticamente.`,"panel.pairing.sidecarRestartFailed":`Falhou o último reinício do sidecar`,"panel.onboarding.lanOff":`Conexão direta LAN desativada`,"panel.connection.lanPort":`Porta da rede local`,"panel.pairing.qrZoom":`Ampliar o código QR`,"panel.pairing.openConfig":`Configurações de rede`,"panel.pairing.reconnect":`Reconectar`,"panel.pairing.checkNetwork":`Verificar a rede`,"panel.pairing.revokeAll":`Revogar todas as autorizações de dispositivos`},ru:{"panel.pairing.copied":`Скопировано`,"panel.pairing.noQr":`QR-код ещё не получен`,"panel.pairing.qr":`QR-код`,"panel.pairing.policy":`Политика сопряжения`,"panel.pairing.allowPairing":`Разрешить сопряжение новых устройств`,"panel.pairing.port":`Порт локальной сети`,"panel.pairing.phoneAddress":`Локальный адрес`,"panel.pairing.hidden":`Скрыто`,"panel.pairing.noAddress":`Адрес ещё не получен`,"panel.pairing.cardTitle":`Сопряжение и QR-код`,"panel.pairing.qrFailed":`QR-код недоступен`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, переключено автоматически)`,"panel.pairing.portTitle":`Изменить порт локальной сети`,"panel.pairing.portHint":`Целое число от 1024 до 65535; если порт занят, хост сам выберет другой.`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.pairing.qrZoom":`Увеличить QR-код`,"panel.pairing.openConfig":`Настройки сети`,"panel.pairing.reconnect":`Переподключиться`,"panel.pairing.checkNetwork":`Проверить сеть`,"panel.pairing.revokeAll":`Отозвать все разрешения устройств`}},{"zh-Hans":{"panel.address.lan":`局域网地址`,"panel.address.lanPlaceholder":`例如 192.168.1.20`,"panel.address.lanUnknown":`这个地址不在本机检测到的网络地址里,手机拨不到它。`,"panel.address.ipv6":`IPv6 直连`,"panel.address.public":`公网地址`,"panel.address.empty":`还没取到地址`,"panel.address.ipv6Hint":`(手机按实测择优)`,"panel.address.publicHint":`(不在二维码里)`,"panel.address.hint":`手机先试选中的那条,试不通会自动换下一条。`,"panel.address.pick":`手机优先用这条`,"panel.address.direct":`直连地址`,"panel.address.directPlaceholder":`https://你的穿透域名:8443`,"panel.address.ipv6Url":`IPv6 直连地址`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`内网穿透地址`,"panel.relay.selected":`已选`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.address.ipv6Pick":`{kind}(手机按实测择优)`},"zh-Hant":{"panel.address.lan":`區域網路位址`,"panel.address.lanPlaceholder":`例如 192.168.1.20`,"panel.address.lanUnknown":`這個位址不在本機偵測到的網路位址裡,手機撥不到它。`,"panel.address.ipv6":`IPv6 直連`,"panel.address.public":`公網位址`,"panel.address.empty":`還沒取得位址`,"panel.address.ipv6Hint":`(手機依實測擇優)`,"panel.address.publicHint":`(不在 QR 碼裡)`,"panel.address.hint":`手機先試選中的那條,試不通會自動換下一條。`,"panel.address.pick":`手機優先使用這條`,"panel.address.direct":`直連位址`,"panel.address.directPlaceholder":`https://你的穿透網域:8443`,"panel.address.ipv6Url":`IPv6 直連位址`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`內網穿透位址`,"panel.relay.selected":`已選`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.address.ipv6Pick":`{kind}(手機依實測擇優)`},en:{"panel.address.lan":`LAN address`,"panel.address.lanPlaceholder":`e.g. 192.168.1.20`,"panel.address.lanUnknown":`That address is not one of this machine’s detected addresses, so the phone cannot reach it.`,"panel.address.ipv6":`IPv6 direct`,"panel.address.public":`Public address`,"panel.address.empty":`Address not available yet`,"panel.address.ipv6Hint":` (phone picks the fastest)`,"panel.address.publicHint":` (not in the QR code)`,"panel.address.hint":`Your phone tries the selected one first and falls back automatically.`,"panel.address.pick":`Prefer this one on the phone`,"panel.address.direct":`Direct address`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 direct address`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Tunnel address`,"panel.relay.selected":`Selected`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.address.ipv6Pick":`{kind} (the phone picks whichever is faster)`},ja:{"panel.address.lan":`LAN アドレス`,"panel.address.lanPlaceholder":`例: 192.168.1.20`,"panel.address.lanUnknown":`このアドレスはこのマシンで検出されたものではないため、スマホから到達できません。`,"panel.address.ipv6":`IPv6 直結`,"panel.address.public":`パブリックアドレス`,"panel.address.empty":`アドレスをまだ取得していません`,"panel.address.ipv6Hint":`(スマートフォンが実測で選択)`,"panel.address.publicHint":`(QR コードには入りません)`,"panel.address.hint":`スマートフォンは選択したものを先に試し、通らなければ自動で次に切り替えます。`,"panel.address.pick":`スマートフォンで優先する`,"panel.address.direct":`直接接続アドレス`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 直接接続アドレス`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`トンネルのアドレス`,"panel.relay.selected":`選択済み`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.address.ipv6Pick":`{kind}(実測で速い方をスマホが選びます)`},ko:{"panel.address.lan":`LAN 주소`,"panel.address.lanPlaceholder":`예: 192.168.1.20`,"panel.address.lanUnknown":`이 주소는 이 기기에서 감지된 주소가 아니어서 휴대폰이 연결할 수 없습니다.`,"panel.address.ipv6":`IPv6 직접 연결`,"panel.address.public":`공인 주소`,"panel.address.empty":`주소를 아직 가져오지 못했습니다`,"panel.address.ipv6Hint":` (휴대폰이 실측으로 선택)`,"panel.address.publicHint":` (QR 코드에 없음)`,"panel.address.hint":`휴대폰은 선택한 주소를 먼저 시도하고, 안 되면 자동으로 다음으로 넘어갑니다.`,"panel.address.pick":`휴대폰에서 우선 사용`,"panel.address.direct":`직접 연결 주소`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6 직접 연결 주소`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`터널 주소`,"panel.relay.selected":`선택됨`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.address.ipv6Pick":`{kind} (휴대폰이 실측으로 더 빠른 쪽을 고릅니다)`},de:{"panel.address.lan":`LAN-Adresse`,"panel.address.lanPlaceholder":`z. B. 192.168.1.20`,"panel.address.lanUnknown":`Diese Adresse gehört nicht zu den erkannten Adressen dieses Rechners – das Handy erreicht sie nicht.`,"panel.address.ipv6":`IPv6 direkt`,"panel.address.public":`Öffentliche Adresse`,"panel.address.empty":`Adresse noch nicht verfügbar`,"panel.address.ipv6Hint":`(Handy wählt das schnellste)`,"panel.address.publicHint":`(nicht im QR-Code)`,"panel.address.hint":`Dein Handy versucht zuerst die gewählte und wechselt automatisch zur nächsten.`,"panel.address.pick":`Auf dem Handy bevorzugen`,"panel.address.direct":`Direktadresse`,"panel.address.directPlaceholder":`https://dein-tunnel.example.com:8443`,"panel.address.ipv6Url":`IPv6-Direktadresse`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Tunnel-Adresse`,"panel.relay.selected":`Ausgewählt`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.address.ipv6Pick":`{kind} (Handy wählt das schnellste)`},es:{"panel.address.lan":`Dirección LAN`,"panel.address.lanPlaceholder":`p. ej., 192.168.1.20`,"panel.address.lanUnknown":`Esa dirección no está entre las detectadas en esta máquina, así que el teléfono no puede alcanzarla.`,"panel.address.ipv6":`IPv6 directa`,"panel.address.public":`Dirección pública`,"panel.address.empty":`Dirección aún no disponible`,"panel.address.ipv6Hint":`(el teléfono elige el más rápido)`,"panel.address.publicHint":`(no está en el código QR)`,"panel.address.hint":`Tu teléfono prueba primero la elegida y cambia solo a la siguiente.`,"panel.address.pick":`Preferir en el teléfono`,"panel.address.direct":`Dirección directa`,"panel.address.directPlaceholder":`https://tu-tunel.example.com:8443`,"panel.address.ipv6Url":`Dirección directa IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Dirección de túnel`,"panel.relay.selected":`Seleccionado`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; se cambió solo)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`Conexión directa LAN desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.address.ipv6Pick":`{kind} (el teléfono elige el más rápido)`},fr:{"panel.address.lan":`Adresse réseau local`,"panel.address.lanPlaceholder":`ex. 192.168.1.20`,"panel.address.lanUnknown":`Cette adresse ne fait pas partie de celles détectées sur cette machine : le téléphone ne peut pas l’atteindre.`,"panel.address.ipv6":`IPv6 direct`,"panel.address.public":`Adresse publique`,"panel.address.empty":`Adresse pas encore disponible`,"panel.address.ipv6Hint":`(le téléphone choisit le plus rapide)`,"panel.address.publicHint":`(pas dans le QR code)`,"panel.address.hint":`Ton téléphone essaie d'abord celle qui est sélectionnée et bascule tout seul sur la suivante.`,"panel.address.pick":`Préférer sur le téléphone`,"panel.address.direct":`Adresse directe`,"panel.address.directPlaceholder":`https://ton-tunnel.example.com:8443`,"panel.address.ipv6Url":`Adresse directe IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Adresse tunnel`,"panel.relay.selected":`Sélectionné`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changement automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`Connexion directe réseau local désactivée`,"panel.connection.lanPort":`Port du réseau local`,"panel.address.ipv6Pick":`{kind} (le téléphone choisit le plus rapide)`},pt:{"panel.address.lan":`Endereço da rede local`,"panel.address.lanPlaceholder":`ex.: 192.168.1.20`,"panel.address.lanUnknown":`Esse endereço não está entre os detectados nesta máquina, então o telefone não consegue alcançá-lo.`,"panel.address.ipv6":`IPv6 direto`,"panel.address.public":`Endereço público`,"panel.address.empty":`Endereço ainda indisponível`,"panel.address.ipv6Hint":`(o telemóvel escolhe o mais rápido)`,"panel.address.publicHint":`(não está no código QR)`,"panel.address.hint":`O teu telemóvel tenta primeiro a selecionada e passa sozinho para a seguinte.`,"panel.address.pick":`Preferir no telemóvel`,"panel.address.direct":`Endereço direto`,"panel.address.directPlaceholder":`https://o-teu-tunel.example.com:8443`,"panel.address.ipv6Url":`Endereço direto IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Endereço de túnel`,"panel.relay.selected":`Selecionado`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`Este dispositivo é recusado pelo relay`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(a porta preferida estava ocupada; mudou sozinho)`,"panel.pairing.sidecarRestartFailed":`A última reinicialização do sidecar falhou`,"panel.onboarding.lanOff":`Ligação direta à rede local desligada`,"panel.connection.lanPort":`Porta da rede local`,"panel.address.ipv6Pick":`{kind} (o telemóvel escolhe o mais rápido)`},ru:{"panel.address.lan":`Адрес локальной сети`,"panel.address.lanPlaceholder":`например, 192.168.1.20`,"panel.address.lanUnknown":`Этот адрес не входит в обнаруженные на этой машине — телефон до него не дозвонится.`,"panel.address.ipv6":`IPv6 напрямую`,"panel.address.public":`Публичный адрес`,"panel.address.empty":`Адрес пока недоступен`,"panel.address.ipv6Hint":`(телефон выбирает быстрейший)`,"panel.address.publicHint":`(нет в QR-коде)`,"panel.address.hint":`Твой телефон сначала пробует выбранный, а если не выходит, переключается на следующий.`,"panel.address.pick":`Предпочитать на телефоне`,"panel.address.direct":`Адрес прямого подключения`,"panel.address.directPlaceholder":`https://your-tunnel.example.com:8443`,"panel.address.ipv6Url":`Адрес прямого подключения IPv6`,"panel.address.ipv6Placeholder":`http://[240e:338:5213:6c11::998]:18787`,"panel.lanDialog.penetration":`Адрес туннеля`,"panel.relay.selected":`Выбрано`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(предпочитаемый порт занят, выбран другой)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.address.ipv6Pick":`{kind} (телефон выбирает быстрейший)`}},{"zh-Hans":{"panel.links.android":`安卓`,"panel.links.apple":`苹果`,"panel.links.distPlatform":`APP 分发平台`,"panel.links.domesticRecommended":`国内下载推荐`,"panel.links.overseasRecommended":`海外下载推荐`,"panel.links.appStore":`正式版,随系统自动更新`,"panel.links.testFlight":`测试版,比商店版先拿到新版本`,"panel.links.publicRelay":`公用中转 1`,"panel.links.wechatQrAlt":`微信群二维码:用微信或企业微信扫码加入`,"panel.links.joinGroup":`加入交流群`,"panel.theme.toDay":`切换到日间模式`,"panel.theme.toNight":`切换到夜间模式`,"panel.net.requestFailed":`请求失败(HTTP {status})`,"panel.net.requestFailedNoStatus":`请求失败`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`,"panel.download.open":`下载 APP`,"panel.download.title":`下载 AI-HUB`,"panel.relay.clear":`清空(只走局域网直连)`,"panel.relay.saveConfig":`保存配置`,"panel.relay.choosePublicRelay":`选择公用中转`,"panel.net.marketUnreachable":`连不上插件市场:{message}`,"panel.net.marketHttp":`插件市场返回 HTTP {status}`,"panel.net.hostHttp":`宿主返回 HTTP {status}`},"zh-Hant":{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`APP 分發平台`,"panel.links.domesticRecommended":`國內下載推薦`,"panel.links.overseasRecommended":`海外下載推薦`,"panel.links.appStore":`正式版,隨系統自動更新`,"panel.links.testFlight":`測試版,比商店版先拿到新版本`,"panel.links.publicRelay":`公用中轉 1`,"panel.links.wechatQrAlt":`微信群 QR 碼:用微信或企業微信掃碼加入`,"panel.links.joinGroup":`加入交流群`,"panel.theme.toDay":`切換到日間模式`,"panel.theme.toNight":`切換到夜間模式`,"panel.net.requestFailed":`請求失敗(HTTP {status})`,"panel.net.requestFailedNoStatus":`請求失敗`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`,"panel.download.open":`下載 APP`,"panel.download.title":`下載 AI-HUB`,"panel.relay.clear":`清空(只走區域網路直連)`,"panel.relay.saveConfig":`儲存設定`,"panel.relay.choosePublicRelay":`選擇公用中轉`,"panel.net.marketUnreachable":`連不上外掛市集:{message}`,"panel.net.marketHttp":`外掛市集傳回 HTTP {status}`,"panel.net.hostHttp":`宿主傳回 HTTP {status}`},en:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`App distribution platform`,"panel.links.domesticRecommended":`Recommended in China`,"panel.links.overseasRecommended":`Recommended overseas`,"panel.links.appStore":`Release build, updates with the system`,"panel.links.testFlight":`Beta build, gets new versions before the store`,"panel.links.publicRelay":`Public relay 1`,"panel.links.wechatQrAlt":`WeChat group QR code: scan with WeChat or WeCom`,"panel.links.joinGroup":`Join the group`,"panel.theme.toDay":`Switch to light mode`,"panel.theme.toNight":`Switch to dark mode`,"panel.net.requestFailed":`Request failed (HTTP {status})`,"panel.net.requestFailedNoStatus":`Request failed`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`,"panel.download.open":`Download app`,"panel.download.title":`Download AI-HUB`,"panel.relay.clear":`Clear (LAN direct only)`,"panel.relay.saveConfig":`Save settings`,"panel.relay.choosePublicRelay":`Choose public relay`,"panel.net.marketUnreachable":`Cannot reach the plugin market: {message}`,"panel.net.marketHttp":`The plugin market returned HTTP {status}`,"panel.net.hostHttp":`The host returned HTTP {status}`},ja:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`アプリ配布プラットフォーム`,"panel.links.domesticRecommended":`中国国内向けの推奨`,"panel.links.overseasRecommended":`海外向けの推奨`,"panel.links.appStore":`正式版。システムと一緒に更新されます`,"panel.links.testFlight":`ベータ版。ストア版より早く新バージョンを取得できます`,"panel.links.publicRelay":`共用リレー 1`,"panel.links.wechatQrAlt":`WeChat グループの QR コード:WeChat または WeCom でスキャン`,"panel.links.joinGroup":`グループに参加`,"panel.theme.toDay":`ライトモードに切り替え`,"panel.theme.toNight":`ダークモードに切り替え`,"panel.net.requestFailed":`リクエストに失敗しました(HTTP {status})`,"panel.net.requestFailedNoStatus":`リクエストに失敗しました`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`,"panel.download.open":`アプリをダウンロード`,"panel.download.title":`AI-HUB をダウンロード`,"panel.relay.clear":`クリア(LAN 直結のみ)`,"panel.relay.saveConfig":`設定を保存`,"panel.relay.choosePublicRelay":`公用リレーを選ぶ`,"panel.net.marketUnreachable":`プラグインマーケットに接続できません:{message}`,"panel.net.marketHttp":`プラグインマーケットが HTTP {status} を返しました`,"panel.net.hostHttp":`ホストが HTTP {status} を返しました`},ko:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`앱 배포 플랫폼`,"panel.links.domesticRecommended":`중국 내 다운로드 권장`,"panel.links.overseasRecommended":`해외 다운로드 권장`,"panel.links.appStore":`정식 버전, 시스템과 함께 자동 업데이트`,"panel.links.testFlight":`베타 버전, 스토어보다 먼저 새 버전 제공`,"panel.links.publicRelay":`공용 릴레이 1`,"panel.links.wechatQrAlt":`WeChat 그룹 QR 코드: WeChat 또는 WeCom으로 스캔`,"panel.links.joinGroup":`그룹 참여`,"panel.theme.toDay":`라이트 모드로 전환`,"panel.theme.toNight":`다크 모드로 전환`,"panel.net.requestFailed":`요청 실패 (HTTP {status})`,"panel.net.requestFailedNoStatus":`요청 실패`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`,"panel.download.open":`앱 다운로드`,"panel.download.title":`AI-HUB 다운로드`,"panel.relay.clear":`지우기(LAN 직접 연결만)`,"panel.relay.saveConfig":`설정 저장`,"panel.relay.choosePublicRelay":`공용 릴레이 선택`,"panel.net.marketUnreachable":`플러그인 마켓에 연결할 수 없습니다: {message}`,"panel.net.marketHttp":`플러그인 마켓이 HTTP {status}를 반환했습니다`,"panel.net.hostHttp":`호스트가 HTTP {status}를 반환했습니다`},de:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`App-Vertriebsplattform`,"panel.links.domesticRecommended":`Empfehlung für China`,"panel.links.overseasRecommended":`Empfehlung fürs Ausland`,"panel.links.appStore":`Release-Version, aktualisiert sich mit dem System`,"panel.links.testFlight":`Beta-Version, neue Builds vor dem Store`,"panel.links.publicRelay":`Öffentliches Relay 1`,"panel.links.wechatQrAlt":`WeChat-Gruppen-QR-Code: mit WeChat oder WeCom scannen und beitreten`,"panel.links.joinGroup":`Gruppe beitreten`,"panel.theme.toDay":`Zum hellen Modus wechseln`,"panel.theme.toNight":`Zum dunklen Modus wechseln`,"panel.net.requestFailed":`Anfrage fehlgeschlagen (HTTP {status})`,"panel.net.requestFailedNoStatus":`Anfrage fehlgeschlagen`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`,"panel.download.open":`App herunterladen`,"panel.download.title":`AI-HUB herunterladen`,"panel.relay.clear":`Leeren (nur LAN direkt)`,"panel.relay.saveConfig":`Einstellungen speichern`,"panel.relay.choosePublicRelay":`Öffentlichen Relay wählen`,"panel.net.marketUnreachable":`Plugin-Markt nicht erreichbar: {message}`,"panel.net.marketHttp":`Plugin-Markt antwortet HTTP {status}`,"panel.net.hostHttp":`Host antwortete HTTP {status}`},es:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plataforma de distribución de apps`,"panel.links.domesticRecommended":`Recomendado en China`,"panel.links.overseasRecommended":`Recomendado en el extranjero`,"panel.links.appStore":`Versión estable, se actualiza con el sistema`,"panel.links.testFlight":`Versión beta, recibe novedades antes que la tienda`,"panel.links.publicRelay":`Retransmisor público 1`,"panel.links.wechatQrAlt":`Código QR del grupo de WeChat: escanea con WeChat o WeCom para unirte`,"panel.links.joinGroup":`Unirse al grupo`,"panel.theme.toDay":`Cambiar al modo claro`,"panel.theme.toNight":`Cambiar al modo oscuro`,"panel.net.requestFailed":`Error en la solicitud (HTTP {status})`,"panel.net.requestFailedNoStatus":`Error en la solicitud`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`El retransmisor rechaza este dispositivo`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; cambiado automáticamente)`,"panel.pairing.sidecarRestartFailed":`Falló el último reinicio del sidecar`,"panel.onboarding.lanOff":`La conexión directa por LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`,"panel.download.open":`Descargar app`,"panel.download.title":`Descargar AI-HUB`,"panel.relay.clear":`Borrar (solo LAN directa)`,"panel.relay.saveConfig":`Guardar ajustes`,"panel.relay.choosePublicRelay":`Elegir relé público`,"panel.net.marketUnreachable":`No se puede conectar con el mercado de complementos: {message}`,"panel.net.marketHttp":`El mercado de complementos devolvió HTTP {status}`,"panel.net.hostHttp":`El host devolvió HTTP {status}`},fr:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plateforme de distribution d'apps`,"panel.links.domesticRecommended":`Recommandé en Chine`,"panel.links.overseasRecommended":`Recommandé à l'étranger`,"panel.links.appStore":`Version stable, mise à jour avec le système`,"panel.links.testFlight":`Version bêta, reçoit les nouveautés avant le store`,"panel.links.publicRelay":`Relais public 1`,"panel.links.wechatQrAlt":`QR code du groupe WeChat : scannez avec WeChat ou WeCom pour rejoindre`,"panel.links.joinGroup":`Rejoindre le groupe`,"panel.theme.toDay":`Passer en mode clair`,"panel.theme.toNight":`Passer en mode sombre`,"panel.net.requestFailed":`Échec de la requête (HTTP {status})`,"panel.net.requestFailedNoStatus":`Échec de la requête`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, changé automatiquement)`,"panel.pairing.sidecarRestartFailed":`Échec du dernier redémarrage du sidecar`,"panel.onboarding.lanOff":`La connexion directe en réseau local est désactivée`,"panel.connection.lanPort":`Port réseau local`,"panel.download.open":`Télécharger l'app`,"panel.download.title":`Télécharger AI-HUB`,"panel.relay.clear":`Effacer (réseau local uniquement)`,"panel.relay.saveConfig":`Enregistrer les réglages`,"panel.relay.choosePublicRelay":`Choisir le relais public`,"panel.net.marketUnreachable":`Impossible de joindre la boutique de greffons : {message}`,"panel.net.marketHttp":`La boutique de greffons a renvoyé HTTP {status}`,"panel.net.hostHttp":`L'hôte a renvoyé HTTP {status}`},pt:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Plataforma de distribuição de apps`,"panel.links.domesticRecommended":`Recomendado na China`,"panel.links.overseasRecommended":`Recomendado no exterior`,"panel.links.appStore":`Versão estável, atualiza com o sistema`,"panel.links.testFlight":`Versão beta, recebe novidades antes da loja`,"panel.links.publicRelay":`Relay público 1`,"panel.links.wechatQrAlt":`QR code do grupo do WeChat: escaneie com WeChat ou WeCom para entrar`,"panel.links.joinGroup":`Entrar no grupo`,"panel.theme.toDay":`Mudar para o modo claro`,"panel.theme.toNight":`Mudar para o modo escuro`,"panel.net.requestFailed":`Falha na requisição (HTTP {status})`,"panel.net.requestFailedNoStatus":`Falha na requisição`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`O relay recusa este dispositivo`,"panel.pairing.qrHidden":`QR code oculto`,"panel.pairing.portFallback":`(porta preferida ocupada; trocada automaticamente)`,"panel.pairing.sidecarRestartFailed":`Falhou o último reinício do sidecar`,"panel.onboarding.lanOff":`A ligação direta por rede local está desativada`,"panel.connection.lanPort":`Porta da rede local`,"panel.download.open":`Baixar o app`,"panel.download.title":`Baixar AI-HUB`,"panel.relay.clear":`Limpar (só rede local)`,"panel.relay.saveConfig":`Salvar configurações`,"panel.relay.choosePublicRelay":`Escolher relay público`,"panel.net.marketUnreachable":`Não foi possível acessar o mercado de plugins: {message}`,"panel.net.marketHttp":`O mercado de plugins retornou HTTP {status}`,"panel.net.hostHttp":`O host retornou HTTP {status}`},ru:{"panel.links.android":`Android`,"panel.links.apple":`Apple`,"panel.links.distPlatform":`Площадка распространения приложений`,"panel.links.domesticRecommended":`Рекомендуем в Китае`,"panel.links.overseasRecommended":`Рекомендуем за рубежом`,"panel.links.appStore":`Стабильная версия, обновляется вместе с системой`,"panel.links.testFlight":`Бета-версия, новые сборки раньше магазина`,"panel.links.publicRelay":`Публичный ретранслятор 1`,"panel.links.wechatQrAlt":`QR-код группы WeChat: отсканируйте в WeChat или WeCom, чтобы вступить`,"panel.links.joinGroup":`Вступить в группу`,"panel.theme.toDay":`Включить светлую тему`,"panel.theme.toNight":`Включить тёмную тему`,"panel.net.requestFailed":`Запрос не выполнен (HTTP {status})`,"panel.net.requestFailedNoStatus":`Запрос не выполнен`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Ретранслятор отклоняет это устройство`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(основной порт занят, выбран другой автоматически)`,"panel.pairing.sidecarRestartFailed":`Прошлый перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`,"panel.download.open":`Скачать приложение`,"panel.download.title":`Скачать AI-HUB`,"panel.relay.clear":`Очистить (только локальная сеть)`,"panel.relay.saveConfig":`Сохранить настройки`,"panel.relay.choosePublicRelay":`Выбрать публичный релей`,"panel.net.marketUnreachable":`Не удаётся подключиться к магазину плагинов: {message}`,"panel.net.marketHttp":`Магазин плагинов вернул HTTP {status}`,"panel.net.hostHttp":`Хост вернул HTTP {status}`}},{"zh-Hans":{"panel.inbox.title":`收件文件`,"panel.inbox.reading":`正在读收件目录…`,"panel.inbox.unreadableTitle":`这一版读不到收件目录`,"panel.inbox.unreadableBody":`这台宿主上的插件还没有这两条接口,更新插件后重启 DSH 就能看到占用并清理。`,"panel.inbox.used":`占用`,"panel.inbox.usedValue":`{bytes} · {count} 个文件`,"panel.inbox.deletable":`可清理`,"panel.inbox.deletableValue":`{bytes} · {count} 个`,"panel.inbox.keep":`保留期`,"panel.inbox.keepValue":`{hours} 小时`,"panel.inbox.keepValueOldest":`{hours} 小时(最老那份已放 {age})`,"panel.inbox.staging":`其中 {bytes} 是上传中途断掉留下的残片({count} 个),一并清掉。`,"panel.inbox.auto":`自动清理`,"panel.inbox.autoA11y":`自动清理收件文件`,"panel.inbox.clearing":`正在清理…`,"panel.inbox.clear":`清理收件文件`,"panel.inbox.confirmTitle":`清理收件文件?`,"panel.inbox.confirmDetail":`会删掉 {count} 个满 {hours} 小时的文件,释放 {bytes};不满这个时间的会留着。`,"panel.inbox.confirmNothing":`目前没有满 {hours} 小时的文件,点了什么都不会删。`,"panel.inbox.confirmIrreversible":`这个动作不可恢复。`,"panel.inbox.cleared":`收件文件已清理:释放了 {bytes}({count} 个文件)`,"panel.inbox.clearedSomeFailed":`,{count} 个没删掉`,"panel.inbox.nothingToClear":`没有满保留期的文件可清。`,"panel.inbox.clearFailed":`清理收件文件失败:{message}`,"panel.inbox.autoFailed":`自动清理开关没改成功:{message}`,"panel.inbox.ageLessThanHour":`不到 1 小时`,"panel.inbox.ageHours":`{hours} 小时`,"panel.inbox.ageDays":`{days} 天`,"panel.connection.state":`连接状态`,"panel.connection.relayNeedsSecret":`中转要求准入`,"panel.connection.relayRejected":`这台设备不被中转接受`,"panel.pairing.qrHidden":`二维码已隐藏`,"panel.pairing.portFallback":`(首选端口被占用,已自动改用)`,"panel.pairing.sidecarRestartFailed":`上次重启 sidecar 失败`,"panel.onboarding.lanOff":`局域网直连已关闭`,"panel.connection.lanPort":`局域网端口`},"zh-Hant":{"panel.inbox.title":`收件檔案`,"panel.inbox.reading":`正在讀取收件目錄…`,"panel.inbox.unreadableTitle":`這一版讀不到收件目錄`,"panel.inbox.unreadableBody":`這台宿主上的外掛還沒有這兩條介面,更新外掛後重新啟動 DSH 就能看到佔用並清理。`,"panel.inbox.used":`佔用`,"panel.inbox.usedValue":`{bytes} · {count} 個檔案`,"panel.inbox.deletable":`可清理`,"panel.inbox.deletableValue":`{bytes} · {count} 個`,"panel.inbox.keep":`保留期`,"panel.inbox.keepValue":`{hours} 小時`,"panel.inbox.keepValueOldest":`{hours} 小時(最舊那份已放 {age})`,"panel.inbox.staging":`其中 {bytes} 是上傳中途斷掉留下的殘片({count} 個),一併清掉。`,"panel.inbox.auto":`自動清理`,"panel.inbox.autoA11y":`自動清理收件檔案`,"panel.inbox.clearing":`正在清理…`,"panel.inbox.clear":`清理收件檔案`,"panel.inbox.confirmTitle":`清理收件檔案?`,"panel.inbox.confirmDetail":`會刪掉 {count} 個滿 {hours} 小時的檔案,釋放 {bytes};不滿這個時間的會留著。`,"panel.inbox.confirmNothing":`目前沒有滿 {hours} 小時的檔案,點了什麼都不會刪。`,"panel.inbox.confirmIrreversible":`這個動作不可恢復。`,"panel.inbox.cleared":`收件檔案已清理:釋放了 {bytes}({count} 個檔案)`,"panel.inbox.clearedSomeFailed":`,{count} 個沒刪掉`,"panel.inbox.nothingToClear":`沒有滿保留期的檔案可清。`,"panel.inbox.clearFailed":`清理收件檔案失敗:{message}`,"panel.inbox.autoFailed":`自動清理開關沒有改成功:{message}`,"panel.inbox.ageLessThanHour":`不到 1 小時`,"panel.inbox.ageHours":`{hours} 小時`,"panel.inbox.ageDays":`{days} 天`,"panel.connection.state":`連線狀態`,"panel.connection.relayNeedsSecret":`中轉要求准入`,"panel.connection.relayRejected":`這台裝置不被中轉接受`,"panel.pairing.qrHidden":`QR 碼已隱藏`,"panel.pairing.portFallback":`(首選連接埠被佔用,已自動改用)`,"panel.pairing.sidecarRestartFailed":`上次重新啟動 sidecar 失敗`,"panel.onboarding.lanOff":`區域網路直連已關閉`,"panel.connection.lanPort":`區域網路連接埠`},en:{"panel.inbox.title":`Received files`,"panel.inbox.reading":`Reading the inbox directory…`,"panel.inbox.unreadableTitle":`This build cannot read the inbox directory`,"panel.inbox.unreadableBody":`The plugin on this host does not have these two endpoints yet. Update the plugin and restart DSH to see usage and clean up.`,"panel.inbox.used":`Used`,"panel.inbox.usedValue":`{bytes} · {count} files`,"panel.inbox.deletable":`Cleanable`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retention`,"panel.inbox.keepValue":`{hours} hours`,"panel.inbox.keepValueOldest":`{hours} hours (oldest kept for {age})`,"panel.inbox.staging":`{bytes} of that are fragments left by interrupted uploads ({count}), which are cleared too.`,"panel.inbox.auto":`Auto cleanup`,"panel.inbox.autoA11y":`Automatically clean received files`,"panel.inbox.clearing":`Cleaning…`,"panel.inbox.clear":`Clean received files`,"panel.inbox.confirmTitle":`Clean received files?`,"panel.inbox.confirmDetail":`This deletes {count} file(s) older than {hours} hours and frees {bytes}; newer ones stay.`,"panel.inbox.confirmNothing":`No files are older than {hours} hours, so nothing will be deleted.`,"panel.inbox.confirmIrreversible":`This cannot be undone.`,"panel.inbox.cleared":`Received files cleaned: freed {bytes} ({count} files)`,"panel.inbox.clearedSomeFailed":`, {count} could not be deleted`,"panel.inbox.nothingToClear":`No files older than the retention window to clean.`,"panel.inbox.clearFailed":`Could not clean received files: {message}`,"panel.inbox.autoFailed":`Could not change the auto-cleanup switch: {message}`,"panel.inbox.ageLessThanHour":`less than 1 hour`,"panel.inbox.ageHours":`{hours} hours`,"panel.inbox.ageDays":`{days} days`,"panel.connection.state":`Connection status`,"panel.connection.relayNeedsSecret":`The relay requires admission`,"panel.connection.relayRejected":`This device is rejected by the relay`,"panel.pairing.qrHidden":`QR code hidden`,"panel.pairing.portFallback":` (preferred port was taken; switched automatically)`,"panel.pairing.sidecarRestartFailed":`Last sidecar restart failed`,"panel.onboarding.lanOff":`LAN direct is off`,"panel.connection.lanPort":`LAN port`},ja:{"panel.inbox.title":`受信ファイル`,"panel.inbox.reading":`受信ディレクトリを読み込み中…`,"panel.inbox.unreadableTitle":`この版では受信ディレクトリを読めません`,"panel.inbox.unreadableBody":`このホストのプラグインにはまだこの 2 つの API がありません。プラグインを更新して DSH を再起動すると、使用量の確認とクリーンアップができます。`,"panel.inbox.used":`使用量`,"panel.inbox.usedValue":`{bytes} · {count} ファイル`,"panel.inbox.deletable":`削除可能`,"panel.inbox.deletableValue":`{bytes} · {count} 個`,"panel.inbox.keep":`保存期間`,"panel.inbox.keepValue":`{hours} 時間`,"panel.inbox.keepValueOldest":`{hours} 時間(最も古いものは {age} 前)`,"panel.inbox.staging":`うち {bytes} はアップロード中断で残った断片({count} 個)で、これも一緒に削除されます。`,"panel.inbox.auto":`自動クリーンアップ`,"panel.inbox.autoA11y":`受信ファイルを自動でクリーンアップ`,"panel.inbox.clearing":`クリーンアップ中…`,"panel.inbox.clear":`受信ファイルをクリーンアップ`,"panel.inbox.confirmTitle":`受信ファイルをクリーンアップしますか?`,"panel.inbox.confirmDetail":`{hours} 時間を超えた {count} 個のファイルを削除し、{bytes} を解放します。それより新しいものは残します。`,"panel.inbox.confirmNothing":`{hours} 時間を超えたファイルがないため、何も削除されません。`,"panel.inbox.confirmIrreversible":`この操作は元に戻せません。`,"panel.inbox.cleared":`受信ファイルを整理しました:{bytes} を解放({count} ファイル)`,"panel.inbox.clearedSomeFailed":`、{count} 個は削除できませんでした`,"panel.inbox.nothingToClear":`保存期間を超えたファイルはありません。`,"panel.inbox.clearFailed":`受信ファイルの整理に失敗しました:{message}`,"panel.inbox.autoFailed":`自動クリーンアップの切り替えに失敗しました:{message}`,"panel.inbox.ageLessThanHour":`1 時間未満`,"panel.inbox.ageHours":`{hours} 時間`,"panel.inbox.ageDays":`{days} 日`,"panel.connection.state":`接続状態`,"panel.connection.relayNeedsSecret":`リレーが接続許可を要求しています`,"panel.connection.relayRejected":`このデバイスはリレーに拒否されています`,"panel.pairing.qrHidden":`QR コードは非表示です`,"panel.pairing.portFallback":`(優先ポートが使用中のため自動で切り替え)`,"panel.pairing.sidecarRestartFailed":`前回のサイドカー再起動に失敗しました`,"panel.onboarding.lanOff":`LAN 直結はオフです`,"panel.connection.lanPort":`LAN ポート`},ko:{"panel.inbox.title":`받은 파일`,"panel.inbox.reading":`수신 디렉터리를 읽는 중…`,"panel.inbox.unreadableTitle":`이 버전에서는 수신 디렉터리를 읽을 수 없습니다`,"panel.inbox.unreadableBody":`이 호스트의 플러그인에는 아직 이 두 API가 없습니다. 플러그인을 업데이트하고 DSH를 재시작하면 사용량 확인과 정리가 가능합니다.`,"panel.inbox.used":`사용량`,"panel.inbox.usedValue":`{bytes} · 파일 {count}개`,"panel.inbox.deletable":`정리 가능`,"panel.inbox.deletableValue":`{bytes} · {count}개`,"panel.inbox.keep":`보존 기간`,"panel.inbox.keepValue":`{hours}시간`,"panel.inbox.keepValueOldest":`{hours}시간(가장 오래된 것은 {age} 전)`,"panel.inbox.staging":`그중 {bytes}는 업로드가 중단되어 남은 조각({count}개)이며 함께 삭제됩니다.`,"panel.inbox.auto":`자동 정리`,"panel.inbox.autoA11y":`받은 파일 자동 정리`,"panel.inbox.clearing":`정리 중…`,"panel.inbox.clear":`받은 파일 정리`,"panel.inbox.confirmTitle":`받은 파일을 정리할까요?`,"panel.inbox.confirmDetail":`{hours}시간이 지난 파일 {count}개를 삭제하고 {bytes}를 확보합니다. 그보다 최근 파일은 남습니다.`,"panel.inbox.confirmNothing":`{hours}시간이 지난 파일이 없어 아무것도 삭제되지 않습니다.`,"panel.inbox.confirmIrreversible":`이 작업은 되돌릴 수 없습니다.`,"panel.inbox.cleared":`받은 파일을 정리했습니다: {bytes} 확보(파일 {count}개)`,"panel.inbox.clearedSomeFailed":`, {count}개는 삭제하지 못했습니다`,"panel.inbox.nothingToClear":`보존 기간이 지난 파일이 없습니다.`,"panel.inbox.clearFailed":`받은 파일 정리에 실패했습니다: {message}`,"panel.inbox.autoFailed":`자동 정리 스위치를 변경하지 못했습니다: {message}`,"panel.inbox.ageLessThanHour":`1시간 미만`,"panel.inbox.ageHours":`{hours}시간`,"panel.inbox.ageDays":`{days}일`,"panel.connection.state":`연결 상태`,"panel.connection.relayNeedsSecret":`릴레이가 승인을 요구합니다`,"panel.connection.relayRejected":`이 기기는 릴레이에서 거부되었습니다`,"panel.pairing.qrHidden":`QR 코드 숨김`,"panel.pairing.portFallback":` (선호 포트가 사용 중이어서 자동 전환됨)`,"panel.pairing.sidecarRestartFailed":`지난 사이드카 재시작 실패`,"panel.onboarding.lanOff":`LAN 직접 연결이 꺼져 있습니다`,"panel.connection.lanPort":`LAN 포트`},de:{"panel.inbox.title":`Posteingang-Dateien`,"panel.inbox.reading":`Posteingangsordner wird gelesen…`,"panel.inbox.unreadableTitle":`Diese Version kann den Posteingangsordner nicht lesen`,"panel.inbox.unreadableBody":`Das Plugin auf diesem Host hat diese beiden Endpunkte noch nicht. Aktualisiere das Plugin und starte DSH neu, dann siehst du die Belegung und kannst bereinigen.`,"panel.inbox.used":`Belegt`,"panel.inbox.usedValue":`{bytes} · {count} Dateien`,"panel.inbox.deletable":`Bereinigbar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Aufbewahrung`,"panel.inbox.keepValue":`{hours} Stunden`,"panel.inbox.keepValueOldest":`{hours} Stunden (älteste seit {age})`,"panel.inbox.staging":`Davon sind {bytes} Reste abgebrochener Uploads ({count} Dateien); sie werden mit entfernt.`,"panel.inbox.auto":`Automatisch bereinigen`,"panel.inbox.autoA11y":`Posteingang-Dateien automatisch bereinigen`,"panel.inbox.clearing":`Wird bereinigt…`,"panel.inbox.clear":`Posteingang-Dateien bereinigen`,"panel.inbox.confirmTitle":`Posteingang-Dateien bereinigen?`,"panel.inbox.confirmDetail":`{count} Dateien älter als {hours} Stunden werden gelöscht, {bytes} werden frei; jüngere bleiben.`,"panel.inbox.confirmNothing":`Es gibt keine Dateien älter als {hours} Stunden, es wird also nichts gelöscht.`,"panel.inbox.confirmIrreversible":`Das lässt sich nicht rückgängig machen.`,"panel.inbox.cleared":`Posteingang-Dateien bereinigt: {bytes} freigegeben ({count} Dateien)`,"panel.inbox.clearedSomeFailed":`, {count} konnten nicht gelöscht werden`,"panel.inbox.nothingToClear":`Keine Dateien älter als die Aufbewahrungsfrist zu bereinigen.`,"panel.inbox.clearFailed":`Posteingang-Dateien bereinigen fehlgeschlagen: {message}`,"panel.inbox.autoFailed":`Automatisches Bereinigen konnte nicht umgeschaltet werden: {message}`,"panel.inbox.ageLessThanHour":`unter 1 Stunde`,"panel.inbox.ageHours":`{hours} Stunden`,"panel.inbox.ageDays":`{days} Tage`,"panel.connection.state":`Verbindungsstatus`,"panel.connection.relayNeedsSecret":`Das Relay verlangt eine Freigabe`,"panel.connection.relayRejected":`Dieses Gerät wird vom Relay abgelehnt`,"panel.pairing.qrHidden":`QR-Code ausgeblendet`,"panel.pairing.portFallback":`(bevorzugter Port belegt, automatisch gewechselt)`,"panel.pairing.sidecarRestartFailed":`Letzter Sidecar-Neustart fehlgeschlagen`,"panel.onboarding.lanOff":`LAN-Direktverbindung ist aus`,"panel.connection.lanPort":`LAN-Port`},es:{"panel.inbox.title":`Archivos recibidos`,"panel.inbox.reading":`Leyendo la carpeta de entrada…`,"panel.inbox.unreadableTitle":`Esta versión no puede leer la carpeta de entrada`,"panel.inbox.unreadableBody":`El complemento de este host aún no tiene estos dos endpoints. Actualiza el complemento y reinicia DSH para ver el uso y limpiar.`,"panel.inbox.used":`Ocupado`,"panel.inbox.usedValue":`{bytes} · {count} archivos`,"panel.inbox.deletable":`Se puede limpiar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retención`,"panel.inbox.keepValue":`{hours} horas`,"panel.inbox.keepValueOldest":`{hours} horas (la más antigua lleva {age})`,"panel.inbox.staging":`{bytes} de eso son restos de subidas interrumpidas ({count} archivos); también se borran.`,"panel.inbox.auto":`Limpieza automática`,"panel.inbox.autoA11y":`Limpiar automáticamente los archivos recibidos`,"panel.inbox.clearing":`Limpiando…`,"panel.inbox.clear":`Limpiar archivos recibidos`,"panel.inbox.confirmTitle":`¿Limpiar los archivos recibidos?`,"panel.inbox.confirmDetail":`Se borrarán {count} archivos con más de {hours} horas y se liberarán {bytes}; los más recientes se quedan.`,"panel.inbox.confirmNothing":`No hay archivos de más de {hours} horas, así que no se borrará nada.`,"panel.inbox.confirmIrreversible":`Esto no se puede deshacer.`,"panel.inbox.cleared":`Archivos recibidos limpiados: se liberaron {bytes} ({count} archivos)`,"panel.inbox.clearedSomeFailed":`, {count} no se pudieron borrar`,"panel.inbox.nothingToClear":`No hay archivos que superen la retención para limpiar.`,"panel.inbox.clearFailed":`No se pudieron limpiar los archivos recibidos: {message}`,"panel.inbox.autoFailed":`No se pudo cambiar el interruptor de limpieza automática: {message}`,"panel.inbox.ageLessThanHour":`menos de 1 hora`,"panel.inbox.ageHours":`{hours} horas`,"panel.inbox.ageDays":`{days} días`,"panel.connection.state":`Estado de conexión`,"panel.connection.relayNeedsSecret":`El retransmisor exige admisión`,"panel.connection.relayRejected":`Este dispositivo no es aceptado por el retransmisor`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(el puerto preferido estaba ocupado; se cambió solo)`,"panel.pairing.sidecarRestartFailed":`El último reinicio del sidecar falló`,"panel.onboarding.lanOff":`La conexión directa por LAN está desactivada`,"panel.connection.lanPort":`Puerto LAN`},fr:{"panel.inbox.title":`Fichiers reçus`,"panel.inbox.reading":`Lecture du dossier de réception…`,"panel.inbox.unreadableTitle":`Cette version ne peut pas lire le dossier de réception`,"panel.inbox.unreadableBody":`Le greffon de cet hôte n'a pas encore ces deux points d'accès. Mets-le à jour et redémarre DSH pour voir l'occupation et nettoyer.`,"panel.inbox.used":`Occupé`,"panel.inbox.usedValue":`{bytes} · {count} fichiers`,"panel.inbox.deletable":`Nettoyable`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Conservation`,"panel.inbox.keepValue":`{hours} heures`,"panel.inbox.keepValueOldest":`{hours} heures (la plus ancienne depuis {age})`,"panel.inbox.staging":`{bytes} correspondent à des restes d'envois interrompus ({count} fichiers) ; ils sont supprimés aussi.`,"panel.inbox.auto":`Nettoyage auto`,"panel.inbox.autoA11y":`Nettoyer automatiquement les fichiers reçus`,"panel.inbox.clearing":`Nettoyage…`,"panel.inbox.clear":`Nettoyer les fichiers reçus`,"panel.inbox.confirmTitle":`Nettoyer les fichiers reçus ?`,"panel.inbox.confirmDetail":`{count} fichiers de plus de {hours} heures seront supprimés, libérant {bytes} ; les plus récents restent.`,"panel.inbox.confirmNothing":`Aucun fichier de plus de {hours} heures : rien ne sera supprimé.`,"panel.inbox.confirmIrreversible":`Cette action est irréversible.`,"panel.inbox.cleared":`Fichiers reçus nettoyés : {bytes} libérés ({count} fichiers)`,"panel.inbox.clearedSomeFailed":`, {count} n'ont pas pu être supprimés`,"panel.inbox.nothingToClear":`Aucun fichier au-delà de la durée de conservation à nettoyer.`,"panel.inbox.clearFailed":`Échec du nettoyage des fichiers reçus : {message}`,"panel.inbox.autoFailed":`Impossible de changer l'option de nettoyage auto : {message}`,"panel.inbox.ageLessThanHour":`moins d'une heure`,"panel.inbox.ageHours":`{hours} heures`,"panel.inbox.ageDays":`{days} jours`,"panel.connection.state":`État de la connexion`,"panel.connection.relayNeedsSecret":`Le relais exige une autorisation`,"panel.connection.relayRejected":`Cet appareil est refusé par le relais`,"panel.pairing.qrHidden":`QR code masqué`,"panel.pairing.portFallback":`(port préféré occupé, bascule automatique)`,"panel.pairing.sidecarRestartFailed":`Le dernier redémarrage du sidecar a échoué`,"panel.onboarding.lanOff":`La connexion directe en réseau local est désactivée`,"panel.connection.lanPort":`Port réseau local`},pt:{"panel.inbox.title":`Arquivos recebidos`,"panel.inbox.reading":`Lendo a pasta de entrada…`,"panel.inbox.unreadableTitle":`Esta versão não consegue ler a pasta de entrada`,"panel.inbox.unreadableBody":`O plugin deste host ainda não tem esses dois endpoints. Atualize o plugin e reinicie o DSH para ver o uso e limpar.`,"panel.inbox.used":`Em uso`,"panel.inbox.usedValue":`{bytes} · {count} arquivos`,"panel.inbox.deletable":`Pode limpar`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Retenção`,"panel.inbox.keepValue":`{hours} horas`,"panel.inbox.keepValueOldest":`{hours} horas (a mais antiga há {age})`,"panel.inbox.staging":`{bytes} disso são restos de envios interrompidos ({count} arquivos); eles também são apagados.`,"panel.inbox.auto":`Limpeza automática`,"panel.inbox.autoA11y":`Limpar automaticamente os arquivos recebidos`,"panel.inbox.clearing":`Limpando…`,"panel.inbox.clear":`Limpar arquivos recebidos`,"panel.inbox.confirmTitle":`Limpar os arquivos recebidos?`,"panel.inbox.confirmDetail":`{count} arquivos com mais de {hours} horas serão apagados, liberando {bytes}; os mais recentes ficam.`,"panel.inbox.confirmNothing":`Não há arquivos com mais de {hours} horas, então nada será apagado.`,"panel.inbox.confirmIrreversible":`Isso não pode ser desfeito.`,"panel.inbox.cleared":`Arquivos recebidos limpos: {bytes} liberados ({count} arquivos)`,"panel.inbox.clearedSomeFailed":`, {count} não puderam ser apagados`,"panel.inbox.nothingToClear":`Nenhum arquivo além do prazo de retenção para limpar.`,"panel.inbox.clearFailed":`Falha ao limpar os arquivos recebidos: {message}`,"panel.inbox.autoFailed":`Não foi possível mudar o interruptor da limpeza automática: {message}`,"panel.inbox.ageLessThanHour":`menos de 1 hora`,"panel.inbox.ageHours":`{hours} horas`,"panel.inbox.ageDays":`{days} dias`,"panel.connection.state":`Estado da conexão`,"panel.connection.relayNeedsSecret":`O relay exige admissão`,"panel.connection.relayRejected":`Este dispositivo não é aceito pelo relay`,"panel.pairing.qrHidden":`Código QR oculto`,"panel.pairing.portFallback":`(a porta preferida estava ocupada; trocado automaticamente)`,"panel.pairing.sidecarRestartFailed":`A última reinicialização do sidecar falhou`,"panel.onboarding.lanOff":`A conexão direta por LAN está desligada`,"panel.connection.lanPort":`Porta LAN`},ru:{"panel.inbox.title":`Файлы входящих`,"panel.inbox.reading":`Чтение папки входящих…`,"panel.inbox.unreadableTitle":`Эта версия не видит папку входящих`,"panel.inbox.unreadableBody":`У плагина на этом хосте ещё нет этих двух эндпоинтов. Обнови плагин и перезапусти DSH, чтобы увидеть занятое место и очистить.`,"panel.inbox.used":`Занято`,"panel.inbox.usedValue":`{bytes} · файлов: {count}`,"panel.inbox.deletable":`Можно очистить`,"panel.inbox.deletableValue":`{bytes} · {count}`,"panel.inbox.keep":`Срок хранения`,"panel.inbox.keepValue":`{hours} ч`,"panel.inbox.keepValueOldest":`{hours} ч (самый старый лежит {age})`,"panel.inbox.staging":`{bytes} из них — обрывки прерванных загрузок ({count} шт.); они тоже удаляются.`,"panel.inbox.auto":`Автоочистка`,"panel.inbox.autoA11y":`Автоматически очищать файлы входящих`,"panel.inbox.clearing":`Очистка…`,"panel.inbox.clear":`Очистить файлы входящих`,"panel.inbox.confirmTitle":`Очистить файлы входящих?`,"panel.inbox.confirmDetail":`Будет удалено {count} файлов старше {hours} ч, освободится {bytes}; более свежие останутся.`,"panel.inbox.confirmNothing":`Файлов старше {hours} ч нет, так что ничего не удалится.`,"panel.inbox.confirmIrreversible":`Действие необратимо.`,"panel.inbox.cleared":`Файлы входящих очищены: освобождено {bytes} ({count} файлов)`,"panel.inbox.clearedSomeFailed":`, {count} удалить не удалось`,"panel.inbox.nothingToClear":`Нет файлов старше срока хранения — чистить нечего.`,"panel.inbox.clearFailed":`Не удалось очистить файлы входящих: {message}`,"panel.inbox.autoFailed":`Не удалось переключить автоочистку: {message}`,"panel.inbox.ageLessThanHour":`меньше часа`,"panel.inbox.ageHours":`{hours} ч`,"panel.inbox.ageDays":`{days} дн.`,"panel.connection.state":`Состояние подключения`,"panel.connection.relayNeedsSecret":`Ретранслятор требует допуска`,"panel.connection.relayRejected":`Это устройство отклонено ретранслятором`,"panel.pairing.qrHidden":`QR-код скрыт`,"panel.pairing.portFallback":`(предпочтительный порт занят, переключено автоматически)`,"panel.pairing.sidecarRestartFailed":`Последний перезапуск sidecar не удался`,"panel.onboarding.lanOff":`Прямое подключение по локальной сети выключено`,"panel.connection.lanPort":`Порт локальной сети`}},{"zh-Hans":{"panel.onboarding.pairingHint":`扫码连接`,"panel.onboarding.statusFailed":`读不到插件状态`,"panel.onboarding.stepFailed":`这一步没成功`,"panel.onboarding.qrAfterRelay":`填好下面的中转地址后`,"panel.onboarding.qrAfterRelayLine2":`这里才会生成二维码`,"panel.onboarding.qrAfterAddress":`这个地址连上之后,这里才会生成二维码`,"panel.onboarding.noQr":`没取到二维码`,"panel.onboarding.preview":`这是按你填的地址生成的预览,点「进入插件」才会把这个地址存进配置。`,"panel.onboarding.relayNotConnected":`中转还没连上,连上之后扫码才有用。`,"panel.onboarding.direct":`直连`,"panel.onboarding.thisAddress":`这个地址`,"panel.onboarding.lanFailed":`没能开始直连`,"panel.onboarding.relayFailed":`中转没连上`,"panel.onboarding.lanErrorWithPort":`{error}(端口可能被占用,到主页的「局域网直连」里换一个。)`,"panel.onboarding.lanNoStart":`直连没起来,端口可能被别的程序占了。`,"panel.onboarding.tunnelErrorHint":`{error}(检查中转地址填对没有、那台中转是不是在跑。)`,"panel.onboarding.tunnelNoStart":`隧道没建起来,检查中转地址。`,"panel.onboarding.pickAddress":`手机连哪条地址`,"panel.onboarding.relayAddressHint":`中转地址`,"panel.onboarding.recheckSaved":`这台机器正在用的中转地址 {url} 现在连不上,先确认那台中转在不在跑。`,"panel.onboarding.relayNoAnswer":`中转地址 {value} 上没有中转在应答。确认域名写对、那台 dsh-relay 在运行。`,"panel.onboarding.relayNoAnswerUnsaved":`中转地址 {value} 上没有中转在应答,配置没改。确认域名写对、那台 dsh-relay 在运行。`,"panel.onboarding.probe.empty":`还没填地址`,"panel.onboarding.probe.busy":`检测中`,"panel.onboarding.probe.ok":`连得通,还没存进配置`,"panel.onboarding.probe.failed":`连不上`,"panel.onboarding.probe.idle":`还没检测`,"panel.onboarding.probe.okWithHint":`这个地址连得通,二维码已按它生成(还没存进配置)。`,"panel.onboarding.checkFirewall":`连不上?检查防火墙`,"panel.onboarding.lanDirect":`局域网直连`,"panel.onboarding.chooseAddress":`选择地址`,"panel.onboarding.setAddress":`填写地址`,"panel.onboarding.publicRelay":`公用中转`,"panel.onboarding.publicRelayTemporary":`建议临时使用`,"panel.onboarding.ownRelay":`自建中转`,"panel.onboarding.penetration":`内网穿透`,"panel.onboarding.penetrationAddress":`内网穿透地址`,"panel.onboarding.penetrationPlaceholder":`https://你的穿透域名`,"panel.onboarding.githubRepo":`GitHub 仓库`,"panel.onboarding.currentLan":`当前选择的局域网地址`,"panel.onboarding.public":`公网`,"panel.onboarding.ipv6More":`另有 {count} 条 IPv6 地址,手机按实测择优`,"panel.onboarding.collapse":`收起`,"panel.onboarding.expand":`展开`,"panel.onboarding.relayListTitle":`公用中转地址(按实测耗时排)`,"panel.onboarding.probing":`测速中…`,"panel.onboarding.autoBest":`自动优选`,"panel.onboarding.autoBestHint":`取最快的那条`,"panel.onboarding.probeUnreachable":`测不通`,"panel.onboarding.check":`检测`,"panel.onboarding.enterPlugin":`进入插件`,"panel.onboarding.connecting":`正在连接…`,"panel.onboarding.fixFirst":`先解决上面的问题`,"panel.onboarding.fillRelayFirst":`先填中转地址`,"panel.onboarding.opening":`正在打开…`,"panel.onboarding.openDirect":`打开直连`,"panel.onboarding.connectRelay":`连接中转`,"panel.onboarding.firewallTitle":`检查防火墙`,"panel.onboarding.firewallIntro":`手机连不上这台电脑的直连端口时,多半是电脑这边把端口挡了。直连默认端口`,"panel.onboarding.firewallIntroTail":`(首页「局域网直连」里可以改),下面按系统查。`,"panel.onboarding.copiedOk":`已复制,粘贴给你的 AI 就行。`,"panel.onboarding.copiedFailed":`复制失败,可以手动选中内容复制。`,"panel.onboarding.lanDialogTitle":`选择局域网地址`,"panel.onboarding.lanDialogHint":`手机先试选中的这条,其余继续排在后面兜底。`,"panel.onboarding.referenceOnly":`仅供参考的地址`,"panel.onboarding.lanGroupA11y":`局域网地址`,"panel.onboarding.lan":`局域网`,"panel.onboarding.copyPromptHint":`点我复制内容,让自己的 AI 去检查`,"panel.onboarding.copyPrompt":`复制这段排查提示词`,"panel.onboarding.linuxStep1":`1. 看防火墙状态(firewalld 或 ufw,装哪个查哪个):`,"panel.onboarding.linuxStep2":`2. 放行直连端口:`,"panel.onboarding.linuxStep3":`3. 云服务器还要去服务商控制台的安全组里放行同一个端口 —— 这台机器上查不到。`,"panel.onboarding.macStep1":`1. 看应用防火墙是不是开着:`,"panel.onboarding.macStep2":`2. 开着的话,在「系统设置 → 网络 → 防火墙 → 选项」里把 DSH / node 设成「允许传入连接」;排查时可以整个关掉:`,"panel.onboarding.macStep3":`3. 同一 Wi-Fi 还连不上:确认手机和电脑真在同一个网段,别连到访客网络。`,"panel.onboarding.winStep1":`1. 在 PowerShell(管理员)里看防火墙配置文件:`,"panel.onboarding.winStep2":`2. 放行直连端口:`,"panel.onboarding.winStep3":`3. 如果以前给 node 配过拒绝规则,记得把那条 Block 删掉;网络类型选「专用」而不是「公用」。`,"panel.onboarding.prompt.intro":`帮我排查一个问题。`,"panel.onboarding.prompt.situation":`我的情况:电脑上装了 DSH(DeepSeek Harness)的移动端插件,手机 App 通过局域网直连连不上这台电脑。`,"panel.onboarding.prompt.address":`手机上填的地址是这台电脑的局域网地址加端口(具体的地址和端口你需要到移动端插件的那个网页里看,注意是局域网地址)。`,"panel.onboarding.prompt.guess":`电脑这边显示插件已经在监听,但手机连不上。我判断是电脑的防火墙(或者云服务器的安全组)把这个端口挡了。`,"panel.onboarding.prompt.ask":`请你:`,"panel.onboarding.prompt.ask1":`1. 先确认我的系统是 Linux、macOS 还是 Windows(不确定就问我,或者告诉我怎么确认)。`,"panel.onboarding.prompt.ask2":`2. 按属于我这一套的步骤逐条检查,告诉我那个端口现在通不通、卡在哪一步。`,"panel.onboarding.prompt.ask3":`3. 给出具体该执行的命令或点击路径,把端口放行;需要管理员权限的地方明确说明。`,"panel.onboarding.prompt.ask4":`4. 最后告诉我怎么验证已经通了(比如用哪条命令从本机、从手机分别确认)。`,"panel.onboarding.prompt.extra":`补充:如果这台电脑是云服务器,服务商控制台里的安全组/防火墙也要放行同一个端口,这一项在本机查不到。`,"panel.onboarding.relayPlaceholder":`https://你的中转域名`,"panel.onboarding.probe.failedBody":`这个地址连不上,二维码不会生成。确认它是 http:// 或 https:// 开头、那台中转在运行、域名解析到它。`},"zh-Hant":{"panel.onboarding.pairingHint":`掃碼連線`,"panel.onboarding.statusFailed":`讀不到外掛狀態`,"panel.onboarding.stepFailed":`這一步沒有成功`,"panel.onboarding.qrAfterRelay":`填好下面的中轉位址後`,"panel.onboarding.qrAfterRelayLine2":`這裡才會產生 QR 碼`,"panel.onboarding.qrAfterAddress":`這個位址連上之後,這裡才會產生 QR 碼`,"panel.onboarding.noQr":`沒取得 QR 碼`,"panel.onboarding.preview":`這是依你填的位址產生的預覽,點「進入外掛」才會把這個位址存進設定。`,"panel.onboarding.relayNotConnected":`中轉還沒連上,連上之後掃碼才有用。`,"panel.onboarding.direct":`直連`,"panel.onboarding.thisAddress":`這個位址`,"panel.onboarding.lanFailed":`沒能開始直連`,"panel.onboarding.relayFailed":`中轉沒連上`,"panel.onboarding.lanErrorWithPort":`{error}(連接埠可能被佔用,到主頁的「區域網路直連」裡換一個。)`,"panel.onboarding.lanNoStart":`直連沒起來,連接埠可能被別的程式佔用。`,"panel.onboarding.tunnelErrorHint":`{error}(檢查中轉位址填對沒有、那台中轉是不是在跑。)`,"panel.onboarding.tunnelNoStart":`通道沒建起來,檢查中轉位址。`,"panel.onboarding.pickAddress":`手機連哪條位址`,"panel.onboarding.relayAddressHint":`中轉位址`,"panel.onboarding.recheckSaved":`這台機器正在用的中轉位址 {url} 現在連不上,先確認那台中轉在不在跑。`,"panel.onboarding.relayNoAnswer":`中轉位址 {value} 上沒有中轉在應答。確認網域名稱寫對、那台 dsh-relay 在執行。`,"panel.onboarding.relayNoAnswerUnsaved":`中轉位址 {value} 上沒有中轉在應答,設定沒改。確認網域名稱寫對、那台 dsh-relay 在執行。`,"panel.onboarding.probe.empty":`還沒填位址`,"panel.onboarding.probe.busy":`檢查中`,"panel.onboarding.probe.ok":`連得通,還沒存進設定`,"panel.onboarding.probe.failed":`連不上`,"panel.onboarding.probe.idle":`還沒檢查`,"panel.onboarding.probe.okWithHint":`這個位址連得通,QR 碼已依它產生(還沒存進設定)。`,"panel.onboarding.checkFirewall":`連不上?檢查防火牆`,"panel.onboarding.lanDirect":`區域網路直連`,"panel.onboarding.chooseAddress":`選擇位址`,"panel.onboarding.setAddress":`填寫地址`,"panel.onboarding.publicRelay":`公用中轉`,"panel.onboarding.publicRelayTemporary":`建議臨時使用`,"panel.onboarding.ownRelay":`自建中轉`,"panel.onboarding.penetration":`內網穿透`,"panel.onboarding.penetrationAddress":`內網穿透位址`,"panel.onboarding.penetrationPlaceholder":`https://你的穿透網域`,"panel.onboarding.githubRepo":`GitHub 儲存庫`,"panel.onboarding.currentLan":`目前選擇的區域網路位址`,"panel.onboarding.public":`公網`,"panel.onboarding.ipv6More":`另有 {count} 條 IPv6 位址,手機依實測擇優`,"panel.onboarding.collapse":`收合`,"panel.onboarding.expand":`展開`,"panel.onboarding.relayListTitle":`公用中轉位址(依實測耗時排)`,"panel.onboarding.probing":`測速中…`,"panel.onboarding.autoBest":`自動優選`,"panel.onboarding.autoBestHint":`取最快的那條`,"panel.onboarding.probeUnreachable":`測不通`,"panel.onboarding.check":`檢查`,"panel.onboarding.enterPlugin":`進入外掛`,"panel.onboarding.connecting":`正在連線…`,"panel.onboarding.fixFirst":`先解決上面的問題`,"panel.onboarding.fillRelayFirst":`先填中轉位址`,"panel.onboarding.opening":`正在開啟…`,"panel.onboarding.openDirect":`開啟直連`,"panel.onboarding.connectRelay":`連線中轉`,"panel.onboarding.firewallTitle":`檢查防火牆`,"panel.onboarding.firewallIntro":`手機連不上這台電腦的直連連接埠時,多半是電腦這邊把連接埠擋了。直連預設連接埠`,"panel.onboarding.firewallIntroTail":`(首頁「區域網路直連」裡可以改),下面依系統查。`,"panel.onboarding.copiedOk":`已複製,貼給你的 AI 就行。`,"panel.onboarding.copiedFailed":`複製失敗,可以手動選取內容複製。`,"panel.onboarding.lanDialogTitle":`選擇區域網路位址`,"panel.onboarding.lanDialogHint":`手機先試選中的這條,其餘繼續排在後面兜底。`,"panel.onboarding.referenceOnly":`僅供參考的位址`,"panel.onboarding.lanGroupA11y":`區域網路位址`,"panel.onboarding.lan":`區域網路`,"panel.onboarding.copyPromptHint":`點我複製內容,讓自己的 AI 去檢查`,"panel.onboarding.copyPrompt":`複製這段排查提示詞`,"panel.onboarding.linuxStep1":`1. 看防火牆狀態(firewalld 或 ufw,裝哪個查哪個):`,"panel.onboarding.linuxStep2":`2. 放行直連連接埠:`,"panel.onboarding.linuxStep3":`3. 雲端伺服器還要去服務商主控台的安全群組裡放行同一個連接埠 —— 這台機器上查不到。`,"panel.onboarding.macStep1":`1. 看應用程式防火牆是不是開著:`,"panel.onboarding.macStep2":`2. 開著的話,在「系統設定 → 網路 → 防火牆 → 選項」裡把 DSH / node 設成「允許傳入連線」;排查時可以整個關掉:`,"panel.onboarding.macStep3":`3. 同一 Wi-Fi 還連不上:確認手機和電腦真在同一個網段,別連到訪客網路。`,"panel.onboarding.winStep1":`1. 在 PowerShell(系統管理員)裡看防火牆設定檔:`,"panel.onboarding.winStep2":`2. 放行直連連接埠:`,"panel.onboarding.winStep3":`3. 如果以前給 node 設過拒絕規則,記得把那條 Block 刪掉;網路類型選「專用」而不是「公用」。`,"panel.onboarding.prompt.intro":`幫我排查一個問題。`,"panel.onboarding.prompt.situation":`我的情況:電腦上裝了 DSH(DeepSeek Harness)的行動端外掛,手機 App 透過區域網路直連連不上這台電腦。`,"panel.onboarding.prompt.address":`手機上填的位址是這台電腦的區域網路位址加連接埠(具體的位址和連接埠你需要到行動端外掛的那個網頁裡看,注意是區域網路位址)。`,"panel.onboarding.prompt.guess":`電腦這邊顯示外掛已經在監聽,但手機連不上。我判斷是電腦的防火牆(或者雲端伺服器的安全群組)把這個連接埠擋了。`,"panel.onboarding.prompt.ask":`請你:`,"panel.onboarding.prompt.ask1":`1. 先確認我的系統是 Linux、macOS 還是 Windows(不確定就問我,或者告訴我怎麼確認)。`,"panel.onboarding.prompt.ask2":`2. 依屬於我這一套的步驟逐條檢查,告訴我那個連接埠現在通不通、卡在哪一步。`,"panel.onboarding.prompt.ask3":`3. 給出具體該執行的命令或點擊路徑,把連接埠放行;需要系統管理員權限的地方明確說明。`,"panel.onboarding.prompt.ask4":`4. 最後告訴我怎麼驗證已經通了(比如用哪條命令從本機、從手機分別確認)。`,"panel.onboarding.prompt.extra":`補充:如果這台電腦是雲端伺服器,服務商主控台裡的安全群組/防火牆也要放行同一個連接埠,這一項在本機查不到。`,"panel.onboarding.relayPlaceholder":`https://你的中轉網域`,"panel.onboarding.probe.failedBody":`這個位址連不上,QR 碼不會產生。確認它是 http:// 或 https:// 開頭、那台中轉正在執行、網域解析到它。`},en:{"panel.onboarding.pairingHint":`Scan to connect`,"panel.onboarding.statusFailed":`Could not read plugin status`,"panel.onboarding.stepFailed":`That step did not succeed`,"panel.onboarding.qrAfterRelay":`Once you fill in the relay address below`,"panel.onboarding.qrAfterRelayLine2":`the QR code appears here`,"panel.onboarding.qrAfterAddress":`Once this address connects, the QR code appears here`,"panel.onboarding.noQr":`No QR code yet`,"panel.onboarding.preview":`This preview uses the address you typed. Tapping “Enter plugin” saves it to the configuration.`,"panel.onboarding.relayNotConnected":`The relay is not connected yet; scanning only works once it is.`,"panel.onboarding.direct":`Direct`,"panel.onboarding.thisAddress":`This address`,"panel.onboarding.lanFailed":`Could not start direct connection`,"panel.onboarding.relayFailed":`Relay not connected`,"panel.onboarding.lanErrorWithPort":`{error} (the port may be taken — pick another under “LAN direct” on the main page.)`,"panel.onboarding.lanNoStart":`The direct listener did not start; another program may be holding the port.`,"panel.onboarding.tunnelErrorHint":`{error} (check that the relay address is correct and that the relay is running.)`,"panel.onboarding.tunnelNoStart":`The tunnel did not come up; check the relay address.`,"panel.onboarding.pickAddress":`Which address your phone uses`,"panel.onboarding.relayAddressHint":`Relay address`,"panel.onboarding.recheckSaved":`The relay this machine uses, {url}, is unreachable right now. Check that the relay is running.`,"panel.onboarding.relayNoAnswer":`Nothing is answering at {value}. Check the domain and that dsh-relay is running.`,"panel.onboarding.relayNoAnswerUnsaved":`Nothing is answering at {value}; the configuration was not changed. Check the domain and that dsh-relay is running.`,"panel.onboarding.probe.empty":`No address yet`,"panel.onboarding.probe.busy":`Testing`,"panel.onboarding.probe.ok":`Reachable, not saved yet`,"panel.onboarding.probe.failed":`Unreachable`,"panel.onboarding.probe.idle":`Not tested yet`,"panel.onboarding.probe.okWithHint":`This address is reachable and the QR code was generated from it (not saved to the configuration yet).`,"panel.onboarding.checkFirewall":`Cannot connect? Check the firewall`,"panel.onboarding.lanDirect":`LAN direct`,"panel.onboarding.chooseAddress":`Choose address`,"panel.onboarding.setAddress":`Fill in address`,"panel.onboarding.publicRelay":`Public relay`,"panel.onboarding.publicRelayTemporary":`For temporary use`,"panel.onboarding.ownRelay":`Self-hosted relay`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Tunnel address`,"panel.onboarding.penetrationPlaceholder":`https://your-tunnel.example`,"panel.onboarding.githubRepo":`GitHub repository`,"panel.onboarding.currentLan":`Currently selected LAN address`,"panel.onboarding.public":`Public`,"panel.onboarding.ipv6More":`{count} more IPv6 addresses; your phone picks the fastest`,"panel.onboarding.collapse":`Collapse`,"panel.onboarding.expand":`Expand`,"panel.onboarding.relayListTitle":`Public relay addresses (by measured latency)`,"panel.onboarding.probing":`Measuring…`,"panel.onboarding.autoBest":`Auto (fastest)`,"panel.onboarding.autoBestHint":`Use the fastest one`,"panel.onboarding.probeUnreachable":`Unreachable`,"panel.onboarding.check":`Test`,"panel.onboarding.enterPlugin":`Enter plugin`,"panel.onboarding.connecting":`Connecting…`,"panel.onboarding.fixFirst":`Fix the problems above first`,"panel.onboarding.fillRelayFirst":`Enter the relay address first`,"panel.onboarding.opening":`Opening…`,"panel.onboarding.openDirect":`Open direct connection`,"panel.onboarding.connectRelay":`Connect relay`,"panel.onboarding.firewallTitle":`Check the firewall`,"panel.onboarding.firewallIntro":`When your phone cannot reach this computer’s direct port, the port is usually blocked on the computer. The default direct port is`,"panel.onboarding.firewallIntroTail":` (you can change it under “LAN direct” on the main page). Check it per system below.`,"panel.onboarding.copiedOk":`Copied — paste it into your AI.`,"panel.onboarding.copiedFailed":`Copy failed; select the text and copy it manually.`,"panel.onboarding.lanDialogTitle":`Choose a LAN address`,"panel.onboarding.lanDialogHint":`Your phone tries the selected one first and falls back to the rest.`,"panel.onboarding.referenceOnly":`For reference only`,"panel.onboarding.lanGroupA11y":`LAN addresses`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Tap to copy — let your own AI check it`,"panel.onboarding.copyPrompt":`Copy this troubleshooting prompt`,"panel.onboarding.linuxStep1":`1. Check the firewall status (firewalld or ufw — whichever is installed):`,"panel.onboarding.linuxStep2":`2. Allow the direct port:`,"panel.onboarding.linuxStep3":`3. On a cloud server also allow the same port in your provider’s console security group — it cannot be checked from this machine.`,"panel.onboarding.macStep1":`1. Check whether the application firewall is on:`,"panel.onboarding.macStep2":`2. If it is on, set DSH / node to “Allow incoming connections” under System Settings → Network → Firewall → Options; for troubleshooting you can turn it off entirely:`,"panel.onboarding.macStep3":`3. Still failing on the same Wi-Fi: make sure the phone and computer are really on the same subnet, not a guest network.`,"panel.onboarding.winStep1":`1. In PowerShell (administrator) list the firewall profiles:`,"panel.onboarding.winStep2":`2. Allow the direct port:`,"panel.onboarding.winStep3":`3. If you previously created a block rule for node, delete it; set the network type to Private rather than Public.`,"panel.onboarding.prompt.intro":`Help me troubleshoot a problem.`,"panel.onboarding.prompt.situation":`My situation: I have the DSH (DeepSeek Harness) mobile plugin installed on my computer, and the phone app cannot reach this computer over a direct LAN connection.`,"panel.onboarding.prompt.address":`The address entered on the phone is this computer’s LAN address plus port (you will need to read the exact address and port from the mobile plugin’s web page — note it must be the LAN address).`,"panel.onboarding.prompt.guess":`The computer side shows the plugin is listening, but the phone cannot connect. I believe the computer’s firewall (or a cloud security group) is blocking that port.`,"panel.onboarding.prompt.ask":`Please:`,"panel.onboarding.prompt.ask1":`1. First confirm whether my system is Linux, macOS or Windows (ask me if you are unsure, or tell me how to check).`,"panel.onboarding.prompt.ask2":`2. Walk me through the steps for my setup one by one and tell me whether that port is currently open and where it gets stuck.`,"panel.onboarding.prompt.ask3":`3. Give me the exact commands or click paths to allow the port, and say clearly where administrator rights are needed.`,"panel.onboarding.prompt.ask4":`4. Finally tell me how to verify it works (for example which command to run on the computer and on the phone).`,"panel.onboarding.prompt.extra":`Note: if this computer is a cloud server, the security group or firewall in the provider’s console must allow the same port too, and that cannot be checked locally.`,"panel.onboarding.relayPlaceholder":`https://your-relay.example`,"panel.onboarding.probe.failedBody":`This address cannot be reached, so no QR code will be generated. Check that it starts with http:// or https://, that the relay is running there, and that the domain resolves to it.`},ja:{"panel.onboarding.pairingHint":`スキャンして接続`,"panel.onboarding.statusFailed":`プラグインの状態を取得できません`,"panel.onboarding.stepFailed":`この手順は完了しませんでした`,"panel.onboarding.qrAfterRelay":`下のリレーのアドレスを入力すると`,"panel.onboarding.qrAfterRelayLine2":`ここに QR コードが表示されます`,"panel.onboarding.qrAfterAddress":`このアドレスに接続できると、ここに QR コードが表示されます`,"panel.onboarding.noQr":`QR コードを取得できません`,"panel.onboarding.preview":`入力したアドレスによるプレビューです。「プラグインに入る」を押すとこのアドレスが設定に保存されます。`,"panel.onboarding.relayNotConnected":`リレーにまだ接続していません。接続後にスキャンが有効になります。`,"panel.onboarding.direct":`直結`,"panel.onboarding.thisAddress":`このアドレス`,"panel.onboarding.lanFailed":`直結を開始できませんでした`,"panel.onboarding.relayFailed":`リレーに接続できません`,"panel.onboarding.lanErrorWithPort":`{error}(ポートが使用中の可能性があります。メイン画面の「LAN 直結」で別のポートに変更してください。)`,"panel.onboarding.lanNoStart":`直結が起動しませんでした。別のアプリがポートを使用している可能性があります。`,"panel.onboarding.tunnelErrorHint":`{error}(リレーのアドレスが正しいか、リレーが動いているかを確認してください。)`,"panel.onboarding.tunnelNoStart":`トンネルが確立しませんでした。リレーのアドレスを確認してください。`,"panel.onboarding.pickAddress":`スマートフォンが使うアドレス`,"panel.onboarding.relayAddressHint":`リレーのアドレス`,"panel.onboarding.recheckSaved":`このマシンが使っているリレー {url} に現在つながりません。リレーが動いているか確認してください。`,"panel.onboarding.relayNoAnswer":`リレーのアドレス {value} に応答がありません。ドメイン名と dsh-relay の稼働を確認してください。`,"panel.onboarding.relayNoAnswerUnsaved":`リレーのアドレス {value} に応答がないため、設定は変更していません。ドメイン名と dsh-relay の稼働を確認してください。`,"panel.onboarding.probe.empty":`アドレス未入力`,"panel.onboarding.probe.busy":`確認中`,"panel.onboarding.probe.ok":`接続できます(未保存)`,"panel.onboarding.probe.failed":`接続できません`,"panel.onboarding.probe.idle":`未確認`,"panel.onboarding.probe.okWithHint":`このアドレスに接続できます。QR コードはこのアドレスで生成済みです(設定には未保存)。`,"panel.onboarding.checkFirewall":`つながらない場合はファイアウォールを確認`,"panel.onboarding.lanDirect":`LAN 直結`,"panel.onboarding.chooseAddress":`アドレスを選択`,"panel.onboarding.setAddress":`アドレスを入力`,"panel.onboarding.publicRelay":`共用リレー`,"panel.onboarding.publicRelayTemporary":`一時利用に推奨`,"panel.onboarding.ownRelay":`自前のリレー`,"panel.onboarding.penetration":`トンネル`,"panel.onboarding.penetrationAddress":`トンネルのアドレス`,"panel.onboarding.penetrationPlaceholder":`https://トンネルのドメイン`,"panel.onboarding.githubRepo":`GitHub リポジトリ`,"panel.onboarding.currentLan":`現在選択中の LAN アドレス`,"panel.onboarding.public":`パブリック`,"panel.onboarding.ipv6More":`ほかに IPv6 アドレスが {count} 件。スマートフォンが実測で選択します`,"panel.onboarding.collapse":`たたむ`,"panel.onboarding.expand":`展開`,"panel.onboarding.relayListTitle":`共用リレーのアドレス(実測の所要時間順)`,"panel.onboarding.probing":`測定中…`,"panel.onboarding.autoBest":`自動(最速)`,"panel.onboarding.autoBestHint":`最も速いものを使用`,"panel.onboarding.probeUnreachable":`到達できません`,"panel.onboarding.check":`確認`,"panel.onboarding.enterPlugin":`プラグインに入る`,"panel.onboarding.connecting":`接続中…`,"panel.onboarding.fixFirst":`まず上の問題を解決してください`,"panel.onboarding.fillRelayFirst":`先にリレーのアドレスを入力`,"panel.onboarding.opening":`開いています…`,"panel.onboarding.openDirect":`直結を開く`,"panel.onboarding.connectRelay":`リレーに接続`,"panel.onboarding.firewallTitle":`ファイアウォールを確認`,"panel.onboarding.firewallIntro":`スマートフォンからこのパソコンの直結ポートにつながらない場合、多くはパソコン側でポートが塞がれています。直結の既定ポートは`,"panel.onboarding.firewallIntroTail":`(メイン画面の「LAN 直結」で変更できます)。以下をシステム別に確認してください。`,"panel.onboarding.copiedOk":`コピーしました。AI に貼り付けてください。`,"panel.onboarding.copiedFailed":`コピーに失敗しました。テキストを選択して手動でコピーしてください。`,"panel.onboarding.lanDialogTitle":`LAN アドレスを選択`,"panel.onboarding.lanDialogHint":`スマートフォンは選択したものを先に試し、残りは後続の候補になります。`,"panel.onboarding.referenceOnly":`参考用アドレス`,"panel.onboarding.lanGroupA11y":`LAN アドレス`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`クリックでコピー。自分の AI に確認させられます`,"panel.onboarding.copyPrompt":`このトラブルシュート用プロンプトをコピー`,"panel.onboarding.linuxStep1":`1. ファイアウォールの状態を確認(firewalld か ufw、入っている方):`,"panel.onboarding.linuxStep2":`2. 直結ポートを許可:`,"panel.onboarding.linuxStep3":`3. クラウドサーバーの場合は、事業者コンソールのセキュリティグループでも同じポートを許可してください(このマシンからは確認できません)。`,"panel.onboarding.macStep1":`1. アプリケーションファイアウォールが有効か確認:`,"panel.onboarding.macStep2":`2. 有効な場合は「システム設定 → ネットワーク → ファイアウォール → オプション」で DSH / node を「着信接続を許可」に設定。切り分け時は丸ごと切ることもできます:`,"panel.onboarding.macStep3":`3. 同じ Wi-Fi でもつながらない場合: スマートフォンとパソコンが同じサブネットにあるか(ゲストネットワークでないか)を確認してください。`,"panel.onboarding.winStep1":`1. PowerShell(管理者)でファイアウォールプロファイルを確認:`,"panel.onboarding.winStep2":`2. 直結ポートを許可:`,"panel.onboarding.winStep3":`3. 以前 node に拒否規則を作った場合はそれを削除し、ネットワークの種類を「パブリック」ではなく「プライベート」にしてください。`,"panel.onboarding.prompt.intro":`問題の切り分けを手伝ってください。`,"panel.onboarding.prompt.situation":`状況: パソコンに DSH(DeepSeek Harness)のモバイルプラグインを入れており、スマートフォンのアプリから LAN 直結でこのパソコンにつながりません。`,"panel.onboarding.prompt.address":`スマートフォンに入力したアドレスは、このパソコンの LAN アドレスとポートです(正確なアドレスとポートはモバイルプラグインの Web ページで確認してください。LAN アドレスである点に注意)。`,"panel.onboarding.prompt.guess":`パソコン側ではプラグインが待ち受けていると表示されていますが、スマートフォンからはつながりません。パソコンのファイアウォール(またはクラウドのセキュリティグループ)がこのポートを塞いでいると思います。`,"panel.onboarding.prompt.ask":`お願いします:`,"panel.onboarding.prompt.ask1":`1. まず私の環境が Linux / macOS / Windows のどれかを確認してください(不明なら私に聞くか、確認方法を教えてください)。`,"panel.onboarding.prompt.ask2":`2. 私の環境に合った手順を 1 つずつ確認し、そのポートが今通るのか、どこで止まっているのかを教えてください。`,"panel.onboarding.prompt.ask3":`3. ポートを許可するための具体的なコマンドやクリック手順を示してください。管理者権限が必要な箇所は明記してください。`,"panel.onboarding.prompt.ask4":`4. 最後に、通ったことを確認する方法(パソコン側とスマートフォン側それぞれで実行するコマンドなど)を教えてください。`,"panel.onboarding.prompt.extra":`補足: このパソコンがクラウドサーバーの場合、事業者コンソールのセキュリティグループ/ファイアウォールでも同じポートを許可する必要があり、それはローカルでは確認できません。`,"panel.onboarding.relayPlaceholder":`https://リレーのドメイン`,"panel.onboarding.probe.failedBody":`このアドレスに接続できないため、QR コードは生成されません。http:// または https:// で始まっているか、そのリレーが動作しているか、ドメインがそこを指しているかを確認してください。`},ko:{"panel.onboarding.pairingHint":`스캔하여 연결`,"panel.onboarding.statusFailed":`플러그인 상태를 읽을 수 없습니다`,"panel.onboarding.stepFailed":`이 단계가 완료되지 않았습니다`,"panel.onboarding.qrAfterRelay":`아래에 릴레이 주소를 입력하면`,"panel.onboarding.qrAfterRelayLine2":`여기에 QR 코드가 생성됩니다`,"panel.onboarding.qrAfterAddress":`이 주소에 연결되면 여기에 QR 코드가 생성됩니다`,"panel.onboarding.noQr":`QR 코드를 가져오지 못했습니다`,"panel.onboarding.preview":`입력한 주소로 만든 미리보기입니다. 「플러그인 들어가기」를 눌러야 이 주소가 설정에 저장됩니다.`,"panel.onboarding.relayNotConnected":`릴레이에 아직 연결되지 않았습니다. 연결된 뒤에야 스캔이 동작합니다.`,"panel.onboarding.direct":`직접 연결`,"panel.onboarding.thisAddress":`이 주소`,"panel.onboarding.lanFailed":`직접 연결을 시작하지 못했습니다`,"panel.onboarding.relayFailed":`릴레이에 연결되지 않았습니다`,"panel.onboarding.lanErrorWithPort":`{error} (포트가 사용 중일 수 있습니다. 메인 화면의 「LAN 직접 연결」에서 다른 포트로 바꾸세요.)`,"panel.onboarding.lanNoStart":`직접 연결이 시작되지 않았습니다. 다른 프로그램이 포트를 쓰고 있을 수 있습니다.`,"panel.onboarding.tunnelErrorHint":`{error} (릴레이 주소가 맞는지, 릴레이가 실행 중인지 확인하세요.)`,"panel.onboarding.tunnelNoStart":`터널이 만들어지지 않았습니다. 릴레이 주소를 확인하세요.`,"panel.onboarding.pickAddress":`휴대폰이 사용할 주소`,"panel.onboarding.relayAddressHint":`릴레이 주소`,"panel.onboarding.recheckSaved":`이 컴퓨터가 쓰는 릴레이 {url}에 지금 연결할 수 없습니다. 릴레이가 실행 중인지 확인하세요.`,"panel.onboarding.relayNoAnswer":`릴레이 주소 {value}에서 응답이 없습니다. 도메인과 dsh-relay 실행 여부를 확인하세요.`,"panel.onboarding.relayNoAnswerUnsaved":`릴레이 주소 {value}에서 응답이 없어 설정을 변경하지 않았습니다. 도메인과 dsh-relay 실행 여부를 확인하세요.`,"panel.onboarding.probe.empty":`주소를 아직 입력하지 않았습니다`,"panel.onboarding.probe.busy":`확인 중`,"panel.onboarding.probe.ok":`연결됩니다 (저장 전)`,"panel.onboarding.probe.failed":`연결되지 않습니다`,"panel.onboarding.probe.idle":`아직 확인하지 않았습니다`,"panel.onboarding.probe.okWithHint":`이 주소로 연결됩니다. QR 코드가 이 주소로 생성되었습니다(설정에는 아직 저장되지 않음).`,"panel.onboarding.checkFirewall":`연결되지 않나요? 방화벽을 확인하세요`,"panel.onboarding.lanDirect":`LAN 직접 연결`,"panel.onboarding.chooseAddress":`주소 선택`,"panel.onboarding.setAddress":`주소 입력`,"panel.onboarding.publicRelay":`공용 릴레이`,"panel.onboarding.publicRelayTemporary":`임시 사용 권장`,"panel.onboarding.ownRelay":`자가 호스팅 릴레이`,"panel.onboarding.penetration":`터널`,"panel.onboarding.penetrationAddress":`터널 주소`,"panel.onboarding.penetrationPlaceholder":`https://터널-도메인`,"panel.onboarding.githubRepo":`GitHub 저장소`,"panel.onboarding.currentLan":`현재 선택된 LAN 주소`,"panel.onboarding.public":`공인`,"panel.onboarding.ipv6More":`IPv6 주소가 {count}개 더 있습니다. 휴대폰이 실측으로 선택합니다`,"panel.onboarding.collapse":`접기`,"panel.onboarding.expand":`펼치기`,"panel.onboarding.relayListTitle":`공용 릴레이 주소(실측 지연 순)`,"panel.onboarding.probing":`측정 중…`,"panel.onboarding.autoBest":`자동(가장 빠른 것)`,"panel.onboarding.autoBestHint":`가장 빠른 것을 사용`,"panel.onboarding.probeUnreachable":`연결되지 않음`,"panel.onboarding.check":`확인`,"panel.onboarding.enterPlugin":`플러그인 들어가기`,"panel.onboarding.connecting":`연결 중…`,"panel.onboarding.fixFirst":`위 문제를 먼저 해결하세요`,"panel.onboarding.fillRelayFirst":`릴레이 주소를 먼저 입력하세요`,"panel.onboarding.opening":`여는 중…`,"panel.onboarding.openDirect":`직접 연결 열기`,"panel.onboarding.connectRelay":`릴레이 연결`,"panel.onboarding.firewallTitle":`방화벽 확인`,"panel.onboarding.firewallIntro":`휴대폰에서 이 컴퓨터의 직접 연결 포트로 접속되지 않을 때는 대개 컴퓨터 쪽에서 포트가 막혀 있습니다. 기본 직접 연결 포트는`,"panel.onboarding.firewallIntroTail":` (메인 화면의 「LAN 직접 연결」에서 바꿀 수 있습니다). 아래에서 시스템별로 확인하세요.`,"panel.onboarding.copiedOk":`복사했습니다. AI에 붙여 넣으세요.`,"panel.onboarding.copiedFailed":`복사하지 못했습니다. 텍스트를 선택해 직접 복사하세요.`,"panel.onboarding.lanDialogTitle":`LAN 주소 선택`,"panel.onboarding.lanDialogHint":`휴대폰은 선택한 주소를 먼저 시도하고 나머지는 뒤에서 대비합니다.`,"panel.onboarding.referenceOnly":`참고용 주소`,"panel.onboarding.lanGroupA11y":`LAN 주소`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`클릭하여 복사하고 자기 AI에게 확인시키세요`,"panel.onboarding.copyPrompt":`이 문제 진단 프롬프트 복사`,"panel.onboarding.linuxStep1":`1. 방화벽 상태 확인(firewalld 또는 ufw, 설치된 것):`,"panel.onboarding.linuxStep2":`2. 직접 연결 포트 허용:`,"panel.onboarding.linuxStep3":`3. 클라우드 서버라면 사업자 콘솔의 보안 그룹에서도 같은 포트를 허용해야 합니다 — 이 컴퓨터에서는 확인할 수 없습니다.`,"panel.onboarding.macStep1":`1. 애플리케이션 방화벽이 켜져 있는지 확인:`,"panel.onboarding.macStep2":`2. 켜져 있다면 시스템 설정 → 네트워크 → 방화벽 → 옵션에서 DSH / node를 「수신 연결 허용」으로 설정하세요. 진단 중에는 아예 꺼도 됩니다:`,"panel.onboarding.macStep3":`3. 같은 Wi-Fi에서도 안 되면 휴대폰과 컴퓨터가 실제로 같은 서브넷인지(게스트 네트워크가 아닌지) 확인하세요.`,"panel.onboarding.winStep1":`1. PowerShell(관리자)에서 방화벽 프로필 확인:`,"panel.onboarding.winStep2":`2. 직접 연결 포트 허용:`,"panel.onboarding.winStep3":`3. 예전에 node에 차단 규칙을 만들었다면 그 Block 규칙을 삭제하고, 네트워크 종류를 「공용」이 아닌 「전용」으로 설정하세요.`,"panel.onboarding.prompt.intro":`문제 하나를 진단해 주세요.`,"panel.onboarding.prompt.situation":`상황: 컴퓨터에 DSH(DeepSeek Harness) 모바일 플러그인이 설치되어 있고, 휴대폰 앱에서 LAN 직접 연결로 이 컴퓨터에 접속되지 않습니다.`,"panel.onboarding.prompt.address":`휴대폰에 입력한 주소는 이 컴퓨터의 LAN 주소와 포트입니다(정확한 주소와 포트는 모바일 플러그인의 웹 페이지에서 확인해야 하며, LAN 주소여야 합니다).`,"panel.onboarding.prompt.guess":`컴퓨터 쪽에서는 플러그인이 수신 대기 중이라고 표시되지만 휴대폰에서는 접속되지 않습니다. 컴퓨터 방화벽(또는 클라우드 보안 그룹)이 그 포트를 막고 있다고 생각합니다.`,"panel.onboarding.prompt.ask":`요청 사항:`,"panel.onboarding.prompt.ask1":`1. 먼저 제 시스템이 Linux / macOS / Windows 중 무엇인지 확인해 주세요(모르면 저에게 물어보거나 확인 방법을 알려주세요).`,"panel.onboarding.prompt.ask2":`2. 제 환경에 맞는 절차를 하나씩 확인하고, 그 포트가 지금 열려 있는지 어디서 막히는지 알려주세요.`,"panel.onboarding.prompt.ask3":`3. 포트를 허용할 구체적인 명령이나 클릭 경로를 제시하고, 관리자 권한이 필요한 곳은 분명히 알려주세요.`,"panel.onboarding.prompt.ask4":`4. 마지막으로 잘 되는지 확인하는 방법(컴퓨터와 휴대폰에서 각각 실행할 명령 등)을 알려주세요.`,"panel.onboarding.prompt.extra":`참고: 이 컴퓨터가 클라우드 서버라면 사업자 콘솔의 보안 그룹/방화벽에서도 같은 포트를 허용해야 하며, 이는 로컬에서 확인할 수 없습니다.`,"panel.onboarding.relayPlaceholder":`https://릴레이-도메인`,"panel.onboarding.probe.failedBody":`이 주소에 연결할 수 없어 QR 코드가 생성되지 않습니다. http:// 또는 https://로 시작하는지, 해당 릴레이가 실행 중인지, 도메인이 이 주소를 가리키는지 확인하세요.`},de:{"panel.onboarding.pairingHint":`Zum Verbinden scannen`,"panel.onboarding.statusFailed":`Plugin-Status nicht lesbar`,"panel.onboarding.stepFailed":`Dieser Schritt hat nicht geklappt`,"panel.onboarding.qrAfterRelay":`Sobald du die Relay-Adresse unten einträgst`,"panel.onboarding.qrAfterRelayLine2":`erscheint hier der QR-Code`,"panel.onboarding.qrAfterAddress":`Sobald diese Adresse verbunden ist, erscheint hier der QR-Code`,"panel.onboarding.noQr":`Noch kein QR-Code`,"panel.onboarding.preview":`Diese Vorschau nutzt die Adresse, die du eingetippt hast. Erst „Plugin öffnen“ speichert sie in der Konfiguration.`,"panel.onboarding.relayNotConnected":`Das Relay ist noch nicht verbunden; Scannen hilft erst danach.`,"panel.onboarding.direct":`Direkt`,"panel.onboarding.thisAddress":`Diese Adresse`,"panel.onboarding.lanFailed":`Direktverbindung konnte nicht starten`,"panel.onboarding.relayFailed":`Relay nicht verbunden`,"panel.onboarding.lanErrorWithPort":`{error} (der Port ist evtl. belegt — wähle auf der Startseite unter „LAN direkt“ einen anderen.)`,"panel.onboarding.lanNoStart":`Der Direkt-Listener startete nicht; ein anderes Programm hält den Port evtl. belegt.`,"panel.onboarding.tunnelErrorHint":`{error} (prüfe, ob die Relay-Adresse stimmt und das Relay läuft.)`,"panel.onboarding.tunnelNoStart":`Der Tunnel kam nicht zustande; prüfe die Relay-Adresse.`,"panel.onboarding.pickAddress":`Welche Adresse das Handy nutzt`,"panel.onboarding.relayAddressHint":`Relay-Adresse`,"panel.onboarding.recheckSaved":`Das Relay, das dieser Rechner nutzt, {url}, ist gerade nicht erreichbar. Prüfe, ob das Relay läuft.`,"panel.onboarding.relayNoAnswer":`Unter {value} antwortet kein Relay. Prüfe die Domain und ob dsh-relay läuft.`,"panel.onboarding.relayNoAnswerUnsaved":`Unter {value} antwortet kein Relay; die Konfiguration wurde nicht geändert. Prüfe die Domain und ob dsh-relay läuft.`,"panel.onboarding.probe.empty":`Noch keine Adresse`,"panel.onboarding.probe.busy":`Wird geprüft`,"panel.onboarding.probe.ok":`Erreichbar, noch nicht gespeichert`,"panel.onboarding.probe.failed":`Nicht erreichbar`,"panel.onboarding.probe.idle":`Noch nicht geprüft`,"panel.onboarding.probe.okWithHint":`Diese Adresse ist erreichbar, der QR-Code wurde daraus erzeugt (noch nicht in der Konfiguration gespeichert).`,"panel.onboarding.checkFirewall":`Keine Verbindung? Firewall prüfen`,"panel.onboarding.lanDirect":`LAN direkt`,"panel.onboarding.chooseAddress":`Adresse wählen`,"panel.onboarding.setAddress":`Adresse eingeben`,"panel.onboarding.publicRelay":`Öffentliches Relay`,"panel.onboarding.publicRelayTemporary":`Nur vorübergehend`,"panel.onboarding.ownRelay":`Eigenes Relay`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Tunnel-Adresse`,"panel.onboarding.penetrationPlaceholder":`https://deine-tunnel-domain.example`,"panel.onboarding.githubRepo":`GitHub-Repository`,"panel.onboarding.currentLan":`Aktuell gewählte LAN-Adresse`,"panel.onboarding.public":`Öffentlich`,"panel.onboarding.ipv6More":`{count} weitere IPv6-Adressen; dein Handy nimmt die schnellste`,"panel.onboarding.collapse":`Einklappen`,"panel.onboarding.expand":`Ausklappen`,"panel.onboarding.relayListTitle":`Öffentliche Relay-Adressen (nach gemessener Latenz)`,"panel.onboarding.probing":`Messung…`,"panel.onboarding.autoBest":`Auto (schnellste)`,"panel.onboarding.autoBestHint":`Die schnellste nehmen`,"panel.onboarding.probeUnreachable":`Nicht erreichbar`,"panel.onboarding.check":`Prüfen`,"panel.onboarding.enterPlugin":`Plugin öffnen`,"panel.onboarding.connecting":`Verbindung…`,"panel.onboarding.fixFirst":`Behebe zuerst die Probleme oben`,"panel.onboarding.fillRelayFirst":`Zuerst Relay-Adresse eintragen`,"panel.onboarding.opening":`Wird geöffnet…`,"panel.onboarding.openDirect":`Direktverbindung öffnen`,"panel.onboarding.connectRelay":`Relay verbinden`,"panel.onboarding.firewallTitle":`Firewall prüfen`,"panel.onboarding.firewallIntro":`Wenn dein Handy den Direkt-Port dieses Rechners nicht erreicht, blockiert meist der Rechner den Port. Standard-Direkt-Port:`,"panel.onboarding.firewallIntroTail":` (änderbar auf der Startseite unter „LAN direkt“). Prüfe es je System unten.`,"panel.onboarding.copiedOk":`Kopiert — füge es in deine KI ein.`,"panel.onboarding.copiedFailed":`Kopieren fehlgeschlagen; markiere den Text und kopiere ihn von Hand.`,"panel.onboarding.lanDialogTitle":`LAN-Adresse wählen`,"panel.onboarding.lanDialogHint":`Das Handy versucht zuerst die gewählte und weicht dann auf die übrigen aus.`,"panel.onboarding.referenceOnly":`Nur zur Orientierung`,"panel.onboarding.lanGroupA11y":`LAN-Adressen`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Tippen zum Kopieren — dann deine eigene KI prüfen lassen`,"panel.onboarding.copyPrompt":`Diesen Fehlersuche-Prompt kopieren`,"panel.onboarding.linuxStep1":`1. Firewall-Status prüfen (firewalld oder ufw, je nachdem was installiert ist):`,"panel.onboarding.linuxStep2":`2. Direkt-Port freigeben:`,"panel.onboarding.linuxStep3":`3. Auf einem Cloud-Server denselben Port zusätzlich in der Security-Group der Anbieter-Konsole freigeben — von diesem Rechner aus nicht prüfbar.`,"panel.onboarding.macStep1":`1. Prüfen, ob die Anwendungsfirewall an ist:`,"panel.onboarding.macStep2":`2. Wenn ja, DSH / node unter Systemeinstellungen → Netzwerk → Firewall → Optionen auf „Eingehende Verbindungen zulassen“ stellen; zur Fehlersuche kannst du sie ganz abschalten:`,"panel.onboarding.macStep3":`3. Geht es im selben WLAN weiterhin nicht: prüfe, ob Handy und Rechner wirklich im selben Subnetz sind und nicht im Gastnetz.`,"panel.onboarding.winStep1":`1. In PowerShell (Administrator) die Firewall-Profile auflisten:`,"panel.onboarding.winStep2":`2. Direkt-Port freigeben:`,"panel.onboarding.winStep3":`3. Falls du früher eine Block-Regel für node erstellt hast, lösche sie; Netzwerktyp auf „Privat“ statt „Öffentlich“ stellen.`,"panel.onboarding.prompt.intro":`Hilf mir, ein Problem zu finden.`,"panel.onboarding.prompt.situation":`Meine Situation: Auf meinem Rechner ist das Mobile-Plugin von DSH (DeepSeek Harness) installiert, und die Handy-App erreicht diesen Rechner nicht über eine direkte LAN-Verbindung.`,"panel.onboarding.prompt.address":`Die im Handy eingetragene Adresse ist die LAN-Adresse dieses Rechners plus Port (die genauen Adress- und Portdaten siehst du auf der Webseite des Mobile-Plugins — es muss die LAN-Adresse sein).`,"panel.onboarding.prompt.guess":`Am Rechner meldet das Plugin, dass es lauscht, aber das Handy verbindet nicht. Ich vermute, die Firewall (oder die Sicherheitsgruppe des Cloud-Servers) blockiert den Port.`,"panel.onboarding.prompt.ask":`Bitte:`,"panel.onboarding.prompt.ask1":`1. Prüfe zuerst, ob mein System Linux, macOS oder Windows ist (frag mich, wenn du unsicher bist, oder sag mir, wie ich es prüfe).`,"panel.onboarding.prompt.ask2":`2. Geh die Schritte für mein Setup einzeln durch und sag mir, ob der Port offen ist und wo es hakt.`,"panel.onboarding.prompt.ask3":`3. Nenne die genauen Befehle oder Klickpfade, um den Port freizugeben, und sag klar, wo Administratorrechte nötig sind.`,"panel.onboarding.prompt.ask4":`4. Sag mir zum Schluss, wie ich prüfe, dass es geht (z. B. mit welchem Befehl am Rechner und am Handy).`,"panel.onboarding.prompt.extra":`Nachtrag: Ist dieser Rechner ein Cloud-Server, muss auch die Sicherheitsgruppe bzw. Firewall in der Konsole des Anbieters denselben Port freigeben — das ist lokal nicht prüfbar.`,"panel.onboarding.relayPlaceholder":`https://deine.relay-domain`,"panel.onboarding.probe.failedBody":`Diese Adresse ist nicht erreichbar, es wird kein QR-Code erzeugt. Prüf, ob sie mit http:// oder https:// beginnt, ob das Relay läuft und ob die Domain darauf zeigt.`},es:{"panel.onboarding.pairingHint":`Escanea para conectar`,"panel.onboarding.statusFailed":`No se pudo leer el estado del complemento`,"panel.onboarding.stepFailed":`Ese paso no salió bien`,"panel.onboarding.qrAfterRelay":`Cuando rellenes la dirección del retransmisor abajo`,"panel.onboarding.qrAfterRelayLine2":`aquí aparecerá el código QR`,"panel.onboarding.qrAfterAddress":`Cuando esta dirección se conecte, aquí aparecerá el código QR`,"panel.onboarding.noQr":`Aún no hay código QR`,"panel.onboarding.preview":`Esta vista previa usa la dirección que escribiste. Solo al pulsar «Entrar al complemento» se guarda en la configuración.`,"panel.onboarding.relayNotConnected":`El retransmisor aún no está conectado; escanear solo sirve cuando lo esté.`,"panel.onboarding.direct":`Directa`,"panel.onboarding.thisAddress":`Esta dirección`,"panel.onboarding.lanFailed":`No se pudo iniciar la conexión directa`,"panel.onboarding.relayFailed":`Retransmisor no conectado`,"panel.onboarding.lanErrorWithPort":`{error} (puede que el puerto esté ocupado: elige otro en «LAN directa» de la página principal).`,"panel.onboarding.lanNoStart":`El receptor directo no arrancó; puede que otro programa esté usando el puerto.`,"panel.onboarding.tunnelErrorHint":`{error} (comprueba que la dirección del retransmisor sea correcta y que esté en marcha).`,"panel.onboarding.tunnelNoStart":`El túnel no se levantó; revisa la dirección del retransmisor.`,"panel.onboarding.pickAddress":`Qué dirección usa el teléfono`,"panel.onboarding.relayAddressHint":`Dirección del retransmisor`,"panel.onboarding.recheckSaved":`El retransmisor que usa este equipo, {url}, no responde ahora. Comprueba que esté en marcha.`,"panel.onboarding.relayNoAnswer":`En {value} no responde ningún retransmisor. Revisa el dominio y que dsh-relay esté en marcha.`,"panel.onboarding.relayNoAnswerUnsaved":`En {value} no responde ningún retransmisor y la configuración no se cambió. Revisa el dominio y que dsh-relay esté en marcha.`,"panel.onboarding.probe.empty":`Aún sin dirección`,"panel.onboarding.probe.busy":`Probando`,"panel.onboarding.probe.ok":`Se conecta, aún sin guardar`,"panel.onboarding.probe.failed":`No se conecta`,"panel.onboarding.probe.idle":`Sin probar aún`,"panel.onboarding.probe.okWithHint":`Esta dirección se conecta y el código QR se generó con ella (aún no está guardada en la configuración).`,"panel.onboarding.checkFirewall":`¿No conecta? Revisa el cortafuegos`,"panel.onboarding.lanDirect":`LAN directa`,"panel.onboarding.chooseAddress":`Elegir dirección`,"panel.onboarding.setAddress":`Escribir dirección`,"panel.onboarding.publicRelay":`Retransmisor público`,"panel.onboarding.publicRelayTemporary":`Para uso temporal`,"panel.onboarding.ownRelay":`Retransmisor propio`,"panel.onboarding.penetration":`Túnel`,"panel.onboarding.penetrationAddress":`Dirección del túnel`,"panel.onboarding.penetrationPlaceholder":`https://tu-dominio-tunel.example`,"panel.onboarding.githubRepo":`Repositorio de GitHub`,"panel.onboarding.currentLan":`Dirección LAN elegida ahora`,"panel.onboarding.public":`Pública`,"panel.onboarding.ipv6More":`{count} direcciones IPv6 más; tu teléfono elige la más rápida`,"panel.onboarding.collapse":`Contraer`,"panel.onboarding.expand":`Desplegar`,"panel.onboarding.relayListTitle":`Direcciones de retransmisor públicas (por latencia medida)`,"panel.onboarding.probing":`Midiendo…`,"panel.onboarding.autoBest":`Auto (más rápida)`,"panel.onboarding.autoBestHint":`Usar la más rápida`,"panel.onboarding.probeUnreachable":`No responde`,"panel.onboarding.check":`Probar`,"panel.onboarding.enterPlugin":`Entrar al complemento`,"panel.onboarding.connecting":`Conectando…`,"panel.onboarding.fixFirst":`Resuelve primero los problemas de arriba`,"panel.onboarding.fillRelayFirst":`Primero pon la dirección del retransmisor`,"panel.onboarding.opening":`Abriendo…`,"panel.onboarding.openDirect":`Abrir conexión directa`,"panel.onboarding.connectRelay":`Conectar retransmisor`,"panel.onboarding.firewallTitle":`Revisar el cortafuegos`,"panel.onboarding.firewallIntro":`Si tu teléfono no alcanza el puerto directo de este ordenador, normalmente el propio ordenador lo bloquea. El puerto directo predeterminado es`,"panel.onboarding.firewallIntroTail":` (se puede cambiar en «LAN directa» de la página principal). Compruébalo según tu sistema abajo.`,"panel.onboarding.copiedOk":`Copiado: pégalo en tu IA.`,"panel.onboarding.copiedFailed":`No se pudo copiar; selecciona el texto y cópialo a mano.`,"panel.onboarding.lanDialogTitle":`Elegir una dirección LAN`,"panel.onboarding.lanDialogHint":`Tu teléfono prueba primero la elegida y recurre al resto.`,"panel.onboarding.referenceOnly":`Solo como referencia`,"panel.onboarding.lanGroupA11y":`Direcciones LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Toca para copiar y que tu propia IA lo revise`,"panel.onboarding.copyPrompt":`Copiar este mensaje de diagnóstico`,"panel.onboarding.linuxStep1":`1. Mira el estado del cortafuegos (firewalld o ufw, el que tengas):`,"panel.onboarding.linuxStep2":`2. Permite el puerto directo:`,"panel.onboarding.linuxStep3":`3. En un servidor en la nube, permite también el mismo puerto en el grupo de seguridad de la consola del proveedor: no se puede comprobar desde este equipo.`,"panel.onboarding.macStep1":`1. Comprueba si el cortafuegos de aplicaciones está activo:`,"panel.onboarding.macStep2":`2. Si lo está, en Ajustes del sistema → Red → Cortafuegos → Opciones pon DSH / node en «Permitir conexiones entrantes»; para diagnosticar puedes desactivarlo del todo:`,"panel.onboarding.macStep3":`3. Si sigue sin ir en la misma Wi-Fi: asegúrate de que el teléfono y el ordenador están en la misma subred y no en una red de invitados.`,"panel.onboarding.winStep1":`1. En PowerShell (administrador) lista los perfiles del cortafuegos:`,"panel.onboarding.winStep2":`2. Permite el puerto directo:`,"panel.onboarding.winStep3":`3. Si antes creaste una regla de bloqueo para node, bórrala; pon el tipo de red en «Privada», no «Pública».`,"panel.onboarding.prompt.intro":`Ayúdame a diagnosticar un problema.`,"panel.onboarding.prompt.situation":`Mi caso: tengo instalado el complemento móvil de DSH (DeepSeek Harness) en el ordenador y la app del teléfono no puede llegar a este ordenador por conexión directa en la LAN.`,"panel.onboarding.prompt.address":`La dirección que puse en el teléfono es la dirección LAN de este ordenador más el puerto (la dirección y el puerto exactos están en la página web del complemento móvil; debe ser la dirección LAN).`,"panel.onboarding.prompt.guess":`En el ordenador el complemento dice que está escuchando, pero el teléfono no conecta. Creo que el cortafuegos (o el grupo de seguridad del servidor en la nube) bloquea ese puerto.`,"panel.onboarding.prompt.ask":`Por favor:`,"panel.onboarding.prompt.ask1":`1. Primero confirma si mi sistema es Linux, macOS o Windows (si no estás seguro, pregúntame o dime cómo comprobarlo).`,"panel.onboarding.prompt.ask2":`2. Repasa paso a paso las etapas de mi configuración y dime si ese puerto está abierto y dónde se atasca.`,"panel.onboarding.prompt.ask3":`3. Dame los comandos o rutas de clic exactos para abrir el puerto y di claramente dónde hacen falta permisos de administrador.`,"panel.onboarding.prompt.ask4":`4. Por último, dime cómo comprobar que ya funciona (por ejemplo, qué comando usar en el ordenador y en el teléfono).`,"panel.onboarding.prompt.extra":`Nota: si este ordenador es un servidor en la nube, el grupo de seguridad o cortafuegos de la consola del proveedor también debe abrir el mismo puerto, y eso no se ve desde la máquina.`,"panel.onboarding.relayPlaceholder":`https://tu.dominio-relay`,"panel.onboarding.probe.failedBody":`No se puede acceder a esta dirección, así que no se generará el código QR. Comprueba que empiece por http:// o https://, que el relay esté en marcha y que el dominio apunte a él.`},fr:{"panel.onboarding.pairingHint":`Scanne pour te connecter`,"panel.onboarding.statusFailed":`Impossible de lire l'état du greffon`,"panel.onboarding.stepFailed":`Cette étape n'a pas réussi`,"panel.onboarding.qrAfterRelay":`Une fois l'adresse du relais saisie ci-dessous`,"panel.onboarding.qrAfterRelayLine2":`le QR code apparaîtra ici`,"panel.onboarding.qrAfterAddress":`Une fois cette adresse connectée, le QR code apparaîtra ici`,"panel.onboarding.noQr":`Pas encore de QR code`,"panel.onboarding.preview":`Cet aperçu utilise l'adresse que tu as saisie. Seul « Entrer dans le greffon » l'enregistre dans la configuration.`,"panel.onboarding.relayNotConnected":`Le relais n'est pas encore connecté ; le scan ne marchera qu'ensuite.`,"panel.onboarding.direct":`Directe`,"panel.onboarding.thisAddress":`Cette adresse`,"panel.onboarding.lanFailed":`Impossible de lancer la connexion directe`,"panel.onboarding.relayFailed":`Relais non connecté`,"panel.onboarding.lanErrorWithPort":`{error} (le port est peut-être pris — choisis-en un autre dans « LAN direct » sur la page d'accueil.)`,"panel.onboarding.lanNoStart":`L'écoute directe n'a pas démarré ; un autre programme occupe peut-être le port.`,"panel.onboarding.tunnelErrorHint":`{error} (vérifie que l'adresse du relais est correcte et que le relais tourne.)`,"panel.onboarding.tunnelNoStart":`Le tunnel ne s'est pas monté ; vérifie l'adresse du relais.`,"panel.onboarding.pickAddress":`Quelle adresse le téléphone utilise`,"panel.onboarding.relayAddressHint":`Adresse du relais`,"panel.onboarding.recheckSaved":`Le relais qu'utilise cette machine, {url}, est injoignable pour l'instant. Vérifie qu'il tourne.`,"panel.onboarding.relayNoAnswer":`Rien ne répond sur {value}. Vérifie le domaine et que dsh-relay tourne.`,"panel.onboarding.relayNoAnswerUnsaved":`Rien ne répond sur {value} ; la configuration n'a pas changé. Vérifie le domaine et que dsh-relay tourne.`,"panel.onboarding.probe.empty":`Pas encore d'adresse`,"panel.onboarding.probe.busy":`Test en cours`,"panel.onboarding.probe.ok":`Joignable, pas encore enregistrée`,"panel.onboarding.probe.failed":`Injoignable`,"panel.onboarding.probe.idle":`Pas encore testée`,"panel.onboarding.probe.okWithHint":`Cette adresse est joignable et le QR code a été généré à partir d'elle (pas encore enregistrée dans la configuration).`,"panel.onboarding.checkFirewall":`Pas de connexion ? Vérifie le pare-feu`,"panel.onboarding.lanDirect":`LAN direct`,"panel.onboarding.chooseAddress":`Choisir l'adresse`,"panel.onboarding.setAddress":`Saisir l’adresse`,"panel.onboarding.publicRelay":`Relais public`,"panel.onboarding.publicRelayTemporary":`Usage temporaire`,"panel.onboarding.ownRelay":`Relais auto-hébergé`,"panel.onboarding.penetration":`Tunnel`,"panel.onboarding.penetrationAddress":`Adresse du tunnel`,"panel.onboarding.penetrationPlaceholder":`https://ton-domaine-tunnel.example`,"panel.onboarding.githubRepo":`Dépôt GitHub`,"panel.onboarding.currentLan":`Adresse LAN choisie`,"panel.onboarding.public":`Publique`,"panel.onboarding.ipv6More":`{count} autres adresses IPv6 ; ton téléphone prend la plus rapide`,"panel.onboarding.collapse":`Réduire`,"panel.onboarding.expand":`Développer`,"panel.onboarding.relayListTitle":`Adresses de relais publics (par latence mesurée)`,"panel.onboarding.probing":`Mesure…`,"panel.onboarding.autoBest":`Auto (plus rapide)`,"panel.onboarding.autoBestHint":`Prendre la plus rapide`,"panel.onboarding.probeUnreachable":`Injoignable`,"panel.onboarding.check":`Tester`,"panel.onboarding.enterPlugin":`Entrer dans le greffon`,"panel.onboarding.connecting":`Connexion…`,"panel.onboarding.fixFirst":`Règle d'abord les problèmes ci-dessus`,"panel.onboarding.fillRelayFirst":`Saisis d'abord l'adresse du relais`,"panel.onboarding.opening":`Ouverture…`,"panel.onboarding.openDirect":`Ouvrir la connexion directe`,"panel.onboarding.connectRelay":`Connecter le relais`,"panel.onboarding.firewallTitle":`Vérifier le pare-feu`,"panel.onboarding.firewallIntro":`Si ton téléphone n'atteint pas le port direct de cet ordinateur, c'est souvent l'ordinateur qui bloque le port. Le port direct par défaut est`,"panel.onboarding.firewallIntroTail":` (modifiable dans « LAN direct » sur la page d'accueil). Vérifie selon ton système ci-dessous.`,"panel.onboarding.copiedOk":`Copié — colle-le dans ton IA.`,"panel.onboarding.copiedFailed":`Échec de la copie ; sélectionne le texte et copie-le à la main.`,"panel.onboarding.lanDialogTitle":`Choisir une adresse LAN`,"panel.onboarding.lanDialogHint":`Ton téléphone essaie d'abord celle qui est choisie, puis se rabat sur les autres.`,"panel.onboarding.referenceOnly":`Pour information`,"panel.onboarding.lanGroupA11y":`Adresses LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Touche pour copier, puis laisse ton IA vérifier`,"panel.onboarding.copyPrompt":`Copier ce message de dépannage`,"panel.onboarding.linuxStep1":`1. Regarde l'état du pare-feu (firewalld ou ufw, selon ce qui est installé) :`,"panel.onboarding.linuxStep2":`2. Autorise le port direct :`,"panel.onboarding.linuxStep3":`3. Sur un serveur cloud, autorise aussi le même port dans le groupe de sécurité de la console du fournisseur — impossible à vérifier depuis cette machine.`,"panel.onboarding.macStep1":`1. Vérifie si le pare-feu d'applications est activé :`,"panel.onboarding.macStep2":`2. S'il l'est, dans Réglages Système → Réseau → Pare-feu → Options, mets DSH / node sur « Autoriser les connexions entrantes » ; pour le diagnostic tu peux le désactiver complètement :`,"panel.onboarding.macStep3":`3. Toujours bloqué sur le même Wi-Fi : vérifie que le téléphone et l'ordinateur sont bien sur le même sous-réseau, pas sur un réseau invité.`,"panel.onboarding.winStep1":`1. Dans PowerShell (administrateur), liste les profils de pare-feu :`,"panel.onboarding.winStep2":`2. Autorise le port direct :`,"panel.onboarding.winStep3":`3. Si tu as déjà créé une règle de blocage pour node, supprime-la ; choisis le type de réseau « Privé » et non « Public ».`,"panel.onboarding.prompt.intro":`Aide-moi à dépanner un problème.`,"panel.onboarding.prompt.situation":`Ma situation : le greffon mobile de DSH (DeepSeek Harness) est installé sur mon ordinateur, et l'app du téléphone n'arrive pas à joindre cet ordinateur en connexion directe sur le LAN.`,"panel.onboarding.prompt.address":`L'adresse saisie sur le téléphone est l'adresse LAN de cet ordinateur suivie du port (les adresse et port exacts sont sur la page web du greffon mobile ; il faut bien l'adresse LAN).`,"panel.onboarding.prompt.guess":`Sur l'ordinateur, le greffon indique qu'il écoute, mais le téléphone ne se connecte pas. Je pense que le pare-feu (ou le groupe de sécurité du serveur cloud) bloque ce port.`,"panel.onboarding.prompt.ask":`Peux-tu :`,"panel.onboarding.prompt.ask1":`1. Vérifie d'abord si mon système est Linux, macOS ou Windows (si tu n'es pas sûr, demande-moi ou dis-moi comment vérifier).`,"panel.onboarding.prompt.ask2":`2. Passe en revue une par une les étapes de ma configuration et dis-moi si ce port est ouvert et où ça bloque.`,"panel.onboarding.prompt.ask3":`3. Donne les commandes ou chemins de clic exacts pour ouvrir le port, et précise clairement où il faut des droits d'administrateur.`,"panel.onboarding.prompt.ask4":`4. Enfin, dis-moi comment vérifier que ça marche (par exemple quelle commande lancer sur l'ordinateur et sur le téléphone).`,"panel.onboarding.prompt.extra":`Remarque : si cet ordinateur est un serveur cloud, le groupe de sécurité ou le pare-feu de la console du fournisseur doit aussi ouvrir le même port, et ça ne se voit pas en local.`,"panel.onboarding.relayPlaceholder":`https://ton.domaine-relais`,"panel.onboarding.probe.failedBody":`Cette adresse est injoignable, aucun code QR ne sera généré. Vérifie qu'elle commence par http:// ou https://, que le relais tourne et que le domaine pointe dessus.`},pt:{"panel.onboarding.pairingHint":`Escaneie para conectar`,"panel.onboarding.statusFailed":`Não foi possível ler o status do plugin`,"panel.onboarding.stepFailed":`Esse passo não deu certo`,"panel.onboarding.qrAfterRelay":`Depois de preencher o endereço do relay abaixo`,"panel.onboarding.qrAfterRelayLine2":`o QR code aparece aqui`,"panel.onboarding.qrAfterAddress":`Quando este endereço conectar, o QR code aparece aqui`,"panel.onboarding.noQr":`Ainda sem QR code`,"panel.onboarding.preview":`Esta prévia usa o endereço que você digitou. Só «Entrar no plugin» salva esse endereço na configuração.`,"panel.onboarding.relayNotConnected":`O relay ainda não está conectado; escanear só funciona depois disso.`,"panel.onboarding.direct":`Direta`,"panel.onboarding.thisAddress":`Este endereço`,"panel.onboarding.lanFailed":`Não foi possível iniciar a conexão direta`,"panel.onboarding.relayFailed":`Relay não conectado`,"panel.onboarding.lanErrorWithPort":`{error} (a porta pode estar ocupada — escolha outra em «LAN direta» na página inicial.)`,"panel.onboarding.lanNoStart":`O listener direto não iniciou; outro programa pode estar usando a porta.`,"panel.onboarding.tunnelErrorHint":`{error} (confira se o endereço do relay está certo e se ele está rodando.)`,"panel.onboarding.tunnelNoStart":`O túnel não subiu; confira o endereço do relay.`,"panel.onboarding.pickAddress":`Qual endereço o celular usa`,"panel.onboarding.relayAddressHint":`Endereço do relay`,"panel.onboarding.recheckSaved":`O relay que esta máquina usa, {url}, está inacessível agora. Confira se ele está rodando.`,"panel.onboarding.relayNoAnswer":`Nada responde em {value}. Confira o domínio e se o dsh-relay está rodando.`,"panel.onboarding.relayNoAnswerUnsaved":`Nada responde em {value}; a configuração não foi alterada. Confira o domínio e se o dsh-relay está rodando.`,"panel.onboarding.probe.empty":`Ainda sem endereço`,"panel.onboarding.probe.busy":`Testando`,"panel.onboarding.probe.ok":`Conecta, ainda não salvo`,"panel.onboarding.probe.failed":`Não conecta`,"panel.onboarding.probe.idle":`Ainda não testado`,"panel.onboarding.probe.okWithHint":`Este endereço conecta e o QR code foi gerado a partir dele (ainda não está salvo na configuração).`,"panel.onboarding.checkFirewall":`Não conecta? Confira o firewall`,"panel.onboarding.lanDirect":`LAN direta`,"panel.onboarding.chooseAddress":`Escolher endereço`,"panel.onboarding.setAddress":`Preencher endereço`,"panel.onboarding.publicRelay":`Relay público`,"panel.onboarding.publicRelayTemporary":`Para uso temporário`,"panel.onboarding.ownRelay":`Relay próprio`,"panel.onboarding.penetration":`Túnel`,"panel.onboarding.penetrationAddress":`Endereço do túnel`,"panel.onboarding.penetrationPlaceholder":`https://seu-dominio-tunel.example`,"panel.onboarding.githubRepo":`Repositório no GitHub`,"panel.onboarding.currentLan":`Endereço LAN selecionado`,"panel.onboarding.public":`Pública`,"panel.onboarding.ipv6More":`Mais {count} endereços IPv6; o celular escolhe o mais rápido`,"panel.onboarding.collapse":`Recolher`,"panel.onboarding.expand":`Expandir`,"panel.onboarding.relayListTitle":`Endereços de relay públicos (por latência medida)`,"panel.onboarding.probing":`Medindo…`,"panel.onboarding.autoBest":`Auto (mais rápido)`,"panel.onboarding.autoBestHint":`Usar o mais rápido`,"panel.onboarding.probeUnreachable":`Inacessível`,"panel.onboarding.check":`Testar`,"panel.onboarding.enterPlugin":`Entrar no plugin`,"panel.onboarding.connecting":`Conectando…`,"panel.onboarding.fixFirst":`Resolva os problemas acima primeiro`,"panel.onboarding.fillRelayFirst":`Informe primeiro o endereço do relay`,"panel.onboarding.opening":`Abrindo…`,"panel.onboarding.openDirect":`Abrir conexão direta`,"panel.onboarding.connectRelay":`Conectar relay`,"panel.onboarding.firewallTitle":`Conferir o firewall`,"panel.onboarding.firewallIntro":`Se o celular não alcança a porta direta deste computador, normalmente é o próprio computador que bloqueia. A porta direta padrão é`,"panel.onboarding.firewallIntroTail":` (dá para mudar em «LAN direta» na página inicial). Confira por sistema abaixo.`,"panel.onboarding.copiedOk":`Copiado — cole na sua IA.`,"panel.onboarding.copiedFailed":`A cópia falhou; selecione o texto e copie manualmente.`,"panel.onboarding.lanDialogTitle":`Escolher um endereço LAN`,"panel.onboarding.lanDialogHint":`O celular tenta primeiro o escolhido e recorre aos outros.`,"panel.onboarding.referenceOnly":`Apenas para referência`,"panel.onboarding.lanGroupA11y":`Endereços LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Toque para copiar e deixar sua própria IA verificar`,"panel.onboarding.copyPrompt":`Copiar este prompt de diagnóstico`,"panel.onboarding.linuxStep1":`1. Veja o status do firewall (firewalld ou ufw, o que estiver instalado):`,"panel.onboarding.linuxStep2":`2. Libere a porta direta:`,"panel.onboarding.linuxStep3":`3. Em servidor na nuvem, libere a mesma porta também no grupo de segurança do console do provedor — não dá para verificar desta máquina.`,"panel.onboarding.macStep1":`1. Veja se o firewall de aplicativos está ativo:`,"panel.onboarding.macStep2":`2. Se estiver, em Ajustes do Sistema → Rede → Firewall → Opções, defina DSH / node como «Permitir conexões de entrada»; para diagnosticar você pode desligá-lo por completo:`,"panel.onboarding.macStep3":`3. Ainda falhando no mesmo Wi-Fi: confirme que celular e computador estão na mesma sub-rede, não em rede de visitantes.`,"panel.onboarding.winStep1":`1. No PowerShell (administrador), liste os perfis de firewall:`,"panel.onboarding.winStep2":`2. Libere a porta direta:`,"panel.onboarding.winStep3":`3. Se você já criou uma regra de bloqueio para node, apague-a; defina o tipo de rede como «Privada», não «Pública».`,"panel.onboarding.prompt.intro":`Me ajude a diagnosticar um problema.`,"panel.onboarding.prompt.situation":`Minha situação: instalei o plugin móvel do DSH (DeepSeek Harness) no computador, e o app do celular não consegue chegar a este computador por conexão direta na LAN.`,"panel.onboarding.prompt.address":`O endereço informado no celular é o endereço LAN deste computador mais a porta (o endereço e a porta exatos estão na página web do plugin móvel; precisa ser o endereço LAN).`,"panel.onboarding.prompt.guess":`No computador o plugin mostra que está escutando, mas o celular não conecta. Acho que o firewall (ou o grupo de segurança do servidor na nuvem) está bloqueando essa porta.`,"panel.onboarding.prompt.ask":`Por favor:`,"panel.onboarding.prompt.ask1":`1. Primeiro confirme se meu sistema é Linux, macOS ou Windows (se não tiver certeza, me pergunte ou me diga como verificar).`,"panel.onboarding.prompt.ask2":`2. Revise passo a passo as etapas da minha configuração e me diga se essa porta está aberta e onde trava.`,"panel.onboarding.prompt.ask3":`3. Me passe os comandos ou caminhos de clique exatos para liberar a porta e diga claramente onde precisa de permissões de administrador.`,"panel.onboarding.prompt.ask4":`4. Por fim, me diga como verificar que já funciona (por exemplo, qual comando rodar no computador e no celular).`,"panel.onboarding.prompt.extra":`Observação: se este computador for um servidor na nuvem, o grupo de segurança ou firewall no console do provedor também precisa liberar a mesma porta, e isso não dá para ver na máquina.`,"panel.onboarding.relayPlaceholder":`https://seu.dominio-relay`,"panel.onboarding.probe.failedBody":`Não dá para acessar este endereço, então o código QR não será gerado. Confirme que ele começa com http:// ou https://, que o relay está rodando e que o domínio aponta para ele.`},ru:{"panel.onboarding.pairingHint":`Сканируй для подключения`,"panel.onboarding.statusFailed":`Не удалось прочитать состояние плагина`,"panel.onboarding.stepFailed":`Этот шаг не удался`,"panel.onboarding.qrAfterRelay":`Когда введёшь адрес ретранслятора ниже`,"panel.onboarding.qrAfterRelayLine2":`здесь появится QR-код`,"panel.onboarding.qrAfterAddress":`Когда этот адрес подключится, здесь появится QR-код`,"panel.onboarding.noQr":`QR-код ещё не получен`,"panel.onboarding.preview":`Это предпросмотр по введённому адресу. В конфигурацию адрес попадёт только после нажатия «Войти в плагин».`,"panel.onboarding.relayNotConnected":`Ретранслятор ещё не подключён; сканировать имеет смысл только после этого.`,"panel.onboarding.direct":`Прямое`,"panel.onboarding.thisAddress":`Этот адрес`,"panel.onboarding.lanFailed":`Не удалось запустить прямое подключение`,"panel.onboarding.relayFailed":`Ретранслятор не подключён`,"panel.onboarding.lanErrorWithPort":`{error} (возможно, порт занят — выбери другой в «LAN напрямую» на главной.)`,"panel.onboarding.lanNoStart":`Прямое прослушивание не запустилось; возможно, порт занят другой программой.`,"panel.onboarding.tunnelErrorHint":`{error} (проверь, верно ли указан адрес ретранслятора и запущен ли он.)`,"panel.onboarding.tunnelNoStart":`Туннель не поднялся; проверь адрес ретранслятора.`,"panel.onboarding.pickAddress":`Какой адрес использует телефон`,"panel.onboarding.relayAddressHint":`Адрес ретранслятора`,"panel.onboarding.recheckSaved":`Ретранслятор, который использует эта машина, {url}, сейчас недоступен. Проверь, запущен ли он.`,"panel.onboarding.relayNoAnswer":`По адресу {value} ретранслятор не отвечает. Проверь домен и что dsh-relay запущен.`,"panel.onboarding.relayNoAnswerUnsaved":`По адресу {value} ретранслятор не отвечает, конфигурация не изменена. Проверь домен и что dsh-relay запущен.`,"panel.onboarding.probe.empty":`Адрес ещё не введён`,"panel.onboarding.probe.busy":`Проверка`,"panel.onboarding.probe.ok":`Доступен, ещё не сохранён`,"panel.onboarding.probe.failed":`Недоступен`,"panel.onboarding.probe.idle":`Ещё не проверялся`,"panel.onboarding.probe.okWithHint":`Этот адрес доступен, QR-код построен по нему (в конфигурацию ещё не сохранён).`,"panel.onboarding.checkFirewall":`Не подключается? Проверь фаервол`,"panel.onboarding.lanDirect":`LAN напрямую`,"panel.onboarding.chooseAddress":`Выбрать адрес`,"panel.onboarding.setAddress":`Указать адрес`,"panel.onboarding.publicRelay":`Публичный ретранслятор`,"panel.onboarding.publicRelayTemporary":`Временно`,"panel.onboarding.ownRelay":`Свой ретранслятор`,"panel.onboarding.penetration":`Туннель`,"panel.onboarding.penetrationAddress":`Адрес туннеля`,"panel.onboarding.penetrationPlaceholder":`https://tvoy-tunnel.example`,"panel.onboarding.githubRepo":`Репозиторий GitHub`,"panel.onboarding.currentLan":`Выбранный адрес LAN`,"panel.onboarding.public":`Публичный`,"panel.onboarding.ipv6More":`Ещё {count} адресов IPv6; телефон выберет самый быстрый`,"panel.onboarding.collapse":`Свернуть`,"panel.onboarding.expand":`Развернуть`,"panel.onboarding.relayListTitle":`Публичные адреса ретрансляторов (по замеренной задержке)`,"panel.onboarding.probing":`Замер…`,"panel.onboarding.autoBest":`Авто (быстрейший)`,"panel.onboarding.autoBestHint":`Взять самый быстрый`,"panel.onboarding.probeUnreachable":`Недоступен`,"panel.onboarding.check":`Проверить`,"panel.onboarding.enterPlugin":`Войти в плагин`,"panel.onboarding.connecting":`Подключение…`,"panel.onboarding.fixFirst":`Сначала реши проблемы выше`,"panel.onboarding.fillRelayFirst":`Сначала введи адрес ретранслятора`,"panel.onboarding.opening":`Открытие…`,"panel.onboarding.openDirect":`Открыть прямое подключение`,"panel.onboarding.connectRelay":`Подключить ретранслятор`,"panel.onboarding.firewallTitle":`Проверить фаервол`,"panel.onboarding.firewallIntro":`Если телефон не достаёт до прямого порта этого компьютера, обычно порт блокирует сам компьютер. Прямой порт по умолчанию —`,"panel.onboarding.firewallIntroTail":` (меняется на главной в «LAN напрямую»). Ниже проверка по системам.`,"panel.onboarding.copiedOk":`Скопировано — вставь в свой ИИ.`,"panel.onboarding.copiedFailed":`Копирование не удалось; выдели текст и скопируй вручную.`,"panel.onboarding.lanDialogTitle":`Выбрать адрес LAN`,"panel.onboarding.lanDialogHint":`Телефон сначала пробует выбранный, затем остальные.`,"panel.onboarding.referenceOnly":`Только для справки`,"panel.onboarding.lanGroupA11y":`Адреса LAN`,"panel.onboarding.lan":`LAN`,"panel.onboarding.copyPromptHint":`Нажми, чтобы скопировать и проверить своим ИИ`,"panel.onboarding.copyPrompt":`Скопировать запрос для диагностики`,"panel.onboarding.linuxStep1":`1. Посмотри состояние фаервола (firewalld или ufw — что установлено):`,"panel.onboarding.linuxStep2":`2. Открой прямой порт:`,"panel.onboarding.linuxStep3":`3. На облачном сервере тот же порт нужно открыть ещё и в группе безопасности консоли провайдера — с этой машины это не проверить.`,"panel.onboarding.macStep1":`1. Проверь, включён ли фаервол приложений:`,"panel.onboarding.macStep2":`2. Если включён, в «Системные настройки → Сеть → Фаервол → Параметры» поставь DSH / node в «Разрешить входящие подключения»; для диагностики его можно отключить совсем:`,"panel.onboarding.macStep3":`3. В той же Wi-Fi всё равно не подключается: убедись, что телефон и компьютер в одной подсети, а не в гостевой сети.`,"panel.onboarding.winStep1":`1. В PowerShell (администратор) посмотри профили фаервола:`,"panel.onboarding.winStep2":`2. Открой прямой порт:`,"panel.onboarding.winStep3":`3. Если раньше создавал правило блокировки для node, удали его; тип сети — «Частная», а не «Общая».`,"panel.onboarding.prompt.intro":`Помоги разобраться с проблемой.`,"panel.onboarding.prompt.situation":`Моя ситуация: на компьютере стоит мобильный плагин DSH (DeepSeek Harness), и приложение на телефоне не может достучаться до этого компьютера по прямому подключению в локальной сети.`,"panel.onboarding.prompt.address":`Адрес, введённый на телефоне, — это адрес LAN этого компьютера плюс порт (точные адрес и порт смотри на веб-странице мобильного плагина; нужен именно адрес LAN).`,"panel.onboarding.prompt.guess":`На компьютере плагин показывает, что слушает, но телефон не подключается. Думаю, порт блокирует брандмауэр (или группа безопасности облачного сервера).`,"panel.onboarding.prompt.ask":`Пожалуйста:`,"panel.onboarding.prompt.ask1":`1. Сначала определи, какая у меня система: Linux, macOS или Windows (если не уверен, спроси меня или подскажи, как это проверить).`,"panel.onboarding.prompt.ask2":`2. Пройди по шагам для моего варианта и скажи, открыт ли сейчас этот порт и на каком шаге всё встаёт.`,"panel.onboarding.prompt.ask3":`3. Дай точные команды или пути в меню, чтобы открыть порт, и явно укажи, где нужны права администратора.`,"panel.onboarding.prompt.ask4":`4. В конце скажи, как проверить, что уже работает (например, какой командой это сделать на компьютере и на телефоне).`,"panel.onboarding.prompt.extra":`Примечание: если этот компьютер — облачный сервер, тот же порт нужно открыть и в группе безопасности или брандмауэре панели провайдера, локально это не проверить.`,"panel.onboarding.relayPlaceholder":`https://твой.домен-ретранслятора`,"panel.onboarding.probe.failedBody":`Этот адрес недоступен, поэтому QR-код не создастся. Проверь, что он начинается с http:// или https://, что ретранслятор запущен и что домен указывает на него.`}},{"zh-Hans":{"panel.update.title":`插件更新`,"panel.update.unknownVersion":`未知版本`,"panel.update.reading":`正在读更新状态…`,"panel.update.runningVersion":`运行中版本`,"panel.update.latestOnline":`线上最新`,"panel.update.notChecked":`还没查过`,"panel.update.neverUpdated":`还没更新过`,"panel.update.lastCheck":`最近一次检查`,"panel.update.lastApply":`最近一次更新`,"panel.update.hasNew":`线上有新版本。`,"panel.update.nothingToInstall":`这台宿主的面板里不装新代码(当前这份实现是直接被挂载的):无头 / 源码同步部署到服务器上同步源码 + 重启宿主服务;桌面端旧版到「设置 → 插件 → 本插件」里更新一版。`,"panel.update.noMarketTitle":`这台机器上没有可用的插件市场`,"panel.update.noMarketBody":`插件从 npm 分发,更新由 DSH 的插件市场负责:到「设置 → 插件」里更新本插件(或装上插件市场)。`,"panel.update.autoUpdate":`自动更新`,"panel.update.shellChangedTitle":`这次更新里外壳也换了`,"panel.update.shellChangedBody":`它有极少数改动要等下次启动 DSH 才生效(更新本身已经生效,不用管)。`,"panel.update.restartSidecar":`重启 sidecar`,"panel.update.checking":`正在检查…`,"panel.update.check":`检查更新`,"panel.update.updating":`正在更新…`,"panel.update.updateNow":`立即更新`,"panel.update.forceHint":`强制更新(有对话在跑、或刚发布的,也照装)`,"panel.update.resultHasNew":`有新版可以装`,"panel.update.resultUpToDate":`已经是最新版`,"panel.update.applyUpToDate":`已经是最新版({version}),没有改动任何文件。`,"panel.update.applyUpToDatePlain":`已经是最新版,没有改动任何文件。`,"panel.update.applyDiskUnchanged":`装了但盘上的版本没变(还是 {version}),这次不算数,可以再点一次。`,"panel.update.applyFailedRetry":`这次更新没成,可以再点一次。`,"panel.update.applySwitched":`已就地切到 {version},无需重启。`,"panel.update.applySwitchedPlain":`已就地切到新版本,无需重启。`,"panel.update.autoOn":`自动更新已开启:每 {minutes} 分钟查一次,有新版直接装好并就地生效,不等正在跑的对话结束。`,"panel.update.autoOff":`自动更新已关闭,之后只在点「检查更新」时才问市场。`,"panel.update.autoToggleFailed":`自动更新开关没保存成功:{message}`,"panel.update.versionDrift":`这两个版本对不上:面板报的 {version} 是进程启动时读进内存的,外壳实际装载的是 {shell}。一般是外壳刚换过代、页面还没重新读取;刷新一下这一页就一致了。`,"panel.update.checkResult":`检查结果`,"panel.update.applyFailed":`这次更新没成:{message}`,"panel.update.lastErrorLine":`最近一次出过错:{message}`},"zh-Hant":{"panel.update.title":`外掛更新`,"panel.update.unknownVersion":`未知版本`,"panel.update.reading":`正在讀取更新狀態…`,"panel.update.runningVersion":`執行中版本`,"panel.update.latestOnline":`線上最新`,"panel.update.notChecked":`還沒查過`,"panel.update.neverUpdated":`還沒更新過`,"panel.update.lastCheck":`最近一次檢查`,"panel.update.lastApply":`最近一次更新`,"panel.update.hasNew":`線上已有新版本。`,"panel.update.nothingToInstall":`這台宿主的面板裡不裝新程式碼(目前這份實作是直接被掛載的):無頭 / 原始碼同步部署到伺服器上同步原始碼 + 重新啟動宿主服務;桌面端舊版到「設定 → 外掛 → 本外掛」裡更新一版。`,"panel.update.noMarketTitle":`這台機器上沒有可用的外掛市場`,"panel.update.noMarketBody":`外掛從 npm 發佈,更新由 DSH 的外掛市場負責:到「設定 → 外掛」裡更新本外掛(或裝上外掛市場)。`,"panel.update.autoUpdate":`自動更新`,"panel.update.shellChangedTitle":`這次更新裡外殼也換了`,"panel.update.shellChangedBody":`它有極少數改動要等下次啟動 DSH 才生效(更新本身已經生效,不用管)。`,"panel.update.restartSidecar":`重新啟動 sidecar`,"panel.update.checking":`正在檢查…`,"panel.update.check":`檢查更新`,"panel.update.updating":`正在更新…`,"panel.update.updateNow":`立即更新`,"panel.update.forceHint":`強制更新(有對話在跑、或剛發佈的,也照裝)`,"panel.update.resultHasNew":`有新版可以裝`,"panel.update.resultUpToDate":`已經是最新版`,"panel.update.applyUpToDate":`已經是最新版({version}),沒有改動任何檔案。`,"panel.update.applyUpToDatePlain":`已經是最新版,沒有改動任何檔案。`,"panel.update.applyDiskUnchanged":`裝了但磁碟上的版本沒變(還是 {version}),這次不算數,可以再點一次。`,"panel.update.applyFailedRetry":`這次更新沒成,可以再點一次。`,"panel.update.applySwitched":`已就地切到 {version},無需重新啟動。`,"panel.update.applySwitchedPlain":`已就地切到新版本,無需重新啟動。`,"panel.update.autoOn":`自動更新已開啟:每 {minutes} 分鐘查一次,有新版直接裝好並就地生效,不等正在跑的對話結束。`,"panel.update.autoOff":`自動更新已關閉,之後只在點「檢查更新」時才問市場。`,"panel.update.autoToggleFailed":`自動更新開關沒有儲存成功:{message}`,"panel.update.versionDrift":`這兩個版本對不上:面板報的 {version} 是程序啟動時讀進記憶體的,外殼實際裝載的是 {shell}。一般是外殼剛換過代、頁面還沒重新讀取;重新整理這一頁就一致了。`,"panel.update.checkResult":`檢查結果`,"panel.update.applyFailed":`這次更新沒成:{message}`,"panel.update.lastErrorLine":`最近一次出錯過:{message}`},en:{"panel.update.title":`Plugin update`,"panel.update.unknownVersion":`Unknown version`,"panel.update.reading":`Reading update status…`,"panel.update.runningVersion":`Running version`,"panel.update.latestOnline":`Latest online`,"panel.update.notChecked":`Not checked yet`,"panel.update.neverUpdated":`Never updated`,"panel.update.lastCheck":`Last check`,"panel.update.lastApply":`Last update`,"panel.update.hasNew":`A new version is available online.`,"panel.update.nothingToInstall":`This host’s panel does not install new code (this implementation is mounted directly): for headless or source-synced deployments, sync the source and restart the host service; on an older desktop build, update it under Settings → Plugins → This plugin.`,"panel.update.noMarketTitle":`No usable plugin marketplace on this machine`,"panel.update.noMarketBody":`The plugin is distributed via npm and updated by DSH’s plugin marketplace: go to Settings → Plugins to update it (or install the marketplace).`,"panel.update.autoUpdate":`Auto-update`,"panel.update.shellChangedTitle":`This update also changed the shell`,"panel.update.shellChangedBody":`A few of its changes take effect the next time DSH starts (the update itself is already in effect — nothing to do).`,"panel.update.restartSidecar":`Restart sidecar`,"panel.update.checking":`Checking…`,"panel.update.check":`Check for updates`,"panel.update.updating":`Updating…`,"panel.update.updateNow":`Update now`,"panel.update.forceHint":`Forced update (installs even with chats running or right after release)`,"panel.update.resultHasNew":`A new version is available`,"panel.update.resultUpToDate":`Already up to date`,"panel.update.applyUpToDate":`Already up to date ({version}); no files changed.`,"panel.update.applyUpToDatePlain":`Already up to date; no files changed.`,"panel.update.applyDiskUnchanged":`Installed but the on-disk version is unchanged ({version}); this attempt did not count — try again.`,"panel.update.applyFailedRetry":`This update did not go through; try again.`,"panel.update.applySwitched":`Switched to {version} in place; no restart needed.`,"panel.update.applySwitchedPlain":`Switched to the new version in place; no restart needed.`,"panel.update.autoOn":`Auto-update on: checks every {minutes} minutes and installs new versions in place without waiting for running conversations to finish.`,"panel.update.autoOff":`Auto-update off: the marketplace is only asked when you tap “Check for updates”.`,"panel.update.autoToggleFailed":`Could not save the auto-update switch: {message}`,"panel.update.versionDrift":`These two versions disagree: the panel reports {version} (read into memory at process start) while the shell actually loaded {shell}. Usually the shell was just replaced and this page has not re-read it; refresh the page.`,"panel.update.checkResult":`Result`,"panel.update.applyFailed":`This update did not go through: {message}`,"panel.update.lastErrorLine":`Last failure: {message}`},ja:{"panel.update.title":`プラグインの更新`,"panel.update.unknownVersion":`不明なバージョン`,"panel.update.reading":`更新状態を読み込み中…`,"panel.update.runningVersion":`実行中のバージョン`,"panel.update.latestOnline":`オンライン最新`,"panel.update.notChecked":`まだ確認していません`,"panel.update.neverUpdated":`まだ更新していません`,"panel.update.lastCheck":`最後の確認`,"panel.update.lastApply":`最後の更新`,"panel.update.hasNew":`オンラインに新しい版があります。`,"panel.update.nothingToInstall":`このホストのパネルでは新しいコードをインストールしません(現在の実装は直接マウントされています)。ヘッドレス/ソース同期配備ではソースを同期してホストサービスを再起動してください。古いデスクトップ版では「設定 → プラグイン → 本プラグイン」から更新してください。`,"panel.update.noMarketTitle":`このマシンには利用可能なプラグインマーケットがありません`,"panel.update.noMarketBody":`プラグインは npm で配布され、更新は DSH のプラグインマーケットが担います。「設定 → プラグイン」から更新してください(またはマーケットを入れてください)。`,"panel.update.autoUpdate":`自動更新`,"panel.update.shellChangedTitle":`この更新では外側も変わりました`,"panel.update.shellChangedBody":`ごく一部の変更は次に DSH を起動したときに有効になります(更新自体は既に有効です。何もする必要はありません)。`,"panel.update.restartSidecar":`サイドカーを再起動`,"panel.update.checking":`確認中…`,"panel.update.check":`更新を確認`,"panel.update.updating":`更新中…`,"panel.update.updateNow":`今すぐ更新`,"panel.update.forceHint":`強制更新(会話が実行中でも、公開直後でもインストールします)`,"panel.update.resultHasNew":`新しい版をインストールできます`,"panel.update.resultUpToDate":`最新版です`,"panel.update.applyUpToDate":`最新版({version})です。ファイルは変更していません。`,"panel.update.applyUpToDatePlain":`最新版です。ファイルは変更していません。`,"panel.update.applyDiskUnchanged":`インストールしましたがディスク上のバージョンが変わりません({version})。今回は反映されていないので、もう一度お試しください。`,"panel.update.applyFailedRetry":`今回の更新は完了しませんでした。もう一度お試しください。`,"panel.update.applySwitched":`{version} にその場で切り替えました。再起動は不要です。`,"panel.update.applySwitchedPlain":`新しい版にその場で切り替えました。再起動は不要です。`,"panel.update.autoOn":`自動更新をオンにしました。{minutes} 分ごとに確認し、新しい版があれば実行中の会話の終了を待たずに自動でインストールして反映します。`,"panel.update.autoOff":`自動更新をオフにしました。以降は「更新を確認」を押したときだけマーケットに問い合わせます。`,"panel.update.autoToggleFailed":`自動更新の切り替えを保存できませんでした:{message}`,"panel.update.versionDrift":`この 2 つのバージョンが一致しません。パネルが報告している {version} はプロセス起動時に読み込んだ値で、実際に読み込まれた外側は {shell} です。多くの場合、外側が入れ替わった直後でページが再読み込みされていないだけです。このページを再読み込みしてください。`,"panel.update.checkResult":`確認結果`,"panel.update.applyFailed":`今回の更新は完了しませんでした:{message}`,"panel.update.lastErrorLine":`直近の失敗:{message}`},ko:{"panel.update.title":`플러그인 업데이트`,"panel.update.unknownVersion":`알 수 없는 버전`,"panel.update.reading":`업데이트 상태를 읽는 중…`,"panel.update.runningVersion":`실행 중 버전`,"panel.update.latestOnline":`온라인 최신`,"panel.update.notChecked":`아직 확인하지 않았습니다`,"panel.update.neverUpdated":`업데이트한 적 없습니다`,"panel.update.lastCheck":`마지막 확인`,"panel.update.lastApply":`마지막 업데이트`,"panel.update.hasNew":`온라인에 새 버전이 있습니다.`,"panel.update.nothingToInstall":`이 호스트의 패널은 새 코드를 설치하지 않습니다(현재 구현은 직접 마운트됩니다). 헤드리스 또는 소스 동기화 배포에서는 소스를 동기화하고 호스트 서비스를 재시작하세요. 이전 데스크톱 버전에서는 설정 → 플러그인 → 이 플러그인에서 업데이트하세요.`,"panel.update.noMarketTitle":`이 컴퓨터에는 사용 가능한 플러그인 마켓이 없습니다`,"panel.update.noMarketBody":`플러그인은 npm으로 배포되며 DSH의 플러그인 마켓에서 업데이트합니다. 설정 → 플러그인에서 업데이트하세요(또는 마켓을 설치하세요).`,"panel.update.autoUpdate":`자동 업데이트`,"panel.update.shellChangedTitle":`이 업데이트에서 외형도 바뀌었습니다`,"panel.update.shellChangedBody":`일부 변경은 DSH를 다음에 시작할 때 적용됩니다(업데이트 자체는 이미 적용되었으니 신경 쓰지 않으셔도 됩니다).`,"panel.update.restartSidecar":`사이드카 재시작`,"panel.update.checking":`확인 중…`,"panel.update.check":`업데이트 확인`,"panel.update.updating":`업데이트 중…`,"panel.update.updateNow":`지금 업데이트`,"panel.update.forceHint":`강제 업데이트(대화가 실행 중이거나 방금 배포된 경우에도 설치)`,"panel.update.resultHasNew":`새 버전을 설치할 수 있습니다`,"panel.update.resultUpToDate":`이미 최신 버전입니다`,"panel.update.applyUpToDate":`이미 최신 버전({version})이며 파일을 변경하지 않았습니다.`,"panel.update.applyUpToDatePlain":`이미 최신 버전이며 파일을 변경하지 않았습니다.`,"panel.update.applyDiskUnchanged":`설치했지만 디스크 버전이 그대로입니다({version}). 이번 시도는 반영되지 않았으니 다시 시도하세요.`,"panel.update.applyFailedRetry":`이번 업데이트가 완료되지 않았습니다. 다시 시도하세요.`,"panel.update.applySwitched":`{version}(으)로 즉시 전환했습니다. 재시작이 필요 없습니다.`,"panel.update.applySwitchedPlain":`새 버전으로 즉시 전환했습니다. 재시작이 필요 없습니다.`,"panel.update.autoOn":`자동 업데이트를 켰습니다. {minutes}분마다 확인하고 새 버전이 있으면 실행 중인 대화가 끝나기를 기다리지 않고 바로 설치해 적용합니다.`,"panel.update.autoOff":`자동 업데이트를 껐습니다. 이후에는 「업데이트 확인」을 눌렀을 때만 마켓에 문의합니다.`,"panel.update.autoToggleFailed":`자동 업데이트 스위치를 저장하지 못했습니다: {message}`,"panel.update.versionDrift":`두 버전이 일치하지 않습니다. 패널이 보고하는 {version}은 프로세스 시작 시 읽은 값이고, 실제로 로드된 외형은 {shell}입니다. 보통 외형이 막 교체되어 페이지가 다시 읽지 않은 경우이니 이 페이지를 새로 고치세요.`,"panel.update.checkResult":`확인 결과`,"panel.update.applyFailed":`이번 업데이트가 완료되지 않았습니다: {message}`,"panel.update.lastErrorLine":`최근 오류: {message}`},de:{"panel.update.title":`Plugin-Update`,"panel.update.unknownVersion":`Unbekannte Version`,"panel.update.reading":`Update-Status wird gelesen…`,"panel.update.runningVersion":`Laufende Version`,"panel.update.latestOnline":`Neueste online`,"panel.update.notChecked":`Noch nicht geprüft`,"panel.update.neverUpdated":`Noch nie aktualisiert`,"panel.update.lastCheck":`Letzte Prüfung`,"panel.update.lastApply":`Letztes Update`,"panel.update.hasNew":`Online ist eine neue Version verfügbar.`,"panel.update.nothingToInstall":`Das Panel dieses Hosts installiert keinen neuen Code (diese Implementierung ist direkt eingebunden): Bei Headless- oder quelltextsynchronisierten Installationen den Quelltext synchronisieren und den Host-Dienst neu starten; in einer älteren Desktop-Version unter Einstellungen → Plugins → Dieses Plugin aktualisieren.`,"panel.update.noMarketTitle":`Auf dieser Maschine gibt es keinen nutzbaren Plugin-Marktplatz`,"panel.update.noMarketBody":`Das Plugin wird über npm verteilt, Updates laufen über den Plugin-Marktplatz von DSH: Unter Einstellungen → Plugins dieses Plugin aktualisieren (oder den Marktplatz installieren).`,"panel.update.autoUpdate":`Automatische Updates`,"panel.update.shellChangedTitle":`Dieses Update hat auch die Shell geändert`,"panel.update.shellChangedBody":`Einige wenige Änderungen werden erst beim nächsten Start von DSH wirksam (das Update selbst ist bereits aktiv, du musst nichts tun).`,"panel.update.restartSidecar":`Sidecar neu starten`,"panel.update.checking":`Wird geprüft…`,"panel.update.check":`Auf Updates prüfen`,"panel.update.updating":`Wird aktualisiert…`,"panel.update.updateNow":`Jetzt aktualisieren`,"panel.update.forceHint":`Erzwungenes Update (wird auch bei laufenden Unterhaltungen oder direkt nach der Veröffentlichung installiert)`,"panel.update.resultHasNew":`Neue Version verfügbar`,"panel.update.resultUpToDate":`Bereits aktuell`,"panel.update.applyUpToDate":`Bereits aktuell ({version}), keine Dateien geändert.`,"panel.update.applyUpToDatePlain":`Bereits aktuell, keine Dateien geändert.`,"panel.update.applyDiskUnchanged":`Installiert, aber die Version auf der Platte ist unverändert (weiterhin {version}); dieser Versuch zählt nicht, bitte noch einmal klicken.`,"panel.update.applyFailedRetry":`Dieses Update ist fehlgeschlagen; bitte noch einmal klicken.`,"panel.update.applySwitched":`In-place auf {version} umgestellt, kein Neustart nötig.`,"panel.update.applySwitchedPlain":`In-place auf die neue Version umgestellt, kein Neustart nötig.`,"panel.update.autoOn":`Automatische Updates an: prüft alle {minutes} Minuten und installiert neue Versionen direkt, ohne auf laufende Unterhaltungen zu warten.`,"panel.update.autoOff":`Automatische Updates aus: der Marktplatz wird nur noch bei „Auf Updates prüfen“ gefragt.`,"panel.update.autoToggleFailed":`Der Schalter für automatische Updates wurde nicht gespeichert: {message}`,"panel.update.versionDrift":`Diese beiden Versionen passen nicht zusammen: Das Panel meldet {version} (beim Prozessstart in den Speicher gelesen), die Shell hat aber {shell} geladen. Meist wurde die Shell gerade ersetzt und die Seite hat noch nicht neu gelesen; nach einem Neuladen stimmen beide überein.`,"panel.update.checkResult":`Prüfergebnis`,"panel.update.applyFailed":`Dieses Update ist fehlgeschlagen: {message}`,"panel.update.lastErrorLine":`Letzter Fehler: {message}`},es:{"panel.update.title":`Actualización del complemento`,"panel.update.unknownVersion":`Versión desconocida`,"panel.update.reading":`Leyendo el estado de la actualización…`,"panel.update.runningVersion":`Versión en ejecución`,"panel.update.latestOnline":`Última en línea`,"panel.update.notChecked":`Aún sin comprobar`,"panel.update.neverUpdated":`Nunca actualizado`,"panel.update.lastCheck":`Última comprobación`,"panel.update.lastApply":`Última actualización`,"panel.update.hasNew":`Hay una nueva versión en línea.`,"panel.update.nothingToInstall":`El panel de este host no instala código nuevo (esta implementación está montada directamente): en despliegues sin cabeza o sincronizados por código fuente, sincroniza el código y reinicia el servicio del host; en una versión de escritorio antigua, actualízalo en Ajustes → Complementos → Este complemento.`,"panel.update.noMarketTitle":`No hay una tienda de complementos disponible en esta máquina`,"panel.update.noMarketBody":`El complemento se distribuye por npm y lo actualiza la tienda de complementos de DSH: ve a Ajustes → Complementos para actualizarlo (o instala la tienda).`,"panel.update.autoUpdate":`Actualización automática`,"panel.update.shellChangedTitle":`Esta actualización también cambió el shell`,"panel.update.shellChangedBody":`Unos pocos cambios se aplican la próxima vez que inicies DSH (la actualización ya está activa, no hace falta hacer nada).`,"panel.update.restartSidecar":`Reiniciar sidecar`,"panel.update.checking":`Comprobando…`,"panel.update.check":`Buscar actualizaciones`,"panel.update.updating":`Actualizando…`,"panel.update.updateNow":`Actualizar ahora`,"panel.update.forceHint":`Actualización forzada (se instala aunque haya conversaciones activas o justo tras publicarse)`,"panel.update.resultHasNew":`Hay una nueva versión para instalar`,"panel.update.resultUpToDate":`Ya está actualizado`,"panel.update.applyUpToDate":`Ya está actualizado ({version}); no se cambió ningún archivo.`,"panel.update.applyUpToDatePlain":`Ya está actualizado; no se cambió ningún archivo.`,"panel.update.applyDiskUnchanged":`Se instaló, pero la versión en disco no cambió (sigue en {version}); este intento no cuenta, vuelve a intentarlo.`,"panel.update.applyFailedRetry":`Esta actualización no salió; vuelve a intentarlo.`,"panel.update.applySwitched":`Cambiado a {version} en el sitio; no hace falta reiniciar.`,"panel.update.applySwitchedPlain":`Cambiado a la nueva versión en el sitio; no hace falta reiniciar.`,"panel.update.autoOn":`Actualización automática activada: comprueba cada {minutes} minutos e instala las nuevas versiones sin esperar a que terminen las conversaciones en curso.`,"panel.update.autoOff":`Actualización automática desactivada: la tienda solo se consulta al pulsar «Buscar actualizaciones».`,"panel.update.autoToggleFailed":`No se pudo guardar el interruptor de actualización automática: {message}`,"panel.update.versionDrift":`Estas dos versiones no coinciden: el panel informa {version} (leída en memoria al iniciar el proceso), mientras que el shell cargó {shell}. Normalmente el shell acaba de cambiar y la página aún no lo ha releído; al refrescar la página coincidirán.`,"panel.update.checkResult":`Resultado de la comprobación`,"panel.update.applyFailed":`Esta actualización no salió: {message}`,"panel.update.lastErrorLine":`Último fallo: {message}`},fr:{"panel.update.title":`Mise à jour du greffon`,"panel.update.unknownVersion":`Version inconnue`,"panel.update.reading":`Lecture de l’état de la mise à jour…`,"panel.update.runningVersion":`Version en cours`,"panel.update.latestOnline":`Dernière en ligne`,"panel.update.notChecked":`Pas encore vérifié`,"panel.update.neverUpdated":`Jamais mis à jour`,"panel.update.lastCheck":`Dernière vérification`,"panel.update.lastApply":`Dernière mise à jour`,"panel.update.hasNew":`Une nouvelle version est disponible en ligne.`,"panel.update.nothingToInstall":`Le panneau de cet hôte n’installe pas de nouveau code (cette implémentation est montée directement) : pour les déploiements sans interface ou synchronisés par code source, synchronisez le code et redémarrez le service de l’hôte ; sur une ancienne version de bureau, mettez-le à jour dans Réglages → Greffons → Ce greffon.`,"panel.update.noMarketTitle":`Aucune place de marché de greffons disponible sur cette machine`,"panel.update.noMarketBody":`Le greffon est distribué via npm et mis à jour par la place de marché de DSH : allez dans Réglages → Greffons pour le mettre à jour (ou installez la place de marché).`,"panel.update.autoUpdate":`Mise à jour automatique`,"panel.update.shellChangedTitle":`Cette mise à jour a aussi changé le shell`,"panel.update.shellChangedBody":`Quelques rares changements prendront effet au prochain démarrage de DSH (la mise à jour elle-même est déjà active, rien à faire).`,"panel.update.restartSidecar":`Redémarrer le sidecar`,"panel.update.checking":`Vérification…`,"panel.update.check":`Vérifier les mises à jour`,"panel.update.updating":`Mise à jour…`,"panel.update.updateNow":`Mettre à jour`,"panel.update.forceHint":`Mise à jour forcée (s’installe même avec des conversations en cours ou juste après la sortie)`,"panel.update.resultHasNew":`Une nouvelle version est à installer`,"panel.update.resultUpToDate":`Déjà à jour`,"panel.update.applyUpToDate":`Déjà à jour ({version}) ; aucun fichier modifié.`,"panel.update.applyUpToDatePlain":`Déjà à jour ; aucun fichier modifié.`,"panel.update.applyDiskUnchanged":`Installé, mais la version sur disque n’a pas changé (toujours {version}) ; cette tentative ne compte pas, réessayez.`,"panel.update.applyFailedRetry":`Cette mise à jour a échoué ; réessayez.`,"panel.update.applySwitched":`Passé à {version} sur place, aucun redémarrage nécessaire.`,"panel.update.applySwitchedPlain":`Passé à la nouvelle version sur place, aucun redémarrage nécessaire.`,"panel.update.autoOn":`Mises à jour automatiques activées : vérifie toutes les {minutes} minutes et installe les nouvelles versions sans attendre la fin des conversations en cours.`,"panel.update.autoOff":`Mises à jour automatiques désactivées : la place de marché n’est interrogée que sur « Vérifier les mises à jour ».`,"panel.update.autoToggleFailed":`Impossible d’enregistrer l’interrupteur de mise à jour automatique : {message}`,"panel.update.versionDrift":`Ces deux versions ne concordent pas : le panneau indique {version} (lue en mémoire au démarrage du processus), alors que le shell a chargé {shell}. En général, le shell vient d’être remplacé et la page ne l’a pas encore relu ; un rafraîchissement les alignera.`,"panel.update.checkResult":`Résultat de la vérification`,"panel.update.applyFailed":`Cette mise à jour a échoué : {message}`,"panel.update.lastErrorLine":`Dernier échec : {message}`},pt:{"panel.update.title":`Atualização do plugin`,"panel.update.unknownVersion":`Versão desconhecida`,"panel.update.reading":`Lendo o estado da atualização…`,"panel.update.runningVersion":`Versão em execução`,"panel.update.latestOnline":`Mais recente online`,"panel.update.notChecked":`Ainda não verificado`,"panel.update.neverUpdated":`Nunca atualizado`,"panel.update.lastCheck":`Última verificação`,"panel.update.lastApply":`Última atualização`,"panel.update.hasNew":`Há uma nova versão online.`,"panel.update.nothingToInstall":`O painel deste host não instala código novo (esta implementação é montada diretamente): em implantações headless ou sincronizadas por código-fonte, sincronize o código e reinicie o serviço do host; em uma versão de desktop antiga, atualize em Configurações → Plugins → Este plugin.`,"panel.update.noMarketTitle":`Não há loja de plugins disponível nesta máquina`,"panel.update.noMarketBody":`O plugin é distribuído via npm e atualizado pela loja de plugins do DSH: vá em Configurações → Plugins para atualizá-lo (ou instale a loja).`,"panel.update.autoUpdate":`Atualização automática`,"panel.update.shellChangedTitle":`Esta atualização também mudou o shell`,"panel.update.shellChangedBody":`Algumas poucas mudanças valem só no próximo início do DSH (a atualização em si já está ativa, não precisa fazer nada).`,"panel.update.restartSidecar":`Reiniciar sidecar`,"panel.update.checking":`Verificando…`,"panel.update.check":`Verificar atualizações`,"panel.update.updating":`Atualizando…`,"panel.update.updateNow":`Atualizar agora`,"panel.update.forceHint":`Atualização forçada (instala mesmo com conversas em andamento ou logo após o lançamento)`,"panel.update.resultHasNew":`Há uma nova versão para instalar`,"panel.update.resultUpToDate":`Já está atualizado`,"panel.update.applyUpToDate":`Já está atualizado ({version}); nenhum arquivo foi alterado.`,"panel.update.applyUpToDatePlain":`Já está atualizado; nenhum arquivo foi alterado.`,"panel.update.applyDiskUnchanged":`Instalou, mas a versão em disco não mudou (continua {version}); esta tentativa não vale, tente de novo.`,"panel.update.applyFailedRetry":`Esta atualização não deu certo; tente de novo.`,"panel.update.applySwitched":`Alterado para {version} no local; não precisa reiniciar.`,"panel.update.applySwitchedPlain":`Alterado para a nova versão no local; não precisa reiniciar.`,"panel.update.autoOn":`Atualização automática ativada: verifica a cada {minutes} minutos e instala novas versões sem esperar conversas em andamento terminarem.`,"panel.update.autoOff":`Atualização automática desativada: a loja só é consultada ao tocar em «Verificar atualizações».`,"panel.update.autoToggleFailed":`Não foi possível salvar o botão de atualização automática: {message}`,"panel.update.versionDrift":`Estas duas versões não batem: o painel informa {version} (lida na memória na inicialização do processo), enquanto o shell carregou {shell}. Normalmente o shell acabou de trocar e a página ainda não releu; atualize a página e elas vão coincidir.`,"panel.update.checkResult":`Resultado da verificação`,"panel.update.applyFailed":`Esta atualização não deu certo: {message}`,"panel.update.lastErrorLine":`Última falha: {message}`},ru:{"panel.update.title":`Обновление плагина`,"panel.update.unknownVersion":`Неизвестная версия`,"panel.update.reading":`Читаем состояние обновления…`,"panel.update.runningVersion":`Работающая версия`,"panel.update.latestOnline":`Последняя в сети`,"panel.update.notChecked":`Ещё не проверялось`,"panel.update.neverUpdated":`Ещё не обновлялось`,"panel.update.lastCheck":`Последняя проверка`,"panel.update.lastApply":`Последнее обновление`,"panel.update.hasNew":`В сети доступна новая версия.`,"panel.update.nothingToInstall":`Панель этого хоста не устанавливает новый код (эта реализация подключена напрямую): при headless-развёртывании или развёртывании с синхронизацией исходников синхронизируйте исходники и перезапустите службу хоста; в старой версии для компьютера обновите её в разделе «Настройки → Плагины → Этот плагин».`,"panel.update.noMarketTitle":`На этой машине нет доступного магазина плагинов`,"panel.update.noMarketBody":`Плагин распространяется через npm, обновлениями занимается магазин плагинов DSH: откройте «Настройки → Плагины» и обновите плагин (или установите магазин).`,"panel.update.autoUpdate":`Автообновление`,"panel.update.shellChangedTitle":`Это обновление затронуло и оболочку`,"panel.update.shellChangedBody":`Несколько изменений вступят в силу при следующем запуске DSH (само обновление уже действует, ничего делать не нужно).`,"panel.update.restartSidecar":`Перезапустить sidecar`,"panel.update.checking":`Проверяем…`,"panel.update.check":`Проверить обновления`,"panel.update.updating":`Обновляем…`,"panel.update.updateNow":`Обновить сейчас`,"panel.update.forceHint":`Принудительное обновление (устанавливается даже при идущих диалогах или сразу после выпуска)`,"panel.update.resultHasNew":`Есть новая версия для установки`,"panel.update.resultUpToDate":`Уже последняя версия`,"panel.update.applyUpToDate":`Уже последняя версия ({version}), файлы не изменялись.`,"panel.update.applyUpToDatePlain":`Уже последняя версия, файлы не изменялись.`,"panel.update.applyDiskUnchanged":`Установлено, но версия на диске не изменилась (по-прежнему {version}); эта попытка не засчитана, нажмите ещё раз.`,"panel.update.applyFailedRetry":`Обновление не удалось, нажмите ещё раз.`,"panel.update.applySwitched":`Переключено на {version} на месте, перезапуск не нужен.`,"panel.update.applySwitchedPlain":`Переключено на новую версию на месте, перезапуск не нужен.`,"panel.update.autoOn":`Автообновление включено: проверка каждые {minutes} минут, новые версии ставятся сразу и работают на месте, не дожидаясь завершения текущих диалогов.`,"panel.update.autoOff":`Автообновление выключено: магазин опрашивается только по нажатию «Проверить обновления».`,"panel.update.autoToggleFailed":`Не удалось сохранить переключатель автообновления: {message}`,"panel.update.versionDrift":`Эти две версии не совпадают: панель сообщает {version} (прочитано в память при запуске процесса), а оболочка загрузила {shell}. Обычно оболочку только что заменили, и страница ещё не перечитала её; обновите страницу — версии совпадут.`,"panel.update.checkResult":`Результат проверки`,"panel.update.applyFailed":`Обновление не удалось: {message}`,"panel.update.lastErrorLine":`Последняя ошибка: {message}`}},{"zh-Hans":{"panel.devices.title":`已绑定的设备`,"panel.devices.unknown":`未知设备`,"panel.devices.unknownPlatform":`未知平台`,"panel.devices.legacy":`旧式`,"panel.devices.extraBindings":`另有 {count} 条旧绑定`,"panel.devices.boundAt":`绑定于 {time}`,"panel.devices.online":`在线`,"panel.devices.noRecord":`无记录`,"panel.devices.channelRelay":`经中转`,"panel.devices.channelLan":`局域网`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`链路已加密`,"panel.devices.plain":`链路未加密`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`刚刚`,"panel.devices.minutesAgo":`{count} 分钟前`,"panel.devices.hoursAgo":`{count} 小时前`,"panel.devices.daysAgo":`{count} 天前`,"panel.devices.cancel":`取消`,"panel.devices.unbind":`解除绑定`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`解除绑定`,"panel.devices.unbindConfirm":`确定要解除「{name}」的绑定?`,"panel.devices.unbindDone":`已解除「{name}」的绑定({count} 条凭据)。`,"panel.devices.unbindDoneClosed":`已解除「{name}」的绑定({count} 条凭据,断开 {closed} 条连接)。`,"panel.devices.unbindFailed":`解除绑定失败:{message}`,"panel.devices.effectIdentity":`下次请求起失效。`,"panel.devices.effectLegacy":`只吊销凭据,旧的通行证仍可能在到期前可用;要立即失效请用『吊销全部』。`,"panel.devices.allowTitle":`允许新设备绑定`,"panel.devices.policyAllowed":`已允许新设备绑定。`,"panel.devices.policyDenied":`已停止接收新设备,已绑定的手机照常可用。`},"zh-Hant":{"panel.devices.title":`已綁定的裝置`,"panel.devices.unknown":`未知裝置`,"panel.devices.unknownPlatform":`未知平台`,"panel.devices.legacy":`舊式`,"panel.devices.extraBindings":`另有 {count} 條舊綁定`,"panel.devices.boundAt":`綁定於 {time}`,"panel.devices.online":`線上`,"panel.devices.noRecord":`無紀錄`,"panel.devices.channelRelay":`經中轉`,"panel.devices.channelLan":`區域網路`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`链路已加密`,"panel.devices.plain":`链路未加密`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`剛剛`,"panel.devices.minutesAgo":`{count} 分鐘前`,"panel.devices.hoursAgo":`{count} 小時前`,"panel.devices.daysAgo":`{count} 天前`,"panel.devices.cancel":`取消`,"panel.devices.unbind":`解除綁定`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`解除綁定`,"panel.devices.unbindConfirm":`確定要解除「{name}」的綁定?`,"panel.devices.unbindDone":`已解除「{name}」的綁定({count} 條憑證)。`,"panel.devices.unbindDoneClosed":`已解除「{name}」的綁定({count} 條憑證,斷開 {closed} 條連線)。`,"panel.devices.unbindFailed":`解除綁定失敗:{message}`,"panel.devices.effectIdentity":`下次請求起失效。`,"panel.devices.effectLegacy":`只吊銷憑證,舊的通行證仍可能在到期前可用;要立即失效請用『吊銷全部』。`,"panel.devices.allowTitle":`允許新裝置綁定`,"panel.devices.policyAllowed":`已允許新裝置綁定。`,"panel.devices.policyDenied":`已停止接收新裝置,已綁定的手機照常可用。`},en:{"panel.devices.title":`Paired devices`,"panel.devices.unknown":`Unknown device`,"panel.devices.unknownPlatform":`Unknown platform`,"panel.devices.legacy":`Legacy`,"panel.devices.extraBindings":`{count} older pairing(s)`,"panel.devices.boundAt":`Paired {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`No record`,"panel.devices.channelRelay":`Via relay`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Encrypted link`,"panel.devices.plain":`Unencrypted link`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`just now`,"panel.devices.minutesAgo":`{count} min ago`,"panel.devices.hoursAgo":`{count} h ago`,"panel.devices.daysAgo":`{count} d ago`,"panel.devices.cancel":`Cancel`,"panel.devices.unbind":`Unbind`,"panel.devices.unbinding":`Unbinding…`,"panel.devices.unbindTitle":`Unbind device`,"panel.devices.unbindConfirm":`Unbind “{name}”?`,"panel.devices.unbindDone":`Unbound “{name}” ({count} credentials).`,"panel.devices.unbindDoneClosed":`Unbound “{name}” ({count} credentials, {closed} connections closed).`,"panel.devices.unbindFailed":`Could not unbind: {message}`,"panel.devices.effectIdentity":`Takes effect from the next request.`,"panel.devices.effectLegacy":`This revokes the stored credential only; the old pass may still work until it expires. Use “Revoke all” to cut it off immediately.`,"panel.devices.allowTitle":`Allow new devices to pair`,"panel.devices.policyAllowed":`New devices may now pair.`,"panel.devices.policyDenied":`New devices are now refused; already-paired phones keep working.`},ja:{"panel.devices.title":`ペアリング済みのデバイス`,"panel.devices.unknown":`不明なデバイス`,"panel.devices.unknownPlatform":`不明なプラットフォーム`,"panel.devices.legacy":`旧形式`,"panel.devices.extraBindings":`古いペアリング {count} 件`,"panel.devices.boundAt":`{time}にペアリング`,"panel.devices.online":`オンライン`,"panel.devices.noRecord":`記録なし`,"panel.devices.channelRelay":`リレー経由`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`リンクは暗号化`,"panel.devices.plain":`リンクは平文`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`たった今`,"panel.devices.minutesAgo":`{count} 分前`,"panel.devices.hoursAgo":`{count} 時間前`,"panel.devices.daysAgo":`{count} 日前`,"panel.devices.cancel":`キャンセル`,"panel.devices.unbind":`バインド解除`,"panel.devices.unbinding":`解除中…`,"panel.devices.unbindTitle":`バインド解除`,"panel.devices.unbindConfirm":`「{name}」のバインドを解除しますか?`,"panel.devices.unbindDone":`「{name}」のバインドを解除しました(資格情報 {count} 件)。`,"panel.devices.unbindDoneClosed":`「{name}」のバインドを解除しました(資格情報 {count} 件、接続 {closed} 件を切断)。`,"panel.devices.unbindFailed":`バインド解除に失敗しました:{message}`,"panel.devices.effectIdentity":`次のリクエストから無効になります。`,"panel.devices.effectLegacy":`取り消されるのは保存された資格情報だけです。古いパスは有効期限まで使える可能性があります。即時に切るには「すべて取り消す」を使ってください。`,"panel.devices.allowTitle":`新しいデバイスのバインドを許可`,"panel.devices.policyAllowed":`新しいデバイスのバインドを許可しました。`,"panel.devices.policyDenied":`新しいデバイスの受け付けを停止しました。バインド済みのスマートフォンはそのまま使えます。`},ko:{"panel.devices.title":`페어링된 기기`,"panel.devices.unknown":`알 수 없는 기기`,"panel.devices.unknownPlatform":`알 수 없는 플랫폼`,"panel.devices.legacy":`구형`,"panel.devices.extraBindings":`이전 페어링 {count}건`,"panel.devices.boundAt":`{time}에 페어링`,"panel.devices.online":`온라인`,"panel.devices.noRecord":`기록 없음`,"panel.devices.channelRelay":`릴레이 경유`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`링크 암호화됨`,"panel.devices.plain":`링크 평문`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`방금`,"panel.devices.minutesAgo":`{count}분 전`,"panel.devices.hoursAgo":`{count}시간 전`,"panel.devices.daysAgo":`{count}일 전`,"panel.devices.cancel":`취소`,"panel.devices.unbind":`바인딩 해제`,"panel.devices.unbinding":`해제 중…`,"panel.devices.unbindTitle":`바인딩 해제`,"panel.devices.unbindConfirm":`「{name}」의 바인딩을 해제하시겠습니까?`,"panel.devices.unbindDone":`「{name}」의 바인딩을 해제했습니다(자격 증명 {count}개).`,"panel.devices.unbindDoneClosed":`「{name}」의 바인딩을 해제했습니다(자격 증명 {count}개, 연결 {closed}개 종료).`,"panel.devices.unbindFailed":`바인딩 해제에 실패했습니다: {message}`,"panel.devices.effectIdentity":`다음 요청부터 무효가 됩니다.`,"panel.devices.effectLegacy":`저장된 자격 증명만 취소됩니다. 예전 통행증은 만료 전까지 계속 쓸 수 있습니다. 즉시 끊으려면 「모두 취소」를 사용하세요.`,"panel.devices.allowTitle":`새 기기 바인딩 허용`,"panel.devices.policyAllowed":`새 기기 바인딩을 허용했습니다.`,"panel.devices.policyDenied":`새 기기 받기를 중지했습니다. 이미 바인딩된 휴대폰은 그대로 쓸 수 있습니다.`},de:{"panel.devices.title":`Gekoppelte Geräte`,"panel.devices.unknown":`Unbekanntes Gerät`,"panel.devices.unknownPlatform":`Unbekannte Plattform`,"panel.devices.legacy":`Alt`,"panel.devices.extraBindings":`Noch {count} ältere Kopplungen`,"panel.devices.boundAt":`Gekoppelt {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`Kein Eintrag`,"panel.devices.channelRelay":`Über Relay`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Verbindung verschlüsselt`,"panel.devices.plain":`Verbindung unverschlüsselt`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Gerade eben`,"panel.devices.minutesAgo":`vor {count} Min.`,"panel.devices.hoursAgo":`vor {count} Std.`,"panel.devices.daysAgo":`vor {count} Tagen`,"panel.devices.cancel":`Abbrechen`,"panel.devices.unbind":`Entkoppeln`,"panel.devices.unbinding":`Wird entkoppelt…`,"panel.devices.unbindTitle":`Gerät entkoppeln`,"panel.devices.unbindConfirm":`„{name}“ wirklich entkoppeln?`,"panel.devices.unbindDone":`„{name}“ entkoppelt ({count} Anmeldedaten).`,"panel.devices.unbindDoneClosed":`„{name}“ entkoppelt ({count} Anmeldedaten, {closed} Verbindungen getrennt).`,"panel.devices.unbindFailed":`Entkoppeln fehlgeschlagen: {message}`,"panel.devices.effectIdentity":`Gilt ab der nächsten Anfrage.`,"panel.devices.effectLegacy":`Hiermit werden nur die gespeicherten Anmeldedaten widerrufen; der alte Pass funktioniert möglicherweise bis zum Ablauf weiter. Mit „Alle widerrufen“ sperrst du ihn sofort.`,"panel.devices.allowTitle":`Neue Geräte koppeln erlauben`,"panel.devices.policyAllowed":`Neue Geräte können jetzt gekoppelt werden.`,"panel.devices.policyDenied":`Neue Geräte werden abgelehnt; bereits gekoppelte Handys funktionieren weiter.`},es:{"panel.devices.title":`Dispositivos vinculados`,"panel.devices.unknown":`Dispositivo desconocido`,"panel.devices.unknownPlatform":`Plataforma desconocida`,"panel.devices.legacy":`Antiguo`,"panel.devices.extraBindings":`{count} vinculaciones antiguas más`,"panel.devices.boundAt":`Vinculado {time}`,"panel.devices.online":`En línea`,"panel.devices.noRecord":`Sin registro`,"panel.devices.channelRelay":`Vía retransmisor`,"panel.devices.channelLan":`LAN`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Enlace cifrado`,"panel.devices.plain":`Enlace sin cifrar`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Ahora mismo`,"panel.devices.minutesAgo":`hace {count} min`,"panel.devices.hoursAgo":`hace {count} h`,"panel.devices.daysAgo":`hace {count} d`,"panel.devices.cancel":`Cancelar`,"panel.devices.unbind":`Desvincular`,"panel.devices.unbinding":`Desvinculando…`,"panel.devices.unbindTitle":`Desvincular dispositivo`,"panel.devices.unbindConfirm":`¿Desvincular «{name}»?`,"panel.devices.unbindDone":`«{name}» desvinculado ({count} credenciales).`,"panel.devices.unbindDoneClosed":`«{name}» desvinculado ({count} credenciales, {closed} conexiones cerradas).`,"panel.devices.unbindFailed":`No se pudo desvincular: {message}`,"panel.devices.effectIdentity":`Se aplica desde la próxima solicitud.`,"panel.devices.effectLegacy":`Solo se revoca la credencial guardada; el pase antiguo puede seguir funcionando hasta que caduque. Usa «Revocar todo» para cortarlo de inmediato.`,"panel.devices.allowTitle":`Permitir vincular dispositivos nuevos`,"panel.devices.policyAllowed":`Ya se pueden vincular dispositivos nuevos.`,"panel.devices.policyDenied":`Ya no se aceptan dispositivos nuevos; los móviles vinculados siguen funcionando.`},fr:{"panel.devices.title":`Appareils appairés`,"panel.devices.unknown":`Appareil inconnu`,"panel.devices.unknownPlatform":`Plateforme inconnue`,"panel.devices.legacy":`Ancien`,"panel.devices.extraBindings":`{count} appairages plus anciens`,"panel.devices.boundAt":`Appairé {time}`,"panel.devices.online":`En ligne`,"panel.devices.noRecord":`Aucun enregistrement`,"panel.devices.channelRelay":`Via relais`,"panel.devices.channelLan":`Réseau local`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Lien chiffré`,"panel.devices.plain":`Lien non chiffré`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`À l'instant`,"panel.devices.minutesAgo":`il y a {count} min`,"panel.devices.hoursAgo":`il y a {count} h`,"panel.devices.daysAgo":`il y a {count} j`,"panel.devices.cancel":`Annuler`,"panel.devices.unbind":`Dissocier`,"panel.devices.unbinding":`Dissociation…`,"panel.devices.unbindTitle":`Dissocier l'appareil`,"panel.devices.unbindConfirm":`Dissocier « {name} » ?`,"panel.devices.unbindDone":`« {name} » dissocié ({count} identifiants).`,"panel.devices.unbindDoneClosed":`« {name} » dissocié ({count} identifiants, {closed} connexions fermées).`,"panel.devices.unbindFailed":`Échec de la dissociation : {message}`,"panel.devices.effectIdentity":`Prend effet à la prochaine requête.`,"panel.devices.effectLegacy":`Seul l'identifiant stocké est révoqué ; l'ancien laissez-passer peut encore fonctionner jusqu'à son expiration. Utilise « Tout révoquer » pour le couper immédiatement.`,"panel.devices.allowTitle":`Autoriser l'appairage de nouveaux appareils`,"panel.devices.policyAllowed":`Les nouveaux appareils peuvent désormais être appairés.`,"panel.devices.policyDenied":`Les nouveaux appareils sont refusés ; les téléphones appairés continuent de fonctionner.`},pt:{"panel.devices.title":`Dispositivos emparelhados`,"panel.devices.unknown":`Dispositivo desconhecido`,"panel.devices.unknownPlatform":`Plataforma desconhecida`,"panel.devices.legacy":`Antigo`,"panel.devices.extraBindings":`Mais {count} emparelhamentos antigos`,"panel.devices.boundAt":`Emparelhado {time}`,"panel.devices.online":`Online`,"panel.devices.noRecord":`Sem registo`,"panel.devices.channelRelay":`Via relay`,"panel.devices.channelLan":`Rede local`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Ligação cifrada`,"panel.devices.plain":`Ligação não cifrada`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Agora mesmo`,"panel.devices.minutesAgo":`há {count} min`,"panel.devices.hoursAgo":`há {count} h`,"panel.devices.daysAgo":`há {count} d`,"panel.devices.cancel":`Cancelar`,"panel.devices.unbind":`Desvincular`,"panel.devices.unbinding":`A desvincular…`,"panel.devices.unbindTitle":`Desvincular dispositivo`,"panel.devices.unbindConfirm":`Desvincular «{name}»?`,"panel.devices.unbindDone":`«{name}» desvinculado ({count} credenciais).`,"panel.devices.unbindDoneClosed":`«{name}» desvinculado ({count} credenciais, {closed} ligações fechadas).`,"panel.devices.unbindFailed":`Não foi possível desvincular: {message}`,"panel.devices.effectIdentity":`Passa a valer no próximo pedido.`,"panel.devices.effectLegacy":`Só a credencial guardada é revogada; o passe antigo pode continuar a funcionar até expirar. Usa «Revogar tudo» para o cortar já.`,"panel.devices.allowTitle":`Permitir emparelhar dispositivos novos`,"panel.devices.policyAllowed":`Já é possível emparelhar dispositivos novos.`,"panel.devices.policyDenied":`Já não são aceites dispositivos novos; os telemóveis emparelhados continuam a funcionar.`},ru:{"panel.devices.title":`Сопряжённые устройства`,"panel.devices.unknown":`Неизвестное устройство`,"panel.devices.unknownPlatform":`Неизвестная платформа`,"panel.devices.legacy":`Старое`,"panel.devices.extraBindings":`Ещё {count} старых сопряжений`,"panel.devices.boundAt":`Сопряжено {time}`,"panel.devices.online":`В сети`,"panel.devices.noRecord":`Нет записи`,"panel.devices.channelRelay":`Через ретранслятор`,"panel.devices.channelLan":`Локальная сеть`,"panel.devices.channelUnknown":`—`,"panel.devices.encrypted":`Соединение зашифровано`,"panel.devices.plain":`Соединение без шифрования`,"panel.devices.appVersion":` · App {version}`,"panel.devices.justNow":`Только что`,"panel.devices.minutesAgo":`{count} мин назад`,"panel.devices.hoursAgo":`{count} ч назад`,"panel.devices.daysAgo":`{count} дн. назад`,"panel.devices.cancel":`Отмена`,"panel.devices.unbind":`Отвязать`,"panel.devices.unbinding":`Отвязка…`,"panel.devices.unbindTitle":`Отвязать устройство`,"panel.devices.unbindConfirm":`Отвязать «{name}»?`,"panel.devices.unbindDone":`«{name}» отвязан ({count} учётных данных).`,"panel.devices.unbindDoneClosed":`«{name}» отвязан ({count} учётных данных, {closed} соединений закрыто).`,"panel.devices.unbindFailed":`Не удалось отвязать: {message}`,"panel.devices.effectIdentity":`Действует со следующего запроса.`,"panel.devices.effectLegacy":`Отзываются только сохранённые учётные данные; старый пропуск может работать до истечения срока. Чтобы отключить сразу, выбери «Отозвать все».`,"panel.devices.allowTitle":`Разрешить сопряжение новых устройств`,"panel.devices.policyAllowed":`Новые устройства теперь могут сопрягаться.`,"panel.devices.policyDenied":`Новые устройства больше не принимаются; сопряжённые телефоны работают как раньше.`}},{"zh-Hans":{"panel.notice.title":`公告`,"panel.notice.versionLabel":`最低插件版本`,"panel.notice.effective":`苹果商店版正式发布后生效`,"panel.notice.body":`公用中转要求插件 {version} 或更高;旧版请先升级,否则连不上中转。`,"panel.notice.selfHostTitle":`搭建自己的网络`,"panel.notice.selfHostBody":`公用中转有版本门槛和限流;不想受这些限制,搭建自己的网络`,"panel.notice.selfHostAction":`搭建教程`,"panel.notice.setupGuideTitle":`搭建自己的网络`,"panel.notice.guideRelaySummary":`有公网服务器时最稳;没有服务器的话,不值得为它专门买一台。`,"panel.notice.guideRelayReady":`每个人的经验不一样,那这一块就交给你的 AI 去做吧,中转程序我已经提前编译好并开源了,一般来说直接用编译好的程序,几分钟就能搭起来。`,"panel.notice.guideRelayCopyHint":`点击下面的复制按钮,然后发送给自己的 AI,它会引导你并搭建中转。`,"panel.notice.guideRelayCopy":`点我复制内容发给 AI`,"panel.notice.guideRelayCopied":`已复制`,"panel.notice.guideRelayWarn":`如果自己没有服务器,那建议不要自己搭建中转,因为这条路会很折腾;当然,生命在于折腾,如果自己愿意当我没说。`,"panel.notice.guideTunnelSummary":`没有公网 IP 时用这条:用隧道工具把本机的直连端口映射到一个域名上。`,"panel.notice.guideTunnelOS":`先装工具(以 Cloudflare Tunnel 为例,frp 之类也行):`,"panel.notice.guideTunnelTry":`先跑一条临时隧道试通,终端会打印一个 https://xxx.trycloudflare.com 地址(重启就变,适合先用起来):`,"panel.notice.guideTunnelFixed":`想要固定地址就走命名隧道,四行依次执行,域名换成你自己的:`,"panel.notice.guideTunnelFill":`把那个域名填进面板「网络配置」的「直连地址」,保存后重新连接。`,"panel.notice.guideTailscaleInstall":`先装 Tailscale(macOS 用 brew 或 App Store 版都行),装完 sudo tailscale up 登录:`,"panel.notice.guideTailscaleServe":`起服务,把它挂在本机端口上:`,"panel.notice.guideTailscaleFill":`它会给你一个 https://<主机名>.<你的 tailnet>.ts.net 地址,把它整条填进面板「网络配置」的「直连地址」,保存后重新连接;手机也装 Tailscale 登录同一个账号,在外面也能用,不用把服务开到公网。`,"panel.notice.promptIntro":`我在 DeepSeek Harness 里装了 dsh-mobile-plugin 这个插件,想搭一套自己的中转。你可以先定位分析一下这个插件的实现;中转程序是开源的,也可以直接用。`,"panel.notice.promptRepo":`项目地址`,"panel.notice.promptAsk":`先别动手,按顺序问我这几件事,我回答完再继续:① 有没有一台带公网 IP 的服务器,是哪个系统(Ubuntu / Debian / Rocky / CentOS)?② 有没有一个能改 DNS 解析的域名?③ 那台机器上有没有 nginx,80 和 443 现在空着吗?如果我听起来不清楚你在问什么,那多半就是没有服务器;如果清楚,就让我直接把服务器连接方式给你,你自己去看环境。如果没有服务器,请直接劝我停下——为连一台手机单独买机器不划算,建议改用内网穿透或同一 WiFi——并且不要帮我挑机器。`,"panel.notice.promptDo":`我确认继续的话,按这个来做:中转只负责转发,仓库里已经有编译好的安装包,别让我在本机编译;装好后中转只监听 127.0.0.1:18788,用 nginx 把域名反代到这个端口,WebSocket 的 Upgrade 与 Connection 头必须转发;最后告诉我,在 DSH 面板「网络配置 → 中转地址」里应该填什么。`,"panel.notice.promptAfter":`搭建完成后,最好让我授权你自己把插件里的中转地址配好,并自己测一遍通不通;通了再看我要不要重新绑定设备,可以问我关掉 WiFi 后 App 还能不能连上,连不上你就帮我排查。`,"panel.notice.promptStyle":`每一步都给我可以直接照抄的命令和预期输出;出错就按错误信息继续排查,不要跳过步骤,也不要假装成功。`,"panel.notice.guideRelayTitle":`自建中转`,"panel.notice.guideTunnelTitle":`内网穿透`,"panel.notice.guideTailscaleTitle":`另一个办法:Tailscale`},"zh-Hant":{"panel.notice.title":`公告`,"panel.notice.versionLabel":`最低外掛版本`,"panel.notice.effective":`蘋果商店版正式發布後生效`,"panel.notice.body":`公用中轉要求外掛 {version} 或更高;舊版請先升級,否則連不上中轉。`,"panel.notice.selfHostTitle":`搭建自己的網路`,"panel.notice.selfHostBody":`公用中轉有版本門檻和限流;不想受這些限制,搭建自己的網路`,"panel.notice.selfHostAction":`搭建教學`,"panel.notice.setupGuideTitle":`搭建自己的網路`,"panel.notice.guideRelaySummary":`有公網伺服器時最穩;沒有伺服器的話,不值得為它特地買一台。`,"panel.notice.guideRelayReady":`每個人的經驗不一樣,那這塊就交給你的 AI 來做吧,中轉程式我已經事先編譯好並開源了,一般來說直接用編譯好的程式,幾分鐘就能架起來。`,"panel.notice.guideRelayCopyHint":`點擊下面的複製按鈕,然後發送給自己的 AI,它會引導你並架設中轉。`,"panel.notice.guideRelayCopy":`點我複製內容發給 AI`,"panel.notice.guideRelayCopied":`已複製`,"panel.notice.guideRelayWarn":`如果自己沒有伺服器,那建議不要自己架設中轉,因為這條路會很折騰;當然,生命在於折騰,如果自己願意當我沒說。`,"panel.notice.guideTunnelSummary":`沒有公網 IP 時用這條:用通道工具把本機的直連連接埠映射到一個網域上。`,"panel.notice.guideTunnelOS":`先裝工具(以 Cloudflare Tunnel 為例,frp 之類也行):`,"panel.notice.guideTunnelTry":`先跑一條臨時通道試通,終端機會印出一個 https://xxx.trycloudflare.com 位址(重啟就變,適合先用起來):`,"panel.notice.guideTunnelFixed":`想要固定位址就走命名通道,四行依次執行,網域換成你自己的:`,"panel.notice.guideTunnelFill":`把那個網域填進面板「網路設定」的「直連位址」,儲存後重新連線。`,"panel.notice.guideTailscaleInstall":`先裝 Tailscale(macOS 用 brew 或 App Store 版都行),裝完 sudo tailscale up 登入:`,"panel.notice.guideTailscaleServe":`起服務,把它掛在本機連接埠上:`,"panel.notice.guideTailscaleFill":`它會給你一個 https://<主機名>.<你的 tailnet>.ts.net 位址,把它整條填進面板「網路設定」的「直連位址」,儲存後重新連線;手機也裝 Tailscale 登入同一個帳號,在外面也能用,不用把服務開到公網。`,"panel.notice.promptIntro":`我在 DeepSeek Harness 裡裝了 dsh-mobile-plugin 這個外掛,想架一套自己的中轉。你可以先定位分析一下這個外掛的實作;中轉程式是開源的,也可以直接用。`,"panel.notice.promptRepo":`專案位址`,"panel.notice.promptAsk":`先別動手,按順序問我這幾件事,我回答完再繼續:① 有沒有帶公網 IP 的伺服器,是哪個系統(Ubuntu / Debian / Rocky / CentOS)?② 有沒有能改 DNS 解析的網域?③ 那台機器上有沒有 nginx,80 和 443 現在空著嗎?如果我聽起來不清楚你在問什麼,那多半就是沒有伺服器;如果清楚,就讓我直接把伺服器連線方式給你,你自己去看環境。如果沒有伺服器,請直接勸我停下——為連一台手機單獨買機器不划算,建議改用內網穿透或同一個 Wi-Fi——並且不要幫我挑機器。`,"panel.notice.promptDo":`我確認繼續的話,按這個來做:中轉只負責轉發,倉庫裡已經有編譯好的安裝包,別讓我在本機編譯;裝好後中轉只聽 127.0.0.1:18788,用 nginx 把網域反代到這個連接埠,WebSocket 的 Upgrade 與 Connection 標頭必須轉發;最後告訴我,在 DSH 面板「網路設定 → 中轉位址」裡應該填什麼。`,"panel.notice.promptAfter":`架好之後,最好讓我授權你自己把外掛裡的中轉位址設好,並自己測一遍通不通;通了再看我要不要重新綁定裝置,可以問我關掉 Wi-Fi 後 App 還能不能連上,連不上你就幫我排查。`,"panel.notice.promptStyle":`每一步都給我可以直接照抄的指令和預期輸出;出錯就按錯誤訊息繼續排查,不要跳過步驟,也不要假裝成功。`,"panel.notice.guideRelayTitle":`自建中轉`,"panel.notice.guideTunnelTitle":`內網穿透`,"panel.notice.guideTailscaleTitle":`另一個辦法:Tailscale`},en:{"panel.notice.title":`Announcements`,"panel.notice.versionLabel":`Minimum plugin`,"panel.notice.effective":`Applies after the App Store release`,"panel.notice.body":`The public relay requires plugin {version} or newer. On an older build, update first — otherwise it cannot connect.`,"panel.notice.selfHostTitle":`Build your own network`,"panel.notice.selfHostBody":`The public relay has a version floor and rate limits. If that gets in the way, build your own network`,"panel.notice.selfHostAction":`Setup guide`,"panel.notice.setupGuideTitle":`Build your own network`,"panel.notice.guideRelaySummary":`Best with a server of your own; not worth buying one just for this.`,"panel.notice.guideRelayReady":`Everyone has a different level of experience, so hand this part to your AI: the relay is already built and open source — with the prebuilt program it usually takes just a few minutes.`,"panel.notice.guideRelayCopyHint":`Click the copy button below, then paste it to your own AI — it will guide you and do the setup.`,"panel.notice.guideRelayCopy":`Tap to copy for your AI`,"panel.notice.guideRelayCopied":`Copied`,"panel.notice.guideRelayWarn":`Without a server of your own, I would skip self-hosting: that road is a lot of work. Then again, some people enjoy the tinkering — if that is you, go ahead.`,"panel.notice.guideTunnelSummary":`Use this without a public IP: a tunnel maps this computer’s direct port to a domain.`,"panel.notice.guideTunnelOS":`Install the tool first (Cloudflare Tunnel shown; frp or similar works too):`,"panel.notice.guideTunnelTry":`Start a temporary tunnel to test; the terminal prints a https://xxx.trycloudflare.com address (it changes on restart, fine to begin with):`,"panel.notice.guideTunnelFixed":`For a stable address use a named tunnel — run these four in order with your own domain:`,"panel.notice.guideTunnelFill":`Put that domain into “Direct address” under the panel’s “Network settings”, save, then reconnect.`,"panel.notice.guideTailscaleInstall":`Install Tailscale first (brew or the App Store build both work on macOS), then sign in with sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Start the service and point it at this computer’s port:`,"panel.notice.guideTailscaleFill":`It prints an https://<host>.<your-tailnet>.ts.net address. Put that whole address into “Direct address” under the panel’s “Network settings”, save, then reconnect. Install Tailscale on your phone too and sign in to the same account — it works away from home with nothing exposed to the public internet.`,"panel.notice.promptIntro":`I installed the dsh-mobile-plugin in DeepSeek Harness and want to host my own relay. Start by locating and analyzing how this plugin works; the relay program is open source, so you can use it directly.`,"panel.notice.promptRepo":`Project`,"panel.notice.promptAsk":`Do not start yet. Ask me, in order: (1) do I have a server with a public IP, and which OS (Ubuntu / Debian / Rocky / CentOS)? (2) do I have a domain whose DNS I can edit? (3) is nginx installed there, and are 80/443 free? If I seem unsure what you are asking, I probably have no server; if I am clear, let me hand you the server access so you inspect the environment yourself. If I have no server, tell me to stop: buying a machine just to reach one phone is not worth it, suggest a tunnel or the same Wi-Fi instead, and do not shop for servers for me.`,"panel.notice.promptDo":`If I confirm, do it this way: the relay only forwards; the repo already ships built packages, so never make me compile locally. Once installed it listens only on 127.0.0.1:18788 — reverse-proxy my domain to that port with nginx, forwarding the WebSocket Upgrade and Connection headers. Finally tell me what to put into “Network settings → Relay address” in the DSH panel.`,"panel.notice.promptAfter":`Once it is set up, it is best to let me authorize you to configure the relay address in the plugin yourself and test the connection yourself; once it works, check whether I need to re-pair devices — you can ask me whether the app still connects with Wi-Fi off, and help me troubleshoot if it does not.`,"panel.notice.promptStyle":`Give me copy-pasteable commands and the expected output for every step; if something fails, keep troubleshooting from the error, never skip steps or pretend it worked.`,"panel.notice.guideRelayTitle":`Your own relay`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Another way: Tailscale`},ja:{"panel.notice.title":`お知らせ`,"panel.notice.versionLabel":`プラグイン最低バージョン`,"panel.notice.effective":`App Store 版のリリース後に適用`,"panel.notice.body":`共用リレーはプラグイン {version} 以上が必要です。古い場合は先に更新してください。`,"panel.notice.selfHostTitle":`自分のネットワークを構築`,"panel.notice.selfHostBody":`共用リレーにはバージョン要件と速度制限があります。それが邪魔なら、自分のネットワークを構築しましょう`,"panel.notice.selfHostAction":`構築ガイド`,"panel.notice.setupGuideTitle":`自分のネットワークを構築`,"panel.notice.guideRelaySummary":`自前のサーバーがあるならこれが一番。そのためだけに買うのは割に合いません。`,"panel.notice.guideRelayReady":`経験は人それぞれなので、この部分はあなたの AI に任せてください。リレーはビルド済みで公開しています。ビルド済みのものを使えば、ふつう数分で立ち上がります。`,"panel.notice.guideRelayCopyHint":`下のコピーボタンを押して自分の AI に送ってください。あとは AI が案内して構築まで進めます。`,"panel.notice.guideRelayCopy":`押すとコピーして AI に送れます`,"panel.notice.guideRelayCopied":`コピーしました`,"panel.notice.guideRelayWarn":`自前のサーバーが無いなら、自分で中継を立てるのはおすすめしません。かなり手間がかかります。とはいえ、手を動かすのが好きな人もいます。その場合はどうぞ。`,"panel.notice.guideTunnelSummary":`グローバル IP が無い場合はこちら。トンネルツールでこの PC の直結ポートをドメインに割り当てます。`,"panel.notice.guideTunnelOS":`まずツールを導入します(例は Cloudflare Tunnel。frp などでも可):`,"panel.notice.guideTunnelTry":`まず一時トンネルで疎通確認。ターミナルに https://xxx.trycloudflare.com が表示されます(再起動で変わりますが、最初はこれで十分):`,"panel.notice.guideTunnelFixed":`固定アドレスにしたい場合は名前付きトンネル。4 行を順に、ドメインは自分のものに置き換えます:`,"panel.notice.guideTunnelFill":`そのドメインをパネルの「ネットワーク設定」の「直結アドレス」に入力し、保存して再接続します。`,"panel.notice.guideTailscaleInstall":`まず Tailscale を入れます(macOS は brew でも App Store 版でも可)。入ったら sudo tailscale up でログイン:`,"panel.notice.guideTailscaleServe":`サービスを起動して、この PC のポートに割り当てます:`,"panel.notice.guideTailscaleFill":`https://<ホスト名>.<あなたの tailnet>.ts.net というアドレスが出るので、パネルの「ネットワーク設定」の「直結アドレス」に丸ごと入れて保存し、再接続します。スマホにも Tailscale を入れて同じアカウントでログインすれば、外からでも使えます。`,"panel.notice.promptIntro":`DeepSeek Harness に dsh-mobile-plugin というプラグインを入れて、自前の中継を立てたいと思っています。まずこのプラグインの実装を特定して分析してください。中継プログラムはオープンソースなので、そのまま使えます。`,"panel.notice.promptRepo":`プロジェクト`,"panel.notice.promptAsk":`まだ作業しないでください。順番に確認してください:(1) グローバル IP のサーバーはありますか。OS は(Ubuntu / Debian / Rocky / CentOS)? (2) DNS を編集できるドメインはありますか? (3) そこに nginx は入っていて、80/443 は空いていますか? 私が質問の意味を分かっていないようならサーバーは無いと考えてください。分かる場合は接続方法をそのまま渡すので、環境を見に行ってください。サーバーが無い場合は止めるよう伝えてください。スマホ 1 台のためにマシンを買うのは割に合わないので、トンネルか同じ Wi-Fi を勧め、代わりにマシンを選ばないでください。`,"panel.notice.promptDo":`続行する場合の方針:リレーは転送専用で、リポジトリにコンパイル済みの配布物があるので手元ビルドはさせない。導入後は 127.0.0.1:18788 のみ待ち受け、ドメインを nginx でそこへリバースプロキシし、WebSocket の Upgrade と Connection ヘッダーを必ず転送。最後に DSH パネルの「ネットワーク設定 → リレーアドレス」に何を入れるか教える。`,"panel.notice.promptAfter":`設置できたら、プラグインの中継アドレス設定を私に代わって行う許可をもらい、自分で疎通確認までしてください。通ったら再ペアリングが必要か確認し、Wi-Fi を切って App が繋がるか私に聞いて、繋がらない場合は原因を調べてください。`,"panel.notice.promptStyle":`各手順はそのまま貼れるコマンドと期待される出力を示してください。失敗したらエラーから原因を追い、手順を飛ばしたり成功したふりをしないでください。`,"panel.notice.guideRelayTitle":`自前リレー`,"panel.notice.guideTunnelTitle":`トンネル`,"panel.notice.guideTailscaleTitle":`もう一つの方法:Tailscale`},ko:{"panel.notice.title":`공지`,"panel.notice.versionLabel":`최소 플러그인 버전`,"panel.notice.effective":`App Store 정식 출시 후 적용`,"panel.notice.body":`공용 릴레이는 플러그인 {version} 이상이 필요합니다. 이전 버전이라면 먼저 업데이트하세요.`,"panel.notice.selfHostTitle":`네트워크 직접 구축`,"panel.notice.selfHostBody":`공용 릴레이에는 버전 조건과 속도 제한이 있습니다. 그게 걸린다면 네트워크를 직접 구축하세요`,"panel.notice.selfHostAction":`구축 가이드`,"panel.notice.setupGuideTitle":`네트워크 직접 구축`,"panel.notice.guideRelaySummary":`공인 서버가 있으면 가장 안정적입니다. 그것만 위해 새로 사는 건 권하지 않습니다.`,"panel.notice.guideRelayReady":`경험은 사람마다 다르니 이 부분은 당신의 AI에게 맡기세요. 릴레이는 미리 빌드해 공개해 두었고, 빌드된 것을 쓰면 보통 몇 분이면 됩니다.`,"panel.notice.guideRelayCopyHint":`아래 복사 버튼을 눌러 자신의 AI에게 보내세요. 그러면 AI가 안내하고 구축까지 해 줍니다.`,"panel.notice.guideRelayCopy":`눌러서 복사해 AI에게 보내기`,"panel.notice.guideRelayCopied":`복사됨`,"panel.notice.guideRelayWarn":`공인 서버가 없다면 직접 릴레이를 구축하는 건 권하지 않습니다. 꽤 번거로운 길입니다. 그래도 손대는 걸 즐기는 분이라면 말리지 않겠습니다.`,"panel.notice.guideTunnelSummary":`공인 IP가 없을 때 쓰는 방법입니다. 터널 도구로 이 컴퓨터의 직결 포트를 도메인에 연결합니다.`,"panel.notice.guideTunnelOS":`먼저 도구를 설치합니다(예: Cloudflare Tunnel, frp 등도 가능):`,"panel.notice.guideTunnelTry":`먼저 임시 터널로 확인합니다. 터미널에 https://xxx.trycloudflare.com 주소가 찍힙니다(재시작하면 바뀌지만 처음엔 충분합니다):`,"panel.notice.guideTunnelFixed":`고정 주소가 필요하면 이름 있는 터널을 씁니다. 네 줄을 차례로, 도메인은 본인 것으로 바꾸세요:`,"panel.notice.guideTunnelFill":`그 도메인을 패널 「네트워크 설정」의 「직결 주소」에 넣고 저장한 뒤 다시 연결하세요.`,"panel.notice.guideTailscaleInstall":`먼저 Tailscale를 설치합니다(macOS는 brew 또는 App Store 버전 모두 가능). 설치 후 sudo tailscale up으로 로그인:`,"panel.notice.guideTailscaleServe":`서비스를 띄워 이 컴퓨터의 포트에 연결합니다:`,"panel.notice.guideTailscaleFill":`https://<호스트명>.<당신의 tailnet>.ts.net 주소가 나옵니다. 그 주소를 통째로 패널 「네트워크 설정」의 「직결 주소」에 넣고 저장한 뒤 다시 연결하세요. 휴대폰에도 Tailscale를 설치해 같은 계정으로 로그인하면 밖에서도 쓸 수 있습니다.`,"panel.notice.promptIntro":`DeepSeek Harness에 dsh-mobile-plugin 플러그인을 설치했고, 자체 릴레이를 세우려 합니다. 먼저 이 플러그인의 구현을 찾아서 분석해 주세요. 릴레이 프로그램은 오픈소스라 그대로 써도 됩니다.`,"panel.notice.promptRepo":`프로젝트`,"panel.notice.promptAsk":`아직 작업하지 마세요. 순서대로 물어보세요: (1) 공인 IP 서버가 있나요, OS는 무엇인가요(Ubuntu / Debian / Rocky / CentOS)? (2) DNS를 고칠 수 있는 도메인이 있나요? (3) 그 서버에 nginx가 있고 80/443이 비어 있나요? 제가 무슨 말인지 모르는 것 같으면 서버가 없다고 보세요. 안다면 접속 방법을 그대로 드릴 테니 환경을 직접 확인하세요. 서버가 없다면 중단하라고 알려 주세요. 휴대폰 하나를 위해 장비를 사는 건 손해이니 터널이나 같은 Wi-Fi를 권하고, 대신 장비를 골라 주지 마세요.`,"panel.notice.promptDo":`계속한다면 이렇게 하세요: 릴레이는 전달만 하고, 저장소에 컴파일된 배포물이 있으니 제 로컬에서 빌드하지 마세요. 설치 후에는 127.0.0.1:18788만 수신하며, 도메인을 nginx로 그 포트에 리버스 프록시하고 WebSocket의 Upgrade·Connection 헤더를 반드시 전달합니다. 마지막으로 DSH 패널 「네트워크 설정 → 릴레이 주소」에 무엇을 넣을지 알려 주세요.`,"panel.notice.promptAfter":`설치가 끝나면 플러그인의 릴레이 주소를 제가 직접 설정하도록 허락을 받고, 연결 테스트도 직접 해 주세요. 연결되면 기기 재등록이 필요한지 확인하고, Wi-Fi를 끄고도 App이 붙는지 물어보고, 안 되면 원인을 찾아 주세요.`,"panel.notice.promptStyle":`각 단계마다 그대로 붙여 넣을 명령과 예상 출력을 주세요. 실패하면 오류에서부터 계속 원인을 찾고, 단계를 건너뛰거나 성공한 척하지 마세요.`,"panel.notice.guideRelayTitle":`자체 릴레이`,"panel.notice.guideTunnelTitle":`터널`,"panel.notice.guideTailscaleTitle":`또 다른 방법: Tailscale`},de:{"panel.notice.title":`Hinweise`,"panel.notice.versionLabel":`Mindestversion`,"panel.notice.effective":`Gilt ab dem App-Store-Release`,"panel.notice.body":`Das öffentliche Relay braucht Plugin {version} oder neuer. Sonst erst aktualisieren, sonst keine Verbindung.`,"panel.notice.selfHostTitle":`Eigenes Netzwerk aufbauen`,"panel.notice.selfHostBody":`Der öffentliche Relay hat eine Mindestversion und Rate-Limits. Wenn das stört: eigenes Netzwerk aufbauen`,"panel.notice.selfHostAction":`Einrichtungsanleitung`,"panel.notice.setupGuideTitle":`Eigenes Netzwerk aufbauen`,"panel.notice.guideRelaySummary":`Am besten mit eigenem Server – dafür extra einen zu kaufen lohnt nicht.`,"panel.notice.guideRelayReady":`Erfahrung ist sehr unterschiedlich, also überlass diesen Teil deiner KI: Der Relay ist bereits gebaut und quelloffen; mit dem fertigen Programm steht er meist in wenigen Minuten.`,"panel.notice.guideRelayCopyHint":`Tippe unten auf Kopieren und schick es an deine KI – sie führt dich und richtet es ein.`,"panel.notice.guideRelayCopy":`Tippen zum Kopieren für die KI`,"panel.notice.guideRelayCopied":`Kopiert`,"panel.notice.guideRelayWarn":`Ohne eigenen Server würde ich vom Selbstbau abraten – das ist ein lästiger Weg. Andererseits: Basteln macht manchen Spaß. Wenn du dazugehörst, nur zu.`,"panel.notice.guideTunnelSummary":`Ohne öffentliche IP: Ein Tunnel mappt den Direkt-Port dieses Rechners auf eine Domain.`,"panel.notice.guideTunnelOS":`Zuerst das Tool installieren (Beispiel Cloudflare Tunnel; frp o. Ä. geht auch):`,"panel.notice.guideTunnelTry":`Zuerst einen temporären Tunnel testen: Das Terminal gibt eine https://xxx.trycloudflare.com-Adresse aus (ändert sich beim Neustart, für den Anfang ok):`,"panel.notice.guideTunnelFixed":`Für eine feste Adresse einen benannten Tunnel: die vier Zeilen nacheinander, Domain durch die eigene ersetzen:`,"panel.notice.guideTunnelFill":`Diese Domain im Panel unter „Netzwerkeinstellungen“ als „Direktadresse“ eintragen, speichern, neu verbinden.`,"panel.notice.guideTailscaleInstall":`Zuerst Tailscale installieren (unter macOS geht brew oder die App-Store-Version), danach mit sudo tailscale up anmelden:`,"panel.notice.guideTailscaleServe":`Dienst starten und auf den Port dieses Rechners legen:`,"panel.notice.guideTailscaleFill":`Ausgegeben wird eine Adresse https://<Hostname>.<dein-tailnet>.ts.net. Diese ganze Adresse im Panel unter „Netzwerkeinstellungen“ als „Direktadresse“ eintragen, speichern, neu verbinden. Tailscale auch aufs Handy, mit demselben Konto anmelden — dann geht es auch unterwegs, ohne etwas ins offene Netz zu stellen.`,"panel.notice.promptIntro":`Ich habe in DeepSeek Harness das Plugin dsh-mobile-plugin installiert und möchte einen eigenen Relay betreiben. Finde zuerst heraus, wie dieses Plugin funktioniert, und analysiere es; das Relay-Programm ist Open Source, du kannst es direkt verwenden.`,"panel.notice.promptRepo":`Projekt`,"panel.notice.promptAsk":`Noch nicht anfangen. Frage mich der Reihe nach: (1) Habe ich einen Server mit öffentlicher IP, welches System (Ubuntu / Debian / Rocky / CentOS)? (2) Habe ich eine Domain, deren DNS ich ändern kann? (3) Läuft dort nginx, sind 80/443 frei? Wenn ich nicht verstehe, wonach du fragst, habe ich vermutlich keinen Server; wenn doch, gebe ich dir einfach die Zugangsdaten und du siehst dir die Umgebung selbst an. Ohne Server: sag mir, dass ich aufhören soll – eine Maschine nur für ein Handy zu kaufen lohnt nicht, empfiehl Tunnel oder dasselbe WLAN, und suche keine Server für mich aus.`,"panel.notice.promptDo":`Wenn ich weitermache, so bitte: Der Relay leitet nur weiter; im Repo liegen fertige Pakete, lass mich nie lokal bauen. Nach der Installation lauscht er nur auf 127.0.0.1:18788 – meine Domain per nginx darauf reverse-proxen, Upgrade- und Connection-Header für WebSocket weiterreichen. Sag mir zum Schluss, was ins DSH-Panel unter „Netzwerkeinstellungen → Relay-Adresse“ gehört.`,"panel.notice.promptAfter":`Nach dem Aufbau solltest du mich fragen, ob du die Relay-Adresse im Plugin selbst eintragen und die Verbindung selbst testen darfst; wenn es läuft, prüfe, ob ich die Geräte neu koppeln muss – frag mich, ob die App bei ausgeschaltetem WLAN noch verbindet, und hilf mir bei der Fehlersuche, wenn nicht.`,"panel.notice.promptStyle":`Gib mir zu jedem Schritt kopierbare Befehle und die erwartete Ausgabe; bei Fehlern weiter anhand der Meldung suchen, keine Schritte überspringen und nichts als Erfolg ausgeben, was keiner war.`,"panel.notice.guideRelayTitle":`Eigener Relay`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Noch ein Weg: Tailscale`},es:{"panel.notice.title":`Avisos`,"panel.notice.versionLabel":`Versión mínima`,"panel.notice.effective":`Desde el lanzamiento en App Store`,"panel.notice.body":`El relay público exige el plugin {version} o superior. Si es más antiguo, actualiza primero.`,"panel.notice.selfHostTitle":`Monta tu propia red`,"panel.notice.selfHostBody":`El relé público exige una versión mínima y tiene límites. Si te estorban, monta tu propia red`,"panel.notice.selfHostAction":`Guía de montaje`,"panel.notice.setupGuideTitle":`Monta tu propia red`,"panel.notice.guideRelaySummary":`Lo mejor con un servidor propio; no vale la pena comprar uno solo para esto.`,"panel.notice.guideRelayReady":`La experiencia varía mucho, así que deja esta parte a tu IA: el relé ya está compilado y es de código abierto; con el programa ya hecho suele bastar con unos minutos.`,"panel.notice.guideRelayCopyHint":`Pulsa el botón de copiar de abajo y envíaselo a tu IA: te guiará y lo dejará montado.`,"panel.notice.guideRelayCopy":`Toca para copiar y enviar a tu IA`,"panel.notice.guideRelayCopied":`Copiado`,"panel.notice.guideRelayWarn":`Sin servidor propio, mejor no montar el relé: ese camino da bastante trabajo. Ahora bien, a alguna gente le gusta el lío; si es tu caso, adelante.`,"panel.notice.guideTunnelSummary":`Sin IP pública: un túnel mapea el puerto directo de este ordenador a un dominio.`,"panel.notice.guideTunnelOS":`Primero instala la herramienta (ejemplo con Cloudflare Tunnel; frp o similar también vale):`,"panel.notice.guideTunnelTry":`Prueba primero con un túnel temporal: el terminal imprime una dirección https://xxx.trycloudflare.com (cambia al reiniciar; sirve para empezar):`,"panel.notice.guideTunnelFixed":`Para una dirección fija usa un túnel con nombre: ejecuta estas cuatro en orden con tu dominio:`,"panel.notice.guideTunnelFill":`Pon ese dominio en «Dirección directa» de «Configuración de red», guarda y vuelve a conectar.`,"panel.notice.guideTailscaleInstall":`Instala Tailscale primero (en macOS vale brew o la versión de App Store); después inicia sesión con sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Arranca el servicio y apúntalo al puerto de este ordenador:`,"panel.notice.guideTailscaleFill":`Te da una dirección https://<host>.<tu-tailnet>.ts.net. Ponla entera en «Dirección directa» de «Configuración de red», guarda y vuelve a conectar. Instala Tailscale también en el móvil e inicia sesión con la misma cuenta: funciona fuera de casa, sin exponer nada a internet.`,"panel.notice.promptIntro":`Instalé el plugin dsh-mobile-plugin en DeepSeek Harness y quiero montar mi propio relé. Empieza localizando y analizando cómo funciona este plugin; el programa de relé es de código abierto, así que puedes usarlo directamente.`,"panel.notice.promptRepo":`Proyecto`,"panel.notice.promptAsk":`No empieces todavía. Pregúntame en orden: (1) ¿tengo un servidor con IP pública y qué sistema (Ubuntu / Debian / Rocky / CentOS)? (2) ¿tengo un dominio cuyo DNS pueda editar? (3) ¿hay nginx allí y están libres 80/443? Si no entiendo lo que preguntas, probablemente no tengo servidor; si lo entiendo, te paso el acceso y miras el entorno tú mismo. Si no tengo servidor, dime que pare: comprar una máquina solo para un teléfono no compensa, sugiere un túnel o la misma Wi-Fi y no me elijas servidores.`,"panel.notice.promptDo":`Si confirmo, hazlo así: el relé solo reenvía; en el repositorio ya hay paquetes compilados, así que no me hagas compilar localmente. Una vez instalado escucha solo en 127.0.0.1:18788: haz proxy inverso de mi dominio a ese puerto con nginx, reenviando las cabeceras Upgrade y Connection de WebSocket. Al final dime qué poner en «Configuración de red → Dirección del relé» del panel DSH.`,"panel.notice.promptAfter":`Cuando esté montado, lo mejor es que me pidas permiso para configurar tú la dirección del relé en el plugin y probar tú si conecta; si funciona, mira si necesito volver a vincular dispositivos — puedes preguntarme si la app sigue conectando con el Wi-Fi apagado y ayudarme a diagnosticar si no.`,"panel.notice.promptStyle":`Dame comandos listos para copiar y la salida esperada en cada paso; si falla algo, sigue depurando desde el error, sin saltarte pasos ni fingir que funcionó.`,"panel.notice.guideRelayTitle":`Relé propio`,"panel.notice.guideTunnelTitle":`Túnel`,"panel.notice.guideTailscaleTitle":`Otra vía: Tailscale`},fr:{"panel.notice.title":`Annonces`,"panel.notice.versionLabel":`Version minimale`,"panel.notice.effective":`Dès la sortie App Store`,"panel.notice.body":`Le relais public exige le plugin {version} ou plus. Sinon, mettez-le à jour d’abord.`,"panel.notice.selfHostTitle":`Créez votre propre réseau`,"panel.notice.selfHostBody":`Le relais public impose une version minimale et des limites. Si cela vous gêne, créez votre propre réseau`,"panel.notice.selfHostAction":`Guide d’installation`,"panel.notice.setupGuideTitle":`Créez votre propre réseau`,"panel.notice.guideRelaySummary":`Le mieux avec votre propre serveur ; pas la peine d’en louer un juste pour ça.`,"panel.notice.guideRelayReady":`L’expérience varie beaucoup, alors confiez cette partie à votre IA : le relais est déjà compilé et open source ; avec le programme fourni, quelques minutes suffisent en général.`,"panel.notice.guideRelayCopyHint":`Cliquez sur le bouton copier ci-dessous puis envoyez-le à votre IA : elle vous guidera et fera l’installation.`,"panel.notice.guideRelayCopy":`Touchez pour copier pour votre IA`,"panel.notice.guideRelayCopied":`Copié`,"panel.notice.guideRelayWarn":`Sans serveur à vous, je déconseille de monter le relais vous-même : c’est un chemin laborieux. Après, certains aiment bricoler — si c’est votre cas, allez-y.`,"panel.notice.guideTunnelSummary":`Sans IP publique : un tunnel mappe le port direct de cet ordinateur vers un domaine.`,"panel.notice.guideTunnelOS":`Installez d’abord l’outil (exemple avec Cloudflare Tunnel ; frp ou équivalent convient) :`,"panel.notice.guideTunnelTry":`Testez d’abord un tunnel temporaire : le terminal affiche une adresse https://xxx.trycloudflare.com (elle change au redémarrage, suffisant pour commencer) :`,"panel.notice.guideTunnelFixed":`Pour une adresse fixe, un tunnel nommé : exécutez ces quatre lignes avec votre domaine :`,"panel.notice.guideTunnelFill":`Mettez ce domaine dans « Adresse directe » des « Configuration réseau », enregistrez, reconnectez.`,"panel.notice.guideTailscaleInstall":`Installez Tailscale d’abord (sur macOS, brew ou la version App Store), puis connectez-vous avec sudo tailscale up :`,"panel.notice.guideTailscaleServe":`Lancez le service en le pointant vers le port de cet ordinateur :`,"panel.notice.guideTailscaleFill":`Il affiche une adresse https://<hôte>.<votre-tailnet>.ts.net. Mettez-la entière dans « Adresse directe » de « Configuration réseau », enregistrez, reconnectez. Installez aussi Tailscale sur le téléphone et connectez-vous au même compte : ça marche dehors, sans rien exposer sur Internet.`,"panel.notice.promptIntro":`J’ai installé le plugin dsh-mobile-plugin dans DeepSeek Harness et je veux héberger mon propre relais. Commencez par repérer et analyser comment ce plugin fonctionne ; le programme de relais est open source, vous pouvez l’utiliser directement.`,"panel.notice.promptRepo":`Projet`,"panel.notice.promptAsk":`N’agissez pas encore. Demandez-moi dans l’ordre : (1) ai-je un serveur avec IP publique, et quel système (Ubuntu / Debian / Rocky / CentOS) ? (2) ai-je un domaine dont je peux modifier le DNS ? (3) nginx y est-il installé, et 80/443 sont-ils libres ? Si je ne comprends pas la question, c’est probablement que je n’ai pas de serveur ; si je comprends, je vous donne l’accès et vous inspectez l’environnement vous-même. Si je n’ai pas de serveur, dites-moi d’arrêter : louer une machine juste pour un téléphone n’est pas rentable, proposez un tunnel ou le même Wi-Fi, et ne choisissez pas de serveur à ma place.`,"panel.notice.promptDo":`Si je confirme, procédez ainsi : le relais ne fait que relayer ; le dépôt fournit des paquets déjà compilés, ne me faites jamais compiler en local. Une fois installé, il écoute uniquement 127.0.0.1:18788 : reverse-proxifiez mon domaine vers ce port avec nginx en transmettant les en-têtes Upgrade et Connection du WebSocket. Dites-moi enfin quoi saisir dans « Configuration réseau → Adresse du relais » du panneau DSH.`,"panel.notice.promptAfter":`Une fois en place, demandez-moi l’autorisation de configurer vous-même l’adresse du relais dans le plugin et de tester la connexion ; si ça marche, voyez si je dois réappairer des appareils — vous pouvez me demander si l’app se connecte encore Wi-Fi coupé, et m’aider à diagnostiquer sinon.`,"panel.notice.promptStyle":`Donnez des commandes prêtes à copier et la sortie attendue à chaque étape ; en cas d’échec, continuez à investiguer à partir de l’erreur, sans sauter d’étapes ni faire comme si ça marchait.`,"panel.notice.guideRelayTitle":`Relais maison`,"panel.notice.guideTunnelTitle":`Tunnel`,"panel.notice.guideTailscaleTitle":`Autre méthode : Tailscale`},pt:{"panel.notice.title":`Avisos`,"panel.notice.versionLabel":`Versão mínima`,"panel.notice.effective":`Vale a partir do lançamento na App Store`,"panel.notice.body":`O relay público exige o plugin {version} ou superior. Se estiver mais antigo, atualize primeiro.`,"panel.notice.selfHostTitle":`Monte sua própria rede`,"panel.notice.selfHostBody":`O relay público exige uma versão mínima e tem limite de taxa. Se isso atrapalha, monte sua própria rede`,"panel.notice.selfHostAction":`Guia de instalação`,"panel.notice.setupGuideTitle":`Monte sua própria rede`,"panel.notice.guideRelaySummary":`O melhor com um servidor próprio; não vale a pena comprar um só para isso.`,"panel.notice.guideRelayReady":`A experiência varia muito, então deixe esta parte para a sua IA: o relay já está compilado e é aberto; com o programa pronto, costuma levar só alguns minutos.`,"panel.notice.guideRelayCopyHint":`Clique no botão de copiar abaixo e envie para sua IA: ela vai te guiar e fazer a instalação.`,"panel.notice.guideRelayCopy":`Toque para copiar para a IA`,"panel.notice.guideRelayCopied":`Copiado`,"panel.notice.guideRelayWarn":`Sem servidor próprio, melhor não montar o relay por conta própria: o caminho dá trabalho. Mas tem quem goste da bagunça; se for o seu caso, vá em frente.`,"panel.notice.guideTunnelSummary":`Sem IP público: um túnel mapeia a porta direta deste computador para um domínio.`,"panel.notice.guideTunnelOS":`Instale a ferramenta primeiro (exemplo com Cloudflare Tunnel; frp ou similar também serve):`,"panel.notice.guideTunnelTry":`Teste primeiro um túnel temporário: o terminal mostra um endereço https://xxx.trycloudflare.com (muda ao reiniciar; serve para começar):`,"panel.notice.guideTunnelFixed":`Para endereço fixo use um túnel nomeado: rode estas quatro em ordem com o seu domínio:`,"panel.notice.guideTunnelFill":`Coloque esse domínio em «Endereço direto» de «Configurações de rede», salve e reconecte.`,"panel.notice.guideTailscaleInstall":`Instale o Tailscale primeiro (no macOS, brew ou a versão da App Store); depois entre com sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Suba o serviço apontando para a porta deste computador:`,"panel.notice.guideTailscaleFill":`Ele mostra um endereço https://<host>.<seu-tailnet>.ts.net. Coloque o endereço inteiro em «Endereço direto» de «Configurações de rede», salve e reconecte. Instale o Tailscale no celular também e entre na mesma conta: funciona na rua, sem expor nada para a internet.`,"panel.notice.promptIntro":`Instalei o plugin dsh-mobile-plugin no DeepSeek Harness e quero hospedar meu próprio relay. Comece localizando e analisando como este plugin funciona; o programa de relay é open source, então você pode usá-lo direto.`,"panel.notice.promptRepo":`Projeto`,"panel.notice.promptAsk":`Não comece ainda. Pergunte em ordem: (1) tenho um servidor com IP público, e qual sistema (Ubuntu / Debian / Rocky / CentOS)? (2) tenho um domínio cujo DNS eu possa editar? (3) há nginx nele e as portas 80/443 estão livres? Se eu não entender o que você está perguntando, provavelmente não tenho servidor; se entender, passo o acesso e você inspeciona o ambiente. Se eu não tiver servidor, me diga para parar: comprar uma máquina só para um celular não compensa; sugira um túnel ou o mesmo Wi-Fi e não escolha servidores por mim.`,"panel.notice.promptDo":`Se eu confirmar, faça assim: o relay só encaminha; o repositório já traz pacotes compilados, então nunca me faça compilar localmente. Depois de instalado, escuta só em 127.0.0.1:18788: faça proxy reverso do meu domínio para essa porta com nginx, repassando os cabeçalhos Upgrade e Connection do WebSocket. No fim, diga o que colocar em «Configurações de rede → Endereço do relay» no painel DSH.`,"panel.notice.promptAfter":`Depois de montado, peça minha permissão para configurar você mesmo o endereço do relay no plugin e testar a conexão; se funcionar, veja se preciso emparelhar os aparelhos de novo — pode me perguntar se o app ainda conecta com o Wi-Fi desligado e me ajudar a investigar se não conectar.`,"panel.notice.promptStyle":`Dê comandos prontos para colar e a saída esperada em cada passo; se falhar, continue investigando a partir do erro, sem pular etapas nem fingir que deu certo.`,"panel.notice.guideRelayTitle":`Relay próprio`,"panel.notice.guideTunnelTitle":`Túnel`,"panel.notice.guideTailscaleTitle":`Outro caminho: Tailscale`},ru:{"panel.notice.title":`Объявления`,"panel.notice.versionLabel":`Минимальная версия`,"panel.notice.effective":`После релиза в App Store`,"panel.notice.body":`Публичному релею нужен плагин {version} или новее. Иначе сначала обновите.`,"panel.notice.selfHostTitle":`Разверните свою сеть`,"panel.notice.selfHostBody":`У публичного релея есть минимальная версия и ограничения. Если это мешает — разверните свою сеть`,"panel.notice.selfHostAction":`Инструкция`,"panel.notice.setupGuideTitle":`Разверните свою сеть`,"panel.notice.guideRelaySummary":`Лучше всего со своим сервером; покупать его только ради этого не стоит.`,"panel.notice.guideRelayReady":`Опыт у всех разный, поэтому поручите эту часть своей ИИ: релей уже собран и открыт; с готовой программой обычно хватает нескольких минут.`,"panel.notice.guideRelayCopyHint":`Нажмите кнопку копирования ниже и отправьте своей ИИ — она проведёт вас и всё настроит.`,"panel.notice.guideRelayCopy":`Нажмите, чтобы скопировать для ИИ`,"panel.notice.guideRelayCopied":`Скопировано`,"panel.notice.guideRelayWarn":`Без своего сервера я бы не советовал поднимать релей самому: это хлопотный путь. Впрочем, кому-то нравится возиться — если это про вас, дерзайте.`,"panel.notice.guideTunnelSummary":`Без публичного IP: туннель пробрасывает прямой порт этого компьютера на домен.`,"panel.notice.guideTunnelOS":`Сначала установите инструмент (пример — Cloudflare Tunnel; frp и подобные тоже подойдут):`,"panel.notice.guideTunnelTry":`Сначала проверьте временным туннелем: терминал выведет адрес https://xxx.trycloudflare.com (после перезапуска меняется — для старта годится):`,"panel.notice.guideTunnelFixed":`Для постоянного адреса — именованный туннель: выполните четыре строки по порядку со своим доменом:`,"panel.notice.guideTunnelFill":`Укажите домен в «Настройках сети» в поле «Прямой адрес», сохраните и переподключитесь.`,"panel.notice.guideTailscaleInstall":`Сначала установите Tailscale (на macOS подойдёт brew или версия из App Store), затем войдите командой sudo tailscale up:`,"panel.notice.guideTailscaleServe":`Запустите сервис и направьте его на порт этого компьютера:`,"panel.notice.guideTailscaleFill":`Появится адрес https://<хост>.<ваш-tailnet>.ts.net. Впишите его целиком в «Настройки сети» в поле «Прямой адрес», сохраните и переподключитесь. Поставьте Tailscale и на телефон, войдите в тот же аккаунт — работает и вне дома, ничего не выставляя в интернет.`,"panel.notice.promptIntro":`Я установил в DeepSeek Harness плагин dsh-mobile-plugin и хочу поднять свой релей. Сначала найди и разбери, как устроен этот плагин; программа релея открытая, её можно использовать как есть.`,"panel.notice.promptRepo":`Проект`,"panel.notice.promptAsk":`Пока не начинайте. Спросите по порядку: (1) есть ли у меня сервер с публичным IP и какая ОС (Ubuntu / Debian / Rocky / CentOS)? (2) есть ли домен, у которого я могу менять DNS? (3) есть ли там nginx и свободны ли 80/443? Если я не понимаю, о чём вы спрашиваете, сервера, скорее всего, нет; если понимаю — я дам доступ, и вы сами посмотрите окружение. Если сервера нет — скажите остановиться: покупать машину ради одного телефона невыгодно, предложите туннель или ту же Wi-Fi, и не подбирайте мне сервер.`,"panel.notice.promptDo":`Если подтвержу — действуйте так: релей только пересылает; в репозитории есть готовые пакеты, не заставляйте меня собирать локально. После установки он слушает только 127.0.0.1:18788: настройте обратный прокси nginx с моего домена на этот порт, пробрасывая заголовки Upgrade и Connection для WebSocket. В конце скажите, что указать в «Настройки сети → Адрес релея» панели DSH.`,"panel.notice.promptAfter":`После установки попросите у меня разрешение самому прописать адрес релея в плагине и самому проверить связь; если заработает, посмотрите, нужно ли заново привязывать устройства — можно спросить, подключается ли приложение с выключенным Wi-Fi, и помочь разобраться, если нет.`,"panel.notice.promptStyle":`Для каждого шага давайте готовые к копированию команды и ожидаемый вывод; при ошибке продолжайте разбираться по сообщению, не пропускайте шаги и не выдавайте неудачу за успех.`,"panel.notice.guideRelayTitle":`Свой релей`,"panel.notice.guideTunnelTitle":`Туннель`,"panel.notice.guideTailscaleTitle":`Ещё один способ: Tailscale`}},{"zh-Hans":{"panel.selfcheck.title":`连接自检`,"panel.selfcheck.firewall":`防火墙`,"panel.selfcheck.mobile":`手机最近来过`,"panel.selfcheck.allowed":`已放行`,"panel.selfcheck.blocked":`挡住了`,"panel.selfcheck.firewallOff":`没开,不会拦`,"panel.selfcheck.unknown":`查不到`,"panel.selfcheck.mobileNever":`还没来过`,"panel.selfcheck.mobileIdle":`三十分钟内没来过`,"panel.selfcheck.mobileRecent":`最近来过`,"panel.selfcheck.verdict.ok":`最近手机连上过,这条链路是通的。`,"panel.selfcheck.verdict.notListening":`直连端口没在监听,手机拨不进来 —— 到主页的「连接状态 → 局域网直连」里重新连一次。`,"panel.selfcheck.verdict.firewallBlocked":`系统防火墙挡住了这个程序 —— 到系统设置里放行它,引导页的「检查防火墙」有逐系统的步骤。`,"panel.selfcheck.verdict.unknown":`这台机器读不到防火墙状态,所以不能算正常 —— 自己确认一下系统防火墙放行了没有。`,"panel.selfcheck.verdict.network":`电脑这侧没问题,但手机最近三十分钟没来过 —— 多半是没连同一个 WiFi、路由器隔离了设备,或者该走中转。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`直连没在监听`,"panel.selfcheck.short.firewallBlocked":`防火墙挡住了`,"panel.selfcheck.short.unknown":`防火墙状态查不到`,"panel.selfcheck.short.network":`手机三十分钟没来过`,"panel.selfcheck.checking":`检查中…`,"panel.selfcheck.notChecked":`还没自检`,"panel.selfcheck.recheck":`重新自检`,"panel.selfcheck.failed":`自检没做成`,"panel.selfcheck.unavailable":`这台宿主还没有自检接口,更新插件后再看。`,"panel.selfcheck.checkedAt":`查于 {time}`,"panel.selfcheck.port":`端口 {port}`},"zh-Hant":{"panel.selfcheck.title":`連線自檢`,"panel.selfcheck.firewall":`防火牆`,"panel.selfcheck.mobile":`手機最近來過`,"panel.selfcheck.allowed":`已放行`,"panel.selfcheck.blocked":`擋住了`,"panel.selfcheck.firewallOff":`沒開,不會擋`,"panel.selfcheck.unknown":`查不到`,"panel.selfcheck.mobileNever":`還沒來過`,"panel.selfcheck.mobileIdle":`三十分鐘內沒來過`,"panel.selfcheck.mobileRecent":`最近來過`,"panel.selfcheck.verdict.ok":`最近手機連上過,這條鏈路是通的。`,"panel.selfcheck.verdict.notListening":`直連連接埠沒在監聽,手機撥不進來 —— 到主頁的「連線狀態 → 區域網路直連」裡重新連一次。`,"panel.selfcheck.verdict.firewallBlocked":`系統防火牆擋住了這個程式 —— 到系統設定裡放行它,引導頁的「檢查防火牆」有逐系統的步驟。`,"panel.selfcheck.verdict.unknown":`這台機器讀不到防火牆狀態,所以不能算正常 —— 自己確認一下系統防火牆放行了沒有。`,"panel.selfcheck.verdict.network":`電腦這側沒問題,但手機最近三十分鐘沒來過 —— 多半是沒連同一個 WiFi、路由器隔離了裝置,或者該走中轉。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`直連沒在監聽`,"panel.selfcheck.short.firewallBlocked":`防火牆擋住了`,"panel.selfcheck.short.unknown":`防火牆狀態查不到`,"panel.selfcheck.short.network":`手機三十分鐘沒來過`,"panel.selfcheck.checking":`檢查中…`,"panel.selfcheck.notChecked":`還沒自檢`,"panel.selfcheck.recheck":`重新自檢`,"panel.selfcheck.failed":`自檢沒做成`,"panel.selfcheck.unavailable":`這台宿主還沒有自檢介面,更新外掛後再看。`,"panel.selfcheck.checkedAt":`查於 {time}`,"panel.selfcheck.port":`連接埠 {port}`},en:{"panel.selfcheck.title":`Connection self-check`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Last phone visit`,"panel.selfcheck.allowed":`Allowed`,"panel.selfcheck.blocked":`Blocked`,"panel.selfcheck.firewallOff":`Off — nothing is blocked`,"panel.selfcheck.unknown":`Unknown`,"panel.selfcheck.mobileNever":`Never`,"panel.selfcheck.mobileIdle":`Not in 30 min`,"panel.selfcheck.mobileRecent":`Recently`,"panel.selfcheck.verdict.ok":`The phone connected recently, so this path works.`,"panel.selfcheck.verdict.notListening":`The LAN port is not listening, so the phone cannot reach it — reconnect from Connection status → LAN direct on the main page.`,"panel.selfcheck.verdict.firewallBlocked":`The system firewall is blocking this program — allow it in your system settings; the setup page has a Check firewall dialog with per-OS steps.`,"panel.selfcheck.verdict.unknown":`This machine will not report its firewall state, so this cannot be called normal — check yourself that the system firewall allows the program.`,"panel.selfcheck.verdict.network":`This side looks fine, but the phone has not been here for 30 minutes — most likely a different Wi-Fi, router client isolation, or it should go through the relay.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN port not listening`,"panel.selfcheck.short.firewallBlocked":`Firewall blocking`,"panel.selfcheck.short.unknown":`Firewall unknown`,"panel.selfcheck.short.network":`No phone for 30 min`,"panel.selfcheck.checking":`Checking…`,"panel.selfcheck.notChecked":`Not checked yet`,"panel.selfcheck.recheck":`Check again`,"panel.selfcheck.failed":`Self-check failed`,"panel.selfcheck.unavailable":`This host has no self-check endpoint yet — update the plugin and look again.`,"panel.selfcheck.checkedAt":`Checked {time}`,"panel.selfcheck.port":`Port {port}`},ja:{"panel.selfcheck.title":`接続セルフチェック`,"panel.selfcheck.firewall":`ファイアウォール`,"panel.selfcheck.mobile":`最後にスマホが来た時刻`,"panel.selfcheck.allowed":`許可済み`,"panel.selfcheck.blocked":`ブロック中`,"panel.selfcheck.firewallOff":`無効(遮断なし)`,"panel.selfcheck.unknown":`取得できません`,"panel.selfcheck.mobileNever":`まだ来ていません`,"panel.selfcheck.mobileIdle":`30 分来ていません`,"panel.selfcheck.mobileRecent":`最近来ました`,"panel.selfcheck.verdict.ok":`最近スマホが接続できているので、この経路は通っています。`,"panel.selfcheck.verdict.notListening":`LAN ポートが待ち受けていないのでスマホから届きません — ホームの「接続状態 → LAN 直結」で接続し直してください。`,"panel.selfcheck.verdict.firewallBlocked":`システムのファイアウォールがこのプログラムを遮断しています — システム設定で許可してください。セットアップ画面の「ファイアウォールを確認」に OS ごとの手順があります。`,"panel.selfcheck.verdict.unknown":`このマシンではファイアウォールの状態を取得できないため、正常とは言えません — システムのファイアウォールが許可しているかご自身で確認してください。`,"panel.selfcheck.verdict.network":`パソコン側は問題なさそうですが、スマホがこの 30 分来ていません — 同じ Wi-Fi にいない、ルーターの端末分離、または中継を使うべき、のいずれかでしょう。`,"panel.selfcheck.short.ok":`正常`,"panel.selfcheck.short.notListening":`LAN 待ち受けなし`,"panel.selfcheck.short.firewallBlocked":`FW が遮断`,"panel.selfcheck.short.unknown":`FW 状態が不明`,"panel.selfcheck.short.network":`スマホ 30 分なし`,"panel.selfcheck.checking":`確認中…`,"panel.selfcheck.notChecked":`まだ確認していません`,"panel.selfcheck.recheck":`もう一度確認`,"panel.selfcheck.failed":`セルフチェックに失敗しました`,"panel.selfcheck.unavailable":`このホストにはまだセルフチェックの API がありません。プラグインを更新してからご覧ください。`,"panel.selfcheck.checkedAt":`{time} に確認`,"panel.selfcheck.port":`ポート {port}`},ko:{"panel.selfcheck.title":`연결 자체 점검`,"panel.selfcheck.firewall":`방화벽`,"panel.selfcheck.mobile":`최근 휴대폰 접속`,"panel.selfcheck.allowed":`허용됨`,"panel.selfcheck.blocked":`차단됨`,"panel.selfcheck.firewallOff":`꺼짐(차단 없음)`,"panel.selfcheck.unknown":`알 수 없음`,"panel.selfcheck.mobileNever":`아직 없음`,"panel.selfcheck.mobileIdle":`30분간 없음`,"panel.selfcheck.mobileRecent":`최근 방문`,"panel.selfcheck.verdict.ok":`최근에 휴대폰이 연결되었으므로 이 경로는 정상입니다.`,"panel.selfcheck.verdict.notListening":`LAN 포트가 수신 대기 중이 아니라 휴대폰이 들어올 수 없습니다 — 메인 화면의 "연결 상태 → LAN 직접 연결"에서 다시 연결하세요.`,"panel.selfcheck.verdict.firewallBlocked":`시스템 방화벽이 이 프로그램을 차단하고 있습니다 — 시스템 설정에서 허용하세요. 설정 화면의 "방화벽 확인"에 OS별 절차가 있습니다.`,"panel.selfcheck.verdict.unknown":`이 컴퓨터는 방화벽 상태를 읽을 수 없어 정상이라고 할 수 없습니다 — 시스템 방화벽이 허용하는지 직접 확인하세요.`,"panel.selfcheck.verdict.network":`컴퓨터 쪽은 문제없어 보이지만 휴대폰이 30분 동안 오지 않았습니다 — 같은 Wi-Fi가 아니거나, 공유기가 기기를 격리했거나, 중계를 써야 하는 경우입니다.`,"panel.selfcheck.short.ok":`정상`,"panel.selfcheck.short.notListening":`LAN 수신 없음`,"panel.selfcheck.short.firewallBlocked":`방화벽 차단`,"panel.selfcheck.short.unknown":`방화벽 상태 모름`,"panel.selfcheck.short.network":`30분간 휴대폰 없음`,"panel.selfcheck.checking":`확인 중…`,"panel.selfcheck.notChecked":`아직 점검 안 함`,"panel.selfcheck.recheck":`다시 점검`,"panel.selfcheck.failed":`자체 점검 실패`,"panel.selfcheck.unavailable":`이 호스트에는 아직 자체 점검 API가 없습니다. 플러그인을 업데이트한 뒤 확인하세요.`,"panel.selfcheck.checkedAt":`{time} 확인`,"panel.selfcheck.port":`포트 {port}`},de:{"panel.selfcheck.title":`Verbindungs-Selbsttest`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Letzter Handy-Kontakt`,"panel.selfcheck.allowed":`Erlaubt`,"panel.selfcheck.blocked":`Blockiert`,"panel.selfcheck.firewallOff":`Aus — blockiert nichts`,"panel.selfcheck.unknown":`Unbekannt`,"panel.selfcheck.mobileNever":`Noch nie`,"panel.selfcheck.mobileIdle":`Seit 30 Min. nicht`,"panel.selfcheck.mobileRecent":`Zuletzt da`,"panel.selfcheck.verdict.ok":`Das Handy war zuletzt verbunden, dieser Weg funktioniert.`,"panel.selfcheck.verdict.notListening":`Der LAN-Port lauscht nicht, das Handy kommt nicht durch — verbinde neu über Verbindungsstatus → LAN-Direkt auf der Hauptseite.`,"panel.selfcheck.verdict.firewallBlocked":`Die System-Firewall blockiert dieses Programm — erlaube es in den Systemeinstellungen; im Einrichtungsfenster gibt es den Dialog „Firewall prüfen" mit Schritten je System.`,"panel.selfcheck.verdict.unknown":`Dieser Rechner meldet seinen Firewall-Status nicht, deshalb ist das nicht normal — prüfe selbst, ob die System-Firewall das Programm zulässt.`,"panel.selfcheck.verdict.network":`Auf dieser Seite sieht alles gut aus, aber das Handy war 30 Minuten nicht da — meist ein anderes WLAN, Geräte-Isolation im Router oder der Weg über das Relay.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN lauscht nicht`,"panel.selfcheck.short.firewallBlocked":`Firewall blockiert`,"panel.selfcheck.short.unknown":`Firewall unbekannt`,"panel.selfcheck.short.network":`30 Min. kein Handy`,"panel.selfcheck.checking":`Prüfe…`,"panel.selfcheck.notChecked":`Noch nicht geprüft`,"panel.selfcheck.recheck":`Erneut prüfen`,"panel.selfcheck.failed":`Selbsttest fehlgeschlagen`,"panel.selfcheck.unavailable":`Dieser Host hat noch keine Selbsttest-Schnittstelle — Plugin aktualisieren und erneut sehen.`,"panel.selfcheck.checkedAt":`Geprüft {time}`,"panel.selfcheck.port":`Port {port}`},es:{"panel.selfcheck.title":`Autodiagnóstico de conexión`,"panel.selfcheck.firewall":`Cortafuegos`,"panel.selfcheck.mobile":`Última visita del móvil`,"panel.selfcheck.allowed":`Permitido`,"panel.selfcheck.blocked":`Bloqueado`,"panel.selfcheck.firewallOff":`Apagado: no bloquea`,"panel.selfcheck.unknown":`Sin datos`,"panel.selfcheck.mobileNever":`Nunca`,"panel.selfcheck.mobileIdle":`30 min sin venir`,"panel.selfcheck.mobileRecent":`Hace poco`,"panel.selfcheck.verdict.ok":`El móvil se conectó hace poco, este camino funciona.`,"panel.selfcheck.verdict.notListening":`El puerto LAN no está escuchando, el móvil no puede entrar — vuelve a conectar desde Estado de conexión → LAN directa en la página principal.`,"panel.selfcheck.verdict.firewallBlocked":`El cortafuegos del sistema está bloqueando este programa — permítelo en los ajustes del sistema; en la página de configuración hay un diálogo «Comprobar cortafuegos» con los pasos por sistema.`,"panel.selfcheck.verdict.unknown":`Este equipo no informa del estado del cortafuegos, así que no se puede decir que esté bien — comprueba tú que el cortafuegos permita el programa.`,"panel.selfcheck.verdict.network":`Por este lado parece todo correcto, pero el móvil no aparece desde hace 30 minutos — probablemente otra Wi-Fi, aislamiento de dispositivos en el router, o toca usar el relé.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN sin escuchar`,"panel.selfcheck.short.firewallBlocked":`Cortafuegos bloquea`,"panel.selfcheck.short.unknown":`Cortafuegos sin datos`,"panel.selfcheck.short.network":`30 min sin móvil`,"panel.selfcheck.checking":`Comprobando…`,"panel.selfcheck.notChecked":`Sin comprobar`,"panel.selfcheck.recheck":`Comprobar de nuevo`,"panel.selfcheck.failed":`El autodiagnóstico falló`,"panel.selfcheck.unavailable":`Este host aún no tiene la interfaz de autodiagnóstico — actualiza el plugin y vuelve a mirar.`,"panel.selfcheck.checkedAt":`Comprobado {time}`,"panel.selfcheck.port":`Puerto {port}`},fr:{"panel.selfcheck.title":`Auto-diagnostic de connexion`,"panel.selfcheck.firewall":`Pare-feu`,"panel.selfcheck.mobile":`Dernier passage du téléphone`,"panel.selfcheck.allowed":`Autorisé`,"panel.selfcheck.blocked":`Bloqué`,"panel.selfcheck.firewallOff":`Désactivé : ne bloque rien`,"panel.selfcheck.unknown":`Inconnu`,"panel.selfcheck.mobileNever":`Jamais`,"panel.selfcheck.mobileIdle":`Rien depuis 30 min`,"panel.selfcheck.mobileRecent":`Récemment`,"panel.selfcheck.verdict.ok":`Le téléphone s’est connecté récemment, ce chemin fonctionne.`,"panel.selfcheck.verdict.notListening":`Le port LAN n’écoute pas, le téléphone ne peut pas entrer — reconnecte depuis État de la connexion → LAN direct sur la page principale.`,"panel.selfcheck.verdict.firewallBlocked":`Le pare-feu du système bloque ce programme — autorise-le dans les réglages du système ; la page de configuration propose une fenêtre « Vérifier le pare-feu » avec les étapes par système.`,"panel.selfcheck.verdict.unknown":`Cette machine ne communique pas l’état de son pare-feu, donc on ne peut pas dire que tout va bien — vérifie toi-même que le pare-feu autorise le programme.`,"panel.selfcheck.verdict.network":`De ce côté tout semble correct, mais le téléphone n’est pas venu depuis 30 minutes — sans doute un autre Wi-Fi, l’isolation des appareils sur le routeur, ou il faut passer par le relais.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN n’écoute pas`,"panel.selfcheck.short.firewallBlocked":`Pare-feu bloque`,"panel.selfcheck.short.unknown":`Pare-feu inconnu`,"panel.selfcheck.short.network":`30 min sans téléphone`,"panel.selfcheck.checking":`Vérification…`,"panel.selfcheck.notChecked":`Pas encore vérifié`,"panel.selfcheck.recheck":`Vérifier à nouveau`,"panel.selfcheck.failed":`L’auto-diagnostic a échoué`,"panel.selfcheck.unavailable":`Cet hôte n’a pas encore l’interface d’auto-diagnostic — mets le plugin à jour puis reviens.`,"panel.selfcheck.checkedAt":`Vérifié {time}`,"panel.selfcheck.port":`Port {port}`},pt:{"panel.selfcheck.title":`Autodiagnóstico de conexão`,"panel.selfcheck.firewall":`Firewall`,"panel.selfcheck.mobile":`Última visita do celular`,"panel.selfcheck.allowed":`Permitido`,"panel.selfcheck.blocked":`Bloqueado`,"panel.selfcheck.firewallOff":`Desligado: não bloqueia`,"panel.selfcheck.unknown":`Sem dados`,"panel.selfcheck.mobileNever":`Nunca`,"panel.selfcheck.mobileIdle":`30 min sem vir`,"panel.selfcheck.mobileRecent":`Recentemente`,"panel.selfcheck.verdict.ok":`O celular se conectou há pouco, este caminho funciona.`,"panel.selfcheck.verdict.notListening":`A porta LAN não está escutando, o celular não consegue entrar — reconecte em Estado da conexão → LAN direta na página principal.`,"panel.selfcheck.verdict.firewallBlocked":`O firewall do sistema está bloqueando este programa — permita-o nas configurações do sistema; a página de configuração tem a janela "Verificar firewall" com os passos por sistema.`,"panel.selfcheck.verdict.unknown":`Esta máquina não informa o estado do firewall, então não dá para dizer que está normal — confira você mesmo se o firewall permite o programa.`,"panel.selfcheck.verdict.network":`Deste lado parece tudo certo, mas o celular não aparece há 30 minutos — provavelmente outro Wi-Fi, isolamento de dispositivos no roteador, ou é hora de usar o relé.`,"panel.selfcheck.short.ok":`Normal`,"panel.selfcheck.short.notListening":`LAN sem escutar`,"panel.selfcheck.short.firewallBlocked":`Firewall bloqueando`,"panel.selfcheck.short.unknown":`Firewall sem dados`,"panel.selfcheck.short.network":`30 min sem celular`,"panel.selfcheck.checking":`Verificando…`,"panel.selfcheck.notChecked":`Ainda não verificado`,"panel.selfcheck.recheck":`Verificar de novo`,"panel.selfcheck.failed":`O autodiagnóstico falhou`,"panel.selfcheck.unavailable":`Este host ainda não tem a interface de autodiagnóstico — atualize o plugin e veja de novo.`,"panel.selfcheck.checkedAt":`Verificado {time}`,"panel.selfcheck.port":`Porta {port}`},ru:{"panel.selfcheck.title":`Самопроверка подключения`,"panel.selfcheck.firewall":`Брандмауэр`,"panel.selfcheck.mobile":`Последний визит телефона`,"panel.selfcheck.allowed":`Разрешено`,"panel.selfcheck.blocked":`Блокирует`,"panel.selfcheck.firewallOff":`Выключен — не блокирует`,"panel.selfcheck.unknown":`Нет данных`,"panel.selfcheck.mobileNever":`Ни разу`,"panel.selfcheck.mobileIdle":`30 мин не заходил`,"panel.selfcheck.mobileRecent":`Недавно`,"panel.selfcheck.verdict.ok":`Телефон недавно подключался, этот путь работает.`,"panel.selfcheck.verdict.notListening":`Порт LAN не слушает, телефон не может подключиться — переподключитесь в «Состояние подключения → Прямое LAN» на главной странице.`,"panel.selfcheck.verdict.firewallBlocked":`Системный брандмауэр блокирует эту программу — разрешите её в настройках системы; на странице настройки есть окно «Проверить брандмауэр» с шагами для каждой системы.`,"panel.selfcheck.verdict.unknown":`Эта машина не сообщает состояние брандмауэра, поэтому назвать это нормой нельзя — проверьте сами, разрешает ли брандмауэр программу.`,"panel.selfcheck.verdict.network":`С этой стороны всё выглядит нормально, но телефон не появлялся 30 минут — скорее всего другой Wi-Fi, изоляция устройств на роутере или пора идти через ретранслятор.`,"panel.selfcheck.short.ok":`Норма`,"panel.selfcheck.short.notListening":`LAN не слушает`,"panel.selfcheck.short.firewallBlocked":`Брандмауэр блокирует`,"panel.selfcheck.short.unknown":`Брандмауэр неизвестен`,"panel.selfcheck.short.network":`30 мин без телефона`,"panel.selfcheck.checking":`Проверка…`,"panel.selfcheck.notChecked":`Ещё не проверялось`,"panel.selfcheck.recheck":`Проверить снова`,"panel.selfcheck.failed":`Самопроверка не удалась`,"panel.selfcheck.unavailable":`На этом хосте ещё нет интерфейса самопроверки — обновите плагин и посмотрите снова.`,"panel.selfcheck.checkedAt":`Проверено {time}`,"panel.selfcheck.port":`Порт {port}`}}],up=(()=>{let e={"zh-Hans":{},"zh-Hant":{},en:{},ja:{},ko:{},de:{},es:{},fr:{},pt:{},ru:{}};for(let t of Object.keys(e))e[t]=sp(lp.map(e=>e[t]??{}));return e})();function $(e,t){return cp(up,ap(),e,t)}var dp=()=>$(`panel.links.wechatQrAlt`);function fp(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,className:`stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z`})})}function pp(){let[e,t]=(0,g.useState)(!1);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`pointer-events-none fixed end-6 bottom-6 z-40`,children:(0,X.jsxs)(Bf,{variant:`primary`,size:`lg`,className:`pointer-events-auto rounded-full shadow-lg`,onClick:()=>t(!0),children:[(0,X.jsx)(fp,{}),$(`panel.links.joinGroup`)]})}),(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-sm`,children:[(0,X.jsx)(Pf,{className:`sr-only`,children:$(`panel.links.joinGroup`)}),(0,X.jsx)(Ff,{className:`flex justify-center`,children:(0,X.jsx)(`img`,{src:Vf,alt:dp(),className:`w-full rounded-md`})})]})})]})}function mp(){return(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`}),(0,X.jsx)(`path`,{d:`M3 9h18M9 21V9`})]})}function hp(){let e=$(`panel.canvas.open`);return(0,X.jsx)(Bf,{variant:`soft`,size:`icon-md`,className:`pointer-events-auto rounded-full shadow-sm`,"aria-label":e,title:e,onClick:()=>window.open(`/api/relay/canvas`,`_blank`,`noopener`),children:(0,X.jsx)(mp,{})})}var gp=`--nested-drawers`,_p=`--drawer-height`,vp=`--drawer-frontmost-height`,yp=`--drawer-swipe-movement-x`,bp=`--drawer-swipe-movement-y`,xp=`--drawer-snap-point-offset`,Sp=`--drawer-swipe-strength`,Cp=`--drawer-swipe-progress`,wp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...o}=e,s=Od(),c=s.useState(`open`),l=s.useState(`nested`),u=s.useState(`mounted`);return Ir(`div`,e,{state:{open:c,transitionStatus:s.useState(`transitionStatus`)},ref:[s.context.backdropRef,t],stateAttributesMapping:At,props:[{role:`presentation`,hidden:!u,style:{pointerEvents:c?void 0:`none`,userSelect:`none`,WebkitUserSelect:`none`,[Cp]:`0`,[Sp]:`1`}},o],enabled:a||!l})}),Tp=Ad,Ep=`data-drawer-content`,Dp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e;return Od(),Ir(`div`,e,{ref:t,props:[{[Ep]:``},a]})}),Op=g.createContext(void 0);function kp(){return g.useContext(Op)}var Ap=`data-expanded`,jp=`data-nested-drawer-open`,Mp=`data-nested-drawer-swiping`,Np=`data-swipe-dismiss`,Pp=`data-swipe-direction`,Fp=`data-swiping`,Ip=g.createContext(void 0);function Lp(e){let t=g.useContext(Ip);if(e!==!0&&t===void 0)throw Error(S(90));return t}function Rp(e,t){let n=e+t;return n>=0?t:-Math.sqrt(-n)-e}function zp(e,t,n){if(!Number.isFinite(t)||t<=0)return null;if(typeof e==`number`)return Number.isFinite(e)?e<=1?li(e,0,1)*t:e:null;let r=e.trim();if(r.endsWith(`px`)){let e=Number.parseFloat(r);return Number.isFinite(e)?e:null}if(r.endsWith(`rem`)){let e=Number.parseFloat(r);return Number.isFinite(e)?e*n:null}return null}function Bp(e,t){let n=-1,r=1/0;for(let i=0;i<e.length;i+=1){let a=Math.abs(e[i]-t);a<r&&(r=a,n=i)}return n}function Vp(){let e=Od(),{snapPoints:t,activeSnapPoint:n,setActiveSnapPoint:r,popupHeight:i}=Lp(),a=e.useState(`viewportElement`),[o,s]=g.useState(0),[c,l]=g.useState(16),u=G(()=>{let e=Me(a).documentElement;s(a?a.offsetHeight:e.clientHeight);let t=parseFloat(getComputedStyle(e).fontSize);Number.isFinite(t)&&l(t)});b(()=>{if(u(),!a||typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(u);return e.observe(a),()=>{e.disconnect()}},[u,a]);let d=g.useMemo(()=>{if(!t||t.length===0||o<=0||i<=0)return[];let e=Math.min(i,o),n=t.map(t=>{let n=zp(t,o,c);if(n===null)return null;let r=li(n,0,e);return{value:t,height:r,offset:Math.max(0,i-r)}}).filter(e=>!!e);if(n.length<=1)return n;let r=[],a=[];for(let e=n.length-1;e>=0;--e){let t=n[e];a.some(e=>Math.abs(e-t.height)<=1)||(a.push(t.height),r.push(t))}return r.reverse(),r},[i,c,t,o]);return{snapPoints:t,activeSnapPoint:n,setActiveSnapPoint:r,popupHeight:i,viewportHeight:o,resolvedSnapPoints:d,activeSnapPointOffset:g.useMemo(()=>{if(n===null)return;let e=d.find(e=>Object.is(e.value,n));if(e)return e;let t=Math.min(i,o),r=zp(n,o,c);if(r===null)return;let a=li(r,0,t);return d[Bp(d.map(e=>e.height),a)]},[n,i,d,c,o])?.offset??null}}var Hp=g.createContext(null);function Up(){return g.useContext(Hp)}var Wp=!1;function Gp(){Wp||=(typeof CSS<`u`&&`registerProperty`in CSS&&([yp,bp,xp].forEach(e=>{try{CSS.registerProperty({name:e,syntax:`<length>`,inherits:!1,initialValue:`0px`})}catch{}}),[{name:Cp,initialValue:`0`},{name:Sp,initialValue:`1`}].forEach(({name:e,initialValue:t})=>{try{CSS.registerProperty({name:e,syntax:`<number>`,inherits:!1,initialValue:t})}catch{}})),!0)}var Kp={...At,expanded(e){return e?{[Ap]:``}:null},nestedDrawerOpen(e){return e?{[jp]:``}:null},nestedDrawerSwiping(e){return e?{[Mp]:``}:null},swipeDirection(e){return{[Pp]:e}},swiping(e){return e?{[Fp]:``}:null}},qp=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,initialFocus:o,...s}=e,c=Od(),l=c.context.popupRef,{swipeDirection:u,frontmostHeight:d,hasNestedDrawer:f,nestedSwiping:p,nestedSwipeProgressStore:m,onPopupHeightChange:_,notifyParentFrontmostHeight:v,notifyParentHasNestedDrawer:y}=Lp(),x=c.useState(`descriptionElementId`),S=c.useState(`disablePointerDismissal`),C=c.useState(`floatingRootContext`),w=c.useState(`popupProps`),T=c.useState(`modal`),E=c.useState(`mounted`),D=c.useState(`nested`),O=c.useState(`nestedOpenDrawerCount`),k=c.useState(`transitionStatus`),A=c.useState(`open`),j=c.useState(`openMethod`),M=c.useState(`titleElementId`),N=c.useState(`role`),P=C.useState(`floatingId`),F=s.id??P,I=Up();Pd();let{snapPoints:L,activeSnapPoint:R,activeSnapPointOffset:z}=Vp(),B=O>0,V=I?.swiping??!1,H=I?.swipeStrength??null,[ee,te]=g.useState(0),U=g.useRef(0),W=G(()=>{let e=l.current;if(!e)return;let t=e.offsetHeight;if(U.current>0&&d>U.current&&t>U.current)return;if(U.current>0&&f){let e=U.current;te(e),_(e);return}let n=t;n!==U.current&&(U.current=n,te(n),_(n))});b(()=>{if(!E){U.current=0,te(0),_(0);return}let e=l.current;if(!e||(Gp(),W(),typeof ResizeObserver!=`function`))return;let t=new ResizeObserver(W);return t.observe(e),()=>{t.disconnect()}},[W,E,B,_,l]),b(()=>{let e=()=>{let e=l.current;if(!e)return;let t=m.getSnapshot();t>0?e.style.setProperty(Cp,`${t}`):e.style.setProperty(Cp,`0`)};e();let t=m.subscribe(e),n=l.current;return()=>{t(),n&&n.style.setProperty(Cp,`0`)}},[m,l]),b(()=>{if(A)return v?.(d),()=>{v?.(0)}},[d,A,v]),b(()=>{if(y)return y(A||k===`ending`),()=>{y(!1)}},[y,A,k]),$r({open:A,ref:l,onComplete(){A&&c.context.onOpenChangeComplete?.(!0)}});let ne=o===void 0?l:o,re=c.useStateSetter(`popupElement`),K={open:A,nested:D,transitionStatus:k,expanded:R===1,nestedDrawerOpen:B,nestedDrawerSwiping:p,swipeDirection:u,swiping:V},ie;ee&&(f||k===`ending`)&&(ie=`${ee}px`);let ae=L&&L.length>0&&(u===`down`||u===`up`),oe=null;ae&&z!==null&&(oe=u===`up`?-z:z);let se=I?I.getDragStyles():h;if(ae&&u===`down`){let e=z??0,t=Number.parseFloat(String(se[bp]));se=V&&Number.isFinite(t)?{...se,transform:void 0,[bp]:`${Rp(e,t)}px`}:{...se,transform:void 0}}let ce=Ir(`div`,e,{state:K,props:[w,{id:F,"aria-labelledby":M,"aria-describedby":x,role:N,...js,hidden:!E,onKeyDown(e){zd.has(e.key)&&e.stopPropagation()},style:{...se,[Cp]:`0`,[gp]:O,[_p]:ie,[xp]:typeof oe==`number`?`${oe}px`:`0px`,[vp]:d?`${d}px`:void 0,[Sp]:typeof H==`number`&&Number.isFinite(H)&&H>0?`${H}`:`1`}},s],ref:[t,l,re],stateAttributesMapping:Kp});return(0,X.jsx)(vo,{context:C,openInteractionType:j,disabled:!E,closeOnFocusOut:!S,initialFocus:ne,returnFocus:a,modal:T!==!1,restoreFocus:`popup`,children:ce})}),Jp=Qd;function Yp({controlled:e,default:t,name:n,state:r=`value`}){let{current:i}=g.useRef(e!==void 0),[a,o]=g.useState(t);return[i&&e!==void 0?e:a,g.useCallback(e=>{i||o(e)},[])]}var Xp,Zp;function Qp(e){let{children:t,open:n,defaultOpen:r=!1,onOpenChange:i,onOpenChangeComplete:a,disablePointerDismissal:o=!1,modal:s=!0,actionsRef:c,handle:l,triggerId:u,defaultTriggerId:d=null,swipeDirection:f=`down`,snapToSequentialPoints:p=!1,snapPoints:m,snapPoint:h,defaultSnapPoint:_,onSnapPointChange:v}=e,y=Lp(!0),b=y?.onNestedSwipeProgressChange,x=y?.onNestedFrontmostHeightChange,S=y?.onNestedSwipingChange,C=y?.onNestedDrawerPresenceChange,[w,T]=g.useState(0),[E,D]=g.useState(0),[O,k]=g.useState(!1),[A,j]=g.useState(!1),[M]=g.useState($p),N=_===void 0?m?.[0]??null:_,P=h!==void 0,[F,I]=Yp({controlled:h,default:N,name:`Drawer`,state:`snapPoint`}),L=g.useRef(!1),R=g.useRef(!1),z=G((e,t)=>{let n=t??wa(`none`);v?.(e,n),!n.isCanceled&&I(e)}),B=g.useMemo(()=>P||!m||m.length===0?F:F===null||!m.some(e=>Object.is(e,F))?N:F,[F,P,N,m]),V=G(e=>{T(e),!L.current&&e>0&&D(e)}),H=G(e=>{if(e>0){L.current=!0,D(e);return}L.current=!1,w>0&&D(w)}),ee=G(e=>{k(e)}),te=G(e=>{M.set(e),b?.(e)}),U=G(e=>{j(e),S?.(e)}),W=G((e,t)=>{i?.(e,t),!t.isCanceled&&!e&&m&&m.length>0&&z(N,wa(t.reason,t.event,t.trigger))}),ne=g.useMemo(()=>({swipeDirection:f,swipeAreaActiveRef:R,snapToSequentialPoints:p,snapPoints:m,activeSnapPoint:B,setActiveSnapPoint:z,frontmostHeight:E,popupHeight:w,hasNestedDrawer:O,nestedSwiping:A,nestedSwipeProgressStore:M,onNestedDrawerPresenceChange:ee,onPopupHeightChange:V,onNestedFrontmostHeightChange:H,onNestedSwipingChange:U,onNestedSwipeProgressChange:te,notifyParentFrontmostHeight:x,notifyParentSwipingChange:S,notifyParentSwipeProgressChange:b,notifyParentHasNestedDrawer:C}),[B,E,O,A,M,C,b,S,x,ee,H,te,U,V,w,z,m,p,R,f]),re=vf(`drawer`,{open:n,defaultOpen:r,onOpenChange:W,onOpenChangeComplete:a,disablePointerDismissal:o,modal:s,actionsRef:c,handle:l,triggerId:u,defaultTriggerId:d,children:typeof t==`function`?e=>(0,X.jsxs)(g.Fragment,{children:[Xp||=(0,X.jsx)(em,{}),t(e)]}):(0,X.jsxs)(g.Fragment,{children:[Zp||=(0,X.jsx)(em,{}),t]})});return(0,X.jsx)(Ip.Provider,{value:ne,children:re})}function $p(){let e=0,t=new Set;return{getSnapshot:()=>e,set(n){let r=Number.isFinite(n)?n:0;r!==e&&(e=r,t.forEach(e=>{e()}))},subscribe(e){return t.add(e),()=>{t.delete(e)}}}}function em(){let e=kp(),t=Od(!1),n=e?.setDrawerOpen,r=e?.removeDrawer,i=t.useState(`open`),a=t.useState(`nestedOpenDialogCount`),o=t.useState(`popupElement`),s=a===0;return b(()=>{if(r)return()=>{r(t)}},[r,t]),b(()=>{n?.(t,i)},[i,n,t]),g.useEffect(()=>{if(!i||!s||!Qe)return;let e=q(o).CloseWatcher;if(!e)return;function n(e){t.select(`open`)&&t.setOpen(!1,wa(va,e))}let r=new e,a=Ne(r,`close`,n);return()=>{a(),r.destroy()}},[t,s,i,o]),null}var tm=xf,nm=Ef,rm=`data-nested-dialog-open`,im=g.createContext(void 0);function am(){return g.useContext(im)}var om=10,sm=.5,cm=.5,lm=300,um=4,dm=.2,fm=4,pm=80,mm=360,hm=.1,gm=6,_m=2,vm=`[${Ep}]`,ym=g.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,...o}=e,s=Od(),c=s.context.popupRef,l=s.context.backdropRef,{swipeDirection:u,notifyParentSwipingChange:d,notifyParentSwipeProgressChange:f,frontmostHeight:p,snapToSequentialPoints:m,swipeAreaActiveRef:h}=Lp(),_=kp(),{snapPoints:v,resolvedSnapPoints:y,activeSnapPoint:x,activeSnapPointOffset:S,setActiveSnapPoint:C,popupHeight:w}=Vp(),T=s.useState(`open`),E=s.useState(`mounted`),D=s.useState(`nested`),O=s.useState(`nestedOpenDrawerCount`),k=s.useState(`viewportElement`),A=s.useState(`popupElement`),j=_?.visualStateStore,M=O>0,N=u===`left`||u===`right`?`horizontal`:`vertical`,P=N===`vertical`,F=P?`horizontal`:`vertical`,[I,L]=g.useState(null),R=g.useRef(void 0),z=g.useRef(null),B=Le(),V=g.useRef(!1),H=g.useRef(!1),ee=g.useRef(``),te=g.useRef(!1),U=g.useRef(!1),W=g.useRef(null),ne=am(),re=g.useMemo(()=>{if(!v||v.length<2||y.length<2||u!==`down`&&u!==`up`)return null;let e=y.map(e=>e.offset).sort((e,t)=>e-t),t=e[0];return{minOffset:t,range:e[1]-t}},[y,v,u]),K=g.useMemo(()=>!re||S===null?null:li((S-re.minOffset)/re.range,0,1),[S,re]),ie=g.useMemo(()=>v&&v.length>0&&(u===`down`||u===`up`)?u===`down`?[`down`,`up`]:[`up`,`down`]:[u],[v,u]),ae=G(e=>{c.current?.toggleAttribute(Np,e),l.current?.toggleAttribute(Np,e)}),oe=G(()=>{ae(!1),c.current?.removeAttribute(pt),L(null)}),se=G(()=>{H.current&&(H.current=!1,d?.(!1))}),ce=G((e,t,n)=>{let r=T&&!D&&t,i=r?e:0,a=T&&t?e:0;n&&f&&(f(a),a<=0&&se()),j?.set({swipeProgress:i,frontmostHeight:i>0?p:0});let o=l.current;if(!o)return;let s=r&&i>0;o.style.setProperty(Cp,s?`${i}`:`0`),s&&p>0?o.style.setProperty(_p,`${p}px`):o.style.removeProperty(_p)});function le(e,t,n,r,i,a,o,s){let c=Cm(e,t);if(c<=0)return null;let l=((t===`down`||t===`up`)&&v&&v.length>0?S??0:0)+wi(t,n,r),u=Math.max(0,c-l);if(u<=0)return null;let d=wi(t,o,s),f=Math.abs(d)>0?d:wi(t,i,a);return f<=dm?null:hm+(li(u/li(f,dm,fm),pm,mm)-pm)/280*.9}function q(e){if(H.current||!e)return;let t=wi(e.direction??u,e.deltaX,e.deltaY);Math.abs(t)<om||(H.current=!0,d?.(!0))}let ue=ki({enabled:E&&!M,directions:ie,elementRef:s.context.popupRef,ignoreSelectorWhenTouch:!1,ignoreScrollableAncestors:!0,movementCssVars:{x:yp,y:bp},onSwipeStart(e){if(`touches`in e||e.pointerType===`touch`)return;let t=c.current,n=Me(t).getSelection?.();if(!n||n.isCollapsed)return;let r=J(n.anchorNode)?n.anchorNode:n.anchorNode?.parentElement,i=J(n.focusNode)?n.focusNode:n.focusNode?.parentElement;(Y(t,r)||Y(t,i))&&n.removeAllRanges()},onSwipingChange(e){V.current=e,bm(s.context.backdropRef.current,e),!e&&!f&&se()},swipeThreshold({element:e,direction:t}){return wm(e,t)},canStart(e,t){let n=s.context.popupRef.current;if(!n)return!1;let r=n.ownerDocument,i=hi(n.getRootNode(),e.x,e.y);if(!i||!Y(n,i))return!1;let a=t.nativeEvent;return!((`touches`in a||a.pointerType===`touch`)&&Om(r,n))},onProgress(e,t){let n=V.current;n&&q(t);let r=!!(v&&v.length>0);if(n&&u===`down`&&r&&t){let e=s.context.popupRef.current;e&&(e.style.removeProperty(`transform`),e.style.setProperty(bp,`${Rp(S??0,t.deltaY)}px`))}let i=e;if(re&&w>0){let e=S??re.minOffset;n&&t&&Number.isFinite(t.deltaY)?i=(e=>li((e-re.minOffset)/re.range,0,1))(li(e+t.deltaY,0,w)):K!==null&&(i=K)}n||(f?.(0),se()),ce(i,!0,n)},onRelease({event:e,deltaX:t,deltaY:n,direction:r,velocityX:i,velocityY:a,releaseVelocityX:o,releaseVelocityY:c}){let l=s.context.popupRef.current;if(!l){oe();return}let d=l;function f(e){se(),ae(!0),d.style.removeProperty(`transition`),d.setAttribute(pt,``),Yr.flushSync(()=>{L(le(d,e,t,n,i,a,o,c))})}if(!v||v.length===0){if(!r){oe();return}let e=wi(r,t,n);if(e<=0)return oe(),!1;if(wi(r,i,a)>=sm)return f(r),!0;let o=e>wm(d,r);return o?f(r):oe(),o}if(u!==`down`&&u!==`up`){oe();return}if(!w)return oe(),!1;if(y.length===0){oe();return}let p=u===`down`?n:-n,h=Math.sign(p),g=u===`down`?c:-c,_=u===`down`?a:-a,b=g;if(h!==0&&Math.abs(p)>=om){let e=Math.sign(b);e!==0&&e!==h&&(b=_)}let T=S??0,E=li(T+p,0,w),D=Math.abs(b)>=cm?li(b,-4,um)*lm:0,O=m?E:li(E+D,0,w),k=wa(Ca,e),A=()=>(ce(0,!0,!0),oe(),!1),j=e=>(C(e.value,k),A()),M=e=>r?(C(null,k),k.isCanceled?A():(R.current=x,f(u),!0)):j(e);if(m){let e=[...y].sort((e,t)=>e.offset-t.offset),t=e.map(e=>e.offset),n=Bp(t,T),r=e[Bp(t,O)],i=Math.sign(b),a=h!==0&&i!==0&&i===h&&Math.abs(b)>=cm,o=O;if(a){let t=li(n+h,0,e.length-1);if(t!==n){let n=e[t];(h>0?O<n.offset:O>n.offset)&&(r=n,o=n.offset)}else if(h>0)return M(r)}return Math.abs(o-w)<Math.abs(o-r.offset)?M(r):j(r)}let N=y[Bp(y.map(e=>e.offset),O)];return b>=sm&&p>0||Math.abs(O-w)<Math.abs(O-N.offset)?M(N):j(N)},onDismiss(e){j?.set({swipeProgress:0,frontmostHeight:0});let t=s.context.backdropRef.current;t&&(t.style.setProperty(Cp,`0`),t.style.removeProperty(_p));let n=wa(Ca,e);if(s.setOpen(!1,n),n.isCanceled){let t=R.current;t!==void 0&&C(t,wa(Ca,e)),R.current=void 0,z.current?.(),oe();return}if(s.select(`open`)){let t=e;B.request(()=>{if(s.select(`open`)){let e=R.current;e!==void 0&&C(e,wa(Ca,t)),R.current=void 0,oe(),z.current?.()}else R.current=void 0});return}R.current=void 0,ae(!0)}}),de=ue.getPointerProps(),fe=ue.getTouchProps(),{moveNative:pe,reset:me}=ue;z.current=me,g.useEffect(()=>{let e=k??A;if(!e)return;let t=e,n=Me(t);function r(e,r,i){let a=P?i.clientY-r.lastY:i.clientX-r.lastX;if(e.touches.length===2||Om(n,t)||!T||!E||M||Mm(r,e,i,P))return;let o=r.scrollTarget;if(!o||o===n.documentElement||o===n.body){e.cancelable&&e.preventDefault(),e.stopPropagation(),pe(e,t);return}if(!Nm(o,N)){e.cancelable&&e.preventDefault(),e.stopPropagation();return}if(a!==0){let t=Im(o,N,u,a);r.allowSwipe?e.cancelable&&e.preventDefault():e.cancelable&&t?(r.allowSwipe=!0,e.preventDefault()):r.allowSwipe=!1}r.allowSwipe===!0&&(e.stopPropagation(),pe(e,t))}function i(e){if(ne?.onTouchMove(e),U.current)return;let t=W.current,n=e.touches[0];n&&t&&(r(e,t,n),jm(t,n))}return Ne(n,`touchmove`,i,{passive:!1,capture:!0})},[E,M,T,A,P,N,u,pe,k,ne]),b(()=>{re&&!ue.swiping&&ce(!T||D?0:K??0,!0,!1)},[ce,p,D,f,T,K,re,ue.swiping,s,j]),b(()=>{if(f)return T||f(0),()=>{f(0)}},[f,T]),b(()=>{T&&(h.current||me(),oe())},[oe,T,me,h]),b(()=>{let e=l.current;return()=>{j?.set({swipeProgress:0,frontmostHeight:0}),bm(e,!1);let t=l.current;t!==e&&bm(t,!1),se()}},[l,se,j]);let he=g.useMemo(()=>({swiping:ue.swiping,getDragStyles:ue.getDragStyles,swipeStrength:I??null,setSwipeDismissed:ae}),[ae,ue.getDragStyles,ue.swiping,I]);function ge(e){U.current=e,W.current=null}function _e(){ge(!1),ee.current=``,te.current=!1}function ve(e){return ee.current=``,e.pointerType!==`touch`}return(0,X.jsx)(bf,{ref:t,className:r,style:i,render:n,...Sr(o,{onPointerDown(e){if(ee.current=e.pointerType,te.current=e.pointerType===`pen`,!T||!E||M)return;let t=hi(e.currentTarget.getRootNode(),e.clientX,e.clientY);xm(t)||Sm(t)||e.pointerType!==`touch`&&de.onPointerDown?.(e)},onPointerMove(e){e.pointerType!==`touch`&&de.onPointerMove?.(e)},onPointerUp(e){ve(e)&&de.onPointerUp?.(e)},onPointerCancel(e){ve(e)&&de.onPointerCancel?.(e)},onTouchStart(e){if(ee.current===`pen`&&te.current){te.current=!1,ge(!1);return}if(!T||!E||M){ge(!1);return}let t=e.touches[0];if(!t)return;if(Am(e)){ge(!1);return}let n=e.currentTarget,r=hi(n.getRootNode(),t.clientX,t.clientY),i=at(e.nativeEvent),a=J(i)?i:n;if(!Y(n,a)){ge(!0);return}if(ne?.onTouchStart(e),xm(r)){ge(!0);return}U.current=!1;let o=mi(a,n,N),s=mi(a,n,F)!=null,c=null;o&&(c=Fm(o,N,u)?null:!1),W.current={startX:t.clientX,startY:t.clientY,lastX:t.clientX,lastY:t.clientY,scrollTarget:o,hasCrossAxisScrollableContent:s,allowSwipe:c,preserveNativeCrossAxisScroll:!1,drawerAxisAttributed:!1},fe.onTouchStart?.(e)},onTouchEnd(e){ne?.onTouchEnd(e),_e(),fe.onTouchEnd?.(e)},onTouchCancel(e){ne?.onTouchCancel(),_e(),fe.onTouchCancel?.(e)},[rm]:void 0}),children:(0,X.jsx)(Hp.Provider,{value:he,children:a})})});function bm(e,t){e?.toggleAttribute(Fp,t)}function xm(e){return!!e?.closest(ii)}function Sm(e){return!!e?.closest(vm)}function Cm(e,t){return t===`left`||t===`right`?e.offsetWidth:e.offsetHeight}function wm(e,t){return Math.max(Cm(e,t)*.5,om)}function Tm(e,t){return e instanceof t.HTMLInputElement&&e.type===`range`}function Em(e){return e.tagName===`INPUT`||e.tagName===`TEXTAREA`}function Dm(e,t){let n=J(e.anchorNode)?e.anchorNode:e.anchorNode?.parentElement,r=J(e.focusNode)?e.focusNode:e.focusNode?.parentElement;return e.containsNode(t,!0)||Y(t,n)||Y(t,r)}function Om(e,t){let n=it(e);if(n&&Y(t,n)&&Em(n)){let{selectionStart:e,selectionEnd:t}=n;if(e!=null&&t!=null&&e<t)return!0}let r=e.getSelection?.();return!r||r.isCollapsed?!1:Dm(r,t)}function km(e,t){return e.composedPath().some(e=>Tm(e,t))}function Am(e){return km(e.nativeEvent,q(e.currentTarget))}function jm(e,t){e.lastX=t.clientX,e.lastY=t.clientY}function Mm(e,t,n,r){if(e.preserveNativeCrossAxisScroll)return!0;if(e.drawerAxisAttributed||e.allowSwipe===!0||!e.hasCrossAxisScrollableContent)return!1;if(!t.cancelable)return e.preserveNativeCrossAxisScroll=!0,!0;let i=r?n.clientY-e.startY:n.clientX-e.startX,a=r?n.clientX-e.startX:n.clientY-e.startY,o=Math.abs(i),s=Math.abs(a);return s>=gm&&s>o+_m?(e.preserveNativeCrossAxisScroll=!0,!0):o>=gm?(e.drawerAxisAttributed=!0,!1):!0}function Nm(e,t){return Pm(e,t).max>0}function Pm(e,t){if(t===`vertical`){let t=Math.max(0,e.scrollHeight-e.clientHeight);return{offset:e.scrollTop,max:t}}let n=Math.max(0,e.scrollWidth-e.clientWidth);return{offset:e.scrollLeft,max:n}}function Fm(e,t,n){let r=Lm(n,t),{offset:i,max:a}=Pm(e,t);return r?i<=0:i>=a}function Im(e,t,n,r){return(Lm(n,t)?r>0:r<0)&&Fm(e,t,n)}function Lm(e,t){return t===`vertical`?e===`down`:e===`right`}var Rm=class extends Df{};function zm(){return new Rm}var Bm={top:`up`,bottom:`down`,left:`left`,right:`right`},Vm=g.createContext(`bottom`),Hm=g.createContext(0),Um=g.createContext(!1),Wm=Object.assign(function({side:e=`bottom`,...t}){let n=g.useContext(Hm)+1;return(0,X.jsx)(Hm,{value:n,children:(0,X.jsx)(Um,{value:t.snapPoints!=null,children:(0,X.jsx)(Vm,{value:e,children:(0,X.jsx)(Qp,{swipeDirection:Bm[e],...t})})})})},{createHandle:zm});function Gm({className:e,...t}){return(0,X.jsx)(nm,{"data-slot":`drawer-trigger`,className:Q(e),...t})}var Km={bottom:`items-end justify-center`,top:`items-start justify-center`,left:`items-stretch justify-start`,right:`items-stretch justify-end`},qm={bottom:Q(`w-full origin-bottom [height:var(--drawer-height,auto)] max-h-full [--stack-extent:var(--drawer-frontmost-height,var(--drawer-height,0px))]`,`data-nested-drawer-open:[height:var(--drawer-frontmost-height,auto)] data-nested-drawer-open:overflow-hidden`,`[transform:translateY(calc(var(--drawer-swipe-movement-y)-var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateY(calc(100%+0.5rem))] data-ending-style:[transform:translateY(calc(100%+0.5rem))]`),top:Q(`w-full origin-top [height:var(--drawer-height,auto)] max-h-full [--stack-extent:var(--drawer-frontmost-height,var(--drawer-height,0px))]`,`data-nested-drawer-open:[height:var(--drawer-frontmost-height,auto)] data-nested-drawer-open:overflow-hidden`,`[transform:translateY(calc(var(--drawer-swipe-movement-y)+var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateY(calc(-100%-0.5rem))] data-ending-style:[transform:translateY(calc(-100%-0.5rem))]`),left:Q(`h-full w-96 max-w-full origin-left [--stack-extent:25rem]`,`[transform:translateX(calc(var(--drawer-swipe-movement-x)+var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateX(calc(-100%-0.5rem))] data-ending-style:[transform:translateX(calc(-100%-0.5rem))]`),right:Q(`h-full w-96 max-w-full origin-right [--stack-extent:25rem]`,`[transform:translateX(calc(var(--drawer-swipe-movement-x)-var(--stack-offset)))_scale(var(--stack-scale))]`,`data-starting-style:[transform:translateX(calc(100%+0.5rem))] data-ending-style:[transform:translateX(calc(100%+0.5rem))]`)},Jm={bottom:Q(`h-[calc(100dvh-1rem)] w-full min-h-0 origin-bottom shadow-[0_-24px_32px_-12px_var(--shadow-color)]`,`[--snap-offset:var(--drawer-snap-point-offset,0px)]`,`[transform:translateY(calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)))]`,`data-starting-style:[transform:translateY(calc(100%+0.5rem))] data-ending-style:[transform:translateY(calc(100%+0.5rem))]`),top:Q(`h-[calc(100dvh-1rem)] w-full min-h-0 origin-top`,`[--snap-offset:var(--drawer-snap-point-offset,0px)]`,`[transform:translateY(calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)))]`,`data-starting-style:[transform:translateY(calc(-100%-0.5rem))] data-ending-style:[transform:translateY(calc(-100%-0.5rem))]`)},Ym={bottom:`shadow-[0_-24px_32px_-12px_var(--shadow-color)]`,top:`shadow-2xl`,left:`shadow-[24px_0_32px_-12px_var(--shadow-color)]`,right:`shadow-[-24px_0_32px_-12px_var(--shadow-color)]`},Xm={bottom:`before:absolute before:top-1.5 before:left-1/2 before:h-1 before:w-11.5 before:-translate-x-1/2 before:rounded-full`,top:`before:absolute before:bottom-1.5 before:left-1/2 before:h-1 before:w-11.5 before:-translate-x-1/2 before:rounded-full`,left:`before:absolute before:inset-e-1.5 before:top-1/2 before:h-11.5 before:w-1 before:-translate-y-1/2 before:rounded-full`,right:`before:absolute before:inset-s-1.5 before:top-1/2 before:h-11.5 before:w-1 before:-translate-y-1/2 before:rounded-full`},Zm={bottom:`pt-4!`,top:`pb-4!`,left:`pe-4!`,right:`ps-4!`},Qm={bottom:`overflow-hidden [&>[data-slot=drawer-header]]:-mt-4 [&>[data-slot=drawer-close-button]]:top-0`,top:`overflow-hidden [&>[data-slot=drawer-footer]]:-mb-4`,left:`overflow-hidden [&>:not([data-slot=drawer-close-button])]:-me-4 [&>[data-slot=drawer-close-button]]:inset-e-0`,right:`overflow-hidden [&>:not([data-slot=drawer-close-button])]:-ms-4`};function $m({className:e,children:t,closeButton:n=!0,closeLabel:r=`Close`,backdrop:i,frame:a=!0,backdropProps:o,viewportProps:s,...c}){let l=g.useContext(Vm),u=g.useContext(Hm),d=g.useContext(Um),f=o?.forceRender===!0||(i??u<=1),p=a&&f,m=d&&(l===`bottom`||l===`top`)?l:null,{portal:h,popup:_}=Af(c);return(0,X.jsxs)(Jp,{...h,children:[f&&(0,X.jsx)(wp,{"data-slot":`drawer-backdrop`,...o,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`opacity-[calc(1-var(--drawer-swipe-progress))]`,`motion-safe:transition-opacity motion-safe:duration-400 motion-safe:ease-out`,`data-ending-style:opacity-0 data-starting-style:opacity-0 data-swiping:duration-0`,o?.className)}),(0,X.jsx)(ym,{"data-slot":`drawer-viewport`,...s,className:Q(`fixed inset-0 z-50 flex overflow-hidden p-2`,Km[l],m&&`touch-none`,s?.className),children:(0,X.jsx)(qp,{"data-slot":`drawer-popup`,...p?{"data-frame":``}:{},className:Q(`relative flex min-h-0 flex-col rounded-2xl border`,m?Q(`bg-background border-border-overlay before:bg-background-strong`,p&&Q(`data-expanded:before:bg-background data-expanded:border-white/15 data-expanded:p-1.5`,`data-expanded:bg-white/10 data-expanded:shadow-none data-expanded:backdrop-blur-sm`)):p?`before:bg-background border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`:`bg-background border-border-overlay before:bg-background-strong`,`isolate outline-none`,(d||!p)&&Ym[l],Zm[l],Xm[l],`motion-safe:transition-[transform,height] motion-safe:duration-400 motion-safe:ease-[cubic-bezier(0.32,1.2,0.4,1)]`,`data-ending-style:motion-safe:duration-300 data-ending-style:motion-safe:ease-out`,`data-nested-drawer-swiping:duration-0 data-swiping:duration-0 data-swiping:select-none`,m?Q(`touch-none`,Jm[m]):Q(`[--stack-progress:clamp(0,var(--drawer-swipe-progress,0),1)] [--stack-step:0.05]`,`[--stack-count:max(0,calc(var(--nested-drawers,0)-var(--stack-progress)))]`,`[--stack-scale:clamp(0,calc(1-var(--stack-step)*var(--stack-count)),1)]`,`[--stack-shrink:calc(1-var(--stack-scale))]`,`[--stack-peek:calc(var(--stack-count)*1.5rem)]`,`[--stack-offset:calc(var(--stack-peek)+var(--stack-shrink)*var(--stack-extent))]`,qm[l]),e),..._,children:(0,X.jsxs)(`div`,{"data-slot":`drawer-content`,className:Q(`relative flex min-h-0 flex-col not-has-[>[data-slot=drawer-footer]]:pb-6 not-has-[>[data-slot=drawer-header]]:pt-6 [&>[data-slot=drawer-header]+[data-slot=drawer-footer]]:pt-0`,p||m?`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`:Qm[l],m?`h-[calc(100dvh-1.5rem-var(--snap-offset,0))]`:`flex-1`),children:[t,n&&(0,X.jsx)(Tp,{"aria-label":r,"data-slot":`drawer-close-button`,className:Q(Mu({variant:`outline`,size:`icon-sm`}),`absolute inset-e-3 top-3 z-10`),children:(0,X.jsx)(rh,{})})]})})})]})}function eh({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`drawer-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function th({className:e,...t}){return(0,X.jsx)(tm,{"data-slot":`drawer-title`,className:Q(`text-foreground-intense text-2xl font-semibold`,e),...t})}function nh({className:e,...t}){return(0,X.jsx)(Dp,{"data-slot":`drawer-body`,className:Q(`min-h-0 flex-1 overflow-y-auto px-6`,e),...t})}function rh(e){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,...e,children:(0,X.jsx)(`path`,{d:`M11.594 3.594c.225-.225.588-.225.813 0s.225.588 0 .812L8.813 8l3.594 3.594c.225.225.225.588 0 .813s-.588.225-.812 0L8 8.812l-3.594 3.594c-.225.225-.588.225-.812 0s-.225-.588 0-.812L7.188 8 3.594 4.406c-.225-.225-.225-.588 0-.812s.588-.225.813 0L8 7.187l3.594-3.594z`})})}var ih=g.createContext(void 0);function ah(e){let t=g.useContext(ih);if(t===void 0&&!e)throw Error(S(33));return t}var oh=g.createContext(void 0);function sh(e){let t=g.useContext(oh);if(t===void 0&&!e)throw Error(S(36));return t}var ch=g.createContext(void 0);function lh(e=!0){let t=g.useContext(ch);if(t===void 0&&!e)throw Error(S(25));return t}function uh(e){let{closeOnClick:t,highlighted:n,id:r,nodeId:i,store:a,typingRef:o,itemRef:s,itemMetadata:c}=e,{events:l}=a.useState(`floatingTreeRoot`),u=a.useState(`open`),d=lh(!0),f=d!==void 0;return g.useMemo(()=>({id:r,role:`menuitem`,tabIndex:u&&n?0:-1,onKeyDown(e){e.key===` `&&o?.current&&e.preventDefault()},onMouseMove(e){i&&l.emit(`itemhover`,{nodeId:i,target:e.currentTarget})},onClick(e){t&&l.emit(`close`,{domEvent:e,reason:ma})},onMouseUp(e){if(d){let t=d.initialCursorPointRef.current;if(d.initialCursorPointRef.current=null,f&&t&&Math.abs(e.clientX-t.x)<=1&&Math.abs(e.clientY-t.y)<=1||f&&!$e&&e.button===2)return}s.current&&a.context.allowMouseUpTriggerRef.current&&(!f||e.button===2)&&c.type===`regular-item`&&ra(s.current,e,{detail:1})}}),[t,n,r,l,i,u,a,o,s,d,f,c])}var dh={type:`regular-item`};function fh(e){let{closeOnClick:t,disabled:n,highlighted:r,id:i,store:a,typingRef:o=a.context.typingRef,nativeButton:s,itemMetadata:c,nodeId:l}=e,u=g.useRef(null),{getButtonProps:d,buttonRef:f}=ia({disabled:n,focusableWhenDisabled:!0,native:s,composite:!0}),p=uh({closeOnClick:t,highlighted:r,id:i,nodeId:l,store:a,typingRef:o,itemRef:u,itemMetadata:c}),m=g.useCallback(e=>Sr(p,{onMouseEnter(){c.type===`submenu-trigger`&&c.setActive()}},e,d),[p,d,c]),h=ur(u,f);return g.useMemo(()=>({getItemProps:m,itemRef:h}),[m,h])}var ph=g.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function mh(){return g.useContext(ph)}function hh(e={}){let{guess:t,label:n,metadata:r,textRef:i,index:a}=e,{register:o,unregister:s,subscribeMapChange:c,nextIndexRef:l}=mh(),u=g.useRef(-1),[d,f]=g.useState(a==null&&t?()=>{if(u.current===-1){let e=l.current;l.current+=1,u.current=e}return u.current}:-1),p=a??d,m=g.useRef(null),h=g.useCallback(e=>{let t=m.current;t&&s(t),m.current=e,e&&o(e,{metadata:r??null,index:a??null,label:n,textRef:i})},[a,o,s,r,n,i]);return b(()=>{if(a==null)return c(e=>{let t=m.current?e.get(m.current)?.index:null;t!=null&&f(t)})},[a,c]),{ref:h,index:p}}var gh=`data-checked`,_h=`data-unchecked`,vh={checked(e){return e?{[gh]:``}:{[_h]:``}},...gt},yh=g.createContext(void 0),bh=g.createContext(void 0);function xh(e){let t=g.useContext(bh);if(t===void 0&&!e)throw Error(S(69));return t}var Sh=g.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,...o}=e,{store:s}=sh(),{side:c,align:l}=ah(),u=xh(!0)!=null,d=s.useState(`open`),f=s.useState(`transitionStatus`),p=s.useState(`popupProps`),m=s.useState(`mounted`),h=s.useState(`instantType`),_=s.useState(`activeTriggerElement`),v=s.useState(`parent`),y=s.useState(`lastOpenChangeReason`),b=s.useState(`rootId`),x=s.useState(`floatingRootContext`),S=s.useState(`floatingTreeRoot`),C=s.useState(`closeDelay`),w=s.useState(`hoverEnabled`),T=s.useState(`disabled`),E=s.useState(`openMethod`),D=v.type===`context-menu`;$r({open:d,ref:s.context.popupRef,onComplete(){d&&s.context.onOpenChangeComplete?.(!0)}}),g.useEffect(()=>{function e(e){s.setOpen(!1,wa(e.reason,e.domEvent))}return S.events.on(`close`,e),()=>{S.events.off(`close`,e)}},[S.events,s]),cc(x,{enabled:w&&!T&&!D&&v.type!==`menubar`,closeDelay:C});let O=s.useStateSetter(`popupElement`),k=Ir(`div`,e,{state:{transitionStatus:f,side:c,align:l,open:d,nested:v.type===`menu`,instant:h},ref:[t,s.context.popupRef,O],stateAttributesMapping:At,props:[p,{onKeyDown(e){u&&zd.has(e.key)&&e.stopPropagation()}},Kc(f),o,{"data-rootownerid":b}]}),A=v.type===void 0||D;return(_||v.type===`menubar`&&y!==`outside-press`)&&(A=!0),(0,X.jsx)(vo,{context:x,openInteractionType:E,modal:D,disabled:!m,returnFocus:a===void 0?A:a,initialFocus:v.type!==`menu`,restoreFocus:!0,externalTree:v.type===`menubar`?void 0:S,previousFocusableElement:_,nextFocusableElement:v.type===void 0?s.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:v.type===void 0?s.context.beforeContentFocusGuardRef:void 0,children:k})}),Ch=g.createContext(void 0);function wh(){let e=g.useContext(Ch);if(e===void 0)throw Error(S(32));return e}var Th=g.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i,parent:a}=sh();if(!(i.useState(`mounted`)||n))return null;let o=a.type===`menu`||a.type===`menubar`?`group`:void 0;return(0,X.jsx)(Ch.Provider,{value:n,children:(0,X.jsx)(Aa,{ref:t,...r,portalOwnerRole:o})})});function Eh(e){let{children:t,elementsRef:n,labelsRef:r,onMapChange:i}=e,a=G(i),[,o]=g.useState(!1),s=y(Oh).current,c=y(Dh).current,l=g.useRef(0),u=g.useRef(!0),d=g.useRef(null),f=g.useRef(null),p=G(()=>{u.current||(u.current=!0,o(e=>!e))}),m=G((e,t)=>{c.set(e,t),p()}),h=G(e=>{c.delete(e),p()}),_=G(e=>{let t=new Map;return n.current.length=0,r&&(r.current.length=0),e.forEach(e=>{t.set(e.element,{...e.registration.metadata??{},index:e.index}),n.current[e.index]=e.element,r&&(r.current[e.index]=e.registration.label===void 0?e.registration.textRef?.current?.textContent??e.element.textContent:e.registration.label)}),l.current=n.current.length,t});function v(e){if(f.current?.disconnect(),f.current=null,typeof MutationObserver!=`function`||e.length<2)return;let t=new MutationObserver(n=>{if(!jh(n))return;let r=null;for(let n of e)if(n.isConnected){if(r&&Mh(r,n)>0){t.disconnect(),p();return}r=n}});f.current=t;let n=new Set;for(let t=1;t<e.length;t+=1){let r=Ah(e[t-1],e[t]);r&&n.add(r)}n.forEach(e=>t.observe(e,{childList:!0}))}let x=G(()=>{let[e,t]=kh(c),n=_(e),r=d.current,i=!r||r.length!==e.length||e.some((e,t)=>{let n=r[t];return e.index!==n.index||e.element!==n.element||e.registration.index!==n.registration.index||e.registration.metadata!==n.registration.metadata});v(t),d.current=e,u.current=!1,i&&(s.forEach(e=>e(n)),a(n))});b(()=>(!u.current&&d.current&&_(d.current),()=>{n.current=[],r&&(r.current=[])}),[n,r,_]),b(()=>{u.current&&x()}),b(()=>()=>{f.current?.disconnect(),u.current=!0},[]);let S=G(e=>(s.add(e),()=>{s.delete(e)})),C=g.useMemo(()=>({register:m,unregister:h,subscribeMapChange:S,nextIndexRef:l}),[m,h,S,l]);return(0,X.jsx)(ph.Provider,{value:C,children:t})}function Dh(){return new Map}function Oh(){return new Set}function kh(e){let t=new Set,n=[],r=[];e.forEach((e,i)=>{if(!i.isConnected)return;let a=e.index,o={index:a??-1,element:i,registration:e};a===null?r.push(o):a>=0&&(t.add(a),n.push(o))});let i=0;return r.sort((e,t)=>Mh(e.element,t.element)),r.forEach(e=>{for(;t.has(i);)i+=1;e.index=i,n.push(e),i+=1}),t.size>0&&n.sort((e,t)=>e.index-t.index),[n,r.map(e=>e.element)]}function Ah(e,t){let n=e.parentElement;for(;n&&!n.contains(t);)n=n.parentElement;return n}function jh(e){for(let t of e)for(let e=0;e<t.removedNodes.length;e+=1)if(t.removedNodes[e].isConnected)return!0;return!1}function Mh(e,t){return e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}var Nh=20;function Ph(e,t,n,r){let[i,a]=g.useState(!1);b(()=>{if(!e||!t||n==null){a(!1);return}let r=Me(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-Nh)},[e,t,n]),uf(e&&(!t||i),r)}var Fh=g.forwardRef(function(e,t){let{anchor:n,positionMethod:r=`absolute`,className:i,render:a,side:o,align:s,sideOffset:c=0,alignOffset:l=0,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,disableAnchorTracking:m=!1,collisionAvoidance:h=oi,style:_,...v}=e,{store:y}=sh(),x=wh(),S=lh(!0),C=y.useState(`parent`),w=y.useState(`floatingRootContext`),T=y.useState(`floatingTreeRoot`),E=y.useState(`mounted`),D=y.useState(`open`),O=y.useState(`modal`),k=y.useState(`openMethod`),A=y.useState(`activeTriggerElement`),j=y.useState(`transitionStatus`),M=y.useState(`positionerElement`),N=y.useState(`instantType`),P=y.useState(`adaptiveOrigin`),F=y.useState(`lastOpenChangeReason`),I=y.useState(`floatingNodeId`),L=y.useState(`floatingParentNodeId`),R=w.useState(`domReferenceElement`),z=g.useRef(null),B=Qr(M),V=n,H=c,ee=l,te=s,U=h;C.type===`context-menu`&&(V=n??C.context?.anchor,te??=`start`,!o&&te!==`center`&&(ee=e.alignOffset??2,H=e.sideOffset??-5));let W=o,ne=te;C.type===`menu`?(W??=`inline-end`,ne??=`start`,U=e.collisionAvoidance??si):C.type===`menubar`&&(W??=C.context.orientation===`vertical`?`inline-end`:`bottom`,ne??=`start`);let re=C.type===`context-menu`,G=Uc({anchor:V,floatingRootContext:w,positionMethod:S?`fixed`:r,mounted:E,side:W,sideOffset:H,align:ne,alignOffset:ee,arrowPadding:re?0:f,collisionBoundary:u,collisionPadding:d,sticky:p,nodeId:I,keepMounted:x,disableAnchorTracking:m,collisionAvoidance:U,shift:re?{crossAxis:!(`side`in U&&U.side===`flip`),rootBoundary:`layoutViewport`}:void 0,externalTree:T,adaptiveOrigin:P});g.useEffect(()=>{function e(e){e.open&&(e.parentNodeId===I&&y.set(`hoverEnabled`,!1),e.nodeId!==I&&e.parentNodeId===y.select(`floatingParentNodeId`)&&y.setOpen(!1,wa(xa)))}return T.events.on(`menuopenchange`,e),()=>{T.events.off(`menuopenchange`,e)}},[y,T.events,I]),g.useEffect(()=>{if(y.select(`floatingParentNodeId`)==null)return;function e(e){if(e.open||e.nodeId!==y.select(`floatingParentNodeId`))return;let t=e.reason??`sibling-open`;y.setOpen(!1,wa(t))}return T.events.on(`menuopenchange`,e),()=>{T.events.off(`menuopenchange`,e)}},[T.events,y]);let K=Be();g.useEffect(()=>{D||K.clear()},[D,K]),g.useEffect(()=>{function e(e){if(D&&e.nodeId===y.select(`floatingParentNodeId`)){if(e.target&&A&&A!==e.target){let e=y.select(`closeDelay`);e>0?K.isStarted()||K.start(e,()=>{y.setOpen(!1,wa(xa))}):y.setOpen(!1,wa(xa))}else K.clear()}}return T.events.on(`itemhover`,e),()=>{T.events.off(`itemhover`,e)}},[T.events,D,A,y,K]),g.useEffect(()=>{let e={open:D,nodeId:I,parentNodeId:L,reason:y.select(`lastOpenChangeReason`)};T.events.emit(`menuopenchange`,e)},[T.events,D,y,I,L]),b(()=>{let e=R,t=z.current;if(e&&(z.current=e),t&&e&&e!==t){y.set(`instantType`,void 0);let e=new AbortController;return B(()=>{y.set(`instantType`,`trigger-change`)},e.signal),()=>{e.abort()}}},[R,B,y]);let ie={open:D,side:G.side,align:G.align,anchorHidden:G.anchorHidden,nested:C.type===`menu`,instant:N},ae=C.type===`menubar`&&C.context.modal;Ph(D&&(ae||O&&F!==`trigger-hover`),k===`touch`,M,A);let oe=qc(e,ie,{styles:G.positionerStyles,transitionStatus:j,props:v,refs:[t,y.useStateSetter(`positionerElement`)],hidden:!E,inert:!D}),se=E&&C.type!==`menu`&&(C.type!==`menubar`&&O&&F!==`trigger-hover`||C.type===`menubar`&&C.context.modal),ce=null;return C.type===`menubar`?ce=C.context.contentElement:C.type===void 0&&(ce=A),(0,X.jsxs)(ih.Provider,{value:G,children:[se&&(0,X.jsx)(Zd,{ref:C.type===`context-menu`||C.type===`nested-context-menu`?C.context.internalBackdropRef:null,inert:Gr(!D),cutout:ce}),(0,X.jsx)(so,{id:I,children:(0,X.jsx)(Eh,{elementsRef:y.context.itemDomElements,labelsRef:y.context.itemLabels,children:oe})})]})}),Ih=g.createContext(void 0);function Lh(){let e=g.useContext(Ih);if(e===void 0)throw Error(S(34));return e}var Rh=g.memo(g.forwardRef(function(e,t){let{render:n,className:r,value:i,defaultValue:a,onValueChange:o,disabled:s=!1,style:c,"aria-labelledby":l,...u}=e,[d,f]=g.useState(void 0),[p,m]=Yp({controlled:i,default:a,name:`MenuRadioGroup`}),h=G((e,t)=>{o?.(e,t),!t.isCanceled&&m(e)}),_=Ir(`div`,e,{state:{disabled:s},ref:t,props:{role:`group`,"aria-labelledby":l??d,"aria-disabled":s||void 0,...u}}),v=g.useMemo(()=>({value:p,setValue:h,disabled:s}),[p,h,s]);return(0,X.jsx)(yh.Provider,{value:f,children:(0,X.jsx)(Ih.Provider,{value:v,children:_})})})),zh=g.createContext(void 0);function Bh(){let e=g.useContext(zh);if(e===void 0)throw Error(S(35));return e}var Vh=g.forwardRef(function(e,t){let{render:n,className:r,id:i,label:a,nativeButton:o=!1,disabled:s=!1,closeOnClick:c=!1,value:l,style:u,...d}=e,f=hh({guess:!0,label:a}),m=ah(!0),h=jd(i),{store:_}=sh(),v=_.useState(`isActive`,f.index),y=_.useState(`itemProps`),{value:b,setValue:x,disabled:S}=Lh(),C=_.useState(`disabled`),w=s||S||C,T=b===l,{getItemProps:E,itemRef:D}=fh({closeOnClick:c,disabled:w,highlighted:v,id:h,store:_,nativeButton:o,nodeId:m?.context.nodeId,itemMetadata:dh}),O=g.useMemo(()=>({disabled:w,highlighted:v,checked:T}),[w,v,T]);function k(e){let t=wa(ma,e.nativeEvent,void 0,{preventUnmountOnClose:p});x(l,t)}let A=Ir(`div`,e,{state:O,stateAttributesMapping:vh,props:[y,{role:`menuitemradio`,"aria-checked":T,onClick:k},d,E],ref:[D,t,f.ref]});return(0,X.jsx)(zh.Provider,{value:O,children:A})}),Hh=g.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=Bh(),c=g.useRef(null),{transitionStatus:l,mounted:u,setMounted:d}=As(s.checked);return $r({batch:!0,enabled:!s.checked,open:s.checked,ref:c,onComplete(){s.checked||d(!1)}}),Ir(`span`,e,{state:{checked:s.checked,disabled:s.disabled,highlighted:s.highlighted,transitionStatus:l},stateAttributesMapping:vh,ref:[t,c],props:{"aria-hidden":!0,...o},enabled:a||u})}),Uh=g.createContext(null);function Wh(e){let t=g.useContext(Uh);if(t===null&&!e)throw Error(S(5));return t}var Gh={...Zs,disabled:e=>e.parent.type===`menubar`&&e.parent.context.disabled||e.disabled,modal:e=>(e.parent.type===void 0||e.parent.type===`context-menu`)&&(e.modal??!0),openMethod:e=>e.openMethod,allowMouseEnter:e=>e.allowMouseEnter,highlightItemOnHover:e=>e.highlightItemOnHover,parent:e=>e.parent,rootId:e=>e.parent.type===`menu`?e.parent.store.select(`rootId`):e.parent.type===void 0?e.rootId:e.parent.context.rootId,activeIndex:e=>e.activeIndex,isActive:(e,t)=>e.activeIndex===t,hoverEnabled:e=>e.hoverEnabled,instantType:e=>e.instantType,lastOpenChangeReason:e=>e.openChangeReason,floatingTreeRoot:e=>e.parent.type===`menu`?e.parent.store.select(`floatingTreeRoot`):e.floatingTreeRoot,floatingNodeId:e=>e.floatingNodeId,floatingParentNodeId:e=>e.floatingParentNodeId,itemProps:e=>e.itemProps,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin,keyboardEventRelay:e=>{if(e.keyboardEventRelay)return e.keyboardEventRelay;if(e.parent.type===`menu`)return e.parent.store.select(`keyboardEventRelay`)}},Kh=class extends ae{constructor(e,t,n=!1){let r=new Ws,i=Jh(r,t,n,e);super(i,qh(r),Gh),this.unsubscribeParentListener=this.observe(`parent`,e=>{if(this.unsubscribeParentListener?.(),e.type===`menu`){let t=e.store.select(`rootId`),n=e.store.select(`floatingTreeRoot`),r=e.store.select(`keyboardEventRelay`);this.unsubscribeParentListener=e.store.subscribe(()=>{let i=e.store.select(`rootId`),a=e.store.select(`floatingTreeRoot`),o=e.store.select(`keyboardEventRelay`);(t!==i||n!==a||r!==o)&&(t=i,n=a,r=o,this.notifyAll())}),this.context.allowMouseUpTriggerRef=e.store.context.allowMouseUpTriggerRef;return}e.type!==void 0&&(this.context.allowMouseUpTriggerRef=e.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(e,t){this.state.floatingRootContext.context.events.emit(`setOpen`,{open:e,eventDetails:t})}unsubscribeParentListener=null};function qh(e){return{positionerRef:g.createRef(),popupRef:g.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:g.createRef(),beforeContentFocusGuardRef:g.createRef(),onOpenChangeComplete:void 0,triggerElements:e}}function Jh(e,t,n=!1,r){return{...Gs(e,t,n),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,highlightItemOnHover:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new to,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:h,keyboardEventRelay:void 0,closeDelay:0,adaptiveOrigin:void 0,...r}}var Yh=g.createContext(void 0);function Xh(){return g.useContext(Yh)}var Zh=F(function(e){let{children:t,open:n,onOpenChange:r,onOpenChangeComplete:i,defaultOpen:a=!1,disabled:o=!1,modal:s,loopFocus:c=!0,orientation:l=`vertical`,actionsRef:u,closeParentOnEsc:d=!1,handle:f,triggerId:p,defaultTriggerId:_=null,highlightItemOnHover:v=!0}=e,x=lh(!0),S=sh(!0),C=Wh(!0),w=Xh(),T=g.useMemo(()=>w&&S?{type:`menu`,store:S.store}:C?{type:`menubar`,context:C}:x&&!S?{type:`context-menu`,context:x}:{type:void 0},[x,S,C,w]),E=qi(),D=qi(),O=io(),k=T.type===`menu`?T.store:void 0,A=(n??a)&&k?.state.transitionStatus===`starting`,j=y(()=>A?k?.state.instantType:void 0).current,M=Qh({open:a,openProp:n,activeTriggerId:_,triggerIdProp:p,parent:T,disabled:o,highlightItemOnHover:v,modal:T.type===void 0?s:void 0,rootId:E,instantType:j},D,O!=null);M.useControlledProp(`openProp`,n),M.useControlledProp(`triggerIdProp`,p),M.useContextCallback(`onOpenChangeComplete`,i);let N=M.useState(`floatingTreeRoot`),P=oo(N),F=M.useState(`open`),I=M.useState(`activeTriggerElement`),L=M.useState(`positionerElement`),R=M.useState(`hoverEnabled`),z=M.useState(`disabled`),B=M.useState(`lastOpenChangeReason`),V=M.useState(`parent`),H=M.useState(`activeIndex`),ee=M.useState(`payload`),te=M.useState(`floatingParentNodeId`),U=g.useRef(null),W=g.useRef(V.type!==`context-menu`),ne=Be(),re=g.useRef(!0),K=Be(),ie=te!=null,{openMethod:ae,triggerProps:oe}=Tf(F);M.useSyncedValues({disabled:o,highlightItemOnHover:v,modal:V.type===void 0?s:void 0,openMethod:ae,rootId:E}),Bs(M);let{forceUnmount:se,transitionStatus:ce}=Vs(F,M,()=>{M.set(`allowMouseEnter`,!1)},A),le=Qr(M.context.popupRef);g.useEffect(()=>{if(j===void 0)return;let e=()=>{M.state.instantType===j&&M.set(`instantType`,void 0)};if(!F){e();return}if(ce!==void 0)return;if(M.context.popupRef.current==null){e();return}let t=new AbortController;return le(e,t.signal),()=>{t.abort()}},[j,F,ce,le,M]),b(()=>{x&&!S?M.update({parent:{type:`context-menu`,context:x},floatingNodeId:P,floatingParentNodeId:O}):S&&M.update({floatingNodeId:P,floatingParentNodeId:O})},[x,S,P,O,M]),g.useEffect(()=>{if(F||(U.current=null),V.type===`context-menu`){if(!F){ne.clear(),W.current=!1;return}ne.start(500,()=>{W.current=!0})}},[ne,F,V.type]),b(()=>{!F&&!R&&M.set(`hoverEnabled`,!0)},[F,R,M]);let q=G((e,t)=>{let n=t.reason;if(!e&&!M.select(`open`)||F===e&&t.trigger===I&&B===n)return;let i=Rs(t);if(!e&&t.trigger==null&&(t.trigger=I??void 0),r?.(e,t),t.isCanceled)return;M.state.floatingRootContext.dispatchOpenChange(e,t);let a=t.event;if(e===!1&&a?.type===`click`&&a.pointerType===`touch`&&!re.current)return;e&&n===`trigger-focus`?(re.current=!1,K.start(300,()=>{re.current=!0})):(re.current=!0,K.clear());let o=(n===`trigger-press`||n===`item-press`)&&a.detail===0,s=!e&&(n===`escape-key`||n==null);U.current=t.event;let c=Ls(M.state,e,t.trigger,i());c.openChangeReason=n,c.instantType=V.type===`menubar`&&(n===`trigger-focus`||n===`focus-out`||n===`trigger-hover`||n===`list-navigation`||n===`sibling-open`)?`group`:o||s?o?`click`:`dismiss`:void 0,M.update(c)}),ue=ks({popupStore:M,floatingRootContext:M.state.floatingRootContext,floatingId:D,nested:O!=null,onOpenChange:q}),de=ue.context.events;b(()=>{let e=({open:e,eventDetails:t})=>q(e,t);return de.on(`setOpen`,e),()=>{de?.off(`setOpen`,e)}},[de,q]);let J=g.useCallback(()=>{M.setOpen(!1,wa(Sa))},[M]);g.useImperativeHandle(u,()=>({unmount:se,close:J}),[se,J]);let fe;V.type===`context-menu`&&(fe=V.context),g.useImperativeHandle(fe?.positionerRef,()=>L,[L]),g.useImperativeHandle(fe?.actionsRef,()=>({setOpen:q}),[q]);let pe=So(ue,{enabled:!z,bubbles:{escapeKey:d&&V.type===`menu`},outsidePress(){return V.type!==`context-menu`||U.current?.type===`contextmenu`||W.current},externalTree:ie?N:void 0}),me=kc(),he=g.useCallback(e=>{M.select(`activeIndex`)!==e&&M.set(`activeIndex`,e)},[M]),ge=vc(ue,{enabled:!z,listRef:M.context.itemDomElements,activeIndex:H,nested:V.type!==void 0,loopFocus:c,orientation:l,parentOrientation:V.type===`menubar`?V.context.orientation:void 0,rtl:me===`rtl`,disabledIndices:m,onNavigate:he,openOnArrowKeyDown:V.type!==`context-menu`,externalTree:ie?N:void 0,focusItemOnHover:v}),_e=g.useCallback(e=>{M.context.typingRef.current=e},[M]),ve=yc(ue,{enabled:!z,listRef:M.context.itemLabels,elementsRef:M.context.itemDomElements,activeIndex:H,resetMs:500,onMatch:e=>{F&&e!==H&&M.set(`activeIndex`,e)},onTyping:_e}),ye=g.useMemo(()=>{let e=Sr(ve.reference,ge.reference,pe.reference,{onMouseMove(){M.set(`allowMouseEnter`,!0)}},oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=F,e},[M,ve.reference,ge.reference,pe.reference,oe,F]),be=g.useMemo(()=>{let e=Sr(ge.trigger,pe.trigger,oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=!1,e},[ge.trigger,pe.trigger,oe]);y(()=>(M.update({inactiveTriggerProps:be}),null)),Hs(M,{floatingRootContext:ue,activeTriggerProps:ye,inactiveTriggerProps:be,popupProps:g.useMemo(()=>Sr(js,{id:D,role:`menu`,"aria-orientation":l===`horizontal`?`horizontal`:void 0,"aria-labelledby":I?.id,onMouseMove(){M.set(`allowMouseEnter`,!0),V.type===`menu`&&M.set(`hoverEnabled`,!1)},onClick(){M.select(`hoverEnabled`)&&M.set(`hoverEnabled`,!1)},onKeyDown(e){let t=M.select(`keyboardEventRelay`);t&&!e.isPropagationStopped()&&t(e)}},ve.floating,ge.floating,pe.floating),[I,D,l,V.type,M,ve.floating,ge.floating,pe.floating]),itemProps:ge.item??h});let xe=g.useMemo(()=>({store:M,parent:T}),[M,T]),Se=(0,X.jsxs)(oh.Provider,{value:xe,children:[f&&(0,X.jsx)(Ps,{handle:f,store:M}),typeof t==`function`?t({payload:ee}):t]});return V.type===void 0||V.type===`context-menu`?(0,X.jsx)(co,{externalTree:N,children:Se}):Se});function Qh(e,t,n){return y(()=>new Kh(e,t,n)).current}var $h=5;function eg(e,t){let n=tg(t);return e.clientX>=n.left-$h&&e.clientX<=n.right+$h&&e.clientY>=n.top-$h&&e.clientY<=n.bottom+$h}function tg(e){let t=e.getBoundingClientRect(),n=q(e);if(rt)return t;let r=n.getComputedStyle(e,`::before`),i=n.getComputedStyle(e,`::after`);if(r.content===`none`&&i.content===`none`)return t;let a=parseFloat(r.width)||0,o=parseFloat(r.height)||0,s=parseFloat(i.width)||0,c=parseFloat(i.height)||0,l=Math.max(t.width,a,s),u=Math.max(t.height,o,c),d=l-t.width,f=u-t.height;return{left:t.left-d/2,right:t.right+d/2,top:t.top-f/2,bottom:t.bottom+f/2}}function ng(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=ta(),{ref:i,index:a}=hh(e),o=n===a,s=g.useRef(null),c=ur(i,s);return{compositeProps:{tabIndex:o?0:-1,onFocus(){r(a)},onMouseMove(){let e=s.current;if(!t||!e)return;let n=e.hasAttribute(`disabled`)||e.ariaDisabled===`true`;!o&&!n&&e.focus()}},compositeRef:c,index:a}}function rg(e){let{render:t,className:n,style:r,state:i=h,props:a=m,refs:o=m,metadata:s,stateAttributesMapping:c,tag:l=`div`,...u}=e,{compositeProps:d,compositeRef:f}=ng({metadata:s});return Ir(l,e,{state:i,ref:[f,...o],props:[d,...a,u],stateAttributesMapping:c})}function ig(e){if(fe(e)&&e.hasAttribute(`data-rootownerid`))return e.getAttribute(`data-rootownerid`);if(!we(e))return ig(De(e))}function ag(e,t){let n=g.useRef(null);function r(t){Yr.flushSync(()=>{e.setOpen(!1,wa(ga,t.nativeEvent,t.currentTarget))}),Xn(n.current)?.focus()}function i(n){let r=e.select(`positionerElement`);if(r&&Zn(n,r))e.context.beforeContentFocusGuardRef.current?.focus();else{Yr.flushSync(()=>{e.setOpen(!1,wa(ga,n.nativeEvent,n.currentTarget))});let i=Yn(e.context.triggerFocusTargetRef.current||t.current);for(;i!==null&&Y(r,i);){let e=i;if(i=Kn(i),i===e)break}i?.focus()}}return{preFocusGuardRef:n,handlePreFocusGuardFocus:r,handleFocusTargetFocus:i}}function og(e){let{enabled:t=!0,mouseDownAction:n,open:r}=e,i=g.useRef(!1);return g.useMemo(()=>t?{onMouseDown:e=>{(n===`open`&&!r||n===`close`&&r)&&(i.current=!0,Me(e.currentTarget).addEventListener(`click`,()=>{i.current=!1},{once:!0}))},onClick:e=>{i.current&&(i.current=!1,e.preventBaseUIHandler())}}:h,[t,n,r])}var sg=I(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,id:s,openOnHover:c,delay:l=100,closeDelay:u=0,handle:d,payload:f,...p}=e,m=sh(!0),_=Qs(d)??m?.store;if(!_)throw Error(S(85));let v=jd(s),y=_.useState(`isTriggerActive`,v),b=_.useState(`floatingRootContext`),x=_.useState(`isOpenedByTrigger`,v),C=_.useState(`triggerPopupId`,v),w=g.useRef(null),T=lg(),E=ta(!0),D=ao(),O=g.useMemo(()=>D??new to,[D]),{registerTrigger:k,isMountedByThisTrigger:A}=zs(v,w,_,{payload:f,closeDelay:u,parent:T,floatingTreeRoot:O,floatingNodeId:oo(O),floatingParentNodeId:io(),keyboardEventRelay:E?.relayKeyboardEvent}),j=T.type===`menubar`,M=_.useState(`disabled`),N=a||M||j&&T.context.disabled,{getButtonProps:P,buttonRef:F}=ia({disabled:N,native:o});g.useEffect(()=>{!x&&T.type===void 0&&(_.context.allowMouseUpTriggerRef.current=!1)},[_,x,T.type]);let I=g.useRef(null),L=Be(),R=G(e=>{if(!I.current)return;L.clear(),_.context.allowMouseUpTriggerRef.current=!1;let t=e.target;Y(I.current,t)||Y(_.select(`positionerElement`),t)||t===I.current||(t==null||ig(t)!==_.select(`rootId`))&&(eg(e,I.current)||O.events.emit(`close`,{domEvent:e,reason:ba}))});g.useEffect(()=>{x&&_.select(`lastOpenChangeReason`)===`trigger-hover`&&Me(I.current).addEventListener(`mouseup`,R,{once:!0})},[x,R,_]);let z=j&&T.context.hasSubmenuOpen,B=uc(b,{enabled:(c??z)&&!N&&(!j||z&&!A),handleClose:Dc({blockPointerEvents:!j}),mouseOnly:!0,move:!1,restMs:T.type===void 0?l:void 0,delay:{close:u},triggerElementRef:w,externalTree:O,isActiveTrigger:y,isClosing:()=>_.select(`transitionStatus`)===`ending`}),V=cg(x,_.select(`lastOpenChangeReason`)),H=yo(b,{enabled:!N,event:x&&j?`click`:`mousedown`,toggle:!0,ignoreMouse:!1,stickIfOpen:T.type===void 0&&V}),ee=nc(b,{enabled:!N&&z}),te=og({open:x,enabled:j,mouseDownAction:`open`}),U=g.useMemo(()=>Sr(ee.reference,H.reference),[ee.reference,H.reference]),W=_.useState(`triggerProps`,A),{preFocusGuardRef:ne,handlePreFocusGuardFocus:re,handleFocusTargetFocus:K}=ag(_,w),ie={disabled:N,open:x},ae=[I,t,F,k,w],oe=[U,B??h,W,{"aria-haspopup":`menu`,"aria-controls":C,id:v,onMouseDown:e=>{_.select(`open`)||(L.start(200,()=>{_.context.allowMouseUpTriggerRef.current=!0}),Me(e.currentTarget).addEventListener(`mouseup`,R,{once:!0}))}},j?{role:`menuitem`}:{},te,p,P],se=Ir(`button`,e,{enabled:!j,stateAttributesMapping:Ot,state:ie,ref:ae,props:oe});return j?(0,X.jsx)(rg,{tag:`button`,render:n,className:r,style:i,state:ie,refs:ae,props:oe,stateAttributesMapping:Ot}):x?(0,X.jsxs)(g.Fragment,{children:[(0,X.jsx)(lr,{ref:ne,onFocus:re},`${v}-pre-focus-guard`),(0,X.jsx)(g.Fragment,{children:se},v),(0,X.jsx)(lr,{ref:_.context.triggerFocusTargetRef,onFocus:K},`${v}-post-focus-guard`)]}):(0,X.jsx)(g.Fragment,{children:se},v)});function cg(e,t){let n=Be(),[r,i]=g.useState(!1);return b(()=>{e&&t===`trigger-hover`?(i(!0),n.start(500,()=>{i(!1)})):e||(n.clear(),i(!1))},[e,t,n]),r}function lg(){let e=Wh(!0);return g.useMemo(()=>e?{type:`menubar`,context:e}:{type:void 0},[e])}var ug=g.forwardRef(function(e,t){let{className:n,render:r,orientation:i=`horizontal`,style:a,...o}=e;return Ir(`div`,e,{state:{orientation:i},ref:t,props:[{role:`separator`,"aria-orientation":i},o]})});function dg(e){return e==null||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`}var fg=(0,g.createContext)({disableAnimations:!1});function pg(){return(0,g.use)(fg)}var mg=`(prefers-reduced-motion: reduce)`;function hg(){let e=ld(mg),{disableAnimations:t}=pg();return t||e}var gg=[`side`,`sideOffset`,`align`,`alignOffset`,`anchor`,`positionMethod`,`collisionBoundary`,`collisionPadding`,`collisionAvoidance`,`sticky`,`arrowPadding`,`disableAnchorTracking`],_g=[`container`,`keepMounted`];function vg(e){let{positionerProps:t,portalProps:n,...r}=e,i={...t},a={...n},o={};for(let e of Object.keys(r)){let t=r[e];gg.includes(e)?t!==void 0&&(i[e]=t):_g.includes(e)?t!==void 0&&(a[e]=t):o[e]=t}return{positioner:i,portal:a,popup:o}}var yg=[`relative inline-flex items-center gap-1.5 transform-gpu cursor-pointer font-medium outline-none`,`transition duration-250 ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`select-none not-data-popup-open:active:scale-[0.97] not-data-popup-open:active:duration-100 not-data-popup-open:active:ease-in-out not-data-popup-open:active:translate-y-px`,`data-disabled:opacity-disabled data-disabled:pointer-events-none`,`group-data-disabled/submenu-trigger:opacity-disabled group-data-disabled/submenu-trigger:pointer-events-none`,`motion-reduce:transition-none`,`data-[orientation=vertical]:text-start`,`[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`],bg=[`text-foreground-strong hover:text-foreground-intense focus-visible:text-foreground-intense`,`data-active:text-foreground-intense data-popup-open:text-foreground-intense data-pressed:text-foreground-intense`],xg=[...bg,`before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit]`,`before:transition-colors before:duration-300`,`motion-reduce:before:transition-none`,`hover:before:bg-background-muted focus-visible:before:bg-background-muted`,`data-active:before:bg-background-muted`,`data-popup-open:before:bg-background-muted data-pressed:before:bg-background-muted`,`data-highlighted:not-data-disabled:text-foreground-intense`,`data-highlighted:not-data-disabled:before:bg-background-muted`,`group-data-highlighted/submenu-trigger:not-data-disabled:text-foreground-intense`,`group-data-highlighted/submenu-trigger:not-data-disabled:before:bg-background-muted`,`group-data-popup-open/submenu-trigger:not-data-disabled:text-foreground-intense`,`group-data-popup-open/submenu-trigger:not-data-disabled:before:bg-background-muted`],Sg=[...bg,`after:absolute after:rounded-full after:bg-no-repeat`,`after:[background-image:linear-gradient(0deg,currentColor,currentColor)]`,`after:transition-[background-size] after:duration-300`,`motion-reduce:after:transition-none`,`data-[orientation=horizontal]:after:inset-x-0`,`data-[orientation=horizontal]:after:h-0.5`,`data-[orientation=horizontal]:after:bg-size-[0_2px]`,`ltr:data-[orientation=horizontal]:after:bg-right rtl:data-[orientation=horizontal]:after:bg-left`,`hover:data-[orientation=horizontal]:after:bg-size-[100%_2px] focus-visible:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:hover:data-[orientation=horizontal]:after:bg-left rtl:hover:data-[orientation=horizontal]:after:bg-right`,`ltr:focus-visible:data-[orientation=horizontal]:after:bg-left rtl:focus-visible:data-[orientation=horizontal]:after:bg-right`,`data-active:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-active:data-[orientation=horizontal]:after:bg-left rtl:data-active:data-[orientation=horizontal]:after:bg-right`,`data-popup-open:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-popup-open:data-[orientation=horizontal]:after:bg-left rtl:data-popup-open:data-[orientation=horizontal]:after:bg-right`,`data-pressed:data-[orientation=horizontal]:after:bg-size-[100%_2px]`,`ltr:data-pressed:data-[orientation=horizontal]:after:bg-left rtl:data-pressed:data-[orientation=horizontal]:after:bg-right`,`data-[orientation=vertical]:after:inset-s-0 data-[orientation=vertical]:after:top-[25%] data-[orientation=vertical]:after:bottom-[25%]`,`data-[orientation=vertical]:after:w-0.5`,`data-[orientation=vertical]:after:bg-size-[2px_0]`,`data-[orientation=vertical]:after:[background-position-y:bottom]`,`hover:data-[orientation=vertical]:after:bg-size-[2px_100%] hover:data-[orientation=vertical]:after:[background-position-y:top]`,`focus-visible:data-[orientation=vertical]:after:bg-size-[2px_100%] focus-visible:data-[orientation=vertical]:after:[background-position-y:top]`,`data-active:data-[orientation=vertical]:after:bg-size-[2px_100%] data-active:data-[orientation=vertical]:after:[background-position-y:top]`,`data-popup-open:data-[orientation=vertical]:after:bg-size-[2px_100%] data-popup-open:data-[orientation=vertical]:after:[background-position-y:top]`,`data-pressed:data-[orientation=vertical]:after:bg-size-[2px_100%] data-pressed:data-[orientation=vertical]:after:[background-position-y:top]`],Cg=[...bg,`max-w-full`,`**:data-[slot=navigation-link-indicator]:inline-flex`,`**:data-[slot=navigation-link-indicator]:items-center`,`**:data-[slot=navigation-link-indicator]:justify-center`,`**:data-[slot=navigation-link-indicator]:overflow-hidden`,`**:data-[slot=navigation-link-indicator]:shrink-0`,`**:data-[slot=navigation-link-indicator]:w-0`,`**:data-[slot=navigation-link-indicator]:opacity-0`,`rtl:**:data-[slot=navigation-link-indicator]:rotate-180`,`**:data-[slot=navigation-link-indicator]:transition-[width,opacity]`,`**:data-[slot=navigation-link-indicator]:duration-250`,`**:data-[slot=navigation-link-indicator]:ease-out`,`motion-reduce:**:data-[slot=navigation-link-indicator]:transition-none`,`hover:**:data-[slot=navigation-link-indicator]:opacity-100 focus-visible:**:data-[slot=navigation-link-indicator]:opacity-100`,`data-active:**:data-[slot=navigation-link-indicator]:opacity-100`,`**:data-[slot=navigation-link-label]:flex-1`,`**:data-[slot=navigation-link-label]:min-w-0`,`**:data-[slot=navigation-link-label]:truncate`],wg=Au(Q(yg),{variants:{variant:{pill:Q(xg),line:Q(Sg),indicator:Q(Cg)},size:{sm:`text-xs [&_svg:not([class*='size-'])]:size-4`,md:`text-sm [&_svg:not([class*='size-'])]:size-4.5`,lg:`text-base [&_svg:not([class*='size-'])]:size-5`}},compoundVariants:[{variant:`pill`,size:`sm`,class:Q(`data-[orientation=horizontal]:rounded-sm data-[orientation=horizontal]:py-2 data-[orientation=horizontal]:px-3 data-[orientation=horizontal]:has-data-[icon=end]:pe-2 data-[orientation=horizontal]:has-data-[icon=start]:ps-2`,`data-[orientation=vertical]:rounded-xs data-[orientation=vertical]:py-1.5 data-[orientation=vertical]:px-2.5 data-[orientation=vertical]:has-data-[icon=end]:pe-1.5 data-[orientation=vertical]:has-data-[icon=start]:ps-1.5`,`in-aria-[orientation=vertical]:rounded-xs in-aria-[orientation=vertical]:py-1.5 in-aria-[orientation=vertical]:px-2.5 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-1.5 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-1.5`)},{variant:`pill`,size:`md`,class:Q(`data-[orientation=horizontal]:rounded-md data-[orientation=horizontal]:py-2.5 data-[orientation=horizontal]:px-3.5 data-[orientation=horizontal]:has-data-[icon=end]:pe-2.5 data-[orientation=horizontal]:has-data-[icon=start]:ps-2.5`,`data-[orientation=vertical]:rounded-sm data-[orientation=vertical]:py-2 data-[orientation=vertical]:px-3 data-[orientation=vertical]:has-data-[icon=end]:pe-2 data-[orientation=vertical]:has-data-[icon=start]:ps-2`,`in-aria-[orientation=vertical]:rounded-sm in-aria-[orientation=vertical]:py-2 in-aria-[orientation=vertical]:px-3 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-2 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-2`)},{variant:`pill`,size:`lg`,class:Q(`data-[orientation=horizontal]:rounded-lg data-[orientation=horizontal]:py-3 data-[orientation=horizontal]:px-4 data-[orientation=horizontal]:has-data-[icon=end]:pe-3 data-[orientation=horizontal]:has-data-[icon=start]:ps-3`,`data-[orientation=vertical]:rounded-md data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:px-3.5 data-[orientation=vertical]:has-data-[icon=end]:pe-2.5 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`in-aria-[orientation=vertical]:rounded-md in-aria-[orientation=vertical]:py-2.5 in-aria-[orientation=vertical]:px-3.5 in-aria-[orientation=vertical]:has-data-[icon=end]:pe-2.5 in-aria-[orientation=vertical]:has-data-[icon=start]:ps-2.5`)},{variant:`line`,size:`sm`,class:Q(`data-[orientation=horizontal]:py-2`,`data-[orientation=vertical]:py-1.5 data-[orientation=vertical]:ps-2.5`,`data-[orientation=vertical]:has-data-[icon=end]:pe-1.5 data-[orientation=vertical]:has-data-[icon=start]:ps-1.5`,`data-[orientation=horizontal]:after:bottom-1`)},{variant:`line`,size:`md`,class:Q(`data-[orientation=horizontal]:py-2.5`,`data-[orientation=vertical]:py-2 data-[orientation=vertical]:ps-3`,`data-[orientation=vertical]:has-data-[icon=end]:pe-2 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`data-[orientation=horizontal]:after:bottom-1.5`)},{variant:`line`,size:`lg`,class:Q(`data-[orientation=horizontal]:py-3`,`data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:ps-3.5`,`data-[orientation=vertical]:has-data-[icon=end]:pe-2.5 data-[orientation=vertical]:has-data-[icon=start]:ps-2.5`,`data-[orientation=horizontal]:after:bottom-2`)},{variant:`indicator`,size:`sm`,class:Q(`data-[orientation=horizontal]:py-2`,`data-[orientation=vertical]:py-1.5`,`hover:**:data-[slot=navigation-link-indicator]:w-4 focus-visible:**:data-[slot=navigation-link-indicator]:w-4 data-active:**:data-[slot=navigation-link-indicator]:w-4`)},{variant:`indicator`,size:`md`,class:Q(`data-[orientation=horizontal]:py-2.5`,`data-[orientation=vertical]:py-2`,`hover:**:data-[slot=navigation-link-indicator]:w-4.5 focus-visible:**:data-[slot=navigation-link-indicator]:w-4.5 data-active:**:data-[slot=navigation-link-indicator]:w-4.5`)},{variant:`indicator`,size:`lg`,class:Q(`data-[orientation=horizontal]:py-3`,`data-[orientation=vertical]:py-2.5`,`hover:**:data-[slot=navigation-link-indicator]:w-5 focus-visible:**:data-[slot=navigation-link-indicator]:w-5 data-active:**:data-[slot=navigation-link-indicator]:w-5`)}],defaultVariants:{variant:`pill`,size:`md`}}),Tg=g.createContext(null);function Eg(){let e=g.useContext(Tg);if(!e)throw Error(`DropdownMenu sub-components must be rendered inside <DropdownMenu>`);return e}function Dg({size:e=`md`,children:t,...n}){let r=hg(),i=g.useMemo(()=>({size:e,reducedMotion:r}),[e,r]);return(0,X.jsx)(Tg,{value:i,children:(0,X.jsx)(Zh,{...n,children:t})})}function Og({className:e,...t}){return(0,X.jsx)(sg,{"data-slot":`dropdown-menu-trigger`,className:Q(e),...t})}var kg={sm:`min-w-40 rounded-md`,md:`min-w-48 rounded-lg`,lg:`min-w-56 rounded-xl`};function Ag(e,t){return Q(`max-h-(--available-height) w-(--anchor-width) bg-background border-border-overlay flex flex-col border shadow-2xl outline-none`,kg[e],`origin-(--transform-origin)`,`motion-safe:transition-[opacity,scale] motion-safe:duration-200 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-90 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,t)}function jg({className:e,children:t,...n}){let{size:r}=Eg(),{positioner:i,portal:a,popup:o}=vg(n);return(0,X.jsx)(Th,{...a,children:(0,X.jsx)(Fh,{align:`start`,sideOffset:6,...i,className:Q(`isolate z-50`,i.className),children:(0,X.jsx)(Sh,{"data-slot":`dropdown-menu-content`,className:Ag(r,e),...o,children:(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5 overflow-x-hidden overflow-y-auto p-2`,children:t})})})})}var Mg=`w-full outline-hidden`,Ng={sm:`gap-1`,md:`gap-1.5`,lg:`gap-1.5`};function Pg({className:e,...t}){return(0,X.jsx)(ug,{"data-slot":`dropdown-menu-separator`,className:Q(`bg-border -mx-2 my-1.5 h-px shrink-0`,e),...t})}function Fg(e){return(0,X.jsx)(Rh,{"data-slot":`dropdown-menu-radio-group`,...e})}function Ig({className:e,children:t,...n}){let{size:r,reducedMotion:i}=Eg();return(0,X.jsxs)(Vh,{"data-slot":`dropdown-menu-radio-item`,"data-orientation":`vertical`,className:Q(wg({variant:`pill`,size:r}),Mg,`justify-between`,e),...n,children:[(0,X.jsx)(`span`,{className:Q(`flex items-center`,Ng[r]),children:t}),(0,X.jsx)(Hh,{"data-slot":`dropdown-menu-radio-item-indicator`,keepMounted:!i,className:`group/check text-foreground-intense shrink-0`,children:(0,X.jsx)(Lg,{"data-icon":`end`,className:`me-0.5 size-[1.125em]`})})]})}function Lg({className:e,...t}){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,className:Q(`stroke-2`,e),...t,children:(0,X.jsx)(`path`,{d:`M4.3 12.55 L9.25 17.5 L19.7 6.5`,pathLength:1,strokeDasharray:`1 2`,className:Q(`opacity-0 [stroke-dashoffset:1.02]`,`group-data-checked/check:opacity-100 group-data-checked/check:[stroke-dashoffset:0]`,`motion-safe:transition-[opacity,stroke-dashoffset] motion-safe:ease-out`,`motion-safe:delay-[0ms,150ms] motion-safe:duration-[150ms,0ms]`,`motion-safe:group-data-checked/check:delay-[0ms] motion-safe:group-data-checked/check:duration-[0ms,300ms]`)})})}function Rg(...e){return e.filter(Boolean).join(` `)}var zg={ok:`bg-success`,warn:`bg-warning`,error:`bg-error`,off:`bg-foreground-subtle`},Bg={ok:`text-success`,warn:`text-warning`,error:`text-error`,off:`text-foreground-muted`};function Vg(e){if(e==null||e===0||e===``)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString(`zh-CN`,{hour12:!1})}function Hg(e){return e===`connected`?`ok`:e===`error`?`error`:e===`connecting`?`warn`:`off`}function Ug(e){let t={connected:`panel.status.connected`,connecting:`panel.status.connecting`,error:`panel.status.error`,off:`panel.status.off`};return t[e]?$(t[e]):e}function Wg(e,t){return t?e===`listening`?`ok`:e===`error`?`error`:`warn`:`off`}function Gg(e,t){return t?e===`listening`?$(`panel.lan.listening`):e===`error`?$(`panel.lan.error`):e:$(`panel.lan.off`)}function Kg(e){let t={healthy:`panel.sidecar.healthy`,starting:`panel.sidecar.starting`,restarting:`panel.sidecar.restarting`,error:`panel.sidecar.error`,stopped:`panel.sidecar.stopped`};return t[e]?$(t[e]):e}function qg(){return(0,g.useSyncExternalStore)(ip,np,np)}var Jg=`(max-width: 767px)`;function Yg(){let[e,t]=(0,g.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(Jg).matches);return(0,g.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(Jg),n=()=>t(e.matches);return n(),e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function Xg(){return(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,X.jsx)(`path`,{d:`M3.6 9h16.8M3.6 15h16.8`}),(0,X.jsx)(`path`,{d:`M12 3c2.4 2.4 3.6 5.4 3.6 9s-1.2 6.6-3.6 9c-2.4-2.4-3.6-5.4-3.6-9S9.6 5.4 12 3Z`})]})}function Zg({checked:e}){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,className:Rg(`size-4.5 shrink-0 stroke-2`,e?`visible`:`invisible`),children:(0,X.jsx)(`path`,{d:`M4.3 12.55 L9.25 17.5 L19.7 6.5`})})}function Qg(){let e=qg(),t=$(`panel.language.open`),n=Yg(),[r,i]=(0,g.useState)(!1),a=tp(),o=(0,X.jsx)(Bf,{variant:`soft`,size:`icon-md`,className:`pointer-events-auto rounded-full shadow-sm`,"aria-label":t,title:`${t} · ${Uf[e]}`,children:(0,X.jsx)(Xg,{})});if(n){let e=(e,t)=>{let n=a===e;return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":n,onClick:()=>{rp(e),i(!1)},className:Rg(`flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-background-muted`,n?`text-foreground-intense`:`text-foreground`),children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t}),(0,X.jsx)(Zg,{checked:n})]},e)};return(0,X.jsxs)(Wm,{open:r,onOpenChange:i,children:[(0,X.jsx)(Gm,{render:o}),(0,X.jsxs)($m,{closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(eh,{children:(0,X.jsx)(th,{children:t})}),(0,X.jsx)(nh,{className:`px-3 pb-3`,children:(0,X.jsxs)(`div`,{role:`radiogroup`,"aria-label":t,className:`flex flex-col gap-0.5`,children:[e(`system`,$(`panel.language.system`)),(0,X.jsx)(`div`,{className:`my-1 h-px shrink-0 bg-border`}),Hf.map(t=>e(t,Uf[t]))]})})]})]})}return(0,X.jsxs)(Dg,{children:[(0,X.jsx)(Og,{render:o}),(0,X.jsx)(jg,{align:`end`,style:{width:`auto`,minWidth:`11rem`},children:(0,X.jsxs)(Fg,{value:a,onValueChange:e=>rp(e),children:[(0,X.jsx)(Ig,{value:`system`,children:$(`panel.language.system`)}),(0,X.jsx)(Pg,{}),Hf.map(e=>(0,X.jsx)(Ig,{value:e,children:Uf[e]},e))]})})]})}function $g(){return yd()}function e_(){return(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`circle`,{cx:`12`,cy:`12`,r:`4`}),(0,X.jsx)(`path`,{d:`M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41`})]})}function t_(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M20.5 14.5A8.5 8.5 0 0 1 9.5 3.5a8.5 8.5 0 1 0 11 11Z`})})}function n_(){let{resolvedTheme:e,setTheme:t}=$g(),n=e===`dark`,r=$(n?`panel.theme.toDay`:`panel.theme.toNight`);return(0,X.jsx)(Bf,{variant:`soft`,size:`icon-md`,className:`pointer-events-auto rounded-full shadow-sm`,"aria-label":r,title:r,onClick:()=>t(n?`light`:`dark`),children:n?(0,X.jsx)(e_,{}):(0,X.jsx)(t_,{})})}function r_(){return(0,X.jsxs)(`div`,{className:`pointer-events-none fixed end-6 top-6 z-40 flex items-center gap-2`,children:[(0,X.jsx)(hp,{}),(0,X.jsx)(Qg,{}),(0,X.jsx)(n_,{})]})}var i_=(0,g.createContext)({});function a_(e){let t=(0,g.useRef)(null);return t.current===null&&(t.current=e()),t.current}var o_=typeof window<`u`?g.useLayoutEffect:g.useEffect,s_=(0,g.createContext)(null);function c_(e,t){e.indexOf(t)===-1&&e.push(t)}function l_(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}var u_=(e,t,n)=>n>t?t:n<e?e:n,d_={},f_=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e),p_=e=>typeof e==`object`&&!!e,m_=e=>/^0[^.\s]+$/u.test(e);function h_(e){let t;return()=>(t===void 0&&(t=e()),t)}var g_=e=>e,__=(...e)=>e.reduce((e,t)=>n=>t(e(n))),v_=(e,t,n)=>{let r=t-e;return r?(n-e)/r:1},y_=class{constructor(){this.subscriptions=[]}add(e){return c_(this.subscriptions,e),()=>this.remove(e)}remove(e){l_(this.subscriptions,e)}notify(e,t,n){let r=this.subscriptions.length;if(r){if(r===1)this.subscriptions[0](e,t,n);else for(let i=0;i<r;i++){let r=this.subscriptions[i];r&&r(e,t,n)}}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}},b_=e=>e*1e3,x_=e=>e/1e3,S_=(e,t)=>t?1e3/t*e:0,C_=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e},w_=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,T_=1e-7,E_=12;function D_(e,t,n,r,i){let a,o,s=0;do o=t+(n-t)/2,a=w_(o,r,i)-e,a>0?n=o:t=o;while(Math.abs(a)>T_&&++s<E_);return o}function O_(e,t,n,r){if(e===t&&n===r)return g_;let i=t=>D_(t,0,1,e,n);return e=>e===0||e===1?e:w_(i(e),t,r)}var k_=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,A_=e=>t=>1-e(1-t),j_=O_(.33,1.53,.69,.99),M_=A_(j_),N_=k_(M_),P_=e=>e>=1?1:(e*=2)<1?.5*M_(e):.5*(2-2**(-10*(e-1))),F_=e=>1-Math.sin(Math.acos(e)),I_=A_(F_),L_=k_(F_),R_=O_(.42,0,1,1),z_=O_(0,0,.58,1),B_=O_(.42,0,.58,1),V_=e=>Array.isArray(e)&&typeof e[0]!=`number`;function H_(e,t){return V_(e)?e[C_(0,e.length,t)]:e}var U_=e=>Array.isArray(e)&&typeof e[0]==`number`,W_={linear:g_,easeIn:R_,easeInOut:B_,easeOut:z_,circIn:F_,circInOut:L_,circOut:I_,backIn:M_,backInOut:N_,backOut:j_,anticipate:P_},G_=e=>typeof e==`string`,K_=e=>{if(U_(e)){e.length;let[t,n,r,i]=e;return O_(t,n,r,i)}return G_(e)?(W_[e],`${e}`,W_[e]):e},q_={delta:0,timestamp:0,isProcessing:!1},J_;function Y_(){J_=void 0}var X_={now:()=>(J_===void 0&&X_.set(q_.isProcessing||d_.useManualTiming?q_.timestamp:performance.now()),J_),set:e=>{J_=e,queueMicrotask(Y_)}},Z_=e=>Math.round(e*1e5)/1e5,Q_=e=>t=>typeof t==`string`&&t.startsWith(e),$_=Q_(`--`),ev=Q_(`var(--`),tv=e=>ev(e)?nv.test(e.split(`/*`)[0].trim()):!1,nv=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function rv(e){return typeof e==`string`&&e.split(`/*`)[0].includes(`var(--`)}var iv={test:e=>typeof e==`number`,parse:parseFloat,transform:e=>e},av={...iv,transform:e=>u_(0,1,e)},ov={...iv,default:1},sv=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function cv(e){return e==null}var lv=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,uv=(e,t)=>n=>!!(typeof n==`string`&&lv.test(n)&&n.startsWith(e)||t&&!cv(n)&&Object.prototype.hasOwnProperty.call(n,t)),dv=(e,t,n)=>r=>{if(typeof r!=`string`)return r;let[i,a,o,s]=r.match(sv);return{[e]:parseFloat(i),[t]:parseFloat(a),[n]:parseFloat(o),alpha:s===void 0?1:parseFloat(s)}},fv=e=>u_(0,255,e),pv={...iv,transform:e=>Math.round(fv(e))},mv={test:uv(`rgb`,`red`),parse:dv(`red`,`green`,`blue`),transform:({red:e,green:t,blue:n,alpha:r=1})=>`rgba(`+pv.transform(e)+`, `+pv.transform(t)+`, `+pv.transform(n)+`, `+Z_(av.transform(r))+`)`};function hv(e){let t=``,n=``,r=``,i=``;return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}var gv={test:uv(`#`),parse:hv,transform:mv.transform},_v=e=>({test:t=>typeof t==`string`&&t.endsWith(e)&&t.split(` `).length===1,parse:parseFloat,transform:t=>`${t}${e}`}),vv=_v(`deg`),yv=_v(`%`),bv=_v(`px`),xv=_v(`vh`),Sv=_v(`vw`),Cv={...yv,parse:e=>yv.parse(e)/100,transform:e=>yv.transform(e*100)},wv={test:uv(`hsl`,`hue`),parse:dv(`hue`,`saturation`,`lightness`),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>`hsla(`+Math.round(e)+`, `+yv.transform(Z_(t))+`, `+yv.transform(Z_(n))+`, `+Z_(av.transform(r))+`)`},Tv={test:e=>mv.test(e)||gv.test(e)||wv.test(e),parse:e=>mv.test(e)?mv.parse(e):wv.test(e)?wv.parse(e):gv.parse(e),transform:e=>typeof e==`string`?e:e.hasOwnProperty(`red`)?mv.transform(e):wv.transform(e),getAnimatableNone:e=>{let t=Tv.parse(e);return t.alpha=0,Tv.transform(t)}},Ev=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu,Dv=new RegExp(sv.source),Ov=new RegExp(Ev.source,`i`);function kv(e){return isNaN(e)&&typeof e==`string`&&(Dv.test(e)||Ov.test(e))}var Av=`number`,jv=`color`,Mv=`var`,Nv=`var(`,Pv="${}",Fv=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Iv(e){let t=e.toString();return Dv.test(t)||Ov.test(t)}function Lv(e){let t=e.toString(),n=[],r={color:[],number:[],var:[]},i=[],a=0;return{values:n,split:t.replace(Fv,e=>(Tv.test(e)?(r.color.push(a),i.push(jv),n.push(Tv.parse(e))):e.startsWith(Nv)?(r.var.push(a),i.push(Mv),n.push(e)):(r.number.push(a),i.push(Av),n.push(parseFloat(e))),++a,Pv)).split(Pv),indexes:r,types:i}}function Rv(e){return Lv(e).values}function zv({split:e,types:t}){let n=e.length;return r=>{let i=``;for(let a=0;a<n;a++)if(i+=e[a],r[a]!==void 0){let e=t[a];i+=e===Av?Z_(r[a]):e===jv?Tv.transform(r[a]):r[a]}return i}}function Bv(e){return zv(Lv(e))}var Vv=e=>typeof e==`number`?0:Tv.test(e)?Tv.getAnimatableNone(e):e,Hv=(e,t)=>typeof e==`number`?t?.trim().endsWith(`/`)?e:0:Vv(e);function Uv(e){let t=Lv(e);return zv(t)(t.values.map((e,n)=>Hv(e,t.split[n])))}var Wv={test:kv,parse:Rv,createTransformer:Bv,getAnimatableNone:Uv};function Gv(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Kv({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,a=0,o=0;if(!t)i=a=o=n;else{let r=n<.5?n*(1+t):n+t-n*t,s=2*n-r;i=Gv(s,r,e+1/3),a=Gv(s,r,e),o=Gv(s,r,e-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(o*255),alpha:r}}function qv(e,t){return n=>n>0?t:e}var Jv=(e,t,n)=>e+(t-e)*n,Yv=(e,t,n)=>{let r=e*e,i=n*(t*t-r)+r;return i<0?0:Math.sqrt(i)},Xv=[gv,mv,wv],Zv=e=>Xv.find(t=>t.test(e));function Qv(e){let t=Zv(e);if(!t)return`${e}`,!1;let n=t.parse(e);return t===wv&&(n=Kv(n)),n}var $v=(e,t)=>{let n=Qv(e),r=Qv(t);if(!n||!r)return qv(e,t);let i={...n};return e=>(i.red=Yv(n.red,r.red,e),i.green=Yv(n.green,r.green,e),i.blue=Yv(n.blue,r.blue,e),i.alpha=Jv(n.alpha,r.alpha,e),mv.transform(i))},ey=new Set([`none`,`hidden`]);function ty(e,t){return ey.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function ny(e,t){return n=>Jv(e,t,n)}function ry(e){return typeof e==`number`?ny:typeof e==`string`?tv(e)?qv:Tv.test(e)?$v:sy:Array.isArray(e)?iy:typeof e==`object`?Tv.test(e)?$v:ay:qv}function iy(e,t){let n=[...e],r=n.length,i=e.map((e,n)=>ry(e)(e,t[n]));return e=>{for(let t=0;t<r;t++)n[t]=i[t](e);return n}}function ay(e,t){let n={...e,...t},r={};for(let i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=ry(e[i])(e[i],t[i]));return e=>{for(let t in r)n[t]=r[t](e);return n}}function oy(e,t){let n=[],r={color:0,var:0,number:0};for(let i=0;i<t.values.length;i++){let a=t.types[i],o=e.indexes[a][r[a]],s=e.values[o]??0;n[i]=s,r[a]++}return n}var sy=(e,t)=>{let n=Wv.createTransformer(t),r=Lv(e),i=Lv(t);return r.indexes.var.length===i.indexes.var.length&&r.indexes.color.length===i.indexes.color.length&&r.indexes.number.length>=i.indexes.number.length?ey.has(e)&&!i.values.length||ey.has(t)&&!r.values.length?ty(e,t):__(iy(oy(r,i),i.values),n):(`${e}${t}`,qv(e,t))},cy=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/iu;function ly(e,t){let n=cy.exec(e);if(!n)return;let r=cy.exec(t);if(!r||n[2]!==r[2])return;let i=n[2],a=parseFloat(n[1]),o=parseFloat(r[1]);return e=>Z_(Jv(a,o,e))+i}function uy(e,t,n){if(typeof e==`number`&&typeof t==`number`&&typeof n==`number`)return Jv(e,t,n);if(typeof e==`string`&&typeof t==`string`){let n=ly(e,t);if(n)return n}return ry(e)(e,t)}var dy=[`setup`,`read`,`resolveKeyframes`,`preUpdate`,`update`,`preRender`,`render`,`postRender`];function fy(e){let t=new Set,n=new Set,r=!1,i=!1,a=new Set,o={delta:0,timestamp:0,isProcessing:!1};function s(t){a.has(t)&&(n.add(t),e()),t(o)}let c={schedule:(e,i=!1,o=!1)=>{let s=o&&r?t:n;return i&&a.add(e),s.add(e),e},cancel:e=>{n.delete(e),a.delete(e)},process:e=>{if(o=e,r){i=!0;return}r=!0;let a=t;t=n,n=a,t.forEach(s),t.clear(),r=!1,i&&(i=!1,c.process(e))}};return c}var py=40;function my(e,t,n={delta:0,timestamp:0,isProcessing:!1}){let r=!1,i=!0,a=()=>r=!0,o=dy.reduce((e,t)=>(e[t]=fy(a),e),{}),{setup:s,read:c,resolveKeyframes:l,preUpdate:u,update:d,preRender:f,render:p,postRender:m}=o,h=()=>{let a=d_.useManualTiming,o=a?n.timestamp:performance.now();r=!1,a||(n.delta=i?1e3/60:Math.max(Math.min(o-n.timestamp,py),1)),n.timestamp=o,n.isProcessing=!0,s.process(n),c.process(n),l.process(n),u.process(n),d.process(n),f.process(n),p.process(n),m.process(n),n.isProcessing=!1,r&&t&&(i=!1,e(h))},g=()=>{r=!0,i=!0,n.isProcessing||e(h)};return{schedule:dy.reduce((e,t)=>{let n=o[t];return e[t]=(e,t=!1,i=!1)=>(r||g(),n.schedule(e,t,i)),e},{}),cancel:e=>{for(let t=0;t<dy.length;t++)o[dy[t]].cancel(e)},state:n,steps:o}}var{schedule:hy,cancel:gy,steps:_y}=my(typeof requestAnimationFrame<`u`?requestAnimationFrame:g_,!0,q_),vy=e=>{let t=({timestamp:t})=>e(t);return{start:(e=!0)=>hy.update(t,e),stop:()=>gy(t),now:()=>q_.isProcessing?q_.timestamp:X_.now()}},yy=(e,t,n=10)=>{let r=``,i=Math.max(Math.round(t/n),2);for(let t=0;t<i;t++)r+=Math.round(e(t/(i-1))*1e4)/1e4+`, `;return`linear(${r.substring(0,r.length-2)})`},by=2e4;function xy(e,t=50,n=by,r){let i=0,a=e.next(i);for(r?.push(a.value);!a.done&&i<n;)i+=t,a=e.next(i),r?.push(a.value);return i>=n?1/0:i}function Sy(e,t=100,n){let r=n({...e,keyframes:[0,t]}),i=Math.min(xy(r),by);return{type:`keyframes`,ease:e=>r.next(i*e).value/t,duration:x_(i)}}var Cy={stiffness:100,damping:10,mass:1,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05},wy=e=>e<0?1/Math.max(1+e,Cy.minDamping):Math.max(1-e,Cy.minDamping);function Ty(e,t){if(!(e>1))return 1;let n=Math.sqrt(e*e-1),r=e-n,i=e+n,a=2*n*Math.exp(-t)*(1+t);return Oy(e=>i*Math.exp(-r*e)-r*Math.exp(-i*e)-a,e=>Math.exp(-i*e)-Math.exp(-r*e),t)/t}function Ey(e,t){return e*Math.sqrt(1-t*t)}var Dy=12;function Oy(e,t,n){let r=n;for(let n=1;n<Dy;n++)r-=e(r)/t(r);return r}var ky=.001;function Ay({duration:e=Cy.duration,bounce:t=Cy.bounce}){let n,r;Cy.maxDuration;let i=wy(t);e=u_(Cy.minDuration,Cy.maxDuration,x_(e)),i<1?(n=t=>{let n=t*i,r=n*e,a=Ey(t,i),o=Math.exp(-r);return ky-n/a*o},r=t=>{let r=t*i*e,a=i*i*t*t*e,o=Math.exp(-r),s=Ey(t*t,i);return(-n(t)+ky>0?-1:1)*-a*o/s}):(n=t=>-.001+Math.exp(-t*e)*(t*e+1),r=t=>Math.exp(-t*e)*(-t*(e*e)));let a=5/e,o=Oy(n,r,a),s=o*Ty(i,o*e),c=s*s;return{stiffness:c,damping:i*2*Math.sqrt(c),duration:b_(e)}}var jy=(e,t)=>(t?e>=0:e>0)&&e<1/0;function My(e,t){if(jy(e,t))return e}function Ny(e){let t=My(e.stiffness),n=My(e.damping,!0),r=My(e.mass),i={...e,stiffness:t??Cy.stiffness,damping:n??Cy.damping,mass:r??Cy.mass,isResolvedFromDuration:!1,isTimeDefined:(t??n??r)===void 0&&(e.duration!==void 0||e.bounce!==void 0)};if(i.isTimeDefined){if(e.visualDuration){let t=wy(e.bounce||0),n=2*Math.PI/(e.visualDuration*1.2)*Ty(t,2*Math.PI/1.2);i.stiffness=n*n,i.damping=2*t*Math.sqrt(i.stiffness)}else Object.assign(i,Ay(i)),i.isResolvedFromDuration=!0;(!jy(i.stiffness)||!jy(i.damping,!0))&&(i.stiffness=Cy.stiffness,i.damping=Cy.damping)}return i}function Py(e=Cy.visualDuration,t=Cy.bounce){let n=typeof e==`object`?e:{visualDuration:e,keyframes:[0,1],bounce:t},r=n.keyframes[0],i=n.keyframes[n.keyframes.length-1],a={done:!1,value:r},{stiffness:o,damping:s,mass:c,duration:l,isResolvedFromDuration:u,isTimeDefined:d}=Ny({...n}),f=e=>d?0:-x_(e),p=s/(2*Math.sqrt(o*c)),m=x_(Math.sqrt(o/c)),h=p*m,g={target:i,delta:i-r,velocity:f(n.velocity||0)||0,restSpeed:0,restDelta:0},_=()=>{let e=Math.abs(g.delta)<5;g.restSpeed=n.restSpeed||(e?Cy.restSpeed.granular:Cy.restSpeed.default),g.restDelta=n.restDelta||(e?Cy.restDelta.granular:Cy.restDelta.default)};_();let v,y,b;if(p<1){let e=Ey(m,p),t={A:0,sinC:0,cosC:0,t:-1,env:0,sin:0,cos:0};b=()=>{t.A=(g.velocity+h*g.delta)/e,t.sinC=h*t.A+g.delta*e,t.cosC=h*g.delta-t.A*e};let n=n=>{n!==t.t&&(t.t=n,t.env=Math.exp(-h*n),t.sin=Math.sin(e*n),t.cos=Math.cos(e*n))};v=e=>(n(e),g.target-t.env*(t.A*t.sin+g.delta*t.cos)),y=e=>(n(e),t.env*(t.sinC*t.sin+t.cosC*t.cos))}else if(p===1){v=e=>g.target-Math.exp(-m*e)*(g.delta+(g.velocity+m*g.delta)*e);let e={C:0};b=()=>{e.C=g.velocity+m*g.delta},y=t=>Math.exp(-m*t)*(m*e.C*t-g.velocity)}else{let e=m*Math.sqrt(p*p-1),t=h-e,n=h+e,r=d?1/0:300/e,i=(e,t)=>Math.exp(t>r?-e*r-h*(t-r):-e*t),a={S:0,F:0};b=()=>{let t=(g.velocity+h*g.delta)/e;a.S=(g.delta+t)/2,a.F=(g.delta-t)/2},v=e=>g.target-a.S*i(t,e)-a.F*i(n,e),y=e=>t*a.S*i(t,e)+n*a.F*i(n,e)}b();let x=u&&l||null,S={calculatedDuration:x,retarget:(e,t)=>{g.target=e[e.length-1],g.delta=g.target-e[0],g.velocity=f(t),n.restSpeed&&n.restDelta||_(),S.calculatedDuration=x,a.done=!1,b()},velocity:e=>b_(y(e)),next:e=>{let t=v(e);if(u)a.done=e>=l;else{let n=b_(y(e));a.done=Math.abs(n)<=g.restSpeed&&Math.abs(g.target-t)<=g.restDelta}return a.value=a.done?g.target:t,a},toString:()=>{let e=Math.min(xy(S),by),t=yy(t=>S.next(e*t).value,e,30);return e+`ms `+t},toTransition:()=>{}};return S}Py.applyToOptions=e=>{let t=Sy(e,100,Py);return e.ease=t.ease,e.duration=b_(t.duration),e.type=`keyframes`,e};function Fy({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:o,min:s,max:c,restDelta:l=.5,restSpeed:u}){let d=e[0],f={done:!1,value:d},p=e=>e<s||e>c,m=e=>s===void 0?c:c===void 0||Math.abs(s-e)<Math.abs(c-e)?s:c,h=n*t,g=d+h,_=o===void 0?g:o(g);_!==g&&(h=_-d);let v=e=>-h*Math.exp(-e/r),y=e=>{let t=v(e);f.done=Math.abs(t)<=l,f.value=f.done?_:_+t},b,x,S=e=>{p(f.value)&&(b=e,x=Py({keyframes:[f.value,m(f.value)],velocity:-v(e)/r*1e3,damping:i,stiffness:a,restDelta:l,restSpeed:u}))};return S(0),{calculatedDuration:null,next:e=>{let t=!1;return!x&&b===void 0&&(t=!0,y(e),S(e)),b!==void 0&&e>=b?x.next(e-b):(!t&&y(e),f)}}}function Iy(e,t,n){let r=[],i=n||d_.mix||uy,a=e.length-1;for(let n=0;n<a;n++){let a=i(e[n],e[n+1]);t&&(a=__(Array.isArray(t)?t[n]||g_:t,a)),r.push(a)}return r}function Ly(e,t,{clamp:n=!0,ease:r,mixer:i}={}){let a=e.length;if(t.length,a===1)return()=>t[0];if(a===2&&t[0]===t[1])return()=>t[1];let o=e[0]===e[1];e[0]>e[a-1]&&(e=[...e].reverse(),t=[...t].reverse());let s=Iy(t,r,i),c=s.length,l=n=>{if(o&&n<e[0])return t[0];let r=0;if(c>1)for(;r<e.length-2&&!(n<e[r+1]);r++);let i=v_(e[r],e[r+1],n);return s[r](i)};return n?t=>l(u_(e[0],e[a-1],t)):l}function Ry(e,t){let n=e[e.length-1];for(let r=1;r<=t;r++){let i=v_(0,t,r);e.push(Jv(n,1,i))}}function zy(e){let t=[0];return Ry(t,e.length-1),t}function By(e,t){return e.map(e=>e*t)}function Vy(e,t){return e.map(()=>t||B_).splice(0,e.length-1)}function Hy({duration:e=300,keyframes:t,times:n,ease:r=`easeInOut`}){let i=V_(r)?r.map(K_):K_(r)||B_,a={done:!1,value:t[0]};if(t.length===2&&!Array.isArray(i)&&(!n||n.length!==2||n[0]===0&&n[1]===1)){let[n,r]=t,o=n===r?void 0:(d_.mix||uy)(n,r);return{calculatedDuration:e,next:t=>(a.value=o?o(i(e>0?u_(0,1,t/e):1)):r,a.done=t>=e,a)}}let o=Ly(By(n&&n.length===t.length?n:zy(t),e),t,{ease:Array.isArray(i)?i:Vy(t,i)});return{calculatedDuration:e,next:t=>(a.value=o(t),a.done=t>=e,a)}}var Uy=5;function Wy(e,t,n){let r=Math.max(t-Uy,0);return S_(n-e(r),t-r)}function Gy(e,t,n=0){return t<=0?n:e.velocity?e.velocity(t):Wy(t=>e.next(t).value,t,e.next(t).value)}var Ky=e=>e!==null;function qy(e,{repeat:t,repeatType:n=`loop`},r,i=1){let a=e.filter(Ky),o=i<0||t&&n!==`loop`&&t%2==1?0:a.length-1;return!o||r===void 0?a[o]:r}var Jy={decay:Fy,inertia:Fy,tween:Hy,keyframes:Hy,spring:Py};function Yy(e){typeof e.type==`string`&&(e.type=Jy[e.type])}function Xy(e,t){return{kind:e,animation:t,timestamp:X_.now(),frameTimestamp:q_.timestamp,frameIsProcessing:q_.isProcessing}}function Zy(e,t,n){let r=globalThis.__MOTION_INSPECT__;if(r)try{r({...Xy(`animation-start`,e),options:n?{...t,...n}:t})}catch{}}var Qy=class{constructor(){this.isResolved=!1}get finished(){return this._finished||=this.isResolved?Promise.resolve():new Promise(e=>{this._resolve=e}),this._finished}updateFinished(){this._finished=this._resolve=void 0,this.isResolved=!1}notifyFinished(){this.isResolved=!0,this._resolve?.()}then(e,t){return this.finished.then(e,t)}},$y=e=>e/100,eb=class extends Qy{constructor(e){super(),this.state=`idle`,this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{let{motionValue:e}=this.options;e&&e.updatedAt!==X_.now()&&this.tick(X_.now()),this.isStopped=!0,this.state!==`idle`&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause(),Zy(this,this.options)}initAnimation(){let{options:e}=this;Yy(e);let{type:t=Hy,repeat:n=0,repeatDelay:r=0,repeatType:i,velocity:a=0}=e,{keyframes:o}=e,s=t||Hy;s!==Hy&&typeof o[0]!=`number`&&(this.mixKeyframes=__($y,uy(o[0],o[1])),o=[0,100]);let c=s(o===e.keyframes?e:{...e,keyframes:o});i===`mirror`&&(this.mirroredGenerator=s({...e,keyframes:[...o].reverse(),velocity:-a})),c.calculatedDuration===null&&(c.calculatedDuration=xy(c));let{calculatedDuration:l}=c;this.calculatedDuration=l,this.resolvedDuration=l+r,this.totalDuration=this.resolvedDuration*(n+1)-r,this.generator=c}updateTime(e){let t=Math.round(e-this.startTime)*this.playbackSpeed;this.currentTime=this.holdTime===null?t:this.holdTime}tick(e,t=!1){let{generator:n,totalDuration:r,mixKeyframes:i,mirroredGenerator:a,resolvedDuration:o,calculatedDuration:s}=this;if(this.startTime===null)return n.next(0);let{delay:c=0,keyframes:l,repeat:u,repeatType:d,repeatDelay:f,type:p,onUpdate:m,finalKeyframe:h}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-r/this.speed,this.startTime)),t?this.currentTime=e:this.updateTime(e);let g=this.currentTime-c*(this.playbackSpeed>=0?1:-1),_=this.playbackSpeed>=0?g<0:g>r;this.currentTime=Math.max(g,0),this.state===`finished`&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,y=n;if(u){let e=Math.min(this.currentTime,r)/o,t=Math.floor(e),n=e%1;!n&&e>=1&&(n=1),n===1&&t--,t=Math.min(t,u+1),t%2&&(d===`reverse`?(n=1-n,f&&(n-=f/o)):d===`mirror`&&(y=a)),v=u_(0,1,n)*o}let b;_?(this.delayState.value=l[0],b=this.delayState):b=y.next(v),i&&!_&&(b.value=i(b.value));let{done:x}=b;!_&&s!==null&&(x=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);let S=this.holdTime===null&&(this.state===`finished`||this.state===`running`&&x);return S&&p!==Fy&&(b.value=qy(l,this.options,h,this.speed)),m&&m(b.value),S&&this.finish(),b}then(e,t){return this.finished.then(e,t)}get duration(){return x_(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+x_(e)}get time(){return x_(this.currentTime)}set time(e){e=b_(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state=`paused`,this.holdTime=e,this.tick(e))}getGeneratorVelocity(){return Gy(this.generator,this.currentTime,this.options.velocity)}get speed(){return this.playbackSpeed}set speed(e){let t=this.playbackSpeed!==e;t&&this.driver&&this.updateTime(X_.now()),this.playbackSpeed=e,t&&this.driver&&(this.time=x_(this.currentTime))}play(){if(this.isStopped)return;let{driver:e=vy,startTime:t}=this.options;this.driver||=e(e=>this.tick(e)),this.options.onPlay?.();let n=this.driver.now();this.state===`finished`?(this.updateFinished(),this.startTime=n):this.holdTime===null?this.startTime||=t??n:this.startTime=n-this.holdTime,this.state===`finished`&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state=`running`,this.driver.start()}pause(){this.state=`paused`,this.updateTime(X_.now()),this.holdTime=this.currentTime}complete(){this.state!==`running`&&this.play(),this.state=`finished`,this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state=`finished`,this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state=`idle`,this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&=(this.driver.stop(),void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type=`keyframes`,this.options.ease=`linear`,this.initAnimation()),this.driver?.stop(),e.observe(this)}},tb=new Set([`brightness`,`contrast`,`saturate`,`opacity`]);function nb(e){let[t,n]=e.slice(0,-1).split(`(`);if(t===`drop-shadow`)return e;let[r]=n.match(sv)||[];if(!r)return e;let i=n.replace(r,``),a=+!!tb.has(t);return r!==n&&(a*=100),t+`(`+a+i+`)`}var rb=/\b([a-z-]*)\(.*?\)/gu,ib={...Wv,getAnimatableNone:e=>{let t=e.match(rb);return t?t.map(nb).join(` `):e}},ab={...Wv,getAnimatableNone:e=>{let t=Wv.parse(e);return Wv.createTransformer(e)(t.map(e=>typeof e==`number`?0:typeof e==`object`?{...e,alpha:1}:e))}},ob={...iv,transform:Math.round},sb={rotate:vv,pathRotation:vv,rotateX:vv,rotateY:vv,rotateZ:vv,scale:ov,scaleX:ov,scaleY:ov,scaleZ:ov,skew:vv,skewX:vv,skewY:vv,distance:bv,translateX:bv,translateY:bv,translateZ:bv,x:bv,y:bv,z:bv,perspective:bv,transformPerspective:bv,opacity:av,originX:Cv,originY:Cv,originZ:bv},cb={borderWidth:bv,borderTopWidth:bv,borderRightWidth:bv,borderBottomWidth:bv,borderLeftWidth:bv,borderRadius:bv,borderTopLeftRadius:bv,borderTopRightRadius:bv,borderBottomRightRadius:bv,borderBottomLeftRadius:bv,width:bv,maxWidth:bv,height:bv,maxHeight:bv,top:bv,right:bv,bottom:bv,left:bv,inset:bv,insetBlock:bv,insetBlockStart:bv,insetBlockEnd:bv,insetInline:bv,insetInlineStart:bv,insetInlineEnd:bv,padding:bv,paddingTop:bv,paddingRight:bv,paddingBottom:bv,paddingLeft:bv,paddingBlock:bv,paddingBlockStart:bv,paddingBlockEnd:bv,paddingInline:bv,paddingInlineStart:bv,paddingInlineEnd:bv,margin:bv,marginTop:bv,marginRight:bv,marginBottom:bv,marginLeft:bv,marginBlock:bv,marginBlockStart:bv,marginBlockEnd:bv,marginInline:bv,marginInlineStart:bv,marginInlineEnd:bv,fontSize:bv,backgroundPositionX:bv,backgroundPositionY:bv,...sb,zIndex:ob,fillOpacity:av,strokeOpacity:av,numOctaves:ob},lb={...cb,color:Tv,backgroundColor:Tv,outlineColor:Tv,fill:Tv,stroke:Tv,borderColor:Tv,borderTopColor:Tv,borderRightColor:Tv,borderBottomColor:Tv,borderLeftColor:Tv,filter:ib,WebkitFilter:ib,mask:ab,WebkitMask:ab},ub=e=>lb[e],db=new Set([ib,ab]);function fb(e,t){let n=ub(e);return db.has(n)||(n=Wv),n.getAnimatableNone?n.getAnimatableNone(t):void 0}function pb(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}var mb=e=>e*180/Math.PI,hb=e=>_b(mb(Math.atan2(e[1],e[0]))),gb={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:hb,rotateZ:hb,skewX:e=>mb(Math.atan(e[1])),skewY:e=>mb(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},_b=e=>(e%=360,e<0&&(e+=360),e),vb=hb,yb=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),bb=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),xb={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:yb,scaleY:bb,scale:e=>(yb(e)+bb(e))/2,rotateX:e=>_b(mb(Math.atan2(e[6],e[5]))),rotateY:e=>_b(mb(Math.atan2(-e[2],e[0]))),rotateZ:vb,rotate:vb,skewX:e=>mb(Math.atan(e[4])),skewY:e=>mb(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function Sb(e){return+!!e.includes(`scale`)}function Cb(e,t){if(!e||e===`none`)return Sb(t);let n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u),r,i;if(n)r=xb,i=n;else{let t=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=gb,i=t}if(!i)return Sb(t);let a=r[t],o=i[1].split(`,`).map(Tb);return typeof a==`function`?a(o):o[a]}var wb=(e,t)=>{let{transform:n=`none`}=getComputedStyle(e);return Cb(n,t)};function Tb(e){return parseFloat(e.trim())}var Eb=[`transformPerspective`,`x`,`y`,`z`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`],Db=new Set([...Eb,`pathRotation`]),Ob=e=>e===iv||e===bv,kb=new Set([`x`,`y`,`z`]),Ab=Eb.filter(e=>!kb.has(e));function jb(e){let t=[];return Ab.forEach(n=>{let r=e.getValue(n);if(r!==void 0){let e=r.get(),i=+!!n.startsWith(`scale`);if(e===i)return;t.push([n,e]),r.set(i)}}),t}var Mb=new Set([`bottom`,`right`]);function Nb(e,t,n,r,i,a){let o=parseFloat(e);if(!isNaN(o))return o;let{min:s,max:c}=t()[n],l=c-s;return a===`border-box`?l:l-parseFloat(r)-parseFloat(i)}var Pb={width:({width:e,paddingLeft:t=`0`,paddingRight:n=`0`,boxSizing:r},i)=>Nb(e,i,`x`,t,n,r),height:({height:e,paddingTop:t=`0`,paddingBottom:n=`0`,boxSizing:r},i)=>Nb(e,i,`y`,t,n,r),top:({top:e})=>parseFloat(e),left:({left:e})=>parseFloat(e),bottom:({top:e},t)=>{let{y:n}=t();return parseFloat(e)+(n.max-n.min)},right:({left:e},t)=>{let{x:n}=t();return parseFloat(e)+(n.max-n.min)},x:({transform:e})=>Cb(e,`x`),y:({transform:e})=>Cb(e,`y`)};Pb.translateX=Pb.x,Pb.translateY=Pb.y;var Fb=new Set,Ib=!1,Lb=!1,Rb=!1;function zb(){if(Lb){let e=[],t=new Set,n=new Set;Fb.forEach(r=>{r.needsMeasurement&&(e.push(r),t.add(r.element),Mb.has(r.name)&&n.add(r.element))});let r=new Map;n.forEach(e=>{let t=jb(e);t.length&&(r.set(e,t),e.render())}),e.forEach(e=>e.measureInitialState()),t.forEach(e=>{e.render();let t=r.get(e);t&&t.forEach(([t,n])=>{e.getValue(t)?.set(n)})}),e.forEach(e=>e.measureEndState()),e.forEach(e=>{e.suspendedScrollY!==void 0&&window.scrollTo(0,e.suspendedScrollY)})}Lb=!1,Ib=!1,Fb.forEach(e=>e.complete(Rb)),Fb.clear()}function Bb(){Fb.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Lb=!0)})}function Vb(){Rb=!0,Bb(),zb(),Rb=!1}function Hb(e,t,n){if(typeof e==`string`){if(f_(e)||m_(e))return parseFloat(e);if(!Wv.test(e)&&Wv.test(n))return fb(t,n)}return e??void 0}var Ub=class{constructor(e,t,n,r,i,a=!1){this.state=`pending`,this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=t,this.name=n,this.motionValue=r,this.element=i,this.isAsync=a}scheduleResolve(){this.state=`scheduled`,this.isAsync?(Fb.add(this),Ib||(Ib=!0,hy.read(Bb),hy.resolveKeyframes(zb))):(this.readKeyframes(),this.complete())}readKeyframes(){let{unresolvedKeyframes:e,name:t,element:n,motionValue:r}=this;if(e[0]===null){let i=r?.get(),a=e[e.length-1];if(i!==void 0)e[0]=i;else if(n&&t){let r=Hb(n.readValue(t,a),t,a);r!==void 0&&(e[0]=r)}e[0]===void 0&&(e[0]=a),r&&i===void 0&&r.set(e[0])}pb(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=`complete`,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),Fb.delete(this)}cancel(){this.state===`scheduled`&&(Fb.delete(this),this.state=`pending`)}resume(){this.state===`pending`&&this.scheduleResolve()}},Wb=e=>e.startsWith(`--`);function Gb(e,t,n){Wb(t)?e.style.setProperty(t,n):e.style[t]=n}var Kb={};function qb(e,t){let n=h_(e);return()=>Kb[t]??n()}var Jb=qb(()=>window.ScrollTimeline!==void 0,`scrollTimeline`),Yb=qb(()=>{try{document.createElement(`div`).animate({opacity:0},{easing:`linear(0, 1)`})}catch{return!1}return!0},`linearEasing`),Xb=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,Zb={linear:`linear`,ease:`ease`,easeIn:`ease-in`,easeOut:`ease-out`,easeInOut:`ease-in-out`,circIn:Xb([0,.65,.55,1]),circOut:Xb([.55,0,1,.45]),backIn:Xb([.31,.01,.66,-.59]),backOut:Xb([.33,1.53,.69,.99])};function Qb(e,t){if(e)return typeof e==`function`?Yb()?yy(e,t):`ease-out`:U_(e)?Xb(e):Array.isArray(e)?e.map(e=>Qb(e,t)||Zb.easeOut):Zb[e]}function $b(e,t,n,{delay:r=0,duration:i=300,repeat:a=0,repeatType:o=`loop`,ease:s=`easeOut`,times:c}={},l=void 0){let u={[t]:n};c&&(u.offset=c);let d=Qb(s,i);Array.isArray(d)&&(u.easing=d);let f={delay:r,duration:i,easing:Array.isArray(d)?`linear`:d,fill:`both`,iterations:a+1,direction:o===`reverse`?`alternate`:`normal`};return l&&(f.pseudoElement=l),e.animate(u,f)}function ex(e){return typeof e==`function`&&`applyToOptions`in e}function tx({type:e,...t}){return ex(e)&&Yb()?e.applyToOptions(t):(t.duration??=300,t.ease??=`easeOut`,t)}var nx=class extends Qy{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;let{element:t,name:n,keyframes:r,pseudoElement:i,allowFlatten:a=!1,finalKeyframe:o,onComplete:s}=e;this.isPseudoElement=!!i,this.allowFlatten=a,this.options=e,e.type;let c=tx(e);this.animation=$b(t,n,r,c,i),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){let e=qy(r,this.options,o,this.speed);this.updateMotionValue&&this.updateMotionValue(e),Gb(t,n,e),this.animation.cancel()}s?.(),this.notifyFinished()},Zy(this,e,c)}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state===`finished`&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;let{state:e}=this;e!==`idle`&&e!==`finished`&&(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){let e=this.options?.element;!this.isPseudoElement&&e?.isConnected&&this.animation.commitStyles?.()}get duration(){let e=this.animation.effect?.getComputedTiming?.().duration||0;return x_(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+x_(e)}get time(){return x_(Number(this.animation.currentTime)||0)}set time(e){let t=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=b_(e),t&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime===null?this.animation.playState:`finished`}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(e){this.manualStartTime=this.animation.startTime=e}attachTimeline({timeline:e,onAttach:t,observe:n,...r}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:`linear`}),this.animation.onfinish=null,e&&Jb()?(this.animation.timeline=e,Object.assign(this.animation,r),t?.(this.animation),g_):n(this)}},rx={anticipate:P_,backInOut:N_,circInOut:L_};function ix(e){return e in rx}function ax(e){typeof e.ease==`string`&&ix(e.ease)&&(e.ease=rx[e.ease])}var ox=10,sx=class extends nx{constructor(e){ax(e),Yy(e),super(e),e.startTime!==void 0&&e.autoplay!==!1&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){let{motionValue:t,onUpdate:n,onComplete:r,element:i,...a}=this.options;if(!t)return;if(e!==void 0){t.set(e);return}let o=new eb({...a,autoplay:!1}),s=Math.max(ox,X_.now()-this.startTime),c=u_(0,ox,s-ox),l=o.sample(s).value,{name:u}=this.options;i&&u&&Gb(i,u,l),t.setWithVelocity(o.sample(Math.max(0,s-c)).value,l,c),o.stop()}},cx=(e,t)=>t!==`zIndex`&&!!(typeof e==`number`||Array.isArray(e)||typeof e==`string`&&(Wv.test(e)||e===`0`)&&!e.startsWith(`url(`));function lx(e){let t=e[0];if(e.length===1)return!0;for(let n=0;n<e.length;n++)if(e[n]!==t)return!0}function ux(e,t,n,r){let i=e[0];if(i===null)return!1;if(t===`display`||t===`visibility`)return!0;let a=e[e.length-1],o=cx(i,t),s=cx(a,t);return!o||!s?(o!==s&&`${t}${i}${a}${o?a:i}`,!1):lx(e)||(n===`spring`||ex(n))&&r}function dx(e){e.duration=0,e.type=`keyframes`}var fx=new Set([`opacity`,`clipPath`,`filter`,`transform`,`backgroundColor`]),px=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function mx(e){for(let t=0;t<e.length;t++)if(typeof e[t]==`string`&&px.test(e[t]))return!0;return!1}var hx=new Set([`color`,`backgroundColor`,`outlineColor`,`fill`,`stroke`,`borderColor`,`borderTopColor`,`borderRightColor`,`borderBottomColor`,`borderLeftColor`]),gx=h_(()=>Object.hasOwnProperty.call(Element.prototype,`animate`));function _x(e){let{motionValue:t,name:n,repeatDelay:r,repeatType:i,damping:a,type:o,keyframes:s}=e;if(!n||!(fx.has(n)||hx.has(n)))return!1;let c=t?.owner?.current;if(!(c instanceof HTMLElement)&&!(c instanceof SVGElement))return!1;let{onUpdate:l,transformTemplate:u}=t.owner.getProps();return gx()&&(fx.has(n)||hx.has(n)&&mx(s))&&(n!==`transform`||!u)&&!l&&!r&&i!==`mirror`&&a!==0&&o!==`inertia`}var vx=40,yx=class extends Qy{constructor(e){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=X_.now();let{keyframes:t,name:n,motionValue:r,element:i}=e,a=e;a.autoplay??=!0,a.delay??=0,a.type??=`keyframes`,a.repeat??=0,a.repeatDelay??=0,a.repeatType??=`loop`;let o=i?.KeyframeResolver||Ub;this.keyframeResolver=new o(t,(e,t,n)=>this.onKeyframesResolved(e,t,a,!n),n,r,i),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,t,n,r){this.keyframeResolver=void 0;let{name:i,type:a,velocity:o,delay:s,isHandoff:c,onUpdate:l}=n;this.resolvedAt=X_.now();let u=!0;ux(e,i,a,o)||(u=!1,(d_.instantAnimations||!s)&&l?.(qy(e,n,t)),e[0]=e[e.length-1],dx(n),n.repeat=0);let d=r?this.resolvedAt&&this.resolvedAt-this.createdAt>vx?this.resolvedAt:this.createdAt:void 0,{onComplete:f}=n;n.startTime??=d,n.finalKeyframe=t,n.keyframes=e,n.onComplete=()=>{f?.(),this.notifyFinished()};let p=u&&!c&&_x(n),m;if(p){n.element=n.motionValue?.owner?.current;try{m=new sx(n)}catch{m=new eb(n)}}else m=new eb(n);this.pendingTimeline&&=(this.stopTimeline=m.attachTimeline(this.pendingTimeline),void 0),this._animation=m}get finished(){return this._animation?this._animation.finished:super.finished}then(e,t){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),Vb()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}},bx=class{constructor(e){this.stop=()=>this.runAll(`stop`),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll(`time`)}set time(e){this.setAll(`time`,e)}get speed(){return this.getAll(`speed`)}set speed(e){this.setAll(`speed`,e)}get state(){return this.getAll(`state`)}get startTime(){return this.getAll(`startTime`)}get duration(){return xx(this.animations,`duration`)}get iterationDuration(){return xx(this.animations,`iterationDuration`)}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll(`play`)}pause(){this.runAll(`pause`)}cancel(){this.runAll(`cancel`)}complete(){this.runAll(`complete`)}};function xx(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r][t];i!==null&&i>n&&(n=i)}return n}var Sx=class extends bx{then(e,t){return this.finished.finally(e).then(()=>{})}};function Cx(e,t,n,r=0,i=1){let a=Array.from(e).sort((e,t)=>e.sortNodePosition(t)).indexOf(t),o=e.size,s=(o-1)*r;return typeof n==`function`?n(a,o):i===1?a*r:s-a*r}var wx=30,Tx=e=>!isNaN(parseFloat(e)),Ex={current:void 0},Dx=class{constructor(e,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=e=>{let t=X_.now();if(this.updatedAt!==t&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(e),this.current!==this.prev&&(this.notifyChange(),this.dependents))for(let e of this.dependents)e.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=t.owner}setCurrent(e){this.current=e,this.updatedAt=X_.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Tx(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on(`change`,e)}on(e,t){var n;return e===`change`?this.onChangeSubscribe(t):((n=this.events)[e]||(n[e]=new y_)).add(t)}onChangeSubscribe(e){let{events:t}=this;return!t.change&&!this.changeSubscriber?this.changeSubscriber=e:(t.change||(t.change=new y_,t.change.add(this.changeSubscriber),this.changeSubscriber=void 0),t.change.add(e)),()=>{this.changeSubscriber===e?this.changeSubscriber=void 0:t.change?.remove(e),this.stopIfUnobserved()}}stopIfUnobserved(){hy.read(()=>{!this.changeSubscriber&&!this.events.change?.getSize()&&this.stop()})}clearListeners(){this.changeSubscriber=void 0;for(let e in this.events)this.events[e].clear()}attach(e,t){this.passiveEffect=e,this.stopPassiveEffect=t}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,t,n){this.set(t),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,t=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,t&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.notifyChange()}notifyChange(){let{current:e,changeSubscriber:t}=this;t?t(e):this.events.change?.notify(e)}addDependent(e){this.dependents||=new Set,this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return Ex.current&&Ex.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=X_.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>wx)return 0;let t=Math.min(this.updatedAt-this.prevUpdatedAt,wx);return S_(parseFloat(this.current)-parseFloat(this.prevFrameValue),t)}start(e){return this.stop(),new Promise(t=>{this.hasAnimated=!0;let n=!1,r;r=e(()=>{n=!0,this.events.animationComplete?.notify(),this.animation===r&&this.clearAnimation(),t()}),n||(this.animation=r),this.events.animationStart?.notify()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){this.animation=void 0}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}};function Ox(e,t){return new Dx(e,t)}function kx(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}function Ax(e,t){let n=e?.[t]??e?.default??e;return n===e?n:kx(n,e)}var jx={type:`spring`,stiffness:500,damping:25,restSpeed:10},Mx=e=>({type:`spring`,stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),Nx={type:`keyframes`,duration:.8},Px={type:`keyframes`,ease:[.25,.1,.35,1],duration:.3},Fx=(e,{keyframes:t})=>t.length>2?Nx:Db.has(e)?e.startsWith(`scale`)?Mx(t[1]):jx:Px,Ix=new Set([`when`,`delay`,`delayChildren`,`staggerChildren`,`staggerDirection`,`repeat`,`repeatType`,`repeatDelay`,`from`,`elapsed`]);function Lx(e){for(let t in e)if(!Ix.has(t))return!0;return!1}var Rx=(e,t,n,r={},i,a)=>o=>{let s=Ax(r,e)||{},c=s.delay||r.delay||0,{elapsed:l=0}=r;l-=b_(c);let u={keyframes:Array.isArray(n)?n:[null,n],ease:`easeOut`,velocity:t.getVelocity(),...s,delay:-l,onUpdate:e=>{t.set(e),s.onUpdate&&s.onUpdate(e)},onComplete:()=>{o(),s.onComplete&&s.onComplete()},name:e,motionValue:t,element:a?void 0:i};Lx(s)||Object.assign(u,Fx(e,u)),u.duration&&=b_(u.duration),u.repeatDelay&&=b_(u.repeatDelay),u.from!==void 0&&(u.keyframes[0]=u.from);let d=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(dx(u),u.delay===0&&(d=!0)),(d_.instantAnimations||d_.skipAnimations||i?.shouldSkipAnimations||s.skipAnimations)&&(d=!0,dx(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,d&&!a&&t.get()!==void 0){let e=qy(u.keyframes,s);if(e!==void 0){hy.update(()=>{u.onUpdate(e),u.onComplete()});return}}return s.isSync?new eb(u):new yx(u)},zx=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Bx(e){let t=zx.exec(e);if(!t)return[,];let[,n,r,i]=t;return[`--${n??r}`,i]}function Vx(e,t,n=1){`${e}`;let[r,i]=Bx(e);if(!r)return;let a=window.getComputedStyle(t).getPropertyValue(r);if(a){let e=a.trim();return f_(e)?parseFloat(e):e}return tv(i)?Vx(i,t,n+1):i}function Hx(e){let t=[{},{}];return e?.values.forEach((e,n)=>{t[0][n]=e.get(),t[1][n]=e.getVelocity()}),t}function Ux(e,t,n,r){let i=t=>typeof t==`function`?t(n===void 0?e.custom:n,...Hx(r)):t;return t=i(t),typeof t==`string`&&(t=e.variants&&e.variants[t]),i(t)}function Wx(e,t,n){return Ux(e.getProps(),t,n,e)}var Gx=(e,t)=>t===`exit`?e.presenceContext?.custom:void 0,Kx=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,...Eb]),qx=e=>Array.isArray(e);function Jx(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Ox(n))}function Yx(e){return qx(e)?e[e.length-1]||0:e}function Xx(e,t){let{transitionEnd:n={},transition:r={},...i}=Wx(e,t)||{};i={...i,...n};for(let t in i)Jx(e,t,Yx(i[t]))}var Zx=e=>!!(e&&e.getVelocity);function Qx(e){return!!(Zx(e)&&e.add)}function $x(e,t){let n=e.getValue(`willChange`);if(Qx(n))return n.add(t);if(!n&&d_.WillChange){let n=new d_.WillChange(`auto`);e.addValue(`willChange`,n),n.add(t)}}function eS(e){return e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var tS=`data-`+eS(`framerAppearId`);function nS(e){return e.props[tS]}var rS=typeof window<`u`;function iS({protectedKeys:e,needsAnimating:t},n){let r=n in e&&!t[n];return t[n]=!1,r}function aS(e,t,{delay:n=0,transitionOverride:r,type:i}={}){let{transition:a,transitionEnd:o,...s}=t,c=e.getDefaultTransition();a=a?kx(a,c):c;let l=a?.reduceMotion,u=a?.skipAnimations;r&&(a=r);let d=[],f=i&&e.animationState?.getState()[i],p=a?.path;p&&p.animateVisualElement(e,s,a,n,d);for(let t in s){let r=e.getValue(t,e.latestValues[t]??null),i=s[t];if(i===void 0||f&&iS(f,t))continue;let o={delay:n,...Ax(a||{},t)};u&&(o.skipAnimations=!0);let c=r.get();if(c!==void 0&&!r.isAnimating()&&!Array.isArray(i)&&i===c&&!o.velocity){hy.update(()=>r.set(i));continue}let p=!1;if(rS&&window.MotionHandoffAnimation){let n=nS(e);if(n){let e=window.MotionHandoffAnimation(n,t,hy);e!==null&&(o.startTime=e,p=!0)}}$x(e,t);let m=l??e.shouldReduceMotion;r.start(Rx(t,r,i,m&&Kx.has(t)?{type:!1}:o,e,p));let h=r.animation;h&&d.push(h)}if(o){let t=()=>hy.update(()=>{o&&Xx(e,o)});d.length?Promise.all(d).then(t):t()}return d}function oS(e,t,n={}){let r=Wx(e,t,Gx(e,n.type)),i=n.transitionOverride||(r?.transition??(e.getDefaultTransition()||{})),a=()=>Promise.all(r?aS(e,r,n):[]),o=(r=0)=>{let{variantChildren:a}=e,{delayChildren:o=0,staggerChildren:s,staggerDirection:c}=i,l=[];return a?.forEach(e=>{e.notify(`AnimationStart`,t),l.push(oS(e,t,{...n,delay:r+(typeof o==`function`?0:o)+Cx(a,e,o,s,c)}).then(()=>e.notify(`AnimationComplete`,t)))}),Promise.all(l)},{when:s}=i;return s?s===`beforeChildren`?a().then(()=>o()):o().then(a):Promise.all([a(),o(n.delay)])}function sS(e,t,n={}){return e.notify(`AnimationStart`,t),(Array.isArray(t)?Promise.all(t.map(t=>oS(e,t,n))):typeof t==`string`?oS(e,t,n):Promise.all(aS(e,Wx(e,t,n.custom),n))).then(()=>{e.notify(`AnimationComplete`,t)})}var cS={test:e=>e===`auto`,parse:e=>e},lS=e=>t=>t.test(e),uS=[iv,bv,yv,vv,Sv,xv,cS],dS=e=>uS.find(lS(e));function fS(e){return typeof e==`number`?e===0:e===null||e===`none`||e===`0`||m_(e)}var pS=new Set([`auto`,`none`,`0`]);function mS(e,t,n){let r=0,i;for(;r<e.length&&!i;){let t=e[r];typeof t==`string`&&!pS.has(t)&&Iv(t)&&(i=e[r]),r++}if(i&&n)for(let r of t)e[r]!==i&&(e[r]=fb(n,i))}var hS=class extends Ub{constructor(e,t,n,r,i){super(e,t,n,r,i,!0)}readKeyframes(){let{unresolvedKeyframes:e,element:t,name:n}=this;if(!t||!t.current)return;super.readKeyframes();for(let n=0;n<e.length;n++){let r=e[n];if(typeof r==`string`&&(r=r.trim(),tv(r))){let i=Vx(r,t.current);i!==void 0&&(e[n]=i),n===e.length-1&&(this.finalKeyframe=r)}}if(this.resolveNoneKeyframes(),!Kx.has(n)||e.length!==2)return;let[r,i]=e;if(typeof r==`number`&&typeof i==`number`)return;let a=dS(r),o=dS(i);if(rv(r)!==rv(i)&&Pb[n]){this.needsMeasurement=!0;return}if(a!==o){if(Ob(a)&&Ob(o))for(let t=0;t<e.length;t++){let n=e[t];typeof n==`string`&&(e[t]=parseFloat(n))}else Pb[n]&&(this.needsMeasurement=!0)}}resolveNoneKeyframes(){let{unresolvedKeyframes:e,name:t}=this,n=[];for(let t=0;t<e.length;t++)(e[t]===null||fS(e[t]))&&n.push(t);n.length&&mS(e,n,t)}measure(){let{element:e,name:t}=this;return Pb[t](window.getComputedStyle(e.current),()=>e.measureViewportBox())}measureInitialState(){let{element:e,unresolvedKeyframes:t,name:n}=this;if(!e||!e.current)return;n===`height`&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=this.measure(),t[0]=this.measuredOrigin;let r=t[t.length-1];r!==void 0&&this.motionValue?.jump(r,!1)}measureEndState(){let{element:e,unresolvedKeyframes:t}=this;if(!e||!e.current)return;this.motionValue?.jump(this.measuredOrigin,!1);let n=t.length-1,r=t[n];t[n]=this.measure(),r!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([t,n])=>{e.getValue(t).set(n)}),this.resolveNoneKeyframes()}},gS=[];function _S(e){typeof e.test==`function`&&e.read,vS(e),gS.unshift(e)}function vS(e){l_(gS,e)}function yS(e){return gS.find(t=>t.test(e))}function bS(e,t,n={},r){let i=[],{velocity:a}=n,o=n.reduceMotion??r?.shouldReduceMotion;for(let s in t){if(s===`transition`||s===`transitionEnd`)continue;let c=t[s];if(c===void 0)continue;let l=e(s),u=l.get();if(u!==void 0&&!l.isAnimating()&&!Array.isArray(c)&&c===u&&!a){hy.update(()=>l.set(c));continue}l.start(Rx(s,l,c,o&&Kx.has(s)?{type:!1}:n,r)),l.animation&&i.push(l.animation)}let{transitionEnd:s}=t;if(s){let t=()=>hy.update(()=>{for(let t in s)e(t).set(s[t])});i.length?Promise.all(i).then(t):t()}return i}function xS(e,t,n,r,i){return bS(r=>{let a=e.get(t,r);if(!a){let o;if(!i){let i=n[r];o=SS(i)??e.read(t,r,i),`${r}`}a=Ox(o,{owner:i}),e(t,{[r]:a})}return a},n,r,i)}function SS(e){let t=Array.isArray(e)?e[0]:void 0;return t===null?void 0:t}function CS(e){return p_(e)&&`offsetHeight`in e&&!(`ownerSVGElement`in e)}function wS(e){return p_(e)&&`ownerSVGElement`in e}var TS=(e,t)=>t&&typeof e==`number`?t.transform(e):e;function ES(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e==`string`){let r=document;t&&(r=t.current);let i=n?.[e]??r.querySelectorAll(e);return i?Array.from(i):[]}return Array.from(e).filter(e=>e!=null)}var DS=class{constructor(e=hy.render){this.step=e,this.values=new Map,this.pending=[],this.numPending=0,this.flush=()=>{let{pending:e,numPending:t}=this;this.numPending=0;for(let n=0;n<t;n++)e[n]()}}set(e,t,n,r){if(this.values.get(e)?.onRemove(),r)for(let e of this.values.values())e.value===r&&(n=e.render);let i=()=>n&&this.schedule(n);t.get()!==void 0&&i();let a=t.on(`change`,i),o=()=>{a(),n&&!r&&this.cancel(n),this.values.get(e)?.onRemove===o&&this.values.delete(e)};return this.values.set(e,{value:t,render:r?void 0:n,onRemove:o}),o}get(e){return this.values.get(e)?.value}release(){let e=new Map;return this.values.forEach((t,n)=>{e.set(n,t.value),t.onRemove()}),this.transformKeys=this.transformValues=void 0,e}schedule(e){let{pending:t,numPending:n}=this;for(let r=0;r<n;r++)if(t[r]===e)return;n||this.step(this.flush),t[this.numPending++]=e}cancel(e){let{pending:t}=this;for(let n=0;n<this.numPending;n++)if(t[n]===e){t[n]=t[--this.numPending];return}}};function OS(e,{step:t,...n}={}){let r=new WeakMap;return Object.assign((n,i)=>{let a=r.get(n)??new DS(t);r.set(n,a);let o=[];for(let t in i){let r=i[t],s=e(n,a,t,r);o.push(s)}return()=>{for(let e of o)e()}},n,{get:(e,t)=>r.get(e)?.get(t),flush:e=>r.get(e)?.flush(),state:e=>r.get(e)})}var kS={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},AS={};function jS(e){let t=``,{transformKeys:n=[],transformValues:r={}}=e;for(let e=0;e<n.length;e++){let i=n[e],a=r[i].get();a!==void 0&&(typeof a==`number`?a:parseFloat(a))!==+!!i.startsWith(`scale`)&&(t+=(t&&` `)+(AS[i]||(AS[i]=(kS[i]||i)+`(`))+TS(a,sb[i])+`)`)}let i=e.get(`pathRotation`)?.get();return i&&(t+=(t&&` `)+`rotate(`+TS(i,sb.pathRotation)+`)`),t||`none`}var MS=new Set([`originX`,`originY`,`originZ`]),NS=(e,t)=>TS(e.get(t)?.get(),cb[t]),PS=(e,t,n,r)=>{let i,a;if(Db.has(n)){if(n!==`pathRotation`){let e=t.transformKeys??=[];(t.transformValues??={})[n]=r,e.includes(n)||(e.push(n),e.sort((e,t)=>Eb.indexOf(e)-Eb.indexOf(t)))}t.get(`transform`)||(!CS(e)&&!t.get(`transformBox`)&&PS(e,t,`transformBox`,new Dx(`fill-box`)),t.set(`transform`,new Dx(`none`),()=>{e.style.transform=jS(t)})),a=t.get(`transform`)}else MS.has(n)?(t.get(`transformOrigin`)||t.set(`transformOrigin`,new Dx(``),()=>{let n=NS(t,`originX`)??`50%`,r=NS(t,`originY`)??`50%`,i=NS(t,`originZ`)??0;e.style.transformOrigin=`${n} ${r} ${i}`}),a=t.get(`transformOrigin`)):i=Wb(n)?()=>{e.style.setProperty(n,r.get())}:()=>{e.style[n]=TS(r.get(),cb[n])};return t.set(n,r,i,a)},FS=e=>CS(e)||wS(e),IS=(e,t)=>{if(Db.has(t))return wb(e,t);let n=getComputedStyle(e),r=Wb(t)?n.getPropertyValue(t):n[t];return typeof r==`string`&&r.trim()||0},LS=OS(PS,{test:FS,read:IS}),RS={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},zS=Eb.length;function BS(e,t,n){let r=``,i=!0;for(let a=0;a<zS;a++){let o=Eb[a],s=e[o];if(s===void 0)continue;let c=!0;if(typeof s==`number`)c=s===+!!o.startsWith(`scale`);else{let e=parseFloat(s);c=o.startsWith(`scale`)?e===1:e===0}if(!c||n){let e=TS(s,cb[o]);if(!c){i=!1;let t=RS[o]||o;r+=`${t}(${e}) `}n&&(t[o]=e)}}let a=e.pathRotation;return a&&(i=!1,r+=`rotate(${TS(a,cb.pathRotation)}) `),r=r.trim(),n?r=n(t,i?``:r):i&&(r=`none`),r}function VS(e,t,n){let{style:r,vars:i,transformOrigin:a}=e,o=!1,s=!1;for(let e in t){let n=t[e];if(Db.has(e)){o=!0;continue}if($_(e)){i[e]=n;continue}{let t=TS(n,cb[e]);e.startsWith(`origin`)?(s=!0,a[e]=t):r[e]=t}}if(t.transform||(o||n?r.transform=BS(t,e.transform,n):r.transform&&=`none`),s){let{originX:e=`50%`,originY:t=`50%`,originZ:n=0}=a;r.transformOrigin=`${e} ${t} ${n}`}}var HS={offset:`stroke-dashoffset`,array:`stroke-dasharray`},US={offset:`strokeDashoffset`,array:`strokeDasharray`};function WS(e,t,n=1,r=0,i=!0){e.pathLength=1;let a=i?HS:US;e[a.offset]=`${-r}`,e[a.array]=`${t} ${n}`}var GS=[`transform`,`opacity`,`offsetDistance`,`offsetPath`,`offsetRotate`,`offsetAnchor`];function KS(e,{attrX:t,attrY:n,attrScale:r,pathLength:i,pathSpacing:a=1,pathOffset:o=0,...s},c,l,u){if(VS(e,s,l),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};let{attrs:d,style:f}=e;for(let e of GS)d[e]!==void 0&&(f[e]=d[e],delete d[e]);(f.transform||d.transformOrigin)&&(f.transformOrigin=d.transformOrigin??`50% 50%`,delete d.transformOrigin),f.transform&&(f.transformBox=u?.transformBox??`fill-box`,delete d.transformBox),t!==void 0&&(d.x=t),n!==void 0&&(d.y=n),r!==void 0&&(d.scale=r),i!==void 0&&WS(d,i,a,o,!1)}function qS(e,t){if(!(t in e))return!1;let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||Object.getOwnPropertyDescriptor(e,t);return n&&typeof n.set==`function`}var JS=(e,t,n,r,i=n)=>{let a=qS(e,i);!a&&(i.startsWith(`data`)||i.startsWith(`aria`))&&(i=eS(i));let o=cb[n]||cb[i],s=a?()=>{e[i]=TS(r.get(),cb[n])}:()=>{let t=TS(r.get(),o);t==null?e.removeAttribute(i):e.setAttribute(i,String(t))};return t.set(n,r,s)};function YS(e,t,n,r){return hy.render(()=>e.setAttribute(`pathLength`,`1`)),n===`pathOffset`?t.set(n,r,()=>{let t=r.get();e.setAttribute(`stroke-dashoffset`,`${-t}`)}):(t.get(`stroke-dasharray`)||t.set(`stroke-dasharray`,new Dx(`1 1`),()=>{let n=t.get(`pathLength`)?.get()??1,r=t.get(`pathSpacing`)?.get();e.setAttribute(`stroke-dasharray`,`${n} ${r??1-Number(n)}`)}),t.set(n,r,void 0,t.get(`stroke-dasharray`)))}var XS=OS((e,t,n,r)=>n.startsWith(`path`)?YS(e,t,n,r):n.startsWith(`attr`)?JS(e,t,n,r,ZS(n)):(Db.has(n)||MS.has(n)||Wb(n)||n in e.style?PS:JS)(e,t,n,r),{test:wS,read:(e,t)=>Db.has(t)?cb[t]?.default||0:Wb(t)||GS.includes(t)?IS(e,t)||e.getAttribute(eS(t))||0:(t=ZS(t),e.getAttribute(eS(t))??e.getAttribute(t)??void 0)});function ZS(e){return e.replace(/^attr([A-Z])/,(e,t)=>t.toLowerCase())}function QS({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function $S(e,t){if(!t)return e;let n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function eC(e,t){return QS($S(e.getBoundingClientRect(),t))}var tC={},nC=e=>wS(e)?XS:LS,rC=class{constructor(e,t){this.effect=e,this.current=t,this.KeyframeResolver=hS}getValue(e){return this.effect.get(this.current,e)}readValue(e,t){return this.effect.read(this.current,e,t)}render(){this.effect.flush(this.current)}measureViewportBox(){return eC(this.current)}getProps(){return tC}};function iC(e,t,n,r){if(r)return bS(e=>r.getValue(e,null),t,n,r);let i=nC(e);return xS(i,e,t,n,new rC(i,e))}var aC=OS((e,t,n,r)=>t.set(n,r,()=>{e[n]=r.get()}),{test:e=>p_(e),read:(e,t)=>{let n=e[t];return typeof n==`string`||typeof n==`number`?n:void 0}}),{schedule:oC,cancel:sC}=my(queueMicrotask,!1),cC={x:!1,y:!1};function lC(){return cC.x||cC.y}function uC(e,t){let n=ES(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function dC(e){return!(e.pointerType===`touch`||lC())}function fC(e,t,n={}){let[r,i,a]=uC(e,n);return r.forEach(e=>{let n=!1,r=!1,a,o=()=>{e.removeEventListener(`pointerleave`,u)},s=e=>{a&&=(a(e),void 0),o()},c=e=>{n=!1,window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),r&&(r=!1,s(e))},l=()=>{n=!0,window.addEventListener(`pointerup`,c,i),window.addEventListener(`pointercancel`,c,i)},u=e=>{if(e.pointerType!==`touch`){if(n){r=!0;return}s(e)}};e.addEventListener(`pointerenter`,n=>{if(!dC(n))return;r=!1;let o=t(e,n);typeof o==`function`&&(a=o,e.addEventListener(`pointerleave`,u,i))},i),e.addEventListener(`pointerdown`,l,i)}),a}var pC=(e,t)=>t?e===t||pC(e,t.parentElement):!1,mC=e=>e.pointerType===`mouse`?typeof e.button!=`number`||e.button<=0:e.isPrimary!==!1,hC=new Set([`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`]);function gC(e){return hC.has(e.tagName)||e.isContentEditable===!0}var _C=new WeakSet;function vC(e){return t=>{t.key===`Enter`&&e(t)}}function yC(e,t){e.dispatchEvent(new PointerEvent(`pointer`+t,{isPrimary:!0,bubbles:!0}))}var bC=(e,t)=>{let n=e.currentTarget;if(!n)return;let r=vC(()=>{if(_C.has(n))return;yC(n,`down`);let e=vC(()=>{yC(n,`up`)});n.addEventListener(`keyup`,e,t),n.addEventListener(`blur`,()=>yC(n,`cancel`),t)});n.addEventListener(`keydown`,r,t),n.addEventListener(`blur`,()=>n.removeEventListener(`keydown`,r),t)};function xC(e){return mC(e)&&!lC()}var SC=new WeakSet;function CC(e,t,n={}){let[r,i,a]=uC(e,n),o=e=>{let r=e.currentTarget;if(!xC(e)||SC.has(e))return;_C.add(r),n.stopPropagation&&SC.add(e);let a=t(r,e),o={...i,capture:!0},s=(e,t)=>{window.removeEventListener(`pointerup`,c,o),window.removeEventListener(`pointercancel`,l,o),_C.has(r)&&_C.delete(r),xC(e)&&typeof a==`function`&&a(e,{success:t})},c=e=>{s(e,r===window||r===document||n.useGlobalTarget||pC(r,e.target))},l=e=>{s(e,!1)};window.addEventListener(`pointerup`,c,o),window.addEventListener(`pointercancel`,l,o)};return r.forEach(e=>{(n.useGlobalTarget?window:e).addEventListener(`pointerdown`,o,i),CS(e)&&(e.addEventListener(`focus`,e=>bC(e,i)),!gC(e)&&!e.hasAttribute(`tabindex`)&&(e.tabIndex=0))}),a}function wC(...e){let t=!Array.isArray(e[0]),n=t?0:-1,r=e[0+n],i=e[1+n],a=e[2+n],o=e[3+n],s=Ly(i,a,o);return t?s(r):s}var TC=()=>({min:0,max:0}),EC=()=>({x:TC(),y:TC()}),DC=new WeakMap;function OC(e){return typeof e==`object`&&!!e&&typeof e.start==`function`}function kC(e){return typeof e==`string`||Array.isArray(e)}var AC=[`animate`,`whileInView`,`whileFocus`,`whileHover`,`whileTap`,`whileDrag`,`exit`],jC=[`initial`,...AC];function MC(e){if(OC(e.animate))return!0;for(let t=0;t<jC.length;t++)if(kC(e[jC[t]]))return!0;return!1}function NC(e){return!!(MC(e)||e.variants)}function PC(e,t,n){for(let r in t){let i=t[r],a=n[r];if(Zx(i))e.addValue(r,i);else if(Zx(a))e.addValue(r,Ox(i,{owner:e}));else if(a!==i){if(e.hasValue(r)){let t=e.getValue(r);t.liveStyle===!0?t.jump(i):t.hasAnimated||t.set(i)}else{let t=e.getStaticValue(r);e.addValue(r,Ox(t===void 0?i:t,{owner:e}))}}}for(let r in n)t[r]===void 0&&e.removeValue(r);return t}var FC={current:null},IC={current:!1},LC=typeof window<`u`;function RC(){if(IC.current=!0,LC){if(window.matchMedia){let e=window.matchMedia(`(prefers-reduced-motion)`),t=()=>FC.current=e.matches;e.addEventListener(`change`,t),t()}else FC.current=!1}}var zC=[`AnimationStart`,`AnimationComplete`,`Update`,`BeforeLayoutMeasure`,`LayoutMeasure`,`LayoutAnimationStart`,`LayoutAnimationComplete`],BC={};function VC(e){BC=e}function HC(){return BC}var UC=class{scrapeMotionValuesFromProps(e,t,n){return{}}constructor({parent:e,props:t,presenceContext:n,reducedMotionConfig:r,skipAnimations:i,blockInitialAnimation:a,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=Ub,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify(`Update`,this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{let e=X_.now();this.renderScheduledAt<e&&(this.renderScheduledAt=e,hy.render(this.render,!1,!0))};let{latestValues:c,renderState:l}=o;this.latestValues=c,this.baseTarget={...c},this.initialValues=t.initial?{...c}:{},this.renderState=l,this.parent=e,this.props=t,this.presenceContext=n,this.depth=e?e.depth+1:0,this.reducedMotionConfig=r,this.skipAnimationsConfig=i,this.options=s,this.blockInitialAnimation=!!a,this.isControllingVariants=MC(t),this.isVariantNode=NC(t),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);let{willChange:u,...d}=this.scrapeMotionValuesFromProps(t,{},this);for(let e in d){let t=d[e];c[e]!==void 0&&Zx(t)&&t.set(c[e])}}mount(e){if(this.hasBeenMounted)for(let e in this.initialValues)this.values.get(e)?.jump(this.initialValues[e]),this.latestValues[e]=this.initialValues[e];if(this.current=e,DC.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.isVariantNode&&!this.isControllingVariants){let e=this;do e=e.props.inherit!==!1&&e.parent;while(e&&!e.isVariantNode);if(e){let{variantChildren:t}=e;t.add(this),this.removeFromVariantTree=()=>t.delete(this)}}this.values.forEach((e,t)=>this.bindToMotionValue(t,e)),this.reducedMotionConfig===`never`?this.shouldReduceMotion=!1:this.reducedMotionConfig===`always`?this.shouldReduceMotion=!0:(IC.current||RC(),this.shouldReduceMotion=FC.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),gy(this.notifyUpdate),gy(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(let e in this.events)this.events[e].clear();for(let e in this.features){let t=this.features[e];t&&(t.unmount(),t.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??=new Set,this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,t){if(this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)(),t.accelerate&&fx.has(e)&&this.current instanceof HTMLElement){let{factory:n,keyframes:r,times:i,ease:a,duration:o}=t.accelerate,s=new nx({element:this.current,name:e,keyframes:r,times:i,ease:a,duration:b_(o)}),c=n(s);this.valueSubscriptions.set(e,()=>{c(),s.cancel()});return}let n=Db.has(e);n&&this.onBindTransform&&this.onBindTransform();let r=t.on(`change`,t=>{this.latestValues[e]=t,this.props.onUpdate&&hy.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()}),i;typeof window<`u`&&window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,t)),this.valueSubscriptions.set(e,()=>{r(),i&&i()})}sortNodePosition(e){return!this.current||!e.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e=`animation`;for(e in BC){let t=BC[e];if(!t)continue;let{isEnabled:n,Feature:r}=t;if(!this.features[e]&&r&&n(this.props)&&(this.features[e]=new r(this)),this.features[e]){let t=this.features[e];t.isMounted?t.update():(t.mount(),t.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):EC()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,t){this.latestValues[e]=t}update(e,t){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=t;for(let t=0;t<zC.length;t++){let n=zC[t];this.propEventSubscriptions[n]&&(this.propEventSubscriptions[n](),delete this.propEventSubscriptions[n]);let r=e[`on`+n];r&&(this.propEventSubscriptions[n]=this.on(n,r))}this.prevMotionValues=PC(this,this.scrapeMotionValuesFromProps(e,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}addValue(e,t){let n=this.values.get(e);if(t!==n){n&&this.removeValue(e),this.bindToMotionValue(e,t),this.values.set(e,t);let r=t.get();r!==void 0&&(this.latestValues[e]=r)}}removeValue(e){this.values.delete(e);let t=this.valueSubscriptions.get(e);t&&(t(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,t){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&t!==void 0&&(n=Ox(t??this.getDefaultValue?.(e),{owner:this}),this.addValue(e,n)),n}readValue(e,t){let n=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return n!=null&&(typeof n==`string`&&(f_(n)||m_(n))?n=parseFloat(n):typeof n!=`number`&&!Wv.test(n)&&Wv.test(t)&&(n=fb(e,t)),this.setBaseTarget(e,Zx(n)?n.get():n)),Zx(n)?n.get():n}setBaseTarget(e,t){this.baseTarget[e]=t}on(e,t){return this.events[e]||(this.events[e]=new y_),this.events[e].add(t)}notify(e,...t){this.events[e]&&this.events[e].notify(...t)}scheduleRenderMicrotask(){oC.render(this.render)}},WC=class extends UC{constructor(){super(...arguments),this.KeyframeResolver=hS}sortInstanceNodePosition(e,t){return e.compareDocumentPosition(t)&2?1:-1}getBaseTargetFromProps(e,t){let n=e.style;return n?n[t]:void 0}removeValueFromRenderState(e,{vars:t,style:n}){delete t[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);let{children:e}=this.props;Zx(e)&&(this.childSubscription=e.on(`change`,e=>{this.current&&(this.current.textContent=`${e}`)}))}},GC=class{constructor(e){this.isMounted=!1,this.node=e}update(){}};function KC(e,{style:t,vars:n},r,i){let a=e.style,o;for(o in t)a[o]=t[o];for(o in i?.applyProjectionStyles(a,r),n)a.setProperty(o,n[o])}var qC={};function JC(e,{layout:t,layoutId:n}){return Db.has(e)||e.startsWith(`origin`)||(t||n!==void 0)&&(!!qC[e]||e===`opacity`)}function YC(e,t,n){let r=e.style,i=t?.style,a={};if(!r)return a;for(let t in r)(Zx(r[t])||i&&Zx(i[t])||JC(t,e)||n?.getValue(t)?.liveStyle!==void 0)&&(a[t]=r[t]);return a}function XC(e){return window.getComputedStyle(e)}var ZC=class extends WC{constructor(){super(...arguments),this.type=`html`,this.renderInstance=KC}mount(e){e.style,super.mount(e)}readValueFromInstance(e,t){if(Db.has(t))return this.projection?.isProjecting?Sb(t):wb(e,t);{let n=XC(e),r=($_(t)?n.getPropertyValue(t):n[t])||0;return typeof r==`string`?r.trim():r}}measureInstanceViewportBox(e,{transformPagePoint:t}){return eC(e,t)}build(e,t,n){VS(e,t,n.transformTemplate)}scrapeMotionValuesFromProps(e,t,n){return YC(e,t,n)}},QC=new Set([`baseFrequency`,`diffuseConstant`,`kernelMatrix`,`kernelUnitLength`,`keySplines`,`keyTimes`,`limitingConeAngle`,`markerHeight`,`markerWidth`,`numOctaves`,`targetX`,`targetY`,`surfaceScale`,`specularConstant`,`specularExponent`,`stdDeviation`,`tableValues`,`viewBox`,`gradientTransform`,`pathLength`,`startOffset`,`textLength`,`lengthAdjust`]),$C=e=>typeof e==`string`&&e.toLowerCase()===`svg`;function ew(e,t,n,r){KC(e,t,void 0,r);for(let n in t.attrs)e.setAttribute(QC.has(n)?n:eS(n),t.attrs[n])}function tw(e,t,n){let r=YC(e,t,n);for(let n in e)if(Zx(e[n])||Zx(t[n])){let t=Eb.indexOf(n)===-1?n:`attr`+n.charAt(0).toUpperCase()+n.substring(1);r[t]=e[n]}return r}var nw=class extends WC{constructor(){super(...arguments),this.type=`svg`,this.isSVGTag=!1,this.measureInstanceViewportBox=EC}getBaseTargetFromProps(e,t){return Db.has(t)?super.getBaseTargetFromProps(e,t)??Sb(t):e[t]}getDefaultValue(e){return Db.has(e)?this.latestValues[e]??Sb(e):void 0}readValueFromInstance(e,t){if(Db.has(t)){let e=ub(t);return e&&e.default||0}if(GS.includes(t)){let n=getComputedStyle(e)[t];if(typeof n==`string`&&n)return n.trim()}return t=QC.has(t)?t:eS(t),e.getAttribute(t)}scrapeMotionValuesFromProps(e,t,n){return tw(e,t,n)}build(e,t,n){KS(e,t,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,t,n,r){ew(e,t,n,r)}mount(e){this.isSVGTag=$C(e.tagName),super.mount(e)}};function rw(e,t){if(!Array.isArray(t))return!1;let n=t.length;if(n!==e.length)return!1;for(let r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0}var iw=[...AC].reverse();function aw(e){let t=t=>Promise.all(t.map(({animation:t,options:n})=>sS(e,t,n))),n=sw(),r=!0,i=!1;function a(a){let{props:o,parent:s,manuallyAnimateOnMount:c}=e,l=r||i,u=[],d=new Set,f={},p=1/0,m=e;do m=m.props.inherit!==!1&&m.parent;while(m&&!m.isControllingVariants);if(iw.forEach((t,r)=>{let i=n[t],h=o[t],g=m&&m.props[t],_=h===void 0?kC(g)||g===!1?g:void 0:h,v=kC(_),y=t===a?i.isActive:null;y===!1&&(p=r);let b=v&&h===void 0&&!(l&&c);if(i.protectedKeys={...f},!i.isActive&&y===null||!_&&!i.prevProp||OC(_)||typeof _==`boolean`)return;if(t===`exit`&&i.isActive&&y!==!0){f={...f,...i.prevResolvedValues};return}let x=ow(i.prevProp,_),S=x||v&&(y&&!b||r>p),C=!1,w=Array.isArray(_)?_:[_],T={};if(y!==!1)for(let n of w){let{transition:r,transitionEnd:i,...a}=Wx(e,n,Gx(e,t))||{};T={...T,...a,...i}}let{prevResolvedValues:E}=i;for(let t in{...E,...T}){if(t in f)continue;let n=T[t],r=E[t],a=Array.isArray(n)&&Array.isArray(r)?!rw(n,r)||x:n!==r;if(a&&n==null)d.add(t);else if(a||n!==void 0&&d.has(t)){S=!0,d.delete(t)&&(C=!0),i.needsAnimating[t]=!0;let n=e.getValue(t);n&&(n.liveStyle=!1)}else i.protectedKeys[t]=!0}if(i.prevProp=_,i.prevResolvedValues=T,i.isActive&&(f={...f,...T}),S&&(!(b&&x)||C))for(let n of w){let r={type:t};if(typeof n==`string`&&l&&c&&s?.enteringChildren){let t=Wx(s,n)?.transition?.delayChildren;r.delay=Cx(s.enteringChildren,e,t)}u.push({animation:n,options:r})}}),d.size){let{initial:t}=o,n={},r=typeof t!=`boolean`&&Wx(e,Array.isArray(t)?t[0]:t,e.presenceContext?.custom);r&&r.transition&&(n.transition=r.transition),d.forEach(i=>{let a=e.getValue(i);a&&(a.liveStyle=!0);let s=r&&!Array.isArray(t)?r[i]:void 0,c=e.getBaseTargetFromProps(o,i);n[i]=(s===void 0?c!==void 0&&!Zx(c)?c:e.initialValues[i]===void 0?e.baseTarget[i]:void 0:s)??null}),u.push({animation:n})}let h=l&&e.blockInitialAnimation||r&&!c&&(o.initial===!1||o.initial===o.animate);return r=i=!1,!h&&u.length?t(u):Promise.resolve()}function o(t,r){if(n[t].isActive===r)return Promise.resolve();e.variantChildren?.forEach(e=>e.animationState?.setActive(t,r)),n[t].isActive=r;let i=a(t);for(let e in n)n[e].protectedKeys={};return i}return{animateChanges:a,setActive:o,setAnimateFunction:n=>{t=n(e)},getState:()=>n,reset:()=>{n=sw(),i=!0}}}function ow(e,t){return typeof t==`string`?t!==e:Array.isArray(t)?!rw(t,e):!1}function sw(){let e={};for(let t of AC)e[t]={isActive:t===`animate`,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}};return e}function cw(e,t,n){let r=Zx(e)?e:Ox(e);return r.start(Rx(``,r,t,n)),r.animation}function lw(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}function uw(e){return Zx(e)?e.get():e}var dw=(0,g.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`});function fw(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function pw(...e){return t=>{let n=!1,r=e.map(e=>{let r=fw(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():fw(e[t],null)}}}}function mw(...e){return g.useCallback(pw(...e),e)}var hw=class extends g.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(CS(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=CS(e)&&e.offsetWidth||0,r=CS(e)&&e.offsetHeight||0,i=getComputedStyle(t),a=this.props.sizeRef.current;a.height=parseFloat(i.height),a.width=parseFloat(i.width),a.top=t.offsetTop,a.left=t.offsetLeft,a.right=n-a.width-a.left,a.bottom=r-a.height-a.top,a.direction=i.direction}return null}componentDidUpdate(){}render(){return this.props.children}};function gw({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,g.useId)(),s=(0,g.useRef)(null),c=(0,g.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,g.useContext)(dw),u=mw(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,g.useInsertionEffect)(()=>{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(`
16
16
  [data-motion-pop-id="${o}"] {
17
17
  position: absolute !important;
18
18
  width: ${e}px !important;
@@ -20,13 +20,13 @@ Error generating stack: `+e.message+`
20
20
  ${_}px !important;
21
21
  ${v}px !important;
22
22
  }
23
- `),()=>{s.current?.removeAttribute(`data-motion-pop-id`),b.contains(y)&&b.removeChild(y)}},[t]),(0,X.jsx)(pw,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:g.cloneElement(e,{ref:u})})}var hw=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:l})=>{let u=r_(gw),d=(0,g.useId)(),f=(0,g.useRef)(n),p=(0,g.useRef)(r);i_(()=>{f.current=n,p.current=r});let m=!0,h=(0,g.useMemo)(()=>(m=!1,{id:d,initial:t,isPresent:n,custom:i,onExitComplete:e=>{u.set(e,!0);for(let e of u.values())if(!e)return;r&&r()},register:e=>(u.set(e,!1),()=>{u.delete(e),!f.current&&!u.size&&p.current?.()})}),[n,u,r]);return a&&m&&(h={...h}),(0,g.useMemo)(()=>{u.forEach((e,t)=>u.set(t,!1))},[n]),g.useEffect(()=>{!n&&!u.size&&r&&r()},[n]),e=(0,X.jsx)(mw,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:l,children:e}),(0,X.jsx)(a_.Provider,{value:h,children:e})};function gw(){return new Map}function _w(e=!0){let t=(0,g.useContext)(a_);if(t===null)return[!0,null];let{isPresent:n,onExitComplete:r,register:i}=t,a=(0,g.useId)();(0,g.useEffect)(()=>{if(e)return i(a)},[e]);let o=(0,g.useCallback)(()=>e&&r&&r(a),[a,r,e]);return!n&&r?[!1,o]:[!0]}var vw=e=>e.key||``;function yw(e){let t=[];return g.Children.forEach(e,e=>{(0,g.isValidElement)(e)&&t.push(e)}),t}var bw=({children:e,custom:t,initial:n=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:a=`sync`,propagate:o=!1,anchorX:s=`left`,anchorY:c=`top`,root:l})=>{let[u,d]=_w(o),f=(0,g.useMemo)(()=>yw(e),[e]),p=o&&!u?[]:f.map(vw),m=(0,g.useRef)(!0),h=r_(()=>new Map),_=(0,g.useRef)(new Set),[v,y]=(0,g.useState)(f),[b,x]=(0,g.useState)(f);i_(()=>{o&&!u&&!b.length&&d?.()},[u,o,b.length,d]),i_(()=>{m.current=!1;for(let e=0;e<b.length;e++){let t=vw(b[e]);p.includes(t)?(h.delete(t),_.current.delete(t)):h.get(t)!==!0&&h.set(t,!1)}},[b,p.length,p.join(`-`)]);let S=[];if(f!==v){let e=[...f],t=0;for(let n of b){let r=p.indexOf(vw(n));r===-1?(e.splice(t++,0,n),S.push(n)):t=r+S.length+1}return S.every(e=>h.get(vw(e)))?e=f:a===`wait`&&(e=S),x(yw(e)),y(f),null}let{forceRender:C}=(0,g.useContext)(n_);return(0,X.jsx)(X.Fragment,{children:b.map(e=>{let g=vw(e),v=o&&!u?!1:f===b||p.includes(g);return(0,X.jsx)(hw,{isPresent:v,initial:!m.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:a,root:l,onExitComplete:v?void 0:()=>{if(_.current.has(g))return;if(h.has(g))_.current.add(g),h.set(g,!0);else return;let e=!0;h.forEach(t=>{t||(e=!1)}),e&&(C?.(),y([]),o&&d?.(),r&&r())},anchorX:s,anchorY:c,children:e},g)})})},xw=(0,g.createContext)({strict:!1}),Sw={animation:[`animate`,`variants`,`whileHover`,`whileTap`,`exit`,`whileInView`,`whileFocus`,`whileDrag`],exit:[`exit`],drag:[`drag`,`dragControls`],focus:[`whileFocus`],hover:[`whileHover`,`onHoverStart`,`onHoverEnd`],tap:[`whileTap`,`onTap`,`onTapStart`,`onTapCancel`],pan:[`onPan`,`onPanStart`,`onPanSessionStart`,`onPanEnd`],inView:[`whileInView`,`onViewportEnter`,`onViewportLeave`],layout:[`layout`,`layoutId`]},Cw=!1;function ww(){if(Cw)return;let e={};for(let t in Sw)e[t]={isEnabled:e=>Sw[t].some(t=>!!e[t])};zC(e),Cw=!0}function Tw(){return ww(),BC()}function Ew(e){let t=Tw();for(let n in e)t[n]={...t[n],...e[n]};zC(t)}function Dw({children:e,features:t,strict:n=!1}){let[,r]=(0,g.useState)(!Ow(t)),i=(0,g.useRef)(void 0);if(!Ow(t)){let{renderer:e,...n}=t;i.current=e,Ew(n)}return(0,g.useEffect)(()=>{Ow(t)&&t().then(({renderer:e,...t})=>{Ew(t),i.current=e,r(!0)})},[]),(0,X.jsx)(xw.Provider,{value:{renderer:i.current,strict:n},children:e})}function Ow(e){return typeof e==`function`}var kw=(0,g.createContext)({});function Aw(e,t){if(AC(e)){let{initial:t,animate:n}=e;return{initial:t===!1||DC(t)?t:void 0,animate:DC(n)?n:void 0}}return e.inherit===!1?{}:t}function jw(e){let{initial:t,animate:n}=Aw(e,(0,g.useContext)(kw));return(0,g.useMemo)(()=>({initial:t,animate:n}),[Mw(t),Mw(n)])}function Mw(e){return Array.isArray(e)?e.join(` `):e}var Nw=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Pw(e,t,n){for(let r in t)!Yx(t[r])&&!KC(r,n)&&(e[r]=t[r])}function Fw({transformTemplate:e},t){return(0,g.useMemo)(()=>{let n=Nw();return zS(n,t,e),Object.assign({},n.vars,n.style)},[t])}function Iw(e,t){let n=e.style||{},r={};return Pw(r,n,e),Object.assign(r,Fw(e,t)),r}function Lw(e,t){let n={},r=Iw(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout=`none`,r.touchAction=e.drag===!0?`none`:`pan-${e.drag===`x`?`y`:`x`}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=r,n}var Rw=()=>({...Nw(),attrs:{}});function zw(e,t,n,r){let i=(0,g.useMemo)(()=>{let n=Rw();return WS(n,t,ZC(r),e.transformTemplate,e.style),{...n.attrs,style:{...n.style}}},[t]);if(e.style){let t={};Pw(t,e.style,e),i.style={...t,...i.style}}return i}var Bw=new Set(`animate.exit.variants.initial.style.values.transition.transformTemplate.custom.inherit.onBeforeLayoutMeasure.onAnimationStart.onAnimationComplete.onUpdate.onDragStart.onDrag.onDragEnd.onMeasureDragConstraints.onDirectionLock.onDragTransitionEnd._dragX._dragY.onHoverStart.onHoverEnd.onViewportEnter.onViewportLeave.globalTapTarget.propagate.ignoreStrict.viewport`.split(`.`));function Vw(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||Bw.has(e)}function Hw(e,t){return e.startsWith(`on`)?!Vw(e):t?.(e)??!Vw(e)}function Uw(e,t,n,r){let i={};for(let a in e)(a!==`values`||typeof e.values!=`object`)&&(Yx(e[a])||(Hw(a,r)||n===!0&&Vw(a)||!t&&!Vw(a)||e.draggable&&a.startsWith(`onDrag`))&&(i[a]=e[a]));return i}var Ww=[`animate`,`circle`,`defs`,`desc`,`ellipse`,`g`,`image`,`line`,`filter`,`marker`,`mask`,`metadata`,`path`,`pattern`,`polygon`,`polyline`,`rect`,`stop`,`switch`,`symbol`,`svg`,`text`,`tspan`,`use`,`view`];function Gw(e){return typeof e!=`string`||e.includes(`-`)?!1:!!(Ww.indexOf(e)>-1||/[A-Z]/u.test(e))}function Kw(e,t,n,{latestValues:r},i,a=!1,o,s){let c=(o??Gw(e)?zw:Lw)(t,r,i,e),l=Uw(t,typeof e==`string`,a,s),u=e===g.Fragment?{}:{...l,...c,ref:n},{children:d}=t,f=(0,g.useMemo)(()=>Yx(d)?d.get():d,[d]);return(0,g.createElement)(e,{...u,children:f})}function qw({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,i){return{latestValues:Jw(n,r,i,e),renderState:t()}}function Jw(e,t,n,r){let i={},a=r(e,{});for(let e in a)i[e]=cw(a[e]);let{initial:o,animate:s}=e,c=AC(e),l=jC(e);t&&l&&!c&&e.inherit!==!1&&(o===void 0&&(o=t.initial),s===void 0&&(s=t.animate));let u=n?n.initial===!1:!1;u||=o===!1;let d=u?s:o;if(d&&typeof d!=`boolean`&&!EC(d)){let t=Array.isArray(d)?d:[d];for(let n=0;n<t.length;n++){let r=Vx(e,t[n]);if(r){let{transitionEnd:e,transition:t,...n}=r;for(let e in n){let t=n[e];if(Array.isArray(t)){let e=u?t.length-1:0;t=t[e]}t!==null&&(i[e]=t)}for(let t in e)i[t]=e[t]}}}return i}var Yw=e=>(t,n)=>{let r=(0,g.useContext)(kw),i=(0,g.useContext)(a_),a=()=>qw(e,t,r,i);return n?a():r_(a)},Xw=Yw({scrapeMotionValuesFromProps:qC,createRenderState:Nw}),Zw=Yw({scrapeMotionValuesFromProps:$C,createRenderState:Rw}),Qw=Symbol.for(`motionComponentSymbol`);function $w(e,t,n){let r=(0,g.useRef)(n);(0,g.useInsertionEffect)(()=>{r.current=n});let i=(0,g.useRef)(null);return(0,g.useCallback)(n=>{n&&e.onMount?.(n),t&&(n?t.mount(n):t.unmount());let a=r.current;if(typeof a==`function`){if(n){let e=a(n);typeof e==`function`&&(i.current=e)}else i.current?(i.current(),i.current=null):a(n)}else a&&(a.current=n)},[t])}var eT=(0,g.createContext)({});function tT(e){return e&&typeof e==`object`&&Object.prototype.hasOwnProperty.call(e,`current`)}function nT(e,t,n,r,i,a){let{visualElement:o}=(0,g.useContext)(kw),s=(0,g.useContext)(xw),c=(0,g.useContext)(a_),l=(0,g.useContext)(lw),u=l.reducedMotion,d=l.skipAnimations,f=(0,g.useRef)(null),p=(0,g.useRef)(!1);r||=s.renderer,!f.current&&r&&(f.current=r(e,{visualState:t,parent:o,props:n,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u,skipAnimations:d,isSVG:a}),p.current&&f.current&&(f.current.manuallyAnimateOnMount=!0));let m=f.current,h=(0,g.useContext)(eT);m&&!m.projection&&i&&(m.type===`html`||m.type===`svg`)&&rT(f.current,n,i,h);let _=(0,g.useRef)(!1);(0,g.useInsertionEffect)(()=>{m&&_.current&&m.update(n,c)});let v=n[$x],y=(0,g.useRef)(!!v&&typeof window<`u`&&!window.MotionHandoffIsComplete?.(v)&&window.MotionHasOptimisedAnimation?.(v));return i_(()=>{p.current&&m&&(m.animationState?.animateChanges(),m.enteringChildren=void 0)},[]),i_(()=>{p.current=!0,m&&(_.current=!0,window.MotionIsMounted=!0,m.updateFeatures(),m.scheduleRenderMicrotask(),y.current&&m.animationState&&m.animationState.animateChanges())}),(0,g.useEffect)(()=>{m&&(!y.current&&m.animationState&&m.animationState.animateChanges(),y.current&&=(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(v)}),!1),m.enteringChildren=void 0)}),m}function rT(e,t,n,r){let{layoutId:i,layout:a,drag:o,dragConstraints:s,layoutScroll:c,layoutRoot:l,layoutAnchor:u,layoutCrossfade:d}=t;e.projection=new n(e.latestValues,t[`data-framer-portal-id`]?void 0:iT(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!o||s&&tT(s),visualElement:e,animationType:typeof a==`string`?a:`both`,initialPromotionConfig:r,crossfade:d,layoutScroll:c,layoutRoot:l,layoutAnchor:u})}function iT(e){if(e)return e.options.allowProjection===!1?iT(e.parent):e.projection}function aT(e,{forwardMotionProps:t=!1,type:n}={},r,i){r&&Ew(r);let a=n?n===`svg`:Gw(e),o=a?Zw:Xw;function s(n,s){let c,l={...(0,g.useContext)(lw),...n,layoutId:oT(n)},{isStatic:u,isValidProp:d}=l,f=jw(n),p=o(n,u);if(!u&&typeof window<`u`){sT(l,r);let t=cT(l);c=t.MeasureLayout,f.visualElement=nT(e,p,l,i,t.ProjectionNode,a)}return(0,X.jsxs)(kw.Provider,{value:f,children:[c&&f.visualElement?(0,X.jsx)(c,{visualElement:f.visualElement,...l}):null,Kw(e,n,$w(p,f.visualElement,s),p,u,t,a,d)]})}s.displayName=`motion.${typeof e==`string`?e:`create(${e.displayName??e.name??``})`}`;let c=(0,g.forwardRef)(s);return c[Qw]=e,c}function oT({layoutId:e}){let t=(0,g.useContext)(n_).id;return t&&e!==void 0?t+`-`+e:e}function sT(e,t){(0,g.useContext)(xw).strict}function cT(e){let{drag:t,layout:n}=Tw();if(!t&&!n)return{};let r={...t,...n};return{MeasureLayout:t?.isEnabled(e)||n?.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}function lT(e,t){if(typeof Proxy>`u`)return aT;let n=new Map,r=(n,r)=>aT(n,r,e,t);return new Proxy((e,t)=>r(e,t),{get:(i,a)=>a===`create`?r:(n.has(a)||n.set(a,aT(a,void 0,e,t)),n.get(a))})}var uT=lT(),dT=(e,t)=>t.isSVG??Gw(e)?new ew(t):new YC(t,{allowProjection:e!==g.Fragment}),fT=class extends UC{constructor(e){super(e),e.animationState||=rw(e)}updateAnimationControlsSubscription(){let{animate:e}=this.node.getProps();EC(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){let{animate:e}=this.node.getProps(),{animate:t}=this.node.prevProps||{};e!==t&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}},pT=0,mT={animation:{Feature:fT},exit:{Feature:class extends UC{constructor(){super(...arguments),this.id=pT++}update(){let{presenceContext:e,prevPresenceContext:t,animationState:n}=this.node;if(!e||!n)return;let{isPresent:r,onExitComplete:i}=e,a=t?.isPresent;if(r===a)return;if(r&&a===!1){if(this.exit===!0){let{initial:e}=this.node.getProps();if(e&&!Array.isArray(e)){let{transition:t,transitionEnd:n,...r}=Hx(this.node,e)||{};for(let e in r)this.node.getValue(e)?.jump(r[e])}this.node.blockInitialAnimation=!1,n.reset(),n.animateChanges()}else n.setActive(`exit`,!1);this.exit=void 0;return}let o=this.exit=n.setActive(`exit`,!r);i&&!r&&o.then(()=>{this.exit===o&&(this.exit=!0,i(this.id))})}mount(){let{register:e,onExitComplete:t}=this.node.presenceContext||{};t&&t(this.id),e&&(this.unmount=e(this.id))}unmount(){}}}};function hT(e){return{point:{x:e.pageX,y:e.pageY}}}function gT(e,t,n){let{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive(`whileHover`,n===`Start`);let i=r[`onHover`+n];i&&py.postRender(()=>i(t,hT(t)))}var _T=class extends UC{mount(){let{current:e}=this.node;e&&(this.unmount=uC(e,(e,t)=>(gT(this.node,t,`Start`),e=>gT(this.node,e,`End`))))}unmount(){}},vT=class extends UC{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(`:focus-visible`)}catch{e=!0}e&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!0),this.isActive=!0)}onBlur(){this.isActive&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!1),this.isActive=!1)}mount(){this.unmount=h_(sw(this.node.current,`focus`,()=>this.onFocus()),sw(this.node.current,`blur`,()=>this.onBlur()))}unmount(){}};function yT(e,t,n){let{props:r}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&r.whileTap&&e.animationState.setActive(`whileTap`,n===`Start`);let i=r[`onTap`+(n===`End`?``:n)];i&&py.postRender(()=>i(t,hT(t)))}var bT=class extends UC{mount(){let{current:e}=this.node;if(!e)return;let{globalTapTarget:t,propagate:n}=this.node.props;this.unmount=xC(e,(e,t)=>(yT(this.node,t,`Start`),(e,{success:t})=>yT(this.node,e,t?`End`:`Cancel`)),{useGlobalTarget:t,stopPropagation:n?.tap===!1})}unmount(){}},xT=new WeakMap,ST=new WeakMap,CT=e=>{let t=xT.get(e.target);t&&t(e)},wT=e=>{e.forEach(CT)};function TT({root:e,...t}){let n=e||document;ST.has(n)||ST.set(n,{});let r=ST.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(wT,{root:e,...t})),r[i]}function ET(e,t,n){let r=TT(t);return xT.set(e,n),r.observe(e),()=>{xT.delete(e),r.unobserve(e)}}var DT={some:0,all:1},OT=class extends UC{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.stopObserver?.();let{viewport:e={}}=this.node.getProps(),{root:t,margin:n,amount:r=`some`,once:i}=e,a={root:t?t.current:void 0,rootMargin:n,threshold:typeof r==`number`?r:DT[r]},o=e=>{let{isIntersecting:t}=e;if(this.isInView===t||(this.isInView=t,i&&!t&&this.hasEnteredView))return;t&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive(`whileInView`,t);let{onViewportEnter:n,onViewportLeave:r}=this.node.getProps(),a=t?n:r;a&&a(e)};this.stopObserver=ET(this.node.current,a,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>`u`)return;let{props:e,prevProps:t}=this.node;[`amount`,`margin`,`root`].some(kT(e,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}};function kT({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}var AT={inView:{Feature:OT},tap:{Feature:bT},focus:{Feature:vT},hover:{Feature:_T}};function jT(e){return(0,g.useEffect)(()=>()=>e(),[])}var MT={renderer:dT,...mT,...AT};function NT(e){let t=r_(()=>Ex(e)),{isStatic:n}=(0,g.useContext)(lw);if(n){let[,n]=(0,g.useState)(e);(0,g.useEffect)(()=>t.on(`change`,n),[])}return t}function PT(e,t){let n=NT(t()),r=()=>n.set(t());return r(),i_(()=>{let t=()=>py.preRender(r,!1,!0),n=e.map(e=>e.on(`change`,t));return()=>{n.forEach(e=>e()),my(r)}}),n}function FT(e){wx.current=[],e();let t=PT(wx.current,e);return wx.current=void 0,t}function IT(e,t,n,r){if(typeof e==`function`)return FT(e);if(n!==void 0&&!Array.isArray(n)&&typeof t!=`function`)return RT(e,t,n,r);let i=typeof t==`function`?t:SC(t,n,r),a=Array.isArray(e)?LT(e,i):LT([e],([e])=>i(e)),o=Array.isArray(e)?void 0:e.accelerate;if(o&&!o.isTransformed&&typeof t!=`function`&&Array.isArray(n)&&r?.clamp!==!1){let e=r?.ease;a.accelerate={...o,times:[0,...t,1],keyframes:[n[0],...n,n[n.length-1]],isTransformed:!0,...e?{ease:Array.isArray(e)?[e[0],...e]:e}:{}}}return a}function LT(e,t){let n=r_(()=>[]);return PT(e,()=>{n.length=0;let r=e.length;for(let t=0;t<r;t++)n[t]=e[t].get();return t(n)})}function RT(e,t,n,r){let i=r_(()=>Object.keys(n)),a=r_(()=>({}));for(let o of i)a[o]=IT(e,t,n[o],r);return a}function zT(){!PC.current&&IC();let[e]=(0,g.useState)(NC.current);return e}function BT(){let e=zT(),{reducedMotion:t}=(0,g.useContext)(lw);return t===`never`?!1:t===`always`||e}function VT(e){return typeof e==`object`&&!Array.isArray(e)}function HT(e,t,n,r){return e==null?[]:typeof e==`string`&&VT(t)?wS(e,n,r):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>e!=null):[e]}function UT(e,t,n){return e*(t+1)+n*t}function WT(e,t,n,r){return typeof t==`number`?t:t.startsWith(`-`)||t.startsWith(`+`)?Math.max(0,e+parseFloat(t)):t===`<`?n:t.startsWith(`<`)?Math.max(0,n+parseFloat(t.slice(1))):r.get(t)??e}function GT(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];i.at>t&&i.at<n&&(s_(e,i),r--)}}function KT(e,t,n,r,i,a){GT(e,i,a);for(let o=0;o<t.length;o++)e.push({value:t[o],at:Kv(i,a,r[o]),easing:B_(n,o)})}function qT(e,t,n=0){let r=t+1+t*n;for(let t=0;t<e.length;t++)e[t]=e[t]/r}function JT(e,t){return e.at===t.at?e.value===null?1:t.value===null?-1:0:e.at-t.at}var YT=`easeInOut`,XT=20;function ZT(e,{defaultTransition:t={},...n}={},r,i){let a=t.duration||.3,o=new Map,s=new Map,c={},l=new Map,u=0,d=0,f=0;for(let n=0;n<e.length;n++){let o=e[n];if(typeof o==`string`){l.set(o,d);continue}if(!Array.isArray(o)){l.set(o.name,WT(d,o.at,u,l));continue}let[p,m,h={}]=o;h.at!==void 0&&(d=WT(d,h.at,u,l));let g=0,_=(e,n,r,o=0,s=0)=>{let c=eE(e),{delay:l=0,times:u=Ly(c),type:p=t.type||`keyframes`,repeat:m,repeatType:h,repeatDelay:_=0,...v}=n,{ease:y=t.ease||`easeOut`,duration:b}=n,x=typeof l==`function`?l(o,s):l,S=c.length,C=Qb(p)?p:i?.[p||`keyframes`];if(S<=2&&C){let e=100;if(S===2&&rE(c)){let t=c[1]-c[0];e=Math.abs(t)}let n={...t,...v};b!==void 0&&(n.duration=v_(b));let r=by(n,e,C);y=r.ease,b=r.duration}b??=a;let w=d+x;u.length===1&&u[0]===0&&(u[1]=1);let T=u.length-c.length;if(T>0&&Iy(u,T),c.length===1&&c.unshift(null),m&&`${m}${XT}`,m&&m<XT){let e=b>0?_/b:0;b=UT(b,m,_);let t=[...c],n=[...u];y=Array.isArray(y)?[...y]:[y];let r=[...y],i=h===`reverse`||h===`mirror`,a=t,o=r;i&&(a=[...t].reverse(),h===`reverse`&&(o=[...r].reverse().map(e=>typeof e==`function`?O_(e):e)));for(let s=0;s<m;s++){let l=i&&s%2==0,d=l?a:t,f=l?o:r,p=(s+1)*(1+e);e>0&&(c.push(c[c.length-1]),u.push(p),y.push(`linear`)),c.push(...d);for(let e=0;e<d.length;e++)u.push(n[e]+p),y.push(e===0?`linear`:B_(f,e-1))}qT(u,m,e)}let E=w+b;KT(r,c,y,u,w,E),g=Math.max(x+b,g),f=Math.max(E,f)};if(Yx(p)){let e=QT(p,s);_(m,h,$T(`default`,e))}else{let e=HT(p,m,r,c),t=e.length;for(let n=0;n<t;n++){m=m,h=h;let r=e[n],i=QT(r,s);for(let e in m)_(m[e],tE(h,e),$T(e,i),n,t)}}u=d,d+=g}return s.forEach((e,r)=>{for(let i in e){let a=e[i];a.sort(JT);let s=[],c=[],l=[];for(let e=0;e<a.length;e++){let{at:t,value:n,easing:r}=a[e];s.push(n),c.push(g_(0,f,t)),l.push(r||`easeOut`)}c[0]!==0&&(c.unshift(0),s.unshift(s[0]),l.unshift(YT)),c[c.length-1]!==1&&(c.push(1),s.push(null)),o.has(r)||o.set(r,{keyframes:{},transition:{}});let u=o.get(r);u.keyframes[i]=s;let{type:d,...p}=t;u.transition[i]={...p,duration:f,ease:l,times:c,...n}}}),o}function QT(e,t){return!t.has(e)&&t.set(e,{}),t.get(e)}function $T(e,t){return t[e]||(t[e]=[]),t[e]}function eE(e){return Array.isArray(e)?e:[e]}function tE(e,t){return e&&e[t]?{...e,...e[t]}:{...e}}var nE=e=>typeof e==`number`,rE=e=>e.every(nE);function iE(e,t){return Yx(e)||typeof e==`number`||typeof e==`string`&&!VT(t)}function aE(e,t,n,r){let i=[];if(iE(e,t))i.push(ow(e,VT(t)&&t.default||t,n&&(n.default||n)));else{if(e==null)return i;let a=HT(e,t,r),o=a.length;for(let e=0;e<o;e++){let r=a[e],s={...n};`delay`in s&&typeof s.delay==`function`&&(s.delay=s.delay(e,o)),r instanceof Element?i.push(...nC(r,t,s,TC.get(r))):i.push(...yS(_S(r)??rC,r,t,s))}}return i}function oE(e,t,n){let r=[];return ZT(e.map(e=>{if(Array.isArray(e)&&typeof e[0]==`function`){let t=e[0],n=Ex(0);return n.on(`change`,t),e.length===1?[n,[0,1]]:e.length===2?[n,[0,1],e[1]]:[n,e[1],e[2]]}return e}),t,n,{spring:My}).forEach(({keyframes:e,transition:t},n)=>{r.push(...aE(n,e,t))}),r}function sE(e){return Array.isArray(e)&&e.some(Array.isArray)}function cE(e={}){let{scope:t,reduceMotion:n,skipAnimations:r}=e;function i(e,i,a){let o=[],s,c={};if(n!==void 0&&(c.reduceMotion=n),r!==void 0&&(c.skipAnimations=r),sE(e)){let{onComplete:n,...r}=i||{};typeof n==`function`&&(s=n),o=oE(e,{...c,...r},t)}else{let{onComplete:n,...r}=a||{};typeof n==`function`&&(s=n),o=aE(e,i,{...c,...r},t)}let l=new bx(o);return s&&l.finished.then(s),t&&(t.animations.push(l),l.finished.then(()=>{s_(t.animations,l)})),l}return i}var lE=Object.assign(cE(),{addEffect:hS,removeEffect:gS});function uE(){let e=r_(()=>({current:null,animations:[]})),t=BT()??void 0,{skipAnimations:n}=(0,g.useContext)(lw),r=(0,g.useMemo)(()=>cE({scope:e,reduceMotion:t,skipAnimations:n}),[e,t,n]);return jT(()=>{e.animations.forEach(e=>e.stop()),e.animations.length=0}),[e,r]}var dE=uT,fE=`text-[2.5rem]`,pE={indicator:`text-primary`,track:`text-primary-soft`},mE={indicator:`text-current`,track:`text-current/20`};function hE({colors:e,reduced:t}){return(0,X.jsxs)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 40 40`,fill:`none`,stroke:`currentColor`,strokeWidth:`4`,strokeLinecap:`round`,"aria-hidden":`true`,className:Q(`size-[1em] stroke-4!`,e.indicator),children:[(0,X.jsx)(`circle`,{cx:`20`,cy:`20`,r:`16`,className:e.track}),t?(0,X.jsx)(`circle`,{cx:`20`,cy:`20`,r:`16`,pathLength:1,strokeDasharray:`0.25 0.75`}):(0,X.jsx)(dE.circle,{cx:`20`,cy:`20`,r:`16`,pathLength:1,strokeDasharray:`0.25 0.75`,initial:{strokeDashoffset:0},animate:{strokeDashoffset:-1},transition:{duration:.9,repeat:1/0,ease:`linear`}})]})}var gE=12,_E=1.2;function vE({colors:e,reduced:t}){return(0,X.jsx)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 40 40`,fill:`currentColor`,"aria-hidden":`true`,className:Q(`size-[1em]`,e.indicator),children:Array.from({length:gE},(e,n)=>{let r={x:18,y:2,width:4,height:6,rx:2,transform:`rotate(${360/gE*n} 20 20)`};return t?(0,X.jsx)(`rect`,{...r,opacity:.25},n):(0,X.jsx)(dE.rect,{...r,initial:{opacity:0},animate:{opacity:[0,1,.5,0]},transition:{duration:_E,repeat:1/0,ease:`linear`,delay:n/gE*_E-_E,times:[0,.1,.5,1]}},n)})})}var yE=`M12.846 3.581C12.711 3.231 12.375 3 12 3C11.625 3 11.278 3.263 11.154 3.581C10.604 5.011 10.054 6.442 9.504 7.872C8.752 8.16 8.159 8.752 7.871 9.504C6.441 10.054 5.011 10.604 3.581 11.154C3.41 11.22 3.263 11.336 3.159 11.487C3.055 11.638 3 11.817 3 12C3 12.183 3.056 12.362 3.159 12.513C3.262 12.664 3.41 12.78 3.581 12.846C5.011 13.396 6.442 13.946 7.872 14.496C8.16 15.248 8.752 15.841 9.504 16.129C10.054 17.559 10.604 18.989 11.154 20.419C11.22 20.59 11.336 20.737 11.487 20.841C11.638 20.945 11.817 21 12 21C12.183 21 12.362 20.945 12.513 20.841C12.664 20.737 12.78 20.59 12.846 20.419C13.396 18.989 13.946 17.559 14.496 16.129C15.248 15.841 15.841 15.248 16.129 14.496C17.559 13.946 18.989 13.396 20.419 12.846C20.59 12.78 20.737 12.664 20.841 12.513C20.945 12.362 21 12.183 21 12C21 11.817 20.945 11.638 20.841 11.487C20.737 11.336 20.59 11.22 20.419 11.154C18.989 10.604 17.559 10.054 16.129 9.504C15.841 8.752 15.248 8.16 14.496 7.871C13.946 6.441 13.396 5.011 12.846 3.581Z`,bE=`M12.704 5C12.469 5 12.235 5 12 5C11.765 5 11.531 5 11.296 5C10.161 5.053 9.025 5.106 7.889 5.159C6.979 6.069 6.069 6.979 5.159 7.889C5.106 9.025 5.053 10.161 5 11.296C5 11.395 5 11.494 5 11.593C5 11.729 5 11.864 5 12C5 12.136 5 12.271 5 12.407C5 12.506 5 12.605 5 12.704C5.053 13.839 5.106 14.975 5.159 16.111C6.069 17.021 6.979 17.931 7.889 18.841C9.025 18.894 10.161 18.947 11.296 19C11.395 19 11.494 19 11.593 19C11.729 19 11.864 19 12 19C12.136 19 12.271 19 12.407 19C12.506 19 12.605 19 12.704 19C13.839 18.947 14.975 18.894 16.111 18.841C17.021 17.931 17.931 17.021 18.841 16.111C18.894 14.975 18.947 13.839 19 12.704C19 12.605 19 12.506 19 12.407C19 12.271 19 12.136 19 12C19 11.864 19 11.729 19 11.593C19 11.494 19 11.395 19 11.296C18.947 10.161 18.894 9.025 18.841 7.889C17.931 6.979 17.021 6.069 16.111 5.159C14.975 5.106 13.839 5.053 12.704 5Z`;function xE(e){return e.match(/-?\d+(?:\.\d+)?/g)?.map(Number)??[]}var SE=xE(yE),CE=xE(bE),wE=(SE.length-2)/6;function TE(e){let t=`M${e[0]} ${e[1]}`;for(let n=0;n<wE;n++){let r=2+n*6;t+=`C${e[r]} ${e[r+1]} ${e[r+2]} ${e[r+3]} ${e[r+4]} ${e[r+5]}`}return t+`Z`}function EE(e,t,n){return e+(t-e)*n}function DE(e){return e<.5?2*e*e:1-(-2*e+2)**2/2}var OE=2.5,kE=.4;function AE({colors:e,reduced:t}){let n=NT(0);g.useEffect(()=>{if(t)return;let e=lE(n,1,{duration:OE,repeat:1/0,ease:`linear`});return()=>e.stop()},[t,n]);let r=IT(n,e=>{if(e<kE/2){let t=DE(e/(kE/2));return TE(SE.map((e,n)=>EE(e,CE[n],t)))}if(e<kE){let t=DE((e-kE/2)/(kE/2));return TE(CE.map((e,n)=>EE(e,SE[n],t)))}return yE}),i=IT(n,e=>e<kE?DE(e/kE)*360:360);return(0,X.jsx)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,"aria-hidden":`true`,className:Q(`size-[1em]`,e.indicator),children:t?(0,X.jsx)(`path`,{d:yE}):(0,X.jsx)(dE.path,{d:r,style:{transformOrigin:`12px 12px`,rotate:i}})})}var jE={circular:hE,dots:vE,sparkle:AE};function ME({variant:e=`circular`,currentColor:t=!1,"aria-label":n=`Loading`,className:r,...i}){let a=pg(),o=t?mE:pE,s=jE[e],c=(0,X.jsx)(s,{colors:o,reduced:a});return(0,X.jsx)(`span`,{"data-slot":`spinner`,role:`status`,"aria-label":n,className:Q(`inline-flex shrink-0 items-center justify-center align-middle`,fE,r),...i,children:a?c:(0,X.jsx)(Dw,{features:MT,strict:!0,children:c})})}function NE(e,{storage:t=`local`}={}){let[n,r,i]=sd(t,e,``,{serializer:e=>e,deserializer:e=>e}),a=n!==`1`,o=(0,g.useCallback)(()=>r(`1`),[r]),s=(0,g.useCallback)(()=>i(),[i]);return(0,g.useMemo)(()=>({open:a,dismiss:o,reset:s}),[a,o,s])}var PE=Au(Q(`group/alert relative rounded-xl border p-5 text-foreground backdrop-blur-xl`,`grid w-full items-start`,`[grid-template-columns:auto_1fr_auto] [grid-template-areas:'icon_title_close'_'._description_.'_'._actions_actions']`,`@min-[460px]:data-[layout=inline]:items-center`,`@min-[460px]:data-[layout=inline]:[grid-template-columns:auto_auto_1fr_auto_auto]`,`@min-[460px]:data-[layout=inline]:[grid-template-areas:'icon_title_description_actions_close']`),{variants:{variant:{default:`bg-background border-border`,primary:`bg-primary-subtle border-primary-soft`,secondary:`bg-secondary-subtle border-secondary-soft`,error:`bg-error-subtle border-error-soft`,success:`bg-success-subtle border-success-soft`,warning:`bg-warning-subtle border-warning-soft`,info:`bg-info-subtle border-info-soft`}},defaultVariants:{variant:`default`}}),FE={default:`text-foreground-intense`,primary:`text-primary`,secondary:`text-secondary-emphasis`,error:`text-error-emphasis`,success:`text-success-emphasis`,warning:`text-warning-emphasis`,info:`text-info-emphasis`},IE=g.createContext(`default`),LE={opacity:0,scale:.88,filter:`blur(12px)`,height:0},RE={opacity:0},zE={default:{duration:.32,ease:[.4,0,.2,1]},height:{duration:.3,ease:[.4,0,.2,1],delay:.18}};function BE({variant:e,layout:t=`block`,dismissible:n=!1,open:r,onOpenChange:i,persistKey:a,persistStorage:o=`local`,closeLabel:s=`Dismiss`,role:c=`alert`,className:l,children:u,style:d,...f}){let p=pg(),[m,h]=g.useState(!0),_=NE(a??``,{storage:o}),v=r!==void 0,y=!v&&a!=null,b=v?r:y?_.open:m,x=g.useCallback(()=>{if(v){i?.(!1);return}y?_.dismiss():h(!1),i?.(!1)},[v,y,_,i]);return(0,X.jsx)(IE.Provider,{value:e??`default`,children:(0,X.jsx)(Dw,{features:MT,strict:!0,children:(0,X.jsx)(bw,{initial:!1,children:b&&(0,X.jsx)(dE.div,{initial:!1,exit:p?RE:LE,transition:p?{duration:0}:zE,className:`@container overflow-hidden`,children:(0,X.jsxs)(`div`,{role:c,"data-slot":`alert`,"data-layout":t,style:d,className:Q(PE({variant:e}),l),...f,children:[u,n&&(0,X.jsx)(`button`,{type:`button`,"aria-label":s,"data-slot":`alert-close`,onClick:x,className:Q(`text-foreground-muted cursor-pointer rounded-md p-1 transition-colors outline-none [grid-area:close]`,`hover:text-foreground-intense`,`focus-visible:ring-ring focus-visible:ring-2`,`self-start @min-[460px]:group-data-[layout=inline]/alert:self-center`,`ms-3 -me-1 -mt-1 @min-[460px]:group-data-[layout=inline]/alert:my-0`),children:(0,X.jsx)(VE,{})})]})},`alert`)})})})}function VE(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,className:`size-4`,children:(0,X.jsx)(`path`,{d:`M11.523 3.522c.264-.264.691-.264.955 0s.264.691 0 .955L8.955 8l3.522 3.522c.264.264.264.691 0 .955s-.691.264-.955 0L8 8.955l-3.522 3.522c-.264.264-.691.264-.955 0s-.264-.691 0-.955L7.045 8 3.522 4.478c-.264-.264-.264-.691 0-.955s.691-.264.955 0L8 7.045l3.523-3.522z`})})}function HE({className:e,...t}){let n=g.useContext(IE);return(0,X.jsx)(`span`,{"data-slot":`alert-icon`,className:Q(`me-3 flex h-lh shrink-0 items-center [grid-area:icon] [&_svg:not([class*='size-'])]:size-5`,FE[n],e),...t})}function UE({className:e,as:t=`h5`,...n}){return(0,X.jsx)(t,{"data-slot":`alert-title`,className:Q(`text-foreground-intense self-center font-semibold [grid-area:title]`,`text-base @min-[460px]:group-data-[layout=inline]/alert:me-3 @min-[460px]:group-data-[layout=inline]/alert:text-sm`,e),...n})}function WE({className:e,...t}){return(0,X.jsx)(`p`,{"data-slot":`alert-description`,className:Q(`text-foreground text-sm [grid-area:description]`,`mt-2 @min-[460px]:group-data-[layout=inline]/alert:mt-0`,e),...t})}function GE(e){return Ir(e.defaultTagName??`div`,e,e)}var KE=[`before:pointer-events-none`,`before:absolute`,`before:inset-0`,`before:-z-1`,`before:rounded-[inherit]`,`[a,button]:before:transition-[opacity,background-color,border-color]`,`[a,button]:before:duration-250`,`motion-reduce:[a,button]:before:transition-none`],qE=Au(`relative isolate inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap outline-offset-1 select-none [&_svg]:shrink-0 [a,button]:transform-gpu [a,button]:cursor-pointer [a,button]:transition [a,button]:duration-250 [a,button]:ease-[cubic-bezier(0.175,0.885,0.32,1.5)] [a,button]:not-data-popup-open:active:translate-y-px [a,button]:not-data-popup-open:active:scale-[0.97] [a,button]:not-data-popup-open:active:duration-100 [a,button]:not-data-popup-open:active:ease-in-out motion-reduce:[a,button]:transition-none`,{variants:{variant:{primary:Q(KE,`bg-primary text-primary-foreground outline-ring-primary [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--primary)_0%,var(--primary-muted)_75%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),"primary-outline":Q(KE,`text-primary before:border before:border-primary outline-ring-primary`,`[a,button]:hover:before:bg-primary [a,button]:hover:text-primary-foreground`,`[a,button]:data-pressed:before:bg-primary [a,button]:data-pressed:text-primary-foreground`,`[a,button]:data-popup-open:before:bg-primary [a,button]:data-popup-open:text-primary-foreground`),secondary:Q(KE,`bg-secondary-muted text-secondary-foreground outline-ring-secondary [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--secondary)_0%,var(--secondary-muted)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),soft:Q(KE,`text-foreground-intense before:bg-background-muted before:backdrop-blur-md [a,button]:before:border [a,button]:before:border-transparent outline-ring`,`data-[slot=breadcrumb-link]:not-data-active:text-foreground-muted data-[slot=breadcrumb-link]:hover:text-foreground-intense`,`[a,button]:hover:before:bg-background-subtle [a,button]:hover:before:border-border`,`[a,button]:data-pressed:before:bg-background-subtle [a,button]:data-pressed:before:border-border`,`[a,button]:data-popup-open:before:bg-background-subtle [a,button]:data-popup-open:before:border-border`,`data-active:before:bg-background-subtle data-active:border data-active:before:border-border`),outline:Q(KE,`bg-background text-foreground-intense before:bg-background before:border-border before:border outline-ring`,`data-[slot=breadcrumb-link]:not-data-active:text-foreground-muted data-[slot=breadcrumb-link]:hover:text-foreground-intense`,`[a,button]:hover:before:bg-background-subtle [a,button]:hover:before:border-border-strong`,`[a,button]:data-pressed:before:bg-background-subtle [a,button]:data-pressed:before:border-border-strong`,`[a,button]:data-popup-open:before:bg-background-subtle [a,button]:data-popup-open:before:border-border-strong`,`data-active:before:bg-background-subtle data-active:before:border-border-strong`),error:Q(KE,`bg-error-muted text-error-foreground outline-ring-error [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--error-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),success:Q(KE,`bg-success-muted text-success-foreground outline-ring-success [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--success-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),warning:Q(KE,`bg-warning-muted text-warning-foreground outline-ring-warning [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--warning-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),info:Q(KE,`bg-info-muted text-info-foreground outline-ring-info [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--info-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),light:Q(KE,`text-white before:bg-white/10 before:border-white/10 before:border before:backdrop-blur-md outline-ring-light`,`[a,button]:hover:before:bg-white/15 [a,button]:hover:before:border-white/15`,`[a,button]:data-pressed:before:bg-white/15 [a,button]:data-pressed:before:border-white/15`,`[a,button]:data-popup-open:before:bg-white/15 [a,button]:data-popup-open:before:border-white/15`,`data-active:before:bg-white/15 data-active:before:border-white/15`)},size:{xs:`h-4 w-fit gap-0.5 px-1.5 text-[.625rem] has-data-[icon=end]:pe-1.25 has-data-[icon=start]:ps-1.25 [&_svg:not([class*='size-'])]:size-2.5 [&_svg:not([class*='stroke-'])]:stroke-2`,sm:`h-5 w-fit gap-0.5 px-2 text-xs has-data-[icon=end]:pe-1.5 has-data-[icon=start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`,md:`h-6 w-fit gap-0.75 px-2.5 text-xs has-data-[icon=end]:pe-1.75 has-data-[icon=start]:ps-1.75 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,lg:`h-7 w-fit gap-1 px-3 text-sm has-data-[icon=end]:pe-2.25 has-data-[icon=start]:ps-2.25 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,"icon-sm":`h-5 w-5 [&_svg:not([class*='size-'])]:size-3 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`,"icon-md":`h-6 w-6 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,"icon-lg":`h-7 w-7 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`}},defaultVariants:{variant:`primary`,size:`md`}});function JE({className:e,variant:t,size:n,render:r,...i}){let a=g.isValidElement(r)?r.props:void 0,o=g.isValidElement(r)&&(r.type===`a`||r.type===`button`)||i.onClick!=null||a?.href!=null||a?.onClick!=null||a?.tabIndex!=null;return GE({defaultTagName:`span`,render:r,state:{variant:t,size:n},props:Sr({"data-slot":`badge`,...o?Du():{},className:Q(qE({variant:t,size:n}),e)},i)})}function YE(e,t,n,r,i){return g.isValidElement(t)?g.cloneElement(t,{...i,...t.props,className:Q(n,t.props.className,r)}):g.createElement(e,{...i,className:Q(n,r)})}var XE=`[--card-radius:var(--radius-xl)]`,ZE=`rounded-[calc(var(--card-radius)*4/3)]`,QE={none:`rounded-(--card-radius)`,solid:Q(ZE,`bg-background-muted/60 p-2 backdrop-blur-xl dark:bg-background-subtle`),glass:Q(ZE,`border border-white/15 bg-white/10 p-2 backdrop-blur-sm`)},$E={none:`border`,solid:`border-border-muted border`,glass:``};function eD({frame:e=!1,inset:t=!0,className:n,contentProps:r,render:i,children:a,...o}){let s=e===!0?`solid`:e===!1?`none`:e;return YE(`div`,i,Q(`group/card flex flex-col`,XE,QE[s]),n,{"data-slot":`card`,"data-frame":s,...t?{"data-inset":``}:{},...o,children:(0,X.jsx)(`div`,{"data-slot":`card-content`,...r,className:Q(`bg-background flex min-h-0 flex-1 flex-col overflow-hidden rounded-(--card-radius)`,t&&`p-2`,$E[s],r?.className),children:a})})}function tD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`card-header`,className:Q(`flex flex-1 flex-col gap-1.5 p-6 group-data-inset/card:px-4`,e),...t})}function nD({className:e,render:t,...n}){return YE(`h3`,t,`text-foreground-intense text-lg font-semibold`,e,{"data-slot":`card-title`,...n})}var rD=g.createContext(void 0);function iD(){let e=g.useContext(rD);if(e===void 0)throw Error(S(63));return e}var aD=`data-valid`,oD=`data-invalid`,sD={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},cD={disabled:!1,valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},lD={valid(e){return e===null?null:e?{[aD]:``}:{[oD]:``}}},uD=`data-checked`,dD=`data-unchecked`,fD={...lD,checked(e){return e?{[uD]:``}:{[dD]:``}}},pD={invalid:void 0,name:void 0,validityData:{state:sD,errors:[],error:``,value:``,initialValue:null},setValidityData:p,disabled:void 0,setTouched:p,setDirty:p,setFilled:p,setFocused:p,validationMode:`onSubmit`,shouldValidateOnChange:()=>!1,state:cD,registerFieldControl:p,validation:{getValidationProps:(e,t=h)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:p,getInputControl:()=>null,commit:async()=>{},change:p}},mD=g.createContext(pD);function hD(e=!0){let t=g.useContext(mD);if(t.setValidityData===p&&!e)throw Error(S(28));return t}function gD(e,t,n,r,i=!0,a){let{registerFieldControl:o}=hD(),s=y(()=>Symbol());b(()=>{let c=s.current;if(!i){o(c,void 0);return}o(c,{controlRef:e,getValue:r,id:t,name:a,value:n})},[e,i,r,t,a,o,s,n]),b(()=>{let e=s.current;return()=>{o(e,void 0)}},[o,s])}var _D=g.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:p,validationMode:`onSubmit`,submitCountRef:{current:0}});function vD(){return g.useContext(_D)}var yD=g.createContext({controlId:void 0,registerControlId:p,resetControlId:p,labelId:void 0,setLabelId:p,messageIds:[],setMessageIds:p,getDescriptionProps:e=>e});function bD(){return g.useContext(yD)}function xD(e,t,n,r=!0,i){let[a,o]=g.useState(),s=jd(i?`${i}-label`:void 0),c=e??t??a;return b(()=>{let i=e||t||!r?void 0:SD(n.current,s);a!==i&&o(i)}),c}function SD(e,t){let n=CD(e);if(n)return!n.id&&t&&(n.id=t),n.id||void 0}function CD(e){if(!e)return;let t=e.parentElement;if(t&&t.tagName===`LABEL`)return t;let n=e.id;if(n){let t=e.nextElementSibling;if(t&&t.htmlFor===n)return t}let r=e.labels;return r&&r[0]}function wD(e={}){let{id:t,enabled:n=!0}=e,{controlId:r,registerControlId:i,resetControlId:a}=bD(),o=jd(),s=y(()=>Symbol()),c=g.useRef(!1),l=g.useRef(!1),u=G(()=>{c.current&&i!==p&&(c.current=!1,i(s.current,void 0))});return b(()=>{if(!n||i===p){u();return}let e;if(t!==void 0)l.current=!0,e=t;else if(l.current)e=o;else{a();return}if(e===void 0){u();return}c.current=!0,i(s.current,e)},[t,n,i,a,o,s,u]),b(()=>u,[u]),(n?r:void 0)??t??o}var TD=g.forwardRef(function(e,t){let{checked:n,className:r,defaultChecked:i,"aria-labelledby":a,form:o,id:s,inputRef:c,name:l,nativeButton:u=!1,onCheckedChange:d,readOnly:f=!1,required:p=!1,disabled:m=!1,render:_,uncheckedValue:v,value:y,style:x,...S}=e,{clearErrors:C}=vD(),{state:w,setTouched:T,setDirty:E,validityData:D,setFilled:O,setFocused:k,validationMode:A,disabled:j,name:M,validation:N}=hD(),{labelId:P}=bD(),F=j||m,I=M??l,L=g.useRef(null),R=ur(L,c,N.inputRef),z=g.useRef(null),B=jd(),V=wD({id:s}),H=u?void 0:V,[ee,te]=qp({controlled:n,default:!!i,name:`Switch`,state:`checked`});gD(z,B,ee,void 0,!F,l),b(()=>{O(ee)},[ee,O]),Cf(ee,()=>{C(I),E(ee!==D.initialValue),N.change(ee)});let{getButtonProps:U,buttonRef:W}=ia({disabled:F,native:u}),ne=xD(a,P,L,!u,H),re={id:u?V:B,role:`switch`,"aria-checked":ee,"aria-readonly":f||void 0,"aria-required":p||void 0,"aria-labelledby":ne,onFocus(){F||k(!0)},onBlur(){let e=L.current;e&&!F&&(T(!0),k(!1),A===`onBlur`&&N.commit(e.checked))},onClick(e){if(f||F)return;e.preventDefault();let t=L.current;t&&ra(t,e)}},G={...N.getValidationProps(F),checked:ee,disabled:F,form:o,id:H,name:I,required:p,style:I?cr:sr,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,ref:R,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(f){e.preventDefault();return}let t=e.currentTarget.checked,n=wa(la,e.nativeEvent);d?.(t,n),!n.isCanceled&&te(t)},onClick(e){e.stopPropagation()},onFocus(){z.current?.focus()},...y===void 0?h:{value:y}},K=g.useMemo(()=>({...w,checked:ee,disabled:F,readOnly:f,required:p}),[w,ee,F,f,p]),ie=Ir(`span`,e,{state:K,ref:[t,z,W],props:[re,S,U,e=>N.getValidationProps(F,e)],stateAttributesMapping:fD});return(0,X.jsxs)(rD.Provider,{value:K,children:[ie,!ee&&I&&v!==void 0&&(0,X.jsx)(`input`,{type:`hidden`,form:o,name:I,value:v,disabled:F}),(0,X.jsx)(`input`,{...G,suppressHydrationWarning:!0})]})}),ED=g.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e;return Ir(`span`,e,{state:iD(),ref:t,stateAttributesMapping:fD,props:a})}),DD={sm:{root:`h-4 w-7.5`,thumb:`size-3`,thumbWidthKeyframes:[`0.75rem`,`1.25rem`,`0.75rem`],thumbXKeyframes:[0,`0.3125rem`,`0.875rem`],check:`size-2.5`},md:{root:`h-5 w-9.5`,thumb:`size-4`,thumbWidthKeyframes:[`1rem`,`1.6875rem`,`1rem`],thumbXKeyframes:[0,`0.4375rem`,`1.125rem`],check:`size-3`},lg:{root:`h-6 w-11.5`,thumb:`size-5`,thumbWidthKeyframes:[`1.25rem`,`2.125rem`,`1.25rem`],thumbXKeyframes:[0,`0.5rem`,`1.375rem`],check:`size-4`}},OD={duration:.25,ease:[.4,0,.2,1]};function kD(e,t){return t===1?[...e]:e.map(e=>typeof e==`number`?-e:`-${e}`)}function AD({renderProps:e,state:t,dirSign:n,sizeConfig:r,reduced:i}){let{checked:a}=t,{ref:o,onDrag:s,onDragStart:c,onDragEnd:l,onAnimationStart:u,onAnimationEnd:d,...f}=e,p=g.useMemo(()=>{let e=kD(r.thumbXKeyframes,n);return a?e:e.reverse()},[a,n,r]),m=p[p.length-1],[h,_]=uE(),v=Eu(o,h),y=g.useRef(a);return g.useEffect(()=>{let e=y.current!==a;y.current=a,e&&!i?_(h.current,{x:p,width:r.thumbWidthKeyframes},OD):_(h.current,{x:m},{duration:0})},[a,r,_,h,i,p,m]),(0,X.jsx)(dE.span,{...f,ref:v,initial:{x:m},children:(0,X.jsx)(dE.svg,{className:Q(`text-foreground-intense`,r.check),xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 12 12`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,style:{strokeDasharray:12},initial:!1,animate:{strokeDashoffset:a?0:12},transition:i?{duration:0}:{strokeDashoffset:{duration:a?.3:0,ease:`easeOut`,delay:a?.25:0}},children:(0,X.jsx)(`path`,{d:`M3 6l2 2 4-4`})})})}function jD({className:e,size:t=`md`,...n}){let r=kc()===`rtl`?-1:1,i=DD[t],a=pg(),o=n[`aria-invalid`],s=o===!0||o===`true`;return(0,X.jsx)(Dw,{features:MT,strict:!0,children:(0,X.jsx)(TD,{"data-slot":`switch`,className:Q(`bg-background-strong outline-ring flex shrink-0 rounded-full border border-transparent p-px outline-offset-1`,i.root,`transition-background duration-200 motion-reduce:transition-none`,`data-checked:bg-primary data-checked:outline-ring-primary`,`data-disabled:not-data-checked:border-border-strong data-disabled:opacity-disabled data-disabled:cursor-not-allowed data-disabled:not-data-checked:border-dashed`,`data-invalid:border-error data-invalid:not-data-checked:bg-error-subtle data-invalid:outline-ring-error`,e),...n,...s?{"data-invalid":``}:{},children:(0,X.jsx)(ED,{"data-slot":`switch-thumb`,className:Q(`group flex items-center justify-center rounded-full bg-white shadow-2xs`,i.thumb,`data-checked:bg-primary-foreground`),render:(e,t)=>(0,X.jsx)(AD,{renderProps:e,state:t,dirSign:r,sizeConfig:i,reduced:a})})})})}function MD({tone:e}){return(0,X.jsx)(`span`,{className:Ig(`inline-block size-2 shrink-0 rounded-full`,Lg[e]),"aria-hidden":!0})}function ND({label:e,tone:t,mono:n,children:r}){return(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2 last:border-b-0`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:e}),(0,X.jsx)(`dd`,{className:Ig(`min-w-0 text-right text-sm break-all`,n?`font-mono text-xs text-foreground-strong`:`text-foreground`,t&&Rg[t]),children:r})]})}function PD({children:e}){return(0,X.jsx)(`dl`,{className:`mt-1`,children:e})}function FD({tone:e,text:t,detail:n}){return(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2`,children:[(0,X.jsx)(MD,{tone:e}),(0,X.jsx)(`span`,{children:t}),n?(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:n}):null]})}function ID({status:e,busy:t,onToggle:n}){let r=e.tunnel,i=e.enabled;return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsx)(nD,{children:$(`panel.connection.state`)})}),(0,X.jsxs)(`label`,{className:`flex items-center justify-between gap-4 border-b border-border-muted py-3`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-muted`,children:$(`panel.connection.remoteControl`)}),(0,X.jsx)(jD,{size:`md`,checked:i,disabled:t!==``,onCheckedChange:e=>n(e),"aria-label":$(`panel.connection.remoteControl`)})]}),(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.connection.deviceName`),children:e.name||`—`}),(0,X.jsx)(ND,{label:$(`panel.connection.instanceId`),mono:!0,children:e.instanceId||`—`}),(0,X.jsxs)(ND,{label:$(`panel.connection.platform`),children:[e.platform,` `,e.osVersion,` · `,e.arch]}),(0,X.jsx)(ND,{label:$(`panel.connection.tunnel`),tone:Bg(r.state),...r.state===`error`&&r.error?{"data-error":r.error}:{},children:(0,X.jsx)(FD,{tone:Bg(r.state),text:Vg(r.state),...r.error?{detail:r.error}:{}})}),(0,X.jsx)(ND,{label:$(`panel.connection.sidecar`),children:(0,X.jsx)(FD,{tone:e.sidecar.state===`healthy`?`ok`:`warn`,text:Wg(e.sidecar.state),...e.sidecar.restarts>0?{detail:$(`panel.connection.sidecarRestarts`,{count:e.sidecar.restarts})}:{}})}),(0,X.jsx)(ND,{label:$(`panel.connection.mirror`),children:(0,X.jsx)(FD,{tone:e.mirror.ok?`ok`:e.mirror.error?`error`:`warn`,text:e.mirror.ok?$(`panel.connection.mirrorOk`):$(`panel.connection.mirrorOff`),detail:zg(e.mirror.pushedAt)})})]}),(0,X.jsx)(LD,{status:e})]})}function LD({status:e}){let t=e.tunnel.admissionHint;return t?t===`register-secret`?(0,X.jsxs)(BE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.connection.relayNeedsSecret`)}),(0,X.jsx)(WE,{children:$(`panel.connection.relayNeedsSecretBody`)})]}):(0,X.jsxs)(BE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.connection.relayRejected`)}),(0,X.jsx)(WE,{children:$(`panel.connection.relayRejectedBody`)})]}):null}function RD(e){return vf(`alert-dialog`,e)}var zD=class extends Df{};function BD(){return new zD}var VD=Object.assign(function(e){return(0,X.jsx)(RD,{...e})},{createHandle:BD});function HD({className:e,children:t,backdrop:n=!0,frame:r=!0,backdropProps:i,viewportProps:a,...o}){let{portal:s,popup:c}=Af(o),l=i?.forceRender===!0,u=r&&n;return(0,X.jsxs)(Qd,{...s,children:[n&&(0,X.jsx)(kd,{"data-slot":`alert-dialog-backdrop`,...i,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`motion-safe:transition-opacity motion-safe:duration-250 motion-safe:ease-out`,`data-ending-style:motion-safe:opacity-0 data-starting-style:motion-safe:opacity-0`,i?.className)}),(0,X.jsx)(bf,{"data-slot":`alert-dialog-viewport`,...a,className:Q(`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,a?.className),children:(0,X.jsx)(Xd,{"data-slot":`alert-dialog-popup`,...u?{"data-frame":``}:{},className:Q(`group/alert-dialog-popup relative flex max-h-full min-h-0 w-100 max-w-full flex-col`,`rounded-2xl border`,u?Q(`border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`,!l&&`data-nested:border-border-overlay data-nested:bg-background data-nested:p-0 data-nested:shadow-2xl data-nested:backdrop-blur-none`):`bg-background border-border-overlay`,!u&&`shadow-2xl`,`isolate transform-gpu outline-none`,`motion-safe:transition-[opacity,scale] motion-safe:duration-250 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-95 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,e),...c,children:(0,X.jsx)(`div`,{"data-slot":`alert-dialog-content`,className:Q(`flex min-h-0 flex-col overflow-hidden not-has-[>[data-slot=alert-dialog-footer]]:pb-6 not-has-[>[data-slot=alert-dialog-header]]:pt-6 [&>[data-slot=alert-dialog-header]+[data-slot=alert-dialog-footer]]:pt-0`,u&&Q(`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`,!l&&`group-data-nested/alert-dialog-popup:rounded-none group-data-nested/alert-dialog-popup:bg-transparent`)),children:t})})})]})}function UD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function WD({className:e,...t}){return(0,X.jsx)(xf,{"data-slot":`alert-dialog-title`,className:Q(`text-foreground-intense text-xl font-semibold`,e),...t})}function GD({className:e,...t}){return(0,X.jsx)(Md,{"data-slot":`alert-dialog-description`,className:Q(`text-foreground-muted text-sm`,e),...t})}function KD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-body`,className:Q(`min-h-0 flex-1 px-6`,e),...t})}function qD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:Q(`flex flex-col-reverse gap-2 p-6 sm:flex-row sm:justify-end`,e),...t})}var JD=class extends Error{code;status;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.status=n}};async function YD(e){let t=null;try{t=await e.json()}catch{t=null}let n=t?.error;if(typeof n==`string`&&n)return new JD(n,`http_${e.status}`,e.status);if(n&&typeof n==`object`){let t=n,r=typeof t.code==`string`&&t.code?t.code:`http_${e.status}`;return new JD(typeof t.message==`string`&&t.message?t.message:$(`panel.net.requestFailed`,{status:e.status}),r,e.status)}return new JD($(`panel.net.requestFailed`,{status:e.status}),`http_${e.status}`,e.status)}async function XD(e){let t=await fetch(e,{headers:{accept:`application/json`}});if(!t.ok)throw await YD(t);return await t.json()}async function ZD(e,t){let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw await YD(n);return await n.json()}function QD(e){return e instanceof JD?e.message:e instanceof Error?e.message||$(`panel.net.requestFailedNoStatus`):String(e)}var $D={ok:4e3,soft:6e3,error:9e3};function eO(){let e=(0,g.useRef)(Zu());return e.current=Zu(),(0,g.useCallback)((t,n)=>{e.current.add({title:n,type:t,timeout:$D[t],priority:t===`error`?`high`:`low`})},[])}function tO(e,t){if(!e)return``;let n=Math.max(0,t-e);if(n<6e4)return $(`panel.devices.justNow`);let r=Math.floor(n/6e4);if(r<60)return $(`panel.devices.minutesAgo`,{count:r});let i=Math.floor(r/60);return i<24?$(`panel.devices.hoursAgo`,{count:i}):$(`panel.devices.daysAgo`,{count:Math.floor(i/24)})}function nO(e,t){return e?rO(e,t)?$(`panel.devices.online`):tO(e,t):$(`panel.devices.noRecord`)}function rO(e,t){return e>0&&t-e<=3e5}function iO(e){return{ios:`iOS`,android:`Android`,linux:`Linux`,darwin:`macOS`,win32:`Windows`}[e]??(e||$(`panel.devices.unknownPlatform`))}function aO(e){return $(e===`relay`?`panel.devices.channelRelay`:e===`lan`?`panel.devices.channelLan`:`panel.devices.channelUnknown`)}function oO({onRevokeAll:e,busy:t}){let n=eO(),[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(null),[s,c]=(0,g.useState)(!1),l=(0,g.useCallback)(async()=>{try{i(await XD(`/api/relay/devices`))}catch{}},[]);(0,g.useEffect)(()=>{let e=()=>{document.hidden||l()};e();let t=window.setInterval(e,3e3);return document.addEventListener(`visibilitychange`,e),()=>{window.clearInterval(t),document.removeEventListener(`visibilitychange`,e)}},[l]);let u=r?.devices??[],d=r?.serverNow??0,f=e=>{let t=e?.model||e?.name||$(`panel.devices.unknown`);return e?.suffix?`${t} · ${e.suffix}`:t};async function p(e){c(!0);try{let t=await ZD(`/api/relay/devices/revoke`,{deviceId:e.deviceId});o(null),await l(),n(`soft`,$(t.closed>0?`panel.devices.unbindDoneClosed`:`panel.devices.unbindDone`,{name:f(e),count:t.revoked,closed:t.closed}))}catch(e){n(`error`,$(`panel.devices.unbindFailed`,{message:QD(e)}))}finally{c(!1)}}return u.length===0?null:(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsxs)(nD,{className:`flex flex-wrap items-center justify-between gap-x-2 gap-y-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[$(`panel.devices.title`),(0,X.jsx)(JE,{variant:`secondary`,size:`sm`,children:u.length})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t!==``,onClick:e,children:$(`panel.pairing.revokeAll`)})]})}),(0,X.jsx)(`div`,{className:`mt-1`,children:u.map(e=>{let t=rO(e.lastSeenAt,d);return(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b border-border-muted py-3 last:border-b-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-strong`,children:f(e)}),e.legacy?(0,X.jsx)(JE,{variant:`warning`,size:`xs`,children:$(`panel.devices.legacy`)}):null,e.bindings>1?(0,X.jsx)(JE,{variant:`secondary`,size:`xs`,children:$(`panel.devices.extraBindings`,{count:e.bindings-1})}):null,(0,X.jsxs)(`span`,{className:`text-xs text-foreground-muted`,children:[iO(e.platform),e.osVersion?` ${e.osVersion}`:``,e.appVersion?$(`panel.devices.appVersion`,{version:e.appVersion}):``]})]}),(0,X.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-foreground-muted`,children:[(0,X.jsx)(`span`,{children:$(`panel.devices.boundAt`,{time:tO(e.boundAt,d)||`—`})}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[t?(0,X.jsx)(MD,{tone:`ok`}):null,nO(e.lastSeenAt,d)]}),(0,X.jsx)(`span`,{children:aO(e.lastChannel)}),(0,X.jsx)(`span`,{children:e.encrypted?$(`panel.devices.encrypted`):$(`panel.devices.plain`)})]})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,onClick:()=>o(e),children:$(`panel.devices.unbind`)})]},e.deviceId)})}),(0,X.jsx)(VD,{open:a!==null,onOpenChange:e=>{!e&&!s&&o(null)},children:(0,X.jsxs)(HD,{children:[(0,X.jsx)(UD,{children:(0,X.jsx)(WD,{children:$(`panel.devices.unbindTitle`)})}),(0,X.jsxs)(KD,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)(GD,{children:$(`panel.devices.unbindConfirm`,{name:f(a)})}),(0,X.jsx)(`p`,{className:`text-foreground-muted`,children:$(a?.legacy?`panel.devices.effectLegacy`:`panel.devices.effectIdentity`)})]}),(0,X.jsxs)(qD,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:s,onClick:()=>o(null),children:$(`panel.devices.cancel`)}),(0,X.jsx)(Bf,{variant:`destructive`,disabled:s,onClick:()=>{a&&p(a)},children:s?(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,X.jsx)(ME,{}),$(`panel.devices.unbinding`)]}):$(`panel.devices.unbind`)})]})]})})]})}var sO=`https://github.com/WNLUO/dsh-mobile-server`;function cO(){return[$(`panel.notice.promptIntro`),``,`${$(`panel.notice.promptRepo`)}: ${sO}`,``,$(`panel.notice.promptAsk`),``,$(`panel.notice.promptDo`),``,$(`panel.notice.promptAfter`),``,$(`panel.notice.promptStyle`)].join(`
24
- `)}function lO({title:e,summary:t,children:n}){return(0,X.jsxs)(`details`,{className:`group rounded-lg border border-border-muted bg-background-muted`,children:[(0,X.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-0.5 px-3 py-2.5 marker:content-none`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-semibold text-foreground-strong`,children:[(0,X.jsx)(`svg`,{viewBox:`0 0 12 12`,className:`size-3 shrink-0 text-foreground-muted transition-transform group-open:rotate-90`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`m4.5 2.5 3.5 3.5-3.5 3.5`})}),e]}),(0,X.jsx)(`span`,{className:`pl-5 text-xs leading-5 text-foreground-muted`,children:t})]}),(0,X.jsx)(`div`,{className:`flex flex-col gap-2.5 border-t border-border-muted px-3 py-3`,children:n})]})}function uO({lines:e}){return(0,X.jsx)(`pre`,{className:`overflow-x-auto rounded bg-background-subtle px-2.5 py-2 font-mono text-[11px] leading-5 break-words whitespace-pre-wrap text-foreground-strong`,children:e.join(`
25
- `)})}function dO({open:e,onOpenChange:t,port:n}){let r=(0,g.useRef)(null),[i,a]=(0,g.useState)(!1);async function o(){try{await navigator.clipboard.writeText(cO()),a(!0),window.setTimeout(()=>a(!1),2e3)}catch{a(!1)}}return(0,X.jsx)(jf,{open:e,onOpenChange:e=>{e||a(!1),t(e)},children:(0,X.jsxs)(Mf,{className:`w-[min(860px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),initialFocus:r,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.notice.setupGuideTitle`)})}),(0,X.jsx)(`div`,{ref:r,tabIndex:-1,className:`flex min-h-0 flex-col outline-none`,children:(0,X.jsxs)(Ff,{className:`flex flex-col gap-3 overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:[(0,X.jsxs)(lO,{title:$(`panel.notice.guideRelayTitle`),summary:$(`panel.notice.guideRelaySummary`),children:[(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideRelayReady`)}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideRelayCopyHint`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,onClick:()=>void o(),children:$(`panel.notice.guideRelayCopy`)}),i?(0,X.jsx)(`span`,{className:`text-xs text-success`,children:$(`panel.notice.guideRelayCopied`)}):null]}),(0,X.jsx)(`p`,{className:`rounded-md border border-border-muted bg-background px-2.5 py-2 text-xs leading-5 text-warning`,children:$(`panel.notice.guideRelayWarn`)})]}),(0,X.jsxs)(lO,{title:$(`panel.notice.guideTunnelTitle`),summary:$(`panel.notice.guideTunnelSummary`),children:[(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelOS`)}),(0,X.jsx)(uO,{lines:[`# macOS`,`brew install cloudflared`,`# Linux`,`curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared`,`chmod +x cloudflared && sudo mv cloudflared /usr/local/bin/`,`# Windows (PowerShell)`,`winget install --id Cloudflare.cloudflared`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelTry`)}),(0,X.jsx)(uO,{lines:[`cloudflared tunnel --url http://127.0.0.1:${n}`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelFixed`)}),(0,X.jsx)(uO,{lines:[`cloudflared tunnel login`,`cloudflared tunnel create dsh`,`cloudflared tunnel route dns dsh dsh.example.com`,`cloudflared tunnel run --url http://127.0.0.1:${n} dsh`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideTunnelFill`)}),(0,X.jsx)(`p`,{className:`mt-1 border-t border-border-muted pt-3 text-sm font-semibold text-foreground-strong`,children:$(`panel.notice.guideTailscaleTitle`)}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTailscaleInstall`)}),(0,X.jsx)(uO,{lines:[`# macOS`,`brew install tailscale`,`# Linux`,`curl -fsSL https://tailscale.com/install.sh | sh`,`# Windows`,`winget install --id Tailscale.Tailscale`,`sudo tailscale up`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTailscaleServe`)}),(0,X.jsx)(uO,{lines:[`tailscale serve --bg http://127.0.0.1:${n}`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideTailscaleFill`)})]})]})})]})})}var fO=`0.4.9`;function pO({lanPort:e}){let[t,n]=(0,g.useState)(!1);return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{style:{paddingBottom:`0.5rem`},children:(0,X.jsx)(nD,{children:$(`panel.notice.title`)})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-3 px-4 pb-4`,children:[(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-muted`,children:$(`panel.notice.versionLabel`)}),(0,X.jsx)(JE,{variant:`warning`,size:`sm`,children:`≥ ${fO}`})]}),(0,X.jsxs)(`p`,{className:`flex items-start gap-2 text-sm leading-5 text-foreground-muted`,children:[(0,X.jsx)(`span`,{className:`flex h-5 shrink-0 items-center`,children:(0,X.jsx)(MD,{tone:`warn`})}),(0,X.jsx)(`span`,{className:`min-w-0`,children:$(`panel.notice.effective`)})]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.body`,{version:fO})})]}),(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5 border-t border-border-muted pt-3`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1`,children:[(0,X.jsx)(`h3`,{className:`text-sm font-medium text-foreground-strong`,children:$(`panel.notice.selfHostTitle`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:()=>n(!0),children:$(`panel.notice.selfHostAction`)})]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.selfHostBody`)})]})]}),(0,X.jsx)(dO,{open:t,onOpenChange:n,port:e})]})}var mO=g.createContext(void 0);function hO(e=!1){let t=g.useContext(mO);if(!t&&!e)throw Error(S(86));return t}var gO=function(e){let t=jd(),[n,r]=g.useState(t),[i,a]=g.useState(),[o,s]=g.useState([]),c=n===void 0?t:n,l=y(()=>new Map),{messageIds:u}=bD(),d=G((e,t)=>{let n=l.current;t===void 0?n.delete(e):n.set(e,t),r(e=>{if(n.size===0)return e;let t;for(let r of n.values()){if(r===e)return e;t===void 0&&(t=r)}return t})}),f=G(()=>{l.current.size===0&&r(t)}),p=g.useCallback(e=>{let t=e[`aria-describedby`]?e[`aria-describedby`].split(` `):[];return t.push(...u,...o),{...e,"aria-describedby":Array.from(new Set(t)).join(` `)||void 0}},[u,o]),m=g.useMemo(()=>({controlId:c,registerControlId:d,resetControlId:f,labelId:i,setLabelId:a,messageIds:o,setMessageIds:s,getDescriptionProps:p}),[c,d,f,i,a,o,s,p]);return(0,X.jsx)(yD.Provider,{value:m,children:e.children})};function _O(e,t){let n=jd(e);return b(()=>(t(n),()=>{t(e=>e===n?void 0:e)}),[n,t]),n}function vO(e={}){let{id:t,fallbackControlId:n,native:r=!1,setLabelId:i,focusControl:a}=e,{controlId:o,setLabelId:s}=bD(),c=_O(t,G(e=>{s(e),i?.(e)})),l=o??n;function u(e){if(a){a(e,l);return}if(!l)return;let t=Me(e.currentTarget).getElementById(l);fe(t)&&yO(t)}function d(e){at(e.nativeEvent)?.closest(`button,input,select,textarea`)||(!e.defaultPrevented&&e.detail>1&&e.preventDefault(),!r&&u(e))}return r?{id:c,htmlFor:l,onMouseDown:d}:{id:c,onClick:d,onPointerDown(e){e.preventDefault()}}}function yO(e){e.focus({focusVisible:!0})}function bO(e,t){return{...e,state:{...e.state,valid:!t&&e.state.valid}}}var xO=Object.keys(sD);function SO(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t||e.form===null&&!e.hasAttribute(`form`)}function CO(e,t){let n=null;for(let r of e.keys())if(SO(r,t)){if(!r.validity.valid)return r;n??=r}return n}function wO(e){return{...sD,valid:!e,customError:e}}function TO(e){return e&&e.validationMessage?[e.validationMessage]:[]}function EO(e){let{elementRef:t,formRef:n}=vD(),{setValidityData:r,validate:i,validityData:a,validationDebounceTime:o,invalid:s,markedDirtyRef:c,state:l,shouldValidateOnChange:u,validationMode:d,registeredFieldIdRef:f}=e,{controlId:p,getDescriptionProps:m}=bD(),_=Be(),v=g.useRef(null),b=y(()=>new Map).current,x=g.useRef(0),S=g.useRef(null),C=g.useCallback((e,t)=>(b.set(e,t),()=>{b.delete(e)}),[b]),w=G(()=>{let e=CO(b,t.current);return e&&b.get(e)?.controlRef.current||null}),T=G(async(e,o=!1)=>{x.current+=1;let m=x.current;function h(e,t=s){let r=f.current??p;if(r==null)return;let i=n.current.fields.get(r);if(!i)return;let a=bO(e,t);n.current.fields.set(r,{...i,validityData:a})}function g(t,n){let r=t.valid===!1?n:[];return{value:e,state:t,error:r[0]??``,errors:r,initialValue:a.initialValue}}function y(e,t){let n=e.validity.customError?e.validationMessage:``,r=t.replace(/\r\n?/g,`
26
- `);e.setCustomValidity(r),S.current=[e,r,n]}function C(){let e=S.current;S.current=null,e&&(!e[0].willValidate||e[0].validationMessage===e[1])&&e[0].setCustomValidity(e[2])}function w(e,t,n){let i=g(e,t);h(i,n),r(i)}function T(e){let t=xO.reduce((t,n)=>(t[n]=e.validity[n],t),{}),n=!1;for(let e of xO)if(e!==`valid`){if(e===`valueMissing`&&t[e])n=!0;else if(t[e])return t}return n&&!c.current&&(t.valid=!0,t.valueMissing=!1),t}function E(){return b.size>0?CO(b,t.current):v.current}let D=E();function O(){return D=E(),D?.willValidate?T(D):wO(!1)}if(o){if(l.valid!==!1||!D)return;if(!D.validity.valueMissing){C();let e=E(),t=e?.validity.customError?TO(e):[];w(wO(t.length>0),t,!1);return}for(let e of xO)if(e!==`valid`&&e!==`valueMissing`&&e!==`customError`&&D.validity[e])return}_.clear(),C();let k=O(),A=TO(D),j=u();if(A.length===0||j){let t=Array.from(n.current.fields.values()).reduce((e,t)=>(t.name&&(e[t.name]=t.getValue()),e),{}),r=i(e,t),o;if(typeof r==`object`&&r&&`then`in r){if(k.valid===!1?w(k,A):(d===`onSubmit`||!a.state.customError)&&(k.valid=null,w(k,A)),o=await r,m!==x.current)return;k=O()}else o=r;A=o?[].concat(o).filter(Boolean):[],A.length>0?(k.valid=!1,k.customError=!0,D?.willValidate&&y(D,A.join(`
27
- `))):A=TO(D)}w(k,A)}),E=G((e,t=!1)=>{if(_.clear(),x.current+=1,t)return;let n=u();n&&e!==``&&o?_.start(o,()=>{T(e)}):T(e,!n)}),D=g.useCallback((e,t={})=>Sr(m(t),l.valid===!1&&!l.disabled&&!e?{"aria-invalid":!0}:h),[m,l.disabled,l.valid]);return g.useMemo(()=>({getValidationProps:D,inputRef:v,registeredInputs:b,registerInput:C,getInputControl:w,commit:T,change:E}),[D,b,C,w,T,E])}function DO(e){let{change:t,commit:n,invalid:r,markedDirtyRef:i,name:a,setRegisteredFieldName:o,registeredFieldIdRef:s,setValidityData:c,validityData:l}=e,{formRef:u}=vD(),d=g.useRef(null),f=g.useRef(null),p=g.useRef(!1),m=G(()=>{let e=f.current;if(e)return e.getValue?e.getValue():e.value});function h(e){return e.value===void 0?m():e.value}let _=G(()=>{let e=f.current;if(i.current=!0,!e){n(l.value);return}n(h(e))});function v(){let e=f.current;e&&e.id&&u.current.fields.set(e.id,{getValue:m,name:a??e.name,controlRef:e.controlRef,validityData:bO(l,r),validate:_})}function y(e=f.current?.id){e&&u.current.fields.delete(e)}function x(e){if(p.current)return;p.current=!0;let t=h(e);c(e=>e.initialValue===t?e:{...e,initialValue:t})}return b(()=>{let e=f.current;e&&e.id&&(o(a?void 0:e.name),u.current.fields.set(e.id,{getValue:m,name:a??e.name,controlRef:e.controlRef,validityData:bO(l,r),validate:_}))},[u,m,r,a,o,_,l]),b(()=>{let e=u.current.fields;return()=>{let t=f.current?.id;t&&e.delete(t)}},[u]),[_,G((e,n)=>{if(!n){d.current===e&&(d.current=null,t(void 0,!0),y(),f.current=null,o(void 0),s.current=void 0);return}let r=f.current?.id,i=d.current;i&&i!==e&&t(void 0,!0),d.current=e,f.current=n,a||o(n.name),s.current=n.id,r&&r!==n.id&&y(r),x(n),v()})]}var OO=g.forwardRef(function(e,t){let{errors:n,validationMode:r,submitCountRef:i}=vD(),{render:a,className:o,validate:s,validationDebounceTime:c=0,validationMode:l=r,name:u,disabled:d=!1,invalid:f,dirty:p,touched:m,actionsRef:h,style:_,...v}=e,y=hO(!0)?.disabled,x=G(s||(()=>null)),S=y||d,[C,w]=g.useState(!1),[T,E]=g.useState(!1),[D,O]=g.useState(!1),[k,A]=g.useState(!1),j=p??T,M=m??C,N=g.useRef(j),P=g.useRef(void 0),[F,I]=g.useState(),L=u??F;b(()=>{p!==void 0&&(N.current=p)},[p]);let R=G(e=>{p===void 0&&(e&&(N.current=!0),E(e))}),z=G(e=>{m===void 0&&w(e)}),B=G(()=>l===`onChange`||l===`onSubmit`&&i.current>0),V=L&&Object.hasOwn(n,L)?n[L]:null,H=!!(Array.isArray(V)?V.length:V),ee=f===!0||H,[te,U]=g.useState({state:sD,error:``,errors:[],value:null,initialValue:null}),W=!ee&&(S?null:te.state.valid),ne=g.useMemo(()=>({disabled:S,touched:M,dirty:j,valid:W,filled:D,focused:k}),[S,M,j,W,D,k]),re=EO({setValidityData:U,validate:x,validityData:te,validationDebounceTime:c,invalid:ee,markedDirtyRef:N,state:ne,shouldValidateOnChange:B,validationMode:l,registeredFieldIdRef:P}),[K,ie]=DO({change:re.change,commit:re.commit,invalid:ee,markedDirtyRef:N,name:u,setRegisteredFieldName:I,registeredFieldIdRef:P,setValidityData:U,validityData:te});g.useImperativeHandle(h,()=>({validate:K}),[K]);let ae=g.useMemo(()=>({invalid:ee,name:L,validityData:te,setValidityData:U,disabled:S,setTouched:z,setDirty:R,setFilled:O,setFocused:A,validationMode:l,shouldValidateOnChange:B,state:ne,registerFieldControl:ie,validation:re}),[ee,L,te,S,z,R,O,A,l,B,ne,ie,re]),oe=Ir(`div`,e,{ref:t,state:ne,props:v,stateAttributesMapping:lD});return(0,X.jsx)(mD.Provider,{value:ae,children:oe})}),kO=g.forwardRef(function(e,t){return(0,X.jsx)(gO,{children:(0,X.jsx)(OO,{...e,ref:t})})}),AO=g.createContext({disabled:!1});function jO(){return g.useContext(AO)}var MO=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,nativeLabel:o=!0,...s}=e,c=hD(!1),l=jO(),{labelId:u}=bD(),d={...c.state,disabled:c.disabled||l.disabled},f=g.useRef(null),p=vO({id:u??a,native:o});return Ir(`label`,e,{ref:[t,f],state:d,props:[p,s],stateAttributesMapping:lD})}),NO=g.forwardRef(function(e,t){let{render:n,className:r,id:i,name:a,value:o,disabled:s=!1,onValueChange:c,defaultValue:l,autoFocus:u=!1,style:d,...f}=e,{state:p,name:m,disabled:h,setTouched:_,setDirty:v,validityData:y,setFocused:x,setFilled:S,validationMode:C,validation:w}=hD(),{clearErrors:T,elementRef:E,submitCountRef:D}=vD(),O=h||s,k=m??a,A={...p,disabled:O},{labelId:j}=bD(),M=wD({id:i}),[N]=qp({controlled:o,default:l,name:`FieldControl`,state:`value`}),P=o!==void 0,F=P?N:void 0,I=F==null?void 0:String(F),L=G(()=>w.inputRef.current?.value);gD(w.inputRef,M,I,L,!O,a),b(()=>{let e=I??w.inputRef.current?.value;e!==void 0&&S(e!==``)},[I,w.inputRef,S]),Cf(I,()=>{I!==void 0&&(T(k),v(I!==(y.initialValue??``)),w.change(I))});let R=g.useRef(null),z=Be();return b(()=>{u&&R.current===it(Me(R.current))&&x(!0)},[u,x]),Ir(`input`,e,{ref:[t,R],state:A,props:[{id:M,disabled:O,name:k,ref:w.inputRef,"aria-labelledby":j,autoFocus:u,...P?{value:F}:{defaultValue:l},onChange(e){let t=e.currentTarget.value,n=wa(la,e.nativeEvent);c?.(t,n),!P&&(v(t!==(y.initialValue??``)),S(t!==``),!e.nativeEvent.defaultPrevented&&!n.isCanceled&&(T(k),w.change(t)))},onFocus(){x(!0)},onBlur(e){if(_(!0),x(!1),C===`onBlur`){let t=e.currentTarget.value;w.commit(t),P&&queueMicrotask(()=>{let e=w.inputRef.current?.value;e!==void 0&&e!==t&&e!==(y.initialValue??``)&&w.commit(e)})}},onKeyDown(e){if(e.currentTarget.tagName===`INPUT`&&e.key===`Enter`){_(!0);let t=e.currentTarget.value,n=e.currentTarget.form;if(n&&n===E.current&&!e.defaultPrevented){let t=e.currentTarget,n=D.current;z.start(0,()=>{D.current===n&&w.commit(t.value)})}else w.commit(t)}}},f,e=>w.getValidationProps(O,e)],stateAttributesMapping:lD})});function PO({className:e,...t}){return(0,X.jsx)(kO,{"data-slot":`field`,className:Q(e),...t})}function FO({className:e,...t}){return(0,X.jsx)(MO,{"data-slot":`field-label`,className:Q(`text-foreground-intense mb-1.5 flex w-fit items-center text-sm font-medium select-none`,`data-disabled:opacity-disabled`,e),...t})}var IO=g.forwardRef(function(e,t){return(0,X.jsx)(NO,{ref:t,...e})}),LO=Au(`w-full border text-foreground outline-none transition-[background-color,border-color,box-shadow] duration-200 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{outline:`bg-background border-border-strong hover:not-focus:not-focus-visible:not-has-focus:not-has-focus-visible:not-data-popup-open:not-has-data-popup-open:not-data-pressed:not-has-data-pressed:not-data-invalid:not-has-data-invalid:border-border-emphasis`,soft:`bg-background-muted border-transparent hover:not-focus:not-focus-visible:not-has-focus:not-has-focus-visible:not-data-popup-open:not-has-data-popup-open:not-data-pressed:not-has-data-pressed:not-data-invalid:not-has-data-invalid:border-border-strong`},size:{sm:`h-8 px-3 text-xs pointer-coarse:text-base rounded-sm gap-1.5 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,md:`h-10 px-3.5 text-sm pointer-coarse:text-base rounded-md gap-2 [&_svg:not([class*='size-'])]:size-4.5 [&_svg:not([class*='stroke-'])]:stroke-[1.65]`,lg:`h-12 px-4 text-base rounded-lg gap-2 [&_svg:not([class*='size-'])]:size-5 [&_svg:not([class*='stroke-'])]:stroke-[1.65]`},state:{self:Q(`focus-visible:ring-3 focus-visible:ring-ring-input focus-visible:border-transparent focus-visible:bg-background`,`data-popup-open:ring-3 data-popup-open:ring-ring-input data-popup-open:border-transparent data-popup-open:bg-background`,`data-pressed:ring-3 data-pressed:ring-ring-input data-pressed:border-transparent data-pressed:bg-background`,`data-invalid:bg-error-subtle data-invalid:border-error`,`data-invalid:focus-visible:border-transparent data-invalid:focus-visible:ring-ring-error data-invalid:focus-visible:bg-background`,`data-invalid:data-popup-open:border-transparent data-invalid:data-popup-open:ring-ring-error data-invalid:data-popup-open:bg-background`,`data-invalid:data-pressed:border-transparent data-invalid:data-pressed:ring-ring-error data-invalid:data-pressed:bg-background`,`data-disabled:border-border-strong! data-disabled:bg-background-subtle! data-disabled:cursor-not-allowed data-disabled:border-dashed data-disabled:opacity-disabled`),within:Q(`flex items-center`,`has-focus:ring-[3px] has-focus:ring-ring-input has-focus:border-transparent has-focus:bg-background`,`has-data-popup-open:ring-3 has-data-popup-open:ring-ring-input has-data-popup-open:border-transparent has-data-popup-open:bg-background`,`has-data-pressed:ring-3 has-data-pressed:ring-ring-input has-data-pressed:border-transparent has-data-pressed:bg-background`,`data-invalid:bg-error-subtle data-invalid:border-error data-invalid:has-focus:border-transparent data-invalid:has-focus:ring-ring-error data-invalid:has-focus:bg-background`,`data-invalid:has-data-popup-open:border-transparent data-invalid:has-data-popup-open:ring-ring-error data-invalid:has-data-popup-open:bg-background`,`data-invalid:has-data-pressed:border-transparent data-invalid:has-data-pressed:ring-ring-error data-invalid:has-data-pressed:bg-background`,`has-data-invalid:bg-error-subtle has-data-invalid:border-error has-data-invalid:has-focus:border-transparent has-data-invalid:has-focus:ring-ring-error has-data-invalid:has-focus:bg-background`,`has-data-invalid:has-data-popup-open:border-transparent has-data-invalid:has-data-popup-open:ring-ring-error has-data-invalid:has-data-popup-open:bg-background`,`has-data-invalid:has-data-pressed:border-transparent has-data-invalid:has-data-pressed:ring-ring-error has-data-invalid:has-data-pressed:bg-background`,`has-[input:disabled]:border-border-strong! has-[input:disabled]:bg-background-subtle! has-[input:disabled]:cursor-not-allowed has-[input:disabled]:border-dashed has-[input:disabled]:opacity-disabled`)}},defaultVariants:{variant:`outline`,size:`md`,state:`self`}});function RO(e,t){(Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`value`)?.set)?.call(e,t),e.dispatchEvent(new Event(`input`,{bubbles:!0}))}function zO({className:e,variant:t=`outline`,inputSize:n=`md`,clearable:r,startSlot:i,endSlot:a,onClear:o,inputProps:s,ref:c,...l}){let u=g.useRef(null),d=!!(r||i||a),f=l[`aria-invalid`],p=f===!0||f===`true`,m=Eu(c,u),h=()=>{u.current&&l.value===void 0&&RO(u.current,``),u.current?.focus(),o?.()};return d?(0,X.jsxs)(`div`,{"data-slot":`input-wrapper`,className:Q(LO({variant:t,size:n,state:`within`}),e),...p?{"data-invalid":``}:{},children:[i&&(0,X.jsx)(`div`,{"data-slot":`input-start`,className:`-ms-1 flex shrink-0 items-center`,children:i}),(0,X.jsx)(IO,{"data-slot":`input`,ref:m,placeholder:l.placeholder??` `,...s,className:Q(`peer text-foreground placeholder:text-foreground-subtle h-full min-w-0 flex-1 bg-transparent outline-none disabled:cursor-not-allowed`,s?.className),...l}),r&&(0,X.jsx)(`button`,{"data-slot":`input-clear`,type:`button`,onClick:h,className:`text-foreground-subtle hover:text-foreground pointer-events-none shrink-0 cursor-pointer opacity-0 transition-[opacity,color] duration-200 peer-not-placeholder-shown:pointer-events-auto peer-not-placeholder-shown:opacity-100`,tabIndex:-1,"aria-label":`Clear input`,children:(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`2 2 16 16`,fill:`currentColor`,className:`size-[1em]`,children:(0,X.jsx)(`path`,{d:`M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z`})})}),a&&(0,X.jsx)(`div`,{"data-slot":`input-end`,className:`-me-1 flex shrink-0 items-center`,children:a})]}):(0,X.jsx)(IO,{"data-slot":`input`,ref:m,...s,className:Q(LO({variant:t,size:n,state:`self`}),`placeholder:text-foreground-subtle`,s?.className,e),...l,...p?{"data-invalid":``}:{}})}var BO=1024,VO=65535;function HO({open:e,onOpenChange:t,port:n,busy:r,onSave:i}){let[a,o]=(0,g.useState)(String(n));(0,g.useEffect)(()=>{e&&o(String(n))},[e]);let s=a.trim(),c=Number(s),l=s!==``&&Number.isInteger(c)&&c>=BO&&c<=VO&&r===``;return(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-sm`,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.portTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(PO,{children:[(0,X.jsx)(FO,{htmlFor:`relay-lan-port`,children:$(`panel.pairing.port`)}),(0,X.jsx)(zO,{inputProps:{id:`relay-lan-port`,inputMode:`numeric`},value:a,onChange:e=>o(e.target.value)})]}),(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.pairing.portHint`)})]}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:r!==``,onClick:()=>t(!1),children:$(`panel.common.cancel`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:!l,onClick:()=>i(c),children:$(`panel.common.save`)})]})]})})}var UO=`data-checked`,WO=`data-unchecked`,GO={checked(e){return e?{[UO]:``}:{[WO]:``}},...gt,...lD},KO=`data-composite-item-active`,qO=g.createContext(void 0);function JO(){return g.useContext(qO)}function YO(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}var XO=g.createContext(void 0);function ZO(){let e=g.useContext(XO);if(e===void 0)throw Error(S(52));return e}var QO=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,readOnly:a=!1,required:o=!1,"aria-labelledby":s,value:c,inputRef:l,nativeButton:u=!1,id:d,style:f,...m}=e,_=JO(),{disabled:v,readOnly:y,required:x,form:S,checkedValue:C,touched:w=!1,validation:T,name:E,setCheckedValue:D=p,setTouched:O=p,registerInputRef:k=p}=_??{},{setTouched:A,setFilled:j,state:M,disabled:N}=hD(),P=jO(),{labelId:F,getDescriptionProps:I}=bD(),L=N||P.disabled||v||i,R=y||a,z=x||o,B=S,V=_?C===c:c===``,H=g.useRef(null),ee=g.useRef(null),te=T?.registerInput,U=ur(l,ee,k,g.useCallback(e=>te?.(e,{controlRef:H,value:void 0}),[te]));b(()=>{ee.current?.checked&&j(!0)},[j]),b(()=>{if(ee.current){if(L&&V){k(null);return}k(ee.current)}},[V,L,k]);let W=jd(),ne=wD({id:d}),re=u?void 0:ne,G={role:`radio`,"aria-checked":V,"aria-labelledby":xD(s,F,ee,!u,re),[KO]:V?``:void 0,id:u?ne:W,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||L||R)return;e.preventDefault();let t=ee.current;t&&ra(t,e)},onFocus(e){e.defaultPrevented||L||R||!w||(ee.current?.click(),O(!1))}},{getButtonProps:K,buttonRef:ie}=ia({disabled:L,native:u,composite:!1}),ae={type:`radio`,ref:U,form:B,id:re,name:E,tabIndex:-1,style:E?cr:sr,"aria-hidden":!0,...c===void 0?h:{value:YO(c)},disabled:L,checked:V,required:z,readOnly:R,onChange(e){if(e.nativeEvent.defaultPrevented||L||R||c===void 0)return;let t=wa(la,e.nativeEvent);D(c,t),!t.isCanceled&&A(!0)},onClick(e){e.stopPropagation()},onFocus(){H.current?.focus()}},oe=g.useMemo(()=>({...M,required:z,disabled:L,readOnly:R,checked:V}),[M,L,R,V,z]),se=oe,ce=_!==void 0,le=[t,H,ie],q=[G,m,K,I,T?e=>T.getValidationProps(L,e):h],ue=Ir(`span`,e,{enabled:!ce,state:oe,ref:le,props:q,stateAttributesMapping:GO});return(0,X.jsxs)(XO.Provider,{value:se,children:[ce?(0,X.jsx)(tg,{tag:`span`,render:n,className:r,style:f,state:oe,refs:le,props:q,stateAttributesMapping:GO}):ue,(0,X.jsx)(`input`,{...ae,suppressHydrationWarning:!0})]})}),$O=g.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=ZO(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=As(c),f={...s,transitionStatus:u},p=g.useRef(null),m=a||l,h=Ir(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:GO});return $r({batch:!0,enabled:!c,open:c,ref:p,onComplete(){c||d(!1)}}),m?h:null}),ek={duration:.3,ease:[.4,0,.2,1]},tk={duration:.3,ease:[.4,0,.2,1]},nk={duration:0};function rk({checked:e,reduced:t}){return(0,X.jsx)($O,{"data-slot":`radio-indicator`,className:`flex items-center justify-center`,keepMounted:!0,children:(0,X.jsx)(dE.span,{className:`bg-primary-foreground size-[0.5em] min-h-2 min-w-2 rounded-full`,initial:!1,animate:{scale:+!!e},transition:t?nk:tk})})}function ik({renderProps:e,state:t,reduced:n}){let{checked:r}=t,{ref:i,...a}=e,[o,s]=uE(),c=Eu(i,o),l=g.useRef(r);return g.useEffect(()=>{let e=l.current!==r;l.current=r,e&&!n&&s(o.current,{scale:[1,.8,1.1,1]},ek)},[r,s,o,n]),(0,X.jsx)(`span`,{"data-slot":`radio`,...a,ref:c,children:(0,X.jsx)(rk,{checked:r,reduced:n})})}function ak({className:e,...t}){let n=pg(),r=t[`aria-invalid`],i=r===!0||r===`true`;return(0,X.jsx)(Dw,{features:MT,strict:!0,children:(0,X.jsx)(QO,{...t,...i?{"data-invalid":``}:{},className:Q(`flex size-[1em] min-h-4 min-w-4 shrink-0 cursor-default items-center justify-center`,`bg-background border-border-strong outline-ring-input rounded-full border outline-offset-1`,`transition-[background-color,border-color,box-shadow] duration-200 motion-reduce:transition-none`,`hover:not-data-checked:not-data-disabled:not-data-invalid:border-border-emphasis`,`data-checked:bg-primary data-checked:outline-ring-primary data-checked:border-transparent`,`data-disabled:not-data-checked:bg-background-subtle data-disabled:data-checked:opacity-disabled data-disabled:cursor-not-allowed data-disabled:not-data-checked:border-dashed`,`data-invalid:border-error data-invalid:not-data-checked:bg-error-subtle data-invalid:outline-ring-error`,e),render:(e,t)=>(0,X.jsx)(ik,{renderProps:e,state:t,reduced:n})})})}function ok(e){let{loopFocus:t=!0,orientation:n=`both`,grid:r,onLoop:i,direction:a,highlightedIndex:o,onHighlightedIndexChange:s,rootRef:c,enableHomeAndEndKeys:l=!1,stopEventPropagation:u,disabledIndices:d,modifierKeys:f=m}=e,[p,h]=g.useState(0),_=r!=null,v=g.useRef(null),y=ur(v,c),x=g.useRef([]),S=g.useRef(!1),C=g.useRef(null),w=o??p,T=G((e,t=!1)=>{if(C.current=x.current[e]??null,(s??h)(e),t){let t=x.current[e];Wd(v.current,t,a,n)}}),E=G(e=>{if(e.size===0)return;if(S.current){let e=x.current,t=e.indexOf(C.current);if(t===-1){let t=e[w];!t||En(e,w,d)?T(sk(e,d)):C.current=t}else t!==w&&T(t);return}S.current=!0;let t=Array.from(e.keys()),r=t.find(e=>e?.hasAttribute(`data-composite-item-active`))??null,i=r?e.get(r)?.index??-1:-1;if(i!==-1)T(i);else if(En(t,w,d)){let e=Tn(t,{disabledIndices:d});Sn(t,e)||T(e)}Wd(v.current,r,a,n)});b(()=>{if(d==null||o!=null||!S.current)return;let e=x.current;if(En(e,w,d)){let t=Tn(e,{disabledIndices:d});Sn(e,t)||T(t)}},[d,o,w,x,T]);let D=G((e,t,n)=>i?i(e,t,n,x):n),O=G(e=>{let o=e.key===`Home`||e.key===`End`;if(!zd.has(e.key)||!l&&o||ck(e,f)||!v.current)return;let s=a===`rtl`,c=s?Ld:Rd,p=s?Rd:Ld,m=n===`vertical`?Id:c,h=n===`vertical`?Fd:p,g=at(e.nativeEvent);if(g!=null&&Ud(g)&&!lg(g)){let t=g.selectionStart,n=g.selectionEnd,r=g.value;if(t==null||e.shiftKey||t!==n||e.key!==h&&t<r.length||e.key!==m&&t>0)return}let y=w,b=Cn(x,d),S=wn(x,d);r!=null&&(y=r({disabledIndices:d,elementsRef:x,event:e,highlightedIndex:w,loopFocus:t,maxIndex:S,minIndex:b,onLoop:D,orientation:n,rtl:s}));let C=n!==`vertical`&&e.key===c||n!==`horizontal`&&e.key===`ArrowDown`,E=n!==`vertical`&&e.key===p||n!==`horizontal`&&e.key===`ArrowUp`;l&&(e.key===`Home`?y=b:e.key===`End`&&(y=S)),y===w&&(C||E)&&(t&&y===S&&C?(y=b,i&&(y=i(e,w,y,x))):t&&y===b&&E?(y=S,i&&(y=i(e,w,y,x))):y=Tn(x.current,{startingIndex:y,decrement:E,disabledIndices:d})),y!==w&&!Sn(x.current,y)&&(u&&e.stopPropagation(),(_||o||C||E)&&e.preventDefault(),T(y,!0),queueMicrotask(()=>{x.current[y]?.focus()}))});return{props:{ref:y,onFocus(e){let t=v.current,n=at(e.nativeEvent);t&&n!=null&&Ud(n)&&n.setSelectionRange(0,n.value.length)},onKeyDown:O},highlightedIndex:w,onHighlightedIndexChange:T,elementsRef:x,onMapChange:E,relayKeyboardEvent:O}}function sk(e,t){let n=-1;for(let r=0;r<e.length;r+=1){let i=e[r];if(i&&!En(e,r,t)){if(i.hasAttribute(`data-composite-item-active`))return r;n===-1&&(n=r)}}return Math.max(n,0)}function ck(e,t){for(let n of Vd)if(!t.includes(n)&&e.getModifierState(n))return!0;return!1}function lk(e){let{render:t,className:n,style:r,refs:i=m,props:a=m,state:o=h,stateAttributesMapping:s,highlightedIndex:c,onHighlightedIndexChange:l,orientation:u,grid:d,loopFocus:f,onLoop:p,enableHomeAndEndKeys:_,onMapChange:v,stopEventPropagation:y=!0,rootRef:b,disabledIndices:x,modifierKeys:S,highlightItemOnHover:C=!1,tag:w=`div`,...T}=e,{props:E,highlightedIndex:D,onHighlightedIndexChange:O,elementsRef:k,onMapChange:A,relayKeyboardEvent:j}=ok({grid:d,loopFocus:f,onLoop:p,orientation:u,highlightedIndex:c,onHighlightedIndexChange:l,rootRef:b,stopEventPropagation:y,enableHomeAndEndKeys:_,direction:kc(),disabledIndices:x,modifierKeys:S}),M=Ir(w,e,{state:o,ref:i,props:[E,...a,T],stateAttributesMapping:s}),N=g.useMemo(()=>({highlightedIndex:D,onHighlightedIndexChange:O,highlightItemOnHover:C,relayKeyboardEvent:j}),[D,O,C,j]);return(0,X.jsx)(ea.Provider,{value:N,children:(0,X.jsx)(wh,{elementsRef:k,onMapChange:e=>{v?.(e),A(e)},children:M})})}var uk=[Bd],dk=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i,readOnly:a,required:o,onValueChange:s,value:c,defaultValue:l,form:u,name:d,inputRef:f,id:p,style:m,...h}=e,{setTouched:_,setFocused:v,validationMode:y,name:b,disabled:x,state:S,validation:C,setDirty:w,setFilled:T,validityData:E}=hD(),{labelId:D}=bD(),{clearErrors:O,elementRef:k}=vD(),A=hO(!0),j=x||i,M=b??d,N=jd(p),[P,F]=qp({controlled:c,default:l,name:`RadioGroup`,state:`value`}),[I,L]=g.useState(!1),R=G((e,t)=>{s?.(e,t),!t.isCanceled&&F(e)}),z=C.getInputControl,B=g.useMemo(()=>({get current(){return z()}}),[z]),V=g.useRef(null),H=g.useRef(null);function ee(e){let t;return f&&(typeof f==`function`?t=f(e):f.current=e),V.current=e,t}let te=G(e=>{if(!e||e.disabled)return;H.current||=e;let t=V.current,n=e.checked||t==null||t.disabled?ee(e):void 0;return()=>{H.current===e&&(H.current=null),V.current===e?n?(n(),V.current=null):ee(null):n?.()}}),U=G(()=>{let e=k.current;if(!e)return P??null;for(let t of C.registeredInputs.keys())if(t.checked&&SO(t,e))return P??null;return null});gD(B,N,P??null,U,!j,d),Cf(P,()=>{O(M),w(P!==E.initialValue),T(P!=null),C.change(P);let e=H.current;P==null&&e&&!e.disabled&&ee(e)});let W=D??A?.legendId,ne={...S,disabled:j??!1,required:o??!1,readOnly:a??!1},re=g.useMemo(()=>({checkedValue:P,disabled:j,form:u,validation:C,name:M,readOnly:a,registerInputRef:te,required:o,setCheckedValue:R,setTouched:L,touched:I}),[P,j,u,C,M,a,te,o,R,L,I]),K={id:p,role:`radiogroup`,"aria-required":o||void 0,"aria-disabled":j||void 0,"aria-readonly":a||void 0,"aria-labelledby":W,onFocus(){v(!0)},onBlur(e){Y(e.currentTarget,e.relatedTarget)||(_(!0),v(!1),y===`onBlur`&&C.commit(P))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&(L(!0),v(!0))}};return(0,X.jsx)(qO.Provider,{value:re,children:(0,X.jsx)(lk,{render:n,className:r,style:m,state:ne,props:[K,h,e=>C.getValidationProps(j??!1,e)],refs:[t],stateAttributesMapping:lD,enableHomeAndEndKeys:!1,modifierKeys:uk})})});function fk({className:e,orientation:t=`vertical`,...n}){return(0,X.jsx)(dk,{"data-slot":`radio-group`,"aria-orientation":t,className:Q(`flex`,t===`horizontal`?`flex-wrap gap-4`:`flex-col gap-2`,e),...n})}function pk(e){return e?e.lan.length>0?e.lan:e.public:[]}function mk(e){return!e||e.lan.length===0?[]:e.public}function hk(e){return e?.ipv6??[]}function gk(e,t){let n=$(e===`lan`?`panel.address.lan`:e===`ipv6`?`panel.address.ipv6`:`panel.address.public`);return t?`${n} · ${t}`:n}function _k(e,t){return`http://${e.includes(`:`)?`[${e}]`:e}:${String(t??``)}`}function vk({book:e,port:t,value:n,busy:r=!1,onChange:i,fallbackUrls:a=[],align:o=`end`}){let s=o===`start`?`items-start`:`items-end`,c=o===`start`?`justify-start`:`justify-end`,l=o===`start`?`text-start`:`text-end`,u=String(t??``),d=pk(e),f=mk(e),p=hk(e),m=e&&e.lan.length>0?`lan`:`public`,h=d.some(e=>e.address===n)?n:d[0]?.address??``;return d.length===0?p.length===0&&a.length>0?(0,X.jsx)(`span`,{className:`flex flex-col gap-0.5 ${s}`,children:a.map(e=>(0,X.jsx)(`span`,{children:e},e))}):p.length===0?(0,X.jsx)(`span`,{className:`font-sans text-foreground-muted`,children:$(`panel.address.empty`)}):(0,X.jsx)(`span`,{className:`flex w-full flex-col gap-1 ${s}`,children:p.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:_k(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:`${gk(`ipv6`,e.interface)}${$(`panel.address.ipv6Hint`)}`})]},e.address))}):(0,X.jsxs)(`span`,{className:`flex w-full flex-col gap-1 ${s}`,children:[d.length>1?(0,X.jsx)(fk,{className:Ig(`w-full gap-1`,s,r&&`pointer-events-none opacity-60`),value:h,onValueChange:e=>{typeof e==`string`&&e!==h&&i(e)},children:d.map(e=>(0,X.jsxs)(`label`,{className:`flex w-full cursor-pointer flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(ak,{value:e.address,"aria-label":_k(e.address,u)}),(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:_k(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-muted`,children:gk(m,e.interface)})]},e.address))}):(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono`,children:_k(d[0].address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-muted`,children:gk(m,d[0].interface)})]}),f.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:_k(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:`${gk(`public`,e.interface)}${$(`panel.address.publicHint`)}`})]},e.address)),p.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:_k(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:$(`panel.address.ipv6Pick`,{kind:gk(`ipv6`,e.interface)})})]},e.address)),d.length>1?(0,X.jsx)(`span`,{className:`font-sans text-xs text-foreground-muted ${l}`,children:$(`panel.address.hint`)}):null]})}var yk=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAnP0lEQVR42u19eZhV1ZXvWnuf6d5bd6gJqKIoJkVBQAw4hGesoK2i8nz6UJN0px/a2qaN2PnsaMxLYoja3Rk6xjh0OmWi8TMOL5ikE4dEjYYPRyIQoNRShmIogRqo4Y517z3D3u8P9tHN4Zx7q6DAAu/+vvPVdOsOZ631W/NaAJVTOZVTOZVTOZVTOZVTOZVTOZVTOZVTOZXziThY+fwHHP5JuwH0E/Z5ibiwBLHlx1TOcSLlBzA6IgIhBFpbW9WWlhajpaXFaG1tVSmlgIh+DIEVFXBsfjYCAA4AAOecNExpOCmfzM8qFovTHcdp4JxHOecEABxCiEMISRFCujRN2xWLxbace+65HY8++miBc+4yAj/e1AQex1DPEBHmzJkzbseOHRfl8/nPOo7TzDnXBBEtALDF5XiISxCxqCjKXsMw1tfU1LzS2dm5U2IEVmGAsW3XOAsXLoxu2LDh/xSLxUsZY7UAkBeXS2wmfXUEI8i/Y+K5dEppTtO0NVOnTv1te3t7t3TfeIUBxpjkIyKrrq4+I51Of9O27akAkAWAgkQsl+AysV0UkJGAS0jBAcCglKYjkcivM5nMnwQa4LHOBOR4knxEZOFw+AuDg4Ottm1PAoCkILAiLgww7tDzN/ln93FZx3HUTDp9dSgUuq61tVUVxMeKGzg2iO8YhvFP+Xz+G5zznJBqRZJQHoB8QX+X1YT7OwcACpZlnbxq1aoJDzzwwIZnn32WHctMgMcL8cPh8BdyudxdANDvQ0AmXTLscwn6ZdXgfbzjURsFAIiHw+FX8vn8z4UnwSoI8DFZ+/X19fNSqdR9ADAkuX/cA+Xcx3jjh4AErnE4ZFnW9FgsNlQsFjuk16zYAEcTva688kqtv7//Ds65KjG1HM1zGYL66Hzv49z/px4Dz2svcPG7QiaTuay5+eQGwRhYQYCj+97Zzp3bv2ia1t8DQMpDOD8Dz6v7/dChFCJ4/8YAIGwWclGHOeuORQYgx7D0s1NPPTVRKJg3Cv9elSRaRgHiI+1E+uwojEXiY/37PQdKz08BIF8wC6c2NzdPkZChggBHw+VLJpM3Wpa1BAAyns+CAcaun85Hn7970aMcCqiFQiHMGFtfQYCjZPg1NTU1FovF6wAgJ6QffXR7EAKgpOtpAHJQn8f6oQEBgIJpmnOampqmH2soQI/VaN/Q0NDtjuO0DFP6sUQiBz2RP6+NIKODLPVeD0GzilZY2AIVBDiC79cZP378TNu2vwgAaY/0k4BL9gS8ko8+f/d7rBJgW7i/yxfMwimNjY0nHksocKwhABJCeD6fv5sxNk8Yf8THig9CAe/lp+/RJwDEpa8goYCMDAwADNM0Q4yxdRUVcITcvng8/pl8Pn+nkH4/6PcS2M8V9HsMSNE/FQBCABAHgGoAiEhh5SJ8FEWU1QcFgCJjbHxTU9OWdDo9cCwEh44lv5VwzkFV1T/atv0/hN/v1d9y+NbvZ+752ZVwU/wcBYA68VXzxBVc4g8CwB4A2CGY0FVNtniesK7rfzVN878451hhgFHM8VdVVV2WzWZXwv54PwkgLPNIM/Mx8pinDiAEAA2C8OAT/vVWGaHwPrYBQLsUhAIAcBCRjxs37u6enp6dY72AhB4rId9ly5bp69evf5hznhCEIwF6H0vAPvGx7McDQDMA6FLCB0qoExc1FABoBIDJsL9mYFB6TsO27cixYAvQYyXos2XLlmtM07zOI21QxtiDEsYfCALWegw8LBH08R5L2AvThK2wW6gJZIyNmzx58rvJZDI5lm0BegxIP58zZ051V1fXQ6Kej4F/EQcEoEFQ4cc4AIgJ4uMw1GGpGIIJADUAMBX2F6H0AEDUNE3Vtu0NI6gcQp+AVhBDfyIYgCIiS6VSX7Us6397Ej5BSRwsY/kzAEh4iD9Swvsli2xhOE4TDPGBbdtNPigQFKkMCjfzMkEseji9DDjGgz68sbGxqaur603OuSHp/nIFmUE3zhJEqhUEQx8h4MPICjKf6KBsOOoA8BYAtIfD4Q35fP5nfh6B24OAiICIYNs2veCCC4xkMml0d3froVBINwwDCoUCICJHxGJdXV3Btu3Cm2++WaSUMlGbCO5XT/qalUMeZSzDPyKyffv23co5HycsfyUgXFuKsVGS0KjQ1SB0NwidTUokiyBAArkPA7gnDwDzAcDI5/POzJkzm9vb2ztnzZpVlUqlGrLZ7CTLsqYxxhoZYxMZYwkAqFYUReOc6wCgcM51RNRkVcM5L2zdurXIOS+oqpomhPRTSnsJIR8oirIjGo1uPf/883c9+ugvC5wzb7SXHUsIQAHASSTGzU2l9q3mnFsenQslqnz8Pp8DABFCSJ+maT+jnP7FQWe8bdtX27Z9gWu4lUACP2LzALThnoDSrnA4/J/FYvFnZ599dtPbb78903GcicVisclxnBrO+XjG2DjOeS0AJDjnUcHojmCkInyUeyCeuISc57ARMU0p3UspfU9V1Tdra2v/0tnZ2V2qsWXMMoDo1HnStu3LhGFFD0FPuzBoUEp3nHDCCZdv2bLFbfAAQghomvb1YrH4Xc55oQQS8BKqhZdgAhsANIK4Y87cuZdt2rRpj1cFuGrg5ZdfVpYtW1afzWabC7nCTItZpzmOM5dzPo1zHpb6GrxMZnvcV7e2gRFCBlRVfSsWi/2qr69vk19jC45d6U+0pFKpP3DOM2USK7xMpy8iotZQ1/DZvfv2bhQ2gGv8cUKIo6rqD4vF4ldhf7En8YF1v0CStyaABzScWABQret6q2VZX2OMqZ5sIvjpakSEK664Qlu1atUp2Wz2XNM0lzDGZorny0r/78DBha2W+J4AgI6IpqZpL0+cOPGB7du398pMMBYzVnzlypU0m81+22PYQIkCDj897ZZxJzRNe7irr2ujkA5T7gRijNHrr7/+m4SQdwVzjCRqFxRilqOQCAADpmleVV9fP1tqNPE2oxxQe8A5p0899ZTZ19e3oVgs3n3jjTcujkaj/6goSpswYolP5ZLrEaiSvZTlnJvFYvHCnTt3PhiPx0+TmGPMIYAb8r0im80+IQw/OgJieP1zBRGzkyZNOquzs7NbUgl+r3l5Npv9LXyUYfST9CCo98sxMInAFgDENE172rbtLzHGhhselt1XBwBg1apVysUXX3xDoVC4hXNuSgzFPK9pe35nivthx+PxW5PJ5CYAIGSsBX2uvPLKUD6f/7rHOocR3izX8IsZhnF3Z2dnV4mYvAMAJJPJ/J4Q8hoAGD6p31K6HgJcQRmaAQAGLMv6bG1t7amyBA6DqZmksuiiRYucQqFwfzQavR4R5Y6noDoI928KAJiccy2TyXyjpaWlCgA4GWuVPs8+++w1juOcJvQcOcTIFxNW/8YlS5b8bBgJGUREVlWVuDPA/+dlvAII8AJkJrA450oqlbrWZwbBcBHObXVXM5nMC+Fw+B4pgeWNfvqVx6sAkHccZ/Jbb711ASKOGQZAAGALFiyoLRaL/wL7y7yUErq/nAfAAEAPh8P/9tRTT+WHEYp1AIBks8k/EUJeAICwJLkQ4P5BGd3veDKOXKDAZxoaGuaNAAX8Pq/NOScLFix4mBCyV6AWeKqcgqqjFQAwTdM8ixAyZoxAgoi8ra3tJsbYVGGNDzd66Q33MgBIKIryYiaT+T1IQyLKMSFjDOLx+F2IaPv4zXwYRh/3Ib5soVucc+zv77+GHJ725QDAX3vttSwhZDPsT2f7Faz6lbq5/1//rW99SyFjpcq3ubl5imVZ/+SJ9+MIBjjJbp8dj8fvRMSRdO86AEBTqdQbiPg7gQJ2Ccvf73de6JftAfe5UqZpfqqurm7uYaCAHP7FEpXNflXRLjMUv/Od74wJFYCEEN7V1fV/GWN1wqo9VO/EBoBqVVUfHxgYWOda+CMyHhiDmpqaf0fEovh/XobwzKOjnQA0YJItwFOp1BcPAwUQAGDBggUxxtgpwsIPaonza4lXCSE9lFKHjAW3r6am5jTLsr7gE/HjnkBPqRk9HABUROxvbGz83iGWYzkAQAcGBjaoqvqUqAW0h2EA+nUWOwHIAACQM01zwQg9goMSZe3t7X/DGGuWGCCo5/GgSuZwOPwqY+xjtwE4IQRSqdTtItvHSuj4crlwBwASuq7/565du3YdRikWZ4xhNBr9N0R0m05KuX8swPjzTh6R5xHZnPNiJpO5TKAAH6H0O62trWo+n79FICYNcIW9jS0cACKU0o558+a9BgBIPu4q36qqqgts274koNKnXMGHLIEhQsjmU0455f7D7NdnAEAGBwffV1X1cYECTkAUkh8iEzAASBeLxVPr6urmwMj6CHDx4sX6jTfe+BPHcT4lPCZSoiTugG4oRNRjsdh9q1evLnycDIAAwFtbW9VcLnc7l3KXw0zt+nX9VEUike+vX78+NQqzezhjDBOJxPcRMSmFVXmA4efHBH5M4TKBJVDASafTl4wABRAA2NatW8dRSiOEkA7YX9OoSqoEA4JBDADqDcN4MJlMvu4KIPk4Lf9bbrnl847jLJS4uBwT+I15YQAQo5S+/vTTTz8xSlW4DADIvn37tmua9gsRbHFKRAWDKo8dn9Cs7BFki8XizKamplklUAClziQCALSjo+MD27b/du7cuZ+tqqq6lRDSJ6qcnADJ5wAwzjCMR4vF4gOcc/pxJYM+fEMtLS1VuVzuNk/s/ZCqlxAQE4nEnYsWLbJHcXIX55zjpEmTfoSIvZKUBY2dKVWizgNiBDbnnPf29l7kY7SipLcdke//MLTsOI66cePGfblc7ifTp0+/UFXVl0WxC/OxA+oMw3jYsqw7pDwEP5oMIAcgCCKytWvXflm4MEOe98FHaLVXq5r628HBwT8fittXDgU6Ojp2a5r2oFRDCCV0v/cKihbKCaOhYrE4Y8qUKSdJKIAAwBHROf3002urq6sv0XX9y4Zh3JRIJJbMnj17PCJagku1rVu37nnxxRc/r2naH2B/car7+mFEDIfD4W+bpnmn4zgHFYWQozSnl7W0tBhnnnnmFADgTU1NjYVC4StSexcfhqT7MYaCiOm6urq7GGNHoguHcc5x5syZ9xFCdohaP1YiMRQUGeQ+TSsuM9mcc7Onq+fSVatWfWhrLFu2zNB1/dvr169fk0wmVxaLxXvy+fx/pFKpx9vb21/RNO27Z5xxRky4gOqiRYvsiy66aDml1I0MVhNCemtra6/J5/O/EJJ/kBt9JKuCqRjXyqurqxcODAzMNQxjx759+7JDQ4XvOI59gY8FO5KKHxsAanVdvy+VSq10X+9IfI6enp6sruua8FYyHvtjOB6ANzpoS2liQEQtFA5t7ezsfGfbtm12U1NTzeuvv/4by7KuFqphSLqKnHPDcZyW7u7uRdOmTXtpcHBwEADUzZs3DyUSiT3FYvFqVVUfmzd93vUdH3S8V+rekCMk9Yo7rtUwjDssy5qradqLbW1tvY2NjbNt27wW9nfS0BFY+16GMAghOydPnvyjIzymjXHO8cwzz/yZiLsbHqmGEvkBb7wAJWYgAFClqmqmvr7+kVwu9/Dzzz9vcs5pd3f3g4yxRQCwVzALlYZdusTscRxnzq5dux5ZsmSJm7wiJ5100uq6uroLHMe5af2W9X3l1CIeiVJuROSxWOy8oaGh2w3D+Hk2m32Mc04IIYwQ8rht258XDEDKlGKXCvnWh0KhL+fz+dZR1v2lBlHemM/nfyQaP4jXrfP53pVyt3DDLfAklNLBcDj82plnnvnMSy+9lBLEtSORyOdzudxjANAtVS6DT+DJbVYdFwqFVhSLxXsYY9QTsyh7L0cTARQhLaBp2n9ks9n/UhTltkwm85jb0ROPx892HGepFPIdSRuWbJxVEULWfu1rX/vFUWq+ZJxzPPvssx+hlL4rEkWsTKEI9ynoiCKipev6yydOPPGObDb7mCA+cV+jWCwu8/GMgu6JCgBZ0zT/7rrrrgtLrzPs0fY4Wq4dIrKGhoaTuru7HwOA0PTp0y/cunXrHokxuKqqf7Jt+xyP3+9XVePt/OHekG80Gr0sk8n88ShI/wEoEIlErs1ms/cCQK94b7bnsqRWcTdMSyile3Vd/3NjY+PzHR0duz2l2gAAfOrsqeN3te96kzEWDeha8m2BR0ScOG7iJbt7dr8zUoEgowH5hBAWCoWu6erq2kQI6V+6dOnpgviuhc+i0egVtm2fKyx/MkwmRJ/6/mpFUf6Yy+WOJvFdFCBLly59nBCy0VM0gp7OYRQh5DCl9INIJNI6derUr+Tz+Z9v27Ztt7BZ0DuHKNebG8c5j/gQPygC6r4vI1PITDjald4UAGD+/PlxVVVbAYArivKoiDLJqUeybNkyQ9y0POwv9ByUrgHxu3JXHwD0IWKmrq7utI+pt5ECAMRiMdeG2SyudwBgIwC0AUA7Iq5RVfW+eDx+3uLFi3WpBMxbwXuAINbX15+AiF3CxugWX3sE2vSK33UJ43A3AHQCwA5E7K6urv700bwnCgDAhAkTZhFCXgcArqrqA2T/B0VJwikAQCgUWi64vU/o/6REfJcBBsowQw8AMFVV7xc3lH5MOQy89957dUVRXhYE2Cy+biWE/MkwwrfW1tae5Mn1U59xtXDTTTfpDdOmNQtXD66//vowpXSjuA8yA7hM4DKGzAC7CSHtc+fOHXe0EEBBRIjFYosJIdsF8X9KKQWfCZzk5JNPrkXEnWKiRlJk/bwM4L28DNEHAElCSNfEiRObPEwGHwcKRKPR/4mIg4SQdaqq3huJRM5vaWmpkgiPkuv24S8JITBx4sQTdV2/TlGU3ymK8vTixYv1/X8ioOv63cJ+2CMR3YsCLgPsBICUpmmPiNclR8MQgnA4fA0iDgAAUxTlyZUrV1KfgA5FRNB1/V+F9PdLxE96VMBgGYboBQBmGMYtH6P0H3BaWlqMWCx24bRp08Z5pF2RxtZ+SPQTTjihKRKJ/K2iKA8h4loAeB8A1gNAW01Nzfnic5Hm5uZpSMgewfR7S6iB3QCwGxF76uvrTz3SkV03lwyGYXxVSHOWEPLqwoULoz4SSQAAm5ubpyJiv7D6Uz7wPzgM4veJ12qbO3duZIyucVPgo6FSHxJ98uTJE6qqqq5UFOVBRFwHAB0A8J4g/F8A4A0A2Kgoyq9FGFhBRIjH40sRMSs+/25B8B6J+B8AwD4EHBLCeOSJLxopbxfwtA8Rd02aNGl6gOFBEREURXnILYcWDJAKkHz5Zy8D9AAAj0QinxtDQy1chte8ki6IvlRV1Z8i4gYJqt8FgA3i+isArIP9MwTWAEB7KBT6skASFREhGo1eSgjZKlzKnCQ8OQAwCSEdsUjsC4eLiDhMnW+rqvpN0zTvEFxYH4lErs7lck+6ESxvnV9tbe2CgYGB10T7EpQprgwK+NgAME5RlEcty7oaEclRdPuCiA7yeyCEwPjx45sH0+nP2MXiuYyxBYyxceIxQ9IIOvSZUMakQRXj6+rqbuvv718pdh9Y8+fPr2tvb/+iZVktnPMmIVjdiqKsGjdu3GNlOp5GhQEURLSNcPif87nc3UIHVSuK8hJj7FJP6FG6J4QRQp6zbfsiye/nw5jDL98gAwCqFEVZefnll1/91FNPFY7yqjb0FFQwt2uXMUYmTJgwK5lMnuM4zmdFG7c7bConiO4Nx3p7B93egxAiyWua+nw0Gn2kr69vqzwW12Wye+65RwcAuPnmm4uMsQOE7UjNCaSI6MRisaXpdPpxznlKvPl4PB6/JJVK+eXfKQA40Wj04kwm84zU3hU0WMHbGk1FKlMnhOwMhUI/yufz94sPfDSGLgZK+Zw5cxI7d+5cUCgUWizLOptzfoIY5mAKSbd8Ipc8oBhEEzWMfbqu/yGRSDzZ09PzvkRY2ZZSpGoiOcXuHMn7QSQ/v0tY8N0AkCGEbFixYoUWVLG7P+lD34T93T39Pv6+eyWFcViQQpqDlNLVkUhk+YwZM+rwo7gCHuF6hQNWyiEicM6xoaHh5HA4fI2iKL8Q7eNJwdR9bhAGALaLr+732wBgKwBsETGC90WgqN19nKIoL0YikZumT58+SfIgiE9/34cMKEUPj46uW7FihaYoyioBaa4VaimK8v8CfE7XS/iXcgkSBLQRMUMI2UkpfU3TtNZoNPoPEyZMmCniCUeqXiGQ4JRSOPHEEydGo9Eluq5/n1L6CiJ2CwbNAcA+KfjSKb7/QHy/Sxh6O4Slv00Q/j3BFF2I+J6maY8kEolLlyxZEvaJDh606Fow4ad0Xf9uLBY740i4elgi9XlDPp+/X3xwVUBOjaZpT9i2vcxH/yMA8Hg8vsi27XmmacYBIE4ppY7j2AAwpKpqlhDSp6K6RzGUvc3NzXs2btzYxxjzTrlSRgHi/NrFDxjNMmvWrPGdnZ1zTdNcaNv2pxljMxlj9eL1iwLa7TL7hOTLbSJR9ut2ZIi4xTCMF2Kx2O96e3vbPfqbeQtcERGWL1+uP/HEE5/OZrPnm6Y5nXOuU6puevLJx++66qqr2GhCPwYNZnz33XfXCGvWlizNCKW03bbtMwQH+1r0AkIPWMXu/hww9YNKxRLsMIl90PO4BG+cPn1iuqdnTrFYPMtxnDMYY7M45+NFutoUuQoz4P6wgHFxjkx0AdldiqKsNgzjmXPOOeeV5557bkjq4yOewk3HfY8zZ86csHv37nPy+fwiy7KahF1REO8pWl1dfc/g4OBro5kCR5+Ahh0Oh/9haGjoQaHrVA/nR2Ox2N9nMpmV4sZZnptCfHLZOMIBiOXeL/Fxqw4g9nnnnRdpa2ubms1m59q2Pd9xnE8xxk4Ui6RdghckAwvLbBT1Dprm0lh5QgjpIYT8Rdf15yZPnvzn999/v9sj7d4NpOBK+8qVK+elUqm/MU1zgUgFF4Xa4fJ8Q0rprmuvvfYbDz74oD1aKIABLtx/27Z9MfhP5lQRMZ9IJJYmk8nXBGfToGFHh/GevBB+EDq4xL744ovD69evbx4aGpplmuaptm3PdZgzgzPeyDmvEs/hSpPlM3YNygyHlF9bE0RHQkgXIWStpml/aGhoWLVjx44PPERH73AHRIRfsV/Rm5tunp1KpRYWCoWFjuNMFkZeRnp/3ssGgEg8Hr8vlUqtGi0U8FrxfP78+eG//vWv6zjnkwLGtHB38lQoFPrhKaec0rpu3bp+n0mVfv+HZYYtsYDxHYCI8PLLLys33HBD/cDAwJRsNj/DccxZjLGTGWPTGGONnPOYuPFuQUZRClKREkMleYnCCyJiEgYA2ISQ3YSQNbquv5BINLzS1bV9t0R0Oc3ryLGD5cuX67/5zW9mpdPpMwuFwpmO45wgELQglYpxT12Bd6y9qqpq5zXXXPP10UKBgxhgxowZdVu3bn1LBDZsOLByR+ZoAgAxQkiHqqrPhcPhFxoaGjZs3ry5m3MOASNMwW9Uqvz90qVLQ2+//XZiYGCg3rKsJsuyJluWNV0QebLQ2dWimdStyClKlTgwjGwh94F7uXDThXaKiDlE3EYpfcMwjBcnTpz45ubNm2WG96oj7rpurpFp2/YZpmnOchxnotSVYw1jxoC3ytgSKviBdDr94migwEEM0NLSYrzyyitvcc6nDWNQkyNuVBgRLUTsQcQPKKU7EfEDROxVFCVj23ZOeAJIKSWqquq2bYcopXHLsmKO49QiYj1jrI5zXg37J2bGACDEOVek1zIlQjsQ3BFbrsbQa3+4BpwGAA4hpJsQskFRlNWRSOSV5cuXt915552mD9EPUHmEEJgwYcJpAwMDF4oI4amc8zqR788JiHfjH0Ml9hnL4+OYZ+KXQintPv3007+6Zs2aw46Oot+ETkVRfmWa5hUieKMMo2HDLWHSpBl19BA6cWwJ7hyfOf44zJn+QXMEHSlPrwtY54jYj4ibKaVrDMN4LZFIrNuzZ89eGclK2DkEAHhtbe2CZDL5Q8bY6ZzzkGS8WRJiEskITIv4yj7pPQW1nsnTxiwAiCUSiZ8mk8nfH244GP0GNsTj8fNSqdTzgluVEUSggqx7DIDcUiPeIWBlCx/mnGAmPUYRxNaEukkh4nZK6VpN014Nh8N/6e/v7/AQnEgQW8pbIQDAxo8ff0pvb+9GzrmLVKRE4asc0EmLYNKAVDnE5c4hnwETlFLafdFFF9387LPP5g8HBfxGpRPTNLfrul7jOM65UjyfjMAf95tUhSV2+JVajlCyxdyTYOHSpMwqd/mTiDq+oyjKM6FQ6IFoNHrXrbfe+oNVq1Y9Y5rm20NDQ4OSN0PK7A3yY3o6NDTUo2ma7jjOIs/QhiAGd587BPsXVRHBDLxMvz8X8/7G7d27N22a5ns+7XWHFQlEAMDW1lZ60003/USsaRmS5ujiKCVmcIRLGfyQxc3Ja24PvzDaeoCQzRRxk67r6yKRyMZ9+/bt9Ei4LAD8MI0pAgB88uTJ4zs7OzcKO8YuE1fwIpUi3O6twvaSoZ159hfaAgX6zz777K+sXr06d6goUGoCByeEgGEY1xUKhW8yxqaIFx7ymW+LZdyqcm1e5dQHFVItb/B0PiQ2QAel9F1VVdtUVX2ntra2Y+fOnakyBOejnE2jiOjour6iUCh8Rxh6agDhg7KjVBB/q1C/mo876DKqCQDRSCTyUC6XW3moHgEOp+Fj4sSJNf39/X9nmubnGGNzhIUOnkYINoJAkHfQMZVSn161ZCJiRiRU+gkhHxBC3qOUbjYMY0ttbe2u7du3p32ILffX86PQPYQAALNmzap+77332sSSC6vM5nI/5ncFaBt8NCuZBcwjQEppavbs2cs3bdqUOhQUwOFO8nKDMYlEYlahUPi0ZVmf4pzPZIxN4pzXiIYGbZjP+WHPHCLmASCHiCkA6FcUpQ8J6aaEdGma1q0oSl80Gu1DRFZdXb1nw4YNXT55c/RxzfjHVBtoa5r2VdM0fyjsJzqM8LJfEymITGKvlBzztqOZokvqIbf/cqSMjjCyQomDMmpnnXVWtLOzczyltCqbzdbYth1TVdUYGhpSXdgmhCCllGma5hQKBQcRHU3TbER0ENFyADgFoJZlqYyxsOM4YdM0qznnCcZYlDEWo5SSxprGb3T2du7ysc75WNpxuHDhwqo1a9a0McaaJI+Al6mK8kudo0gx7wtYlOk2mqZnzZp1w9tvv50cKQrgIRo8RLaSRR3Aly3LWkII6WSMUbHmxQYAqqqqwhjTGWMGYywMABGxG8cQwR5N3nQhGTs5dxVKdXX1jQMDA++N9U2cLgqEtNA/5838vQIFlDJSX2okLQokGJTC3N7ZBLFwOPxLsZxqRPcHR8PwicVi56XT6ZdKhH1ZQAOlJV2253tHqB41kUjcOjg4+PpR7gU8LBRoaWmJvPrqqxuE8WyWiIOU2kYiXzul+krHk6BCQkhx9uzZ17W1te0bCQrQw/2gc+bMSezevftpYQOkhRXr7rcZElKcE9/nhTtZ8Anrekeq2AAQr6qq+m4mk3nxGCH+hyiwa9eugqZpluM4l0puHQxzCIafJxSVClS8U0AdznkinU5zx3HeGsmmUnK48/03b978PcbYdPHm1ICgjrfCNmiWjssMRQCIGobxxFBu6LcigXKsEB+kaR2/lKaKOIc5HZwCwCTJ0JZHxykAkC8WixfNmDGjcSSDJ8nhzPiNRqOLLcv6R6luwFvpW2qIouMzU99lgrCiKOvvvffeexhnY13nBxGMtLW15QzD+IFkAwwnwhlUCOuuoZsAB45/d79njLHqzs7Oq8SU9CM2HwABgC9cuDCazWZ/LIw9v5Up3nFofvPz/WbnISFkYOrUqSu+9KUvWUe5F2DUUeDaa699nBDyjgj5OiWWWg9rRrCYOzBOQgV5UVS+WCwunj59etNwh1DTQ93n29vbe6dt2//LI/3lJmg6AcsVHGkYYigWi3177969bUdw8tfROuStt96yQqFQ1rKspT6j8LHMzsPAbSji+4LPsIjY0NAQdRznjeGE7MmhQH9tbe180zS/Iq124WWmZrIA4jNPRW3cMIzH0un0qmPM6CuJArfeeuuvRN9/yKe4NKgEjpfIl7gLsCOSGnAbVAvFonnhcFGAHspyB9M0f+I4jjzls9SoVD/o927WsgEgpCjKhvvvv//2Z5555liFfV8hW716tR2JRPpN0/ychALDTajxEvkDQxjM/MBaA54oFAoDYnV9SY9gJAjg5r1Ptm37PGnQU6ndOcOdnk0IIenm5uZjXe8HosDDDz/835TSdR4UGE6iDAMWZrhET3gMQhUAHNM0PyOmgzqjpQIIAEAymTxP9MRZZcakOj5XEDMY8Xj8u9u3b+88DvS+L2GvuuoqJxQKfS+gWLZkmV5AAQyX+gwjnv2AwBibcuKJJ9aW8zpGwgAcEUFAf1DggvvsznEC3EIumChuGMYTyWTyheNE75dCgd8RQtZIHkHJmowy5W4HLMsQ6sBFAOCch4aGhmpGkwHcUw3l16mxgNJm+WsRACKKoqy77bbbfnyEx72OGRSIRCL/7ukFDLL6g5ZUBRHUkAJDBAB0x3GUIxEHKAxjXLpTorSZiTCwRgjpb25u/vYdd9xhHmd6PxAFHnrooT9QSt/wWUUznBnJUKY20ZD6Es1IJFI2LzDS3bygKMo2H8sfAvx+P2QwRf9/IRaL3Sz0/vEu/QegQCwW+xoishLwD2W6pYKYwjUEQ4SQXR0dHfvKeRtkhJMyIRwOPy+2aZVKZQb5+yYAhAkhqWg0ujyZTLYdp0ZfybV0yWTydV3X7wpYSwcBm7+Ggw4uDap0Xf+9CAmT0VIBDADIwMDAelVVn4H9mymKJULAMjO4Wb8Epcr7TU1N16ZSqY3HsdFXTpCoaZp3GIbxC9i/iYQFrMwr1QHtpxIsAKhVFGXdFVdc8Wv4qEJq9AJBnHNoPKHxjVwydyHnvFnEA5yABI/rKoYQ0dY07ZeXX37ZN9988819nyDYD1pIRDjnv9M0rUrsBlB9egRLLaxkPsupagkhexoaGq559dVXe0eSFh7x+JgpU6ZMVhTlWaEO0rB/qOEu+GhKxg4A6EDEtaqq/jgej8/zTMX4pB+36Bai0egSQsg6icCWiLJmxb1NSaN2+uDAiaHdYoZyr6IoKydMmDB5JPcYD2ftGyEEwuHwZYVCYQljbAYAVHHOHURMEUK2a5q2NhKJrOrv69/GOIORzLH/BB0KAM6KFSuUH/zgB5dYlnUpY2wOANSIvkiOiFzsVjzgElvEBlVV3aTr+rPZbPZPomB22OiKh7v7T25/Xrt2bSSfz7N58+YVHn300YKnzQo+yZA/HCaQi20XLFgQy2azB/jxlFLuGebAN27cmCaEMOle45EuCg2yIxwfBsGjVJN/vKgEEnAvD5UGR4UBYARt2ZVzZGhTudeVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVs//8fzjsXcePS1GRAAAAAElFTkSuQmCC`,bk=`https://github.com/WNLUO/dsh-mobile-server`,xk=[{platform:`android`,channels:[{nameKey:`panel.links.distPlatform`,hintKey:`panel.links.domesticRecommended`,url:`https://app.wnluo.com/public/apps/14`},{name:`GitHub`,hintKey:`panel.links.overseasRecommended`,url:`https://github.com/WNLUO/dsh-mobile-plugin/releases/latest/download/ai-hub-android.apk`}]},{platform:`apple`,channels:[{name:`App Store`,hintKey:`panel.links.appStore`,url:`https://apps.apple.com/cn/app/ai-hub/id6821681438`},{name:`TestFlight`,hintKey:`panel.links.testFlight`,url:`https://testflight.apple.com/join/4fn5PCMD`}]}],Sk=[{nameKey:`panel.links.publicRelay`,url:`https://ai-hub-de-1.wnluo.com`}];Sk[0].url;function Ck(e){return e.name===`GitHub`?(0,X.jsx)(kk,{}):e.name===`App Store`?(0,X.jsx)(Ok,{}):e.name===`TestFlight`?(0,X.jsx)(jk,{}):(0,X.jsx)(Ak,{})}function wk(e){return e===`android`?(0,X.jsx)(Dk,{}):(0,X.jsx)(Ok,{})}function Tk({channel:e}){return(0,X.jsxs)(`a`,{className:`flex items-center gap-3 rounded-lg border border-border-muted px-3 py-2.5 transition-colors hover:bg-background-muted`,href:e.url,target:`_blank`,rel:`noreferrer noopener`,children:[(0,X.jsx)(`span`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-background-muted text-foreground`,children:Ck(e)}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-intense`,children:e.name??(e.nameKey?$(e.nameKey):``)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(e.hintKey)})]})]})}function Ek({size:e=`md`}){let[t,n]=(0,g.useState)(!1),r=(0,g.useRef)(null);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Bf,{variant:`outline`,size:e,onClick:()=>n(!0),children:$(`panel.download.open`)}),(0,X.jsx)(jf,{open:t,onOpenChange:n,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,closeLabel:$(`panel.common.close`),initialFocus:r,children:[(0,X.jsx)(Nf,{children:(0,X.jsxs)(Pf,{className:`flex items-center gap-2.5`,children:[(0,X.jsx)(`img`,{src:yk,alt:``,className:`size-8 rounded-lg bg-white p-0.5`}),$(`panel.download.title`)]})}),(0,X.jsx)(`div`,{ref:r,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:xk.map(e=>(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 pb-0.5 text-xs text-foreground-muted`,children:[wk(e.platform),(0,X.jsx)(`span`,{children:$(e.platform===`android`?`panel.links.android`:`panel.links.apple`)})]}),e.channels.map(e=>(0,X.jsx)(Tk,{channel:e},e.url))]},e.platform))})})]})})]})}function Dk(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-3.5 stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M17.523 15.3414c-.5511 0-.9993-.4486-.9993-.9997s.4483-.9993.9993-.9993c.5511 0 .9993.4483.9993.9993.0001.5511-.4482.9997-.9993.9997m-11.046 0c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.551 0 .9993.4483.9993.9993 0 .5511-.4483.9997-.9993.9997m11.4045-6.02 1.9973-3.4592a.416.416 0 0 0-.1521-.5676.416.416 0 0 0-.5676.1521l-2.0223 3.503C15.5902 8.2439 13.8533 7.8508 12 7.8508s-3.5902.3931-5.1367 1.0989L4.841 5.4467a.4161.4161 0 0 0-.5677-.1521.4157.4157 0 0 0-.1521.5676l1.9973 3.4592C2.6889 11.1867.3432 14.6589 0 18.761h24c-.3435-4.1021-2.6892-7.5743-6.1185-9.4396`})})}function Ok(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-4 stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701`})})}function kk(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px] stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`})})}function Ak(){return(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px]`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.85`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`path`,{d:`M12 4v10`}),(0,X.jsx)(`path`,{d:`m8 10.5 4 4 4-4`}),(0,X.jsx)(`path`,{d:`M4 18.5h16`})]})}function jk(){return(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px]`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.85`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`path`,{d:`M21 3 3 10.5l7.5 3L14 21l7-18Z`}),(0,X.jsx)(`path`,{d:`M21 3 10.5 13.5`})]})}function Mk({on:e,what:t,label:n,className:r,disabled:i,onClick:a}){let o=n??$(e?`panel.common.hide`:`panel.common.show`);return(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,className:r,"aria-label":`${o}${t}`,disabled:i,onClick:a,children:o})}function Nk({status:e,pairing:t,addressBook:n,busy:r,error:i,restartError:a,onOpenConfig:o,onChangePolicy:s,onOpenSelfCheck:c,onReconnect:l,onSavePreferred:u,onEditPort:d}){let f=r!==``,p=e.pairingPolicy===`code`,m=t?.relayUrl||e.relayUrl||`—`,h=Pk(n,t),[_,v]=g.useState({qr:!1,relay:!1}),[y,b]=g.useState(!1),[x,S]=g.useState(!1),C=e=>v(t=>({...t,[e]:!t[e]}));return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsxs)(nD,{className:`flex flex-wrap items-center justify-between gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{children:$(`panel.pairing.cardTitle`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:c,children:$(`panel.pairing.checkNetwork`)})]})}),i?(0,X.jsxs)(BE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.pairing.qrFailed`)}),(0,X.jsx)(WE,{children:i})]}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4 sm:flex-row`,children:[(0,X.jsx)(`div`,{className:`flex shrink-0 flex-col items-center`,children:(0,X.jsx)(`div`,{className:`relative size-[280px]`,children:!_.qr&&t?.svg?(0,X.jsxs)(`div`,{className:`flex size-[280px] flex-col items-center justify-center gap-1 rounded-md border border-border-muted bg-background-muted text-foreground-subtle`,children:[(0,X.jsx)(`span`,{className:`text-xs`,children:$(`panel.pairing.qrHidden`)}),(0,X.jsx)(Mk,{what:$(`panel.pairing.qr`),label:$(`panel.common.show`),onClick:()=>C(`qr`)})]}):(0,X.jsx)(`div`,{className:`flex size-[280px] items-center justify-center overflow-hidden rounded-md border border-border-muted bg-white p-2`,children:t?.svg?(0,X.jsx)(`button`,{type:`button`,className:`size-full cursor-zoom-in rounded-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,onClick:()=>S(!0),"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,children:(0,X.jsx)(`div`,{className:`size-full [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:t.svg}})}):(0,X.jsx)(`div`,{className:`flex size-full items-center justify-center text-foreground-subtle`,children:r===`pairing`?(0,X.jsx)(ME,{}):$(`panel.pairing.noQr`)})})})}),(0,X.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.pairing.policy`),children:(0,X.jsx)(jD,{size:`md`,checked:p,disabled:f,onCheckedChange:e=>s(e?`code`:`deny`),"aria-label":$(`panel.devices.allowTitle`)})}),(0,X.jsx)(ND,{label:$(`panel.connection.relayUrl`),children:(0,X.jsxs)(`span`,{className:`inline-flex min-w-0 flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[_.relay?(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs text-foreground-strong`,children:m}):(0,X.jsx)(`span`,{className:`text-xs text-foreground-subtle`,children:$(`panel.pairing.hidden`)}),(0,X.jsx)(Mk,{on:_.relay,what:$(`panel.connection.relayUrl`),label:_.relay?$(`panel.common.hide`):$(`panel.common.show`),onClick:()=>C(`relay`)})]})}),(0,X.jsx)(ND,{label:$(`panel.pairing.port`),mono:!0,children:(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[(0,X.jsxs)(`span`,{children:[t?.lanPort??e.lan.port,t?.lanPortAdjusted?(0,X.jsx)(`span`,{className:`ml-2 font-sans text-xs text-foreground-muted`,children:$(`panel.pairing.portFallback`)}):null]}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,"aria-label":$(`panel.pairing.portTitle`),disabled:f,onClick:d,children:$(`panel.common.edit`)})]})}),(0,X.jsx)(ND,{label:$(`panel.pairing.phoneAddress`),children:(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[h?null:(0,X.jsx)(`span`,{className:`text-xs text-foreground-subtle`,children:$(`panel.pairing.noAddress`)}),(0,X.jsx)(Mk,{on:!1,what:$(`panel.pairing.phoneAddress`),label:$(`panel.common.show`),onClick:()=>b(!0)})]})})]})})]}),a?(0,X.jsxs)(BE,{variant:`error`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.pairing.sidecarRestartFailed`)}),(0,X.jsx)(WE,{children:a})]}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:f,onClick:o,children:$(`panel.pairing.openConfig`)}),(0,X.jsx)(Ek,{}),(0,X.jsx)(Bf,{variant:`secondary`,size:`md`,disabled:f,onClick:l,children:$(`panel.pairing.reconnect`)})]}),(0,X.jsx)(jf,{open:x,onOpenChange:S,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.qr`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(`div`,{className:`flex items-center justify-center rounded-md bg-white p-4`,children:t?.svg?(0,X.jsx)(`div`,{className:`size-[min(70vh,440px)] [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:t.svg}}):null})})]})}),(0,X.jsx)(jf,{open:y,onOpenChange:b,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.phoneAddress`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(vk,{book:n,port:t?.lanPort??e.lan.port,value:n?.preferred??``,busy:f,onChange:u,fallbackUrls:t?.lanUrls??[]})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>b(!1),children:$(`panel.common.close`)})})]})})]})}function Pk(e,t){return e&&e.lan.length+e.public.length>0?`book`:t?.lanUrls?.[0]??``}function Fk({open:e,onOpenChange:t,status:n,addressBook:r,lanUrls:i,busy:a,onSave:o,onSavePreferred:s}){let[c,l]=(0,g.useState)(n.relayUrl),[u,d]=(0,g.useState)(``),[f,p]=(0,g.useState)(``),[m,h]=(0,g.useState)(``),[_,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(!1),C=(0,g.useRef)(null),w=(0,g.useRef)(null),T=(0,g.useRef)(null),E=(0,g.useRef)(!1),D=(0,g.useRef)(!1),O=(0,g.useRef)(!1),k=r?r.lan.length>0?r.lan:r.public:[];(0,g.useEffect)(()=>{e&&l(n.relayUrl)},[e]),(0,g.useEffect)(()=>{e||(b(!1),S(!1))},[e]),(0,g.useEffect)(()=>{if(!e){E.current=!1,D.current=!1,O.current=!1,v(``);return}if(E.current||d(r?.manual??``),D.current||p(r?.manualIpv6??``),!O.current){let e=r?r.lan.length>0?r.lan:r.public:[];h((r?.preferred||``).trim()||(e[0]?.address??``))}},[e,r]);let A=a===``,j=e=>e.trim().replace(/\/+$/,``);function M(){if(!A)return;let e={};c.trim()!==n.relayUrl&&(e.relayUrl=c.trim());let t=j(u);t!==j(r?.manual??``)&&(e.manualLanUrl=t);let i=j(f);i!==j(r?.manualIpv6??``)&&(e.manualIpv6Url=i);let a=m.trim();if(O.current&&a!==(r?.preferred??``).trim()){if(a&&!k.some(e=>e.address===a)){v($(`panel.address.lanUnknown`));return}e.preferredLanAddress=a}o(e)}return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`w-[min(1100px,92vw)]`,initialFocus:T,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.openConfig`)})}),(0,X.jsx)(`div`,{ref:T,tabIndex:-1,className:`outline-none`,children:(0,X.jsxs)(Ff,{className:`grid max-h-[calc(100vh-13rem)] grid-cols-2 items-start gap-x-8 overflow-y-auto`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(PO,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(FO,{htmlFor:`relay-url`,children:$(`panel.connection.relayUrl`)}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,onClick:()=>b(!0),children:$(`panel.relay.choosePublicRelay`)})]}),(0,X.jsx)(zO,{inputProps:{id:`relay-url`,className:`font-mono`},value:c,placeholder:`https://example.com`,onChange:e=>l(e.target.value)})]}),(0,X.jsxs)(PO,{children:[(0,X.jsx)(FO,{htmlFor:`relay-manual-lan`,children:$(`panel.address.direct`)}),(0,X.jsx)(zO,{inputProps:{id:`relay-manual-lan`,className:`font-mono`},value:u,placeholder:$(`panel.address.directPlaceholder`),onChange:e=>{E.current=!0,d(e.target.value)}})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(PO,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(FO,{htmlFor:`relay-preferred-lan`,children:$(`panel.address.lan`)}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,onClick:()=>S(!0),children:$(`panel.onboarding.chooseAddress`)})]}),(0,X.jsx)(zO,{inputProps:{id:`relay-preferred-lan`,className:`font-mono`,list:`relay-lan-candidates`},value:m,placeholder:$(`panel.address.lanPlaceholder`),onChange:e=>{O.current=!0,v(``),h(e.target.value)}}),(0,X.jsx)(`datalist`,{id:`relay-lan-candidates`,children:k.map(e=>(0,X.jsx)(`option`,{value:e.address,children:e.url},e.address))}),_?(0,X.jsx)(`p`,{className:`text-xs text-error`,children:_}):null]}),(0,X.jsxs)(PO,{children:[(0,X.jsx)(FO,{htmlFor:`relay-manual-ipv6`,children:$(`panel.address.ipv6Url`)}),(0,X.jsx)(zO,{inputProps:{id:`relay-manual-ipv6`,className:`font-mono`},value:f,placeholder:$(`panel.address.ipv6Placeholder`),onChange:e=>{D.current=!0,p(e.target.value)}})]})]})]})}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:a===`config`,onClick:()=>t(!1),children:$(`panel.common.cancel`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:!A,onClick:M,children:$(`panel.relay.saveConfig`)})]})]})}),(0,X.jsx)(jf,{open:y,onOpenChange:b,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)]`,initialFocus:C,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.publicRelay`)})}),(0,X.jsx)(`div`,{ref:C,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`flex max-h-[60vh] flex-col gap-0.5 overflow-y-auto`,children:Sk.map(e=>{let t=c.trim()===e.url;return(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{l(e.url),b(!1)},className:`flex w-full items-baseline justify-between gap-3 rounded px-2 py-1.5 text-left ${t?`bg-background-muted`:`hover:bg-background-muted`}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(t?`panel.relay.selected`:e.nameKey)})]},e.url)})})}),(0,X.jsxs)(If,{className:`flex justify-between gap-2`,children:[(0,X.jsx)(Bf,{variant:`ghost`,disabled:c.trim()===``,onClick:()=>{l(``),b(!1)},children:$(`panel.relay.clear`)}),(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>b(!1),children:$(`panel.common.close`)})]})]})}),(0,X.jsx)(jf,{open:x,onOpenChange:S,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)]`,initialFocus:w,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.address.lan`)})}),(0,X.jsx)(`div`,{ref:w,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`max-h-[60vh] overflow-y-auto px-1 py-2`,children:(0,X.jsx)(vk,{align:`start`,book:r,port:n.lan.port,value:r?.preferred??``,busy:a!==``,fallbackUrls:i,onChange:e=>{s(e),S(!1)}})})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>S(!1),children:$(`panel.common.close`)})})]})})]})}var Ik=18e5,Lk=3e5,Rk=15e3,zk=null,Bk=0,Vk=0,Hk=null;function Uk(e){return typeof e!=`number`||!Number.isFinite(e)?!1:e===0||Date.now()-e>Ik}function Wk(e){if(!e&&Hk)return Hk;let t=(async()=>{let t=await XD(e?`/api/relay/selfcheck?force=1`:`/api/relay/selfcheck`);return zk=t,Bk=Date.now(),t})();return e||(Hk=t,t.finally(()=>{Hk===t&&(Hk=null)})),t}function Gk(e,t=``){let[n,r]=(0,g.useState)(zk),[i,a]=(0,g.useState)(!1),[o,s]=(0,g.useState)(``),[c,l]=(0,g.useState)(!1),u=(0,g.useRef)(!0);(0,g.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]);let d=(0,g.useCallback)(async e=>{if(!e&&zk&&Date.now()-Bk<Rk){r(zk);return}a(!0);try{let t=await Wk(e);if(!u.current)return;r(t),s(``),l(!1)}catch(e){if(!u.current)return;l(e instanceof JD&&e.status===404),s(QD(e))}finally{u.current&&a(!1)}},[]);(0,g.useEffect)(()=>{e&&(Date.now()-Vk<Lk||zk&&Date.now()-Bk<Rk||(Vk=Date.now(),d(!1)))},[e,d]);let f=(0,g.useRef)(null);return(0,g.useEffect)(()=>{if(t){if(f.current===null){f.current=t;return}f.current!==t&&(f.current=t,d(!0))}},[t,d]),{data:n,checking:i,error:o,missing:c,ensure:(0,g.useCallback)(()=>void d(!1),[d]),refresh:(0,g.useCallback)(()=>void d(!0),[d])}}function Kk(e){return e===`ok`?`ok`:e===`unknown`?`warn`:`error`}var qk={ok:{long:`panel.selfcheck.verdict.ok`,short:`panel.selfcheck.short.ok`},"not-listening":{long:`panel.selfcheck.verdict.notListening`,short:`panel.selfcheck.short.notListening`},"firewall-blocked":{long:`panel.selfcheck.verdict.firewallBlocked`,short:`panel.selfcheck.short.firewallBlocked`},unknown:{long:`panel.selfcheck.verdict.unknown`,short:`panel.selfcheck.short.unknown`},network:{long:`panel.selfcheck.verdict.network`,short:`panel.selfcheck.short.network`}};function Jk(e){return $(qk[e]?.long??`panel.selfcheck.verdict.unknown`)}function Yk(e){if(!e)return{tone:`off`,text:$(`panel.selfcheck.notChecked`)};let t=e.firewall,n=Qk(t.appPath);return!t.supported||t.enabled===null?{tone:`warn`,text:$(`panel.selfcheck.unknown`)}:t.enabled===!1?{tone:`ok`,text:$(`panel.selfcheck.firewallOff`),...n?{detail:n}:{}}:t.allowsApp===!1?{tone:`error`,text:$(`panel.selfcheck.blocked`),...n?{detail:n}:{}}:t.allowsApp===!0?{tone:`ok`,text:$(`panel.selfcheck.allowed`),...n?{detail:n}:{}}:{tone:`warn`,text:$(`panel.selfcheck.unknown`)}}function Xk(e,t){let n=typeof e?.mobile?.lastMobileAt==`number`?e.mobile.lastMobileAt:t;return typeof n!=`number`||!Number.isFinite(n)?{tone:`off`,text:$(`panel.selfcheck.notChecked`)}:n===0?{tone:`warn`,text:$(`panel.selfcheck.mobileNever`)}:(typeof e?.mobile?.idle==`boolean`?e.mobile.idle:Uk(n))?{tone:`warn`,text:$(`panel.selfcheck.mobileIdle`),detail:zg(n)}:{tone:`ok`,text:$(`panel.selfcheck.mobileRecent`),detail:zg(n)}}function Zk(e){let t={listening:`panel.lan.listening`,off:`panel.status.off`,error:`panel.lan.error`};return t[e]?$(t[e]):e}function Qk(e){let t=String(e??``).trim();if(!t)return``;let n=t.split(/[\\/]/);return n[n.length-1]??``}function $k({open:e,onOpenChange:t,state:n,lastMobileAt:r}){(0,g.useEffect)(()=>{e&&n.ensure()},[e,n.ensure]);let i=n.data,a=Yk(i),o=Xk(i,r),s=i?Kk(i.verdict):`warn`;return(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.selfcheck.title`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-3`,children:[n.error?(0,X.jsxs)(BE,{variant:n.missing?`warning`:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:n.missing?$(`panel.selfcheck.unavailable`):$(`panel.selfcheck.failed`)}),n.missing?null:(0,X.jsx)(WE,{children:n.error})]}):null,i?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:Ig(`text-sm`,s===`ok`?`text-foreground`:Rg[s]),children:Jk(i.verdict)}),(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.connection.lan`),children:(0,X.jsx)(FD,{tone:i.listening.state===`listening`?`ok`:i.listening.state===`error`?`error`:`off`,text:Zk(i.listening.state),detail:$(`panel.selfcheck.port`,{port:i.listening.port})})}),(0,X.jsx)(ND,{label:$(`panel.connection.tunnel`),children:(0,X.jsx)(FD,{tone:Bg(i.tunnel.state),text:Vg(i.tunnel.state)})}),(0,X.jsx)(ND,{label:$(`panel.selfcheck.firewall`),children:(0,X.jsx)(FD,{tone:a.tone,text:a.text,detail:a.detail})}),(0,X.jsx)(ND,{label:$(`panel.selfcheck.mobile`),children:(0,X.jsx)(FD,{tone:o.tone,text:o.text,detail:o.detail})})]}),(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.selfcheck.checkedAt`,{time:zg(i.checkedAt)})})]}):n.checking?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.selfcheck.checking`)]}):null]}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>t(!1),children:$(`panel.common.close`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:n.checking,onClick:n.refresh,children:n.checking?$(`panel.selfcheck.checking`):$(`panel.selfcheck.recheck`)})]})]})})}var eA=`/dsh-market/api/v1`,tA=`dsh-mobile-plugin`,nA=class extends Error{status;code;constructor(e,t,n){super(n),this.name=`MarketError`,this.status=e,this.code=t}},rA=e=>e&&typeof e==`object`?e:{},iA=e=>typeof e==`string`&&e!==``?e:null;async function aA(e,t){let n;try{n=await fetch(`${eA}${e}`,{credentials:`same-origin`,...t})}catch(e){throw new nA(0,`market_unreachable`,$(`panel.net.marketUnreachable`,{message:String(e?.message||e)}))}let r=await n.json().catch(()=>null);if(!n.ok){let e=rA(r),t=rA(e.failure),i=iA(t.code)??(typeof e.error==`string`?e.error:`HTTP ${n.status}`),a=iA(t.message)??iA(e.error)??$(`panel.net.marketHttp`,{status:n.status});throw new nA(n.status,i,a)}return r}async function oA(){try{return{available:!0,restartSupported:rA(rA(await aA(`/capabilities`)).restart).supported===!0}}catch{return{available:!1,restartSupported:!1}}}async function sA(e=tA,t=!1){let n=rA(await aA(`/updates${`?name=${encodeURIComponent(e)}${t?`&force=1`:``}`}`)),r=rA(n.package??n);return{installedVersion:iA(r.installedVersion),latestVersion:iA(r.latestVersion),updateAvailable:r.updateAvailable===!0,source:iA(r.source)}}var cA={status:`/api/relay/update/status`,check:`/api/relay/update/check`,apply:`/api/relay/update/apply`,auto:`/api/relay/update/auto`,otaStatus:`/api/relay/update/ota/status`,otaCheck:`/api/relay/update/ota/check`,otaApply:`/api/relay/update/ota/apply`},lA=e=>e&&typeof e==`object`?e:{},uA=e=>typeof e==`string`&&e!==``?e:null,dA=e=>typeof e==`boolean`?e:null,fA=e=>typeof e==`number`&&Number.isFinite(e)?e:null;async function pA(e,t){let n=await fetch(e,{credentials:`same-origin`,headers:{accept:`application/json`,...t?.body?{"content-type":`application/json`}:{}},...t}),r=null;try{r=await n.json()}catch{r=null}let i=lA(r),a=lA(i.error);if(!n.ok){let e=uA(a.code)??`http_${n.status}`;throw new JD(uA(a.message)??$(`panel.net.hostHttp`,{status:n.status}),e,n.status)}return i}function mA(e){return e instanceof JD?e.status===404:e instanceof SyntaxError}function hA(e){return e instanceof JD&&e.code===`update_unavailable`}function gA(e){let t=lA(e);return Object.keys(t).length===0?null:{installedVersion:uA(t.installedVersion),latestVersion:uA(t.latestVersion),updateAvailable:t.updateAvailable===!0,source:uA(t.source),checkedAt:uA(t.checkedAt)}}function _A(e){let t=lA(e),n=lA(t.failure),r=uA(n.code);return{installed:dA(t.installed),skipped:dA(t.skipped),state:uA(t.state),beforeVersion:uA(t.beforeVersion),installedVersion:uA(t.installedVersion),swapped:dA(t.swapped),restartRequired:dA(t.restartRequired),refreshRequired:dA(t.refreshRequired),failure:r?{code:r,message:uA(n.message)??r}:null}}function vA(e){let t=lA(e);return{available:t.available===!0,version:uA(t.version),installedVersion:uA(t.installedVersion),source:uA(t.source),previousVersion:uA(t.previousVersion),activatedAt:uA(t.activatedAt),lastError:uA(t.lastError),inFlight:fA(t.inFlight)??0,swapping:t.swapping===!0,autoUpdate:t.autoUpdate===!0,autoIntervalMs:fA(t.autoIntervalMs)??6e5,marketBase:uA(t.marketBase),marketLastCheckedAt:uA(t.marketLastCheckedAt),marketLastError:uA(t.marketLastError),marketResult:gA(t.marketResult),lastApply:t.lastApply?_A(t.lastApply):null,appliedAt:uA(t.appliedAt),runningShellHash:uA(t.runningShellHash),installedShellHash:uA(t.installedShellHash),shellChanged:t.shellChanged===!0}}async function yA(){return vA((await pA(cA.status)).data)}async function bA(){let e=lA((await pA(cA.check,{method:`POST`,body:JSON.stringify({})})).data);return{update:gA(e.update),status:e.status?vA(e.status):null}}async function xA(e=!1){let t=lA((await pA(cA.apply,{method:`POST`,body:JSON.stringify({force:e})})).data),n=lA(t.status);return{..._A(t),status:Object.keys(n).length>0?vA(n):null}}async function SA(e){let t=lA((await pA(cA.auto,{method:`POST`,body:JSON.stringify({enabled:e})})).data);return{enabled:t.enabled===!0,status:t.status?vA(t.status):null}}var CA=new Set([`OPERATION_BUSY`,`RELEASE_TOO_FRESH`,`VERSION_UNCHANGED`,`PLUGIN_NOT_INSTALLED`,`AGENTS_RUNNING`]);function wA(e,t){if(!e)return t;let n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function TA(e){let t=e.installedVersion??e.beforeVersion;return e.failure?{text:$(`panel.update.applyFailed`,{message:e.failure.message}),ok:!1}:e.installed===!1?e.skipped?{text:t?$(`panel.update.applyUpToDate`,{version:t}):$(`panel.update.applyUpToDatePlain`),ok:!0}:{text:t?$(`panel.update.applyDiskUnchanged`,{version:t}):$(`panel.update.applyFailedRetry`),ok:!1}:{text:t?$(`panel.update.applySwitched`,{version:t}):$(`panel.update.applySwitchedPlain`),ok:!0}}function EA({version:e,busy:t,onRestartSidecar:n}){let[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(``),h=eO(),[_,v]=(0,g.useState)(!1),y=(0,g.useCallback)(e=>{e&&i(t=>({...e,available:e.available===!0||t?.available===!0}))},[]),b=r!==null&&r.available&&!s,x=t!==``||p!==``,S=(0,g.useCallback)(async()=>{try{let e=await yA();i(e),c(e.available!==!0)}catch(e){i(null),c(hA(e))}finally{o(!0)}},[]);(0,g.useEffect)(()=>{S()},[S]),(0,g.useEffect)(()=>{if(!a)return;let e=!0;return bA().then(t=>{e&&(t.update&&f(t.update),t.status&&y(t.status))}).catch(()=>{}),()=>{e=!1}},[a]);let C=r?.swapping===!0;(0,g.useEffect)(()=>{if(!C)return;let e=window.setInterval(()=>void S(),1500);return()=>window.clearInterval(e)},[C,S]),(0,g.useEffect)(()=>{if(b||!a)return;let e=!0;return oA().then(t=>{e&&u(t)}),()=>{e=!1}},[b,a]);let w=(0,g.useCallback)(e=>{if(e instanceof nA&&CA.has(e.code)){h(`soft`,`${e.message}(${e.code})`);return}h(`error`,QD(e))},[]),T=(0,g.useCallback)(async()=>{m(`check`);try{let e=await bA();e.status&&y(e.status),e.update&&f(e.update)}catch(e){mA(e)||hA(e)?await S():h(`error`,QD(e))}finally{m(``)}},[S]),E=(0,g.useCallback)(async e=>{m(`apply`);try{let t=await xA(e);t.status&&y(t.status);let n=TA(t),r=t.failure!==null&&CA.has(t.failure.code);n.ok||r?h(`soft`,n.text):h(`error`,n.text)}catch(e){mA(e)||hA(e)?await S():h(`error`,QD(e))}finally{m(``)}},[S]),D=(0,g.useCallback)(async()=>{m(`check`);try{let e=await bA();e.status&&y(e.status),f(e.update)}catch(e){if(!mA(e))f(null),h(`error`,QD(e));else try{f(await sA(void 0,!0))}catch(e){f(null),w(e)}}finally{m(``)}},[w]),O=(0,g.useCallback)(async e=>{v(!0);try{let t=await SA(e);t.status&&y(t.status);let n=Math.round((t.status?.autoIntervalMs??r?.autoIntervalMs??6e5)/6e4);h(`soft`,t.enabled?$(`panel.update.autoOn`,{minutes:n}):$(`panel.update.autoOff`))}catch(e){h(`error`,$(`panel.update.autoToggleFailed`,{message:QD(e)})),await S()}finally{v(!1)}},[r?.autoIntervalMs,S]),k=d?.latestVersion??r?.marketResult?.latestVersion??null,A=d?.source??r?.marketResult?.source??null,j=A===`linked`||A===`file`||A===`workspace`,M=d?.updateAvailable??r?.marketResult?.updateAvailable??!1,N=r?.lastApply?TA(r.lastApply):null,P=e||`—`,F=r?.version??null,I=b&&!!F&&!!e&&F!==e;return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsxs)(nD,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{children:$(`panel.update.title`)}),(0,X.jsx)(JE,{variant:`soft`,size:`sm`,children:e||$(`panel.update.unknownVersion`)})]})}),a?null:(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.update.reading`)]}),s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(ND,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)})]}),(0,X.jsxs)(`p`,{className:`mt-3 text-xs text-foreground-muted`,children:[M?$(`panel.update.hasNew`):``,$(`panel.update.nothingToInstall`)]})]}):null,a&&!b&&!s&&l!==null&&!l.available?(0,X.jsxs)(BE,{variant:`info`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.update.noMarketTitle`)}),(0,X.jsx)(WE,{children:$(`panel.update.noMarketBody`)})]}):null,b&&r?(0,X.jsxs)(X.Fragment,{children:[j?null:(0,X.jsxs)(`label`,{className:`mt-1 flex items-start justify-between gap-4 border-b border-border-muted py-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0`,children:(0,X.jsx)(`span`,{className:`block text-sm text-foreground`,children:$(`panel.update.autoUpdate`)})}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[_?(0,X.jsx)(ME,{}):null,(0,X.jsx)(jD,{size:`md`,checked:r.autoUpdate,disabled:x||_,onCheckedChange:e=>void O(e),"aria-label":$(`panel.update.autoUpdate`)})]})]}),(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(ND,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)}),(0,X.jsx)(ND,{label:$(`panel.update.lastCheck`),children:wA(d?.checkedAt??r.marketLastCheckedAt,$(`panel.update.notChecked`))}),(0,X.jsx)(ND,{label:$(`panel.update.lastApply`),children:r.lastApply?wA(r.appliedAt,$(`panel.update.neverUpdated`)):$(`panel.update.neverUpdated`)})]}),I?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-foreground-muted`,children:$(`panel.update.versionDrift`,{version:e??``,shell:F??``})}):null,r.shellChanged?(0,X.jsxs)(BE,{variant:`info`,className:`mt-3`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.update.shellChangedTitle`)}),(0,X.jsx)(WE,{children:$(`panel.update.shellChangedBody`)})]}):null,r.lastError?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-foreground-muted`,children:$(`panel.update.lastErrorLine`,{message:r.lastError})}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:n,children:$(`panel.update.restartSidecar`)}),(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:()=>void T(),children:$(p===`check`?`panel.update.checking`:`panel.update.check`)}),j?null:(0,X.jsx)(Bf,{variant:`primary`,size:`md`,disabled:x,onClick:()=>void E(!1),children:$(p===`apply`?`panel.update.updating`:`panel.update.updateNow`)})]}),!j&&(M||N!==null&&!N.ok)?(0,X.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,disabled:x,onClick:()=>void E(!0),children:$(`panel.update.forceHint`)})}):null]}):null,a&&!b&&!s&&l?.available?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(PD,{children:[(0,X.jsx)(ND,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(ND,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)}),(0,X.jsx)(ND,{label:$(`panel.update.checkResult`),children:$(M?`panel.update.resultHasNew`:`panel.update.resultUpToDate`)})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:n,children:$(`panel.update.restartSidecar`)}),(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:()=>void D(),children:$(p===`check`?`panel.update.checking`:`panel.update.check`)}),r!==null&&!j?(0,X.jsx)(Bf,{variant:`primary`,size:`md`,disabled:x,onClick:()=>void E(!1),children:$(p===`apply`?`panel.update.updating`:`panel.update.updateNow`)}):null]})]}):null]})}function DA(e){let t=Number.isFinite(e)&&e>0?e:0;return t===0?`0 MB`:t<1048576?`${Math.max(1,Math.round(t/1024))} KB`:`${(t/1024/1024).toFixed(1)} MB`}function OA(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/36e5);return n<1?$(`panel.inbox.ageLessThanHour`):n<24?$(`panel.inbox.ageHours`,{hours:n}):$(`panel.inbox.ageDays`,{days:Math.floor(n/24)})}function kA(){let e=eO(),[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(!1),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(!1),l=(0,g.useCallback)(async()=>{try{n(await XD(`/api/relay/inbox/status`))}catch{n(null)}finally{i(!0)}},[]);(0,g.useEffect)(()=>{l()},[l]);let u=t?.deletableFiles??0,d=OA(t?.oldestAt??null),f=t?.stagingFiles??0;async function p(t){if(!s){c(!0);try{let e=await ZD(`/api/relay/inbox/auto`,{enabled:t});n(t=>t&&{...t,autoClear:e.data.autoClear})}catch(t){e(`error`,$(`panel.inbox.autoFailed`,{message:QD(t)}))}finally{c(!1)}}}async function m(){if(a)return;let n=u>0?$(`panel.inbox.confirmDetail`,{count:u,hours:t?.keepHours??24,bytes:DA(t?.deletableBytes??0)}):$(`panel.inbox.confirmNothing`,{hours:t?.keepHours??24});if(window.confirm(`${$(`panel.inbox.confirmTitle`)}\n\n${n}\n\n${$(`panel.inbox.confirmIrreversible`)}`)){o(!0);try{let t=await ZD(`/api/relay/inbox/clear`),n=DA(t.freedBytes);e(t.failedFiles>0?`soft`:`ok`,t.deletedFiles>0?`${$(`panel.inbox.cleared`,{bytes:n,count:t.deletedFiles})}${t.failedFiles>0?$(`panel.inbox.clearedSomeFailed`,{count:t.failedFiles}):``}`:$(`panel.inbox.nothingToClear`)),await l()}catch(t){e(`error`,$(`panel.inbox.clearFailed`,{message:QD(t)}))}finally{o(!1)}}}return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsx)(nD,{className:`flex items-center gap-2`,children:(0,X.jsx)(`span`,{children:$(`panel.inbox.title`)})})}),r?null:(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.inbox.reading`)]}),r&&t===null?(0,X.jsxs)(BE,{variant:`info`,className:`mt-2`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.inbox.unreadableTitle`)}),(0,X.jsx)(WE,{children:$(`panel.inbox.unreadableBody`)})]}):null,t===null?null:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`dl`,{className:`mt-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.used`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:$(`panel.inbox.usedValue`,{bytes:DA(t.bytes),count:t.files})})]}),(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.deletable`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:u>0?$(`panel.inbox.deletableValue`,{bytes:DA(t.deletableBytes),count:u}):$(`panel.common.none`)})]}),(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.keep`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:d?$(`panel.inbox.keepValueOldest`,{hours:t.keepHours,age:d}):$(`panel.inbox.keepValue`,{hours:t.keepHours})})]})]}),f>0?(0,X.jsx)(`p`,{className:`mt-1 text-xs text-foreground-muted`,children:$(`panel.inbox.staging`,{bytes:DA(t.stagingBytes??0),count:t.stagingFiles??0})}):null,(0,X.jsxs)(`label`,{className:`mt-3 flex items-center justify-between gap-4 border-t border-border-muted pt-3`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-foreground`,children:$(`panel.inbox.auto`)}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[s?(0,X.jsx)(ME,{}):null,(0,X.jsx)(jD,{size:`md`,checked:t.autoClear===!0,disabled:a||s,onCheckedChange:e=>void p(e),"aria-label":$(`panel.inbox.autoA11y`)})]})]}),(0,X.jsx)(`div`,{className:`mt-3 flex justify-center`,children:(0,X.jsx)(Bf,{variant:u>0?`primary`:`outline`,size:`md`,disabled:a,onClick:()=>void m(),children:$(a?`panel.inbox.clearing`:`panel.inbox.clear`)})})]})]})}function AA({webAccess:e,busy:t,onToggle:n}){let r=e?.enabled===!0,i=typeof e?.expiresAt==`number`?e.expiresAt:0;return(0,X.jsxs)(eD,{frame:`solid`,children:[(0,X.jsx)(tD,{children:(0,X.jsx)(nD,{children:$(`panel.webAccess.title`)})}),(0,X.jsx)(PD,{children:(0,X.jsx)(ND,{label:$(`panel.webAccess.state`),tone:r?`ok`:`off`,children:r?$(`panel.webAccess.expires`,{time:zg(i)}):$(`panel.webAccess.closed`)})}),(0,X.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-foreground-muted`,children:$(`panel.webAccess.hint`)}),(0,X.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:r?(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t===`webAccess`,onClick:()=>n(!1),children:$(`panel.webAccess.close`)}):(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t===`webAccess`,onClick:()=>n(!0),children:$(`panel.webAccess.open`)})})]})}function jA(){let[e,t]=(0,g.useState)(null),[n,r]=(0,g.useState)(``),i=eO(),[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(null),[l,u]=(0,g.useState)(``),[d,f]=(0,g.useState)(!1),[p,m]=(0,g.useState)(!1),[h,_]=(0,g.useState)(null),[v,y]=(0,g.useState)(!1),b=Gk(Uk(e?.lastMobileAt),e?`${+!!e.enabled}|${+!!e.lan.enabled}|${e.lan.state}|${e.tunnel.state}|${+((e.lastMobileAt??0)>0)}`:``),x=(0,g.useCallback)(async()=>{try{t(await XD(`/api/relay/status`)),r(``)}catch(e){r(QD(e))}},[]),S=(0,g.useCallback)(async()=>{try{c(await XD(`/api/relay/pairing`)),u(``)}catch(e){c(null),u(QD(e))}},[]),C=(0,g.useCallback)(async()=>{try{_(await XD(`/api/relay/addresses`))}catch{_(null)}},[]);(0,g.useEffect)(()=>{let e=()=>{document.hidden||x()};e();let t=window.setInterval(e,3e3);return document.addEventListener(`visibilitychange`,e),()=>{window.clearInterval(t),document.removeEventListener(`visibilitychange`,e)}},[x]),(0,g.useEffect)(()=>{!e?.enabled||s||l||S()},[e?.enabled,s,l,S]),(0,g.useEffect)(()=>{e?.enabled&&s&&e.pairingCode&&s.pairingCode!==e.pairingCode&&S()},[e?.pairingCode,e?.enabled,s,S]),(0,g.useEffect)(()=>{d&&e?.enabled&&(S(),C())},[d,e?.enabled,S,C]),(0,g.useEffect)(()=>{e?.enabled&&C()},[e?.enabled,s,C]);let w=(0,g.useCallback)(async(e,t)=>{o(e);try{await t()}catch(e){i(`error`,QD(e))}finally{o(``)}},[]),T=e=>w(`toggle`,async()=>{t(await ZD(`/api/relay/toggle`,{enabled:e})),e?await S():(c(null),u(``)),i(`soft`,$(e?`panel.shell.remoteEnabled`:`panel.shell.remoteDisabled`))}),E=()=>w(`reconnect`,async()=>{t(await ZD(`/api/relay/reconnect`)),i(`soft`,$(`panel.shell.reconnecting`))}),D=()=>w(`restart`,async()=>{let e=await ZD(`/api/relay/restart-sidecar`);t(e.status),i(`soft`,$(`panel.shell.sidecarRestarted`))}),O=()=>{window.confirm($(`panel.shell.revokeConfirm`))&&w(`revoke`,async()=>{let e=await ZD(`/api/relay/revoke-all`);await x(),await S(),i(`soft`,`${$(`panel.shell.revoked`,{count:e.revoked})}${e.revokedRelay?$(`panel.shell.revokedRelay`,{count:e.revokedRelay}):``}`)})},k=e=>w(`webAccess`,async()=>{let n=await ZD(`/api/relay/web-access`,{enabled:e});t(e=>e&&{...e,webAccess:n.webAccess}),i(`soft`,$(e?`panel.webAccess.opened`:`panel.webAccess.closedNotice`))}),A=e=>w(`config`,async()=>{t(await ZD(`/api/relay/config`,e)),f(!1),await S(),i(`soft`,$(`panel.shell.configSaved`))}),j=e=>w(`policy`,async()=>{t(await ZD(`/api/relay/config`,{pairingPolicy:e})),i(`soft`,$(e===`code`?`panel.shell.deviceAllowed`:`panel.shell.deviceDenied`))}),M=e=>w(`lan`,async()=>{t(await ZD(`/api/relay/config`,{lanPort:e})),m(!1),await S(),i(`soft`,$(`panel.shell.lanSaved`))}),N=e=>w(`lan`,async()=>{t(await ZD(`/api/relay/config`,{preferredLanAddress:e})),await Promise.all([S(),C()]),i(`soft`,e?$(`panel.shell.preferredAddress`,{address:e}):$(`panel.shell.preferredAuto`))});return e?(0,X.jsxs)(`main`,{className:`mx-auto flex w-full max-w-6xl flex-col gap-4 p-6`,children:[(0,X.jsxs)(`header`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`h1`,{className:`text-lg font-semibold text-foreground-intense`,children:$(`panel.shell.title`)}),(0,X.jsx)(JE,{variant:`soft`,size:`sm`,children:e.appVersion||$(`panel.shell.unknownVersion`)}),a?(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.shell.busy`)]}):null]}),n?(0,X.jsxs)(BE,{variant:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.shell.statusFailed`)}),(0,X.jsx)(WE,{children:n})]}):null,(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-start`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-4`,children:[(0,X.jsx)(Nk,{status:e,pairing:s,addressBook:h,busy:a,error:l,restartError:e.sidecar.restartError,onOpenConfig:()=>f(!0),onChangePolicy:e=>void j(e),onOpenSelfCheck:()=>y(!0),onReconnect:()=>void E(),onSavePreferred:e=>void N(e),onEditPort:()=>m(!0)}),(0,X.jsx)(EA,{version:e.appVersion||``,busy:a,onRestartSidecar:()=>void D()}),(0,X.jsx)(oO,{onRevokeAll:O,busy:a})]}),(0,X.jsxs)(`aside`,{className:`flex flex-col gap-4 max-lg:order-first lg:w-[340px] lg:shrink-0`,children:[(0,X.jsx)(pO,{lanPort:e.lan.port}),(0,X.jsx)(ID,{status:e,busy:a,onToggle:T}),e.webAccess?.enabled&&e.panelScope!==`loopback`?(0,X.jsx)(AA,{webAccess:e.webAccess,busy:a,onToggle:e=>void k(e)}):null,(0,X.jsx)(kA,{})]})]}),(0,X.jsx)(Fk,{open:d,onOpenChange:f,status:e,addressBook:h,lanUrls:s?.lanUrls??[],busy:a,onSave:e=>void A(e),onSavePreferred:e=>void N(e)}),(0,X.jsx)($k,{open:v,onOpenChange:y,state:b,lastMobileAt:e.lastMobileAt}),(0,X.jsx)(HO,{open:p,onOpenChange:m,port:s?.lanPort??e.lan.requestedPort??e.lan.port,busy:a,onSave:e=>void M(e)})]}):(0,X.jsx)(`main`,{className:`mx-auto flex w-full max-w-3xl flex-col gap-4 p-6`,children:n?(0,X.jsxs)(BE,{variant:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.shell.statusFailed`)}),(0,X.jsx)(WE,{children:n})]}):(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.shell.readingStatus`)]})})}var MA=[{textKey:`panel.onboarding.linuxStep1`},{text:`systemctl status firewalld`,cmd:!0},{text:`sudo ufw status`,cmd:!0},{textKey:`panel.onboarding.linuxStep2`},{text:`sudo firewall-cmd --permanent --add-port={port}/tcp
28
- sudo firewall-cmd --reload`,cmd:!0},{text:`sudo ufw allow {port}/tcp`,cmd:!0},{textKey:`panel.onboarding.linuxStep3`}],NA=[{textKey:`panel.onboarding.macStep1`},{text:`/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate`,cmd:!0},{textKey:`panel.onboarding.macStep2`},{text:`sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off`,cmd:!0},{textKey:`panel.onboarding.macStep3`}],PA=[{textKey:`panel.onboarding.winStep1`},{text:`Get-NetFirewallProfile | Select-Object Name, Enabled`,cmd:!0},{textKey:`panel.onboarding.winStep2`},{text:`New-NetFirewallRule -DisplayName "DSH Mobile {port}" -Direction Inbound -LocalPort {port} -Protocol TCP -Action Allow`,cmd:!0},{textKey:`panel.onboarding.winStep3`}];function FA(){return[$(`panel.onboarding.prompt.intro`),``,$(`panel.onboarding.prompt.situation`),$(`panel.onboarding.prompt.address`),$(`panel.onboarding.prompt.guess`),``,$(`panel.onboarding.prompt.ask`),$(`panel.onboarding.prompt.ask1`),$(`panel.onboarding.prompt.ask2`),$(`panel.onboarding.prompt.ask3`),$(`panel.onboarding.prompt.ask4`),``,$(`panel.onboarding.prompt.extra`)].join(`
29
- `)}function IA({title:e,steps:t,port:n,onCopied:r}){async function i(){try{await navigator.clipboard.writeText(FA()),r(!0)}catch{r(!1)}}return(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5 rounded-lg border border-border-muted bg-background-muted p-3`,children:[(0,X.jsx)(`h3`,{className:`text-center text-sm font-semibold text-foreground-intense`,children:e}),t.map(e=>{let t=(e.text??(e.textKey?$(e.textKey):``)).replace(/\{port\}/g,n);return e.cmd?(0,X.jsx)(`pre`,{className:`rounded bg-background-subtle px-2 py-1.5 font-mono text-[11px] leading-5 break-words whitespace-pre-wrap text-foreground-strong`,children:t},t):(0,X.jsx)(`p`,{className:`text-xs leading-5 text-foreground-muted`,children:t},t)}),(0,X.jsx)(Bf,{className:`mt-auto`,variant:`outline`,size:`sm`,onClick:()=>void i(),children:$(`panel.onboarding.copyPromptHint`)})]})}function LA({open:e,onOpenChange:t,port:n}){let[r,i]=(0,g.useState)(``),a=e=>i(e?`ok`:`failed`);return(0,X.jsx)(jf,{open:e,onOpenChange:e=>{e||i(``),t(e)},children:(0,X.jsxs)(Mf,{className:`w-[min(1200px,92vw)] max-w-none`,backdropProps:{className:`z-[80]`},viewportProps:{className:`z-[80]`},children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.firewallTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`p`,{className:`text-sm text-foreground-muted`,children:[$(`panel.onboarding.firewallIntro`),` `,(0,X.jsx)(`span`,{className:`font-mono`,children:n}),$(`panel.onboarding.firewallIntroTail`)]}),(0,X.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-3`,children:[(0,X.jsx)(IA,{title:`Linux`,steps:MA,port:n,onCopied:a}),(0,X.jsx)(IA,{title:`Mac`,steps:NA,port:n,onCopied:a}),(0,X.jsx)(IA,{title:`Windows`,steps:PA,port:n,onCopied:a})]})]}),r?(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(r===`ok`?`panel.onboarding.copiedOk`:`panel.onboarding.copiedFailed`)})}):null]})})}var RA=`public-relay`,zA=`own-relay`,BA=`lan-direct`,VA=`penetration`,HA=Sk;function UA(e){let t=(e.preferred||``).trim();return t&&e.lan.some(e=>e.address===t)?t:e.lan[0]?.address??``}function WA({onDone:e}){let[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),[h,_]=(0,g.useState)(``),[v,y]=(0,g.useState)(``),[b,x]=(0,g.useState)(``),[S,C]=(0,g.useState)([]),[w,T]=(0,g.useState)(``),[E,D]=(0,g.useState)(!1),[O,k]=(0,g.useState)(`idle`),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(!1),[I,L]=(0,g.useState)(!1),[R,z]=(0,g.useState)(!1),[B,V]=(0,g.useState)(!1),[H,ee]=(0,g.useState)(null),[te,U]=(0,g.useState)(``),[W,ne]=(0,g.useState)(``),re=Gk(Uk(t?.lastMobileAt),t?`${+!!t.enabled}|${+!!t.lan.enabled}|${t.lan.state}|${t.tunnel.state}|${+((t.lastMobileAt??0)>0)}`:``),G=Yk(re.data),K=re.data?.verdict??``,ie=(0,g.useRef)(!0);(0,g.useEffect)(()=>(ie.current=!0,()=>{ie.current=!1}),[]),(0,g.useEffect)(()=>{(async()=>{try{let e=await XD(`/api/relay/addresses`);f(e);let n=UA(e);_(n),ne((e.manual??``).trim()),y(e=>e||(t?.relayUrl?RA:BA))}catch{f(null),u(!0)}})()},[]),(0,g.useEffect)(()=>{(async()=>{try{let e=await XD(`/api/relay/status`);n(e),e.enabled&&u(!0)}catch(e){i(QD(e))}await oe()})()},[]);let ae=(0,g.useRef)(!1);(0,g.useEffect)(()=>{ae.current||d!==null&&(ae.current=!0,!(t&&t.enabled)&&_e())},[d,t]);async function oe(){try{m(await XD(`/api/relay/pairing`))}catch{}}(0,g.useEffect)(()=>{if(v!==RA)return;let e=!1;return C(HA.map(e=>({...e,ms:null}))),(async()=>{try{let t=await ZD(`/api/relay/probe-relays`,{urls:HA.map(e=>e.url)});if(e)return;let n=new Map(t.results.map(e=>[e.url,e.ms]));C(e=>e.map(e=>({...e,ms:n.get(e.url)??null})).sort((e,t)=>(e.ms??1/0)-(t.ms??1/0)))}catch{if(e)return;C(e=>e.map(e=>({...e,ms:1/0})))}})(),()=>{e=!0}},[v]),(0,g.useEffect)(()=>{if(v!==zA)return;let e=w.trim().replace(/\/+$/,``);if(!e){k(`idle`);return}if(!/^https?:\/\/[^\s]+$/i.test(e))return;if(e===(t?.relayUrl??``).trim().replace(/\/+$/,``)&&t?.tunnel.state===`connected`){k(`ok`);return}let n=window.setTimeout(()=>{ue(e)},600);return()=>window.clearTimeout(n)},[w,v]),(0,g.useEffect)(()=>{let e=(t?.relayUrl??``).trim();if(!e||H!==null)return;let n=!1;return(async()=>{let t=await ce(e.replace(/\/+$/,``));n||(ee(t),t||o($(`panel.onboarding.recheckSaved`,{url:e})))})(),()=>{n=!0}},[t?.relayUrl]);let se=b||S.find(e=>e.ms!==null&&Number.isFinite(e.ms))?.url||S[0]?.url||``;async function ce(e){try{let t=await Promise.race([ZD(`/api/relay/probe-relays`,{urls:[e]}),new Promise(e=>window.setTimeout(()=>e(null),8e3))]);return t?!!(t.results[0]&&t.results[0].ms!==null):!1}catch{return!1}}async function le(){let e=w.trim().replace(/\/+$/,``);if(!/^https?:\/\/[^\s]+$/i.test(e)){k(`failed`);return}k(`busy`),k(await ce(e)?`ok`:`failed`)}function q(e){T(e),k(`idle`)}async function ue(e){k(`busy`),o(``);let t=await ce(e);if(w.trim().replace(/\/+$/,``)===e){if(!t){U(``),k(`failed`),o($(`panel.onboarding.relayNoAnswer`,{value:e}));return}k(`ok`);try{let t=await XD(`/api/relay/pairing?relayUrl=${encodeURIComponent(e)}`);U(t.svg??``)}catch{U(``)}}}let de=String(t?.lan.port||d?.port||18787),J=v===RA||v===zA,fe=v===RA&&H===!1,pe=t!==null&&(J?t.tunnel.state===`connected`:t.lan.state===`listening`),me=t!==null&&l&&!re.checking&&K!==`ok`&&!(K===`not-listening`&&pe);async function he(e=J){let t=Date.now();for(;ie.current&&Date.now()-t<2e4;){if(await new Promise(e=>window.setTimeout(e,1500)),!ie.current)return;let t;try{t=await XD(`/api/relay/status`)}catch{continue}n(t);let r=e?t.tunnel.state:t.lan.state;if(r===`listening`||r===`connected`||r===`error`)return}}async function ge(e,t){if(s)return;c(!0),t&&u(!1),o(``);let r=e===RA,i={relayUrl:(r&&(se||Sk[0]?.url)||``).trim(),lanEnabled:!0,pairingPolicy:`code`};h&&(i.preferredLanAddress=h),e===VA&&(i.manualLanUrl=W.trim().replace(/\/+$/,``));try{n(await ZD(`/api/relay/config`,i)),t&&(n(await ZD(`/api/relay/toggle`,{enabled:!0})),await ZD(`/api/relay/onboarded`,{}).catch(()=>void 0)),y(e),await oe(),t&&he(r).finally(()=>{ie.current&&u(!0)})}catch(e){t&&ie.current&&u(!0),o(QD(e))}finally{c(!1)}}async function _e(){await ge(v,!0)}function ve(){e?e():window.location.assign(`/`)}async function ye(){let e=w.trim().replace(/\/+$/,``);if(!e)return;let r=(t?.relayUrl??``).trim().replace(/\/+$/,``);if(v===zA&&e===r&&t?.tunnel.state===`connected`){ve();return}if(!s){c(!0),o(``);try{if(!await ce(e)){k(`failed`),U(``),o($(`panel.onboarding.relayNoAnswerUnsaved`,{value:e}));return}k(`ok`);let t={relayUrl:e,lanEnabled:!0,pairingPolicy:`code`};h&&(t.preferredLanAddress=h),n(await ZD(`/api/relay/config`,t)),n(await ZD(`/api/relay/toggle`,{enabled:!0})),await ZD(`/api/relay/onboarded`,{}).catch(()=>void 0),y(zA),await oe(),ve()}catch(e){o(QD(e))}finally{c(!1)}}}async function be(e){if(e===zA){y(e),o(``);return}await ge(e,!0)}async function xe(e){let t={preferredLanAddress:e};J&&(t.relayUrl=``),_(e),y(BA),o(``);try{await ZD(`/api/relay/config`,t)}catch(e){o(QD(e))}N(!1),await oe()}let Se=d?.lan??[],Ce=(()=>{let e=h||Se[0]?.address||``;return Se.find(t=>t.address===e)?.url??e})(),we=v===zA&&w.trim()===``,Te=v===zA&&w.trim()!==``&&w.trim().replace(/\/+$/,``)!==(t?.relayUrl??``).trim().replace(/\/+$/,``),Ee=we||Te&&!te,De=v===zA&&Te&&te!==``,Oe=De?te:p?.svg??``,ke=(()=>{let e=w.trim().replace(/\/+$/,``);if(e===``)return{tone:`off`,text:$(`panel.onboarding.probe.empty`)};if(O===`busy`)return{tone:`warn`,text:$(`panel.onboarding.probe.busy`)};if(e===(t?.relayUrl??``).trim().replace(/\/+$/,``)){let e=t?.tunnel.state??`off`;return{tone:Bg(e),text:Vg(e)}}return O===`ok`?{tone:`ok`,text:$(`panel.onboarding.probe.ok`)}:O===`failed`?{tone:`error`,text:$(`panel.onboarding.probe.failed`)}:{tone:`off`,text:$(`panel.onboarding.probe.idle`)}})(),Ae=v===BA?{label:$(`panel.onboarding.currentLan`),value:Ce||`—`,action:$(`panel.onboarding.chooseAddress`),disabled:Se.length===0,onClick:()=>N(!0)}:v===RA?{label:$(`panel.onboarding.relayAddressHint`),value:se||$(`panel.onboarding.autoBest`),action:$(`panel.onboarding.chooseAddress`),disabled:S.length===0,onClick:()=>L(!0)}:v===zA?{label:$(`panel.onboarding.relayAddressHint`),value:w.trim()||$(`panel.onboarding.probe.empty`),action:$(`panel.onboarding.setAddress`),disabled:!1,onClick:()=>z(!0)}:v===VA?{label:$(`panel.onboarding.penetrationAddress`),value:W.trim()||$(`panel.onboarding.probe.empty`),action:$(`panel.onboarding.setAddress`),disabled:!1,onClick:()=>V(!0)}:{label:$(`panel.onboarding.currentLan`),value:Ce||`—`,action:$(`panel.onboarding.chooseAddress`),disabled:Se.length===0,onClick:()=>N(!0)},je=d?.public??[],Me=d?.ipv6??[];return(0,X.jsxs)(`main`,{className:`flex min-h-screen flex-col items-center justify-center gap-4 px-6 pt-6 pb-24`,children:[r?(0,X.jsxs)(BE,{className:`w-full max-w-4xl`,variant:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.onboarding.statusFailed`)}),(0,X.jsx)(WE,{children:r})]}):null,a?(0,X.jsxs)(BE,{className:`w-full max-w-4xl`,variant:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(`panel.onboarding.stepFailed`)}),(0,X.jsx)(WE,{children:a})]}):null,(0,X.jsxs)(eD,{frame:`solid`,className:`w-full max-w-4xl`,children:[(0,X.jsxs)(`div`,{className:`grid gap-6 px-4 pb-2 md:grid-cols-[minmax(280px,0.9fr)_minmax(0,1.1fr)]`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2 md:col-start-1 md:row-start-1`,children:[(0,X.jsxs)(`div`,{className:`flex h-5 w-full max-w-[280px] items-center justify-center gap-1.5`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium leading-5 text-foreground-strong`,children:$(`panel.onboarding.pairingHint`)}),Oe&&!Ee?(0,X.jsx)(`button`,{type:`button`,"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,title:$(`panel.pairing.qrZoom`),className:`cursor-pointer text-foreground-muted hover:text-foreground-strong focus-visible:outline-none`,onClick:()=>F(!0),children:(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,children:[(0,X.jsx)(`circle`,{cx:`10.5`,cy:`10.5`,r:`6`}),(0,X.jsx)(`path`,{d:`m15 15 4.5 4.5M8.5 10.5h4M10.5 8.5v4`})]})}):null]}),Ee?(0,X.jsx)(`div`,{className:`flex size-[280px] flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border-muted px-5 text-center`,children:we?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterRelay`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterRelayLine2`)})]}):(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterAddress`)})}):Oe?(0,X.jsx)(`button`,{type:`button`,className:`cursor-zoom-in rounded-lg focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,onClick:()=>F(!0),"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,children:(0,X.jsx)(`div`,{className:`size-[280px] rounded-lg bg-white p-3 [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:Oe}})}):(0,X.jsx)(`div`,{className:`flex size-[280px] items-center justify-center rounded-lg border border-border-muted text-xs text-foreground-muted`,children:s?(0,X.jsx)(ME,{}):$(`panel.onboarding.noQr`)}),(0,X.jsx)(`p`,{className:`min-h-4 max-w-[280px] text-center text-xs leading-4 text-foreground-muted`,children:De?$(`panel.onboarding.preview`):J&&!pe&&!Ee?$(`panel.onboarding.relayNotConnected`):``})]}),(0,X.jsx)(`div`,{className:`flex min-w-0 flex-col gap-3 md:col-start-2 md:row-start-1`,children:(0,X.jsxs)(`div`,{className:`rounded-lg border border-border-muted`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline justify-between gap-x-3 gap-y-1 border-b border-border-muted px-3 py-2`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium text-foreground-strong`,children:$(`panel.onboarding.pickAddress`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:()=>D(!0),children:$(`panel.onboarding.checkFirewall`)})]}),(0,X.jsxs)(`div`,{className:`px-3 py-2.5`,children:[(0,X.jsxs)(fk,{className:`gap-2`,value:v,onValueChange:e=>void be(String(e)),children:[(0,X.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5`,children:[(0,X.jsx)(ak,{value:BA,"aria-label":$(`panel.onboarding.lanDirect`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.lanDirect`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(ak,{value:RA,"aria-label":$(`panel.onboarding.publicRelay`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.publicRelay`)})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(`panel.onboarding.publicRelayTemporary`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(ak,{value:zA,"aria-label":$(`panel.onboarding.ownRelay`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.ownRelay`)})]}),(0,X.jsx)(`a`,{className:Mu({variant:`outline`,size:`sm`}),href:bk,target:`_blank`,rel:`noreferrer noopener`,onClick:e=>e.stopPropagation(),children:$(`panel.onboarding.githubRepo`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer items-baseline gap-1.5`,children:[(0,X.jsx)(ak,{value:VA,"aria-label":$(`panel.onboarding.penetration`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.penetration`)})]})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-between gap-x-3 gap-y-1 border-t border-border-muted pt-2.5`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:Ae.label}),(0,X.jsx)(`p`,{className:`min-w-0 font-mono text-sm break-all text-foreground-strong`,children:Ae.value})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:Ae.disabled,onClick:Ae.onClick,children:Ae.action})]})]})]})}),(0,X.jsxs)(`div`,{className:`w-full md:col-span-2 md:row-start-2 [&_dt]:text-foreground-strong`,children:[(0,X.jsxs)(PD,{children:[J?v===zA?(0,X.jsx)(ND,{label:$(`panel.onboarding.thisAddress`),children:(0,X.jsx)(FD,{tone:ke.tone,text:ke.text})}):(0,X.jsx)(ND,{label:$(`panel.connection.tunnel`),children:(0,X.jsx)(FD,{tone:Bg(t?.tunnel.state??`off`),text:Vg(t?.tunnel.state??`off`)})}):(0,X.jsx)(ND,{label:$(`panel.onboarding.direct`),children:(0,X.jsx)(FD,{tone:Hg(t?.lan.state??`off`,!0),text:Ug(t?.lan.state??`off`,!0)})}),(0,X.jsx)(ND,{label:$(`panel.selfcheck.firewall`),children:(0,X.jsx)(FD,{tone:G.tone,text:G.text,detail:G.detail})})]}),me?(0,X.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed break-words ${Rg[Kk(K)]}`,children:Jk(K)}):null,t!==null&&(J?t.tunnel.state===`error`:t.lan.state===`error`)?(0,X.jsxs)(BE,{variant:`error`,children:[(0,X.jsx)(HE,{}),(0,X.jsx)(UE,{children:$(J?`panel.onboarding.relayFailed`:`panel.onboarding.lanFailed`)}),(0,X.jsx)(WE,{children:J?t.tunnel.error?$(`panel.onboarding.tunnelErrorHint`,{error:t.tunnel.error}):$(`panel.onboarding.tunnelNoStart`):t.lan.error?$(`panel.onboarding.lanErrorWithPort`,{error:t.lan.error}):$(`panel.onboarding.lanNoStart`)})]}):null]})]}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2 px-4 py-4`,children:[(0,X.jsx)(Ek,{}),v===zA?(0,X.jsx)(Bf,{variant:`primary`,disabled:s||r!==``||fe||w.trim()===``,onClick:()=>void ye(),children:$(s?`panel.onboarding.connecting`:fe?`panel.onboarding.fixFirst`:we?`panel.onboarding.fillRelayFirst`:`panel.onboarding.enterPlugin`)}):pe&&!fe?(0,X.jsx)(Bf,{variant:`primary`,onClick:ve,children:$(`panel.onboarding.enterPlugin`)}):(0,X.jsx)(Bf,{variant:`primary`,disabled:s||r!==``||fe,onClick:()=>void _e(),children:$(s?`panel.onboarding.opening`:fe?`panel.onboarding.fixFirst`:J?`panel.onboarding.connectRelay`:`panel.onboarding.openDirect`)})]})]}),(0,X.jsx)(LA,{open:E,onOpenChange:D,port:de}),(0,X.jsx)(jf,{open:P,onOpenChange:F,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.qr`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3`,children:(0,X.jsx)(`div`,{className:`flex items-center justify-center rounded-md bg-white p-4`,children:Oe?(0,X.jsx)(`div`,{className:`size-[min(70vh,440px)] [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:Oe}}):null})})})]})}),(0,X.jsx)(jf,{open:I,onOpenChange:L,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.relayListTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[S.some(e=>e.ms===null)?(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.probing`)}):null,(0,X.jsx)(`div`,{className:`max-h-[360px] overflow-y-auto`,children:(0,X.jsxs)(fk,{className:`gap-1`,value:b,onValueChange:e=>x(String(e)),children:[(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(ak,{value:``,"aria-label":$(`panel.onboarding.autoBest`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground`,children:$(`panel.onboarding.autoBest`)})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(`panel.onboarding.autoBestHint`)})]}),S.map(e=>(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(ak,{value:e.url,"aria-label":e.url}),(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:e.url})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.ms===null?$(`panel.onboarding.probing`):Number.isFinite(e.ms)?`${e.ms} ms`:$(`panel.onboarding.probeUnreachable`)})]},e.url))]})})]}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>L(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:R,onOpenChange:z,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.relayAddressHint`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,X.jsx)(zO,{inputProps:{id:`ob-own-relay`,className:`font-mono`},value:w,placeholder:$(`panel.onboarding.relayPlaceholder`),onChange:e=>q(e.target.value)})}),(0,X.jsx)(Bf,{className:`shrink-0`,variant:`outline`,disabled:O===`busy`,onClick:()=>void le(),children:$(O===`busy`?`panel.onboarding.probe.busy`:`panel.onboarding.check`)})]}),O===`ok`?(0,X.jsx)(`p`,{className:`text-xs text-success`,children:$(`panel.onboarding.probe.okWithHint`)}):null,O===`failed`?(0,X.jsx)(`p`,{className:`text-xs text-error`,children:$(`panel.onboarding.probe.failedBody`)}):null]}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>z(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:B,onOpenChange:V,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.penetrationAddress`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(zO,{inputProps:{id:`ob-penetration`,className:`font-mono`},value:W,placeholder:$(`panel.onboarding.penetrationPlaceholder`),onChange:e=>ne(e.target.value)})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>V(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:M,onOpenChange:N,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.lanDialogTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.lanDialogHint`)}),(0,X.jsx)(`div`,{role:`radiogroup`,"aria-label":$(`panel.onboarding.lanGroupA11y`),className:`flex flex-col gap-1`,children:Se.map(e=>{let t=e.address===(h||Se[0]?.address);return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,onClick:()=>void xe(e.address),className:`flex w-full cursor-pointer items-start gap-2.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-background-muted ${t?`bg-background-muted`:``}`,children:[(0,X.jsx)(`span`,{className:`mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border ${t?`border-primary bg-primary text-primary-foreground`:`border-border-muted`}`,"aria-hidden":`true`,children:t?(0,X.jsx)(GA,{}):null}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground`,children:e.url}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:e.interface??$(`panel.onboarding.lan`)})]})]},e.address)})}),je.length>0||Me.length>0?(0,X.jsxs)(`div`,{className:`mt-1 flex flex-col gap-1 border-t border-border-muted pt-3`,children:[(0,X.jsx)(`p`,{className:`text-xs font-medium text-foreground-muted`,children:$(`panel.onboarding.referenceOnly`)}),je.length>0?(0,X.jsx)(`ul`,{className:`flex flex-col gap-1`,children:je.map(e=>(0,X.jsxs)(`li`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground-strong`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.interface??$(`panel.onboarding.public`)})]},e.address))}):null,Me.length>0?(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`button`,{type:`button`,className:`flex w-full cursor-pointer items-baseline justify-between gap-3 rounded px-1 py-1 text-left hover:bg-background-muted`,"aria-expanded":A,onClick:()=>j(e=>!e),children:[(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.ipv6More`,{count:Me.length})}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-intense`,children:$(A?`panel.onboarding.collapse`:`panel.onboarding.expand`)})]}),A?(0,X.jsx)(`ul`,{className:`mt-1 flex flex-col gap-1`,children:Me.map(e=>(0,X.jsxs)(`li`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground-strong`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.interface??`IPv6`})]},e.address))}):null]}):null]}):null]})]})})]})}function GA(){return(0,X.jsx)(`svg`,{viewBox:`0 0 12 12`,className:`size-2.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`m2.5 6.2 2.2 2.3L9.5 3.7`})})}function KA(){let e=window.location.pathname.replace(/\/+$/,``),t=e.endsWith(`/setup`),n=e.endsWith(`/settings`),[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{if(t||n)return;let e=!0;return(async()=>{try{let t=await XD(`/api/relay/status`);e&&i(t.onboarded===!0||t.enabled===!0)}catch{e&&i(!0)}})(),()=>{e=!1}},[t,n]),n?(0,X.jsx)(jA,{}):t?a?(0,X.jsx)(jA,{}):(0,X.jsx)(WA,{onDone:()=>o(!0)}):r===null?(0,X.jsxs)(`main`,{className:`flex min-h-screen items-center justify-center gap-2 p-6 text-sm text-foreground-muted`,children:[(0,X.jsx)(ME,{}),$(`panel.shell.loading`)]}):!r&&!a?(0,X.jsx)(WA,{onDone:()=>o(!0)}):(0,X.jsx)(jA,{})}function qA(){return Gg(),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(KA,{}),(0,X.jsx)(t_,{}),(0,X.jsx)(pp,{})]})}var JA=`dsh-mobile-panel-theme`,YA=document.createElement(`script`);YA.textContent=dd({storageKey:JA}),document.head.appendChild(YA),(0,Ed.createRoot)(document.getElementById(`root`)).render((0,X.jsx)(g.StrictMode,{children:(0,X.jsx)(zu,{children:(0,X.jsxs)(xd,{storageKey:JA,children:[(0,X.jsx)(qA,{}),(0,X.jsx)(Bu,{position:`top-right`})]})})}));</script>
23
+ `),()=>{s.current?.removeAttribute(`data-motion-pop-id`),b.contains(y)&&b.removeChild(y)}},[t]),(0,X.jsx)(hw,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:g.cloneElement(e,{ref:u})})}var _w=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:l})=>{let u=a_(vw),d=(0,g.useId)(),f=(0,g.useRef)(n),p=(0,g.useRef)(r);o_(()=>{f.current=n,p.current=r});let m=!0,h=(0,g.useMemo)(()=>(m=!1,{id:d,initial:t,isPresent:n,custom:i,onExitComplete:e=>{u.set(e,!0);for(let e of u.values())if(!e)return;r&&r()},register:e=>(u.set(e,!1),()=>{u.delete(e),!f.current&&!u.size&&p.current?.()})}),[n,u,r]);return a&&m&&(h={...h}),(0,g.useMemo)(()=>{u.forEach((e,t)=>u.set(t,!1))},[n]),g.useEffect(()=>{!n&&!u.size&&r&&r()},[n]),e=(0,X.jsx)(gw,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:l,children:e}),(0,X.jsx)(s_.Provider,{value:h,children:e})};function vw(){return new Map}function yw(e=!0){let t=(0,g.useContext)(s_);if(t===null)return[!0,null];let{isPresent:n,onExitComplete:r,register:i}=t,a=(0,g.useId)();(0,g.useEffect)(()=>{if(e)return i(a)},[e]);let o=(0,g.useCallback)(()=>e&&r&&r(a),[a,r,e]);return!n&&r?[!1,o]:[!0]}var bw=e=>e.key||``;function xw(e){let t=[];return g.Children.forEach(e,e=>{(0,g.isValidElement)(e)&&t.push(e)}),t}var Sw=({children:e,custom:t,initial:n=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:a=`sync`,propagate:o=!1,anchorX:s=`left`,anchorY:c=`top`,root:l})=>{let[u,d]=yw(o),f=(0,g.useMemo)(()=>xw(e),[e]),p=o&&!u?[]:f.map(bw),m=(0,g.useRef)(!0),h=a_(()=>new Map),_=(0,g.useRef)(new Set),[v,y]=(0,g.useState)(f),[b,x]=(0,g.useState)(f);o_(()=>{o&&!u&&!b.length&&d?.()},[u,o,b.length,d]),o_(()=>{m.current=!1;for(let e=0;e<b.length;e++){let t=bw(b[e]);p.includes(t)?(h.delete(t),_.current.delete(t)):h.get(t)!==!0&&h.set(t,!1)}},[b,p.length,p.join(`-`)]);let S=[];if(f!==v){let e=[...f],t=0;for(let n of b){let r=p.indexOf(bw(n));r===-1?(e.splice(t++,0,n),S.push(n)):t=r+S.length+1}return S.every(e=>h.get(bw(e)))?e=f:a===`wait`&&(e=S),x(xw(e)),y(f),null}let{forceRender:C}=(0,g.useContext)(i_);return(0,X.jsx)(X.Fragment,{children:b.map(e=>{let g=bw(e),v=o&&!u?!1:f===b||p.includes(g);return(0,X.jsx)(_w,{isPresent:v,initial:!m.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:a,root:l,onExitComplete:v?void 0:()=>{if(_.current.has(g))return;if(h.has(g))_.current.add(g),h.set(g,!0);else return;let e=!0;h.forEach(t=>{t||(e=!1)}),e&&(C?.(),y([]),o&&d?.(),r&&r())},anchorX:s,anchorY:c,children:e},g)})})},Cw=(0,g.createContext)({strict:!1}),ww={animation:[`animate`,`variants`,`whileHover`,`whileTap`,`exit`,`whileInView`,`whileFocus`,`whileDrag`],exit:[`exit`],drag:[`drag`,`dragControls`],focus:[`whileFocus`],hover:[`whileHover`,`onHoverStart`,`onHoverEnd`],tap:[`whileTap`,`onTap`,`onTapStart`,`onTapCancel`],pan:[`onPan`,`onPanStart`,`onPanSessionStart`,`onPanEnd`],inView:[`whileInView`,`onViewportEnter`,`onViewportLeave`],layout:[`layout`,`layoutId`]},Tw=!1;function Ew(){if(Tw)return;let e={};for(let t in ww)e[t]={isEnabled:e=>ww[t].some(t=>!!e[t])};VC(e),Tw=!0}function Dw(){return Ew(),HC()}function Ow(e){let t=Dw();for(let n in e)t[n]={...t[n],...e[n]};VC(t)}function kw({children:e,features:t,strict:n=!1}){let[,r]=(0,g.useState)(!Aw(t)),i=(0,g.useRef)(void 0);if(!Aw(t)){let{renderer:e,...n}=t;i.current=e,Ow(n)}return(0,g.useEffect)(()=>{Aw(t)&&t().then(({renderer:e,...t})=>{Ow(t),i.current=e,r(!0)})},[]),(0,X.jsx)(Cw.Provider,{value:{renderer:i.current,strict:n},children:e})}function Aw(e){return typeof e==`function`}var jw=(0,g.createContext)({});function Mw(e,t){if(MC(e)){let{initial:t,animate:n}=e;return{initial:t===!1||kC(t)?t:void 0,animate:kC(n)?n:void 0}}return e.inherit===!1?{}:t}function Nw(e){let{initial:t,animate:n}=Mw(e,(0,g.useContext)(jw));return(0,g.useMemo)(()=>({initial:t,animate:n}),[Pw(t),Pw(n)])}function Pw(e){return Array.isArray(e)?e.join(` `):e}var Fw=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Iw(e,t,n){for(let r in t)!Zx(t[r])&&!JC(r,n)&&(e[r]=t[r])}function Lw({transformTemplate:e},t){return(0,g.useMemo)(()=>{let n=Fw();return VS(n,t,e),Object.assign({},n.vars,n.style)},[t])}function Rw(e,t){let n=e.style||{},r={};return Iw(r,n,e),Object.assign(r,Lw(e,t)),r}function zw(e,t){let n={},r=Rw(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout=`none`,r.touchAction=e.drag===!0?`none`:`pan-${e.drag===`x`?`y`:`x`}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=r,n}var Bw=()=>({...Fw(),attrs:{}});function Vw(e,t,n,r){let i=(0,g.useMemo)(()=>{let n=Bw();return KS(n,t,$C(r),e.transformTemplate,e.style),{...n.attrs,style:{...n.style}}},[t]);if(e.style){let t={};Iw(t,e.style,e),i.style={...t,...i.style}}return i}var Hw=new Set(`animate.exit.variants.initial.style.values.transition.transformTemplate.custom.inherit.onBeforeLayoutMeasure.onAnimationStart.onAnimationComplete.onUpdate.onDragStart.onDrag.onDragEnd.onMeasureDragConstraints.onDirectionLock.onDragTransitionEnd._dragX._dragY.onHoverStart.onHoverEnd.onViewportEnter.onViewportLeave.globalTapTarget.propagate.ignoreStrict.viewport`.split(`.`));function Uw(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||Hw.has(e)}function Ww(e,t){return e.startsWith(`on`)?!Uw(e):t?.(e)??!Uw(e)}function Gw(e,t,n,r){let i={};for(let a in e)(a!==`values`||typeof e.values!=`object`)&&(Zx(e[a])||(Ww(a,r)||n===!0&&Uw(a)||!t&&!Uw(a)||e.draggable&&a.startsWith(`onDrag`))&&(i[a]=e[a]));return i}var Kw=[`animate`,`circle`,`defs`,`desc`,`ellipse`,`g`,`image`,`line`,`filter`,`marker`,`mask`,`metadata`,`path`,`pattern`,`polygon`,`polyline`,`rect`,`stop`,`switch`,`symbol`,`svg`,`text`,`tspan`,`use`,`view`];function qw(e){return typeof e!=`string`||e.includes(`-`)?!1:!!(Kw.indexOf(e)>-1||/[A-Z]/u.test(e))}function Jw(e,t,n,{latestValues:r},i,a=!1,o,s){let c=(o??qw(e)?Vw:zw)(t,r,i,e),l=Gw(t,typeof e==`string`,a,s),u=e===g.Fragment?{}:{...l,...c,ref:n},{children:d}=t,f=(0,g.useMemo)(()=>Zx(d)?d.get():d,[d]);return(0,g.createElement)(e,{...u,children:f})}function Yw({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,i){return{latestValues:Xw(n,r,i,e),renderState:t()}}function Xw(e,t,n,r){let i={},a=r(e,{});for(let e in a)i[e]=uw(a[e]);let{initial:o,animate:s}=e,c=MC(e),l=NC(e);t&&l&&!c&&e.inherit!==!1&&(o===void 0&&(o=t.initial),s===void 0&&(s=t.animate));let u=n?n.initial===!1:!1;u||=o===!1;let d=u?s:o;if(d&&typeof d!=`boolean`&&!OC(d)){let t=Array.isArray(d)?d:[d];for(let n=0;n<t.length;n++){let r=Ux(e,t[n]);if(r){let{transitionEnd:e,transition:t,...n}=r;for(let e in n){let t=n[e];if(Array.isArray(t)){let e=u?t.length-1:0;t=t[e]}t!==null&&(i[e]=t)}for(let t in e)i[t]=e[t]}}}return i}var Zw=e=>(t,n)=>{let r=(0,g.useContext)(jw),i=(0,g.useContext)(s_),a=()=>Yw(e,t,r,i);return n?a():a_(a)},Qw=Zw({scrapeMotionValuesFromProps:YC,createRenderState:Fw}),$w=Zw({scrapeMotionValuesFromProps:tw,createRenderState:Bw}),eT=Symbol.for(`motionComponentSymbol`);function tT(e,t,n){let r=(0,g.useRef)(n);(0,g.useInsertionEffect)(()=>{r.current=n});let i=(0,g.useRef)(null);return(0,g.useCallback)(n=>{n&&e.onMount?.(n),t&&(n?t.mount(n):t.unmount());let a=r.current;if(typeof a==`function`){if(n){let e=a(n);typeof e==`function`&&(i.current=e)}else i.current?(i.current(),i.current=null):a(n)}else a&&(a.current=n)},[t])}var nT=(0,g.createContext)({});function rT(e){return e&&typeof e==`object`&&Object.prototype.hasOwnProperty.call(e,`current`)}function iT(e,t,n,r,i,a){let{visualElement:o}=(0,g.useContext)(jw),s=(0,g.useContext)(Cw),c=(0,g.useContext)(s_),l=(0,g.useContext)(dw),u=l.reducedMotion,d=l.skipAnimations,f=(0,g.useRef)(null),p=(0,g.useRef)(!1);r||=s.renderer,!f.current&&r&&(f.current=r(e,{visualState:t,parent:o,props:n,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u,skipAnimations:d,isSVG:a}),p.current&&f.current&&(f.current.manuallyAnimateOnMount=!0));let m=f.current,h=(0,g.useContext)(nT);m&&!m.projection&&i&&(m.type===`html`||m.type===`svg`)&&aT(f.current,n,i,h);let _=(0,g.useRef)(!1);(0,g.useInsertionEffect)(()=>{m&&_.current&&m.update(n,c)});let v=n[tS],y=(0,g.useRef)(!!v&&typeof window<`u`&&!window.MotionHandoffIsComplete?.(v)&&window.MotionHasOptimisedAnimation?.(v));return o_(()=>{p.current&&m&&(m.animationState?.animateChanges(),m.enteringChildren=void 0)},[]),o_(()=>{p.current=!0,m&&(_.current=!0,window.MotionIsMounted=!0,m.updateFeatures(),m.scheduleRenderMicrotask(),y.current&&m.animationState&&m.animationState.animateChanges())}),(0,g.useEffect)(()=>{m&&(!y.current&&m.animationState&&m.animationState.animateChanges(),y.current&&=(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(v)}),!1),m.enteringChildren=void 0)}),m}function aT(e,t,n,r){let{layoutId:i,layout:a,drag:o,dragConstraints:s,layoutScroll:c,layoutRoot:l,layoutAnchor:u,layoutCrossfade:d}=t;e.projection=new n(e.latestValues,t[`data-framer-portal-id`]?void 0:oT(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!o||s&&rT(s),visualElement:e,animationType:typeof a==`string`?a:`both`,initialPromotionConfig:r,crossfade:d,layoutScroll:c,layoutRoot:l,layoutAnchor:u})}function oT(e){if(e)return e.options.allowProjection===!1?oT(e.parent):e.projection}function sT(e,{forwardMotionProps:t=!1,type:n}={},r,i){r&&Ow(r);let a=n?n===`svg`:qw(e),o=a?$w:Qw;function s(n,s){let c,l={...(0,g.useContext)(dw),...n,layoutId:cT(n)},{isStatic:u,isValidProp:d}=l,f=Nw(n),p=o(n,u);if(!u&&typeof window<`u`){lT(l,r);let t=uT(l);c=t.MeasureLayout,f.visualElement=iT(e,p,l,i,t.ProjectionNode,a)}return(0,X.jsxs)(jw.Provider,{value:f,children:[c&&f.visualElement?(0,X.jsx)(c,{visualElement:f.visualElement,...l}):null,Jw(e,n,tT(p,f.visualElement,s),p,u,t,a,d)]})}s.displayName=`motion.${typeof e==`string`?e:`create(${e.displayName??e.name??``})`}`;let c=(0,g.forwardRef)(s);return c[eT]=e,c}function cT({layoutId:e}){let t=(0,g.useContext)(i_).id;return t&&e!==void 0?t+`-`+e:e}function lT(e,t){(0,g.useContext)(Cw).strict}function uT(e){let{drag:t,layout:n}=Dw();if(!t&&!n)return{};let r={...t,...n};return{MeasureLayout:t?.isEnabled(e)||n?.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}function dT(e,t){if(typeof Proxy>`u`)return sT;let n=new Map,r=(n,r)=>sT(n,r,e,t);return new Proxy((e,t)=>r(e,t),{get:(i,a)=>a===`create`?r:(n.has(a)||n.set(a,sT(a,void 0,e,t)),n.get(a))})}var fT=dT(),pT=(e,t)=>t.isSVG??qw(e)?new nw(t):new ZC(t,{allowProjection:e!==g.Fragment}),mT=class extends GC{constructor(e){super(e),e.animationState||=aw(e)}updateAnimationControlsSubscription(){let{animate:e}=this.node.getProps();OC(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){let{animate:e}=this.node.getProps(),{animate:t}=this.node.prevProps||{};e!==t&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}},hT=0,gT={animation:{Feature:mT},exit:{Feature:class extends GC{constructor(){super(...arguments),this.id=hT++}update(){let{presenceContext:e,prevPresenceContext:t,animationState:n}=this.node;if(!e||!n)return;let{isPresent:r,onExitComplete:i}=e,a=t?.isPresent;if(r===a)return;if(r&&a===!1){if(this.exit===!0){let{initial:e}=this.node.getProps();if(e&&!Array.isArray(e)){let{transition:t,transitionEnd:n,...r}=Wx(this.node,e)||{};for(let e in r)this.node.getValue(e)?.jump(r[e])}this.node.blockInitialAnimation=!1,n.reset(),n.animateChanges()}else n.setActive(`exit`,!1);this.exit=void 0;return}let o=this.exit=n.setActive(`exit`,!r);i&&!r&&o.then(()=>{this.exit===o&&(this.exit=!0,i(this.id))})}mount(){let{register:e,onExitComplete:t}=this.node.presenceContext||{};t&&t(this.id),e&&(this.unmount=e(this.id))}unmount(){}}}};function _T(e){return{point:{x:e.pageX,y:e.pageY}}}function vT(e,t,n){let{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive(`whileHover`,n===`Start`);let i=r[`onHover`+n];i&&hy.postRender(()=>i(t,_T(t)))}var yT=class extends GC{mount(){let{current:e}=this.node;e&&(this.unmount=fC(e,(e,t)=>(vT(this.node,t,`Start`),e=>vT(this.node,e,`End`))))}unmount(){}},bT=class extends GC{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(`:focus-visible`)}catch{e=!0}e&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!0),this.isActive=!0)}onBlur(){this.isActive&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!1),this.isActive=!1)}mount(){this.unmount=__(lw(this.node.current,`focus`,()=>this.onFocus()),lw(this.node.current,`blur`,()=>this.onBlur()))}unmount(){}};function xT(e,t,n){let{props:r}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&r.whileTap&&e.animationState.setActive(`whileTap`,n===`Start`);let i=r[`onTap`+(n===`End`?``:n)];i&&hy.postRender(()=>i(t,_T(t)))}var ST=class extends GC{mount(){let{current:e}=this.node;if(!e)return;let{globalTapTarget:t,propagate:n}=this.node.props;this.unmount=CC(e,(e,t)=>(xT(this.node,t,`Start`),(e,{success:t})=>xT(this.node,e,t?`End`:`Cancel`)),{useGlobalTarget:t,stopPropagation:n?.tap===!1})}unmount(){}},CT=new WeakMap,wT=new WeakMap,TT=e=>{let t=CT.get(e.target);t&&t(e)},ET=e=>{e.forEach(TT)};function DT({root:e,...t}){let n=e||document;wT.has(n)||wT.set(n,{});let r=wT.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(ET,{root:e,...t})),r[i]}function OT(e,t,n){let r=DT(t);return CT.set(e,n),r.observe(e),()=>{CT.delete(e),r.unobserve(e)}}var kT={some:0,all:1},AT=class extends GC{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.stopObserver?.();let{viewport:e={}}=this.node.getProps(),{root:t,margin:n,amount:r=`some`,once:i}=e,a={root:t?t.current:void 0,rootMargin:n,threshold:typeof r==`number`?r:kT[r]},o=e=>{let{isIntersecting:t}=e;if(this.isInView===t||(this.isInView=t,i&&!t&&this.hasEnteredView))return;t&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive(`whileInView`,t);let{onViewportEnter:n,onViewportLeave:r}=this.node.getProps(),a=t?n:r;a&&a(e)};this.stopObserver=OT(this.node.current,a,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>`u`)return;let{props:e,prevProps:t}=this.node;[`amount`,`margin`,`root`].some(jT(e,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}};function jT({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}var MT={inView:{Feature:AT},tap:{Feature:ST},focus:{Feature:bT},hover:{Feature:yT}};function NT(e){return(0,g.useEffect)(()=>()=>e(),[])}var PT={renderer:pT,...gT,...MT};function FT(e){let t=a_(()=>Ox(e)),{isStatic:n}=(0,g.useContext)(dw);if(n){let[,n]=(0,g.useState)(e);(0,g.useEffect)(()=>t.on(`change`,n),[])}return t}function IT(e,t){let n=FT(t()),r=()=>n.set(t());return r(),o_(()=>{let t=()=>hy.preRender(r,!1,!0),n=e.map(e=>e.on(`change`,t));return()=>{n.forEach(e=>e()),gy(r)}}),n}function LT(e){Ex.current=[],e();let t=IT(Ex.current,e);return Ex.current=void 0,t}function RT(e,t,n,r){if(typeof e==`function`)return LT(e);if(n!==void 0&&!Array.isArray(n)&&typeof t!=`function`)return BT(e,t,n,r);let i=typeof t==`function`?t:wC(t,n,r),a=Array.isArray(e)?zT(e,i):zT([e],([e])=>i(e)),o=Array.isArray(e)?void 0:e.accelerate;if(o&&!o.isTransformed&&typeof t!=`function`&&Array.isArray(n)&&r?.clamp!==!1){let e=r?.ease;a.accelerate={...o,times:[0,...t,1],keyframes:[n[0],...n,n[n.length-1]],isTransformed:!0,...e?{ease:Array.isArray(e)?[e[0],...e]:e}:{}}}return a}function zT(e,t){let n=a_(()=>[]);return IT(e,()=>{n.length=0;let r=e.length;for(let t=0;t<r;t++)n[t]=e[t].get();return t(n)})}function BT(e,t,n,r){let i=a_(()=>Object.keys(n)),a=a_(()=>({}));for(let o of i)a[o]=RT(e,t,n[o],r);return a}function VT(){!IC.current&&RC();let[e]=(0,g.useState)(FC.current);return e}function HT(){let e=VT(),{reducedMotion:t}=(0,g.useContext)(dw);return t===`never`?!1:t===`always`||e}function UT(e){return typeof e==`object`&&!Array.isArray(e)}function WT(e,t,n,r){return e==null?[]:typeof e==`string`&&UT(t)?ES(e,n,r):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>e!=null):[e]}function GT(e,t,n){return e*(t+1)+n*t}function KT(e,t,n,r){return typeof t==`number`?t:t.startsWith(`-`)||t.startsWith(`+`)?Math.max(0,e+parseFloat(t)):t===`<`?n:t.startsWith(`<`)?Math.max(0,n+parseFloat(t.slice(1))):r.get(t)??e}function qT(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];i.at>t&&i.at<n&&(l_(e,i),r--)}}function JT(e,t,n,r,i,a){qT(e,i,a);for(let o=0;o<t.length;o++)e.push({value:t[o],at:Jv(i,a,r[o]),easing:H_(n,o)})}function YT(e,t,n=0){let r=t+1+t*n;for(let t=0;t<e.length;t++)e[t]=e[t]/r}function XT(e,t){return e.at===t.at?e.value===null?1:t.value===null?-1:0:e.at-t.at}var ZT=`easeInOut`,QT=20;function $T(e,{defaultTransition:t={},...n}={},r,i){let a=t.duration||.3,o=new Map,s=new Map,c={},l=new Map,u=0,d=0,f=0;for(let n=0;n<e.length;n++){let o=e[n];if(typeof o==`string`){l.set(o,d);continue}if(!Array.isArray(o)){l.set(o.name,KT(d,o.at,u,l));continue}let[p,m,h={}]=o;h.at!==void 0&&(d=KT(d,h.at,u,l));let g=0,_=(e,n,r,o=0,s=0)=>{let c=nE(e),{delay:l=0,times:u=zy(c),type:p=t.type||`keyframes`,repeat:m,repeatType:h,repeatDelay:_=0,...v}=n,{ease:y=t.ease||`easeOut`,duration:b}=n,x=typeof l==`function`?l(o,s):l,S=c.length,C=ex(p)?p:i?.[p||`keyframes`];if(S<=2&&C){let e=100;if(S===2&&aE(c)){let t=c[1]-c[0];e=Math.abs(t)}let n={...t,...v};b!==void 0&&(n.duration=b_(b));let r=Sy(n,e,C);y=r.ease,b=r.duration}b??=a;let w=d+x;u.length===1&&u[0]===0&&(u[1]=1);let T=u.length-c.length;if(T>0&&Ry(u,T),c.length===1&&c.unshift(null),m&&`${m}${QT}`,m&&m<QT){let e=b>0?_/b:0;b=GT(b,m,_);let t=[...c],n=[...u];y=Array.isArray(y)?[...y]:[y];let r=[...y],i=h===`reverse`||h===`mirror`,a=t,o=r;i&&(a=[...t].reverse(),h===`reverse`&&(o=[...r].reverse().map(e=>typeof e==`function`?A_(e):e)));for(let s=0;s<m;s++){let l=i&&s%2==0,d=l?a:t,f=l?o:r,p=(s+1)*(1+e);e>0&&(c.push(c[c.length-1]),u.push(p),y.push(`linear`)),c.push(...d);for(let e=0;e<d.length;e++)u.push(n[e]+p),y.push(e===0?`linear`:H_(f,e-1))}YT(u,m,e)}let E=w+b;JT(r,c,y,u,w,E),g=Math.max(x+b,g),f=Math.max(E,f)};if(Zx(p)){let e=eE(p,s);_(m,h,tE(`default`,e))}else{let e=WT(p,m,r,c),t=e.length;for(let n=0;n<t;n++){m=m,h=h;let r=e[n],i=eE(r,s);for(let e in m)_(m[e],rE(h,e),tE(e,i),n,t)}}u=d,d+=g}return s.forEach((e,r)=>{for(let i in e){let a=e[i];a.sort(XT);let s=[],c=[],l=[];for(let e=0;e<a.length;e++){let{at:t,value:n,easing:r}=a[e];s.push(n),c.push(v_(0,f,t)),l.push(r||`easeOut`)}c[0]!==0&&(c.unshift(0),s.unshift(s[0]),l.unshift(ZT)),c[c.length-1]!==1&&(c.push(1),s.push(null)),o.has(r)||o.set(r,{keyframes:{},transition:{}});let u=o.get(r);u.keyframes[i]=s;let{type:d,...p}=t;u.transition[i]={...p,duration:f,ease:l,times:c,...n}}}),o}function eE(e,t){return!t.has(e)&&t.set(e,{}),t.get(e)}function tE(e,t){return t[e]||(t[e]=[]),t[e]}function nE(e){return Array.isArray(e)?e:[e]}function rE(e,t){return e&&e[t]?{...e,...e[t]}:{...e}}var iE=e=>typeof e==`number`,aE=e=>e.every(iE);function oE(e,t){return Zx(e)||typeof e==`number`||typeof e==`string`&&!UT(t)}function sE(e,t,n,r){let i=[];if(oE(e,t))i.push(cw(e,UT(t)&&t.default||t,n&&(n.default||n)));else{if(e==null)return i;let a=WT(e,t,r),o=a.length;for(let e=0;e<o;e++){let r=a[e],s={...n};`delay`in s&&typeof s.delay==`function`&&(s.delay=s.delay(e,o)),r instanceof Element?i.push(...iC(r,t,s,DC.get(r))):i.push(...xS(yS(r)??aC,r,t,s))}}return i}function cE(e,t,n){let r=[];return $T(e.map(e=>{if(Array.isArray(e)&&typeof e[0]==`function`){let t=e[0],n=Ox(0);return n.on(`change`,t),e.length===1?[n,[0,1]]:e.length===2?[n,[0,1],e[1]]:[n,e[1],e[2]]}return e}),t,n,{spring:Py}).forEach(({keyframes:e,transition:t},n)=>{r.push(...sE(n,e,t))}),r}function lE(e){return Array.isArray(e)&&e.some(Array.isArray)}function uE(e={}){let{scope:t,reduceMotion:n,skipAnimations:r}=e;function i(e,i,a){let o=[],s,c={};if(n!==void 0&&(c.reduceMotion=n),r!==void 0&&(c.skipAnimations=r),lE(e)){let{onComplete:n,...r}=i||{};typeof n==`function`&&(s=n),o=cE(e,{...c,...r},t)}else{let{onComplete:n,...r}=a||{};typeof n==`function`&&(s=n),o=sE(e,i,{...c,...r},t)}let l=new Sx(o);return s&&l.finished.then(s),t&&(t.animations.push(l),l.finished.then(()=>{l_(t.animations,l)})),l}return i}var dE=Object.assign(uE(),{addEffect:_S,removeEffect:vS});function fE(){let e=a_(()=>({current:null,animations:[]})),t=HT()??void 0,{skipAnimations:n}=(0,g.useContext)(dw),r=(0,g.useMemo)(()=>uE({scope:e,reduceMotion:t,skipAnimations:n}),[e,t,n]);return NT(()=>{e.animations.forEach(e=>e.stop()),e.animations.length=0}),[e,r]}var pE=fT,mE=`text-[2.5rem]`,hE={indicator:`text-primary`,track:`text-primary-soft`},gE={indicator:`text-current`,track:`text-current/20`};function _E({colors:e,reduced:t}){return(0,X.jsxs)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 40 40`,fill:`none`,stroke:`currentColor`,strokeWidth:`4`,strokeLinecap:`round`,"aria-hidden":`true`,className:Q(`size-[1em] stroke-4!`,e.indicator),children:[(0,X.jsx)(`circle`,{cx:`20`,cy:`20`,r:`16`,className:e.track}),t?(0,X.jsx)(`circle`,{cx:`20`,cy:`20`,r:`16`,pathLength:1,strokeDasharray:`0.25 0.75`}):(0,X.jsx)(pE.circle,{cx:`20`,cy:`20`,r:`16`,pathLength:1,strokeDasharray:`0.25 0.75`,initial:{strokeDashoffset:0},animate:{strokeDashoffset:-1},transition:{duration:.9,repeat:1/0,ease:`linear`}})]})}var vE=12,yE=1.2;function bE({colors:e,reduced:t}){return(0,X.jsx)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 40 40`,fill:`currentColor`,"aria-hidden":`true`,className:Q(`size-[1em]`,e.indicator),children:Array.from({length:vE},(e,n)=>{let r={x:18,y:2,width:4,height:6,rx:2,transform:`rotate(${360/vE*n} 20 20)`};return t?(0,X.jsx)(`rect`,{...r,opacity:.25},n):(0,X.jsx)(pE.rect,{...r,initial:{opacity:0},animate:{opacity:[0,1,.5,0]},transition:{duration:yE,repeat:1/0,ease:`linear`,delay:n/vE*yE-yE,times:[0,.1,.5,1]}},n)})})}var xE=`M12.846 3.581C12.711 3.231 12.375 3 12 3C11.625 3 11.278 3.263 11.154 3.581C10.604 5.011 10.054 6.442 9.504 7.872C8.752 8.16 8.159 8.752 7.871 9.504C6.441 10.054 5.011 10.604 3.581 11.154C3.41 11.22 3.263 11.336 3.159 11.487C3.055 11.638 3 11.817 3 12C3 12.183 3.056 12.362 3.159 12.513C3.262 12.664 3.41 12.78 3.581 12.846C5.011 13.396 6.442 13.946 7.872 14.496C8.16 15.248 8.752 15.841 9.504 16.129C10.054 17.559 10.604 18.989 11.154 20.419C11.22 20.59 11.336 20.737 11.487 20.841C11.638 20.945 11.817 21 12 21C12.183 21 12.362 20.945 12.513 20.841C12.664 20.737 12.78 20.59 12.846 20.419C13.396 18.989 13.946 17.559 14.496 16.129C15.248 15.841 15.841 15.248 16.129 14.496C17.559 13.946 18.989 13.396 20.419 12.846C20.59 12.78 20.737 12.664 20.841 12.513C20.945 12.362 21 12.183 21 12C21 11.817 20.945 11.638 20.841 11.487C20.737 11.336 20.59 11.22 20.419 11.154C18.989 10.604 17.559 10.054 16.129 9.504C15.841 8.752 15.248 8.16 14.496 7.871C13.946 6.441 13.396 5.011 12.846 3.581Z`,SE=`M12.704 5C12.469 5 12.235 5 12 5C11.765 5 11.531 5 11.296 5C10.161 5.053 9.025 5.106 7.889 5.159C6.979 6.069 6.069 6.979 5.159 7.889C5.106 9.025 5.053 10.161 5 11.296C5 11.395 5 11.494 5 11.593C5 11.729 5 11.864 5 12C5 12.136 5 12.271 5 12.407C5 12.506 5 12.605 5 12.704C5.053 13.839 5.106 14.975 5.159 16.111C6.069 17.021 6.979 17.931 7.889 18.841C9.025 18.894 10.161 18.947 11.296 19C11.395 19 11.494 19 11.593 19C11.729 19 11.864 19 12 19C12.136 19 12.271 19 12.407 19C12.506 19 12.605 19 12.704 19C13.839 18.947 14.975 18.894 16.111 18.841C17.021 17.931 17.931 17.021 18.841 16.111C18.894 14.975 18.947 13.839 19 12.704C19 12.605 19 12.506 19 12.407C19 12.271 19 12.136 19 12C19 11.864 19 11.729 19 11.593C19 11.494 19 11.395 19 11.296C18.947 10.161 18.894 9.025 18.841 7.889C17.931 6.979 17.021 6.069 16.111 5.159C14.975 5.106 13.839 5.053 12.704 5Z`;function CE(e){return e.match(/-?\d+(?:\.\d+)?/g)?.map(Number)??[]}var wE=CE(xE),TE=CE(SE),EE=(wE.length-2)/6;function DE(e){let t=`M${e[0]} ${e[1]}`;for(let n=0;n<EE;n++){let r=2+n*6;t+=`C${e[r]} ${e[r+1]} ${e[r+2]} ${e[r+3]} ${e[r+4]} ${e[r+5]}`}return t+`Z`}function OE(e,t,n){return e+(t-e)*n}function kE(e){return e<.5?2*e*e:1-(-2*e+2)**2/2}var AE=2.5,jE=.4;function ME({colors:e,reduced:t}){let n=FT(0);g.useEffect(()=>{if(t)return;let e=dE(n,1,{duration:AE,repeat:1/0,ease:`linear`});return()=>e.stop()},[t,n]);let r=RT(n,e=>{if(e<jE/2){let t=kE(e/(jE/2));return DE(wE.map((e,n)=>OE(e,TE[n],t)))}if(e<jE){let t=kE((e-jE/2)/(jE/2));return DE(TE.map((e,n)=>OE(e,wE[n],t)))}return xE}),i=RT(n,e=>e<jE?kE(e/jE)*360:360);return(0,X.jsx)(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,"aria-hidden":`true`,className:Q(`size-[1em]`,e.indicator),children:t?(0,X.jsx)(`path`,{d:xE}):(0,X.jsx)(pE.path,{d:r,style:{transformOrigin:`12px 12px`,rotate:i}})})}var NE={circular:_E,dots:bE,sparkle:ME};function PE({variant:e=`circular`,currentColor:t=!1,"aria-label":n=`Loading`,className:r,...i}){let a=hg(),o=t?gE:hE,s=NE[e],c=(0,X.jsx)(s,{colors:o,reduced:a});return(0,X.jsx)(`span`,{"data-slot":`spinner`,role:`status`,"aria-label":n,className:Q(`inline-flex shrink-0 items-center justify-center align-middle`,mE,r),...i,children:a?c:(0,X.jsx)(kw,{features:PT,strict:!0,children:c})})}function FE(e,{storage:t=`local`}={}){let[n,r,i]=sd(t,e,``,{serializer:e=>e,deserializer:e=>e}),a=n!==`1`,o=(0,g.useCallback)(()=>r(`1`),[r]),s=(0,g.useCallback)(()=>i(),[i]);return(0,g.useMemo)(()=>({open:a,dismiss:o,reset:s}),[a,o,s])}var IE=Au(Q(`group/alert relative rounded-xl border p-5 text-foreground backdrop-blur-xl`,`grid w-full items-start`,`[grid-template-columns:auto_1fr_auto] [grid-template-areas:'icon_title_close'_'._description_.'_'._actions_actions']`,`@min-[460px]:data-[layout=inline]:items-center`,`@min-[460px]:data-[layout=inline]:[grid-template-columns:auto_auto_1fr_auto_auto]`,`@min-[460px]:data-[layout=inline]:[grid-template-areas:'icon_title_description_actions_close']`),{variants:{variant:{default:`bg-background border-border`,primary:`bg-primary-subtle border-primary-soft`,secondary:`bg-secondary-subtle border-secondary-soft`,error:`bg-error-subtle border-error-soft`,success:`bg-success-subtle border-success-soft`,warning:`bg-warning-subtle border-warning-soft`,info:`bg-info-subtle border-info-soft`}},defaultVariants:{variant:`default`}}),LE={default:`text-foreground-intense`,primary:`text-primary`,secondary:`text-secondary-emphasis`,error:`text-error-emphasis`,success:`text-success-emphasis`,warning:`text-warning-emphasis`,info:`text-info-emphasis`},RE=g.createContext(`default`),zE={opacity:0,scale:.88,filter:`blur(12px)`,height:0},BE={opacity:0},VE={default:{duration:.32,ease:[.4,0,.2,1]},height:{duration:.3,ease:[.4,0,.2,1],delay:.18}};function HE({variant:e,layout:t=`block`,dismissible:n=!1,open:r,onOpenChange:i,persistKey:a,persistStorage:o=`local`,closeLabel:s=`Dismiss`,role:c=`alert`,className:l,children:u,style:d,...f}){let p=hg(),[m,h]=g.useState(!0),_=FE(a??``,{storage:o}),v=r!==void 0,y=!v&&a!=null,b=v?r:y?_.open:m,x=g.useCallback(()=>{if(v){i?.(!1);return}y?_.dismiss():h(!1),i?.(!1)},[v,y,_,i]);return(0,X.jsx)(RE.Provider,{value:e??`default`,children:(0,X.jsx)(kw,{features:PT,strict:!0,children:(0,X.jsx)(Sw,{initial:!1,children:b&&(0,X.jsx)(pE.div,{initial:!1,exit:p?BE:zE,transition:p?{duration:0}:VE,className:`@container overflow-hidden`,children:(0,X.jsxs)(`div`,{role:c,"data-slot":`alert`,"data-layout":t,style:d,className:Q(IE({variant:e}),l),...f,children:[u,n&&(0,X.jsx)(`button`,{type:`button`,"aria-label":s,"data-slot":`alert-close`,onClick:x,className:Q(`text-foreground-muted cursor-pointer rounded-md p-1 transition-colors outline-none [grid-area:close]`,`hover:text-foreground-intense`,`focus-visible:ring-ring focus-visible:ring-2`,`self-start @min-[460px]:group-data-[layout=inline]/alert:self-center`,`ms-3 -me-1 -mt-1 @min-[460px]:group-data-[layout=inline]/alert:my-0`),children:(0,X.jsx)(UE,{})})]})},`alert`)})})})}function UE(){return(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,className:`size-4`,children:(0,X.jsx)(`path`,{d:`M11.523 3.522c.264-.264.691-.264.955 0s.264.691 0 .955L8.955 8l3.522 3.522c.264.264.264.691 0 .955s-.691.264-.955 0L8 8.955l-3.522 3.522c-.264.264-.691.264-.955 0s-.264-.691 0-.955L7.045 8 3.522 4.478c-.264-.264-.264-.691 0-.955s.691-.264.955 0L8 7.045l3.523-3.522z`})})}function WE({className:e,...t}){let n=g.useContext(RE);return(0,X.jsx)(`span`,{"data-slot":`alert-icon`,className:Q(`me-3 flex h-lh shrink-0 items-center [grid-area:icon] [&_svg:not([class*='size-'])]:size-5`,LE[n],e),...t})}function GE({className:e,as:t=`h5`,...n}){return(0,X.jsx)(t,{"data-slot":`alert-title`,className:Q(`text-foreground-intense self-center font-semibold [grid-area:title]`,`text-base @min-[460px]:group-data-[layout=inline]/alert:me-3 @min-[460px]:group-data-[layout=inline]/alert:text-sm`,e),...n})}function KE({className:e,...t}){return(0,X.jsx)(`p`,{"data-slot":`alert-description`,className:Q(`text-foreground text-sm [grid-area:description]`,`mt-2 @min-[460px]:group-data-[layout=inline]/alert:mt-0`,e),...t})}function qE(e){return Ir(e.defaultTagName??`div`,e,e)}var JE=[`before:pointer-events-none`,`before:absolute`,`before:inset-0`,`before:-z-1`,`before:rounded-[inherit]`,`[a,button]:before:transition-[opacity,background-color,border-color]`,`[a,button]:before:duration-250`,`motion-reduce:[a,button]:before:transition-none`],YE=Au(`relative isolate inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap outline-offset-1 select-none [&_svg]:shrink-0 [a,button]:transform-gpu [a,button]:cursor-pointer [a,button]:transition [a,button]:duration-250 [a,button]:ease-[cubic-bezier(0.175,0.885,0.32,1.5)] [a,button]:not-data-popup-open:active:translate-y-px [a,button]:not-data-popup-open:active:scale-[0.97] [a,button]:not-data-popup-open:active:duration-100 [a,button]:not-data-popup-open:active:ease-in-out motion-reduce:[a,button]:transition-none`,{variants:{variant:{primary:Q(JE,`bg-primary text-primary-foreground outline-ring-primary [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--primary)_0%,var(--primary-muted)_75%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),"primary-outline":Q(JE,`text-primary before:border before:border-primary outline-ring-primary`,`[a,button]:hover:before:bg-primary [a,button]:hover:text-primary-foreground`,`[a,button]:data-pressed:before:bg-primary [a,button]:data-pressed:text-primary-foreground`,`[a,button]:data-popup-open:before:bg-primary [a,button]:data-popup-open:text-primary-foreground`),secondary:Q(JE,`bg-secondary-muted text-secondary-foreground outline-ring-secondary [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--secondary)_0%,var(--secondary-muted)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),soft:Q(JE,`text-foreground-intense before:bg-background-muted before:backdrop-blur-md [a,button]:before:border [a,button]:before:border-transparent outline-ring`,`data-[slot=breadcrumb-link]:not-data-active:text-foreground-muted data-[slot=breadcrumb-link]:hover:text-foreground-intense`,`[a,button]:hover:before:bg-background-subtle [a,button]:hover:before:border-border`,`[a,button]:data-pressed:before:bg-background-subtle [a,button]:data-pressed:before:border-border`,`[a,button]:data-popup-open:before:bg-background-subtle [a,button]:data-popup-open:before:border-border`,`data-active:before:bg-background-subtle data-active:border data-active:before:border-border`),outline:Q(JE,`bg-background text-foreground-intense before:bg-background before:border-border before:border outline-ring`,`data-[slot=breadcrumb-link]:not-data-active:text-foreground-muted data-[slot=breadcrumb-link]:hover:text-foreground-intense`,`[a,button]:hover:before:bg-background-subtle [a,button]:hover:before:border-border-strong`,`[a,button]:data-pressed:before:bg-background-subtle [a,button]:data-pressed:before:border-border-strong`,`[a,button]:data-popup-open:before:bg-background-subtle [a,button]:data-popup-open:before:border-border-strong`,`data-active:before:bg-background-subtle data-active:before:border-border-strong`),error:Q(JE,`bg-error-muted text-error-foreground outline-ring-error [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--error-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),success:Q(JE,`bg-success-muted text-success-foreground outline-ring-success [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--success-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),warning:Q(JE,`bg-warning-muted text-warning-foreground outline-ring-warning [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--warning-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),info:Q(JE,`bg-info-muted text-info-foreground outline-ring-info [a,button]:before:bg-[radial-gradient(138.15%_78.13%_at_52.05%_50%,var(--info-muted)_0%,rgba(255,255,255,.5)_95%)] [a,button]:before:opacity-0`,`[a,button]:hover:before:opacity-100`,`[a,button]:data-pressed:before:opacity-100`,`[a,button]:data-popup-open:before:opacity-100`),light:Q(JE,`text-white before:bg-white/10 before:border-white/10 before:border before:backdrop-blur-md outline-ring-light`,`[a,button]:hover:before:bg-white/15 [a,button]:hover:before:border-white/15`,`[a,button]:data-pressed:before:bg-white/15 [a,button]:data-pressed:before:border-white/15`,`[a,button]:data-popup-open:before:bg-white/15 [a,button]:data-popup-open:before:border-white/15`,`data-active:before:bg-white/15 data-active:before:border-white/15`)},size:{xs:`h-4 w-fit gap-0.5 px-1.5 text-[.625rem] has-data-[icon=end]:pe-1.25 has-data-[icon=start]:ps-1.25 [&_svg:not([class*='size-'])]:size-2.5 [&_svg:not([class*='stroke-'])]:stroke-2`,sm:`h-5 w-fit gap-0.5 px-2 text-xs has-data-[icon=end]:pe-1.5 has-data-[icon=start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`,md:`h-6 w-fit gap-0.75 px-2.5 text-xs has-data-[icon=end]:pe-1.75 has-data-[icon=start]:ps-1.75 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,lg:`h-7 w-fit gap-1 px-3 text-sm has-data-[icon=end]:pe-2.25 has-data-[icon=start]:ps-2.25 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,"icon-sm":`h-5 w-5 [&_svg:not([class*='size-'])]:size-3 [&_svg:not([class*='stroke-'])]:stroke-[1.85]`,"icon-md":`h-6 w-6 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,"icon-lg":`h-7 w-7 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`}},defaultVariants:{variant:`primary`,size:`md`}});function XE({className:e,variant:t,size:n,render:r,...i}){let a=g.isValidElement(r)?r.props:void 0,o=g.isValidElement(r)&&(r.type===`a`||r.type===`button`)||i.onClick!=null||a?.href!=null||a?.onClick!=null||a?.tabIndex!=null;return qE({defaultTagName:`span`,render:r,state:{variant:t,size:n},props:Sr({"data-slot":`badge`,...o?Du():{},className:Q(YE({variant:t,size:n}),e)},i)})}function ZE(e,t,n,r,i){return g.isValidElement(t)?g.cloneElement(t,{...i,...t.props,className:Q(n,t.props.className,r)}):g.createElement(e,{...i,className:Q(n,r)})}var QE=`[--card-radius:var(--radius-xl)]`,$E=`rounded-[calc(var(--card-radius)*4/3)]`,eD={none:`rounded-(--card-radius)`,solid:Q($E,`bg-background-muted/60 p-2 backdrop-blur-xl dark:bg-background-subtle`),glass:Q($E,`border border-white/15 bg-white/10 p-2 backdrop-blur-sm`)},tD={none:`border`,solid:`border-border-muted border`,glass:``};function nD({frame:e=!1,inset:t=!0,className:n,contentProps:r,render:i,children:a,...o}){let s=e===!0?`solid`:e===!1?`none`:e;return ZE(`div`,i,Q(`group/card flex flex-col`,QE,eD[s]),n,{"data-slot":`card`,"data-frame":s,...t?{"data-inset":``}:{},...o,children:(0,X.jsx)(`div`,{"data-slot":`card-content`,...r,className:Q(`bg-background flex min-h-0 flex-1 flex-col overflow-hidden rounded-(--card-radius)`,t&&`p-2`,tD[s],r?.className),children:a})})}function rD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`card-header`,className:Q(`flex flex-1 flex-col gap-1.5 p-6 group-data-inset/card:px-4`,e),...t})}function iD({className:e,render:t,...n}){return ZE(`h3`,t,`text-foreground-intense text-lg font-semibold`,e,{"data-slot":`card-title`,...n})}var aD=g.createContext(void 0);function oD(){let e=g.useContext(aD);if(e===void 0)throw Error(S(63));return e}var sD=`data-valid`,cD=`data-invalid`,lD={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},uD={disabled:!1,valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},dD={valid(e){return e===null?null:e?{[sD]:``}:{[cD]:``}}},fD=`data-checked`,pD=`data-unchecked`,mD={...dD,checked(e){return e?{[fD]:``}:{[pD]:``}}},hD={invalid:void 0,name:void 0,validityData:{state:lD,errors:[],error:``,value:``,initialValue:null},setValidityData:p,disabled:void 0,setTouched:p,setDirty:p,setFilled:p,setFocused:p,validationMode:`onSubmit`,shouldValidateOnChange:()=>!1,state:uD,registerFieldControl:p,validation:{getValidationProps:(e,t=h)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:p,getInputControl:()=>null,commit:async()=>{},change:p}},gD=g.createContext(hD);function _D(e=!0){let t=g.useContext(gD);if(t.setValidityData===p&&!e)throw Error(S(28));return t}function vD(e,t,n,r,i=!0,a){let{registerFieldControl:o}=_D(),s=y(()=>Symbol());b(()=>{let c=s.current;if(!i){o(c,void 0);return}o(c,{controlRef:e,getValue:r,id:t,name:a,value:n})},[e,i,r,t,a,o,s,n]),b(()=>{let e=s.current;return()=>{o(e,void 0)}},[o,s])}var yD=g.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:p,validationMode:`onSubmit`,submitCountRef:{current:0}});function bD(){return g.useContext(yD)}var xD=g.createContext({controlId:void 0,registerControlId:p,resetControlId:p,labelId:void 0,setLabelId:p,messageIds:[],setMessageIds:p,getDescriptionProps:e=>e});function SD(){return g.useContext(xD)}function CD(e,t,n,r=!0,i){let[a,o]=g.useState(),s=jd(i?`${i}-label`:void 0),c=e??t??a;return b(()=>{let i=e||t||!r?void 0:wD(n.current,s);a!==i&&o(i)}),c}function wD(e,t){let n=TD(e);if(n)return!n.id&&t&&(n.id=t),n.id||void 0}function TD(e){if(!e)return;let t=e.parentElement;if(t&&t.tagName===`LABEL`)return t;let n=e.id;if(n){let t=e.nextElementSibling;if(t&&t.htmlFor===n)return t}let r=e.labels;return r&&r[0]}function ED(e={}){let{id:t,enabled:n=!0}=e,{controlId:r,registerControlId:i,resetControlId:a}=SD(),o=jd(),s=y(()=>Symbol()),c=g.useRef(!1),l=g.useRef(!1),u=G(()=>{c.current&&i!==p&&(c.current=!1,i(s.current,void 0))});return b(()=>{if(!n||i===p){u();return}let e;if(t!==void 0)l.current=!0,e=t;else if(l.current)e=o;else{a();return}if(e===void 0){u();return}c.current=!0,i(s.current,e)},[t,n,i,a,o,s,u]),b(()=>u,[u]),(n?r:void 0)??t??o}var DD=g.forwardRef(function(e,t){let{checked:n,className:r,defaultChecked:i,"aria-labelledby":a,form:o,id:s,inputRef:c,name:l,nativeButton:u=!1,onCheckedChange:d,readOnly:f=!1,required:p=!1,disabled:m=!1,render:_,uncheckedValue:v,value:y,style:x,...S}=e,{clearErrors:C}=bD(),{state:w,setTouched:T,setDirty:E,validityData:D,setFilled:O,setFocused:k,validationMode:A,disabled:j,name:M,validation:N}=_D(),{labelId:P}=SD(),F=j||m,I=M??l,L=g.useRef(null),R=ur(L,c,N.inputRef),z=g.useRef(null),B=jd(),V=ED({id:s}),H=u?void 0:V,[ee,te]=Yp({controlled:n,default:!!i,name:`Switch`,state:`checked`});vD(z,B,ee,void 0,!F,l),b(()=>{O(ee)},[ee,O]),Cf(ee,()=>{C(I),E(ee!==D.initialValue),N.change(ee)});let{getButtonProps:U,buttonRef:W}=ia({disabled:F,native:u}),ne=CD(a,P,L,!u,H),re={id:u?V:B,role:`switch`,"aria-checked":ee,"aria-readonly":f||void 0,"aria-required":p||void 0,"aria-labelledby":ne,onFocus(){F||k(!0)},onBlur(){let e=L.current;e&&!F&&(T(!0),k(!1),A===`onBlur`&&N.commit(e.checked))},onClick(e){if(f||F)return;e.preventDefault();let t=L.current;t&&ra(t,e)}},G={...N.getValidationProps(F),checked:ee,disabled:F,form:o,id:H,name:I,required:p,style:I?cr:sr,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,ref:R,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(f){e.preventDefault();return}let t=e.currentTarget.checked,n=wa(la,e.nativeEvent);d?.(t,n),!n.isCanceled&&te(t)},onClick(e){e.stopPropagation()},onFocus(){z.current?.focus()},...y===void 0?h:{value:y}},K=g.useMemo(()=>({...w,checked:ee,disabled:F,readOnly:f,required:p}),[w,ee,F,f,p]),ie=Ir(`span`,e,{state:K,ref:[t,z,W],props:[re,S,U,e=>N.getValidationProps(F,e)],stateAttributesMapping:mD});return(0,X.jsxs)(aD.Provider,{value:K,children:[ie,!ee&&I&&v!==void 0&&(0,X.jsx)(`input`,{type:`hidden`,form:o,name:I,value:v,disabled:F}),(0,X.jsx)(`input`,{...G,suppressHydrationWarning:!0})]})}),OD=g.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e;return Ir(`span`,e,{state:oD(),ref:t,stateAttributesMapping:mD,props:a})}),kD={sm:{root:`h-4 w-7.5`,thumb:`size-3`,thumbWidthKeyframes:[`0.75rem`,`1.25rem`,`0.75rem`],thumbXKeyframes:[0,`0.3125rem`,`0.875rem`],check:`size-2.5`},md:{root:`h-5 w-9.5`,thumb:`size-4`,thumbWidthKeyframes:[`1rem`,`1.6875rem`,`1rem`],thumbXKeyframes:[0,`0.4375rem`,`1.125rem`],check:`size-3`},lg:{root:`h-6 w-11.5`,thumb:`size-5`,thumbWidthKeyframes:[`1.25rem`,`2.125rem`,`1.25rem`],thumbXKeyframes:[0,`0.5rem`,`1.375rem`],check:`size-4`}},AD={duration:.25,ease:[.4,0,.2,1]};function jD(e,t){return t===1?[...e]:e.map(e=>typeof e==`number`?-e:`-${e}`)}function MD({renderProps:e,state:t,dirSign:n,sizeConfig:r,reduced:i}){let{checked:a}=t,{ref:o,onDrag:s,onDragStart:c,onDragEnd:l,onAnimationStart:u,onAnimationEnd:d,...f}=e,p=g.useMemo(()=>{let e=jD(r.thumbXKeyframes,n);return a?e:e.reverse()},[a,n,r]),m=p[p.length-1],[h,_]=fE(),v=Eu(o,h),y=g.useRef(a);return g.useEffect(()=>{let e=y.current!==a;y.current=a,e&&!i?_(h.current,{x:p,width:r.thumbWidthKeyframes},AD):_(h.current,{x:m},{duration:0})},[a,r,_,h,i,p,m]),(0,X.jsx)(pE.span,{...f,ref:v,initial:{x:m},children:(0,X.jsx)(pE.svg,{className:Q(`text-foreground-intense`,r.check),xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 12 12`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,style:{strokeDasharray:12},initial:!1,animate:{strokeDashoffset:a?0:12},transition:i?{duration:0}:{strokeDashoffset:{duration:a?.3:0,ease:`easeOut`,delay:a?.25:0}},children:(0,X.jsx)(`path`,{d:`M3 6l2 2 4-4`})})})}function ND({className:e,size:t=`md`,...n}){let r=kc()===`rtl`?-1:1,i=kD[t],a=hg(),o=n[`aria-invalid`],s=o===!0||o===`true`;return(0,X.jsx)(kw,{features:PT,strict:!0,children:(0,X.jsx)(DD,{"data-slot":`switch`,className:Q(`bg-background-strong outline-ring flex shrink-0 rounded-full border border-transparent p-px outline-offset-1`,i.root,`transition-background duration-200 motion-reduce:transition-none`,`data-checked:bg-primary data-checked:outline-ring-primary`,`data-disabled:not-data-checked:border-border-strong data-disabled:opacity-disabled data-disabled:cursor-not-allowed data-disabled:not-data-checked:border-dashed`,`data-invalid:border-error data-invalid:not-data-checked:bg-error-subtle data-invalid:outline-ring-error`,e),...n,...s?{"data-invalid":``}:{},children:(0,X.jsx)(OD,{"data-slot":`switch-thumb`,className:Q(`group flex items-center justify-center rounded-full bg-white shadow-2xs`,i.thumb,`data-checked:bg-primary-foreground`),render:(e,t)=>(0,X.jsx)(MD,{renderProps:e,state:t,dirSign:r,sizeConfig:i,reduced:a})})})})}function PD({tone:e}){return(0,X.jsx)(`span`,{className:Rg(`inline-block size-2 shrink-0 rounded-full`,zg[e]),"aria-hidden":!0})}function FD({label:e,tone:t,mono:n,children:r}){return(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2 last:border-b-0`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:e}),(0,X.jsx)(`dd`,{className:Rg(`min-w-0 text-right text-sm break-all`,n?`font-mono text-xs text-foreground-strong`:`text-foreground`,t&&Bg[t]),children:r})]})}function ID({children:e}){return(0,X.jsx)(`dl`,{className:`mt-1`,children:e})}function LD({tone:e,text:t,detail:n}){return(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2`,children:[(0,X.jsx)(PD,{tone:e}),(0,X.jsx)(`span`,{children:t}),n?(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:n}):null]})}function RD({status:e,busy:t,onToggle:n}){let r=e.tunnel,i=e.enabled;return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsx)(iD,{children:$(`panel.connection.state`)})}),(0,X.jsxs)(`label`,{className:`flex items-center justify-between gap-4 border-b border-border-muted py-3`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-muted`,children:$(`panel.connection.remoteControl`)}),(0,X.jsx)(ND,{size:`md`,checked:i,disabled:t!==``,onCheckedChange:e=>n(e),"aria-label":$(`panel.connection.remoteControl`)})]}),(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.connection.deviceName`),children:e.name||`—`}),(0,X.jsx)(FD,{label:$(`panel.connection.instanceId`),mono:!0,children:e.instanceId||`—`}),(0,X.jsxs)(FD,{label:$(`panel.connection.platform`),children:[e.platform,` `,e.osVersion,` · `,e.arch]}),(0,X.jsx)(FD,{label:$(`panel.connection.tunnel`),tone:Hg(r.state),...r.state===`error`&&r.error?{"data-error":r.error}:{},children:(0,X.jsx)(LD,{tone:Hg(r.state),text:Ug(r.state),...r.error?{detail:r.error}:{}})}),(0,X.jsx)(FD,{label:$(`panel.connection.sidecar`),children:(0,X.jsx)(LD,{tone:e.sidecar.state===`healthy`?`ok`:`warn`,text:Kg(e.sidecar.state),...e.sidecar.restarts>0?{detail:$(`panel.connection.sidecarRestarts`,{count:e.sidecar.restarts})}:{}})}),(0,X.jsx)(FD,{label:$(`panel.connection.mirror`),children:(0,X.jsx)(LD,{tone:e.mirror.ok?`ok`:e.mirror.error?`error`:`warn`,text:e.mirror.ok?$(`panel.connection.mirrorOk`):$(`panel.connection.mirrorOff`),detail:Vg(e.mirror.pushedAt)})})]}),(0,X.jsx)(zD,{status:e})]})}function zD({status:e}){let t=e.tunnel.admissionHint;return t?t===`register-secret`?(0,X.jsxs)(HE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.connection.relayNeedsSecret`)}),(0,X.jsx)(KE,{children:$(`panel.connection.relayNeedsSecretBody`)})]}):(0,X.jsxs)(HE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.connection.relayRejected`)}),(0,X.jsx)(KE,{children:$(`panel.connection.relayRejectedBody`)})]}):null}function BD(e){return vf(`alert-dialog`,e)}var VD=class extends Df{};function HD(){return new VD}var UD=Object.assign(function(e){return(0,X.jsx)(BD,{...e})},{createHandle:HD});function WD({className:e,children:t,backdrop:n=!0,frame:r=!0,backdropProps:i,viewportProps:a,...o}){let{portal:s,popup:c}=Af(o),l=i?.forceRender===!0,u=r&&n;return(0,X.jsxs)(Qd,{...s,children:[n&&(0,X.jsx)(kd,{"data-slot":`alert-dialog-backdrop`,...i,className:Q(`fixed inset-0 z-50 bg-black/30 backdrop-blur-sm supports-[-webkit-touch-callout:none]:absolute`,`motion-safe:transition-opacity motion-safe:duration-250 motion-safe:ease-out`,`data-ending-style:motion-safe:opacity-0 data-starting-style:motion-safe:opacity-0`,i?.className)}),(0,X.jsx)(bf,{"data-slot":`alert-dialog-viewport`,...a,className:Q(`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,a?.className),children:(0,X.jsx)(Xd,{"data-slot":`alert-dialog-popup`,...u?{"data-frame":``}:{},className:Q(`group/alert-dialog-popup relative flex max-h-full min-h-0 w-100 max-w-full flex-col`,`rounded-2xl border`,u?Q(`border-white/15 bg-white/10 p-1.5 backdrop-blur-sm`,!l&&`data-nested:border-border-overlay data-nested:bg-background data-nested:p-0 data-nested:shadow-2xl data-nested:backdrop-blur-none`):`bg-background border-border-overlay`,!u&&`shadow-2xl`,`isolate transform-gpu outline-none`,`motion-safe:transition-[opacity,scale] motion-safe:duration-250 motion-safe:ease-[cubic-bezier(0.175,0.885,0.32,1.5)]`,`data-starting-style:motion-safe:scale-95 data-starting-style:motion-safe:opacity-0`,`data-ending-style:motion-safe:scale-95 data-ending-style:motion-safe:opacity-0 data-ending-style:motion-safe:duration-100 data-ending-style:motion-safe:ease-out`,e),...c,children:(0,X.jsx)(`div`,{"data-slot":`alert-dialog-content`,className:Q(`flex min-h-0 flex-col overflow-hidden not-has-[>[data-slot=alert-dialog-footer]]:pb-6 not-has-[>[data-slot=alert-dialog-header]]:pt-6 [&>[data-slot=alert-dialog-header]+[data-slot=alert-dialog-footer]]:pt-0`,u&&Q(`bg-background rounded-[calc(var(--radius-2xl)*5/6)]`,!l&&`group-data-nested/alert-dialog-popup:rounded-none group-data-nested/alert-dialog-popup:bg-transparent`)),children:t})})})]})}function GD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:Q(`flex shrink-0 flex-col gap-2 p-6`,e),...t})}function KD({className:e,...t}){return(0,X.jsx)(xf,{"data-slot":`alert-dialog-title`,className:Q(`text-foreground-intense text-xl font-semibold`,e),...t})}function qD({className:e,...t}){return(0,X.jsx)(Md,{"data-slot":`alert-dialog-description`,className:Q(`text-foreground-muted text-sm`,e),...t})}function JD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-body`,className:Q(`min-h-0 flex-1 px-6`,e),...t})}function YD({className:e,...t}){return(0,X.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:Q(`flex flex-col-reverse gap-2 p-6 sm:flex-row sm:justify-end`,e),...t})}var XD=class extends Error{code;status;constructor(e,t,n){super(e),this.name=`ApiError`,this.code=t,this.status=n}};async function ZD(e){let t=null;try{t=await e.json()}catch{t=null}let n=t?.error;if(typeof n==`string`&&n)return new XD(n,`http_${e.status}`,e.status);if(n&&typeof n==`object`){let t=n,r=typeof t.code==`string`&&t.code?t.code:`http_${e.status}`;return new XD(typeof t.message==`string`&&t.message?t.message:$(`panel.net.requestFailed`,{status:e.status}),r,e.status)}return new XD($(`panel.net.requestFailed`,{status:e.status}),`http_${e.status}`,e.status)}async function QD(e){let t=await fetch(e,{headers:{accept:`application/json`}});if(!t.ok)throw await ZD(t);return await t.json()}async function $D(e,t){let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw await ZD(n);return await n.json()}function eO(e){return e instanceof XD?e.message:e instanceof Error?e.message||$(`panel.net.requestFailedNoStatus`):String(e)}var tO={ok:4e3,soft:6e3,error:9e3};function nO(){let e=(0,g.useRef)(Zu());return e.current=Zu(),(0,g.useCallback)((t,n)=>{e.current.add({title:n,type:t,timeout:tO[t],priority:t===`error`?`high`:`low`})},[])}function rO(e,t){if(!e)return``;let n=Math.max(0,t-e);if(n<6e4)return $(`panel.devices.justNow`);let r=Math.floor(n/6e4);if(r<60)return $(`panel.devices.minutesAgo`,{count:r});let i=Math.floor(r/60);return i<24?$(`panel.devices.hoursAgo`,{count:i}):$(`panel.devices.daysAgo`,{count:Math.floor(i/24)})}function iO(e,t){return e?aO(e,t)?$(`panel.devices.online`):rO(e,t):$(`panel.devices.noRecord`)}function aO(e,t){return e>0&&t-e<=3e5}function oO(e){return{ios:`iOS`,android:`Android`,linux:`Linux`,darwin:`macOS`,win32:`Windows`}[e]??(e||$(`panel.devices.unknownPlatform`))}function sO(e){return $(e===`relay`?`panel.devices.channelRelay`:e===`lan`?`panel.devices.channelLan`:`panel.devices.channelUnknown`)}function cO({onRevokeAll:e,busy:t}){let n=nO(),[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(null),[s,c]=(0,g.useState)(!1),l=(0,g.useCallback)(async()=>{try{i(await QD(`/api/relay/devices`))}catch{}},[]);(0,g.useEffect)(()=>{let e=()=>{document.hidden||l()};e();let t=window.setInterval(e,3e3);return document.addEventListener(`visibilitychange`,e),()=>{window.clearInterval(t),document.removeEventListener(`visibilitychange`,e)}},[l]);let u=r?.devices??[],d=r?.serverNow??0,f=e=>{let t=e?.model||e?.name||$(`panel.devices.unknown`);return e?.suffix?`${t} · ${e.suffix}`:t};async function p(e){c(!0);try{let t=await $D(`/api/relay/devices/revoke`,{deviceId:e.deviceId});o(null),await l(),n(`soft`,$(t.closed>0?`panel.devices.unbindDoneClosed`:`panel.devices.unbindDone`,{name:f(e),count:t.revoked,closed:t.closed}))}catch(e){n(`error`,$(`panel.devices.unbindFailed`,{message:eO(e)}))}finally{c(!1)}}return u.length===0?null:(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsxs)(iD,{className:`flex flex-wrap items-center justify-between gap-x-2 gap-y-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[$(`panel.devices.title`),(0,X.jsx)(XE,{variant:`secondary`,size:`sm`,children:u.length})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t!==``,onClick:e,children:$(`panel.pairing.revokeAll`)})]})}),(0,X.jsx)(`div`,{className:`mt-1`,children:u.map(e=>{let t=aO(e.lastSeenAt,d);return(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b border-border-muted py-3 last:border-b-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-strong`,children:f(e)}),e.legacy?(0,X.jsx)(XE,{variant:`warning`,size:`xs`,children:$(`panel.devices.legacy`)}):null,e.bindings>1?(0,X.jsx)(XE,{variant:`secondary`,size:`xs`,children:$(`panel.devices.extraBindings`,{count:e.bindings-1})}):null,(0,X.jsxs)(`span`,{className:`text-xs text-foreground-muted`,children:[oO(e.platform),e.osVersion?` ${e.osVersion}`:``,e.appVersion?$(`panel.devices.appVersion`,{version:e.appVersion}):``]})]}),(0,X.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-foreground-muted`,children:[(0,X.jsx)(`span`,{children:$(`panel.devices.boundAt`,{time:rO(e.boundAt,d)||`—`})}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[t?(0,X.jsx)(PD,{tone:`ok`}):null,iO(e.lastSeenAt,d)]}),(0,X.jsx)(`span`,{children:sO(e.lastChannel)}),(0,X.jsx)(`span`,{children:e.encrypted?$(`panel.devices.encrypted`):$(`panel.devices.plain`)})]})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,onClick:()=>o(e),children:$(`panel.devices.unbind`)})]},e.deviceId)})}),(0,X.jsx)(UD,{open:a!==null,onOpenChange:e=>{!e&&!s&&o(null)},children:(0,X.jsxs)(WD,{children:[(0,X.jsx)(GD,{children:(0,X.jsx)(KD,{children:$(`panel.devices.unbindTitle`)})}),(0,X.jsxs)(JD,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)(qD,{children:$(`panel.devices.unbindConfirm`,{name:f(a)})}),(0,X.jsx)(`p`,{className:`text-foreground-muted`,children:$(a?.legacy?`panel.devices.effectLegacy`:`panel.devices.effectIdentity`)})]}),(0,X.jsxs)(YD,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:s,onClick:()=>o(null),children:$(`panel.devices.cancel`)}),(0,X.jsx)(Bf,{variant:`destructive`,disabled:s,onClick:()=>{a&&p(a)},children:s?(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,X.jsx)(PE,{}),$(`panel.devices.unbinding`)]}):$(`panel.devices.unbind`)})]})]})})]})}var lO=`https://github.com/WNLUO/dsh-mobile-server`;function uO(){return[$(`panel.notice.promptIntro`),``,`${$(`panel.notice.promptRepo`)}: ${lO}`,``,$(`panel.notice.promptAsk`),``,$(`panel.notice.promptDo`),``,$(`panel.notice.promptAfter`),``,$(`panel.notice.promptStyle`)].join(`
24
+ `)}function dO({title:e,summary:t,children:n}){return(0,X.jsxs)(`details`,{className:`group rounded-lg border border-border-muted bg-background-muted`,children:[(0,X.jsxs)(`summary`,{className:`flex cursor-pointer list-none flex-col gap-0.5 px-3 py-2.5 marker:content-none`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-semibold text-foreground-strong`,children:[(0,X.jsx)(`svg`,{viewBox:`0 0 12 12`,className:`size-3 shrink-0 text-foreground-muted transition-transform group-open:rotate-90`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`m4.5 2.5 3.5 3.5-3.5 3.5`})}),e]}),(0,X.jsx)(`span`,{className:`pl-5 text-xs leading-5 text-foreground-muted`,children:t})]}),(0,X.jsx)(`div`,{className:`flex flex-col gap-2.5 border-t border-border-muted px-3 py-3`,children:n})]})}function fO({lines:e}){return(0,X.jsx)(`pre`,{className:`overflow-x-auto rounded bg-background-subtle px-2.5 py-2 font-mono text-[11px] leading-5 break-words whitespace-pre-wrap text-foreground-strong`,children:e.join(`
25
+ `)})}function pO({open:e,onOpenChange:t,port:n}){let r=(0,g.useRef)(null),[i,a]=(0,g.useState)(!1);async function o(){try{await navigator.clipboard.writeText(uO()),a(!0),window.setTimeout(()=>a(!1),2e3)}catch{a(!1)}}return(0,X.jsx)(jf,{open:e,onOpenChange:e=>{e||a(!1),t(e)},children:(0,X.jsxs)(Mf,{className:`w-[min(860px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),initialFocus:r,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.notice.setupGuideTitle`)})}),(0,X.jsx)(`div`,{ref:r,tabIndex:-1,className:`flex min-h-0 flex-col outline-none`,children:(0,X.jsxs)(Ff,{className:`flex flex-col gap-3 overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:[(0,X.jsxs)(dO,{title:$(`panel.notice.guideRelayTitle`),summary:$(`panel.notice.guideRelaySummary`),children:[(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideRelayReady`)}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideRelayCopyHint`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,onClick:()=>void o(),children:$(`panel.notice.guideRelayCopy`)}),i?(0,X.jsx)(`span`,{className:`text-xs text-success`,children:$(`panel.notice.guideRelayCopied`)}):null]}),(0,X.jsx)(`p`,{className:`rounded-md border border-border-muted bg-background px-2.5 py-2 text-xs leading-5 text-warning`,children:$(`panel.notice.guideRelayWarn`)})]}),(0,X.jsxs)(dO,{title:$(`panel.notice.guideTunnelTitle`),summary:$(`panel.notice.guideTunnelSummary`),children:[(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelOS`)}),(0,X.jsx)(fO,{lines:[`# macOS`,`brew install cloudflared`,`# Linux`,`curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared`,`chmod +x cloudflared && sudo mv cloudflared /usr/local/bin/`,`# Windows (PowerShell)`,`winget install --id Cloudflare.cloudflared`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelTry`)}),(0,X.jsx)(fO,{lines:[`cloudflared tunnel --url http://127.0.0.1:${n}`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTunnelFixed`)}),(0,X.jsx)(fO,{lines:[`cloudflared tunnel login`,`cloudflared tunnel create dsh`,`cloudflared tunnel route dns dsh dsh.example.com`,`cloudflared tunnel run --url http://127.0.0.1:${n} dsh`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideTunnelFill`)}),(0,X.jsx)(`p`,{className:`mt-1 border-t border-border-muted pt-3 text-sm font-semibold text-foreground-strong`,children:$(`panel.notice.guideTailscaleTitle`)}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTailscaleInstall`)}),(0,X.jsx)(fO,{lines:[`# macOS`,`brew install tailscale`,`# Linux`,`curl -fsSL https://tailscale.com/install.sh | sh`,`# Windows`,`winget install --id Tailscale.Tailscale`,`sudo tailscale up`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground`,children:$(`panel.notice.guideTailscaleServe`)}),(0,X.jsx)(fO,{lines:[`tailscale serve --bg http://127.0.0.1:${n}`]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.guideTailscaleFill`)})]})]})})]})})}var mO=`0.4.9`;function hO({lanPort:e}){let[t,n]=(0,g.useState)(!1);return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{style:{paddingBottom:`0.5rem`},children:(0,X.jsx)(iD,{children:$(`panel.notice.title`)})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-3 px-4 pb-4`,children:[(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-muted`,children:$(`panel.notice.versionLabel`)}),(0,X.jsx)(XE,{variant:`warning`,size:`sm`,children:`≥ ${mO}`})]}),(0,X.jsxs)(`p`,{className:`flex items-start gap-2 text-sm leading-5 text-foreground-muted`,children:[(0,X.jsx)(`span`,{className:`flex h-5 shrink-0 items-center`,children:(0,X.jsx)(PD,{tone:`warn`})}),(0,X.jsx)(`span`,{className:`min-w-0`,children:$(`panel.notice.effective`)})]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.body`,{version:mO})})]}),(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5 border-t border-border-muted pt-3`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1`,children:[(0,X.jsx)(`h3`,{className:`text-sm font-medium text-foreground-strong`,children:$(`panel.notice.selfHostTitle`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:()=>n(!0),children:$(`panel.notice.selfHostAction`)})]}),(0,X.jsx)(`p`,{className:`text-sm leading-6 text-foreground-muted`,children:$(`panel.notice.selfHostBody`)})]})]}),(0,X.jsx)(pO,{open:t,onOpenChange:n,port:e})]})}var gO=g.createContext(void 0);function _O(e=!1){let t=g.useContext(gO);if(!t&&!e)throw Error(S(86));return t}var vO=function(e){let t=jd(),[n,r]=g.useState(t),[i,a]=g.useState(),[o,s]=g.useState([]),c=n===void 0?t:n,l=y(()=>new Map),{messageIds:u}=SD(),d=G((e,t)=>{let n=l.current;t===void 0?n.delete(e):n.set(e,t),r(e=>{if(n.size===0)return e;let t;for(let r of n.values()){if(r===e)return e;t===void 0&&(t=r)}return t})}),f=G(()=>{l.current.size===0&&r(t)}),p=g.useCallback(e=>{let t=e[`aria-describedby`]?e[`aria-describedby`].split(` `):[];return t.push(...u,...o),{...e,"aria-describedby":Array.from(new Set(t)).join(` `)||void 0}},[u,o]),m=g.useMemo(()=>({controlId:c,registerControlId:d,resetControlId:f,labelId:i,setLabelId:a,messageIds:o,setMessageIds:s,getDescriptionProps:p}),[c,d,f,i,a,o,s,p]);return(0,X.jsx)(xD.Provider,{value:m,children:e.children})};function yO(e,t){let n=jd(e);return b(()=>(t(n),()=>{t(e=>e===n?void 0:e)}),[n,t]),n}function bO(e={}){let{id:t,fallbackControlId:n,native:r=!1,setLabelId:i,focusControl:a}=e,{controlId:o,setLabelId:s}=SD(),c=yO(t,G(e=>{s(e),i?.(e)})),l=o??n;function u(e){if(a){a(e,l);return}if(!l)return;let t=Me(e.currentTarget).getElementById(l);fe(t)&&xO(t)}function d(e){at(e.nativeEvent)?.closest(`button,input,select,textarea`)||(!e.defaultPrevented&&e.detail>1&&e.preventDefault(),!r&&u(e))}return r?{id:c,htmlFor:l,onMouseDown:d}:{id:c,onClick:d,onPointerDown(e){e.preventDefault()}}}function xO(e){e.focus({focusVisible:!0})}function SO(e,t){return{...e,state:{...e.state,valid:!t&&e.state.valid}}}var CO=Object.keys(lD);function wO(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t||e.form===null&&!e.hasAttribute(`form`)}function TO(e,t){let n=null;for(let r of e.keys())if(wO(r,t)){if(!r.validity.valid)return r;n??=r}return n}function EO(e){return{...lD,valid:!e,customError:e}}function DO(e){return e&&e.validationMessage?[e.validationMessage]:[]}function OO(e){let{elementRef:t,formRef:n}=bD(),{setValidityData:r,validate:i,validityData:a,validationDebounceTime:o,invalid:s,markedDirtyRef:c,state:l,shouldValidateOnChange:u,validationMode:d,registeredFieldIdRef:f}=e,{controlId:p,getDescriptionProps:m}=SD(),_=Be(),v=g.useRef(null),b=y(()=>new Map).current,x=g.useRef(0),S=g.useRef(null),C=g.useCallback((e,t)=>(b.set(e,t),()=>{b.delete(e)}),[b]),w=G(()=>{let e=TO(b,t.current);return e&&b.get(e)?.controlRef.current||null}),T=G(async(e,o=!1)=>{x.current+=1;let m=x.current;function h(e,t=s){let r=f.current??p;if(r==null)return;let i=n.current.fields.get(r);if(!i)return;let a=SO(e,t);n.current.fields.set(r,{...i,validityData:a})}function g(t,n){let r=t.valid===!1?n:[];return{value:e,state:t,error:r[0]??``,errors:r,initialValue:a.initialValue}}function y(e,t){let n=e.validity.customError?e.validationMessage:``,r=t.replace(/\r\n?/g,`
26
+ `);e.setCustomValidity(r),S.current=[e,r,n]}function C(){let e=S.current;S.current=null,e&&(!e[0].willValidate||e[0].validationMessage===e[1])&&e[0].setCustomValidity(e[2])}function w(e,t,n){let i=g(e,t);h(i,n),r(i)}function T(e){let t=CO.reduce((t,n)=>(t[n]=e.validity[n],t),{}),n=!1;for(let e of CO)if(e!==`valid`){if(e===`valueMissing`&&t[e])n=!0;else if(t[e])return t}return n&&!c.current&&(t.valid=!0,t.valueMissing=!1),t}function E(){return b.size>0?TO(b,t.current):v.current}let D=E();function O(){return D=E(),D?.willValidate?T(D):EO(!1)}if(o){if(l.valid!==!1||!D)return;if(!D.validity.valueMissing){C();let e=E(),t=e?.validity.customError?DO(e):[];w(EO(t.length>0),t,!1);return}for(let e of CO)if(e!==`valid`&&e!==`valueMissing`&&e!==`customError`&&D.validity[e])return}_.clear(),C();let k=O(),A=DO(D),j=u();if(A.length===0||j){let t=Array.from(n.current.fields.values()).reduce((e,t)=>(t.name&&(e[t.name]=t.getValue()),e),{}),r=i(e,t),o;if(typeof r==`object`&&r&&`then`in r){if(k.valid===!1?w(k,A):(d===`onSubmit`||!a.state.customError)&&(k.valid=null,w(k,A)),o=await r,m!==x.current)return;k=O()}else o=r;A=o?[].concat(o).filter(Boolean):[],A.length>0?(k.valid=!1,k.customError=!0,D?.willValidate&&y(D,A.join(`
27
+ `))):A=DO(D)}w(k,A)}),E=G((e,t=!1)=>{if(_.clear(),x.current+=1,t)return;let n=u();n&&e!==``&&o?_.start(o,()=>{T(e)}):T(e,!n)}),D=g.useCallback((e,t={})=>Sr(m(t),l.valid===!1&&!l.disabled&&!e?{"aria-invalid":!0}:h),[m,l.disabled,l.valid]);return g.useMemo(()=>({getValidationProps:D,inputRef:v,registeredInputs:b,registerInput:C,getInputControl:w,commit:T,change:E}),[D,b,C,w,T,E])}function kO(e){let{change:t,commit:n,invalid:r,markedDirtyRef:i,name:a,setRegisteredFieldName:o,registeredFieldIdRef:s,setValidityData:c,validityData:l}=e,{formRef:u}=bD(),d=g.useRef(null),f=g.useRef(null),p=g.useRef(!1),m=G(()=>{let e=f.current;if(e)return e.getValue?e.getValue():e.value});function h(e){return e.value===void 0?m():e.value}let _=G(()=>{let e=f.current;if(i.current=!0,!e){n(l.value);return}n(h(e))});function v(){let e=f.current;e&&e.id&&u.current.fields.set(e.id,{getValue:m,name:a??e.name,controlRef:e.controlRef,validityData:SO(l,r),validate:_})}function y(e=f.current?.id){e&&u.current.fields.delete(e)}function x(e){if(p.current)return;p.current=!0;let t=h(e);c(e=>e.initialValue===t?e:{...e,initialValue:t})}return b(()=>{let e=f.current;e&&e.id&&(o(a?void 0:e.name),u.current.fields.set(e.id,{getValue:m,name:a??e.name,controlRef:e.controlRef,validityData:SO(l,r),validate:_}))},[u,m,r,a,o,_,l]),b(()=>{let e=u.current.fields;return()=>{let t=f.current?.id;t&&e.delete(t)}},[u]),[_,G((e,n)=>{if(!n){d.current===e&&(d.current=null,t(void 0,!0),y(),f.current=null,o(void 0),s.current=void 0);return}let r=f.current?.id,i=d.current;i&&i!==e&&t(void 0,!0),d.current=e,f.current=n,a||o(n.name),s.current=n.id,r&&r!==n.id&&y(r),x(n),v()})]}var AO=g.forwardRef(function(e,t){let{errors:n,validationMode:r,submitCountRef:i}=bD(),{render:a,className:o,validate:s,validationDebounceTime:c=0,validationMode:l=r,name:u,disabled:d=!1,invalid:f,dirty:p,touched:m,actionsRef:h,style:_,...v}=e,y=_O(!0)?.disabled,x=G(s||(()=>null)),S=y||d,[C,w]=g.useState(!1),[T,E]=g.useState(!1),[D,O]=g.useState(!1),[k,A]=g.useState(!1),j=p??T,M=m??C,N=g.useRef(j),P=g.useRef(void 0),[F,I]=g.useState(),L=u??F;b(()=>{p!==void 0&&(N.current=p)},[p]);let R=G(e=>{p===void 0&&(e&&(N.current=!0),E(e))}),z=G(e=>{m===void 0&&w(e)}),B=G(()=>l===`onChange`||l===`onSubmit`&&i.current>0),V=L&&Object.hasOwn(n,L)?n[L]:null,H=!!(Array.isArray(V)?V.length:V),ee=f===!0||H,[te,U]=g.useState({state:lD,error:``,errors:[],value:null,initialValue:null}),W=!ee&&(S?null:te.state.valid),ne=g.useMemo(()=>({disabled:S,touched:M,dirty:j,valid:W,filled:D,focused:k}),[S,M,j,W,D,k]),re=OO({setValidityData:U,validate:x,validityData:te,validationDebounceTime:c,invalid:ee,markedDirtyRef:N,state:ne,shouldValidateOnChange:B,validationMode:l,registeredFieldIdRef:P}),[K,ie]=kO({change:re.change,commit:re.commit,invalid:ee,markedDirtyRef:N,name:u,setRegisteredFieldName:I,registeredFieldIdRef:P,setValidityData:U,validityData:te});g.useImperativeHandle(h,()=>({validate:K}),[K]);let ae=g.useMemo(()=>({invalid:ee,name:L,validityData:te,setValidityData:U,disabled:S,setTouched:z,setDirty:R,setFilled:O,setFocused:A,validationMode:l,shouldValidateOnChange:B,state:ne,registerFieldControl:ie,validation:re}),[ee,L,te,S,z,R,O,A,l,B,ne,ie,re]),oe=Ir(`div`,e,{ref:t,state:ne,props:v,stateAttributesMapping:dD});return(0,X.jsx)(gD.Provider,{value:ae,children:oe})}),jO=g.forwardRef(function(e,t){return(0,X.jsx)(vO,{children:(0,X.jsx)(AO,{...e,ref:t})})}),MO=g.createContext({disabled:!1});function NO(){return g.useContext(MO)}var PO=g.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,nativeLabel:o=!0,...s}=e,c=_D(!1),l=NO(),{labelId:u}=SD(),d={...c.state,disabled:c.disabled||l.disabled},f=g.useRef(null),p=bO({id:u??a,native:o});return Ir(`label`,e,{ref:[t,f],state:d,props:[p,s],stateAttributesMapping:dD})}),FO=g.forwardRef(function(e,t){let{render:n,className:r,id:i,name:a,value:o,disabled:s=!1,onValueChange:c,defaultValue:l,autoFocus:u=!1,style:d,...f}=e,{state:p,name:m,disabled:h,setTouched:_,setDirty:v,validityData:y,setFocused:x,setFilled:S,validationMode:C,validation:w}=_D(),{clearErrors:T,elementRef:E,submitCountRef:D}=bD(),O=h||s,k=m??a,A={...p,disabled:O},{labelId:j}=SD(),M=ED({id:i}),[N]=Yp({controlled:o,default:l,name:`FieldControl`,state:`value`}),P=o!==void 0,F=P?N:void 0,I=F==null?void 0:String(F),L=G(()=>w.inputRef.current?.value);vD(w.inputRef,M,I,L,!O,a),b(()=>{let e=I??w.inputRef.current?.value;e!==void 0&&S(e!==``)},[I,w.inputRef,S]),Cf(I,()=>{I!==void 0&&(T(k),v(I!==(y.initialValue??``)),w.change(I))});let R=g.useRef(null),z=Be();return b(()=>{u&&R.current===it(Me(R.current))&&x(!0)},[u,x]),Ir(`input`,e,{ref:[t,R],state:A,props:[{id:M,disabled:O,name:k,ref:w.inputRef,"aria-labelledby":j,autoFocus:u,...P?{value:F}:{defaultValue:l},onChange(e){let t=e.currentTarget.value,n=wa(la,e.nativeEvent);c?.(t,n),!P&&(v(t!==(y.initialValue??``)),S(t!==``),!e.nativeEvent.defaultPrevented&&!n.isCanceled&&(T(k),w.change(t)))},onFocus(){x(!0)},onBlur(e){if(_(!0),x(!1),C===`onBlur`){let t=e.currentTarget.value;w.commit(t),P&&queueMicrotask(()=>{let e=w.inputRef.current?.value;e!==void 0&&e!==t&&e!==(y.initialValue??``)&&w.commit(e)})}},onKeyDown(e){if(e.currentTarget.tagName===`INPUT`&&e.key===`Enter`){_(!0);let t=e.currentTarget.value,n=e.currentTarget.form;if(n&&n===E.current&&!e.defaultPrevented){let t=e.currentTarget,n=D.current;z.start(0,()=>{D.current===n&&w.commit(t.value)})}else w.commit(t)}}},f,e=>w.getValidationProps(O,e)],stateAttributesMapping:dD})});function IO({className:e,...t}){return(0,X.jsx)(jO,{"data-slot":`field`,className:Q(e),...t})}function LO({className:e,...t}){return(0,X.jsx)(PO,{"data-slot":`field-label`,className:Q(`text-foreground-intense mb-1.5 flex w-fit items-center text-sm font-medium select-none`,`data-disabled:opacity-disabled`,e),...t})}var RO=g.forwardRef(function(e,t){return(0,X.jsx)(FO,{ref:t,...e})}),zO=Au(`w-full border text-foreground outline-none transition-[background-color,border-color,box-shadow] duration-200 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{outline:`bg-background border-border-strong hover:not-focus:not-focus-visible:not-has-focus:not-has-focus-visible:not-data-popup-open:not-has-data-popup-open:not-data-pressed:not-has-data-pressed:not-data-invalid:not-has-data-invalid:border-border-emphasis`,soft:`bg-background-muted border-transparent hover:not-focus:not-focus-visible:not-has-focus:not-has-focus-visible:not-data-popup-open:not-has-data-popup-open:not-data-pressed:not-has-data-pressed:not-data-invalid:not-has-data-invalid:border-border-strong`},size:{sm:`h-8 px-3 text-xs pointer-coarse:text-base rounded-sm gap-1.5 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='stroke-'])]:stroke-[1.75]`,md:`h-10 px-3.5 text-sm pointer-coarse:text-base rounded-md gap-2 [&_svg:not([class*='size-'])]:size-4.5 [&_svg:not([class*='stroke-'])]:stroke-[1.65]`,lg:`h-12 px-4 text-base rounded-lg gap-2 [&_svg:not([class*='size-'])]:size-5 [&_svg:not([class*='stroke-'])]:stroke-[1.65]`},state:{self:Q(`focus-visible:ring-3 focus-visible:ring-ring-input focus-visible:border-transparent focus-visible:bg-background`,`data-popup-open:ring-3 data-popup-open:ring-ring-input data-popup-open:border-transparent data-popup-open:bg-background`,`data-pressed:ring-3 data-pressed:ring-ring-input data-pressed:border-transparent data-pressed:bg-background`,`data-invalid:bg-error-subtle data-invalid:border-error`,`data-invalid:focus-visible:border-transparent data-invalid:focus-visible:ring-ring-error data-invalid:focus-visible:bg-background`,`data-invalid:data-popup-open:border-transparent data-invalid:data-popup-open:ring-ring-error data-invalid:data-popup-open:bg-background`,`data-invalid:data-pressed:border-transparent data-invalid:data-pressed:ring-ring-error data-invalid:data-pressed:bg-background`,`data-disabled:border-border-strong! data-disabled:bg-background-subtle! data-disabled:cursor-not-allowed data-disabled:border-dashed data-disabled:opacity-disabled`),within:Q(`flex items-center`,`has-focus:ring-[3px] has-focus:ring-ring-input has-focus:border-transparent has-focus:bg-background`,`has-data-popup-open:ring-3 has-data-popup-open:ring-ring-input has-data-popup-open:border-transparent has-data-popup-open:bg-background`,`has-data-pressed:ring-3 has-data-pressed:ring-ring-input has-data-pressed:border-transparent has-data-pressed:bg-background`,`data-invalid:bg-error-subtle data-invalid:border-error data-invalid:has-focus:border-transparent data-invalid:has-focus:ring-ring-error data-invalid:has-focus:bg-background`,`data-invalid:has-data-popup-open:border-transparent data-invalid:has-data-popup-open:ring-ring-error data-invalid:has-data-popup-open:bg-background`,`data-invalid:has-data-pressed:border-transparent data-invalid:has-data-pressed:ring-ring-error data-invalid:has-data-pressed:bg-background`,`has-data-invalid:bg-error-subtle has-data-invalid:border-error has-data-invalid:has-focus:border-transparent has-data-invalid:has-focus:ring-ring-error has-data-invalid:has-focus:bg-background`,`has-data-invalid:has-data-popup-open:border-transparent has-data-invalid:has-data-popup-open:ring-ring-error has-data-invalid:has-data-popup-open:bg-background`,`has-data-invalid:has-data-pressed:border-transparent has-data-invalid:has-data-pressed:ring-ring-error has-data-invalid:has-data-pressed:bg-background`,`has-[input:disabled]:border-border-strong! has-[input:disabled]:bg-background-subtle! has-[input:disabled]:cursor-not-allowed has-[input:disabled]:border-dashed has-[input:disabled]:opacity-disabled`)}},defaultVariants:{variant:`outline`,size:`md`,state:`self`}});function BO(e,t){(Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`value`)?.set)?.call(e,t),e.dispatchEvent(new Event(`input`,{bubbles:!0}))}function VO({className:e,variant:t=`outline`,inputSize:n=`md`,clearable:r,startSlot:i,endSlot:a,onClear:o,inputProps:s,ref:c,...l}){let u=g.useRef(null),d=!!(r||i||a),f=l[`aria-invalid`],p=f===!0||f===`true`,m=Eu(c,u),h=()=>{u.current&&l.value===void 0&&BO(u.current,``),u.current?.focus(),o?.()};return d?(0,X.jsxs)(`div`,{"data-slot":`input-wrapper`,className:Q(zO({variant:t,size:n,state:`within`}),e),...p?{"data-invalid":``}:{},children:[i&&(0,X.jsx)(`div`,{"data-slot":`input-start`,className:`-ms-1 flex shrink-0 items-center`,children:i}),(0,X.jsx)(RO,{"data-slot":`input`,ref:m,placeholder:l.placeholder??` `,...s,className:Q(`peer text-foreground placeholder:text-foreground-subtle h-full min-w-0 flex-1 bg-transparent outline-none disabled:cursor-not-allowed`,s?.className),...l}),r&&(0,X.jsx)(`button`,{"data-slot":`input-clear`,type:`button`,onClick:h,className:`text-foreground-subtle hover:text-foreground pointer-events-none shrink-0 cursor-pointer opacity-0 transition-[opacity,color] duration-200 peer-not-placeholder-shown:pointer-events-auto peer-not-placeholder-shown:opacity-100`,tabIndex:-1,"aria-label":`Clear input`,children:(0,X.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`2 2 16 16`,fill:`currentColor`,className:`size-[1em]`,children:(0,X.jsx)(`path`,{d:`M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z`})})}),a&&(0,X.jsx)(`div`,{"data-slot":`input-end`,className:`-me-1 flex shrink-0 items-center`,children:a})]}):(0,X.jsx)(RO,{"data-slot":`input`,ref:m,...s,className:Q(zO({variant:t,size:n,state:`self`}),`placeholder:text-foreground-subtle`,s?.className,e),...l,...p?{"data-invalid":``}:{}})}var HO=1024,UO=65535;function WO({open:e,onOpenChange:t,port:n,busy:r,onSave:i}){let[a,o]=(0,g.useState)(String(n));(0,g.useEffect)(()=>{e&&o(String(n))},[e]);let s=a.trim(),c=Number(s),l=s!==``&&Number.isInteger(c)&&c>=HO&&c<=UO&&r===``;return(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-sm`,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.portTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(IO,{children:[(0,X.jsx)(LO,{htmlFor:`relay-lan-port`,children:$(`panel.pairing.port`)}),(0,X.jsx)(VO,{inputProps:{id:`relay-lan-port`,inputMode:`numeric`},value:a,onChange:e=>o(e.target.value)})]}),(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.pairing.portHint`)})]}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:r!==``,onClick:()=>t(!1),children:$(`panel.common.cancel`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:!l,onClick:()=>i(c),children:$(`panel.common.save`)})]})]})})}var GO=`data-checked`,KO=`data-unchecked`,qO={checked(e){return e?{[GO]:``}:{[KO]:``}},...gt,...dD},JO=`data-composite-item-active`,YO=g.createContext(void 0);function XO(){return g.useContext(YO)}function ZO(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}var QO=g.createContext(void 0);function $O(){let e=g.useContext(QO);if(e===void 0)throw Error(S(52));return e}var ek=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,readOnly:a=!1,required:o=!1,"aria-labelledby":s,value:c,inputRef:l,nativeButton:u=!1,id:d,style:f,...m}=e,_=XO(),{disabled:v,readOnly:y,required:x,form:S,checkedValue:C,touched:w=!1,validation:T,name:E,setCheckedValue:D=p,setTouched:O=p,registerInputRef:k=p}=_??{},{setTouched:A,setFilled:j,state:M,disabled:N}=_D(),P=NO(),{labelId:F,getDescriptionProps:I}=SD(),L=N||P.disabled||v||i,R=y||a,z=x||o,B=S,V=_?C===c:c===``,H=g.useRef(null),ee=g.useRef(null),te=T?.registerInput,U=ur(l,ee,k,g.useCallback(e=>te?.(e,{controlRef:H,value:void 0}),[te]));b(()=>{ee.current?.checked&&j(!0)},[j]),b(()=>{if(ee.current){if(L&&V){k(null);return}k(ee.current)}},[V,L,k]);let W=jd(),ne=ED({id:d}),re=u?void 0:ne,G={role:`radio`,"aria-checked":V,"aria-labelledby":CD(s,F,ee,!u,re),[JO]:V?``:void 0,id:u?ne:W,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||L||R)return;e.preventDefault();let t=ee.current;t&&ra(t,e)},onFocus(e){e.defaultPrevented||L||R||!w||(ee.current?.click(),O(!1))}},{getButtonProps:K,buttonRef:ie}=ia({disabled:L,native:u,composite:!1}),ae={type:`radio`,ref:U,form:B,id:re,name:E,tabIndex:-1,style:E?cr:sr,"aria-hidden":!0,...c===void 0?h:{value:ZO(c)},disabled:L,checked:V,required:z,readOnly:R,onChange(e){if(e.nativeEvent.defaultPrevented||L||R||c===void 0)return;let t=wa(la,e.nativeEvent);D(c,t),!t.isCanceled&&A(!0)},onClick(e){e.stopPropagation()},onFocus(){H.current?.focus()}},oe=g.useMemo(()=>({...M,required:z,disabled:L,readOnly:R,checked:V}),[M,L,R,V,z]),se=oe,ce=_!==void 0,le=[t,H,ie],q=[G,m,K,I,T?e=>T.getValidationProps(L,e):h],ue=Ir(`span`,e,{enabled:!ce,state:oe,ref:le,props:q,stateAttributesMapping:qO});return(0,X.jsxs)(QO.Provider,{value:se,children:[ce?(0,X.jsx)(rg,{tag:`span`,render:n,className:r,style:f,state:oe,refs:le,props:q,stateAttributesMapping:qO}):ue,(0,X.jsx)(`input`,{...ae,suppressHydrationWarning:!0})]})}),tk=g.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=$O(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=As(c),f={...s,transitionStatus:u},p=g.useRef(null),m=a||l,h=Ir(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:qO});return $r({batch:!0,enabled:!c,open:c,ref:p,onComplete(){c||d(!1)}}),m?h:null}),nk={duration:.3,ease:[.4,0,.2,1]},rk={duration:.3,ease:[.4,0,.2,1]},ik={duration:0};function ak({checked:e,reduced:t}){return(0,X.jsx)(tk,{"data-slot":`radio-indicator`,className:`flex items-center justify-center`,keepMounted:!0,children:(0,X.jsx)(pE.span,{className:`bg-primary-foreground size-[0.5em] min-h-2 min-w-2 rounded-full`,initial:!1,animate:{scale:+!!e},transition:t?ik:rk})})}function ok({renderProps:e,state:t,reduced:n}){let{checked:r}=t,{ref:i,...a}=e,[o,s]=fE(),c=Eu(i,o),l=g.useRef(r);return g.useEffect(()=>{let e=l.current!==r;l.current=r,e&&!n&&s(o.current,{scale:[1,.8,1.1,1]},nk)},[r,s,o,n]),(0,X.jsx)(`span`,{"data-slot":`radio`,...a,ref:c,children:(0,X.jsx)(ak,{checked:r,reduced:n})})}function sk({className:e,...t}){let n=hg(),r=t[`aria-invalid`],i=r===!0||r===`true`;return(0,X.jsx)(kw,{features:PT,strict:!0,children:(0,X.jsx)(ek,{...t,...i?{"data-invalid":``}:{},className:Q(`flex size-[1em] min-h-4 min-w-4 shrink-0 cursor-default items-center justify-center`,`bg-background border-border-strong outline-ring-input rounded-full border outline-offset-1`,`transition-[background-color,border-color,box-shadow] duration-200 motion-reduce:transition-none`,`hover:not-data-checked:not-data-disabled:not-data-invalid:border-border-emphasis`,`data-checked:bg-primary data-checked:outline-ring-primary data-checked:border-transparent`,`data-disabled:not-data-checked:bg-background-subtle data-disabled:data-checked:opacity-disabled data-disabled:cursor-not-allowed data-disabled:not-data-checked:border-dashed`,`data-invalid:border-error data-invalid:not-data-checked:bg-error-subtle data-invalid:outline-ring-error`,e),render:(e,t)=>(0,X.jsx)(ok,{renderProps:e,state:t,reduced:n})})})}function ck(e){let{loopFocus:t=!0,orientation:n=`both`,grid:r,onLoop:i,direction:a,highlightedIndex:o,onHighlightedIndexChange:s,rootRef:c,enableHomeAndEndKeys:l=!1,stopEventPropagation:u,disabledIndices:d,modifierKeys:f=m}=e,[p,h]=g.useState(0),_=r!=null,v=g.useRef(null),y=ur(v,c),x=g.useRef([]),S=g.useRef(!1),C=g.useRef(null),w=o??p,T=G((e,t=!1)=>{if(C.current=x.current[e]??null,(s??h)(e),t){let t=x.current[e];Wd(v.current,t,a,n)}}),E=G(e=>{if(e.size===0)return;if(S.current){let e=x.current,t=e.indexOf(C.current);if(t===-1){let t=e[w];!t||En(e,w,d)?T(lk(e,d)):C.current=t}else t!==w&&T(t);return}S.current=!0;let t=Array.from(e.keys()),r=t.find(e=>e?.hasAttribute(`data-composite-item-active`))??null,i=r?e.get(r)?.index??-1:-1;if(i!==-1)T(i);else if(En(t,w,d)){let e=Tn(t,{disabledIndices:d});Sn(t,e)||T(e)}Wd(v.current,r,a,n)});b(()=>{if(d==null||o!=null||!S.current)return;let e=x.current;if(En(e,w,d)){let t=Tn(e,{disabledIndices:d});Sn(e,t)||T(t)}},[d,o,w,x,T]);let D=G((e,t,n)=>i?i(e,t,n,x):n),O=G(e=>{let o=e.key===`Home`||e.key===`End`;if(!zd.has(e.key)||!l&&o||uk(e,f)||!v.current)return;let s=a===`rtl`,c=s?Ld:Rd,p=s?Rd:Ld,m=n===`vertical`?Id:c,h=n===`vertical`?Fd:p,g=at(e.nativeEvent);if(g!=null&&Ud(g)&&!dg(g)){let t=g.selectionStart,n=g.selectionEnd,r=g.value;if(t==null||e.shiftKey||t!==n||e.key!==h&&t<r.length||e.key!==m&&t>0)return}let y=w,b=Cn(x,d),S=wn(x,d);r!=null&&(y=r({disabledIndices:d,elementsRef:x,event:e,highlightedIndex:w,loopFocus:t,maxIndex:S,minIndex:b,onLoop:D,orientation:n,rtl:s}));let C=n!==`vertical`&&e.key===c||n!==`horizontal`&&e.key===`ArrowDown`,E=n!==`vertical`&&e.key===p||n!==`horizontal`&&e.key===`ArrowUp`;l&&(e.key===`Home`?y=b:e.key===`End`&&(y=S)),y===w&&(C||E)&&(t&&y===S&&C?(y=b,i&&(y=i(e,w,y,x))):t&&y===b&&E?(y=S,i&&(y=i(e,w,y,x))):y=Tn(x.current,{startingIndex:y,decrement:E,disabledIndices:d})),y!==w&&!Sn(x.current,y)&&(u&&e.stopPropagation(),(_||o||C||E)&&e.preventDefault(),T(y,!0),queueMicrotask(()=>{x.current[y]?.focus()}))});return{props:{ref:y,onFocus(e){let t=v.current,n=at(e.nativeEvent);t&&n!=null&&Ud(n)&&n.setSelectionRange(0,n.value.length)},onKeyDown:O},highlightedIndex:w,onHighlightedIndexChange:T,elementsRef:x,onMapChange:E,relayKeyboardEvent:O}}function lk(e,t){let n=-1;for(let r=0;r<e.length;r+=1){let i=e[r];if(i&&!En(e,r,t)){if(i.hasAttribute(`data-composite-item-active`))return r;n===-1&&(n=r)}}return Math.max(n,0)}function uk(e,t){for(let n of Vd)if(!t.includes(n)&&e.getModifierState(n))return!0;return!1}function dk(e){let{render:t,className:n,style:r,refs:i=m,props:a=m,state:o=h,stateAttributesMapping:s,highlightedIndex:c,onHighlightedIndexChange:l,orientation:u,grid:d,loopFocus:f,onLoop:p,enableHomeAndEndKeys:_,onMapChange:v,stopEventPropagation:y=!0,rootRef:b,disabledIndices:x,modifierKeys:S,highlightItemOnHover:C=!1,tag:w=`div`,...T}=e,{props:E,highlightedIndex:D,onHighlightedIndexChange:O,elementsRef:k,onMapChange:A,relayKeyboardEvent:j}=ck({grid:d,loopFocus:f,onLoop:p,orientation:u,highlightedIndex:c,onHighlightedIndexChange:l,rootRef:b,stopEventPropagation:y,enableHomeAndEndKeys:_,direction:kc(),disabledIndices:x,modifierKeys:S}),M=Ir(w,e,{state:o,ref:i,props:[E,...a,T],stateAttributesMapping:s}),N=g.useMemo(()=>({highlightedIndex:D,onHighlightedIndexChange:O,highlightItemOnHover:C,relayKeyboardEvent:j}),[D,O,C,j]);return(0,X.jsx)(ea.Provider,{value:N,children:(0,X.jsx)(Eh,{elementsRef:k,onMapChange:e=>{v?.(e),A(e)},children:M})})}var fk=[Bd],pk=g.forwardRef(function(e,t){let{render:n,className:r,disabled:i,readOnly:a,required:o,onValueChange:s,value:c,defaultValue:l,form:u,name:d,inputRef:f,id:p,style:m,...h}=e,{setTouched:_,setFocused:v,validationMode:y,name:b,disabled:x,state:S,validation:C,setDirty:w,setFilled:T,validityData:E}=_D(),{labelId:D}=SD(),{clearErrors:O,elementRef:k}=bD(),A=_O(!0),j=x||i,M=b??d,N=jd(p),[P,F]=Yp({controlled:c,default:l,name:`RadioGroup`,state:`value`}),[I,L]=g.useState(!1),R=G((e,t)=>{s?.(e,t),!t.isCanceled&&F(e)}),z=C.getInputControl,B=g.useMemo(()=>({get current(){return z()}}),[z]),V=g.useRef(null),H=g.useRef(null);function ee(e){let t;return f&&(typeof f==`function`?t=f(e):f.current=e),V.current=e,t}let te=G(e=>{if(!e||e.disabled)return;H.current||=e;let t=V.current,n=e.checked||t==null||t.disabled?ee(e):void 0;return()=>{H.current===e&&(H.current=null),V.current===e?n?(n(),V.current=null):ee(null):n?.()}}),U=G(()=>{let e=k.current;if(!e)return P??null;for(let t of C.registeredInputs.keys())if(t.checked&&wO(t,e))return P??null;return null});vD(B,N,P??null,U,!j,d),Cf(P,()=>{O(M),w(P!==E.initialValue),T(P!=null),C.change(P);let e=H.current;P==null&&e&&!e.disabled&&ee(e)});let W=D??A?.legendId,ne={...S,disabled:j??!1,required:o??!1,readOnly:a??!1},re=g.useMemo(()=>({checkedValue:P,disabled:j,form:u,validation:C,name:M,readOnly:a,registerInputRef:te,required:o,setCheckedValue:R,setTouched:L,touched:I}),[P,j,u,C,M,a,te,o,R,L,I]),K={id:p,role:`radiogroup`,"aria-required":o||void 0,"aria-disabled":j||void 0,"aria-readonly":a||void 0,"aria-labelledby":W,onFocus(){v(!0)},onBlur(e){Y(e.currentTarget,e.relatedTarget)||(_(!0),v(!1),y===`onBlur`&&C.commit(P))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&(L(!0),v(!0))}};return(0,X.jsx)(YO.Provider,{value:re,children:(0,X.jsx)(dk,{render:n,className:r,style:m,state:ne,props:[K,h,e=>C.getValidationProps(j??!1,e)],refs:[t],stateAttributesMapping:dD,enableHomeAndEndKeys:!1,modifierKeys:fk})})});function mk({className:e,orientation:t=`vertical`,...n}){return(0,X.jsx)(pk,{"data-slot":`radio-group`,"aria-orientation":t,className:Q(`flex`,t===`horizontal`?`flex-wrap gap-4`:`flex-col gap-2`,e),...n})}function hk(e){return e?e.lan.length>0?e.lan:e.public:[]}function gk(e){return!e||e.lan.length===0?[]:e.public}function _k(e){return e?.ipv6??[]}function vk(e,t){let n=$(e===`lan`?`panel.address.lan`:e===`ipv6`?`panel.address.ipv6`:`panel.address.public`);return t?`${n} · ${t}`:n}function yk(e,t){return`http://${e.includes(`:`)?`[${e}]`:e}:${String(t??``)}`}function bk({book:e,port:t,value:n,busy:r=!1,onChange:i,fallbackUrls:a=[],align:o=`end`}){let s=o===`start`?`items-start`:`items-end`,c=o===`start`?`justify-start`:`justify-end`,l=o===`start`?`text-start`:`text-end`,u=String(t??``),d=hk(e),f=gk(e),p=_k(e),m=e&&e.lan.length>0?`lan`:`public`,h=d.some(e=>e.address===n)?n:d[0]?.address??``;return d.length===0?p.length===0&&a.length>0?(0,X.jsx)(`span`,{className:`flex flex-col gap-0.5 ${s}`,children:a.map(e=>(0,X.jsx)(`span`,{children:e},e))}):p.length===0?(0,X.jsx)(`span`,{className:`font-sans text-foreground-muted`,children:$(`panel.address.empty`)}):(0,X.jsx)(`span`,{className:`flex w-full flex-col gap-1 ${s}`,children:p.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:yk(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:`${vk(`ipv6`,e.interface)}${$(`panel.address.ipv6Hint`)}`})]},e.address))}):(0,X.jsxs)(`span`,{className:`flex w-full flex-col gap-1 ${s}`,children:[d.length>1?(0,X.jsx)(mk,{className:Rg(`w-full gap-1`,s,r&&`pointer-events-none opacity-60`),value:h,onValueChange:e=>{typeof e==`string`&&e!==h&&i(e)},children:d.map(e=>(0,X.jsxs)(`label`,{className:`flex w-full cursor-pointer flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(sk,{value:e.address,"aria-label":yk(e.address,u)}),(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:yk(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-muted`,children:vk(m,e.interface)})]},e.address))}):(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono`,children:yk(d[0].address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-muted`,children:vk(m,d[0].interface)})]}),f.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:yk(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:`${vk(`public`,e.interface)}${$(`panel.address.publicHint`)}`})]},e.address)),p.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-baseline gap-x-2 ${c}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground-muted`,children:yk(e.address,u)}),(0,X.jsx)(`span`,{className:`shrink-0 font-sans text-xs text-foreground-subtle`,children:$(`panel.address.ipv6Pick`,{kind:vk(`ipv6`,e.interface)})})]},e.address)),d.length>1?(0,X.jsx)(`span`,{className:`font-sans text-xs text-foreground-muted ${l}`,children:$(`panel.address.hint`)}):null]})}var xk=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAnP0lEQVR42u19eZhV1ZXvWnuf6d5bd6gJqKIoJkVBQAw4hGesoK2i8nz6UJN0px/a2qaN2PnsaMxLYoja3Rk6xjh0OmWi8TMOL5ikE4dEjYYPRyIQoNRShmIogRqo4Y517z3D3u8P9tHN4Zx7q6DAAu/+vvPVdOsOZ631W/NaAJVTOZVTOZVTOZVTOZVTOZVTOZVTOZVTOZXziThY+fwHHP5JuwH0E/Z5ibiwBLHlx1TOcSLlBzA6IgIhBFpbW9WWlhajpaXFaG1tVSmlgIh+DIEVFXBsfjYCAA4AAOecNExpOCmfzM8qFovTHcdp4JxHOecEABxCiEMISRFCujRN2xWLxbace+65HY8++miBc+4yAj/e1AQex1DPEBHmzJkzbseOHRfl8/nPOo7TzDnXBBEtALDF5XiISxCxqCjKXsMw1tfU1LzS2dm5U2IEVmGAsW3XOAsXLoxu2LDh/xSLxUsZY7UAkBeXS2wmfXUEI8i/Y+K5dEppTtO0NVOnTv1te3t7t3TfeIUBxpjkIyKrrq4+I51Of9O27akAkAWAgkQsl+AysV0UkJGAS0jBAcCglKYjkcivM5nMnwQa4LHOBOR4knxEZOFw+AuDg4Ottm1PAoCkILAiLgww7tDzN/ln93FZx3HUTDp9dSgUuq61tVUVxMeKGzg2iO8YhvFP+Xz+G5zznJBqRZJQHoB8QX+X1YT7OwcACpZlnbxq1aoJDzzwwIZnn32WHctMgMcL8cPh8BdyudxdANDvQ0AmXTLscwn6ZdXgfbzjURsFAIiHw+FX8vn8z4UnwSoI8DFZ+/X19fNSqdR9ADAkuX/cA+Xcx3jjh4AErnE4ZFnW9FgsNlQsFjuk16zYAEcTva688kqtv7//Ds65KjG1HM1zGYL66Hzv49z/px4Dz2svcPG7QiaTuay5+eQGwRhYQYCj+97Zzp3bv2ia1t8DQMpDOD8Dz6v7/dChFCJ4/8YAIGwWclGHOeuORQYgx7D0s1NPPTVRKJg3Cv9elSRaRgHiI+1E+uwojEXiY/37PQdKz08BIF8wC6c2NzdPkZChggBHw+VLJpM3Wpa1BAAyns+CAcaun85Hn7970aMcCqiFQiHMGFtfQYCjZPg1NTU1FovF6wAgJ6QffXR7EAKgpOtpAHJQn8f6oQEBgIJpmnOampqmH2soQI/VaN/Q0NDtjuO0DFP6sUQiBz2RP6+NIKODLPVeD0GzilZY2AIVBDiC79cZP378TNu2vwgAaY/0k4BL9gS8ko8+f/d7rBJgW7i/yxfMwimNjY0nHksocKwhABJCeD6fv5sxNk8Yf8THig9CAe/lp+/RJwDEpa8goYCMDAwADNM0Q4yxdRUVcITcvng8/pl8Pn+nkH4/6PcS2M8V9HsMSNE/FQBCABAHgGoAiEhh5SJ8FEWU1QcFgCJjbHxTU9OWdDo9cCwEh44lv5VwzkFV1T/atv0/hN/v1d9y+NbvZ+752ZVwU/wcBYA68VXzxBVc4g8CwB4A2CGY0FVNtniesK7rfzVN878451hhgFHM8VdVVV2WzWZXwv54PwkgLPNIM/Mx8pinDiAEAA2C8OAT/vVWGaHwPrYBQLsUhAIAcBCRjxs37u6enp6dY72AhB4rId9ly5bp69evf5hznhCEIwF6H0vAPvGx7McDQDMA6FLCB0qoExc1FABoBIDJsL9mYFB6TsO27cixYAvQYyXos2XLlmtM07zOI21QxtiDEsYfCALWegw8LBH08R5L2AvThK2wW6gJZIyNmzx58rvJZDI5lm0BegxIP58zZ051V1fXQ6Kej4F/EQcEoEFQ4cc4AIgJ4uMw1GGpGIIJADUAMBX2F6H0AEDUNE3Vtu0NI6gcQp+AVhBDfyIYgCIiS6VSX7Us6397Ej5BSRwsY/kzAEh4iD9Swvsli2xhOE4TDPGBbdtNPigQFKkMCjfzMkEseji9DDjGgz68sbGxqaur603OuSHp/nIFmUE3zhJEqhUEQx8h4MPICjKf6KBsOOoA8BYAtIfD4Q35fP5nfh6B24OAiICIYNs2veCCC4xkMml0d3froVBINwwDCoUCICJHxGJdXV3Btu3Cm2++WaSUMlGbCO5XT/qalUMeZSzDPyKyffv23co5HycsfyUgXFuKsVGS0KjQ1SB0NwidTUokiyBAArkPA7gnDwDzAcDI5/POzJkzm9vb2ztnzZpVlUqlGrLZ7CTLsqYxxhoZYxMZYwkAqFYUReOc6wCgcM51RNRkVcM5L2zdurXIOS+oqpomhPRTSnsJIR8oirIjGo1uPf/883c9+ugvC5wzb7SXHUsIQAHASSTGzU2l9q3mnFsenQslqnz8Pp8DABFCSJ+maT+jnP7FQWe8bdtX27Z9gWu4lUACP2LzALThnoDSrnA4/J/FYvFnZ599dtPbb78903GcicVisclxnBrO+XjG2DjOeS0AJDjnUcHojmCkInyUeyCeuISc57ARMU0p3UspfU9V1Tdra2v/0tnZ2V2qsWXMMoDo1HnStu3LhGFFD0FPuzBoUEp3nHDCCZdv2bLFbfAAQghomvb1YrH4Xc55oQQS8BKqhZdgAhsANIK4Y87cuZdt2rRpj1cFuGrg5ZdfVpYtW1afzWabC7nCTItZpzmOM5dzPo1zHpb6GrxMZnvcV7e2gRFCBlRVfSsWi/2qr69vk19jC45d6U+0pFKpP3DOM2USK7xMpy8iotZQ1/DZvfv2bhQ2gGv8cUKIo6rqD4vF4ldhf7En8YF1v0CStyaABzScWABQret6q2VZX2OMqZ5sIvjpakSEK664Qlu1atUp2Wz2XNM0lzDGZorny0r/78DBha2W+J4AgI6IpqZpL0+cOPGB7du398pMMBYzVnzlypU0m81+22PYQIkCDj897ZZxJzRNe7irr2ujkA5T7gRijNHrr7/+m4SQdwVzjCRqFxRilqOQCAADpmleVV9fP1tqNPE2oxxQe8A5p0899ZTZ19e3oVgs3n3jjTcujkaj/6goSpswYolP5ZLrEaiSvZTlnJvFYvHCnTt3PhiPx0+TmGPMIYAb8r0im80+IQw/OgJieP1zBRGzkyZNOquzs7NbUgl+r3l5Npv9LXyUYfST9CCo98sxMInAFgDENE172rbtLzHGhhselt1XBwBg1apVysUXX3xDoVC4hXNuSgzFPK9pe35nivthx+PxW5PJ5CYAIGSsBX2uvPLKUD6f/7rHOocR3izX8IsZhnF3Z2dnV4mYvAMAJJPJ/J4Q8hoAGD6p31K6HgJcQRmaAQAGLMv6bG1t7amyBA6DqZmksuiiRYucQqFwfzQavR4R5Y6noDoI928KAJiccy2TyXyjpaWlCgA4GWuVPs8+++w1juOcJvQcOcTIFxNW/8YlS5b8bBgJGUREVlWVuDPA/+dlvAII8AJkJrA450oqlbrWZwbBcBHObXVXM5nMC+Fw+B4pgeWNfvqVx6sAkHccZ/Jbb711ASKOGQZAAGALFiyoLRaL/wL7y7yUErq/nAfAAEAPh8P/9tRTT+WHEYp1AIBks8k/EUJeAICwJLkQ4P5BGd3veDKOXKDAZxoaGuaNAAX8Pq/NOScLFix4mBCyV6AWeKqcgqqjFQAwTdM8ixAyZoxAgoi8ra3tJsbYVGGNDzd66Q33MgBIKIryYiaT+T1IQyLKMSFjDOLx+F2IaPv4zXwYRh/3Ib5soVucc+zv77+GHJ725QDAX3vttSwhZDPsT2f7Faz6lbq5/1//rW99SyFjpcq3ubl5imVZ/+SJ9+MIBjjJbp8dj8fvRMSRdO86AEBTqdQbiPg7gQJ2Ccvf73de6JftAfe5UqZpfqqurm7uYaCAHP7FEpXNflXRLjMUv/Od74wJFYCEEN7V1fV/GWN1wqo9VO/EBoBqVVUfHxgYWOda+CMyHhiDmpqaf0fEovh/XobwzKOjnQA0YJItwFOp1BcPAwUQAGDBggUxxtgpwsIPaonza4lXCSE9lFKHjAW3r6am5jTLsr7gE/HjnkBPqRk9HABUROxvbGz83iGWYzkAQAcGBjaoqvqUqAW0h2EA+nUWOwHIAACQM01zwQg9goMSZe3t7X/DGGuWGCCo5/GgSuZwOPwqY+xjtwE4IQRSqdTtItvHSuj4crlwBwASuq7/565du3YdRikWZ4xhNBr9N0R0m05KuX8swPjzTh6R5xHZnPNiJpO5TKAAH6H0O62trWo+n79FICYNcIW9jS0cACKU0o558+a9BgBIPu4q36qqqgts274koNKnXMGHLIEhQsjmU0455f7D7NdnAEAGBwffV1X1cYECTkAUkh8iEzAASBeLxVPr6urmwMj6CHDx4sX6jTfe+BPHcT4lPCZSoiTugG4oRNRjsdh9q1evLnycDIAAwFtbW9VcLnc7l3KXw0zt+nX9VEUike+vX78+NQqzezhjDBOJxPcRMSmFVXmA4efHBH5M4TKBJVDASafTl4wABRAA2NatW8dRSiOEkA7YX9OoSqoEA4JBDADqDcN4MJlMvu4KIPk4Lf9bbrnl847jLJS4uBwT+I15YQAQo5S+/vTTTz8xSlW4DADIvn37tmua9gsRbHFKRAWDKo8dn9Cs7BFki8XizKamplklUAClziQCALSjo+MD27b/du7cuZ+tqqq6lRDSJ6qcnADJ5wAwzjCMR4vF4gOcc/pxJYM+fEMtLS1VuVzuNk/s/ZCqlxAQE4nEnYsWLbJHcXIX55zjpEmTfoSIvZKUBY2dKVWizgNiBDbnnPf29l7kY7SipLcdke//MLTsOI66cePGfblc7ifTp0+/UFXVl0WxC/OxA+oMw3jYsqw7pDwEP5oMIAcgCCKytWvXflm4MEOe98FHaLVXq5r628HBwT8fittXDgU6Ojp2a5r2oFRDCCV0v/cKihbKCaOhYrE4Y8qUKSdJKIAAwBHROf3002urq6sv0XX9y4Zh3JRIJJbMnj17PCJagku1rVu37nnxxRc/r2naH2B/car7+mFEDIfD4W+bpnmn4zgHFYWQozSnl7W0tBhnnnnmFADgTU1NjYVC4StSexcfhqT7MYaCiOm6urq7GGNHoguHcc5x5syZ9xFCdohaP1YiMRQUGeQ+TSsuM9mcc7Onq+fSVatWfWhrLFu2zNB1/dvr169fk0wmVxaLxXvy+fx/pFKpx9vb21/RNO27Z5xxRky4gOqiRYvsiy66aDml1I0MVhNCemtra6/J5/O/EJJ/kBt9JKuCqRjXyqurqxcODAzMNQxjx759+7JDQ4XvOI59gY8FO5KKHxsAanVdvy+VSq10X+9IfI6enp6sruua8FYyHvtjOB6ANzpoS2liQEQtFA5t7ezsfGfbtm12U1NTzeuvv/4by7KuFqphSLqKnHPDcZyW7u7uRdOmTXtpcHBwEADUzZs3DyUSiT3FYvFqVVUfmzd93vUdH3S8V+rekCMk9Yo7rtUwjDssy5qradqLbW1tvY2NjbNt27wW9nfS0BFY+16GMAghOydPnvyjIzymjXHO8cwzz/yZiLsbHqmGEvkBb7wAJWYgAFClqmqmvr7+kVwu9/Dzzz9vcs5pd3f3g4yxRQCwVzALlYZdusTscRxnzq5dux5ZsmSJm7wiJ5100uq6uroLHMe5af2W9X3l1CIeiVJuROSxWOy8oaGh2w3D+Hk2m32Mc04IIYwQ8rht258XDEDKlGKXCvnWh0KhL+fz+dZR1v2lBlHemM/nfyQaP4jXrfP53pVyt3DDLfAklNLBcDj82plnnvnMSy+9lBLEtSORyOdzudxjANAtVS6DT+DJbVYdFwqFVhSLxXsYY9QTsyh7L0cTARQhLaBp2n9ks9n/UhTltkwm85jb0ROPx892HGepFPIdSRuWbJxVEULWfu1rX/vFUWq+ZJxzPPvssx+hlL4rEkWsTKEI9ynoiCKipev6yydOPPGObDb7mCA+cV+jWCwu8/GMgu6JCgBZ0zT/7rrrrgtLrzPs0fY4Wq4dIrKGhoaTuru7HwOA0PTp0y/cunXrHokxuKqqf7Jt+xyP3+9XVePt/OHekG80Gr0sk8n88ShI/wEoEIlErs1ms/cCQK94b7bnsqRWcTdMSyile3Vd/3NjY+PzHR0duz2l2gAAfOrsqeN3te96kzEWDeha8m2BR0ScOG7iJbt7dr8zUoEgowH5hBAWCoWu6erq2kQI6V+6dOnpgviuhc+i0egVtm2fKyx/MkwmRJ/6/mpFUf6Yy+WOJvFdFCBLly59nBCy0VM0gp7OYRQh5DCl9INIJNI6derUr+Tz+Z9v27Ztt7BZ0DuHKNebG8c5j/gQPygC6r4vI1PITDjald4UAGD+/PlxVVVbAYArivKoiDLJqUeybNkyQ9y0POwv9ByUrgHxu3JXHwD0IWKmrq7utI+pt5ECAMRiMdeG2SyudwBgIwC0AUA7Iq5RVfW+eDx+3uLFi3WpBMxbwXuAINbX15+AiF3CxugWX3sE2vSK33UJ43A3AHQCwA5E7K6urv700bwnCgDAhAkTZhFCXgcArqrqA2T/B0VJwikAQCgUWi64vU/o/6REfJcBBsowQw8AMFVV7xc3lH5MOQy89957dUVRXhYE2Cy+biWE/MkwwrfW1tae5Mn1U59xtXDTTTfpDdOmNQtXD66//vowpXSjuA8yA7hM4DKGzAC7CSHtc+fOHXe0EEBBRIjFYosJIdsF8X9KKQWfCZzk5JNPrkXEnWKiRlJk/bwM4L28DNEHAElCSNfEiRObPEwGHwcKRKPR/4mIg4SQdaqq3huJRM5vaWmpkgiPkuv24S8JITBx4sQTdV2/TlGU3ymK8vTixYv1/X8ioOv63cJ+2CMR3YsCLgPsBICUpmmPiNclR8MQgnA4fA0iDgAAUxTlyZUrV1KfgA5FRNB1/V+F9PdLxE96VMBgGYboBQBmGMYtH6P0H3BaWlqMWCx24bRp08Z5pF2RxtZ+SPQTTjihKRKJ/K2iKA8h4loAeB8A1gNAW01Nzfnic5Hm5uZpSMgewfR7S6iB3QCwGxF76uvrTz3SkV03lwyGYXxVSHOWEPLqwoULoz4SSQAAm5ubpyJiv7D6Uz7wPzgM4veJ12qbO3duZIyucVPgo6FSHxJ98uTJE6qqqq5UFOVBRFwHAB0A8J4g/F8A4A0A2Kgoyq9FGFhBRIjH40sRMSs+/25B8B6J+B8AwD4EHBLCeOSJLxopbxfwtA8Rd02aNGl6gOFBEREURXnILYcWDJAKkHz5Zy8D9AAAj0QinxtDQy1chte8ki6IvlRV1Z8i4gYJqt8FgA3i+isArIP9MwTWAEB7KBT6skASFREhGo1eSgjZKlzKnCQ8OQAwCSEdsUjsC4eLiDhMnW+rqvpN0zTvEFxYH4lErs7lck+6ESxvnV9tbe2CgYGB10T7EpQprgwK+NgAME5RlEcty7oaEclRdPuCiA7yeyCEwPjx45sH0+nP2MXiuYyxBYyxceIxQ9IIOvSZUMakQRXj6+rqbuvv718pdh9Y8+fPr2tvb/+iZVktnPMmIVjdiqKsGjdu3GNlOp5GhQEURLSNcPif87nc3UIHVSuK8hJj7FJP6FG6J4QRQp6zbfsiye/nw5jDL98gAwCqFEVZefnll1/91FNPFY7yqjb0FFQwt2uXMUYmTJgwK5lMnuM4zmdFG7c7bConiO4Nx3p7B93egxAiyWua+nw0Gn2kr69vqzwW12Wye+65RwcAuPnmm4uMsQOE7UjNCaSI6MRisaXpdPpxznlKvPl4PB6/JJVK+eXfKQA40Wj04kwm84zU3hU0WMHbGk1FKlMnhOwMhUI/yufz94sPfDSGLgZK+Zw5cxI7d+5cUCgUWizLOptzfoIY5mAKSbd8Ipc8oBhEEzWMfbqu/yGRSDzZ09PzvkRY2ZZSpGoiOcXuHMn7QSQ/v0tY8N0AkCGEbFixYoUWVLG7P+lD34T93T39Pv6+eyWFcViQQpqDlNLVkUhk+YwZM+rwo7gCHuF6hQNWyiEicM6xoaHh5HA4fI2iKL8Q7eNJwdR9bhAGALaLr+732wBgKwBsETGC90WgqN19nKIoL0YikZumT58+SfIgiE9/34cMKEUPj46uW7FihaYoyioBaa4VaimK8v8CfE7XS/iXcgkSBLQRMUMI2UkpfU3TtNZoNPoPEyZMmCniCUeqXiGQ4JRSOPHEEydGo9Eluq5/n1L6CiJ2CwbNAcA+KfjSKb7/QHy/Sxh6O4Slv00Q/j3BFF2I+J6maY8kEolLlyxZEvaJDh606Fow4ad0Xf9uLBY740i4elgi9XlDPp+/X3xwVUBOjaZpT9i2vcxH/yMA8Hg8vsi27XmmacYBIE4ppY7j2AAwpKpqlhDSp6K6RzGUvc3NzXs2btzYxxjzTrlSRgHi/NrFDxjNMmvWrPGdnZ1zTdNcaNv2pxljMxlj9eL1iwLa7TL7hOTLbSJR9ut2ZIi4xTCMF2Kx2O96e3vbPfqbeQtcERGWL1+uP/HEE5/OZrPnm6Y5nXOuU6puevLJx++66qqr2GhCPwYNZnz33XfXCGvWlizNCKW03bbtMwQH+1r0AkIPWMXu/hww9YNKxRLsMIl90PO4BG+cPn1iuqdnTrFYPMtxnDMYY7M45+NFutoUuQoz4P6wgHFxjkx0AdldiqKsNgzjmXPOOeeV5557bkjq4yOewk3HfY8zZ86csHv37nPy+fwiy7KahF1REO8pWl1dfc/g4OBro5kCR5+Ahh0Oh/9haGjoQaHrVA/nR2Ox2N9nMpmV4sZZnptCfHLZOMIBiOXeL/Fxqw4g9nnnnRdpa2ubms1m59q2Pd9xnE8xxk4Ui6RdghckAwvLbBT1Dprm0lh5QgjpIYT8Rdf15yZPnvzn999/v9sj7d4NpOBK+8qVK+elUqm/MU1zgUgFF4Xa4fJ8Q0rprmuvvfYbDz74oD1aKIABLtx/27Z9MfhP5lQRMZ9IJJYmk8nXBGfToGFHh/GevBB+EDq4xL744ovD69evbx4aGpplmuaptm3PdZgzgzPeyDmvEs/hSpPlM3YNygyHlF9bE0RHQkgXIWStpml/aGhoWLVjx44PPERH73AHRIRfsV/Rm5tunp1KpRYWCoWFjuNMFkZeRnp/3ssGgEg8Hr8vlUqtGi0U8FrxfP78+eG//vWv6zjnkwLGtHB38lQoFPrhKaec0rpu3bp+n0mVfv+HZYYtsYDxHYCI8PLLLys33HBD/cDAwJRsNj/DccxZjLGTGWPTGGONnPOYuPFuQUZRClKREkMleYnCCyJiEgYA2ISQ3YSQNbquv5BINLzS1bV9t0R0Oc3ryLGD5cuX67/5zW9mpdPpMwuFwpmO45wgELQglYpxT12Bd6y9qqpq5zXXXPP10UKBgxhgxowZdVu3bn1LBDZsOLByR+ZoAgAxQkiHqqrPhcPhFxoaGjZs3ry5m3MOASNMwW9Uqvz90qVLQ2+//XZiYGCg3rKsJsuyJluWNV0QebLQ2dWimdStyClKlTgwjGwh94F7uXDThXaKiDlE3EYpfcMwjBcnTpz45ubNm2WG96oj7rpurpFp2/YZpmnOchxnotSVYw1jxoC3ytgSKviBdDr94migwEEM0NLSYrzyyitvcc6nDWNQkyNuVBgRLUTsQcQPKKU7EfEDROxVFCVj23ZOeAJIKSWqquq2bYcopXHLsmKO49QiYj1jrI5zXg37J2bGACDEOVek1zIlQjsQ3BFbrsbQa3+4BpwGAA4hpJsQskFRlNWRSOSV5cuXt915552mD9EPUHmEEJgwYcJpAwMDF4oI4amc8zqR788JiHfjH0Ml9hnL4+OYZ+KXQintPv3007+6Zs2aw46Oot+ETkVRfmWa5hUieKMMo2HDLWHSpBl19BA6cWwJ7hyfOf44zJn+QXMEHSlPrwtY54jYj4ibKaVrDMN4LZFIrNuzZ89eGclK2DkEAHhtbe2CZDL5Q8bY6ZzzkGS8WRJiEskITIv4yj7pPQW1nsnTxiwAiCUSiZ8mk8nfH244GP0GNsTj8fNSqdTzgluVEUSggqx7DIDcUiPeIWBlCx/mnGAmPUYRxNaEukkh4nZK6VpN014Nh8N/6e/v7/AQnEgQW8pbIQDAxo8ff0pvb+9GzrmLVKRE4asc0EmLYNKAVDnE5c4hnwETlFLafdFFF9387LPP5g8HBfxGpRPTNLfrul7jOM65UjyfjMAf95tUhSV2+JVajlCyxdyTYOHSpMwqd/mTiDq+oyjKM6FQ6IFoNHrXrbfe+oNVq1Y9Y5rm20NDQ4OSN0PK7A3yY3o6NDTUo2ma7jjOIs/QhiAGd587BPsXVRHBDLxMvz8X8/7G7d27N22a5ns+7XWHFQlEAMDW1lZ60003/USsaRmS5ujiKCVmcIRLGfyQxc3Ja24PvzDaeoCQzRRxk67r6yKRyMZ9+/bt9Ei4LAD8MI0pAgB88uTJ4zs7OzcKO8YuE1fwIpUi3O6twvaSoZ159hfaAgX6zz777K+sXr06d6goUGoCByeEgGEY1xUKhW8yxqaIFx7ymW+LZdyqcm1e5dQHFVItb/B0PiQ2QAel9F1VVdtUVX2ntra2Y+fOnakyBOejnE2jiOjour6iUCh8Rxh6agDhg7KjVBB/q1C/mo876DKqCQDRSCTyUC6XW3moHgEOp+Fj4sSJNf39/X9nmubnGGNzhIUOnkYINoJAkHfQMZVSn161ZCJiRiRU+gkhHxBC3qOUbjYMY0ttbe2u7du3p32ILffX86PQPYQAALNmzap+77332sSSC6vM5nI/5ncFaBt8NCuZBcwjQEppavbs2cs3bdqUOhQUwOFO8nKDMYlEYlahUPi0ZVmf4pzPZIxN4pzXiIYGbZjP+WHPHCLmASCHiCkA6FcUpQ8J6aaEdGma1q0oSl80Gu1DRFZdXb1nw4YNXT55c/RxzfjHVBtoa5r2VdM0fyjsJzqM8LJfEymITGKvlBzztqOZokvqIbf/cqSMjjCyQomDMmpnnXVWtLOzczyltCqbzdbYth1TVdUYGhpSXdgmhCCllGma5hQKBQcRHU3TbER0ENFyADgFoJZlqYyxsOM4YdM0qznnCcZYlDEWo5SSxprGb3T2du7ysc75WNpxuHDhwqo1a9a0McaaJI+Al6mK8kudo0gx7wtYlOk2mqZnzZp1w9tvv50cKQrgIRo8RLaSRR3Aly3LWkII6WSMUbHmxQYAqqqqwhjTGWMGYywMABGxG8cQwR5N3nQhGTs5dxVKdXX1jQMDA++N9U2cLgqEtNA/5838vQIFlDJSX2okLQokGJTC3N7ZBLFwOPxLsZxqRPcHR8PwicVi56XT6ZdKhH1ZQAOlJV2253tHqB41kUjcOjg4+PpR7gU8LBRoaWmJvPrqqxuE8WyWiIOU2kYiXzul+krHk6BCQkhx9uzZ17W1te0bCQrQw/2gc+bMSezevftpYQOkhRXr7rcZElKcE9/nhTtZ8Anrekeq2AAQr6qq+m4mk3nxGCH+hyiwa9eugqZpluM4l0puHQxzCIafJxSVClS8U0AdznkinU5zx3HeGsmmUnK48/03b978PcbYdPHm1ICgjrfCNmiWjssMRQCIGobxxFBu6LcigXKsEB+kaR2/lKaKOIc5HZwCwCTJ0JZHxykAkC8WixfNmDGjcSSDJ8nhzPiNRqOLLcv6R6luwFvpW2qIouMzU99lgrCiKOvvvffeexhnY13nBxGMtLW15QzD+IFkAwwnwhlUCOuuoZsAB45/d79njLHqzs7Oq8SU9CM2HwABgC9cuDCazWZ/LIw9v5Up3nFofvPz/WbnISFkYOrUqSu+9KUvWUe5F2DUUeDaa699nBDyjgj5OiWWWg9rRrCYOzBOQgV5UVS+WCwunj59etNwh1DTQ93n29vbe6dt2//LI/3lJmg6AcsVHGkYYigWi3177969bUdw8tfROuStt96yQqFQ1rKspT6j8LHMzsPAbSji+4LPsIjY0NAQdRznjeGE7MmhQH9tbe180zS/Iq124WWmZrIA4jNPRW3cMIzH0un0qmPM6CuJArfeeuuvRN9/yKe4NKgEjpfIl7gLsCOSGnAbVAvFonnhcFGAHspyB9M0f+I4jjzls9SoVD/o927WsgEgpCjKhvvvv//2Z5555liFfV8hW716tR2JRPpN0/ychALDTajxEvkDQxjM/MBaA54oFAoDYnV9SY9gJAjg5r1Ptm37PGnQU6ndOcOdnk0IIenm5uZjXe8HosDDDz/835TSdR4UGE6iDAMWZrhET3gMQhUAHNM0PyOmgzqjpQIIAEAymTxP9MRZZcakOj5XEDMY8Xj8u9u3b+88DvS+L2GvuuoqJxQKfS+gWLZkmV5AAQyX+gwjnv2AwBibcuKJJ9aW8zpGwgAcEUFAf1DggvvsznEC3EIumChuGMYTyWTyheNE75dCgd8RQtZIHkHJmowy5W4HLMsQ6sBFAOCch4aGhmpGkwHcUw3l16mxgNJm+WsRACKKoqy77bbbfnyEx72OGRSIRCL/7ukFDLL6g5ZUBRHUkAJDBAB0x3GUIxEHKAxjXLpTorSZiTCwRgjpb25u/vYdd9xhHmd6PxAFHnrooT9QSt/wWUUznBnJUKY20ZD6Es1IJFI2LzDS3bygKMo2H8sfAvx+P2QwRf9/IRaL3Sz0/vEu/QegQCwW+xoishLwD2W6pYKYwjUEQ4SQXR0dHfvKeRtkhJMyIRwOPy+2aZVKZQb5+yYAhAkhqWg0ujyZTLYdp0ZfybV0yWTydV3X7wpYSwcBm7+Ggw4uDap0Xf+9CAmT0VIBDADIwMDAelVVn4H9mymKJULAMjO4Wb8Epcr7TU1N16ZSqY3HsdFXTpCoaZp3GIbxC9i/iYQFrMwr1QHtpxIsAKhVFGXdFVdc8Wv4qEJq9AJBnHNoPKHxjVwydyHnvFnEA5yABI/rKoYQ0dY07ZeXX37ZN9988819nyDYD1pIRDjnv9M0rUrsBlB9egRLLaxkPsupagkhexoaGq559dVXe0eSFh7x+JgpU6ZMVhTlWaEO0rB/qOEu+GhKxg4A6EDEtaqq/jgej8/zTMX4pB+36Bai0egSQsg6icCWiLJmxb1NSaN2+uDAiaHdYoZyr6IoKydMmDB5JPcYD2ftGyEEwuHwZYVCYQljbAYAVHHOHURMEUK2a5q2NhKJrOrv69/GOIORzLH/BB0KAM6KFSuUH/zgB5dYlnUpY2wOANSIvkiOiFzsVjzgElvEBlVV3aTr+rPZbPZPomB22OiKh7v7T25/Xrt2bSSfz7N58+YVHn300YKnzQo+yZA/HCaQi20XLFgQy2azB/jxlFLuGebAN27cmCaEMOle45EuCg2yIxwfBsGjVJN/vKgEEnAvD5UGR4UBYARt2ZVzZGhTudeVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVUzmVs//8fzjsXcePS1GRAAAAAElFTkSuQmCC`,Sk=`https://github.com/WNLUO/dsh-mobile-server`,Ck=[{platform:`android`,channels:[{nameKey:`panel.links.distPlatform`,hintKey:`panel.links.domesticRecommended`,url:`https://app.wnluo.com/public/apps/14`},{name:`GitHub`,hintKey:`panel.links.overseasRecommended`,url:`https://github.com/WNLUO/dsh-mobile-plugin/releases/latest/download/ai-hub-android.apk`}]},{platform:`apple`,channels:[{name:`App Store`,hintKey:`panel.links.appStore`,url:`https://apps.apple.com/cn/app/ai-hub/id6821681438`},{name:`TestFlight`,hintKey:`panel.links.testFlight`,url:`https://testflight.apple.com/join/4fn5PCMD`}]}],wk=[{nameKey:`panel.links.publicRelay`,url:`https://ai-hub-de-1.wnluo.com`}];wk[0].url;function Tk(e){return e.name===`GitHub`?(0,X.jsx)(jk,{}):e.name===`App Store`?(0,X.jsx)(Ak,{}):e.name===`TestFlight`?(0,X.jsx)(Nk,{}):(0,X.jsx)(Mk,{})}function Ek(e){return e===`android`?(0,X.jsx)(kk,{}):(0,X.jsx)(Ak,{})}function Dk({channel:e}){return(0,X.jsxs)(`a`,{className:`flex items-center gap-3 rounded-lg border border-border-muted px-3 py-2.5 transition-colors hover:bg-background-muted`,href:e.url,target:`_blank`,rel:`noreferrer noopener`,children:[(0,X.jsx)(`span`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-background-muted text-foreground`,children:Tk(e)}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,X.jsx)(`span`,{className:`text-sm text-foreground-intense`,children:e.name??(e.nameKey?$(e.nameKey):``)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(e.hintKey)})]})]})}function Ok({size:e=`md`}){let[t,n]=(0,g.useState)(!1),r=(0,g.useRef)(null);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Bf,{variant:`outline`,size:e,onClick:()=>n(!0),children:$(`panel.download.open`)}),(0,X.jsx)(jf,{open:t,onOpenChange:n,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,closeLabel:$(`panel.common.close`),initialFocus:r,children:[(0,X.jsx)(Nf,{children:(0,X.jsxs)(Pf,{className:`flex items-center gap-2.5`,children:[(0,X.jsx)(`img`,{src:xk,alt:``,className:`size-8 rounded-lg bg-white p-0.5`}),$(`panel.download.title`)]})}),(0,X.jsx)(`div`,{ref:r,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:Ck.map(e=>(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 pb-0.5 text-xs text-foreground-muted`,children:[Ek(e.platform),(0,X.jsx)(`span`,{children:$(e.platform===`android`?`panel.links.android`:`panel.links.apple`)})]}),e.channels.map(e=>(0,X.jsx)(Dk,{channel:e},e.url))]},e.platform))})})]})})]})}function kk(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-3.5 stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M17.523 15.3414c-.5511 0-.9993-.4486-.9993-.9997s.4483-.9993.9993-.9993c.5511 0 .9993.4483.9993.9993.0001.5511-.4482.9997-.9993.9997m-11.046 0c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.551 0 .9993.4483.9993.9993 0 .5511-.4483.9997-.9993.9997m11.4045-6.02 1.9973-3.4592a.416.416 0 0 0-.1521-.5676.416.416 0 0 0-.5676.1521l-2.0223 3.503C15.5902 8.2439 13.8533 7.8508 12 7.8508s-3.5902.3931-5.1367 1.0989L4.841 5.4467a.4161.4161 0 0 0-.5677-.1521.4157.4157 0 0 0-.1521.5676l1.9973 3.4592C2.6889 11.1867.3432 14.6589 0 18.761h24c-.3435-4.1021-2.6892-7.5743-6.1185-9.4396`})})}function Ak(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-4 stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701`})})}function jk(){return(0,X.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px] stroke-0`,fill:`currentColor`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`})})}function Mk(){return(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px]`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.85`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`path`,{d:`M12 4v10`}),(0,X.jsx)(`path`,{d:`m8 10.5 4 4 4-4`}),(0,X.jsx)(`path`,{d:`M4 18.5h16`})]})}function Nk(){return(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-[18px]`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.85`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`path`,{d:`M21 3 3 10.5l7.5 3L14 21l7-18Z`}),(0,X.jsx)(`path`,{d:`M21 3 10.5 13.5`})]})}function Pk({on:e,what:t,label:n,className:r,disabled:i,onClick:a}){let o=n??$(e?`panel.common.hide`:`panel.common.show`);return(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,className:r,"aria-label":`${o}${t}`,disabled:i,onClick:a,children:o})}function Fk({status:e,pairing:t,addressBook:n,busy:r,error:i,restartError:a,onOpenConfig:o,onChangePolicy:s,onOpenSelfCheck:c,onReconnect:l,onSavePreferred:u,onEditPort:d}){let f=r!==``,p=e.pairingPolicy===`code`,m=t?.relayUrl||e.relayUrl||`—`,h=Ik(n,t),[_,v]=g.useState({qr:!1,relay:!1}),[y,b]=g.useState(!1),[x,S]=g.useState(!1),C=e=>v(t=>({...t,[e]:!t[e]}));return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsxs)(iD,{className:`flex flex-wrap items-center justify-between gap-x-2 gap-y-1`,children:[(0,X.jsx)(`span`,{children:$(`panel.pairing.cardTitle`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:c,children:$(`panel.pairing.checkNetwork`)})]})}),i?(0,X.jsxs)(HE,{variant:`warning`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.pairing.qrFailed`)}),(0,X.jsx)(KE,{children:i})]}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4 sm:flex-row`,children:[(0,X.jsx)(`div`,{className:`flex shrink-0 flex-col items-center`,children:(0,X.jsx)(`div`,{className:`relative size-[280px]`,children:!_.qr&&t?.svg?(0,X.jsxs)(`div`,{className:`flex size-[280px] flex-col items-center justify-center gap-1 rounded-md border border-border-muted bg-background-muted text-foreground-subtle`,children:[(0,X.jsx)(`span`,{className:`text-xs`,children:$(`panel.pairing.qrHidden`)}),(0,X.jsx)(Pk,{what:$(`panel.pairing.qr`),label:$(`panel.common.show`),onClick:()=>C(`qr`)})]}):(0,X.jsx)(`div`,{className:`flex size-[280px] items-center justify-center overflow-hidden rounded-md border border-border-muted bg-white p-2`,children:t?.svg?(0,X.jsx)(`button`,{type:`button`,className:`size-full cursor-zoom-in rounded-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,onClick:()=>S(!0),"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,children:(0,X.jsx)(`div`,{className:`size-full [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:t.svg}})}):(0,X.jsx)(`div`,{className:`flex size-full items-center justify-center text-foreground-subtle`,children:r===`pairing`?(0,X.jsx)(PE,{}):$(`panel.pairing.noQr`)})})})}),(0,X.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.pairing.policy`),children:(0,X.jsx)(ND,{size:`md`,checked:p,disabled:f,onCheckedChange:e=>s(e?`code`:`deny`),"aria-label":$(`panel.devices.allowTitle`)})}),(0,X.jsx)(FD,{label:$(`panel.connection.relayUrl`),children:(0,X.jsxs)(`span`,{className:`inline-flex min-w-0 flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[_.relay?(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs text-foreground-strong`,children:m}):(0,X.jsx)(`span`,{className:`text-xs text-foreground-subtle`,children:$(`panel.pairing.hidden`)}),(0,X.jsx)(Pk,{on:_.relay,what:$(`panel.connection.relayUrl`),label:_.relay?$(`panel.common.hide`):$(`panel.common.show`),onClick:()=>C(`relay`)})]})}),(0,X.jsx)(FD,{label:$(`panel.pairing.port`),mono:!0,children:(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[(0,X.jsxs)(`span`,{children:[t?.lanPort??e.lan.port,t?.lanPortAdjusted?(0,X.jsx)(`span`,{className:`ml-2 font-sans text-xs text-foreground-muted`,children:$(`panel.pairing.portFallback`)}):null]}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,"aria-label":$(`panel.pairing.portTitle`),disabled:f,onClick:d,children:$(`panel.common.edit`)})]})}),(0,X.jsx)(FD,{label:$(`panel.pairing.phoneAddress`),children:(0,X.jsxs)(`span`,{className:`inline-flex flex-wrap items-center justify-end gap-x-2 gap-y-1`,children:[h?null:(0,X.jsx)(`span`,{className:`text-xs text-foreground-subtle`,children:$(`panel.pairing.noAddress`)}),(0,X.jsx)(Pk,{on:!1,what:$(`panel.pairing.phoneAddress`),label:$(`panel.common.show`),onClick:()=>b(!0)})]})})]})})]}),a?(0,X.jsxs)(HE,{variant:`error`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.pairing.sidecarRestartFailed`)}),(0,X.jsx)(KE,{children:a})]}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:f,onClick:o,children:$(`panel.pairing.openConfig`)}),(0,X.jsx)(Ok,{}),(0,X.jsx)(Bf,{variant:`secondary`,size:`md`,disabled:f,onClick:l,children:$(`panel.pairing.reconnect`)})]}),(0,X.jsx)(jf,{open:x,onOpenChange:S,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.qr`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(`div`,{className:`flex items-center justify-center rounded-md bg-white p-4`,children:t?.svg?(0,X.jsx)(`div`,{className:`size-[min(70vh,440px)] [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:t.svg}}):null})})]})}),(0,X.jsx)(jf,{open:y,onOpenChange:b,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.phoneAddress`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(bk,{book:n,port:t?.lanPort??e.lan.port,value:n?.preferred??``,busy:f,onChange:u,fallbackUrls:t?.lanUrls??[]})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>b(!1),children:$(`panel.common.close`)})})]})})]})}function Ik(e,t){return e&&e.lan.length+e.public.length>0?`book`:t?.lanUrls?.[0]??``}function Lk({open:e,onOpenChange:t,status:n,addressBook:r,lanUrls:i,busy:a,onSave:o,onSavePreferred:s}){let[c,l]=(0,g.useState)(n.relayUrl),[u,d]=(0,g.useState)(``),[f,p]=(0,g.useState)(``),[m,h]=(0,g.useState)(``),[_,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(!1),C=(0,g.useRef)(null),w=(0,g.useRef)(null),T=(0,g.useRef)(null),E=(0,g.useRef)(!1),D=(0,g.useRef)(!1),O=(0,g.useRef)(!1),k=r?r.lan.length>0?r.lan:r.public:[];(0,g.useEffect)(()=>{e&&l(n.relayUrl)},[e]),(0,g.useEffect)(()=>{e||(b(!1),S(!1))},[e]),(0,g.useEffect)(()=>{if(!e){E.current=!1,D.current=!1,O.current=!1,v(``);return}if(E.current||d(r?.manual??``),D.current||p(r?.manualIpv6??``),!O.current){let e=r?r.lan.length>0?r.lan:r.public:[];h((r?.preferred||``).trim()||(e[0]?.address??``))}},[e,r]);let A=a===``,j=e=>e.trim().replace(/\/+$/,``);function M(){if(!A)return;let e={};c.trim()!==n.relayUrl&&(e.relayUrl=c.trim());let t=j(u);t!==j(r?.manual??``)&&(e.manualLanUrl=t);let i=j(f);i!==j(r?.manualIpv6??``)&&(e.manualIpv6Url=i);let a=m.trim();if(O.current&&a!==(r?.preferred??``).trim()){if(a&&!k.some(e=>e.address===a)){v($(`panel.address.lanUnknown`));return}e.preferredLanAddress=a}o(e)}return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`w-[min(1100px,92vw)]`,initialFocus:T,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.openConfig`)})}),(0,X.jsx)(`div`,{ref:T,tabIndex:-1,className:`outline-none`,children:(0,X.jsxs)(Ff,{className:`grid max-h-[calc(100vh-13rem)] grid-cols-2 items-start gap-x-8 overflow-y-auto`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(IO,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(LO,{htmlFor:`relay-url`,children:$(`panel.connection.relayUrl`)}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,onClick:()=>b(!0),children:$(`panel.relay.choosePublicRelay`)})]}),(0,X.jsx)(VO,{inputProps:{id:`relay-url`,className:`font-mono`},value:c,placeholder:`https://example.com`,onChange:e=>l(e.target.value)})]}),(0,X.jsxs)(IO,{children:[(0,X.jsx)(LO,{htmlFor:`relay-manual-lan`,children:$(`panel.address.direct`)}),(0,X.jsx)(VO,{inputProps:{id:`relay-manual-lan`,className:`font-mono`},value:u,placeholder:$(`panel.address.directPlaceholder`),onChange:e=>{E.current=!0,d(e.target.value)}})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(IO,{children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(LO,{htmlFor:`relay-preferred-lan`,children:$(`panel.address.lan`)}),(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,onClick:()=>S(!0),children:$(`panel.onboarding.chooseAddress`)})]}),(0,X.jsx)(VO,{inputProps:{id:`relay-preferred-lan`,className:`font-mono`,list:`relay-lan-candidates`},value:m,placeholder:$(`panel.address.lanPlaceholder`),onChange:e=>{O.current=!0,v(``),h(e.target.value)}}),(0,X.jsx)(`datalist`,{id:`relay-lan-candidates`,children:k.map(e=>(0,X.jsx)(`option`,{value:e.address,children:e.url},e.address))}),_?(0,X.jsx)(`p`,{className:`text-xs text-error`,children:_}):null]}),(0,X.jsxs)(IO,{children:[(0,X.jsx)(LO,{htmlFor:`relay-manual-ipv6`,children:$(`panel.address.ipv6Url`)}),(0,X.jsx)(VO,{inputProps:{id:`relay-manual-ipv6`,className:`font-mono`},value:f,placeholder:$(`panel.address.ipv6Placeholder`),onChange:e=>{D.current=!0,p(e.target.value)}})]})]})]})}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,disabled:a===`config`,onClick:()=>t(!1),children:$(`panel.common.cancel`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:!A,onClick:M,children:$(`panel.relay.saveConfig`)})]})]})}),(0,X.jsx)(jf,{open:y,onOpenChange:b,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)]`,initialFocus:C,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.publicRelay`)})}),(0,X.jsx)(`div`,{ref:C,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`flex max-h-[60vh] flex-col gap-0.5 overflow-y-auto`,children:wk.map(e=>{let t=c.trim()===e.url;return(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{l(e.url),b(!1)},className:`flex w-full items-baseline justify-between gap-3 rounded px-2 py-1.5 text-left ${t?`bg-background-muted`:`hover:bg-background-muted`}`,children:[(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(t?`panel.relay.selected`:e.nameKey)})]},e.url)})})}),(0,X.jsxs)(If,{className:`flex justify-between gap-2`,children:[(0,X.jsx)(Bf,{variant:`ghost`,disabled:c.trim()===``,onClick:()=>{l(``),b(!1)},children:$(`panel.relay.clear`)}),(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>b(!1),children:$(`panel.common.close`)})]})]})}),(0,X.jsx)(jf,{open:x,onOpenChange:S,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)]`,initialFocus:w,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.address.lan`)})}),(0,X.jsx)(`div`,{ref:w,tabIndex:-1,className:`outline-none`,children:(0,X.jsx)(Ff,{className:`max-h-[60vh] overflow-y-auto px-1 py-2`,children:(0,X.jsx)(bk,{align:`start`,book:r,port:n.lan.port,value:r?.preferred??``,busy:a!==``,fallbackUrls:i,onChange:e=>{s(e),S(!1)}})})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>S(!1),children:$(`panel.common.close`)})})]})})]})}var Rk=18e5,zk=3e5,Bk=15e3,Vk=null,Hk=0,Uk=0,Wk=null;function Gk(e){return typeof e!=`number`||!Number.isFinite(e)?!1:e===0||Date.now()-e>Rk}function Kk(e){if(!e&&Wk)return Wk;let t=(async()=>{let t=await QD(e?`/api/relay/selfcheck?force=1`:`/api/relay/selfcheck`);return Vk=t,Hk=Date.now(),t})();return e||(Wk=t,t.finally(()=>{Wk===t&&(Wk=null)})),t}function qk(e,t=``){let[n,r]=(0,g.useState)(Vk),[i,a]=(0,g.useState)(!1),[o,s]=(0,g.useState)(``),[c,l]=(0,g.useState)(!1),u=(0,g.useRef)(!0);(0,g.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]);let d=(0,g.useCallback)(async e=>{if(!e&&Vk&&Date.now()-Hk<Bk){r(Vk);return}a(!0);try{let t=await Kk(e);if(!u.current)return;r(t),s(``),l(!1)}catch(e){if(!u.current)return;l(e instanceof XD&&e.status===404),s(eO(e))}finally{u.current&&a(!1)}},[]);(0,g.useEffect)(()=>{e&&(Date.now()-Uk<zk||Vk&&Date.now()-Hk<Bk||(Uk=Date.now(),d(!1)))},[e,d]);let f=(0,g.useRef)(null);return(0,g.useEffect)(()=>{if(t){if(f.current===null){f.current=t;return}f.current!==t&&(f.current=t,d(!0))}},[t,d]),{data:n,checking:i,error:o,missing:c,ensure:(0,g.useCallback)(()=>void d(!1),[d]),refresh:(0,g.useCallback)(()=>void d(!0),[d])}}function Jk(e){return e===`ok`?`ok`:e===`unknown`?`warn`:`error`}var Yk={ok:{long:`panel.selfcheck.verdict.ok`,short:`panel.selfcheck.short.ok`},"not-listening":{long:`panel.selfcheck.verdict.notListening`,short:`panel.selfcheck.short.notListening`},"firewall-blocked":{long:`panel.selfcheck.verdict.firewallBlocked`,short:`panel.selfcheck.short.firewallBlocked`},unknown:{long:`panel.selfcheck.verdict.unknown`,short:`panel.selfcheck.short.unknown`},network:{long:`panel.selfcheck.verdict.network`,short:`panel.selfcheck.short.network`}};function Xk(e){return $(Yk[e]?.long??`panel.selfcheck.verdict.unknown`)}function Zk(e){if(!e)return{tone:`off`,text:$(`panel.selfcheck.notChecked`)};let t=e.firewall,n=eA(t.appPath);return!t.supported||t.enabled===null?{tone:`warn`,text:$(`panel.selfcheck.unknown`)}:t.enabled===!1?{tone:`ok`,text:$(`panel.selfcheck.firewallOff`),...n?{detail:n}:{}}:t.allowsApp===!1?{tone:`error`,text:$(`panel.selfcheck.blocked`),...n?{detail:n}:{}}:t.allowsApp===!0?{tone:`ok`,text:$(`panel.selfcheck.allowed`),...n?{detail:n}:{}}:{tone:`warn`,text:$(`panel.selfcheck.unknown`)}}function Qk(e,t){let n=typeof e?.mobile?.lastMobileAt==`number`?e.mobile.lastMobileAt:t;return typeof n!=`number`||!Number.isFinite(n)?{tone:`off`,text:$(`panel.selfcheck.notChecked`)}:n===0?{tone:`warn`,text:$(`panel.selfcheck.mobileNever`)}:(typeof e?.mobile?.idle==`boolean`?e.mobile.idle:Gk(n))?{tone:`warn`,text:$(`panel.selfcheck.mobileIdle`),detail:Vg(n)}:{tone:`ok`,text:$(`panel.selfcheck.mobileRecent`),detail:Vg(n)}}function $k(e){let t={listening:`panel.lan.listening`,off:`panel.status.off`,error:`panel.lan.error`};return t[e]?$(t[e]):e}function eA(e){let t=String(e??``).trim();if(!t)return``;let n=t.split(/[\\/]/);return n[n.length-1]??``}function tA({open:e,onOpenChange:t,state:n,lastMobileAt:r}){(0,g.useEffect)(()=>{e&&n.ensure()},[e,n.ensure]);let i=n.data,a=Zk(i),o=Qk(i,r),s=i?Jk(i.verdict):`warn`;return(0,X.jsx)(jf,{open:e,onOpenChange:t,children:(0,X.jsxs)(Mf,{className:`max-w-xl`,children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.selfcheck.title`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-3`,children:[n.error?(0,X.jsxs)(HE,{variant:n.missing?`warning`:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:n.missing?$(`panel.selfcheck.unavailable`):$(`panel.selfcheck.failed`)}),n.missing?null:(0,X.jsx)(KE,{children:n.error})]}):null,i?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:Rg(`text-sm`,s===`ok`?`text-foreground`:Bg[s]),children:Xk(i.verdict)}),(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.connection.lan`),children:(0,X.jsx)(LD,{tone:i.listening.state===`listening`?`ok`:i.listening.state===`error`?`error`:`off`,text:$k(i.listening.state),detail:$(`panel.selfcheck.port`,{port:i.listening.port})})}),(0,X.jsx)(FD,{label:$(`panel.connection.tunnel`),children:(0,X.jsx)(LD,{tone:Hg(i.tunnel.state),text:Ug(i.tunnel.state)})}),(0,X.jsx)(FD,{label:$(`panel.selfcheck.firewall`),children:(0,X.jsx)(LD,{tone:a.tone,text:a.text,detail:a.detail})}),(0,X.jsx)(FD,{label:$(`panel.selfcheck.mobile`),children:(0,X.jsx)(LD,{tone:o.tone,text:o.text,detail:o.detail})})]}),(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.selfcheck.checkedAt`,{time:Vg(i.checkedAt)})})]}):n.checking?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.selfcheck.checking`)]}):null]}),(0,X.jsxs)(If,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>t(!1),children:$(`panel.common.close`)}),(0,X.jsx)(Bf,{variant:`primary`,disabled:n.checking,onClick:n.refresh,children:n.checking?$(`panel.selfcheck.checking`):$(`panel.selfcheck.recheck`)})]})]})})}var nA=`/dsh-market/api/v1`,rA=`dsh-mobile-plugin`,iA=class extends Error{status;code;constructor(e,t,n){super(n),this.name=`MarketError`,this.status=e,this.code=t}},aA=e=>e&&typeof e==`object`?e:{},oA=e=>typeof e==`string`&&e!==``?e:null;async function sA(e,t){let n;try{n=await fetch(`${nA}${e}`,{credentials:`same-origin`,...t})}catch(e){throw new iA(0,`market_unreachable`,$(`panel.net.marketUnreachable`,{message:String(e?.message||e)}))}let r=await n.json().catch(()=>null);if(!n.ok){let e=aA(r),t=aA(e.failure),i=oA(t.code)??(typeof e.error==`string`?e.error:`HTTP ${n.status}`),a=oA(t.message)??oA(e.error)??$(`panel.net.marketHttp`,{status:n.status});throw new iA(n.status,i,a)}return r}async function cA(){try{return{available:!0,restartSupported:aA(aA(await sA(`/capabilities`)).restart).supported===!0}}catch{return{available:!1,restartSupported:!1}}}async function lA(e=rA,t=!1){let n=aA(await sA(`/updates${`?name=${encodeURIComponent(e)}${t?`&force=1`:``}`}`)),r=aA(n.package??n);return{installedVersion:oA(r.installedVersion),latestVersion:oA(r.latestVersion),updateAvailable:r.updateAvailable===!0,source:oA(r.source)}}var uA={status:`/api/relay/update/status`,check:`/api/relay/update/check`,apply:`/api/relay/update/apply`,auto:`/api/relay/update/auto`,otaStatus:`/api/relay/update/ota/status`,otaCheck:`/api/relay/update/ota/check`,otaApply:`/api/relay/update/ota/apply`},dA=e=>e&&typeof e==`object`?e:{},fA=e=>typeof e==`string`&&e!==``?e:null,pA=e=>typeof e==`boolean`?e:null,mA=e=>typeof e==`number`&&Number.isFinite(e)?e:null;async function hA(e,t){let n=await fetch(e,{credentials:`same-origin`,headers:{accept:`application/json`,...t?.body?{"content-type":`application/json`}:{}},...t}),r=null;try{r=await n.json()}catch{r=null}let i=dA(r),a=dA(i.error);if(!n.ok){let e=fA(a.code)??`http_${n.status}`;throw new XD(fA(a.message)??$(`panel.net.hostHttp`,{status:n.status}),e,n.status)}return i}function gA(e){return e instanceof XD?e.status===404:e instanceof SyntaxError}function _A(e){return e instanceof XD&&e.code===`update_unavailable`}function vA(e){let t=dA(e);return Object.keys(t).length===0?null:{installedVersion:fA(t.installedVersion),latestVersion:fA(t.latestVersion),updateAvailable:t.updateAvailable===!0,source:fA(t.source),checkedAt:fA(t.checkedAt)}}function yA(e){let t=dA(e),n=dA(t.failure),r=fA(n.code);return{installed:pA(t.installed),skipped:pA(t.skipped),state:fA(t.state),beforeVersion:fA(t.beforeVersion),installedVersion:fA(t.installedVersion),swapped:pA(t.swapped),restartRequired:pA(t.restartRequired),refreshRequired:pA(t.refreshRequired),failure:r?{code:r,message:fA(n.message)??r}:null}}function bA(e){let t=dA(e);return{available:t.available===!0,version:fA(t.version),installedVersion:fA(t.installedVersion),source:fA(t.source),previousVersion:fA(t.previousVersion),activatedAt:fA(t.activatedAt),lastError:fA(t.lastError),inFlight:mA(t.inFlight)??0,swapping:t.swapping===!0,autoUpdate:t.autoUpdate===!0,autoIntervalMs:mA(t.autoIntervalMs)??6e5,marketBase:fA(t.marketBase),marketLastCheckedAt:fA(t.marketLastCheckedAt),marketLastError:fA(t.marketLastError),marketResult:vA(t.marketResult),lastApply:t.lastApply?yA(t.lastApply):null,appliedAt:fA(t.appliedAt),runningShellHash:fA(t.runningShellHash),installedShellHash:fA(t.installedShellHash),shellChanged:t.shellChanged===!0}}async function xA(){return bA((await hA(uA.status)).data)}async function SA(){let e=dA((await hA(uA.check,{method:`POST`,body:JSON.stringify({})})).data);return{update:vA(e.update),status:e.status?bA(e.status):null}}async function CA(e=!1){let t=dA((await hA(uA.apply,{method:`POST`,body:JSON.stringify({force:e})})).data),n=dA(t.status);return{...yA(t),status:Object.keys(n).length>0?bA(n):null}}async function wA(e){let t=dA((await hA(uA.auto,{method:`POST`,body:JSON.stringify({enabled:e})})).data);return{enabled:t.enabled===!0,status:t.status?bA(t.status):null}}var TA=new Set([`OPERATION_BUSY`,`RELEASE_TOO_FRESH`,`VERSION_UNCHANGED`,`PLUGIN_NOT_INSTALLED`,`AGENTS_RUNNING`]);function EA(e,t){if(!e)return t;let n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function DA(e){let t=e.installedVersion??e.beforeVersion;return e.failure?{text:$(`panel.update.applyFailed`,{message:e.failure.message}),ok:!1}:e.installed===!1?e.skipped?{text:t?$(`panel.update.applyUpToDate`,{version:t}):$(`panel.update.applyUpToDatePlain`),ok:!0}:{text:t?$(`panel.update.applyDiskUnchanged`,{version:t}):$(`panel.update.applyFailedRetry`),ok:!1}:{text:t?$(`panel.update.applySwitched`,{version:t}):$(`panel.update.applySwitchedPlain`),ok:!0}}function OA({version:e,busy:t,onRestartSidecar:n}){let[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(``),h=nO(),[_,v]=(0,g.useState)(!1),y=(0,g.useCallback)(e=>{e&&i(t=>({...e,available:e.available===!0||t?.available===!0}))},[]),b=r!==null&&r.available&&!s,x=t!==``||p!==``,S=(0,g.useCallback)(async()=>{try{let e=await xA();i(e),c(e.available!==!0)}catch(e){i(null),c(_A(e))}finally{o(!0)}},[]);(0,g.useEffect)(()=>{S()},[S]),(0,g.useEffect)(()=>{if(!a)return;let e=!0;return SA().then(t=>{e&&(t.update&&f(t.update),t.status&&y(t.status))}).catch(()=>{}),()=>{e=!1}},[a]);let C=r?.swapping===!0;(0,g.useEffect)(()=>{if(!C)return;let e=window.setInterval(()=>void S(),1500);return()=>window.clearInterval(e)},[C,S]),(0,g.useEffect)(()=>{if(b||!a)return;let e=!0;return cA().then(t=>{e&&u(t)}),()=>{e=!1}},[b,a]);let w=(0,g.useCallback)(e=>{if(e instanceof iA&&TA.has(e.code)){h(`soft`,`${e.message}(${e.code})`);return}h(`error`,eO(e))},[]),T=(0,g.useCallback)(async()=>{m(`check`);try{let e=await SA();e.status&&y(e.status),e.update&&f(e.update)}catch(e){gA(e)||_A(e)?await S():h(`error`,eO(e))}finally{m(``)}},[S]),E=(0,g.useCallback)(async e=>{m(`apply`);try{let t=await CA(e);t.status&&y(t.status);let n=DA(t),r=t.failure!==null&&TA.has(t.failure.code);n.ok||r?h(`soft`,n.text):h(`error`,n.text)}catch(e){gA(e)||_A(e)?await S():h(`error`,eO(e))}finally{m(``)}},[S]),D=(0,g.useCallback)(async()=>{m(`check`);try{let e=await SA();e.status&&y(e.status),f(e.update)}catch(e){if(!gA(e))f(null),h(`error`,eO(e));else try{f(await lA(void 0,!0))}catch(e){f(null),w(e)}}finally{m(``)}},[w]),O=(0,g.useCallback)(async e=>{v(!0);try{let t=await wA(e);t.status&&y(t.status);let n=Math.round((t.status?.autoIntervalMs??r?.autoIntervalMs??6e5)/6e4);h(`soft`,t.enabled?$(`panel.update.autoOn`,{minutes:n}):$(`panel.update.autoOff`))}catch(e){h(`error`,$(`panel.update.autoToggleFailed`,{message:eO(e)})),await S()}finally{v(!1)}},[r?.autoIntervalMs,S]),k=d?.latestVersion??r?.marketResult?.latestVersion??null,A=d?.source??r?.marketResult?.source??null,j=A===`linked`||A===`file`||A===`workspace`,M=d?.updateAvailable??r?.marketResult?.updateAvailable??!1,N=r?.lastApply?DA(r.lastApply):null,P=e||`—`,F=r?.version??null,I=b&&!!F&&!!e&&F!==e;return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsxs)(iD,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{children:$(`panel.update.title`)}),(0,X.jsx)(XE,{variant:`soft`,size:`sm`,children:e||$(`panel.update.unknownVersion`)})]})}),a?null:(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.update.reading`)]}),s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(FD,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)})]}),(0,X.jsxs)(`p`,{className:`mt-3 text-xs text-foreground-muted`,children:[M?$(`panel.update.hasNew`):``,$(`panel.update.nothingToInstall`)]})]}):null,a&&!b&&!s&&l!==null&&!l.available?(0,X.jsxs)(HE,{variant:`info`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.update.noMarketTitle`)}),(0,X.jsx)(KE,{children:$(`panel.update.noMarketBody`)})]}):null,b&&r?(0,X.jsxs)(X.Fragment,{children:[j?null:(0,X.jsxs)(`label`,{className:`mt-1 flex items-start justify-between gap-4 border-b border-border-muted py-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0`,children:(0,X.jsx)(`span`,{className:`block text-sm text-foreground`,children:$(`panel.update.autoUpdate`)})}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[_?(0,X.jsx)(PE,{}):null,(0,X.jsx)(ND,{size:`md`,checked:r.autoUpdate,disabled:x||_,onCheckedChange:e=>void O(e),"aria-label":$(`panel.update.autoUpdate`)})]})]}),(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(FD,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)}),(0,X.jsx)(FD,{label:$(`panel.update.lastCheck`),children:EA(d?.checkedAt??r.marketLastCheckedAt,$(`panel.update.notChecked`))}),(0,X.jsx)(FD,{label:$(`panel.update.lastApply`),children:r.lastApply?EA(r.appliedAt,$(`panel.update.neverUpdated`)):$(`panel.update.neverUpdated`)})]}),I?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-foreground-muted`,children:$(`panel.update.versionDrift`,{version:e??``,shell:F??``})}):null,r.shellChanged?(0,X.jsxs)(HE,{variant:`info`,className:`mt-3`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.update.shellChangedTitle`)}),(0,X.jsx)(KE,{children:$(`panel.update.shellChangedBody`)})]}):null,r.lastError?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-foreground-muted`,children:$(`panel.update.lastErrorLine`,{message:r.lastError})}):null,(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:n,children:$(`panel.update.restartSidecar`)}),(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:()=>void T(),children:$(p===`check`?`panel.update.checking`:`panel.update.check`)}),j?null:(0,X.jsx)(Bf,{variant:`primary`,size:`md`,disabled:x,onClick:()=>void E(!1),children:$(p===`apply`?`panel.update.updating`:`panel.update.updateNow`)})]}),!j&&(M||N!==null&&!N.ok)?(0,X.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,X.jsx)(Bf,{variant:`ghost`,size:`sm`,disabled:x,onClick:()=>void E(!0),children:$(`panel.update.forceHint`)})}):null]}):null,a&&!b&&!s&&l?.available?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(ID,{children:[(0,X.jsx)(FD,{label:$(`panel.update.runningVersion`),mono:!0,children:P}),(0,X.jsx)(FD,{label:$(`panel.update.latestOnline`),mono:!0,children:k??$(`panel.update.notChecked`)}),(0,X.jsx)(FD,{label:$(`panel.update.checkResult`),children:$(M?`panel.update.resultHasNew`:`panel.update.resultUpToDate`)})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap justify-end gap-2`,children:[(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:n,children:$(`panel.update.restartSidecar`)}),(0,X.jsx)(Bf,{variant:`outline`,size:`md`,disabled:x,onClick:()=>void D(),children:$(p===`check`?`panel.update.checking`:`panel.update.check`)}),r!==null&&!j?(0,X.jsx)(Bf,{variant:`primary`,size:`md`,disabled:x,onClick:()=>void E(!1),children:$(p===`apply`?`panel.update.updating`:`panel.update.updateNow`)}):null]})]}):null]})}function kA(e){let t=Number.isFinite(e)&&e>0?e:0;return t===0?`0 MB`:t<1048576?`${Math.max(1,Math.round(t/1024))} KB`:`${(t/1024/1024).toFixed(1)} MB`}function AA(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/36e5);return n<1?$(`panel.inbox.ageLessThanHour`):n<24?$(`panel.inbox.ageHours`,{hours:n}):$(`panel.inbox.ageDays`,{days:Math.floor(n/24)})}function jA(){let e=nO(),[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(!1),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(!1),l=(0,g.useCallback)(async()=>{try{n(await QD(`/api/relay/inbox/status`))}catch{n(null)}finally{i(!0)}},[]);(0,g.useEffect)(()=>{l()},[l]);let u=t?.deletableFiles??0,d=AA(t?.oldestAt??null),f=t?.stagingFiles??0;async function p(t){if(!s){c(!0);try{let e=await $D(`/api/relay/inbox/auto`,{enabled:t});n(t=>t&&{...t,autoClear:e.data.autoClear})}catch(t){e(`error`,$(`panel.inbox.autoFailed`,{message:eO(t)}))}finally{c(!1)}}}async function m(){if(a)return;let n=u>0?$(`panel.inbox.confirmDetail`,{count:u,hours:t?.keepHours??24,bytes:kA(t?.deletableBytes??0)}):$(`panel.inbox.confirmNothing`,{hours:t?.keepHours??24});if(window.confirm(`${$(`panel.inbox.confirmTitle`)}\n\n${n}\n\n${$(`panel.inbox.confirmIrreversible`)}`)){o(!0);try{let t=await $D(`/api/relay/inbox/clear`),n=kA(t.freedBytes);e(t.failedFiles>0?`soft`:`ok`,t.deletedFiles>0?`${$(`panel.inbox.cleared`,{bytes:n,count:t.deletedFiles})}${t.failedFiles>0?$(`panel.inbox.clearedSomeFailed`,{count:t.failedFiles}):``}`:$(`panel.inbox.nothingToClear`)),await l()}catch(t){e(`error`,$(`panel.inbox.clearFailed`,{message:eO(t)}))}finally{o(!1)}}}return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsx)(iD,{className:`flex items-center gap-2`,children:(0,X.jsx)(`span`,{children:$(`panel.inbox.title`)})})}),r?null:(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.inbox.reading`)]}),r&&t===null?(0,X.jsxs)(HE,{variant:`info`,className:`mt-2`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.inbox.unreadableTitle`)}),(0,X.jsx)(KE,{children:$(`panel.inbox.unreadableBody`)})]}):null,t===null?null:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`dl`,{className:`mt-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.used`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:$(`panel.inbox.usedValue`,{bytes:kA(t.bytes),count:t.files})})]}),(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 border-b border-border-muted py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.deletable`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:u>0?$(`panel.inbox.deletableValue`,{bytes:kA(t.deletableBytes),count:u}):$(`panel.common.none`)})]}),(0,X.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 py-2`,children:[(0,X.jsx)(`dt`,{className:`shrink-0 text-sm text-foreground-muted`,children:$(`panel.inbox.keep`)}),(0,X.jsx)(`dd`,{className:`min-w-0 text-right text-sm break-all`,children:d?$(`panel.inbox.keepValueOldest`,{hours:t.keepHours,age:d}):$(`panel.inbox.keepValue`,{hours:t.keepHours})})]})]}),f>0?(0,X.jsx)(`p`,{className:`mt-1 text-xs text-foreground-muted`,children:$(`panel.inbox.staging`,{bytes:kA(t.stagingBytes??0),count:t.stagingFiles??0})}):null,(0,X.jsxs)(`label`,{className:`mt-3 flex items-center justify-between gap-4 border-t border-border-muted pt-3`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-foreground`,children:$(`panel.inbox.auto`)}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[s?(0,X.jsx)(PE,{}):null,(0,X.jsx)(ND,{size:`md`,checked:t.autoClear===!0,disabled:a||s,onCheckedChange:e=>void p(e),"aria-label":$(`panel.inbox.autoA11y`)})]})]}),(0,X.jsx)(`div`,{className:`mt-3 flex justify-center`,children:(0,X.jsx)(Bf,{variant:u>0?`primary`:`outline`,size:`md`,disabled:a,onClick:()=>void m(),children:$(a?`panel.inbox.clearing`:`panel.inbox.clear`)})})]})]})}function MA({webAccess:e,busy:t,onToggle:n}){let r=e?.enabled===!0,i=typeof e?.expiresAt==`number`?e.expiresAt:0;return(0,X.jsxs)(nD,{frame:`solid`,children:[(0,X.jsx)(rD,{children:(0,X.jsx)(iD,{children:$(`panel.webAccess.title`)})}),(0,X.jsx)(ID,{children:(0,X.jsx)(FD,{label:$(`panel.webAccess.state`),tone:r?`ok`:`off`,children:r?$(`panel.webAccess.expires`,{time:Vg(i)}):$(`panel.webAccess.closed`)})}),(0,X.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-foreground-muted`,children:$(`panel.webAccess.hint`)}),(0,X.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:r?(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t===`webAccess`,onClick:()=>n(!1),children:$(`panel.webAccess.close`)}):(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:t===`webAccess`,onClick:()=>n(!0),children:$(`panel.webAccess.open`)})})]})}function NA(){let[e,t]=(0,g.useState)(null),[n,r]=(0,g.useState)(``),i=nO(),[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(null),[l,u]=(0,g.useState)(``),[d,f]=(0,g.useState)(!1),[p,m]=(0,g.useState)(!1),[h,_]=(0,g.useState)(null),[v,y]=(0,g.useState)(!1),b=qk(Gk(e?.lastMobileAt),e?`${+!!e.enabled}|${+!!e.lan.enabled}|${e.lan.state}|${e.tunnel.state}|${+((e.lastMobileAt??0)>0)}`:``),x=(0,g.useCallback)(async()=>{try{t(await QD(`/api/relay/status`)),r(``)}catch(e){r(eO(e))}},[]),S=(0,g.useCallback)(async()=>{try{c(await QD(`/api/relay/pairing`)),u(``)}catch(e){c(null),u(eO(e))}},[]),C=(0,g.useCallback)(async()=>{try{_(await QD(`/api/relay/addresses`))}catch{_(null)}},[]);(0,g.useEffect)(()=>{let e=()=>{document.hidden||x()};e();let t=window.setInterval(e,3e3);return document.addEventListener(`visibilitychange`,e),()=>{window.clearInterval(t),document.removeEventListener(`visibilitychange`,e)}},[x]),(0,g.useEffect)(()=>{!e?.enabled||s||l||S()},[e?.enabled,s,l,S]),(0,g.useEffect)(()=>{e?.enabled&&s&&e.pairingCode&&s.pairingCode!==e.pairingCode&&S()},[e?.pairingCode,e?.enabled,s,S]),(0,g.useEffect)(()=>{d&&e?.enabled&&(S(),C())},[d,e?.enabled,S,C]),(0,g.useEffect)(()=>{e?.enabled&&C()},[e?.enabled,s,C]);let w=(0,g.useCallback)(async(e,t)=>{o(e);try{await t()}catch(e){i(`error`,eO(e))}finally{o(``)}},[]),T=e=>w(`toggle`,async()=>{t(await $D(`/api/relay/toggle`,{enabled:e})),e?await S():(c(null),u(``)),i(`soft`,$(e?`panel.shell.remoteEnabled`:`panel.shell.remoteDisabled`))}),E=()=>w(`reconnect`,async()=>{t(await $D(`/api/relay/reconnect`)),i(`soft`,$(`panel.shell.reconnecting`))}),D=()=>w(`restart`,async()=>{let e=await $D(`/api/relay/restart-sidecar`);t(e.status),i(`soft`,$(`panel.shell.sidecarRestarted`))}),O=()=>{window.confirm($(`panel.shell.revokeConfirm`))&&w(`revoke`,async()=>{let e=await $D(`/api/relay/revoke-all`);await x(),await S(),i(`soft`,`${$(`panel.shell.revoked`,{count:e.revoked})}${e.revokedRelay?$(`panel.shell.revokedRelay`,{count:e.revokedRelay}):``}`)})},k=e=>w(`webAccess`,async()=>{let n=await $D(`/api/relay/web-access`,{enabled:e});t(e=>e&&{...e,webAccess:n.webAccess}),i(`soft`,$(e?`panel.webAccess.opened`:`panel.webAccess.closedNotice`))}),A=e=>w(`config`,async()=>{t(await $D(`/api/relay/config`,e)),f(!1),await S(),i(`soft`,$(`panel.shell.configSaved`))}),j=e=>w(`policy`,async()=>{t(await $D(`/api/relay/config`,{pairingPolicy:e})),i(`soft`,$(e===`code`?`panel.shell.deviceAllowed`:`panel.shell.deviceDenied`))}),M=e=>w(`lan`,async()=>{t(await $D(`/api/relay/config`,{lanPort:e})),m(!1),await S(),i(`soft`,$(`panel.shell.lanSaved`))}),N=e=>w(`lan`,async()=>{t(await $D(`/api/relay/config`,{preferredLanAddress:e})),await Promise.all([S(),C()]),i(`soft`,e?$(`panel.shell.preferredAddress`,{address:e}):$(`panel.shell.preferredAuto`))});return e?(0,X.jsxs)(`main`,{className:`mx-auto flex w-full max-w-6xl flex-col gap-4 p-6`,children:[(0,X.jsxs)(`header`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`h1`,{className:`text-lg font-semibold text-foreground-intense`,children:$(`panel.shell.title`)}),(0,X.jsx)(XE,{variant:`soft`,size:`sm`,children:e.appVersion||$(`panel.shell.unknownVersion`)}),a?(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.shell.busy`)]}):null]}),n?(0,X.jsxs)(HE,{variant:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.shell.statusFailed`)}),(0,X.jsx)(KE,{children:n})]}):null,(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-start`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-4`,children:[(0,X.jsx)(Fk,{status:e,pairing:s,addressBook:h,busy:a,error:l,restartError:e.sidecar.restartError,onOpenConfig:()=>f(!0),onChangePolicy:e=>void j(e),onOpenSelfCheck:()=>y(!0),onReconnect:()=>void E(),onSavePreferred:e=>void N(e),onEditPort:()=>m(!0)}),(0,X.jsx)(OA,{version:e.appVersion||``,busy:a,onRestartSidecar:()=>void D()}),(0,X.jsx)(cO,{onRevokeAll:O,busy:a})]}),(0,X.jsxs)(`aside`,{className:`flex flex-col gap-4 max-lg:order-first lg:w-[340px] lg:shrink-0`,children:[(0,X.jsx)(hO,{lanPort:e.lan.port}),(0,X.jsx)(RD,{status:e,busy:a,onToggle:T}),e.webAccess?.enabled&&e.panelScope!==`loopback`?(0,X.jsx)(MA,{webAccess:e.webAccess,busy:a,onToggle:e=>void k(e)}):null,(0,X.jsx)(jA,{})]})]}),(0,X.jsx)(Lk,{open:d,onOpenChange:f,status:e,addressBook:h,lanUrls:s?.lanUrls??[],busy:a,onSave:e=>void A(e),onSavePreferred:e=>void N(e)}),(0,X.jsx)(tA,{open:v,onOpenChange:y,state:b,lastMobileAt:e.lastMobileAt}),(0,X.jsx)(WO,{open:p,onOpenChange:m,port:s?.lanPort??e.lan.requestedPort??e.lan.port,busy:a,onSave:e=>void M(e)})]}):(0,X.jsx)(`main`,{className:`mx-auto flex w-full max-w-3xl flex-col gap-4 p-6`,children:n?(0,X.jsxs)(HE,{variant:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.shell.statusFailed`)}),(0,X.jsx)(KE,{children:n})]}):(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.shell.readingStatus`)]})})}var PA=[{textKey:`panel.onboarding.linuxStep1`},{text:`systemctl status firewalld`,cmd:!0},{text:`sudo ufw status`,cmd:!0},{textKey:`panel.onboarding.linuxStep2`},{text:`sudo firewall-cmd --permanent --add-port={port}/tcp
28
+ sudo firewall-cmd --reload`,cmd:!0},{text:`sudo ufw allow {port}/tcp`,cmd:!0},{textKey:`panel.onboarding.linuxStep3`}],FA=[{textKey:`panel.onboarding.macStep1`},{text:`/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate`,cmd:!0},{textKey:`panel.onboarding.macStep2`},{text:`sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off`,cmd:!0},{textKey:`panel.onboarding.macStep3`}],IA=[{textKey:`panel.onboarding.winStep1`},{text:`Get-NetFirewallProfile | Select-Object Name, Enabled`,cmd:!0},{textKey:`panel.onboarding.winStep2`},{text:`New-NetFirewallRule -DisplayName "DSH Mobile {port}" -Direction Inbound -LocalPort {port} -Protocol TCP -Action Allow`,cmd:!0},{textKey:`panel.onboarding.winStep3`}];function LA(){return[$(`panel.onboarding.prompt.intro`),``,$(`panel.onboarding.prompt.situation`),$(`panel.onboarding.prompt.address`),$(`panel.onboarding.prompt.guess`),``,$(`panel.onboarding.prompt.ask`),$(`panel.onboarding.prompt.ask1`),$(`panel.onboarding.prompt.ask2`),$(`panel.onboarding.prompt.ask3`),$(`panel.onboarding.prompt.ask4`),``,$(`panel.onboarding.prompt.extra`)].join(`
29
+ `)}function RA({title:e,steps:t,port:n,onCopied:r}){async function i(){try{await navigator.clipboard.writeText(LA()),r(!0)}catch{r(!1)}}return(0,X.jsxs)(`section`,{className:`flex flex-col gap-1.5 rounded-lg border border-border-muted bg-background-muted p-3`,children:[(0,X.jsx)(`h3`,{className:`text-center text-sm font-semibold text-foreground-intense`,children:e}),t.map(e=>{let t=(e.text??(e.textKey?$(e.textKey):``)).replace(/\{port\}/g,n);return e.cmd?(0,X.jsx)(`pre`,{className:`rounded bg-background-subtle px-2 py-1.5 font-mono text-[11px] leading-5 break-words whitespace-pre-wrap text-foreground-strong`,children:t},t):(0,X.jsx)(`p`,{className:`text-xs leading-5 text-foreground-muted`,children:t},t)}),(0,X.jsx)(Bf,{className:`mt-auto`,variant:`outline`,size:`sm`,onClick:()=>void i(),children:$(`panel.onboarding.copyPromptHint`)})]})}function zA({open:e,onOpenChange:t,port:n}){let[r,i]=(0,g.useState)(``),a=e=>i(e?`ok`:`failed`);return(0,X.jsx)(jf,{open:e,onOpenChange:e=>{e||i(``),t(e)},children:(0,X.jsxs)(Mf,{className:`w-[min(1200px,92vw)] max-w-none`,backdropProps:{className:`z-[80]`},viewportProps:{className:`z-[80]`},children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.firewallTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`p`,{className:`text-sm text-foreground-muted`,children:[$(`panel.onboarding.firewallIntro`),` `,(0,X.jsx)(`span`,{className:`font-mono`,children:n}),$(`panel.onboarding.firewallIntroTail`)]}),(0,X.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-3`,children:[(0,X.jsx)(RA,{title:`Linux`,steps:PA,port:n,onCopied:a}),(0,X.jsx)(RA,{title:`Mac`,steps:FA,port:n,onCopied:a}),(0,X.jsx)(RA,{title:`Windows`,steps:IA,port:n,onCopied:a})]})]}),r?(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(r===`ok`?`panel.onboarding.copiedOk`:`panel.onboarding.copiedFailed`)})}):null]})})}var BA=`public-relay`,VA=`own-relay`,HA=`lan-direct`,UA=`penetration`,WA=wk;function GA(e){let t=(e.preferred||``).trim();return t&&e.lan.some(e=>e.address===t)?t:e.lan[0]?.address??``}function KA({onDone:e}){let[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),[h,_]=(0,g.useState)(``),[v,y]=(0,g.useState)(``),[b,x]=(0,g.useState)(``),[S,C]=(0,g.useState)([]),[w,T]=(0,g.useState)(``),[E,D]=(0,g.useState)(!1),[O,k]=(0,g.useState)(`idle`),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(!1),[I,L]=(0,g.useState)(!1),[R,z]=(0,g.useState)(!1),[B,V]=(0,g.useState)(!1),[H,ee]=(0,g.useState)(null),[te,U]=(0,g.useState)(``),[W,ne]=(0,g.useState)(``),re=qk(Gk(t?.lastMobileAt),t?`${+!!t.enabled}|${+!!t.lan.enabled}|${t.lan.state}|${t.tunnel.state}|${+((t.lastMobileAt??0)>0)}`:``),G=Zk(re.data),K=re.data?.verdict??``,ie=(0,g.useRef)(!0);(0,g.useEffect)(()=>(ie.current=!0,()=>{ie.current=!1}),[]),(0,g.useEffect)(()=>{(async()=>{try{let e=await QD(`/api/relay/addresses`);f(e);let n=GA(e);_(n),ne((e.manual??``).trim()),y(e=>e||(t?.relayUrl?BA:HA))}catch{f(null),u(!0)}})()},[]),(0,g.useEffect)(()=>{(async()=>{try{let e=await QD(`/api/relay/status`);n(e),e.enabled&&u(!0)}catch(e){i(eO(e))}await oe()})()},[]);let ae=(0,g.useRef)(!1);(0,g.useEffect)(()=>{ae.current||d!==null&&(ae.current=!0,!(t&&t.enabled)&&_e())},[d,t]);async function oe(){try{m(await QD(`/api/relay/pairing`))}catch{}}(0,g.useEffect)(()=>{if(v!==BA)return;let e=!1;return C(WA.map(e=>({...e,ms:null}))),(async()=>{try{let t=await $D(`/api/relay/probe-relays`,{urls:WA.map(e=>e.url)});if(e)return;let n=new Map(t.results.map(e=>[e.url,e.ms]));C(e=>e.map(e=>({...e,ms:n.get(e.url)??null})).sort((e,t)=>(e.ms??1/0)-(t.ms??1/0)))}catch{if(e)return;C(e=>e.map(e=>({...e,ms:1/0})))}})(),()=>{e=!0}},[v]),(0,g.useEffect)(()=>{if(v!==VA)return;let e=w.trim().replace(/\/+$/,``);if(!e){k(`idle`);return}if(!/^https?:\/\/[^\s]+$/i.test(e))return;if(e===(t?.relayUrl??``).trim().replace(/\/+$/,``)&&t?.tunnel.state===`connected`){k(`ok`);return}let n=window.setTimeout(()=>{ue(e)},600);return()=>window.clearTimeout(n)},[w,v]),(0,g.useEffect)(()=>{let e=(t?.relayUrl??``).trim();if(!e||H!==null)return;let n=!1;return(async()=>{let t=await ce(e.replace(/\/+$/,``));n||(ee(t),t||o($(`panel.onboarding.recheckSaved`,{url:e})))})(),()=>{n=!0}},[t?.relayUrl]);let se=b||S.find(e=>e.ms!==null&&Number.isFinite(e.ms))?.url||S[0]?.url||``;async function ce(e){try{let t=await Promise.race([$D(`/api/relay/probe-relays`,{urls:[e]}),new Promise(e=>window.setTimeout(()=>e(null),8e3))]);return t?!!(t.results[0]&&t.results[0].ms!==null):!1}catch{return!1}}async function le(){let e=w.trim().replace(/\/+$/,``);if(!/^https?:\/\/[^\s]+$/i.test(e)){k(`failed`);return}k(`busy`),k(await ce(e)?`ok`:`failed`)}function q(e){T(e),k(`idle`)}async function ue(e){k(`busy`),o(``);let t=await ce(e);if(w.trim().replace(/\/+$/,``)===e){if(!t){U(``),k(`failed`),o($(`panel.onboarding.relayNoAnswer`,{value:e}));return}k(`ok`);try{let t=await QD(`/api/relay/pairing?relayUrl=${encodeURIComponent(e)}`);U(t.svg??``)}catch{U(``)}}}let de=String(t?.lan.port||d?.port||18787),J=v===BA||v===VA,fe=v===BA&&H===!1,pe=t!==null&&(J?t.tunnel.state===`connected`:t.lan.state===`listening`),me=t!==null&&l&&!re.checking&&K!==`ok`&&!(K===`not-listening`&&pe);async function he(e=J){let t=Date.now();for(;ie.current&&Date.now()-t<2e4;){if(await new Promise(e=>window.setTimeout(e,1500)),!ie.current)return;let t;try{t=await QD(`/api/relay/status`)}catch{continue}n(t);let r=e?t.tunnel.state:t.lan.state;if(r===`listening`||r===`connected`||r===`error`)return}}async function ge(e,t){if(s)return;c(!0),t&&u(!1),o(``);let r=e===BA,i={relayUrl:(r&&(se||wk[0]?.url)||``).trim(),lanEnabled:!0,pairingPolicy:`code`};h&&(i.preferredLanAddress=h),e===UA&&(i.manualLanUrl=W.trim().replace(/\/+$/,``));try{n(await $D(`/api/relay/config`,i)),t&&(n(await $D(`/api/relay/toggle`,{enabled:!0})),await $D(`/api/relay/onboarded`,{}).catch(()=>void 0)),y(e),await oe(),t&&he(r).finally(()=>{ie.current&&u(!0)})}catch(e){t&&ie.current&&u(!0),o(eO(e))}finally{c(!1)}}async function _e(){await ge(v,!0)}function ve(){e?e():window.location.assign(`/`)}async function ye(){let e=w.trim().replace(/\/+$/,``);if(!e)return;let r=(t?.relayUrl??``).trim().replace(/\/+$/,``);if(v===VA&&e===r&&t?.tunnel.state===`connected`){ve();return}if(!s){c(!0),o(``);try{if(!await ce(e)){k(`failed`),U(``),o($(`panel.onboarding.relayNoAnswerUnsaved`,{value:e}));return}k(`ok`);let t={relayUrl:e,lanEnabled:!0,pairingPolicy:`code`};h&&(t.preferredLanAddress=h),n(await $D(`/api/relay/config`,t)),n(await $D(`/api/relay/toggle`,{enabled:!0})),await $D(`/api/relay/onboarded`,{}).catch(()=>void 0),y(VA),await oe(),ve()}catch(e){o(eO(e))}finally{c(!1)}}}async function be(e){if(e===VA){y(e),o(``);return}await ge(e,!0)}async function xe(e){let t={preferredLanAddress:e};J&&(t.relayUrl=``),_(e),y(HA),o(``);try{await $D(`/api/relay/config`,t)}catch(e){o(eO(e))}N(!1),await oe()}let Se=d?.lan??[],Ce=(()=>{let e=h||Se[0]?.address||``;return Se.find(t=>t.address===e)?.url??e})(),we=v===VA&&w.trim()===``,Te=v===VA&&w.trim()!==``&&w.trim().replace(/\/+$/,``)!==(t?.relayUrl??``).trim().replace(/\/+$/,``),Ee=we||Te&&!te,De=v===VA&&Te&&te!==``,Oe=De?te:p?.svg??``,ke=(()=>{let e=w.trim().replace(/\/+$/,``);if(e===``)return{tone:`off`,text:$(`panel.onboarding.probe.empty`)};if(O===`busy`)return{tone:`warn`,text:$(`panel.onboarding.probe.busy`)};if(e===(t?.relayUrl??``).trim().replace(/\/+$/,``)){let e=t?.tunnel.state??`off`;return{tone:Hg(e),text:Ug(e)}}return O===`ok`?{tone:`ok`,text:$(`panel.onboarding.probe.ok`)}:O===`failed`?{tone:`error`,text:$(`panel.onboarding.probe.failed`)}:{tone:`off`,text:$(`panel.onboarding.probe.idle`)}})(),Ae=v===HA?{label:$(`panel.onboarding.currentLan`),value:Ce||`—`,action:$(`panel.onboarding.chooseAddress`),disabled:Se.length===0,onClick:()=>N(!0)}:v===BA?{label:$(`panel.onboarding.relayAddressHint`),value:se||$(`panel.onboarding.autoBest`),action:$(`panel.onboarding.chooseAddress`),disabled:S.length===0,onClick:()=>L(!0)}:v===VA?{label:$(`panel.onboarding.relayAddressHint`),value:w.trim()||$(`panel.onboarding.probe.empty`),action:$(`panel.onboarding.setAddress`),disabled:!1,onClick:()=>z(!0)}:v===UA?{label:$(`panel.onboarding.penetrationAddress`),value:W.trim()||$(`panel.onboarding.probe.empty`),action:$(`panel.onboarding.setAddress`),disabled:!1,onClick:()=>V(!0)}:{label:$(`panel.onboarding.currentLan`),value:Ce||`—`,action:$(`panel.onboarding.chooseAddress`),disabled:Se.length===0,onClick:()=>N(!0)},je=d?.public??[],Me=d?.ipv6??[];return(0,X.jsxs)(`main`,{className:`flex min-h-screen flex-col items-center justify-center gap-4 px-6 pt-6 pb-24`,children:[r?(0,X.jsxs)(HE,{className:`w-full max-w-4xl`,variant:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.onboarding.statusFailed`)}),(0,X.jsx)(KE,{children:r})]}):null,a?(0,X.jsxs)(HE,{className:`w-full max-w-4xl`,variant:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(`panel.onboarding.stepFailed`)}),(0,X.jsx)(KE,{children:a})]}):null,(0,X.jsxs)(nD,{frame:`solid`,className:`w-full max-w-4xl`,children:[(0,X.jsxs)(`div`,{className:`grid gap-6 px-4 pb-2 md:grid-cols-[minmax(280px,0.9fr)_minmax(0,1.1fr)]`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2 md:col-start-1 md:row-start-1`,children:[(0,X.jsxs)(`div`,{className:`flex h-5 w-full max-w-[280px] items-center justify-center gap-1.5`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium leading-5 text-foreground-strong`,children:$(`panel.onboarding.pairingHint`)}),Oe&&!Ee?(0,X.jsx)(`button`,{type:`button`,"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,title:$(`panel.pairing.qrZoom`),className:`cursor-pointer text-foreground-muted hover:text-foreground-strong focus-visible:outline-none`,onClick:()=>F(!0),children:(0,X.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`size-4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,children:[(0,X.jsx)(`circle`,{cx:`10.5`,cy:`10.5`,r:`6`}),(0,X.jsx)(`path`,{d:`m15 15 4.5 4.5M8.5 10.5h4M10.5 8.5v4`})]})}):null]}),Ee?(0,X.jsx)(`div`,{className:`flex size-[280px] flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border-muted px-5 text-center`,children:we?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterRelay`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterRelayLine2`)})]}):(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.qrAfterAddress`)})}):Oe?(0,X.jsx)(`button`,{type:`button`,className:`cursor-zoom-in rounded-lg focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,onClick:()=>F(!0),"aria-label":`${$(`panel.pairing.qrZoom`)}:${$(`panel.pairing.qr`)}`,children:(0,X.jsx)(`div`,{className:`size-[280px] rounded-lg bg-white p-3 [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:Oe}})}):(0,X.jsx)(`div`,{className:`flex size-[280px] items-center justify-center rounded-lg border border-border-muted text-xs text-foreground-muted`,children:s?(0,X.jsx)(PE,{}):$(`panel.onboarding.noQr`)}),(0,X.jsx)(`p`,{className:`min-h-4 max-w-[280px] text-center text-xs leading-4 text-foreground-muted`,children:De?$(`panel.onboarding.preview`):J&&!pe&&!Ee?$(`panel.onboarding.relayNotConnected`):``})]}),(0,X.jsx)(`div`,{className:`flex min-w-0 flex-col gap-3 md:col-start-2 md:row-start-1`,children:(0,X.jsxs)(`div`,{className:`rounded-lg border border-border-muted`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-baseline justify-between gap-x-3 gap-y-1 border-b border-border-muted px-3 py-2`,children:[(0,X.jsx)(`p`,{className:`text-sm font-medium text-foreground-strong`,children:$(`panel.onboarding.pickAddress`)}),(0,X.jsx)(`button`,{type:`button`,className:`cursor-pointer text-sm text-foreground-intense underline underline-offset-2 hover:text-foreground-strong`,onClick:()=>D(!0),children:$(`panel.onboarding.checkFirewall`)})]}),(0,X.jsxs)(`div`,{className:`px-3 py-2.5`,children:[(0,X.jsxs)(mk,{className:`gap-2`,value:v,onValueChange:e=>void be(String(e)),children:[(0,X.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5`,children:[(0,X.jsx)(sk,{value:HA,"aria-label":$(`panel.onboarding.lanDirect`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.lanDirect`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(sk,{value:BA,"aria-label":$(`panel.onboarding.publicRelay`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.publicRelay`)})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(`panel.onboarding.publicRelayTemporary`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(sk,{value:VA,"aria-label":$(`panel.onboarding.ownRelay`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.ownRelay`)})]}),(0,X.jsx)(`a`,{className:Mu({variant:`outline`,size:`sm`}),href:Sk,target:`_blank`,rel:`noreferrer noopener`,onClick:e=>e.stopPropagation(),children:$(`panel.onboarding.githubRepo`)})]}),(0,X.jsxs)(`label`,{className:`flex cursor-pointer items-baseline gap-1.5`,children:[(0,X.jsx)(sk,{value:UA,"aria-label":$(`panel.onboarding.penetration`)}),(0,X.jsx)(`span`,{className:`text-sm text-foreground`,children:$(`panel.onboarding.penetration`)})]})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-between gap-x-3 gap-y-1 border-t border-border-muted pt-2.5`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:Ae.label}),(0,X.jsx)(`p`,{className:`min-w-0 font-mono text-sm break-all text-foreground-strong`,children:Ae.value})]}),(0,X.jsx)(Bf,{variant:`outline`,size:`sm`,disabled:Ae.disabled,onClick:Ae.onClick,children:Ae.action})]})]})]})}),(0,X.jsxs)(`div`,{className:`w-full md:col-span-2 md:row-start-2 [&_dt]:text-foreground-strong`,children:[(0,X.jsxs)(ID,{children:[J?v===VA?(0,X.jsx)(FD,{label:$(`panel.onboarding.thisAddress`),children:(0,X.jsx)(LD,{tone:ke.tone,text:ke.text})}):(0,X.jsx)(FD,{label:$(`panel.connection.tunnel`),children:(0,X.jsx)(LD,{tone:Hg(t?.tunnel.state??`off`),text:Ug(t?.tunnel.state??`off`)})}):(0,X.jsx)(FD,{label:$(`panel.onboarding.direct`),children:(0,X.jsx)(LD,{tone:Wg(t?.lan.state??`off`,!0),text:Gg(t?.lan.state??`off`,!0)})}),(0,X.jsx)(FD,{label:$(`panel.selfcheck.firewall`),children:(0,X.jsx)(LD,{tone:G.tone,text:G.text,detail:G.detail})})]}),me?(0,X.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed break-words ${Bg[Jk(K)]}`,children:Xk(K)}):null,t!==null&&(J?t.tunnel.state===`error`:t.lan.state===`error`)?(0,X.jsxs)(HE,{variant:`error`,children:[(0,X.jsx)(WE,{}),(0,X.jsx)(GE,{children:$(J?`panel.onboarding.relayFailed`:`panel.onboarding.lanFailed`)}),(0,X.jsx)(KE,{children:J?t.tunnel.error?$(`panel.onboarding.tunnelErrorHint`,{error:t.tunnel.error}):$(`panel.onboarding.tunnelNoStart`):t.lan.error?$(`panel.onboarding.lanErrorWithPort`,{error:t.lan.error}):$(`panel.onboarding.lanNoStart`)})]}):null]})]}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2 px-4 py-4`,children:[(0,X.jsx)(Ok,{}),v===VA?(0,X.jsx)(Bf,{variant:`primary`,disabled:s||r!==``||fe||w.trim()===``,onClick:()=>void ye(),children:$(s?`panel.onboarding.connecting`:fe?`panel.onboarding.fixFirst`:we?`panel.onboarding.fillRelayFirst`:`panel.onboarding.enterPlugin`)}):pe&&!fe?(0,X.jsx)(Bf,{variant:`primary`,onClick:ve,children:$(`panel.onboarding.enterPlugin`)}):(0,X.jsx)(Bf,{variant:`primary`,disabled:s||r!==``||fe,onClick:()=>void _e(),children:$(s?`panel.onboarding.opening`:fe?`panel.onboarding.fixFirst`:J?`panel.onboarding.connectRelay`:`panel.onboarding.openDirect`)})]})]}),(0,X.jsx)(zA,{open:E,onOpenChange:D,port:de}),(0,X.jsx)(jf,{open:P,onOpenChange:F,children:(0,X.jsxs)(Mf,{className:`w-[min(560px,92vw)] max-w-none`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.pairing.qr`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3`,children:(0,X.jsx)(`div`,{className:`flex items-center justify-center rounded-md bg-white p-4`,children:Oe?(0,X.jsx)(`div`,{className:`size-[min(70vh,440px)] [&_svg]:h-full [&_svg]:w-full`,dangerouslySetInnerHTML:{__html:Oe}}):null})})})]})}),(0,X.jsx)(jf,{open:I,onOpenChange:L,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.relayListTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[S.some(e=>e.ms===null)?(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.probing`)}):null,(0,X.jsx)(`div`,{className:`max-h-[360px] overflow-y-auto`,children:(0,X.jsxs)(mk,{className:`gap-1`,value:b,onValueChange:e=>x(String(e)),children:[(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(sk,{value:``,"aria-label":$(`panel.onboarding.autoBest`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground`,children:$(`panel.onboarding.autoBest`)})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:$(`panel.onboarding.autoBestHint`)})]}),S.map(e=>(0,X.jsxs)(`label`,{className:`flex cursor-pointer flex-wrap items-baseline justify-between gap-x-3`,children:[(0,X.jsxs)(`span`,{className:`flex items-baseline gap-1.5`,children:[(0,X.jsx)(sk,{value:e.url,"aria-label":e.url}),(0,X.jsx)(`span`,{className:`font-mono text-xs text-foreground`,children:e.url})]}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.ms===null?$(`panel.onboarding.probing`):Number.isFinite(e.ms)?`${e.ms} ms`:$(`panel.onboarding.probeUnreachable`)})]},e.url))]})})]}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>L(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:R,onOpenChange:z,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.relayAddressHint`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,X.jsx)(VO,{inputProps:{id:`ob-own-relay`,className:`font-mono`},value:w,placeholder:$(`panel.onboarding.relayPlaceholder`),onChange:e=>q(e.target.value)})}),(0,X.jsx)(Bf,{className:`shrink-0`,variant:`outline`,disabled:O===`busy`,onClick:()=>void le(),children:$(O===`busy`?`panel.onboarding.probe.busy`:`panel.onboarding.check`)})]}),O===`ok`?(0,X.jsx)(`p`,{className:`text-xs text-success`,children:$(`panel.onboarding.probe.okWithHint`)}):null,O===`failed`?(0,X.jsx)(`p`,{className:`text-xs text-error`,children:$(`panel.onboarding.probe.failedBody`)}):null]}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>z(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:B,onOpenChange:V,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.penetrationAddress`)})}),(0,X.jsx)(Ff,{children:(0,X.jsx)(VO,{inputProps:{id:`ob-penetration`,className:`font-mono`},value:W,placeholder:$(`panel.onboarding.penetrationPlaceholder`),onChange:e=>ne(e.target.value)})}),(0,X.jsx)(If,{className:`flex justify-end`,children:(0,X.jsx)(Bf,{variant:`outline`,onClick:()=>V(!1),children:$(`panel.common.close`)})})]})}),(0,X.jsx)(jf,{open:M,onOpenChange:N,children:(0,X.jsxs)(Mf,{className:`max-w-md`,closeLabel:$(`panel.common.close`),children:[(0,X.jsx)(Nf,{children:(0,X.jsx)(Pf,{children:$(`panel.onboarding.lanDialogTitle`)})}),(0,X.jsxs)(Ff,{className:`flex flex-col gap-2`,children:[(0,X.jsx)(`p`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.lanDialogHint`)}),(0,X.jsx)(`div`,{role:`radiogroup`,"aria-label":$(`panel.onboarding.lanGroupA11y`),className:`flex flex-col gap-1`,children:Se.map(e=>{let t=e.address===(h||Se[0]?.address);return(0,X.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,onClick:()=>void xe(e.address),className:`flex w-full cursor-pointer items-start gap-2.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-background-muted ${t?`bg-background-muted`:``}`,children:[(0,X.jsx)(`span`,{className:`mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border ${t?`border-primary bg-primary text-primary-foreground`:`border-border-muted`}`,"aria-hidden":`true`,children:t?(0,X.jsx)(qA,{}):null}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground`,children:e.url}),(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:e.interface??$(`panel.onboarding.lan`)})]})]},e.address)})}),je.length>0||Me.length>0?(0,X.jsxs)(`div`,{className:`mt-1 flex flex-col gap-1 border-t border-border-muted pt-3`,children:[(0,X.jsx)(`p`,{className:`text-xs font-medium text-foreground-muted`,children:$(`panel.onboarding.referenceOnly`)}),je.length>0?(0,X.jsx)(`ul`,{className:`flex flex-col gap-1`,children:je.map(e=>(0,X.jsxs)(`li`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground-strong`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.interface??$(`panel.onboarding.public`)})]},e.address))}):null,Me.length>0?(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`button`,{type:`button`,className:`flex w-full cursor-pointer items-baseline justify-between gap-3 rounded px-1 py-1 text-left hover:bg-background-muted`,"aria-expanded":A,onClick:()=>j(e=>!e),children:[(0,X.jsx)(`span`,{className:`text-xs text-foreground-muted`,children:$(`panel.onboarding.ipv6More`,{count:Me.length})}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-intense`,children:$(A?`panel.onboarding.collapse`:`panel.onboarding.expand`)})]}),A?(0,X.jsx)(`ul`,{className:`mt-1 flex flex-col gap-1`,children:Me.map(e=>(0,X.jsxs)(`li`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-3`,children:[(0,X.jsx)(`span`,{className:`min-w-0 font-mono text-xs break-all text-foreground-strong`,children:e.url}),(0,X.jsx)(`span`,{className:`shrink-0 text-xs text-foreground-muted`,children:e.interface??`IPv6`})]},e.address))}):null]}):null]}):null]})]})})]})}function qA(){return(0,X.jsx)(`svg`,{viewBox:`0 0 12 12`,className:`size-2.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`m2.5 6.2 2.2 2.3L9.5 3.7`})})}function JA(){let e=window.location.pathname.replace(/\/+$/,``),t=e.endsWith(`/setup`),n=e.endsWith(`/settings`),[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{if(t||n)return;let e=!0;return(async()=>{try{let t=await QD(`/api/relay/status`);e&&i(t.onboarded===!0||t.enabled===!0)}catch{e&&i(!0)}})(),()=>{e=!1}},[t,n]),n?(0,X.jsx)(NA,{}):t?a?(0,X.jsx)(NA,{}):(0,X.jsx)(KA,{onDone:()=>o(!0)}):r===null?(0,X.jsxs)(`main`,{className:`flex min-h-screen items-center justify-center gap-2 p-6 text-sm text-foreground-muted`,children:[(0,X.jsx)(PE,{}),$(`panel.shell.loading`)]}):!r&&!a?(0,X.jsx)(KA,{onDone:()=>o(!0)}):(0,X.jsx)(NA,{})}function YA(){return qg(),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(JA,{}),(0,X.jsx)(r_,{}),(0,X.jsx)(pp,{})]})}var XA=`dsh-mobile-panel-theme`,ZA=document.createElement(`script`);ZA.textContent=dd({storageKey:XA}),document.head.appendChild(ZA),(0,Ed.createRoot)(document.getElementById(`root`)).render((0,X.jsx)(g.StrictMode,{children:(0,X.jsx)(zu,{children:(0,X.jsxs)(xd,{storageKey:XA,children:[(0,X.jsx)(YA,{}),(0,X.jsx)(Bu,{position:`top-right`})]})})}));</script>
30
30
  <style>/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
31
31
  @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:"";--gradient-glow-rotation:0deg;--border-beam-angle:0deg}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-xs:var(--radius-xs);--radius-sm:var(--radius-sm);--radius-md:var(--radius-md);--radius-lg:var(--radius-lg);--radius-xl:var(--radius-xl);--radius-2xl:var(--radius-2xl);--radius-3xl:var(--radius-3xl);--radius-4xl:var(--radius-4xl);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:var(--radius);--color-border-intense:var(--border-intense);--radius-4xs:var(--radius-4xs);--radius-3xs:var(--radius-3xs);--radius-2xs:var(--radius-2xs);--opacity-disabled:var(--opacity-disabled)}}@layer base{@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}:focus-visible{outline-style:var(--tw-outline-style);outline-width:3px}::selection{background-color:var(--selection-color)}body{background-color:var(--background);min-height:100dvh;color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.skeleton-shimmer{position:relative;overflow:hidden}.skeleton-shimmer:after{content:"";background:linear-gradient(90deg, transparent, var(--skeleton-highlight,currentColor), transparent);position:absolute;inset:0;transform:translate(-100%)}@supports (color:color-mix(in lab, red, red)){.skeleton-shimmer:after{background:linear-gradient(90deg, transparent, var(--skeleton-highlight,color-mix(in oklab, currentColor 12%, transparent)), transparent)}}.skeleton-shimmer:after{animation:1.6s ease-in-out infinite skeleton-shimmer}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.inset-s-0{inset-inline-start:0}.end-6{inset-inline-end:calc(var(--spacing) * 6)}.inset-e-0{inset-inline-end:0}.inset-e-3{inset-inline-end:calc(var(--spacing) * 3)}.top-0{top:0}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-6{top:calc(var(--spacing) * 6)}.top-px{top:1px}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-6{bottom:calc(var(--spacing) * 6)}.bottom-px{bottom:1px}.left-0{left:0}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing) * 4)}.isolate{isolation:isolate}.-z-10{z-index:calc(10 * -1)}.z-0{z-index:0}.z-1{z-index:1}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[80\]{z-index:80}.z-\[calc\(1000-var\(--toast-index\)\)\]{z-index:calc(1000 - var(--toast-index))}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-0\.5{margin:calc(var(--spacing) * -.5)}.m-0\.5{margin:calc(var(--spacing) * .5)}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-mx-5{margin-inline:calc(var(--spacing) * -5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.-ms-0\.5{margin-inline-start:calc(var(--spacing) * -.5)}.-ms-1{margin-inline-start:calc(var(--spacing) * -1)}.-ms-2\.5{margin-inline-start:calc(var(--spacing) * -2.5)}.-ms-3{margin-inline-start:calc(var(--spacing) * -3)}.-ms-3\.5{margin-inline-start:calc(var(--spacing) * -3.5)}.-ms-4{margin-inline-start:calc(var(--spacing) * -4)}.ms-0{margin-inline-start:0}.ms-3{margin-inline-start:calc(var(--spacing) * 3)}.ms-auto{margin-inline-start:auto}.-me-0\.5{margin-inline-end:calc(var(--spacing) * -.5)}.-me-1{margin-inline-end:calc(var(--spacing) * -1)}.-me-1\.25{margin-inline-end:calc(var(--spacing) * -1.25)}.-me-1\.75{margin-inline-end:calc(var(--spacing) * -1.75)}.-me-2\.5{margin-inline-end:calc(var(--spacing) * -2.5)}.-me-2\.25{margin-inline-end:calc(var(--spacing) * -2.25)}.-me-3{margin-inline-end:calc(var(--spacing) * -3)}.-me-3\.5{margin-inline-end:calc(var(--spacing) * -3.5)}.me-0\.5{margin-inline-end:calc(var(--spacing) * .5)}.me-3{margin-inline-end:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.-mt-4{margin-top:calc(var(--spacing) * -4)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-auto{margin-top:auto}.mr-1{margin-right:var(--spacing)}.-mb-3\.5{margin-bottom:calc(var(--spacing) * -3.5)}.-mb-5{margin-bottom:calc(var(--spacing) * -5)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-square{aspect-ratio:1}.size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.size-\(--rating-size\){width:var(--rating-size);height:var(--rating-size)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-4\.5{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-56{width:calc(var(--spacing) * 56);height:calc(var(--spacing) * 56)}.size-\[0\.5em\]{width:.5em;height:.5em}.size-\[1\.12em\]{width:1.12em;height:1.12em}.size-\[1\.125em\]{width:1.125em;height:1.125em}.size-\[1\.778em\]{width:1.778em;height:1.778em}.size-\[1em\]{width:1em;height:1em}.size-\[18px\]{width:18px;height:18px}.size-\[30\%\]{width:30%;height:30%}.size-\[50\%\]{width:50%;height:50%}.size-\[56\%\]{width:56%;height:56%}.size-\[66\%\]{width:66%;height:66%}.size-\[280px\]{width:280px;height:280px}.size-\[min\(70vh\,440px\)\]{width:min(70vh,440px);height:min(70vh,440px)}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.\[height\:var\(--drawer-height\,auto\)\]{height:var(--drawer-height,auto)}.h-\(--accordion-panel-height\){height:var(--accordion-panel-height)}.h-\(--cell-size\){height:var(--cell-size)}.h-\(--collapsible-panel-height\){height:var(--collapsible-panel-height)}.h-\(--popup-height\){height:var(--popup-height)}.h-\(--positioner-height\){height:var(--positioner-height)}.h-\(--textarea-h\){height:var(--textarea-h)}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[0\.2em\]\!{height:.2em!important}.h-\[0\.35em\]\!{height:.35em!important}.h-\[1em\]{height:1em}.h-\[calc\(100\%\+\(--spacing\(1\)\)\)\]{height:calc(100% + (var(--spacing)))}.h-\[calc\(100dvh-1\.5rem-var\(--snap-offset\,0\)\)\]{height:calc(100dvh - 1.5rem - var(--snap-offset,0))}.h-\[calc\(100dvh-1rem\)\]{height:calc(100dvh - 1rem)}.h-\[var\(--height\)\]{height:var(--height)}.h-auto{height:auto}.h-full{height:100%}.h-lh{height:1lh}.h-px{height:1px}.max-h-\(--available-height\){max-height:var(--available-height)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[360px\]{max-height:360px}.max-h-\[calc\(100vh-13rem\)\]{max-height:calc(100vh - 13rem)}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-2{min-height:calc(var(--spacing) * 2)}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-screen{min-height:100vh}.w-\(--active-tab-width\){width:var(--active-tab-width)}.w-\(--anchor-width\){width:var(--anchor-width)}.w-\(--popup-width\){width:var(--popup-width)}.w-\(--positioner-width\){width:var(--positioner-width)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-7\.5{width:calc(var(--spacing) * 7.5)}.w-8{width:calc(var(--spacing) * 8)}.w-9\.5{width:calc(var(--spacing) * 9.5)}.w-10{width:calc(var(--spacing) * 10)}.w-11\.5{width:calc(var(--spacing) * 11.5)}.w-12{width:calc(var(--spacing) * 12)}.w-18{width:calc(var(--spacing) * 18)}.w-24{width:calc(var(--spacing) * 24)}.w-30{width:calc(var(--spacing) * 30)}.w-35{width:calc(var(--spacing) * 35)}.w-90{width:calc(var(--spacing) * 90)}.w-96{width:calc(var(--spacing) * 96)}.w-100{width:calc(var(--spacing) * 100)}.w-150{width:calc(var(--spacing) * 150)}.w-\[0\.8em\]\!{width:.8em!important}.w-\[1\.4em\]\!{width:1.4em!important}.w-\[calc\(100\%-var\(--border-width\)\*2\)\]{width:calc(100% - var(--border-width) * 2)}.w-\[calc\(var\(--anchor-width\)\+1rem\)\]{width:calc(var(--anchor-width) + 1rem)}.w-\[min\(560px\,92vw\)\]{width:min(560px,92vw)}.w-\[min\(860px\,92vw\)\]{width:min(860px,92vw)}.w-\[min\(1100px\,92vw\)\]{width:min(1100px,92vw)}.w-\[min\(1200px\,92vw\)\]{width:min(1200px,92vw)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--available-width\){max-width:var(--available-width)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-60{max-width:calc(var(--spacing) * 60)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[280px\]{max-width:280px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-2{min-width:calc(var(--spacing) * 2)}.min-w-3\.5{min-width:calc(var(--spacing) * 3.5)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-6\.5{min-width:calc(var(--spacing) * 6.5)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-8\.5{min-width:calc(var(--spacing) * 8.5)}.min-w-10{min-width:calc(var(--spacing) * 10)}.min-w-10\.5{min-width:calc(var(--spacing) * 10.5)}.min-w-12{min-width:calc(var(--spacing) * 12)}.min-w-15{min-width:calc(var(--spacing) * 15)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-50{min-width:calc(var(--spacing) * 50)}.min-w-56{min-width:calc(var(--spacing) * 56)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.caption-top{caption-side:top}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.origin-\(--transform-origin\){transform-origin:var(--transform-origin)}.origin-bottom{transform-origin:bottom}.origin-center{transform-origin:50%}.origin-left{transform-origin:0}.origin-right{transform-origin:100%}.origin-top{transform-origin:top}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[calc\(-50\%-2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.\[transform\:translateX\(calc\(var\(--drawer-swipe-movement-x\)\+var\(--stack-offset\)\)\)_scale\(var\(--stack-scale\)\)\]{transform:translateX(calc(var(--drawer-swipe-movement-x) + var(--stack-offset))) scale(var(--stack-scale))}.\[transform\:translateX\(calc\(var\(--drawer-swipe-movement-x\)-var\(--stack-offset\)\)\)_scale\(var\(--stack-scale\)\)\]{transform:translateX(calc(var(--drawer-swipe-movement-x) - var(--stack-offset))) scale(var(--stack-scale))}.\[transform\:translateX\(var\(--toast-swipe-movement-x\)\)_translateY\(calc\(var\(--toast-swipe-movement-y\)\+\(var\(--toast-index\)\*var\(--peek\)\)\+\(var\(--shrink\)\*var\(--height\)\)\)\)_scale\(var\(--scale\)\)\]{transform:translateX(var(--toast-swipe-movement-x)) translateY(calc(var(--toast-swipe-movement-y) + (var(--toast-index) * var(--peek)) + (var(--shrink) * var(--height)))) scale(var(--scale))}.\[transform\:translateX\(var\(--toast-swipe-movement-x\)\)_translateY\(calc\(var\(--toast-swipe-movement-y\)-\(var\(--toast-index\)\*var\(--peek\)\)-\(var\(--shrink\)\*var\(--height\)\)\)\)_scale\(var\(--scale\)\)\]{transform:translateX(var(--toast-swipe-movement-x)) translateY(calc(var(--toast-swipe-movement-y) - (var(--toast-index) * var(--peek)) - (var(--shrink) * var(--height)))) scale(var(--scale))}.\[transform\:translateY\(calc\(var\(--drawer-snap-point-offset\,0px\)\+var\(--drawer-swipe-movement-y\)\)\)\]{transform:translateY(calc(var(--drawer-snap-point-offset,0px) + var(--drawer-swipe-movement-y)))}.\[transform\:translateY\(calc\(var\(--drawer-swipe-movement-y\)\+var\(--stack-offset\)\)\)_scale\(var\(--stack-scale\)\)\]{transform:translateY(calc(var(--drawer-swipe-movement-y) + var(--stack-offset))) scale(var(--stack-scale))}.\[transform\:translateY\(calc\(var\(--drawer-swipe-movement-y\)-var\(--stack-offset\)\)\)_scale\(var\(--stack-scale\)\)\]{transform:translateY(calc(var(--drawer-swipe-movement-y) - var(--stack-offset))) scale(var(--stack-scale))}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform-gpu{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[toast-progress_linear_forwards\]{animation:linear forwards toast-progress}.animate-ping-paced{animation:2.5s cubic-bezier(0,0,.2,1) infinite ping-paced}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.\[scrollbar-width\:none\],.scrollbar-none{scrollbar-width:none}.list-none{list-style-type:none}.\[grid-template-columns\:auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[0fr\]{grid-template-rows:0fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-0\.75{gap:calc(var(--spacing) * .75)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-1\.25{gap:calc(var(--spacing) * 1.25)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-4\.5{gap:calc(var(--spacing) * 4.5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-\[3\%\]{gap:3%}:where(.-space-y-\(--border-width\)>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--border-width) * -1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--border-width) * -1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\(--border-width\)>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--border-width) * var(--tw-space-y-reverse));margin-block-end:calc(var(--border-width) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[-0\.2em\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-.2em * var(--tw-space-y-reverse));margin-block-end:calc(-.2em * calc(1 - var(--tw-space-y-reverse)))}.gap-x-0{column-gap:0}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}:where(.-space-x-\(--border-width\)>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--border-width) * -1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--border-width) * -1) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-\(--border-width\)>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(var(--border-width) * var(--tw-space-x-reverse));margin-inline-end:calc(var(--border-width) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-\[-0\.2em\]>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-.2em * var(--tw-space-x-reverse));margin-inline-end:calc(-.2em * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-center{align-self:center}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:var(--radius)}.rounded-\(--card-radius\){border-radius:var(--card-radius)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-2xs{border-radius:var(--radius-2xs)}.rounded-3xs{border-radius:var(--radius-3xs)}.rounded-4xs{border-radius:var(--radius-4xs)}.rounded-\[2px\]{border-radius:2px}.rounded-\[3px\]{border-radius:3px}.rounded-\[calc\(tan\(atan2\(var\(--radius-3xs\)\,1rem\)\)\*100\%\)\]{border-radius:calc(tan(atan2(var(--radius-3xs), 1rem)) * 100%)}.rounded-\[calc\(tan\(atan2\(var\(--radius-md\)\,2\.5rem\)\)\*100\%\)\]{border-radius:calc(tan(atan2(var(--radius-md), 2.5rem)) * 100%)}.rounded-\[calc\(tan\(atan2\(var\(--radius-sm\)\,2rem\)\)\*100\%\)\]{border-radius:calc(tan(atan2(var(--radius-sm), 2rem)) * 100%)}.rounded-\[calc\(var\(--card-radius\)\*4\/3\)\]{border-radius:calc(var(--card-radius) * 4 / 3)}.rounded-\[calc\(var\(--radius-2xl\)\*5\/6\)\]{border-radius:calc(var(--radius-2xl) * 5 / 6)}.rounded-\[calc\(var\(--radius-xs\)-0\.0625rem\)\]{border-radius:calc(var(--radius-xs) - .0625rem)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-s-md{border-start-start-radius:var(--radius-md);border-end-start-radius:var(--radius-md)}.rounded-s-sm{border-start-start-radius:var(--radius-sm);border-end-start-radius:var(--radius-sm)}.rounded-s-xs{border-start-start-radius:var(--radius-xs);border-end-start-radius:var(--radius-xs)}.rounded-e-md{border-start-end-radius:var(--radius-md);border-end-end-radius:var(--radius-md)}.rounded-e-sm{border-start-end-radius:var(--radius-sm);border-end-end-radius:var(--radius-sm)}.rounded-e-xs{border-start-end-radius:var(--radius-xs);border-end-end-radius:var(--radius-xs)}.rounded-t-\[min\(var\(--radius-3xs\)\,35\%\)\]{border-top-left-radius:min(var(--radius-3xs), 35%);border-top-right-radius:min(var(--radius-3xs), 35%)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-\[inherit\]{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.rounded-b-\[min\(var\(--radius-3xs\)\,35\%\)\]{border-bottom-right-radius:min(var(--radius-3xs), 35%);border-bottom-left-radius:min(var(--radius-3xs), 35%)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:var(--border-width)}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-3{border-style:var(--tw-border-style);border-width:3px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:var(--border-width)}.border-t{border-top-style:var(--tw-border-style);border-top-width:var(--border-width)}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--border-width)}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-double{--tw-border-style:double;border-style:double}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--border)}.border-border-inverse{border-color:var(--border-inverse)}.border-border-muted{border-color:var(--border-muted)}.border-border-overlay{border-color:var(--border-overlay)}.border-border-strong{border-color:var(--border-strong)}.border-current{border-color:currentColor}.border-error-soft{border-color:var(--error-soft)}.border-info-soft{border-color:var(--info-soft)}.border-primary{border-color:var(--primary)}.border-primary-soft{border-color:var(--primary-soft)}.border-secondary-soft{border-color:var(--secondary-soft)}.border-success-soft{border-color:var(--success-soft)}.border-transparent{border-color:#0000}.border-warning-soft{border-color:var(--warning-soft)}.border-white{border-color:var(--color-white)}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.border-white\/25{border-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.border-white\/25{border-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.bg-\(--progress-color\){background-color:var(--progress-color)}.bg-\(--sparkline-color\){background-color:var(--sparkline-color)}.bg-background{background-color:var(--background)}.bg-background-inverse{background-color:var(--background-inverse)}.bg-background-muted,.bg-background-muted\/60{background-color:var(--background-muted)}@supports (color:color-mix(in lab, red, red)){.bg-background-muted\/60{background-color:color-mix(in oklab, var(--background-muted) 60%, transparent)}}.bg-background-strong{background-color:var(--background-strong)}.bg-background-subtle{background-color:var(--background-subtle)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-border{background-color:var(--border)}.bg-border-strong{background-color:var(--border-strong)}.bg-current,.bg-current\/5{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/5{background-color:color-mix(in oklab, currentcolor 5%, transparent)}}.bg-current\/9{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/9{background-color:color-mix(in oklab, currentcolor 9%, transparent)}}.bg-current\/10{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/10{background-color:color-mix(in oklab, currentcolor 10%, transparent)}}.bg-current\/12{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/12{background-color:color-mix(in oklab, currentcolor 12%, transparent)}}.bg-current\/14{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/14{background-color:color-mix(in oklab, currentcolor 14%, transparent)}}.bg-current\/32{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/32{background-color:color-mix(in oklab, currentcolor 32%, transparent)}}.bg-current\/62{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.bg-current\/62{background-color:color-mix(in oklab, currentcolor 62%, transparent)}}.bg-error{background-color:var(--error)}.bg-error-emphasis{background-color:var(--error-emphasis)}.bg-error-muted{background-color:var(--error-muted)}.bg-error-subtle{background-color:var(--error-subtle)}.bg-foreground-intense{background-color:var(--foreground-intense)}.bg-foreground-subtle{background-color:var(--foreground-subtle)}.bg-info-muted{background-color:var(--info-muted)}.bg-info-subtle{background-color:var(--info-subtle)}.bg-primary{background-color:var(--primary)}.bg-primary-foreground{background-color:var(--primary-foreground)}.bg-primary-subtle{background-color:var(--primary-subtle)}.bg-secondary{background-color:var(--secondary)}.bg-secondary-muted{background-color:var(--secondary-muted)}.bg-secondary-subtle{background-color:var(--secondary-subtle)}.bg-success{background-color:var(--success)}.bg-success-emphasis{background-color:var(--success-emphasis)}.bg-success-muted{background-color:var(--success-muted)}.bg-success-subtle{background-color:var(--success-subtle)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--warning)}.bg-warning-emphasis{background-color:var(--warning-emphasis)}.bg-warning-muted{background-color:var(--warning-muted)}.bg-warning-subtle{background-color:var(--warning-subtle)}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/25{background-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.bg-white\/25{background-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.mask-intersect{-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;-webkit-mask-composite:source-in;mask-composite:intersect}.mask-no-repeat{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fill-background-inverse{fill:var(--background-inverse)}.stroke-background-strong{stroke:var(--background-strong)}.stroke-border{stroke:var(--border)}.stroke-border-strong{stroke:var(--border-strong)}.stroke-primary{stroke:var(--primary)}.stroke-white{stroke:var(--color-white)}.stroke-white\/25{stroke:#ffffff40}@supports (color:color-mix(in lab, red, red)){.stroke-white\/25{stroke:color-mix(in oklab, var(--color-white) 25%, transparent)}}.stroke-0{stroke-width:0}.stroke-2{stroke-width:2px}.stroke-4\!{stroke-width:4px!important}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-1\.25{padding:calc(var(--spacing) * 1.25)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-\[calc\(var\(--rating-size\)\/6\)\]{padding:calc(var(--rating-size) / 6)}.p-px{padding:1px}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-1\.25{padding-inline:calc(var(--spacing) * 1.25)}.px-1\.75{padding-inline:calc(var(--spacing) * 1.75)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-4\.5{padding-inline:calc(var(--spacing) * 4.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-5\.5{padding-inline:calc(var(--spacing) * 5.5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[calc\(var\(--cell-size\)\+0\.5rem\)\]{padding-inline:calc(var(--cell-size) + .5rem)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.ps-4{padding-inline-start:calc(var(--spacing) * 4)}.ps-4\!{padding-inline-start:calc(var(--spacing) * 4)!important}.ps-7{padding-inline-start:calc(var(--spacing) * 7)}.ps-10{padding-inline-start:calc(var(--spacing) * 10)}.ps-13{padding-inline-start:calc(var(--spacing) * 13)}.ps-16{padding-inline-start:calc(var(--spacing) * 16)}.pe-4\!{padding-inline-end:calc(var(--spacing) * 4)!important}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-4\!{padding-top:calc(var(--spacing) * 4)!important}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-1\.25{padding-bottom:calc(var(--spacing) * 1.25)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-3\.5{padding-bottom:calc(var(--spacing) * 3.5)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-4\!{padding-bottom:calc(var(--spacing) * 4)!important}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:1.5rem;line-height:var(--tw-leading,1.875rem)}.text-base{font-size:1rem;line-height:var(--tw-leading,1.5rem)}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,1.625rem)}.text-sm{font-size:.875rem;line-height:var(--tw-leading,1.25rem)}.text-xl{font-size:1.25rem;line-height:var(--tw-leading,1.75rem)}.text-xs{font-size:.75rem;line-height:var(--tw-leading,1rem)}.text-\[\.625rem\]{font-size:.625rem}.text-\[0\.4em\]{font-size:.4em}.text-\[0\.8em\]{font-size:.8em}.text-\[1\.5rem\]{font-size:1.5rem}.text-\[1\.25rem\]{font-size:1.25rem}.text-\[1rem\]{font-size:1rem}.text-\[2\.5rem\]{font-size:2.5rem}.text-\[2rem\]{font-size:2rem}.text-\[3rem\]{font-size:3rem}.text-\[4rem\]{font-size:4rem}.text-\[5rem\]{font-size:5rem}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\(--pattern-color\){color:var(--pattern-color)}.text-background{color:var(--background)}.text-background-muted{color:var(--background-muted)}.text-border{color:var(--border)}.text-border-overlay{color:var(--border-overlay)}.text-border-strong{color:var(--border-strong)}.text-current,.text-current\/20{color:currentColor}@supports (color:color-mix(in lab, red, red)){.text-current\/20{color:color-mix(in oklab, currentcolor 20%, transparent)}}.text-error{color:var(--error)}.text-error-emphasis{color:var(--error-emphasis)}.text-error-foreground{color:var(--error-foreground)}.text-foreground{color:var(--foreground)}.text-foreground-emphasis{color:var(--foreground-emphasis)}.text-foreground-intense{color:var(--foreground-intense)}.text-foreground-inverse{color:var(--foreground-inverse)}.text-foreground-muted{color:var(--foreground-muted)}.text-foreground-strong{color:var(--foreground-strong)}.text-foreground-subtle{color:var(--foreground-subtle)}.text-info-emphasis{color:var(--info-emphasis)}.text-info-foreground{color:var(--info-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-primary-soft{color:var(--primary-soft)}.text-secondary-emphasis{color:var(--secondary-emphasis)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-success{color:var(--success)}.text-success-emphasis{color:var(--success-emphasis)}.text-success-foreground{color:var(--success-foreground)}.text-warning{color:var(--warning)}.text-warning-emphasis{color:var(--warning-emphasis)}.text-warning-foreground{color:var(--warning-foreground)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.caret-transparent{caret-color:#0000}.opacity-\(--gradient-glow-opacity\){opacity:var(--gradient-glow-opacity)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-100{opacity:1}.opacity-\[calc\(1-var\(--drawer-swipe-progress\)\)\]{opacity:calc(1 - var(--drawer-swipe-progress))}.opacity-disabled{opacity:var(--opacity-disabled)}.shadow-2xl{--tw-shadow:0 24px 32px -12px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[-24px_0_32px_-12px_var\(--shadow-color\)\]{--tw-shadow:-24px 0 32px -12px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_-8px_16px_-4px_var\(--shadow-color\)\]{--tw-shadow:0 -8px 16px -4px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_-24px_32px_-12px_var\(--shadow-color\)\]{--tw-shadow:0 -24px 32px -12px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[24px_0_32px_-12px_var\(--shadow-color\)\]{--tw-shadow:24px 0 32px -12px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 8px 16px -4px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 8px -2px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 2px 8px -2px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 4px 0 var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.inset-ring-1{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-background{--tw-ring-color:var(--background)}.ring-black\/20{--tw-ring-color:#0003}@supports (color:color-mix(in lab, red, red)){.ring-black\/20{--tw-ring-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.ring-border{--tw-ring-color:var(--border)}.inset-ring-black\/20{--tw-inset-ring-color:#0003}@supports (color:color-mix(in lab, red, red)){.inset-ring-black\/20{--tw-inset-ring-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-offset-1{outline-offset:1px}.outline-offset-2{outline-offset:2px}.outline-ring{outline-color:var(--focus-ring)}.outline-ring-error{outline-color:var(--focus-ring-error)}.outline-ring-info{outline-color:var(--focus-ring-info)}.outline-ring-input{outline-color:var(--focus-ring-input)}.outline-ring-light{outline-color:var(--focus-ring-light)}.outline-ring-primary{outline-color:var(--focus-ring-primary)}.outline-ring-secondary{outline-color:var(--focus-ring-secondary)}.outline-ring-success{outline-color:var(--focus-ring-success)}.outline-ring-warning{outline-color:var(--focus-ring-warning)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-lg{--tw-blur:blur(var(--blur-lg));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-md{--tw-blur:blur(var(--blur-md));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-sm{--tw-blur:blur(var(--blur-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-xl{--tw-blur:blur(var(--blur-xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background-color\,border-color\,box-shadow\]{transition-property:background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,color\]{transition-property:opacity,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,filter\]{transition-property:opacity,filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,scale\]{transition-property:opacity,scale;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,translate\,scale\]{transition-property:opacity,translate,scale;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[stroke-dashoffset\]{transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,border-radius\]{transition-property:transform,border-radius;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[translate\,width\,height\]{transition-property:translate,width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,background-color\]{transition-property:width,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,opacity\]{transition-property:width,height,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-150{transition-delay:.15s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-\[300ms\,250ms\,250ms\]{--tw-duration:.3s,.25s,.25s;transition-duration:.3s,.25s,.25s}.ease-\[cubic-bezier\(0\.32\,0\.72\,0\,1\)\]{--tw-ease:cubic-bezier(.32,.72,0,1);transition-timing-function:cubic-bezier(.32,.72,0,1)}.ease-\[cubic-bezier\(0\.65\,0\,0\.35\,1\)\]{--tw-ease:cubic-bezier(.65,0,.35,1);transition-timing-function:cubic-bezier(.65,0,.35,1)}.ease-\[cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\]{--tw-ease:cubic-bezier(.175,.885,.32,1.5);transition-timing-function:cubic-bezier(.175,.885,.32,1.5)}.ease-\[ease-out\,cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\,cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\]{--tw-ease:ease-out,cubic-bezier(.175,.885,.32,1.5),cubic-bezier(.175,.885,.32,1.5);transition-timing-function:ease-out,cubic-bezier(.175,.885,.32,1.5),cubic-bezier(.175,.885,.32,1.5)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.forced-color-adjust-none{forced-color-adjust:none}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[--card-radius\:var\(--radius-xl\)\]{--card-radius:var(--radius-xl)}.\[--cell-size\:--spacing\(6\)\]{--cell-size:calc(var(--spacing) * 6)}.\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--spacing) * 8)}.\[--cell-size\:--spacing\(10\)\]{--cell-size:calc(var(--spacing) * 10)}.\[--gap\:0\.75rem\]{--gap:.75rem}.\[--gradient-glow-opacity\:1\]{--gradient-glow-opacity:1}.\[--height\:var\(--toast-frontmost-height\,var\(--toast-height\)\)\]{--height:var(--toast-frontmost-height,var(--toast-height))}.\[--indent-transition\:calc\(1-clamp\(0\,calc\(var\(--drawer-swipe-progress\)\*100000\)\,1\)\)\]{--indent-transition:calc(1 - clamp(0, calc(var(--drawer-swipe-progress) * 100000), 1))}.\[--offset-y\:calc\(var\(--toast-offset-y\)\*-1\+calc\(var\(--toast-index\)\*var\(--gap\)\*-1\)\+var\(--toast-swipe-movement-y\)\)\]{--offset-y:calc(var(--toast-offset-y) * -1 + calc(var(--toast-index) * var(--gap) * -1) + var(--toast-swipe-movement-y))}.\[--offset-y\:calc\(var\(--toast-offset-y\)\+\(var\(--toast-index\)\*var\(--gap\)\)\+var\(--toast-swipe-movement-y\)\)\]{--offset-y:calc(var(--toast-offset-y) + (var(--toast-index) * var(--gap)) + var(--toast-swipe-movement-y))}.\[--pattern-color\:var\(--color-border-intense\)\]{--pattern-color:var(--color-border-intense)}.\[--pattern-highlight\:var\(--spotlight-size\)\]{--pattern-highlight:var(--spotlight-size)}.\[--peek\:0\.75rem\]{--peek:.75rem}.\[--scale\:calc\(max\(0\,1-\(var\(--toast-index\)\*0\.1\)\)\)\]{--scale:calc(max(0, 1 - (var(--toast-index) * .1)))}.\[--shrink\:calc\(1-var\(--scale\)\)\]{--shrink:calc(1 - var(--scale))}.\[--snap-offset\:var\(--drawer-snap-point-offset\,0px\)\]{--snap-offset:var(--drawer-snap-point-offset,0px)}.\[--spotlight-size\:200px\]{--spotlight-size:200px}.\[--stack-count\:max\(0\,calc\(var\(--nested-drawers\,0\)-var\(--stack-progress\)\)\)\]{--stack-count:max(0, calc(var(--nested-drawers,0) - var(--stack-progress)))}.\[--stack-extent\:25rem\]{--stack-extent:25rem}.\[--stack-extent\:var\(--drawer-frontmost-height\,var\(--drawer-height\,0px\)\)\]{--stack-extent:var(--drawer-frontmost-height,var(--drawer-height,0px))}.\[--stack-offset\:calc\(var\(--stack-peek\)\+var\(--stack-shrink\)\*var\(--stack-extent\)\)\]{--stack-offset:calc(var(--stack-peek) + var(--stack-shrink) * var(--stack-extent))}.\[--stack-peek\:calc\(var\(--stack-count\)\*1\.5rem\)\]{--stack-peek:calc(var(--stack-count) * 1.5rem)}.\[--stack-progress\:clamp\(0\,var\(--drawer-swipe-progress\,0\)\,1\)\]{--stack-progress:clamp(0, var(--drawer-swipe-progress,0), 1)}.\[--stack-scale\:clamp\(0\,calc\(1-var\(--stack-step\)\*var\(--stack-count\)\)\,1\)\]{--stack-scale:clamp(0, calc(1 - var(--stack-step) * var(--stack-count)), 1)}.\[--stack-shrink\:calc\(1-var\(--stack-scale\)\)\]{--stack-shrink:calc(1 - var(--stack-scale))}.\[--stack-step\:0\.05\]{--stack-step:.05}.\[animation-play-state\:paused\]{animation-play-state:paused}.\[animation-play-state\:running\]{animation-play-state:running}.\[grid-area\:actions\]{grid-area:actions}.\[grid-area\:close\]{grid-area:close}.\[grid-area\:description\]{grid-area:description}.\[grid-area\:icon\]{grid-area:icon}.\[grid-area\:title\]{grid-area:title}.\[grid-template-areas\:\'icon_title_close\'\]{grid-template-areas:"icon title close"}.\[grid-template-areas\:\'icon_title_close\'_\'\._description_\.\'_\'\._actions_actions\'\]{grid-template-areas:"icon title close"".description."".actions actions"}.\[stroke-dasharray\:2\.5_2\]{stroke-dasharray:2.5 2}.\[stroke-dashoffset\:1\.02\]{stroke-dashoffset:1.02px}.\[transition\:opacity_500ms_ease-out\,scale_150ms_ease-out\,translate_150ms_ease-out\]{transition:opacity .5s ease-out,scale .15s ease-out,translate .15s ease-out}.\[transition\:scale_150ms_ease-out\,translate_150ms_ease-out\]{transition:scale .15s ease-out,translate .15s ease-out}.\[transition\:transform_0\.5s_cubic-bezier\(0\.22\,1\,0\.36\,1\)\,opacity_0\.5s\,height_0\.15s\]{transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s,height .15s}.ring-inset{--tw-ring-inset:inset}:is(.\*\:relative>*){position:relative}:is(.\*\:size-full>*){width:100%;height:100%}:is(.\*\:shrink-0>*){flex-shrink:0}:is(.\*\:\[grid-area\:1\/1\]>*){grid-area:1/1}.not-placeholder-shown\:text-transparent:not(:placeholder-shown){color:#0000}.not-placeholder-shown\:caret-transparent:not(:placeholder-shown){caret-color:#0000}.not-has-\[\>\[data-slot\=alert-dialog-footer\]\]\:pb-6:not(:has(>[data-slot=alert-dialog-footer])){padding-bottom:calc(var(--spacing) * 6)}.not-has-\[\>\[data-slot\=alert-dialog-header\]\]\:pt-6:not(:has(>[data-slot=alert-dialog-header])){padding-top:calc(var(--spacing) * 6)}.not-has-\[\>\[data-slot\=dialog-footer\]\]\:pb-6:not(:has(>[data-slot=dialog-footer])){padding-bottom:calc(var(--spacing) * 6)}.not-has-\[\>\[data-slot\=dialog-header\]\]\:pt-6:not(:has(>[data-slot=dialog-header])){padding-top:calc(var(--spacing) * 6)}.not-has-\[\>\[data-slot\=drawer-footer\]\]\:pb-6:not(:has(>[data-slot=drawer-footer])){padding-bottom:calc(var(--spacing) * 6)}.not-has-\[\>\[data-slot\=drawer-header\]\]\:pt-6:not(:has(>[data-slot=drawer-header])){padding-top:calc(var(--spacing) * 6)}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.group-focus-within\:scale-110:is(:where(.group):focus-within *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-focus-within\:scale-125:is(:where(.group):focus-within *){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-125:is(:where(.group):hover *){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\/beam\:opacity-100:is(:where(.group\/beam):hover *){opacity:1}.group-hover\/beam\:\[animation-play-state\:running\]:is(:where(.group\/beam):hover *){animation-play-state:running}.group-hover\/chip\:opacity-100:is(:where(.group\/chip):hover *){opacity:1}.group-hover\/glow\:opacity-\(--gradient-glow-opacity\):is(:where(.group\/glow):hover *){opacity:var(--gradient-glow-opacity)}.group-hover\/glow\:\[animation-play-state\:running\]:is(:where(.group\/glow):hover *){animation-play-state:running}}.group-active\/beam\:translate-y-px:is(:where(.group\/beam):active *){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-active\/beam\:scale-\[0\.97\]:is(:where(.group\/beam):active *){scale:.97}.group-active\/beam\:opacity-100:is(:where(.group\/beam):active *){opacity:1}.group-active\/beam\:\[animation-play-state\:running\]:is(:where(.group\/beam):active *){animation-play-state:running}.group-active\/color-control\:scale-125:is(:where(.group\/color-control):active *){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-active\/glow\:translate-y-px:is(:where(.group\/glow):active *){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-active\/glow\:scale-\[0\.97\]:is(:where(.group\/glow):active *){scale:.97}.group-active\/glow\:opacity-\(--gradient-glow-opacity\):is(:where(.group\/glow):active *){opacity:var(--gradient-glow-opacity)}.group-active\/glow\:\[animation-play-state\:running\]:is(:where(.group\/glow):active *){animation-play-state:running}.group-active\/trigger\:translate-y-px:is(:where(.group\/trigger):active *){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-active\/trigger\:scale-\[0\.97\]:is(:where(.group\/trigger):active *){scale:.97}.group-active\/trigger\:duration-100:is(:where(.group\/trigger):active *){--tw-duration:.1s;transition-duration:.1s}.group-active\/trigger\:ease-in-out:is(:where(.group\/trigger):active *){--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pe-2:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-inline-end:calc(var(--spacing) * 2)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pe-2\.5:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-inline-end:calc(var(--spacing) * 2.5)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pe-3:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-inline-end:calc(var(--spacing) * 3)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pt-1:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-top:var(--spacing)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pt-1\.5:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-top:calc(var(--spacing) * 1.5)}.group-has-data-\[slot\=combobox-chip\]\/combobox-chips\:pt-2\.5:is(:where(.group\/combobox-chips):has([data-slot=combobox-chip]) *){padding-top:calc(var(--spacing) * 2.5)}.group-data-checked\/check\:opacity-100:is(:where(.group\/check)[data-checked] *){opacity:1}.group-data-checked\/check\:\[stroke-dashoffset\:0\]:is(:where(.group\/check)[data-checked] *){stroke-dashoffset:0}.group-data-copied\/copy\:scale-50:is(:where(.group\/copy)[data-copied] *){--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-copied\/copy\:opacity-0:is(:where(.group\/copy)[data-copied] *){opacity:0}.group-data-copied\/copy\:delay-0:is(:where(.group\/copy)[data-copied] *){transition-delay:0s}.group-data-copied\/copy\:delay-100:is(:where(.group\/copy)[data-copied] *){transition-delay:.1s}.group-data-copied\/copy\:duration-350:is(:where(.group\/copy)[data-copied] *){--tw-duration:.35s;transition-duration:.35s}.group-data-copied\/copy\:ease-out:is(:where(.group\/copy)[data-copied] *){--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.group-data-copied\/copy\:\[stroke-dashoffset\:0\]:is(:where(.group\/copy)[data-copied] *){stroke-dashoffset:0}.group-data-disabled\/color-control\:border:is(:where(.group\/color-control)[data-disabled] *){border-style:var(--tw-border-style);border-width:var(--border-width)}.group-data-disabled\/color-control\:border-dashed:is(:where(.group\/color-control)[data-disabled] *){--tw-border-style:dashed;border-style:dashed}.group-data-disabled\/color-control\:ring-0:is(:where(.group\/color-control)[data-disabled] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-disabled\/submenu-trigger\:pointer-events-none:is(:where(.group\/submenu-trigger)[data-disabled] *){pointer-events:none}.group-data-disabled\/submenu-trigger\:opacity-disabled:is(:where(.group\/submenu-trigger)[data-disabled] *){opacity:var(--opacity-disabled)}.group-data-dragging\/color-control\:scale-125:is(:where(.group\/color-control)[data-dragging] *){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-empty\/autocomplete-content\:block:is(:where(.group\/autocomplete-content)[data-empty] *),.group-data-empty\/combobox-content\:block:is(:where(.group\/combobox-content)[data-empty] *){display:block}.group-data-expanded\/toast\:\[animation-play-state\:paused\]:is(:where(.group\/toast)[data-expanded] *){animation-play-state:paused}.group-data-highlighted\/submenu-trigger\:not-data-disabled\:text-foreground-intense:is(:where(.group\/submenu-trigger)[data-highlighted] *):not([data-disabled]){color:var(--foreground-intense)}.group-data-inset\/card\:rounded-\[calc\(var\(--card-radius\)\*3\/4\)\]:is(:where(.group\/card)[data-inset] *){border-radius:calc(var(--card-radius) * 3 / 4)}.group-data-inset\/card\:px-4:is(:where(.group\/card)[data-inset] *){padding-inline:calc(var(--spacing) * 4)}.group-data-inset\/card\:pb-4:is(:where(.group\/card)[data-inset] *){padding-bottom:calc(var(--spacing) * 4)}.group-data-nested\/alert-dialog-popup\:rounded-none:is(:where(.group\/alert-dialog-popup)[data-nested] *){border-radius:0}.group-data-nested\/alert-dialog-popup\:bg-transparent:is(:where(.group\/alert-dialog-popup)[data-nested] *){background-color:#0000}.group-data-open\/accordion-item\:rotate-90:is(:where(.group\/accordion-item)[data-open] *){rotate:90deg}.group-data-open\/accordion-item\:rotate-180:is(:where(.group\/accordion-item)[data-open] *),.group-data-popup-open\/autocomplete-icon\:rotate-180:is(:where(.group\/autocomplete-icon)[data-popup-open] *),.group-data-popup-open\/combobox-toggle\:rotate-180:is(:where(.group\/combobox-toggle)[data-popup-open] *),.group-data-popup-open\/combobox-trigger\:rotate-180:is(:where(.group\/combobox-trigger)[data-popup-open] *){rotate:180deg}.group-data-popup-open\/navigation-menu-icon\:rotate-90:is(:where(.group\/navigation-menu-icon)[data-popup-open] *){rotate:90deg}.group-data-popup-open\/navigation-menu-icon\:rotate-180:is(:where(.group\/navigation-menu-icon)[data-popup-open] *){rotate:180deg}.group-data-popup-open\/submenu-trigger\:not-data-disabled\:text-foreground-intense:is(:where(.group\/submenu-trigger)[data-popup-open] *):not([data-disabled]){color:var(--foreground-intense)}.group-data-selected\/check\:opacity-100:is(:where(.group\/check)[data-selected] *){opacity:1}.group-data-selected\/check\:\[stroke-dashoffset\:0\]:is(:where(.group\/check)[data-selected] *){stroke-dashoffset:0}.group-data-\[side\=bottom\]\/popup\:border-t-2:is(:where(.group\/popup)[data-side=bottom] *){border-top-style:var(--tw-border-style);border-top-width:2px}.group-data-\[side\=inline-end\]\/popup\:border-s-2:is(:where(.group\/popup)[data-side=inline-end] *){border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.group-data-\[side\=inline-start\]\/popup\:border-e-2:is(:where(.group\/popup)[data-side=inline-start] *){border-inline-end-style:var(--tw-border-style);border-inline-end-width:2px}.group-data-\[side\=left\]\/popup\:border-r-2:is(:where(.group\/popup)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:2px}.group-data-\[side\=right\]\/popup\:border-l-2:is(:where(.group\/popup)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:2px}.group-data-\[side\=top\]\/popup\:border-b-2:is(:where(.group\/popup)[data-side=top] *){border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.peer-not-placeholder-shown\:pointer-events-auto:is(:where(.peer):not(:placeholder-shown)~*){pointer-events:auto}.peer-not-placeholder-shown\:opacity-100:is(:where(.peer):not(:placeholder-shown)~*){opacity:1}.peer-placeholder-shown\:invisible:is(:where(.peer):placeholder-shown~*){visibility:hidden}.marker\:content-none ::marker{--tw-content:none;content:none}.marker\:content-none::marker{--tw-content:none;content:none}.marker\:content-none ::-webkit-details-marker{--tw-content:none;content:none}.marker\:content-none::-webkit-details-marker{--tw-content:none;content:none}.placeholder\:text-foreground-subtle::placeholder{color:var(--foreground-subtle)}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);inset:0}.before\:-inset-s-px:before{content:var(--tw-content);inset-inline-start:-1px}.before\:inset-s-1\.5:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing) * 1.5)}.before\:inset-e-1\.5:before{content:var(--tw-content);inset-inline-end:calc(var(--spacing) * 1.5)}.before\:top-\(--toc-indicator-top\):before{content:var(--tw-content);top:var(--toc-indicator-top)}.before\:top-1\.5:before{content:var(--tw-content);top:calc(var(--spacing) * 1.5)}.before\:top-1\/2:before{content:var(--tw-content);top:50%}.before\:bottom-1\.5:before{content:var(--tw-content);bottom:calc(var(--spacing) * 1.5)}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:-z-1:before{content:var(--tw-content);z-index:calc(1 * -1)}.before\:-z-10:before{content:var(--tw-content);z-index:calc(10 * -1)}.before\:h-\(--toc-indicator-height\):before{content:var(--tw-content);height:var(--toc-indicator-height)}.before\:h-1:before{content:var(--tw-content);height:var(--spacing)}.before\:h-11\.5:before{content:var(--tw-content);height:calc(var(--spacing) * 11.5)}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.before\:w-1:before{content:var(--tw-content);width:var(--spacing)}.before\:w-11\.5:before{content:var(--tw-content);width:calc(var(--spacing) * 11.5)}.before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.before\:-translate-y-1\/2:before{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.before\:rounded-\[inherit\]:before{content:var(--tw-content);border-radius:inherit}.before\:rounded-full:before{content:var(--tw-content);border-radius:2147483647px}.before\:border:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:var(--border-width)}.before\:border-border:before{content:var(--tw-content);border-color:var(--border)}.before\:border-primary:before{content:var(--tw-content);border-color:var(--primary)}.before\:border-transparent:before{content:var(--tw-content);border-color:#0000}.before\:border-white\/10:before{content:var(--tw-content);border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.before\:border-white\/10:before{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.before\:bg-background:before{content:var(--tw-content);background-color:var(--background)}.before\:bg-background-muted:before{content:var(--tw-content);background-color:var(--background-muted)}.before\:bg-background-strong:before{content:var(--tw-content);background-color:var(--background-strong)}.before\:bg-foreground-intense:before{content:var(--tw-content);background-color:var(--foreground-intense)}.before\:bg-primary:before{content:var(--tw-content);background-color:var(--primary)}.before\:bg-white\/10:before{content:var(--tw-content);background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.before\:bg-white\/10:before{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--error\)_0\%\,var\(--error-muted\)_95\%\)\]:before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--error) 0%,var(--error-muted) 95%)}.before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--primary\)_0\%\,var\(--primary-muted\)_80\%\)\]:before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--primary) 0%,var(--primary-muted) 80%)}.before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--secondary\)_0\%\,var\(--secondary-muted\)_95\%\)\]:before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--secondary) 0%,var(--secondary-muted) 95%)}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:opacity-0\!:before{content:var(--tw-content);opacity:0!important}.before\:opacity-100:before{content:var(--tw-content);opacity:1}.before\:backdrop-blur-md:before{content:var(--tw-content);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.before\:transition-\[opacity\,background-color\,border-color\]:before{content:var(--tw-content);transition-property:opacity,background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.before\:transition-\[top\,height\,opacity\]:before{content:var(--tw-content);transition-property:top,height,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.before\:transition-all:before{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.before\:transition-colors:before{content:var(--tw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.before\:transition-opacity:before{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.before\:duration-250:before{content:var(--tw-content);--tw-duration:.25s;transition-duration:.25s}.before\:duration-300:before{content:var(--tw-content);--tw-duration:.3s;transition-duration:.3s}.before\:ease-out:before{content:var(--tw-content);--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.group-hover\/trigger\:before\:bg-background-subtle:is(:where(.group\/trigger):hover *):before{content:var(--tw-content);background-color:var(--background-subtle)}}.group-data-highlighted\/submenu-trigger\:not-data-disabled\:before\:bg-background-muted:is(:where(.group\/submenu-trigger)[data-highlighted] *):not([data-disabled]):before,.group-data-popup-open\/submenu-trigger\:not-data-disabled\:before\:bg-background-muted:is(:where(.group\/submenu-trigger)[data-popup-open] *):not([data-disabled]):before{content:var(--tw-content);background-color:var(--background-muted)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-full:after{content:var(--tw-content);top:100%}.after\:bottom-full:after{content:var(--tw-content);bottom:100%}.after\:left-0:after{content:var(--tw-content);left:0}.after\:h-\[calc\(var\(--gap\)\+1px\)\]:after{content:var(--tw-content);height:calc(var(--gap) + 1px)}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:rounded-full:after{content:var(--tw-content);border-radius:2147483647px}.after\:\[background-image\:linear-gradient\(0deg\,currentColor\,currentColor\)\]:after{content:var(--tw-content);background-image:linear-gradient(currentColor,currentColor)}.after\:bg-no-repeat:after{content:var(--tw-content);background-repeat:no-repeat}.after\:transition-\[background-size\]:after{content:var(--tw-content);transition-property:background-size;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:duration-300:after{content:var(--tw-content);--tw-duration:.3s;transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-border:hover{border-color:var(--border)}.hover\:border-transparent:hover{border-color:#0000}.hover\:bg-background-muted:hover{background-color:var(--background-muted)}.hover\:font-medium:hover{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-foreground-intense:hover{color:var(--foreground-intense)}.hover\:text-foreground-strong:hover{color:var(--foreground-strong)}.hover\:text-primary-foreground:hover{color:var(--primary-foreground)}.hover\:opacity-100:hover{opacity:1}:is(.\*\:hover\:z-2>*):hover{z-index:2}.hover\:not-data-checked\:not-data-disabled\:not-data-invalid\:border-border-emphasis:hover:not([data-checked]):not([data-disabled]):not([data-invalid]),.hover\:not-data-checked\:not-data-indeterminate\:not-data-disabled\:not-data-invalid\:border-border-emphasis:hover:not([data-checked]):not([data-indeterminate]):not([data-disabled]):not([data-invalid]){border-color:var(--border-emphasis)}.hover\:not-focus\:not-focus-visible\:not-has-focus\:not-has-focus-visible\:not-data-popup-open\:not-has-data-popup-open\:not-data-pressed\:not-has-data-pressed\:not-data-invalid\:not-has-data-invalid\:border-border-emphasis:hover:not(:focus):not(:focus-visible):not(:has(:focus)):not(:has(:focus-visible)):not([data-popup-open]):not(:has([data-popup-open])):not([data-pressed]):not(:has([data-pressed])):not([data-invalid]):not(:has([data-invalid])){border-color:var(--border-emphasis)}.hover\:not-focus\:not-focus-visible\:not-has-focus\:not-has-focus-visible\:not-data-popup-open\:not-has-data-popup-open\:not-data-pressed\:not-has-data-pressed\:not-data-invalid\:not-has-data-invalid\:border-border-strong:hover:not(:focus):not(:focus-visible):not(:has(:focus)):not(:has(:focus-visible)):not([data-popup-open]):not(:has([data-popup-open])):not([data-pressed]):not(:has([data-pressed])):not([data-invalid]):not(:has([data-invalid])){border-color:var(--border-strong)}.hover\:before\:border-border:hover:before{content:var(--tw-content);border-color:var(--border)}.hover\:before\:border-border-strong:hover:before{content:var(--tw-content);border-color:var(--border-strong)}.hover\:before\:border-white\/15:hover:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\:before\:border-white\/15:hover:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.hover\:before\:bg-background-muted:hover:before{content:var(--tw-content);background-color:var(--background-muted)}.hover\:before\:bg-background-subtle:hover:before{content:var(--tw-content);background-color:var(--background-subtle)}.hover\:before\:bg-primary:hover:before{content:var(--tw-content);background-color:var(--primary)}.hover\:before\:bg-transparent:hover:before{content:var(--tw-content);background-color:#0000}.hover\:before\:bg-white\/15:hover:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\:before\:bg-white\/15:hover:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.hover\:before\:opacity-100:hover:before{content:var(--tw-content);opacity:1}}.focus\:bg-\(--selection-color\):focus{background-color:var(--selection-color)}.focus\:placeholder\:text-transparent:focus::placeholder{color:#0000}.focus-visible\:border-transparent:focus-visible{border-color:#0000}.focus-visible\:border-transparent\!:focus-visible{border-color:#0000!important}.focus-visible\:bg-background:focus-visible{background-color:var(--background)}.focus-visible\:text-foreground-intense:focus-visible{color:var(--foreground-intense)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--focus-ring)}.focus-visible\:ring-ring-input:focus-visible{--tw-ring-color:var(--focus-ring-input)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-3:focus-visible{outline-style:var(--tw-outline-style);outline-width:3px}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}:is(.\*\:focus-visible\:z-2>*):focus-visible{z-index:2}.focus-visible\:before\:bg-background-muted:focus-visible:before{content:var(--tw-content);background-color:var(--background-muted)}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:scale-\[0\.97\]:active{scale:.97}.active\:scale-\[0\.98\]:active{scale:.98}.active\:duration-100:active{--tw-duration:.1s;transition-duration:.1s}.active\:duration-\[300ms\,100ms\,100ms\]:active{--tw-duration:.3s,.1s,.1s;transition-duration:.3s,.1s,.1s}.active\:ease-\[ease-out\,ease-in-out\,ease-in-out\]:active{--tw-ease:ease-out,ease-in-out,ease-in-out;transition-timing-function:ease-out,ease-in-out,ease-in-out}.active\:ease-in-out:active{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}:is(.\*\:active\:z-2>*):active{z-index:2}.not-data-popup-open\:active\:translate-y-px:not([data-popup-open]):active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.not-data-popup-open\:active\:scale-\[0\.97\]:not([data-popup-open]):active{scale:.97}.not-data-popup-open\:active\:duration-100:not([data-popup-open]):active{--tw-duration:.1s;transition-duration:.1s}.not-data-popup-open\:active\:ease-in-out:not([data-popup-open]):active{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-disabled:disabled{opacity:var(--opacity-disabled)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:rounded-md{border-radius:var(--radius-md)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:rounded-sm{border-radius:var(--radius-sm)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:rounded-xs{border-radius:var(--radius-xs)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:px-3{padding-inline:calc(var(--spacing) * 3)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:py-1\.5{padding-block:calc(var(--spacing) * 1.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:py-2{padding-block:calc(var(--spacing) * 2)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:py-2\.5{padding-block:calc(var(--spacing) * 2.5)}:where([data-slot=tooltip-content]) .in-data-\[slot\=tooltip-content\]\:border-white\/25{border-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .in-data-\[slot\=tooltip-content\]\:border-white\/25{border-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}:where([data-slot=tooltip-content]) .in-data-\[slot\=tooltip-content\]\:bg-background-inverse{background-color:var(--background-inverse)}:where([data-slot=tooltip-content]) .in-data-\[slot\=tooltip-content\]\:text-foreground-inverse\/75{color:var(--foreground-inverse)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .in-data-\[slot\=tooltip-content\]\:text-foreground-inverse\/75{color:color-mix(in oklab, var(--foreground-inverse) 75%, transparent)}}.has-focus\:border-transparent:has(:focus){border-color:#0000}.has-focus\:bg-background:has(:focus){background-color:var(--background)}.has-focus\:ring-\[3px\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-focus\:ring-ring-input:has(:focus){--tw-ring-color:var(--focus-ring-input)}.has-focus-visible\:ring-3:has(:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-focus-visible\:ring-ring:has(:focus-visible){--tw-ring-color:var(--focus-ring)}.has-focus-visible\:outline-3:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:3px}.has-data-empty\:py-0:has([data-empty]){padding-block:0}.has-data-invalid\:border-error:has([data-invalid]){border-color:var(--error)}.has-data-invalid\:bg-error-subtle:has([data-invalid]){background-color:var(--error-subtle)}.has-data-invalid\:has-focus\:border-transparent:has([data-invalid]):has(:focus){border-color:#0000}.has-data-invalid\:has-focus\:bg-background:has([data-invalid]):has(:focus){background-color:var(--background)}.has-data-invalid\:has-focus\:ring-ring-error:has([data-invalid]):has(:focus){--tw-ring-color:var(--focus-ring-error)}.has-data-popup-open\:border-transparent:has([data-popup-open]){border-color:#0000}.has-data-popup-open\:bg-background:has([data-popup-open]){background-color:var(--background)}.has-data-popup-open\:ring-3:has([data-popup-open]){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-data-popup-open\:ring-ring-input:has([data-popup-open]){--tw-ring-color:var(--focus-ring-input)}.has-data-invalid\:has-data-popup-open\:border-transparent:has([data-invalid]):has([data-popup-open]){border-color:#0000}.has-data-invalid\:has-data-popup-open\:bg-background:has([data-invalid]):has([data-popup-open]){background-color:var(--background)}.has-data-invalid\:has-data-popup-open\:ring-ring-error:has([data-invalid]):has([data-popup-open]){--tw-ring-color:var(--focus-ring-error)}.has-data-pressed\:border-transparent:has([data-pressed]){border-color:#0000}.has-data-pressed\:bg-background:has([data-pressed]){background-color:var(--background)}.has-data-pressed\:ring-3:has([data-pressed]){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.has-data-pressed\:ring-ring-input:has([data-pressed]){--tw-ring-color:var(--focus-ring-input)}.has-data-invalid\:has-data-pressed\:border-transparent:has([data-invalid]):has([data-pressed]){border-color:#0000}.has-data-invalid\:has-data-pressed\:bg-background:has([data-invalid]):has([data-pressed]){background-color:var(--background)}.has-data-invalid\:has-data-pressed\:ring-ring-error:has([data-invalid]):has([data-pressed]){--tw-ring-color:var(--focus-ring-error)}.has-data-\[icon\=end\]\:pe-1:has([data-icon=end]){padding-inline-end:var(--spacing)}.has-data-\[icon\=end\]\:pe-1\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 1.5)}.has-data-\[icon\=end\]\:pe-1\.25:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 1.25)}.has-data-\[icon\=end\]\:pe-1\.75:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 1.75)}.has-data-\[icon\=end\]\:pe-2:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2)}.has-data-\[icon\=end\]\:pe-2\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2.5)}.has-data-\[icon\=end\]\:pe-2\.25:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2.25)}.has-data-\[icon\=end\]\:pe-3:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 3)}.has-data-\[icon\=end\]\:pe-3\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 3.5)}.has-data-\[icon\=end\]\:pe-4:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 4)}.has-data-\[icon\=end\]\:pe-4\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 4.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-1\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 1.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-2:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-2\.5:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2.5)}.has-data-\[icon\=start\]\:ps-1:has([data-icon=start]){padding-inline-start:var(--spacing)}.has-data-\[icon\=start\]\:ps-1\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 1.5)}.has-data-\[icon\=start\]\:ps-1\.25:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 1.25)}.has-data-\[icon\=start\]\:ps-1\.75:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 1.75)}.has-data-\[icon\=start\]\:ps-2:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2)}.has-data-\[icon\=start\]\:ps-2\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2.5)}.has-data-\[icon\=start\]\:ps-2\.25:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2.25)}.has-data-\[icon\=start\]\:ps-3:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 3)}.has-data-\[icon\=start\]\:ps-3\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 3.5)}.has-data-\[icon\=start\]\:ps-4:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 4)}.has-data-\[icon\=start\]\:ps-4\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 4.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-1\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 1.5)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-2:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2)}:where([aria-orientation=vertical]) .in-aria-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-2\.5:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2.5)}.has-data-\[slot\=combobox-chip\]\:h-auto:has([data-slot=combobox-chip]){height:auto}.has-data-\[slot\=combobox-chip\]\:min-h-8:has([data-slot=combobox-chip]){min-height:calc(var(--spacing) * 8)}.has-data-\[slot\=combobox-chip\]\:min-h-10:has([data-slot=combobox-chip]){min-height:calc(var(--spacing) * 10)}.has-data-\[slot\=combobox-chip\]\:min-h-12:has([data-slot=combobox-chip]){min-height:calc(var(--spacing) * 12)}.has-data-\[slot\=combobox-chip\]\:flex-wrap:has([data-slot=combobox-chip]){flex-wrap:wrap}.has-data-\[slot\=combobox-chip\]\:items-start:has([data-slot=combobox-chip]){align-items:flex-start}.has-data-\[slot\=combobox-chip\]\:p-1:has([data-slot=combobox-chip]){padding:var(--spacing)}.has-data-\[slot\=toast-actions\]\:not-has-data-\[slot\=toast-description\]\:\[grid-template-areas\:\'icon_title_close\'_\'icon_actions_actions\'\]:has([data-slot=toast-actions]):not(:has([data-slot=toast-description])){grid-template-areas:"icon title close""icon actions actions"}.has-data-\[slot\=toast-description\]\:\[grid-template-areas\:\'icon_title_close\'_\'icon_description_close\'\]:has([data-slot=toast-description]){grid-template-areas:"icon title close""icon description close"}.has-data-\[slot\=toast-actions\]\:has-data-\[slot\=toast-description\]\:\[grid-template-areas\:\'icon_title_close\'_\'icon_description_close\'_\'icon_actions_actions\'\]:has([data-slot=toast-actions]):has([data-slot=toast-description]){grid-template-areas:"icon title close""icon description close""icon actions actions"}.has-data-\[slot\=toast-icon\]\:gap-x-3:has([data-slot=toast-icon]){column-gap:calc(var(--spacing) * 3)}.has-\[\[data-slot\=field-error\]\:not\(\[data-starting-style\]\)\:not\(\[data-ending-style\]\)\]\:grid-rows-\[1fr\]:has([data-slot=field-error]:not([data-starting-style]):not([data-ending-style])){grid-template-rows:1fr}.has-\[input\:disabled\]\:cursor-not-allowed:has(:is(input:disabled)){cursor:not-allowed}.has-\[input\:disabled\]\:border-dashed:has(:is(input:disabled)){--tw-border-style:dashed;border-style:dashed}.has-\[input\:disabled\]\:border-border-strong\!:has(:is(input:disabled)){border-color:var(--border-strong)!important}.has-\[input\:disabled\]\:bg-background-subtle\!:has(:is(input:disabled)){background-color:var(--background-subtle)!important}.has-\[input\:disabled\]\:opacity-disabled:has(:is(input:disabled)){opacity:var(--opacity-disabled)}.has-\[svg\]\:text-\[1em\]:has(:is(svg)){font-size:1em}.has-\[textarea\:disabled\]\:cursor-not-allowed:has(:is(textarea:disabled)){cursor:not-allowed}.has-\[textarea\:disabled\]\:border-dashed:has(:is(textarea:disabled)){--tw-border-style:dashed;border-style:dashed}.has-\[textarea\:disabled\]\:border-border-strong\!:has(:is(textarea:disabled)){border-color:var(--border-strong)!important}.has-\[textarea\:disabled\]\:bg-background-subtle\!:has(:is(textarea:disabled)){background-color:var(--background-subtle)!important}.has-\[textarea\:disabled\]\:opacity-disabled:has(:is(textarea:disabled)){opacity:var(--opacity-disabled)}.has-\[\>svg\]\:h-lh:has(>svg){height:1lh}.data-active\:pointer-events-none[data-active]{pointer-events:none}.data-active\:transform-\[scale\(calc\(0\.95\+0\.03\*var\(--drawer-swipe-progress\)\)\)\][data-active]{transform:scale(calc(.95 + .03 * var(--drawer-swipe-progress)))}.data-active\:rounded-2xl[data-active]{border-radius:var(--radius-2xl)}.data-active\:border[data-active]{border-style:var(--tw-border-style);border-width:var(--border-width)}.data-active\:bg-background-strong[data-active]{background-color:var(--background-strong)}.data-active\:text-black[data-active]{color:var(--color-black)}.data-active\:text-foreground-intense[data-active]{color:var(--foreground-intense)}.data-active\:before\:border-border[data-active]:before{content:var(--tw-content);border-color:var(--border)}.data-active\:before\:border-border-strong[data-active]:before{content:var(--tw-content);border-color:var(--border-strong)}.data-active\:before\:border-white\/15[data-active]:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-active\:before\:border-white\/15[data-active]:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-active\:before\:bg-background-muted[data-active]:before{content:var(--tw-content);background-color:var(--background-muted)}.data-active\:before\:bg-background-subtle[data-active]:before{content:var(--tw-content);background-color:var(--background-subtle)}.data-active\:before\:bg-white\/15[data-active]:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-active\:before\:bg-white\/15[data-active]:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-checked\:border-transparent[data-checked]{border-color:#0000}.data-checked\:bg-primary[data-checked]{background-color:var(--primary)}.data-checked\:bg-primary-foreground[data-checked]{background-color:var(--primary-foreground)}.data-checked\:outline-ring-primary[data-checked]{outline-color:var(--focus-ring-primary)}.data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.data-disabled\:cursor-default[data-disabled]{cursor:default}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:border-dashed[data-disabled]{--tw-border-style:dashed;border-style:dashed}.data-disabled\:border-border-strong\![data-disabled]{border-color:var(--border-strong)!important}.data-disabled\:bg-background-muted[data-disabled]{background-color:var(--background-muted)}.data-disabled\:bg-background-subtle\![data-disabled]{background-color:var(--background-subtle)!important}.data-disabled\:opacity-disabled[data-disabled]{opacity:var(--opacity-disabled)}.data-disabled\:not-data-checked\:border-dashed[data-disabled]:not([data-checked]){--tw-border-style:dashed;border-style:dashed}.data-disabled\:not-data-checked\:border-border-strong[data-disabled]:not([data-checked]){border-color:var(--border-strong)}.data-disabled\:not-data-checked\:bg-background-subtle[data-disabled]:not([data-checked]){background-color:var(--background-subtle)}.data-disabled\:not-data-checked\:not-data-indeterminate\:border-dashed[data-disabled]:not([data-checked]):not([data-indeterminate]){--tw-border-style:dashed;border-style:dashed}.data-disabled\:not-data-checked\:not-data-indeterminate\:bg-background-subtle[data-disabled]:not([data-checked]):not([data-indeterminate]){background-color:var(--background-subtle)}.data-disabled\:data-checked\:opacity-disabled[data-disabled][data-checked]{opacity:var(--opacity-disabled)}.data-ending-style\:h-0[data-ending-style]{height:0}.data-ending-style\:\[transform\:translateX\(calc\(-100\%-0\.5rem\)\)\][data-ending-style]{transform:translate(calc(-100% - .5rem))}.data-ending-style\:\[transform\:translateX\(calc\(100\%\+0\.5rem\)\)\][data-ending-style]{transform:translate(calc(100% + .5rem))}.data-ending-style\:\[transform\:translateY\(calc\(-100\%-0\.5rem\)\)\][data-ending-style]{transform:translateY(calc(-100% - .5rem))}.data-ending-style\:\[transform\:translateY\(calc\(100\%\+0\.5rem\)\)\][data-ending-style]{transform:translateY(calc(100% + .5rem))}.data-ending-style\:opacity-0[data-ending-style]{opacity:0}.data-expanded\:h-\[var\(--toast-height\)\][data-expanded]{height:var(--toast-height)}.data-expanded\:\[transform\:translateX\(var\(--toast-swipe-movement-x\)\)_translateY\(calc\(var\(--offset-y\)\)\)\][data-expanded]{transform:translateX(var(--toast-swipe-movement-x)) translateY(calc(var(--offset-y)))}.data-expanded\:border-white\/15[data-expanded]{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-expanded\:border-white\/15[data-expanded]{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-expanded\:bg-white\/10[data-expanded]{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.data-expanded\:bg-white\/10[data-expanded]{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.data-expanded\:p-1\.5[data-expanded]{padding:calc(var(--spacing) * 1.5)}.data-expanded\:shadow-none[data-expanded]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-expanded\:backdrop-blur-sm[data-expanded]{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.data-expanded\:before\:bg-background[data-expanded]:before{content:var(--tw-content);background-color:var(--background)}.data-highlighted\:not-data-disabled\:text-foreground-intense[data-highlighted]:not([data-disabled]){color:var(--foreground-intense)}.data-highlighted\:not-data-disabled\:before\:bg-background-muted[data-highlighted]:not([data-disabled]):before{content:var(--tw-content);background-color:var(--background-muted)}.data-highlighted\:not-data-disabled\:before\:opacity-100[data-highlighted]:not([data-disabled]):before{content:var(--tw-content);opacity:1}.data-indeterminate\:border-transparent[data-indeterminate]{border-color:#0000}.data-indeterminate\:bg-primary[data-indeterminate]{background-color:var(--primary)}.data-indeterminate\:outline-ring-primary[data-indeterminate]{outline-color:var(--focus-ring-primary)}.data-disabled\:data-indeterminate\:opacity-disabled[data-disabled][data-indeterminate]{opacity:var(--opacity-disabled)}.data-invalid\:border-error[data-invalid]{border-color:var(--error)}.data-invalid\:bg-error-subtle[data-invalid]{background-color:var(--error-subtle)}.data-invalid\:outline-ring-error[data-invalid]{outline-color:var(--focus-ring-error)}.data-invalid\:not-data-checked\:bg-error-subtle[data-invalid]:not([data-checked]),.data-invalid\:not-data-checked\:not-data-indeterminate\:bg-error-subtle[data-invalid]:not([data-checked]):not([data-indeterminate]){background-color:var(--error-subtle)}.data-invalid\:focus-visible\:border-transparent[data-invalid]:focus-visible{border-color:#0000}.data-invalid\:focus-visible\:bg-background[data-invalid]:focus-visible{background-color:var(--background)}.data-invalid\:focus-visible\:ring-ring-error[data-invalid]:focus-visible{--tw-ring-color:var(--focus-ring-error)}.data-invalid\:has-focus\:border-transparent[data-invalid]:has(:focus){border-color:#0000}.data-invalid\:has-focus\:bg-background[data-invalid]:has(:focus){background-color:var(--background)}.data-invalid\:has-focus\:ring-ring-error[data-invalid]:has(:focus){--tw-ring-color:var(--focus-ring-error)}.data-invalid\:has-data-popup-open\:border-transparent[data-invalid]:has([data-popup-open]){border-color:#0000}.data-invalid\:has-data-popup-open\:bg-background[data-invalid]:has([data-popup-open]){background-color:var(--background)}.data-invalid\:has-data-popup-open\:ring-ring-error[data-invalid]:has([data-popup-open]){--tw-ring-color:var(--focus-ring-error)}.data-invalid\:has-data-pressed\:border-transparent[data-invalid]:has([data-pressed]){border-color:#0000}.data-invalid\:has-data-pressed\:bg-background[data-invalid]:has([data-pressed]){background-color:var(--background)}.data-invalid\:has-data-pressed\:ring-ring-error[data-invalid]:has([data-pressed]){--tw-ring-color:var(--focus-ring-error)}.data-limited\:opacity-0[data-limited]{opacity:0}.data-nested\:border-border-overlay[data-nested]{border-color:var(--border-overlay)}.data-nested\:bg-background[data-nested]{background-color:var(--background)}.data-nested\:p-0[data-nested]{padding:0}.data-nested\:shadow-2xl[data-nested]{--tw-shadow:0 24px 32px -12px var(--tw-shadow-color,var(--shadow-color));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-nested\:backdrop-blur-none[data-nested]{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.data-nested-dialog-open\:pointer-events-none[data-nested-dialog-open]{pointer-events:none}.data-nested-dialog-open\:scale-95[data-nested-dialog-open]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-nested-dialog-open\:opacity-0[data-nested-dialog-open]{opacity:0}.data-nested-drawer-open\:\[height\:var\(--drawer-frontmost-height\,auto\)\][data-nested-drawer-open]{height:var(--drawer-frontmost-height,auto)}.data-nested-drawer-open\:overflow-hidden[data-nested-drawer-open]{overflow:hidden}.data-nested-drawer-swiping\:duration-0[data-nested-drawer-swiping]{--tw-duration:0s;transition-duration:0s}.data-open\:border-border[data-open]{border-color:var(--border)}.data-open\:border-transparent[data-open]{border-color:#0000}.data-open\:bg-background-muted[data-open]{background-color:var(--background-muted)}.data-placeholder\:text-foreground-subtle[data-placeholder]{color:var(--foreground-subtle)}.data-popup-open\:rotate-180[data-popup-open]{rotate:180deg}.data-popup-open\:border-transparent[data-popup-open]{border-color:#0000}.data-popup-open\:bg-background[data-popup-open]{background-color:var(--background)}.data-popup-open\:text-foreground-intense[data-popup-open]{color:var(--foreground-intense)}.data-popup-open\:text-primary-foreground[data-popup-open]{color:var(--primary-foreground)}.data-popup-open\:ring-3[data-popup-open]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-popup-open\:ring-ring-input[data-popup-open]{--tw-ring-color:var(--focus-ring-input)}.data-popup-open\:before\:border-border[data-popup-open]:before{content:var(--tw-content);border-color:var(--border)}.data-popup-open\:before\:border-border-strong[data-popup-open]:before{content:var(--tw-content);border-color:var(--border-strong)}.data-popup-open\:before\:border-white\/15[data-popup-open]:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-popup-open\:before\:border-white\/15[data-popup-open]:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-popup-open\:before\:bg-background-muted[data-popup-open]:before{content:var(--tw-content);background-color:var(--background-muted)}.data-popup-open\:before\:bg-background-subtle[data-popup-open]:before{content:var(--tw-content);background-color:var(--background-subtle)}.data-popup-open\:before\:bg-primary[data-popup-open]:before{content:var(--tw-content);background-color:var(--primary)}.data-popup-open\:before\:bg-transparent[data-popup-open]:before{content:var(--tw-content);background-color:#0000}.data-popup-open\:before\:bg-white\/15[data-popup-open]:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-popup-open\:before\:bg-white\/15[data-popup-open]:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-popup-open\:before\:opacity-100[data-popup-open]:before{content:var(--tw-content);opacity:1}.data-invalid\:data-popup-open\:border-transparent[data-invalid][data-popup-open]{border-color:#0000}.data-invalid\:data-popup-open\:bg-background[data-invalid][data-popup-open]{background-color:var(--background)}.data-invalid\:data-popup-open\:ring-ring-error[data-invalid][data-popup-open]{--tw-ring-color:var(--focus-ring-error)}.data-pressed\:border-transparent[data-pressed]{border-color:#0000}.data-pressed\:bg-background[data-pressed]{background-color:var(--background)}.data-pressed\:text-foreground-intense[data-pressed]{color:var(--foreground-intense)}.data-pressed\:text-primary-foreground[data-pressed]{color:var(--primary-foreground)}.data-pressed\:ring-3[data-pressed]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-pressed\:ring-ring-input[data-pressed]{--tw-ring-color:var(--focus-ring-input)}.data-pressed\:before\:border-border[data-pressed]:before{content:var(--tw-content);border-color:var(--border)}.data-pressed\:before\:border-border-strong[data-pressed]:before{content:var(--tw-content);border-color:var(--border-strong)}.data-pressed\:before\:border-white\/15[data-pressed]:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-pressed\:before\:border-white\/15[data-pressed]:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-pressed\:before\:bg-background-muted[data-pressed]:before{content:var(--tw-content);background-color:var(--background-muted)}.data-pressed\:before\:bg-background-subtle[data-pressed]:before{content:var(--tw-content);background-color:var(--background-subtle)}.data-pressed\:before\:bg-primary[data-pressed]:before{content:var(--tw-content);background-color:var(--primary)}.data-pressed\:before\:bg-transparent[data-pressed]:before{content:var(--tw-content);background-color:#0000}.data-pressed\:before\:bg-white\/15[data-pressed]:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.data-pressed\:before\:bg-white\/15[data-pressed]:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.data-pressed\:before\:opacity-100[data-pressed]:before{content:var(--tw-content);opacity:1}.data-invalid\:data-pressed\:border-transparent[data-invalid][data-pressed]{border-color:#0000}.data-invalid\:data-pressed\:bg-background[data-invalid][data-pressed]{background-color:var(--background)}.data-invalid\:data-pressed\:ring-ring-error[data-invalid][data-pressed]{--tw-ring-color:var(--focus-ring-error)}.data-starting-style\:h-0[data-starting-style]{height:0}.data-starting-style\:\[transform\:translateX\(calc\(-100\%-0\.5rem\)\)\][data-starting-style]{transform:translate(calc(-100% - .5rem))}.data-starting-style\:\[transform\:translateX\(calc\(100\%\+0\.5rem\)\)\][data-starting-style]{transform:translate(calc(100% + .5rem))}.data-starting-style\:\[transform\:translateY\(calc\(-100\%-0\.5rem\)\)\][data-starting-style]{transform:translateY(calc(-100% - .5rem))}.data-starting-style\:\[transform\:translateY\(calc\(100\%\+0\.5rem\)\)\][data-starting-style]{transform:translateY(calc(100% + .5rem))}.data-starting-style\:opacity-0[data-starting-style]{opacity:0}.data-swiping\:duration-0[data-swiping]{--tw-duration:0s;transition-duration:0s}.data-swiping\:select-none[data-swiping]{-webkit-user-select:none;user-select:none}.data-\[ending-style\]\:hidden[data-ending-style]{display:none}.data-\[hovering\]\:pointer-events-auto[data-hovering]{pointer-events:auto}.data-\[hovering\]\:opacity-100[data-hovering]{opacity:1}.data-\[orientation\=horizontal\]\:-inset-s-14[data-orientation=horizontal]{inset-inline-start:calc(var(--spacing) * -14)}.data-\[orientation\=horizontal\]\:inset-s-0[data-orientation=horizontal]{inset-inline-start:0}.data-\[orientation\=horizontal\]\:inset-s-4[data-orientation=horizontal]{inset-inline-start:calc(var(--spacing) * 4)}.data-\[orientation\=horizontal\]\:-inset-e-14[data-orientation=horizontal]{inset-inline-end:calc(var(--spacing) * -14)}.data-\[orientation\=horizontal\]\:inset-e-0[data-orientation=horizontal]{inset-inline-end:0}.data-\[orientation\=horizontal\]\:inset-e-4[data-orientation=horizontal]{inset-inline-end:calc(var(--spacing) * 4)}.data-\[orientation\=horizontal\]\:top-0\.5[data-orientation=horizontal]{top:calc(var(--spacing) * .5)}.data-\[orientation\=horizontal\]\:top-1\/2[data-orientation=horizontal]{top:50%}.data-\[orientation\=horizontal\]\:bottom-0[data-orientation=horizontal]{bottom:0}.data-\[orientation\=horizontal\]\:bottom-full[data-orientation=horizontal]{bottom:100%}.data-\[orientation\=horizontal\]\:left-1\/2[data-orientation=horizontal]{left:50%}.data-\[orientation\=horizontal\]\:mx-\[calc\(var\(--rating-size\)\/-6\)\][data-orientation=horizontal]{margin-inline:calc(var(--rating-size) / -6)}.data-\[orientation\=horizontal\]\:my-0\.5[data-orientation=horizontal]{margin-block:calc(var(--spacing) * .5)}.data-\[orientation\=horizontal\]\:mb-1[data-orientation=horizontal]{margin-bottom:var(--spacing)}.data-\[orientation\=horizontal\]\:h-\(--border-width\)[data-orientation=horizontal]{height:var(--border-width)}.data-\[orientation\=horizontal\]\:h-0\.5[data-orientation=horizontal]{height:calc(var(--spacing) * .5)}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:calc(var(--spacing) * 1.5)}.data-\[orientation\=horizontal\]\:h-1\.25[data-orientation=horizontal]{height:calc(var(--spacing) * 1.25)}.data-\[orientation\=horizontal\]\:h-5[data-orientation=horizontal]{height:calc(var(--spacing) * 5)}.data-\[orientation\=horizontal\]\:h-\[calc\(100\%-0\.25rem\)\][data-orientation=horizontal]{height:calc(100% - .25rem)}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:w-\(--active-tab-width\)[data-orientation=horizontal]{width:var(--active-tab-width)}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=horizontal\]\:origin-bottom[data-orientation=horizontal]{transform-origin:bottom}.data-\[orientation\=horizontal\]\:-translate-x-1\/2[data-orientation=horizontal]{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:-translate-y-1\/2[data-orientation=horizontal]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal]{flex-direction:column}.data-\[orientation\=horizontal\]\:items-center[data-orientation=horizontal]{align-items:center}.data-\[orientation\=horizontal\]\:justify-center[data-orientation=horizontal]{justify-content:center}.data-\[orientation\=horizontal\]\:gap-5[data-orientation=horizontal]{gap:calc(var(--spacing) * 5)}.data-\[orientation\=horizontal\]\:gap-6[data-orientation=horizontal]{gap:calc(var(--spacing) * 6)}.data-\[orientation\=horizontal\]\:gap-7[data-orientation=horizontal]{gap:calc(var(--spacing) * 7)}.data-\[orientation\=horizontal\]\:rounded-lg[data-orientation=horizontal]{border-radius:var(--radius-lg)}.data-\[orientation\=horizontal\]\:rounded-md[data-orientation=horizontal]{border-radius:var(--radius-md)}.data-\[orientation\=horizontal\]\:rounded-sm[data-orientation=horizontal]{border-radius:var(--radius-sm)}.data-\[orientation\=horizontal\]\:border-t[data-orientation=horizontal]{border-top-style:var(--tw-border-style);border-top-width:var(--border-width)}.data-\[orientation\=horizontal\]\:border-t-\[calc\(var\(--border-width\)\*3\)\][data-orientation=horizontal]{border-top-style:var(--tw-border-style);border-top-width:calc(var(--border-width) * 3)}.data-\[orientation\=horizontal\]\:bg-\[linear-gradient\(to_right\,transparent\,currentColor_26\%\,currentColor_74\%\,transparent\)\][data-orientation=horizontal]{background-image:linear-gradient(90deg,#0000,currentColor 26% 74%,#0000)}.data-\[orientation\=horizontal\]\:px-3[data-orientation=horizontal]{padding-inline:calc(var(--spacing) * 3)}.data-\[orientation\=horizontal\]\:px-3\.5[data-orientation=horizontal]{padding-inline:calc(var(--spacing) * 3.5)}.data-\[orientation\=horizontal\]\:px-4[data-orientation=horizontal]{padding-inline:calc(var(--spacing) * 4)}.data-\[orientation\=horizontal\]\:py-2[data-orientation=horizontal]{padding-block:calc(var(--spacing) * 2)}.data-\[orientation\=horizontal\]\:py-2\.5[data-orientation=horizontal]{padding-block:calc(var(--spacing) * 2.5)}.data-\[orientation\=horizontal\]\:py-3[data-orientation=horizontal]{padding-block:calc(var(--spacing) * 3)}.data-\[orientation\=horizontal\]\:text-center[data-orientation=horizontal]{text-align:center}.data-\[orientation\=horizontal\]\:whitespace-nowrap[data-orientation=horizontal]{white-space:nowrap}.data-\[orientation\=horizontal\]\:after\:inset-x-0[data-orientation=horizontal]:after{content:var(--tw-content);inset-inline:0}.data-\[orientation\=horizontal\]\:after\:bottom-1[data-orientation=horizontal]:after{content:var(--tw-content);bottom:var(--spacing)}.data-\[orientation\=horizontal\]\:after\:bottom-1\.5[data-orientation=horizontal]:after{content:var(--tw-content);bottom:calc(var(--spacing) * 1.5)}.data-\[orientation\=horizontal\]\:after\:bottom-2[data-orientation=horizontal]:after{content:var(--tw-content);bottom:calc(var(--spacing) * 2)}.data-\[orientation\=horizontal\]\:after\:h-0\.5[data-orientation=horizontal]:after{content:var(--tw-content);height:calc(var(--spacing) * .5)}.data-\[orientation\=horizontal\]\:after\:bg-size-\[0_2px\][data-orientation=horizontal]:after{content:var(--tw-content);background-size:0 2px}@media (hover:hover){.data-\[orientation\=horizontal\]\:hover\:h-2[data-orientation=horizontal]:hover{height:calc(var(--spacing) * 2)}.hover\:data-\[orientation\=horizontal\]\:after\:bg-size-\[100\%_2px\]:hover[data-orientation=horizontal]:after{content:var(--tw-content);background-size:100% 2px}}.focus-visible\:data-\[orientation\=horizontal\]\:after\:bg-size-\[100\%_2px\]:focus-visible[data-orientation=horizontal]:after{content:var(--tw-content);background-size:100% 2px}.data-\[orientation\=horizontal\]\:has-data-\[icon\=end\]\:pe-2[data-orientation=horizontal]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2)}.data-\[orientation\=horizontal\]\:has-data-\[icon\=end\]\:pe-2\.5[data-orientation=horizontal]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2.5)}.data-\[orientation\=horizontal\]\:has-data-\[icon\=end\]\:pe-3[data-orientation=horizontal]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 3)}.data-\[orientation\=horizontal\]\:has-data-\[icon\=start\]\:ps-2[data-orientation=horizontal]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2)}.data-\[orientation\=horizontal\]\:has-data-\[icon\=start\]\:ps-2\.5[data-orientation=horizontal]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2.5)}.data-\[orientation\=horizontal\]\:has-data-\[icon\=start\]\:ps-3[data-orientation=horizontal]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 3)}.data-active\:data-\[orientation\=horizontal\]\:after\:bg-size-\[100\%_2px\][data-active][data-orientation=horizontal]:after,.data-popup-open\:data-\[orientation\=horizontal\]\:after\:bg-size-\[100\%_2px\][data-popup-open][data-orientation=horizontal]:after,.data-pressed\:data-\[orientation\=horizontal\]\:after\:bg-size-\[100\%_2px\][data-pressed][data-orientation=horizontal]:after{content:var(--tw-content);background-size:100% 2px}.data-\[orientation\=vertical\]\:inset-s-0\.5[data-orientation=vertical]{inset-inline-start:calc(var(--spacing) * .5)}.data-\[orientation\=vertical\]\:inset-s-1\/2[data-orientation=vertical]{inset-inline-start:50%}.data-\[orientation\=vertical\]\:inset-s-full[data-orientation=vertical]{inset-inline-start:100%}.data-\[orientation\=vertical\]\:-top-14[data-orientation=vertical]{top:calc(var(--spacing) * -14)}.data-\[orientation\=vertical\]\:top-0[data-orientation=vertical]{top:0}.data-\[orientation\=vertical\]\:top-1\/2[data-orientation=vertical]{top:50%}.data-\[orientation\=vertical\]\:top-4[data-orientation=vertical]{top:calc(var(--spacing) * 4)}.data-\[orientation\=vertical\]\:top-\[calc\(var\(--active-tab-height\)\/4\)\][data-orientation=vertical]{top:calc(var(--active-tab-height) / 4)}.data-\[orientation\=vertical\]\:-bottom-14[data-orientation=vertical]{bottom:calc(var(--spacing) * -14)}.data-\[orientation\=vertical\]\:bottom-\(--active-tab-bottom\)[data-orientation=vertical]{bottom:var(--active-tab-bottom)}.data-\[orientation\=vertical\]\:bottom-0[data-orientation=vertical]{bottom:0}.data-\[orientation\=vertical\]\:bottom-4[data-orientation=vertical]{bottom:calc(var(--spacing) * 4)}.data-\[orientation\=vertical\]\:mx-0\.5[data-orientation=vertical]{margin-inline:calc(var(--spacing) * .5)}.data-\[orientation\=vertical\]\:my-\[calc\(var\(--rating-size\)\/-6\)\][data-orientation=vertical]{margin-block:calc(var(--rating-size) / -6)}.data-\[orientation\=vertical\]\:ms-1[data-orientation=vertical]{margin-inline-start:var(--spacing)}.data-\[orientation\=vertical\]\:h-\(--active-tab-height\)[data-orientation=vertical]{height:var(--active-tab-height)}.data-\[orientation\=vertical\]\:h-5[data-orientation=vertical]{height:calc(var(--spacing) * 5)}.data-\[orientation\=vertical\]\:h-40[data-orientation=vertical]{height:calc(var(--spacing) * 40)}.data-\[orientation\=vertical\]\:h-\[calc\(var\(--active-tab-height\)\/2\)\][data-orientation=vertical]{height:calc(var(--active-tab-height) / 2)}.data-\[orientation\=vertical\]\:h-fit[data-orientation=vertical]{height:fit-content}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:min-h-40[data-orientation=vertical]{min-height:calc(var(--spacing) * 40)}.data-\[orientation\=vertical\]\:w-\(--border-width\)[data-orientation=vertical]{width:var(--border-width)}.data-\[orientation\=vertical\]\:w-0\.5[data-orientation=vertical]{width:calc(var(--spacing) * .5)}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:calc(var(--spacing) * 1.5)}.data-\[orientation\=vertical\]\:w-1\.25[data-orientation=vertical]{width:calc(var(--spacing) * 1.25)}.data-\[orientation\=vertical\]\:w-5[data-orientation=vertical]{width:calc(var(--spacing) * 5)}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-fit[data-orientation=vertical]{width:fit-content}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:min-w-32[data-orientation=vertical]{min-width:calc(var(--spacing) * 32)}.data-\[orientation\=vertical\]\:min-w-36[data-orientation=vertical]{min-width:calc(var(--spacing) * 36)}.data-\[orientation\=vertical\]\:min-w-40[data-orientation=vertical]{min-width:calc(var(--spacing) * 40)}.data-\[orientation\=vertical\]\:-translate-x-1\/2[data-orientation=vertical]{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=vertical\]\:-translate-y-1\/2[data-orientation=vertical]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=vertical\]\:translate-y-\(--active-tab-top\)[data-orientation=vertical]{--tw-translate-y:var(--active-tab-top);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=vertical\]\:translate-y-1\/2[data-orientation=vertical]{--tw-translate-y:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[orientation\=vertical\]\:items-stretch[data-orientation=vertical]{align-items:stretch}.data-\[orientation\=vertical\]\:justify-center[data-orientation=vertical]{justify-content:center}.data-\[orientation\=vertical\]\:self-stretch[data-orientation=vertical]{align-self:stretch}.data-\[orientation\=vertical\]\:rounded-md[data-orientation=vertical]{border-radius:var(--radius-md)}.data-\[orientation\=vertical\]\:rounded-sm[data-orientation=vertical]{border-radius:var(--radius-sm)}.data-\[orientation\=vertical\]\:rounded-xs[data-orientation=vertical]{border-radius:var(--radius-xs)}.data-\[orientation\=vertical\]\:border-l[data-orientation=vertical]{border-left-style:var(--tw-border-style);border-left-width:var(--border-width)}.data-\[orientation\=vertical\]\:border-l-\[calc\(var\(--border-width\)\*3\)\][data-orientation=vertical]{border-left-style:var(--tw-border-style);border-left-width:calc(var(--border-width) * 3)}.data-\[orientation\=vertical\]\:bg-\[linear-gradient\(to_bottom\,transparent\,currentColor_26\%\,currentColor_74\%\,transparent\)\][data-orientation=vertical]{background-image:linear-gradient(#0000,currentColor 26% 74%,#0000)}.data-\[orientation\=vertical\]\:px-2\.5[data-orientation=vertical]{padding-inline:calc(var(--spacing) * 2.5)}.data-\[orientation\=vertical\]\:px-3[data-orientation=vertical]{padding-inline:calc(var(--spacing) * 3)}.data-\[orientation\=vertical\]\:px-3\.5[data-orientation=vertical]{padding-inline:calc(var(--spacing) * 3.5)}.data-\[orientation\=vertical\]\:py-1\.5[data-orientation=vertical]{padding-block:calc(var(--spacing) * 1.5)}.data-\[orientation\=vertical\]\:py-2[data-orientation=vertical]{padding-block:calc(var(--spacing) * 2)}.data-\[orientation\=vertical\]\:py-2\.5[data-orientation=vertical]{padding-block:calc(var(--spacing) * 2.5)}.data-\[orientation\=vertical\]\:ps-2\.5[data-orientation=vertical]{padding-inline-start:calc(var(--spacing) * 2.5)}.data-\[orientation\=vertical\]\:ps-3[data-orientation=vertical]{padding-inline-start:calc(var(--spacing) * 3)}.data-\[orientation\=vertical\]\:ps-3\.5[data-orientation=vertical]{padding-inline-start:calc(var(--spacing) * 3.5)}.data-\[orientation\=vertical\]\:ps-4[data-orientation=vertical]{padding-inline-start:calc(var(--spacing) * 4)}.data-\[orientation\=vertical\]\:ps-5[data-orientation=vertical]{padding-inline-start:calc(var(--spacing) * 5)}.data-\[orientation\=vertical\]\:text-start[data-orientation=vertical]{text-align:start}.data-\[orientation\=vertical\]\:after\:inset-s-0[data-orientation=vertical]:after{content:var(--tw-content);inset-inline-start:0}.data-\[orientation\=vertical\]\:after\:top-\[25\%\][data-orientation=vertical]:after{content:var(--tw-content);top:25%}.data-\[orientation\=vertical\]\:after\:bottom-\[25\%\][data-orientation=vertical]:after{content:var(--tw-content);bottom:25%}.data-\[orientation\=vertical\]\:after\:w-0\.5[data-orientation=vertical]:after{content:var(--tw-content);width:calc(var(--spacing) * .5)}.data-\[orientation\=vertical\]\:after\:bg-size-\[2px_0\][data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 0}.data-\[orientation\=vertical\]\:after\:\[background-position-y\:bottom\][data-orientation=vertical]:after{content:var(--tw-content);background-position-y:bottom}@media (hover:hover){.data-\[orientation\=vertical\]\:hover\:w-2[data-orientation=vertical]:hover{width:calc(var(--spacing) * 2)}.hover\:data-\[orientation\=vertical\]\:after\:bg-size-\[2px_100\%\]:hover[data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 100%}.hover\:data-\[orientation\=vertical\]\:after\:\[background-position-y\:top\]:hover[data-orientation=vertical]:after{content:var(--tw-content);background-position-y:top}}.focus-visible\:data-\[orientation\=vertical\]\:after\:bg-size-\[2px_100\%\]:focus-visible[data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 100%}.focus-visible\:data-\[orientation\=vertical\]\:after\:\[background-position-y\:top\]:focus-visible[data-orientation=vertical]:after{content:var(--tw-content);background-position-y:top}.data-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-1\.5[data-orientation=vertical]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 1.5)}.data-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-2[data-orientation=vertical]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2)}.data-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-2\.5[data-orientation=vertical]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 2.5)}.data-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-3[data-orientation=vertical]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 3)}.data-\[orientation\=vertical\]\:has-data-\[icon\=end\]\:pe-4[data-orientation=vertical]:has([data-icon=end]){padding-inline-end:calc(var(--spacing) * 4)}.data-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-1\.5[data-orientation=vertical]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 1.5)}.data-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-2[data-orientation=vertical]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2)}.data-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-2\.5[data-orientation=vertical]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 2.5)}.data-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-3[data-orientation=vertical]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 3)}.data-\[orientation\=vertical\]\:has-data-\[icon\=start\]\:ps-4[data-orientation=vertical]:has([data-icon=start]){padding-inline-start:calc(var(--spacing) * 4)}.data-active\:data-\[orientation\=vertical\]\:after\:bg-size-\[2px_100\%\][data-active][data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 100%}.data-active\:data-\[orientation\=vertical\]\:after\:\[background-position-y\:top\][data-active][data-orientation=vertical]:after{content:var(--tw-content);background-position-y:top}.data-popup-open\:data-\[orientation\=vertical\]\:after\:bg-size-\[2px_100\%\][data-popup-open][data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 100%}.data-popup-open\:data-\[orientation\=vertical\]\:after\:\[background-position-y\:top\][data-popup-open][data-orientation=vertical]:after{content:var(--tw-content);background-position-y:top}.data-pressed\:data-\[orientation\=vertical\]\:after\:bg-size-\[2px_100\%\][data-pressed][data-orientation=vertical]:after{content:var(--tw-content);background-size:2px 100%}.data-pressed\:data-\[orientation\=vertical\]\:after\:\[background-position-y\:top\][data-pressed][data-orientation=vertical]:after{content:var(--tw-content);background-position-y:top}.data-\[scrolling\]\:pointer-events-auto[data-scrolling]{pointer-events:auto}.data-\[scrolling\]\:opacity-100[data-scrolling]{opacity:1}.data-\[scrolling\]\:duration-0[data-scrolling]{--tw-duration:0s;transition-duration:0s}.data-\[side\=bottom\]\:-top-2\.25[data-side=bottom]{top:calc(var(--spacing) * -2.25)}.data-\[side\=bottom\]\:top-1[data-side=bottom]{top:var(--spacing)}.data-\[side\=inline-end\]\:-inset-s-1[data-side=inline-end]{inset-inline-start:calc(var(--spacing) * -1)}.data-\[side\=inline-end\]\:-inset-s-3\.25[data-side=inline-end]{inset-inline-start:calc(var(--spacing) * -3.25)}.data-\[side\=inline-end\]\:top-1\/2\![data-side=inline-end]{top:50%!important}.data-\[side\=inline-end\]\:-translate-y-1\/2[data-side=inline-end]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=inline-start\]\:-inset-e-1[data-side=inline-start]{inset-inline-end:calc(var(--spacing) * -1)}.data-\[side\=inline-start\]\:-inset-e-3\.25[data-side=inline-start]{inset-inline-end:calc(var(--spacing) * -3.25)}.data-\[side\=inline-start\]\:top-1\/2\![data-side=inline-start]{top:50%!important}.data-\[side\=inline-start\]\:-translate-y-1\/2[data-side=inline-start]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:top-1\/2\![data-side=left]{top:50%!important}.data-\[side\=left\]\:-right-1[data-side=left]{right:calc(var(--spacing) * -1)}.data-\[side\=left\]\:-right-3\.25[data-side=left]{right:calc(var(--spacing) * -3.25)}.data-\[side\=left\]\:-translate-y-1\/2[data-side=left]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:rotate-90[data-side=left]{rotate:90deg}.data-\[side\=right\]\:top-1\/2\![data-side=right]{top:50%!important}.data-\[side\=right\]\:-left-1[data-side=right]{left:calc(var(--spacing) * -1)}.data-\[side\=right\]\:-left-3\.25[data-side=right]{left:calc(var(--spacing) * -3.25)}.data-\[side\=right\]\:-translate-y-1\/2[data-side=right]{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:-rotate-90[data-side=right]{rotate:-90deg}.data-\[side\=top\]\:-bottom-2\.5[data-side=top]{bottom:calc(var(--spacing) * -2.5)}.data-\[side\=top\]\:-bottom-2\.25[data-side=top]{bottom:calc(var(--spacing) * -2.25)}.data-\[side\=top\]\:rotate-180[data-side=top]{rotate:180deg}:is(.\*\:data-\[slot\=avatar\]\:ring-\[calc\(1em\/12\)\]>*)[data-slot=avatar]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(calc(1em / 12) + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(.\*\:data-\[slot\=avatar\]\:ring-background>*)[data-slot=avatar]{--tw-ring-color:var(--background)}.data-\[slot\=breadcrumb-link\]\:not-data-active\:text-foreground-muted[data-slot=breadcrumb-link]:not([data-active]){color:var(--foreground-muted)}@media (hover:hover){.data-\[slot\=breadcrumb-link\]\:hover\:text-foreground-intense[data-slot=breadcrumb-link]:hover{color:var(--foreground-intense)}}:is(.\*\*\:data-\[slot\=combobox-input-field\]\:px-1 *)[data-slot=combobox-input-field]{padding-inline:var(--spacing)}:is(.\*\*\:data-\[slot\=meter-label\]\:col-start-1 *)[data-slot=meter-label]{grid-column-start:1}:is(.\*\*\:data-\[slot\=meter-label\]\:row-start-1 *)[data-slot=meter-label]{grid-row-start:1}:is(.\*\*\:data-\[slot\=meter-progress\]\:col-span-2 *)[data-slot=meter-progress]{grid-column:span 2/span 2}:is(.\*\*\:data-\[slot\=meter-value\]\:col-start-2 *)[data-slot=meter-value]{grid-column-start:2}:is(.\*\*\:data-\[slot\=meter-value\]\:row-start-1 *)[data-slot=meter-value]{grid-row-start:1}:is(.\*\*\:data-\[slot\=meter-value\]\:justify-self-end *)[data-slot=meter-value]{justify-self:flex-end}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:inline-flex *)[data-slot=navigation-link-indicator]{display:inline-flex}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:w-0 *)[data-slot=navigation-link-indicator]{width:0}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:shrink-0 *)[data-slot=navigation-link-indicator]{flex-shrink:0}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:items-center *)[data-slot=navigation-link-indicator]{align-items:center}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:justify-center *)[data-slot=navigation-link-indicator]{justify-content:center}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:overflow-hidden *)[data-slot=navigation-link-indicator]{overflow:hidden}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:opacity-0 *)[data-slot=navigation-link-indicator]{opacity:0}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:transition-\[width\,opacity\] *)[data-slot=navigation-link-indicator]{transition-property:width,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:duration-250 *)[data-slot=navigation-link-indicator]{--tw-duration:.25s;transition-duration:.25s}:is(.\*\*\:data-\[slot\=navigation-link-indicator\]\:ease-out *)[data-slot=navigation-link-indicator]{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){:is(.hover\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4:hover *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4)}:is(.hover\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4\.5:hover *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4.5)}:is(.hover\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-5:hover *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 5)}:is(.hover\:\*\*\:data-\[slot\=navigation-link-indicator\]\:opacity-100:hover *)[data-slot=navigation-link-indicator]{opacity:1}}:is(.focus-visible\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4:focus-visible *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4)}:is(.focus-visible\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4\.5:focus-visible *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4.5)}:is(.focus-visible\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-5:focus-visible *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 5)}:is(.focus-visible\:\*\*\:data-\[slot\=navigation-link-indicator\]\:opacity-100:focus-visible *)[data-slot=navigation-link-indicator]{opacity:1}:is(.data-active\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4[data-active] *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4)}:is(.data-active\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-4\.5[data-active] *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 4.5)}:is(.data-active\:\*\*\:data-\[slot\=navigation-link-indicator\]\:w-5[data-active] *)[data-slot=navigation-link-indicator]{width:calc(var(--spacing) * 5)}:is(.data-active\:\*\*\:data-\[slot\=navigation-link-indicator\]\:opacity-100[data-active] *)[data-slot=navigation-link-indicator]{opacity:1}:is(.\*\*\:data-\[slot\=navigation-link-label\]\:min-w-0 *)[data-slot=navigation-link-label]{min-width:0}:is(.\*\*\:data-\[slot\=navigation-link-label\]\:flex-1 *)[data-slot=navigation-link-label]{flex:1}:is(.\*\*\:data-\[slot\=navigation-link-label\]\:truncate *)[data-slot=navigation-link-label]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}.data-\[variant\=bar\]\:grid-cols-\[1fr_auto\][data-variant=bar]{grid-template-columns:1fr auto}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-label\]\:col-start-1[data-variant=bar] *)[data-slot=progress-label]{grid-column-start:1}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-label\]\:row-start-1[data-variant=bar] *)[data-slot=progress-label]{grid-row-start:1}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-track\]\:col-span-2[data-variant=bar] *)[data-slot=progress-track]{grid-column:span 2/span 2}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-value\]\:col-start-2[data-variant=bar] *)[data-slot=progress-value]{grid-column-start:2}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-value\]\:row-start-1[data-variant=bar] *)[data-slot=progress-value]{grid-row-start:1}:is(.data-\[variant\=bar\]\:\*\*\:data-\[slot\=progress-value\]\:justify-self-end[data-variant=bar] *)[data-slot=progress-value]{justify-self:flex-end}.data-\[variant\=circular\]\:w-fit[data-variant=circular]{width:fit-content}.data-\[variant\=circular\]\:justify-items-center[data-variant=circular]{justify-items:center}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-circular\]\:col-start-1[data-variant=circular] *)[data-slot=progress-circular]{grid-column-start:1}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-circular\]\:row-start-1[data-variant=circular] *)[data-slot=progress-circular]{grid-row-start:1}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-label\]\:row-start-2[data-variant=circular] *)[data-slot=progress-label]{grid-row-start:2}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-value\]\:col-start-1[data-variant=circular] *)[data-slot=progress-value]{grid-column-start:1}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-value\]\:row-start-1[data-variant=circular] *)[data-slot=progress-value]{grid-row-start:1}:is(.data-\[variant\=circular\]\:\*\*\:data-\[slot\=progress-value\]\:place-self-center[data-variant=circular] *)[data-slot=progress-value]{place-self:center}@supports (-webkit-touch-callout:none){.supports-\[-webkit-touch-callout\:none\]\:absolute{position:absolute}}@supports (font:-apple-system-body){.supports-\[font\:-apple-system-body\]\:before\:hidden:before{content:var(--tw-content);display:none}}@media (prefers-reduced-motion:no-preference){.motion-safe\:origin-\(--transform-origin\):not([data-disable-animations] *){transform-origin:var(--transform-origin)}.motion-safe\:animate-pulse:not([data-disable-animations] *){animation:var(--animate-pulse)}.motion-safe\:animate-text-caret:not([data-disable-animations] *){animation:1s step-end infinite text-caret}.motion-safe\:transition:not([data-disable-animations] *){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[grid-template-rows\]:not([data-disable-animations] *){transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[height\]:not([data-disable-animations] *){transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[left\,top\]:not([data-disable-animations] *){transition-property:left,top;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[left\]:not([data-disable-animations] *){transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[opacity\,scale\]:not([data-disable-animations] *){transition-property:opacity,scale;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[opacity\,stroke-dashoffset\]:not([data-disable-animations] *){transition-property:opacity,stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[opacity\,translate\]:not([data-disable-animations] *){transition-property:opacity,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[scale\]:not([data-disable-animations] *){transition-property:scale;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[stroke-dashoffset\]:not([data-disable-animations] *){transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[top\,left\,right\,bottom\]:not([data-disable-animations] *){transition-property:top,left,right,bottom;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[transform\,height\]:not([data-disable-animations] *){transition-property:transform,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[translate\,width\,height\]:not([data-disable-animations] *){transition-property:translate,width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[width\,height\,background-color\]:not([data-disable-animations] *){transition-property:width,height,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-\[width\]:not([data-disable-animations] *){transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-all:not([data-disable-animations] *){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-colors:not([data-disable-animations] *){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-opacity:not([data-disable-animations] *){transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:transition-transform:not([data-disable-animations] *){transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:delay-\[0ms\,150ms\]:not([data-disable-animations] *){transition-delay:0s,.15s}.motion-safe\:duration-150:not([data-disable-animations] *){--tw-duration:.15s;transition-duration:.15s}.motion-safe\:duration-200:not([data-disable-animations] *){--tw-duration:.2s;transition-duration:.2s}.motion-safe\:duration-250:not([data-disable-animations] *){--tw-duration:.25s;transition-duration:.25s}.motion-safe\:duration-300:not([data-disable-animations] *){--tw-duration:.3s;transition-duration:.3s}.motion-safe\:duration-350:not([data-disable-animations] *){--tw-duration:.35s;transition-duration:.35s}.motion-safe\:duration-400:not([data-disable-animations] *){--tw-duration:.4s;transition-duration:.4s}.motion-safe\:duration-\[150ms\,0ms\]:not([data-disable-animations] *){--tw-duration:.15s,0s;transition-duration:.15s,0s}.motion-safe\:duration-\[calc\(var\(--indent-transition\)\*400ms\)\]:not([data-disable-animations] *){--tw-duration:calc(var(--indent-transition) * .4s);transition-duration:calc(var(--indent-transition) * .4s)}.motion-safe\:ease-\[cubic-bezier\(0\.22\,1\,0\.36\,1\)\]:not([data-disable-animations] *){--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.motion-safe\:ease-\[cubic-bezier\(0\.32\,1\.2\,0\.4\,1\)\]:not([data-disable-animations] *){--tw-ease:cubic-bezier(.32,1.2,.4,1);transition-timing-function:cubic-bezier(.32,1.2,.4,1)}.motion-safe\:ease-\[cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\]:not([data-disable-animations] *){--tw-ease:cubic-bezier(.175,.885,.32,1.5);transition-timing-function:cubic-bezier(.175,.885,.32,1.5)}.motion-safe\:ease-linear:not([data-disable-animations] *){--tw-ease:linear;transition-timing-function:linear}.motion-safe\:ease-out:not([data-disable-animations] *){--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.motion-safe\:animate-border-beam:not([data-disable-animations] *){animation-name:border-beam;animation-duration:var(--border-beam-duration,5s);animation-delay:var(--border-beam-delay,0s);animation-timing-function:linear;animation-iteration-count:infinite}.motion-safe\:animate-gradient-glow:not([data-disable-animations] *){animation-name:gradient-glow;animation-duration:var(--gradient-glow-duration,4s);animation-timing-function:linear;animation-iteration-count:infinite}.motion-safe\:animate-gradient-glow-aura:not([data-disable-animations] *){animation-name:gradient-glow,gradient-glow-pulse;animation-duration:var(--gradient-glow-duration,4s);animation-timing-function:linear,ease-in-out;animation-iteration-count:infinite}.motion-safe\:\[transition\:opacity_300ms_cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\,scale_300ms_cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\,width_300ms_cubic-bezier\(0\.22\,1\,0\.36\,1\)\,height_300ms_cubic-bezier\(0\.22\,1\,0\.36\,1\)\]:not([data-disable-animations] *){transition:opacity .3s cubic-bezier(.175,.885,.32,1.5),scale .3s cubic-bezier(.175,.885,.32,1.5),width .3s cubic-bezier(.22,1,.36,1),height .3s cubic-bezier(.22,1,.36,1)}.motion-safe\:group-data-checked\/check\:delay-\[0ms\]:not([data-disable-animations] *):is(:where(.group\/check)[data-checked] *){transition-delay:0s}.motion-safe\:group-data-checked\/check\:duration-\[0ms\,300ms\]:not([data-disable-animations] *):is(:where(.group\/check)[data-checked] *){--tw-duration:0s,.3s;transition-duration:0s,.3s}.group-data-ending-style\/popup\:motion-safe\:scale-95:is(:where(.group\/popup)[data-ending-style] *):not([data-disable-animations] *){--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-ending-style\/popup\:motion-safe\:opacity-0:is(:where(.group\/popup)[data-ending-style] *):not([data-disable-animations] *){opacity:0}.group-data-ending-style\/popup\:motion-safe\:duration-100:is(:where(.group\/popup)[data-ending-style] *):not([data-disable-animations] *){--tw-duration:.1s;transition-duration:.1s}.group-data-ending-style\/popup\:motion-safe\:ease-out:is(:where(.group\/popup)[data-ending-style] *):not([data-disable-animations] *){--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.motion-safe\:group-data-selected\/check\:delay-\[0ms\]:not([data-disable-animations] *):is(:where(.group\/check)[data-selected] *){transition-delay:0s}.motion-safe\:group-data-selected\/check\:duration-\[0ms\,300ms\]:not([data-disable-animations] *):is(:where(.group\/check)[data-selected] *){--tw-duration:0s,.3s;transition-duration:0s,.3s}.group-data-starting-style\/popup\:motion-safe\:scale-90:is(:where(.group\/popup)[data-starting-style] *):not([data-disable-animations] *){--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-starting-style\/popup\:motion-safe\:opacity-0:is(:where(.group\/popup)[data-starting-style] *):not([data-disable-animations] *){opacity:0}.motion-safe\:before\:transition-opacity:not([data-disable-animations] *):before{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.motion-safe\:before\:duration-200:not([data-disable-animations] *):before{content:var(--tw-content);--tw-duration:.2s;transition-duration:.2s}.motion-safe\:before\:ease-out:not([data-disable-animations] *):before{content:var(--tw-content);--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.motion-safe\:active\:translate-y-px:not([data-disable-animations] *):active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.motion-safe\:active\:scale-90:not([data-disable-animations] *):active{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.motion-safe\:active\:duration-100:not([data-disable-animations] *):active{--tw-duration:.1s;transition-duration:.1s}.motion-safe\:active\:ease-in-out:not([data-disable-animations] *):active{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.data-ending-style\:motion-safe\:scale-95[data-ending-style]:not([data-disable-animations] *){--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-ending-style\:motion-safe\:opacity-0[data-ending-style]:not([data-disable-animations] *){opacity:0}.data-ending-style\:motion-safe\:duration-100[data-ending-style]:not([data-disable-animations] *){--tw-duration:.1s;transition-duration:.1s}.data-ending-style\:motion-safe\:duration-150[data-ending-style]:not([data-disable-animations] *){--tw-duration:.15s;transition-duration:.15s}.data-ending-style\:motion-safe\:duration-300[data-ending-style]:not([data-disable-animations] *){--tw-duration:.3s;transition-duration:.3s}.data-ending-style\:motion-safe\:ease-out[data-ending-style]:not([data-disable-animations] *){--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.data-instant\:motion-safe\:transition-none[data-instant]:not([data-disable-animations] *){transition-property:none}.data-starting-style\:motion-safe\:scale-90[data-starting-style]:not([data-disable-animations] *){--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-starting-style\:motion-safe\:scale-95[data-starting-style]:not([data-disable-animations] *){--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.motion-safe\:data-starting-style\:\[transform\:translateY\(-150\%\)\]:not([data-disable-animations] *)[data-starting-style]{transform:translateY(-150%)}.motion-safe\:data-starting-style\:\[transform\:translateY\(150\%\)\]:not([data-disable-animations] *)[data-starting-style]{transform:translateY(150%)}.data-starting-style\:motion-safe\:opacity-0[data-starting-style]:not([data-disable-animations] *){opacity:0}.data-\[activation-direction\=down\]\:data-ending-style\:motion-safe\:-translate-y-4[data-activation-direction=down][data-ending-style]:not([data-disable-animations] *){--tw-translate-y:calc(var(--spacing) * -4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=down\]\:data-starting-style\:motion-safe\:translate-y-4[data-activation-direction=down][data-starting-style]:not([data-disable-animations] *){--tw-translate-y:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=left\]\:data-ending-style\:motion-safe\:translate-x-4[data-activation-direction=left][data-ending-style]:not([data-disable-animations] *){--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=left\]\:data-starting-style\:motion-safe\:-translate-x-4[data-activation-direction=left][data-starting-style]:not([data-disable-animations] *),.data-\[activation-direction\=right\]\:data-ending-style\:motion-safe\:-translate-x-4[data-activation-direction=right][data-ending-style]:not([data-disable-animations] *){--tw-translate-x:calc(var(--spacing) * -4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=right\]\:data-starting-style\:motion-safe\:translate-x-4[data-activation-direction=right][data-starting-style]:not([data-disable-animations] *){--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=up\]\:data-ending-style\:motion-safe\:translate-y-4[data-activation-direction=up][data-ending-style]:not([data-disable-animations] *){--tw-translate-y:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[activation-direction\=up\]\:data-starting-style\:motion-safe\:-translate-y-4[data-activation-direction=up][data-starting-style]:not([data-disable-animations] *){--tw-translate-y:calc(var(--spacing) * -4);translate:var(--tw-translate-x) var(--tw-translate-y)}.motion-safe\:data-ending-style\:data-\[swipe-direction\=down\]\:\[transform\:translateY\(calc\(var\(--toast-swipe-movement-y\)\+150\%\)\)\]:not([data-disable-animations] *)[data-ending-style][data-swipe-direction=down],.motion-safe\:data-expanded\:data-ending-style\:data-\[swipe-direction\=down\]\:\[transform\:translateY\(calc\(var\(--toast-swipe-movement-y\)\+150\%\)\)\]:not([data-disable-animations] *)[data-expanded][data-ending-style][data-swipe-direction=down]{transform:translateY(calc(var(--toast-swipe-movement-y) + 150%))}.motion-safe\:data-ending-style\:data-\[swipe-direction\=left\]\:\[transform\:translateX\(calc\(var\(--toast-swipe-movement-x\)-150\%\)\)_translateY\(var\(--offset-y\)\)\]:not([data-disable-animations] *)[data-ending-style][data-swipe-direction=left],.motion-safe\:data-expanded\:data-ending-style\:data-\[swipe-direction\=left\]\:\[transform\:translateX\(calc\(var\(--toast-swipe-movement-x\)-150\%\)\)_translateY\(var\(--offset-y\)\)\]:not([data-disable-animations] *)[data-expanded][data-ending-style][data-swipe-direction=left]{transform:translateX(calc(var(--toast-swipe-movement-x) - 150%)) translateY(var(--offset-y))}.motion-safe\:data-ending-style\:data-\[swipe-direction\=right\]\:\[transform\:translateX\(calc\(var\(--toast-swipe-movement-x\)\+150\%\)\)_translateY\(var\(--offset-y\)\)\]:not([data-disable-animations] *)[data-ending-style][data-swipe-direction=right],.motion-safe\:data-expanded\:data-ending-style\:data-\[swipe-direction\=right\]\:\[transform\:translateX\(calc\(var\(--toast-swipe-movement-x\)\+150\%\)\)_translateY\(var\(--offset-y\)\)\]:not([data-disable-animations] *)[data-expanded][data-ending-style][data-swipe-direction=right]{transform:translateX(calc(var(--toast-swipe-movement-x) + 150%)) translateY(var(--offset-y))}.motion-safe\:data-ending-style\:data-\[swipe-direction\=up\]\:\[transform\:translateY\(calc\(var\(--toast-swipe-movement-y\)-150\%\)\)\]:not([data-disable-animations] *)[data-ending-style][data-swipe-direction=up],.motion-safe\:data-expanded\:data-ending-style\:data-\[swipe-direction\=up\]\:\[transform\:translateY\(calc\(var\(--toast-swipe-movement-y\)-150\%\)\)\]:not([data-disable-animations] *)[data-expanded][data-ending-style][data-swipe-direction=up]{transform:translateY(calc(var(--toast-swipe-movement-y) - 150%))}}@media (prefers-reduced-motion:reduce){.motion-reduce\:hidden{display:none}}.motion-reduce\:hidden:is([data-disable-animations] *){display:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}.motion-reduce\:animate-none:is([data-disable-animations] *){animation:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}.motion-reduce\:transition-none:is([data-disable-animations] *){transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:before\:transition-none:before{content:var(--tw-content);transition-property:none}}.motion-reduce\:before\:transition-none:is([data-disable-animations] *):before{content:var(--tw-content);transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:after\:transition-none:after{content:var(--tw-content);transition-property:none}}.motion-reduce\:after\:transition-none:is([data-disable-animations] *):after{content:var(--tw-content);transition-property:none}@media (prefers-reduced-motion:reduce){:is(.motion-reduce\:\*\*\:data-\[slot\=navigation-link-indicator\]\:transition-none *)[data-slot=navigation-link-indicator]{transition-property:none}}:is(.motion-reduce\:\*\*\:data-\[slot\=navigation-link-indicator\]\:transition-none:is([data-disable-animations] *) *)[data-slot=navigation-link-indicator]{transition-property:none}@media not all and (width>=64rem){.max-lg\:order-first{order:-9999}}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}}@media (width>=48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-1{grid-column-start:1}.md\:col-start-2{grid-column-start:2}.md\:row-start-1{grid-row-start:1}.md\:row-start-2{grid-row-start:2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[minmax\(280px\,0\.9fr\)_minmax\(0\,1\.1fr\)\]{grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr)}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:w-\[340px\]{width:340px}.lg\:shrink-0{flex-shrink:0}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}}@container (width>=460px){.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:my-0:is(:where(.group\/alert)[data-layout=inline] *){margin-block:0}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:ms-3:is(:where(.group\/alert)[data-layout=inline] *){margin-inline-start:calc(var(--spacing) * 3)}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:me-3:is(:where(.group\/alert)[data-layout=inline] *){margin-inline-end:calc(var(--spacing) * 3)}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:mt-0:is(:where(.group\/alert)[data-layout=inline] *){margin-top:0}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:self-center:is(:where(.group\/alert)[data-layout=inline] *){align-self:center}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:pt-0:is(:where(.group\/alert)[data-layout=inline] *){padding-top:0}.\@min-\[460px\]\:group-data-\[layout\=inline\]\/alert\:text-sm:is(:where(.group\/alert)[data-layout=inline] *){font-size:.875rem;line-height:var(--tw-leading,1.25rem)}.\@min-\[460px\]\:data-\[layout\=inline\]\:\[grid-template-columns\:auto_auto_1fr_auto_auto\][data-layout=inline]{grid-template-columns:auto auto 1fr auto auto}.\@min-\[460px\]\:data-\[layout\=inline\]\:items-center[data-layout=inline]{align-items:center}.\@min-\[460px\]\:data-\[layout\=inline\]\:\[grid-template-areas\:\'icon_title_description_actions_close\'\][data-layout=inline]{grid-template-areas:"icon title description actions close"}}.ltr\:\[mask-image\:linear-gradient\(to_bottom\,transparent_0\,black_min\(40px\,var\(--scroll-area-overflow-y-start\)\)\,black_calc\(100\%_-_min\(40px\,var\(--scroll-area-overflow-y-end\,40px\)\)\)\,transparent_100\%\)\,linear-gradient\(to_right\,transparent_0\,black_min\(40px\,var\(--scroll-area-overflow-x-start\)\)\,black_calc\(100\%_-_min\(40px\,var\(--scroll-area-overflow-x-end\,40px\)\)\)\,transparent_100\%\)\]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to right,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to right,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to right,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to right,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%)}.data-\[orientation\=horizontal\]\:ltr\:-translate-x-1\/2[data-orientation=horizontal]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:ltr\:translate-x-\(--active-tab-left\)[data-orientation=horizontal]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){--tw-translate-x:var(--active-tab-left);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:ltr\:translate-x-1\/2[data-orientation=horizontal]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.ltr\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *)[data-orientation=horizontal]:after{content:var(--tw-content);background-position:100%}@media (hover:hover){.ltr\:hover\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *):hover[data-orientation=horizontal]:after{content:var(--tw-content);background-position:0}}.ltr\:focus-visible\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *):focus-visible[data-orientation=horizontal]:after,.ltr\:data-active\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *)[data-active][data-orientation=horizontal]:after,.ltr\:data-popup-open\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *)[data-popup-open][data-orientation=horizontal]:after,.ltr\:data-pressed\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *)[data-pressed][data-orientation=horizontal]:after{content:var(--tw-content);background-position:0}.data-\[orientation\=vertical\]\:ltr\:origin-left[data-orientation=vertical]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){transform-origin:0}.data-\[side\=inline-end\]\:ltr\:-rotate-90[data-side=inline-end]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){rotate:-90deg}.data-\[side\=inline-start\]\:ltr\:rotate-90[data-side=inline-start]:where(:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=ltr],[dir=ltr] *){rotate:90deg}.rtl\:origin-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){transform-origin:100%}.rtl\:translate-x-1\/2:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.rtl\:rotate-90:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:90deg}.rtl\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:180deg}.rtl\:transform-\[scaleX\(-1\)\]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){transform:scaleX(-1)}.rtl\:\[mask-image\:linear-gradient\(to_bottom\,transparent_0\,black_min\(40px\,var\(--scroll-area-overflow-y-start\)\)\,black_calc\(100\%_-_min\(40px\,var\(--scroll-area-overflow-y-end\,40px\)\)\)\,transparent_100\%\)\,linear-gradient\(to_left\,transparent_0\,black_min\(40px\,var\(--scroll-area-overflow-x-start\)\)\,black_calc\(100\%_-_min\(40px\,var\(--scroll-area-overflow-x-end\,40px\)\)\)\,transparent_100\%\)\]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to left,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to left,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to left,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,black min(40px, var(--scroll-area-overflow-y-start)),black calc(100% - min(40px, var(--scroll-area-overflow-y-end,40px))),transparent 100%),linear-gradient(to left,transparent 0,black min(40px, var(--scroll-area-overflow-x-start)),black calc(100% - min(40px, var(--scroll-area-overflow-x-end,40px))),transparent 100%)}.data-\[orientation\=horizontal\]\:rtl\:-translate-x-\(--active-tab-right\)[data-orientation=horizontal]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--active-tab-right) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:rtl\:-translate-x-1\/2[data-orientation=horizontal]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[orientation\=horizontal\]\:rtl\:translate-x-1\/2[data-orientation=horizontal]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.rtl\:data-\[orientation\=horizontal\]\:after\:bg-left:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)[data-orientation=horizontal]:after{content:var(--tw-content);background-position:0}@media (hover:hover){.rtl\:hover\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *):hover[data-orientation=horizontal]:after{content:var(--tw-content);background-position:100%}}.rtl\:focus-visible\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *):focus-visible[data-orientation=horizontal]:after,.rtl\:data-active\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)[data-active][data-orientation=horizontal]:after,.rtl\:data-popup-open\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)[data-popup-open][data-orientation=horizontal]:after,.rtl\:data-pressed\:data-\[orientation\=horizontal\]\:after\:bg-right:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)[data-pressed][data-orientation=horizontal]:after{content:var(--tw-content);background-position:100%}.data-\[orientation\=vertical\]\:rtl\:origin-right[data-orientation=vertical]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){transform-origin:100%}.data-\[side\=inline-end\]\:rtl\:rotate-90[data-side=inline-end]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:90deg}.data-\[side\=inline-start\]\:rtl\:-rotate-90[data-side=inline-start]:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:-90deg}:is(.rtl\:\*\*\:data-\[slot\=navigation-link-indicator\]\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *)[data-slot=navigation-link-indicator]{rotate:180deg}.dark\:bg-background-subtle:is(.dark *){background-color:var(--background-subtle)}.dark\:bg-current\/14:is(.dark *){background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.dark\:bg-current\/14:is(.dark *){background-color:color-mix(in oklab, currentcolor 14%, transparent)}}.dark\:bg-current\/38:is(.dark *){background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.dark\:bg-current\/38:is(.dark *){background-color:color-mix(in oklab, currentcolor 38%, transparent)}}.dark\:bg-current\/68:is(.dark *){background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.dark\:bg-current\/68:is(.dark *){background-color:color-mix(in oklab, currentcolor 68%, transparent)}}.dark\:\[--gradient-glow-opacity\:0\.6\]:is(.dark *){--gradient-glow-opacity:.6}:where([data-slot=tooltip-content]) .dark\:in-data-\[slot\=tooltip-content\]\:border-border-intense\/20:is(.dark *){border-color:var(--border-intense)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .dark\:in-data-\[slot\=tooltip-content\]\:border-border-intense\/20:is(.dark *){border-color:color-mix(in oklab, var(--border-intense) 20%, transparent)}}@media (pointer:coarse){.pointer-coarse\:text-base{font-size:1rem;line-height:var(--tw-leading,1.5rem)}}@media (hover:none){.hover-none\:opacity-\(--gradient-glow-opacity\){opacity:var(--gradient-glow-opacity)}.hover-none\:opacity-100{opacity:1}.hover-none\:\[animation-play-state\:running\]{animation-play-state:running}}.\[\&_dt\]\:text-foreground-strong dt{color:var(--foreground-strong)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:size-3\.5\! svg{width:calc(var(--spacing) * 3.5)!important;height:calc(var(--spacing) * 3.5)!important}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-4\! svg{width:calc(var(--spacing) * 4)!important;height:calc(var(--spacing) * 4)!important}.\[\&_svg\]\:size-4\.5 svg{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.\[\&_svg\]\:size-4\.5\! svg{width:calc(var(--spacing) * 4.5)!important;height:calc(var(--spacing) * 4.5)!important}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:h-full svg{height:100%}.\[\&_svg\]\:w-full svg{width:100%}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:rotate-180 svg{rotate:180deg}.\[\&_svg\]\:rtl\:rotate-0 svg:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:0deg}.\[\&_svg\]\:rtl\:rotate-180 svg:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *){rotate:180deg}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-2\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-5 svg:not([class*=size-]){width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-5\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 5.5);height:calc(var(--spacing) * 5.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-\[0\.5em\] svg:not([class*=size-]){width:.5em;height:.5em}.\[\&_svg\:not\(\[class\*\=\'stroke-\'\]\)\]\:stroke-2 svg:not([class*=stroke-]){stroke-width:2px}.\[\&_svg\:not\(\[class\*\=\'stroke-\'\]\)\]\:stroke-\[1\.65\] svg:not([class*=stroke-]){stroke-width:1.65px}.\[\&_svg\:not\(\[class\*\=\'stroke-\'\]\)\]\:stroke-\[1\.75\] svg:not([class*=stroke-]){stroke-width:1.75px}.\[\&_svg\:not\(\[class\*\=\'stroke-\'\]\)\]\:stroke-\[1\.85\] svg:not([class*=stroke-]){stroke-width:1.85px}.\[\&_td\]\:border-b td{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--border-width)}.\[\&_td\]\:border-b-0 td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&_td\]\:border-dashed td{--tw-border-style:dashed;border-style:dashed}.\[\&_td\]\:border-border td{border-color:var(--border)}.\[\&_td\]\:border-border-strong td{border-color:var(--border-strong)}.\[\&_td\]\:p-3 td{padding:calc(var(--spacing) * 3)}.\[\&_td\]\:p-3\.5 td{padding:calc(var(--spacing) * 3.5)}.\[\&_td\]\:p-4 td{padding:calc(var(--spacing) * 4)}.\[\&_td\]\:align-middle td{vertical-align:middle}.\[\&_th\]\:p-3 th{padding:calc(var(--spacing) * 3)}.\[\&_th\]\:p-3\.5 th{padding:calc(var(--spacing) * 3.5)}.\[\&_th\]\:p-4 th{padding:calc(var(--spacing) * 4)}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[a\,button\]\:transform-gpu:is(a,button){transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.\[a\,button\]\:cursor-pointer:is(a,button){cursor:pointer}.\[a\,button\]\:transition:is(a,button){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[a\,button\]\:duration-250:is(a,button){--tw-duration:.25s;transition-duration:.25s}.\[a\,button\]\:ease-\[cubic-bezier\(0\.175\,0\.885\,0\.32\,1\.5\)\]:is(a,button){--tw-ease:cubic-bezier(.175,.885,.32,1.5);transition-timing-function:cubic-bezier(.175,.885,.32,1.5)}.\[a\,button\]\:before\:border:is(a,button):before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:var(--border-width)}.\[a\,button\]\:before\:border-transparent:is(a,button):before{content:var(--tw-content);border-color:#0000}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--error-muted\)_0\%\,rgba\(255\,255\,255\,\.5\)_95\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--error-muted) 0%,#ffffff80 95%)}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--info-muted\)_0\%\,rgba\(255\,255\,255\,\.5\)_95\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--info-muted) 0%,#ffffff80 95%)}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--primary\)_0\%\,var\(--primary-muted\)_75\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--primary) 0%,var(--primary-muted) 75%)}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--secondary\)_0\%\,var\(--secondary-muted\)_95\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--secondary) 0%,var(--secondary-muted) 95%)}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--success-muted\)_0\%\,rgba\(255\,255\,255\,\.5\)_95\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--success-muted) 0%,#ffffff80 95%)}.\[a\,button\]\:before\:bg-\[radial-gradient\(138\.15\%_78\.13\%_at_52\.05\%_50\%\,var\(--warning-muted\)_0\%\,rgba\(255\,255\,255\,\.5\)_95\%\)\]:is(a,button):before{content:var(--tw-content);background-image:radial-gradient(138.15% 78.13% at 52.05% 50%,var(--warning-muted) 0%,#ffffff80 95%)}.\[a\,button\]\:before\:opacity-0:is(a,button):before{content:var(--tw-content);opacity:0}.\[a\,button\]\:before\:transition-\[opacity\,background-color\,border-color\]:is(a,button):before{content:var(--tw-content);transition-property:opacity,background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[a\,button\]\:before\:duration-250:is(a,button):before{content:var(--tw-content);--tw-duration:.25s;transition-duration:.25s}@media (hover:hover){.\[a\,button\]\:hover\:text-primary-foreground:is(a,button):hover{color:var(--primary-foreground)}.\[a\,button\]\:hover\:before\:border-border:is(a,button):hover:before{content:var(--tw-content);border-color:var(--border)}.\[a\,button\]\:hover\:before\:border-border-strong:is(a,button):hover:before{content:var(--tw-content);border-color:var(--border-strong)}.\[a\,button\]\:hover\:before\:border-white\/15:is(a,button):hover:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:hover\:before\:border-white\/15:is(a,button):hover:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:hover\:before\:bg-background-subtle:is(a,button):hover:before{content:var(--tw-content);background-color:var(--background-subtle)}.\[a\,button\]\:hover\:before\:bg-primary:is(a,button):hover:before{content:var(--tw-content);background-color:var(--primary)}.\[a\,button\]\:hover\:before\:bg-white\/15:is(a,button):hover:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:hover\:before\:bg-white\/15:is(a,button):hover:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:hover\:before\:opacity-100:is(a,button):hover:before{content:var(--tw-content);opacity:1}}.\[a\,button\]\:not-data-popup-open\:active\:translate-y-px:is(a,button):not([data-popup-open]):active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[a\,button\]\:not-data-popup-open\:active\:scale-\[0\.97\]:is(a,button):not([data-popup-open]):active{scale:.97}.\[a\,button\]\:not-data-popup-open\:active\:duration-100:is(a,button):not([data-popup-open]):active{--tw-duration:.1s;transition-duration:.1s}.\[a\,button\]\:not-data-popup-open\:active\:ease-in-out:is(a,button):not([data-popup-open]):active{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.\[a\,button\]\:data-popup-open\:text-primary-foreground:is(a,button)[data-popup-open]{color:var(--primary-foreground)}.\[a\,button\]\:data-popup-open\:before\:border-border:is(a,button)[data-popup-open]:before{content:var(--tw-content);border-color:var(--border)}.\[a\,button\]\:data-popup-open\:before\:border-border-strong:is(a,button)[data-popup-open]:before{content:var(--tw-content);border-color:var(--border-strong)}.\[a\,button\]\:data-popup-open\:before\:border-white\/15:is(a,button)[data-popup-open]:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:data-popup-open\:before\:border-white\/15:is(a,button)[data-popup-open]:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:data-popup-open\:before\:bg-background-subtle:is(a,button)[data-popup-open]:before{content:var(--tw-content);background-color:var(--background-subtle)}.\[a\,button\]\:data-popup-open\:before\:bg-primary:is(a,button)[data-popup-open]:before{content:var(--tw-content);background-color:var(--primary)}.\[a\,button\]\:data-popup-open\:before\:bg-white\/15:is(a,button)[data-popup-open]:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:data-popup-open\:before\:bg-white\/15:is(a,button)[data-popup-open]:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:data-popup-open\:before\:opacity-100:is(a,button)[data-popup-open]:before{content:var(--tw-content);opacity:1}.\[a\,button\]\:data-pressed\:text-primary-foreground:is(a,button)[data-pressed]{color:var(--primary-foreground)}.\[a\,button\]\:data-pressed\:before\:border-border:is(a,button)[data-pressed]:before{content:var(--tw-content);border-color:var(--border)}.\[a\,button\]\:data-pressed\:before\:border-border-strong:is(a,button)[data-pressed]:before{content:var(--tw-content);border-color:var(--border-strong)}.\[a\,button\]\:data-pressed\:before\:border-white\/15:is(a,button)[data-pressed]:before{content:var(--tw-content);border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:data-pressed\:before\:border-white\/15:is(a,button)[data-pressed]:before{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:data-pressed\:before\:bg-background-subtle:is(a,button)[data-pressed]:before{content:var(--tw-content);background-color:var(--background-subtle)}.\[a\,button\]\:data-pressed\:before\:bg-primary:is(a,button)[data-pressed]:before{content:var(--tw-content);background-color:var(--primary)}.\[a\,button\]\:data-pressed\:before\:bg-white\/15:is(a,button)[data-pressed]:before{content:var(--tw-content);background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.\[a\,button\]\:data-pressed\:before\:bg-white\/15:is(a,button)[data-pressed]:before{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.\[a\,button\]\:data-pressed\:before\:opacity-100:is(a,button)[data-pressed]:before{content:var(--tw-content);opacity:1}@media (prefers-reduced-motion:reduce){.motion-reduce\:\[a\,button\]\:transition-none:is(a,button){transition-property:none}}.motion-reduce\:\[a\,button\]\:transition-none:is([data-disable-animations] *):is(a,button){transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:\[a\,button\]\:before\:transition-none:is(a,button):before{content:var(--tw-content);transition-property:none}}.motion-reduce\:\[a\,button\]\:before\:transition-none:is([data-disable-animations] *):is(a,button):before{content:var(--tw-content);transition-property:none}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:first-child\]\:rounded-ss-lg:not(:has(thead))>tbody:first-of-type>tr:first-child>:first-child{border-start-start-radius:var(--radius-lg)}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:first-child\]\:rounded-ss-md:not(:has(thead))>tbody:first-of-type>tr:first-child>:first-child{border-start-start-radius:var(--radius-md)}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:first-child\]\:rounded-ss-sm:not(:has(thead))>tbody:first-of-type>tr:first-child>:first-child{border-start-start-radius:var(--radius-sm)}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:last-child\]\:rounded-se-lg:not(:has(thead))>tbody:first-of-type>tr:first-child>:last-child{border-start-end-radius:var(--radius-lg)}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:last-child\]\:rounded-se-md:not(:has(thead))>tbody:first-of-type>tr:first-child>:last-child{border-start-end-radius:var(--radius-md)}.\[\&\:not\(\:has\(thead\)\)\>tbody\:first-of-type\>tr\:first-child\>\:last-child\]\:rounded-se-sm:not(:has(thead))>tbody:first-of-type>tr:first-child>:last-child{border-start-end-radius:var(--radius-sm)}.\[\&\>\*\:not\(\:first-of-type\)\]\:rounded-s-none>:not(:first-of-type){border-start-start-radius:0;border-end-start-radius:0}.\[\&\>\*\:not\(\:first-of-type\)\]\:rounded-t-none>:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:last-of-type\)\]\:rounded-e-none>:not(:last-of-type){border-start-end-radius:0;border-end-end-radius:0}.\[\&\>\*\:not\(\:last-of-type\)\]\:rounded-b-none>:not(:last-of-type){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\:not\(\[data-slot\=drawer-close-button\]\)\]\:-ms-4>:not([data-slot=drawer-close-button]){margin-inline-start:calc(var(--spacing) * -4)}.\[\&\>\:not\(\[data-slot\=drawer-close-button\]\)\]\:-me-4>:not([data-slot=drawer-close-button]){margin-inline-end:calc(var(--spacing) * -4)}.\[\&\>\[data-slot\=alert-dialog-header\]\+\[data-slot\=alert-dialog-footer\]\]\:pt-0>[data-slot=alert-dialog-header]+[data-slot=alert-dialog-footer],.\[\&\>\[data-slot\=dialog-header\]\+\[data-slot\=dialog-footer\]\]\:pt-0>[data-slot=dialog-header]+[data-slot=dialog-footer]{padding-top:0}.\[\&\>\[data-slot\=drawer-close-button\]\]\:inset-e-0>[data-slot=drawer-close-button]{inset-inline-end:0}.\[\&\>\[data-slot\=drawer-close-button\]\]\:top-0>[data-slot=drawer-close-button]{top:0}.\[\&\>\[data-slot\=drawer-footer\]\]\:-mb-4>[data-slot=drawer-footer]{margin-bottom:calc(var(--spacing) * -4)}.\[\&\>\[data-slot\=drawer-header\]\]\:-mt-4>[data-slot=drawer-header]{margin-top:calc(var(--spacing) * -4)}.\[\&\>\[data-slot\=drawer-header\]\+\[data-slot\=drawer-footer\]\]\:pt-0>[data-slot=drawer-header]+[data-slot=drawer-footer]{padding-top:0}.\[\&\>img\]\:size-full>img{width:100%;height:100%}.\[\&\>img\]\:object-cover>img{object-fit:cover}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-5>svg:not([class*=size-]){width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&\>tbody_th\]\:border-b>tbody th{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--border-width)}.\[\&\>tbody_th\]\:border-b-0>tbody th{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\>tbody_th\]\:border-dashed>tbody th{--tw-border-style:dashed;border-style:dashed}.\[\&\>tbody_th\]\:border-border>tbody th{border-color:var(--border)}.\[\&\>tbody_th\]\:border-border-strong>tbody th{border-color:var(--border-strong)}.\[\&\>tbody_th\]\:font-medium>tbody th{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&\>tbody_th\]\:text-foreground-intense>tbody th{color:var(--foreground-intense)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:first-child\]\:rounded-es-lg>tbody:last-of-type>tr:last-child>:first-child{border-end-start-radius:var(--radius-lg)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:first-child\]\:rounded-es-md>tbody:last-of-type>tr:last-child>:first-child{border-end-start-radius:var(--radius-md)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:first-child\]\:rounded-es-sm>tbody:last-of-type>tr:last-child>:first-child{border-end-start-radius:var(--radius-sm)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:last-child\]\:rounded-ee-lg>tbody:last-of-type>tr:last-child>:last-child{border-end-end-radius:var(--radius-lg)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:last-child\]\:rounded-ee-md>tbody:last-of-type>tr:last-child>:last-child{border-end-end-radius:var(--radius-md)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>\:last-child\]\:rounded-ee-sm>tbody:last-of-type>tr:last-child>:last-child{border-end-end-radius:var(--radius-sm)}.\[\&\>tbody\:last-of-type\>tr\:last-child\>td\]\:border-b-0>tbody:last-of-type>tr:last-child>td,.\[\&\>tbody\:last-of-type\>tr\:last-child\>th\]\:border-b-0>tbody:last-of-type>tr:last-child>th{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\>tbody\>tr\]\:transition-colors>tbody>tr{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\&\>tbody\>tr\]\:duration-200>tbody>tr{--tw-duration:.2s;transition-duration:.2s}@media (prefers-reduced-motion:reduce){.motion-reduce\:\[\&\>tbody\>tr\]\:transition-none>tbody>tr{transition-property:none}}.motion-reduce\:\[\&\>tbody\>tr\]\:transition-none:is([data-disable-animations] *)>tbody>tr{transition-property:none}.\[\&\>tbody\>tr\:hover\]\:bg-background-subtle>tbody>tr:hover,.\[\&\>tbody\>tr\:nth-child\(2n\)\]\:bg-background-subtle>tbody>tr:nth-child(2n),.\[\&\>tbody\>tr\>\:nth-child\(2n\)\]\:bg-background-subtle>tbody>tr>:nth-child(2n),.\[\&\>tbody\>tr\[data-highlighted\]\]\:bg-background-subtle>tbody>tr[data-highlighted]{background-color:var(--background-subtle)}.\[\&\>thead\>tr\:first-child\>th\:first-child\]\:rounded-ss-lg>thead>tr:first-child>th:first-child{border-start-start-radius:var(--radius-lg)}.\[\&\>thead\>tr\:first-child\>th\:first-child\]\:rounded-ss-md>thead>tr:first-child>th:first-child{border-start-start-radius:var(--radius-md)}.\[\&\>thead\>tr\:first-child\>th\:first-child\]\:rounded-ss-sm>thead>tr:first-child>th:first-child{border-start-start-radius:var(--radius-sm)}.\[\&\>thead\>tr\:first-child\>th\:last-child\]\:rounded-se-lg>thead>tr:first-child>th:last-child{border-start-end-radius:var(--radius-lg)}.\[\&\>thead\>tr\:first-child\>th\:last-child\]\:rounded-se-md>thead>tr:first-child>th:last-child{border-start-end-radius:var(--radius-md)}.\[\&\>thead\>tr\:first-child\>th\:last-child\]\:rounded-se-sm>thead>tr:first-child>th:last-child{border-start-end-radius:var(--radius-sm)}.\[\&\>thead\>tr\:last-child\>th\:first-child\]\:rounded-es-lg>thead>tr:last-child>th:first-child{border-end-start-radius:var(--radius-lg)}.\[\&\>thead\>tr\:last-child\>th\:first-child\]\:rounded-es-md>thead>tr:last-child>th:first-child{border-end-start-radius:var(--radius-md)}.\[\&\>thead\>tr\:last-child\>th\:first-child\]\:rounded-es-sm>thead>tr:last-child>th:first-child{border-end-start-radius:var(--radius-sm)}.\[\&\>thead\>tr\:last-child\>th\:last-child\]\:rounded-ee-lg>thead>tr:last-child>th:last-child{border-end-end-radius:var(--radius-lg)}.\[\&\>thead\>tr\:last-child\>th\:last-child\]\:rounded-ee-md>thead>tr:last-child>th:last-child{border-end-end-radius:var(--radius-md)}.\[\&\>thead\>tr\:last-child\>th\:last-child\]\:rounded-ee-sm>thead>tr:last-child>th:last-child{border-end-end-radius:var(--radius-sm)}.\[\&\>thead\>tr\>th\]\:bg-background-muted>thead>tr>th{background-color:var(--background-muted)}.\[\&\>thead\>tr\>th\]\:font-medium>thead>tr>th{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&\>thead\>tr\>th\]\:text-foreground-intense>thead>tr>th{color:var(--foreground-intense)}.\[\&\>video\]\:size-full>video{width:100%;height:100%}.\[\&\>video\]\:object-cover>video{object-fit:cover}@media (prefers-reduced-motion:no-preference){.motion-safe\:\[\&\[data-ending-style\]\:not\(\[data-limited\]\)\:not\(\[data-swipe-direction\]\)\]\:\[transform\:translateY\(-150\%\)\]:not([data-disable-animations] *)[data-ending-style]:not([data-limited]):not([data-swipe-direction]){transform:translateY(-150%)}.motion-safe\:\[\&\[data-ending-style\]\:not\(\[data-limited\]\)\:not\(\[data-swipe-direction\]\)\]\:\[transform\:translateY\(150\%\)\]:not([data-disable-animations] *)[data-ending-style]:not([data-limited]):not([data-swipe-direction]){transform:translateY(150%)}}}:root,.light{--foreground:oklch(44.6% .03 256.802);--foreground-subtle:oklch(70.7% .022 261.325);--foreground-muted:oklch(55.1% .027 264.364);--foreground-strong:oklch(37.3% .034 259.733);--foreground-emphasis:oklch(27.8% .033 256.848);--foreground-intense:oklch(21% .034 264.665);--foreground-inverse:oklch(100% 0 0);--background:oklch(100% 0 0);--background-subtle:oklch(98.5% .002 247.839);--background-muted:oklch(96.7% .003 264.542);--background-strong:oklch(92.8% .006 264.531);--background-inverse:oklch(13% .028 261.692);--border:oklch(92.8% .006 264.531);--border-muted:oklch(96.7% .003 264.542);--border-strong:oklch(87.2% .01 258.338);--border-emphasis:oklch(70.7% .022 261.325);--border-intense:oklch(55.1% .027 264.364);--border-inverse:oklch(27.8% .033 256.848);--border-overlay:oklch(96.7% .003 264.542);--primary:oklch(21% .034 264.665);--primary-subtle:oklch(96.7% .003 264.542);--primary-soft:oklch(92.8% .006 264.531);--primary-muted:oklch(37.3% .034 259.733);--primary-strong:oklch(13% .028 261.692);--primary-foreground:oklch(100% 0 0);--secondary:oklch(80.9% .105 251.813);--secondary-subtle:oklch(62.3% .214 259.815/.1);--secondary-soft:oklch(62.3% .214 259.815/.2);--secondary-muted:oklch(88.2% .059 254.128);--secondary-strong:oklch(70.7% .165 254.624);--secondary-emphasis:oklch(62.3% .214 259.815);--secondary-intense:oklch(54.6% .245 262.881);--secondary-foreground:oklch(13% .028 261.692);--error:oklch(80.8% .114 19.571);--error-subtle:oklch(63.7% .237 25.331/.1);--error-soft:oklch(63.7% .237 25.331/.2);--error-muted:oklch(88.5% .062 18.334);--error-strong:oklch(70.4% .191 22.216);--error-emphasis:oklch(63.7% .237 25.331);--error-intense:oklch(57.7% .245 27.325);--error-foreground:oklch(13% .028 261.692);--success:oklch(84.5% .143 164.978);--success-subtle:oklch(69.6% .17 162.48/.1);--success-soft:oklch(69.6% .17 162.48/.2);--success-muted:oklch(90.5% .093 164.15);--success-strong:oklch(76.5% .177 163.223);--success-emphasis:oklch(69.6% .17 162.48);--success-intense:oklch(59.6% .145 163.225);--success-foreground:oklch(13% .028 261.692);--warning:oklch(83.7% .128 66.29);--warning-subtle:oklch(70.5% .213 47.604/.1);--warning-soft:oklch(70.5% .213 47.604/.2);--warning-muted:oklch(90.1% .076 70.697);--warning-strong:oklch(75% .183 55.934);--warning-emphasis:oklch(70.5% .213 47.604);--warning-intense:oklch(64.6% .222 41.116);--warning-foreground:oklch(13% .028 261.692);--info:oklch(82.8% .111 230.318);--info-subtle:oklch(68.5% .169 237.323/.1);--info-soft:oklch(68.5% .169 237.323/.2);--info-muted:oklch(90.1% .058 230.902);--info-strong:oklch(74.6% .16 232.661);--info-emphasis:oklch(68.5% .169 237.323);--info-intense:oklch(58.8% .158 241.966);--info-foreground:oklch(13% .028 261.692);--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--focus-ring:oklch(87.2% .01 258.338);--focus-ring-input:oklch(92.8% .006 264.531);--focus-ring-primary:oklch(87.2% .01 258.338);--focus-ring-secondary:oklch(62.3% .214 259.815/.3);--focus-ring-error:oklch(63.7% .237 25.331/.3);--focus-ring-success:oklch(69.6% .17 162.48/.3);--focus-ring-warning:oklch(70.5% .213 47.604/.3);--focus-ring-info:oklch(68.5% .169 237.323/.3);--focus-ring-light:oklch(100% 0 0/.25);--border-width:1px;--radius:.875rem;--radius-4xs:calc(var(--radius) * 2 / 7);--radius-3xs:calc(var(--radius) * 3 / 7);--radius-2xs:calc(var(--radius) * 4 / 7);--radius-xs:calc(var(--radius) * 5 / 7);--radius-sm:calc(var(--radius) * 6 / 7);--radius-md:var(--radius);--radius-lg:calc(var(--radius) * 8 / 7);--radius-xl:calc(var(--radius) * 9 / 7);--radius-2xl:calc(var(--radius) * 12 / 7);--radius-3xl:calc(var(--radius) * 16 / 7);--radius-4xl:calc(var(--radius) * 20 / 7);--shadow-color:oklch(55.1% .027 264.364/.18);--selection-color:oklch(13% .028 261.692/.1);--opacity-disabled:.65}.dark{--foreground:oklch(87.2% .01 258.338);--foreground-subtle:oklch(55.1% .027 264.364);--foreground-muted:oklch(70.7% .022 261.325);--foreground-strong:oklch(92.8% .006 264.531);--foreground-emphasis:oklch(96.7% .003 264.542);--foreground-intense:oklch(100% 0 0);--foreground-inverse:oklch(21% .034 264.665);--background:oklch(13% .028 261.692);--background-subtle:oklch(55.1% .027 264.364/.08);--background-muted:oklch(21% .034 264.665);--background-strong:oklch(27.8% .033 256.848);--background-inverse:oklch(100% 0 0);--border:oklch(27.8% .033 256.848);--border-muted:oklch(21% .034 264.665);--border-strong:oklch(37.3% .034 259.733);--border-emphasis:oklch(44.6% .03 256.802);--border-intense:oklch(55.1% .027 264.364);--border-inverse:oklch(92.8% .006 264.531);--border-overlay:oklch(27.8% .033 256.848);--primary:oklch(100% 0 0);--primary-subtle:oklch(21% .034 264.665);--primary-soft:oklch(27.8% .033 256.848);--primary-muted:oklch(92.8% .006 264.531);--primary-strong:oklch(100% 0 0);--primary-foreground:oklch(21% .034 264.665);--secondary:oklch(70.7% .165 254.624);--secondary-subtle:oklch(62.3% .214 259.815/.1);--secondary-soft:oklch(62.3% .214 259.815/.2);--secondary-muted:oklch(80.9% .105 251.813);--secondary-strong:oklch(70.7% .165 254.624);--secondary-emphasis:oklch(62.3% .214 259.815);--secondary-intense:oklch(54.6% .245 262.881);--secondary-foreground:oklch(13% .028 261.692);--error:oklch(70.4% .191 22.216);--error-subtle:oklch(63.7% .237 25.331/.1);--error-soft:oklch(63.7% .237 25.331/.2);--error-muted:oklch(80.8% .114 19.571);--error-strong:oklch(70.4% .191 22.216);--error-emphasis:oklch(63.7% .237 25.331);--error-intense:oklch(57.7% .245 27.325);--error-foreground:oklch(13% .028 261.692);--success:oklch(76.5% .177 163.223);--success-subtle:oklch(69.6% .17 162.48/.1);--success-soft:oklch(69.6% .17 162.48/.2);--success-muted:oklch(84.5% .143 164.978);--success-strong:oklch(76.5% .177 163.223);--success-emphasis:oklch(69.6% .17 162.48);--success-intense:oklch(59.6% .145 163.225);--success-foreground:oklch(13% .028 261.692);--warning:oklch(75% .183 55.934);--warning-subtle:oklch(70.5% .213 47.604/.1);--warning-soft:oklch(70.5% .213 47.604/.2);--warning-muted:oklch(83.7% .128 66.29);--warning-strong:oklch(75% .183 55.934);--warning-emphasis:oklch(70.5% .213 47.604);--warning-intense:oklch(64.6% .222 41.116);--warning-foreground:oklch(13% .028 261.692);--info:oklch(74.6% .16 232.661);--info-subtle:oklch(68.5% .169 237.323/.1);--info-soft:oklch(68.5% .169 237.323/.2);--info-muted:oklch(82.8% .111 230.318);--info-strong:oklch(74.6% .16 232.661);--info-emphasis:oklch(68.5% .169 237.323);--info-intense:oklch(58.8% .158 241.966);--info-foreground:oklch(13% .028 261.692);--focus-ring:oklch(37.3% .034 259.733);--focus-ring-input:oklch(27.8% .033 256.848);--focus-ring-primary:oklch(37.3% .034 259.733);--focus-ring-secondary:oklch(62.3% .214 259.815/.5);--focus-ring-error:oklch(63.7% .237 25.331/.5);--focus-ring-success:oklch(69.6% .17 162.48/.5);--focus-ring-warning:oklch(70.5% .213 47.604/.5);--focus-ring-info:oklch(68.5% .169 237.323/.5);--focus-ring-light:oklch(100% 0 0/.25);--shadow-color:oklch(0% 0 0/.3);--selection-color:oklch(100% 0 0/.15)}@keyframes ping-paced{25%,to{opacity:0;transform:scale(2.2)}}@media (prefers-reduced-motion:reduce){.skeleton-shimmer:after{animation:none}}[data-disable-animations] .skeleton-shimmer:after{animation:none}[dir=rtl] .skeleton-shimmer:after{animation-direction:reverse}@keyframes skeleton-shimmer{to{transform:translate(100%)}}[data-disable-animations] [data-slot=toast-progress-indicator]{animation:none}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}@keyframes text-caret{50%{opacity:0}}@property --gradient-glow-rotation{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes gradient-glow{to{--gradient-glow-rotation:360deg}}@keyframes gradient-glow-pulse{0%,to{transform:scale(.94)}50%{transform:scale(1.03)}}@property --border-beam-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes border-beam{to{--border-beam-angle:360deg}}[data-slot=toast]{background-color:var(--background);color:var(--foreground);border-color:var(--border-overlay,var(--border));isolation:isolate}@property --tw-border-spacing-x{syntax:"<length>";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"<length>";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
32
32
  /*$vite$:1*/</style>