From f7027cb9a72caa690c8b702f8e2b295cc86cffe8 Mon Sep 17 00:00:00 2001 From: kami Date: Wed, 29 Jul 2026 23:31:25 +0400 Subject: [PATCH] ui: lead task detail with diagnosis --- AUDIT.md | 98 ++++++++++--------- .../webui/assets/assets/index-BlmzmqVL.js | 62 ++++++++++++ ...{index-BzSA27i7.css => index-C0JjPpb-.css} | 2 +- .../webui/assets/assets/index-Dqz7-YV3.js | 62 ------------ internal/webui/assets/index.html | 4 +- web/src/api/types.ts | 4 +- web/src/main.tsx | 14 ++- web/src/style.css | 5 +- 8 files changed, 134 insertions(+), 117 deletions(-) create mode 100644 internal/webui/assets/assets/index-BlmzmqVL.js rename internal/webui/assets/assets/{index-BzSA27i7.css => index-C0JjPpb-.css} (66%) delete mode 100644 internal/webui/assets/assets/index-Dqz7-YV3.js diff --git a/AUDIT.md b/AUDIT.md index 3f98d38..302ef1c 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -28,22 +28,23 @@ is not an operationally useful control plane yet. - One `workpc-opencode` worker is heartbeating and reports capacity 1. Its Unix-socket herdr path is the meaningful reachability signal; legacy - coordinator TCP probes are not. + coordinator TCP probes are not. The coordinator now skips remote herdr + protocol probes entirely and logs them as worker-owned; local herdr probes + remain separate. - The API reports 28 tasks: **22 blocked, 5 completed, 1 failed, and no queued, leased, approval-pending, or captured sessions**. The visible queue is therefore historical E2E residue, not current work. -- A real browser loaded the deployed SPA with a valid Web session and crashed - before painting: `overview.sessions` is JSON `null`, while the bundle calls - `sessions.length`. Task detail has the same fault for `events: null`. - Source now emits empty arrays and the frontend is defensive; the current - local build renders the live board and task record. **The deployment still - needs a rebuild/redeploy.** +- The API and SPA were rebuilt/redeployed on 2026-07-29. API health and the + browser shell returned `200`; the deployed logout endpoint returns `204`. + This ships the empty-collection fixes that prevent the prior + `sessions.length`/`events` null crashes. A real authenticated browser smoke + is still outstanding. - The task record for a blocked task and the failed E2E task had no retained session and no lifecycle events. Every lifecycle control was correctly disabled, but neither record could explain its state. -- The live image predates the source session/logout work: `DELETE - /v1/ui/session` returns `405`. Do not treat token rotation as session - revocation until that endpoint is deployed. +- ntfy delivery now has a configured publisher token. A read-only + authenticated account check returned `200`, resolving the prior publish + `403 Forbidden`; no test notification was sent. Earlier successful OpenCode approval and worker-flow checks remain useful historical evidence, but they do not prove the current deployment or a @@ -56,21 +57,25 @@ checkout. The current UI should become a diagnosis surface, not a five-column task catalogue. -1. **Persist and show a blocked diagnosis.** Project the structured blocking - reason/error into the task read model. Group the board by reason and age - (for example: lease failure, worker offline, expired lease, approval, - handoff validation, operator block) rather than rendering a giant generic - “Blocked” lane. -2. **Persist last-session and pane evidence.** Before a worker/coordinator - drops a terminal session mapping, retain harness, pane ID, last successful - capture/check, and a pane status of `open`, `closed`, `unreachable`, or - `unknown`. The UI must show the source and timestamp. For old records that - lack this evidence, say **unknown — legacy record has no retained - blocker/pane evidence**, never imply a live or closed pane. -3. **Make the task page lead with the diagnosis.** Put reason, last activity, - pane state, and next safe action first. Hide unavailable lifecycle forms - behind an “Unavailable actions” disclosure; an empty session must not - consume most of the page with disabled controls. +1. ~~**Persist and show a blocked diagnosis.**~~ **Closed in code, + deployment verification outstanding (2026-07-29).** `TaskBlocked` now + carries a validated `block_reason`; coordinator and browser-created blocks + set it, while older events receive a deterministic projection fallback. + The board groups blocked tasks by diagnosis and orders each group oldest + first instead of rendering one generic “Blocked” lane. +2. ~~**Persist last-session and pane evidence.**~~ **Closed in code, + deployment verification outstanding (2026-07-29).** Before worker + completion/release cleanup, the worker captures a `session_evidence` + snapshot (harness, pane, observed pane status, capture/check timestamps, + and source); coordinator blocks record their own check snapshot. The task + projection retains it and blocked cards state the source and timestamp. + Legacy records still say **unknown — legacy record has no retained + blocker/pane evidence**, never implying a live or closed pane. +3. ~~**Make the task page lead with the diagnosis.**~~ **Closed in code, + deployment verification outstanding (2026-07-29).** The task detail now + leads with reason, last activity, pane state, retained evidence, and the + next safe action. Only server-enabled lifecycle actions are shown directly; + unavailable actions are kept in an “Unavailable actions” disclosure. 4. **Separate active work from history.** Default the board to active, waiting, and needs-attention work; move completed/failed/test residue to filters or a compact history view. Add search, project filtering, and an @@ -334,7 +339,7 @@ Delivery` asserting the prompt target is the unique name. Nothing yet starts two same-harness sessions in distinct panes and verifies both attach, so the `agent_name_taken` failure mode itself is untested end-to-end. -### B17 — opaque harnesses must not author canonical handoff anchors (found live 2026-07-28) — closed in code; live success still unproven +### B17 — opaque harnesses must not author canonical handoff anchors (found live 2026-07-28) — closed; worker path live-verified The real OpenCode healthcheck run showed that prompting an opaque agent to write the full `continuity.Handoff` schema is the wrong ownership boundary. @@ -401,22 +406,32 @@ correction documented at the end of this file supplies the parsing and validation half. The coordinator no longer accepts a non-local herdr operation; the standing -rule is enforced rather than advisory. A successful live worker handoff, -release, and pickup remains the required operational proof. +rule is enforced rather than advisory. -**QA attempt (2026-07-29):** the bounded disposable task +**Failed QA fixture (2026-07-29):** the bounded disposable task `06FTSHBPYHQXN8MM849PFA1V6M` reached the worker and wrote its semantic report, but publication correctly refused it. Its prescribed fields combined to the canonical action `inspect the marker file — verify worker-owned handoff construction`; the circular-action guard rejects that word even when it occurs in the explanatory `WHY` text. This is an invalid QA fixture, not a -successful handoff or a release-path regression. The worker must be given a -fresh fixture whose combined `NEXT`/`WHY` action does not mention a handoff -(for example, `WHY: verify canonical artifact construction`), then the -release and successor pickup must be observed. The coordinator is token-gated -and this host cannot read the protected worker credential, so this session -could not enqueue that replacement task. The failed disposable pane was left -untouched; no destructive herdr calls were issued. +release-path regression. + +**Live success (2026-07-29):** after configuring `test-e2e` on the +`workpc-opencode` worker, disposable task `06FTY8ZA45CCZZHQ7H44SMQG14` +completed the full path. Its first pane (`w1B:p1`) created the marker and the +bounded semantic report. The worker, not the harness, published canonical +handoff `5e9e942f269f6d6394896186377e35d596d403bd04a58f0c307818af0499b208`: +its anchor was worker-derived (`git_sha` +`d73b576882b07bac34abaf2beabeacfaa8f79529`, branch +`orchestra/scratch/oc-06fty8za45cczzhq7h44smqg14`) and its semantic action +was `Verify the B17 probe marker file contents. — Verify canonical artifact +construction.` The worker recorded `TaskReleased`, routed a successor lease +with that handoff reference to a new pane (`w1C:p1`), and the successor +verified the marker through the scratch checkpoint. It then completed the +task with report artifact +`9a41950548118a47232747ff57fb7ac109dbdb2e45e0b8a8141d4828a6351f18`. +After `TaskCompleted`, the worker state had no sessions or leases. The +disposable worktree was intentionally retained; pane/session cleanup passed. ### B13 — `agent.start` silently no-ops under back-to-back leases (found live 2026-07-28) — closed (code fix; not yet re-verified live) @@ -745,16 +760,9 @@ bypass is closed by construction rather than by the header check alone. In dependency order, not importance order: -1. **Prove a successful B17 worker handoff.** Use a bounded disposable task - with a concrete next action and verify canonical report upload, release, - follow-up pickup, and cleanup. The rejection path is proven; success is - not. -2. **Fix health semantics and ntfy.** Report worker/local-herdr health - separately from legacy TCP registry probes, and correct the ntfy server - credential causing `403 Forbidden`. -3. **Address the Web UI backlog above**, starting with queue explanations, +1. **Address the Web UI backlog above**, starting with queue explanations, actionable worker health, and a usable approval/recovery workflow. -4. **Record a browser smoke.** Confirm login, refresh, invalid token, and +2. **Record a browser smoke.** Confirm login, refresh, invalid token, and expired-session behavior in an actual browser after the deployed assets settle. diff --git a/internal/webui/assets/assets/index-BlmzmqVL.js b/internal/webui/assets/assets/index-BlmzmqVL.js new file mode 100644 index 0000000..36019b7 --- /dev/null +++ b/internal/webui/assets/assets/index-BlmzmqVL.js @@ -0,0 +1,62 @@ +var Wm=u=>{throw TypeError(u)};var uf=(u,i,r)=>i.has(u)||Wm("Cannot "+r);var b=(u,i,r)=>(uf(u,i,"read from private field"),r?r.call(u):i.get(u)),P=(u,i,r)=>i.has(u)?Wm("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(u):i.set(u,r),k=(u,i,r,c)=>(uf(u,i,"write to private field"),c?c.call(u,r):i.set(u,r),r),re=(u,i,r)=>(uf(u,i,"access private method"),r);var Ts=(u,i,r,c)=>({set _(o){k(u,i,o,r)},get _(){return b(u,i,c)}});(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))c(o);new MutationObserver(o=>{for(const m of o)if(m.type==="childList")for(const y of m.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&c(y)}).observe(document,{childList:!0,subtree:!0});function r(o){const m={};return o.integrity&&(m.integrity=o.integrity),o.referrerPolicy&&(m.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?m.credentials="include":o.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function c(o){if(o.ep)return;o.ep=!0;const m=r(o);fetch(o.href,m)}})();function Xg(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}var sf={exports:{}},Gu={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Pm;function Zg(){if(Pm)return Gu;Pm=1;var u=Symbol.for("react.transitional.element"),i=Symbol.for("react.fragment");function r(c,o,m){var y=null;if(m!==void 0&&(y=""+m),o.key!==void 0&&(y=""+o.key),"key"in o){m={};for(var S in o)S!=="key"&&(m[S]=o[S])}else m=o;return o=m.ref,{$$typeof:u,type:c,key:y,ref:o!==void 0?o:null,props:m}}return Gu.Fragment=i,Gu.jsx=r,Gu.jsxs=r,Gu}var Im;function Kg(){return Im||(Im=1,sf.exports=Zg()),sf.exports}var h=Kg(),cf={exports:{}},ne={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ey;function Vg(){if(ey)return ne;ey=1;var u=Symbol.for("react.transitional.element"),i=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),y=Symbol.for("react.context"),S=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),v=Symbol.for("react.memo"),T=Symbol.for("react.lazy"),E=Symbol.for("react.activity"),z=Symbol.iterator;function D(j){return j===null||typeof j!="object"?null:(j=z&&j[z]||j["@@iterator"],typeof j=="function"?j:null)}var Y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,Q={};function B(j,q,J){this.props=j,this.context=q,this.refs=Q,this.updater=J||Y}B.prototype.isReactComponent={},B.prototype.setState=function(j,q){if(typeof j!="object"&&typeof j!="function"&&j!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,j,q,"setState")},B.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function G(){}G.prototype=B.prototype;function X(j,q,J){this.props=j,this.context=q,this.refs=Q,this.updater=J||Y}var Z=X.prototype=new G;Z.constructor=X,L(Z,B.prototype),Z.isPureReactComponent=!0;var K=Array.isArray;function ue(){}var ee={H:null,A:null,T:null,S:null},ae=Object.prototype.hasOwnProperty;function ye(j,q,J){var $=J.ref;return{$$typeof:u,type:j,key:q,ref:$!==void 0?$:null,props:J}}function Me(j,q){return ye(j.type,q,j.props)}function Qe(j){return typeof j=="object"&&j!==null&&j.$$typeof===u}function Ye(j){var q={"=":"=0",":":"=2"};return"$"+j.replace(/[=:]/g,function(J){return q[J]})}var Et=/\/+/g;function et(j,q){return typeof j=="object"&&j!==null&&j.key!=null?Ye(""+j.key):q.toString(36)}function De(j){switch(j.status){case"fulfilled":return j.value;case"rejected":throw j.reason;default:switch(typeof j.status=="string"?j.then(ue,ue):(j.status="pending",j.then(function(q){j.status==="pending"&&(j.status="fulfilled",j.value=q)},function(q){j.status==="pending"&&(j.status="rejected",j.reason=q)})),j.status){case"fulfilled":return j.value;case"rejected":throw j.reason}}throw j}function U(j,q,J,$,ie){var fe=typeof j;(fe==="undefined"||fe==="boolean")&&(j=null);var Ee=!1;if(j===null)Ee=!0;else switch(fe){case"bigint":case"string":case"number":Ee=!0;break;case"object":switch(j.$$typeof){case u:case i:Ee=!0;break;case T:return Ee=j._init,U(Ee(j._payload),q,J,$,ie)}}if(Ee)return ie=ie(j),Ee=$===""?"."+et(j,0):$,K(ie)?(J="",Ee!=null&&(J=Ee.replace(Et,"$&/")+"/"),U(ie,q,J,"",function(Fn){return Fn})):ie!=null&&(Qe(ie)&&(ie=Me(ie,J+(ie.key==null||j&&j.key===ie.key?"":(""+ie.key).replace(Et,"$&/")+"/")+Ee)),q.push(ie)),1;Ee=0;var ct=$===""?".":$+":";if(K(j))for(var Ge=0;Ge>>1,_e=U[Re];if(0>>1;Reo(J,le))$<_e&&0>o(ie,J)?(U[Re]=ie,U[$]=le,Re=$):(U[Re]=J,U[q]=le,Re=q);else if($<_e&&0>o(ie,le))U[Re]=ie,U[$]=le,Re=$;else break e}}return V}function o(U,V){var le=U.sortIndex-V.sortIndex;return le!==0?le:U.id-V.id}if(u.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;u.unstable_now=function(){return m.now()}}else{var y=Date,S=y.now();u.unstable_now=function(){return y.now()-S}}var p=[],v=[],T=1,E=null,z=3,D=!1,Y=!1,L=!1,Q=!1,B=typeof setTimeout=="function"?setTimeout:null,G=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function Z(U){for(var V=r(v);V!==null;){if(V.callback===null)c(v);else if(V.startTime<=U)c(v),V.sortIndex=V.expirationTime,i(p,V);else break;V=r(v)}}function K(U){if(L=!1,Z(U),!Y)if(r(p)!==null)Y=!0,ue||(ue=!0,Ye());else{var V=r(v);V!==null&&De(K,V.startTime-U)}}var ue=!1,ee=-1,ae=5,ye=-1;function Me(){return Q?!0:!(u.unstable_now()-yeU&&Me());){var Re=E.callback;if(typeof Re=="function"){E.callback=null,z=E.priorityLevel;var _e=Re(E.expirationTime<=U);if(U=u.unstable_now(),typeof _e=="function"){E.callback=_e,Z(U),V=!0;break t}E===r(p)&&c(p),Z(U)}else c(p);E=r(p)}if(E!==null)V=!0;else{var j=r(v);j!==null&&De(K,j.startTime-U),V=!1}}break e}finally{E=null,z=le,D=!1}V=void 0}}finally{V?Ye():ue=!1}}}var Ye;if(typeof X=="function")Ye=function(){X(Qe)};else if(typeof MessageChannel<"u"){var Et=new MessageChannel,et=Et.port2;Et.port1.onmessage=Qe,Ye=function(){et.postMessage(null)}}else Ye=function(){B(Qe,0)};function De(U,V){ee=B(function(){U(u.unstable_now())},V)}u.unstable_IdlePriority=5,u.unstable_ImmediatePriority=1,u.unstable_LowPriority=4,u.unstable_NormalPriority=3,u.unstable_Profiling=null,u.unstable_UserBlockingPriority=2,u.unstable_cancelCallback=function(U){U.callback=null},u.unstable_forceFrameRate=function(U){0>U||125Re?(U.sortIndex=le,i(v,U),r(p)===null&&U===r(v)&&(L?(G(ee),ee=-1):L=!0,De(K,le-Re))):(U.sortIndex=_e,i(p,U),Y||D||(Y=!0,ue||(ue=!0,Ye()))),U},u.unstable_shouldYield=Me,u.unstable_wrapCallback=function(U){var V=z;return function(){var le=z;z=V;try{return U.apply(this,arguments)}finally{z=le}}}})(of)),of}var ly;function Fg(){return ly||(ly=1,ff.exports=Jg()),ff.exports}var hf={exports:{}},it={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ny;function $g(){if(ny)return it;ny=1;var u=wf();function i(p){var v="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(i){console.error(i)}}return u(),hf.exports=$g(),hf.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var iy;function Pg(){if(iy)return Xu;iy=1;var u=Fg(),i=wf(),r=Wg();function c(e){var t="https://react.dev/errors/"+e;if(1_e||(e.current=Re[_e],Re[_e]=null,_e--)}function J(e,t){_e++,Re[_e]=e.current,e.current=t}var $=j(null),ie=j(null),fe=j(null),Ee=j(null);function ct(e,t){switch(J(fe,t),J(ie,e),J($,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Sm(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Sm(t),e=Em(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}q($),J($,e)}function Ge(){q($),q(ie),q(fe)}function Fn(e){e.memoizedState!==null&&J(Ee,e);var t=$.current,a=Em(t,e.type);t!==a&&(J(ie,e),J($,a))}function ui(e){ie.current===e&&(q($),q(ie)),Ee.current===e&&(q(Ee),Bu._currentValue=le)}var Ys,Ff;function pl(e){if(Ys===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Ys=t&&t[1]||"",Ff=-1)":-1n||g[l]!==C[n]){var N=` +`+g[l].replace(" at new "," at ");return e.displayName&&N.includes("")&&(N=N.replace("",e.displayName)),N}while(1<=l&&0<=n);break}}}finally{Gs=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?pl(a):""}function Sv(e,t){switch(e.tag){case 26:case 27:case 5:return pl(e.type);case 16:return pl("Lazy");case 13:return e.child!==t&&t!==null?pl("Suspense Fallback"):pl("Suspense");case 19:return pl("SuspenseList");case 0:case 15:return Xs(e.type,!1);case 11:return Xs(e.type.render,!1);case 1:return Xs(e.type,!0);case 31:return pl("Activity");default:return""}}function $f(e){try{var t="",a=null;do t+=Sv(e,a),a=e,e=e.return;while(e);return t}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}var Zs=Object.prototype.hasOwnProperty,Ks=u.unstable_scheduleCallback,Vs=u.unstable_cancelCallback,Ev=u.unstable_shouldYield,xv=u.unstable_requestPaint,xt=u.unstable_now,Tv=u.unstable_getCurrentPriorityLevel,Wf=u.unstable_ImmediatePriority,Pf=u.unstable_UserBlockingPriority,ii=u.unstable_NormalPriority,jv=u.unstable_LowPriority,If=u.unstable_IdlePriority,Rv=u.log,Ov=u.unstable_setDisableYieldValue,$n=null,Tt=null;function wa(e){if(typeof Rv=="function"&&Ov(e),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode($n,e)}catch{}}var jt=Math.clz32?Math.clz32:_v,Av=Math.log,Cv=Math.LN2;function _v(e){return e>>>=0,e===0?32:31-(Av(e)/Cv|0)|0}var si=256,ci=262144,ri=4194304;function gl(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&261888;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 fi(e,t,a){var l=e.pendingLanes;if(l===0)return 0;var n=0,s=e.suspendedLanes,f=e.pingedLanes;e=e.warmLanes;var d=l&134217727;return d!==0?(l=d&~s,l!==0?n=gl(l):(f&=d,f!==0?n=gl(f):a||(a=d&~e,a!==0&&(n=gl(a))))):(d=l&~s,d!==0?n=gl(d):f!==0?n=gl(f):a||(a=l&~e,a!==0&&(n=gl(a)))),n===0?0:t!==0&&t!==n&&(t&s)===0&&(s=n&-n,a=t&-t,s>=a||s===32&&(a&4194048)!==0)?t:n}function Wn(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function zv(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 eo(){var e=ri;return ri<<=1,(ri&62914560)===0&&(ri=4194304),e}function ks(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Pn(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Mv(e,t,a,l,n,s){var f=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var d=e.entanglements,g=e.expirationTimes,C=e.hiddenUpdates;for(a=f&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var qv=/[\n"\\]/g;function wt(e){return e.replace(qv,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Is(e,t,a,l,n,s,f,d){e.name="",f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?e.type=f:e.removeAttribute("type"),t!=null?f==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Ut(t)):e.value!==""+Ut(t)&&(e.value=""+Ut(t)):f!=="submit"&&f!=="reset"||e.removeAttribute("value"),t!=null?ec(e,f,Ut(t)):a!=null?ec(e,f,Ut(a)):l!=null&&e.removeAttribute("value"),n==null&&s!=null&&(e.defaultChecked=!!s),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),d!=null&&typeof d!="function"&&typeof d!="symbol"&&typeof d!="boolean"?e.name=""+Ut(d):e.removeAttribute("name")}function mo(e,t,a,l,n,s,f,d){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(e.type=s),t!=null||a!=null){if(!(s!=="submit"&&s!=="reset"||t!=null)){Ps(e);return}a=a!=null?""+Ut(a):"",t=t!=null?""+Ut(t):a,d||t===e.value||(e.value=t),e.defaultValue=t}l=l??n,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=d?e.checked:!!l,e.defaultChecked=!!l,f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"&&(e.name=f),Ps(e)}function ec(e,t,a){t==="number"&&di(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function Pl(e,t,a,l){if(e=e.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),uc=!1;if(oa)try{var au={};Object.defineProperty(au,"passive",{get:function(){uc=!0}}),window.addEventListener("test",au,au),window.removeEventListener("test",au,au)}catch{uc=!1}var qa=null,ic=null,yi=null;function Eo(){if(yi)return yi;var e,t=ic,a=t.length,l,n="value"in qa?qa.value:qa.textContent,s=n.length;for(e=0;e=uu),Ao=" ",Co=!1;function _o(e,t){switch(e){case"keyup":return op.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zo(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var an=!1;function dp(e,t){switch(e){case"compositionend":return zo(t);case"keypress":return t.which!==32?null:(Co=!0,Ao);case"textInput":return e=t.data,e===Ao&&Co?null:e;default:return null}}function mp(e,t){if(an)return e==="compositionend"||!oc&&_o(e,t)?(e=Eo(),yi=ic=qa=null,an=!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)return{node:a,offset:t-e};e=l}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Bo(a)}}function Qo(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Qo(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Yo(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=di(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=di(e.document)}return t}function mc(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 xp=oa&&"documentMode"in document&&11>=document.documentMode,ln=null,yc=null,ru=null,vc=!1;function Go(e,t,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;vc||ln==null||ln!==di(l)||(l=ln,"selectionStart"in l&&mc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),ru&&cu(ru,l)||(ru=l,l=cs(yc,"onSelect"),0>=f,n-=f,It=1<<32-jt(t)+n|a<ce?(me=W,W=null):me=W.sibling;var be=_(R,W,A[ce],w);if(be===null){W===null&&(W=me);break}e&&W&&be.alternate===null&&t(R,W),x=s(be,x,ce),ge===null?I=be:ge.sibling=be,ge=be,W=me}if(ce===A.length)return a(R,W),ve&&da(R,ce),I;if(W===null){for(;cece?(me=W,W=null):me=W.sibling;var ul=_(R,W,be.value,w);if(ul===null){W===null&&(W=me);break}e&&W&&ul.alternate===null&&t(R,W),x=s(ul,x,ce),ge===null?I=ul:ge.sibling=ul,ge=ul,W=me}if(be.done)return a(R,W),ve&&da(R,ce),I;if(W===null){for(;!be.done;ce++,be=A.next())be=H(R,be.value,w),be!==null&&(x=s(be,x,ce),ge===null?I=be:ge.sibling=be,ge=be);return ve&&da(R,ce),I}for(W=l(W);!be.done;ce++,be=A.next())be=M(W,R,ce,be.value,w),be!==null&&(e&&be.alternate!==null&&W.delete(be.key===null?ce:be.key),x=s(be,x,ce),ge===null?I=be:ge.sibling=be,ge=be);return e&&W.forEach(function(Gg){return t(R,Gg)}),ve&&da(R,ce),I}function Ce(R,x,A,w){if(typeof A=="object"&&A!==null&&A.type===L&&A.key===null&&(A=A.props.children),typeof A=="object"&&A!==null){switch(A.$$typeof){case D:e:{for(var I=A.key;x!==null;){if(x.key===I){if(I=A.type,I===L){if(x.tag===7){a(R,x.sibling),w=n(x,A.props.children),w.return=R,R=w;break e}}else if(x.elementType===I||typeof I=="object"&&I!==null&&I.$$typeof===ae&&_l(I)===x.type){a(R,x.sibling),w=n(x,A.props),yu(w,A),w.return=R,R=w;break e}a(R,x);break}else t(R,x);x=x.sibling}A.type===L?(w=jl(A.props.children,R.mode,w,A.key),w.return=R,R=w):(w=Ri(A.type,A.key,A.props,null,R.mode,w),yu(w,A),w.return=R,R=w)}return f(R);case Y:e:{for(I=A.key;x!==null;){if(x.key===I)if(x.tag===4&&x.stateNode.containerInfo===A.containerInfo&&x.stateNode.implementation===A.implementation){a(R,x.sibling),w=n(x,A.children||[]),w.return=R,R=w;break e}else{a(R,x);break}else t(R,x);x=x.sibling}w=Tc(A,R.mode,w),w.return=R,R=w}return f(R);case ae:return A=_l(A),Ce(R,x,A,w)}if(De(A))return F(R,x,A,w);if(Ye(A)){if(I=Ye(A),typeof I!="function")throw Error(c(150));return A=I.call(A),te(R,x,A,w)}if(typeof A.then=="function")return Ce(R,x,Di(A),w);if(A.$$typeof===X)return Ce(R,x,Ci(R,A),w);Ni(R,A)}return typeof A=="string"&&A!==""||typeof A=="number"||typeof A=="bigint"?(A=""+A,x!==null&&x.tag===6?(a(R,x.sibling),w=n(x,A),w.return=R,R=w):(a(R,x),w=xc(A,R.mode,w),w.return=R,R=w),f(R)):a(R,x)}return function(R,x,A,w){try{mu=0;var I=Ce(R,x,A,w);return yn=null,I}catch(W){if(W===mn||W===zi)throw W;var ge=Ot(29,W,null,R.mode);return ge.lanes=w,ge.return=R,ge}finally{}}}var Ml=oh(!0),hh=oh(!1),Ga=!1;function wc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hc(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 Xa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Za(e,t,a){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Se&2)!==0){var n=l.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),l.pending=t,t=ji(e),Fo(e,null,a),t}return Ti(e,l,t,a),ji(e)}function vu(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,ao(e,a)}}function qc(e,t){var a=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var n=null,s=null;if(a=a.firstBaseUpdate,a!==null){do{var f={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};s===null?n=s=f:s=s.next=f,a=a.next}while(a!==null);s===null?n=s=t:s=s.next=t}else n=s=t;a={baseState:l.baseState,firstBaseUpdate:n,lastBaseUpdate:s,shared:l.shared,callbacks:l.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Bc=!1;function pu(){if(Bc){var e=dn;if(e!==null)throw e}}function gu(e,t,a,l){Bc=!1;var n=e.updateQueue;Ga=!1;var s=n.firstBaseUpdate,f=n.lastBaseUpdate,d=n.shared.pending;if(d!==null){n.shared.pending=null;var g=d,C=g.next;g.next=null,f===null?s=C:f.next=C,f=g;var N=e.alternate;N!==null&&(N=N.updateQueue,d=N.lastBaseUpdate,d!==f&&(d===null?N.firstBaseUpdate=C:d.next=C,N.lastBaseUpdate=g))}if(s!==null){var H=n.baseState;f=0,N=C=g=null,d=s;do{var _=d.lane&-536870913,M=_!==d.lane;if(M?(de&_)===_:(l&_)===_){_!==0&&_===hn&&(Bc=!0),N!==null&&(N=N.next={lane:0,tag:d.tag,payload:d.payload,callback:null,next:null});e:{var F=e,te=d;_=t;var Ce=a;switch(te.tag){case 1:if(F=te.payload,typeof F=="function"){H=F.call(Ce,H,_);break e}H=F;break e;case 3:F.flags=F.flags&-65537|128;case 0:if(F=te.payload,_=typeof F=="function"?F.call(Ce,H,_):F,_==null)break e;H=E({},H,_);break e;case 2:Ga=!0}}_=d.callback,_!==null&&(e.flags|=64,M&&(e.flags|=8192),M=n.callbacks,M===null?n.callbacks=[_]:M.push(_))}else M={lane:_,tag:d.tag,payload:d.payload,callback:d.callback,next:null},N===null?(C=N=M,g=H):N=N.next=M,f|=_;if(d=d.next,d===null){if(d=n.shared.pending,d===null)break;M=d,d=M.next,M.next=null,n.lastBaseUpdate=M,n.shared.pending=null}}while(!0);N===null&&(g=H),n.baseState=g,n.firstBaseUpdate=C,n.lastBaseUpdate=N,s===null&&(n.shared.lanes=0),Fa|=f,e.lanes=f,e.memoizedState=H}}function dh(e,t){if(typeof e!="function")throw Error(c(191,e));e.call(t)}function mh(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;es?s:8;var f=U.T,d={};U.T=d,lr(e,!1,t,a);try{var g=n(),C=U.S;if(C!==null&&C(d,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var N=Mp(g,l);Eu(e,t,N,Mt(e))}else Eu(e,t,l,Mt(e))}catch(H){Eu(e,t,{then:function(){},status:"rejected",reason:H},Mt())}finally{V.p=s,f!==null&&d.types!==null&&(f.types=d.types),U.T=f}}function qp(){}function tr(e,t,a,l){if(e.tag!==5)throw Error(c(476));var n=Vh(e).queue;Kh(e,n,t,le,a===null?qp:function(){return kh(e),a(l)})}function Vh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:le,baseState:le,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:pa,lastRenderedState:le},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:pa,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function kh(e){var t=Vh(e);t.next===null&&(t=e.alternate.memoizedState),Eu(e,t.next.queue,{},Mt())}function ar(){return lt(Bu)}function Jh(){return Ze().memoizedState}function Fh(){return Ze().memoizedState}function Bp(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=Mt();e=Xa(a);var l=Za(t,e,a);l!==null&&(gt(l,t,a),vu(l,t,a)),t={cache:Mc()},e.payload=t;return}t=t.return}}function Lp(e,t,a){var l=Mt();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Xi(e)?Wh(t,a):(a=Sc(e,t,a,l),a!==null&&(gt(a,e,l),Ph(a,t,l)))}function $h(e,t,a){var l=Mt();Eu(e,t,a,l)}function Eu(e,t,a,l){var n={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Xi(e))Wh(t,n);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var f=t.lastRenderedState,d=s(f,a);if(n.hasEagerState=!0,n.eagerState=d,Rt(d,f))return Ti(e,t,n,0),ze===null&&xi(),!1}catch{}finally{}if(a=Sc(e,t,n,l),a!==null)return gt(a,e,l),Ph(a,t,l),!0}return!1}function lr(e,t,a,l){if(l={lane:2,revertLane:wr(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Xi(e)){if(t)throw Error(c(479))}else t=Sc(e,a,l,2),t!==null&>(t,e,2)}function Xi(e){var t=e.alternate;return e===se||t!==null&&t===se}function Wh(e,t){pn=Hi=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function Ph(e,t,a){if((a&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,ao(e,a)}}var xu={readContext:lt,use:Li,useCallback:qe,useContext:qe,useEffect:qe,useImperativeHandle:qe,useLayoutEffect:qe,useInsertionEffect:qe,useMemo:qe,useReducer:qe,useRef:qe,useState:qe,useDebugValue:qe,useDeferredValue:qe,useTransition:qe,useSyncExternalStore:qe,useId:qe,useHostTransitionStatus:qe,useFormState:qe,useActionState:qe,useOptimistic:qe,useMemoCache:qe,useCacheRefresh:qe};xu.useEffectEvent=qe;var Ih={readContext:lt,use:Li,useCallback:function(e,t){return rt().memoizedState=[e,t===void 0?null:t],e},useContext:lt,useEffect:Hh,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,Yi(4194308,4,Qh.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Yi(4194308,4,e,t)},useInsertionEffect:function(e,t){Yi(4,2,e,t)},useMemo:function(e,t){var a=rt();t=t===void 0?null:t;var l=e();if(Dl){wa(!0);try{e()}finally{wa(!1)}}return a.memoizedState=[l,t],l},useReducer:function(e,t,a){var l=rt();if(a!==void 0){var n=a(t);if(Dl){wa(!0);try{a(t)}finally{wa(!1)}}}else n=t;return l.memoizedState=l.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},l.queue=e,e=e.dispatch=Lp.bind(null,se,e),[l.memoizedState,e]},useRef:function(e){var t=rt();return e={current:e},t.memoizedState=e},useState:function(e){e=$c(e);var t=e.queue,a=$h.bind(null,se,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Ic,useDeferredValue:function(e,t){var a=rt();return er(a,e,t)},useTransition:function(){var e=$c(!1);return e=Kh.bind(null,se,e.queue,!0,!1),rt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var l=se,n=rt();if(ve){if(a===void 0)throw Error(c(407));a=a()}else{if(a=t(),ze===null)throw Error(c(349));(de&127)!==0||Sh(l,t,a)}n.memoizedState=a;var s={value:a,getSnapshot:t};return n.queue=s,Hh(xh.bind(null,l,s,e),[e]),l.flags|=2048,bn(9,{destroy:void 0},Eh.bind(null,l,s,a,t),null),a},useId:function(){var e=rt(),t=ze.identifierPrefix;if(ve){var a=ea,l=It;a=(l&~(1<<32-jt(l)-1)).toString(32)+a,t="_"+t+"R_"+a,a=qi++,0<\/script>",s=s.removeChild(s.firstChild);break;case"select":s=typeof l.is=="string"?f.createElement("select",{is:l.is}):f.createElement("select"),l.multiple?s.multiple=!0:l.size&&(s.size=l.size);break;default:s=typeof l.is=="string"?f.createElement(n,{is:l.is}):f.createElement(n)}}s[tt]=t,s[ht]=l;e:for(f=t.child;f!==null;){if(f.tag===5||f.tag===6)s.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===t)break e;for(;f.sibling===null;){if(f.return===null||f.return===t)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}t.stateNode=s;e:switch(ut(s,n,l),n){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&ba(t)}}return Ue(t),pr(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&ba(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(c(166));if(e=fe.current,fn(t)){if(e=t.stateNode,a=t.memoizedProps,l=null,n=at,n!==null)switch(n.tag){case 27:case 5:l=n.memoizedProps}e[tt]=t,e=!!(e.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||gm(e.nodeValue,a)),e||Qa(t,!0)}else e=rs(e).createTextNode(l),e[tt]=t,t.stateNode=e}return Ue(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(l=fn(t),a!==null){if(e===null){if(!l)throw Error(c(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(557));e[tt]=t}else Rl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ue(t),e=!1}else a=Ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(Ct(t),t):(Ct(t),null);if((t.flags&128)!==0)throw Error(c(558))}return Ue(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=fn(t),l!==null&&l.dehydrated!==null){if(e===null){if(!n)throw Error(c(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(c(317));n[tt]=t}else Rl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ue(t),n=!1}else n=Ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(Ct(t),t):(Ct(t),null)}return Ct(t),(t.flags&128)!==0?(t.lanes=a,t):(a=l!==null,e=e!==null&&e.memoizedState!==null,a&&(l=t.child,n=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(n=l.alternate.memoizedState.cachePool.pool),s=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(s=l.memoizedState.cachePool.pool),s!==n&&(l.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),Ji(t,t.updateQueue),Ue(t),null);case 4:return Ge(),e===null&&Lr(t.stateNode.containerInfo),Ue(t),null;case 10:return ya(t.type),Ue(t),null;case 19:if(q(Xe),l=t.memoizedState,l===null)return Ue(t),null;if(n=(t.flags&128)!==0,s=l.rendering,s===null)if(n)ju(l,!1);else{if(Be!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(s=wi(e),s!==null){for(t.flags|=128,ju(l,!1),e=s.updateQueue,t.updateQueue=e,Ji(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)$o(a,e),a=a.sibling;return J(Xe,Xe.current&1|2),ve&&da(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&xt()>Ii&&(t.flags|=128,n=!0,ju(l,!1),t.lanes=4194304)}else{if(!n)if(e=wi(s),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,Ji(t,e),ju(l,!0),l.tail===null&&l.tailMode==="hidden"&&!s.alternate&&!ve)return Ue(t),null}else 2*xt()-l.renderingStartTime>Ii&&a!==536870912&&(t.flags|=128,n=!0,ju(l,!1),t.lanes=4194304);l.isBackwards?(s.sibling=t.child,t.child=s):(e=l.last,e!==null?e.sibling=s:t.child=s,l.last=s)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=xt(),e.sibling=null,a=Xe.current,J(Xe,n?a&1|2:a&1),ve&&da(t,l.treeForkCount),e):(Ue(t),null);case 22:case 23:return Ct(t),Qc(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(a&536870912)!==0&&(t.flags&128)===0&&(Ue(t),t.subtreeFlags&6&&(t.flags|=8192)):Ue(t),a=t.updateQueue,a!==null&&Ji(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==a&&(t.flags|=2048),e!==null&&q(Cl),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),ya(Ke),Ue(t),null;case 25:return null;case 30:return null}throw Error(c(156,t.tag))}function Zp(e,t){switch(Rc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ya(Ke),Ge(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ui(t),null;case 31:if(t.memoizedState!==null){if(Ct(t),t.alternate===null)throw Error(c(340));Rl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Ct(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(c(340));Rl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return q(Xe),null;case 4:return Ge(),null;case 10:return ya(t.type),null;case 22:case 23:return Ct(t),Qc(),e!==null&&q(Cl),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ya(Ke),null;case 25:return null;default:return null}}function Td(e,t){switch(Rc(t),t.tag){case 3:ya(Ke),Ge();break;case 26:case 27:case 5:ui(t);break;case 4:Ge();break;case 31:t.memoizedState!==null&&Ct(t);break;case 13:Ct(t);break;case 19:q(Xe);break;case 10:ya(t.type);break;case 22:case 23:Ct(t),Qc(),e!==null&&q(Cl);break;case 24:ya(Ke)}}function Ru(e,t){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var n=l.next;a=n;do{if((a.tag&e)===e){l=void 0;var s=a.create,f=a.inst;l=s(),f.destroy=l}a=a.next}while(a!==n)}}catch(d){je(t,t.return,d)}}function ka(e,t,a){try{var l=t.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var s=n.next;l=s;do{if((l.tag&e)===e){var f=l.inst,d=f.destroy;if(d!==void 0){f.destroy=void 0,n=t;var g=a,C=d;try{C()}catch(N){je(n,g,N)}}}l=l.next}while(l!==s)}}catch(N){je(t,t.return,N)}}function jd(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{mh(t,a)}catch(l){je(e,e.return,l)}}}function Rd(e,t,a){a.props=Nl(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(l){je(e,t,l)}}function Ou(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof a=="function"?e.refCleanup=a(l):a.current=l}}catch(n){je(e,t,n)}}function ta(e,t){var a=e.ref,l=e.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(n){je(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(n){je(e,t,n)}else a.current=null}function Od(e){var t=e.type,a=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break e;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(n){je(e,e.return,n)}}function gr(e,t,a){try{var l=e.stateNode;hg(l,e.type,a,t),l[ht]=t}catch(n){je(e,e.return,n)}}function Ad(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&el(e.type)||e.tag===4}function br(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ad(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&&el(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Sr(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=fa));else if(l!==4&&(l===27&&el(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(Sr(e,t,a),e=e.sibling;e!==null;)Sr(e,t,a),e=e.sibling}function Fi(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(l!==4&&(l===27&&el(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Fi(e,t,a),e=e.sibling;e!==null;)Fi(e,t,a),e=e.sibling}function Cd(e){var t=e.stateNode,a=e.memoizedProps;try{for(var l=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);ut(t,l,a),t[tt]=e,t[ht]=a}catch(s){je(e,e.return,s)}}var Sa=!1,Je=!1,Er=!1,_d=typeof WeakSet=="function"?WeakSet:Set,Pe=null;function Kp(e,t){if(e=e.containerInfo,Gr=vs,e=Yo(e),mc(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var n=l.anchorOffset,s=l.focusNode;l=l.focusOffset;try{a.nodeType,s.nodeType}catch{a=null;break e}var f=0,d=-1,g=-1,C=0,N=0,H=e,_=null;t:for(;;){for(var M;H!==a||n!==0&&H.nodeType!==3||(d=f+n),H!==s||l!==0&&H.nodeType!==3||(g=f+l),H.nodeType===3&&(f+=H.nodeValue.length),(M=H.firstChild)!==null;)_=H,H=M;for(;;){if(H===e)break t;if(_===a&&++C===n&&(d=f),_===s&&++N===l&&(g=f),(M=H.nextSibling)!==null)break;H=_,_=H.parentNode}H=M}a=d===-1||g===-1?null:{start:d,end:g}}else a=null}a=a||{start:0,end:0}}else a=null;for(Xr={focusedElem:e,selectionRange:a},vs=!1,Pe=t;Pe!==null;)if(t=Pe,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Pe=e;else for(;Pe!==null;){switch(t=Pe,s=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),ut(s,l,a),s[tt]=e,We(s),l=s;break e;case"link":var f=wm("link","href",n).get(l+(a.href||""));if(f){for(var d=0;dCe&&(f=Ce,Ce=te,te=f);var R=Lo(d,te),x=Lo(d,Ce);if(R&&x&&(M.rangeCount!==1||M.anchorNode!==R.node||M.anchorOffset!==R.offset||M.focusNode!==x.node||M.focusOffset!==x.offset)){var A=H.createRange();A.setStart(R.node,R.offset),M.removeAllRanges(),te>Ce?(M.addRange(A),M.extend(x.node,x.offset)):(A.setEnd(x.node,x.offset),M.addRange(A))}}}}for(H=[],M=d;M=M.parentNode;)M.nodeType===1&&H.push({element:M,left:M.scrollLeft,top:M.scrollTop});for(typeof d.focus=="function"&&d.focus(),d=0;da?32:a,U.T=null,a=Cr,Cr=null;var s=Wa,f=Ra;if(Fe=0,jn=Wa=null,Ra=0,(Se&6)!==0)throw Error(c(331));var d=Se;if(Se|=4,Qd(s.current),qd(s,s.current,f,a),Se=d,Du(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot($n,s)}catch{}return!0}finally{V.p=n,U.T=l,nm(e,t)}}function im(e,t,a){t=qt(a,t),t=sr(e.stateNode,t,2),e=Za(e,t,2),e!==null&&(Pn(e,2),aa(e))}function je(e,t,a){if(e.tag===3)im(e,e,a);else for(;t!==null;){if(t.tag===3){im(t,e,a);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&($a===null||!$a.has(l))){e=qt(a,e),a=sd(2),l=Za(t,a,2),l!==null&&(cd(a,l,t,e),Pn(l,2),aa(l));break}}t=t.return}}function Dr(e,t,a){var l=e.pingCache;if(l===null){l=e.pingCache=new Jp;var n=new Set;l.set(t,n)}else n=l.get(t),n===void 0&&(n=new Set,l.set(t,n));n.has(a)||(jr=!0,n.add(a),e=Ip.bind(null,e,t,a),t.then(e,e))}function Ip(e,t,a){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,ze===e&&(de&a)===a&&(Be===4||Be===3&&(de&62914560)===de&&300>xt()-Pi?(Se&2)===0&&Rn(e,0):Rr|=a,Tn===de&&(Tn=0)),aa(e)}function sm(e,t){t===0&&(t=eo()),e=Tl(e,t),e!==null&&(Pn(e,t),aa(e))}function eg(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),sm(e,a)}function tg(e,t){var a=0;switch(e.tag){case 31:case 13:var l=e.stateNode,n=e.memoizedState;n!==null&&(a=n.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(c(314))}l!==null&&l.delete(t),sm(e,a)}function ag(e,t){return Ks(e,t)}var us=null,An=null,Nr=!1,is=!1,Ur=!1,Ia=0;function aa(e){e!==An&&e.next===null&&(An===null?us=An=e:An=An.next=e),is=!0,Nr||(Nr=!0,ng())}function Du(e,t){if(!Ur&&is){Ur=!0;do for(var a=!1,l=us;l!==null;){if(e!==0){var n=l.pendingLanes;if(n===0)var s=0;else{var f=l.suspendedLanes,d=l.pingedLanes;s=(1<<31-jt(42|e)+1)-1,s&=n&~(f&~d),s=s&201326741?s&201326741|1:s?s|2:0}s!==0&&(a=!0,om(l,s))}else s=de,s=fi(l,l===ze?s:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(s&3)===0||Wn(l,s)||(a=!0,om(l,s));l=l.next}while(a);Ur=!1}}function lg(){cm()}function cm(){is=Nr=!1;var e=0;Ia!==0&&mg()&&(e=Ia);for(var t=xt(),a=null,l=us;l!==null;){var n=l.next,s=rm(l,t);s===0?(l.next=null,a===null?us=n:a.next=n,n===null&&(An=a)):(a=l,(e!==0||(s&3)!==0)&&(is=!0)),l=n}Fe!==0&&Fe!==5||Du(e),Ia!==0&&(Ia=0)}function rm(e,t){for(var a=e.suspendedLanes,l=e.pingedLanes,n=e.expirationTimes,s=e.pendingLanes&-62914561;0d)break;var N=g.transferSize,H=g.initiatorType;N&&bm(H)&&(g=g.responseEnd,f+=N*(g"u"?null:document;function Mm(e,t,a){var l=Cn;if(l&&typeof t=="string"&&t){var n=wt(t);n='link[rel="'+e+'"][href="'+n+'"]',typeof a=="string"&&(n+='[crossorigin="'+a+'"]'),zm.has(n)||(zm.add(n),e={rel:e,crossOrigin:a,href:t},l.querySelector(n)===null&&(t=l.createElement("link"),ut(t,"link",e),We(t),l.head.appendChild(t)))}}function Tg(e){Oa.D(e),Mm("dns-prefetch",e,null)}function jg(e,t){Oa.C(e,t),Mm("preconnect",e,t)}function Rg(e,t,a){Oa.L(e,t,a);var l=Cn;if(l&&e&&t){var n='link[rel="preload"][as="'+wt(t)+'"]';t==="image"&&a&&a.imageSrcSet?(n+='[imagesrcset="'+wt(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(n+='[imagesizes="'+wt(a.imageSizes)+'"]')):n+='[href="'+wt(e)+'"]';var s=n;switch(t){case"style":s=_n(e);break;case"script":s=zn(e)}Xt.has(s)||(e=E({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),Xt.set(s,e),l.querySelector(n)!==null||t==="style"&&l.querySelector(Hu(s))||t==="script"&&l.querySelector(qu(s))||(t=l.createElement("link"),ut(t,"link",e),We(t),l.head.appendChild(t)))}}function Og(e,t){Oa.m(e,t);var a=Cn;if(a&&e){var l=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+wt(l)+'"][href="'+wt(e)+'"]',s=n;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=zn(e)}if(!Xt.has(s)&&(e=E({rel:"modulepreload",href:e},t),Xt.set(s,e),a.querySelector(n)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(qu(s)))return}l=a.createElement("link"),ut(l,"link",e),We(l),a.head.appendChild(l)}}}function Ag(e,t,a){Oa.S(e,t,a);var l=Cn;if(l&&e){var n=$l(l).hoistableStyles,s=_n(e);t=t||"default";var f=n.get(s);if(!f){var d={loading:0,preload:null};if(f=l.querySelector(Hu(s)))d.loading=5;else{e=E({rel:"stylesheet",href:e,"data-precedence":t},a),(a=Xt.get(s))&&$r(e,a);var g=f=l.createElement("link");We(g),ut(g,"link",e),g._p=new Promise(function(C,N){g.onload=C,g.onerror=N}),g.addEventListener("load",function(){d.loading|=1}),g.addEventListener("error",function(){d.loading|=2}),d.loading|=4,os(f,t,l)}f={type:"stylesheet",instance:f,count:1,state:d},n.set(s,f)}}}function Cg(e,t){Oa.X(e,t);var a=Cn;if(a&&e){var l=$l(a).hoistableScripts,n=zn(e),s=l.get(n);s||(s=a.querySelector(qu(n)),s||(e=E({src:e,async:!0},t),(t=Xt.get(n))&&Wr(e,t),s=a.createElement("script"),We(s),ut(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(n,s))}}function _g(e,t){Oa.M(e,t);var a=Cn;if(a&&e){var l=$l(a).hoistableScripts,n=zn(e),s=l.get(n);s||(s=a.querySelector(qu(n)),s||(e=E({src:e,async:!0,type:"module"},t),(t=Xt.get(n))&&Wr(e,t),s=a.createElement("script"),We(s),ut(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(n,s))}}function Dm(e,t,a,l){var n=(n=fe.current)?fs(n):null;if(!n)throw Error(c(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=_n(a.href),a=$l(n).hoistableStyles,l=a.get(t),l||(l={type:"style",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=_n(a.href);var s=$l(n).hoistableStyles,f=s.get(e);if(f||(n=n.ownerDocument||n,f={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,f),(s=n.querySelector(Hu(e)))&&!s._p&&(f.instance=s,f.state.loading=5),Xt.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Xt.set(e,a),s||zg(n,e,a,f.state))),t&&l===null)throw Error(c(528,""));return f}if(t&&l!==null)throw Error(c(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=zn(a),a=$l(n).hoistableScripts,l=a.get(t),l||(l={type:"script",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,e))}}function _n(e){return'href="'+wt(e)+'"'}function Hu(e){return'link[rel="stylesheet"]['+e+"]"}function Nm(e){return E({},e,{"data-precedence":e.precedence,precedence:null})}function zg(e,t,a,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),ut(t,"link",a),We(t),e.head.appendChild(t))}function zn(e){return'[src="'+wt(e)+'"]'}function qu(e){return"script[async]"+e}function Um(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+wt(a.href)+'"]');if(l)return t.instance=l,We(l),l;var n=E({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),We(l),ut(l,"style",n),os(l,a.precedence,e),t.instance=l;case"stylesheet":n=_n(a.href);var s=e.querySelector(Hu(n));if(s)return t.state.loading|=4,t.instance=s,We(s),s;l=Nm(a),(n=Xt.get(n))&&$r(l,n),s=(e.ownerDocument||e).createElement("link"),We(s);var f=s;return f._p=new Promise(function(d,g){f.onload=d,f.onerror=g}),ut(s,"link",l),t.state.loading|=4,os(s,a.precedence,e),t.instance=s;case"script":return s=zn(a.src),(n=e.querySelector(qu(s)))?(t.instance=n,We(n),n):(l=a,(n=Xt.get(s))&&(l=E({},a),Wr(l,n)),e=e.ownerDocument||e,n=e.createElement("script"),We(n),ut(n,"link",l),e.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(c(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,os(l,a.precedence,e));return t.instance}function os(e,t,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=l.length?l[l.length-1]:null,s=n,f=0;f title"):null)}function Mg(e,t,a){if(a===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 qm(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Dg(e,t,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=_n(l.href),s=t.querySelector(Hu(n));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ds.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=s,We(s);return}s=t.ownerDocument||t,l=Nm(l),(n=Xt.get(n))&&$r(l,n),s=s.createElement("link"),We(s);var f=s;f._p=new Promise(function(d,g){f.onload=d,f.onerror=g}),ut(s,"link",l),a.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=ds.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Pr=0;function Ng(e,t){return e.stylesheets&&e.count===0&&ys(e,e.stylesheets),0Pr?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(n)}}:null}function ds(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)ys(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var ms=null;function ys(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ms=new Map,t.forEach(Ug,e),ms=null,ds.call(e))}function Ug(e,t){if(!(t.state.loading&4)){var a=ms.get(e);if(a)var l=a.get(null);else{a=new Map,ms.set(e,a);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(i){console.error(i)}}return u(),rf.exports=Pg(),rf.exports}var e0=Ig();/** + * react-router v7.18.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */var Hf=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,By=/^[\\/]{2}/;function t0(u,i){return i+u.replace(/\\/g,"/")}var cy="popstate";function ry(u){return typeof u=="object"&&u!=null&&"pathname"in u&&"search"in u&&"hash"in u&&"state"in u&&"key"in u}function a0(u={}){function i(c,o){var v;let m=(v=o.state)==null?void 0:v.masked,{pathname:y,search:S,hash:p}=m||c.location;return vf("",{pathname:y,search:S,hash:p},o.state&&o.state.usr||null,o.state&&o.state.key||"default",m?{pathname:c.location.pathname,search:c.location.search,hash:c.location.hash}:void 0)}function r(c,o){return typeof o=="string"?o:ku(o)}return n0(i,r,null,u)}function He(u,i){if(u===!1||u===null||typeof u>"u")throw new Error(i)}function ia(u,i){if(!u){typeof console<"u"&&console.warn(i);try{throw new Error(i)}catch{}}}function l0(){return Math.random().toString(36).substring(2,10)}function fy(u,i){return{usr:u.state,key:u.key,idx:i,masked:u.mask?{pathname:u.pathname,search:u.search,hash:u.hash}:void 0}}function vf(u,i,r=null,c,o){return{pathname:typeof u=="string"?u:u.pathname,search:"",hash:"",...typeof i=="string"?Vn(i):i,state:r,key:i&&i.key||c||l0(),mask:o}}function ku({pathname:u="/",search:i="",hash:r=""}){return i&&i!=="?"&&(u+=i.charAt(0)==="?"?i:"?"+i),r&&r!=="#"&&(u+=r.charAt(0)==="#"?r:"#"+r),u}function Vn(u){let i={};if(u){let r=u.indexOf("#");r>=0&&(i.hash=u.substring(r),u=u.substring(0,r));let c=u.indexOf("?");c>=0&&(i.search=u.substring(c),u=u.substring(0,c)),u&&(i.pathname=u)}return i}function n0(u,i,r,c={}){let{window:o=document.defaultView,v5Compat:m=!1}=c,y=o.history,S="POP",p=null,v=T();v==null&&(v=0,y.replaceState({...y.state,idx:v},""));function T(){return(y.state||{idx:null}).idx}function E(){S="POP";let Q=T(),B=Q==null?null:Q-v;v=Q,p&&p({action:S,location:L.location,delta:B})}function z(Q,B){S="PUSH";let G=ry(Q)?Q:vf(L.location,Q,B);v=T()+1;let X=fy(G,v),Z=L.createHref(G.mask||G);try{y.pushState(X,"",Z)}catch(K){if(K instanceof DOMException&&K.name==="DataCloneError")throw K;o.location.assign(Z)}m&&p&&p({action:S,location:L.location,delta:1})}function D(Q,B){S="REPLACE";let G=ry(Q)?Q:vf(L.location,Q,B);v=T();let X=fy(G,v),Z=L.createHref(G.mask||G);y.replaceState(X,"",Z),m&&p&&p({action:S,location:L.location,delta:0})}function Y(Q){return u0(o,Q)}let L={get action(){return S},get location(){return u(o,y)},listen(Q){if(p)throw new Error("A history only accepts one active listener");return o.addEventListener(cy,E),p=Q,()=>{o.removeEventListener(cy,E),p=null}},createHref(Q){return i(o,Q)},createURL:Y,encodeLocation(Q){let B=Y(Q);return{pathname:B.pathname,search:B.search,hash:B.hash}},push:z,replace:D,go(Q){return y.go(Q)}};return L}function u0(u,i,r=!1){let c="http://localhost";u&&(c=u.location.origin!=="null"?u.location.origin:u.location.href),He(c,"No window.location.(origin|href) available to create URL");let o=typeof i=="string"?i:ku(i);return o=o.replace(/ $/,"%20"),!r&&By.test(o)&&(o=c+o),new URL(o,c)}function Ly(u,i,r="/"){return i0(u,i,r,!1)}function i0(u,i,r,c,o){let m=typeof i=="string"?Vn(i):i,y=Ua(m.pathname||"/",r);if(y==null)return null;let S=s0(u),p=null,v=g0(y);for(let T=0;p==null&&T{let T={relativePath:v===void 0?y.path||"":v,caseSensitive:y.caseSensitive===!0,childrenIndex:S,route:y};if(T.relativePath.startsWith("/")){if(!T.relativePath.startsWith(c)&&p)return;He(T.relativePath.startsWith(c),`Absolute route path "${T.relativePath}" nested under path "${c}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),T.relativePath=T.relativePath.slice(c.length)}let E=$t([c,T.relativePath]),z=r.concat(T);y.children&&y.children.length>0&&(He(y.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${E}".`),Qy(y.children,i,z,E,p)),!(y.path==null&&!y.index)&&i.push({path:E,score:y0(E,y.index),routesMeta:z.map((D,Y)=>{let[L,Q]=Xy(D.relativePath,D.caseSensitive,Y===z.length-1);return{...D,matcher:L,compiledParams:Q}})})};return u.forEach((y,S)=>{var p;if(y.path===""||!((p=y.path)!=null&&p.includes("?")))m(y,S);else for(let v of Yy(y.path))m(y,S,!0,v)}),i}function Yy(u){let i=u.split("/");if(i.length===0)return[];let[r,...c]=i,o=r.endsWith("?"),m=r.replace(/\?$/,"");if(c.length===0)return o?[m,""]:[m];let y=Yy(c.join("/")),S=[];return S.push(...y.map(p=>p===""?m:[m,p].join("/"))),o&&S.push(...y),S.map(p=>u.startsWith("/")&&p===""?"/":p)}function c0(u){u.sort((i,r)=>i.score!==r.score?r.score-i.score:v0(i.routesMeta.map(c=>c.childrenIndex),r.routesMeta.map(c=>c.childrenIndex)))}var r0=/^:[\w-]+$/,f0=3,o0=2,h0=1,d0=10,m0=-2,oy=u=>u==="*";function y0(u,i){let r=u.split("/"),c=r.length;return r.some(oy)&&(c+=m0),i&&(c+=o0),r.filter(o=>!oy(o)).reduce((o,m)=>o+(r0.test(m)?f0:m===""?h0:d0),c)}function v0(u,i){return u.length===i.length&&u.slice(0,-1).every((c,o)=>c===i[o])?u[u.length-1]-i[i.length-1]:0}function p0(u,i,r=!1){let{routesMeta:c}=u,o={},m="/",y=[];for(let S=0;S{if(T==="*"){let Y=S[z]||"";y=m.slice(0,m.length-Y.length).replace(/(.)\/+$/,"$1")}const D=S[z];return E&&!D?v[T]=void 0:v[T]=(D||"").replace(/%2F/g,"/"),v},{}),pathname:m,pathnameBase:y,pattern:u}}function Xy(u,i=!1,r=!0){ia(u==="*"||!u.endsWith("*")||u.endsWith("/*"),`Route path "${u}" will be treated as if it were "${u.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${u.replace(/\*$/,"/*")}".`);let c=[],o="^"+u.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(y,S,p,v,T)=>{if(c.push({paramName:S,isOptional:p!=null}),p){let E=T.charAt(v+y.length);return E&&E!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return u.endsWith("*")?(c.push({paramName:"*"}),o+=u==="*"||u==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":u!==""&&u!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,i?void 0:"i"),c]}function g0(u){try{return u.split("/").map(i=>decodeURIComponent(i).replace(/\//g,"%2F")).join("/")}catch(i){return ia(!1,`The URL path "${u}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${i}).`),u}}function Ua(u,i){if(i==="/")return u;if(!u.toLowerCase().startsWith(i.toLowerCase()))return null;let r=i.endsWith("/")?i.length-1:i.length,c=u.charAt(r);return c&&c!=="/"?null:u.slice(r)||"/"}function b0(u,i="/"){let{pathname:r,search:c="",hash:o=""}=typeof u=="string"?Vn(u):u,m;return r?(r=Ky(r),r.startsWith("/")?m=hy(r.substring(1),"/"):m=hy(r,i)):m=i,{pathname:m,search:x0(c),hash:T0(o)}}function hy(u,i){let r=Ns(i).split("/");return u.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function df(u,i,r,c){return`Cannot include a '${u}' character in a manually specified \`to.${i}\` field [${JSON.stringify(c)}]. Please separate it out to the \`to.${r}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function S0(u){return u.filter((i,r)=>r===0||i.route.path&&i.route.path.length>0)}function Zy(u){let i=S0(u);return i.map((r,c)=>c===i.length-1?r.pathname:r.pathnameBase)}function qf(u,i,r,c=!1){let o;typeof u=="string"?o=Vn(u):(o={...u},He(!o.pathname||!o.pathname.includes("?"),df("?","pathname","search",o)),He(!o.pathname||!o.pathname.includes("#"),df("#","pathname","hash",o)),He(!o.search||!o.search.includes("#"),df("#","search","hash",o)));let m=u===""||o.pathname==="",y=m?"/":o.pathname,S;if(y==null)S=r;else{let E=i.length-1;if(!c&&y.startsWith("..")){let z=y.split("/");for(;z[0]==="..";)z.shift(),E-=1;o.pathname=z.join("/")}S=E>=0?i[E]:"/"}let p=b0(o,S),v=y&&y!=="/"&&y.endsWith("/"),T=(m||y===".")&&r.endsWith("/");return!p.pathname.endsWith("/")&&(v||T)&&(p.pathname+="/"),p}var Ky=u=>u.replace(/[\\/]{2,}/g,"/"),$t=u=>Ky(u.join("/")),Ns=u=>u.replace(/\/+$/,""),E0=u=>Ns(u).replace(/^\/*/,"/"),x0=u=>!u||u==="?"?"":u.startsWith("?")?u:"?"+u,T0=u=>!u||u==="#"?"":u.startsWith("#")?u:"#"+u,j0=class{constructor(u,i,r,c=!1){this.status=u,this.statusText=i||"",this.internal=c,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}};function R0(u){return u!=null&&typeof u.status=="number"&&typeof u.statusText=="string"&&typeof u.internal=="boolean"&&"data"in u}function O0(u){let i=u.map(r=>r.route.path).filter(Boolean);return $t(i)||"/"}var Vy=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ky(u,i){let r=u;if(typeof r!="string"||!Hf.test(r))return{absoluteURL:void 0,isExternal:!1,to:r};let c=r,o=!1;if(Vy)try{let m=new URL(window.location.href),y=By.test(r)?new URL(t0(r,m.protocol)):new URL(r),S=Ua(y.pathname,i);y.origin===m.origin&&S!=null?r=S+y.search+y.hash:o=!0}catch{ia(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:c,isExternal:o,to:r}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Jy=["POST","PUT","PATCH","DELETE"];new Set(Jy);var A0=["GET",...Jy];new Set(A0);var C0=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function _0(u){try{return C0.includes(new URL(u).protocol)}catch{return!1}}var kn=O.createContext(null);kn.displayName="DataRouter";var qs=O.createContext(null);qs.displayName="DataRouterState";var Fy=O.createContext(!1);function z0(){return O.useContext(Fy)}var $y=O.createContext({isTransitioning:!1});$y.displayName="ViewTransition";var M0=O.createContext(new Map);M0.displayName="Fetchers";var D0=O.createContext(null);D0.displayName="Await";var Kt=O.createContext(null);Kt.displayName="Navigation";var ei=O.createContext(null);ei.displayName="Location";var sa=O.createContext({outlet:null,matches:[],isDataRoute:!1});sa.displayName="Route";var Bf=O.createContext(null);Bf.displayName="RouteError";var Wy="REACT_ROUTER_ERROR",N0="REDIRECT",U0="ROUTE_ERROR_RESPONSE";function w0(u){if(u.startsWith(`${Wy}:${N0}:{`))try{let i=JSON.parse(u.slice(28));if(typeof i=="object"&&i&&typeof i.status=="number"&&typeof i.statusText=="string"&&typeof i.location=="string"&&typeof i.reloadDocument=="boolean"&&typeof i.replace=="boolean")return i}catch{}}function H0(u){if(u.startsWith(`${Wy}:${U0}:{`))try{let i=JSON.parse(u.slice(40));if(typeof i=="object"&&i&&typeof i.status=="number"&&typeof i.statusText=="string")return new j0(i.status,i.statusText,i.data)}catch{}}function q0(u,{relative:i}={}){He(ti(),"useHref() may be used only in the context of a component.");let{basename:r,navigator:c}=O.useContext(Kt),{hash:o,pathname:m,search:y}=ai(u,{relative:i}),S=m;return r!=="/"&&(S=m==="/"?r:$t([r,m])),c.createHref({pathname:S,search:y,hash:o})}function ti(){return O.useContext(ei)!=null}function ca(){return He(ti(),"useLocation() may be used only in the context of a component."),O.useContext(ei).location}var Py="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Iy(u){O.useContext(Kt).static||O.useLayoutEffect(u)}function Bs(){let{isDataRoute:u}=O.useContext(sa);return u?$0():B0()}function B0(){He(ti(),"useNavigate() may be used only in the context of a component.");let u=O.useContext(kn),{basename:i,navigator:r}=O.useContext(Kt),{matches:c}=O.useContext(sa),{pathname:o}=ca(),m=JSON.stringify(Zy(c)),y=O.useRef(!1);return Iy(()=>{y.current=!0}),O.useCallback((p,v={})=>{if(ia(y.current,Py),!y.current)return;if(typeof p=="number"){r.go(p);return}let T=qf(p,JSON.parse(m),o,v.relative==="path");u==null&&i!=="/"&&(T.pathname=T.pathname==="/"?i:$t([i,T.pathname])),(v.replace?r.replace:r.push)(T,v.state,v)},[i,r,m,o,u])}O.createContext(null);function ev(){let{matches:u}=O.useContext(sa),i=u[u.length-1];return(i==null?void 0:i.params)??{}}function ai(u,{relative:i}={}){let{matches:r}=O.useContext(sa),{pathname:c}=ca(),o=JSON.stringify(Zy(r));return O.useMemo(()=>qf(u,JSON.parse(o),c,i==="path"),[u,o,c,i])}function L0(u,i){return tv(u,i)}function tv(u,i,r){var Q;He(ti(),"useRoutes() may be used only in the context of a component.");let{navigator:c}=O.useContext(Kt),{matches:o}=O.useContext(sa),m=o[o.length-1],y=m?m.params:{},S=m?m.pathname:"/",p=m?m.pathnameBase:"/",v=m&&m.route;{let B=v&&v.path||"";lv(S,!v||B.endsWith("*")||B.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${S}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let T=ca(),E;if(i){let B=typeof i=="string"?Vn(i):i;He(p==="/"||((Q=B.pathname)==null?void 0:Q.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${B.pathname}" was given in the \`location\` prop.`),E=B}else E=T;let z=E.pathname||"/",D=z;if(p!=="/"){let B=p.replace(/^\//,"").split("/");D="/"+z.replace(/^\//,"").split("/").slice(B.length).join("/")}let Y=r&&r.state.matches.length?r.state.matches.map(B=>Object.assign(B,{route:r.manifest[B.route.id]||B.route})):Ly(u,{pathname:D});ia(v||Y!=null,`No routes matched location "${E.pathname}${E.search}${E.hash}" `),ia(Y==null||Y[Y.length-1].route.element!==void 0||Y[Y.length-1].route.Component!==void 0||Y[Y.length-1].route.lazy!==void 0,`Matched leaf route at location "${E.pathname}${E.search}${E.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let L=Z0(Y&&Y.map(B=>Object.assign({},B,{params:Object.assign({},y,B.params),pathname:$t([p,c.encodeLocation?c.encodeLocation(B.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:B.pathname]),pathnameBase:B.pathnameBase==="/"?p:$t([p,c.encodeLocation?c.encodeLocation(B.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:B.pathnameBase])})),o,r);return i&&L?O.createElement(ei.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...E},navigationType:"POP"}},L):L}function Q0(){let u=F0(),i=R0(u)?`${u.status} ${u.statusText}`:u instanceof Error?u.message:JSON.stringify(u),r=u instanceof Error?u.stack:null,c="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:c},m={padding:"2px 4px",backgroundColor:c},y=null;return console.error("Error handled by React Router default ErrorBoundary:",u),y=O.createElement(O.Fragment,null,O.createElement("p",null,"💿 Hey developer 👋"),O.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",O.createElement("code",{style:m},"ErrorBoundary")," or"," ",O.createElement("code",{style:m},"errorElement")," prop on your route.")),O.createElement(O.Fragment,null,O.createElement("h2",null,"Unexpected Application Error!"),O.createElement("h3",{style:{fontStyle:"italic"}},i),r?O.createElement("pre",{style:o},r):null,y)}var Y0=O.createElement(Q0,null),av=class extends O.Component{constructor(u){super(u),this.state={location:u.location,revalidation:u.revalidation,error:u.error}}static getDerivedStateFromError(u){return{error:u}}static getDerivedStateFromProps(u,i){return i.location!==u.location||i.revalidation!=="idle"&&u.revalidation==="idle"?{error:u.error,location:u.location,revalidation:u.revalidation}:{error:u.error!==void 0?u.error:i.error,location:i.location,revalidation:u.revalidation||i.revalidation}}componentDidCatch(u,i){this.props.onError?this.props.onError(u,i):console.error("React Router caught the following error during render",u)}render(){let u=this.state.error;if(this.context&&typeof u=="object"&&u&&"digest"in u&&typeof u.digest=="string"){const r=H0(u.digest);r&&(u=r)}let i=u!==void 0?O.createElement(sa.Provider,{value:this.props.routeContext},O.createElement(Bf.Provider,{value:u,children:this.props.component})):this.props.children;return this.context?O.createElement(G0,{error:u},i):i}};av.contextType=Fy;var mf=new WeakMap;function G0({children:u,error:i}){let{basename:r}=O.useContext(Kt);if(typeof i=="object"&&i&&"digest"in i&&typeof i.digest=="string"){let c=w0(i.digest);if(c){let o=mf.get(i);if(o)throw o;let m=ky(c.location,r),y=m.absoluteURL||m.to;if(_0(y))throw new Error("Invalid redirect location");if(Vy&&!mf.get(i))if(m.isExternal||c.reloadDocument)window.location.href=y;else{const S=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(m.to,{replace:c.replace}));throw mf.set(i,S),S}return O.createElement("meta",{httpEquiv:"refresh",content:`0;url=${y}`})}}return u}function X0({routeContext:u,match:i,children:r}){let c=O.useContext(kn);return c&&c.static&&c.staticContext&&(i.route.errorElement||i.route.ErrorBoundary)&&(c.staticContext._deepestRenderedBoundaryId=i.route.id),O.createElement(sa.Provider,{value:u},r)}function Z0(u,i=[],r){let c=r==null?void 0:r.state;if(u==null){if(!c)return null;if(c.errors)u=c.matches;else if(i.length===0&&!c.initialized&&c.matches.length>0)u=c.matches;else return null}let o=u,m=c==null?void 0:c.errors;if(m!=null){let T=o.findIndex(E=>E.route.id&&(m==null?void 0:m[E.route.id])!==void 0);He(T>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(m).join(",")}`),o=o.slice(0,Math.min(o.length,T+1))}let y=!1,S=-1;if(r&&c){y=c.renderFallback;for(let T=0;T=0?o=o.slice(0,S+1):o=[o[0]];break}}}}let p=r==null?void 0:r.onError,v=c&&p?(T,E)=>{var z,D;p(T,{location:c.location,params:((D=(z=c.matches)==null?void 0:z[0])==null?void 0:D.params)??{},pattern:O0(c.matches),errorInfo:E})}:void 0;return o.reduceRight((T,E,z)=>{let D,Y=!1,L=null,Q=null;c&&(D=m&&E.route.id?m[E.route.id]:void 0,L=E.route.errorElement||Y0,y&&(S<0&&z===0?(lv("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),Y=!0,Q=null):S===z&&(Y=!0,Q=E.route.hydrateFallbackElement||null)));let B=i.concat(o.slice(0,z+1)),G=()=>{let X;return D?X=L:Y?X=Q:E.route.Component?X=O.createElement(E.route.Component,null):E.route.element?X=E.route.element:X=T,O.createElement(X0,{match:E,routeContext:{outlet:T,matches:B,isDataRoute:c!=null},children:X})};return c&&(E.route.ErrorBoundary||E.route.errorElement||z===0)?O.createElement(av,{location:c.location,revalidation:c.revalidation,component:L,error:D,children:G(),routeContext:{outlet:null,matches:B,isDataRoute:!0},onError:v}):G()},null)}function Lf(u){return`${u} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function K0(u){let i=O.useContext(kn);return He(i,Lf(u)),i}function V0(u){let i=O.useContext(qs);return He(i,Lf(u)),i}function k0(u){let i=O.useContext(sa);return He(i,Lf(u)),i}function Qf(u){let i=k0(u),r=i.matches[i.matches.length-1];return He(r.route.id,`${u} can only be used on routes that contain a unique "id"`),r.route.id}function J0(){return Qf("useRouteId")}function F0(){var c;let u=O.useContext(Bf),i=V0("useRouteError"),r=Qf("useRouteError");return u!==void 0?u:(c=i.errors)==null?void 0:c[r]}function $0(){let{router:u}=K0("useNavigate"),i=Qf("useNavigate"),r=O.useRef(!1);return Iy(()=>{r.current=!0}),O.useCallback(async(o,m={})=>{ia(r.current,Py),r.current&&(typeof o=="number"?await u.navigate(o):await u.navigate(o,{fromRouteId:i,...m}))},[u,i])}var dy={};function lv(u,i,r){!i&&!dy[u]&&(dy[u]=!0,ia(!1,r))}O.memo(W0);function W0({routes:u,manifest:i,future:r,state:c,isStatic:o,onError:m}){return tv(u,void 0,{manifest:i,state:c,isStatic:o,onError:m})}function Ku(u){He(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function P0({basename:u="/",children:i=null,location:r,navigationType:c="POP",navigator:o,static:m=!1,useTransitions:y}){He(!ti(),"You cannot render a inside another . You should never have more than one in your app.");let S=u.replace(/^\/*/,"/"),p=O.useMemo(()=>({basename:S,navigator:o,static:m,useTransitions:y,future:{}}),[S,o,m,y]);typeof r=="string"&&(r=Vn(r));let{pathname:v="/",search:T="",hash:E="",state:z=null,key:D="default",mask:Y}=r,L=O.useMemo(()=>{let Q=Ua(v,S);return Q==null?null:{location:{pathname:Q,search:T,hash:E,state:z,key:D,mask:Y},navigationType:c}},[S,v,T,E,z,D,c,Y]);return ia(L!=null,` is not able to match the URL "${v}${T}${E}" because it does not start with the basename, so the won't render anything.`),L==null?null:O.createElement(Kt.Provider,{value:p},O.createElement(ei.Provider,{children:i,value:L}))}function I0({children:u,location:i}){return L0(pf(u),i)}function pf(u,i=[]){let r=[];return O.Children.forEach(u,(c,o)=>{if(!O.isValidElement(c))return;let m=[...i,o];if(c.type===O.Fragment){r.push.apply(r,pf(c.props.children,m));return}He(c.type===Ku,`[${typeof c.type=="string"?c.type:c.type.name}] is not a component. All component children of must be a or `),He(!c.props.index||!c.props.children,"An index route cannot have child routes.");let y={id:c.props.id||m.join("-"),caseSensitive:c.props.caseSensitive,element:c.props.element,Component:c.props.Component,index:c.props.index,path:c.props.path,middleware:c.props.middleware,loader:c.props.loader,action:c.props.action,hydrateFallbackElement:c.props.hydrateFallbackElement,HydrateFallback:c.props.HydrateFallback,errorElement:c.props.errorElement,ErrorBoundary:c.props.ErrorBoundary,hasErrorBoundary:c.props.hasErrorBoundary===!0||c.props.ErrorBoundary!=null||c.props.errorElement!=null,shouldRevalidate:c.props.shouldRevalidate,handle:c.props.handle,lazy:c.props.lazy};c.props.children&&(y.children=pf(c.props.children,m)),r.push(y)}),r}var As="get",Cs="application/x-www-form-urlencoded";function Ls(u){return typeof HTMLElement<"u"&&u instanceof HTMLElement}function eb(u){return Ls(u)&&u.tagName.toLowerCase()==="button"}function tb(u){return Ls(u)&&u.tagName.toLowerCase()==="form"}function ab(u){return Ls(u)&&u.tagName.toLowerCase()==="input"}function lb(u){return!!(u.metaKey||u.altKey||u.ctrlKey||u.shiftKey)}function nb(u,i){return u.button===0&&(!i||i==="_self")&&!lb(u)}var js=null;function ub(){if(js===null)try{new FormData(document.createElement("form"),0),js=!1}catch{js=!0}return js}var ib=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function yf(u){return u!=null&&!ib.has(u)?(ia(!1,`"${u}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Cs}"`),null):u}function sb(u,i){let r,c,o,m,y;if(tb(u)){let S=u.getAttribute("action");c=S?Ua(S,i):null,r=u.getAttribute("method")||As,o=yf(u.getAttribute("enctype"))||Cs,m=new FormData(u)}else if(eb(u)||ab(u)&&(u.type==="submit"||u.type==="image")){let S=u.form;if(S==null)throw new Error('Cannot submit a
SESSIONS {sessions}SYNC 5s
{accountOpen&&
Browser session active
}
{children}{palette&&setPalette(false)}/>}} -function taskExplanation(task:Task,overview:Overview){const session=(overview.sessions??[]).find(s=>s.capture?.task_id===task.id);if(task.state==='queued'){const online=(overview.workers??[]).filter(w=>w.online);return online.length?`Waiting for a worker to lease it · ${online.length} worker${online.length===1?'':'s'} online`:'No registered worker is currently reachable'}if(task.state==='leased'){if(session?.pending_approval)return 'Waiting for an operator approval';if(task.lease&&new Date(task.lease.until){states.map(state=>{const lane=tasks.filter(t=>t.state===state);return
{label[state]}{lane.length}
{lane.map(t=>{t.title||t.id}{t.project}{t.id.slice(-5)}{taskExplanation(t,overview)})}{!lane.length&&

Nothing here. New work will appear in this branch.

}
})}} +function taskExplanation(task:Task,overview:Overview){const session=(overview.sessions??[]).find(s=>s.capture?.task_id===task.id);if(task.state==='queued'){const online=(overview.workers??[]).filter(w=>w.online);return online.length?`Waiting for a worker to lease it · ${online.length} worker${online.length===1?'':'s'} online`:'No registered worker is currently reachable'}if(task.state==='leased'){if(session?.pending_approval)return 'Waiting for an operator approval';if(task.lease&&new Date(task.lease.until){task.title||task.id}{task.project}{task.id.slice(-5)}{taskExplanation(task,overview)}} +function Board({tasks,overview}:{tasks:Task[];overview:Overview}){const blocked=tasks.filter(t=>t.state==='blocked').sort((a,b)=>new Date(a.blocked_at||0).getTime()-new Date(b.blocked_at||0).getTime());const groups=new Map;for(const task of blocked){const reason=task.block_reason||'unknown';groups.set(reason,[...(groups.get(reason)||[]),task])}return <>
{states.map(state=>{const lane=tasks.filter(t=>t.state===state);return
{label[state]}{lane.length}
{lane.map(t=>)}{!lane.length&&

Nothing here. New work will appear in this branch.

}
})}
{blocked.length>0&&

Needs attention

Blocked work is grouped by diagnosis and ordered oldest first.

{blocked.length} blocked
{[...groups.entries()].map(([reason,group])=>
{blockLabel[reason]}{group.length}
{group.map(task=>)}
)}
}} function OverviewPage(){const q=useQuery({queryKey:['overview'],queryFn:api.overview,refetchInterval:5000}),[createOpen,setCreateOpen]=useState(false);useEffect(()=>{const open=()=>setCreateOpen(true);window.addEventListener('orchestra:new-task',open);return()=>window.removeEventListener('orchestra:new-task',open)},[]);if(q.isLoading)return

Dispatch board

Fetching queue state from the coordinator…

;if(q.error)return
Queue unavailable: {String(q.error)}
;const d=q.data!,sessions=d.sessions??[],active=d.tasks.filter(t=>t.state==='leased').length,attention=d.tasks.filter(t=>t.state==='blocked'||t.state==='failed').length,approvals=new Set(sessions.filter(s=>s.pending_approval).map(s=>s.capture?.task_id));return

Agent dispatch

Keep the work moving.

Live task state across every connected harness. The board refreshes every five seconds.

Tasks{d.tasks.length}
In session{active}
Needs attention{attention}
Awaiting approval{approvals.size}

Task flow

Each card states the current reason it is waiting or running.

SYNCED {new Date(d.updated_at).toLocaleTimeString()}
{createOpen&&setCreateOpen(false)}/>}
} @@ -30,7 +32,9 @@ function Lifecycle({action,mutate,pending}:{action:Action;mutate:(action:string, function CaptureView({capture,blocker}:{capture?:Capture;blocker?:string}){const [expanded,setExpanded]=useState(false),[filter,setFilter]=useState('');if(!capture)return
Live capture unavailable{blocker||'The session has not published a recent pane capture.'}
;const lines=capture.text.split('\n'),visible=filter?lines.filter(l=>l.toLowerCase().includes(filter.toLowerCase())):lines;const preview=expanded?visible:visible.slice(-18);return

Live capture

{capture.source} · updated {date(capture.at)} · {lines.length} lines{capture.truncated?' · truncated':''}
setFilter(e.target.value)} placeholder="Filter visible capture" aria-label="Filter live capture"/>
{preview.join('\n')||'No lines match this filter.'}
{!expanded&&visible.length>preview.length&&

Showing the most recent {preview.length} matching lines.

}
} -function TaskDetail(){const {taskID=''}=useParams(),qc=useQueryClient(),[notice,setNotice]=useState('');const q=useQuery({queryKey:['task',taskID],queryFn:()=>api.detail(taskID),refetchInterval:3000});const m=useMutation({mutationFn:({action,body}:{action:string;body?:object})=>api.action(taskID,action,body),onSuccess:(result:any,vars)=>{setNotice(vars.action.includes('approval')?'Approval request has been queued; waiting for the worker acknowledgement.':'Action recorded.');qc.invalidateQueries({queryKey:['task',taskID]});qc.invalidateQueries({queryKey:['overview']})}});if(q.isLoading)return
Fetching task record…
;if(q.error)return
Task unavailable: {String(q.error)}
;const d=q.data!,events=d.events??[];return
← Dispatch board

Task record

{d.task.title||d.task.id}

{d.task.id}

{label[d.task.state]}

{taskDetailExplanation(d)}

{d.session?.lease_until&&Lease ends {date(d.session.lease_until)}}
{d.session?.pending_approval&&m.mutate({action:a})}/>}

Instructions

{d.task.description||'No immutable instructions were recorded.'}

Recovery & lifecycle

Actions are only enabled when their server-side requirements are met. Consequences are shown before the final submission.

{d.actions.map(a=>m.mutate({action,body})}/>)}
{m.error&&

{String(m.error)}

}{notice&&!d.session?.pending_approval&&

{notice}

}

Timeline

Recorded operator and lifecycle decisions.

{events.length} events
    {events.map(e=>
  1. {e.type}
  2. )}
} +function TaskDiagnosis({detail}:{detail:Detail}){const evidence=detail.task.last_session,approval=detail.session?.pending_approval,action=detail.actions.find(a=>a.enabled),observed=evidence?.captured_at||evidence?.checked_at;const next=approval?{title:'Review the permission request',copy:'This harness is paused at a permission boundary. Approve only the exact request shown.'}:action?{title:actionLabel[action.id]||action.id,copy:actionHelp[action.id]||'This action is currently safe to submit.'}:{title:'No safe lifecycle action is available',copy:'Review the retained diagnosis and pane evidence. Unavailable actions explain their requirements below.'};return

Current diagnosis

{detail.task.state==='blocked'?blockLabel[detail.task.block_reason||'unknown']:label[detail.task.state]}

{taskDetailExplanation(detail)}

{label[detail.task.state]}
Last activity
{date(observed||detail.session?.capture?.at)}
Pane state
{evidence?.pane_state||detail.session?.agent_status||'unknown'}
Pane
{evidence?.pane_id||detail.session?.pane_id||'—'}
Source
{evidence?.source||detail.session?.capture?.source||'unknown'}
Next safe action{next.title}

{next.copy}

{detail.session?.lease_until&&Lease ends {date(detail.session.lease_until)}}
} + +function TaskDetail(){const {taskID=''}=useParams(),qc=useQueryClient(),[notice,setNotice]=useState('');const q=useQuery({queryKey:['task',taskID],queryFn:()=>api.detail(taskID),refetchInterval:3000});const m=useMutation({mutationFn:({action,body}:{action:string;body?:object})=>api.action(taskID,action,body),onSuccess:(result:any,vars)=>{setNotice(vars.action.includes('approval')?'Approval request has been queued; waiting for the worker acknowledgement.':'Action recorded.');qc.invalidateQueries({queryKey:['task',taskID]});qc.invalidateQueries({queryKey:['overview']})}});if(q.isLoading)return
Fetching task record…
;if(q.error)return
Task unavailable: {String(q.error)}
;const d=q.data!,events=d.events??[],available=d.actions.filter(a=>a.enabled),unavailable=d.actions.filter(a=>!a.enabled),evidence=d.task.last_session;return
← Dispatch board

Task record

{d.task.title||d.task.id}

{d.task.id}

{d.session?.pending_approval&&m.mutate({action:a})}/>}

Instructions

{d.task.description||'No immutable instructions were recorded.'}

{available.length>0&&<>

Available actions

Only actions whose server-side safety requirements are met are shown here.

{available.map(a=>m.mutate({action,body})}/>)}
}{unavailable.length>0&&
Unavailable actions ({unavailable.length})

These controls are disabled until their stated server-side requirements are met.

{unavailable.map(a=>m.mutate({action,body})}/>)}
}{m.error&&

{String(m.error)}

}{notice&&!d.session?.pending_approval&&

{notice}

}

Timeline

Recorded operator and lifecycle decisions.

{events.length} events
    {events.map(e=>
  1. {e.type}
  2. )}
} function taskDetailExplanation(d:Detail){if(d.session?.pending_approval)return 'This harness is paused at a permission boundary. Review the exact request before allowing it.';if(d.task.state==='leased')return d.session?.capture?'The harness is active and publishing a recent capture.':'The task is leased, but its live capture is unavailable.';if(d.task.state==='blocked')return d.task.blocker||'Unknown — legacy record has no retained blocker or pane evidence.';return label[d.task.state]+' task record.'} function Workers(){const q=useQuery({queryKey:['overview'],queryFn:api.overview,refetchInterval:5000});if(q.isLoading)return
Fetching worker heartbeats…
;if(q.error)return
Worker pool unavailable: {String(q.error)}
;const d=q.data!,workers=d.workers;const herdr=(status?:string)=>status==='reachable'?'local herdr reachable':status==='unreachable'?'local herdr unreachable':'local herdr not yet checked';return
← Dispatch board

Worker pool

Available capacity.

{workers.filter(w=>w.online).length} of {workers.length} registered workers are reachable right now.

{workers.length?<>

Heartbeat proves the worker can reach Orchestra. Local herdr status is separately reported by that worker; it is never inferred from legacy coordinator TCP probes.

{workers.map(w=>)}
WorkerHeartbeatLocal herdrActive workLast errorLast heartbeat
{w.id} {w.online?'reachable':'overdue'}{herdr(w.health?.herdr_status)}{date(w.health?.checked_at)}{w.health?.active_task_id?<>{w.health.active_task_id}{w.health.active_pane_id||'pane unknown'}:'idle'}{w.health?.last_error?<>{w.health.last_error}{date(w.health.error_at)}:'—'}{date(w.last_seen)}
:

No workers registered

Connect a worker to begin leasing queued tasks.

}
} diff --git a/web/src/style.css b/web/src/style.css index 77f9b61..24d864c 100644 --- a/web/src/style.css +++ b/web/src/style.css @@ -9,11 +9,14 @@ .heading-actions{display:flex;align-items:end;gap:16px}.heading-actions button{white-space:nowrap}.modal-backdrop{position:fixed;inset:0;z-index:15;display:grid;place-items:center;padding:20px;background:rgba(8,7,5,.72)}.create.modal{width:min(680px,100%);max-height:calc(100vh - 40px);overflow:auto}.modal-heading{display:flex;align-items:start;justify-content:space-between;gap:12px}.modal-heading h2{margin:0}.icon-button{display:grid;width:30px;height:30px;place-items:center;padding:0;border-color:var(--line-hi);color:var(--text-mid);background:transparent;font-size:21px;font-weight:400}.create form{display:grid;gap:9px}.create form label{display:grid;gap:6px;color:var(--text-mid);font-size:12px}.create form input,.create form textarea{margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.quiet-button{border-color:var(--line-hi);color:var(--text-mid);background:transparent} .login-page{display:grid;min-height:100vh;place-items:center;padding:20px;color:var(--text-hi)}.login-card{width:min(420px,100%);padding:28px;background:var(--bg-1);border:1px solid var(--line-hi);border-radius:var(--r-lg);box-shadow:var(--shadow-soft)}.login-card h1{margin:0 0 8px;font-size:31px;letter-spacing:-.04em}.login-card>p:not(.eyebrow){margin:0 0 22px;color:var(--text-mid);line-height:1.5}.login-card form{display:grid;gap:12px}.login-card label{display:grid;gap:6px;color:var(--text-mid);font-size:12px} @media(max-width:760px){.heading-actions{width:100%;align-items:stretch;flex-direction:column}.heading-actions button{align-self:flex-start}.modal-backdrop{padding:12px}.create.modal{max-height:calc(100vh - 24px)}} +.blocked-groups{margin-top:32px}.blocked-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px}.blocked-grid>section{min-height:120px;padding:12px;background:var(--bg-1);border:1px solid rgba(213,160,146,.34);border-radius:var(--r-md)} /* Operator comfort pass: make live state scannable before the raw data. */ .account{position:relative}.account-button{display:flex;align-items:center;gap:7px;padding:7px 9px;border-color:var(--line);color:var(--text-mid);background:transparent;font-size:11px;font-weight:500}.account-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:10;display:grid;min-width:190px;gap:8px;padding:10px;border:1px solid var(--line-hi);border-radius:var(--r-sm);background:var(--bg-2);box-shadow:var(--shadow-soft);color:var(--text-lo);font-size:11px}.account-menu button{padding:7px 9px;text-align:left}.status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent-hi);box-shadow:0 0 0 3px var(--accent-dim)} .section-title>div{display:grid;gap:3px}.section-title p,.section-copy,.worker-note{margin:0;color:var(--text-lo);font-size:12px;line-height:1.5}.card em{display:block;overflow:hidden;margin-top:9px;color:var(--text-lo);font-size:11px;font-style:normal;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.card:hover em{color:var(--text-mid)}.eligibility{display:grid;gap:3px;padding:10px 12px;border:1px solid var(--accent-line);border-radius:var(--r-sm);background:var(--accent-dim);color:var(--text-mid);font-size:12px}.eligibility b{color:var(--accent-hi);font-size:12px}.eligibility.warning{border-color:rgba(213,160,146,.45);background:rgba(213,160,146,.09)}.eligibility.warning b{color:#d5a092} .task-banner{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:-8px 0 20px;padding:13px 16px;border:1px solid var(--accent-line);border-radius:var(--r-md);background:var(--accent-dim)}.task-banner>div{display:flex;align-items:center;gap:12px}.task-banner .task-state{margin:0;color:var(--accent-hi);font-weight:600}.task-banner p{margin:0;color:var(--text-mid);font-size:13px;line-height:1.45}.task-banner>span{color:var(--text-lo);font:11px var(--mono);white-space:nowrap}.task-banner>span b{color:var(--text-machine);font-weight:500}.task-banner.state-blocked,.task-banner.state-failed{border-color:rgba(213,160,146,.42);background:rgba(213,160,146,.08)} +.diagnosis{display:grid;gap:17px;margin:-8px 0 20px;padding:20px;border:1px solid var(--accent-line);border-radius:var(--r-md);background:var(--accent-dim)}.diagnosis.state-blocked,.diagnosis.state-failed{border-color:rgba(213,160,146,.42);background:rgba(213,160,146,.08)}.diagnosis-heading{display:flex;align-items:start;justify-content:space-between;gap:20px}.diagnosis .eyebrow{margin-bottom:6px}.diagnosis h2{margin:0 0 7px;font-size:22px;letter-spacing:-.03em}.diagnosis-heading p:not(.eyebrow){max-width:780px;margin:0;color:var(--text-mid);font-size:13px;line-height:1.5}.diagnosis .task-state{flex:none;margin:0;color:var(--accent-hi);font-weight:600}.diagnosis-evidence{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0}.diagnosis-evidence div{min-width:0;padding:10px 11px;border:1px solid var(--line);border-radius:var(--r-sm);background:rgba(20,17,13,.28)}.diagnosis-evidence dt{margin-bottom:5px;color:var(--text-lo);font-size:10px;letter-spacing:.07em;text-transform:uppercase}.diagnosis-evidence dd{overflow:hidden;margin:0;color:var(--text-machine);font-size:12px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.next-action{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 14px;border-left:3px solid var(--accent);background:rgba(20,17,13,.35)}.next-action>div{display:grid;gap:3px}.next-action span{color:var(--accent-hi);font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase}.next-action b{font-size:14px}.next-action p{margin:0;color:var(--text-mid);font-size:12px;line-height:1.45}.next-action small{flex:none;color:var(--text-lo);font:11px var(--mono)} .capture{margin:24px 0}.capture-head{display:flex;align-items:start;justify-content:space-between;gap:12px;margin-bottom:9px}.capture-head h2{margin:0 0 4px}.capture-head span{color:var(--text-lo);font:11px var(--mono)}.capture-filter{margin-bottom:8px;font-size:12px}.capture-more{margin:8px 0 0;color:var(--text-lo);font-size:11px}.capture-empty{display:grid;gap:5px;margin:24px 0;padding:15px;border:1px dashed var(--line-hi);border-radius:var(--r-sm);color:var(--text-mid);font-size:12px}.capture-empty b{color:var(--text-hi)}.actions-title{margin:27px 0 5px!important}.actions{margin-top:13px}.action-row,.action-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end;padding:13px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-2)}.action-row>div,.action-form>div{display:grid;gap:4px}.action-row b,.action-form b{font-size:13px}.action-row span,.action-form span{color:var(--text-lo);font-size:11px;line-height:1.45}.action-form textarea,.action-form input{grid-column:1}.action-form button{grid-column:2;grid-row:1 / span 2}.action-form.compact input{margin:0}.notice,.session-message{padding:10px 12px;border:1px solid var(--accent-line);border-radius:var(--r-sm);color:var(--accent-hi);background:var(--accent-dim);font-size:12px;line-height:1.45}.timeline-surface{margin-top:20px}.timeline-heading{display:flex;align-items:start;justify-content:space-between;gap:16px}.timeline-heading p{margin:-8px 0 12px;color:var(--text-lo);font-size:12px}.timeline-heading>span{color:var(--text-lo);font:11px var(--mono)}.worker-note{margin:-10px 0 15px;padding:10px 12px;border-left:2px solid var(--accent-line);background:var(--bg-1)}.online .status-dot{margin-right:4px}.offline .status-dot{background:#c09280;box-shadow:0 0 0 3px rgba(192,146,128,.13)} +.unavailable-actions{margin-top:22px;padding-top:17px;border-top:1px solid var(--line)}.unavailable-actions summary{color:var(--text-mid);font-size:13px;font-weight:600}.unavailable-actions>p{margin:9px 0 0;color:var(--text-lo);font-size:12px;line-height:1.45}.unavailable-actions .actions{opacity:.72}.unavailable-actions button:disabled{display:none} .approval-summary{display:flex;flex-wrap:wrap;gap:7px;margin:12px 0}.approval-summary span{padding:5px 7px;border:1px solid var(--line);border-radius:5px;color:var(--text-lo);font:10px var(--mono)}.approval-summary b{color:var(--text-machine);font-weight:500}.login-card .session-message{margin:-6px 0 4px} -@media(max-width:760px){.account{margin-left:auto}.account-button{font-size:0}.account-button .status-dot{width:8px;height:8px}.task-banner,.task-banner>div{align-items:start;flex-direction:column;gap:7px}.task-banner>span{white-space:normal}.action-row,.action-form{grid-template-columns:1fr}.action-row button,.action-form button{grid-column:auto;grid-row:auto;justify-self:start}.action-form textarea,.action-form input{grid-column:auto}.capture-head{align-items:stretch;flex-direction:column}.section-title{align-items:start;gap:12px;flex-direction:column}.section-title .machine{white-space:nowrap}.readout{display:none}} +@media(max-width:760px){.account{margin-left:auto}.account-button{font-size:0}.account-button .status-dot{width:8px;height:8px}.task-banner,.task-banner>div,.diagnosis-heading,.next-action{align-items:start;flex-direction:column;gap:7px}.task-banner>span{white-space:normal}.diagnosis-evidence{grid-template-columns:repeat(2,minmax(0,1fr))}.action-row,.action-form{grid-template-columns:1fr}.action-row button,.action-form button{grid-column:auto;grid-row:auto;justify-self:start}.action-form textarea,.action-form input{grid-column:auto}.capture-head{align-items:stretch;flex-direction:column}.section-title{align-items:start;gap:12px;flex-direction:column}.section-title .machine{white-space:nowrap}.readout{display:none}}