diff --git a/internal/webapp/frontend/src/components/FileTree.tsx b/internal/webapp/frontend/src/components/FileTree.tsx index deb2da7..87b10bb 100644 --- a/internal/webapp/frontend/src/components/FileTree.tsx +++ b/internal/webapp/frontend/src/components/FileTree.tsx @@ -74,7 +74,7 @@ export function FileTree(props: { return (
{table.getHeaderGroups().map((hg) => ( @@ -340,6 +341,7 @@ function MembersTable({ ))}
+
); } @@ -431,6 +433,7 @@ function SharesTable({ ); return ( +
{table.getHeaderGroups().map((hg) => ( @@ -453,5 +456,6 @@ function SharesTable({ ))}
+
); } diff --git a/internal/webapp/frontend/src/components/ProjectNav.tsx b/internal/webapp/frontend/src/components/ProjectNav.tsx index 4cf53f8..b71e0c1 100644 --- a/internal/webapp/frontend/src/components/ProjectNav.tsx +++ b/internal/webapp/frontend/src/components/ProjectNav.tsx @@ -83,7 +83,7 @@ export function ProjectNav({ )} - + {projects.map((p) => ( {p.name} diff --git a/internal/webapp/frontend/src/style.css b/internal/webapp/frontend/src/style.css index ffdc422..0cb149e 100644 --- a/internal/webapp/frontend/src/style.css +++ b/internal/webapp/frontend/src/style.css @@ -91,7 +91,7 @@ button, input, a.btn { font-family: inherit; } /* projects */ #projects { flex: none; max-height: 32%; overflow-y: auto; padding: 10px 8px 8px; border-bottom: 1px solid var(--border); } -.nav-head { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px; font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); } +.nav-head { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px; font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: .07em; color: var(--text-faint); } .nav-add { display: grid; place-items: center; width: 18px; height: 18px; border: none; background: transparent; color: var(--text-ghost); cursor: pointer; border-radius: 5px; } .nav-add .ico { width: 14px; height: 14px; } .nav-add:hover { color: var(--text); background: var(--hover); } @@ -138,11 +138,18 @@ button, input, a.btn { font-family: inherit; } /* org bar */ .field-err { color: var(--del); font-size: 12px; margin: 6px 2px 0; } +/* Radix/shadcn content utilities set the CSS `translate` property; house + overlays center with `transform`. Both compose — neutralize the utility + so house positioning owns these surfaces. */ +.modal, #palette { translate: none; } + /* react-table admin tables ride the .admin-item/.ai-* vocabulary */ +.admin-card-table { padding: 0; overflow: hidden; } .admin-table { width: 100%; border-collapse: collapse; } +.admin-table tr:last-child td { border-bottom: none; } .admin-table th { text-align: left; font-size: 11px; font-weight: 600; letter-spacing: .05em; - text-transform: uppercase; color: var(--text-ghost); padding: 6px 10px; + text-transform: uppercase; color: var(--text-faint); padding: 6px 10px; border-bottom: 1px solid var(--border); cursor: pointer; user-select: none; } .admin-table th:hover { color: var(--text-dim); } @@ -204,7 +211,7 @@ button, input, a.btn { font-family: inherit; } #account-menu [role="menuitem"][data-highlighted] { background: var(--hover); color: var(--text); } #account-menu .menu-sec { padding: 7px 9px 3px; font-size: 10.5px; font-weight: 600; letter-spacing: .04em; - text-transform: uppercase; color: var(--text-ghost); + text-transform: uppercase; color: var(--text-faint); } #account-menu [role="menuitem"] { display: flex; align-items: center; gap: 8px; padding: 7px 9px; @@ -286,7 +293,7 @@ button, input, a.btn { font-family: inherit; } /* ---- admin panels ---- */ .admin { max-width: 760px; } .admin h1 { font-size: 21px; font-weight: 640; letter-spacing: -.02em; margin: 0 0 6px; color: #f4f6f9; } -.admin h3 { font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); font-weight: 600; margin: 30px 0 10px; } +.admin h3 { font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-faint); font-weight: 600; margin: 30px 0 10px; } .admin-sub { color: var(--text-dim); font-size: 13.5px; margin: 0 0 6px; line-height: 1.55; } .admin-h { display: flex; align-items: center; justify-content: space-between; margin: 30px 0 10px; } .admin-h h3 { margin: 0; } @@ -335,7 +342,7 @@ button, input, a.btn { font-family: inherit; } .heatdot.lvl3 { opacity: .8; } .heatdot.lvl4 { opacity: 1; box-shadow: 0 0 6px rgba(245, 166, 35, .55); } .dl-empty { padding: 24px 14px; color: var(--text-faint); font-size: 13px; border: 1px dashed var(--border); border-radius: var(--r-card); text-align: center; } -.dl-h3 { margin: 28px 0 8px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); font-weight: 600; } +.dl-h3 { margin: 28px 0 8px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-faint); font-weight: 600; } .dl-hlist { border: 1px solid var(--border); border-radius: var(--r-card); background: var(--bg-side); overflow: hidden; max-width: none; } .dl-hlist .hentry:last-child { border-bottom: none; } .hentry.clickable { cursor: pointer; } @@ -436,6 +443,9 @@ button, input, a.btn { font-family: inherit; } /* ---- command palette ---- */ #palette { position: fixed; top: 12vh; left: 50%; transform: translateX(-50%); z-index: 151; display: block; width: min(560px, 92vw); background: var(--bg-raise); border: 1px solid var(--border-2); border-radius: var(--r-over); box-shadow: 0 24px 70px -18px rgba(0,0,0,.8); overflow: hidden; outline: none; padding: 0; } #palette-inputwrap { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--border); } +#palette-inputwrap [data-slot="command-input-wrapper"] { flex: 1; display: flex; border-bottom: 0; padding: 0; height: auto; } +#palette-inputwrap [data-slot="command-input-wrapper"] > svg:not(.ico) { display: none; } +#palette input, #palette input:focus { border: none; background: transparent; box-shadow: none; outline: none; padding: 0; } #palette-inputwrap .ico { width: 17px; height: 17px; color: var(--text-faint); } #palette-input { flex: 1; width: 100%; border: none; background: transparent; color: var(--text); font: inherit; font-size: 15px; letter-spacing: -.01em; outline: none; padding: 0; } #palette-input::placeholder { color: var(--text-ghost); } diff --git a/internal/webapp/static/assets/index-ClTbA-gR.js b/internal/webapp/static/assets/index-DC7jlW5b.js similarity index 92% rename from internal/webapp/static/assets/index-ClTbA-gR.js rename to internal/webapp/static/assets/index-DC7jlW5b.js index 6f664d1..dfa6755 100644 --- a/internal/webapp/static/assets/index-ClTbA-gR.js +++ b/internal/webapp/static/assets/index-DC7jlW5b.js @@ -112,6 +112,6 @@ Error generating stack: `+l.message+` `)}S.write("payload.value = newResult;"),S.write("return payload;");const O=S.compile();return(A,k)=>O(b,A,k)};let u;const c=uc,d=!Mp.jitless,m=d&&jk.value,y=n.catchall;let g;e._zod.parse=(b,S)=>{g??(g=i.value);const _=b.value;return c(_)?d&&m&&S?.async===!1&&S.jitless!==!0?(u||(u=s(n.shape)),b=u(b,S),y?p_([],_,b,S,g,e):b):r(b,S):(b.issues.push({expected:"object",code:"invalid_type",input:_,inst:e}),b)}});function rS(e,n,r,i){for(const u of e)if(u.issues.length===0)return n.value=u.value,n;const s=e.filter(u=>!Ca(u));return s.length===1?(n.value=s[0].value,s[0]):(n.issues.push({code:"invalid_union",input:n.value,inst:r,errors:e.map(u=>u.issues.map(c=>yi(c,i,vi())))}),n)}const g4=ue("$ZodUnion",(e,n)=>{Ft.init(e,n),ft(e._zod,"optin",()=>n.options.some(i=>i._zod.optin==="optional")?"optional":void 0),ft(e._zod,"optout",()=>n.options.some(i=>i._zod.optout==="optional")?"optional":void 0),ft(e._zod,"values",()=>{if(n.options.every(i=>i._zod.values))return new Set(n.options.flatMap(i=>Array.from(i._zod.values)))}),ft(e._zod,"pattern",()=>{if(n.options.every(i=>i._zod.pattern)){const i=n.options.map(s=>s._zod.pattern);return new RegExp(`^(${i.map(s=>Dp(s.source)).join("|")})$`)}});const r=n.options.length===1?n.options[0]._zod.run:null;e._zod.parse=(i,s)=>{if(r)return r(i,s);let u=!1;const c=[];for(const d of n.options){const h=d._zod.run({value:i.value,issues:[]},s);if(h instanceof Promise)c.push(h),u=!0;else{if(h.issues.length===0)return h;c.push(h)}}return u?Promise.all(c).then(d=>rS(d,i,e,s)):rS(c,i,e,s)}}),v4=ue("$ZodIntersection",(e,n)=>{Ft.init(e,n),e._zod.parse=(r,i)=>{const s=r.value,u=n.left._zod.run({value:s,issues:[]},i),c=n.right._zod.run({value:s,issues:[]},i);return u instanceof Promise||c instanceof Promise?Promise.all([u,c]).then(([h,m])=>oS(r,h,m)):oS(r,u,c)}});function Em(e,n){if(e===n)return{valid:!0,data:e};if(e instanceof Date&&n instanceof Date&&+e==+n)return{valid:!0,data:e};if(Qs(e)&&Qs(n)){const r=Object.keys(n),i=Object.keys(e).filter(u=>r.indexOf(u)!==-1),s={...e,...n};for(const u of i){const c=Em(e[u],n[u]);if(!c.valid)return{valid:!1,mergeErrorPath:[u,...c.mergeErrorPath]};s[u]=c.data}return{valid:!0,data:s}}if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return{valid:!1,mergeErrorPath:[]};const r=[];for(let i=0;id.l&&d.r).map(([d])=>d);if(u.length&&s&&e.issues.push({...s,keys:u}),Ca(e))return e;const c=Em(n.value,r.value);if(!c.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`);return e.value=c.data,e}const y4=ue("$ZodEnum",(e,n)=>{Ft.init(e,n);const r=i_(n.entries),i=new Set(r);e._zod.values=i,e._zod.pattern=new RegExp(`^(${r.filter(s=>zk.has(typeof s)).map(s=>typeof s=="string"?Fc(s):s.toString()).join("|")})$`),e._zod.parse=(s,u)=>{const c=s.value;return i.has(c)||s.issues.push({code:"invalid_value",values:r,input:c,inst:e}),s}}),b4=ue("$ZodTransform",(e,n)=>{Ft.init(e,n),e._zod.optin="optional",e._zod.parse=(r,i)=>{if(i.direction==="backward")throw new o_(e.constructor.name);const s=n.transform(r.value,r);if(i.async)return(s instanceof Promise?s:Promise.resolve(s)).then(c=>(r.value=c,r.fallback=!0,r));if(s instanceof Promise)throw new Ta;return r.value=s,r.fallback=!0,r}});function iS(e,n){return n===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}const g_=ue("$ZodOptional",(e,n)=>{Ft.init(e,n),e._zod.optin="optional",e._zod.optout="optional",ft(e._zod,"values",()=>n.innerType._zod.values?new Set([...n.innerType._zod.values,void 0]):void 0),ft(e._zod,"pattern",()=>{const r=n.innerType._zod.pattern;return r?new RegExp(`^(${Dp(r.source)})?$`):void 0}),e._zod.parse=(r,i)=>{if(n.innerType._zod.optin==="optional"){const s=r.value,u=n.innerType._zod.run(r,i);return u instanceof Promise?u.then(c=>iS(c,s)):iS(u,s)}return r.value===void 0?r:n.innerType._zod.run(r,i)}}),S4=ue("$ZodExactOptional",(e,n)=>{g_.init(e,n),ft(e._zod,"values",()=>n.innerType._zod.values),ft(e._zod,"pattern",()=>n.innerType._zod.pattern),e._zod.parse=(r,i)=>n.innerType._zod.run(r,i)}),x4=ue("$ZodNullable",(e,n)=>{Ft.init(e,n),ft(e._zod,"optin",()=>n.innerType._zod.optin),ft(e._zod,"optout",()=>n.innerType._zod.optout),ft(e._zod,"pattern",()=>{const r=n.innerType._zod.pattern;return r?new RegExp(`^(${Dp(r.source)}|null)$`):void 0}),ft(e._zod,"values",()=>n.innerType._zod.values?new Set([...n.innerType._zod.values,null]):void 0),e._zod.parse=(r,i)=>r.value===null?r:n.innerType._zod.run(r,i)}),w4=ue("$ZodDefault",(e,n)=>{Ft.init(e,n),e._zod.optin="optional",ft(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(r,i)=>{if(i.direction==="backward")return n.innerType._zod.run(r,i);if(r.value===void 0)return r.value=n.defaultValue,r;const s=n.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>aS(u,n)):aS(s,n)}});function aS(e,n){return e.value===void 0&&(e.value=n.defaultValue),e}const _4=ue("$ZodPrefault",(e,n)=>{Ft.init(e,n),e._zod.optin="optional",ft(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(r,i)=>(i.direction==="backward"||r.value===void 0&&(r.value=n.defaultValue),n.innerType._zod.run(r,i))}),C4=ue("$ZodNonOptional",(e,n)=>{Ft.init(e,n),ft(e._zod,"values",()=>{const r=n.innerType._zod.values;return r?new Set([...r].filter(i=>i!==void 0)):void 0}),e._zod.parse=(r,i)=>{const s=n.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>sS(u,e)):sS(s,e)}});function sS(e,n){return!e.issues.length&&e.value===void 0&&e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:n}),e}const E4=ue("$ZodCatch",(e,n)=>{Ft.init(e,n),e._zod.optin="optional",ft(e._zod,"optout",()=>n.innerType._zod.optout),ft(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(r,i)=>{if(i.direction==="backward")return n.innerType._zod.run(r,i);const s=n.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>(r.value=u.value,u.issues.length&&(r.value=n.catchValue({...r,error:{issues:u.issues.map(c=>yi(c,i,vi()))},input:r.value}),r.issues=[],r.fallback=!0),r)):(r.value=s.value,s.issues.length&&(r.value=n.catchValue({...r,error:{issues:s.issues.map(u=>yi(u,i,vi()))},input:r.value}),r.issues=[],r.fallback=!0),r)}}),R4=ue("$ZodPipe",(e,n)=>{Ft.init(e,n),ft(e._zod,"values",()=>n.in._zod.values),ft(e._zod,"optin",()=>n.in._zod.optin),ft(e._zod,"optout",()=>n.out._zod.optout),ft(e._zod,"propValues",()=>n.in._zod.propValues),e._zod.parse=(r,i)=>{if(i.direction==="backward"){const u=n.out._zod.run(r,i);return u instanceof Promise?u.then(c=>Fu(c,n.in,i)):Fu(u,n.in,i)}const s=n.in._zod.run(r,i);return s instanceof Promise?s.then(u=>Fu(u,n.out,i)):Fu(s,n.out,i)}});function Fu(e,n,r){return e.issues.length?(e.aborted=!0,e):n._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},r)}const T4=ue("$ZodReadonly",(e,n)=>{Ft.init(e,n),ft(e._zod,"propValues",()=>n.innerType._zod.propValues),ft(e._zod,"values",()=>n.innerType._zod.values),ft(e._zod,"optin",()=>n.innerType?._zod?.optin),ft(e._zod,"optout",()=>n.innerType?._zod?.optout),e._zod.parse=(r,i)=>{if(i.direction==="backward")return n.innerType._zod.run(r,i);const s=n.innerType._zod.run(r,i);return s instanceof Promise?s.then(lS):lS(s)}});function lS(e){return e.value=Object.freeze(e.value),e}const O4=ue("$ZodCustom",(e,n)=>{Or.init(e,n),Ft.init(e,n),e._zod.parse=(r,i)=>r,e._zod.check=r=>{const i=r.value,s=n.fn(i);if(s instanceof Promise)return s.then(u=>uS(u,r,i,e));uS(s,r,i,e)}});function uS(e,n,r,i){if(!e){const s={code:"custom",input:r,inst:i,path:[...i._zod.def.path??[]],continue:!i._zod.def.abort};i._zod.def.params&&(s.params=i._zod.def.params),n.issues.push(Xs(s))}}var cS;class A4{constructor(){this._map=new WeakMap,this._idmap=new Map}add(n,...r){const i=r[0];return this._map.set(n,i),i&&typeof i=="object"&&"id"in i&&this._idmap.set(i.id,n),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(n){const r=this._map.get(n);return r&&typeof r=="object"&&"id"in r&&this._idmap.delete(r.id),this._map.delete(n),this}get(n){const r=n._zod.parent;if(r){const i={...this.get(r)??{}};delete i.id;const s={...i,...this._map.get(n)};return Object.keys(s).length?s:void 0}return this._map.get(n)}has(n){return this._map.has(n)}}function M4(){return new A4}(cS=globalThis).__zod_globalRegistry??(cS.__zod_globalRegistry=M4());const Ls=globalThis.__zod_globalRegistry;function j4(e,n){return new e({type:"string",...ke(n)})}function z4(e,n){return new e({type:"string",format:"email",check:"string_format",abort:!1,...ke(n)})}function dS(e,n){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...ke(n)})}function D4(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...ke(n)})}function N4(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...ke(n)})}function k4(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...ke(n)})}function L4(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...ke(n)})}function I4(e,n){return new e({type:"string",format:"url",check:"string_format",abort:!1,...ke(n)})}function $4(e,n){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...ke(n)})}function V4(e,n){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...ke(n)})}function F4(e,n){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...ke(n)})}function U4(e,n){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...ke(n)})}function H4(e,n){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...ke(n)})}function P4(e,n){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...ke(n)})}function B4(e,n){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...ke(n)})}function q4(e,n){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...ke(n)})}function G4(e,n){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...ke(n)})}function Z4(e,n){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...ke(n)})}function K4(e,n){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...ke(n)})}function Y4(e,n){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...ke(n)})}function Q4(e,n){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...ke(n)})}function X4(e,n){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...ke(n)})}function J4(e,n){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...ke(n)})}function W4(e,n){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...ke(n)})}function e5(e,n){return new e({type:"string",format:"date",check:"string_format",...ke(n)})}function t5(e,n){return new e({type:"string",format:"time",check:"string_format",precision:null,...ke(n)})}function n5(e,n){return new e({type:"string",format:"duration",check:"string_format",...ke(n)})}function r5(e,n){return new e({type:"boolean",...ke(n)})}function o5(e){return new e({type:"unknown"})}function i5(e,n){return new e({type:"never",...ke(n)})}function v_(e,n){return new T3({check:"max_length",...ke(n),maximum:e})}function dc(e,n){return new O3({check:"min_length",...ke(n),minimum:e})}function y_(e,n){return new A3({check:"length_equals",...ke(n),length:e})}function a5(e,n){return new M3({check:"string_format",format:"regex",...ke(n),pattern:e})}function s5(e){return new j3({check:"string_format",format:"lowercase",...ke(e)})}function l5(e){return new z3({check:"string_format",format:"uppercase",...ke(e)})}function u5(e,n){return new D3({check:"string_format",format:"includes",...ke(n),includes:e})}function c5(e,n){return new N3({check:"string_format",format:"starts_with",...ke(n),prefix:e})}function d5(e,n){return new k3({check:"string_format",format:"ends_with",...ke(n),suffix:e})}function La(e){return new L3({check:"overwrite",tx:e})}function f5(e){return La(n=>n.normalize(e))}function h5(){return La(e=>e.trim())}function m5(){return La(e=>e.toLowerCase())}function p5(){return La(e=>e.toUpperCase())}function g5(){return La(e=>Mk(e))}function v5(e,n,r){return new e({type:"array",element:n,...ke(r)})}function y5(e,n,r){return new e({type:"custom",check:"custom",fn:n,...ke(r)})}function b5(e,n){const r=S5(i=>(i.addIssue=s=>{if(typeof s=="string")i.issues.push(Xs(s,i.value,r._zod.def));else{const u=s;u.fatal&&(u.continue=!1),u.code??(u.code="custom"),u.input??(u.input=i.value),u.inst??(u.inst=r),u.continue??(u.continue=!r._zod.def.abort),i.issues.push(Xs(u))}},e(i.value,i)),n);return r}function S5(e,n){const r=new Or({check:"custom",...ke(n)});return r._zod.check=e,r}function b_(e){let n=e?.target??"draft-2020-12";return n==="draft-4"&&(n="draft-04"),n==="draft-7"&&(n="draft-07"),{processors:e.processors??{},metadataRegistry:e?.metadata??Ls,target:n,unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}),io:e?.io??"output",counter:0,seen:new Map,cycles:e?.cycles??"ref",reused:e?.reused??"inline",external:e?.external??void 0}}function un(e,n,r={path:[],schemaPath:[]}){var i;const s=e._zod.def,u=n.seen.get(e);if(u)return u.count++,r.schemaPath.includes(e)&&(u.cycle=r.path),u.schema;const c={schema:{},count:1,cycle:void 0,path:r.path};n.seen.set(e,c);const d=e._zod.toJSONSchema?.();if(d)c.schema=d;else{const y={...r,schemaPath:[...r.schemaPath,e],path:r.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(n,c.schema,y);else{const b=c.schema,S=n.processors[s.type];if(!S)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${s.type}`);S(e,n,b,y)}const g=e._zod.parent;g&&(c.ref||(c.ref=g),un(g,n,y),n.seen.get(g).isParent=!0)}const h=n.metadataRegistry.get(e);return h&&Object.assign(c.schema,h),n.io==="input"&&mn(e)&&(delete c.schema.examples,delete c.schema.default),n.io==="input"&&"_prefault"in c.schema&&((i=c.schema).default??(i.default=c.schema._prefault)),delete c.schema._prefault,n.seen.get(e).schema}function S_(e,n){const r=e.seen.get(n);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");const i=new Map;for(const c of e.seen.entries()){const d=e.metadataRegistry.get(c[0])?.id;if(d){const h=i.get(d);if(h&&h!==c[0])throw new Error(`Duplicate schema id "${d}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);i.set(d,c[0])}}const s=c=>{const d=e.target==="draft-2020-12"?"$defs":"definitions";if(e.external){const g=e.external.registry.get(c[0])?.id,b=e.external.uri??(_=>_);if(g)return{ref:b(g)};const S=c[1].defId??c[1].schema.id??`schema${e.counter++}`;return c[1].defId=S,{defId:S,ref:`${b("__shared")}#/${d}/${S}`}}if(c[1]===r)return{ref:"#"};const m=`#/${d}/`,y=c[1].schema.id??`__schema${e.counter++}`;return{defId:y,ref:m+y}},u=c=>{if(c[1].schema.$ref)return;const d=c[1],{ref:h,defId:m}=s(c);d.def={...d.schema},m&&(d.defId=m);const y=d.schema;for(const g in y)delete y[g];y.$ref=h};if(e.cycles==="throw")for(const c of e.seen.entries()){const d=c[1];if(d.cycle)throw new Error(`Cycle detected: #/${d.cycle?.join("/")}/ -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const c of e.seen.entries()){const d=c[1];if(n===c[0]){u(c);continue}if(e.external){const m=e.external.registry.get(c[0])?.id;if(n!==c[0]&&m){u(c);continue}}if(e.metadataRegistry.get(c[0])?.id){u(c);continue}if(d.cycle){u(c);continue}if(d.count>1&&e.reused==="ref"){u(c);continue}}}function x_(e,n){const r=e.seen.get(n);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");const i=d=>{const h=e.seen.get(d);if(h.ref===null)return;const m=h.def??h.schema,y={...m},g=h.ref;if(h.ref=null,g){i(g);const S=e.seen.get(g),_=S.schema;if(_.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(m.allOf=m.allOf??[],m.allOf.push(_)):Object.assign(m,_),Object.assign(m,y),d._zod.parent===g)for(const E in m)E==="$ref"||E==="allOf"||E in y||delete m[E];if(_.$ref&&S.def)for(const E in m)E==="$ref"||E==="allOf"||E in S.def&&JSON.stringify(m[E])===JSON.stringify(S.def[E])&&delete m[E]}const b=d._zod.parent;if(b&&b!==g){i(b);const S=e.seen.get(b);if(S?.schema.$ref&&(m.$ref=S.schema.$ref,S.def))for(const _ in m)_==="$ref"||_==="allOf"||_ in S.def&&JSON.stringify(m[_])===JSON.stringify(S.def[_])&&delete m[_]}e.override({zodSchema:d,jsonSchema:m,path:h.path??[]})};for(const d of[...e.seen.entries()].reverse())i(d[0]);const s={};if(e.target==="draft-2020-12"?s.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?s.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?s.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){const d=e.external.registry.get(n)?.id;if(!d)throw new Error("Schema is missing an `id` property");s.$id=e.external.uri(d)}Object.assign(s,r.def??r.schema);const u=e.metadataRegistry.get(n)?.id;u!==void 0&&s.id===u&&delete s.id;const c=e.external?.defs??{};for(const d of e.seen.entries()){const h=d[1];h.def&&h.defId&&(h.def.id===h.defId&&delete h.def.id,c[h.defId]=h.def)}e.external||Object.keys(c).length>0&&(e.target==="draft-2020-12"?s.$defs=c:s.definitions=c);try{const d=JSON.parse(JSON.stringify(s));return Object.defineProperty(d,"~standard",{value:{...n["~standard"],jsonSchema:{input:fc(n,"input",e.processors),output:fc(n,"output",e.processors)}},enumerable:!1,writable:!1}),d}catch{throw new Error("Error converting schema to JSON.")}}function mn(e,n){const r=n??{seen:new Set};if(r.seen.has(e))return!1;r.seen.add(e);const i=e._zod.def;if(i.type==="transform")return!0;if(i.type==="array")return mn(i.element,r);if(i.type==="set")return mn(i.valueType,r);if(i.type==="lazy")return mn(i.getter(),r);if(i.type==="promise"||i.type==="optional"||i.type==="nonoptional"||i.type==="nullable"||i.type==="readonly"||i.type==="default"||i.type==="prefault")return mn(i.innerType,r);if(i.type==="intersection")return mn(i.left,r)||mn(i.right,r);if(i.type==="record"||i.type==="map")return mn(i.keyType,r)||mn(i.valueType,r);if(i.type==="pipe")return e._zod.traits.has("$ZodCodec")?!0:mn(i.in,r)||mn(i.out,r);if(i.type==="object"){for(const s in i.shape)if(mn(i.shape[s],r))return!0;return!1}if(i.type==="union"){for(const s of i.options)if(mn(s,r))return!0;return!1}if(i.type==="tuple"){for(const s of i.items)if(mn(s,r))return!0;return!!(i.rest&&mn(i.rest,r))}return!1}const x5=(e,n={})=>r=>{const i=b_({...r,processors:n});return un(e,i),S_(i,e),x_(i,e)},fc=(e,n,r={})=>i=>{const{libraryOptions:s,target:u}=i??{},c=b_({...s??{},target:u,io:n,processors:r});return un(e,c),S_(c,e),x_(c,e)},w5={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},_5=(e,n,r,i)=>{const s=r;s.type="string";const{minimum:u,maximum:c,format:d,patterns:h,contentEncoding:m}=e._zod.bag;if(typeof u=="number"&&(s.minLength=u),typeof c=="number"&&(s.maxLength=c),d&&(s.format=w5[d]??d,s.format===""&&delete s.format,d==="time"&&delete s.format),m&&(s.contentEncoding=m),h&&h.size>0){const y=[...h];y.length===1?s.pattern=y[0].source:y.length>1&&(s.allOf=[...y.map(g=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:g.source}))])}},C5=(e,n,r,i)=>{r.type="boolean"},E5=(e,n,r,i)=>{r.not={}},R5=(e,n,r,i)=>{},T5=(e,n,r,i)=>{const s=e._zod.def,u=i_(s.entries);u.every(c=>typeof c=="number")&&(r.type="number"),u.every(c=>typeof c=="string")&&(r.type="string"),r.enum=u},O5=(e,n,r,i)=>{if(n.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},A5=(e,n,r,i)=>{if(n.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},M5=(e,n,r,i)=>{const s=r,u=e._zod.def,{minimum:c,maximum:d}=e._zod.bag;typeof c=="number"&&(s.minItems=c),typeof d=="number"&&(s.maxItems=d),s.type="array",s.items=un(u.element,n,{...i,path:[...i.path,"items"]})},j5=(e,n,r,i)=>{const s=r,u=e._zod.def;s.type="object",s.properties={};const c=u.shape;for(const m in c)s.properties[m]=un(c[m],n,{...i,path:[...i.path,"properties",m]});const d=new Set(Object.keys(c)),h=new Set([...d].filter(m=>{const y=u.shape[m]._zod;return n.io==="input"?y.optin===void 0:y.optout===void 0}));h.size>0&&(s.required=Array.from(h)),u.catchall?._zod.def.type==="never"?s.additionalProperties=!1:u.catchall?u.catchall&&(s.additionalProperties=un(u.catchall,n,{...i,path:[...i.path,"additionalProperties"]})):n.io==="output"&&(s.additionalProperties=!1)},z5=(e,n,r,i)=>{const s=e._zod.def,u=s.inclusive===!1,c=s.options.map((d,h)=>un(d,n,{...i,path:[...i.path,u?"oneOf":"anyOf",h]}));u?r.oneOf=c:r.anyOf=c},D5=(e,n,r,i)=>{const s=e._zod.def,u=un(s.left,n,{...i,path:[...i.path,"allOf",0]}),c=un(s.right,n,{...i,path:[...i.path,"allOf",1]}),d=m=>"allOf"in m&&Object.keys(m).length===1,h=[...d(u)?u.allOf:[u],...d(c)?c.allOf:[c]];r.allOf=h},N5=(e,n,r,i)=>{const s=e._zod.def,u=un(s.innerType,n,i),c=n.seen.get(e);n.target==="openapi-3.0"?(c.ref=s.innerType,r.nullable=!0):r.anyOf=[u,{type:"null"}]},k5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType},L5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,r.default=JSON.parse(JSON.stringify(s.defaultValue))},I5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,n.io==="input"&&(r._prefault=JSON.parse(JSON.stringify(s.defaultValue)))},$5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType;let c;try{c=s.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=c},V5=(e,n,r,i)=>{const s=e._zod.def,u=s.in._zod.traits.has("$ZodTransform"),c=n.io==="input"?u?s.out:s.in:s.out;un(c,n,i);const d=n.seen.get(e);d.ref=c},F5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,r.readOnly=!0},w_=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType};function Rm(){return Rm=Object.assign?Object.assign.bind():function(e){for(var n=1;n0){var h=s.errors[0][0];r[d]={message:h.message,type:h.code}}else r[d]={message:c,type:u};if(s.code==="invalid_union"&&s.errors.forEach(function(g){return g.forEach(function(b){return e.push(Rm({},b,{path:[].concat(s.path,b.path)}))})}),n){var m=r[d].types,y=m&&m[s.code];r[d]=Ap(d,n,r,u,y?[].concat(y,s.message):s.message)}e.shift()};e.length;)i();return r}function hc(e,n,r){if(r===void 0&&(r={}),(function(i){return"_def"in i&&typeof i._def=="object"&&"typeName"in i._def})(e))return function(i,s,u){try{return Promise.resolve(fS(function(){return Promise.resolve(e[r.mode==="sync"?"parse":"parseAsync"](i,n)).then(function(c){return u.shouldUseNativeValidation&&_m({},u),{errors:{},values:r.raw?Object.assign({},i):c}})},function(c){if((function(d){return Array.isArray(d?.issues)})(c))return{values:{},errors:Qb(U5(c.errors,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw c}))}catch(c){return Promise.reject(c)}};if((function(i){return"_zod"in i&&typeof i._zod=="object"})(e))return function(i,s,u){try{return Promise.resolve(fS(function(){return Promise.resolve((r.mode==="sync"?Bk:qk)(e,i,n)).then(function(c){return u.shouldUseNativeValidation&&_m({},u),{errors:{},values:r.raw?Object.assign({},i):c}})},function(c){if((function(d){return d instanceof kp})(c))return{values:{},errors:Qb(H5(c.issues,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw c}))}catch(c){return Promise.reject(c)}};throw new Error("Invalid input: not a Zod schema")}const P5=ue("ZodISODateTime",(e,n)=>{Q3.init(e,n),Et.init(e,n)});function B5(e){return W4(P5,e)}const q5=ue("ZodISODate",(e,n)=>{X3.init(e,n),Et.init(e,n)});function G5(e){return e5(q5,e)}const Z5=ue("ZodISOTime",(e,n)=>{J3.init(e,n),Et.init(e,n)});function K5(e){return t5(Z5,e)}const Y5=ue("ZodISODuration",(e,n)=>{W3.init(e,n),Et.init(e,n)});function Q5(e){return n5(Y5,e)}const X5=(e,n)=>{kp.init(e,n),e.name="ZodError",Object.defineProperties(e,{format:{value:r=>Pk(e,r)},flatten:{value:r=>Hk(e,r)},addIssue:{value:r=>{e.issues.push(r),e.message=JSON.stringify(e.issues,Cm,2)}},addIssues:{value:r=>{e.issues.push(...r),e.message=JSON.stringify(e.issues,Cm,2)}},isEmpty:{get(){return e.issues.length===0}}})},nr=ue("ZodError",X5,{Parent:Error}),J5=Hc(nr),W5=Pc(nr),eL=Bc(nr),tL=qc(nr),nL=Kk(nr),rL=Yk(nr),oL=Qk(nr),iL=Xk(nr),aL=Jk(nr),sL=Wk(nr),lL=e3(nr),uL=t3(nr),hS=new WeakMap;function Zc(e,n,r){const i=Object.getPrototypeOf(e);let s=hS.get(i);if(s||(s=new Set,hS.set(i,s)),!s.has(n)){s.add(n);for(const u in r){const c=r[u];Object.defineProperty(i,u,{configurable:!0,enumerable:!1,get(){const d=c.bind(this);return Object.defineProperty(this,u,{configurable:!0,writable:!0,enumerable:!0,value:d}),d},set(d){Object.defineProperty(this,u,{configurable:!0,writable:!0,enumerable:!0,value:d})}})}}}const Ut=ue("ZodType",(e,n)=>(Ft.init(e,n),Object.assign(e["~standard"],{jsonSchema:{input:fc(e,"input"),output:fc(e,"output")}}),e.toJSONSchema=x5(e,{}),e.def=n,e.type=n.type,Object.defineProperty(e,"_def",{value:n}),e.parse=(r,i)=>J5(e,r,i,{callee:e.parse}),e.safeParse=(r,i)=>eL(e,r,i),e.parseAsync=async(r,i)=>W5(e,r,i,{callee:e.parseAsync}),e.safeParseAsync=async(r,i)=>tL(e,r,i),e.spa=e.safeParseAsync,e.encode=(r,i)=>nL(e,r,i),e.decode=(r,i)=>rL(e,r,i),e.encodeAsync=async(r,i)=>oL(e,r,i),e.decodeAsync=async(r,i)=>iL(e,r,i),e.safeEncode=(r,i)=>aL(e,r,i),e.safeDecode=(r,i)=>sL(e,r,i),e.safeEncodeAsync=async(r,i)=>lL(e,r,i),e.safeDecodeAsync=async(r,i)=>uL(e,r,i),Zc(e,"ZodType",{check(...r){const i=this.def;return this.clone(Po(i,{checks:[...i.checks??[],...r.map(s=>typeof s=="function"?{_zod:{check:s,def:{check:"custom"},onattach:[]}}:s)]}),{parent:!0})},with(...r){return this.check(...r)},clone(r,i){return Bo(this,r,i)},brand(){return this},register(r,i){return r.add(this,i),this},refine(r,i){return this.check(n6(r,i))},superRefine(r,i){return this.check(r6(r,i))},overwrite(r){return this.check(La(r))},optional(){return vS(this)},exactOptional(){return PL(this)},nullable(){return yS(this)},nullish(){return vS(yS(this))},nonoptional(r){return YL(this,r)},array(){return DL(this)},or(r){return LL([this,r])},and(r){return $L(this,r)},transform(r){return bS(this,UL(r))},default(r){return GL(this,r)},prefault(r){return KL(this,r)},catch(r){return XL(this,r)},pipe(r){return bS(this,r)},readonly(){return e6(this)},describe(r){const i=this.clone();return Ls.add(i,{description:r}),i},meta(...r){if(r.length===0)return Ls.get(this);const i=this.clone();return Ls.add(i,r[0]),i},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(r){return r(this)}}),Object.defineProperty(e,"description",{get(){return Ls.get(e)?.description},configurable:!0}),e)),__=ue("_ZodString",(e,n)=>{Lp.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(i,s,u)=>_5(e,i,s);const r=e._zod.bag;e.format=r.format??null,e.minLength=r.minimum??null,e.maxLength=r.maximum??null,Zc(e,"_ZodString",{regex(...i){return this.check(a5(...i))},includes(...i){return this.check(u5(...i))},startsWith(...i){return this.check(c5(...i))},endsWith(...i){return this.check(d5(...i))},min(...i){return this.check(dc(...i))},max(...i){return this.check(v_(...i))},length(...i){return this.check(y_(...i))},nonempty(...i){return this.check(dc(1,...i))},lowercase(i){return this.check(s5(i))},uppercase(i){return this.check(l5(i))},trim(){return this.check(h5())},normalize(...i){return this.check(f5(...i))},toLowerCase(){return this.check(m5())},toUpperCase(){return this.check(p5())},slugify(){return this.check(g5())}})}),cL=ue("ZodString",(e,n)=>{Lp.init(e,n),__.init(e,n),e.email=r=>e.check(z4(dL,r)),e.url=r=>e.check(I4(fL,r)),e.jwt=r=>e.check(J4(TL,r)),e.emoji=r=>e.check($4(hL,r)),e.guid=r=>e.check(dS(mS,r)),e.uuid=r=>e.check(D4(Uu,r)),e.uuidv4=r=>e.check(N4(Uu,r)),e.uuidv6=r=>e.check(k4(Uu,r)),e.uuidv7=r=>e.check(L4(Uu,r)),e.nanoid=r=>e.check(V4(mL,r)),e.guid=r=>e.check(dS(mS,r)),e.cuid=r=>e.check(F4(pL,r)),e.cuid2=r=>e.check(U4(gL,r)),e.ulid=r=>e.check(H4(vL,r)),e.base64=r=>e.check(Y4(CL,r)),e.base64url=r=>e.check(Q4(EL,r)),e.xid=r=>e.check(P4(yL,r)),e.ksuid=r=>e.check(B4(bL,r)),e.ipv4=r=>e.check(q4(SL,r)),e.ipv6=r=>e.check(G4(xL,r)),e.cidrv4=r=>e.check(Z4(wL,r)),e.cidrv6=r=>e.check(K4(_L,r)),e.e164=r=>e.check(X4(RL,r)),e.datetime=r=>e.check(B5(r)),e.date=r=>e.check(G5(r)),e.time=r=>e.check(K5(r)),e.duration=r=>e.check(Q5(r))});function Ip(e){return j4(cL,e)}const Et=ue("ZodStringFormat",(e,n)=>{wt.init(e,n),__.init(e,n)}),dL=ue("ZodEmail",(e,n)=>{U3.init(e,n),Et.init(e,n)}),mS=ue("ZodGUID",(e,n)=>{V3.init(e,n),Et.init(e,n)}),Uu=ue("ZodUUID",(e,n)=>{F3.init(e,n),Et.init(e,n)}),fL=ue("ZodURL",(e,n)=>{H3.init(e,n),Et.init(e,n)}),hL=ue("ZodEmoji",(e,n)=>{P3.init(e,n),Et.init(e,n)}),mL=ue("ZodNanoID",(e,n)=>{B3.init(e,n),Et.init(e,n)}),pL=ue("ZodCUID",(e,n)=>{q3.init(e,n),Et.init(e,n)}),gL=ue("ZodCUID2",(e,n)=>{G3.init(e,n),Et.init(e,n)}),vL=ue("ZodULID",(e,n)=>{Z3.init(e,n),Et.init(e,n)}),yL=ue("ZodXID",(e,n)=>{K3.init(e,n),Et.init(e,n)}),bL=ue("ZodKSUID",(e,n)=>{Y3.init(e,n),Et.init(e,n)}),SL=ue("ZodIPv4",(e,n)=>{e4.init(e,n),Et.init(e,n)}),xL=ue("ZodIPv6",(e,n)=>{t4.init(e,n),Et.init(e,n)}),wL=ue("ZodCIDRv4",(e,n)=>{n4.init(e,n),Et.init(e,n)}),_L=ue("ZodCIDRv6",(e,n)=>{r4.init(e,n),Et.init(e,n)}),CL=ue("ZodBase64",(e,n)=>{o4.init(e,n),Et.init(e,n)}),EL=ue("ZodBase64URL",(e,n)=>{a4.init(e,n),Et.init(e,n)}),RL=ue("ZodE164",(e,n)=>{s4.init(e,n),Et.init(e,n)}),TL=ue("ZodJWT",(e,n)=>{u4.init(e,n),Et.init(e,n)}),OL=ue("ZodBoolean",(e,n)=>{c4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>C5(e,r,i)});function pS(e){return r5(OL,e)}const AL=ue("ZodUnknown",(e,n)=>{d4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>R5()});function gS(){return o5(AL)}const ML=ue("ZodNever",(e,n)=>{f4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>E5(e,r,i)});function jL(e){return i5(ML,e)}const zL=ue("ZodArray",(e,n)=>{h4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>M5(e,r,i,s),e.element=n.element,Zc(e,"ZodArray",{min(r,i){return this.check(dc(r,i))},nonempty(r){return this.check(dc(1,r))},max(r,i){return this.check(v_(r,i))},length(r,i){return this.check(y_(r,i))},unwrap(){return this.element}})});function DL(e,n){return v5(zL,e,n)}const NL=ue("ZodObject",(e,n)=>{p4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>j5(e,r,i,s),ft(e,"shape",()=>n.shape),Zc(e,"ZodObject",{keyof(){return VL(Object.keys(this._zod.def.shape))},catchall(r){return this.clone({...this._zod.def,catchall:r})},passthrough(){return this.clone({...this._zod.def,catchall:gS()})},loose(){return this.clone({...this._zod.def,catchall:gS()})},strict(){return this.clone({...this._zod.def,catchall:jL()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(r){return Lk(this,r)},safeExtend(r){return Ik(this,r)},merge(r){return $k(this,r)},pick(r){return Nk(this,r)},omit(r){return kk(this,r)},partial(...r){return Vk(C_,this,r[0])},required(...r){return Fk(E_,this,r[0])}})});function Kc(e,n){const r={type:"object",shape:e??{},...ke(n)};return new NL(r)}const kL=ue("ZodUnion",(e,n)=>{g4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>z5(e,r,i,s),e.options=n.options});function LL(e,n){return new kL({type:"union",options:e,...ke(n)})}const IL=ue("ZodIntersection",(e,n)=>{v4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>D5(e,r,i,s)});function $L(e,n){return new IL({type:"intersection",left:e,right:n})}const Tm=ue("ZodEnum",(e,n)=>{y4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(i,s,u)=>T5(e,i,s),e.enum=n.entries,e.options=Object.values(n.entries);const r=new Set(Object.keys(n.entries));e.extract=(i,s)=>{const u={};for(const c of i)if(r.has(c))u[c]=n.entries[c];else throw new Error(`Key ${c} not found in enum`);return new Tm({...n,checks:[],...ke(s),entries:u})},e.exclude=(i,s)=>{const u={...n.entries};for(const c of i)if(r.has(c))delete u[c];else throw new Error(`Key ${c} not found in enum`);return new Tm({...n,checks:[],...ke(s),entries:u})}});function VL(e,n){const r=Array.isArray(e)?Object.fromEntries(e.map(i=>[i,i])):e;return new Tm({type:"enum",entries:r,...ke(n)})}const FL=ue("ZodTransform",(e,n)=>{b4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>A5(e,r),e._zod.parse=(r,i)=>{if(i.direction==="backward")throw new o_(e.constructor.name);r.addIssue=u=>{if(typeof u=="string")r.issues.push(Xs(u,r.value,n));else{const c=u;c.fatal&&(c.continue=!1),c.code??(c.code="custom"),c.input??(c.input=r.value),c.inst??(c.inst=e),r.issues.push(Xs(c))}};const s=n.transform(r.value,r);return s instanceof Promise?s.then(u=>(r.value=u,r.fallback=!0,r)):(r.value=s,r.fallback=!0,r)}});function UL(e){return new FL({type:"transform",transform:e})}const C_=ue("ZodOptional",(e,n)=>{g_.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>w_(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function vS(e){return new C_({type:"optional",innerType:e})}const HL=ue("ZodExactOptional",(e,n)=>{S4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>w_(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function PL(e){return new HL({type:"optional",innerType:e})}const BL=ue("ZodNullable",(e,n)=>{x4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>N5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function yS(e){return new BL({type:"nullable",innerType:e})}const qL=ue("ZodDefault",(e,n)=>{w4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>L5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function GL(e,n){return new qL({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():s_(n)}})}const ZL=ue("ZodPrefault",(e,n)=>{_4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>I5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function KL(e,n){return new ZL({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():s_(n)}})}const E_=ue("ZodNonOptional",(e,n)=>{C4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>k5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function YL(e,n){return new E_({type:"nonoptional",innerType:e,...ke(n)})}const QL=ue("ZodCatch",(e,n)=>{E4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>$5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function XL(e,n){return new QL({type:"catch",innerType:e,catchValue:typeof n=="function"?n:()=>n})}const JL=ue("ZodPipe",(e,n)=>{R4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>V5(e,r,i,s),e.in=n.in,e.out=n.out});function bS(e,n){return new JL({type:"pipe",in:e,out:n})}const WL=ue("ZodReadonly",(e,n)=>{T4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>F5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function e6(e){return new WL({type:"readonly",innerType:e})}const t6=ue("ZodCustom",(e,n)=>{O4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>O5(e,r)});function n6(e,n={}){return y5(t6,e,n)}function r6(e,n){return b5(e,n)}const o6=/\.(md|markdown)$/i,i6=/\.(png|jpe?g|gif|svg|webp|ico|bmp|avif)$/i,a6=/\.html?$/i,s6=/\.(txt|log|json|ya?ml|toml|csv|go|py|js|ts|jsx|tsx|sh|bash|zsh|rb|rs|c|h|cpp|java|kt|swift|sql|css|xml|ini|conf|env|mod|sum|jsonl)$/i;function R_(e){if(e<1024)return e+" B";const n=["KB","MB","GB","TB"];let r=-1;do e/=1024,r++;while(e>=1024&&r[role=checkbox]]:translate-y-[2px]",e),...n})}function z_({className:e,...n}){return v.jsx("td",{"data-slot":"table-cell",className:xt("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...n})}const l6=Kc({name:Ip().trim().min(1,"Give the organization a name.").max(60,"Keep it under 60 characters.")});function u6({org:e,projects:n,myEmail:r,onProjectsChanged:i}){const s=tl(),u=e.role==="owner",c=()=>s.invalidateQueries({queryKey:["orgs"]}),d=()=>s.invalidateQueries({queryKey:["invites",e.id]}),h=()=>s.invalidateQueries({queryKey:["orgShares",e.id]}),m=lc({resolver:hc(l6),values:{name:e.name}}),{data:y}=Mn({queryKey:["invites",e.id],queryFn:()=>Vn(`/api/orgs/${e.id}/invites`),enabled:u,select:S=>S.invites||[]}),{data:g}=Mn({queryKey:["orgShares",e.id],queryFn:()=>Vn(`/api/orgs/${e.id}/shares`),enabled:u,select:S=>S.shares||[]}),b=n.filter(S=>S.org===e.id);return v.jsxs("div",{className:"admin",children:[v.jsx("h1",{id:"org-title",children:e.name+(u?"":" · member")}),u&&v.jsxs("form",{className:"admin-row",onSubmit:m.handleSubmit(async({name:S})=>{try{await Ao("PATCH","/api/orgs/"+e.id,{name:S}),Je("Renamed."),c()}catch(_){Je(_.message,!0)}}),children:[v.jsx("input",{id:"org-rename",type:"text",...m.register("name")}),v.jsx(Yt,{variant:"primary",id:"org-rename-btn",type:"submit",children:"Rename org"}),m.formState.errors.name&&v.jsx("span",{className:"field-err",children:m.formState.errors.name.message})]}),v.jsx("h3",{children:"Members"}),v.jsx(c6,{org:e,owner:u,myEmail:r,onChanged:c}),u&&v.jsxs(v.Fragment,{children:[v.jsx("h3",{children:"Projects"}),v.jsxs("div",{className:"admin-list",children:[b.length===0&&v.jsx("div",{className:"admin-empty",children:"No projects yet."}),b.map(S=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:S.name}),v.jsx(Yt,{variant:"subtle",onClick:async()=>{const _=await R1("Rename project","New name",S.name,"Rename");if(!(!_||_===S.name))try{await Ao("PATCH","/api/projects/"+S.id,{name:_}),Je("Renamed."),await i()}catch(C){Je(C.message,!0)}},children:"Rename"}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Delete project",`Delete “${S.name}”? Its files stay in storage, but it's removed from the hub.`,"Delete",!0))try{await Ao("DELETE","/api/projects/"+S.id),Je(`Deleted “${S.name}”.`),await i()}catch(_){Je(_.message,!0)}},children:"Delete"})]},S.id))]}),v.jsxs("div",{className:"admin-h",children:[v.jsx("h3",{children:"Invite links"}),v.jsx(Yt,{variant:"primary",onClick:async()=>{try{const S=await Oa(`/api/orgs/${e.id}/invites`),_=await Js(S.url);Je(_?"Invite link copied to clipboard.":"Invite created — copy it from the list below."),d()}catch(S){Je(S.message,!0)}},children:"New invite"})]}),v.jsxs("div",{className:"admin-list",children:[y&&y.length===0&&v.jsx("div",{className:"admin-empty",children:"No active invite links."}),(y||[]).map(S=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main mono",style:{cursor:"pointer"},title:"Copy",onClick:()=>Js(S.url).then(_=>Je(_?"Copied.":"Select and copy the link.")),children:S.url}),v.jsx("span",{className:"ai-tag",children:(S.creator?"by "+S.creator+" · ":"")+(S.uses?S.uses+" joined · ":"unused · ")+"expires "+new Date(S.expires).toLocaleDateString()}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Revoke invite","Revoke this invite link? Anyone still holding it won't be able to join.","Revoke",!0))try{await Ao("DELETE",`/api/orgs/${e.id}/invites/${S.token}`),Je("Revoked."),d()}catch(_){Je(_.message,!0)}},children:"Revoke"})]},S.token))]}),v.jsx("h3",{children:"Public share links"}),v.jsx(d6,{shares:g||[],onChanged:h})]})]})}function c6({org:e,owner:n,myEmail:r,onChanged:i}){const[s,u]=x.useState([{id:"email",desc:!1}]),c=x.useMemo(()=>z1(),[]),d=x.useMemo(()=>[c.accessor("email",{id:"email",header:"Member",cell:m=>{const y=!!r&&m.getValue().toLowerCase()===r.toLowerCase();return v.jsx("span",{className:"ai-main",children:m.getValue()+(y?" (you)":"")})}}),c.accessor("role",{id:"role",header:"Role",cell:m=>{const y=m.row.original,g=!!r&&y.email.toLowerCase()===r.toLowerCase();return!n||g?v.jsx("span",{className:"ai-tag",children:y.role}):v.jsxs(v.Fragment,{children:[v.jsxs("select",{value:y.role,onChange:async b=>{try{await Ao("PATCH",`/api/orgs/${e.id}/members/${encodeURIComponent(y.email)}`,{role:b.target.value}),Je("Role updated.")}catch(S){Je(S.message,!0)}i()},children:[v.jsx("option",{value:"owner",children:"owner"}),v.jsx("option",{value:"member",children:"member"})]}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Remove member",`Remove ${y.email} from ${e.name}?`,"Remove",!0))try{await Ao("DELETE",`/api/orgs/${e.id}/members/${encodeURIComponent(y.email)}`),Je("Removed."),i()}catch(b){Je(b.message,!0)}},children:"Remove"})]})}})],[c,e.id,e.name,n,r]),h=B1({data:e.members,columns:d,state:{sorting:s},onSortingChange:u,getCoreRowModel:H1(),getSortedRowModel:P1()});return v.jsxs(O_,{className:"admin-table",children:[v.jsx(A_,{children:h.getHeaderGroups().map(m=>v.jsx(mc,{children:m.headers.map(y=>v.jsxs(j_,{onClick:y.column.getToggleSortingHandler(),"data-sort":y.column.getIsSorted()||void 0,children:[ic(y.column.columnDef.header,y.getContext()),y.column.getIsSorted()==="asc"?" ↑":y.column.getIsSorted()==="desc"?" ↓":""]},y.id))},m.id))}),v.jsx(M_,{children:h.getRowModel().rows.map(m=>v.jsx(mc,{className:"admin-item",children:m.getVisibleCells().map(y=>v.jsx(z_,{children:ic(y.column.columnDef.cell,y.getContext())},y.id))},m.id))})]})}function d6({shares:e,onChanged:n}){const[r,i]=x.useState([]),s=x.useMemo(()=>z1(),[]),u=x.useMemo(()=>[s.accessor("path",{header:"Path",cell:d=>v.jsx("span",{className:"ai-main mono",style:{cursor:"pointer"},title:d.row.original.url,onClick:()=>window.open(d.row.original.url,"_blank"),children:d.getValue()})}),s.accessor(d=>d.project_name||"",{id:"project",header:"Project",cell:d=>v.jsx("span",{className:"ai-tag",children:(d.getValue()||"")+(d.row.original.creator?" · by "+d.row.original.creator:"")+(d.row.original.created?" · "+new Date(d.row.original.created).toLocaleDateString():"")})}),s.display({id:"actions",header:"",cell:d=>v.jsx("button",{className:"ai-del",onClick:async()=>{const h=d.row.original;if(await oc("Revoke share link",`Revoke the public link to “${h.path}”? Anyone with the URL will lose access.`,"Revoke",!0))try{await Ao("DELETE","/api/shares/"+h.token),Je("Share revoked."),n()}catch(m){Je(m.message,!0)}},children:"Revoke"})})],[s,n]),c=B1({data:e,columns:u,state:{sorting:r},onSortingChange:i,getCoreRowModel:H1(),getSortedRowModel:P1()});return e.length===0?v.jsx("div",{className:"admin-list",children:v.jsx("div",{className:"admin-empty",children:"No public shares."})}):v.jsxs(O_,{className:"admin-table",children:[v.jsx(A_,{children:c.getHeaderGroups().map(d=>v.jsx(mc,{children:d.headers.map(h=>v.jsx(j_,{onClick:h.column.getToggleSortingHandler(),children:ic(h.column.columnDef.header,h.getContext())},h.id))},d.id))}),v.jsx(M_,{children:c.getRowModel().rows.map(d=>v.jsx(mc,{className:"admin-item",children:d.getVisibleCells().map(h=>v.jsx(z_,{children:ic(h.column.columnDef.cell,h.getContext())},h.id))},d.id))})]})}const f6=Kc({require_verification:pS(),require_approval:pS()});function h6(){const e=tl(),{data:n,error:r}=Mn({queryKey:["admin","policy"],queryFn:()=>Vn("/api/admin/policy")}),{data:i}=T1(!0),s=lc({resolver:hc(f6),values:n?{require_verification:n.require_verification&&n.mailer,require_approval:n.require_approval}:{require_verification:!1,require_approval:!1}});if(x.useEffect(()=>{r&&Je(r.message,!0)},[r]),!n)return null;const u=async(c,d,h)=>{try{await Oa(`/api/admin/pending/${c}/${d}`),Je((d==="approve"?"Approved ":"Denied ")+h),e.invalidateQueries({queryKey:["admin","pending"]})}catch(m){Je(m.message,!0)}};return v.jsxs("div",{className:"admin",children:[v.jsx("h1",{children:"Signup & access"}),v.jsx("p",{className:"admin-sub",children:"Who can create an account on this hub, and how new accounts are vetted."}),v.jsx("h3",{children:"New-account vetting"}),v.jsxs("form",{onSubmit:s.handleSubmit(async c=>{try{await Oa("/api/admin/policy",c),Je("Signup policy saved."),e.invalidateQueries({queryKey:["admin","policy"]})}catch(d){Je(d.message,!0)}}),children:[v.jsxs("div",{className:"admin-list",children:[v.jsx(SS,{label:"Require email verification",desc:n.mailer?"New accounts must click an emailed link before they can sign in — proves they control the address.":"Configure SMTP on the server (auth.smtp) to enable email verification.",disabled:!n.mailer,inputProps:s.register("require_verification")}),v.jsx(SS,{label:"Require admin approval",desc:"New accounts wait for a hub admin to approve them before they gain access.",inputProps:s.register("require_approval")})]}),v.jsx(Yt,{variant:"primary",type:"submit",style:{marginTop:14},children:"Save policy"})]}),v.jsx("h3",{children:"Who can sign up"}),v.jsxs("div",{className:"admin-list",children:[v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Allowed email domains"}),v.jsx("span",{className:"ai-tag",children:n.allowed_domains&&n.allowed_domains.length?n.allowed_domains.map(c=>"@"+c).join(", "):"any"})]}),v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Self-signup"}),v.jsx("span",{className:"ai-tag",children:n.allow_signup?"open":"invite-only"})]}),v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Hub admins"}),v.jsx("span",{className:"ai-tag",children:n.admins&&n.admins.length?n.admins.join(", "):"none"})]})]}),v.jsx("p",{className:"admin-sub",children:"Domains and admins are set in the server config file (they can't be widened from the browser)."}),v.jsx("h3",{children:"Pending signups"}),v.jsxs("div",{className:"admin-list",children:[(!i||i.length===0)&&v.jsx("div",{className:"admin-empty",children:"No one is waiting for approval."}),(i||[]).map(c=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:(c.name?c.name+" · ":"")+c.email}),v.jsx(Yt,{variant:"primary",onClick:()=>u(c.id,"approve",c.email),children:"Approve"}),v.jsx("button",{className:"ai-del",onClick:()=>u(c.id,"deny",c.email),children:"Deny"})]},c.id))]})]})}function SS({label:e,desc:n,disabled:r,inputProps:i}){return v.jsxs("label",{className:"admin-item toggle",style:r?{opacity:.55}:void 0,children:[v.jsxs("span",{className:"ai-main",children:[v.jsx("div",{className:"tg-label",children:e}),v.jsx("div",{className:"tg-desc",children:n})]}),v.jsx("input",{type:"checkbox",disabled:r,...i})]})}function m6({...e}){return v.jsx(Sw,{"data-slot":"select",...e})}function p6({...e}){return v.jsx(Cw,{"data-slot":"select-value",...e})}function g6({className:e,size:n="default",children:r,...i}){return v.jsxs(ww,{"data-slot":"select-trigger","data-size":n,className:xt("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",e),...i,children:[r,v.jsx(Ew,{asChild:!0,children:v.jsx(vp,{className:"size-4 opacity-50"})})]})}function v6({className:e,children:n,position:r="item-aligned",align:i="center",...s}){return v.jsx(Tw,{children:v.jsxs(Ow,{"data-slot":"select-content",className:xt("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...s,children:[v.jsx(b6,{}),v.jsx(Dw,{className:xt("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:n}),v.jsx(S6,{})]})})}function y6({className:e,children:n,...r}){return v.jsxs(Iw,{"data-slot":"select-item",className:xt("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[v.jsx("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-3.5 items-center justify-center",children:v.jsx(Fw,{children:v.jsx(x1,{className:"size-4"})})}),v.jsx($w,{children:n})]})}function b6({className:e,...n}){return v.jsx(Uw,{"data-slot":"select-scroll-up-button",className:xt("flex cursor-default items-center justify-center py-1",e),...n,children:v.jsx(Oz,{className:"size-4"})})}function S6({className:e,...n}){return v.jsx(Hw,{"data-slot":"select-scroll-down-button",className:xt("flex cursor-default items-center justify-center py-1",e),...n,children:v.jsx(vp,{className:"size-4"})})}const xS=["#5b8def","#f5a623","#4cc38a","#e0679b","#8b7bf0","#3ec8c8","#e6934a"];function D_(e){let n=0;for(const r of e)n=n*31+r.charCodeAt(0)>>>0;return xS[n%xS.length]}function wS({projects:e,currentId:n,menu:r}){const i=O1(),s=async()=>{const u=await R1("New project","Project name","","Create");if(u)try{const c=await Oa("/api/projects",{name:u});await i(),On("/"+c.project.id),Je(`Created “${c.project.name}”.`)}catch(c){Je("Could not create the project: "+c.message,!0)}};return v.jsxs("nav",{id:"projects","aria-label":"Projects",children:[v.jsxs("div",{className:"nav-head",children:[v.jsx("span",{children:"Projects"}),v.jsx("button",{className:"nav-add",title:"New project",onClick:s,children:"+"})]}),v.jsx("div",{className:"proj-row",children:v.jsxs(m6,{value:n||"",onValueChange:u=>{u&&u!==n&&(On("/"+u),cr())},children:[v.jsxs(g6,{id:"project-select","aria-label":"Switch project",className:"proj-trigger",children:[n&&v.jsx("span",{className:"proj-mark","aria-hidden":"true",style:{background:D_(e.find(u=>u.id===n)?.name||"")}}),v.jsx(p6,{placeholder:"Select a project"})]}),v.jsx(v6,{className:"proj-menu",children:e.map(u=>v.jsx(y6,{value:u.id,children:u.name},u.id))})]})}),r&&v.jsx("ul",{className:"nav-menu","aria-label":"Project pages",children:[["dashboard","Dashboard","dashboard",r.onDashboard],["install","Installation","terminal",r.onInstall],["history","History","hist",r.onHistory],["settings","Settings","gear",r.onSettings]].map(([u,c,d,h])=>v.jsx("li",{children:v.jsxs("div",{id:"nav-"+u,className:"row"+(r.active===u?" active":""),role:"button",tabIndex:0,onClick:h,onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),h())},children:[v.jsx(Kt,{name:d}),v.jsx("span",{className:"label",children:c})]})},u))})]})}function x6({...e}){return v.jsx(w2,{"data-slot":"dropdown-menu",...e})}function w6({...e}){return v.jsx(_2,{"data-slot":"dropdown-menu-trigger",...e})}function _6({className:e,sideOffset:n=4,...r}){return v.jsx(C2,{children:v.jsx(E2,{"data-slot":"dropdown-menu-content",sideOffset:n,className:xt("z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",e),...r})})}function Ih({className:e,inset:n,variant:r="default",...i}){return v.jsx(T2,{"data-slot":"dropdown-menu-item","data-inset":n,"data-variant":r,className:xt("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",e),...i})}function $h({className:e,inset:n,...r}){return v.jsx(R2,{"data-slot":"dropdown-menu-label","data-inset":n,className:xt("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",e),...r})}function C6({me:e,org:n,admin:r,onOrgSettings:i}){const s=e.name||e.email;return v.jsx("footer",{id:"accountbar",children:v.jsxs(x6,{modal:!1,children:[v.jsx(w6,{asChild:!0,children:v.jsxs("button",{id:"account-btn","aria-label":"Account menu",children:[v.jsx("span",{className:"avatar",style:{background:D_(e.email)},"aria-hidden":"true",children:(s.trim()[0]||"?").toUpperCase()}),v.jsxs("span",{className:"acct",children:[v.jsx("b",{children:s}),e.name&&v.jsx("small",{children:e.email})]}),v.jsx(Kt,{name:"chev"})]})}),v.jsxs(_6,{id:"account-menu",side:"top",align:"start",sideOffset:6,className:"acct-menu",children:[n&&v.jsxs(v.Fragment,{children:[v.jsx($h,{className:"menu-sec",children:"Organization"}),v.jsxs(Ih,{id:"menu-org-settings",onSelect:()=>i(n),children:[v.jsx(Kt,{name:"gear"}),v.jsxs("span",{children:[v.jsx("b",{children:n.name})," Settings"]})]})]}),r&&v.jsxs(v.Fragment,{children:[v.jsx($h,{className:"menu-sec",children:"Hub"}),v.jsxs(Ih,{id:"menu-hub-admin",onSelect:r.onClick,children:[v.jsx(Kt,{name:"shield"}),v.jsxs("span",{children:["Signup & access",r.pending?` · ${r.pending}`:""]})]})]}),v.jsx($h,{className:"menu-sec",children:"Account"}),v.jsx(Ih,{asChild:!0,children:v.jsxs("a",{id:"signout",href:"/auth/logout",children:[v.jsx(Kt,{name:"power"}),v.jsx("span",{children:"Log out"})]})})]})]})})}function E6({project:e,org:n}){return v.jsxs("div",{className:"project-settings",children:[v.jsx("h2",{children:e.name}),v.jsxs("dl",{className:"ps-facts",children:[v.jsx("dt",{children:"Project id"}),v.jsx("dd",{children:v.jsx("code",{children:e.id})}),n&&v.jsxs(v.Fragment,{children:[v.jsx("dt",{children:"Workspace"}),v.jsx("dd",{children:n.name})]}),e.created&&v.jsxs(v.Fragment,{children:[v.jsx("dt",{children:"Created"}),v.jsx("dd",{children:new Date(e.created).toLocaleDateString()})]})]})]})}const Vh=[{key:"claude",label:"Claude Code & Cowork"},{key:"hermes",label:"Hermes",hook:"hermes",note:"Registers BearDrive's hooks in Hermes's config: pull before every turn, push after edits with a session note, and report file reads to Insights."},{key:"codex",label:"Codex",hook:"codex",note:"Registers hooks in .codex/hooks.json.",extra:"Run /hooks inside Codex once to trust the project's .codex layer — after that every turn pulls, edits push automatically, and reads are reported to Insights."}];function R6(e,n){const r=window.location.origin,i=n.id;if(e.key==="claude")return[{title:"Add the BearDrive plugin",desc:"One time, in any Claude Code session. The plugin ships the beardrive skill, the /beardrive commands, and turn-boundary sync hooks — and Claude Cowork shares the same plugins, so installing it once covers both.",code:`/plugin marketplace add runbear-io/beardrive +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const c of e.seen.entries()){const d=c[1];if(n===c[0]){u(c);continue}if(e.external){const m=e.external.registry.get(c[0])?.id;if(n!==c[0]&&m){u(c);continue}}if(e.metadataRegistry.get(c[0])?.id){u(c);continue}if(d.cycle){u(c);continue}if(d.count>1&&e.reused==="ref"){u(c);continue}}}function x_(e,n){const r=e.seen.get(n);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");const i=d=>{const h=e.seen.get(d);if(h.ref===null)return;const m=h.def??h.schema,y={...m},g=h.ref;if(h.ref=null,g){i(g);const S=e.seen.get(g),_=S.schema;if(_.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(m.allOf=m.allOf??[],m.allOf.push(_)):Object.assign(m,_),Object.assign(m,y),d._zod.parent===g)for(const E in m)E==="$ref"||E==="allOf"||E in y||delete m[E];if(_.$ref&&S.def)for(const E in m)E==="$ref"||E==="allOf"||E in S.def&&JSON.stringify(m[E])===JSON.stringify(S.def[E])&&delete m[E]}const b=d._zod.parent;if(b&&b!==g){i(b);const S=e.seen.get(b);if(S?.schema.$ref&&(m.$ref=S.schema.$ref,S.def))for(const _ in m)_==="$ref"||_==="allOf"||_ in S.def&&JSON.stringify(m[_])===JSON.stringify(S.def[_])&&delete m[_]}e.override({zodSchema:d,jsonSchema:m,path:h.path??[]})};for(const d of[...e.seen.entries()].reverse())i(d[0]);const s={};if(e.target==="draft-2020-12"?s.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?s.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?s.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){const d=e.external.registry.get(n)?.id;if(!d)throw new Error("Schema is missing an `id` property");s.$id=e.external.uri(d)}Object.assign(s,r.def??r.schema);const u=e.metadataRegistry.get(n)?.id;u!==void 0&&s.id===u&&delete s.id;const c=e.external?.defs??{};for(const d of e.seen.entries()){const h=d[1];h.def&&h.defId&&(h.def.id===h.defId&&delete h.def.id,c[h.defId]=h.def)}e.external||Object.keys(c).length>0&&(e.target==="draft-2020-12"?s.$defs=c:s.definitions=c);try{const d=JSON.parse(JSON.stringify(s));return Object.defineProperty(d,"~standard",{value:{...n["~standard"],jsonSchema:{input:fc(n,"input",e.processors),output:fc(n,"output",e.processors)}},enumerable:!1,writable:!1}),d}catch{throw new Error("Error converting schema to JSON.")}}function mn(e,n){const r=n??{seen:new Set};if(r.seen.has(e))return!1;r.seen.add(e);const i=e._zod.def;if(i.type==="transform")return!0;if(i.type==="array")return mn(i.element,r);if(i.type==="set")return mn(i.valueType,r);if(i.type==="lazy")return mn(i.getter(),r);if(i.type==="promise"||i.type==="optional"||i.type==="nonoptional"||i.type==="nullable"||i.type==="readonly"||i.type==="default"||i.type==="prefault")return mn(i.innerType,r);if(i.type==="intersection")return mn(i.left,r)||mn(i.right,r);if(i.type==="record"||i.type==="map")return mn(i.keyType,r)||mn(i.valueType,r);if(i.type==="pipe")return e._zod.traits.has("$ZodCodec")?!0:mn(i.in,r)||mn(i.out,r);if(i.type==="object"){for(const s in i.shape)if(mn(i.shape[s],r))return!0;return!1}if(i.type==="union"){for(const s of i.options)if(mn(s,r))return!0;return!1}if(i.type==="tuple"){for(const s of i.items)if(mn(s,r))return!0;return!!(i.rest&&mn(i.rest,r))}return!1}const x5=(e,n={})=>r=>{const i=b_({...r,processors:n});return un(e,i),S_(i,e),x_(i,e)},fc=(e,n,r={})=>i=>{const{libraryOptions:s,target:u}=i??{},c=b_({...s??{},target:u,io:n,processors:r});return un(e,c),S_(c,e),x_(c,e)},w5={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},_5=(e,n,r,i)=>{const s=r;s.type="string";const{minimum:u,maximum:c,format:d,patterns:h,contentEncoding:m}=e._zod.bag;if(typeof u=="number"&&(s.minLength=u),typeof c=="number"&&(s.maxLength=c),d&&(s.format=w5[d]??d,s.format===""&&delete s.format,d==="time"&&delete s.format),m&&(s.contentEncoding=m),h&&h.size>0){const y=[...h];y.length===1?s.pattern=y[0].source:y.length>1&&(s.allOf=[...y.map(g=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:g.source}))])}},C5=(e,n,r,i)=>{r.type="boolean"},E5=(e,n,r,i)=>{r.not={}},R5=(e,n,r,i)=>{},T5=(e,n,r,i)=>{const s=e._zod.def,u=i_(s.entries);u.every(c=>typeof c=="number")&&(r.type="number"),u.every(c=>typeof c=="string")&&(r.type="string"),r.enum=u},O5=(e,n,r,i)=>{if(n.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},A5=(e,n,r,i)=>{if(n.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},M5=(e,n,r,i)=>{const s=r,u=e._zod.def,{minimum:c,maximum:d}=e._zod.bag;typeof c=="number"&&(s.minItems=c),typeof d=="number"&&(s.maxItems=d),s.type="array",s.items=un(u.element,n,{...i,path:[...i.path,"items"]})},j5=(e,n,r,i)=>{const s=r,u=e._zod.def;s.type="object",s.properties={};const c=u.shape;for(const m in c)s.properties[m]=un(c[m],n,{...i,path:[...i.path,"properties",m]});const d=new Set(Object.keys(c)),h=new Set([...d].filter(m=>{const y=u.shape[m]._zod;return n.io==="input"?y.optin===void 0:y.optout===void 0}));h.size>0&&(s.required=Array.from(h)),u.catchall?._zod.def.type==="never"?s.additionalProperties=!1:u.catchall?u.catchall&&(s.additionalProperties=un(u.catchall,n,{...i,path:[...i.path,"additionalProperties"]})):n.io==="output"&&(s.additionalProperties=!1)},z5=(e,n,r,i)=>{const s=e._zod.def,u=s.inclusive===!1,c=s.options.map((d,h)=>un(d,n,{...i,path:[...i.path,u?"oneOf":"anyOf",h]}));u?r.oneOf=c:r.anyOf=c},D5=(e,n,r,i)=>{const s=e._zod.def,u=un(s.left,n,{...i,path:[...i.path,"allOf",0]}),c=un(s.right,n,{...i,path:[...i.path,"allOf",1]}),d=m=>"allOf"in m&&Object.keys(m).length===1,h=[...d(u)?u.allOf:[u],...d(c)?c.allOf:[c]];r.allOf=h},N5=(e,n,r,i)=>{const s=e._zod.def,u=un(s.innerType,n,i),c=n.seen.get(e);n.target==="openapi-3.0"?(c.ref=s.innerType,r.nullable=!0):r.anyOf=[u,{type:"null"}]},k5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType},L5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,r.default=JSON.parse(JSON.stringify(s.defaultValue))},I5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,n.io==="input"&&(r._prefault=JSON.parse(JSON.stringify(s.defaultValue)))},$5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType;let c;try{c=s.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=c},V5=(e,n,r,i)=>{const s=e._zod.def,u=s.in._zod.traits.has("$ZodTransform"),c=n.io==="input"?u?s.out:s.in:s.out;un(c,n,i);const d=n.seen.get(e);d.ref=c},F5=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType,r.readOnly=!0},w_=(e,n,r,i)=>{const s=e._zod.def;un(s.innerType,n,i);const u=n.seen.get(e);u.ref=s.innerType};function Rm(){return Rm=Object.assign?Object.assign.bind():function(e){for(var n=1;n0){var h=s.errors[0][0];r[d]={message:h.message,type:h.code}}else r[d]={message:c,type:u};if(s.code==="invalid_union"&&s.errors.forEach(function(g){return g.forEach(function(b){return e.push(Rm({},b,{path:[].concat(s.path,b.path)}))})}),n){var m=r[d].types,y=m&&m[s.code];r[d]=Ap(d,n,r,u,y?[].concat(y,s.message):s.message)}e.shift()};e.length;)i();return r}function hc(e,n,r){if(r===void 0&&(r={}),(function(i){return"_def"in i&&typeof i._def=="object"&&"typeName"in i._def})(e))return function(i,s,u){try{return Promise.resolve(fS(function(){return Promise.resolve(e[r.mode==="sync"?"parse":"parseAsync"](i,n)).then(function(c){return u.shouldUseNativeValidation&&_m({},u),{errors:{},values:r.raw?Object.assign({},i):c}})},function(c){if((function(d){return Array.isArray(d?.issues)})(c))return{values:{},errors:Qb(U5(c.errors,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw c}))}catch(c){return Promise.reject(c)}};if((function(i){return"_zod"in i&&typeof i._zod=="object"})(e))return function(i,s,u){try{return Promise.resolve(fS(function(){return Promise.resolve((r.mode==="sync"?Bk:qk)(e,i,n)).then(function(c){return u.shouldUseNativeValidation&&_m({},u),{errors:{},values:r.raw?Object.assign({},i):c}})},function(c){if((function(d){return d instanceof kp})(c))return{values:{},errors:Qb(H5(c.issues,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw c}))}catch(c){return Promise.reject(c)}};throw new Error("Invalid input: not a Zod schema")}const P5=ue("ZodISODateTime",(e,n)=>{Q3.init(e,n),Et.init(e,n)});function B5(e){return W4(P5,e)}const q5=ue("ZodISODate",(e,n)=>{X3.init(e,n),Et.init(e,n)});function G5(e){return e5(q5,e)}const Z5=ue("ZodISOTime",(e,n)=>{J3.init(e,n),Et.init(e,n)});function K5(e){return t5(Z5,e)}const Y5=ue("ZodISODuration",(e,n)=>{W3.init(e,n),Et.init(e,n)});function Q5(e){return n5(Y5,e)}const X5=(e,n)=>{kp.init(e,n),e.name="ZodError",Object.defineProperties(e,{format:{value:r=>Pk(e,r)},flatten:{value:r=>Hk(e,r)},addIssue:{value:r=>{e.issues.push(r),e.message=JSON.stringify(e.issues,Cm,2)}},addIssues:{value:r=>{e.issues.push(...r),e.message=JSON.stringify(e.issues,Cm,2)}},isEmpty:{get(){return e.issues.length===0}}})},nr=ue("ZodError",X5,{Parent:Error}),J5=Hc(nr),W5=Pc(nr),eL=Bc(nr),tL=qc(nr),nL=Kk(nr),rL=Yk(nr),oL=Qk(nr),iL=Xk(nr),aL=Jk(nr),sL=Wk(nr),lL=e3(nr),uL=t3(nr),hS=new WeakMap;function Zc(e,n,r){const i=Object.getPrototypeOf(e);let s=hS.get(i);if(s||(s=new Set,hS.set(i,s)),!s.has(n)){s.add(n);for(const u in r){const c=r[u];Object.defineProperty(i,u,{configurable:!0,enumerable:!1,get(){const d=c.bind(this);return Object.defineProperty(this,u,{configurable:!0,writable:!0,enumerable:!0,value:d}),d},set(d){Object.defineProperty(this,u,{configurable:!0,writable:!0,enumerable:!0,value:d})}})}}}const Ut=ue("ZodType",(e,n)=>(Ft.init(e,n),Object.assign(e["~standard"],{jsonSchema:{input:fc(e,"input"),output:fc(e,"output")}}),e.toJSONSchema=x5(e,{}),e.def=n,e.type=n.type,Object.defineProperty(e,"_def",{value:n}),e.parse=(r,i)=>J5(e,r,i,{callee:e.parse}),e.safeParse=(r,i)=>eL(e,r,i),e.parseAsync=async(r,i)=>W5(e,r,i,{callee:e.parseAsync}),e.safeParseAsync=async(r,i)=>tL(e,r,i),e.spa=e.safeParseAsync,e.encode=(r,i)=>nL(e,r,i),e.decode=(r,i)=>rL(e,r,i),e.encodeAsync=async(r,i)=>oL(e,r,i),e.decodeAsync=async(r,i)=>iL(e,r,i),e.safeEncode=(r,i)=>aL(e,r,i),e.safeDecode=(r,i)=>sL(e,r,i),e.safeEncodeAsync=async(r,i)=>lL(e,r,i),e.safeDecodeAsync=async(r,i)=>uL(e,r,i),Zc(e,"ZodType",{check(...r){const i=this.def;return this.clone(Po(i,{checks:[...i.checks??[],...r.map(s=>typeof s=="function"?{_zod:{check:s,def:{check:"custom"},onattach:[]}}:s)]}),{parent:!0})},with(...r){return this.check(...r)},clone(r,i){return Bo(this,r,i)},brand(){return this},register(r,i){return r.add(this,i),this},refine(r,i){return this.check(n6(r,i))},superRefine(r,i){return this.check(r6(r,i))},overwrite(r){return this.check(La(r))},optional(){return vS(this)},exactOptional(){return PL(this)},nullable(){return yS(this)},nullish(){return vS(yS(this))},nonoptional(r){return YL(this,r)},array(){return DL(this)},or(r){return LL([this,r])},and(r){return $L(this,r)},transform(r){return bS(this,UL(r))},default(r){return GL(this,r)},prefault(r){return KL(this,r)},catch(r){return XL(this,r)},pipe(r){return bS(this,r)},readonly(){return e6(this)},describe(r){const i=this.clone();return Ls.add(i,{description:r}),i},meta(...r){if(r.length===0)return Ls.get(this);const i=this.clone();return Ls.add(i,r[0]),i},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(r){return r(this)}}),Object.defineProperty(e,"description",{get(){return Ls.get(e)?.description},configurable:!0}),e)),__=ue("_ZodString",(e,n)=>{Lp.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(i,s,u)=>_5(e,i,s);const r=e._zod.bag;e.format=r.format??null,e.minLength=r.minimum??null,e.maxLength=r.maximum??null,Zc(e,"_ZodString",{regex(...i){return this.check(a5(...i))},includes(...i){return this.check(u5(...i))},startsWith(...i){return this.check(c5(...i))},endsWith(...i){return this.check(d5(...i))},min(...i){return this.check(dc(...i))},max(...i){return this.check(v_(...i))},length(...i){return this.check(y_(...i))},nonempty(...i){return this.check(dc(1,...i))},lowercase(i){return this.check(s5(i))},uppercase(i){return this.check(l5(i))},trim(){return this.check(h5())},normalize(...i){return this.check(f5(...i))},toLowerCase(){return this.check(m5())},toUpperCase(){return this.check(p5())},slugify(){return this.check(g5())}})}),cL=ue("ZodString",(e,n)=>{Lp.init(e,n),__.init(e,n),e.email=r=>e.check(z4(dL,r)),e.url=r=>e.check(I4(fL,r)),e.jwt=r=>e.check(J4(TL,r)),e.emoji=r=>e.check($4(hL,r)),e.guid=r=>e.check(dS(mS,r)),e.uuid=r=>e.check(D4(Uu,r)),e.uuidv4=r=>e.check(N4(Uu,r)),e.uuidv6=r=>e.check(k4(Uu,r)),e.uuidv7=r=>e.check(L4(Uu,r)),e.nanoid=r=>e.check(V4(mL,r)),e.guid=r=>e.check(dS(mS,r)),e.cuid=r=>e.check(F4(pL,r)),e.cuid2=r=>e.check(U4(gL,r)),e.ulid=r=>e.check(H4(vL,r)),e.base64=r=>e.check(Y4(CL,r)),e.base64url=r=>e.check(Q4(EL,r)),e.xid=r=>e.check(P4(yL,r)),e.ksuid=r=>e.check(B4(bL,r)),e.ipv4=r=>e.check(q4(SL,r)),e.ipv6=r=>e.check(G4(xL,r)),e.cidrv4=r=>e.check(Z4(wL,r)),e.cidrv6=r=>e.check(K4(_L,r)),e.e164=r=>e.check(X4(RL,r)),e.datetime=r=>e.check(B5(r)),e.date=r=>e.check(G5(r)),e.time=r=>e.check(K5(r)),e.duration=r=>e.check(Q5(r))});function Ip(e){return j4(cL,e)}const Et=ue("ZodStringFormat",(e,n)=>{wt.init(e,n),__.init(e,n)}),dL=ue("ZodEmail",(e,n)=>{U3.init(e,n),Et.init(e,n)}),mS=ue("ZodGUID",(e,n)=>{V3.init(e,n),Et.init(e,n)}),Uu=ue("ZodUUID",(e,n)=>{F3.init(e,n),Et.init(e,n)}),fL=ue("ZodURL",(e,n)=>{H3.init(e,n),Et.init(e,n)}),hL=ue("ZodEmoji",(e,n)=>{P3.init(e,n),Et.init(e,n)}),mL=ue("ZodNanoID",(e,n)=>{B3.init(e,n),Et.init(e,n)}),pL=ue("ZodCUID",(e,n)=>{q3.init(e,n),Et.init(e,n)}),gL=ue("ZodCUID2",(e,n)=>{G3.init(e,n),Et.init(e,n)}),vL=ue("ZodULID",(e,n)=>{Z3.init(e,n),Et.init(e,n)}),yL=ue("ZodXID",(e,n)=>{K3.init(e,n),Et.init(e,n)}),bL=ue("ZodKSUID",(e,n)=>{Y3.init(e,n),Et.init(e,n)}),SL=ue("ZodIPv4",(e,n)=>{e4.init(e,n),Et.init(e,n)}),xL=ue("ZodIPv6",(e,n)=>{t4.init(e,n),Et.init(e,n)}),wL=ue("ZodCIDRv4",(e,n)=>{n4.init(e,n),Et.init(e,n)}),_L=ue("ZodCIDRv6",(e,n)=>{r4.init(e,n),Et.init(e,n)}),CL=ue("ZodBase64",(e,n)=>{o4.init(e,n),Et.init(e,n)}),EL=ue("ZodBase64URL",(e,n)=>{a4.init(e,n),Et.init(e,n)}),RL=ue("ZodE164",(e,n)=>{s4.init(e,n),Et.init(e,n)}),TL=ue("ZodJWT",(e,n)=>{u4.init(e,n),Et.init(e,n)}),OL=ue("ZodBoolean",(e,n)=>{c4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>C5(e,r,i)});function pS(e){return r5(OL,e)}const AL=ue("ZodUnknown",(e,n)=>{d4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>R5()});function gS(){return o5(AL)}const ML=ue("ZodNever",(e,n)=>{f4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>E5(e,r,i)});function jL(e){return i5(ML,e)}const zL=ue("ZodArray",(e,n)=>{h4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>M5(e,r,i,s),e.element=n.element,Zc(e,"ZodArray",{min(r,i){return this.check(dc(r,i))},nonempty(r){return this.check(dc(1,r))},max(r,i){return this.check(v_(r,i))},length(r,i){return this.check(y_(r,i))},unwrap(){return this.element}})});function DL(e,n){return v5(zL,e,n)}const NL=ue("ZodObject",(e,n)=>{p4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>j5(e,r,i,s),ft(e,"shape",()=>n.shape),Zc(e,"ZodObject",{keyof(){return VL(Object.keys(this._zod.def.shape))},catchall(r){return this.clone({...this._zod.def,catchall:r})},passthrough(){return this.clone({...this._zod.def,catchall:gS()})},loose(){return this.clone({...this._zod.def,catchall:gS()})},strict(){return this.clone({...this._zod.def,catchall:jL()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(r){return Lk(this,r)},safeExtend(r){return Ik(this,r)},merge(r){return $k(this,r)},pick(r){return Nk(this,r)},omit(r){return kk(this,r)},partial(...r){return Vk(C_,this,r[0])},required(...r){return Fk(E_,this,r[0])}})});function Kc(e,n){const r={type:"object",shape:e??{},...ke(n)};return new NL(r)}const kL=ue("ZodUnion",(e,n)=>{g4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>z5(e,r,i,s),e.options=n.options});function LL(e,n){return new kL({type:"union",options:e,...ke(n)})}const IL=ue("ZodIntersection",(e,n)=>{v4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>D5(e,r,i,s)});function $L(e,n){return new IL({type:"intersection",left:e,right:n})}const Tm=ue("ZodEnum",(e,n)=>{y4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(i,s,u)=>T5(e,i,s),e.enum=n.entries,e.options=Object.values(n.entries);const r=new Set(Object.keys(n.entries));e.extract=(i,s)=>{const u={};for(const c of i)if(r.has(c))u[c]=n.entries[c];else throw new Error(`Key ${c} not found in enum`);return new Tm({...n,checks:[],...ke(s),entries:u})},e.exclude=(i,s)=>{const u={...n.entries};for(const c of i)if(r.has(c))delete u[c];else throw new Error(`Key ${c} not found in enum`);return new Tm({...n,checks:[],...ke(s),entries:u})}});function VL(e,n){const r=Array.isArray(e)?Object.fromEntries(e.map(i=>[i,i])):e;return new Tm({type:"enum",entries:r,...ke(n)})}const FL=ue("ZodTransform",(e,n)=>{b4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>A5(e,r),e._zod.parse=(r,i)=>{if(i.direction==="backward")throw new o_(e.constructor.name);r.addIssue=u=>{if(typeof u=="string")r.issues.push(Xs(u,r.value,n));else{const c=u;c.fatal&&(c.continue=!1),c.code??(c.code="custom"),c.input??(c.input=r.value),c.inst??(c.inst=e),r.issues.push(Xs(c))}};const s=n.transform(r.value,r);return s instanceof Promise?s.then(u=>(r.value=u,r.fallback=!0,r)):(r.value=s,r.fallback=!0,r)}});function UL(e){return new FL({type:"transform",transform:e})}const C_=ue("ZodOptional",(e,n)=>{g_.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>w_(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function vS(e){return new C_({type:"optional",innerType:e})}const HL=ue("ZodExactOptional",(e,n)=>{S4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>w_(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function PL(e){return new HL({type:"optional",innerType:e})}const BL=ue("ZodNullable",(e,n)=>{x4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>N5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function yS(e){return new BL({type:"nullable",innerType:e})}const qL=ue("ZodDefault",(e,n)=>{w4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>L5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function GL(e,n){return new qL({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():s_(n)}})}const ZL=ue("ZodPrefault",(e,n)=>{_4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>I5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function KL(e,n){return new ZL({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():s_(n)}})}const E_=ue("ZodNonOptional",(e,n)=>{C4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>k5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function YL(e,n){return new E_({type:"nonoptional",innerType:e,...ke(n)})}const QL=ue("ZodCatch",(e,n)=>{E4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>$5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function XL(e,n){return new QL({type:"catch",innerType:e,catchValue:typeof n=="function"?n:()=>n})}const JL=ue("ZodPipe",(e,n)=>{R4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>V5(e,r,i,s),e.in=n.in,e.out=n.out});function bS(e,n){return new JL({type:"pipe",in:e,out:n})}const WL=ue("ZodReadonly",(e,n)=>{T4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>F5(e,r,i,s),e.unwrap=()=>e._zod.def.innerType});function e6(e){return new WL({type:"readonly",innerType:e})}const t6=ue("ZodCustom",(e,n)=>{O4.init(e,n),Ut.init(e,n),e._zod.processJSONSchema=(r,i,s)=>O5(e,r)});function n6(e,n={}){return y5(t6,e,n)}function r6(e,n){return b5(e,n)}const o6=/\.(md|markdown)$/i,i6=/\.(png|jpe?g|gif|svg|webp|ico|bmp|avif)$/i,a6=/\.html?$/i,s6=/\.(txt|log|json|ya?ml|toml|csv|go|py|js|ts|jsx|tsx|sh|bash|zsh|rb|rs|c|h|cpp|java|kt|swift|sql|css|xml|ini|conf|env|mod|sum|jsonl)$/i;function R_(e){if(e<1024)return e+" B";const n=["KB","MB","GB","TB"];let r=-1;do e/=1024,r++;while(e>=1024&&r[role=checkbox]]:translate-y-[2px]",e),...n})}function z_({className:e,...n}){return v.jsx("td",{"data-slot":"table-cell",className:xt("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...n})}const l6=Kc({name:Ip().trim().min(1,"Give the organization a name.").max(60,"Keep it under 60 characters.")});function u6({org:e,projects:n,myEmail:r,onProjectsChanged:i}){const s=tl(),u=e.role==="owner",c=()=>s.invalidateQueries({queryKey:["orgs"]}),d=()=>s.invalidateQueries({queryKey:["invites",e.id]}),h=()=>s.invalidateQueries({queryKey:["orgShares",e.id]}),m=lc({resolver:hc(l6),values:{name:e.name}}),{data:y}=Mn({queryKey:["invites",e.id],queryFn:()=>Vn(`/api/orgs/${e.id}/invites`),enabled:u,select:S=>S.invites||[]}),{data:g}=Mn({queryKey:["orgShares",e.id],queryFn:()=>Vn(`/api/orgs/${e.id}/shares`),enabled:u,select:S=>S.shares||[]}),b=n.filter(S=>S.org===e.id);return v.jsxs("div",{className:"admin",children:[v.jsx("h1",{id:"org-title",children:e.name+(u?"":" · member")}),u&&v.jsxs("form",{className:"admin-row",onSubmit:m.handleSubmit(async({name:S})=>{try{await Ao("PATCH","/api/orgs/"+e.id,{name:S}),Je("Renamed."),c()}catch(_){Je(_.message,!0)}}),children:[v.jsx("input",{id:"org-rename",type:"text",...m.register("name")}),v.jsx(Yt,{variant:"primary",id:"org-rename-btn",type:"submit",children:"Rename org"}),m.formState.errors.name&&v.jsx("span",{className:"field-err",children:m.formState.errors.name.message})]}),v.jsx("h3",{children:"Members"}),v.jsx(c6,{org:e,owner:u,myEmail:r,onChanged:c}),u&&v.jsxs(v.Fragment,{children:[v.jsx("h3",{children:"Projects"}),v.jsxs("div",{className:"admin-list",children:[b.length===0&&v.jsx("div",{className:"admin-empty",children:"No projects yet."}),b.map(S=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:S.name}),v.jsx(Yt,{variant:"subtle",onClick:async()=>{const _=await R1("Rename project","New name",S.name,"Rename");if(!(!_||_===S.name))try{await Ao("PATCH","/api/projects/"+S.id,{name:_}),Je("Renamed."),await i()}catch(C){Je(C.message,!0)}},children:"Rename"}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Delete project",`Delete “${S.name}”? Its files stay in storage, but it's removed from the hub.`,"Delete",!0))try{await Ao("DELETE","/api/projects/"+S.id),Je(`Deleted “${S.name}”.`),await i()}catch(_){Je(_.message,!0)}},children:"Delete"})]},S.id))]}),v.jsxs("div",{className:"admin-h",children:[v.jsx("h3",{children:"Invite links"}),v.jsx(Yt,{variant:"primary",onClick:async()=>{try{const S=await Oa(`/api/orgs/${e.id}/invites`),_=await Js(S.url);Je(_?"Invite link copied to clipboard.":"Invite created — copy it from the list below."),d()}catch(S){Je(S.message,!0)}},children:"New invite"})]}),v.jsxs("div",{className:"admin-list",children:[y&&y.length===0&&v.jsx("div",{className:"admin-empty",children:"No active invite links."}),(y||[]).map(S=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main mono",style:{cursor:"pointer"},title:"Copy",onClick:()=>Js(S.url).then(_=>Je(_?"Copied.":"Select and copy the link.")),children:S.url}),v.jsx("span",{className:"ai-tag",children:(S.creator?"by "+S.creator+" · ":"")+(S.uses?S.uses+" joined · ":"unused · ")+"expires "+new Date(S.expires).toLocaleDateString()}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Revoke invite","Revoke this invite link? Anyone still holding it won't be able to join.","Revoke",!0))try{await Ao("DELETE",`/api/orgs/${e.id}/invites/${S.token}`),Je("Revoked."),d()}catch(_){Je(_.message,!0)}},children:"Revoke"})]},S.token))]}),v.jsx("h3",{children:"Public share links"}),v.jsx(d6,{shares:g||[],onChanged:h})]})]})}function c6({org:e,owner:n,myEmail:r,onChanged:i}){const[s,u]=x.useState([{id:"email",desc:!1}]),c=x.useMemo(()=>z1(),[]),d=x.useMemo(()=>[c.accessor("email",{id:"email",header:"Member",cell:m=>{const y=!!r&&m.getValue().toLowerCase()===r.toLowerCase();return v.jsx("span",{className:"ai-main",children:m.getValue()+(y?" (you)":"")})}}),c.accessor("role",{id:"role",header:"Role",cell:m=>{const y=m.row.original,g=!!r&&y.email.toLowerCase()===r.toLowerCase();return!n||g?v.jsx("span",{className:"ai-tag",children:y.role}):v.jsxs(v.Fragment,{children:[v.jsxs("select",{value:y.role,onChange:async b=>{try{await Ao("PATCH",`/api/orgs/${e.id}/members/${encodeURIComponent(y.email)}`,{role:b.target.value}),Je("Role updated.")}catch(S){Je(S.message,!0)}i()},children:[v.jsx("option",{value:"owner",children:"owner"}),v.jsx("option",{value:"member",children:"member"})]}),v.jsx("button",{className:"ai-del",onClick:async()=>{if(await oc("Remove member",`Remove ${y.email} from ${e.name}?`,"Remove",!0))try{await Ao("DELETE",`/api/orgs/${e.id}/members/${encodeURIComponent(y.email)}`),Je("Removed."),i()}catch(b){Je(b.message,!0)}},children:"Remove"})]})}})],[c,e.id,e.name,n,r]),h=B1({data:e.members,columns:d,state:{sorting:s},onSortingChange:u,getCoreRowModel:H1(),getSortedRowModel:P1()});return v.jsx("div",{className:"admin-list admin-card-table",children:v.jsxs(O_,{className:"admin-table",children:[v.jsx(A_,{children:h.getHeaderGroups().map(m=>v.jsx(mc,{children:m.headers.map(y=>v.jsxs(j_,{onClick:y.column.getToggleSortingHandler(),"data-sort":y.column.getIsSorted()||void 0,children:[ic(y.column.columnDef.header,y.getContext()),y.column.getIsSorted()==="asc"?" ↑":y.column.getIsSorted()==="desc"?" ↓":""]},y.id))},m.id))}),v.jsx(M_,{children:h.getRowModel().rows.map(m=>v.jsx(mc,{className:"admin-item",children:m.getVisibleCells().map(y=>v.jsx(z_,{children:ic(y.column.columnDef.cell,y.getContext())},y.id))},m.id))})]})})}function d6({shares:e,onChanged:n}){const[r,i]=x.useState([]),s=x.useMemo(()=>z1(),[]),u=x.useMemo(()=>[s.accessor("path",{header:"Path",cell:d=>v.jsx("span",{className:"ai-main mono",style:{cursor:"pointer"},title:d.row.original.url,onClick:()=>window.open(d.row.original.url,"_blank"),children:d.getValue()})}),s.accessor(d=>d.project_name||"",{id:"project",header:"Project",cell:d=>v.jsx("span",{className:"ai-tag",children:(d.getValue()||"")+(d.row.original.creator?" · by "+d.row.original.creator:"")+(d.row.original.created?" · "+new Date(d.row.original.created).toLocaleDateString():"")})}),s.display({id:"actions",header:"",cell:d=>v.jsx("button",{className:"ai-del",onClick:async()=>{const h=d.row.original;if(await oc("Revoke share link",`Revoke the public link to “${h.path}”? Anyone with the URL will lose access.`,"Revoke",!0))try{await Ao("DELETE","/api/shares/"+h.token),Je("Share revoked."),n()}catch(m){Je(m.message,!0)}},children:"Revoke"})})],[s,n]),c=B1({data:e,columns:u,state:{sorting:r},onSortingChange:i,getCoreRowModel:H1(),getSortedRowModel:P1()});return e.length===0?v.jsx("div",{className:"admin-list",children:v.jsx("div",{className:"admin-empty",children:"No public shares."})}):v.jsx("div",{className:"admin-list admin-card-table",children:v.jsxs(O_,{className:"admin-table",children:[v.jsx(A_,{children:c.getHeaderGroups().map(d=>v.jsx(mc,{children:d.headers.map(h=>v.jsx(j_,{onClick:h.column.getToggleSortingHandler(),children:ic(h.column.columnDef.header,h.getContext())},h.id))},d.id))}),v.jsx(M_,{children:c.getRowModel().rows.map(d=>v.jsx(mc,{className:"admin-item",children:d.getVisibleCells().map(h=>v.jsx(z_,{children:ic(h.column.columnDef.cell,h.getContext())},h.id))},d.id))})]})})}const f6=Kc({require_verification:pS(),require_approval:pS()});function h6(){const e=tl(),{data:n,error:r}=Mn({queryKey:["admin","policy"],queryFn:()=>Vn("/api/admin/policy")}),{data:i}=T1(!0),s=lc({resolver:hc(f6),values:n?{require_verification:n.require_verification&&n.mailer,require_approval:n.require_approval}:{require_verification:!1,require_approval:!1}});if(x.useEffect(()=>{r&&Je(r.message,!0)},[r]),!n)return null;const u=async(c,d,h)=>{try{await Oa(`/api/admin/pending/${c}/${d}`),Je((d==="approve"?"Approved ":"Denied ")+h),e.invalidateQueries({queryKey:["admin","pending"]})}catch(m){Je(m.message,!0)}};return v.jsxs("div",{className:"admin",children:[v.jsx("h1",{children:"Signup & access"}),v.jsx("p",{className:"admin-sub",children:"Who can create an account on this hub, and how new accounts are vetted."}),v.jsx("h3",{children:"New-account vetting"}),v.jsxs("form",{onSubmit:s.handleSubmit(async c=>{try{await Oa("/api/admin/policy",c),Je("Signup policy saved."),e.invalidateQueries({queryKey:["admin","policy"]})}catch(d){Je(d.message,!0)}}),children:[v.jsxs("div",{className:"admin-list",children:[v.jsx(SS,{label:"Require email verification",desc:n.mailer?"New accounts must click an emailed link before they can sign in — proves they control the address.":"Configure SMTP on the server (auth.smtp) to enable email verification.",disabled:!n.mailer,inputProps:s.register("require_verification")}),v.jsx(SS,{label:"Require admin approval",desc:"New accounts wait for a hub admin to approve them before they gain access.",inputProps:s.register("require_approval")})]}),v.jsx(Yt,{variant:"primary",type:"submit",style:{marginTop:14},children:"Save policy"})]}),v.jsx("h3",{children:"Who can sign up"}),v.jsxs("div",{className:"admin-list",children:[v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Allowed email domains"}),v.jsx("span",{className:"ai-tag",children:n.allowed_domains&&n.allowed_domains.length?n.allowed_domains.map(c=>"@"+c).join(", "):"any"})]}),v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Self-signup"}),v.jsx("span",{className:"ai-tag",children:n.allow_signup?"open":"invite-only"})]}),v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:"Hub admins"}),v.jsx("span",{className:"ai-tag",children:n.admins&&n.admins.length?n.admins.join(", "):"none"})]})]}),v.jsx("p",{className:"admin-sub",children:"Domains and admins are set in the server config file (they can't be widened from the browser)."}),v.jsx("h3",{children:"Pending signups"}),v.jsxs("div",{className:"admin-list",children:[(!i||i.length===0)&&v.jsx("div",{className:"admin-empty",children:"No one is waiting for approval."}),(i||[]).map(c=>v.jsxs("div",{className:"admin-item",children:[v.jsx("span",{className:"ai-main",children:(c.name?c.name+" · ":"")+c.email}),v.jsx(Yt,{variant:"primary",onClick:()=>u(c.id,"approve",c.email),children:"Approve"}),v.jsx("button",{className:"ai-del",onClick:()=>u(c.id,"deny",c.email),children:"Deny"})]},c.id))]})]})}function SS({label:e,desc:n,disabled:r,inputProps:i}){return v.jsxs("label",{className:"admin-item toggle",style:r?{opacity:.55}:void 0,children:[v.jsxs("span",{className:"ai-main",children:[v.jsx("div",{className:"tg-label",children:e}),v.jsx("div",{className:"tg-desc",children:n})]}),v.jsx("input",{type:"checkbox",disabled:r,...i})]})}function m6({...e}){return v.jsx(Sw,{"data-slot":"select",...e})}function p6({...e}){return v.jsx(Cw,{"data-slot":"select-value",...e})}function g6({className:e,size:n="default",children:r,...i}){return v.jsxs(ww,{"data-slot":"select-trigger","data-size":n,className:xt("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",e),...i,children:[r,v.jsx(Ew,{asChild:!0,children:v.jsx(vp,{className:"size-4 opacity-50"})})]})}function v6({className:e,children:n,position:r="item-aligned",align:i="center",...s}){return v.jsx(Tw,{children:v.jsxs(Ow,{"data-slot":"select-content",className:xt("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...s,children:[v.jsx(b6,{}),v.jsx(Dw,{className:xt("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:n}),v.jsx(S6,{})]})})}function y6({className:e,children:n,...r}){return v.jsxs(Iw,{"data-slot":"select-item",className:xt("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[v.jsx("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-3.5 items-center justify-center",children:v.jsx(Fw,{children:v.jsx(x1,{className:"size-4"})})}),v.jsx($w,{children:n})]})}function b6({className:e,...n}){return v.jsx(Uw,{"data-slot":"select-scroll-up-button",className:xt("flex cursor-default items-center justify-center py-1",e),...n,children:v.jsx(Oz,{className:"size-4"})})}function S6({className:e,...n}){return v.jsx(Hw,{"data-slot":"select-scroll-down-button",className:xt("flex cursor-default items-center justify-center py-1",e),...n,children:v.jsx(vp,{className:"size-4"})})}const xS=["#5b8def","#f5a623","#4cc38a","#e0679b","#8b7bf0","#3ec8c8","#e6934a"];function D_(e){let n=0;for(const r of e)n=n*31+r.charCodeAt(0)>>>0;return xS[n%xS.length]}function wS({projects:e,currentId:n,menu:r}){const i=O1(),s=async()=>{const u=await R1("New project","Project name","","Create");if(u)try{const c=await Oa("/api/projects",{name:u});await i(),On("/"+c.project.id),Je(`Created “${c.project.name}”.`)}catch(c){Je("Could not create the project: "+c.message,!0)}};return v.jsxs("nav",{id:"projects","aria-label":"Projects",children:[v.jsxs("div",{className:"nav-head",children:[v.jsx("span",{children:"Projects"}),v.jsx("button",{className:"nav-add",title:"New project",onClick:s,children:"+"})]}),v.jsx("div",{className:"proj-row",children:v.jsxs(m6,{value:n||"",onValueChange:u=>{u&&u!==n&&(On("/"+u),cr())},children:[v.jsxs(g6,{id:"project-select","aria-label":"Switch project",className:"proj-trigger",children:[n&&v.jsx("span",{className:"proj-mark","aria-hidden":"true",style:{background:D_(e.find(u=>u.id===n)?.name||"")}}),v.jsx(p6,{placeholder:"Select a project"})]}),v.jsx(v6,{className:"proj-menu",position:"popper",sideOffset:4,children:e.map(u=>v.jsx(y6,{value:u.id,children:u.name},u.id))})]})}),r&&v.jsx("ul",{className:"nav-menu","aria-label":"Project pages",children:[["dashboard","Dashboard","dashboard",r.onDashboard],["install","Installation","terminal",r.onInstall],["history","History","hist",r.onHistory],["settings","Settings","gear",r.onSettings]].map(([u,c,d,h])=>v.jsx("li",{children:v.jsxs("div",{id:"nav-"+u,className:"row"+(r.active===u?" active":""),role:"button",tabIndex:0,onClick:h,onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),h())},children:[v.jsx(Kt,{name:d}),v.jsx("span",{className:"label",children:c})]})},u))})]})}function x6({...e}){return v.jsx(w2,{"data-slot":"dropdown-menu",...e})}function w6({...e}){return v.jsx(_2,{"data-slot":"dropdown-menu-trigger",...e})}function _6({className:e,sideOffset:n=4,...r}){return v.jsx(C2,{children:v.jsx(E2,{"data-slot":"dropdown-menu-content",sideOffset:n,className:xt("z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",e),...r})})}function Ih({className:e,inset:n,variant:r="default",...i}){return v.jsx(T2,{"data-slot":"dropdown-menu-item","data-inset":n,"data-variant":r,className:xt("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",e),...i})}function $h({className:e,inset:n,...r}){return v.jsx(R2,{"data-slot":"dropdown-menu-label","data-inset":n,className:xt("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",e),...r})}function C6({me:e,org:n,admin:r,onOrgSettings:i}){const s=e.name||e.email;return v.jsx("footer",{id:"accountbar",children:v.jsxs(x6,{modal:!1,children:[v.jsx(w6,{asChild:!0,children:v.jsxs("button",{id:"account-btn","aria-label":"Account menu",children:[v.jsx("span",{className:"avatar",style:{background:D_(e.email)},"aria-hidden":"true",children:(s.trim()[0]||"?").toUpperCase()}),v.jsxs("span",{className:"acct",children:[v.jsx("b",{children:s}),e.name&&v.jsx("small",{children:e.email})]}),v.jsx(Kt,{name:"chev"})]})}),v.jsxs(_6,{id:"account-menu",side:"top",align:"start",sideOffset:6,className:"acct-menu",children:[n&&v.jsxs(v.Fragment,{children:[v.jsx($h,{className:"menu-sec",children:"Organization"}),v.jsxs(Ih,{id:"menu-org-settings",onSelect:()=>i(n),children:[v.jsx(Kt,{name:"gear"}),v.jsxs("span",{children:[v.jsx("b",{children:n.name})," Settings"]})]})]}),r&&v.jsxs(v.Fragment,{children:[v.jsx($h,{className:"menu-sec",children:"Hub"}),v.jsxs(Ih,{id:"menu-hub-admin",onSelect:r.onClick,children:[v.jsx(Kt,{name:"shield"}),v.jsxs("span",{children:["Signup & access",r.pending?` · ${r.pending}`:""]})]})]}),v.jsx($h,{className:"menu-sec",children:"Account"}),v.jsx(Ih,{asChild:!0,children:v.jsxs("a",{id:"signout",href:"/auth/logout",children:[v.jsx(Kt,{name:"power"}),v.jsx("span",{children:"Log out"})]})})]})]})})}function E6({project:e,org:n}){return v.jsxs("div",{className:"project-settings",children:[v.jsx("h2",{children:e.name}),v.jsxs("dl",{className:"ps-facts",children:[v.jsx("dt",{children:"Project id"}),v.jsx("dd",{children:v.jsx("code",{children:e.id})}),n&&v.jsxs(v.Fragment,{children:[v.jsx("dt",{children:"Workspace"}),v.jsx("dd",{children:n.name})]}),e.created&&v.jsxs(v.Fragment,{children:[v.jsx("dt",{children:"Created"}),v.jsx("dd",{children:new Date(e.created).toLocaleDateString()})]})]})]})}const Vh=[{key:"claude",label:"Claude Code & Cowork"},{key:"hermes",label:"Hermes",hook:"hermes",note:"Registers BearDrive's hooks in Hermes's config: pull before every turn, push after edits with a session note, and report file reads to Insights."},{key:"codex",label:"Codex",hook:"codex",note:"Registers hooks in .codex/hooks.json.",extra:"Run /hooks inside Codex once to trust the project's .codex layer — after that every turn pulls, edits push automatically, and reads are reported to Insights."}];function R6(e,n){const r=window.location.origin,i=n.id;if(e.key==="claude")return[{title:"Add the BearDrive plugin",desc:"One time, in any Claude Code session. The plugin ships the beardrive skill, the /beardrive commands, and turn-boundary sync hooks — and Claude Cowork shares the same plugins, so installing it once covers both.",code:`/plugin marketplace add runbear-io/beardrive /plugin install beardrive@beardrive`},{title:"Set up this project conversationally",desc:"In a Claude Code or Cowork session in the folder where you want the files, run:",code:"/beardrive:install connect to "+r+", project "+i,extra:"Claude installs the CLI, signs this machine in, mounts the project, and registers the sync hooks — pull the latest before every turn, push after edits (stamped with the session that made them), and report file reads to Insights. It asks before anything it changes."}];const s=(n.name||"project").toLowerCase().replace(/[^a-z0-9._-]+/g,"-")||"project";return[{title:"Install the BearDrive CLI",desc:"One static binary. Homebrew on macOS and Linux; releases and `go install` also work.",code:"brew install runbear-io/tap/beardrive"},{title:"Sign in to this hub",desc:"Opens the browser once and stores a device token on this machine — the synced folder itself never holds credentials.",code:"bdrive login "+r},{title:"Mount the project into a local folder",desc:"Run it where you want the files. An existing folder works too — contents merge, and re-running init later (or after moving the folder) just resumes.",code:"mkdir -p ~/"+s+" && cd ~/"+s+` -bdrive init --project `+i},{title:"Connect "+e.label,desc:e.note,code:"bdrive hooks install --agent "+e.hook,extra:e.extra}]}function T6(){try{return localStorage.getItem("bdrive-guide-agent")||"claude"}catch{return"claude"}}function N_({project:e}){const[n,r]=x.useState(T6),i=Vh.find(s=>s.key===n)||Vh[0];return v.jsxs("div",{className:"guide",children:[v.jsx("h1",{className:"in-title",children:e.name}),v.jsx("p",{className:"dl-sub",children:"Mount this project as a folder on any machine and connect your coding agent: files sync both ways in the background, every change is journaled with who made it, and agent reads feed Insights."}),v.jsx("div",{className:"gd-tabs",children:Vh.map(s=>v.jsx("button",{className:"gd-tab"+(s.key===i.key?" active":""),"data-key":s.key,onClick:()=>{r(s.key);try{localStorage.setItem("bdrive-guide-agent",s.key)}catch{}},children:s.label},s.key))}),v.jsxs("div",{className:"gd-body",children:[R6(i,e).map((s,u)=>v.jsxs("div",{className:"gd-step",children:[v.jsxs("div",{className:"gd-step-head",children:[v.jsx("span",{className:"gd-num",children:u+1}),v.jsx("span",{className:"gd-step-title",children:s.title})]}),s.desc&&v.jsx("p",{className:"gd-desc",children:s.desc}),s.code&&v.jsx(O6,{code:s.code}),s.extra&&v.jsx("p",{className:"gd-desc gd-extra",children:s.extra})]},u)),v.jsx("p",{className:"gd-done",children:"That's it — the folder now syncs on its own. Every agent turn starts from the latest state, edits appear here (and on every teammate's mount) within seconds, and what your agents read shows up in Insights."})]})]})}function O6({code:e}){const[n,r]=x.useState("Copy");return v.jsxs("pre",{className:"gd-code",children:[v.jsx("code",{children:e}),v.jsx("button",{className:"gd-copy",onClick:async()=>{r(await Js(e)?"Copied":"Copy failed"),setTimeout(()=>r("Copy"),1400)},children:n})]})}const A6=Kc({invite:Ip().trim().refine(e=>/join\/([0-9a-f]+)/.test(e)||/^[0-9a-f]{8,}$/.test(e),{message:"That doesn't look like an invite link."})}),M6=Kc({name:Ip().trim().min(1,"Give the project a name.").max(60,"Keep it under 60 characters.")});function j6({authEnabled:e,onCreate:n}){const r=lc({resolver:hc(A6),defaultValues:{invite:""}}),i=lc({resolver:hc(M6),defaultValues:{name:""}});return v.jsxs("div",{className:"onboard",children:[v.jsx("h1",{children:"Welcome to BearDrive"}),v.jsx("p",{children:"You're signed in, but you're not part of any project yet."}),e&&v.jsxs("div",{className:"ob-card",children:[v.jsx("h3",{children:"Have an invite link?"}),v.jsx("p",{children:"A teammate can send you a join link. Paste it here:"}),v.jsxs("form",{className:"ob-row",onSubmit:r.handleSubmit(({invite:s})=>{const u=s.match(/join\/([0-9a-f]+)/)||s.match(/^([0-9a-f]{8,})$/);location.href="/join/"+u[1]}),children:[v.jsx("input",{id:"ob-invite",type:"text",placeholder:"https://…/join/…",autoComplete:"off",...r.register("invite")}),v.jsx(Yt,{id:"ob-join",variant:"primary",type:"submit",children:"Join"})]}),r.formState.errors.invite&&v.jsx("p",{className:"field-err",children:r.formState.errors.invite.message})]}),v.jsxs("div",{className:"ob-card",children:[v.jsx("h3",{children:"Or start a new project"}),v.jsx("p",{children:"Create a shared space for your team's files."}),v.jsxs("form",{className:"ob-row",onSubmit:i.handleSubmit(({name:s})=>n(s)),children:[v.jsx("input",{id:"ob-name",type:"text",placeholder:"Project name, e.g. wiki",autoComplete:"off",...i.register("name")}),v.jsx(Yt,{id:"ob-create",variant:"primary",type:"submit",children:"Create"})]}),i.formState.errors.name&&v.jsx("p",{className:"field-err",children:i.formState.errors.name.message})]})]})}function z6(e,n=!0){const r=Mn({queryKey:["tree",e],queryFn:()=>Vn(e+"tree"),enabled:n,refetchInterval:15e3}),i=x.useMemo(()=>{const s=[],u=new Map,c=d=>{for(const h of d.children||[])h.dir?(u.set(h.path,h),c(h)):s.push(h)};return r.data&&c(r.data),{flatFiles:s,dirIndex:u}},[r.data]);return{tree:r.data,...i,loaded:!!r.data}}function D6(e,n){return Mn({queryKey:["heat",e],queryFn:()=>Vn(e+"heat?days=30"),enabled:n,staleTime:6e4,refetchInterval:6e4}).data?.entries??null}function N6(e,n,r){return Mn({queryKey:["history",e,"prefix",n,20],queryFn:()=>Vn(e+"history?prefix="+encodeURIComponent(n)+"&n=20"),enabled:r,staleTime:15e3}).data?.entries??null}function _S(e,n,r){if(!e)return null;if(!r)return e[n]||null;const i={human:0,agent:0,share:0};for(const[s,u]of Object.entries(e))s.startsWith(n+"/")&&(i.human+=u.human||0,i.agent+=u.agent||0,i.share+=u.share||0);return i.human||i.agent||i.share?i:null}function Ws(e){return(e.human||0)+(e.agent||0)+(e.share||0)}function Zu(e){const n=Ws(e);if(!n)return"";let r=n+(n===1?" read":" reads");return e.agent&&(r+=" ("+e.agent+" agent)"),r}function k6(e){const n=Ws(e);return n?n<3?1:n<10?2:n<30?3:4:0}function L6(e,n,r){const i=new Array(e);return new Proxy(i,{get(s,u,c){if(typeof u=="string"){const d=u.charCodeAt(0);if(d>=48&&d<=57){const h=+u;if(Number.isInteger(h)&&h>=0&&hi[y]!==m))&&(i=d,s=n(...d),r?.onChange&&!(u&&r.skipInitialOnChange)&&r.onChange(s),u=!1),s}return c.updateDeps=d=>{i=d},c}function CS(e,n){if(e===void 0)throw new Error("Unexpected undefined");return e}const I6=(e,n)=>Math.abs(e-n)<1.01,$6=(e,n,r)=>{let i;return function(...s){e.clearTimeout(i),i=e.setTimeout(()=>n.apply(this,s),r)}};let zs;const Fh=()=>{if(zs!==void 0)return zs;if(typeof navigator>"u")return zs=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return zs=!0;const e=navigator.maxTouchPoints;return zs=navigator.platform==="MacIntel"&&e!==void 0&&e>0},ES=e=>{const{offsetWidth:n,offsetHeight:r}=e;return{width:n,height:r}},V6=e=>e,F6=e=>{const n=Math.max(e.startIndex-e.overscan,0),i=Math.min(e.endIndex+e.overscan,e.count-1)-n+1,s=new Array(i);for(let u=0;u{const r=e.scrollElement;if(!r)return;const i=e.targetWindow;if(!i)return;const s=c=>{const{width:d,height:h}=c;n({width:Math.round(d),height:Math.round(h)})};if(s(ES(r)),!i.ResizeObserver)return()=>{};const u=new i.ResizeObserver(c=>{const d=()=>{const h=c[0];if(h?.borderBoxSize){const m=h.borderBoxSize[0];if(m){s({width:m.inlineSize,height:m.blockSize});return}}s(ES(r))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(d):d()});return u.observe(r,{box:"border-box"}),()=>{u.unobserve(r)}},pc={passive:!0},H6=typeof window>"u"?!0:"onscrollend"in window,P6=(e,n,r)=>{const i=e.scrollElement;if(!i)return;const s=e.targetWindow;if(!s)return;const u=e.options.useScrollendEvent&&H6;let c=0;const d=u?null:$6(s,()=>n(c,!1),e.options.isScrollingResetDelay),h=g=>()=>{c=r(i),d?.(),n(c,g)},m=h(!0),y=h(!1);return i.addEventListener("scroll",m,pc),u&&i.addEventListener("scrollend",y,pc),()=>{i.removeEventListener("scroll",m),u&&i.removeEventListener("scrollend",y)}},B6=(e,n)=>P6(e,n,r=>{const{horizontal:i,isRtl:s}=e.options;return i?r.scrollLeft*(s&&-1||1):r.scrollTop}),q6=(e,n,r)=>{if(r.options.useCachedMeasurements){const i=r.indexFromElement(e),s=r.options.getItemKey(i);return r.itemSizeCache.get(s)??r.options.estimateSize(i)}if(n?.borderBoxSize){const i=n.borderBoxSize[0];if(i)return Math.round(i[r.options.horizontal?"inlineSize":"blockSize"])}if(!n){const i=r.indexFromElement(e),s=r.options.getItemKey(i),u=r.itemSizeCache.get(s);if(u!==void 0)return u}return e[r.options.horizontal?"offsetWidth":"offsetHeight"]},G6=(e,{adjustments:n=0,behavior:r},i)=>{var s,u;(u=(s=i.scrollElement)==null?void 0:s.scrollTo)==null||u.call(s,{[i.options.horizontal?"left":"top"]:e+n,behavior:r})},Z6=G6;class K6{constructor(n){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var r,i,s;return((s=(i=(r=this.targetWindow)==null?void 0:r.performance)==null?void 0:i.now)==null?void 0:s.call(i))??Date.now()},this.observer=(()=>{let r=null;const i=()=>r||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:r=new this.targetWindow.ResizeObserver(s=>{s.forEach(u=>{const c=()=>{const d=u.target,h=this.indexFromElement(d);if(!d.isConnected){this.observer.unobserve(d);for(const[m,y]of this.elementsCache)if(y===d){this.elementsCache.delete(m);break}return}this.shouldMeasureDuringScroll(h)&&this.resizeItem(h,this.options.measureElement(d,u,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(c):c()})}));return{disconnect:()=>{var s;(s=i())==null||s.disconnect(),r=null},observe:s=>{var u;return(u=i())==null?void 0:u.observe(s,{box:"border-box"})},unobserve:s=>{var u;return(u=i())==null?void 0:u.unobserve(s)}}})(),this.range=null,this.setOptions=r=>{var i,s;const u={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:V6,rangeExtractor:F6,onChange:()=>{},measureElement:q6,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,anchorTo:"start",followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",useCachedMeasurements:!1};for(const b in r){const S=r[b];S!==void 0&&(u[b]=S)}const c=this.options;let d=null,h=null,m=!1;if(c!==void 0&&c.enabled&&u.enabled&&u.anchorTo==="end"&&this.scrollElement!==null){const b=c.count,S=u.count,_=this.getMeasurements(),C=b>0?((i=_[0])==null?void 0:i.key)??c.getItemKey(0):null,E=b>0?((s=_[b-1])==null?void 0:s.key)??c.getItemKey(b-1):null;if(S!==b||b>0&&S>0&&(u.getItemKey(0)!==C||u.getItemKey(S-1)!==E)){m=!0;const A=b>0?this.getVirtualItemForOffset(this.getScrollOffset())??_[0]:null;A&&(d=[A.key,this.getScrollOffset()-A.start]);const k=u.followOnAppend===!0?"auto":u.followOnAppend||null;k&&S>b&&this.isAtEnd(c.scrollEndThreshold)&&(b===0||u.getItemKey(S-1)!==E)&&(h=k)}}this.options=u,m&&(this.pendingMin=0,this.itemSizeCacheVersion++);let y=!1,g=0;if(d&&this.scrollOffset!==null){const[b,S]=d,_=this.getMeasurements(),{count:C,getItemKey:E}=this.options;let T=0;for(;T{var i,s;(s=(i=this.options).onChange)==null||s.call(i,this,r)},this.maybeNotify=ba(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),r=>{this.notify(r)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(r=>r()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var r;const i=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==i){if(this.cleanup(),!i){this.maybeNotify();return}if(this.scrollElement=i,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((r=this.scrollElement)==null?void 0:r.window)??null,this.elementsCache.forEach(u=>{this.observer.observe(u)}),this.unsubs.push(this.options.observeElementRect(this,u=>{this.scrollRect=u,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(u,c)=>{if(c&&this._intendedScrollOffset===null&&u===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(u-this._intendedScrollOffset)<1.5&&(u=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;const d=this.getScrollOffset();this.scrollDirection=c?d===u?this.scrollDirection:d{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},d=()=>{this._iosTouching=!1,!(!Fh()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};u.addEventListener("touchstart",c,pc),u.addEventListener("touchend",d,pc),this.unsubs.push(()=>{u.removeEventListener("touchstart",c),u.removeEventListener("touchend",d),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}const s=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,s&&this.scrollElement&&this.options.enabled){const[u,c,d,h]=s;u!==null&&!d&&(Fh()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?h!==0&&(this._iosDeferredAdjustment+=h):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),d&&this.scrollToEnd({behavior:d})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;const r=this.getScrollOffset(),i=this.getMaxScrollOffset();if(r<0||r>i)return;const s=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(r,{adjustments:this.scrollAdjustments+=s,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getMeasurementOptions=ba(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode,this.options.gap],(r,i,s,u,c,d,h,m)=>(this.prevLanes!==void 0&&this.prevLanes!==d&&(this.lanesChangedFlag=!0),this.prevLanes=d,this.pendingMin=null,{count:r,paddingStart:i,scrollMargin:s,getItemKey:u,enabled:c,lanes:d,laneAssignmentMode:h,gap:m}),{key:!1}),this.getMeasurements=ba(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:r,paddingStart:i,scrollMargin:s,getItemKey:u,enabled:c,lanes:d,laneAssignmentMode:h,gap:m},y)=>{const g=this.itemSizeCache;if(!c)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>r)for(const T of this.laneAssignments.keys())T>=r&&this.laneAssignments.delete(T);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(T=>{this.itemSizeCache.set(T.key,T.size)}));const b=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===r&&(this.lanesSettling=!1),d===1){const T=r*2;let O=this._flatMeasurements;if(!O||O.length0&&L.set(O.subarray(0,b*2)),O=L,this._flatMeasurements=O}let A;if(b===0)A=i+s;else{const L=b-1;A=O[L*2]+O[L*2+1]+m}for(let L=b;L1){k=A;const ge=_[k],de=ge!==void 0?S[ge]:void 0;L=de?de.end+m:i+s}else if(E===d){let ge=0,de=C[0],le=_[0];for(let ae=1;aethis.options.debug}),this.calculateRange=ba(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(r,i,s,u)=>r.length===0||i===0?(this.range=null,null):(this.range=Q6(r,i,s,u,u===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=ba(()=>{let r=null,i=null;const s=this.calculateRange();return s&&(r=s.startIndex,i=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,r,i]),[this.options.rangeExtractor,this.options.overscan,this.options.count,r,i]},(r,i,s,u,c)=>u===null||c===null?[]:r({startIndex:u,endIndex:c,overscan:i,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=r=>{const i=this.options.indexAttribute,s=r.getAttribute(i);return s?parseInt(s,10):(console.warn(`Missing attribute name '${i}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=r=>{var i;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const s=this.scrollState.index??((i=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:i.index);if(s!==void 0&&this.range){const u=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),c=Math.max(0,s-u),d=Math.min(this.options.count-1,s+u);return r>=c&&r<=d}return!0},this.measureElement=r=>{if(!r){this.elementsCache.forEach((c,d)=>{c.isConnected||(this.observer.unobserve(c),this.elementsCache.delete(d))});return}const i=this.indexFromElement(r),s=this.options.getItemKey(i),u=this.elementsCache.get(s);u!==r&&(u&&this.observer.unobserve(u),this.observer.observe(r),this.elementsCache.set(s,r)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(i)&&this.resizeItem(i,this.options.measureElement(r,void 0,this))},this.resizeItem=(r,i)=>{var s,u;if(r<0||r>=this.options.count)return;let c,d,h;const m=this._flatMeasurements;if(this.options.lanes===1&&m!==null)h=this.options.getItemKey(r),d=m[r*2],c=m[r*2+1];else{const b=this.measurementsCache[r];if(!b)return;h=b.key,d=b.start,c=b.size}const y=this.itemSizeCache.get(h)??c,g=i-y;if(g!==0){const b=this.options.anchorTo==="end"&&((s=this.scrollState)==null?void 0:s.behavior)!=="smooth"&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,S=b?this.getTotalSize():0,_=((u=this.scrollState)==null?void 0:u.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[r]??{index:r,key:h,start:d,size:c,end:d+c,lane:0},g,this):d[this.getVirtualIndexes(),this.getMeasurements()],(r,i)=>{const s=[];for(let u=0,c=r.length;uthis.options.debug}),this.getVirtualItemForOffset=r=>{const i=this.getMeasurements();if(i.length===0)return;const s=this._flatMeasurements,u=this.options.lanes===1&&s!=null,c=k_(0,i.length-1,u?d=>s[d*2]:d=>CS(i[d]).start,r);return CS(i[c])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const r=this.scrollElement.document.documentElement;return this.options.horizontal?r.scrollWidth-this.scrollElement.innerWidth:r.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(r=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=r,this.getOffsetForAlignment=(r,i,s=0)=>{if(!this.scrollElement)return 0;const u=this.getSize(),c=this.getScrollOffset();i==="auto"&&(i=r>=c+u?"end":"start"),i==="center"?r+=(s-u)/2:i==="end"&&(r-=u);const d=this.getMaxScrollOffset();return Math.max(Math.min(d,r),0)},this.getOffsetForIndex=(r,i="auto")=>{r=Math.max(0,Math.min(r,this.options.count-1));const s=this.getSize(),u=this.getScrollOffset(),c=this.measurementsCache[r];if(!c)return;if(i==="auto")if(c.end>=u+s-this.options.scrollPaddingEnd)i="end";else if(c.start<=u+this.options.scrollPaddingStart)i="start";else return[u,i];if(i==="end"&&r===this.options.count-1)return[this.getMaxScrollOffset(),i];const d=i==="end"?c.end+this.options.scrollPaddingEnd:c.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(d,i,c.size),i]},this.scrollToOffset=(r,{align:i="start",behavior:s="auto"}={})=>{const u=this.getOffsetForAlignment(r,i),c=this.now();this.scrollState={index:null,align:i,behavior:s,startedAt:c,lastTargetOffset:u,stableFrames:0},this._scrollToOffset(u,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(r,{align:i="auto",behavior:s="auto"}={})=>{r=Math.max(0,Math.min(r,this.options.count-1));const u=this.getOffsetForIndex(r,i);if(!u)return;const[c,d]=u,h=this.now();this.scrollState={index:r,align:d,behavior:s,startedAt:h,lastTargetOffset:c,stableFrames:0},this._scrollToOffset(c,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(r,{behavior:i="auto"}={})=>{const s=this.getScrollOffset()+r,u=this.now();this.scrollState={index:null,align:"start",behavior:i,startedAt:u,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:r="auto"}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:"end",behavior:r});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:r})},this.getTotalSize=()=>{var r;const i=this.getMeasurements();let s;if(i.length===0)s=this.options.paddingStart;else if(this.options.lanes===1){const u=i.length-1,c=this._flatMeasurements;c!=null?s=c[u*2]+c[u*2+1]:s=((r=i[u])==null?void 0:r.end)??0}else{const u=Array(this.options.lanes).fill(null);let c=i.length-1;for(;c>=0&&u.some(d=>d===null);){const d=i[c];u[d.lane]===null&&(u[d.lane]=d.end),c--}s=Math.max(...u.filter(d=>d!==null))}return Math.max(s-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{const r=[];if(this.itemSizeCache.size===0)return r;const i=this.getMeasurements();for(const s of i)s&&this.itemSizeCache.has(s.key)&&r.push({index:s.index,key:s.key,start:s.start,size:s.size,end:s.end,lane:s.lane});return r},this._scrollToOffset=(r,{adjustments:i,behavior:s})=>{this._intendedScrollOffset=r+(i??0),this.options.scrollToFn(r,{behavior:s,adjustments:i},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(n)}applyScrollAdjustment(n,r){n!==0&&(Fh()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=n:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=n,behavior:r}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const i=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,s=i?i[0]:this.scrollState.lastTargetOffset,u=1,c=s!==this.scrollState.lastTargetOffset;if(!c&&I6(s,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=u){this.getScrollOffset()!==s&&this._scrollToOffset(s,{adjustments:void 0,behavior:"auto"}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,c){const d=this.getSize()||600,h=Math.abs(s-this.getScrollOffset()),m=this.scrollState.behavior==="smooth"&&h>d;this.scrollState.lastTargetOffset=s,m||(this.scrollState.behavior="auto"),this._scrollToOffset(s,{adjustments:void 0,behavior:m?"smooth":"auto"})}this.scheduleScrollReconcile()}}const k_=(e,n,r,i)=>{for(;e<=n;){const s=(e+n)/2|0,u=r(s);if(ui)n=s-1;else return s}return e>0?e-1:0};function Y6(e,n,r){let i=0;for(;i<=n;){const s=(i+n)/2|0,u=e[s*2];if(ur)n=s-1;else return s}return i>0?i-1:0}function Q6(e,n,r,i,s){const u=e.length-1;if(e.length<=i)return{startIndex:0,endIndex:u};if(i===1&&s!==null){const m=Y6(s,u,r);let y=m;const g=r+n;for(;ye[m].start,r),h=d;if(i===1)for(;h1){const m=Array(i).fill(0);for(;hg=0&&y.some(g=>g>=r);){const g=e[d];y[g.lane]=g.start,d--}d=Math.max(0,d-d%i),h=Math.min(u,h+(i-1-h%i))}return{startIndex:d,endIndex:h}}const Uh=typeof document<"u"?x.useLayoutEffect:x.useEffect;function X6({useFlushSync:e=!0,directDomUpdates:n=!1,directDomUpdatesMode:r="transform",...i}){const s=x.useReducer(m=>m+1,0)[1],u=x.useRef({enabled:n,mode:r,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});u.current.enabled=n,u.current.mode=r;const c=m=>{const y=u.current;if(!y.enabled||!y.container)return;const g=m.getTotalSize();if(g!==y.lastSize){y.lastSize=g;const T=m.options.horizontal?"width":"height";y.container.style[T]=`${g}px`}const b=!!m.options.horizontal,S=y.mode==="transform",_=b?"left":"top",C=m.options.scrollMargin,E=m.getVirtualItems();for(const T of E){const O=T.start-C,A=m.elementsCache.get(T.key);A&&y.lastPositions.get(A)!==O&&(y.lastPositions.set(A,O),S?A.style.transform=b?`translate3d(${O}px, 0, 0)`:`translate3d(0, ${O}px, 0)`:A.style[_]=`${O}px`)}},d={...i,onChange:(m,y)=>{var g;const b=u.current;let S=!0;if(b.enabled){c(m);const _=m.range,C=b.prevRange;S=!C||C.isScrolling!==m.isScrolling||C.startIndex!==_?.startIndex||C.endIndex!==_?.endIndex,S&&(b.prevRange=_?{startIndex:_.startIndex,endIndex:_.endIndex,isScrolling:m.isScrolling}:null)}S&&(e&&y?Si.flushSync(s):s()),(g=i.onChange)==null||g.call(i,m,y)}},[h]=x.useState(()=>{const m=new K6(d);return Object.assign(m,{containerRef:y=>{const g=u.current;if(g.container=y,g.lastSize=null,y&&g.enabled){const b=m.getTotalSize();g.lastSize=b;const S=m.options.horizontal?"width":"height";y.style[S]=`${b}px`}}})});return h.setOptions(d),Uh(()=>h._didMount(),[]),Uh(()=>h._willUpdate()),Uh(()=>{c(h)}),h}function J6(e){return X6({observeElementRect:U6,observeElementOffset:B6,scrollToFn:Z6,...e})}function W6(e,n){const r=[],i=(s,u)=>{for(const c of s)r.push({node:c,depth:u}),c.dir&&n.has(c.path)&&i(c.children||[],u+1)};return i(e?.children||[],0),r}function eI(e){const{root:n,expanded:r,onToggle:i,currentPath:s,listingShowing:u,onOpen:c}=e,d=x.useRef(null),h=x.useMemo(()=>W6(n,r),[n,r]),m=J6({count:h.length,getScrollElement:()=>d.current,estimateSize:()=>window.matchMedia("(max-width: 768px)").matches?44:28,overscan:12,getItemKey:y=>h[y].node.path});return x.useEffect(()=>{if(!s)return;const y=h.findIndex(g=>g.node.path===s);y>=0&&m.scrollToIndex(y,{align:"auto"})},[s,h]),v.jsx("nav",{id:"tree","aria-label":"Files",ref:d,children:v.jsx("div",{style:{height:m.getTotalSize(),position:"relative"},children:m.getVirtualItems().map(y=>{const{node:g,depth:b}=h[y.index],S=g.dir?r.has(g.path):!1,_=()=>{if(g.dir&&s===g.path&&u){i(g.path);return}c(g.path),g.dir||cr()};return v.jsxs("div",{className:"row"+(s===g.path?" active":"")+(g.dir&&!S?" collapsed":""),"data-path":g.path,tabIndex:0,role:"button",title:g.name,"aria-expanded":g.dir?S:void 0,style:{position:"absolute",top:0,left:0,right:0,transform:`translateY(${y.start}px)`,paddingLeft:8+b*13},onClick:_,onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),_())},children:[Array.from({length:b},(C,E)=>v.jsx("span",{className:"tguide",style:{left:8+E*13+5},"aria-hidden":"true"},E)),v.jsx("span",{className:"chev",onClick:C=>{g.dir&&(C.stopPropagation(),i(g.path))},children:v.jsx(Kt,{name:"chevd"})}),v.jsx("span",{className:"ticon",children:v.jsx(Kt,{name:g.dir?"folder":"doc"})}),v.jsx("span",{className:"label",children:g.name})]},y.key)})})})}function tI(e){const n=e.split("/"),r=[];let i="";for(let s=0;s{i=i?i+"/"+s:s;const c=i,d=u===r.length-1;return v.jsxs("span",{children:[u>0&&v.jsx("span",{className:"crumb-sep",children:"/"}),d?v.jsx("span",{children:s}):v.jsx("span",{className:"crumb-seg",title:c,onClick:()=>n(c),children:s})]},c)})})}const rI={add:"plus",edit:"edit",delete:"x"},oI={add:"added",edit:"edited",delete:"deleted"};function L_({entry:e,onOpen:n}){const[r,i]=x.useState(!1),s=e.kind==="put"?"edit":e.kind,u=e.user_name?`${e.user_name} <${e.user}>`:e.user||e.author||"unknown",c=[e.device.name||e.device.id,e.device.os,e.device.ip].filter(Boolean).join(" · "),d=s!=="delete",h=m=>{m.target.tagName!=="A"&&d&&n(e.path)};return v.jsxs("div",{className:"hentry "+s+(d?" clickable":""),tabIndex:d?0:void 0,role:d?"button":void 0,onClick:h,onKeyDown:m=>{d&&(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),n(e.path))},children:[v.jsxs("div",{className:"hline",children:[v.jsx("span",{className:"hkind",children:v.jsx(Kt,{name:rI[s]||"dot"})}),v.jsx("span",{className:"hpath",children:e.path}),v.jsx("span",{className:"htag",children:oI[s]||s}),v.jsx("span",{className:"htime",children:new Date(e.time).toLocaleString()})]}),v.jsxs("div",{className:"hmeta",children:[v.jsx("span",{className:"hwho",children:u}),v.jsx("span",{className:"hdev",children:c}),v.jsx("span",{className:"hsize",children:e.size?R_(e.size):""})]}),e.note&&v.jsx("div",{className:"hnote"+(r?" open":""),tabIndex:0,role:"button",title:r?"Collapse note":"Show full note","aria-expanded":r,onClick:m=>{m.stopPropagation(),m.target.tagName!=="A"&&i(!r)},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),m.stopPropagation(),i(!r))},children:e.note.split(/(https?:\/\/\S+)/).map((m,y)=>/^https?:\/\//.test(m)?v.jsx("a",{href:m,target:"_blank",rel:"noopener",children:m},y):m)})]})}function iI(e){const{node:n,heatMap:r,onOpen:i}=e,s=(n.children||[]).slice().sort((m,y)=>Number(y.dir||!1)-Number(m.dir||!1)||m.name.localeCompare(y.name)),u=s.filter(m=>m.dir).length,c=s.length-u,d=[];u&&d.push(u+(u===1?" folder":" folders")),c&&d.push(c+(c===1?" file":" files"));const h=_S(r,n.path,!0);return h&&d.push(Zu(h)+" in 30 days"),v.jsxs("div",{className:"dirlist",children:[v.jsxs("h1",{className:"dl-title",children:[v.jsx("span",{className:"dl-title-icon",children:v.jsx(Kt,{name:"folder"})}),v.jsx("span",{children:n.name})]}),v.jsx("p",{className:"dl-sub",children:d.join(" · ")||"Empty folder"}),s.length===0?v.jsx("div",{className:"dl-empty",children:"Nothing in this folder yet."}):v.jsx("div",{className:"dl-items",children:s.map(m=>{let y="";if(m.dir){const b=(m.children||[]).length;y=b+(b===1?" item":" items")}else y=[m.size?R_(m.size):"",m.time?new Date(m.time).toLocaleDateString():""].filter(Boolean).join(" · ");const g=_S(r,m.path,!!m.dir);return g&&(y=Zu(g)+(y?" · "+y:"")),v.jsxs("div",{className:"dl-row",tabIndex:0,role:"button",title:m.path,onClick:()=>i(m.path),onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),i(m.path))},children:[v.jsx("span",{className:"ticon",children:v.jsx(Kt,{name:m.dir?"folder":"doc"})}),v.jsx("span",{className:"dl-name",children:m.name}),g&&v.jsx("span",{className:"heatdot lvl"+k6(g),title:Zu(g)+" in 30 days"}),v.jsx("span",{className:"dl-meta",children:y})]},m.path)})}),e.hub&&v.jsx(aI,{apiBase:e.apiBase,prefix:n.path+"/",onOpen:i,onFullHistory:()=>e.onFullHistory(n.path+"/"),onRendered:e.onRendered})]})}function aI(e){const n=N6(e.apiBase,e.prefix,!0),{onRendered:r}=e;return x.useEffect(()=>{n&&n.length&&r&&r()},[n,r]),!n||n.length===0?null:v.jsxs("div",{className:"dl-history",children:[v.jsx("h3",{className:"dl-h3",children:"Recent changes"}),v.jsx("div",{className:"history dl-hlist",children:n.map((i,s)=>v.jsx(L_,{entry:i,onOpen:e.onOpen},s))}),v.jsx("button",{className:"ai-btn dl-more",onClick:e.onFullHistory,children:"Full history"})]})}function sI(e){const{apiBase:n,path:r,onMeta:i}=e,s=n+"file?path="+encodeURIComponent(r);return x.useEffect(()=>()=>i(""),[r,i]),o6.test(r)?v.jsx(lI,{...e}):a6.test(r)?v.jsx("iframe",{className:"htmlview",sandbox:"allow-scripts",src:s,title:r,onLoad:e.onRendered}):i6.test(r)?v.jsx(dI,{src:s,alt:r,onRendered:e.onRendered}):s6.test(r)?v.jsx(fI,{...e,fileURL:s}):v.jsxs("div",{className:"filecard",children:[v.jsx("div",{className:"name",children:r.split("/").pop()}),v.jsx("p",{children:"No preview for this file type."}),v.jsx("a",{className:"btn",download:!0,href:n+"download?path="+encodeURIComponent(r),children:"Download"})]})}function lI(e){const{apiBase:n,path:r,heatMap:i,flatFiles:s,onOpenFile:u,onMeta:c,onRendered:d}=e,{data:h,error:m}=Mn({queryKey:["render",n,r],queryFn:()=>Vn(n+"render?path="+encodeURIComponent(r))}),y=x.useMemo(()=>h?cI(h.html,r,n):"",[h,r,n]);return x.useEffect(()=>{if(!h)return;const g=[];h.author&&g.push(h.author+(h.device?" on "+h.device:"")),h.time&&g.push(new Date(h.time).toLocaleString());const b=i&&i[h.path];b&&Ws(b)&&g.push(Zu(b)+" / 30d"),c(g.join(" · ")),d?.()},[h,i,c,d]),m?v.jsxs("div",{className:"empty",children:["Could not load file: ",m.message]}):h?v.jsx("div",{dangerouslySetInnerHTML:{__html:y},onClick:g=>uI(g,r,s,u)}):null}function uI(e,n,r,i){const s=e.target.closest("a");if(!s||!e.currentTarget.contains(s))return;const u=s.getAttribute("href")||"",c=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"";u.startsWith("wiki:")?(e.preventDefault(),hI(decodeURIComponent(u.slice(5)),r,i)):/^([a-z]+:|\/|#)/i.test(u)||(e.preventDefault(),i(T_(c,decodeURIComponent(u))))}function cI(e,n,r){const i=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"",s=c=>r+"file?path="+encodeURIComponent(c),u=new DOMParser().parseFromString(e,"text/html");for(const c of u.querySelectorAll("img")){const d=c.getAttribute("src")||"";/^([a-z]+:|\/)/i.test(d)||c.setAttribute("src",s(T_(i,d)))}for(const c of u.querySelectorAll("a")){const d=c.getAttribute("href")||"";/^https?:/i.test(d)&&(c.setAttribute("target","_blank"),c.setAttribute("rel","noopener"))}return u.body.innerHTML}function dI({src:e,alt:n,onRendered:r}){return v.jsx("img",{src:e,alt:n,onLoad:r})}function fI(e){const{path:n,fileURL:r,onRendered:i}=e,{data:s,error:u}=Mn({queryKey:["text",r],queryFn:async()=>{const c=await fetch(r);if(!c.ok)throw new Error(await c.text());return c.text()}});return x.useEffect(()=>{s!=null&&i?.()},[s,i]),u?v.jsxs("div",{className:"empty",children:["Could not load file: ",u.message]}):s==null?null:v.jsx("pre",{className:"plain",children:s},n)}function hI(e,n,r){const i=e.toLowerCase(),s=n.find(u=>u.path.toLowerCase()===i||u.path.toLowerCase()===i+".md")||n.find(u=>{const c=u.name.toLowerCase();return c===i||c===i+".md"});s&&r(s.path)}function mI({url:e,copied:n,onClose:r}){const i=e.split("/s/")[1];return v.jsx(yp,{open:!0,onOpenChange:s=>!s&&r(),children:v.jsxs(bp,{className:"modal",showCloseButton:!1,children:[v.jsx(Lc,{asChild:!0,children:v.jsx("h3",{children:"Public link created"})}),v.jsxs("p",{children:[v.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until you revoke it."]}),v.jsx("div",{className:"modal-url",children:e}),v.jsxs("div",{className:"modal-actions",children:[v.jsx(Yt,{variant:"primary",onClick:()=>Js(e).then(s=>Je(s?"Copied.":"Select and copy the link above.")),children:n?"Copied ✓":"Copy link"}),v.jsx(Yt,{variant:"subtle",onClick:()=>window.open(e,"_blank"),children:"Open"}),v.jsx(Yt,{variant:"subtle",className:"ai-del",onClick:async()=>{try{await Ao("DELETE","/api/shares/"+i),Je("Link revoked — it no longer works."),r()}catch(s){Je(s.message,!0)}},children:"Revoke"}),v.jsx(Yt,{variant:"subtle",onClick:r,children:"Done"})]})]})})}var RS=1,pI=.9,gI=.8,vI=.17,Hh=.1,Ph=.999,yI=.9999,bI=.99,SI=/[\\\/_+.#"@\[\(\{&]/,xI=/[\\\/_+.#"@\[\(\{&]/g,wI=/[\s-]/,I_=/[\s-]/g;function Om(e,n,r,i,s,u,c){if(u===n.length)return s===e.length?RS:bI;var d=`${s},${u}`;if(c[d]!==void 0)return c[d];for(var h=i.charAt(u),m=r.indexOf(h,s),y=0,g,b,S,_;m>=0;)g=Om(e,n,r,i,m+1,u+1,c),g>y&&(m===s?g*=RS:SI.test(e.charAt(m-1))?(g*=gI,S=e.slice(s,m-1).match(xI),S&&s>0&&(g*=Math.pow(Ph,S.length))):wI.test(e.charAt(m-1))?(g*=pI,_=e.slice(s,m-1).match(I_),_&&s>0&&(g*=Math.pow(Ph,_.length))):(g*=vI,s>0&&(g*=Math.pow(Ph,m-s))),e.charAt(m)!==n.charAt(u)&&(g*=yI)),(gg&&(g=b*Hh)),g>y&&(y=g),m=r.indexOf(h,m+1);return c[d]=y,y}function TS(e){return e.toLowerCase().replace(I_," ")}function _I(e,n,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,Om(e,n,TS(e),TS(n),0,0,{})}var Ds='[cmdk-group=""]',Bh='[cmdk-group-items=""]',CI='[cmdk-group-heading=""]',$_='[cmdk-item=""]',OS=`${$_}:not([aria-disabled="true"])`,Am="cmdk-item-select",Sa="data-value",EI=(e,n,r)=>_I(e,n,r),V_=x.createContext(void 0),dl=()=>x.useContext(V_),F_=x.createContext(void 0),$p=()=>x.useContext(F_),U_=x.createContext(void 0),H_=x.forwardRef((e,n)=>{let r=xa(()=>{var j,H;return{search:"",value:(H=(j=e.value)!=null?j:e.defaultValue)!=null?H:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),i=xa(()=>new Set),s=xa(()=>new Map),u=xa(()=>new Map),c=xa(()=>new Set),d=P_(e),{label:h,children:m,value:y,onValueChange:g,filter:b,shouldFilter:S,loop:_,disablePointerSelection:C=!1,vimBindings:E=!0,...T}=e,O=fn(),A=fn(),k=fn(),L=x.useRef(null),U=LI();bi(()=>{if(y!==void 0){let j=y.trim();r.current.value=j,B.emit()}},[y]),bi(()=>{U(6,ae)},[]);let B=x.useMemo(()=>({subscribe:j=>(c.current.add(j),()=>c.current.delete(j)),snapshot:()=>r.current,setState:(j,H,Q)=>{var Z,re,ee,pe;if(!Object.is(r.current[j],H)){if(r.current[j]=H,j==="search")le(),ge(),U(1,de);else if(j==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let be=document.getElementById(k);be?be.focus():(Z=document.getElementById(O))==null||Z.focus()}if(U(7,()=>{var be;r.current.selectedItemId=(be=he())==null?void 0:be.id,B.emit()}),Q||U(5,ae),((re=d.current)==null?void 0:re.value)!==void 0){let be=H??"";(pe=(ee=d.current).onValueChange)==null||pe.call(ee,be);return}}B.emit()}},emit:()=>{c.current.forEach(j=>j())}}),[]),P=x.useMemo(()=>({value:(j,H,Q)=>{var Z;H!==((Z=u.current.get(j))==null?void 0:Z.value)&&(u.current.set(j,{value:H,keywords:Q}),r.current.filtered.items.set(j,ve(H,Q)),U(2,()=>{ge(),B.emit()}))},item:(j,H)=>(i.current.add(j),H&&(s.current.has(H)?s.current.get(H).add(j):s.current.set(H,new Set([j]))),U(3,()=>{le(),ge(),r.current.value||de(),B.emit()}),()=>{u.current.delete(j),i.current.delete(j),r.current.filtered.items.delete(j);let Q=he();U(4,()=>{le(),Q?.getAttribute("id")===j&&de(),B.emit()})}),group:j=>(s.current.has(j)||s.current.set(j,new Set),()=>{u.current.delete(j),s.current.delete(j)}),filter:()=>d.current.shouldFilter,label:h||e["aria-label"],getDisablePointerSelection:()=>d.current.disablePointerSelection,listId:O,inputId:k,labelId:A,listInnerRef:L}),[]);function ve(j,H){var Q,Z;let re=(Z=(Q=d.current)==null?void 0:Q.filter)!=null?Z:EI;return j?re(j,r.current.search,H):0}function ge(){if(!r.current.search||d.current.shouldFilter===!1)return;let j=r.current.filtered.items,H=[];r.current.filtered.groups.forEach(Z=>{let re=s.current.get(Z),ee=0;re.forEach(pe=>{let be=j.get(pe);ee=Math.max(be,ee)}),H.push([Z,ee])});let Q=L.current;ye().sort((Z,re)=>{var ee,pe;let be=Z.getAttribute("id"),ze=re.getAttribute("id");return((ee=j.get(ze))!=null?ee:0)-((pe=j.get(be))!=null?pe:0)}).forEach(Z=>{let re=Z.closest(Bh);re?re.appendChild(Z.parentElement===re?Z:Z.closest(`${Bh} > *`)):Q.appendChild(Z.parentElement===Q?Z:Z.closest(`${Bh} > *`))}),H.sort((Z,re)=>re[1]-Z[1]).forEach(Z=>{var re;let ee=(re=L.current)==null?void 0:re.querySelector(`${Ds}[${Sa}="${encodeURIComponent(Z[0])}"]`);ee?.parentElement.appendChild(ee)})}function de(){let j=ye().find(Q=>Q.getAttribute("aria-disabled")!=="true"),H=j?.getAttribute(Sa);B.setState("value",H||void 0)}function le(){var j,H,Q,Z;if(!r.current.search||d.current.shouldFilter===!1){r.current.filtered.count=i.current.size;return}r.current.filtered.groups=new Set;let re=0;for(let ee of i.current){let pe=(H=(j=u.current.get(ee))==null?void 0:j.value)!=null?H:"",be=(Z=(Q=u.current.get(ee))==null?void 0:Q.keywords)!=null?Z:[],ze=ve(pe,be);r.current.filtered.items.set(ee,ze),ze>0&&re++}for(let[ee,pe]of s.current)for(let be of pe)if(r.current.filtered.items.get(be)>0){r.current.filtered.groups.add(ee);break}r.current.filtered.count=re}function ae(){var j,H,Q;let Z=he();Z&&(((j=Z.parentElement)==null?void 0:j.firstChild)===Z&&((Q=(H=Z.closest(Ds))==null?void 0:H.querySelector(CI))==null||Q.scrollIntoView({block:"nearest"})),Z.scrollIntoView({block:"nearest"}))}function he(){var j;return(j=L.current)==null?void 0:j.querySelector(`${$_}[aria-selected="true"]`)}function ye(){var j;return Array.from(((j=L.current)==null?void 0:j.querySelectorAll(OS))||[])}function N(j){let H=ye()[j];H&&B.setState("value",H.getAttribute(Sa))}function Y(j){var H;let Q=he(),Z=ye(),re=Z.findIndex(pe=>pe===Q),ee=Z[re+j];(H=d.current)!=null&&H.loop&&(ee=re+j<0?Z[Z.length-1]:re+j===Z.length?Z[0]:Z[re+j]),ee&&B.setState("value",ee.getAttribute(Sa))}function ne(j){let H=he(),Q=H?.closest(Ds),Z;for(;Q&&!Z;)Q=j>0?NI(Q,Ds):kI(Q,Ds),Z=Q?.querySelector(OS);Z?B.setState("value",Z.getAttribute(Sa)):Y(j)}let J=()=>N(ye().length-1),W=j=>{j.preventDefault(),j.metaKey?J():j.altKey?ne(1):Y(1)},z=j=>{j.preventDefault(),j.metaKey?N(0):j.altKey?ne(-1):Y(-1)};return x.createElement(Fe.div,{ref:n,tabIndex:-1,...T,"cmdk-root":"",onKeyDown:j=>{var H;(H=T.onKeyDown)==null||H.call(T,j);let Q=j.nativeEvent.isComposing||j.keyCode===229;if(!(j.defaultPrevented||Q))switch(j.key){case"n":case"j":{E&&j.ctrlKey&&W(j);break}case"ArrowDown":{W(j);break}case"p":case"k":{E&&j.ctrlKey&&z(j);break}case"ArrowUp":{z(j);break}case"Home":{j.preventDefault(),N(0);break}case"End":{j.preventDefault(),J();break}case"Enter":{j.preventDefault();let Z=he();if(Z){let re=new Event(Am);Z.dispatchEvent(re)}}}}},x.createElement("label",{"cmdk-label":"",htmlFor:P.inputId,id:P.labelId,style:$I},h),Qc(e,j=>x.createElement(F_.Provider,{value:B},x.createElement(V_.Provider,{value:P},j))))}),RI=x.forwardRef((e,n)=>{var r,i;let s=fn(),u=x.useRef(null),c=x.useContext(U_),d=dl(),h=P_(e),m=(i=(r=h.current)==null?void 0:r.forceMount)!=null?i:c?.forceMount;bi(()=>{if(!m)return d.item(s,c?.id)},[m]);let y=B_(s,u,[e.value,e.children,u],e.keywords),g=$p(),b=Io(U=>U.value&&U.value===y.current),S=Io(U=>m||d.filter()===!1?!0:U.search?U.filtered.items.get(s)>0:!0);x.useEffect(()=>{let U=u.current;if(!(!U||e.disabled))return U.addEventListener(Am,_),()=>U.removeEventListener(Am,_)},[S,e.onSelect,e.disabled]);function _(){var U,B;C(),(B=(U=h.current).onSelect)==null||B.call(U,y.current)}function C(){g.setState("value",y.current,!0)}if(!S)return null;let{disabled:E,value:T,onSelect:O,forceMount:A,keywords:k,...L}=e;return x.createElement(Fe.div,{ref:Aa(u,n),...L,id:s,"cmdk-item":"",role:"option","aria-disabled":!!E,"aria-selected":!!b,"data-disabled":!!E,"data-selected":!!b,onPointerMove:E||d.getDisablePointerSelection()?void 0:C,onClick:E?void 0:_},e.children)}),TI=x.forwardRef((e,n)=>{let{heading:r,children:i,forceMount:s,...u}=e,c=fn(),d=x.useRef(null),h=x.useRef(null),m=fn(),y=dl(),g=Io(S=>s||y.filter()===!1?!0:S.search?S.filtered.groups.has(c):!0);bi(()=>y.group(c),[]),B_(c,d,[e.value,e.heading,h]);let b=x.useMemo(()=>({id:c,forceMount:s}),[s]);return x.createElement(Fe.div,{ref:Aa(d,n),...u,"cmdk-group":"",role:"presentation",hidden:g?void 0:!0},r&&x.createElement("div",{ref:h,"cmdk-group-heading":"","aria-hidden":!0,id:m},r),Qc(e,S=>x.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?m:void 0},x.createElement(U_.Provider,{value:b},S))))}),OI=x.forwardRef((e,n)=>{let{alwaysRender:r,...i}=e,s=x.useRef(null),u=Io(c=>!c.search);return!r&&!u?null:x.createElement(Fe.div,{ref:Aa(s,n),...i,"cmdk-separator":"",role:"separator"})}),AI=x.forwardRef((e,n)=>{let{onValueChange:r,...i}=e,s=e.value!=null,u=$p(),c=Io(m=>m.search),d=Io(m=>m.selectedItemId),h=dl();return x.useEffect(()=>{e.value!=null&&u.setState("search",e.value)},[e.value]),x.createElement(Fe.input,{ref:n,...i,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":h.listId,"aria-labelledby":h.labelId,"aria-activedescendant":d,id:h.inputId,type:"text",value:s?e.value:c,onChange:m=>{s||u.setState("search",m.target.value),r?.(m.target.value)}})}),MI=x.forwardRef((e,n)=>{let{children:r,label:i="Suggestions",...s}=e,u=x.useRef(null),c=x.useRef(null),d=Io(m=>m.selectedItemId),h=dl();return x.useEffect(()=>{if(c.current&&u.current){let m=c.current,y=u.current,g,b=new ResizeObserver(()=>{g=requestAnimationFrame(()=>{let S=m.offsetHeight;y.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return b.observe(m),()=>{cancelAnimationFrame(g),b.unobserve(m)}}},[]),x.createElement(Fe.div,{ref:Aa(u,n),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":d,"aria-label":i,id:h.listId},Qc(e,m=>x.createElement("div",{ref:Aa(c,h.listInnerRef),"cmdk-list-sizer":""},m)))}),jI=x.forwardRef((e,n)=>{let{open:r,onOpenChange:i,overlayClassName:s,contentClassName:u,container:c,...d}=e;return x.createElement(Fm,{open:r,onOpenChange:i},x.createElement(Hm,{container:c},x.createElement(Pm,{"cmdk-overlay":"",className:s}),x.createElement(Bm,{"aria-label":e.label,"cmdk-dialog":"",className:u},x.createElement(H_,{ref:n,...d}))))}),zI=x.forwardRef((e,n)=>Io(r=>r.filtered.count===0)?x.createElement(Fe.div,{ref:n,...e,"cmdk-empty":"",role:"presentation"}):null),DI=x.forwardRef((e,n)=>{let{progress:r,children:i,label:s="Loading...",...u}=e;return x.createElement(Fe.div,{ref:n,...u,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},Qc(e,c=>x.createElement("div",{"aria-hidden":!0},c)))}),Yc=Object.assign(H_,{List:MI,Item:RI,Input:AI,Group:TI,Separator:OI,Dialog:jI,Empty:zI,Loading:DI});function NI(e,n){let r=e.nextElementSibling;for(;r;){if(r.matches(n))return r;r=r.nextElementSibling}}function kI(e,n){let r=e.previousElementSibling;for(;r;){if(r.matches(n))return r;r=r.previousElementSibling}}function P_(e){let n=x.useRef(e);return bi(()=>{n.current=e}),n}var bi=typeof window>"u"?x.useEffect:x.useLayoutEffect;function xa(e){let n=x.useRef();return n.current===void 0&&(n.current=e()),n}function Io(e){let n=$p(),r=()=>e(n.snapshot());return x.useSyncExternalStore(n.subscribe,r,r)}function B_(e,n,r,i=[]){let s=x.useRef(),u=dl();return bi(()=>{var c;let d=(()=>{var m;for(let y of r){if(typeof y=="string")return y.trim();if(typeof y=="object"&&"current"in y)return y.current?(m=y.current.textContent)==null?void 0:m.trim():s.current}})(),h=i.map(m=>m.trim());u.value(e,d,h),(c=n.current)==null||c.setAttribute(Sa,d),s.current=d}),s}var LI=()=>{let[e,n]=x.useState(),r=xa(()=>new Map);return bi(()=>{r.current.forEach(i=>i()),r.current=new Map},[e]),(i,s)=>{r.current.set(i,s),n({})}};function II(e){let n=e.type;return typeof n=="function"?n(e.props):"render"in n?n.render(e.props):e}function Qc({asChild:e,children:n},r){return e&&x.isValidElement(n)?x.cloneElement(II(n),{ref:n.ref},r(n.props.children)):r(n)}var $I={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function VI({className:e,...n}){return v.jsx(Yc,{"data-slot":"command",className:xt("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...n})}function FI({className:e,...n}){return v.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[v.jsx(w1,{className:"size-4 shrink-0 opacity-50"}),v.jsx(Yc.Input,{"data-slot":"command-input",className:xt("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",e),...n})]})}function UI({className:e,...n}){return v.jsx(Yc.List,{"data-slot":"command-list",className:xt("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",e),...n})}function HI({className:e,...n}){return v.jsx(Yc.Item,{"data-slot":"command-item",className:xt("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",e),...n})}function AS(e,n){if(!e)return{score:0,hits:[]};const r=e.toLowerCase(),i=n.toLowerCase();let s=0,u=0,c=0;const d=[];for(let h=0;h3&&i.endsWith("ies")?s=i.slice(0,-3)+"y":i.length>3&&i.endsWith("es")?s=i.slice(0,-2):i.length>2&&i.endsWith("s")&&(s=i.slice(0,-1)),s?AS(s,n):null}function BI({text:e,hits:n}){const r=[];let i=0;return n.forEach((s,u)=>{s>i&&r.push(e.slice(i,s)),r.push(v.jsx("b",{children:e[s]},u)),i=s+1}),r.push(e.slice(i)),v.jsx("span",{className:"plabel",children:r})}function qI({open:e,onClose:n,candidates:r}){const[i,s]=x.useState(""),u=x.useMemo(()=>{if(!e)return[];const d=[];for(const h of r()){const m=PI(i,h.label);m&&d.push({...h,score:m.score,hits:m.hits})}return d.sort((h,m)=>m.score-h.score),d.slice(0,40)},[e,i,r]);x.useEffect(()=>{e&&s("")},[e]);const c=d=>{n(),d.run()};return v.jsx(yp,{open:e,onOpenChange:d=>!d&&n(),children:v.jsxs(bp,{id:"palette",className:"palette",showCloseButton:!1,"aria-describedby":void 0,children:[v.jsx(Lc,{className:"sr-only",children:"Search and quick actions"}),v.jsxs(VI,{shouldFilter:!1,loop:!0,children:[v.jsxs("div",{id:"palette-inputwrap",children:[v.jsx(Kt,{name:"search"}),v.jsx(FI,{id:"palette-input",placeholder:"Search file names, projects, actions…",autoComplete:"off",spellCheck:!1,value:i,onValueChange:s})]}),v.jsx(UI,{id:"palette-results",children:u.length===0?v.jsx("div",{className:"pempty",children:"No matches — search covers file names, projects, and actions"}):u.map(d=>v.jsxs(HI,{value:d.kind+":"+d.label,onSelect:()=>c(d),children:[v.jsx("span",{className:"picon",children:v.jsx(Kt,{name:d.icon})}),v.jsx(BI,{text:d.label,hits:d.hits}),v.jsx("span",{className:"pkind",children:d.kind})]},d.kind+":"+d.label))}),v.jsx("footer",{id:"palette-hint",children:"↑↓ navigate · ⏎ select · esc close"})]})]})})}const Is=3,wa=30;function GI(e,n){return Mn({queryKey:["heatDevices",e],queryFn:()=>Vn(e+"heat?by=device&days=30"),enabled:n,retry:!1,staleTime:6e4}).data?.devices??null}function MS(e){const[n,r]=x.useState("all"),{flatFiles:i,heatMap:s,devices:u,scope:c}=e,d=b=>!c||b===c||b.startsWith(c+"/"),h=c?i.filter(b=>d(b.path)):i,m=u&&c?u.map(b=>{const S={};for(const[_,C]of Object.entries(b.folders||{}))d(_)&&(S[_]=C);return{...b,folders:S}}).filter(b=>Object.keys(b.folders).length>0):u,y=Date.now(),g=h.map(b=>{const S=s&&s[b.path]||{},_=b.time?Math.max(0,(y-new Date(b.time).getTime())/864e5):0,C=n==="all"?Ws(S):S[n]||0;return{path:b.path,reads:C,agent:S.agent||0,total:Ws(S),days:_,danger:C>=Is&&_>=wa}});return v.jsxs("div",{className:"insights",children:[v.jsxs("h1",{className:"in-title",children:["Knowledge insights",c?v.jsxs("span",{className:"in-scope",children:[" · ",c]}):null]}),v.jsx("p",{className:"dl-sub",children:c?`Reads over the last 30 days × freshness, for ${c} and everything in it.`:"Reads over the last 30 days × how long since each file changed. Hot but stale knowledge — read a lot, maintained by nobody — is the danger zone."}),v.jsx("div",{className:"in-lens",children:["all","human","agent"].map(b=>v.jsx("button",{className:"in-lens-btn"+(b===n?" active":""),onClick:()=>r(b),children:b==="all"?"All reads":b==="human"?"Human reads":"Agent reads"},b))}),v.jsx("h3",{className:"dl-h3",children:"Map — cell size = reads, color = freshness"}),v.jsx(KI,{pts:g,onOpenFile:e.onOpenFile,onOpenFolder:e.onOpenFolder,isFolder:e.isFolder}),v.jsx("h3",{className:"dl-h3",children:"Reads × freshness"}),v.jsx(YI,{pts:g,onOpenFile:e.onOpenFile}),v.jsx("h3",{className:"dl-h3",children:"Hot path — top files by reads"}),v.jsx(QI,{pts:g,lens:n,onOpenFile:e.onOpenFile}),m&&m.length>0&&v.jsxs(v.Fragment,{children:[v.jsx("h3",{className:"dl-h3",children:"Agent coverage — which agents read which areas"}),v.jsx(XI,{devices:m})]})]})}function ZI(e){const n=[[76,195,138],[232,196,84],[224,93,93]],r=Math.min(1,Math.max(0,e/300))*(n.length-1),i=Math.min(n.length-2,Math.floor(r)),s=r-i,u=n[i].map((c,d)=>Math.round(c+(n[i+1][d]-c)*s));return`rgb(${u[0]},${u[1]},${u[2]})`}function jS(e,n,r,i,s){const u=e.reduce((m,y)=>m+y.value,0);if(!u||i<=0||s<=0)return[];const c=e.slice().sort((m,y)=>y.value-m.value).map(m=>({it:m,a:m.value/u*i*s})),d=(m,y)=>{const b=m.reduce((_,C)=>_+C.a,0)/y;let S=0;for(const _ of m){const C=_.a/b;S=Math.max(S,C/b,b/C)}return S},h=[];for(;c.length;){const m=i>=s,y=m?s:i,g=[c.shift()];for(;c.length&&d(g.concat(c[0]),y)<=d(g,y);)g.push(c.shift());const b=g.reduce((_,C)=>_+C.a,0)/y;let S=0;for(const _ of g){const C=_.a/b;m?h.push({item:_.it,x:n,y:r+S,w:b,h:C}):h.push({item:_.it,x:n+S,y:r,w:C,h:b}),S+=C}m?(n+=b,i-=b):(r+=b,s-=b)}return h}const qh=15;function KI({pts:e,onOpenFile:n,onOpenFolder:r,isFolder:i}){const c=new Map;for(const h of e){const m=h.path.includes("/")?h.path.split("/")[0]:"/";let y=c.get(m);y||c.set(m,y={name:m,files:[],value:0}),y.files.push(h),y.value+=h.reads+1}const d=[];for(const h of jS([...c.values()],0,0,720,480)){const m=h.item,y=m.name==="/"?"":m.name;if(d.push(v.jsx("rect",{x:h.x+1,y:h.y+1,width:Math.max(0,h.w-2),height:Math.max(0,h.h-2),rx:3,className:"in-tm-group","data-dir":y},"g"+m.name)),h.w>46&&h.h>qh+10){let b=m.name==="/"?"(root)":m.name;const S=Math.floor((h.w-8)/6);b.length>S&&(b=b.slice(0,Math.max(1,S-1))+"…"),d.push(v.jsx("text",{x:h.x+5,y:h.y+12,className:"in-tm-glabel","data-dir":y,children:b},"gl"+m.name))}const g=jS(m.files.map(b=>({...b,name:b.path.split("/").pop(),value:b.reads+1})),h.x+2,h.y+qh,Math.max(0,h.w-4),Math.max(0,h.h-qh-2));for(const b of g)if(d.push(v.jsx("rect",{x:b.x+.6,y:b.y+.6,width:Math.max(.4,b.w-1.2),height:Math.max(.4,b.h-1.2),rx:1.5,fill:ZI(b.item.days),className:"in-tm-cell","data-path":b.item.path,children:v.jsx("title",{children:`${b.item.path} — ${b.item.reads} read${b.item.reads===1?"":"s"}/30d · changed ${Math.round(b.item.days)}d ago`})},b.item.path)),b.w>54&&b.h>16){const S=Math.floor((b.w-8)/6);let _=(b.item.danger?"⚠ ":"")+b.item.name;_.length>S&&(_=_.slice(0,Math.max(1,S-1))+"…"),S>=5&&d.push(v.jsx("text",{x:b.x+4.5,y:b.y+12.5,className:"in-tm-label","data-path":b.item.path,children:_},"l"+b.item.path))}}return v.jsx("svg",{viewBox:"0 0 720 480",className:"in-chart in-treemap",onClick:h=>{const m=h.target.closest("[data-path], [data-dir]");if(!m)return;const y=m.getAttribute("data-path");if(y)return n(y);const g=m.getAttribute("data-dir");g&&i(g)&&r(g)},children:d})}function YI({pts:e,onOpenFile:n}){const s={l:44,r:16,t:20,b:34},u=Math.max(wa*2,...e.map(g=>g.days)),c=Math.max(Is*2,...e.map(g=>g.reads)),d=g=>Math.log10(g+1)/Math.log10(u+1),h=g=>Math.log10(g+1)/Math.log10(c+1),m=g=>s.l+d(g)*(720-s.l-s.r),y=g=>360-s.b-h(g)*(360-s.t-s.b);return v.jsxs("svg",{viewBox:"0 0 720 360",className:"in-chart",children:[v.jsx("rect",{x:m(wa),y:s.t,width:720-s.r-m(wa),height:y(Is)-s.t,className:"in-danger-zone"}),v.jsx("line",{x1:m(wa),y1:s.t,x2:m(wa),y2:360-s.b,className:"in-threshold"}),v.jsx("line",{x1:s.l,y1:y(Is),x2:720-s.r,y2:y(Is),className:"in-threshold"}),v.jsx("line",{x1:s.l,y1:360-s.b,x2:720-s.r,y2:360-s.b,className:"in-axis"}),v.jsx("line",{x1:s.l,y1:s.t,x2:s.l,y2:360-s.b,className:"in-axis"}),v.jsx("text",{x:(s.l+720-s.r)/2,y:352,className:"in-label",children:"days since last change →"}),v.jsx("text",{x:12,y:(s.t+360-s.b)/2,className:"in-label",transform:`rotate(-90 12 ${(s.t+360-s.b)/2})`,children:"reads / 30d →"}),v.jsx("text",{x:720-s.r-6,y:s.t+14,className:"in-quad in-quad-danger",textAnchor:"end",children:"hot + stale"}),v.jsx("text",{x:s.l+6,y:s.t+14,className:"in-quad",children:"hot + fresh"}),v.jsx("text",{x:720-s.r-6,y:360-s.b-8,className:"in-quad",textAnchor:"end",children:"cold + stale"}),v.jsx("text",{x:720-s.r-6,y:s.t+28,className:"in-label",textAnchor:"end",children:"dot size = agent share of reads"}),e.map(g=>{const b=g.total?(g.agent||0)/g.total:0;return v.jsx("circle",{cx:Number(m(g.days).toFixed(1)),cy:Number(y(g.reads).toFixed(1)),r:Number((3+4*b).toFixed(1)),className:"in-pt"+(g.danger?" danger":g.reads?"":" cold"),onClick:()=>n(g.path),children:v.jsx("title",{children:`${g.path} — ${g.reads} read${g.reads===1?"":"s"} / 30d · changed ${Math.round(g.days)}d ago`})},g.path)})]})}function QI({pts:e,lens:n,onOpenFile:r}){const i=e.filter(u=>u.reads>0).sort((u,c)=>c.reads-u.reads||c.days-u.days).slice(0,20);if(!i.length)return v.jsx("div",{className:"dl-empty",children:"No reads in the window yet."});const s=i[0].reads;return v.jsxs(v.Fragment,{children:[v.jsx("div",{className:"in-hotpath",children:i.map(u=>{const c=n==="agent"?1:n==="human"?0:u.total?u.agent/u.total:0,d=u.reads/s*100;return v.jsxs("div",{className:"in-hp-row",tabIndex:0,role:"button",title:u.danger?`${u.reads} read${u.reads===1?"":"s"}/30d · unchanged ${Math.round(u.days)}d — review this file`:u.path,onClick:()=>r(u.path),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),r(u.path))},children:[v.jsx("span",{className:"in-hp-name"+(u.danger?" danger":""),children:u.path+(u.danger?" ⚠":"")}),v.jsxs("span",{className:"in-hp-bar",children:[v.jsx("span",{className:"in-hp-agent",style:{width:(d*c).toFixed(1)+"%"}}),v.jsx("span",{className:"in-hp-human",style:{width:(d*(1-c)).toFixed(1)+"%"}})]}),v.jsx("span",{className:"in-hp-count",children:u.reads})]},u.path)})}),v.jsxs("p",{className:"in-legend",children:[v.jsx("span",{className:"in-sw agent"})," agent reads ",v.jsx("span",{className:"in-sw human"})," human reads"]})]})}function XI({devices:e}){const n=new Map;for(const b of e)for(const[S,_]of Object.entries(b.folders||{}))n.set(S,(n.get(S)||0)+_);const r=[...n.entries()].sort((b,S)=>S[1]-b[1]).slice(0,12).map(b=>b[0]),i=e.slice(0,12),s=140,u=6,c=Math.min(76,Math.max(34,(720-s-8)/r.length)),d=26,h=720,m=u+i.length*d+58,y=Math.max(1,...i.flatMap(b=>r.map(S=>(b.folders||{})[S]||0))),g=b=>{const S=[23,25,31],_=[245,166,35],C=S.map((E,T)=>Math.round(E+(_[T]-E)*b));return`rgb(${C[0]},${C[1]},${C[2]})`};return v.jsxs("svg",{viewBox:`0 0 ${h} ${m}`,className:"in-chart in-matrix",children:[i.map((b,S)=>{let _=b.name||b.id||"";return _.length>20&&(_=_.slice(0,19)+"…"),v.jsxs("g",{children:[v.jsx("text",{x:s-8,y:u+S*d+17,textAnchor:"end",className:"in-label",children:_}),r.map((C,E)=>{const T=(b.folders||{})[C]||0;return v.jsx("rect",{x:s+E*c,y:u+S*d,width:c-4,height:d-4,rx:3,fill:g(Math.sqrt(T/y)),children:v.jsx("title",{children:`${b.name||b.id} × ${C||"(root)"}: ${T} read${T===1?"":"s"}/30d`})},C)})]},b.id||S)}),r.map((b,S)=>{const _=s+S*c+(c-4)/2,C=u+i.length*d+14;return v.jsx("text",{x:_,y:C,className:"in-label",textAnchor:"end",transform:`rotate(-28 ${_} ${C})`,children:b||"(root)"},b)})]})}function JI(e){const{apiBase:n,target:r,isFolder:i,onMeta:s,onRendered:u}=e,c=r?i(r)?{prefix:r+"/"}:{path:r}:{prefix:""},d="path"in c&&c.path!==void 0?"path="+encodeURIComponent(c.path):"prefix="+encodeURIComponent(c.prefix??""),{data:h,error:m}=Mn({queryKey:["history",n,d,200],queryFn:()=>Vn(n+"history?"+d+"&n=200"),staleTime:15e3});if(x.useEffect(()=>{m&&s("History unavailable: "+m.message)},[m,s]),x.useEffect(()=>{h&&u?.()},[h,u]),!h)return null;const y=h.entries||[];return v.jsxs("div",{className:"history",children:[y.length===0&&v.jsx("div",{className:"empty",children:"No history yet."}),y.map((g,b)=>v.jsx(L_,{entry:g,onOpen:e.onOpen},b))]})}function WI(e,n){return e?n(e)?e+"/ (folder)":e:"all changes"}function q_(e){const{config:n,apiBase:r,route:i,hub:s,project:u}=e,c=xp(),d=tl(),{tree:h,flatFiles:m,dirIndex:y,loaded:g}=z6(r,!s||!!u),b=D6(r,s&&!!u&&!!n.reads?.enabled),S=s&&!!u&&!i.path&&!i.view,_=!!e.canInsights&&(i.view==="insights"||S),C=GI(r,_);x.useEffect(()=>{_&&d.invalidateQueries({queryKey:["heat",r]})},[_,r,d]);const E=i.path,T=E||(i.view==="insights"||i.view==="history")&&i.viewTarget||"",O=!!E&&y.has(E),A=!!E&&g&&!O&&m.some(Le=>Le.path===E),k=!!E&&g&&!O&&!A,L=O&&!i.view,[U,B]=x.useState(()=>new Set),P=x.useRef(!0);x.useEffect(()=>{if(!h||!P.current)return;P.current=!1;const Le=(h.children||[]).filter(Be=>Be.dir);Le.length===1&&B(Be=>new Set(Be).add(Le[0].path))},[h]),x.useEffect(()=>{!T||!g||B(Le=>{const Be=new Set(Le);for(const He of tI(T))Be.add(He);return y.has(T)&&Be.add(T),Be})},[T,g,y]);const ve=x.useCallback(Le=>{B(Be=>{const He=new Set(Be);return He.has(Le)?He.delete(Le):He.add(Le),He})},[]),ge=x.useRef(null),de=x.useRef(new Map),le=x.useRef({key:"",want:0,attempts:0});x.useEffect(()=>{le.current={key:c,want:gN()==="POP"?de.current.get(c)??0:0,attempts:0}},[c]);const ae=x.useCallback(()=>{const Le=ge.current,Be=le.current;!Le||Be.key!==c||Be.attempts>=3||(Be.attempts++,Le.scrollTo({top:Be.want,behavior:"instant"}))},[c]),he=x.useCallback(()=>{ge.current&&de.current.set(c,ge.current.scrollTop)},[c]),ye=x.useCallback(Le=>{On(pN(Le,u?.id)),cr()},[u?.id]),N=x.useCallback(Le=>On(_a("history",u?.id,Le)),[u?.id]),[Y,ne]=x.useState(""),[J,W]=x.useState(null),[z,j]=x.useState(!1),[H,Q]=x.useState(!1);x.useEffect(()=>pz(()=>Q(!0)),[]);const Z=x.useRef(null),re=e.panel??null,ee=!re&&s&&!!u&&A,pe=!re&&s&&!!u,be=!re&&A,ze=!re&&(A||s&&!!u&&O),Ie=r+"download?path="+encodeURIComponent(E),Ve=x.useCallback(async()=>{try{const Le=await fetch(r+"shares",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:E})});if(!Le.ok)throw new Error(await Le.text());const Be=await Le.json(),He=await Js(Be.url);W({url:Be.url,copied:He})}catch(Le){Je("Share failed: "+Le.message,!0)}},[r,E]),st=x.useCallback(()=>{if(!E)return N("");N(O?E+"/":E)},[E,O,N]);x.useEffect(()=>{const Le=Be=>{(Be.metaKey||Be.ctrlKey)&&Be.key.toLowerCase()==="k"&&(Be.preventDefault(),Q(He=>!He))};return window.addEventListener("keydown",Le),()=>window.removeEventListener("keydown",Le)},[]);const Xe=x.useCallback(()=>{const Le=[],Be=(He,Un,Nt,eo)=>Le.push({icon:He,label:Un,kind:Nt,run:eo});if(s&&u&&E&&(A&&Be("share","Share: "+E,"action",Ve),Be("hist","History: "+E,"action",st),A&&Be("download","Download: "+E,"action",()=>Z.current?.click())),s&&u&&Be("hist","History: whole project","action",()=>N("")),s)for(const He of e.projects||[])(!u||He.id!==u.id)&&Be("folder","Switch to project: "+He.name,"project",()=>On("/"+He.id));n.auth?.enabled&&Be("power","Sign out","action",()=>window.location.href="/auth/logout");for(const He of y.keys())Be("folder",He,"folder",()=>ye(He));for(const He of m)Be("doc",He.path,"file",()=>ye(He.path));return Le},[s,u,E,A,n.auth?.enabled,y,m,e.projects,Ve,st,N,ye]);x.useEffect(()=>{if(!z)return;const Le=()=>j(!1);return document.addEventListener("click",Le),()=>document.removeEventListener("click",Le)},[z]);const Xt=x.useCallback(Le=>y.has(Le),[y]);let Dt="markdown",mt;re?(Dt="view",mt=re.body):i.view==="insights"?(Dt="view",mt=e.canInsights?v.jsx(MS,{flatFiles:m,heatMap:b,devices:C,scope:i.viewTarget||"",onOpenFile:ye,onOpenFolder:ye,isFolder:Xt}):v.jsx("div",{className:"empty",children:"Insights is for hub admins and org owners."})):i.view==="history"?(Dt="view",mt=v.jsx(JI,{apiBase:r,target:i.viewTarget||"",isFolder:Xt,onOpen:ye,onMeta:ne,onRendered:ae})):E?g?k?(Dt="view",mt=v.jsxs("div",{className:"notfound",children:[v.jsx("h1",{children:"Couldn't find that"}),v.jsxs("p",{children:[v.jsx("code",{children:E})," isn't in this project right now."]}),v.jsx("p",{className:"nf-sub",children:"If it was just created, it may still be uploading or syncing from a teammate's device — this page checks again automatically every few seconds, so refresh or come back in a moment."}),v.jsx("button",{className:"pbtn",onClick:()=>d.invalidateQueries({queryKey:["tree",r]}),children:"Check again"})]})):O?(Dt="view",mt=v.jsx(iI,{node:y.get(E),heatMap:b,hub:s&&!!u,apiBase:r,onOpen:ye,onFullHistory:N,onRendered:ae})):mt=v.jsx(sI,{apiBase:r,path:E,heatMap:b,flatFiles:m,onOpenFile:ye,onMeta:ne,onRendered:ae}):mt=v.jsx("div",{className:"empty",children:"Loading…"}):S?(Dt="view",mt=v.jsxs(v.Fragment,{children:[v.jsx(N_,{project:u}),e.canInsights&&v.jsx("div",{className:"home-insights",children:v.jsx(MS,{flatFiles:m,heatMap:b,devices:C,onOpenFile:ye,onOpenFolder:ye,isFolder:Xt})})]})):mt=v.jsx("div",{className:"empty",children:"Select a file to read it."});const pr=re?re.crumb:E?v.jsx(nI,{path:E,onOpenFolder:ye}):i.view==="insights"?"Insights — "+(i.viewTarget||u?.name||""):i.view==="history"?"History — "+WI(i.viewTarget||"",Xt):S?u.name:null,Ht=v.jsx(Ys,{crumb:pr,meta:Y,actions:v.jsxs(v.Fragment,{children:[ee&&v.jsx(Yt,{id:"share-btn",variant:"toolbar",className:"icon-only",title:"Share","aria-label":"Share",onClick:Ve,children:v.jsx(Kt,{name:"share"})}),pe&&!E&&!i.view&&v.jsxs(Yt,{id:"history-btn",variant:"toolbar",onClick:st,children:[v.jsx(Kt,{name:"hist"})," ",v.jsx("span",{className:"lbl",children:"History"})]}),be&&v.jsx("a",{id:"download",hidden:!0,download:!0,href:Ie,ref:Z,children:"Download"}),ze&&v.jsx(Yt,{id:"more-btn",variant:"toolbar",className:"icon-only",title:"More actions","aria-label":"More actions",onClick:Le=>{Le.stopPropagation(),j(!z)},children:v.jsx(Kt,{name:"dots"})}),z&&v.jsxs("div",{id:"more-menu",role:"menu",children:[pe&&v.jsx("button",{className:"more-item",onClick:st,children:"History"}),be&&v.jsx("button",{className:"more-item",onClick:()=>Z.current?.click(),children:"Download"}),e.canInsights&&v.jsx("button",{className:"more-item",onClick:()=>{e.onClosePanel?.(),On(_a("insights",u?.id,E))},children:"Insights"})]})]})});return v.jsxs(v.Fragment,{children:[v.jsx(Ks,{vault:e.sidebar.vault,projectsNav:e.sidebar.projectsNav,orgBar:e.sidebar.orgBar,tree:v.jsx(eI,{root:h,expanded:U,onToggle:ve,currentPath:T,listingShowing:L,onOpen:ye}),topbar:Ht,contentClass:Dt,contentRef:ge,onContentScroll:he,children:mt}),J&&v.jsx(mI,{url:J.url,copied:J.copied,onClose:()=>W(null)}),v.jsx(qI,{open:H,onClose:()=>Q(!1),candidates:Xe})]})}function e$({config:e}){const n=xp(),r=O1(),[i,s]=x.useState(null),[u,c]=x.useState(null);x.useEffect(()=>c(null),[n]);const d=x.useMemo(()=>{const U=n.match(/^\/join\/([0-9a-f]+)\/?$/);return U?U[1]:null},[n]),{data:h}=fN(!d),{data:m}=hN(!d),y=!!e.auth.admin,{data:g}=T1(y),b=x.useMemo(()=>M1(n,"hub"),[n]),S=x.useMemo(()=>h&&(h.find(U=>U.id===b.project)||i&&h.find(U=>U.org===i)||h[0])||null,[h,b.project,i]);if(x.useEffect(()=>{document.title=S?S.name+" — BearDrive":e.brand||e.volume||"BearDrive"},[S,e]),d)return v.jsx(t$,{token:d,onDone:async U=>{s(U),await r(),On("/",{replace:!0})}});const _=e.brand||e.volume||"BearDrive",C=S&&m?.find(U=>U.id===S.org)||null,E=y||(C?C.role==="owner":!1),T=v.jsx(kc,{name:_,onHome:()=>On("/"),search:!!S}),O=e.me?v.jsx(C6,{me:e.me,org:C,admin:y?{pending:g?.length||0,onClick:()=>{c({kind:"hub"}),cr()}}:void 0,onOrgSettings:U=>{c({kind:"org",orgId:U.id}),cr()}}):void 0;if(!h||!m)return v.jsx(Ks,{vault:T,topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Loading…"})});if(!S)return v.jsx(Ks,{vault:T,projectsNav:v.jsx(wS,{projects:h}),orgBar:O,topbar:v.jsx(Ys,{}),contentClass:"view",children:v.jsx(j6,{authEnabled:e.auth.enabled,onCreate:async U=>{if(!U){Je("Give the project a name.",!0);return}try{const B=await Oa("/api/projects",{name:U});await r(),On("/"+B.project.id),Je(`Created “${B.project.name}”.`)}catch(B){Je("Could not create the project: "+B.message,!0)}}})});const A=u?.kind==="org"?m.find(U=>U.id===u.orgId):null,k=u?.kind==="hub"?{crumb:"Signup & access",body:v.jsx(h6,{})}:A?{crumb:A.name,body:v.jsx(u6,{org:A,projects:h,myEmail:e.me?.email||"",onProjectsChanged:r})}:null,L=b.view==="settings"?{crumb:"Project settings",body:v.jsx(E6,{project:S,org:C})}:b.view==="install"?{crumb:"Installation",body:v.jsx("div",{className:"onboard",children:v.jsx(N_,{project:S})})}:null;return b.project!==S.id?v.jsx(vN,{to:"/"+S.id}):v.jsx(q_,{config:e,apiBase:"/api/p/"+S.id+"/",route:b,hub:!0,project:S,projects:h,canInsights:E,sidebar:{vault:T,projectsNav:v.jsx(wS,{projects:h,currentId:S.id,menu:{active:u?null:b.view==="insights"&&!b.viewTarget?"dashboard":b.view==="install"?"install":b.view==="history"&&!b.viewTarget?"history":b.view==="settings"?"settings":null,onDashboard:()=>{c(null),On(_a("insights",S.id)),cr()},onInstall:()=>{c(null),On(_a("install",S.id)),cr()},onHistory:()=>{c(null),On(_a("history",S.id)),cr()},onSettings:()=>{c(null),On(_a("settings",S.id)),cr()}}}),orgBar:O},panel:k||L,onClosePanel:()=>c(null)},S.id)}function t$({token:e,onDone:n}){return x.useEffect(()=>{let r=!1;return Oa("/api/invites/"+e).then(i=>{r||(Je(`Welcome — you joined the “${i.org.name}” team. Opening its projects…`),n(i.org.id))}).catch(i=>{r||String(i.message).includes("signing in")||(Je("Could not accept the invite: "+i.message,!0),n(null))}),()=>{r=!0}},[e]),v.jsx(Ks,{vault:v.jsx(kc,{name:"BearDrive"}),topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Joining…"})})}function n$({config:e}){const n=xp(),r=e.volume||"BearDrive";x.useEffect(()=>{document.title=e.brand||r},[e,r]);const i=x.useMemo(()=>M1(n,"volume"),[n]);return v.jsx(q_,{config:e,apiBase:"/api/",route:i,hub:!1,sidebar:{vault:v.jsx(kc,{name:r,showSignout:e.auth.enabled,search:!0})}})}function r$(){const{data:e}=XR();return v.jsxs(dz,{delayDuration:150,children:[e?e.mode==="hub"?v.jsx(e$,{config:e}):v.jsx(n$,{config:e}):v.jsx(Ks,{vault:v.jsx(kc,{name:"…",showSignout:!1}),topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Loading…"})}),v.jsx(oN,{}),v.jsx(uN,{})]})}const o$=new $R({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});fR.createRoot(document.getElementById("root")).render(v.jsx(x.StrictMode,{children:v.jsx(VR,{client:o$,children:v.jsx(r$,{})})})); +bdrive init --project `+i},{title:"Connect "+e.label,desc:e.note,code:"bdrive hooks install --agent "+e.hook,extra:e.extra}]}function T6(){try{return localStorage.getItem("bdrive-guide-agent")||"claude"}catch{return"claude"}}function N_({project:e}){const[n,r]=x.useState(T6),i=Vh.find(s=>s.key===n)||Vh[0];return v.jsxs("div",{className:"guide",children:[v.jsx("h1",{className:"in-title",children:e.name}),v.jsx("p",{className:"dl-sub",children:"Mount this project as a folder on any machine and connect your coding agent: files sync both ways in the background, every change is journaled with who made it, and agent reads feed Insights."}),v.jsx("div",{className:"gd-tabs",children:Vh.map(s=>v.jsx("button",{className:"gd-tab"+(s.key===i.key?" active":""),"data-key":s.key,onClick:()=>{r(s.key);try{localStorage.setItem("bdrive-guide-agent",s.key)}catch{}},children:s.label},s.key))}),v.jsxs("div",{className:"gd-body",children:[R6(i,e).map((s,u)=>v.jsxs("div",{className:"gd-step",children:[v.jsxs("div",{className:"gd-step-head",children:[v.jsx("span",{className:"gd-num",children:u+1}),v.jsx("span",{className:"gd-step-title",children:s.title})]}),s.desc&&v.jsx("p",{className:"gd-desc",children:s.desc}),s.code&&v.jsx(O6,{code:s.code}),s.extra&&v.jsx("p",{className:"gd-desc gd-extra",children:s.extra})]},u)),v.jsx("p",{className:"gd-done",children:"That's it — the folder now syncs on its own. Every agent turn starts from the latest state, edits appear here (and on every teammate's mount) within seconds, and what your agents read shows up in Insights."})]})]})}function O6({code:e}){const[n,r]=x.useState("Copy");return v.jsxs("pre",{className:"gd-code",children:[v.jsx("code",{children:e}),v.jsx("button",{className:"gd-copy",onClick:async()=>{r(await Js(e)?"Copied":"Copy failed"),setTimeout(()=>r("Copy"),1400)},children:n})]})}const A6=Kc({invite:Ip().trim().refine(e=>/join\/([0-9a-f]+)/.test(e)||/^[0-9a-f]{8,}$/.test(e),{message:"That doesn't look like an invite link."})}),M6=Kc({name:Ip().trim().min(1,"Give the project a name.").max(60,"Keep it under 60 characters.")});function j6({authEnabled:e,onCreate:n}){const r=lc({resolver:hc(A6),defaultValues:{invite:""}}),i=lc({resolver:hc(M6),defaultValues:{name:""}});return v.jsxs("div",{className:"onboard",children:[v.jsx("h1",{children:"Welcome to BearDrive"}),v.jsx("p",{children:"You're signed in, but you're not part of any project yet."}),e&&v.jsxs("div",{className:"ob-card",children:[v.jsx("h3",{children:"Have an invite link?"}),v.jsx("p",{children:"A teammate can send you a join link. Paste it here:"}),v.jsxs("form",{className:"ob-row",onSubmit:r.handleSubmit(({invite:s})=>{const u=s.match(/join\/([0-9a-f]+)/)||s.match(/^([0-9a-f]{8,})$/);location.href="/join/"+u[1]}),children:[v.jsx("input",{id:"ob-invite",type:"text",placeholder:"https://…/join/…",autoComplete:"off",...r.register("invite")}),v.jsx(Yt,{id:"ob-join",variant:"primary",type:"submit",children:"Join"})]}),r.formState.errors.invite&&v.jsx("p",{className:"field-err",children:r.formState.errors.invite.message})]}),v.jsxs("div",{className:"ob-card",children:[v.jsx("h3",{children:"Or start a new project"}),v.jsx("p",{children:"Create a shared space for your team's files."}),v.jsxs("form",{className:"ob-row",onSubmit:i.handleSubmit(({name:s})=>n(s)),children:[v.jsx("input",{id:"ob-name",type:"text",placeholder:"Project name, e.g. wiki",autoComplete:"off",...i.register("name")}),v.jsx(Yt,{id:"ob-create",variant:"primary",type:"submit",children:"Create"})]}),i.formState.errors.name&&v.jsx("p",{className:"field-err",children:i.formState.errors.name.message})]})]})}function z6(e,n=!0){const r=Mn({queryKey:["tree",e],queryFn:()=>Vn(e+"tree"),enabled:n,refetchInterval:15e3}),i=x.useMemo(()=>{const s=[],u=new Map,c=d=>{for(const h of d.children||[])h.dir?(u.set(h.path,h),c(h)):s.push(h)};return r.data&&c(r.data),{flatFiles:s,dirIndex:u}},[r.data]);return{tree:r.data,...i,loaded:!!r.data}}function D6(e,n){return Mn({queryKey:["heat",e],queryFn:()=>Vn(e+"heat?days=30"),enabled:n,staleTime:6e4,refetchInterval:6e4}).data?.entries??null}function N6(e,n,r){return Mn({queryKey:["history",e,"prefix",n,20],queryFn:()=>Vn(e+"history?prefix="+encodeURIComponent(n)+"&n=20"),enabled:r,staleTime:15e3}).data?.entries??null}function _S(e,n,r){if(!e)return null;if(!r)return e[n]||null;const i={human:0,agent:0,share:0};for(const[s,u]of Object.entries(e))s.startsWith(n+"/")&&(i.human+=u.human||0,i.agent+=u.agent||0,i.share+=u.share||0);return i.human||i.agent||i.share?i:null}function Ws(e){return(e.human||0)+(e.agent||0)+(e.share||0)}function Zu(e){const n=Ws(e);if(!n)return"";let r=n+(n===1?" read":" reads");return e.agent&&(r+=" ("+e.agent+" agent)"),r}function k6(e){const n=Ws(e);return n?n<3?1:n<10?2:n<30?3:4:0}function L6(e,n,r){const i=new Array(e);return new Proxy(i,{get(s,u,c){if(typeof u=="string"){const d=u.charCodeAt(0);if(d>=48&&d<=57){const h=+u;if(Number.isInteger(h)&&h>=0&&hi[y]!==m))&&(i=d,s=n(...d),r?.onChange&&!(u&&r.skipInitialOnChange)&&r.onChange(s),u=!1),s}return c.updateDeps=d=>{i=d},c}function CS(e,n){if(e===void 0)throw new Error("Unexpected undefined");return e}const I6=(e,n)=>Math.abs(e-n)<1.01,$6=(e,n,r)=>{let i;return function(...s){e.clearTimeout(i),i=e.setTimeout(()=>n.apply(this,s),r)}};let zs;const Fh=()=>{if(zs!==void 0)return zs;if(typeof navigator>"u")return zs=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return zs=!0;const e=navigator.maxTouchPoints;return zs=navigator.platform==="MacIntel"&&e!==void 0&&e>0},ES=e=>{const{offsetWidth:n,offsetHeight:r}=e;return{width:n,height:r}},V6=e=>e,F6=e=>{const n=Math.max(e.startIndex-e.overscan,0),i=Math.min(e.endIndex+e.overscan,e.count-1)-n+1,s=new Array(i);for(let u=0;u{const r=e.scrollElement;if(!r)return;const i=e.targetWindow;if(!i)return;const s=c=>{const{width:d,height:h}=c;n({width:Math.round(d),height:Math.round(h)})};if(s(ES(r)),!i.ResizeObserver)return()=>{};const u=new i.ResizeObserver(c=>{const d=()=>{const h=c[0];if(h?.borderBoxSize){const m=h.borderBoxSize[0];if(m){s({width:m.inlineSize,height:m.blockSize});return}}s(ES(r))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(d):d()});return u.observe(r,{box:"border-box"}),()=>{u.unobserve(r)}},pc={passive:!0},H6=typeof window>"u"?!0:"onscrollend"in window,P6=(e,n,r)=>{const i=e.scrollElement;if(!i)return;const s=e.targetWindow;if(!s)return;const u=e.options.useScrollendEvent&&H6;let c=0;const d=u?null:$6(s,()=>n(c,!1),e.options.isScrollingResetDelay),h=g=>()=>{c=r(i),d?.(),n(c,g)},m=h(!0),y=h(!1);return i.addEventListener("scroll",m,pc),u&&i.addEventListener("scrollend",y,pc),()=>{i.removeEventListener("scroll",m),u&&i.removeEventListener("scrollend",y)}},B6=(e,n)=>P6(e,n,r=>{const{horizontal:i,isRtl:s}=e.options;return i?r.scrollLeft*(s&&-1||1):r.scrollTop}),q6=(e,n,r)=>{if(r.options.useCachedMeasurements){const i=r.indexFromElement(e),s=r.options.getItemKey(i);return r.itemSizeCache.get(s)??r.options.estimateSize(i)}if(n?.borderBoxSize){const i=n.borderBoxSize[0];if(i)return Math.round(i[r.options.horizontal?"inlineSize":"blockSize"])}if(!n){const i=r.indexFromElement(e),s=r.options.getItemKey(i),u=r.itemSizeCache.get(s);if(u!==void 0)return u}return e[r.options.horizontal?"offsetWidth":"offsetHeight"]},G6=(e,{adjustments:n=0,behavior:r},i)=>{var s,u;(u=(s=i.scrollElement)==null?void 0:s.scrollTo)==null||u.call(s,{[i.options.horizontal?"left":"top"]:e+n,behavior:r})},Z6=G6;class K6{constructor(n){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var r,i,s;return((s=(i=(r=this.targetWindow)==null?void 0:r.performance)==null?void 0:i.now)==null?void 0:s.call(i))??Date.now()},this.observer=(()=>{let r=null;const i=()=>r||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:r=new this.targetWindow.ResizeObserver(s=>{s.forEach(u=>{const c=()=>{const d=u.target,h=this.indexFromElement(d);if(!d.isConnected){this.observer.unobserve(d);for(const[m,y]of this.elementsCache)if(y===d){this.elementsCache.delete(m);break}return}this.shouldMeasureDuringScroll(h)&&this.resizeItem(h,this.options.measureElement(d,u,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(c):c()})}));return{disconnect:()=>{var s;(s=i())==null||s.disconnect(),r=null},observe:s=>{var u;return(u=i())==null?void 0:u.observe(s,{box:"border-box"})},unobserve:s=>{var u;return(u=i())==null?void 0:u.unobserve(s)}}})(),this.range=null,this.setOptions=r=>{var i,s;const u={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:V6,rangeExtractor:F6,onChange:()=>{},measureElement:q6,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,anchorTo:"start",followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",useCachedMeasurements:!1};for(const b in r){const S=r[b];S!==void 0&&(u[b]=S)}const c=this.options;let d=null,h=null,m=!1;if(c!==void 0&&c.enabled&&u.enabled&&u.anchorTo==="end"&&this.scrollElement!==null){const b=c.count,S=u.count,_=this.getMeasurements(),C=b>0?((i=_[0])==null?void 0:i.key)??c.getItemKey(0):null,E=b>0?((s=_[b-1])==null?void 0:s.key)??c.getItemKey(b-1):null;if(S!==b||b>0&&S>0&&(u.getItemKey(0)!==C||u.getItemKey(S-1)!==E)){m=!0;const A=b>0?this.getVirtualItemForOffset(this.getScrollOffset())??_[0]:null;A&&(d=[A.key,this.getScrollOffset()-A.start]);const k=u.followOnAppend===!0?"auto":u.followOnAppend||null;k&&S>b&&this.isAtEnd(c.scrollEndThreshold)&&(b===0||u.getItemKey(S-1)!==E)&&(h=k)}}this.options=u,m&&(this.pendingMin=0,this.itemSizeCacheVersion++);let y=!1,g=0;if(d&&this.scrollOffset!==null){const[b,S]=d,_=this.getMeasurements(),{count:C,getItemKey:E}=this.options;let T=0;for(;T{var i,s;(s=(i=this.options).onChange)==null||s.call(i,this,r)},this.maybeNotify=ba(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),r=>{this.notify(r)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(r=>r()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var r;const i=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==i){if(this.cleanup(),!i){this.maybeNotify();return}if(this.scrollElement=i,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((r=this.scrollElement)==null?void 0:r.window)??null,this.elementsCache.forEach(u=>{this.observer.observe(u)}),this.unsubs.push(this.options.observeElementRect(this,u=>{this.scrollRect=u,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(u,c)=>{if(c&&this._intendedScrollOffset===null&&u===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(u-this._intendedScrollOffset)<1.5&&(u=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;const d=this.getScrollOffset();this.scrollDirection=c?d===u?this.scrollDirection:d{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},d=()=>{this._iosTouching=!1,!(!Fh()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};u.addEventListener("touchstart",c,pc),u.addEventListener("touchend",d,pc),this.unsubs.push(()=>{u.removeEventListener("touchstart",c),u.removeEventListener("touchend",d),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}const s=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,s&&this.scrollElement&&this.options.enabled){const[u,c,d,h]=s;u!==null&&!d&&(Fh()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?h!==0&&(this._iosDeferredAdjustment+=h):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),d&&this.scrollToEnd({behavior:d})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;const r=this.getScrollOffset(),i=this.getMaxScrollOffset();if(r<0||r>i)return;const s=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(r,{adjustments:this.scrollAdjustments+=s,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getMeasurementOptions=ba(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode,this.options.gap],(r,i,s,u,c,d,h,m)=>(this.prevLanes!==void 0&&this.prevLanes!==d&&(this.lanesChangedFlag=!0),this.prevLanes=d,this.pendingMin=null,{count:r,paddingStart:i,scrollMargin:s,getItemKey:u,enabled:c,lanes:d,laneAssignmentMode:h,gap:m}),{key:!1}),this.getMeasurements=ba(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:r,paddingStart:i,scrollMargin:s,getItemKey:u,enabled:c,lanes:d,laneAssignmentMode:h,gap:m},y)=>{const g=this.itemSizeCache;if(!c)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>r)for(const T of this.laneAssignments.keys())T>=r&&this.laneAssignments.delete(T);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(T=>{this.itemSizeCache.set(T.key,T.size)}));const b=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===r&&(this.lanesSettling=!1),d===1){const T=r*2;let O=this._flatMeasurements;if(!O||O.length0&&L.set(O.subarray(0,b*2)),O=L,this._flatMeasurements=O}let A;if(b===0)A=i+s;else{const L=b-1;A=O[L*2]+O[L*2+1]+m}for(let L=b;L1){k=A;const ge=_[k],de=ge!==void 0?S[ge]:void 0;L=de?de.end+m:i+s}else if(E===d){let ge=0,de=C[0],le=_[0];for(let ae=1;aethis.options.debug}),this.calculateRange=ba(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(r,i,s,u)=>r.length===0||i===0?(this.range=null,null):(this.range=Q6(r,i,s,u,u===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=ba(()=>{let r=null,i=null;const s=this.calculateRange();return s&&(r=s.startIndex,i=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,r,i]),[this.options.rangeExtractor,this.options.overscan,this.options.count,r,i]},(r,i,s,u,c)=>u===null||c===null?[]:r({startIndex:u,endIndex:c,overscan:i,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=r=>{const i=this.options.indexAttribute,s=r.getAttribute(i);return s?parseInt(s,10):(console.warn(`Missing attribute name '${i}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=r=>{var i;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const s=this.scrollState.index??((i=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:i.index);if(s!==void 0&&this.range){const u=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),c=Math.max(0,s-u),d=Math.min(this.options.count-1,s+u);return r>=c&&r<=d}return!0},this.measureElement=r=>{if(!r){this.elementsCache.forEach((c,d)=>{c.isConnected||(this.observer.unobserve(c),this.elementsCache.delete(d))});return}const i=this.indexFromElement(r),s=this.options.getItemKey(i),u=this.elementsCache.get(s);u!==r&&(u&&this.observer.unobserve(u),this.observer.observe(r),this.elementsCache.set(s,r)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(i)&&this.resizeItem(i,this.options.measureElement(r,void 0,this))},this.resizeItem=(r,i)=>{var s,u;if(r<0||r>=this.options.count)return;let c,d,h;const m=this._flatMeasurements;if(this.options.lanes===1&&m!==null)h=this.options.getItemKey(r),d=m[r*2],c=m[r*2+1];else{const b=this.measurementsCache[r];if(!b)return;h=b.key,d=b.start,c=b.size}const y=this.itemSizeCache.get(h)??c,g=i-y;if(g!==0){const b=this.options.anchorTo==="end"&&((s=this.scrollState)==null?void 0:s.behavior)!=="smooth"&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,S=b?this.getTotalSize():0,_=((u=this.scrollState)==null?void 0:u.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[r]??{index:r,key:h,start:d,size:c,end:d+c,lane:0},g,this):d[this.getVirtualIndexes(),this.getMeasurements()],(r,i)=>{const s=[];for(let u=0,c=r.length;uthis.options.debug}),this.getVirtualItemForOffset=r=>{const i=this.getMeasurements();if(i.length===0)return;const s=this._flatMeasurements,u=this.options.lanes===1&&s!=null,c=k_(0,i.length-1,u?d=>s[d*2]:d=>CS(i[d]).start,r);return CS(i[c])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const r=this.scrollElement.document.documentElement;return this.options.horizontal?r.scrollWidth-this.scrollElement.innerWidth:r.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(r=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=r,this.getOffsetForAlignment=(r,i,s=0)=>{if(!this.scrollElement)return 0;const u=this.getSize(),c=this.getScrollOffset();i==="auto"&&(i=r>=c+u?"end":"start"),i==="center"?r+=(s-u)/2:i==="end"&&(r-=u);const d=this.getMaxScrollOffset();return Math.max(Math.min(d,r),0)},this.getOffsetForIndex=(r,i="auto")=>{r=Math.max(0,Math.min(r,this.options.count-1));const s=this.getSize(),u=this.getScrollOffset(),c=this.measurementsCache[r];if(!c)return;if(i==="auto")if(c.end>=u+s-this.options.scrollPaddingEnd)i="end";else if(c.start<=u+this.options.scrollPaddingStart)i="start";else return[u,i];if(i==="end"&&r===this.options.count-1)return[this.getMaxScrollOffset(),i];const d=i==="end"?c.end+this.options.scrollPaddingEnd:c.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(d,i,c.size),i]},this.scrollToOffset=(r,{align:i="start",behavior:s="auto"}={})=>{const u=this.getOffsetForAlignment(r,i),c=this.now();this.scrollState={index:null,align:i,behavior:s,startedAt:c,lastTargetOffset:u,stableFrames:0},this._scrollToOffset(u,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(r,{align:i="auto",behavior:s="auto"}={})=>{r=Math.max(0,Math.min(r,this.options.count-1));const u=this.getOffsetForIndex(r,i);if(!u)return;const[c,d]=u,h=this.now();this.scrollState={index:r,align:d,behavior:s,startedAt:h,lastTargetOffset:c,stableFrames:0},this._scrollToOffset(c,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(r,{behavior:i="auto"}={})=>{const s=this.getScrollOffset()+r,u=this.now();this.scrollState={index:null,align:"start",behavior:i,startedAt:u,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:r="auto"}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:"end",behavior:r});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:r})},this.getTotalSize=()=>{var r;const i=this.getMeasurements();let s;if(i.length===0)s=this.options.paddingStart;else if(this.options.lanes===1){const u=i.length-1,c=this._flatMeasurements;c!=null?s=c[u*2]+c[u*2+1]:s=((r=i[u])==null?void 0:r.end)??0}else{const u=Array(this.options.lanes).fill(null);let c=i.length-1;for(;c>=0&&u.some(d=>d===null);){const d=i[c];u[d.lane]===null&&(u[d.lane]=d.end),c--}s=Math.max(...u.filter(d=>d!==null))}return Math.max(s-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{const r=[];if(this.itemSizeCache.size===0)return r;const i=this.getMeasurements();for(const s of i)s&&this.itemSizeCache.has(s.key)&&r.push({index:s.index,key:s.key,start:s.start,size:s.size,end:s.end,lane:s.lane});return r},this._scrollToOffset=(r,{adjustments:i,behavior:s})=>{this._intendedScrollOffset=r+(i??0),this.options.scrollToFn(r,{behavior:s,adjustments:i},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(n)}applyScrollAdjustment(n,r){n!==0&&(Fh()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=n:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=n,behavior:r}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const i=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,s=i?i[0]:this.scrollState.lastTargetOffset,u=1,c=s!==this.scrollState.lastTargetOffset;if(!c&&I6(s,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=u){this.getScrollOffset()!==s&&this._scrollToOffset(s,{adjustments:void 0,behavior:"auto"}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,c){const d=this.getSize()||600,h=Math.abs(s-this.getScrollOffset()),m=this.scrollState.behavior==="smooth"&&h>d;this.scrollState.lastTargetOffset=s,m||(this.scrollState.behavior="auto"),this._scrollToOffset(s,{adjustments:void 0,behavior:m?"smooth":"auto"})}this.scheduleScrollReconcile()}}const k_=(e,n,r,i)=>{for(;e<=n;){const s=(e+n)/2|0,u=r(s);if(ui)n=s-1;else return s}return e>0?e-1:0};function Y6(e,n,r){let i=0;for(;i<=n;){const s=(i+n)/2|0,u=e[s*2];if(ur)n=s-1;else return s}return i>0?i-1:0}function Q6(e,n,r,i,s){const u=e.length-1;if(e.length<=i)return{startIndex:0,endIndex:u};if(i===1&&s!==null){const m=Y6(s,u,r);let y=m;const g=r+n;for(;ye[m].start,r),h=d;if(i===1)for(;h1){const m=Array(i).fill(0);for(;hg=0&&y.some(g=>g>=r);){const g=e[d];y[g.lane]=g.start,d--}d=Math.max(0,d-d%i),h=Math.min(u,h+(i-1-h%i))}return{startIndex:d,endIndex:h}}const Uh=typeof document<"u"?x.useLayoutEffect:x.useEffect;function X6({useFlushSync:e=!0,directDomUpdates:n=!1,directDomUpdatesMode:r="transform",...i}){const s=x.useReducer(m=>m+1,0)[1],u=x.useRef({enabled:n,mode:r,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});u.current.enabled=n,u.current.mode=r;const c=m=>{const y=u.current;if(!y.enabled||!y.container)return;const g=m.getTotalSize();if(g!==y.lastSize){y.lastSize=g;const T=m.options.horizontal?"width":"height";y.container.style[T]=`${g}px`}const b=!!m.options.horizontal,S=y.mode==="transform",_=b?"left":"top",C=m.options.scrollMargin,E=m.getVirtualItems();for(const T of E){const O=T.start-C,A=m.elementsCache.get(T.key);A&&y.lastPositions.get(A)!==O&&(y.lastPositions.set(A,O),S?A.style.transform=b?`translate3d(${O}px, 0, 0)`:`translate3d(0, ${O}px, 0)`:A.style[_]=`${O}px`)}},d={...i,onChange:(m,y)=>{var g;const b=u.current;let S=!0;if(b.enabled){c(m);const _=m.range,C=b.prevRange;S=!C||C.isScrolling!==m.isScrolling||C.startIndex!==_?.startIndex||C.endIndex!==_?.endIndex,S&&(b.prevRange=_?{startIndex:_.startIndex,endIndex:_.endIndex,isScrolling:m.isScrolling}:null)}S&&(e&&y?Si.flushSync(s):s()),(g=i.onChange)==null||g.call(i,m,y)}},[h]=x.useState(()=>{const m=new K6(d);return Object.assign(m,{containerRef:y=>{const g=u.current;if(g.container=y,g.lastSize=null,y&&g.enabled){const b=m.getTotalSize();g.lastSize=b;const S=m.options.horizontal?"width":"height";y.style[S]=`${b}px`}}})});return h.setOptions(d),Uh(()=>h._didMount(),[]),Uh(()=>h._willUpdate()),Uh(()=>{c(h)}),h}function J6(e){return X6({observeElementRect:U6,observeElementOffset:B6,scrollToFn:Z6,...e})}function W6(e,n){const r=[],i=(s,u)=>{for(const c of s)r.push({node:c,depth:u}),c.dir&&n.has(c.path)&&i(c.children||[],u+1)};return i(e?.children||[],0),r}function eI(e){const{root:n,expanded:r,onToggle:i,currentPath:s,listingShowing:u,onOpen:c}=e,d=x.useRef(null),h=x.useMemo(()=>W6(n,r),[n,r]),m=J6({count:h.length,getScrollElement:()=>d.current,estimateSize:()=>window.matchMedia("(max-width: 768px)").matches?44:28,overscan:12,getItemKey:y=>h[y].node.path});return x.useEffect(()=>{if(!s)return;const y=h.findIndex(g=>g.node.path===s);y>=0&&m.scrollToIndex(y,{align:"auto"})},[s,h]),v.jsx("nav",{id:"tree","aria-label":"Files",ref:d,children:v.jsx("div",{style:{height:m.getTotalSize(),position:"relative"},children:m.getVirtualItems().map(y=>{const{node:g,depth:b}=h[y.index],S=g.dir?r.has(g.path):!1,_=()=>{if(g.dir&&s===g.path&&u){i(g.path);return}c(g.path),g.dir||cr()};return v.jsxs("div",{className:"row "+(g.dir?"dir":"file")+(s===g.path?" active":"")+(g.dir&&!S?" collapsed":""),"data-path":g.path,tabIndex:0,role:"button",title:g.name,"aria-expanded":g.dir?S:void 0,style:{position:"absolute",top:0,left:0,right:0,transform:`translateY(${y.start}px)`,paddingLeft:8+b*13},onClick:_,onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),_())},children:[Array.from({length:b},(C,E)=>v.jsx("span",{className:"tguide",style:{left:8+E*13+5},"aria-hidden":"true"},E)),v.jsx("span",{className:"chev",onClick:C=>{g.dir&&(C.stopPropagation(),i(g.path))},children:v.jsx(Kt,{name:"chevd"})}),v.jsx("span",{className:"ticon",children:v.jsx(Kt,{name:g.dir?"folder":"doc"})}),v.jsx("span",{className:"label",children:g.name})]},y.key)})})})}function tI(e){const n=e.split("/"),r=[];let i="";for(let s=0;s{i=i?i+"/"+s:s;const c=i,d=u===r.length-1;return v.jsxs("span",{children:[u>0&&v.jsx("span",{className:"crumb-sep",children:"/"}),d?v.jsx("span",{children:s}):v.jsx("span",{className:"crumb-seg",title:c,onClick:()=>n(c),children:s})]},c)})})}const rI={add:"plus",edit:"edit",delete:"x"},oI={add:"added",edit:"edited",delete:"deleted"};function L_({entry:e,onOpen:n}){const[r,i]=x.useState(!1),s=e.kind==="put"?"edit":e.kind,u=e.user_name?`${e.user_name} <${e.user}>`:e.user||e.author||"unknown",c=[e.device.name||e.device.id,e.device.os,e.device.ip].filter(Boolean).join(" · "),d=s!=="delete",h=m=>{m.target.tagName!=="A"&&d&&n(e.path)};return v.jsxs("div",{className:"hentry "+s+(d?" clickable":""),tabIndex:d?0:void 0,role:d?"button":void 0,onClick:h,onKeyDown:m=>{d&&(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),n(e.path))},children:[v.jsxs("div",{className:"hline",children:[v.jsx("span",{className:"hkind",children:v.jsx(Kt,{name:rI[s]||"dot"})}),v.jsx("span",{className:"hpath",children:e.path}),v.jsx("span",{className:"htag",children:oI[s]||s}),v.jsx("span",{className:"htime",children:new Date(e.time).toLocaleString()})]}),v.jsxs("div",{className:"hmeta",children:[v.jsx("span",{className:"hwho",children:u}),v.jsx("span",{className:"hdev",children:c}),v.jsx("span",{className:"hsize",children:e.size?R_(e.size):""})]}),e.note&&v.jsx("div",{className:"hnote"+(r?" open":""),tabIndex:0,role:"button",title:r?"Collapse note":"Show full note","aria-expanded":r,onClick:m=>{m.stopPropagation(),m.target.tagName!=="A"&&i(!r)},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),m.stopPropagation(),i(!r))},children:e.note.split(/(https?:\/\/\S+)/).map((m,y)=>/^https?:\/\//.test(m)?v.jsx("a",{href:m,target:"_blank",rel:"noopener",children:m},y):m)})]})}function iI(e){const{node:n,heatMap:r,onOpen:i}=e,s=(n.children||[]).slice().sort((m,y)=>Number(y.dir||!1)-Number(m.dir||!1)||m.name.localeCompare(y.name)),u=s.filter(m=>m.dir).length,c=s.length-u,d=[];u&&d.push(u+(u===1?" folder":" folders")),c&&d.push(c+(c===1?" file":" files"));const h=_S(r,n.path,!0);return h&&d.push(Zu(h)+" in 30 days"),v.jsxs("div",{className:"dirlist",children:[v.jsxs("h1",{className:"dl-title",children:[v.jsx("span",{className:"dl-title-icon",children:v.jsx(Kt,{name:"folder"})}),v.jsx("span",{children:n.name})]}),v.jsx("p",{className:"dl-sub",children:d.join(" · ")||"Empty folder"}),s.length===0?v.jsx("div",{className:"dl-empty",children:"Nothing in this folder yet."}):v.jsx("div",{className:"dl-items",children:s.map(m=>{let y="";if(m.dir){const b=(m.children||[]).length;y=b+(b===1?" item":" items")}else y=[m.size?R_(m.size):"",m.time?new Date(m.time).toLocaleDateString():""].filter(Boolean).join(" · ");const g=_S(r,m.path,!!m.dir);return g&&(y=Zu(g)+(y?" · "+y:"")),v.jsxs("div",{className:"dl-row",tabIndex:0,role:"button",title:m.path,onClick:()=>i(m.path),onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),i(m.path))},children:[v.jsx("span",{className:"ticon",children:v.jsx(Kt,{name:m.dir?"folder":"doc"})}),v.jsx("span",{className:"dl-name",children:m.name}),g&&v.jsx("span",{className:"heatdot lvl"+k6(g),title:Zu(g)+" in 30 days"}),v.jsx("span",{className:"dl-meta",children:y})]},m.path)})}),e.hub&&v.jsx(aI,{apiBase:e.apiBase,prefix:n.path+"/",onOpen:i,onFullHistory:()=>e.onFullHistory(n.path+"/"),onRendered:e.onRendered})]})}function aI(e){const n=N6(e.apiBase,e.prefix,!0),{onRendered:r}=e;return x.useEffect(()=>{n&&n.length&&r&&r()},[n,r]),!n||n.length===0?null:v.jsxs("div",{className:"dl-history",children:[v.jsx("h3",{className:"dl-h3",children:"Recent changes"}),v.jsx("div",{className:"history dl-hlist",children:n.map((i,s)=>v.jsx(L_,{entry:i,onOpen:e.onOpen},s))}),v.jsx("button",{className:"ai-btn dl-more",onClick:e.onFullHistory,children:"Full history"})]})}function sI(e){const{apiBase:n,path:r,onMeta:i}=e,s=n+"file?path="+encodeURIComponent(r);return x.useEffect(()=>()=>i(""),[r,i]),o6.test(r)?v.jsx(lI,{...e}):a6.test(r)?v.jsx("iframe",{className:"htmlview",sandbox:"allow-scripts",src:s,title:r,onLoad:e.onRendered}):i6.test(r)?v.jsx(dI,{src:s,alt:r,onRendered:e.onRendered}):s6.test(r)?v.jsx(fI,{...e,fileURL:s}):v.jsxs("div",{className:"filecard",children:[v.jsx("div",{className:"name",children:r.split("/").pop()}),v.jsx("p",{children:"No preview for this file type."}),v.jsx("a",{className:"btn",download:!0,href:n+"download?path="+encodeURIComponent(r),children:"Download"})]})}function lI(e){const{apiBase:n,path:r,heatMap:i,flatFiles:s,onOpenFile:u,onMeta:c,onRendered:d}=e,{data:h,error:m}=Mn({queryKey:["render",n,r],queryFn:()=>Vn(n+"render?path="+encodeURIComponent(r))}),y=x.useMemo(()=>h?cI(h.html,r,n):"",[h,r,n]);return x.useEffect(()=>{if(!h)return;const g=[];h.author&&g.push(h.author+(h.device?" on "+h.device:"")),h.time&&g.push(new Date(h.time).toLocaleString());const b=i&&i[h.path];b&&Ws(b)&&g.push(Zu(b)+" / 30d"),c(g.join(" · ")),d?.()},[h,i,c,d]),m?v.jsxs("div",{className:"empty",children:["Could not load file: ",m.message]}):h?v.jsx("div",{dangerouslySetInnerHTML:{__html:y},onClick:g=>uI(g,r,s,u)}):null}function uI(e,n,r,i){const s=e.target.closest("a");if(!s||!e.currentTarget.contains(s))return;const u=s.getAttribute("href")||"",c=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"";u.startsWith("wiki:")?(e.preventDefault(),hI(decodeURIComponent(u.slice(5)),r,i)):/^([a-z]+:|\/|#)/i.test(u)||(e.preventDefault(),i(T_(c,decodeURIComponent(u))))}function cI(e,n,r){const i=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"",s=c=>r+"file?path="+encodeURIComponent(c),u=new DOMParser().parseFromString(e,"text/html");for(const c of u.querySelectorAll("img")){const d=c.getAttribute("src")||"";/^([a-z]+:|\/)/i.test(d)||c.setAttribute("src",s(T_(i,d)))}for(const c of u.querySelectorAll("a")){const d=c.getAttribute("href")||"";/^https?:/i.test(d)&&(c.setAttribute("target","_blank"),c.setAttribute("rel","noopener"))}return u.body.innerHTML}function dI({src:e,alt:n,onRendered:r}){return v.jsx("img",{src:e,alt:n,onLoad:r})}function fI(e){const{path:n,fileURL:r,onRendered:i}=e,{data:s,error:u}=Mn({queryKey:["text",r],queryFn:async()=>{const c=await fetch(r);if(!c.ok)throw new Error(await c.text());return c.text()}});return x.useEffect(()=>{s!=null&&i?.()},[s,i]),u?v.jsxs("div",{className:"empty",children:["Could not load file: ",u.message]}):s==null?null:v.jsx("pre",{className:"plain",children:s},n)}function hI(e,n,r){const i=e.toLowerCase(),s=n.find(u=>u.path.toLowerCase()===i||u.path.toLowerCase()===i+".md")||n.find(u=>{const c=u.name.toLowerCase();return c===i||c===i+".md"});s&&r(s.path)}function mI({url:e,copied:n,onClose:r}){const i=e.split("/s/")[1];return v.jsx(yp,{open:!0,onOpenChange:s=>!s&&r(),children:v.jsxs(bp,{className:"modal",showCloseButton:!1,children:[v.jsx(Lc,{asChild:!0,children:v.jsx("h3",{children:"Public link created"})}),v.jsxs("p",{children:[v.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until you revoke it."]}),v.jsx("div",{className:"modal-url",children:e}),v.jsxs("div",{className:"modal-actions",children:[v.jsx(Yt,{variant:"primary",onClick:()=>Js(e).then(s=>Je(s?"Copied.":"Select and copy the link above.")),children:n?"Copied ✓":"Copy link"}),v.jsx(Yt,{variant:"subtle",onClick:()=>window.open(e,"_blank"),children:"Open"}),v.jsx(Yt,{variant:"subtle",className:"ai-del",onClick:async()=>{try{await Ao("DELETE","/api/shares/"+i),Je("Link revoked — it no longer works."),r()}catch(s){Je(s.message,!0)}},children:"Revoke"}),v.jsx(Yt,{variant:"subtle",onClick:r,children:"Done"})]})]})})}var RS=1,pI=.9,gI=.8,vI=.17,Hh=.1,Ph=.999,yI=.9999,bI=.99,SI=/[\\\/_+.#"@\[\(\{&]/,xI=/[\\\/_+.#"@\[\(\{&]/g,wI=/[\s-]/,I_=/[\s-]/g;function Om(e,n,r,i,s,u,c){if(u===n.length)return s===e.length?RS:bI;var d=`${s},${u}`;if(c[d]!==void 0)return c[d];for(var h=i.charAt(u),m=r.indexOf(h,s),y=0,g,b,S,_;m>=0;)g=Om(e,n,r,i,m+1,u+1,c),g>y&&(m===s?g*=RS:SI.test(e.charAt(m-1))?(g*=gI,S=e.slice(s,m-1).match(xI),S&&s>0&&(g*=Math.pow(Ph,S.length))):wI.test(e.charAt(m-1))?(g*=pI,_=e.slice(s,m-1).match(I_),_&&s>0&&(g*=Math.pow(Ph,_.length))):(g*=vI,s>0&&(g*=Math.pow(Ph,m-s))),e.charAt(m)!==n.charAt(u)&&(g*=yI)),(gg&&(g=b*Hh)),g>y&&(y=g),m=r.indexOf(h,m+1);return c[d]=y,y}function TS(e){return e.toLowerCase().replace(I_," ")}function _I(e,n,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,Om(e,n,TS(e),TS(n),0,0,{})}var Ds='[cmdk-group=""]',Bh='[cmdk-group-items=""]',CI='[cmdk-group-heading=""]',$_='[cmdk-item=""]',OS=`${$_}:not([aria-disabled="true"])`,Am="cmdk-item-select",Sa="data-value",EI=(e,n,r)=>_I(e,n,r),V_=x.createContext(void 0),dl=()=>x.useContext(V_),F_=x.createContext(void 0),$p=()=>x.useContext(F_),U_=x.createContext(void 0),H_=x.forwardRef((e,n)=>{let r=xa(()=>{var j,H;return{search:"",value:(H=(j=e.value)!=null?j:e.defaultValue)!=null?H:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),i=xa(()=>new Set),s=xa(()=>new Map),u=xa(()=>new Map),c=xa(()=>new Set),d=P_(e),{label:h,children:m,value:y,onValueChange:g,filter:b,shouldFilter:S,loop:_,disablePointerSelection:C=!1,vimBindings:E=!0,...T}=e,O=fn(),A=fn(),k=fn(),L=x.useRef(null),U=LI();bi(()=>{if(y!==void 0){let j=y.trim();r.current.value=j,B.emit()}},[y]),bi(()=>{U(6,ae)},[]);let B=x.useMemo(()=>({subscribe:j=>(c.current.add(j),()=>c.current.delete(j)),snapshot:()=>r.current,setState:(j,H,Q)=>{var Z,re,ee,pe;if(!Object.is(r.current[j],H)){if(r.current[j]=H,j==="search")le(),ge(),U(1,de);else if(j==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let be=document.getElementById(k);be?be.focus():(Z=document.getElementById(O))==null||Z.focus()}if(U(7,()=>{var be;r.current.selectedItemId=(be=he())==null?void 0:be.id,B.emit()}),Q||U(5,ae),((re=d.current)==null?void 0:re.value)!==void 0){let be=H??"";(pe=(ee=d.current).onValueChange)==null||pe.call(ee,be);return}}B.emit()}},emit:()=>{c.current.forEach(j=>j())}}),[]),P=x.useMemo(()=>({value:(j,H,Q)=>{var Z;H!==((Z=u.current.get(j))==null?void 0:Z.value)&&(u.current.set(j,{value:H,keywords:Q}),r.current.filtered.items.set(j,ve(H,Q)),U(2,()=>{ge(),B.emit()}))},item:(j,H)=>(i.current.add(j),H&&(s.current.has(H)?s.current.get(H).add(j):s.current.set(H,new Set([j]))),U(3,()=>{le(),ge(),r.current.value||de(),B.emit()}),()=>{u.current.delete(j),i.current.delete(j),r.current.filtered.items.delete(j);let Q=he();U(4,()=>{le(),Q?.getAttribute("id")===j&&de(),B.emit()})}),group:j=>(s.current.has(j)||s.current.set(j,new Set),()=>{u.current.delete(j),s.current.delete(j)}),filter:()=>d.current.shouldFilter,label:h||e["aria-label"],getDisablePointerSelection:()=>d.current.disablePointerSelection,listId:O,inputId:k,labelId:A,listInnerRef:L}),[]);function ve(j,H){var Q,Z;let re=(Z=(Q=d.current)==null?void 0:Q.filter)!=null?Z:EI;return j?re(j,r.current.search,H):0}function ge(){if(!r.current.search||d.current.shouldFilter===!1)return;let j=r.current.filtered.items,H=[];r.current.filtered.groups.forEach(Z=>{let re=s.current.get(Z),ee=0;re.forEach(pe=>{let be=j.get(pe);ee=Math.max(be,ee)}),H.push([Z,ee])});let Q=L.current;ye().sort((Z,re)=>{var ee,pe;let be=Z.getAttribute("id"),ze=re.getAttribute("id");return((ee=j.get(ze))!=null?ee:0)-((pe=j.get(be))!=null?pe:0)}).forEach(Z=>{let re=Z.closest(Bh);re?re.appendChild(Z.parentElement===re?Z:Z.closest(`${Bh} > *`)):Q.appendChild(Z.parentElement===Q?Z:Z.closest(`${Bh} > *`))}),H.sort((Z,re)=>re[1]-Z[1]).forEach(Z=>{var re;let ee=(re=L.current)==null?void 0:re.querySelector(`${Ds}[${Sa}="${encodeURIComponent(Z[0])}"]`);ee?.parentElement.appendChild(ee)})}function de(){let j=ye().find(Q=>Q.getAttribute("aria-disabled")!=="true"),H=j?.getAttribute(Sa);B.setState("value",H||void 0)}function le(){var j,H,Q,Z;if(!r.current.search||d.current.shouldFilter===!1){r.current.filtered.count=i.current.size;return}r.current.filtered.groups=new Set;let re=0;for(let ee of i.current){let pe=(H=(j=u.current.get(ee))==null?void 0:j.value)!=null?H:"",be=(Z=(Q=u.current.get(ee))==null?void 0:Q.keywords)!=null?Z:[],ze=ve(pe,be);r.current.filtered.items.set(ee,ze),ze>0&&re++}for(let[ee,pe]of s.current)for(let be of pe)if(r.current.filtered.items.get(be)>0){r.current.filtered.groups.add(ee);break}r.current.filtered.count=re}function ae(){var j,H,Q;let Z=he();Z&&(((j=Z.parentElement)==null?void 0:j.firstChild)===Z&&((Q=(H=Z.closest(Ds))==null?void 0:H.querySelector(CI))==null||Q.scrollIntoView({block:"nearest"})),Z.scrollIntoView({block:"nearest"}))}function he(){var j;return(j=L.current)==null?void 0:j.querySelector(`${$_}[aria-selected="true"]`)}function ye(){var j;return Array.from(((j=L.current)==null?void 0:j.querySelectorAll(OS))||[])}function N(j){let H=ye()[j];H&&B.setState("value",H.getAttribute(Sa))}function Y(j){var H;let Q=he(),Z=ye(),re=Z.findIndex(pe=>pe===Q),ee=Z[re+j];(H=d.current)!=null&&H.loop&&(ee=re+j<0?Z[Z.length-1]:re+j===Z.length?Z[0]:Z[re+j]),ee&&B.setState("value",ee.getAttribute(Sa))}function ne(j){let H=he(),Q=H?.closest(Ds),Z;for(;Q&&!Z;)Q=j>0?NI(Q,Ds):kI(Q,Ds),Z=Q?.querySelector(OS);Z?B.setState("value",Z.getAttribute(Sa)):Y(j)}let J=()=>N(ye().length-1),W=j=>{j.preventDefault(),j.metaKey?J():j.altKey?ne(1):Y(1)},z=j=>{j.preventDefault(),j.metaKey?N(0):j.altKey?ne(-1):Y(-1)};return x.createElement(Fe.div,{ref:n,tabIndex:-1,...T,"cmdk-root":"",onKeyDown:j=>{var H;(H=T.onKeyDown)==null||H.call(T,j);let Q=j.nativeEvent.isComposing||j.keyCode===229;if(!(j.defaultPrevented||Q))switch(j.key){case"n":case"j":{E&&j.ctrlKey&&W(j);break}case"ArrowDown":{W(j);break}case"p":case"k":{E&&j.ctrlKey&&z(j);break}case"ArrowUp":{z(j);break}case"Home":{j.preventDefault(),N(0);break}case"End":{j.preventDefault(),J();break}case"Enter":{j.preventDefault();let Z=he();if(Z){let re=new Event(Am);Z.dispatchEvent(re)}}}}},x.createElement("label",{"cmdk-label":"",htmlFor:P.inputId,id:P.labelId,style:$I},h),Qc(e,j=>x.createElement(F_.Provider,{value:B},x.createElement(V_.Provider,{value:P},j))))}),RI=x.forwardRef((e,n)=>{var r,i;let s=fn(),u=x.useRef(null),c=x.useContext(U_),d=dl(),h=P_(e),m=(i=(r=h.current)==null?void 0:r.forceMount)!=null?i:c?.forceMount;bi(()=>{if(!m)return d.item(s,c?.id)},[m]);let y=B_(s,u,[e.value,e.children,u],e.keywords),g=$p(),b=Io(U=>U.value&&U.value===y.current),S=Io(U=>m||d.filter()===!1?!0:U.search?U.filtered.items.get(s)>0:!0);x.useEffect(()=>{let U=u.current;if(!(!U||e.disabled))return U.addEventListener(Am,_),()=>U.removeEventListener(Am,_)},[S,e.onSelect,e.disabled]);function _(){var U,B;C(),(B=(U=h.current).onSelect)==null||B.call(U,y.current)}function C(){g.setState("value",y.current,!0)}if(!S)return null;let{disabled:E,value:T,onSelect:O,forceMount:A,keywords:k,...L}=e;return x.createElement(Fe.div,{ref:Aa(u,n),...L,id:s,"cmdk-item":"",role:"option","aria-disabled":!!E,"aria-selected":!!b,"data-disabled":!!E,"data-selected":!!b,onPointerMove:E||d.getDisablePointerSelection()?void 0:C,onClick:E?void 0:_},e.children)}),TI=x.forwardRef((e,n)=>{let{heading:r,children:i,forceMount:s,...u}=e,c=fn(),d=x.useRef(null),h=x.useRef(null),m=fn(),y=dl(),g=Io(S=>s||y.filter()===!1?!0:S.search?S.filtered.groups.has(c):!0);bi(()=>y.group(c),[]),B_(c,d,[e.value,e.heading,h]);let b=x.useMemo(()=>({id:c,forceMount:s}),[s]);return x.createElement(Fe.div,{ref:Aa(d,n),...u,"cmdk-group":"",role:"presentation",hidden:g?void 0:!0},r&&x.createElement("div",{ref:h,"cmdk-group-heading":"","aria-hidden":!0,id:m},r),Qc(e,S=>x.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?m:void 0},x.createElement(U_.Provider,{value:b},S))))}),OI=x.forwardRef((e,n)=>{let{alwaysRender:r,...i}=e,s=x.useRef(null),u=Io(c=>!c.search);return!r&&!u?null:x.createElement(Fe.div,{ref:Aa(s,n),...i,"cmdk-separator":"",role:"separator"})}),AI=x.forwardRef((e,n)=>{let{onValueChange:r,...i}=e,s=e.value!=null,u=$p(),c=Io(m=>m.search),d=Io(m=>m.selectedItemId),h=dl();return x.useEffect(()=>{e.value!=null&&u.setState("search",e.value)},[e.value]),x.createElement(Fe.input,{ref:n,...i,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":h.listId,"aria-labelledby":h.labelId,"aria-activedescendant":d,id:h.inputId,type:"text",value:s?e.value:c,onChange:m=>{s||u.setState("search",m.target.value),r?.(m.target.value)}})}),MI=x.forwardRef((e,n)=>{let{children:r,label:i="Suggestions",...s}=e,u=x.useRef(null),c=x.useRef(null),d=Io(m=>m.selectedItemId),h=dl();return x.useEffect(()=>{if(c.current&&u.current){let m=c.current,y=u.current,g,b=new ResizeObserver(()=>{g=requestAnimationFrame(()=>{let S=m.offsetHeight;y.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return b.observe(m),()=>{cancelAnimationFrame(g),b.unobserve(m)}}},[]),x.createElement(Fe.div,{ref:Aa(u,n),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":d,"aria-label":i,id:h.listId},Qc(e,m=>x.createElement("div",{ref:Aa(c,h.listInnerRef),"cmdk-list-sizer":""},m)))}),jI=x.forwardRef((e,n)=>{let{open:r,onOpenChange:i,overlayClassName:s,contentClassName:u,container:c,...d}=e;return x.createElement(Fm,{open:r,onOpenChange:i},x.createElement(Hm,{container:c},x.createElement(Pm,{"cmdk-overlay":"",className:s}),x.createElement(Bm,{"aria-label":e.label,"cmdk-dialog":"",className:u},x.createElement(H_,{ref:n,...d}))))}),zI=x.forwardRef((e,n)=>Io(r=>r.filtered.count===0)?x.createElement(Fe.div,{ref:n,...e,"cmdk-empty":"",role:"presentation"}):null),DI=x.forwardRef((e,n)=>{let{progress:r,children:i,label:s="Loading...",...u}=e;return x.createElement(Fe.div,{ref:n,...u,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},Qc(e,c=>x.createElement("div",{"aria-hidden":!0},c)))}),Yc=Object.assign(H_,{List:MI,Item:RI,Input:AI,Group:TI,Separator:OI,Dialog:jI,Empty:zI,Loading:DI});function NI(e,n){let r=e.nextElementSibling;for(;r;){if(r.matches(n))return r;r=r.nextElementSibling}}function kI(e,n){let r=e.previousElementSibling;for(;r;){if(r.matches(n))return r;r=r.previousElementSibling}}function P_(e){let n=x.useRef(e);return bi(()=>{n.current=e}),n}var bi=typeof window>"u"?x.useEffect:x.useLayoutEffect;function xa(e){let n=x.useRef();return n.current===void 0&&(n.current=e()),n}function Io(e){let n=$p(),r=()=>e(n.snapshot());return x.useSyncExternalStore(n.subscribe,r,r)}function B_(e,n,r,i=[]){let s=x.useRef(),u=dl();return bi(()=>{var c;let d=(()=>{var m;for(let y of r){if(typeof y=="string")return y.trim();if(typeof y=="object"&&"current"in y)return y.current?(m=y.current.textContent)==null?void 0:m.trim():s.current}})(),h=i.map(m=>m.trim());u.value(e,d,h),(c=n.current)==null||c.setAttribute(Sa,d),s.current=d}),s}var LI=()=>{let[e,n]=x.useState(),r=xa(()=>new Map);return bi(()=>{r.current.forEach(i=>i()),r.current=new Map},[e]),(i,s)=>{r.current.set(i,s),n({})}};function II(e){let n=e.type;return typeof n=="function"?n(e.props):"render"in n?n.render(e.props):e}function Qc({asChild:e,children:n},r){return e&&x.isValidElement(n)?x.cloneElement(II(n),{ref:n.ref},r(n.props.children)):r(n)}var $I={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function VI({className:e,...n}){return v.jsx(Yc,{"data-slot":"command",className:xt("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...n})}function FI({className:e,...n}){return v.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[v.jsx(w1,{className:"size-4 shrink-0 opacity-50"}),v.jsx(Yc.Input,{"data-slot":"command-input",className:xt("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",e),...n})]})}function UI({className:e,...n}){return v.jsx(Yc.List,{"data-slot":"command-list",className:xt("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",e),...n})}function HI({className:e,...n}){return v.jsx(Yc.Item,{"data-slot":"command-item",className:xt("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",e),...n})}function AS(e,n){if(!e)return{score:0,hits:[]};const r=e.toLowerCase(),i=n.toLowerCase();let s=0,u=0,c=0;const d=[];for(let h=0;h3&&i.endsWith("ies")?s=i.slice(0,-3)+"y":i.length>3&&i.endsWith("es")?s=i.slice(0,-2):i.length>2&&i.endsWith("s")&&(s=i.slice(0,-1)),s?AS(s,n):null}function BI({text:e,hits:n}){const r=[];let i=0;return n.forEach((s,u)=>{s>i&&r.push(e.slice(i,s)),r.push(v.jsx("b",{children:e[s]},u)),i=s+1}),r.push(e.slice(i)),v.jsx("span",{className:"plabel",children:r})}function qI({open:e,onClose:n,candidates:r}){const[i,s]=x.useState(""),u=x.useMemo(()=>{if(!e)return[];const d=[];for(const h of r()){const m=PI(i,h.label);m&&d.push({...h,score:m.score,hits:m.hits})}return d.sort((h,m)=>m.score-h.score),d.slice(0,40)},[e,i,r]);x.useEffect(()=>{e&&s("")},[e]);const c=d=>{n(),d.run()};return v.jsx(yp,{open:e,onOpenChange:d=>!d&&n(),children:v.jsxs(bp,{id:"palette",className:"palette",showCloseButton:!1,"aria-describedby":void 0,children:[v.jsx(Lc,{className:"sr-only",children:"Search and quick actions"}),v.jsxs(VI,{shouldFilter:!1,loop:!0,children:[v.jsxs("div",{id:"palette-inputwrap",children:[v.jsx(Kt,{name:"search"}),v.jsx(FI,{id:"palette-input",placeholder:"Search file names, projects, actions…",autoComplete:"off",spellCheck:!1,value:i,onValueChange:s})]}),v.jsx(UI,{id:"palette-results",children:u.length===0?v.jsx("div",{className:"pempty",children:"No matches — search covers file names, projects, and actions"}):u.map(d=>v.jsxs(HI,{value:d.kind+":"+d.label,onSelect:()=>c(d),children:[v.jsx("span",{className:"picon",children:v.jsx(Kt,{name:d.icon})}),v.jsx(BI,{text:d.label,hits:d.hits}),v.jsx("span",{className:"pkind",children:d.kind})]},d.kind+":"+d.label))}),v.jsx("footer",{id:"palette-hint",children:"↑↓ navigate · ⏎ select · esc close"})]})]})})}const Is=3,wa=30;function GI(e,n){return Mn({queryKey:["heatDevices",e],queryFn:()=>Vn(e+"heat?by=device&days=30"),enabled:n,retry:!1,staleTime:6e4}).data?.devices??null}function MS(e){const[n,r]=x.useState("all"),{flatFiles:i,heatMap:s,devices:u,scope:c}=e,d=b=>!c||b===c||b.startsWith(c+"/"),h=c?i.filter(b=>d(b.path)):i,m=u&&c?u.map(b=>{const S={};for(const[_,C]of Object.entries(b.folders||{}))d(_)&&(S[_]=C);return{...b,folders:S}}).filter(b=>Object.keys(b.folders).length>0):u,y=Date.now(),g=h.map(b=>{const S=s&&s[b.path]||{},_=b.time?Math.max(0,(y-new Date(b.time).getTime())/864e5):0,C=n==="all"?Ws(S):S[n]||0;return{path:b.path,reads:C,agent:S.agent||0,total:Ws(S),days:_,danger:C>=Is&&_>=wa}});return v.jsxs("div",{className:"insights",children:[v.jsxs("h1",{className:"in-title",children:["Knowledge insights",c?v.jsxs("span",{className:"in-scope",children:[" · ",c]}):null]}),v.jsx("p",{className:"dl-sub",children:c?`Reads over the last 30 days × freshness, for ${c} and everything in it.`:"Reads over the last 30 days × how long since each file changed. Hot but stale knowledge — read a lot, maintained by nobody — is the danger zone."}),v.jsx("div",{className:"in-lens",children:["all","human","agent"].map(b=>v.jsx("button",{className:"in-lens-btn"+(b===n?" active":""),onClick:()=>r(b),children:b==="all"?"All reads":b==="human"?"Human reads":"Agent reads"},b))}),v.jsx("h3",{className:"dl-h3",children:"Map — cell size = reads, color = freshness"}),v.jsx(KI,{pts:g,onOpenFile:e.onOpenFile,onOpenFolder:e.onOpenFolder,isFolder:e.isFolder}),v.jsx("h3",{className:"dl-h3",children:"Reads × freshness"}),v.jsx(YI,{pts:g,onOpenFile:e.onOpenFile}),v.jsx("h3",{className:"dl-h3",children:"Hot path — top files by reads"}),v.jsx(QI,{pts:g,lens:n,onOpenFile:e.onOpenFile}),m&&m.length>0&&v.jsxs(v.Fragment,{children:[v.jsx("h3",{className:"dl-h3",children:"Agent coverage — which agents read which areas"}),v.jsx(XI,{devices:m})]})]})}function ZI(e){const n=[[76,195,138],[232,196,84],[224,93,93]],r=Math.min(1,Math.max(0,e/300))*(n.length-1),i=Math.min(n.length-2,Math.floor(r)),s=r-i,u=n[i].map((c,d)=>Math.round(c+(n[i+1][d]-c)*s));return`rgb(${u[0]},${u[1]},${u[2]})`}function jS(e,n,r,i,s){const u=e.reduce((m,y)=>m+y.value,0);if(!u||i<=0||s<=0)return[];const c=e.slice().sort((m,y)=>y.value-m.value).map(m=>({it:m,a:m.value/u*i*s})),d=(m,y)=>{const b=m.reduce((_,C)=>_+C.a,0)/y;let S=0;for(const _ of m){const C=_.a/b;S=Math.max(S,C/b,b/C)}return S},h=[];for(;c.length;){const m=i>=s,y=m?s:i,g=[c.shift()];for(;c.length&&d(g.concat(c[0]),y)<=d(g,y);)g.push(c.shift());const b=g.reduce((_,C)=>_+C.a,0)/y;let S=0;for(const _ of g){const C=_.a/b;m?h.push({item:_.it,x:n,y:r+S,w:b,h:C}):h.push({item:_.it,x:n+S,y:r,w:C,h:b}),S+=C}m?(n+=b,i-=b):(r+=b,s-=b)}return h}const qh=15;function KI({pts:e,onOpenFile:n,onOpenFolder:r,isFolder:i}){const c=new Map;for(const h of e){const m=h.path.includes("/")?h.path.split("/")[0]:"/";let y=c.get(m);y||c.set(m,y={name:m,files:[],value:0}),y.files.push(h),y.value+=h.reads+1}const d=[];for(const h of jS([...c.values()],0,0,720,480)){const m=h.item,y=m.name==="/"?"":m.name;if(d.push(v.jsx("rect",{x:h.x+1,y:h.y+1,width:Math.max(0,h.w-2),height:Math.max(0,h.h-2),rx:3,className:"in-tm-group","data-dir":y},"g"+m.name)),h.w>46&&h.h>qh+10){let b=m.name==="/"?"(root)":m.name;const S=Math.floor((h.w-8)/6);b.length>S&&(b=b.slice(0,Math.max(1,S-1))+"…"),d.push(v.jsx("text",{x:h.x+5,y:h.y+12,className:"in-tm-glabel","data-dir":y,children:b},"gl"+m.name))}const g=jS(m.files.map(b=>({...b,name:b.path.split("/").pop(),value:b.reads+1})),h.x+2,h.y+qh,Math.max(0,h.w-4),Math.max(0,h.h-qh-2));for(const b of g)if(d.push(v.jsx("rect",{x:b.x+.6,y:b.y+.6,width:Math.max(.4,b.w-1.2),height:Math.max(.4,b.h-1.2),rx:1.5,fill:ZI(b.item.days),className:"in-tm-cell","data-path":b.item.path,children:v.jsx("title",{children:`${b.item.path} — ${b.item.reads} read${b.item.reads===1?"":"s"}/30d · changed ${Math.round(b.item.days)}d ago`})},b.item.path)),b.w>54&&b.h>16){const S=Math.floor((b.w-8)/6);let _=(b.item.danger?"⚠ ":"")+b.item.name;_.length>S&&(_=_.slice(0,Math.max(1,S-1))+"…"),S>=5&&d.push(v.jsx("text",{x:b.x+4.5,y:b.y+12.5,className:"in-tm-label","data-path":b.item.path,children:_},"l"+b.item.path))}}return v.jsx("svg",{viewBox:"0 0 720 480",className:"in-chart in-treemap",onClick:h=>{const m=h.target.closest("[data-path], [data-dir]");if(!m)return;const y=m.getAttribute("data-path");if(y)return n(y);const g=m.getAttribute("data-dir");g&&i(g)&&r(g)},children:d})}function YI({pts:e,onOpenFile:n}){const s={l:44,r:16,t:20,b:34},u=Math.max(wa*2,...e.map(g=>g.days)),c=Math.max(Is*2,...e.map(g=>g.reads)),d=g=>Math.log10(g+1)/Math.log10(u+1),h=g=>Math.log10(g+1)/Math.log10(c+1),m=g=>s.l+d(g)*(720-s.l-s.r),y=g=>360-s.b-h(g)*(360-s.t-s.b);return v.jsxs("svg",{viewBox:"0 0 720 360",className:"in-chart",children:[v.jsx("rect",{x:m(wa),y:s.t,width:720-s.r-m(wa),height:y(Is)-s.t,className:"in-danger-zone"}),v.jsx("line",{x1:m(wa),y1:s.t,x2:m(wa),y2:360-s.b,className:"in-threshold"}),v.jsx("line",{x1:s.l,y1:y(Is),x2:720-s.r,y2:y(Is),className:"in-threshold"}),v.jsx("line",{x1:s.l,y1:360-s.b,x2:720-s.r,y2:360-s.b,className:"in-axis"}),v.jsx("line",{x1:s.l,y1:s.t,x2:s.l,y2:360-s.b,className:"in-axis"}),v.jsx("text",{x:(s.l+720-s.r)/2,y:352,className:"in-label",children:"days since last change →"}),v.jsx("text",{x:12,y:(s.t+360-s.b)/2,className:"in-label",transform:`rotate(-90 12 ${(s.t+360-s.b)/2})`,children:"reads / 30d →"}),v.jsx("text",{x:720-s.r-6,y:s.t+14,className:"in-quad in-quad-danger",textAnchor:"end",children:"hot + stale"}),v.jsx("text",{x:s.l+6,y:s.t+14,className:"in-quad",children:"hot + fresh"}),v.jsx("text",{x:720-s.r-6,y:360-s.b-8,className:"in-quad",textAnchor:"end",children:"cold + stale"}),v.jsx("text",{x:720-s.r-6,y:s.t+28,className:"in-label",textAnchor:"end",children:"dot size = agent share of reads"}),e.map(g=>{const b=g.total?(g.agent||0)/g.total:0;return v.jsx("circle",{cx:Number(m(g.days).toFixed(1)),cy:Number(y(g.reads).toFixed(1)),r:Number((3+4*b).toFixed(1)),className:"in-pt"+(g.danger?" danger":g.reads?"":" cold"),onClick:()=>n(g.path),children:v.jsx("title",{children:`${g.path} — ${g.reads} read${g.reads===1?"":"s"} / 30d · changed ${Math.round(g.days)}d ago`})},g.path)})]})}function QI({pts:e,lens:n,onOpenFile:r}){const i=e.filter(u=>u.reads>0).sort((u,c)=>c.reads-u.reads||c.days-u.days).slice(0,20);if(!i.length)return v.jsx("div",{className:"dl-empty",children:"No reads in the window yet."});const s=i[0].reads;return v.jsxs(v.Fragment,{children:[v.jsx("div",{className:"in-hotpath",children:i.map(u=>{const c=n==="agent"?1:n==="human"?0:u.total?u.agent/u.total:0,d=u.reads/s*100;return v.jsxs("div",{className:"in-hp-row",tabIndex:0,role:"button",title:u.danger?`${u.reads} read${u.reads===1?"":"s"}/30d · unchanged ${Math.round(u.days)}d — review this file`:u.path,onClick:()=>r(u.path),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),r(u.path))},children:[v.jsx("span",{className:"in-hp-name"+(u.danger?" danger":""),children:u.path+(u.danger?" ⚠":"")}),v.jsxs("span",{className:"in-hp-bar",children:[v.jsx("span",{className:"in-hp-agent",style:{width:(d*c).toFixed(1)+"%"}}),v.jsx("span",{className:"in-hp-human",style:{width:(d*(1-c)).toFixed(1)+"%"}})]}),v.jsx("span",{className:"in-hp-count",children:u.reads})]},u.path)})}),v.jsxs("p",{className:"in-legend",children:[v.jsx("span",{className:"in-sw agent"})," agent reads ",v.jsx("span",{className:"in-sw human"})," human reads"]})]})}function XI({devices:e}){const n=new Map;for(const b of e)for(const[S,_]of Object.entries(b.folders||{}))n.set(S,(n.get(S)||0)+_);const r=[...n.entries()].sort((b,S)=>S[1]-b[1]).slice(0,12).map(b=>b[0]),i=e.slice(0,12),s=140,u=6,c=Math.min(76,Math.max(34,(720-s-8)/r.length)),d=26,h=720,m=u+i.length*d+58,y=Math.max(1,...i.flatMap(b=>r.map(S=>(b.folders||{})[S]||0))),g=b=>{const S=[23,25,31],_=[245,166,35],C=S.map((E,T)=>Math.round(E+(_[T]-E)*b));return`rgb(${C[0]},${C[1]},${C[2]})`};return v.jsxs("svg",{viewBox:`0 0 ${h} ${m}`,className:"in-chart in-matrix",children:[i.map((b,S)=>{let _=b.name||b.id||"";return _.length>20&&(_=_.slice(0,19)+"…"),v.jsxs("g",{children:[v.jsx("text",{x:s-8,y:u+S*d+17,textAnchor:"end",className:"in-label",children:_}),r.map((C,E)=>{const T=(b.folders||{})[C]||0;return v.jsx("rect",{x:s+E*c,y:u+S*d,width:c-4,height:d-4,rx:3,fill:g(Math.sqrt(T/y)),children:v.jsx("title",{children:`${b.name||b.id} × ${C||"(root)"}: ${T} read${T===1?"":"s"}/30d`})},C)})]},b.id||S)}),r.map((b,S)=>{const _=s+S*c+(c-4)/2,C=u+i.length*d+14;return v.jsx("text",{x:_,y:C,className:"in-label",textAnchor:"end",transform:`rotate(-28 ${_} ${C})`,children:b||"(root)"},b)})]})}function JI(e){const{apiBase:n,target:r,isFolder:i,onMeta:s,onRendered:u}=e,c=r?i(r)?{prefix:r+"/"}:{path:r}:{prefix:""},d="path"in c&&c.path!==void 0?"path="+encodeURIComponent(c.path):"prefix="+encodeURIComponent(c.prefix??""),{data:h,error:m}=Mn({queryKey:["history",n,d,200],queryFn:()=>Vn(n+"history?"+d+"&n=200"),staleTime:15e3});if(x.useEffect(()=>{m&&s("History unavailable: "+m.message)},[m,s]),x.useEffect(()=>{h&&u?.()},[h,u]),!h)return null;const y=h.entries||[];return v.jsxs("div",{className:"history",children:[y.length===0&&v.jsx("div",{className:"empty",children:"No history yet."}),y.map((g,b)=>v.jsx(L_,{entry:g,onOpen:e.onOpen},b))]})}function WI(e,n){return e?n(e)?e+"/ (folder)":e:"all changes"}function q_(e){const{config:n,apiBase:r,route:i,hub:s,project:u}=e,c=xp(),d=tl(),{tree:h,flatFiles:m,dirIndex:y,loaded:g}=z6(r,!s||!!u),b=D6(r,s&&!!u&&!!n.reads?.enabled),S=s&&!!u&&!i.path&&!i.view,_=!!e.canInsights&&(i.view==="insights"||S),C=GI(r,_);x.useEffect(()=>{_&&d.invalidateQueries({queryKey:["heat",r]})},[_,r,d]);const E=i.path,T=E||(i.view==="insights"||i.view==="history")&&i.viewTarget||"",O=!!E&&y.has(E),A=!!E&&g&&!O&&m.some(Le=>Le.path===E),k=!!E&&g&&!O&&!A,L=O&&!i.view,[U,B]=x.useState(()=>new Set),P=x.useRef(!0);x.useEffect(()=>{if(!h||!P.current)return;P.current=!1;const Le=(h.children||[]).filter(Be=>Be.dir);Le.length===1&&B(Be=>new Set(Be).add(Le[0].path))},[h]),x.useEffect(()=>{!T||!g||B(Le=>{const Be=new Set(Le);for(const He of tI(T))Be.add(He);return y.has(T)&&Be.add(T),Be})},[T,g,y]);const ve=x.useCallback(Le=>{B(Be=>{const He=new Set(Be);return He.has(Le)?He.delete(Le):He.add(Le),He})},[]),ge=x.useRef(null),de=x.useRef(new Map),le=x.useRef({key:"",want:0,attempts:0});x.useEffect(()=>{le.current={key:c,want:gN()==="POP"?de.current.get(c)??0:0,attempts:0}},[c]);const ae=x.useCallback(()=>{const Le=ge.current,Be=le.current;!Le||Be.key!==c||Be.attempts>=3||(Be.attempts++,Le.scrollTo({top:Be.want,behavior:"instant"}))},[c]),he=x.useCallback(()=>{ge.current&&de.current.set(c,ge.current.scrollTop)},[c]),ye=x.useCallback(Le=>{On(pN(Le,u?.id)),cr()},[u?.id]),N=x.useCallback(Le=>On(_a("history",u?.id,Le)),[u?.id]),[Y,ne]=x.useState(""),[J,W]=x.useState(null),[z,j]=x.useState(!1),[H,Q]=x.useState(!1);x.useEffect(()=>pz(()=>Q(!0)),[]);const Z=x.useRef(null),re=e.panel??null,ee=!re&&s&&!!u&&A,pe=!re&&s&&!!u,be=!re&&A,ze=!re&&(A||s&&!!u&&O),Ie=r+"download?path="+encodeURIComponent(E),Ve=x.useCallback(async()=>{try{const Le=await fetch(r+"shares",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:E})});if(!Le.ok)throw new Error(await Le.text());const Be=await Le.json(),He=await Js(Be.url);W({url:Be.url,copied:He})}catch(Le){Je("Share failed: "+Le.message,!0)}},[r,E]),st=x.useCallback(()=>{if(!E)return N("");N(O?E+"/":E)},[E,O,N]);x.useEffect(()=>{const Le=Be=>{(Be.metaKey||Be.ctrlKey)&&Be.key.toLowerCase()==="k"&&(Be.preventDefault(),Q(He=>!He))};return window.addEventListener("keydown",Le),()=>window.removeEventListener("keydown",Le)},[]);const Xe=x.useCallback(()=>{const Le=[],Be=(He,Un,Nt,eo)=>Le.push({icon:He,label:Un,kind:Nt,run:eo});if(s&&u&&E&&(A&&Be("share","Share: "+E,"action",Ve),Be("hist","History: "+E,"action",st),A&&Be("download","Download: "+E,"action",()=>Z.current?.click())),s&&u&&Be("hist","History: whole project","action",()=>N("")),s)for(const He of e.projects||[])(!u||He.id!==u.id)&&Be("folder","Switch to project: "+He.name,"project",()=>On("/"+He.id));n.auth?.enabled&&Be("power","Sign out","action",()=>window.location.href="/auth/logout");for(const He of y.keys())Be("folder",He,"folder",()=>ye(He));for(const He of m)Be("doc",He.path,"file",()=>ye(He.path));return Le},[s,u,E,A,n.auth?.enabled,y,m,e.projects,Ve,st,N,ye]);x.useEffect(()=>{if(!z)return;const Le=()=>j(!1);return document.addEventListener("click",Le),()=>document.removeEventListener("click",Le)},[z]);const Xt=x.useCallback(Le=>y.has(Le),[y]);let Dt="markdown",mt;re?(Dt="view",mt=re.body):i.view==="insights"?(Dt="view",mt=e.canInsights?v.jsx(MS,{flatFiles:m,heatMap:b,devices:C,scope:i.viewTarget||"",onOpenFile:ye,onOpenFolder:ye,isFolder:Xt}):v.jsx("div",{className:"empty",children:"Insights is for hub admins and org owners."})):i.view==="history"?(Dt="view",mt=v.jsx(JI,{apiBase:r,target:i.viewTarget||"",isFolder:Xt,onOpen:ye,onMeta:ne,onRendered:ae})):E?g?k?(Dt="view",mt=v.jsxs("div",{className:"notfound",children:[v.jsx("h1",{children:"Couldn't find that"}),v.jsxs("p",{children:[v.jsx("code",{children:E})," isn't in this project right now."]}),v.jsx("p",{className:"nf-sub",children:"If it was just created, it may still be uploading or syncing from a teammate's device — this page checks again automatically every few seconds, so refresh or come back in a moment."}),v.jsx("button",{className:"pbtn",onClick:()=>d.invalidateQueries({queryKey:["tree",r]}),children:"Check again"})]})):O?(Dt="view",mt=v.jsx(iI,{node:y.get(E),heatMap:b,hub:s&&!!u,apiBase:r,onOpen:ye,onFullHistory:N,onRendered:ae})):mt=v.jsx(sI,{apiBase:r,path:E,heatMap:b,flatFiles:m,onOpenFile:ye,onMeta:ne,onRendered:ae}):mt=v.jsx("div",{className:"empty",children:"Loading…"}):S?(Dt="view",mt=v.jsxs(v.Fragment,{children:[v.jsx(N_,{project:u}),e.canInsights&&v.jsx("div",{className:"home-insights",children:v.jsx(MS,{flatFiles:m,heatMap:b,devices:C,onOpenFile:ye,onOpenFolder:ye,isFolder:Xt})})]})):mt=v.jsx("div",{className:"empty",children:"Select a file to read it."});const pr=re?re.crumb:E?v.jsx(nI,{path:E,onOpenFolder:ye}):i.view==="insights"?"Insights — "+(i.viewTarget||u?.name||""):i.view==="history"?"History — "+WI(i.viewTarget||"",Xt):S?u.name:null,Ht=v.jsx(Ys,{crumb:pr,meta:Y,actions:v.jsxs(v.Fragment,{children:[ee&&v.jsx(Yt,{id:"share-btn",variant:"toolbar",className:"icon-only",title:"Share","aria-label":"Share",onClick:Ve,children:v.jsx(Kt,{name:"share"})}),pe&&!E&&!i.view&&v.jsxs(Yt,{id:"history-btn",variant:"toolbar",onClick:st,children:[v.jsx(Kt,{name:"hist"})," ",v.jsx("span",{className:"lbl",children:"History"})]}),be&&v.jsx("a",{id:"download",hidden:!0,download:!0,href:Ie,ref:Z,children:"Download"}),ze&&v.jsx(Yt,{id:"more-btn",variant:"toolbar",className:"icon-only",title:"More actions","aria-label":"More actions",onClick:Le=>{Le.stopPropagation(),j(!z)},children:v.jsx(Kt,{name:"dots"})}),z&&v.jsxs("div",{id:"more-menu",role:"menu",children:[pe&&v.jsx("button",{className:"more-item",onClick:st,children:"History"}),be&&v.jsx("button",{className:"more-item",onClick:()=>Z.current?.click(),children:"Download"}),e.canInsights&&v.jsx("button",{className:"more-item",onClick:()=>{e.onClosePanel?.(),On(_a("insights",u?.id,E))},children:"Insights"})]})]})});return v.jsxs(v.Fragment,{children:[v.jsx(Ks,{vault:e.sidebar.vault,projectsNav:e.sidebar.projectsNav,orgBar:e.sidebar.orgBar,tree:v.jsx(eI,{root:h,expanded:U,onToggle:ve,currentPath:T,listingShowing:L,onOpen:ye}),topbar:Ht,contentClass:Dt,contentRef:ge,onContentScroll:he,children:mt}),J&&v.jsx(mI,{url:J.url,copied:J.copied,onClose:()=>W(null)}),v.jsx(qI,{open:H,onClose:()=>Q(!1),candidates:Xe})]})}function e$({config:e}){const n=xp(),r=O1(),[i,s]=x.useState(null),[u,c]=x.useState(null);x.useEffect(()=>c(null),[n]);const d=x.useMemo(()=>{const U=n.match(/^\/join\/([0-9a-f]+)\/?$/);return U?U[1]:null},[n]),{data:h}=fN(!d),{data:m}=hN(!d),y=!!e.auth.admin,{data:g}=T1(y),b=x.useMemo(()=>M1(n,"hub"),[n]),S=x.useMemo(()=>h&&(h.find(U=>U.id===b.project)||i&&h.find(U=>U.org===i)||h[0])||null,[h,b.project,i]);if(x.useEffect(()=>{document.title=S?S.name+" — BearDrive":e.brand||e.volume||"BearDrive"},[S,e]),d)return v.jsx(t$,{token:d,onDone:async U=>{s(U),await r(),On("/",{replace:!0})}});const _=e.brand||e.volume||"BearDrive",C=S&&m?.find(U=>U.id===S.org)||null,E=y||(C?C.role==="owner":!1),T=v.jsx(kc,{name:_,onHome:()=>On("/"),search:!!S}),O=e.me?v.jsx(C6,{me:e.me,org:C,admin:y?{pending:g?.length||0,onClick:()=>{c({kind:"hub"}),cr()}}:void 0,onOrgSettings:U=>{c({kind:"org",orgId:U.id}),cr()}}):void 0;if(!h||!m)return v.jsx(Ks,{vault:T,topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Loading…"})});if(!S)return v.jsx(Ks,{vault:T,projectsNav:v.jsx(wS,{projects:h}),orgBar:O,topbar:v.jsx(Ys,{}),contentClass:"view",children:v.jsx(j6,{authEnabled:e.auth.enabled,onCreate:async U=>{if(!U){Je("Give the project a name.",!0);return}try{const B=await Oa("/api/projects",{name:U});await r(),On("/"+B.project.id),Je(`Created “${B.project.name}”.`)}catch(B){Je("Could not create the project: "+B.message,!0)}}})});const A=u?.kind==="org"?m.find(U=>U.id===u.orgId):null,k=u?.kind==="hub"?{crumb:"Signup & access",body:v.jsx(h6,{})}:A?{crumb:A.name,body:v.jsx(u6,{org:A,projects:h,myEmail:e.me?.email||"",onProjectsChanged:r})}:null,L=b.view==="settings"?{crumb:"Project settings",body:v.jsx(E6,{project:S,org:C})}:b.view==="install"?{crumb:"Installation",body:v.jsx("div",{className:"onboard",children:v.jsx(N_,{project:S})})}:null;return b.project!==S.id?v.jsx(vN,{to:"/"+S.id}):v.jsx(q_,{config:e,apiBase:"/api/p/"+S.id+"/",route:b,hub:!0,project:S,projects:h,canInsights:E,sidebar:{vault:T,projectsNav:v.jsx(wS,{projects:h,currentId:S.id,menu:{active:u?null:b.view==="insights"&&!b.viewTarget?"dashboard":b.view==="install"?"install":b.view==="history"&&!b.viewTarget?"history":b.view==="settings"?"settings":null,onDashboard:()=>{c(null),On(_a("insights",S.id)),cr()},onInstall:()=>{c(null),On(_a("install",S.id)),cr()},onHistory:()=>{c(null),On(_a("history",S.id)),cr()},onSettings:()=>{c(null),On(_a("settings",S.id)),cr()}}}),orgBar:O},panel:k||L,onClosePanel:()=>c(null)},S.id)}function t$({token:e,onDone:n}){return x.useEffect(()=>{let r=!1;return Oa("/api/invites/"+e).then(i=>{r||(Je(`Welcome — you joined the “${i.org.name}” team. Opening its projects…`),n(i.org.id))}).catch(i=>{r||String(i.message).includes("signing in")||(Je("Could not accept the invite: "+i.message,!0),n(null))}),()=>{r=!0}},[e]),v.jsx(Ks,{vault:v.jsx(kc,{name:"BearDrive"}),topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Joining…"})})}function n$({config:e}){const n=xp(),r=e.volume||"BearDrive";x.useEffect(()=>{document.title=e.brand||r},[e,r]);const i=x.useMemo(()=>M1(n,"volume"),[n]);return v.jsx(q_,{config:e,apiBase:"/api/",route:i,hub:!1,sidebar:{vault:v.jsx(kc,{name:r,showSignout:e.auth.enabled,search:!0})}})}function r$(){const{data:e}=XR();return v.jsxs(dz,{delayDuration:150,children:[e?e.mode==="hub"?v.jsx(e$,{config:e}):v.jsx(n$,{config:e}):v.jsx(Ks,{vault:v.jsx(kc,{name:"…",showSignout:!1}),topbar:v.jsx(Ys,{}),children:v.jsx("div",{className:"empty",children:"Loading…"})}),v.jsx(oN,{}),v.jsx(uN,{})]})}const o$=new $R({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});fR.createRoot(document.getElementById("root")).render(v.jsx(x.StrictMode,{children:v.jsx(VR,{client:o$,children:v.jsx(r$,{})})})); diff --git a/internal/webapp/static/assets/index-DLhh1Ekr.css b/internal/webapp/static/assets/index-JSvM19z8.css similarity index 56% rename from internal/webapp/static/assets/index-DLhh1Ekr.css rename to internal/webapp/static/assets/index-JSvM19z8.css index 39aea0f..04f898a 100644 --- a/internal/webapp/static/assets/index-DLhh1Ekr.css +++ b/internal/webapp/static/assets/index-JSvM19z8.css @@ -1 +1 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-widest:.1em;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-background:#0a0b0d;--color-foreground:#eef0f3;--color-popover:#15171b;--color-popover-foreground:#eef0f3;--color-primary:#f5a623;--color-primary-foreground:#1a1204;--color-secondary:#ffffff08;--color-secondary-foreground:#eef0f3;--color-muted:#ffffff0f;--color-muted-foreground:#9aa0a9;--color-accent:#ffffff0f;--color-accent-foreground:#eef0f3;--color-destructive:#f26d6d;--color-border:#ffffff12;--color-input:#ffffff1c;--color-ring:#d3861a;--radius-ctl:7px}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-4{top:calc(var(--spacing) * 4)}.top-20{top:calc(var(--spacing) * 20)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.left-2{left:calc(var(--spacing) * 2)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.scroll-my-1{scroll-margin-block:var(--spacing)}.scroll-py-1{scroll-padding-block:var(--spacing)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[2px\]{border-radius:2px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-input{border-color:var(--color-input)}.bg-background{background-color:var(--color-background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted\/50{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-foreground{fill:var(--color-foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--color-background)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--color-primary)}.selection\:bg-primary::selection{background-color:var(--color-primary)}.selection\:text-primary-foreground ::selection{color:var(--color-primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--color-primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-destructive\/90:hover{background-color:#f26d6de6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--color-destructive) 90%,transparent)}}.hover\:bg-muted\/50:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:#f5a623e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:#ffffff06}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:#d3861a80}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--color-destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing) * 8)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--color-muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--color-accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--color-accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing) * 12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--color-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--color-muted-foreground)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--color-muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--color-destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:#f26d6d1a}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--color-destructive)}@media(min-width:40rem){.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(prefers-color-scheme:dark){.dark\:border-input{border-color:var(--color-input)}.dark\:bg-destructive\/60{background-color:#f26d6d99}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60{background-color:color-mix(in oklab,var(--color-destructive) 60%,transparent)}}.dark\:bg-input\/30{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30{background-color:color-mix(in oklab,var(--color-input) 30%,transparent)}}@media(hover:hover){.dark\:hover\:bg-accent\/50:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.dark\:hover\:bg-input\/50:hover{background-color:#ffffff0e}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:hover{background-color:color-mix(in oklab,var(--color-input) 50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:#f26d6d66}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:#f26d6d66}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20[data-variant=destructive]:focus{background-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--color-muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing) * 12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing) * 3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing) * 5)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--color-muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant=destructive]>*):is(svg){color:var(--color-destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}:root{--bg: #0a0b0d;--bg-side: #0c0e10;--bg-raise: #15171b;--surface: rgba(255,255,255,.03);--hover: rgba(255,255,255,.06);--border: rgba(255,255,255,.07);--border-2: rgba(255,255,255,.11);--code-bg: #0d0f12;--text: #eef0f3;--text-dim: #9aa0a9;--text-faint: #868b93;--text-ghost: #666b74;--accent: #f5a623;--accent-bright: #ffcf85;--accent-dim: #d3861a;--accent-press: #e0951a;--glow: rgba(245,166,35,.13);--add: #4cc38a;--del: #f26d6d;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", Roboto, sans-serif;--r-ctl: 7px;--r-card: 10px;--r-over: 14px}*{box-sizing:border-box}[hidden]{display:none!important}html,body{height:100%;margin:0}#root{display:contents}body{display:flex;background:var(--bg);color:var(--text);font:13px/1.5 var(--ui);letter-spacing:-.006em;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--glow);color:var(--accent-bright)}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:5px}.sprite{position:absolute}.ico{width:16px;height:16px;flex:none;stroke:currentColor;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}button,input,a.btn{font-family:inherit}#sidebar{width:264px;min-width:210px;background:var(--bg-side);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}#vault{display:flex;align-items:center;gap:9px;height:52px;padding:0 12px 0 14px;border-bottom:1px solid var(--border);position:relative;z-index:45}#vault-badge{width:22px;height:22px;border-radius:6px;flex:none;display:grid;place-items:center;font-size:13px;line-height:1;background:linear-gradient(160deg,#ffcf85,#f5a623 55%,#d3861a);box-shadow:0 1px #ffffff59 inset,0 2px 6px -1px #f5a62366}#vault-name{font-weight:600;font-size:13px;letter-spacing:-.01em;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vault-actions{display:flex;align-items:center;gap:4px}#vault #signout,.icon-btn2{width:28px;height:28px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;color:var(--text-ghost);background:transparent;border:none;cursor:pointer;text-decoration:none}#vault #signout:hover,.icon-btn2:hover{color:var(--text);background:var(--hover)}#vault #signout .ico,.icon-btn2 .ico{width:16px;height:16px}#projects{flex:none;max-height:32%;overflow-y:auto;padding:10px 8px 8px;border-bottom:1px solid var(--border)}.nav-head{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--text-ghost)}.nav-add{display:grid;place-items:center;width:18px;height:18px;border:none;background:transparent;color:var(--text-ghost);cursor:pointer;border-radius:5px}.nav-add .ico{width:14px;height:14px}.nav-add:hover{color:var(--text);background:var(--hover)}#projects ul{list-style:none;margin:0;padding:0}#projects .row{display:flex;align-items:center;gap:9px;height:31px;padding:0 8px;border-radius:7px;color:var(--text-dim);cursor:pointer;position:relative;white-space:nowrap;overflow:hidden}.proj-mark{width:17px;height:17px;border-radius:5px;flex:none;display:grid;place-items:center;font-size:10px;font-weight:700;color:#0a0b0d;letter-spacing:-.02em;text-transform:uppercase}#projects .row .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}#projects .row:hover{background:var(--hover);color:var(--text)}#projects .row.active{background:var(--glow);color:var(--accent-bright)}#projects .row.active:before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:2px;border-radius:2px;background:var(--accent)}#tree{flex:1;overflow-y:auto;padding:8px 8px 24px}.tguide{position:absolute;top:0;bottom:0;width:1px;background:var(--border);pointer-events:none}#tree .row{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;border-radius:7px;color:var(--text-dim);cursor:pointer;position:relative;white-space:nowrap;overflow:hidden}#tree .row:hover{background:var(--hover);color:var(--text)}#tree .row.active{background:var(--glow);color:var(--accent-bright)}#tree .row.active:before{content:"";position:absolute;left:0;top:5px;bottom:5px;width:2px;border-radius:2px;background:var(--accent)}#tree .chev{width:14px;height:14px;flex:none;color:var(--text-ghost);transition:transform .12s;display:flex;align-items:center;justify-content:center}#tree .chev .ico{width:13px;height:13px}#tree .ticon{flex:none;display:flex;color:var(--text-ghost)}#tree .ticon .ico{width:15px;height:15px}#tree .row:hover .ticon,#tree .row:hover .chev{color:var(--text-faint)}#tree .row.active .ticon,#tree .row.active .chev{color:var(--accent)}#tree .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}#tree .file .label{font-size:12.5px}#tree .file .chev{visibility:hidden}#tree .row.collapsed .chev{transform:rotate(-90deg)}.field-err{color:var(--del);font-size:12px;margin:6px 2px 0}.admin-table{width:100%;border-collapse:collapse}.admin-table th{text-align:left;font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--text-ghost);padding:6px 10px;border-bottom:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none}.admin-table th:hover{color:var(--text-dim)}.admin-table td{padding:0;border-bottom:1px solid var(--border)}.admin-table tr.admin-item{display:table-row}.admin-table tr.admin-item td{padding:8px 10px}.admin-table tr.admin-item td:first-child{width:100%}.nav-menu{list-style:none;margin:6px 0 0;padding:0}.nav-menu .row .ico{width:15px;height:15px;flex:none;color:var(--text-ghost)}.nav-menu .row.active .ico{color:var(--accent-bright)}.proj-row{display:flex;align-items:center;gap:4px;padding:0 10px 4px 12px}#project-select{flex:1;min-width:0;height:30px;padding:0 9px;display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);border-radius:var(--r-ctl);background:var(--surface);color:var(--text);font:inherit;font-size:12.5px;font-weight:500;cursor:pointer;white-space:nowrap;outline:none}#project-select>span:last-of-type{overflow:hidden;text-overflow:ellipsis}#project-select:hover{background:var(--hover);border-color:var(--border-2)}#project-select svg{color:var(--text-ghost)}.proj-menu{z-index:80;min-width:var(--radix-select-trigger-width, 200px);border:1px solid var(--border-2);border-radius:9px;padding:4px;background:var(--bg-raise);box-shadow:0 10px 32px #00000059}.proj-menu [role=option]{font-size:12.5px;color:var(--text-dim);border-radius:6px;outline:none}.proj-menu [role=option][data-highlighted]{background:var(--hover);color:var(--text)}#accountbar{position:relative;border-top:1px solid var(--border);padding:7px 10px}#account-btn{width:100%;display:flex;align-items:center;gap:9px;text-align:left;padding:6px 8px;border:none;border-radius:7px;background:transparent;color:var(--text-dim);cursor:pointer;font:inherit}#account-btn:hover{background:var(--hover);color:var(--text)}#account-btn .avatar{width:26px;height:26px;flex:none;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:700}#account-btn .acct{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}#account-btn .acct b{font-size:12.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#account-btn .acct small{font-size:11px;color:var(--text-ghost);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#account-btn>.ico{width:14px;height:14px;color:var(--text-ghost)}#account-menu{min-width:var(--radix-dropdown-menu-trigger-width, 220px);padding:5px;border:1px solid var(--border-2);border-radius:9px;background:var(--bg-raise);box-shadow:0 10px 32px #00000059;display:flex;flex-direction:column;z-index:80;outline:none}#account-menu [role=menuitem]{outline:none}#account-menu [role=menuitem][data-highlighted]{background:var(--hover);color:var(--text)}#account-menu .menu-sec{padding:7px 9px 3px;font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-ghost)}#account-menu [role=menuitem]{display:flex;align-items:center;gap:8px;padding:7px 9px;border:none;border-radius:6px;background:transparent;text-align:left;color:var(--text-dim);font:inherit;font-size:12.5px;cursor:pointer;text-decoration:none}#account-menu [role=menuitem]:hover{background:var(--hover);color:var(--text)}#account-menu [role=menuitem] b{font-weight:600}#account-menu [role=menuitem] .ico{width:15px;height:15px}#account-menu #signout{color:var(--danger, #e5534b)}#account-menu #signout:hover{color:var(--danger, #e5534b);background:var(--hover)}#main{flex:1;display:flex;flex-direction:column;min-width:0}#topbar{position:relative;display:flex;align-items:center;gap:9px;height:52px;padding:0 16px;border-bottom:1px solid var(--border)}.icon-btn{display:none;width:34px;height:34px;border:none;background:transparent;color:var(--text-dim);cursor:pointer;border-radius:7px;align-items:center;justify-content:center}.icon-btn:hover{color:var(--text);background:var(--hover)}#crumb{font-size:12.5px;color:var(--text);font-weight:500;letter-spacing:-.01em;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#crumb .crumb-seg{color:var(--text-dim);cursor:pointer}#crumb .crumb-seg:hover{color:var(--accent-bright)}#crumb .crumb-sep{color:var(--text-ghost);margin:0 5px}#meta{flex:1;min-width:0;font-size:12px;color:var(--text-faint);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{display:inline-flex;align-items:center;gap:6px;flex:none;height:30px;padding:0 11px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font-size:12.5px;font-weight:500;cursor:pointer;text-decoration:none}.btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.btn .ico{width:15px;height:15px}.btn.ghost{color:var(--text-dim)}.tipcard{display:flex;align-items:center;gap:7px;white-space:nowrap;padding:6px 9px;border-radius:8px;border:1px solid var(--border-2);background:var(--surface-solid, var(--bg-raise));color:var(--text);font-size:12.5px;font-weight:500;box-shadow:0 8px 24px #00000059;z-index:80}.tipcard kbd{font:11px var(--ui);color:var(--text-faint);background:var(--hover);border:1px solid var(--border-2);border-radius:5px;padding:1px 5px}#more-menu{position:absolute;right:12px;top:calc(100% - 4px);z-index:80;background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-card);box-shadow:0 18px 44px -14px #000000bf;padding:6px;min-width:168px}.more-item{display:block;width:100%;text-align:left;min-height:40px;padding:0 12px;background:transparent;border:none;cursor:pointer;color:var(--text);font:inherit;font-size:13.5px;border-radius:var(--r-ctl)}.more-item:hover{background:var(--hover)}#content{flex:1;overflow-y:auto;padding:44px 40px 110px;scroll-behavior:smooth}.empty{color:var(--text-faint);text-align:center;margin-top:22vh}.empty-hint{display:block;margin-top:6px;font-size:12px;color:var(--text-ghost)}.onboard{max-width:560px;margin:8vh auto 0}.onboard h1{font-size:25px;font-weight:640;letter-spacing:-.02em;margin:0 0 8px;color:#f4f6f9}.onboard>p{color:var(--text-dim);margin:0 0 28px;font-size:14px}.ob-card{background:var(--bg-side);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 22px;margin-bottom:14px}.ob-card h3{margin:0 0 6px;font-size:14.5px;font-weight:600}.ob-card p{margin:0 0 14px;font-size:13px;color:var(--text-dim)}.ob-row{display:flex;gap:9px}.ob-row input{flex:1;height:34px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:13px;outline:none}.ob-row input:focus{border-color:var(--accent);background:var(--hover)}.pbtn{display:inline-flex;align-items:center;gap:6px;flex:none;height:32px;padding:0 14px;border-radius:var(--r-ctl);border:none;background:var(--accent);color:#241704;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.pbtn:hover{background:var(--accent-bright)}.pbtn .ico{width:15px;height:15px}.danger-btn{display:inline-flex;align-items:center;height:32px;padding:0 14px;border-radius:var(--r-ctl);border:none;background:#b3382e;color:#fff;font-size:13px;font-weight:600;cursor:pointer}.danger-btn:hover{background:#c94336}.admin{max-width:760px}.admin h1{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 6px;color:#f4f6f9}.admin h3{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--text-ghost);font-weight:600;margin:30px 0 10px}.admin-sub{color:var(--text-dim);font-size:13.5px;margin:0 0 6px;line-height:1.55}.admin-h{display:flex;align-items:center;justify-content:space-between;margin:30px 0 10px}.admin-h h3{margin:0}.admin-row{display:flex;gap:9px;margin-bottom:8px}.admin-row input{flex:1;height:34px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:13px;outline:none}.admin-row input:focus{border-color:var(--accent);background:var(--hover)}.admin-list{border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;background:var(--bg-side)}.admin-item{display:flex;align-items:center;gap:11px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13.5px}.admin-item:last-child{border-bottom:none}.admin-item:hover{background:#ffffff04}.ai-main{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.ai-main.mono{font:12px var(--mono);color:var(--text-dim);cursor:pointer}.ai-tag{font-size:11.5px;color:var(--text-faint);flex:none}.admin-item select{height:28px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:0 8px;font:inherit;font-size:12.5px;cursor:pointer}.admin-item select:hover{border-color:var(--border-2)}.ai-btn,.ai-del{flex:none;height:27px;padding:0 11px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font:inherit;font-size:12px;font-weight:500;cursor:pointer}.ai-btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.ai-del{color:var(--del);border-color:transparent;background:transparent}.ai-del:hover{background:#f26d6d1f;color:#ff8b8b}.admin-empty{padding:14px;color:var(--text-faint);font-size:13px}.admin-item.toggle{cursor:pointer;align-items:flex-start}.admin-item.toggle .ai-main{white-space:normal}.tg-label{font-size:13.5px;font-weight:550;color:var(--text)}.tg-desc{font-size:12px;color:var(--text-faint);margin-top:3px;line-height:1.5}.admin-item.toggle input{width:16px;height:16px;margin-top:2px;accent-color:var(--accent);flex:none}.dirlist{max-width:704px;margin:0 auto}.dl-title{display:flex;align-items:center;gap:10px;font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.dl-title-icon{display:flex;color:var(--accent)}.dl-title-icon .ico{width:20px;height:20px}.dl-sub{color:var(--text-faint);font-size:12.5px;margin:0 0 18px}.dl-items{border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;background:var(--bg-side)}.dl-row{display:flex;align-items:center;gap:11px;padding:10px 14px;border-bottom:1px solid var(--border);cursor:pointer}.dl-row:last-child{border-bottom:none}.dl-row:hover{background:var(--hover)}.dl-row .ticon{flex:none;display:flex;color:var(--text-ghost)}.dl-row .ticon .ico{width:16px;height:16px}.dl-row:hover .ticon{color:var(--text-faint)}.dl-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;color:var(--text)}.dl-meta{flex:none;font-size:12px;color:var(--text-faint);font-variant-numeric:tabular-nums}.heatdot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--accent)}.heatdot.lvl1{opacity:.3}.heatdot.lvl2{opacity:.55}.heatdot.lvl3{opacity:.8}.heatdot.lvl4{opacity:1;box-shadow:0 0 6px #f5a6238c}.dl-empty{padding:24px 14px;color:var(--text-faint);font-size:13px;border:1px dashed var(--border);border-radius:var(--r-card);text-align:center}.dl-h3{margin:28px 0 8px;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--text-ghost);font-weight:600}.dl-hlist{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);overflow:hidden;max-width:none}.dl-hlist .hentry:last-child{border-bottom:none}.hentry.clickable{cursor:pointer}.hentry.clickable:hover{background:var(--hover)}.dl-more{margin-top:10px}#vault-name.vault-link{cursor:pointer}#vault-name.vault-link:hover{color:var(--accent-bright)}.guide{max-width:760px;margin:0 auto}.gd-tabs{display:flex;gap:2px;margin:20px 0 16px;border-bottom:1px solid var(--border);overflow-x:auto}.gd-tab{font:inherit;font-size:13px;font-weight:600;padding:7px 12px 9px;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;color:var(--text-faint);cursor:pointer;white-space:nowrap}.gd-tab:hover{color:var(--text)}.gd-tab.active{color:var(--accent-bright);border-bottom-color:var(--accent)}.gd-step{margin:0 0 18px}.gd-step-head{display:flex;align-items:center;gap:10px;margin-bottom:3px}.gd-num{flex:none;width:22px;height:22px;border-radius:50%;background:var(--glow);color:var(--accent-bright);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}.gd-step-title{font-weight:600;font-size:14px;color:var(--text)}.gd-desc{margin:2px 0 8px 32px;color:var(--text-faint);font-size:13px;line-height:1.5}.gd-extra{font-size:12.5px;margin-top:6px}.gd-code{position:relative;margin:6px 0 6px 32px;padding:10px 72px 10px 12px;background:var(--bg-raise);border:1px solid var(--border);border-radius:var(--r-card);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.6;color:var(--text);overflow-x:auto;white-space:pre}.gd-copy{position:absolute;top:7px;right:7px;font:inherit;font-family:inherit;font-size:11px;font-weight:600;padding:3px 9px;border-radius:6px;border:1px solid var(--border-2);background:var(--bg-raise);color:var(--text-faint);cursor:pointer;box-shadow:-14px 0 12px -6px var(--bg-raise)}.gd-copy:hover{color:var(--accent-bright);border-color:var(--accent-dim)}.gd-done{margin:22px 0 8px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);color:var(--text-faint);font-size:13px;line-height:1.5}.home-insights{margin-top:30px;padding-top:22px;border-top:1px solid var(--border)}.insights{max-width:760px;margin:0 auto}.in-title{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.in-title .in-scope{color:var(--text-ghost);font-weight:500;font-size:15px}.in-lens{display:flex;gap:6px;margin:0 0 14px}.in-lens-btn{font:inherit;font-size:12px;padding:5px 12px;border-radius:999px;border:1px solid var(--border);background:none;color:var(--text-faint);cursor:pointer}.in-lens-btn:hover{color:var(--text)}.in-lens-btn.active{color:var(--accent);border-color:var(--accent)}.in-chart{width:100%;height:auto;border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);margin-bottom:6px}.in-axis{stroke:var(--border);stroke-width:1}.in-threshold{stroke:var(--border);stroke-width:1;stroke-dasharray:4 4}.in-danger-zone{fill:#f26d6d0d}.in-label{fill:var(--text-ghost);font-size:11px}.in-quad{fill:var(--text-ghost);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em}.in-quad-danger{fill:#e07070}.in-pt{fill:var(--accent);opacity:.5;cursor:pointer}.in-pt:hover{opacity:1}.in-pt.cold{fill:var(--text-ghost);opacity:.25}.in-pt.danger{fill:#e05d5d;opacity:.6}.in-treemap{background:#0c0d10}.in-tm-group{fill:none;stroke:var(--border);stroke-width:1;cursor:pointer;pointer-events:all}.in-tm-glabel{fill:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.05em;cursor:pointer}.in-tm-cell{cursor:pointer}.in-tm-cell:hover{stroke:#fff;stroke-width:1}.in-tm-label{fill:#0c0d10;font-size:10.5px;font-weight:620;cursor:pointer;pointer-events:none}.in-hotpath{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);overflow:hidden}.in-hp-row{display:flex;align-items:center;gap:10px;padding:6px 12px;border-bottom:1px solid var(--border);cursor:pointer}.in-hp-row:last-child{border-bottom:none}.in-hp-row:hover{background:var(--hover)}.in-hp-name{flex:0 0 300px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--text)}.in-hp-name.danger{color:var(--accent)}.in-hp-bar{flex:1;display:flex;height:10px;border-radius:3px;overflow:hidden}.in-hp-agent{background:var(--accent)}.in-hp-human{background:#5b8def}.in-hp-count{flex:none;width:40px;text-align:right;font-size:11.5px;color:var(--text-faint);font-variant-numeric:tabular-nums}.in-legend{margin:8px 2px 0;font-size:11.5px;color:var(--text-faint)}.in-sw{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}.in-sw.agent{background:var(--accent)}.in-sw.human{background:#5b8def}.in-matrix rect{transition:opacity .1s}.in-matrix rect:hover{opacity:.85}.history{max-width:860px}.hentry{padding:11px 12px;border-bottom:1px solid var(--border)}.hentry:hover{background:#ffffff04}.hline{display:flex;gap:10px;align-items:center}.hkind{display:inline-flex;color:var(--add)}.hkind .ico{width:13px;height:13px}.hentry.edit .hkind{color:var(--accent)}.hentry.delete .hkind{color:var(--del)}.htag{flex:none;font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:1px 6px;border-radius:4px}.hentry.add .htag{color:var(--add);background:#4cc38a1f}.hentry.edit .htag{color:var(--accent-bright);background:var(--glow)}.hentry.delete .htag{color:#ff8b8b;background:#f26d6d1f}.hpath{font-weight:500;cursor:pointer;color:var(--text);font-size:13px}.hpath:hover{color:var(--accent-bright)}.htime{margin-left:auto;color:var(--text-faint);font-size:12px;font-variant-numeric:tabular-nums}.hmeta{display:flex;align-items:center;gap:14px;margin-top:4px;padding-left:23px;font-size:12px;color:var(--text-dim)}.hdev,.hsize{color:var(--text-faint)}.hsize{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.hnote{margin-top:4px;padding-left:23px;font-size:12px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.hnote:hover{color:var(--text)}.hnote.open{white-space:normal;overflow-wrap:anywhere}.hnote:before{content:"› ";color:var(--text-ghost)}.hnote a{color:var(--accent-bright);text-decoration:none}.hnote a:hover{text-decoration:underline}#palette{position:fixed;top:12vh;left:50%;transform:translate(-50%);z-index:151;display:block;width:min(560px,92vw);background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-over);box-shadow:0 24px 70px -18px #000c;overflow:hidden;outline:none;padding:0}#palette-inputwrap{display:flex;align-items:center;gap:11px;padding:14px 16px;border-bottom:1px solid var(--border)}#palette-inputwrap .ico{width:17px;height:17px;color:var(--text-faint)}#palette-input{flex:1;width:100%;border:none;background:transparent;color:var(--text);font:inherit;font-size:15px;letter-spacing:-.01em;outline:none;padding:0}#palette-input::placeholder{color:var(--text-ghost)}#palette-results{list-style:none;margin:0;padding:8px;max-height:46vh;overflow-y:auto}#palette-results [cmdk-item]{display:flex;align-items:center;gap:11px;height:38px;padding:0 10px;border-radius:9px;cursor:pointer;color:var(--text-dim);font-size:13.5px}#palette-results [cmdk-item][data-selected=true]{background:var(--glow)}#palette-results [cmdk-item][data-selected=true] .picon{color:var(--accent)}#palette-results [cmdk-item][data-selected=true] .plabel,#palette-results [cmdk-item][data-selected=true] .plabel b{color:var(--accent-bright)}#palette-results li{display:flex;align-items:center;gap:11px;height:38px;padding:0 10px;border-radius:9px;cursor:pointer;color:var(--text-dim);font-size:13.5px}#palette-results li.selected{background:var(--glow)}#palette-results li.selected .picon{color:var(--accent)}#palette-results li.selected .plabel,#palette-results li.selected .plabel b{color:var(--accent-bright)}#palette-results li .picon{width:18px;flex:none;display:flex;justify-content:center;color:var(--text-faint)}#palette-results li .picon .ico{width:15px;height:15px}#palette-results li .plabel{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}#palette-results li .plabel b{color:var(--accent-bright);font-weight:600}#palette-results li .pkind{flex:none;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-ghost)}#palette-results .pempty{color:var(--text-faint);cursor:default;justify-content:center;height:auto;padding:14px}#palette-hint{padding:9px 16px;border-top:1px solid var(--border);font-size:11px;color:var(--text-ghost)}[data-slot=dialog-overlay]{position:fixed;inset:0;background:#06070999;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:150}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:151;display:block;background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-over);padding:22px 24px;width:min(460px,calc(100vw - 40px));box-shadow:0 24px 70px -18px #000c;outline:none}.modal h3{margin:0 0 10px;font-size:16px;font-weight:620;letter-spacing:-.01em}.modal p{margin:0 0 16px;font-size:13.5px;color:var(--text-dim);line-height:1.55}.modal p b{color:var(--text)}.modal-url{font:12px var(--mono);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-ctl);padding:9px 11px;color:var(--text-dim);word-break:break-all;margin-bottom:16px}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.modal-label{display:block;font-size:12.5px;color:var(--text-dim);margin:0 0 6px}.modal-msg{margin:0 0 16px;font-size:13.5px;color:var(--text-dim);line-height:1.55}.modal-input{width:100%;height:36px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:14px;margin-bottom:16px;outline:none}.modal-input:focus{border-color:var(--accent);background:var(--hover)}[data-sonner-toast]{background:var(--bg-raise)!important;color:var(--text)!important;border:1px solid var(--border-2)!important;border-radius:10px!important;font-size:13.5px!important;box-shadow:0 18px 44px -12px #000000b3!important}[data-sonner-toast][data-type=error]{border-color:#f26d6d80!important;color:#ffb0aa!important}#sb-backdrop{display:none}@media(max-width:900px){#sidebar{position:fixed;z-index:60;top:0;left:0;height:100%;transform:translate(-100%);transition:transform .2s ease;box-shadow:0 0 40px #0009}body.sb-open #sidebar{transform:translate(0)}body.sb-open #sb-backdrop{display:block;position:fixed;inset:0;background:#0000008c;z-index:50}.icon-btn{display:inline-flex;width:44px;height:44px}#content{padding:24px 18px 70px}#topbar{padding:0 8px;gap:4px}.btn .lbl{display:none}#topbar .btn{min-width:44px;min-height:44px;padding:0;justify-content:center;gap:0}#topbar .btn .ico{width:18px;height:18px}#more-btn:not([hidden]){display:inline-flex}#history-btn,#upload-btn,#download{display:none!important}#meta{display:none}#crumb{flex:1}#vault{padding:0 8px 0 12px}.icon-btn2,#signout,#tree .row,#projects .row{height:44px}#account-btn,#project-select{min-height:44px}.nav-add{min-width:44px;min-height:44px}.markdown,.admin,.onboard,.history,.dirlist{max-width:100%}.markdown table,pre.plain{display:block;overflow-x:auto;max-width:100%}.ob-row{flex-direction:column}.ob-row input{flex:none;min-height:44px}.admin-item{flex-wrap:wrap;row-gap:8px;padding:12px 14px}.admin-item select{height:44px}.ai-btn,.ai-del{height:auto;min-height:44px;padding:0 12px}.admin-item .ai-main{flex:1 1 100%;white-space:normal;overflow-wrap:break-word}.gd-code{min-height:62px;padding-top:12px;padding-bottom:12px}.gd-copy{min-height:44px;padding:0 14px}.gd-tab{min-height:44px}.in-lens-btn{min-height:44px;padding:0 14px}.modal-input{height:44px}.modal-actions button,.pbtn,#palette-results li{height:auto;min-height:44px}.more-item{min-height:44px}}.modal-actions .ai-del{margin-right:auto}@media(max-width:430px){.dl-meta{display:none}.ai-tag{font-size:11px}.htime{white-space:nowrap;font-size:12px}.hline{flex-wrap:wrap}.modal-actions .ai-del{flex:0 0 100%}}.markdown{max-width:704px;width:100%;margin:0 auto}.markdown h1,.markdown h2,.markdown h3,.markdown h4{color:#f4f6f9;line-height:1.25;letter-spacing:-.018em;margin:1.5em 0 .5em;text-wrap:balance}.markdown h1:first-child{margin-top:0}.markdown h1{font-size:1.85em;font-weight:660;letter-spacing:-.024em}.markdown h2{font-size:1.32em;font-weight:620;margin-top:1.7em}.markdown h3{font-size:1.08em;font-weight:620}.markdown p,.markdown li{color:#c6cbd3;font-size:14.5px;line-height:1.72}.markdown p{margin:0 0 1em}.markdown strong{color:var(--text);font-weight:620}.markdown a{color:var(--accent-bright);text-decoration:none;border-bottom:1px solid rgba(245,166,35,.28)}.markdown a:hover{border-bottom-color:var(--accent)}.markdown ul,.markdown ol{margin:0 0 1em;padding-left:1.4em}.markdown li{margin-bottom:.4em}.markdown li::marker{color:var(--text-ghost)}.markdown code{background:var(--hover);border:1px solid var(--border);padding:.1em .4em;border-radius:5px;font:12.5px/1.5 var(--mono);color:#e4d9c4}.markdown pre{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--r-card);padding:14px 16px;overflow-x:auto;margin:1.3em 0}.markdown pre code{background:none;border:none;padding:0;color:#c6cbd3}.markdown blockquote{margin:1.3em 0;padding:.3em 1em;border-left:2px solid var(--accent);background:linear-gradient(90deg,var(--glow),transparent);border-radius:0 8px 8px 0;color:#d8cdb6}.markdown blockquote p{margin:.3em 0;color:#d8cdb6}.markdown table{border-collapse:collapse;margin:1.3em 0;font-size:13.5px}.markdown th,.markdown td{border-bottom:1px solid var(--border);padding:9px 13px;text-align:left}.markdown th{color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:600;border-bottom-color:var(--border-2)}.markdown tr:hover td{background:#ffffff05}.markdown img{max-width:100%;border-radius:8px;border:1px solid var(--border)}.markdown hr{border:none;border-top:1px solid var(--border);margin:2.2em 0}.markdown table.frontmatter{margin:0 0 1.8em;font-size:12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;border-collapse:separate;border-spacing:0}.markdown table.frontmatter th{text-transform:none;letter-spacing:0;font-size:11.5px;color:var(--text-faint);font-weight:600;text-align:left;white-space:nowrap;vertical-align:top;padding:6px 14px 6px 12px;border-bottom:1px solid var(--border)}.markdown table.frontmatter td{color:var(--text-dim);padding:6px 12px 6px 0;border-bottom:1px solid var(--border)}.markdown table.frontmatter tr:last-child th,.markdown table.frontmatter tr:last-child td{border-bottom:none}.markdown table.frontmatter code{white-space:pre-wrap;font-size:11px}.markdown input[type=checkbox]{accent-color:var(--accent)}.htmlview{display:block;width:100%;height:calc(100vh - 150px);border:1px solid var(--border);border-radius:var(--r-card);background:#fff}.notfound{margin-top:12vh;text-align:center;color:var(--text-dim)}.notfound h1{color:var(--text);font-size:1.4em;margin-bottom:.5em}.notfound code{background:var(--hover);border:1px solid var(--border);padding:.15em .5em;border-radius:6px}.notfound .nf-sub{max-width:440px;margin:12px auto 20px;font-size:13px;color:var(--text-faint);line-height:1.6}pre.plain{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--r-card);padding:14px 16px;overflow-x:auto;font:12.5px/1.6 var(--mono);color:#c6cbd3;white-space:pre-wrap;overflow-wrap:anywhere;max-width:900px}#content.markdown{min-width:0}.filecard{margin-top:15vh;text-align:center;color:var(--text-dim)}.filecard .name{font-size:1.2em;color:var(--text);margin-bottom:.3em}.filecard .btn{margin-top:14px} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-widest:.1em;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-background:#0a0b0d;--color-foreground:#eef0f3;--color-popover:#15171b;--color-popover-foreground:#eef0f3;--color-primary:#f5a623;--color-primary-foreground:#1a1204;--color-secondary:#ffffff08;--color-secondary-foreground:#eef0f3;--color-muted:#ffffff0f;--color-muted-foreground:#9aa0a9;--color-accent:#ffffff0f;--color-accent-foreground:#eef0f3;--color-destructive:#f26d6d;--color-border:#ffffff12;--color-input:#ffffff1c;--color-ring:#d3861a;--radius-ctl:7px}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-4{top:calc(var(--spacing) * 4)}.top-20{top:calc(var(--spacing) * 20)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.left-2{left:calc(var(--spacing) * 2)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.scroll-my-1{scroll-margin-block:var(--spacing)}.scroll-py-1{scroll-padding-block:var(--spacing)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[2px\]{border-radius:2px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-input{border-color:var(--color-input)}.bg-background{background-color:var(--color-background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted\/50{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-foreground{fill:var(--color-foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--color-background)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--color-primary)}.selection\:bg-primary::selection{background-color:var(--color-primary)}.selection\:text-primary-foreground ::selection{color:var(--color-primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--color-primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-destructive\/90:hover{background-color:#f26d6de6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--color-destructive) 90%,transparent)}}.hover\:bg-muted\/50:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:#f5a623e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:#ffffff06}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:#d3861a80}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--color-destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing) * 8)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--color-muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--color-accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--color-accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing) * 12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--color-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--color-muted-foreground)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--color-muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--color-destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:#f26d6d1a}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--color-destructive)}@media(min-width:40rem){.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(prefers-color-scheme:dark){.dark\:border-input{border-color:var(--color-input)}.dark\:bg-destructive\/60{background-color:#f26d6d99}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60{background-color:color-mix(in oklab,var(--color-destructive) 60%,transparent)}}.dark\:bg-input\/30{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30{background-color:color-mix(in oklab,var(--color-input) 30%,transparent)}}@media(hover:hover){.dark\:hover\:bg-accent\/50:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.dark\:hover\:bg-input\/50:hover{background-color:#ffffff0e}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:hover{background-color:color-mix(in oklab,var(--color-input) 50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:#f26d6d66}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:#f26d6d66}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20[data-variant=destructive]:focus{background-color:#f26d6d33}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--color-muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing) * 12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing) * 3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing) * 5)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--color-muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant=destructive]>*):is(svg){color:var(--color-destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}:root{--bg: #0a0b0d;--bg-side: #0c0e10;--bg-raise: #15171b;--surface: rgba(255,255,255,.03);--hover: rgba(255,255,255,.06);--border: rgba(255,255,255,.07);--border-2: rgba(255,255,255,.11);--code-bg: #0d0f12;--text: #eef0f3;--text-dim: #9aa0a9;--text-faint: #868b93;--text-ghost: #666b74;--accent: #f5a623;--accent-bright: #ffcf85;--accent-dim: #d3861a;--accent-press: #e0951a;--glow: rgba(245,166,35,.13);--add: #4cc38a;--del: #f26d6d;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", Roboto, sans-serif;--r-ctl: 7px;--r-card: 10px;--r-over: 14px}*{box-sizing:border-box}[hidden]{display:none!important}html,body{height:100%;margin:0}#root{display:contents}body{display:flex;background:var(--bg);color:var(--text);font:13px/1.5 var(--ui);letter-spacing:-.006em;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--glow);color:var(--accent-bright)}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:5px}.sprite{position:absolute}.ico{width:16px;height:16px;flex:none;stroke:currentColor;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}button,input,a.btn{font-family:inherit}#sidebar{width:264px;min-width:210px;background:var(--bg-side);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}#vault{display:flex;align-items:center;gap:9px;height:52px;padding:0 12px 0 14px;border-bottom:1px solid var(--border);position:relative;z-index:45}#vault-badge{width:22px;height:22px;border-radius:6px;flex:none;display:grid;place-items:center;font-size:13px;line-height:1;background:linear-gradient(160deg,#ffcf85,#f5a623 55%,#d3861a);box-shadow:0 1px #ffffff59 inset,0 2px 6px -1px #f5a62366}#vault-name{font-weight:600;font-size:13px;letter-spacing:-.01em;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vault-actions{display:flex;align-items:center;gap:4px}#vault #signout,.icon-btn2{width:28px;height:28px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;color:var(--text-ghost);background:transparent;border:none;cursor:pointer;text-decoration:none}#vault #signout:hover,.icon-btn2:hover{color:var(--text);background:var(--hover)}#vault #signout .ico,.icon-btn2 .ico{width:16px;height:16px}#projects{flex:none;max-height:32%;overflow-y:auto;padding:10px 8px 8px;border-bottom:1px solid var(--border)}.nav-head{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--text-faint)}.nav-add{display:grid;place-items:center;width:18px;height:18px;border:none;background:transparent;color:var(--text-ghost);cursor:pointer;border-radius:5px}.nav-add .ico{width:14px;height:14px}.nav-add:hover{color:var(--text);background:var(--hover)}#projects ul{list-style:none;margin:0;padding:0}#projects .row{display:flex;align-items:center;gap:9px;height:31px;padding:0 8px;border-radius:7px;color:var(--text-dim);cursor:pointer;position:relative;white-space:nowrap;overflow:hidden}.proj-mark{width:17px;height:17px;border-radius:5px;flex:none;display:grid;place-items:center;font-size:10px;font-weight:700;color:#0a0b0d;letter-spacing:-.02em;text-transform:uppercase}#projects .row .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}#projects .row:hover{background:var(--hover);color:var(--text)}#projects .row.active{background:var(--glow);color:var(--accent-bright)}#projects .row.active:before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:2px;border-radius:2px;background:var(--accent)}#tree{flex:1;overflow-y:auto;padding:8px 8px 24px}.tguide{position:absolute;top:0;bottom:0;width:1px;background:var(--border);pointer-events:none}#tree .row{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;border-radius:7px;color:var(--text-dim);cursor:pointer;position:relative;white-space:nowrap;overflow:hidden}#tree .row:hover{background:var(--hover);color:var(--text)}#tree .row.active{background:var(--glow);color:var(--accent-bright)}#tree .row.active:before{content:"";position:absolute;left:0;top:5px;bottom:5px;width:2px;border-radius:2px;background:var(--accent)}#tree .chev{width:14px;height:14px;flex:none;color:var(--text-ghost);transition:transform .12s;display:flex;align-items:center;justify-content:center}#tree .chev .ico{width:13px;height:13px}#tree .ticon{flex:none;display:flex;color:var(--text-ghost)}#tree .ticon .ico{width:15px;height:15px}#tree .row:hover .ticon,#tree .row:hover .chev{color:var(--text-faint)}#tree .row.active .ticon,#tree .row.active .chev{color:var(--accent)}#tree .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}#tree .file .label{font-size:12.5px}#tree .file .chev{visibility:hidden}#tree .row.collapsed .chev{transform:rotate(-90deg)}.field-err{color:var(--del);font-size:12px;margin:6px 2px 0}.modal,#palette{translate:none}.admin-card-table{padding:0;overflow:hidden}.admin-table{width:100%;border-collapse:collapse}.admin-table tr:last-child td{border-bottom:none}.admin-table th{text-align:left;font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint);padding:6px 10px;border-bottom:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none}.admin-table th:hover{color:var(--text-dim)}.admin-table td{padding:0;border-bottom:1px solid var(--border)}.admin-table tr.admin-item{display:table-row}.admin-table tr.admin-item td{padding:8px 10px}.admin-table tr.admin-item td:first-child{width:100%}.nav-menu{list-style:none;margin:6px 0 0;padding:0}.nav-menu .row .ico{width:15px;height:15px;flex:none;color:var(--text-ghost)}.nav-menu .row.active .ico{color:var(--accent-bright)}.proj-row{display:flex;align-items:center;gap:4px;padding:0 10px 4px 12px}#project-select{flex:1;min-width:0;height:30px;padding:0 9px;display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);border-radius:var(--r-ctl);background:var(--surface);color:var(--text);font:inherit;font-size:12.5px;font-weight:500;cursor:pointer;white-space:nowrap;outline:none}#project-select>span:last-of-type{overflow:hidden;text-overflow:ellipsis}#project-select:hover{background:var(--hover);border-color:var(--border-2)}#project-select svg{color:var(--text-ghost)}.proj-menu{z-index:80;min-width:var(--radix-select-trigger-width, 200px);border:1px solid var(--border-2);border-radius:9px;padding:4px;background:var(--bg-raise);box-shadow:0 10px 32px #00000059}.proj-menu [role=option]{font-size:12.5px;color:var(--text-dim);border-radius:6px;outline:none}.proj-menu [role=option][data-highlighted]{background:var(--hover);color:var(--text)}#accountbar{position:relative;border-top:1px solid var(--border);padding:7px 10px}#account-btn{width:100%;display:flex;align-items:center;gap:9px;text-align:left;padding:6px 8px;border:none;border-radius:7px;background:transparent;color:var(--text-dim);cursor:pointer;font:inherit}#account-btn:hover{background:var(--hover);color:var(--text)}#account-btn .avatar{width:26px;height:26px;flex:none;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:700}#account-btn .acct{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}#account-btn .acct b{font-size:12.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#account-btn .acct small{font-size:11px;color:var(--text-ghost);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#account-btn>.ico{width:14px;height:14px;color:var(--text-ghost)}#account-menu{min-width:var(--radix-dropdown-menu-trigger-width, 220px);padding:5px;border:1px solid var(--border-2);border-radius:9px;background:var(--bg-raise);box-shadow:0 10px 32px #00000059;display:flex;flex-direction:column;z-index:80;outline:none}#account-menu [role=menuitem]{outline:none}#account-menu [role=menuitem][data-highlighted]{background:var(--hover);color:var(--text)}#account-menu .menu-sec{padding:7px 9px 3px;font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-faint)}#account-menu [role=menuitem]{display:flex;align-items:center;gap:8px;padding:7px 9px;border:none;border-radius:6px;background:transparent;text-align:left;color:var(--text-dim);font:inherit;font-size:12.5px;cursor:pointer;text-decoration:none}#account-menu [role=menuitem]:hover{background:var(--hover);color:var(--text)}#account-menu [role=menuitem] b{font-weight:600}#account-menu [role=menuitem] .ico{width:15px;height:15px}#account-menu #signout{color:var(--danger, #e5534b)}#account-menu #signout:hover{color:var(--danger, #e5534b);background:var(--hover)}#main{flex:1;display:flex;flex-direction:column;min-width:0}#topbar{position:relative;display:flex;align-items:center;gap:9px;height:52px;padding:0 16px;border-bottom:1px solid var(--border)}.icon-btn{display:none;width:34px;height:34px;border:none;background:transparent;color:var(--text-dim);cursor:pointer;border-radius:7px;align-items:center;justify-content:center}.icon-btn:hover{color:var(--text);background:var(--hover)}#crumb{font-size:12.5px;color:var(--text);font-weight:500;letter-spacing:-.01em;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#crumb .crumb-seg{color:var(--text-dim);cursor:pointer}#crumb .crumb-seg:hover{color:var(--accent-bright)}#crumb .crumb-sep{color:var(--text-ghost);margin:0 5px}#meta{flex:1;min-width:0;font-size:12px;color:var(--text-faint);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{display:inline-flex;align-items:center;gap:6px;flex:none;height:30px;padding:0 11px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font-size:12.5px;font-weight:500;cursor:pointer;text-decoration:none}.btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.btn .ico{width:15px;height:15px}.btn.ghost{color:var(--text-dim)}.tipcard{display:flex;align-items:center;gap:7px;white-space:nowrap;padding:6px 9px;border-radius:8px;border:1px solid var(--border-2);background:var(--surface-solid, var(--bg-raise));color:var(--text);font-size:12.5px;font-weight:500;box-shadow:0 8px 24px #00000059;z-index:80}.tipcard kbd{font:11px var(--ui);color:var(--text-faint);background:var(--hover);border:1px solid var(--border-2);border-radius:5px;padding:1px 5px}#more-menu{position:absolute;right:12px;top:calc(100% - 4px);z-index:80;background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-card);box-shadow:0 18px 44px -14px #000000bf;padding:6px;min-width:168px}.more-item{display:block;width:100%;text-align:left;min-height:40px;padding:0 12px;background:transparent;border:none;cursor:pointer;color:var(--text);font:inherit;font-size:13.5px;border-radius:var(--r-ctl)}.more-item:hover{background:var(--hover)}#content{flex:1;overflow-y:auto;padding:44px 40px 110px;scroll-behavior:smooth}.empty{color:var(--text-faint);text-align:center;margin-top:22vh}.empty-hint{display:block;margin-top:6px;font-size:12px;color:var(--text-ghost)}.onboard{max-width:560px;margin:8vh auto 0}.onboard h1{font-size:25px;font-weight:640;letter-spacing:-.02em;margin:0 0 8px;color:#f4f6f9}.onboard>p{color:var(--text-dim);margin:0 0 28px;font-size:14px}.ob-card{background:var(--bg-side);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 22px;margin-bottom:14px}.ob-card h3{margin:0 0 6px;font-size:14.5px;font-weight:600}.ob-card p{margin:0 0 14px;font-size:13px;color:var(--text-dim)}.ob-row{display:flex;gap:9px}.ob-row input{flex:1;height:34px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:13px;outline:none}.ob-row input:focus{border-color:var(--accent);background:var(--hover)}.pbtn{display:inline-flex;align-items:center;gap:6px;flex:none;height:32px;padding:0 14px;border-radius:var(--r-ctl);border:none;background:var(--accent);color:#241704;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.pbtn:hover{background:var(--accent-bright)}.pbtn .ico{width:15px;height:15px}.danger-btn{display:inline-flex;align-items:center;height:32px;padding:0 14px;border-radius:var(--r-ctl);border:none;background:#b3382e;color:#fff;font-size:13px;font-weight:600;cursor:pointer}.danger-btn:hover{background:#c94336}.admin{max-width:760px}.admin h1{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 6px;color:#f4f6f9}.admin h3{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--text-faint);font-weight:600;margin:30px 0 10px}.admin-sub{color:var(--text-dim);font-size:13.5px;margin:0 0 6px;line-height:1.55}.admin-h{display:flex;align-items:center;justify-content:space-between;margin:30px 0 10px}.admin-h h3{margin:0}.admin-row{display:flex;gap:9px;margin-bottom:8px}.admin-row input{flex:1;height:34px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:13px;outline:none}.admin-row input:focus{border-color:var(--accent);background:var(--hover)}.admin-list{border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;background:var(--bg-side)}.admin-item{display:flex;align-items:center;gap:11px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13.5px}.admin-item:last-child{border-bottom:none}.admin-item:hover{background:#ffffff04}.ai-main{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.ai-main.mono{font:12px var(--mono);color:var(--text-dim);cursor:pointer}.ai-tag{font-size:11.5px;color:var(--text-faint);flex:none}.admin-item select{height:28px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:0 8px;font:inherit;font-size:12.5px;cursor:pointer}.admin-item select:hover{border-color:var(--border-2)}.ai-btn,.ai-del{flex:none;height:27px;padding:0 11px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font:inherit;font-size:12px;font-weight:500;cursor:pointer}.ai-btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.ai-del{color:var(--del);border-color:transparent;background:transparent}.ai-del:hover{background:#f26d6d1f;color:#ff8b8b}.admin-empty{padding:14px;color:var(--text-faint);font-size:13px}.admin-item.toggle{cursor:pointer;align-items:flex-start}.admin-item.toggle .ai-main{white-space:normal}.tg-label{font-size:13.5px;font-weight:550;color:var(--text)}.tg-desc{font-size:12px;color:var(--text-faint);margin-top:3px;line-height:1.5}.admin-item.toggle input{width:16px;height:16px;margin-top:2px;accent-color:var(--accent);flex:none}.dirlist{max-width:704px;margin:0 auto}.dl-title{display:flex;align-items:center;gap:10px;font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.dl-title-icon{display:flex;color:var(--accent)}.dl-title-icon .ico{width:20px;height:20px}.dl-sub{color:var(--text-faint);font-size:12.5px;margin:0 0 18px}.dl-items{border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;background:var(--bg-side)}.dl-row{display:flex;align-items:center;gap:11px;padding:10px 14px;border-bottom:1px solid var(--border);cursor:pointer}.dl-row:last-child{border-bottom:none}.dl-row:hover{background:var(--hover)}.dl-row .ticon{flex:none;display:flex;color:var(--text-ghost)}.dl-row .ticon .ico{width:16px;height:16px}.dl-row:hover .ticon{color:var(--text-faint)}.dl-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;color:var(--text)}.dl-meta{flex:none;font-size:12px;color:var(--text-faint);font-variant-numeric:tabular-nums}.heatdot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--accent)}.heatdot.lvl1{opacity:.3}.heatdot.lvl2{opacity:.55}.heatdot.lvl3{opacity:.8}.heatdot.lvl4{opacity:1;box-shadow:0 0 6px #f5a6238c}.dl-empty{padding:24px 14px;color:var(--text-faint);font-size:13px;border:1px dashed var(--border);border-radius:var(--r-card);text-align:center}.dl-h3{margin:28px 0 8px;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--text-faint);font-weight:600}.dl-hlist{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);overflow:hidden;max-width:none}.dl-hlist .hentry:last-child{border-bottom:none}.hentry.clickable{cursor:pointer}.hentry.clickable:hover{background:var(--hover)}.dl-more{margin-top:10px}#vault-name.vault-link{cursor:pointer}#vault-name.vault-link:hover{color:var(--accent-bright)}.guide{max-width:760px;margin:0 auto}.gd-tabs{display:flex;gap:2px;margin:20px 0 16px;border-bottom:1px solid var(--border);overflow-x:auto}.gd-tab{font:inherit;font-size:13px;font-weight:600;padding:7px 12px 9px;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;color:var(--text-faint);cursor:pointer;white-space:nowrap}.gd-tab:hover{color:var(--text)}.gd-tab.active{color:var(--accent-bright);border-bottom-color:var(--accent)}.gd-step{margin:0 0 18px}.gd-step-head{display:flex;align-items:center;gap:10px;margin-bottom:3px}.gd-num{flex:none;width:22px;height:22px;border-radius:50%;background:var(--glow);color:var(--accent-bright);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}.gd-step-title{font-weight:600;font-size:14px;color:var(--text)}.gd-desc{margin:2px 0 8px 32px;color:var(--text-faint);font-size:13px;line-height:1.5}.gd-extra{font-size:12.5px;margin-top:6px}.gd-code{position:relative;margin:6px 0 6px 32px;padding:10px 72px 10px 12px;background:var(--bg-raise);border:1px solid var(--border);border-radius:var(--r-card);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.6;color:var(--text);overflow-x:auto;white-space:pre}.gd-copy{position:absolute;top:7px;right:7px;font:inherit;font-family:inherit;font-size:11px;font-weight:600;padding:3px 9px;border-radius:6px;border:1px solid var(--border-2);background:var(--bg-raise);color:var(--text-faint);cursor:pointer;box-shadow:-14px 0 12px -6px var(--bg-raise)}.gd-copy:hover{color:var(--accent-bright);border-color:var(--accent-dim)}.gd-done{margin:22px 0 8px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);color:var(--text-faint);font-size:13px;line-height:1.5}.home-insights{margin-top:30px;padding-top:22px;border-top:1px solid var(--border)}.insights{max-width:760px;margin:0 auto}.in-title{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.in-title .in-scope{color:var(--text-ghost);font-weight:500;font-size:15px}.in-lens{display:flex;gap:6px;margin:0 0 14px}.in-lens-btn{font:inherit;font-size:12px;padding:5px 12px;border-radius:999px;border:1px solid var(--border);background:none;color:var(--text-faint);cursor:pointer}.in-lens-btn:hover{color:var(--text)}.in-lens-btn.active{color:var(--accent);border-color:var(--accent)}.in-chart{width:100%;height:auto;border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);margin-bottom:6px}.in-axis{stroke:var(--border);stroke-width:1}.in-threshold{stroke:var(--border);stroke-width:1;stroke-dasharray:4 4}.in-danger-zone{fill:#f26d6d0d}.in-label{fill:var(--text-ghost);font-size:11px}.in-quad{fill:var(--text-ghost);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em}.in-quad-danger{fill:#e07070}.in-pt{fill:var(--accent);opacity:.5;cursor:pointer}.in-pt:hover{opacity:1}.in-pt.cold{fill:var(--text-ghost);opacity:.25}.in-pt.danger{fill:#e05d5d;opacity:.6}.in-treemap{background:#0c0d10}.in-tm-group{fill:none;stroke:var(--border);stroke-width:1;cursor:pointer;pointer-events:all}.in-tm-glabel{fill:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.05em;cursor:pointer}.in-tm-cell{cursor:pointer}.in-tm-cell:hover{stroke:#fff;stroke-width:1}.in-tm-label{fill:#0c0d10;font-size:10.5px;font-weight:620;cursor:pointer;pointer-events:none}.in-hotpath{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);overflow:hidden}.in-hp-row{display:flex;align-items:center;gap:10px;padding:6px 12px;border-bottom:1px solid var(--border);cursor:pointer}.in-hp-row:last-child{border-bottom:none}.in-hp-row:hover{background:var(--hover)}.in-hp-name{flex:0 0 300px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--text)}.in-hp-name.danger{color:var(--accent)}.in-hp-bar{flex:1;display:flex;height:10px;border-radius:3px;overflow:hidden}.in-hp-agent{background:var(--accent)}.in-hp-human{background:#5b8def}.in-hp-count{flex:none;width:40px;text-align:right;font-size:11.5px;color:var(--text-faint);font-variant-numeric:tabular-nums}.in-legend{margin:8px 2px 0;font-size:11.5px;color:var(--text-faint)}.in-sw{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}.in-sw.agent{background:var(--accent)}.in-sw.human{background:#5b8def}.in-matrix rect{transition:opacity .1s}.in-matrix rect:hover{opacity:.85}.history{max-width:860px}.hentry{padding:11px 12px;border-bottom:1px solid var(--border)}.hentry:hover{background:#ffffff04}.hline{display:flex;gap:10px;align-items:center}.hkind{display:inline-flex;color:var(--add)}.hkind .ico{width:13px;height:13px}.hentry.edit .hkind{color:var(--accent)}.hentry.delete .hkind{color:var(--del)}.htag{flex:none;font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:1px 6px;border-radius:4px}.hentry.add .htag{color:var(--add);background:#4cc38a1f}.hentry.edit .htag{color:var(--accent-bright);background:var(--glow)}.hentry.delete .htag{color:#ff8b8b;background:#f26d6d1f}.hpath{font-weight:500;cursor:pointer;color:var(--text);font-size:13px}.hpath:hover{color:var(--accent-bright)}.htime{margin-left:auto;color:var(--text-faint);font-size:12px;font-variant-numeric:tabular-nums}.hmeta{display:flex;align-items:center;gap:14px;margin-top:4px;padding-left:23px;font-size:12px;color:var(--text-dim)}.hdev,.hsize{color:var(--text-faint)}.hsize{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.hnote{margin-top:4px;padding-left:23px;font-size:12px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.hnote:hover{color:var(--text)}.hnote.open{white-space:normal;overflow-wrap:anywhere}.hnote:before{content:"› ";color:var(--text-ghost)}.hnote a{color:var(--accent-bright);text-decoration:none}.hnote a:hover{text-decoration:underline}#palette{position:fixed;top:12vh;left:50%;transform:translate(-50%);z-index:151;display:block;width:min(560px,92vw);background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-over);box-shadow:0 24px 70px -18px #000c;overflow:hidden;outline:none;padding:0}#palette-inputwrap{display:flex;align-items:center;gap:11px;padding:14px 16px;border-bottom:1px solid var(--border)}#palette-inputwrap [data-slot=command-input-wrapper]{flex:1;display:flex;border-bottom:0;padding:0;height:auto}#palette-inputwrap [data-slot=command-input-wrapper]>svg:not(.ico){display:none}#palette input,#palette input:focus{border:none;background:transparent;box-shadow:none;outline:none;padding:0}#palette-inputwrap .ico{width:17px;height:17px;color:var(--text-faint)}#palette-input{flex:1;width:100%;border:none;background:transparent;color:var(--text);font:inherit;font-size:15px;letter-spacing:-.01em;outline:none;padding:0}#palette-input::placeholder{color:var(--text-ghost)}#palette-results{list-style:none;margin:0;padding:8px;max-height:46vh;overflow-y:auto}#palette-results [cmdk-item]{display:flex;align-items:center;gap:11px;height:38px;padding:0 10px;border-radius:9px;cursor:pointer;color:var(--text-dim);font-size:13.5px}#palette-results [cmdk-item][data-selected=true]{background:var(--glow)}#palette-results [cmdk-item][data-selected=true] .picon{color:var(--accent)}#palette-results [cmdk-item][data-selected=true] .plabel,#palette-results [cmdk-item][data-selected=true] .plabel b{color:var(--accent-bright)}#palette-results li{display:flex;align-items:center;gap:11px;height:38px;padding:0 10px;border-radius:9px;cursor:pointer;color:var(--text-dim);font-size:13.5px}#palette-results li.selected{background:var(--glow)}#palette-results li.selected .picon{color:var(--accent)}#palette-results li.selected .plabel,#palette-results li.selected .plabel b{color:var(--accent-bright)}#palette-results li .picon{width:18px;flex:none;display:flex;justify-content:center;color:var(--text-faint)}#palette-results li .picon .ico{width:15px;height:15px}#palette-results li .plabel{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}#palette-results li .plabel b{color:var(--accent-bright);font-weight:600}#palette-results li .pkind{flex:none;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-ghost)}#palette-results .pempty{color:var(--text-faint);cursor:default;justify-content:center;height:auto;padding:14px}#palette-hint{padding:9px 16px;border-top:1px solid var(--border);font-size:11px;color:var(--text-ghost)}[data-slot=dialog-overlay]{position:fixed;inset:0;background:#06070999;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:150}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:151;display:block;background:var(--bg-raise);border:1px solid var(--border-2);border-radius:var(--r-over);padding:22px 24px;width:min(460px,calc(100vw - 40px));box-shadow:0 24px 70px -18px #000c;outline:none}.modal h3{margin:0 0 10px;font-size:16px;font-weight:620;letter-spacing:-.01em}.modal p{margin:0 0 16px;font-size:13.5px;color:var(--text-dim);line-height:1.55}.modal p b{color:var(--text)}.modal-url{font:12px var(--mono);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-ctl);padding:9px 11px;color:var(--text-dim);word-break:break-all;margin-bottom:16px}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.modal-label{display:block;font-size:12.5px;color:var(--text-dim);margin:0 0 6px}.modal-msg{margin:0 0 16px;font-size:13.5px;color:var(--text-dim);line-height:1.55}.modal-input{width:100%;height:36px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:14px;margin-bottom:16px;outline:none}.modal-input:focus{border-color:var(--accent);background:var(--hover)}[data-sonner-toast]{background:var(--bg-raise)!important;color:var(--text)!important;border:1px solid var(--border-2)!important;border-radius:10px!important;font-size:13.5px!important;box-shadow:0 18px 44px -12px #000000b3!important}[data-sonner-toast][data-type=error]{border-color:#f26d6d80!important;color:#ffb0aa!important}#sb-backdrop{display:none}@media(max-width:900px){#sidebar{position:fixed;z-index:60;top:0;left:0;height:100%;transform:translate(-100%);transition:transform .2s ease;box-shadow:0 0 40px #0009}body.sb-open #sidebar{transform:translate(0)}body.sb-open #sb-backdrop{display:block;position:fixed;inset:0;background:#0000008c;z-index:50}.icon-btn{display:inline-flex;width:44px;height:44px}#content{padding:24px 18px 70px}#topbar{padding:0 8px;gap:4px}.btn .lbl{display:none}#topbar .btn{min-width:44px;min-height:44px;padding:0;justify-content:center;gap:0}#topbar .btn .ico{width:18px;height:18px}#more-btn:not([hidden]){display:inline-flex}#history-btn,#upload-btn,#download{display:none!important}#meta{display:none}#crumb{flex:1}#vault{padding:0 8px 0 12px}.icon-btn2,#signout,#tree .row,#projects .row{height:44px}#account-btn,#project-select{min-height:44px}.nav-add{min-width:44px;min-height:44px}.markdown,.admin,.onboard,.history,.dirlist{max-width:100%}.markdown table,pre.plain{display:block;overflow-x:auto;max-width:100%}.ob-row{flex-direction:column}.ob-row input{flex:none;min-height:44px}.admin-item{flex-wrap:wrap;row-gap:8px;padding:12px 14px}.admin-item select{height:44px}.ai-btn,.ai-del{height:auto;min-height:44px;padding:0 12px}.admin-item .ai-main{flex:1 1 100%;white-space:normal;overflow-wrap:break-word}.gd-code{min-height:62px;padding-top:12px;padding-bottom:12px}.gd-copy{min-height:44px;padding:0 14px}.gd-tab{min-height:44px}.in-lens-btn{min-height:44px;padding:0 14px}.modal-input{height:44px}.modal-actions button,.pbtn,#palette-results li{height:auto;min-height:44px}.more-item{min-height:44px}}.modal-actions .ai-del{margin-right:auto}@media(max-width:430px){.dl-meta{display:none}.ai-tag{font-size:11px}.htime{white-space:nowrap;font-size:12px}.hline{flex-wrap:wrap}.modal-actions .ai-del{flex:0 0 100%}}.markdown{max-width:704px;width:100%;margin:0 auto}.markdown h1,.markdown h2,.markdown h3,.markdown h4{color:#f4f6f9;line-height:1.25;letter-spacing:-.018em;margin:1.5em 0 .5em;text-wrap:balance}.markdown h1:first-child{margin-top:0}.markdown h1{font-size:1.85em;font-weight:660;letter-spacing:-.024em}.markdown h2{font-size:1.32em;font-weight:620;margin-top:1.7em}.markdown h3{font-size:1.08em;font-weight:620}.markdown p,.markdown li{color:#c6cbd3;font-size:14.5px;line-height:1.72}.markdown p{margin:0 0 1em}.markdown strong{color:var(--text);font-weight:620}.markdown a{color:var(--accent-bright);text-decoration:none;border-bottom:1px solid rgba(245,166,35,.28)}.markdown a:hover{border-bottom-color:var(--accent)}.markdown ul,.markdown ol{margin:0 0 1em;padding-left:1.4em}.markdown li{margin-bottom:.4em}.markdown li::marker{color:var(--text-ghost)}.markdown code{background:var(--hover);border:1px solid var(--border);padding:.1em .4em;border-radius:5px;font:12.5px/1.5 var(--mono);color:#e4d9c4}.markdown pre{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--r-card);padding:14px 16px;overflow-x:auto;margin:1.3em 0}.markdown pre code{background:none;border:none;padding:0;color:#c6cbd3}.markdown blockquote{margin:1.3em 0;padding:.3em 1em;border-left:2px solid var(--accent);background:linear-gradient(90deg,var(--glow),transparent);border-radius:0 8px 8px 0;color:#d8cdb6}.markdown blockquote p{margin:.3em 0;color:#d8cdb6}.markdown table{border-collapse:collapse;margin:1.3em 0;font-size:13.5px}.markdown th,.markdown td{border-bottom:1px solid var(--border);padding:9px 13px;text-align:left}.markdown th{color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:600;border-bottom-color:var(--border-2)}.markdown tr:hover td{background:#ffffff05}.markdown img{max-width:100%;border-radius:8px;border:1px solid var(--border)}.markdown hr{border:none;border-top:1px solid var(--border);margin:2.2em 0}.markdown table.frontmatter{margin:0 0 1.8em;font-size:12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;border-collapse:separate;border-spacing:0}.markdown table.frontmatter th{text-transform:none;letter-spacing:0;font-size:11.5px;color:var(--text-faint);font-weight:600;text-align:left;white-space:nowrap;vertical-align:top;padding:6px 14px 6px 12px;border-bottom:1px solid var(--border)}.markdown table.frontmatter td{color:var(--text-dim);padding:6px 12px 6px 0;border-bottom:1px solid var(--border)}.markdown table.frontmatter tr:last-child th,.markdown table.frontmatter tr:last-child td{border-bottom:none}.markdown table.frontmatter code{white-space:pre-wrap;font-size:11px}.markdown input[type=checkbox]{accent-color:var(--accent)}.htmlview{display:block;width:100%;height:calc(100vh - 150px);border:1px solid var(--border);border-radius:var(--r-card);background:#fff}.notfound{margin-top:12vh;text-align:center;color:var(--text-dim)}.notfound h1{color:var(--text);font-size:1.4em;margin-bottom:.5em}.notfound code{background:var(--hover);border:1px solid var(--border);padding:.15em .5em;border-radius:6px}.notfound .nf-sub{max-width:440px;margin:12px auto 20px;font-size:13px;color:var(--text-faint);line-height:1.6}pre.plain{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--r-card);padding:14px 16px;overflow-x:auto;font:12.5px/1.6 var(--mono);color:#c6cbd3;white-space:pre-wrap;overflow-wrap:anywhere;max-width:900px}#content.markdown{min-width:0}.filecard{margin-top:15vh;text-align:center;color:var(--text-dim)}.filecard .name{font-size:1.2em;color:var(--text);margin-bottom:.3em}.filecard .btn{margin-top:14px} diff --git a/internal/webapp/static/index.html b/internal/webapp/static/index.html index 4b3a342..f844c14 100644 --- a/internal/webapp/static/index.html +++ b/internal/webapp/static/index.html @@ -5,8 +5,8 @@ BearDrive - - + +