diff --git a/internal/webapp/frontend/e2e/browse.spec.ts b/internal/webapp/frontend/e2e/browse.spec.ts index 846eed3..6fa5456 100644 --- a/internal/webapp/frontend/e2e/browse.spec.ts +++ b/internal/webapp/frontend/e2e/browse.spec.ts @@ -153,6 +153,24 @@ test("palette (⌘K) fuzzy-jumps to a file", async ({ page }) => { await expect(page.locator("#content h1")).toHaveText("Topic"); }); +// BEA-54: cmdk overwrites the `id` we pass its primitives, so every palette +// rule anchored on one was dead — the input lost its only author `color` and +// fell back to the UA's black. Anchors here are ours (#palette) or cmdk's own +// attributes, which is exactly what the fix relies on. +test("palette renders in the dark palette, not UA black (BEA-54)", async ({ page }) => { + await login(page); + await wikiId(page); + await page.keyboard.press("ControlOrMeta+k"); + const input = page.locator("#palette input"); + await input.fill("topic"); + await expect(input).toHaveCSS("color", "rgb(238, 240, 243)"); // --text, was rgb(0, 0, 0) + const sel = page.locator("#palette [cmdk-item][data-selected='true']"); + await expect(sel.locator(".plabel")).toHaveCSS("color", "rgb(255, 207, 133)"); // --accent-bright + await expect(sel.locator(".pkind")).toHaveCSS("text-transform", "uppercase"); + await expect(sel).toHaveCSS("background-color", "rgba(245, 166, 35, 0.13)"); // --glow + await page.keyboard.press("Escape"); +}); + test("share mints a public link that serves the file, revoke kills it", async ({ page }) => { await login(page); const pid = await wikiId(page); diff --git a/internal/webapp/frontend/src/components/Palette.tsx b/internal/webapp/frontend/src/components/Palette.tsx index 90fc0f4..4bd0cf8 100644 --- a/internal/webapp/frontend/src/components/Palette.tsx +++ b/internal/webapp/frontend/src/components/Palette.tsx @@ -103,8 +103,10 @@ export function Palette({
+ {/* No id here (nor on CommandList): cmdk writes its own after our + props, so one never reaches the DOM. Style off #palette / + #palette-inputwrap or [cmdk-*] instead. (BEA-54) */}
- + {items.length === 0 ? (
No matches — search covers file names, projects, and actions
) : ( diff --git a/internal/webapp/frontend/src/style.css b/internal/webapp/frontend/src/style.css index 05e272f..071abdf 100644 --- a/internal/webapp/frontend/src/style.css +++ b/internal/webapp/frontend/src/style.css @@ -2,6 +2,11 @@ Design language: Linear-grade restraint; the one accent (honey) is spent only on active state, the live/brand mark, and the palette selection. */ :root { + /* The app is dark-only. Without this, anything the UA paints itself — + scrollbars, autofill, select/date popups, and any control that loses its + author `color` — resolves in the light scheme. That trapdoor is how + BEA-54 turned one dead selector into black-on-black text. */ + color-scheme: dark; --bg: #0a0b0d; /* main ground */ --bg-side: #0c0e10; /* sidebar / panels */ --bg-raise: #15171b; /* palette, modals, elevated cards */ @@ -82,7 +87,7 @@ body { [role="dialog"] input[aria-invalid="true"] { border-color: var(--del); } [role="dialog"] input[aria-invalid="true"]:focus-visible { outline-color: var(--del); } button:disabled, .btn:disabled { cursor: default; } -input[type="checkbox"] { accent-color: var(--accent); width: 20px; height: 20px; color-scheme: dark; } +input[type="checkbox"] { accent-color: var(--accent); width: 20px; height: 20px; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; @@ -721,27 +726,27 @@ a.ai-main:hover { color: var(--accent); } #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; } +/* Never anchor palette rules on an id handed to a cmdk primitive: cmdk + spreads caller props and then writes its own generated `id`, so + `#palette-input` / `#palette-results` silently stopped matching at the + cmdk migration (b7ce76b) and the input fell back to the UA's black + `fieldtext`. `#palette` / `#palette-inputwrap` are our own elements and + survive; `[cmdk-*]` are cmdk's documented styling hooks. (BEA-54) */ +#palette input, #palette input:focus { flex: 1; width: 100%; border: none; background: transparent; box-shadow: none; color: var(--text); font: inherit; font-size: 15px; letter-spacing: -.01em; outline: none; padding: 0; } +#palette input::placeholder { color: var(--text-ghost); } #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 { color: var(--accent-bright); } -#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 { color: var(--accent-bright); } -#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 [cmdk-list] { list-style: none; margin: 0; padding: 8px; max-height: 46vh; overflow-y: auto; } +#palette [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 [cmdk-item][data-selected="true"] { background: var(--glow); } +#palette [cmdk-item][data-selected="true"] .picon { color: var(--accent); } +#palette [cmdk-item][data-selected="true"] .plabel { color: var(--accent-bright); } +#palette [cmdk-item][data-selected="true"] .plabel b { color: var(--accent-bright); } +#palette [cmdk-item] .picon { width: 18px; flex: none; display: flex; justify-content: center; color: var(--text-faint); } +#palette [cmdk-item] .picon .ico { width: 15px; height: 15px; } +#palette [cmdk-item] .plabel { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text); } +#palette [cmdk-item] .plabel b { color: var(--accent-bright); font-weight: 600; } +#palette [cmdk-item] .pkind { flex: none; font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-ghost); } +#palette [cmdk-list] .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); } /* ---- modal ---- */ @@ -878,7 +883,7 @@ a.ai-main:hover { color: var(--accent); } .modal-actions button { height: auto; min-height: 44px; } .modal-expiry select { height: 44px; } .pbtn { height: auto; min-height: 44px; } - #palette-results li { height: auto; min-height: 44px; } + #palette [cmdk-item] { height: auto; min-height: 44px; } .more-item { min-height: 44px; } } diff --git a/internal/webapp/static/assets/index-BZ355MrB.css b/internal/webapp/static/assets/index-BZ355MrB.css deleted file mode 100644 index bf9210d..0000000 --- a/internal/webapp/static/assets/index-BZ355MrB.css +++ /dev/null @@ -1 +0,0 @@ -@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;--radius-xl:.75rem;--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-card:#15171b;--color-card-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:#f5a623;--radius-ctl:7px}}@layer base,components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.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}.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}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.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}.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}.field-sizing-content{field-sizing:content}.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}.min-h-16{min-height:calc(var(--spacing) * 16)}.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}.resize{resize:both}.scroll-my-1{scroll-margin-block:var(--spacing)}.scroll-py-1{scroll-padding-block:var(--spacing)}.auto-rows-min{grid-auto-rows:min-content}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-start{align-items:flex-start}.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)}.gap-6{gap:calc(var(--spacing) * 6)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.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-xl{border-radius:var(--radius-xl)}.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-card{background-color:var(--color-card)}.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-card-foreground{color:var(--color-card-foreground)}.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)}.capitalize{text-transform:capitalize}.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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px 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-\[background-color\,border-color\,color\]{transition-property:background-color,border-color,color;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-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:#f5a62380}@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-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.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-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.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}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing) * 6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}: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;--page-read: 768px;--page-app: 768px;--page-wide: 1200px;--hero-top: clamp(32px, 8vh, 88px)}@font-face{font-family:"Jersey 10";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/jersey-10-COnnvJff.woff2) format("woff2")}@font-face{font-family:Logo Fallback;src:local("Helvetica Neue"),local("Arial"),local("Segoe UI"),local("Roboto");size-adjust:73%}*{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}:focus-visible{outline-color:var(--accent)}.admin input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox]{accent-color:var(--accent);width:20px;height:20px;color-scheme:dark}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.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{flex:none;display:grid;place-items:center;color:var(--accent)}#vault-name{font-family:"Jersey 10","Logo Fallback",var(--ui);font-size:18px;font-weight:400;font-synthesis:none;letter-spacing:.01em;line-height:1;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}.proj-mark svg{width:11px;height:11px}.proj-menu [data-slot=select-item]{display:flex;align-items:center;gap:8px}#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}.admin-table{width:100%;border-collapse:collapse;table-layout:fixed}.admin-table td .ai-main,.admin-table td a.ai-main,.admin-table td .ai-copy,.admin-table td .ai-tag{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-table th:last-child,.admin-table td:last-child{width:186px;text-align:right}.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:0;border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none}.admin-table td{padding:0;border-bottom:1px solid var(--border);overflow:hidden;text-overflow:ellipsis}.admin-table tr.admin-item{display:table-row}.admin-table tr.admin-item td{padding:8px 10px}.admin-card-table{overflow-x:auto}.shares-table .admin-table th:last-child,.shares-table .admin-table td:last-child{width:110px}.share-banner{margin:0 0 18px;padding:12px 14px;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--r-ctl);background:var(--surface)}.share-banner .sb-head{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text)}.share-banner .sb-head .ico,.share-banner .sb-head svg{width:15px;height:15px;flex:none;color:var(--accent)}.share-banner .sb-count{color:var(--text-faint);font-size:12px}.share-banner .sb-note{margin:6px 0 10px;font-size:12.5px;line-height:1.55;color:var(--text-faint);max-width:64ch}.share-banner .sb-link{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-top:8px;border-top:1px solid var(--border)}.share-banner .sb-link+.sb-link{margin-top:8px}.share-banner .sb-url{flex:1 1 260px;min-width:0;font-size:12px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.share-banner .sb-meta{font-size:11.5px;color:var(--text-faint)}.share-banner .sb-actions{display:flex;align-items:center;gap:6px;margin-left:auto}.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-faint);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 .plan-chip{margin-left:auto;color:var(--accent);border-color:var(--border-2)}#account-menu #signout{color:var(--del)}#account-menu #signout:hover{color:var(--del);background:var(--hover)}#billing-view .plan-chip{color:var(--accent)}.plan-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:700px){.plan-grid{grid-template-columns:1fr}}.usage-bar{background:var(--surface);border:1px solid var(--border);border-radius:4px;height:6px;overflow:hidden}.usage-bar>div{background:var(--accent);height:100%}.plan-price{font-size:20px;font-weight:700;margin:0 0 10px}.plan-price small{font-size:12px;color:var(--text-dim);font-weight:500}.muted-note{color:var(--text-dim);font-size:13px}#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}.page{width:100%;max-width:var(--page-app);margin-inline:auto;min-width:0}.page.read{max-width:var(--page-read)}.page.wide{max-width:var(--page-wide)}.empty{color:var(--text-faint);text-align:center;margin-top:var(--hero-top)}.empty-hint{display:block;margin-top:6px;font-size:12px;color:var(--text-faint)}.onboard{max-width:560px;margin:var(--hero-top) 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-card.ob-start{border-color:var(--border-2);box-shadow:inset 2px 0 0 var(--accent)}.ob-card.ob-start .pbtn{margin-top:2px}.ob-alt{margin:12px 0 0}.ob-alt a{color:var(--text-faint);font-size:12.5px;font-weight:600;text-decoration:none}.ob-alt a:hover{color:var(--text)}.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}[data-slot=input],[data-slot=textarea]{font:inherit;color:var(--text)}[data-slot=input][aria-invalid=true]:focus-visible,[data-slot=textarea][aria-invalid=true]:focus-visible{border-color:var(--del)}[data-slot=card],[data-slot=dropdown-menu-content]{border-color:var(--border)}.project-settings{display:flex;flex-direction:column;gap:14px}.project-settings>h2{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.ps-form{display:flex;flex-direction:column;gap:18px}.ps-field{display:flex;flex-direction:column;gap:7px}.ps-field label{font-size:12.5px;color:var(--text-dim)}.ps-opt{color:var(--text-ghost);font-weight:400}.ps-icon-row{display:flex;align-items:center;gap:10px}.ps-icon-row .proj-mark{width:26px;height:26px;border-radius:7px}.ps-icon-row .proj-mark svg{width:15px;height:15px}.ps-meta{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.ps-meta .field-err{flex:0 1 auto;margin:0}.ps-count{font-size:11.5px;color:var(--text-faint);font-variant-numeric:tabular-nums}.ps-actions{display:flex;justify-content:flex-end}.ps-icon-grid{display:grid;grid-template-columns:repeat(6,30px);gap:4px;padding:8px}.ps-icon-cell{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;border:1px solid transparent;background:none;color:var(--text-dim);cursor:pointer}.ps-icon-cell svg{width:16px;height:16px}.ps-icon-cell:hover{background:var(--hover);color:var(--text)}.ps-icon-cell.active{border-color:var(--accent);color:var(--accent-bright)}.ps-danger [data-slot=card-title]{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:#d2695e;font-weight:600}.ps-chip{margin-left:10px;padding:2px 8px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-faint);font-size:11px;font-weight:600;letter-spacing:.02em;vertical-align:middle}.ps-people h4{font-size:12.5px;font-weight:600;color:var(--text-dim);margin:0}.ps-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--text-dim);margin:0 0 10px}.ps-people select{height:28px;padding:0 8px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:12.5px}.ps-people select:disabled{opacity:.6;cursor:default}.ps-note{color:var(--text-faint);font-size:12.5px;margin:0 0 12px;max-width:56ch;line-height:1.55}.ps-people-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:20px 0 8px}.ps-danger p{color:var(--text-dim);font-size:13px;margin:0 0 14px;max-width:52ch;line-height:1.55}.ps-facts{display:grid;grid-template-columns:auto 1fr;gap:8px 20px;margin:0;font-size:13px}.ps-facts dt{color:var(--text-faint)}.ps-facts dd{margin:0;color:var(--text-dim)}.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-lbl{flex:1 1 100%;margin:0 0 6px;font-size:12.5px;font-weight:600;color:var(--text-dim)}.admin-sub{color:var(--text-dim);font-size:13.5px;margin:-2px 0 16px;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-list.admin-card-table{overflow-x:auto;overflow-y:hidden}.admin-item{display:flex;align-items:center;gap:11px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13.5px}.modal-actions .ai-btn{height:32px}.empty a{color:var(--accent);text-decoration:none;display:inline-block;padding:6px 10px}.empty a:hover{text-decoration:underline}.empty h3{margin:0 0 8px;font-size:16px;color:var(--text)}.ai-copy{text-align:left;background:none;border:0;padding:6px 0;cursor:pointer}.ai-copy:hover{color:var(--text)}a.ai-main{color:var(--text-dim);text-decoration:none;padding:6px 0}a.ai-main:hover{color:var(--accent)}.th-sort{display:block;width:100%;text-align:left;background:none;border:0;padding:6px 10px;font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}.th-sort:hover{color:var(--text-dim)}.proj-trigger>[data-slot=select-value]{display:block;flex:1 1 auto;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-cell{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;justify-items:start}.admin-table td .role-static{text-align:left}.role-chip-row{margin:-6px 0 12px}.role-chip{margin-left:0;padding:2px 8px;border:1px solid var(--border-2);border-radius:99px;vertical-align:middle}.ext{margin-left:4px;color:var(--text-faint);font-size:11px}.admin-item:last-child{border-bottom:none}.admin-item:hover{background:var(--hover)}.field-err{flex:1 1 100%;margin:6px 0 0}.admin-row{flex-wrap:wrap}.admin-row input[aria-invalid=true]{border-color:var(--del)}.ai-main{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.admin-item>.ai-main{flex:1 1 55%;min-width:22ch}.admin-item>.ai-tag{flex:0 0 auto;min-width:0;max-width:45%}@media(max-width:1000px){.admin-item{flex-wrap:wrap}.admin-item>.ai-tag{flex:1 1 100%;max-width:100%}}.admin-table td .ai-main{min-width:0}.ai-main.mono{font:12px var(--mono);color:var(--text-dim);cursor:pointer}.ai-tag{font-size:11.5px;color:var(--text-faint);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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-del{color:var(--del);border-color:#f26d6d47}.ai-del:hover{background:#f26d6d1f;border-color:var(--del);color:#ff8b8b}.ai-btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.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{margin-top:2px;flex:none}.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)}#account-btn.active{background:var(--glow)}#account-btn.active .acct b{color:var(--accent-bright)}.gd-body{margin-top:18px}.gd-desc{margin:2px 0 8px;color:var(--text-faint);font-size:13px;line-height:1.5}.gd-list{margin:4px 0 8px;padding-left:18px;display:grid;gap:6px}.gd-code{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:10px;margin:6px 0 10px;padding: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)}.gd-code>code{display:block;min-width:0;overflow-x:auto;white-space:pre}.gd-copy{align-self:start;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}.gd-copy:hover{color:var(--accent-bright);border-color:var(--accent-dim)}.gd-manual{margin:10px 0 0}.gd-manual>summary{display:inline-block;font-size:12.5px;font-weight:600;color:var(--text-faint);cursor:pointer;padding:4px 0}.gd-manual>summary:before{content:"▸ ";color:var(--text-ghost)}.gd-manual[open]>summary:before{content:"▾ "}.gd-manual>summary:hover{color:var(--text)}.home-insights{margin-top:30px;padding-top:22px;border-top:1px solid var(--border)}.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}.gd-head{display:flex;align-items:center;gap:9px}.gd-head .proj-mark{width:22px;height:22px;border-radius:6px}.gd-head .proj-mark svg{width:13px;height:13px}.in-desc{color:var(--text-dim);font-size:13.5px;line-height:1.55;margin:0 0 10px;max-width:62ch}.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%;max-width:760px;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-share{background:#b478e8}.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-sw.share{background:#b478e8}.in-sw-age{width:84px;margin:0 5px}.in-tm-range{margin-left:14px;color:var(--text-ghost)}.in-matrix rect{transition:opacity .1s}.in-matrix rect:hover{opacity:.85}.hentry{padding:11px 12px;border-bottom:1px solid var(--border);--hindent: 72px}.hentry:hover{background:#ffffff04}.hline{display:flex;gap:10px;align-items:center}.hkind{flex:none;width:62px;white-space:nowrap;text-align:center;font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:2px 6px;border-radius:4px;color:var(--add);background:#4cc38a1f}.hentry.edit .hkind{color:var(--accent-bright);background:var(--glow)}.hentry.delete .hkind{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:var(--hindent);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:var(--hindent);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:"›";display:inline-block;margin-right:5px;color:var(--text-ghost);transition:transform .12s}.hnote.open:before{transform:rotate(90deg)}.hnote a{color:var(--accent-bright);text-decoration:none}.hnote a:hover{text-decoration:underline}.hrun{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);margin:10px 0;overflow:hidden}.hrun-head{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;color:var(--text);font-size:12.5px}.hrun-toggle{display:flex;flex:none;padding:2px;border:none;border-radius:4px;background:none;color:var(--text-faint);cursor:pointer}.hrun-toggle:hover{color:var(--text);background:var(--hover)}.hrun-toggle .ico{width:13px;height:13px}.hrun-note{font-weight:560;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:46%}.hrun-note a{color:var(--accent-bright);text-decoration:none}.hrun-note a:hover{text-decoration:underline}.hrun-meta{color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hrun-time{margin-left:auto;flex:none;color:var(--text-faint);font-variant-numeric:tabular-nums}.hrun-body{border-top:1px solid var(--border)}.hrun-body .hentry:last-child{border-bottom:none}.hrestore-btn,.hremove-btn{display:inline-flex;align-items:center;gap:4px;margin-left:auto;padding:2px 8px 2px 5px;border:1px solid var(--border);border-radius:5px;background:none;color:var(--text-faint);font:inherit;font-size:12px;cursor:pointer}.hrestore-btn:hover{color:var(--accent-bright);border-color:var(--border-2);background:var(--hover)}.hremove-btn:hover{color:var(--del);border-color:#f26d6d61;background:var(--hover)}.hrestore-btn:disabled,.hremove-btn:disabled{opacity:.5;cursor:default}.hrestore-btn .ico,.hremove-btn .ico{width:12px;height:12px}.hactions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0 0 23px}.hdiff-btn,.hver-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 7px 2px 4px;border:1px solid var(--border);border-radius:5px;background:none;color:var(--text-faint);font:inherit;font-size:12px;cursor:pointer;text-decoration:none}.hdiff-btn:hover,.hver-btn:hover{color:var(--text);border-color:var(--border-2);background:var(--hover)}.hdiff-btn .ico,.hver-btn .ico{width:12px;height:12px}.hdiff-none{flex-basis:100%;font-size:12px;color:var(--text-ghost)}.dv{margin:8px 0 2px 23px;border:1px solid var(--border);border-radius:6px;overflow:hidden}.dv-msg{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:9px 11px;font-size:12px;color:var(--text-faint)}.dv-dl{display:flex;gap:12px}.dv-msg a{color:var(--accent-bright);text-decoration:none}.dv-msg a:hover{text-decoration:underline}.dv-head{display:flex;align-items:center;gap:10px;padding:5px 11px;border-bottom:1px solid var(--border);font-size:11px;font-variant-numeric:tabular-nums}.dv-add{color:var(--add);font-weight:600}.dv-del{color:var(--del);font-weight:600}.dv-same{color:var(--text-ghost)}.dv-body{overflow-x:auto;padding:4px 0}.dv-line{display:flex;font-family:var(--mono);font-size:12px;line-height:1.55;white-space:pre}.dv-n{flex:none;width:34px;padding-right:8px;text-align:right;color:var(--text-ghost);-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}.dv-mark{flex:none;width:16px;text-align:center;-webkit-user-select:none;user-select:none}.dv-text{padding-right:12px}.dv-ins{background:#4cc38a1a;color:var(--add)}.dv-rm{background:#f26d6d1a;color:#ff8b8b}.dv-ctx{color:var(--text-dim)}#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-expiry{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:12.5px;color:var(--text-dim)}.modal-expiry 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}.modal-expiry select:disabled{opacity:.6;cursor:default}.modal-expiry-note{margin-left:auto;color:var(--text-dim)}.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)}.start-points{border:0;margin:0 0 18px;padding:0}.start-points legend{padding:0}.start-point{display:flex;align-items:flex-start;gap:10px;padding:9px 11px;border:1px solid var(--border);border-radius:var(--r-ctl);background:var(--surface);cursor:pointer;margin-bottom:6px}.start-point:hover{background:var(--hover)}.start-point.on{border-color:var(--accent);background:var(--hover)}.start-point input{accent-color:var(--accent);margin:2px 0 0;flex:none}.sp-text{display:flex;flex-direction:column;gap:2px;min-width:0}.sp-title{font-size:13.5px;color:var(--text);display:flex;align-items:center;gap:8px}.sp-rec{font-size:10.5px;letter-spacing:.02em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:0 6px;line-height:15px}.sp-blurb{font-size:12px;color:var(--text-dim);overflow-wrap:anywhere}.start-point.sp-rule{margin-top:16px}.modal{max-height:calc(100vh - 32px);overflow-y:auto}.gd-note{margin:-4px 0 16px;font-size:13px;color:var(--text-dim);border-left:2px solid var(--accent);padding-left:11px;line-height:1.55}[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,#search-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 table,pre.plain{display:block;overflow-x:auto;max-width:100%}.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-table thead{display:none}.admin-table,.admin-table tbody,.admin-table td{display:block;width:auto}.admin-table tr.admin-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.admin-table tr.admin-item td{padding:0;border-bottom:none}.admin-table tr.admin-item td:first-child{flex:1 1 100%;width:auto}.admin-table tr.admin-item td:last-child{width:auto;text-align:left}[data-slot=dropdown-menu-item]{min-height:44px}#projects{flex:0 1 auto;max-height:none}.admin-row{flex-wrap:wrap}.admin-row input{flex:1 1 100%;min-height:44px}.admin-row button{flex:0 0 auto;align-self:flex-start;min-height:44px}.admin-item .ai-main{flex:1 1 100%;white-space:normal;overflow-wrap:anywhere}.admin-table td{white-space:normal}.admin-table td .ai-main,.admin-table td a.ai-main,.admin-table td .ai-copy,.admin-table td .ai-tag{white-space:normal;overflow-wrap:anywhere}.admin-item .ai-tag{flex:1 1 100%;max-width:100%;white-space:normal;overflow-wrap:anywhere}.ai-copy{min-height:44px;display:block;padding:12px 0;white-space:normal;overflow-wrap:anywhere;text-overflow:clip}a.ai-main{min-height:44px;display:flex;align-items:center}.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{height:auto;min-height:44px}.modal-expiry select{height:44px}.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-row{flex-wrap:wrap;row-gap:2px}.dl-meta{flex:1 1 100%;padding-left:27px}.ai-tag{font-size:11px}.htime{white-space:nowrap;font-size:12px}.hline{flex-wrap:wrap}.hentry{--hindent: 0px}.modal-actions .ai-del{flex:0 0 100%;justify-content:center;text-align:center}}.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 .admin input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.admin input[aria-invalid=true]:focus-visible{outline-color:var(--del)}[role=dialog] input[aria-invalid=true]{border-color:var(--del)}[role=dialog] input[aria-invalid=true]:focus-visible{outline-color:var(--del)}button:disabled,.btn:disabled{cursor:default}input[type=checkbox]{accent-color:var(--accent)}.htmlview,.pdfview{display:block;width:100%;height:calc(100vh - 150px);border:1px solid var(--border);border-radius:var(--r-card);background:#fff}.notfound{margin-top:var(--hero-top);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}.vbanner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 22px;padding:11px 14px;border:1px solid var(--accent-dim);border-radius:var(--r-card);background:var(--glow)}.vbanner .vb-icon{flex:none;display:flex;color:var(--accent-bright)}.vbanner .vb-text{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:1px;font-size:12.5px;line-height:1.45}.vbanner .vb-text b{color:var(--accent-bright);font-weight:600}.vbanner .vb-text span{color:var(--text-dim)}.vbanner .vb-actions{flex:none;display:flex;gap:8px}.vbanner .vb-actions .ai-btn{display:inline-flex;align-items:center;text-decoration:none}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}.filecard{margin-top:var(--hero-top);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/assets/index-BlfX6Osf.js b/internal/webapp/static/assets/index-gtPH5RQg.js similarity index 96% rename from internal/webapp/static/assets/index-BlfX6Osf.js rename to internal/webapp/static/assets/index-gtPH5RQg.js index 57ea039..1f80980 100644 --- a/internal/webapp/static/assets/index-BlfX6Osf.js +++ b/internal/webapp/static/assets/index-gtPH5RQg.js @@ -117,4 +117,4 @@ to set up BearDrive project `+e.id+" on "+r+a+e.name+'").',l=`brew install runbe bdrive login `+r+` bdrive init --project `+e.id;return h.jsxs("div",{className:"guide",children:[h.jsxs("h1",{className:"in-title gd-head",children:[h.jsx("span",{className:"proj-mark","aria-hidden":"true",style:{background:dl(e.name)},children:h.jsx(Lo,{name:e.icon})}),e.name]}),e.description&&h.jsx("p",{className:"in-desc",children:e.description}),h.jsxs("div",{className:"gd-body",children:[h.jsx("p",{className:"gd-desc",children:n?"Paste into your coding agent — Claude Code, Cowork, Codex, Gemini CLI, Hermes — in the folder you already have:":"Paste into your coding agent — Claude Code, Cowork, Codex, Gemini CLI, Hermes — in the folder where you want the files:"}),n&&h.jsx("p",{className:"gd-note",children:"Your files stay exactly where they are. Connecting a folder never moves, renames or overwrites anything in it — it uploads what is there and keeps it in sync."}),h.jsx(Km,{code:s}),h.jsx("p",{className:"gd-desc",children:"The agent installs the CLI, signs this machine in, and registers the sync hooks — asking before anything it changes."}),h.jsxs("details",{className:"gd-manual",children:[h.jsx("summary",{children:"What exactly happens"}),h.jsxs("ul",{className:"gd-desc gd-list",children:[h.jsx("li",{children:"Sign-in uses a device code you approve in this browser — the folder itself never holds credentials."}),h.jsx("li",{children:"Sync hooks pull the latest before every agent turn, push edits seconds after they happen, and stamp each change with the session that made it; agent reads feed Insights. They register once per machine in your agent's own config, so every session is covered and nothing is written into the synced folder."}),h.jsx("li",{children:"Codex hooks are off by default: set [features] codex_hooks = true in ~/.codex/config.toml."})]})]}),h.jsxs("details",{className:"gd-manual",children:[h.jsx("summary",{children:"Or run it yourself"}),h.jsx("p",{className:"gd-desc",children:"Same result, in the folder you want the files. One command: init signs this device in, registers the sync hooks and starts syncing."}),h.jsx(Km,{code:l}),h.jsx("p",{className:"gd-desc",children:h.jsx("a",{href:"https://docs.beardrive.ai/manual/install/",target:"_blank",rel:"noreferrer",children:"Full manual setup guide →"})})]})]})]})}function Km({code:e}){const[n,r]=w.useState("Copy");return h.jsxs("pre",{className:"gd-code",children:[h.jsx("code",{children:e}),h.jsx("button",{className:"gd-copy",onClick:async()=>{r(await Ho(e)?"Copied":"Copy failed"),setTimeout(()=>r("Copy"),1400)},children:n})]})}function D8({onNew:e,canCreate:n}){return h.jsxs("div",{className:"onboard",children:[h.jsx("h1",{children:"Welcome to BearDrive"}),h.jsx("p",{children:"You're signed in, but you're not part of any project yet."}),n&&h.jsxs("div",{className:"ob-card ob-start",children:[h.jsx("h3",{children:"Start a project"}),h.jsx("p",{children:"Name it and pick what it starts from — a structure, or nothing at all. Then connect a folder on any machine and it stays in sync."}),h.jsx(vt,{variant:"primary",id:"ob-new",onClick:e,children:"New project"})]}),h.jsxs("div",{className:"ob-card ob-agent",children:[h.jsx("h3",{children:n?"Or let your agent do it":"Connect a new drive to your project"}),h.jsx("p",{children:"Paste into your coding agent — Claude Code, Cowork, Codex, Gemini CLI, Hermes — in the folder where you want the files. It creates the project and starts syncing:"}),h.jsx(Km,{code:"Follow "+AC+` to set up a new BearDrive project on `+window.location.origin+". Ask me which folder to sync."}),h.jsx("p",{className:"ob-alt",children:h.jsx("a",{href:"https://docs.beardrive.ai/manual/setup-by-hand/",target:"_blank",rel:"noreferrer",children:"Or start a project manually →"})})]})]})}const NC="__existing__";function z8({templates:e,onCreate:n,onClose:r}){const[a,s]=w.useState(""),[l,u]=w.useState(""),[d,p]=w.useState(""),[m,y]=w.useState(!1),v=async()=>{if(!m){if(!a.trim()){p("Give it a name.");return}y(!0);try{await n(a.trim(),l)}finally{y(!1)}}},b=[...e.map(x=>({value:x.name,title:x.title,blurb:x.blurb,rule:!1})),{value:NC,title:"I already have a folder",blurb:"nothing is seeded — connect it and your files stay as they are",rule:!0},{value:"",title:"Empty project",blurb:"just the folder",rule:!1}];return h.jsx(Qu,{open:!0,onOpenChange:x=>!x&&r(),children:h.jsxs(Xu,{className:"modal",showCloseButton:!1,children:[h.jsx(bl,{asChild:!0,children:h.jsx("h3",{children:"New project"})}),h.jsx("label",{className:"modal-label",htmlFor:"modal-input",children:"Name"}),h.jsx("input",{className:"modal-input",type:"text",autoComplete:"off",id:"modal-input",autoFocus:!0,value:a,"aria-invalid":!!d,"aria-describedby":d?"modal-input-err":void 0,onChange:x=>{s(x.currentTarget.value),d&&p("")},onKeyDown:x=>x.key==="Enter"&&v()}),d&&h.jsx("span",{id:"modal-input-err",role:"alert",className:"field-err",children:d}),b.length>1&&h.jsxs("fieldset",{className:"start-points",children:[h.jsx("legend",{className:"modal-label",children:"Starting point"}),b.map((x,_)=>h.jsxs("label",{className:"start-point"+(l===x.value?" on":"")+(x.rule?" sp-rule":""),children:[h.jsx("input",{type:"radio",name:"template",value:x.value,checked:l===x.value,onChange:()=>u(x.value)}),h.jsxs("span",{className:"sp-text",children:[h.jsxs("span",{className:"sp-title",children:[x.title,_===0&&h.jsx("span",{className:"sp-rec",children:"Recommended"})]}),h.jsx("span",{className:"sp-blurb",children:x.blurb})]})]},x.value))]}),h.jsxs("div",{className:"modal-actions",children:[h.jsx(vt,{variant:"subtle",onClick:r,children:"Cancel"}),h.jsx(vt,{variant:"primary",onClick:v,disabled:m,children:"Create"})]})]})})}function ew(e,n,r){if(!e)return null;if(!r)return e[n]||null;const a={human:0,agent:0,share:0};for(const[s,l]of Object.entries(e))s.startsWith(n+"/")&&(a.human+=l.human||0,a.agent+=l.agent||0,a.share+=l.share||0);return a.human||a.agent||a.share?a:null}function Bo(e){return(e.human||0)+(e.agent||0)+(e.share||0)}function Ys(e){const n=Bo(e);if(!n)return"";const r=n+(n===1?" read":" reads");if(!e.agent&&!e.share)return r;const a=[];return e.human&&a.push(e.human+" human"),e.agent&&a.push(e.agent+" agent"),e.share&&a.push(e.share+" shared"),r+" ("+a.join(", ")+")"}function k8(e){const n=Bo(e);return n?n<3?1:n<10?2:n<30?3:4:0}function L8(e){const n=Bo(e);return n?{agent:(e.agent||0)/n,human:(e.human||0)/n,share:(e.share||0)/n}:{agent:0,human:0,share:0}}const $8=7;function I8(e){if(!e.length)return null;let n=e[0],r=e[0];for(const a of e)ar&&(r=a);return{min:n,max:r}}const F8=(e,n)=>n-e<$8;function V8(e,n){const r=Math.round(e),a=Math.round(n);return r===a?`${r}d`:`${r}–${a}d`}function P8(e,n=!0){const r=Ht({queryKey:["tree",e],queryFn:()=>sn(e+"tree"),enabled:n,refetchInterval:15e3}),a=w.useMemo(()=>{const s=[],l=new Map,u=d=>{for(const p of d.children||[])p.dir?(l.set(p.path,p),u(p)):s.push(p)};return r.data&&u(r.data),{flatFiles:s,dirIndex:l}},[r.data]);return{tree:r.data,...a,loaded:!!r.data}}function U8(e,n){return Ht({queryKey:["heat",e],queryFn:()=>sn(e+"heat?days=30"),enabled:n,staleTime:6e4,refetchInterval:6e4}).data?.entries??null}function H8(e,n,r){return Ht({queryKey:["history",e,"prefix",n,20],queryFn:()=>sn(e+"history?prefix="+encodeURIComponent(n)+"&n=20"),enabled:r,staleTime:15e3}).data?.entries??null}function B8(e,n,r){const a=new Array(e);return new Proxy(a,{get(s,l,u){if(typeof l=="string"){const d=l.charCodeAt(0);if(d>=48&&d<=57){const p=+l;if(Number.isInteger(p)&&p>=0&&pa[y]!==m))&&(a=d,s=n(...d),r?.onChange&&!(l&&r.skipInitialOnChange)&&r.onChange(s),l=!1),s}return u.updateDeps=d=>{a=d},u}function tw(e,n){if(e===void 0)throw new Error("Unexpected undefined");return e}const q8=(e,n)=>Math.abs(e-n)<1.01,G8=(e,n,r)=>{let a;return function(...s){e.clearTimeout(a),a=e.setTimeout(()=>n.apply(this,s),r)}};let Bs;const rm=()=>{if(Bs!==void 0)return Bs;if(typeof navigator>"u")return Bs=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return Bs=!0;const e=navigator.maxTouchPoints;return Bs=navigator.platform==="MacIntel"&&e!==void 0&&e>0},nw=e=>{const{offsetWidth:n,offsetHeight:r}=e;return{width:n,height:r}},Z8=e=>e,K8=e=>{const n=Math.max(e.startIndex-e.overscan,0),a=Math.min(e.endIndex+e.overscan,e.count-1)-n+1,s=new Array(a);for(let l=0;l{const r=e.scrollElement;if(!r)return;const a=e.targetWindow;if(!a)return;const s=u=>{const{width:d,height:p}=u;n({width:Math.round(d),height:Math.round(p)})};if(s(nw(r)),!a.ResizeObserver)return()=>{};const l=new a.ResizeObserver(u=>{const d=()=>{const p=u[0];if(p?.borderBoxSize){const m=p.borderBoxSize[0];if(m){s({width:m.inlineSize,height:m.blockSize});return}}s(nw(r))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(d):d()});return l.observe(r,{box:"border-box"}),()=>{l.unobserve(r)}},Tu={passive:!0},Q8=typeof window>"u"?!0:"onscrollend"in window,X8=(e,n,r)=>{const a=e.scrollElement;if(!a)return;const s=e.targetWindow;if(!s)return;const l=e.options.useScrollendEvent&&Q8;let u=0;const d=l?null:G8(s,()=>n(u,!1),e.options.isScrollingResetDelay),p=v=>()=>{u=r(a),d?.(),n(u,v)},m=p(!0),y=p(!1);return a.addEventListener("scroll",m,Tu),l&&a.addEventListener("scrollend",y,Tu),()=>{a.removeEventListener("scroll",m),l&&a.removeEventListener("scrollend",y)}},J8=(e,n)=>X8(e,n,r=>{const{horizontal:a,isRtl:s}=e.options;return a?r.scrollLeft*(s&&-1||1):r.scrollTop}),W8=(e,n,r)=>{if(r.options.useCachedMeasurements){const a=r.indexFromElement(e),s=r.options.getItemKey(a);return r.itemSizeCache.get(s)??r.options.estimateSize(a)}if(n?.borderBoxSize){const a=n.borderBoxSize[0];if(a)return Math.round(a[r.options.horizontal?"inlineSize":"blockSize"])}if(!n){const a=r.indexFromElement(e),s=r.options.getItemKey(a),l=r.itemSizeCache.get(s);if(l!==void 0)return l}return e[r.options.horizontal?"offsetWidth":"offsetHeight"]},eI=(e,{adjustments:n=0,behavior:r},a)=>{var s,l;(l=(s=a.scrollElement)==null?void 0:s.scrollTo)==null||l.call(s,{[a.options.horizontal?"left":"top"]:e+n,behavior:r})},tI=eI;class nI{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,a,s;return((s=(a=(r=this.targetWindow)==null?void 0:r.performance)==null?void 0:a.now)==null?void 0:s.call(a))??Date.now()},this.observer=(()=>{let r=null;const a=()=>r||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:r=new this.targetWindow.ResizeObserver(s=>{s.forEach(l=>{const u=()=>{const d=l.target,p=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(p)&&this.resizeItem(p,this.options.measureElement(d,l,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(u):u()})}));return{disconnect:()=>{var s;(s=a())==null||s.disconnect(),r=null},observe:s=>{var l;return(l=a())==null?void 0:l.observe(s,{box:"border-box"})},unobserve:s=>{var l;return(l=a())==null?void 0:l.unobserve(s)}}})(),this.range=null,this.setOptions=r=>{var a,s;const l={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:Z8,rangeExtractor:K8,onChange:()=>{},measureElement:W8,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 x=r[b];x!==void 0&&(l[b]=x)}const u=this.options;let d=null,p=null,m=!1;if(u!==void 0&&u.enabled&&l.enabled&&l.anchorTo==="end"&&this.scrollElement!==null){const b=u.count,x=l.count,_=this.getMeasurements(),C=b>0?((a=_[0])==null?void 0:a.key)??u.getItemKey(0):null,E=b>0?((s=_[b-1])==null?void 0:s.key)??u.getItemKey(b-1):null;if(x!==b||b>0&&x>0&&(l.getItemKey(0)!==C||l.getItemKey(x-1)!==E)){m=!0;const j=b>0?this.getVirtualItemForOffset(this.getScrollOffset())??_[0]:null;j&&(d=[j.key,this.getScrollOffset()-j.start]);const k=l.followOnAppend===!0?"auto":l.followOnAppend||null;k&&x>b&&this.isAtEnd(u.scrollEndThreshold)&&(b===0||l.getItemKey(x-1)!==E)&&(p=k)}}this.options=l,m&&(this.pendingMin=0,this.itemSizeCacheVersion++);let y=!1,v=0;if(d&&this.scrollOffset!==null){const[b,x]=d,_=this.getMeasurements(),{count:C,getItemKey:E}=this.options;let T=0;for(;T{var a,s;(s=(a=this.options).onChange)==null||s.call(a,this,r)},this.maybeNotify=jo(()=>(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 a=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==a){if(this.cleanup(),!a){this.maybeNotify();return}if(this.scrollElement=a,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(l=>{this.observer.observe(l)}),this.unsubs.push(this.options.observeElementRect(this,l=>{this.scrollRect=l,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(l,u)=>{if(u&&this._intendedScrollOffset===null&&l===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(l-this._intendedScrollOffset)<1.5&&(l=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;const d=this.getScrollOffset();this.scrollDirection=u?d===l?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,!(!rm()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};l.addEventListener("touchstart",u,Tu),l.addEventListener("touchend",d,Tu),this.unsubs.push(()=>{l.removeEventListener("touchstart",u),l.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[l,u,d,p]=s;l!==null&&!d&&(rm()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?p!==0&&(this._iosDeferredAdjustment+=p):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(),a=this.getMaxScrollOffset();if(r<0||r>a)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=jo(()=>[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,a,s,l,u,d,p,m)=>(this.prevLanes!==void 0&&this.prevLanes!==d&&(this.lanesChangedFlag=!0),this.prevLanes=d,this.pendingMin=null,{count:r,paddingStart:a,scrollMargin:s,getItemKey:l,enabled:u,lanes:d,laneAssignmentMode:p,gap:m}),{key:!1}),this.getMeasurements=jo(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:r,paddingStart:a,scrollMargin:s,getItemKey:l,enabled:u,lanes:d,laneAssignmentMode:p,gap:m},y)=>{const v=this.itemSizeCache;if(!u)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&&$.set(O.subarray(0,b*2)),O=$,this._flatMeasurements=O}let j;if(b===0)j=a+s;else{const $=b-1;j=O[$*2]+O[$*2+1]+m}for(let $=b;$1){k=j;const ge=_[k],de=ge!==void 0?x[ge]:void 0;$=de?de.end+m:a+s}else if(E===d){let ge=0,de=C[0],Q=_[0];for(let le=1;lethis.options.debug}),this.calculateRange=jo(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(r,a,s,l)=>r.length===0||a===0?(this.range=null,null):(this.range=iI(r,a,s,l,l===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=jo(()=>{let r=null,a=null;const s=this.calculateRange();return s&&(r=s.startIndex,a=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,r,a]),[this.options.rangeExtractor,this.options.overscan,this.options.count,r,a]},(r,a,s,l,u)=>l===null||u===null?[]:r({startIndex:l,endIndex:u,overscan:a,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=r=>{const a=this.options.indexAttribute,s=r.getAttribute(a);return s?parseInt(s,10):(console.warn(`Missing attribute name '${a}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=r=>{var a;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const s=this.scrollState.index??((a=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:a.index);if(s!==void 0&&this.range){const l=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),u=Math.max(0,s-l),d=Math.min(this.options.count-1,s+l);return r>=u&&r<=d}return!0},this.measureElement=r=>{if(!r){this.elementsCache.forEach((u,d)=>{u.isConnected||(this.observer.unobserve(u),this.elementsCache.delete(d))});return}const a=this.indexFromElement(r),s=this.options.getItemKey(a),l=this.elementsCache.get(s);l!==r&&(l&&this.observer.unobserve(l),this.observer.observe(r),this.elementsCache.set(s,r)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(a)&&this.resizeItem(a,this.options.measureElement(r,void 0,this))},this.resizeItem=(r,a)=>{var s,l;if(r<0||r>=this.options.count)return;let u,d,p;const m=this._flatMeasurements;if(this.options.lanes===1&&m!==null)p=this.options.getItemKey(r),d=m[r*2],u=m[r*2+1];else{const b=this.measurementsCache[r];if(!b)return;p=b.key,d=b.start,u=b.size}const y=this.itemSizeCache.get(p)??u,v=a-y;if(v!==0){const b=this.options.anchorTo==="end"&&((s=this.scrollState)==null?void 0:s.behavior)!=="smooth"&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,x=b?this.getTotalSize():0,_=((l=this.scrollState)==null?void 0:l.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[r]??{index:r,key:p,start:d,size:u,end:d+u,lane:0},v,this):d[this.getVirtualIndexes(),this.getMeasurements()],(r,a)=>{const s=[];for(let l=0,u=r.length;lthis.options.debug}),this.getVirtualItemForOffset=r=>{const a=this.getMeasurements();if(a.length===0)return;const s=this._flatMeasurements,l=this.options.lanes===1&&s!=null,u=DC(0,a.length-1,l?d=>s[d*2]:d=>tw(a[d]).start,r);return tw(a[u])},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,a,s=0)=>{if(!this.scrollElement)return 0;const l=this.getSize(),u=this.getScrollOffset();a==="auto"&&(a=r>=u+l?"end":"start"),a==="center"?r+=(s-l)/2:a==="end"&&(r-=l);const d=this.getMaxScrollOffset();return Math.max(Math.min(d,r),0)},this.getOffsetForIndex=(r,a="auto")=>{r=Math.max(0,Math.min(r,this.options.count-1));const s=this.getSize(),l=this.getScrollOffset(),u=this.measurementsCache[r];if(!u)return;if(a==="auto")if(u.end>=l+s-this.options.scrollPaddingEnd)a="end";else if(u.start<=l+this.options.scrollPaddingStart)a="start";else return[l,a];if(a==="end"&&r===this.options.count-1)return[this.getMaxScrollOffset(),a];const d=a==="end"?u.end+this.options.scrollPaddingEnd:u.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(d,a,u.size),a]},this.scrollToOffset=(r,{align:a="start",behavior:s="auto"}={})=>{const l=this.getOffsetForAlignment(r,a),u=this.now();this.scrollState={index:null,align:a,behavior:s,startedAt:u,lastTargetOffset:l,stableFrames:0},this._scrollToOffset(l,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(r,{align:a="auto",behavior:s="auto"}={})=>{r=Math.max(0,Math.min(r,this.options.count-1));const l=this.getOffsetForIndex(r,a);if(!l)return;const[u,d]=l,p=this.now();this.scrollState={index:r,align:d,behavior:s,startedAt:p,lastTargetOffset:u,stableFrames:0},this._scrollToOffset(u,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(r,{behavior:a="auto"}={})=>{const s=this.getScrollOffset()+r,l=this.now();this.scrollState={index:null,align:"start",behavior:a,startedAt:l,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:a}),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 a=this.getMeasurements();let s;if(a.length===0)s=this.options.paddingStart;else if(this.options.lanes===1){const l=a.length-1,u=this._flatMeasurements;u!=null?s=u[l*2]+u[l*2+1]:s=((r=a[l])==null?void 0:r.end)??0}else{const l=Array(this.options.lanes).fill(null);let u=a.length-1;for(;u>=0&&l.some(d=>d===null);){const d=a[u];l[d.lane]===null&&(l[d.lane]=d.end),u--}s=Math.max(...l.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 a=this.getMeasurements();for(const s of a)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:a,behavior:s})=>{this._intendedScrollOffset=r+(a??0),this.options.scrollToFn(r,{behavior:s,adjustments:a},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&&(rm()&&(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 a=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,s=a?a[0]:this.scrollState.lastTargetOffset,l=1,u=s!==this.scrollState.lastTargetOffset;if(!u&&q8(s,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=l){this.getScrollOffset()!==s&&this._scrollToOffset(s,{adjustments:void 0,behavior:"auto"}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,u){const d=this.getSize()||600,p=Math.abs(s-this.getScrollOffset()),m=this.scrollState.behavior==="smooth"&&p>d;this.scrollState.lastTargetOffset=s,m||(this.scrollState.behavior="auto"),this._scrollToOffset(s,{adjustments:void 0,behavior:m?"smooth":"auto"})}this.scheduleScrollReconcile()}}const DC=(e,n,r,a)=>{for(;e<=n;){const s=(e+n)/2|0,l=r(s);if(la)n=s-1;else return s}return e>0?e-1:0};function rI(e,n,r){let a=0;for(;a<=n;){const s=(a+n)/2|0,l=e[s*2];if(lr)n=s-1;else return s}return a>0?a-1:0}function iI(e,n,r,a,s){const l=e.length-1;if(e.length<=a)return{startIndex:0,endIndex:l};if(a===1&&s!==null){const m=rI(s,l,r);let y=m;const v=r+n;for(;ye[m].start,r),p=d;if(a===1)for(;p1){const m=Array(a).fill(0);for(;pv=0&&y.some(v=>v>=r);){const v=e[d];y[v.lane]=v.start,d--}d=Math.max(0,d-d%a),p=Math.min(l,p+(a-1-p%a))}return{startIndex:d,endIndex:p}}const im=typeof document<"u"?w.useLayoutEffect:w.useEffect;function aI({useFlushSync:e=!0,directDomUpdates:n=!1,directDomUpdatesMode:r="transform",...a}){const s=w.useReducer(m=>m+1,0)[1],l=w.useRef({enabled:n,mode:r,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});l.current.enabled=n,l.current.mode=r;const u=m=>{const y=l.current;if(!y.enabled||!y.container)return;const v=m.getTotalSize();if(v!==y.lastSize){y.lastSize=v;const T=m.options.horizontal?"width":"height";y.container.style[T]=`${v}px`}const b=!!m.options.horizontal,x=y.mode==="transform",_=b?"left":"top",C=m.options.scrollMargin,E=m.getVirtualItems();for(const T of E){const O=T.start-C,j=m.elementsCache.get(T.key);j&&y.lastPositions.get(j)!==O&&(y.lastPositions.set(j,O),x?j.style.transform=b?`translate3d(${O}px, 0, 0)`:`translate3d(0, ${O}px, 0)`:j.style[_]=`${O}px`)}},d={...a,onChange:(m,y)=>{var v;const b=l.current;let x=!0;if(b.enabled){u(m);const _=m.range,C=b.prevRange;x=!C||C.isScrolling!==m.isScrolling||C.startIndex!==_?.startIndex||C.endIndex!==_?.endIndex,x&&(b.prevRange=_?{startIndex:_.startIndex,endIndex:_.endIndex,isScrolling:m.isScrolling}:null)}x&&(e&&y?Aa.flushSync(s):s()),(v=a.onChange)==null||v.call(a,m,y)}},[p]=w.useState(()=>{const m=new nI(d);return Object.assign(m,{containerRef:y=>{const v=l.current;if(v.container=y,v.lastSize=null,y&&v.enabled){const b=m.getTotalSize();v.lastSize=b;const x=m.options.horizontal?"width":"height";y.style[x]=`${b}px`}}})});return p.setOptions(d),im(()=>p._didMount(),[]),im(()=>p._willUpdate()),im(()=>{u(p)}),p}function oI(e){return aI({observeElementRect:Y8,observeElementOffset:J8,scrollToFn:tI,...e})}function sI(e,n){const r=[],a=(s,l)=>{for(const u of s)r.push({node:u,depth:l}),u.dir&&n.has(u.path)&&a(u.children||[],l+1)};return a(e?.children||[],0),r}function lI(e){const{root:n,expanded:r,onToggle:a,currentPath:s,listingShowing:l,onOpen:u}=e,d=w.useRef(null),p=w.useMemo(()=>sI(n,r),[n,r]),m=oI({count:p.length,getScrollElement:()=>d.current,estimateSize:()=>window.matchMedia("(max-width: 768px)").matches?44:28,overscan:12,getItemKey:y=>p[y].node.path});return w.useEffect(()=>{if(!s)return;const y=p.findIndex(v=>v.node.path===s);y>=0&&m.scrollToIndex(y,{align:"auto"})},[s,p]),h.jsx("nav",{id:"tree","aria-label":"Files",ref:d,children:h.jsx("div",{style:{height:m.getTotalSize(),position:"relative"},children:m.getVirtualItems().map(y=>{const{node:v,depth:b}=p[y.index],x=v.dir?r.has(v.path):!1,_=()=>{if(v.dir&&s===v.path&&l){a(v.path);return}u(v.path),v.dir||mr()};return h.jsxs("div",{className:"row "+(v.dir?"dir":"file")+(s===v.path?" active":"")+(v.dir&&!x?" collapsed":""),"data-path":v.path,tabIndex:0,role:"button",title:v.name,"aria-expanded":v.dir?x: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)=>h.jsx("span",{className:"tguide",style:{left:8+E*13+5},"aria-hidden":"true"},E)),h.jsx("span",{className:"chev",onClick:C=>{v.dir&&(C.stopPropagation(),a(v.path))},children:h.jsx(ht,{name:"chevd"})}),h.jsx("span",{className:"ticon",children:h.jsx(ht,{name:v.dir?"folder":"doc"})}),h.jsx("span",{className:"label",children:v.name})]},y.key)})})})}function cI(e){const n=e.split("/"),r=[];let a="";for(let s=0;s{a=a?a+"/"+s:s;const u=a,d=l===r.length-1;return h.jsxs("span",{children:[l>0&&h.jsx("span",{className:"crumb-sep",children:"/"}),d?h.jsx("span",{children:s}):h.jsx("span",{className:"crumb-seg",title:u,onClick:()=>n(u),children:s})]},u)})})}function rw(e){if(e==="")return[];const n=e.split(` -`);return n[n.length-1]===""&&n.pop(),n}const dI=4e6;function fI(e,n){let r=0;for(;rs.push({op:"-",line:l[v],an:r+v+1}),y=v=>s.push({op:"+",line:u[v],bn:r+v+1});if(d*p>dI){for(let v=0;v=0;_--)for(let C=p-1;C>=0;C--)v[_][C]=l[_]===u[C]?v[_+1][C+1]+1:Math.max(v[_+1][C],v[_][C+1]);let b=0,x=0;for(;b=v[b][x+1]?m(b++):y(x++);for(;ba.op==="+").length,del:r.filter(a=>a.op==="-").length}}const zC=1<<20,mI=8192;function pI(e){if(e.byteLength>zC)return{kind:"too-large",size:e.byteLength};if(e.subarray(0,mI).includes(0))return{kind:"binary"};try{return{kind:"text",text:new TextDecoder("utf-8",{fatal:!0}).decode(e)}}catch{return{kind:"binary"}}}function Ym(e,n,r,a){let s=e+"blob?sha="+encodeURIComponent(n);return r&&(s+="&name="+encodeURIComponent(r)),a&&(s+="&download=1"),s}async function gI(e){const n=await nT(e),r=Number(n.headers.get("Content-Length"));return r>zC?{kind:"too-large",size:r}:pI(new Uint8Array(await n.arrayBuffer()))}function kC(e,n,r,a){return Ht({queryKey:n,queryFn:()=>gI(e),enabled:r,...a?{staleTime:1/0,gcTime:1/0}:{},retry:!1})}function iw(e,n,r){return kC(n?Ym(e,n):"",["blob",e,n],!!n,!0)}function vI(e){return e.slice(e.lastIndexOf("/")+1)}function yI({apiBase:e,path:n,prev:r,cur:a}){const s=vI(n);return h.jsxs("span",{className:"dv-dl",children:[h.jsx("a",{href:Ym(e,r,s,!0),children:"download previous"}),h.jsx("a",{href:Ym(e,a,s,!0),children:"download this version"})]})}function bI({apiBase:e,path:n,prev:r,cur:a}){const s=iw(e,r),l=iw(e,a),u=s.data?.kind==="text"&&l.data?.kind==="text",d=w.useMemo(()=>s.data?.kind==="text"&&l.data?.kind==="text"?hI(s.data.text,l.data.text):null,[s.data,l.data]);if(s.error||l.error)return h.jsx("div",{className:"dv dv-msg",children:"Could not load one of the versions."});if(!s.data||!l.data)return h.jsx("div",{className:"dv dv-msg",children:"Loading changes…"});if(!u){const v=s.data.kind==="too-large"||l.data.kind==="too-large";return h.jsxs("div",{className:"dv dv-msg",children:[v?"Too large to diff — download to compare.":"Binary file — no diff available.",h.jsx(yI,{apiBase:e,path:n,prev:r,cur:a})]})}const{lines:p,add:m,del:y}=d;return h.jsxs("div",{className:"dv",children:[h.jsxs("div",{className:"dv-head",children:[h.jsxs("span",{className:"dv-stat",children:[h.jsxs("span",{className:"dv-add",children:["+",m]})," ",h.jsxs("span",{className:"dv-del",children:["−",y]})]}),m===0&&y===0&&h.jsx("span",{className:"dv-same",children:"No line changes"})]}),h.jsx("div",{className:"dv-body",children:p.map((v,b)=>h.jsxs("div",{className:"dv-line dv-"+(v.op==="="?"ctx":v.op==="+"?"ins":"rm"),children:[h.jsx("span",{className:"dv-n",children:v.an??""}),h.jsx("span",{className:"dv-n",children:v.bn??""}),h.jsx("span",{className:"dv-mark",children:v.op==="="?" ":v.op}),h.jsx("span",{className:"dv-text",children:v.line||" "})]},b))})]})}const xI={add:"added",edit:"edited",delete:"deleted"};function LC({text:e}){return h.jsx(h.Fragment,{children:e.split(/(https?:\/\/\S+)/).map((n,r)=>/^https?:\/\//.test(n)?h.jsx("a",{href:n,target:"_blank",rel:"noopener",children:n},r):n)})}function cg({entry:e,apiBase:n,onOpen:r,diff:a,restore:s,remove:l,restoreSha:u,inRun:d}){const[p,m]=w.useState(!1),[y,v]=w.useState(!1),b=e.kind==="put"?"edit":e.kind,x=ud(e),_=[e.device.name||e.device.id,e.device.os].filter(Boolean).join(" · "),C=b!=="delete",E=!!a&&b!=="delete"&&!!e.blob,T=!!d&&b==="add",O=!!s&&!!u&&!T,j=!!l&&T,k=!!s?.busy&&s.busy===e.path+u,$=!!l?.busy&&l.busy===e.path,B=C&&!!e.blob,H=e.path.split("/").pop()||e.path,V=new Date(e.time).toLocaleString(),me=n+"blob?sha="+e.blob+"&name="+encodeURIComponent(H)+"&download=1",ge=()=>v(!y),de=Q=>{Q.target.tagName!=="A"&&C&&r(e.path,e.blob)};return h.jsxs("div",{className:"hentry "+b+(C?" clickable":""),tabIndex:C?0:void 0,role:C?"button":void 0,onClick:de,onKeyDown:Q=>{C&&(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),r(e.path,e.blob))},children:[h.jsxs("div",{className:"hline",children:[h.jsx("span",{className:"hkind",children:xI[b]||b}),h.jsx("span",{className:"hpath",children:e.path}),h.jsx("span",{className:"htime",children:V})]}),h.jsxs("div",{className:"hmeta",children:[h.jsx("span",{className:"hwho",children:x}),h.jsx("span",{className:"hdev",children:_}),h.jsx("span",{className:"hsize",children:e.size?lg(e.size):""}),O&&h.jsxs("button",{type:"button",className:"hrestore-btn",disabled:k,title:"Put this version of "+e.path+" back as a new change",onClick:Q=>{Q.stopPropagation(),s.onRestore(e.path,u)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"hist"}),k?"restoring…":"restore"]}),j&&h.jsxs("button",{type:"button",className:"hremove-btn",disabled:$,title:"Remove "+e.path+" — this run created it",onClick:Q=>{Q.stopPropagation(),l.onRemove(e.path)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"trash"}),$?"removing…":"undo — remove file"]})]}),e.note&&!d&&h.jsx("div",{className:"hnote"+(p?" open":""),tabIndex:0,role:"button",title:p?"Collapse note":"Show full note","aria-expanded":p,onClick:Q=>{Q.stopPropagation(),Q.target.tagName!=="A"&&m(!p)},onKeyDown:Q=>{(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),Q.stopPropagation(),m(!p))},children:h.jsx(LC,{text:e.note})}),(E||B)&&h.jsxs("div",{className:"hactions",children:[E&&(a.prev?h.jsxs("button",{type:"button",className:"hdiff-btn"+(y?" open":""),"aria-expanded":y,onClick:Q=>{Q.stopPropagation(),ge()},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:y?"chevd":"chev"}),y?"hide changes":"show changes"]}):h.jsx("div",{className:"hdiff-none",children:"First version — nothing to compare against"})),B&&h.jsxs(h.Fragment,{children:[h.jsxs("button",{type:"button",className:"hver-btn","aria-label":`Open ${H} as of ${V}`,onClick:Q=>{Q.stopPropagation(),r(e.path,e.blob)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"clock"}),"Open this version"]}),h.jsxs("a",{className:"hver-btn",download:!0,href:me,"aria-label":`Download ${H} as of ${V}`,onClick:Q=>Q.stopPropagation(),onKeyDown:Q=>{Q.stopPropagation(),Q.key===" "&&(Q.preventDefault(),Q.currentTarget.click())},children:[h.jsx(ht,{name:"download"}),"Download"]})]})]}),E&&a.prev&&y&&h.jsx("div",{onClick:Q=>Q.stopPropagation(),children:h.jsx(bI,{apiBase:a.apiBase,path:e.path,prev:a.prev,cur:e.blob})})]})}function wI(e){const{node:n,heatMap:r,onOpen:a}=e,s=(n.children||[]).slice().sort((m,y)=>Number(y.dir||!1)-Number(m.dir||!1)||m.name.localeCompare(y.name)),l=s.filter(m=>m.dir).length,u=s.length-l,d=[];l&&d.push(l+(l===1?" folder":" folders")),u&&d.push(u+(u===1?" file":" files"));const p=ew(r,n.path,!0);return p&&d.push(Ys(p)+" in 30 days"),h.jsxs("div",{className:"dirlist",children:[h.jsxs("h1",{className:"dl-title",children:[h.jsx("span",{className:"dl-title-icon",children:h.jsx(ht,{name:"folder"})}),h.jsx("span",{children:n.name})]}),h.jsx("p",{className:"dl-sub",children:d.join(" · ")||"Empty folder"}),s.length===0?h.jsx("div",{className:"dl-empty",children:"Nothing in this folder yet."}):h.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?lg(m.size):"",m.time?new Date(m.time).toLocaleDateString():""].filter(Boolean).join(" · ");const v=ew(r,m.path,!!m.dir);return v&&(y=Ys(v)+(y?" · "+y:"")),h.jsxs("div",{className:"dl-row",tabIndex:0,role:"button",title:m.path,onClick:()=>a(m.path),onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),a(m.path))},children:[h.jsx("span",{className:"ticon",children:h.jsx(ht,{name:m.dir?"folder":"doc"})}),h.jsx("span",{className:"dl-name",children:m.name}),v&&h.jsx("span",{className:"heatdot lvl"+k8(v),role:"img","aria-label":Ys(v)+" in 30 days",title:Ys(v)+" in 30 days"}),h.jsx("span",{className:"dl-meta",children:y})]},m.path)})}),e.hub&&h.jsx(SI,{apiBase:e.apiBase,prefix:n.path+"/",onOpen:a,onFullHistory:()=>e.onFullHistory(n.path+"/"),onRendered:e.onRendered})]})}function SI(e){const n=H8(e.apiBase,e.prefix,!0),{onRendered:r}=e;return w.useEffect(()=>{n&&n.length&&r&&r()},[n,r]),!n||n.length===0?null:h.jsxs("div",{className:"dl-history",children:[h.jsx("h3",{className:"dl-h3",children:"Recent changes"}),h.jsx("div",{className:"history dl-hlist",children:n.map((a,s)=>h.jsx(cg,{entry:a,apiBase:e.apiBase,onOpen:e.onOpen},s))}),h.jsx("button",{className:"ai-btn dl-more",onClick:e.onFullHistory,children:"Full history"})]})}function _I(e){const{apiBase:n,path:r,version:a,onMeta:s}=e,l=a?n+"blob?sha="+a+"&name="+encodeURIComponent(r):n+"file?path="+encodeURIComponent(r);return w.useEffect(()=>()=>s(""),[r,s]),i8.test(r)?h.jsx(RI,{...e}):bC.test(r)?h.jsx("iframe",{className:"htmlview",sandbox:"allow-scripts",src:l,title:r,onLoad:e.onRendered}):xC.test(r)?h.jsx("iframe",{className:"pdfview",src:l,title:r,onLoad:e.onRendered}):a8.test(r)?h.jsx(OI,{src:l,alt:r,version:a,onRendered:e.onRendered}):o8.test(r)?h.jsx(AI,{...e,fileURL:l}):h.jsx(CI,{...e,fileURL:l})}function CI(e){const{apiBase:n,path:r,version:a,fileURL:s,onRendered:l}=e,{data:u,error:d}=kC(s,["text",s],!0,!!a);return w.useEffect(()=>{u&&l?.()},[u,l]),d?h.jsx(dd,{version:a,err:d}):u?u.kind==="text"?h.jsx("pre",{className:"plain",children:u.text},r):h.jsx(EI,{apiBase:n,path:r,version:a,fileURL:s,children:u.kind==="too-large"?`Too large to preview (${lg(u.size)}).`:"No preview for this file type."}):null}function EI(e){const{apiBase:n,path:r,version:a,fileURL:s}=e;return h.jsxs("div",{className:"filecard",children:[h.jsx("div",{className:"name",children:r.split("/").pop()}),h.jsx("p",{children:e.children}),h.jsx("a",{className:"btn",download:!0,href:a?s+"&download=1":n+"download?path="+encodeURIComponent(r),children:"Download"})]})}function RI(e){const{apiBase:n,path:r,version:a,heatMap:s,flatFiles:l,onOpenFile:u,onMeta:d,onRendered:p}=e,{data:m,error:y}=Ht({queryKey:["render",n,r,a||""],queryFn:()=>sn(n+"render?path="+encodeURIComponent(r)+(a?"&sha="+a:"")),retry:a?!1:void 0}),v=w.useMemo(()=>m?jI(m.html,r,n):"",[m,r,n]);return w.useEffect(()=>{if(!m)return;const b=[];(m.user_name||m.user||m.author)&&b.push(ud(m)+(m.device?" on "+m.device:"")),m.time&&b.push(new Date(m.time).toLocaleString());const x=a?null:s&&s[m.path];x&&Bo(x)&&b.push(Ys(x)+" / 30d"),d(b.join(" · ")),p?.()},[m,a,s,d,p]),y?h.jsx(dd,{version:a,err:y}):m?h.jsx("div",{dangerouslySetInnerHTML:{__html:v},onClick:b=>TI(b,r,l,u)}):null}function TI(e,n,r,a){const s=e.target.closest("a");if(!s||!e.currentTarget.contains(s))return;const l=s.getAttribute("href")||"",u=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"";l.startsWith("wiki:")?(e.preventDefault(),MI(decodeURIComponent(l.slice(5)),r,a)):/^([a-z]+:|\/|#)/i.test(l)||(e.preventDefault(),a(wC(u,decodeURIComponent(l))))}function jI(e,n,r){const a=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"",s=u=>r+"file?path="+encodeURIComponent(u),l=new DOMParser().parseFromString(e,"text/html");for(const u of l.querySelectorAll("img")){const d=u.getAttribute("src")||"";/^([a-z]+:|\/)/i.test(d)||u.setAttribute("src",s(wC(a,d)))}for(const u of l.querySelectorAll("a")){const d=u.getAttribute("href")||"";/^https?:/i.test(d)&&(u.setAttribute("target","_blank"),u.setAttribute("rel","noopener"))}return l.body.innerHTML}function OI(e){const[n,r]=w.useState(!1);return n?h.jsx(dd,{version:e.version,err:new Error("could not be loaded")}):h.jsx("img",{src:e.src,alt:e.alt,onLoad:e.onRendered,onError:()=>r(!0)})}function dd({version:e,err:n}){return h.jsx("div",{className:"empty",children:e?"That version isn't available.":"Could not load file: "+n.message})}function AI(e){const{path:n,version:r,fileURL:a,onRendered:s}=e,{data:l,error:u}=Ht({queryKey:["text",a],queryFn:async()=>{const d=await fetch(a);if(!d.ok)throw new Error(await d.text());return d.text()},retry:r?!1:void 0});return w.useEffect(()=>{l!=null&&s?.()},[l,s]),u?h.jsx(dd,{version:r,err:u}):l==null?null:h.jsx("pre",{className:"plain",children:l},n)}function MI(e,n,r){const a=e.toLowerCase(),s=n.find(l=>l.path.toLowerCase()===a||l.path.toLowerCase()===a+".md")||n.find(l=>{const u=l.name.toLowerCase();return u===a||u===a+".md"});s&&r(s.path)}const NI=[{value:"",label:"Never"},{value:"24h",label:"In 24 hours"},{value:"168h",label:"In 7 days"},{value:"720h",label:"In 30 days"}];function DI({url:e,copied:n,onClose:r}){const a=e.split("/s/")[1],[s,l]=w.useState(""),[u,d]=w.useState(),[p,m]=w.useState(!1),y=w.useRef(null);async function v(b){const x=s;l(b),m(!0);try{const _=await er("PATCH","/api/shares/"+a,{expires_in:b});d(_.expires)}catch(_){Ke(_.message,!0),l(x)}finally{m(!1)}}return h.jsx(Qu,{open:!0,onOpenChange:b=>!b&&r(),children:h.jsxs(Xu,{className:"modal",showCloseButton:!1,onOpenAutoFocus:b=>{b.preventDefault(),y.current?.focus()},children:[h.jsx(bl,{asChild:!0,children:h.jsx("h3",{children:"Public link"})}),h.jsxs("p",{children:[h.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until it expires or you revoke it."]}),h.jsx("div",{className:"modal-url",children:e}),h.jsxs("div",{className:"modal-expiry",children:[h.jsx("label",{htmlFor:"share-expiry",children:"Expires"}),h.jsx("select",{id:"share-expiry",value:s,disabled:p,onChange:b=>v(b.target.value),children:NI.map(b=>h.jsx("option",{value:b.value,children:b.label},b.value))}),h.jsx("span",{className:"modal-expiry-note",children:_C(u)})]}),h.jsxs("div",{className:"modal-actions",children:[h.jsx(vt,{ref:y,variant:"primary",onClick:()=>Ho(e).then(b=>Ke(b?"Copied.":"Select and copy the link above.")),children:n?"Copied ✓":"Copy link"}),h.jsx(vt,{variant:"subtle",onClick:()=>window.open(e,"_blank"),children:"Open"}),h.jsx(vt,{variant:"subtle",onClick:r,children:"Done"})]})]})})}function zI({shares:e,canRevoke:n,onChanged:r}){return e.length===0?null:h.jsxs("div",{className:"share-banner",role:"status",children:[h.jsxs("div",{className:"sb-head",children:[h.jsx(ht,{name:"share"}),h.jsx("b",{children:"Publicly shared"}),h.jsxs("span",{className:"sb-count",children:[e.length," active link",e.length>1?"s":""]})]}),h.jsxs("p",{className:"sb-note",children:[h.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until you revoke it."]}),e.map(a=>h.jsxs("div",{className:"sb-link",children:[h.jsx("span",{className:"sb-url mono",title:a.url,children:a.url}),h.jsx("span",{className:"sb-meta",children:CC(a,!1)}),h.jsxs("span",{className:"sb-actions",children:[h.jsx(vt,{variant:"subtle",onClick:()=>Ho(a.url).then(s=>Ke(s?"Copied.":"Select and copy the link.")),children:"Copy link"}),h.jsx(vt,{variant:"subtle",onClick:()=>window.open(a.url,"_blank"),children:"Open"}),n&&h.jsx("button",{className:"ai-del","aria-label":`Revoke the share of ${a.path}`,onClick:()=>RC(a,r),children:"Revoke"})]})]},a.token))]})}var aw=1,kI=.9,LI=.8,$I=.17,am=.1,om=.999,II=.9999,FI=.99,VI=/[\\\/_+.#"@\[\(\{&]/,PI=/[\\\/_+.#"@\[\(\{&]/g,UI=/[\s-]/,$C=/[\s-]/g;function Qm(e,n,r,a,s,l,u){if(l===n.length)return s===e.length?aw:FI;var d=`${s},${l}`;if(u[d]!==void 0)return u[d];for(var p=a.charAt(l),m=r.indexOf(p,s),y=0,v,b,x,_;m>=0;)v=Qm(e,n,r,a,m+1,l+1,u),v>y&&(m===s?v*=aw:VI.test(e.charAt(m-1))?(v*=LI,x=e.slice(s,m-1).match(PI),x&&s>0&&(v*=Math.pow(om,x.length))):UI.test(e.charAt(m-1))?(v*=kI,_=e.slice(s,m-1).match($C),_&&s>0&&(v*=Math.pow(om,_.length))):(v*=$I,s>0&&(v*=Math.pow(om,m-s))),e.charAt(m)!==n.charAt(l)&&(v*=II)),(vv&&(v=b*am)),v>y&&(y=v),m=r.indexOf(p,m+1);return u[d]=y,y}function ow(e){return e.toLowerCase().replace($C," ")}function HI(e,n,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,Qm(e,n,ow(e),ow(n),0,0,{})}var qs='[cmdk-group=""]',sm='[cmdk-group-items=""]',BI='[cmdk-group-heading=""]',IC='[cmdk-item=""]',sw=`${IC}:not([aria-disabled="true"])`,Xm="cmdk-item-select",Oo="data-value",qI=(e,n,r)=>HI(e,n,r),FC=w.createContext(void 0),Cl=()=>w.useContext(FC),VC=w.createContext(void 0),ug=()=>w.useContext(VC),PC=w.createContext(void 0),UC=w.forwardRef((e,n)=>{let r=Ao(()=>{var M,U;return{search:"",value:(U=(M=e.value)!=null?M:e.defaultValue)!=null?U:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),a=Ao(()=>new Set),s=Ao(()=>new Map),l=Ao(()=>new Map),u=Ao(()=>new Set),d=HC(e),{label:p,children:m,value:y,onValueChange:v,filter:b,shouldFilter:x,loop:_,disablePointerSelection:C=!1,vimBindings:E=!0,...T}=e,O=fn(),j=fn(),k=fn(),$=w.useRef(null),B=nF();ja(()=>{if(y!==void 0){let M=y.trim();r.current.value=M,H.emit()}},[y]),ja(()=>{B(6,le)},[]);let H=w.useMemo(()=>({subscribe:M=>(u.current.add(M),()=>u.current.delete(M)),snapshot:()=>r.current,setState:(M,U,X)=>{var K,se,ee,ve;if(!Object.is(r.current[M],U)){if(r.current[M]=U,M==="search")Q(),ge(),B(1,de);else if(M==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let ye=document.getElementById(k);ye?ye.focus():(K=document.getElementById(O))==null||K.focus()}if(B(7,()=>{var ye;r.current.selectedItemId=(ye=ce())==null?void 0:ye.id,H.emit()}),X||B(5,le),((se=d.current)==null?void 0:se.value)!==void 0){let ye=U??"";(ve=(ee=d.current).onValueChange)==null||ve.call(ee,ye);return}}H.emit()}},emit:()=>{u.current.forEach(M=>M())}}),[]),V=w.useMemo(()=>({value:(M,U,X)=>{var K;U!==((K=l.current.get(M))==null?void 0:K.value)&&(l.current.set(M,{value:U,keywords:X}),r.current.filtered.items.set(M,me(U,X)),B(2,()=>{ge(),H.emit()}))},item:(M,U)=>(a.current.add(M),U&&(s.current.has(U)?s.current.get(U).add(M):s.current.set(U,new Set([M]))),B(3,()=>{Q(),ge(),r.current.value||de(),H.emit()}),()=>{l.current.delete(M),a.current.delete(M),r.current.filtered.items.delete(M);let X=ce();B(4,()=>{Q(),X?.getAttribute("id")===M&&de(),H.emit()})}),group:M=>(s.current.has(M)||s.current.set(M,new Set),()=>{l.current.delete(M),s.current.delete(M)}),filter:()=>d.current.shouldFilter,label:p||e["aria-label"],getDisablePointerSelection:()=>d.current.disablePointerSelection,listId:O,inputId:k,labelId:j,listInnerRef:$}),[]);function me(M,U){var X,K;let se=(K=(X=d.current)==null?void 0:X.filter)!=null?K:qI;return M?se(M,r.current.search,U):0}function ge(){if(!r.current.search||d.current.shouldFilter===!1)return;let M=r.current.filtered.items,U=[];r.current.filtered.groups.forEach(K=>{let se=s.current.get(K),ee=0;se.forEach(ve=>{let ye=M.get(ve);ee=Math.max(ye,ee)}),U.push([K,ee])});let X=$.current;xe().sort((K,se)=>{var ee,ve;let ye=K.getAttribute("id"),Ne=se.getAttribute("id");return((ee=M.get(Ne))!=null?ee:0)-((ve=M.get(ye))!=null?ve:0)}).forEach(K=>{let se=K.closest(sm);se?se.appendChild(K.parentElement===se?K:K.closest(`${sm} > *`)):X.appendChild(K.parentElement===X?K:K.closest(`${sm} > *`))}),U.sort((K,se)=>se[1]-K[1]).forEach(K=>{var se;let ee=(se=$.current)==null?void 0:se.querySelector(`${qs}[${Oo}="${encodeURIComponent(K[0])}"]`);ee?.parentElement.appendChild(ee)})}function de(){let M=xe().find(X=>X.getAttribute("aria-disabled")!=="true"),U=M?.getAttribute(Oo);H.setState("value",U||void 0)}function Q(){var M,U,X,K;if(!r.current.search||d.current.shouldFilter===!1){r.current.filtered.count=a.current.size;return}r.current.filtered.groups=new Set;let se=0;for(let ee of a.current){let ve=(U=(M=l.current.get(ee))==null?void 0:M.value)!=null?U:"",ye=(K=(X=l.current.get(ee))==null?void 0:X.keywords)!=null?K:[],Ne=me(ve,ye);r.current.filtered.items.set(ee,Ne),Ne>0&&se++}for(let[ee,ve]of s.current)for(let ye of ve)if(r.current.filtered.items.get(ye)>0){r.current.filtered.groups.add(ee);break}r.current.filtered.count=se}function le(){var M,U,X;let K=ce();K&&(((M=K.parentElement)==null?void 0:M.firstChild)===K&&((X=(U=K.closest(qs))==null?void 0:U.querySelector(BI))==null||X.scrollIntoView({block:"nearest"})),K.scrollIntoView({block:"nearest"}))}function ce(){var M;return(M=$.current)==null?void 0:M.querySelector(`${IC}[aria-selected="true"]`)}function xe(){var M;return Array.from(((M=$.current)==null?void 0:M.querySelectorAll(sw))||[])}function N(M){let U=xe()[M];U&&H.setState("value",U.getAttribute(Oo))}function G(M){var U;let X=ce(),K=xe(),se=K.findIndex(ve=>ve===X),ee=K[se+M];(U=d.current)!=null&&U.loop&&(ee=se+M<0?K[K.length-1]:se+M===K.length?K[0]:K[se+M]),ee&&H.setState("value",ee.getAttribute(Oo))}function ie(M){let U=ce(),X=U?.closest(qs),K;for(;X&&!K;)X=M>0?eF(X,qs):tF(X,qs),K=X?.querySelector(sw);K?H.setState("value",K.getAttribute(Oo)):G(M)}let te=()=>N(xe().length-1),ne=M=>{M.preventDefault(),M.metaKey?te():M.altKey?ie(1):G(1)},z=M=>{M.preventDefault(),M.metaKey?N(0):M.altKey?ie(-1):G(-1)};return w.createElement($e.div,{ref:n,tabIndex:-1,...T,"cmdk-root":"",onKeyDown:M=>{var U;(U=T.onKeyDown)==null||U.call(T,M);let X=M.nativeEvent.isComposing||M.keyCode===229;if(!(M.defaultPrevented||X))switch(M.key){case"n":case"j":{E&&M.ctrlKey&&ne(M);break}case"ArrowDown":{ne(M);break}case"p":case"k":{E&&M.ctrlKey&&z(M);break}case"ArrowUp":{z(M);break}case"Home":{M.preventDefault(),N(0);break}case"End":{M.preventDefault(),te();break}case"Enter":{M.preventDefault();let K=ce();if(K){let se=new Event(Xm);K.dispatchEvent(se)}}}}},w.createElement("label",{"cmdk-label":"",htmlFor:V.inputId,id:V.labelId,style:iF},p),hd(e,M=>w.createElement(VC.Provider,{value:H},w.createElement(FC.Provider,{value:V},M))))}),GI=w.forwardRef((e,n)=>{var r,a;let s=fn(),l=w.useRef(null),u=w.useContext(PC),d=Cl(),p=HC(e),m=(a=(r=p.current)==null?void 0:r.forceMount)!=null?a:u?.forceMount;ja(()=>{if(!m)return d.item(s,u?.id)},[m]);let y=BC(s,l,[e.value,e.children,l],e.keywords),v=ug(),b=Hi(B=>B.value&&B.value===y.current),x=Hi(B=>m||d.filter()===!1?!0:B.search?B.filtered.items.get(s)>0:!0);w.useEffect(()=>{let B=l.current;if(!(!B||e.disabled))return B.addEventListener(Xm,_),()=>B.removeEventListener(Xm,_)},[x,e.onSelect,e.disabled]);function _(){var B,H;C(),(H=(B=p.current).onSelect)==null||H.call(B,y.current)}function C(){v.setState("value",y.current,!0)}if(!x)return null;let{disabled:E,value:T,onSelect:O,forceMount:j,keywords:k,...$}=e;return w.createElement($e.div,{ref:Fo(l,n),...$,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)}),ZI=w.forwardRef((e,n)=>{let{heading:r,children:a,forceMount:s,...l}=e,u=fn(),d=w.useRef(null),p=w.useRef(null),m=fn(),y=Cl(),v=Hi(x=>s||y.filter()===!1?!0:x.search?x.filtered.groups.has(u):!0);ja(()=>y.group(u),[]),BC(u,d,[e.value,e.heading,p]);let b=w.useMemo(()=>({id:u,forceMount:s}),[s]);return w.createElement($e.div,{ref:Fo(d,n),...l,"cmdk-group":"",role:"presentation",hidden:v?void 0:!0},r&&w.createElement("div",{ref:p,"cmdk-group-heading":"","aria-hidden":!0,id:m},r),hd(e,x=>w.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?m:void 0},w.createElement(PC.Provider,{value:b},x))))}),KI=w.forwardRef((e,n)=>{let{alwaysRender:r,...a}=e,s=w.useRef(null),l=Hi(u=>!u.search);return!r&&!l?null:w.createElement($e.div,{ref:Fo(s,n),...a,"cmdk-separator":"",role:"separator"})}),YI=w.forwardRef((e,n)=>{let{onValueChange:r,...a}=e,s=e.value!=null,l=ug(),u=Hi(m=>m.search),d=Hi(m=>m.selectedItemId),p=Cl();return w.useEffect(()=>{e.value!=null&&l.setState("search",e.value)},[e.value]),w.createElement($e.input,{ref:n,...a,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":p.listId,"aria-labelledby":p.labelId,"aria-activedescendant":d,id:p.inputId,type:"text",value:s?e.value:u,onChange:m=>{s||l.setState("search",m.target.value),r?.(m.target.value)}})}),QI=w.forwardRef((e,n)=>{let{children:r,label:a="Suggestions",...s}=e,l=w.useRef(null),u=w.useRef(null),d=Hi(m=>m.selectedItemId),p=Cl();return w.useEffect(()=>{if(u.current&&l.current){let m=u.current,y=l.current,v,b=new ResizeObserver(()=>{v=requestAnimationFrame(()=>{let x=m.offsetHeight;y.style.setProperty("--cmdk-list-height",x.toFixed(1)+"px")})});return b.observe(m),()=>{cancelAnimationFrame(v),b.unobserve(m)}}},[]),w.createElement($e.div,{ref:Fo(l,n),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":d,"aria-label":a,id:p.listId},hd(e,m=>w.createElement("div",{ref:Fo(u,p.listInnerRef),"cmdk-list-sizer":""},m)))}),XI=w.forwardRef((e,n)=>{let{open:r,onOpenChange:a,overlayClassName:s,contentClassName:l,container:u,...d}=e;return w.createElement(cp,{open:r,onOpenChange:a},w.createElement(dp,{container:u},w.createElement(fp,{"cmdk-overlay":"",className:s}),w.createElement(hp,{"aria-label":e.label,"cmdk-dialog":"",className:l},w.createElement(UC,{ref:n,...d}))))}),JI=w.forwardRef((e,n)=>Hi(r=>r.filtered.count===0)?w.createElement($e.div,{ref:n,...e,"cmdk-empty":"",role:"presentation"}):null),WI=w.forwardRef((e,n)=>{let{progress:r,children:a,label:s="Loading...",...l}=e;return w.createElement($e.div,{ref:n,...l,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},hd(e,u=>w.createElement("div",{"aria-hidden":!0},u)))}),fd=Object.assign(UC,{List:QI,Item:GI,Input:YI,Group:ZI,Separator:KI,Dialog:XI,Empty:JI,Loading:WI});function eF(e,n){let r=e.nextElementSibling;for(;r;){if(r.matches(n))return r;r=r.nextElementSibling}}function tF(e,n){let r=e.previousElementSibling;for(;r;){if(r.matches(n))return r;r=r.previousElementSibling}}function HC(e){let n=w.useRef(e);return ja(()=>{n.current=e}),n}var ja=typeof window>"u"?w.useEffect:w.useLayoutEffect;function Ao(e){let n=w.useRef();return n.current===void 0&&(n.current=e()),n}function Hi(e){let n=ug(),r=()=>e(n.snapshot());return w.useSyncExternalStore(n.subscribe,r,r)}function BC(e,n,r,a=[]){let s=w.useRef(),l=Cl();return ja(()=>{var u;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}})(),p=a.map(m=>m.trim());l.value(e,d,p),(u=n.current)==null||u.setAttribute(Oo,d),s.current=d}),s}var nF=()=>{let[e,n]=w.useState(),r=Ao(()=>new Map);return ja(()=>{r.current.forEach(a=>a()),r.current=new Map},[e]),(a,s)=>{r.current.set(a,s),n({})}};function rF(e){let n=e.type;return typeof n=="function"?n(e.props):"render"in n?n.render(e.props):e}function hd({asChild:e,children:n},r){return e&&w.isValidElement(n)?w.cloneElement(rF(n),{ref:n.ref},r(n.props.children)):r(n)}var iF={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function aF({className:e,...n}){return h.jsx(fd,{"data-slot":"command",className:Xe("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...n})}function oF({className:e,...n}){return h.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[h.jsx(u_,{className:"size-4 shrink-0 opacity-50"}),h.jsx(fd.Input,{"data-slot":"command-input",className:Xe("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 sF({className:e,...n}){return h.jsx(fd.List,{"data-slot":"command-list",className:Xe("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",e),...n})}function lF({className:e,...n}){return h.jsx(fd.Item,{"data-slot":"command-item",className:Xe("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 lw(e,n){if(!e)return{score:0,hits:[]};const r=e.toLowerCase(),a=n.toLowerCase();let s=0,l=0,u=0;const d=[];for(let p=0;p3&&a.endsWith("ies")?s=a.slice(0,-3)+"y":a.length>3&&a.endsWith("es")?s=a.slice(0,-2):a.length>2&&a.endsWith("s")&&(s=a.slice(0,-1)),s?lw(s,n):null}function uF({text:e,hits:n}){const r=[];let a=0;return n.forEach((s,l)=>{s>a&&r.push(e.slice(a,s)),r.push(h.jsx("b",{children:e[s]},l)),a=s+1}),r.push(e.slice(a)),h.jsx("span",{className:"plabel",children:r})}function dF({open:e,onClose:n,candidates:r}){const[a,s]=w.useState(""),l=w.useMemo(()=>{if(!e)return[];const d=[];for(const p of r()){const m=cF(a,p.label);m&&d.push({...p,score:m.score,hits:m.hits})}return d.sort((p,m)=>m.score-p.score),d.slice(0,40)},[e,a,r]);w.useEffect(()=>{e&&s("")},[e]);const u=d=>{n(),d.run()};return h.jsx(Qu,{open:e,onOpenChange:d=>!d&&n(),children:h.jsxs(Xu,{id:"palette",className:"palette",showCloseButton:!1,"aria-describedby":void 0,children:[h.jsx(bl,{className:"sr-only",children:"Search and quick actions"}),h.jsxs(aF,{shouldFilter:!1,loop:!0,children:[h.jsxs("div",{id:"palette-inputwrap",children:[h.jsx(ht,{name:"search"}),h.jsx(oF,{id:"palette-input",placeholder:"Search file names, projects, actions…",autoComplete:"off",spellCheck:!1,value:a,onValueChange:s})]}),h.jsx(sF,{id:"palette-results",children:l.length===0?h.jsx("div",{className:"pempty",children:"No matches — search covers file names, projects, and actions"}):l.map(d=>h.jsxs(lF,{value:d.kind+":"+d.label,onSelect:()=>u(d),children:[h.jsx("span",{className:"picon",children:h.jsx(ht,{name:d.icon})}),h.jsx(uF,{text:d.label,hits:d.hits}),h.jsx("span",{className:"pkind",children:d.kind})]},d.kind+":"+d.label))}),h.jsx("footer",{id:"palette-hint",children:"↑↓ navigate · ⏎ select · esc close"})]})]})})}const Qs=3,Mo=30;function fF(e,n){return Ht({queryKey:["heatDevices",e],queryFn:()=>sn(e+"heat?by=device&days=30"),enabled:n,retry:!1,staleTime:6e4}).data?.devices??null}function cw(e){const[n,r]=w.useState("all"),{flatFiles:a,heatMap:s,devices:l,scope:u}=e,d=b=>!u||b===u||b.startsWith(u+"/"),p=u?a.filter(b=>d(b.path)):a,m=l&&u?l.map(b=>{const x={};for(const[_,C]of Object.entries(b.folders||{}))d(_)&&(x[_]=C);return{...b,folders:x}}).filter(b=>Object.keys(b.folders).length>0):l,y=Date.now(),v=p.map(b=>{const x=s&&s[b.path]||{},_=b.time?Math.max(0,(y-new Date(b.time).getTime())/864e5):0,C=n==="all"?Bo(x):x[n]||0;return{path:b.path,reads:C,agent:x.agent||0,human:x.human||0,share:x.share||0,total:Bo(x),days:_,danger:C>=Qs&&_>=Mo}});return h.jsxs("div",{className:"insights",children:[h.jsxs("h1",{className:"in-title",children:["Knowledge insights",u?h.jsxs("span",{className:"in-scope",children:[" · ",u]}):null]}),h.jsx("p",{className:"dl-sub",children:u?`Reads over the last 30 days × freshness, for ${u} 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."}),h.jsx("div",{className:"in-lens",children:["all","human","agent"].map(b=>h.jsx("button",{className:"in-lens-btn"+(b===n?" active":""),onClick:()=>r(b),children:b==="all"?"All reads":b==="human"?"Human reads":"Agent reads"},b))}),h.jsx("h3",{className:"dl-h3",children:"Map — cell size = reads, color = freshness (scale below)"}),h.jsx(hF,{pts:v,onOpenFile:e.onOpenFile,onOpenFolder:e.onOpenFolder,isFolder:e.isFolder}),h.jsx("h3",{className:"dl-h3",children:"Reads × freshness"}),h.jsx(pF,{pts:v,onOpenFile:e.onOpenFile}),h.jsx("h3",{className:"dl-h3",children:"Hot path — top files by reads"}),h.jsx(gF,{pts:v,lens:n,onOpenFile:e.onOpenFile}),m&&m.length>0&&h.jsxs(h.Fragment,{children:[h.jsx("h3",{className:"dl-h3",children:"Agent coverage — which agents read which areas"}),h.jsx(vF,{devices:m})]})]})}function qC(e){const n=[[76,195,138],[232,196,84],[224,93,93]],r=Math.min(1,Math.max(0,e/300))*(n.length-1),a=Math.min(n.length-2,Math.floor(r)),s=r-a,l=n[a].map((u,d)=>Math.round(u+(n[a+1][d]-u)*s));return`rgb(${l[0]},${l[1]},${l[2]})`}function uw(e,n,r,a,s){const l=e.reduce((m,y)=>m+y.value,0);if(!l||a<=0||s<=0)return[];const u=e.slice().sort((m,y)=>y.value-m.value).map(m=>({it:m,a:m.value/l*a*s})),d=(m,y)=>{const b=m.reduce((_,C)=>_+C.a,0)/y;let x=0;for(const _ of m){const C=_.a/b;x=Math.max(x,C/b,b/C)}return x},p=[];for(;u.length;){const m=a>=s,y=m?s:a,v=[u.shift()];for(;u.length&&d(v.concat(u[0]),y)<=d(v,y);)v.push(u.shift());const b=v.reduce((_,C)=>_+C.a,0)/y;let x=0;for(const _ of v){const C=_.a/b;m?p.push({item:_.it,x:n,y:r+x,w:b,h:C}):p.push({item:_.it,x:n+x,y:r,w:C,h:b}),x+=C}m?(n+=b,a-=b):(r+=b,s-=b)}return p}const lm=15;function dw(e,n,r){const a=Math.floor((r-8)/6),s=`${e} · ${n}`;return s.length<=a?{label:s,fit:a}:{label:e.length>a?e.slice(0,Math.max(1,a-1))+"…":e,fit:a}}const fw=(e,n)=>`${e} ${n}${e===1?"":"s"}`;function hF({pts:e,onOpenFile:n,onOpenFolder:r,isFolder:a}){const u=new Map;for(const p of e){const m=p.path.includes("/")?p.path.split("/")[0]:"/";let y=u.get(m);y||u.set(m,y={name:m,files:[],value:0,reads:0}),y.files.push(p),y.value+=p.reads+1,y.reads+=p.reads}const d=[];for(const p of uw([...u.values()],0,0,720,480)){const m=p.item,y=m.name==="/"?"":m.name,v=m.name==="/"?"(root)":m.name;if(d.push(h.jsx("rect",{x:p.x+1,y:p.y+1,width:Math.max(0,p.w-2),height:Math.max(0,p.h-2),rx:3,className:"in-tm-group","data-dir":y,children:h.jsx("title",{children:`${m.name==="/"?"(root)":m.name+"/"} — ${fw(m.reads,"read")}/30d · ${fw(m.files.length,"file")}`})},"g"+m.name)),p.w>46&&p.h>lm+10){const{label:x}=dw(v,m.reads,p.w);d.push(h.jsx("text",{x:p.x+5,y:p.y+12,className:"in-tm-glabel","data-dir":y,children:x},"gl"+m.name))}const b=uw(m.files.map(x=>({...x,name:x.path.split("/").pop(),value:x.reads+1})),p.x+2,p.y+lm,Math.max(0,p.w-4),Math.max(0,p.h-lm-2));for(const x of b)if(d.push(h.jsx("rect",{x:x.x+.6,y:x.y+.6,width:Math.max(.4,x.w-1.2),height:Math.max(.4,x.h-1.2),rx:1.5,fill:qC(x.item.days),className:"in-tm-cell","data-path":x.item.path,children:h.jsx("title",{children:`${x.item.path} — ${x.item.reads} read${x.item.reads===1?"":"s"}/30d · changed ${Math.round(x.item.days)}d ago`})},x.item.path)),x.w>54&&x.h>16){const{label:_,fit:C}=dw((x.item.danger?"⚠ ":"")+x.item.name,x.item.reads,x.w);C>=5&&d.push(h.jsx("text",{x:x.x+4.5,y:x.y+12.5,className:"in-tm-label","data-path":x.item.path,children:_},"l"+x.item.path))}}return h.jsxs(h.Fragment,{children:[h.jsx("svg",{viewBox:"0 0 720 480",className:"in-chart in-treemap",onClick:p=>{const m=p.target.closest("[data-path], [data-dir]");if(!m)return;const y=m.getAttribute("data-path");if(y)return n(y);const v=m.getAttribute("data-dir");v&&a(v)&&r(v)},children:d}),h.jsx(mF,{pts:e})]})}function mF({pts:e}){const n=I8(e.map(a=>a.days));if(!n)return null;const r=V8(n.min,n.max);return h.jsxs("p",{className:"in-legend in-tm-legend",children:["freshness 0d",h.jsx("span",{className:"in-sw in-sw-age",style:{background:`linear-gradient(to right, ${[0,60,150,300].map(qC).join(", ")})`}}),"300d+",h.jsx("span",{className:"in-tm-range",children:F8(n.min,n.max)?`all files here: ${r} old — colour carries no signal in this range`:`observed: ${r} old`})]})}function pF({pts:e,onOpenFile:n}){const s={l:44,r:16,t:20,b:34},l=Math.max(Mo*2,...e.map(v=>v.days)),u=Math.max(Qs*2,...e.map(v=>v.reads)),d=v=>Math.log10(v+1)/Math.log10(l+1),p=v=>Math.log10(v+1)/Math.log10(u+1),m=v=>s.l+d(v)*(720-s.l-s.r),y=v=>360-s.b-p(v)*(360-s.t-s.b);return h.jsxs("svg",{viewBox:"0 0 720 360",className:"in-chart",children:[h.jsx("rect",{x:m(Mo),y:s.t,width:720-s.r-m(Mo),height:y(Qs)-s.t,className:"in-danger-zone"}),h.jsx("line",{x1:m(Mo),y1:s.t,x2:m(Mo),y2:360-s.b,className:"in-threshold"}),h.jsx("line",{x1:s.l,y1:y(Qs),x2:720-s.r,y2:y(Qs),className:"in-threshold"}),h.jsx("line",{x1:s.l,y1:360-s.b,x2:720-s.r,y2:360-s.b,className:"in-axis"}),h.jsx("line",{x1:s.l,y1:s.t,x2:s.l,y2:360-s.b,className:"in-axis"}),h.jsx("text",{x:(s.l+720-s.r)/2,y:352,className:"in-label",children:"days since last change →"}),h.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 →"}),h.jsx("text",{x:720-s.r-6,y:s.t+14,className:"in-quad in-quad-danger",textAnchor:"end",children:"hot + stale"}),h.jsx("text",{x:s.l+6,y:s.t+14,className:"in-quad",children:"hot + fresh"}),h.jsx("text",{x:720-s.r-6,y:360-s.b-8,className:"in-quad",textAnchor:"end",children:"cold + stale"}),h.jsx("text",{x:s.l+6,y:360-s.b-8,className:"in-quad",children:"cold + fresh"}),h.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(v=>{const b=v.total?(v.agent||0)/v.total:0;return h.jsx("circle",{cx:Number(m(v.days).toFixed(1)),cy:Number(y(v.reads).toFixed(1)),r:Number((3+4*b).toFixed(1)),className:"in-pt"+(v.danger?" danger":v.reads?"":" cold"),onClick:()=>n(v.path),children:h.jsx("title",{children:`${v.path} — ${v.reads} read${v.reads===1?"":"s"} / 30d · changed ${Math.round(v.days)}d ago`})},v.path)})]})}function gF({pts:e,lens:n,onOpenFile:r}){const a=e.filter(u=>u.reads>0).sort((u,d)=>d.reads-u.reads||d.days-u.days).slice(0,20);if(!a.length)return h.jsx("div",{className:"dl-empty",children:"No reads in the window yet."});const s=a[0].reads,l=a.some(u=>u.share>0);return h.jsxs(h.Fragment,{children:[h.jsx("div",{className:"in-hotpath",children:a.map(u=>{const d=n==="agent"?{agent:1,human:0,share:0}:n==="human"?{agent:0,human:1,share:0}:L8(u),p=u.reads/s*100;return h.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:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),r(u.path))},children:[h.jsx("span",{className:"in-hp-name"+(u.danger?" danger":""),children:u.path+(u.danger?" ⚠":"")}),h.jsxs("span",{className:"in-hp-bar",children:[h.jsx("span",{className:"in-hp-agent",style:{width:(p*d.agent).toFixed(1)+"%"}}),h.jsx("span",{className:"in-hp-human",style:{width:(p*d.human).toFixed(1)+"%"}}),h.jsx("span",{className:"in-hp-share",style:{width:(p*d.share).toFixed(1)+"%"}})]}),h.jsx("span",{className:"in-hp-count",children:u.reads})]},u.path)})}),h.jsxs("p",{className:"in-legend",children:[h.jsx("span",{className:"in-sw agent"})," agent reads ",h.jsx("span",{className:"in-sw human"})," human reads",l&&h.jsxs(h.Fragment,{children:[" ",h.jsx("span",{className:"in-sw share"})," shared reads"]})]})]})}function vF({devices:e}){const n=new Map;for(const b of e)for(const[x,_]of Object.entries(b.folders||{}))n.set(x,(n.get(x)||0)+_);const r=[...n.entries()].sort((b,x)=>x[1]-b[1]).slice(0,12).map(b=>b[0]),a=e.slice(0,12),s=140,l=6,u=Math.min(76,Math.max(34,(720-s-8)/r.length)),d=26,p=720,m=l+a.length*d+58,y=Math.max(1,...a.flatMap(b=>r.map(x=>(b.folders||{})[x]||0))),v=b=>{const x=[23,25,31],_=[245,166,35],C=x.map((E,T)=>Math.round(E+(_[T]-E)*b));return`rgb(${C[0]},${C[1]},${C[2]})`};return h.jsxs("svg",{viewBox:`0 0 ${p} ${m}`,className:"in-chart in-matrix",children:[a.map((b,x)=>{let _=b.name||b.id||"";return _.length>20&&(_=_.slice(0,19)+"…"),h.jsxs("g",{children:[h.jsx("text",{x:s-8,y:l+x*d+17,textAnchor:"end",className:"in-label",children:_}),r.map((C,E)=>{const T=(b.folders||{})[C]||0;return h.jsx("rect",{x:s+E*u,y:l+x*d,width:u-4,height:d-4,rx:3,fill:v(Math.sqrt(T/y)),children:h.jsx("title",{children:`${b.name||b.id} × ${C||"(root)"}: ${T} read${T===1?"":"s"}/30d`})},C)})]},b.id||x)}),r.map((b,x)=>{const _=s+x*u+(u-4)/2,C=l+a.length*d+14;return h.jsx("text",{x:_,y:C,className:"in-label",textAnchor:"end",transform:`rotate(-28 ${_} ${C})`,children:b||"(root)"},b)})]})}function GC(e){return new Set(e.entries.map(n=>n.path)).size}function yF(e){const n=l=>l.note+"\0"+(l.device?.id??""),r=new Map;e.forEach((l,u)=>{if(!l.note)return;const d=r.get(n(l));if(d){d.entries.push(l),d.idx.push(u);return}r.set(n(l),{note:l.note,entries:[l],idx:[u]})});const a=[],s=new Set;return e.forEach((l,u)=>{const d=l.note?r.get(n(l)):void 0;if(!d||GC(d)<2){a.push({i:u});return}s.has(d)||(s.add(d),a.push({run:d,i:u}))}),a}function bF(e){const{apiBase:n,target:r,isFolder:a,onMeta:s,onRendered:l,restore:u,remove:d}=e,p=r?a(r)?{prefix:r+"/"}:{path:r}:{prefix:""},m="path"in p&&p.path!==void 0?"path="+encodeURIComponent(p.path):"prefix="+encodeURIComponent(p.prefix??""),{data:y,error:v}=Ht({queryKey:["history",n,m,200],queryFn:()=>sn(n+"history?"+m+"&n=200"),staleTime:15e3});if(w.useEffect(()=>{v&&s("History unavailable: "+v.message)},[v,s]),w.useEffect(()=>{y&&l?.()},[y,l]),!y)return null;const b=y.entries||[],x=!!r&&!a(r),_=E=>{for(let T=E+1;Tb[E].kind==="delete"?_(E):b[E].blob;return h.jsxs("div",{className:"history",children:[b.length===0&&h.jsx("div",{className:"empty",children:"No history yet."}),yF(b).map((E,T)=>E.run?h.jsx(xF,{run:E.run,onOpen:e.onOpen,apiBase:n,perFile:x,prevBlob:_,restoreSha:C,restore:u,remove:d},"g"+T):h.jsx(cg,{entry:b[E.i],apiBase:n,onOpen:e.onOpen,diff:x?{apiBase:n,prev:_(E.i)}:void 0,restore:u,restoreSha:C(E.i)},"r"+E.i))]})}function xF({run:e,onOpen:n,apiBase:r,perFile:a,prevBlob:s,restoreSha:l,restore:u,remove:d}){const[p,m]=w.useState(!0),y=e.entries[0],v=ud(y),b=[y.device.name||y.device.id,y.device.os].filter(Boolean).join(" · "),x=e.entries.map(E=>new Date(E.time).getTime()),_=wF(Math.min(...x),Math.max(...x)),C=GC(e);return h.jsxs("div",{className:"hrun"+(p?" open":""),children:[h.jsxs("div",{className:"hrun-head",children:[h.jsx("button",{type:"button",className:"hrun-toggle","aria-expanded":p,title:p?"Collapse this run":"Expand this run",onClick:()=>m(!p),children:h.jsx(ht,{name:p?"chevd":"chev"})}),h.jsx("span",{className:"hrun-note",children:h.jsx(LC,{text:e.note})}),h.jsxs("span",{className:"hrun-meta",children:[C," file",C===1?"":"s"," · ",v,b?" · "+b:""]}),h.jsx("span",{className:"hrun-time",children:_})]}),p&&h.jsx("div",{className:"hrun-body",children:e.entries.map((E,T)=>h.jsx(cg,{entry:E,apiBase:r,onOpen:n,diff:a?{apiBase:r,prev:s(e.idx[T])}:void 0,restore:u,remove:d,restoreSha:l(e.idx[T]),inRun:!0},T))})]})}function wF(e,n){const r=new Date(e),a=new Date(n),s=u=>u.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});if(r.toDateString()!==a.toDateString())return r.toLocaleString()+" – "+a.toLocaleString();const l=a.toLocaleDateString();return e===n?l+" "+s(a):l+" "+s(r)+" – "+s(a)}function SF(e,n){return e?n(e)?e+"/ (folder)":e:"all changes"}function _F(e){const{apiBase:n,path:r,version:a}=e,s="path="+encodeURIComponent(r),{data:l}=Ht({queryKey:["history",n,s,200],queryFn:()=>sn(n+"history?"+s+"&n=200"),staleTime:15e3}),u=l?.entries?.find(y=>y.blob===a),d=u?ud(u):"",p=u?.time?new Date(u.time).toLocaleString():"",m=n+"blob?sha="+a+"&name="+encodeURIComponent(r.split("/").pop()||r)+"&download=1";return h.jsxs("div",{className:"vbanner",role:"status",children:[h.jsx("span",{className:"vb-icon",children:h.jsx(ht,{name:"clock"})}),h.jsxs("div",{className:"vb-text",children:[h.jsx("b",{children:[p&&"Version from "+p,d&&"by "+d].filter(Boolean).join(" ")||"Earlier version"}),h.jsx("span",{children:"This is not the current file."})]}),h.jsxs("div",{className:"vb-actions",children:[h.jsx("button",{className:"ai-btn",onClick:e.onViewCurrent,children:"View current"}),h.jsx("a",{className:"ai-btn",download:!0,href:m,children:"Download this version"})]})]})}function ZC(e){const{config:n,apiBase:r,route:a,hub:s,project:l}=e,u=Hp(),d=Oa(),{tree:p,flatFiles:m,dirIndex:y,loaded:v}=P8(r,!s||!!l),b=U8(r,s&&!!l&&!!n.reads?.enabled),x=s&&!!l&&!a.path&&!a.view,_=a.view==="dashboard"||x,C=fF(r,_);w.useEffect(()=>{_&&d.invalidateQueries({queryKey:["heat",r]})},[_,r,d]);const E=a.path,T=a.view?void 0:a.version,O=E||(a.view==="dashboard"||a.view==="history")&&a.viewTarget||"",j=!!E&&y.has(E),k=!!E&&v&&!j&&m.some(D=>D.path===E),$=!!E&&v&&!j&&!k,B=j&&!a.view,[H,V]=w.useState(()=>new Set),me=w.useRef(!0);w.useEffect(()=>{if(!p||!me.current)return;me.current=!1;const D=(p.children||[]).filter(I=>I.dir);D.length===1&&V(I=>new Set(I).add(D[0].path))},[p]),w.useEffect(()=>{!O||!v||V(D=>{const I=new Set(D);for(const W of cI(O))I.add(W);return y.has(O)&&I.add(O),I})},[O,v,y]);const ge=w.useCallback(D=>{V(I=>{const W=new Set(I);return W.has(D)?W.delete(D):W.add(D),W})},[]),de=w.useRef(null),Q=w.useRef(new Map),le=w.useRef({key:"",want:0,attempts:0});w.useEffect(()=>{le.current={key:u,want:v3()==="POP"?Q.current.get(u)??0:0,attempts:0}},[u]);const ce=w.useCallback(()=>{const D=de.current,I=le.current;!D||I.key!==u||I.attempts>=3||(I.attempts++,D.scrollTo({top:I.want,behavior:"instant"}))},[u]),xe=w.useCallback(()=>{de.current&&Q.current.set(u,de.current.scrollTop)},[u]),N=w.useCallback((D,I)=>{pn(Ju(D,l?.id,I)),mr()},[l?.id]),G=w.useCallback(D=>pn(ya("history",l?.id,D)),[l?.id]),[ie,te]=w.useState(""),[ne,z]=w.useState(null),[M,U]=w.useState(!1),[X,K]=w.useState(!1);w.useEffect(()=>TD(()=>K(!0)),[]);const se=w.useRef(null),ee=e.panel??null,ve=!ee&&s&&!!l&&k&&xa(l.perm,"write"),{data:ye}=b_(l?.id,s&&!!l),Ne=w.useCallback(()=>{d.invalidateQueries({queryKey:["shares",l?.id]})},[d,l?.id]),Ie=k?(ye||[]).filter(D=>D.path===E):[],Ve=!ee&&s&&!!l,dt=!ee&&k,Qe=!ee&&(k||s&&!!l&&j),vn=T?r+"blob?sha="+T+"&name="+encodeURIComponent(E)+"&download=1":r+"download?path="+encodeURIComponent(E),cn=w.useCallback(async()=>{try{const D=await fetch(r+"shares",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:E})});if(!D.ok)throw new Error(await D.text());const I=await D.json();Ew("share_created");const W=await Ho(I.url);z({url:I.url,copied:W}),Ne()}catch(D){Ke("Share failed: "+D.message,!0)}},[r,E,Ne]),[Kt,ir]=w.useState(""),Dt=s&&!!l&&xa(l?.perm,"write"),ar=w.useCallback(async(D,I)=>{ir(D+I);try{await wa(r+"restore",{path:D,sha:I}),d.invalidateQueries({queryKey:["history",r]}),d.invalidateQueries({queryKey:["tree",r]}),d.invalidateQueries({queryKey:["render",r,D]}),d.invalidateQueries({queryKey:["text"]}),Ke("Restored "+D+" — it syncs to every device like any other change.")}catch(W){Ke("Restore failed: "+W.message,!0)}finally{ir("")}},[r,d]),[Nr,jt]=w.useState(""),Un=w.useCallback(async D=>{if(await wl("Remove "+D+"?","It disappears from every synced device. History keeps it — you can restore it from the DELETED row afterwards.","Remove file",!0)){jt(D);try{await wa(r+"remove",{path:D}),d.invalidateQueries({queryKey:["history",r]}),d.invalidateQueries({queryKey:["tree",r]}),d.invalidateQueries({queryKey:["render",r,D]}),d.invalidateQueries({queryKey:["text"]}),Ke("Removed "+D+" — it syncs to every device like any other change.")}catch(I){Ke("Remove failed: "+I.message,!0)}finally{jt("")}}},[r,d]),wt=w.useCallback(()=>{if(!E)return G("");G(j?E+"/":E)},[E,j,G]);w.useEffect(()=>{const D=I=>{(I.metaKey||I.ctrlKey)&&I.key.toLowerCase()==="k"&&(I.preventDefault(),K(W=>!W))};return window.addEventListener("keydown",D),()=>window.removeEventListener("keydown",D)},[]);const ai=w.useCallback(()=>{const D=[],I=(W,fe,pe,be)=>D.push({icon:W,label:fe,kind:pe,run:be});if(s&&l&&E&&(k&&I("share","Share: "+E,"action",cn),I("hist","History: "+E,"action",wt),k&&I("download","Download: "+E,"action",()=>se.current?.click())),s&&l&&I("hist","History: whole project","action",()=>G("")),s)for(const W of e.projects||[])(!l||W.id!==l.id)&&I("folder","Switch to project: "+W.name,"project",()=>pn("/"+W.id));n.auth?.enabled&&I("power","Sign out","action",()=>window.location.href="/auth/logout");for(const W of y.keys())I("folder",W,"folder",()=>N(W));for(const W of m)I("doc",W.path,"file",()=>N(W.path));return D},[s,l,E,k,n.auth?.enabled,y,m,e.projects,cn,wt,G,N]);w.useEffect(()=>{if(!M)return;const D=()=>U(!1);return document.addEventListener("click",D),()=>document.removeEventListener("click",D)},[M]);const yn=w.useCallback(D=>y.has(D),[y]);let Dr="app",or,Yt;ee?Yt=ee.body:a.view==="dashboard"?Yt=h.jsx(cw,{flatFiles:m,heatMap:b,devices:C,scope:a.viewTarget||"",onOpenFile:N,onOpenFolder:N,isFolder:yn}):a.view==="history"?Yt=h.jsx(bF,{apiBase:r,target:a.viewTarget||"",isFolder:yn,onOpen:N,onMeta:te,onRendered:ce,restore:Dt?{onRestore:ar,busy:Kt}:void 0,remove:Dt?{onRemove:Un,busy:Nr}:void 0}):E?v?$?Yt=h.jsxs("div",{className:"notfound",children:[h.jsx("h1",{children:"Couldn't find that"}),h.jsxs("p",{children:[h.jsx("code",{children:E})," isn't in this project right now."]}),h.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."}),h.jsx("button",{className:"pbtn",onClick:()=>d.invalidateQueries({queryKey:["tree",r]}),children:"Check again"})]}):j?Yt=h.jsx(wI,{node:y.get(E),heatMap:b,hub:s&&!!l,apiBase:r,onOpen:N,onFullHistory:G,onRendered:ce}):(Dr=bC.test(E)||xC.test(E)?"wide":"read",or="markdown",Yt=h.jsxs(h.Fragment,{children:[T&&h.jsx(_F,{apiBase:r,path:E,version:T,onViewCurrent:()=>N(E)}),h.jsx(_I,{apiBase:r,path:E,version:T,heatMap:b,flatFiles:m,onOpenFile:N,onMeta:te,onRendered:ce})]})):Yt=h.jsx("div",{className:"empty",children:"Loading…"}):x?Yt=h.jsxs(h.Fragment,{children:[h.jsx(MC,{project:l,existing:a.connect==="existing"}),h.jsx("div",{className:"home-insights",children:h.jsx(cw,{flatFiles:m,heatMap:b,devices:C,onOpenFile:N,onOpenFolder:N,isFolder:yn})})]}):Yt=h.jsx("div",{className:"empty",children:"Select a file to read it."});const bn=ee?ee.crumb:E?h.jsx(uI,{path:E,onOpenFolder:N}):a.view==="dashboard"?"Dashboard — "+(a.viewTarget||l?.name||""):a.view==="history"?"History — "+SF(a.viewTarget||"",yn):x?l.name:null,A=h.jsx(ll,{crumb:bn,meta:ie,actions:h.jsxs(h.Fragment,{children:[ve&&h.jsx(vt,{id:"share-btn",variant:"toolbar",className:"icon-only",title:"Share","aria-label":"Share",onClick:cn,children:h.jsx(ht,{name:"share"})}),Ve&&!E&&!a.view&&h.jsxs(vt,{id:"history-btn",variant:"toolbar",onClick:wt,children:[h.jsx(ht,{name:"hist"})," ",h.jsx("span",{className:"lbl",children:"History"})]}),dt&&h.jsx("a",{id:"download",hidden:!0,download:!0,href:vn,ref:se,children:"Download"}),Qe&&h.jsx(vt,{id:"more-btn",variant:"toolbar",className:"icon-only",title:"More actions","aria-label":"More actions",onClick:D=>{D.stopPropagation(),U(!M)},children:h.jsx(ht,{name:"dots"})}),M&&h.jsxs("div",{id:"more-menu",role:"menu",children:[Ve&&h.jsx("button",{className:"more-item",onClick:wt,children:"History"}),dt&&h.jsx("button",{className:"more-item",onClick:()=>se.current?.click(),children:"Download"}),s&&!!l&&h.jsx("button",{className:"more-item",onClick:()=>{e.onClosePanel?.(),pn(ya("dashboard",l?.id,E))},children:"Dashboard"})]})]})});return h.jsxs(h.Fragment,{children:[h.jsx(sl,{vault:e.sidebar.vault,projectsNav:e.sidebar.projectsNav,orgBar:e.sidebar.orgBar,tree:h.jsx(lI,{root:p,expanded:H,onToggle:ge,currentPath:O,listingShowing:B,onOpen:N}),topbar:A,contentRef:de,onContentScroll:xe,children:h.jsxs(bu,{width:Dr,className:or,children:[!ee&&k&&h.jsx(zI,{shares:Ie,canRevoke:!!l&&xa(l.perm,"write"),onChanged:Ne}),Yt]})}),ne&&h.jsx(DI,{url:ne.url,copied:ne.copied,onClose:()=>{z(null),Ne()}}),h.jsx(dF,{open:X,onClose:()=>K(!1),candidates:ai})]})}function CF({config:e}){const n=Hp(),r=w_(),[a,s]=w.useState(null),[l,u]=w.useState(null);w.useEffect(()=>u(null),[n]);const d=w.useMemo(()=>{const ce=n.split("?")[0].match(/^\/join\/([0-9a-f]+)\/?$/);return ce?ce[1]:null},[n]),{data:p}=d3(!d),{data:m}=f3(!d),y=!!e.auth.admin,{data:v}=x_(y),b=w.useMemo(()=>__(n,"hub"),[n]),[x,_]=w.useState(!1),C=e.upload.enabled,E=async(ce,xe)=>{const N=xe===NC;try{const G=await wa("/api/projects",{name:ce,template:N?"":xe});_(!1),await r(),pn("/"+G.project.id+(N?"?connect=existing":"")),Ke(`Created “${G.project.name}”.`)}catch(G){Ke("Could not create the project: "+G.message,!0)}},T=w.useRef(!1);w.useEffect(()=>{T.current||d||!p||p.length>0||!C||(T.current=!0,_(!0))},[p,C,d]);const O=x?h.jsx(z8,{templates:e.templates??[],onCreate:E,onClose:()=>_(!1)}):null,j=w.useMemo(()=>p&&(p.find(ce=>ce.id===b.project)||a&&p.find(ce=>ce.org===a)||p[0])||null,[p,b.project,a]);if(w.useEffect(()=>{document.title=j?j.name+" — BearDrive":e.brand||"BearDrive"},[j,e]),d)return h.jsx(EF,{token:d,onDone:async ce=>{s(ce),await r(),pn("/",{replace:!0})}});const k=e.brand||"BearDrive",$=j&&m?.find(ce=>ce.id===j.org)||null,B=h.jsx(Yu,{name:k,onHome:()=>pn("/"),search:!!j}),H=e.me?h.jsx(C8,{me:e.me,org:$,orgActive:!!b.org,billing:e.billing,admin:y?{pending:v?.length||0,onClick:()=>{u({kind:"hub"}),mr()}}:void 0}):void 0;if(!p||!m)return h.jsx(sl,{vault:B,topbar:h.jsx(ll,{}),children:h.jsx(bu,{children:h.jsx("div",{className:"empty",children:"Loading…"})})});if(!j)return h.jsxs(sl,{vault:B,projectsNav:h.jsx(Jx,{projects:p,onNew:()=>_(!0)}),orgBar:H,topbar:h.jsx(ll,{}),children:[h.jsx(bu,{children:h.jsx(D8,{onNew:()=>_(!0),canCreate:C})}),O]});const V=l?.kind==="hub"?{crumb:"Signup & access",body:h.jsx(g8,{})}:null,me=b.org?m.find(ce=>ce.id===b.org):null,de=b.org&&!me?{crumb:"Organization",body:h.jsxs("div",{className:"empty",children:[h.jsx("h3",{children:"Organization not found"}),h.jsx("p",{children:"This organization doesn't exist, or you're no longer a member."}),h.jsx("p",{children:h.jsxs("a",{...xu("/"+j.id),children:["Back to ",j.name]})})]})}:me?{crumb:"Organization",body:h.jsx(h8,{org:me,projects:p,myEmail:e.me?.email||""})}:null,Q=b.billing?{crumb:"Billing",body:e.billing?h.jsx(E8,{url:e.billing.url}):h.jsxs("div",{className:"empty",children:[h.jsx("h3",{children:"No billing on this hub"}),h.jsx("p",{children:"This BearDrive hub doesn't have a billing surface."})]})}:null,le=b.view==="settings"?{crumb:"Project settings",body:h.jsx(O8,{project:j,org:$,onDeleted:async()=>{await r(),pn("/")}})}:b.view==="install"?{crumb:"Installation",body:h.jsx(MC,{project:j,existing:b.connect==="existing"})}:null;return!b.org&&!b.billing&&b.project!==j.id?h.jsx(ou,{to:"/"+j.id}):b.legacyView&&b.view?h.jsx(ou,{to:ya(b.view,j.id,b.viewTarget)}):b.trailingSlash&&b.path?h.jsx(ou,{to:Ju(b.path,j.id,b.version)}):h.jsxs(h.Fragment,{children:[h.jsx(ZC,{config:e,apiBase:"/api/p/"+j.id+"/",route:b,hub:!0,project:j,projects:p,sidebar:{vault:B,projectsNav:h.jsx(Jx,{projects:p,currentId:j.id,onNew:()=>_(!0),menu:{active:l?null:b.view==="dashboard"&&!b.viewTarget?"dashboard":b.view==="install"?"install":b.view==="history"&&!b.viewTarget?"history":b.view==="settings"?"settings":null,onDashboard:()=>{u(null),pn(ya("dashboard",j.id)),mr()},onInstall:()=>{u(null),pn(ya("install",j.id)),mr()},onHistory:()=>{u(null),pn(ya("history",j.id)),mr()},onSettings:()=>{u(null),pn(ya("settings",j.id)),mr()}}}),orgBar:H},panel:V||de||Q||le,onClosePanel:()=>u(null)},j.id),O]})}function EF({token:e,onDone:n}){return w.useEffect(()=>{let r=!1;return wa("/api/invites/"+e).then(a=>{r||(Ke(`Welcome — you joined the “${a.org.name}” team. Opening its projects…`),n(a.org.id))}).catch(a=>{r||String(a.message).includes("signing in")||(Ke("Could not accept the invite: "+a.message,!0),n(null))}),()=>{r=!0}},[e]),h.jsx(sl,{vault:h.jsx(Yu,{name:"BearDrive"}),topbar:h.jsx(ll,{}),children:h.jsx(bu,{children:h.jsx("div",{className:"empty",children:"Joining…"})})})}function RF({config:e}){const n=Hp(),r=e.volume||"BearDrive";w.useEffect(()=>{document.title=e.brand||r},[e,r]);const a=w.useMemo(()=>__(n,"volume"),[n]);return a.trailingSlash&&a.path?h.jsx(ou,{to:Ju(a.path)}):h.jsx(ZC,{config:e,apiBase:"/api/",route:a,hub:!1,sidebar:{vault:h.jsx(Yu,{name:r,showSignout:e.auth.enabled,search:!0})}})}function TF(){const{data:e}=rT();return h.jsxs(_D,{delayDuration:150,children:[e?e.mode==="hub"?h.jsx(CF,{config:e}):h.jsx(RF,{config:e}):h.jsx(sl,{vault:h.jsx(Yu,{name:"…",showSignout:!1}),topbar:h.jsx(ll,{}),children:h.jsx("div",{className:"empty",children:"Loading…"})}),h.jsx(r3,{}),h.jsx(l3,{})]})}const jF=new V2({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});m2.createRoot(document.getElementById("root")).render(h.jsx(w.StrictMode,{children:h.jsx(P2,{client:jF,children:h.jsx(TF,{})})})); +`);return n[n.length-1]===""&&n.pop(),n}const dI=4e6;function fI(e,n){let r=0;for(;rs.push({op:"-",line:l[v],an:r+v+1}),y=v=>s.push({op:"+",line:u[v],bn:r+v+1});if(d*p>dI){for(let v=0;v=0;_--)for(let C=p-1;C>=0;C--)v[_][C]=l[_]===u[C]?v[_+1][C+1]+1:Math.max(v[_+1][C],v[_][C+1]);let b=0,x=0;for(;b=v[b][x+1]?m(b++):y(x++);for(;ba.op==="+").length,del:r.filter(a=>a.op==="-").length}}const zC=1<<20,mI=8192;function pI(e){if(e.byteLength>zC)return{kind:"too-large",size:e.byteLength};if(e.subarray(0,mI).includes(0))return{kind:"binary"};try{return{kind:"text",text:new TextDecoder("utf-8",{fatal:!0}).decode(e)}}catch{return{kind:"binary"}}}function Ym(e,n,r,a){let s=e+"blob?sha="+encodeURIComponent(n);return r&&(s+="&name="+encodeURIComponent(r)),a&&(s+="&download=1"),s}async function gI(e){const n=await nT(e),r=Number(n.headers.get("Content-Length"));return r>zC?{kind:"too-large",size:r}:pI(new Uint8Array(await n.arrayBuffer()))}function kC(e,n,r,a){return Ht({queryKey:n,queryFn:()=>gI(e),enabled:r,...a?{staleTime:1/0,gcTime:1/0}:{},retry:!1})}function iw(e,n,r){return kC(n?Ym(e,n):"",["blob",e,n],!!n,!0)}function vI(e){return e.slice(e.lastIndexOf("/")+1)}function yI({apiBase:e,path:n,prev:r,cur:a}){const s=vI(n);return h.jsxs("span",{className:"dv-dl",children:[h.jsx("a",{href:Ym(e,r,s,!0),children:"download previous"}),h.jsx("a",{href:Ym(e,a,s,!0),children:"download this version"})]})}function bI({apiBase:e,path:n,prev:r,cur:a}){const s=iw(e,r),l=iw(e,a),u=s.data?.kind==="text"&&l.data?.kind==="text",d=w.useMemo(()=>s.data?.kind==="text"&&l.data?.kind==="text"?hI(s.data.text,l.data.text):null,[s.data,l.data]);if(s.error||l.error)return h.jsx("div",{className:"dv dv-msg",children:"Could not load one of the versions."});if(!s.data||!l.data)return h.jsx("div",{className:"dv dv-msg",children:"Loading changes…"});if(!u){const v=s.data.kind==="too-large"||l.data.kind==="too-large";return h.jsxs("div",{className:"dv dv-msg",children:[v?"Too large to diff — download to compare.":"Binary file — no diff available.",h.jsx(yI,{apiBase:e,path:n,prev:r,cur:a})]})}const{lines:p,add:m,del:y}=d;return h.jsxs("div",{className:"dv",children:[h.jsxs("div",{className:"dv-head",children:[h.jsxs("span",{className:"dv-stat",children:[h.jsxs("span",{className:"dv-add",children:["+",m]})," ",h.jsxs("span",{className:"dv-del",children:["−",y]})]}),m===0&&y===0&&h.jsx("span",{className:"dv-same",children:"No line changes"})]}),h.jsx("div",{className:"dv-body",children:p.map((v,b)=>h.jsxs("div",{className:"dv-line dv-"+(v.op==="="?"ctx":v.op==="+"?"ins":"rm"),children:[h.jsx("span",{className:"dv-n",children:v.an??""}),h.jsx("span",{className:"dv-n",children:v.bn??""}),h.jsx("span",{className:"dv-mark",children:v.op==="="?" ":v.op}),h.jsx("span",{className:"dv-text",children:v.line||" "})]},b))})]})}const xI={add:"added",edit:"edited",delete:"deleted"};function LC({text:e}){return h.jsx(h.Fragment,{children:e.split(/(https?:\/\/\S+)/).map((n,r)=>/^https?:\/\//.test(n)?h.jsx("a",{href:n,target:"_blank",rel:"noopener",children:n},r):n)})}function cg({entry:e,apiBase:n,onOpen:r,diff:a,restore:s,remove:l,restoreSha:u,inRun:d}){const[p,m]=w.useState(!1),[y,v]=w.useState(!1),b=e.kind==="put"?"edit":e.kind,x=ud(e),_=[e.device.name||e.device.id,e.device.os].filter(Boolean).join(" · "),C=b!=="delete",E=!!a&&b!=="delete"&&!!e.blob,T=!!d&&b==="add",O=!!s&&!!u&&!T,j=!!l&&T,k=!!s?.busy&&s.busy===e.path+u,$=!!l?.busy&&l.busy===e.path,B=C&&!!e.blob,H=e.path.split("/").pop()||e.path,V=new Date(e.time).toLocaleString(),me=n+"blob?sha="+e.blob+"&name="+encodeURIComponent(H)+"&download=1",ge=()=>v(!y),de=Q=>{Q.target.tagName!=="A"&&C&&r(e.path,e.blob)};return h.jsxs("div",{className:"hentry "+b+(C?" clickable":""),tabIndex:C?0:void 0,role:C?"button":void 0,onClick:de,onKeyDown:Q=>{C&&(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),r(e.path,e.blob))},children:[h.jsxs("div",{className:"hline",children:[h.jsx("span",{className:"hkind",children:xI[b]||b}),h.jsx("span",{className:"hpath",children:e.path}),h.jsx("span",{className:"htime",children:V})]}),h.jsxs("div",{className:"hmeta",children:[h.jsx("span",{className:"hwho",children:x}),h.jsx("span",{className:"hdev",children:_}),h.jsx("span",{className:"hsize",children:e.size?lg(e.size):""}),O&&h.jsxs("button",{type:"button",className:"hrestore-btn",disabled:k,title:"Put this version of "+e.path+" back as a new change",onClick:Q=>{Q.stopPropagation(),s.onRestore(e.path,u)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"hist"}),k?"restoring…":"restore"]}),j&&h.jsxs("button",{type:"button",className:"hremove-btn",disabled:$,title:"Remove "+e.path+" — this run created it",onClick:Q=>{Q.stopPropagation(),l.onRemove(e.path)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"trash"}),$?"removing…":"undo — remove file"]})]}),e.note&&!d&&h.jsx("div",{className:"hnote"+(p?" open":""),tabIndex:0,role:"button",title:p?"Collapse note":"Show full note","aria-expanded":p,onClick:Q=>{Q.stopPropagation(),Q.target.tagName!=="A"&&m(!p)},onKeyDown:Q=>{(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),Q.stopPropagation(),m(!p))},children:h.jsx(LC,{text:e.note})}),(E||B)&&h.jsxs("div",{className:"hactions",children:[E&&(a.prev?h.jsxs("button",{type:"button",className:"hdiff-btn"+(y?" open":""),"aria-expanded":y,onClick:Q=>{Q.stopPropagation(),ge()},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:y?"chevd":"chev"}),y?"hide changes":"show changes"]}):h.jsx("div",{className:"hdiff-none",children:"First version — nothing to compare against"})),B&&h.jsxs(h.Fragment,{children:[h.jsxs("button",{type:"button",className:"hver-btn","aria-label":`Open ${H} as of ${V}`,onClick:Q=>{Q.stopPropagation(),r(e.path,e.blob)},onKeyDown:Q=>Q.stopPropagation(),children:[h.jsx(ht,{name:"clock"}),"Open this version"]}),h.jsxs("a",{className:"hver-btn",download:!0,href:me,"aria-label":`Download ${H} as of ${V}`,onClick:Q=>Q.stopPropagation(),onKeyDown:Q=>{Q.stopPropagation(),Q.key===" "&&(Q.preventDefault(),Q.currentTarget.click())},children:[h.jsx(ht,{name:"download"}),"Download"]})]})]}),E&&a.prev&&y&&h.jsx("div",{onClick:Q=>Q.stopPropagation(),children:h.jsx(bI,{apiBase:a.apiBase,path:e.path,prev:a.prev,cur:e.blob})})]})}function wI(e){const{node:n,heatMap:r,onOpen:a}=e,s=(n.children||[]).slice().sort((m,y)=>Number(y.dir||!1)-Number(m.dir||!1)||m.name.localeCompare(y.name)),l=s.filter(m=>m.dir).length,u=s.length-l,d=[];l&&d.push(l+(l===1?" folder":" folders")),u&&d.push(u+(u===1?" file":" files"));const p=ew(r,n.path,!0);return p&&d.push(Ys(p)+" in 30 days"),h.jsxs("div",{className:"dirlist",children:[h.jsxs("h1",{className:"dl-title",children:[h.jsx("span",{className:"dl-title-icon",children:h.jsx(ht,{name:"folder"})}),h.jsx("span",{children:n.name})]}),h.jsx("p",{className:"dl-sub",children:d.join(" · ")||"Empty folder"}),s.length===0?h.jsx("div",{className:"dl-empty",children:"Nothing in this folder yet."}):h.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?lg(m.size):"",m.time?new Date(m.time).toLocaleDateString():""].filter(Boolean).join(" · ");const v=ew(r,m.path,!!m.dir);return v&&(y=Ys(v)+(y?" · "+y:"")),h.jsxs("div",{className:"dl-row",tabIndex:0,role:"button",title:m.path,onClick:()=>a(m.path),onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),a(m.path))},children:[h.jsx("span",{className:"ticon",children:h.jsx(ht,{name:m.dir?"folder":"doc"})}),h.jsx("span",{className:"dl-name",children:m.name}),v&&h.jsx("span",{className:"heatdot lvl"+k8(v),role:"img","aria-label":Ys(v)+" in 30 days",title:Ys(v)+" in 30 days"}),h.jsx("span",{className:"dl-meta",children:y})]},m.path)})}),e.hub&&h.jsx(SI,{apiBase:e.apiBase,prefix:n.path+"/",onOpen:a,onFullHistory:()=>e.onFullHistory(n.path+"/"),onRendered:e.onRendered})]})}function SI(e){const n=H8(e.apiBase,e.prefix,!0),{onRendered:r}=e;return w.useEffect(()=>{n&&n.length&&r&&r()},[n,r]),!n||n.length===0?null:h.jsxs("div",{className:"dl-history",children:[h.jsx("h3",{className:"dl-h3",children:"Recent changes"}),h.jsx("div",{className:"history dl-hlist",children:n.map((a,s)=>h.jsx(cg,{entry:a,apiBase:e.apiBase,onOpen:e.onOpen},s))}),h.jsx("button",{className:"ai-btn dl-more",onClick:e.onFullHistory,children:"Full history"})]})}function _I(e){const{apiBase:n,path:r,version:a,onMeta:s}=e,l=a?n+"blob?sha="+a+"&name="+encodeURIComponent(r):n+"file?path="+encodeURIComponent(r);return w.useEffect(()=>()=>s(""),[r,s]),i8.test(r)?h.jsx(RI,{...e}):bC.test(r)?h.jsx("iframe",{className:"htmlview",sandbox:"allow-scripts",src:l,title:r,onLoad:e.onRendered}):xC.test(r)?h.jsx("iframe",{className:"pdfview",src:l,title:r,onLoad:e.onRendered}):a8.test(r)?h.jsx(OI,{src:l,alt:r,version:a,onRendered:e.onRendered}):o8.test(r)?h.jsx(AI,{...e,fileURL:l}):h.jsx(CI,{...e,fileURL:l})}function CI(e){const{apiBase:n,path:r,version:a,fileURL:s,onRendered:l}=e,{data:u,error:d}=kC(s,["text",s],!0,!!a);return w.useEffect(()=>{u&&l?.()},[u,l]),d?h.jsx(dd,{version:a,err:d}):u?u.kind==="text"?h.jsx("pre",{className:"plain",children:u.text},r):h.jsx(EI,{apiBase:n,path:r,version:a,fileURL:s,children:u.kind==="too-large"?`Too large to preview (${lg(u.size)}).`:"No preview for this file type."}):null}function EI(e){const{apiBase:n,path:r,version:a,fileURL:s}=e;return h.jsxs("div",{className:"filecard",children:[h.jsx("div",{className:"name",children:r.split("/").pop()}),h.jsx("p",{children:e.children}),h.jsx("a",{className:"btn",download:!0,href:a?s+"&download=1":n+"download?path="+encodeURIComponent(r),children:"Download"})]})}function RI(e){const{apiBase:n,path:r,version:a,heatMap:s,flatFiles:l,onOpenFile:u,onMeta:d,onRendered:p}=e,{data:m,error:y}=Ht({queryKey:["render",n,r,a||""],queryFn:()=>sn(n+"render?path="+encodeURIComponent(r)+(a?"&sha="+a:"")),retry:a?!1:void 0}),v=w.useMemo(()=>m?jI(m.html,r,n):"",[m,r,n]);return w.useEffect(()=>{if(!m)return;const b=[];(m.user_name||m.user||m.author)&&b.push(ud(m)+(m.device?" on "+m.device:"")),m.time&&b.push(new Date(m.time).toLocaleString());const x=a?null:s&&s[m.path];x&&Bo(x)&&b.push(Ys(x)+" / 30d"),d(b.join(" · ")),p?.()},[m,a,s,d,p]),y?h.jsx(dd,{version:a,err:y}):m?h.jsx("div",{dangerouslySetInnerHTML:{__html:v},onClick:b=>TI(b,r,l,u)}):null}function TI(e,n,r,a){const s=e.target.closest("a");if(!s||!e.currentTarget.contains(s))return;const l=s.getAttribute("href")||"",u=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"";l.startsWith("wiki:")?(e.preventDefault(),MI(decodeURIComponent(l.slice(5)),r,a)):/^([a-z]+:|\/|#)/i.test(l)||(e.preventDefault(),a(wC(u,decodeURIComponent(l))))}function jI(e,n,r){const a=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"",s=u=>r+"file?path="+encodeURIComponent(u),l=new DOMParser().parseFromString(e,"text/html");for(const u of l.querySelectorAll("img")){const d=u.getAttribute("src")||"";/^([a-z]+:|\/)/i.test(d)||u.setAttribute("src",s(wC(a,d)))}for(const u of l.querySelectorAll("a")){const d=u.getAttribute("href")||"";/^https?:/i.test(d)&&(u.setAttribute("target","_blank"),u.setAttribute("rel","noopener"))}return l.body.innerHTML}function OI(e){const[n,r]=w.useState(!1);return n?h.jsx(dd,{version:e.version,err:new Error("could not be loaded")}):h.jsx("img",{src:e.src,alt:e.alt,onLoad:e.onRendered,onError:()=>r(!0)})}function dd({version:e,err:n}){return h.jsx("div",{className:"empty",children:e?"That version isn't available.":"Could not load file: "+n.message})}function AI(e){const{path:n,version:r,fileURL:a,onRendered:s}=e,{data:l,error:u}=Ht({queryKey:["text",a],queryFn:async()=>{const d=await fetch(a);if(!d.ok)throw new Error(await d.text());return d.text()},retry:r?!1:void 0});return w.useEffect(()=>{l!=null&&s?.()},[l,s]),u?h.jsx(dd,{version:r,err:u}):l==null?null:h.jsx("pre",{className:"plain",children:l},n)}function MI(e,n,r){const a=e.toLowerCase(),s=n.find(l=>l.path.toLowerCase()===a||l.path.toLowerCase()===a+".md")||n.find(l=>{const u=l.name.toLowerCase();return u===a||u===a+".md"});s&&r(s.path)}const NI=[{value:"",label:"Never"},{value:"24h",label:"In 24 hours"},{value:"168h",label:"In 7 days"},{value:"720h",label:"In 30 days"}];function DI({url:e,copied:n,onClose:r}){const a=e.split("/s/")[1],[s,l]=w.useState(""),[u,d]=w.useState(),[p,m]=w.useState(!1),y=w.useRef(null);async function v(b){const x=s;l(b),m(!0);try{const _=await er("PATCH","/api/shares/"+a,{expires_in:b});d(_.expires)}catch(_){Ke(_.message,!0),l(x)}finally{m(!1)}}return h.jsx(Qu,{open:!0,onOpenChange:b=>!b&&r(),children:h.jsxs(Xu,{className:"modal",showCloseButton:!1,onOpenAutoFocus:b=>{b.preventDefault(),y.current?.focus()},children:[h.jsx(bl,{asChild:!0,children:h.jsx("h3",{children:"Public link"})}),h.jsxs("p",{children:[h.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until it expires or you revoke it."]}),h.jsx("div",{className:"modal-url",children:e}),h.jsxs("div",{className:"modal-expiry",children:[h.jsx("label",{htmlFor:"share-expiry",children:"Expires"}),h.jsx("select",{id:"share-expiry",value:s,disabled:p,onChange:b=>v(b.target.value),children:NI.map(b=>h.jsx("option",{value:b.value,children:b.label},b.value))}),h.jsx("span",{className:"modal-expiry-note",children:_C(u)})]}),h.jsxs("div",{className:"modal-actions",children:[h.jsx(vt,{ref:y,variant:"primary",onClick:()=>Ho(e).then(b=>Ke(b?"Copied.":"Select and copy the link above.")),children:n?"Copied ✓":"Copy link"}),h.jsx(vt,{variant:"subtle",onClick:()=>window.open(e,"_blank"),children:"Open"}),h.jsx(vt,{variant:"subtle",onClick:r,children:"Done"})]})]})})}function zI({shares:e,canRevoke:n,onChanged:r}){return e.length===0?null:h.jsxs("div",{className:"share-banner",role:"status",children:[h.jsxs("div",{className:"sb-head",children:[h.jsx(ht,{name:"share"}),h.jsx("b",{children:"Publicly shared"}),h.jsxs("span",{className:"sb-count",children:[e.length," active link",e.length>1?"s":""]})]}),h.jsxs("p",{className:"sb-note",children:[h.jsx("b",{children:"Anyone with this link can view this file"})," — no account needed. It always shows the latest version until you revoke it."]}),e.map(a=>h.jsxs("div",{className:"sb-link",children:[h.jsx("span",{className:"sb-url mono",title:a.url,children:a.url}),h.jsx("span",{className:"sb-meta",children:CC(a,!1)}),h.jsxs("span",{className:"sb-actions",children:[h.jsx(vt,{variant:"subtle",onClick:()=>Ho(a.url).then(s=>Ke(s?"Copied.":"Select and copy the link.")),children:"Copy link"}),h.jsx(vt,{variant:"subtle",onClick:()=>window.open(a.url,"_blank"),children:"Open"}),n&&h.jsx("button",{className:"ai-del","aria-label":`Revoke the share of ${a.path}`,onClick:()=>RC(a,r),children:"Revoke"})]})]},a.token))]})}var aw=1,kI=.9,LI=.8,$I=.17,am=.1,om=.999,II=.9999,FI=.99,VI=/[\\\/_+.#"@\[\(\{&]/,PI=/[\\\/_+.#"@\[\(\{&]/g,UI=/[\s-]/,$C=/[\s-]/g;function Qm(e,n,r,a,s,l,u){if(l===n.length)return s===e.length?aw:FI;var d=`${s},${l}`;if(u[d]!==void 0)return u[d];for(var p=a.charAt(l),m=r.indexOf(p,s),y=0,v,b,x,_;m>=0;)v=Qm(e,n,r,a,m+1,l+1,u),v>y&&(m===s?v*=aw:VI.test(e.charAt(m-1))?(v*=LI,x=e.slice(s,m-1).match(PI),x&&s>0&&(v*=Math.pow(om,x.length))):UI.test(e.charAt(m-1))?(v*=kI,_=e.slice(s,m-1).match($C),_&&s>0&&(v*=Math.pow(om,_.length))):(v*=$I,s>0&&(v*=Math.pow(om,m-s))),e.charAt(m)!==n.charAt(l)&&(v*=II)),(vv&&(v=b*am)),v>y&&(y=v),m=r.indexOf(p,m+1);return u[d]=y,y}function ow(e){return e.toLowerCase().replace($C," ")}function HI(e,n,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,Qm(e,n,ow(e),ow(n),0,0,{})}var qs='[cmdk-group=""]',sm='[cmdk-group-items=""]',BI='[cmdk-group-heading=""]',IC='[cmdk-item=""]',sw=`${IC}:not([aria-disabled="true"])`,Xm="cmdk-item-select",Oo="data-value",qI=(e,n,r)=>HI(e,n,r),FC=w.createContext(void 0),Cl=()=>w.useContext(FC),VC=w.createContext(void 0),ug=()=>w.useContext(VC),PC=w.createContext(void 0),UC=w.forwardRef((e,n)=>{let r=Ao(()=>{var M,U;return{search:"",value:(U=(M=e.value)!=null?M:e.defaultValue)!=null?U:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),a=Ao(()=>new Set),s=Ao(()=>new Map),l=Ao(()=>new Map),u=Ao(()=>new Set),d=HC(e),{label:p,children:m,value:y,onValueChange:v,filter:b,shouldFilter:x,loop:_,disablePointerSelection:C=!1,vimBindings:E=!0,...T}=e,O=fn(),j=fn(),k=fn(),$=w.useRef(null),B=nF();ja(()=>{if(y!==void 0){let M=y.trim();r.current.value=M,H.emit()}},[y]),ja(()=>{B(6,le)},[]);let H=w.useMemo(()=>({subscribe:M=>(u.current.add(M),()=>u.current.delete(M)),snapshot:()=>r.current,setState:(M,U,X)=>{var K,se,ee,ve;if(!Object.is(r.current[M],U)){if(r.current[M]=U,M==="search")Q(),ge(),B(1,de);else if(M==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let ye=document.getElementById(k);ye?ye.focus():(K=document.getElementById(O))==null||K.focus()}if(B(7,()=>{var ye;r.current.selectedItemId=(ye=ce())==null?void 0:ye.id,H.emit()}),X||B(5,le),((se=d.current)==null?void 0:se.value)!==void 0){let ye=U??"";(ve=(ee=d.current).onValueChange)==null||ve.call(ee,ye);return}}H.emit()}},emit:()=>{u.current.forEach(M=>M())}}),[]),V=w.useMemo(()=>({value:(M,U,X)=>{var K;U!==((K=l.current.get(M))==null?void 0:K.value)&&(l.current.set(M,{value:U,keywords:X}),r.current.filtered.items.set(M,me(U,X)),B(2,()=>{ge(),H.emit()}))},item:(M,U)=>(a.current.add(M),U&&(s.current.has(U)?s.current.get(U).add(M):s.current.set(U,new Set([M]))),B(3,()=>{Q(),ge(),r.current.value||de(),H.emit()}),()=>{l.current.delete(M),a.current.delete(M),r.current.filtered.items.delete(M);let X=ce();B(4,()=>{Q(),X?.getAttribute("id")===M&&de(),H.emit()})}),group:M=>(s.current.has(M)||s.current.set(M,new Set),()=>{l.current.delete(M),s.current.delete(M)}),filter:()=>d.current.shouldFilter,label:p||e["aria-label"],getDisablePointerSelection:()=>d.current.disablePointerSelection,listId:O,inputId:k,labelId:j,listInnerRef:$}),[]);function me(M,U){var X,K;let se=(K=(X=d.current)==null?void 0:X.filter)!=null?K:qI;return M?se(M,r.current.search,U):0}function ge(){if(!r.current.search||d.current.shouldFilter===!1)return;let M=r.current.filtered.items,U=[];r.current.filtered.groups.forEach(K=>{let se=s.current.get(K),ee=0;se.forEach(ve=>{let ye=M.get(ve);ee=Math.max(ye,ee)}),U.push([K,ee])});let X=$.current;xe().sort((K,se)=>{var ee,ve;let ye=K.getAttribute("id"),Ne=se.getAttribute("id");return((ee=M.get(Ne))!=null?ee:0)-((ve=M.get(ye))!=null?ve:0)}).forEach(K=>{let se=K.closest(sm);se?se.appendChild(K.parentElement===se?K:K.closest(`${sm} > *`)):X.appendChild(K.parentElement===X?K:K.closest(`${sm} > *`))}),U.sort((K,se)=>se[1]-K[1]).forEach(K=>{var se;let ee=(se=$.current)==null?void 0:se.querySelector(`${qs}[${Oo}="${encodeURIComponent(K[0])}"]`);ee?.parentElement.appendChild(ee)})}function de(){let M=xe().find(X=>X.getAttribute("aria-disabled")!=="true"),U=M?.getAttribute(Oo);H.setState("value",U||void 0)}function Q(){var M,U,X,K;if(!r.current.search||d.current.shouldFilter===!1){r.current.filtered.count=a.current.size;return}r.current.filtered.groups=new Set;let se=0;for(let ee of a.current){let ve=(U=(M=l.current.get(ee))==null?void 0:M.value)!=null?U:"",ye=(K=(X=l.current.get(ee))==null?void 0:X.keywords)!=null?K:[],Ne=me(ve,ye);r.current.filtered.items.set(ee,Ne),Ne>0&&se++}for(let[ee,ve]of s.current)for(let ye of ve)if(r.current.filtered.items.get(ye)>0){r.current.filtered.groups.add(ee);break}r.current.filtered.count=se}function le(){var M,U,X;let K=ce();K&&(((M=K.parentElement)==null?void 0:M.firstChild)===K&&((X=(U=K.closest(qs))==null?void 0:U.querySelector(BI))==null||X.scrollIntoView({block:"nearest"})),K.scrollIntoView({block:"nearest"}))}function ce(){var M;return(M=$.current)==null?void 0:M.querySelector(`${IC}[aria-selected="true"]`)}function xe(){var M;return Array.from(((M=$.current)==null?void 0:M.querySelectorAll(sw))||[])}function N(M){let U=xe()[M];U&&H.setState("value",U.getAttribute(Oo))}function G(M){var U;let X=ce(),K=xe(),se=K.findIndex(ve=>ve===X),ee=K[se+M];(U=d.current)!=null&&U.loop&&(ee=se+M<0?K[K.length-1]:se+M===K.length?K[0]:K[se+M]),ee&&H.setState("value",ee.getAttribute(Oo))}function ie(M){let U=ce(),X=U?.closest(qs),K;for(;X&&!K;)X=M>0?eF(X,qs):tF(X,qs),K=X?.querySelector(sw);K?H.setState("value",K.getAttribute(Oo)):G(M)}let te=()=>N(xe().length-1),ne=M=>{M.preventDefault(),M.metaKey?te():M.altKey?ie(1):G(1)},z=M=>{M.preventDefault(),M.metaKey?N(0):M.altKey?ie(-1):G(-1)};return w.createElement($e.div,{ref:n,tabIndex:-1,...T,"cmdk-root":"",onKeyDown:M=>{var U;(U=T.onKeyDown)==null||U.call(T,M);let X=M.nativeEvent.isComposing||M.keyCode===229;if(!(M.defaultPrevented||X))switch(M.key){case"n":case"j":{E&&M.ctrlKey&&ne(M);break}case"ArrowDown":{ne(M);break}case"p":case"k":{E&&M.ctrlKey&&z(M);break}case"ArrowUp":{z(M);break}case"Home":{M.preventDefault(),N(0);break}case"End":{M.preventDefault(),te();break}case"Enter":{M.preventDefault();let K=ce();if(K){let se=new Event(Xm);K.dispatchEvent(se)}}}}},w.createElement("label",{"cmdk-label":"",htmlFor:V.inputId,id:V.labelId,style:iF},p),hd(e,M=>w.createElement(VC.Provider,{value:H},w.createElement(FC.Provider,{value:V},M))))}),GI=w.forwardRef((e,n)=>{var r,a;let s=fn(),l=w.useRef(null),u=w.useContext(PC),d=Cl(),p=HC(e),m=(a=(r=p.current)==null?void 0:r.forceMount)!=null?a:u?.forceMount;ja(()=>{if(!m)return d.item(s,u?.id)},[m]);let y=BC(s,l,[e.value,e.children,l],e.keywords),v=ug(),b=Hi(B=>B.value&&B.value===y.current),x=Hi(B=>m||d.filter()===!1?!0:B.search?B.filtered.items.get(s)>0:!0);w.useEffect(()=>{let B=l.current;if(!(!B||e.disabled))return B.addEventListener(Xm,_),()=>B.removeEventListener(Xm,_)},[x,e.onSelect,e.disabled]);function _(){var B,H;C(),(H=(B=p.current).onSelect)==null||H.call(B,y.current)}function C(){v.setState("value",y.current,!0)}if(!x)return null;let{disabled:E,value:T,onSelect:O,forceMount:j,keywords:k,...$}=e;return w.createElement($e.div,{ref:Fo(l,n),...$,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)}),ZI=w.forwardRef((e,n)=>{let{heading:r,children:a,forceMount:s,...l}=e,u=fn(),d=w.useRef(null),p=w.useRef(null),m=fn(),y=Cl(),v=Hi(x=>s||y.filter()===!1?!0:x.search?x.filtered.groups.has(u):!0);ja(()=>y.group(u),[]),BC(u,d,[e.value,e.heading,p]);let b=w.useMemo(()=>({id:u,forceMount:s}),[s]);return w.createElement($e.div,{ref:Fo(d,n),...l,"cmdk-group":"",role:"presentation",hidden:v?void 0:!0},r&&w.createElement("div",{ref:p,"cmdk-group-heading":"","aria-hidden":!0,id:m},r),hd(e,x=>w.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?m:void 0},w.createElement(PC.Provider,{value:b},x))))}),KI=w.forwardRef((e,n)=>{let{alwaysRender:r,...a}=e,s=w.useRef(null),l=Hi(u=>!u.search);return!r&&!l?null:w.createElement($e.div,{ref:Fo(s,n),...a,"cmdk-separator":"",role:"separator"})}),YI=w.forwardRef((e,n)=>{let{onValueChange:r,...a}=e,s=e.value!=null,l=ug(),u=Hi(m=>m.search),d=Hi(m=>m.selectedItemId),p=Cl();return w.useEffect(()=>{e.value!=null&&l.setState("search",e.value)},[e.value]),w.createElement($e.input,{ref:n,...a,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":p.listId,"aria-labelledby":p.labelId,"aria-activedescendant":d,id:p.inputId,type:"text",value:s?e.value:u,onChange:m=>{s||l.setState("search",m.target.value),r?.(m.target.value)}})}),QI=w.forwardRef((e,n)=>{let{children:r,label:a="Suggestions",...s}=e,l=w.useRef(null),u=w.useRef(null),d=Hi(m=>m.selectedItemId),p=Cl();return w.useEffect(()=>{if(u.current&&l.current){let m=u.current,y=l.current,v,b=new ResizeObserver(()=>{v=requestAnimationFrame(()=>{let x=m.offsetHeight;y.style.setProperty("--cmdk-list-height",x.toFixed(1)+"px")})});return b.observe(m),()=>{cancelAnimationFrame(v),b.unobserve(m)}}},[]),w.createElement($e.div,{ref:Fo(l,n),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":d,"aria-label":a,id:p.listId},hd(e,m=>w.createElement("div",{ref:Fo(u,p.listInnerRef),"cmdk-list-sizer":""},m)))}),XI=w.forwardRef((e,n)=>{let{open:r,onOpenChange:a,overlayClassName:s,contentClassName:l,container:u,...d}=e;return w.createElement(cp,{open:r,onOpenChange:a},w.createElement(dp,{container:u},w.createElement(fp,{"cmdk-overlay":"",className:s}),w.createElement(hp,{"aria-label":e.label,"cmdk-dialog":"",className:l},w.createElement(UC,{ref:n,...d}))))}),JI=w.forwardRef((e,n)=>Hi(r=>r.filtered.count===0)?w.createElement($e.div,{ref:n,...e,"cmdk-empty":"",role:"presentation"}):null),WI=w.forwardRef((e,n)=>{let{progress:r,children:a,label:s="Loading...",...l}=e;return w.createElement($e.div,{ref:n,...l,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},hd(e,u=>w.createElement("div",{"aria-hidden":!0},u)))}),fd=Object.assign(UC,{List:QI,Item:GI,Input:YI,Group:ZI,Separator:KI,Dialog:XI,Empty:JI,Loading:WI});function eF(e,n){let r=e.nextElementSibling;for(;r;){if(r.matches(n))return r;r=r.nextElementSibling}}function tF(e,n){let r=e.previousElementSibling;for(;r;){if(r.matches(n))return r;r=r.previousElementSibling}}function HC(e){let n=w.useRef(e);return ja(()=>{n.current=e}),n}var ja=typeof window>"u"?w.useEffect:w.useLayoutEffect;function Ao(e){let n=w.useRef();return n.current===void 0&&(n.current=e()),n}function Hi(e){let n=ug(),r=()=>e(n.snapshot());return w.useSyncExternalStore(n.subscribe,r,r)}function BC(e,n,r,a=[]){let s=w.useRef(),l=Cl();return ja(()=>{var u;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}})(),p=a.map(m=>m.trim());l.value(e,d,p),(u=n.current)==null||u.setAttribute(Oo,d),s.current=d}),s}var nF=()=>{let[e,n]=w.useState(),r=Ao(()=>new Map);return ja(()=>{r.current.forEach(a=>a()),r.current=new Map},[e]),(a,s)=>{r.current.set(a,s),n({})}};function rF(e){let n=e.type;return typeof n=="function"?n(e.props):"render"in n?n.render(e.props):e}function hd({asChild:e,children:n},r){return e&&w.isValidElement(n)?w.cloneElement(rF(n),{ref:n.ref},r(n.props.children)):r(n)}var iF={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function aF({className:e,...n}){return h.jsx(fd,{"data-slot":"command",className:Xe("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...n})}function oF({className:e,...n}){return h.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[h.jsx(u_,{className:"size-4 shrink-0 opacity-50"}),h.jsx(fd.Input,{"data-slot":"command-input",className:Xe("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 sF({className:e,...n}){return h.jsx(fd.List,{"data-slot":"command-list",className:Xe("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",e),...n})}function lF({className:e,...n}){return h.jsx(fd.Item,{"data-slot":"command-item",className:Xe("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 lw(e,n){if(!e)return{score:0,hits:[]};const r=e.toLowerCase(),a=n.toLowerCase();let s=0,l=0,u=0;const d=[];for(let p=0;p3&&a.endsWith("ies")?s=a.slice(0,-3)+"y":a.length>3&&a.endsWith("es")?s=a.slice(0,-2):a.length>2&&a.endsWith("s")&&(s=a.slice(0,-1)),s?lw(s,n):null}function uF({text:e,hits:n}){const r=[];let a=0;return n.forEach((s,l)=>{s>a&&r.push(e.slice(a,s)),r.push(h.jsx("b",{children:e[s]},l)),a=s+1}),r.push(e.slice(a)),h.jsx("span",{className:"plabel",children:r})}function dF({open:e,onClose:n,candidates:r}){const[a,s]=w.useState(""),l=w.useMemo(()=>{if(!e)return[];const d=[];for(const p of r()){const m=cF(a,p.label);m&&d.push({...p,score:m.score,hits:m.hits})}return d.sort((p,m)=>m.score-p.score),d.slice(0,40)},[e,a,r]);w.useEffect(()=>{e&&s("")},[e]);const u=d=>{n(),d.run()};return h.jsx(Qu,{open:e,onOpenChange:d=>!d&&n(),children:h.jsxs(Xu,{id:"palette",className:"palette",showCloseButton:!1,"aria-describedby":void 0,children:[h.jsx(bl,{className:"sr-only",children:"Search and quick actions"}),h.jsxs(aF,{shouldFilter:!1,loop:!0,children:[h.jsxs("div",{id:"palette-inputwrap",children:[h.jsx(ht,{name:"search"}),h.jsx(oF,{placeholder:"Search file names, projects, actions…",autoComplete:"off",spellCheck:!1,value:a,onValueChange:s})]}),h.jsx(sF,{children:l.length===0?h.jsx("div",{className:"pempty",children:"No matches — search covers file names, projects, and actions"}):l.map(d=>h.jsxs(lF,{value:d.kind+":"+d.label,onSelect:()=>u(d),children:[h.jsx("span",{className:"picon",children:h.jsx(ht,{name:d.icon})}),h.jsx(uF,{text:d.label,hits:d.hits}),h.jsx("span",{className:"pkind",children:d.kind})]},d.kind+":"+d.label))}),h.jsx("footer",{id:"palette-hint",children:"↑↓ navigate · ⏎ select · esc close"})]})]})})}const Qs=3,Mo=30;function fF(e,n){return Ht({queryKey:["heatDevices",e],queryFn:()=>sn(e+"heat?by=device&days=30"),enabled:n,retry:!1,staleTime:6e4}).data?.devices??null}function cw(e){const[n,r]=w.useState("all"),{flatFiles:a,heatMap:s,devices:l,scope:u}=e,d=b=>!u||b===u||b.startsWith(u+"/"),p=u?a.filter(b=>d(b.path)):a,m=l&&u?l.map(b=>{const x={};for(const[_,C]of Object.entries(b.folders||{}))d(_)&&(x[_]=C);return{...b,folders:x}}).filter(b=>Object.keys(b.folders).length>0):l,y=Date.now(),v=p.map(b=>{const x=s&&s[b.path]||{},_=b.time?Math.max(0,(y-new Date(b.time).getTime())/864e5):0,C=n==="all"?Bo(x):x[n]||0;return{path:b.path,reads:C,agent:x.agent||0,human:x.human||0,share:x.share||0,total:Bo(x),days:_,danger:C>=Qs&&_>=Mo}});return h.jsxs("div",{className:"insights",children:[h.jsxs("h1",{className:"in-title",children:["Knowledge insights",u?h.jsxs("span",{className:"in-scope",children:[" · ",u]}):null]}),h.jsx("p",{className:"dl-sub",children:u?`Reads over the last 30 days × freshness, for ${u} 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."}),h.jsx("div",{className:"in-lens",children:["all","human","agent"].map(b=>h.jsx("button",{className:"in-lens-btn"+(b===n?" active":""),onClick:()=>r(b),children:b==="all"?"All reads":b==="human"?"Human reads":"Agent reads"},b))}),h.jsx("h3",{className:"dl-h3",children:"Map — cell size = reads, color = freshness (scale below)"}),h.jsx(hF,{pts:v,onOpenFile:e.onOpenFile,onOpenFolder:e.onOpenFolder,isFolder:e.isFolder}),h.jsx("h3",{className:"dl-h3",children:"Reads × freshness"}),h.jsx(pF,{pts:v,onOpenFile:e.onOpenFile}),h.jsx("h3",{className:"dl-h3",children:"Hot path — top files by reads"}),h.jsx(gF,{pts:v,lens:n,onOpenFile:e.onOpenFile}),m&&m.length>0&&h.jsxs(h.Fragment,{children:[h.jsx("h3",{className:"dl-h3",children:"Agent coverage — which agents read which areas"}),h.jsx(vF,{devices:m})]})]})}function qC(e){const n=[[76,195,138],[232,196,84],[224,93,93]],r=Math.min(1,Math.max(0,e/300))*(n.length-1),a=Math.min(n.length-2,Math.floor(r)),s=r-a,l=n[a].map((u,d)=>Math.round(u+(n[a+1][d]-u)*s));return`rgb(${l[0]},${l[1]},${l[2]})`}function uw(e,n,r,a,s){const l=e.reduce((m,y)=>m+y.value,0);if(!l||a<=0||s<=0)return[];const u=e.slice().sort((m,y)=>y.value-m.value).map(m=>({it:m,a:m.value/l*a*s})),d=(m,y)=>{const b=m.reduce((_,C)=>_+C.a,0)/y;let x=0;for(const _ of m){const C=_.a/b;x=Math.max(x,C/b,b/C)}return x},p=[];for(;u.length;){const m=a>=s,y=m?s:a,v=[u.shift()];for(;u.length&&d(v.concat(u[0]),y)<=d(v,y);)v.push(u.shift());const b=v.reduce((_,C)=>_+C.a,0)/y;let x=0;for(const _ of v){const C=_.a/b;m?p.push({item:_.it,x:n,y:r+x,w:b,h:C}):p.push({item:_.it,x:n+x,y:r,w:C,h:b}),x+=C}m?(n+=b,a-=b):(r+=b,s-=b)}return p}const lm=15;function dw(e,n,r){const a=Math.floor((r-8)/6),s=`${e} · ${n}`;return s.length<=a?{label:s,fit:a}:{label:e.length>a?e.slice(0,Math.max(1,a-1))+"…":e,fit:a}}const fw=(e,n)=>`${e} ${n}${e===1?"":"s"}`;function hF({pts:e,onOpenFile:n,onOpenFolder:r,isFolder:a}){const u=new Map;for(const p of e){const m=p.path.includes("/")?p.path.split("/")[0]:"/";let y=u.get(m);y||u.set(m,y={name:m,files:[],value:0,reads:0}),y.files.push(p),y.value+=p.reads+1,y.reads+=p.reads}const d=[];for(const p of uw([...u.values()],0,0,720,480)){const m=p.item,y=m.name==="/"?"":m.name,v=m.name==="/"?"(root)":m.name;if(d.push(h.jsx("rect",{x:p.x+1,y:p.y+1,width:Math.max(0,p.w-2),height:Math.max(0,p.h-2),rx:3,className:"in-tm-group","data-dir":y,children:h.jsx("title",{children:`${m.name==="/"?"(root)":m.name+"/"} — ${fw(m.reads,"read")}/30d · ${fw(m.files.length,"file")}`})},"g"+m.name)),p.w>46&&p.h>lm+10){const{label:x}=dw(v,m.reads,p.w);d.push(h.jsx("text",{x:p.x+5,y:p.y+12,className:"in-tm-glabel","data-dir":y,children:x},"gl"+m.name))}const b=uw(m.files.map(x=>({...x,name:x.path.split("/").pop(),value:x.reads+1})),p.x+2,p.y+lm,Math.max(0,p.w-4),Math.max(0,p.h-lm-2));for(const x of b)if(d.push(h.jsx("rect",{x:x.x+.6,y:x.y+.6,width:Math.max(.4,x.w-1.2),height:Math.max(.4,x.h-1.2),rx:1.5,fill:qC(x.item.days),className:"in-tm-cell","data-path":x.item.path,children:h.jsx("title",{children:`${x.item.path} — ${x.item.reads} read${x.item.reads===1?"":"s"}/30d · changed ${Math.round(x.item.days)}d ago`})},x.item.path)),x.w>54&&x.h>16){const{label:_,fit:C}=dw((x.item.danger?"⚠ ":"")+x.item.name,x.item.reads,x.w);C>=5&&d.push(h.jsx("text",{x:x.x+4.5,y:x.y+12.5,className:"in-tm-label","data-path":x.item.path,children:_},"l"+x.item.path))}}return h.jsxs(h.Fragment,{children:[h.jsx("svg",{viewBox:"0 0 720 480",className:"in-chart in-treemap",onClick:p=>{const m=p.target.closest("[data-path], [data-dir]");if(!m)return;const y=m.getAttribute("data-path");if(y)return n(y);const v=m.getAttribute("data-dir");v&&a(v)&&r(v)},children:d}),h.jsx(mF,{pts:e})]})}function mF({pts:e}){const n=I8(e.map(a=>a.days));if(!n)return null;const r=V8(n.min,n.max);return h.jsxs("p",{className:"in-legend in-tm-legend",children:["freshness 0d",h.jsx("span",{className:"in-sw in-sw-age",style:{background:`linear-gradient(to right, ${[0,60,150,300].map(qC).join(", ")})`}}),"300d+",h.jsx("span",{className:"in-tm-range",children:F8(n.min,n.max)?`all files here: ${r} old — colour carries no signal in this range`:`observed: ${r} old`})]})}function pF({pts:e,onOpenFile:n}){const s={l:44,r:16,t:20,b:34},l=Math.max(Mo*2,...e.map(v=>v.days)),u=Math.max(Qs*2,...e.map(v=>v.reads)),d=v=>Math.log10(v+1)/Math.log10(l+1),p=v=>Math.log10(v+1)/Math.log10(u+1),m=v=>s.l+d(v)*(720-s.l-s.r),y=v=>360-s.b-p(v)*(360-s.t-s.b);return h.jsxs("svg",{viewBox:"0 0 720 360",className:"in-chart",children:[h.jsx("rect",{x:m(Mo),y:s.t,width:720-s.r-m(Mo),height:y(Qs)-s.t,className:"in-danger-zone"}),h.jsx("line",{x1:m(Mo),y1:s.t,x2:m(Mo),y2:360-s.b,className:"in-threshold"}),h.jsx("line",{x1:s.l,y1:y(Qs),x2:720-s.r,y2:y(Qs),className:"in-threshold"}),h.jsx("line",{x1:s.l,y1:360-s.b,x2:720-s.r,y2:360-s.b,className:"in-axis"}),h.jsx("line",{x1:s.l,y1:s.t,x2:s.l,y2:360-s.b,className:"in-axis"}),h.jsx("text",{x:(s.l+720-s.r)/2,y:352,className:"in-label",children:"days since last change →"}),h.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 →"}),h.jsx("text",{x:720-s.r-6,y:s.t+14,className:"in-quad in-quad-danger",textAnchor:"end",children:"hot + stale"}),h.jsx("text",{x:s.l+6,y:s.t+14,className:"in-quad",children:"hot + fresh"}),h.jsx("text",{x:720-s.r-6,y:360-s.b-8,className:"in-quad",textAnchor:"end",children:"cold + stale"}),h.jsx("text",{x:s.l+6,y:360-s.b-8,className:"in-quad",children:"cold + fresh"}),h.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(v=>{const b=v.total?(v.agent||0)/v.total:0;return h.jsx("circle",{cx:Number(m(v.days).toFixed(1)),cy:Number(y(v.reads).toFixed(1)),r:Number((3+4*b).toFixed(1)),className:"in-pt"+(v.danger?" danger":v.reads?"":" cold"),onClick:()=>n(v.path),children:h.jsx("title",{children:`${v.path} — ${v.reads} read${v.reads===1?"":"s"} / 30d · changed ${Math.round(v.days)}d ago`})},v.path)})]})}function gF({pts:e,lens:n,onOpenFile:r}){const a=e.filter(u=>u.reads>0).sort((u,d)=>d.reads-u.reads||d.days-u.days).slice(0,20);if(!a.length)return h.jsx("div",{className:"dl-empty",children:"No reads in the window yet."});const s=a[0].reads,l=a.some(u=>u.share>0);return h.jsxs(h.Fragment,{children:[h.jsx("div",{className:"in-hotpath",children:a.map(u=>{const d=n==="agent"?{agent:1,human:0,share:0}:n==="human"?{agent:0,human:1,share:0}:L8(u),p=u.reads/s*100;return h.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:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),r(u.path))},children:[h.jsx("span",{className:"in-hp-name"+(u.danger?" danger":""),children:u.path+(u.danger?" ⚠":"")}),h.jsxs("span",{className:"in-hp-bar",children:[h.jsx("span",{className:"in-hp-agent",style:{width:(p*d.agent).toFixed(1)+"%"}}),h.jsx("span",{className:"in-hp-human",style:{width:(p*d.human).toFixed(1)+"%"}}),h.jsx("span",{className:"in-hp-share",style:{width:(p*d.share).toFixed(1)+"%"}})]}),h.jsx("span",{className:"in-hp-count",children:u.reads})]},u.path)})}),h.jsxs("p",{className:"in-legend",children:[h.jsx("span",{className:"in-sw agent"})," agent reads ",h.jsx("span",{className:"in-sw human"})," human reads",l&&h.jsxs(h.Fragment,{children:[" ",h.jsx("span",{className:"in-sw share"})," shared reads"]})]})]})}function vF({devices:e}){const n=new Map;for(const b of e)for(const[x,_]of Object.entries(b.folders||{}))n.set(x,(n.get(x)||0)+_);const r=[...n.entries()].sort((b,x)=>x[1]-b[1]).slice(0,12).map(b=>b[0]),a=e.slice(0,12),s=140,l=6,u=Math.min(76,Math.max(34,(720-s-8)/r.length)),d=26,p=720,m=l+a.length*d+58,y=Math.max(1,...a.flatMap(b=>r.map(x=>(b.folders||{})[x]||0))),v=b=>{const x=[23,25,31],_=[245,166,35],C=x.map((E,T)=>Math.round(E+(_[T]-E)*b));return`rgb(${C[0]},${C[1]},${C[2]})`};return h.jsxs("svg",{viewBox:`0 0 ${p} ${m}`,className:"in-chart in-matrix",children:[a.map((b,x)=>{let _=b.name||b.id||"";return _.length>20&&(_=_.slice(0,19)+"…"),h.jsxs("g",{children:[h.jsx("text",{x:s-8,y:l+x*d+17,textAnchor:"end",className:"in-label",children:_}),r.map((C,E)=>{const T=(b.folders||{})[C]||0;return h.jsx("rect",{x:s+E*u,y:l+x*d,width:u-4,height:d-4,rx:3,fill:v(Math.sqrt(T/y)),children:h.jsx("title",{children:`${b.name||b.id} × ${C||"(root)"}: ${T} read${T===1?"":"s"}/30d`})},C)})]},b.id||x)}),r.map((b,x)=>{const _=s+x*u+(u-4)/2,C=l+a.length*d+14;return h.jsx("text",{x:_,y:C,className:"in-label",textAnchor:"end",transform:`rotate(-28 ${_} ${C})`,children:b||"(root)"},b)})]})}function GC(e){return new Set(e.entries.map(n=>n.path)).size}function yF(e){const n=l=>l.note+"\0"+(l.device?.id??""),r=new Map;e.forEach((l,u)=>{if(!l.note)return;const d=r.get(n(l));if(d){d.entries.push(l),d.idx.push(u);return}r.set(n(l),{note:l.note,entries:[l],idx:[u]})});const a=[],s=new Set;return e.forEach((l,u)=>{const d=l.note?r.get(n(l)):void 0;if(!d||GC(d)<2){a.push({i:u});return}s.has(d)||(s.add(d),a.push({run:d,i:u}))}),a}function bF(e){const{apiBase:n,target:r,isFolder:a,onMeta:s,onRendered:l,restore:u,remove:d}=e,p=r?a(r)?{prefix:r+"/"}:{path:r}:{prefix:""},m="path"in p&&p.path!==void 0?"path="+encodeURIComponent(p.path):"prefix="+encodeURIComponent(p.prefix??""),{data:y,error:v}=Ht({queryKey:["history",n,m,200],queryFn:()=>sn(n+"history?"+m+"&n=200"),staleTime:15e3});if(w.useEffect(()=>{v&&s("History unavailable: "+v.message)},[v,s]),w.useEffect(()=>{y&&l?.()},[y,l]),!y)return null;const b=y.entries||[],x=!!r&&!a(r),_=E=>{for(let T=E+1;Tb[E].kind==="delete"?_(E):b[E].blob;return h.jsxs("div",{className:"history",children:[b.length===0&&h.jsx("div",{className:"empty",children:"No history yet."}),yF(b).map((E,T)=>E.run?h.jsx(xF,{run:E.run,onOpen:e.onOpen,apiBase:n,perFile:x,prevBlob:_,restoreSha:C,restore:u,remove:d},"g"+T):h.jsx(cg,{entry:b[E.i],apiBase:n,onOpen:e.onOpen,diff:x?{apiBase:n,prev:_(E.i)}:void 0,restore:u,restoreSha:C(E.i)},"r"+E.i))]})}function xF({run:e,onOpen:n,apiBase:r,perFile:a,prevBlob:s,restoreSha:l,restore:u,remove:d}){const[p,m]=w.useState(!0),y=e.entries[0],v=ud(y),b=[y.device.name||y.device.id,y.device.os].filter(Boolean).join(" · "),x=e.entries.map(E=>new Date(E.time).getTime()),_=wF(Math.min(...x),Math.max(...x)),C=GC(e);return h.jsxs("div",{className:"hrun"+(p?" open":""),children:[h.jsxs("div",{className:"hrun-head",children:[h.jsx("button",{type:"button",className:"hrun-toggle","aria-expanded":p,title:p?"Collapse this run":"Expand this run",onClick:()=>m(!p),children:h.jsx(ht,{name:p?"chevd":"chev"})}),h.jsx("span",{className:"hrun-note",children:h.jsx(LC,{text:e.note})}),h.jsxs("span",{className:"hrun-meta",children:[C," file",C===1?"":"s"," · ",v,b?" · "+b:""]}),h.jsx("span",{className:"hrun-time",children:_})]}),p&&h.jsx("div",{className:"hrun-body",children:e.entries.map((E,T)=>h.jsx(cg,{entry:E,apiBase:r,onOpen:n,diff:a?{apiBase:r,prev:s(e.idx[T])}:void 0,restore:u,remove:d,restoreSha:l(e.idx[T]),inRun:!0},T))})]})}function wF(e,n){const r=new Date(e),a=new Date(n),s=u=>u.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});if(r.toDateString()!==a.toDateString())return r.toLocaleString()+" – "+a.toLocaleString();const l=a.toLocaleDateString();return e===n?l+" "+s(a):l+" "+s(r)+" – "+s(a)}function SF(e,n){return e?n(e)?e+"/ (folder)":e:"all changes"}function _F(e){const{apiBase:n,path:r,version:a}=e,s="path="+encodeURIComponent(r),{data:l}=Ht({queryKey:["history",n,s,200],queryFn:()=>sn(n+"history?"+s+"&n=200"),staleTime:15e3}),u=l?.entries?.find(y=>y.blob===a),d=u?ud(u):"",p=u?.time?new Date(u.time).toLocaleString():"",m=n+"blob?sha="+a+"&name="+encodeURIComponent(r.split("/").pop()||r)+"&download=1";return h.jsxs("div",{className:"vbanner",role:"status",children:[h.jsx("span",{className:"vb-icon",children:h.jsx(ht,{name:"clock"})}),h.jsxs("div",{className:"vb-text",children:[h.jsx("b",{children:[p&&"Version from "+p,d&&"by "+d].filter(Boolean).join(" ")||"Earlier version"}),h.jsx("span",{children:"This is not the current file."})]}),h.jsxs("div",{className:"vb-actions",children:[h.jsx("button",{className:"ai-btn",onClick:e.onViewCurrent,children:"View current"}),h.jsx("a",{className:"ai-btn",download:!0,href:m,children:"Download this version"})]})]})}function ZC(e){const{config:n,apiBase:r,route:a,hub:s,project:l}=e,u=Hp(),d=Oa(),{tree:p,flatFiles:m,dirIndex:y,loaded:v}=P8(r,!s||!!l),b=U8(r,s&&!!l&&!!n.reads?.enabled),x=s&&!!l&&!a.path&&!a.view,_=a.view==="dashboard"||x,C=fF(r,_);w.useEffect(()=>{_&&d.invalidateQueries({queryKey:["heat",r]})},[_,r,d]);const E=a.path,T=a.view?void 0:a.version,O=E||(a.view==="dashboard"||a.view==="history")&&a.viewTarget||"",j=!!E&&y.has(E),k=!!E&&v&&!j&&m.some(D=>D.path===E),$=!!E&&v&&!j&&!k,B=j&&!a.view,[H,V]=w.useState(()=>new Set),me=w.useRef(!0);w.useEffect(()=>{if(!p||!me.current)return;me.current=!1;const D=(p.children||[]).filter(I=>I.dir);D.length===1&&V(I=>new Set(I).add(D[0].path))},[p]),w.useEffect(()=>{!O||!v||V(D=>{const I=new Set(D);for(const W of cI(O))I.add(W);return y.has(O)&&I.add(O),I})},[O,v,y]);const ge=w.useCallback(D=>{V(I=>{const W=new Set(I);return W.has(D)?W.delete(D):W.add(D),W})},[]),de=w.useRef(null),Q=w.useRef(new Map),le=w.useRef({key:"",want:0,attempts:0});w.useEffect(()=>{le.current={key:u,want:v3()==="POP"?Q.current.get(u)??0:0,attempts:0}},[u]);const ce=w.useCallback(()=>{const D=de.current,I=le.current;!D||I.key!==u||I.attempts>=3||(I.attempts++,D.scrollTo({top:I.want,behavior:"instant"}))},[u]),xe=w.useCallback(()=>{de.current&&Q.current.set(u,de.current.scrollTop)},[u]),N=w.useCallback((D,I)=>{pn(Ju(D,l?.id,I)),mr()},[l?.id]),G=w.useCallback(D=>pn(ya("history",l?.id,D)),[l?.id]),[ie,te]=w.useState(""),[ne,z]=w.useState(null),[M,U]=w.useState(!1),[X,K]=w.useState(!1);w.useEffect(()=>TD(()=>K(!0)),[]);const se=w.useRef(null),ee=e.panel??null,ve=!ee&&s&&!!l&&k&&xa(l.perm,"write"),{data:ye}=b_(l?.id,s&&!!l),Ne=w.useCallback(()=>{d.invalidateQueries({queryKey:["shares",l?.id]})},[d,l?.id]),Ie=k?(ye||[]).filter(D=>D.path===E):[],Ve=!ee&&s&&!!l,dt=!ee&&k,Qe=!ee&&(k||s&&!!l&&j),vn=T?r+"blob?sha="+T+"&name="+encodeURIComponent(E)+"&download=1":r+"download?path="+encodeURIComponent(E),cn=w.useCallback(async()=>{try{const D=await fetch(r+"shares",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:E})});if(!D.ok)throw new Error(await D.text());const I=await D.json();Ew("share_created");const W=await Ho(I.url);z({url:I.url,copied:W}),Ne()}catch(D){Ke("Share failed: "+D.message,!0)}},[r,E,Ne]),[Kt,ir]=w.useState(""),Dt=s&&!!l&&xa(l?.perm,"write"),ar=w.useCallback(async(D,I)=>{ir(D+I);try{await wa(r+"restore",{path:D,sha:I}),d.invalidateQueries({queryKey:["history",r]}),d.invalidateQueries({queryKey:["tree",r]}),d.invalidateQueries({queryKey:["render",r,D]}),d.invalidateQueries({queryKey:["text"]}),Ke("Restored "+D+" — it syncs to every device like any other change.")}catch(W){Ke("Restore failed: "+W.message,!0)}finally{ir("")}},[r,d]),[Nr,jt]=w.useState(""),Un=w.useCallback(async D=>{if(await wl("Remove "+D+"?","It disappears from every synced device. History keeps it — you can restore it from the DELETED row afterwards.","Remove file",!0)){jt(D);try{await wa(r+"remove",{path:D}),d.invalidateQueries({queryKey:["history",r]}),d.invalidateQueries({queryKey:["tree",r]}),d.invalidateQueries({queryKey:["render",r,D]}),d.invalidateQueries({queryKey:["text"]}),Ke("Removed "+D+" — it syncs to every device like any other change.")}catch(I){Ke("Remove failed: "+I.message,!0)}finally{jt("")}}},[r,d]),wt=w.useCallback(()=>{if(!E)return G("");G(j?E+"/":E)},[E,j,G]);w.useEffect(()=>{const D=I=>{(I.metaKey||I.ctrlKey)&&I.key.toLowerCase()==="k"&&(I.preventDefault(),K(W=>!W))};return window.addEventListener("keydown",D),()=>window.removeEventListener("keydown",D)},[]);const ai=w.useCallback(()=>{const D=[],I=(W,fe,pe,be)=>D.push({icon:W,label:fe,kind:pe,run:be});if(s&&l&&E&&(k&&I("share","Share: "+E,"action",cn),I("hist","History: "+E,"action",wt),k&&I("download","Download: "+E,"action",()=>se.current?.click())),s&&l&&I("hist","History: whole project","action",()=>G("")),s)for(const W of e.projects||[])(!l||W.id!==l.id)&&I("folder","Switch to project: "+W.name,"project",()=>pn("/"+W.id));n.auth?.enabled&&I("power","Sign out","action",()=>window.location.href="/auth/logout");for(const W of y.keys())I("folder",W,"folder",()=>N(W));for(const W of m)I("doc",W.path,"file",()=>N(W.path));return D},[s,l,E,k,n.auth?.enabled,y,m,e.projects,cn,wt,G,N]);w.useEffect(()=>{if(!M)return;const D=()=>U(!1);return document.addEventListener("click",D),()=>document.removeEventListener("click",D)},[M]);const yn=w.useCallback(D=>y.has(D),[y]);let Dr="app",or,Yt;ee?Yt=ee.body:a.view==="dashboard"?Yt=h.jsx(cw,{flatFiles:m,heatMap:b,devices:C,scope:a.viewTarget||"",onOpenFile:N,onOpenFolder:N,isFolder:yn}):a.view==="history"?Yt=h.jsx(bF,{apiBase:r,target:a.viewTarget||"",isFolder:yn,onOpen:N,onMeta:te,onRendered:ce,restore:Dt?{onRestore:ar,busy:Kt}:void 0,remove:Dt?{onRemove:Un,busy:Nr}:void 0}):E?v?$?Yt=h.jsxs("div",{className:"notfound",children:[h.jsx("h1",{children:"Couldn't find that"}),h.jsxs("p",{children:[h.jsx("code",{children:E})," isn't in this project right now."]}),h.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."}),h.jsx("button",{className:"pbtn",onClick:()=>d.invalidateQueries({queryKey:["tree",r]}),children:"Check again"})]}):j?Yt=h.jsx(wI,{node:y.get(E),heatMap:b,hub:s&&!!l,apiBase:r,onOpen:N,onFullHistory:G,onRendered:ce}):(Dr=bC.test(E)||xC.test(E)?"wide":"read",or="markdown",Yt=h.jsxs(h.Fragment,{children:[T&&h.jsx(_F,{apiBase:r,path:E,version:T,onViewCurrent:()=>N(E)}),h.jsx(_I,{apiBase:r,path:E,version:T,heatMap:b,flatFiles:m,onOpenFile:N,onMeta:te,onRendered:ce})]})):Yt=h.jsx("div",{className:"empty",children:"Loading…"}):x?Yt=h.jsxs(h.Fragment,{children:[h.jsx(MC,{project:l,existing:a.connect==="existing"}),h.jsx("div",{className:"home-insights",children:h.jsx(cw,{flatFiles:m,heatMap:b,devices:C,onOpenFile:N,onOpenFolder:N,isFolder:yn})})]}):Yt=h.jsx("div",{className:"empty",children:"Select a file to read it."});const bn=ee?ee.crumb:E?h.jsx(uI,{path:E,onOpenFolder:N}):a.view==="dashboard"?"Dashboard — "+(a.viewTarget||l?.name||""):a.view==="history"?"History — "+SF(a.viewTarget||"",yn):x?l.name:null,A=h.jsx(ll,{crumb:bn,meta:ie,actions:h.jsxs(h.Fragment,{children:[ve&&h.jsx(vt,{id:"share-btn",variant:"toolbar",className:"icon-only",title:"Share","aria-label":"Share",onClick:cn,children:h.jsx(ht,{name:"share"})}),Ve&&!E&&!a.view&&h.jsxs(vt,{id:"history-btn",variant:"toolbar",onClick:wt,children:[h.jsx(ht,{name:"hist"})," ",h.jsx("span",{className:"lbl",children:"History"})]}),dt&&h.jsx("a",{id:"download",hidden:!0,download:!0,href:vn,ref:se,children:"Download"}),Qe&&h.jsx(vt,{id:"more-btn",variant:"toolbar",className:"icon-only",title:"More actions","aria-label":"More actions",onClick:D=>{D.stopPropagation(),U(!M)},children:h.jsx(ht,{name:"dots"})}),M&&h.jsxs("div",{id:"more-menu",role:"menu",children:[Ve&&h.jsx("button",{className:"more-item",onClick:wt,children:"History"}),dt&&h.jsx("button",{className:"more-item",onClick:()=>se.current?.click(),children:"Download"}),s&&!!l&&h.jsx("button",{className:"more-item",onClick:()=>{e.onClosePanel?.(),pn(ya("dashboard",l?.id,E))},children:"Dashboard"})]})]})});return h.jsxs(h.Fragment,{children:[h.jsx(sl,{vault:e.sidebar.vault,projectsNav:e.sidebar.projectsNav,orgBar:e.sidebar.orgBar,tree:h.jsx(lI,{root:p,expanded:H,onToggle:ge,currentPath:O,listingShowing:B,onOpen:N}),topbar:A,contentRef:de,onContentScroll:xe,children:h.jsxs(bu,{width:Dr,className:or,children:[!ee&&k&&h.jsx(zI,{shares:Ie,canRevoke:!!l&&xa(l.perm,"write"),onChanged:Ne}),Yt]})}),ne&&h.jsx(DI,{url:ne.url,copied:ne.copied,onClose:()=>{z(null),Ne()}}),h.jsx(dF,{open:X,onClose:()=>K(!1),candidates:ai})]})}function CF({config:e}){const n=Hp(),r=w_(),[a,s]=w.useState(null),[l,u]=w.useState(null);w.useEffect(()=>u(null),[n]);const d=w.useMemo(()=>{const ce=n.split("?")[0].match(/^\/join\/([0-9a-f]+)\/?$/);return ce?ce[1]:null},[n]),{data:p}=d3(!d),{data:m}=f3(!d),y=!!e.auth.admin,{data:v}=x_(y),b=w.useMemo(()=>__(n,"hub"),[n]),[x,_]=w.useState(!1),C=e.upload.enabled,E=async(ce,xe)=>{const N=xe===NC;try{const G=await wa("/api/projects",{name:ce,template:N?"":xe});_(!1),await r(),pn("/"+G.project.id+(N?"?connect=existing":"")),Ke(`Created “${G.project.name}”.`)}catch(G){Ke("Could not create the project: "+G.message,!0)}},T=w.useRef(!1);w.useEffect(()=>{T.current||d||!p||p.length>0||!C||(T.current=!0,_(!0))},[p,C,d]);const O=x?h.jsx(z8,{templates:e.templates??[],onCreate:E,onClose:()=>_(!1)}):null,j=w.useMemo(()=>p&&(p.find(ce=>ce.id===b.project)||a&&p.find(ce=>ce.org===a)||p[0])||null,[p,b.project,a]);if(w.useEffect(()=>{document.title=j?j.name+" — BearDrive":e.brand||"BearDrive"},[j,e]),d)return h.jsx(EF,{token:d,onDone:async ce=>{s(ce),await r(),pn("/",{replace:!0})}});const k=e.brand||"BearDrive",$=j&&m?.find(ce=>ce.id===j.org)||null,B=h.jsx(Yu,{name:k,onHome:()=>pn("/"),search:!!j}),H=e.me?h.jsx(C8,{me:e.me,org:$,orgActive:!!b.org,billing:e.billing,admin:y?{pending:v?.length||0,onClick:()=>{u({kind:"hub"}),mr()}}:void 0}):void 0;if(!p||!m)return h.jsx(sl,{vault:B,topbar:h.jsx(ll,{}),children:h.jsx(bu,{children:h.jsx("div",{className:"empty",children:"Loading…"})})});if(!j)return h.jsxs(sl,{vault:B,projectsNav:h.jsx(Jx,{projects:p,onNew:()=>_(!0)}),orgBar:H,topbar:h.jsx(ll,{}),children:[h.jsx(bu,{children:h.jsx(D8,{onNew:()=>_(!0),canCreate:C})}),O]});const V=l?.kind==="hub"?{crumb:"Signup & access",body:h.jsx(g8,{})}:null,me=b.org?m.find(ce=>ce.id===b.org):null,de=b.org&&!me?{crumb:"Organization",body:h.jsxs("div",{className:"empty",children:[h.jsx("h3",{children:"Organization not found"}),h.jsx("p",{children:"This organization doesn't exist, or you're no longer a member."}),h.jsx("p",{children:h.jsxs("a",{...xu("/"+j.id),children:["Back to ",j.name]})})]})}:me?{crumb:"Organization",body:h.jsx(h8,{org:me,projects:p,myEmail:e.me?.email||""})}:null,Q=b.billing?{crumb:"Billing",body:e.billing?h.jsx(E8,{url:e.billing.url}):h.jsxs("div",{className:"empty",children:[h.jsx("h3",{children:"No billing on this hub"}),h.jsx("p",{children:"This BearDrive hub doesn't have a billing surface."})]})}:null,le=b.view==="settings"?{crumb:"Project settings",body:h.jsx(O8,{project:j,org:$,onDeleted:async()=>{await r(),pn("/")}})}:b.view==="install"?{crumb:"Installation",body:h.jsx(MC,{project:j,existing:b.connect==="existing"})}:null;return!b.org&&!b.billing&&b.project!==j.id?h.jsx(ou,{to:"/"+j.id}):b.legacyView&&b.view?h.jsx(ou,{to:ya(b.view,j.id,b.viewTarget)}):b.trailingSlash&&b.path?h.jsx(ou,{to:Ju(b.path,j.id,b.version)}):h.jsxs(h.Fragment,{children:[h.jsx(ZC,{config:e,apiBase:"/api/p/"+j.id+"/",route:b,hub:!0,project:j,projects:p,sidebar:{vault:B,projectsNav:h.jsx(Jx,{projects:p,currentId:j.id,onNew:()=>_(!0),menu:{active:l?null:b.view==="dashboard"&&!b.viewTarget?"dashboard":b.view==="install"?"install":b.view==="history"&&!b.viewTarget?"history":b.view==="settings"?"settings":null,onDashboard:()=>{u(null),pn(ya("dashboard",j.id)),mr()},onInstall:()=>{u(null),pn(ya("install",j.id)),mr()},onHistory:()=>{u(null),pn(ya("history",j.id)),mr()},onSettings:()=>{u(null),pn(ya("settings",j.id)),mr()}}}),orgBar:H},panel:V||de||Q||le,onClosePanel:()=>u(null)},j.id),O]})}function EF({token:e,onDone:n}){return w.useEffect(()=>{let r=!1;return wa("/api/invites/"+e).then(a=>{r||(Ke(`Welcome — you joined the “${a.org.name}” team. Opening its projects…`),n(a.org.id))}).catch(a=>{r||String(a.message).includes("signing in")||(Ke("Could not accept the invite: "+a.message,!0),n(null))}),()=>{r=!0}},[e]),h.jsx(sl,{vault:h.jsx(Yu,{name:"BearDrive"}),topbar:h.jsx(ll,{}),children:h.jsx(bu,{children:h.jsx("div",{className:"empty",children:"Joining…"})})})}function RF({config:e}){const n=Hp(),r=e.volume||"BearDrive";w.useEffect(()=>{document.title=e.brand||r},[e,r]);const a=w.useMemo(()=>__(n,"volume"),[n]);return a.trailingSlash&&a.path?h.jsx(ou,{to:Ju(a.path)}):h.jsx(ZC,{config:e,apiBase:"/api/",route:a,hub:!1,sidebar:{vault:h.jsx(Yu,{name:r,showSignout:e.auth.enabled,search:!0})}})}function TF(){const{data:e}=rT();return h.jsxs(_D,{delayDuration:150,children:[e?e.mode==="hub"?h.jsx(CF,{config:e}):h.jsx(RF,{config:e}):h.jsx(sl,{vault:h.jsx(Yu,{name:"…",showSignout:!1}),topbar:h.jsx(ll,{}),children:h.jsx("div",{className:"empty",children:"Loading…"})}),h.jsx(r3,{}),h.jsx(l3,{})]})}const jF=new V2({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});m2.createRoot(document.getElementById("root")).render(h.jsx(w.StrictMode,{children:h.jsx(P2,{client:jF,children:h.jsx(TF,{})})})); diff --git a/internal/webapp/static/assets/index-qQY6rBYF.css b/internal/webapp/static/assets/index-qQY6rBYF.css new file mode 100644 index 0000000..346b55f --- /dev/null +++ b/internal/webapp/static/assets/index-qQY6rBYF.css @@ -0,0 +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;--radius-xl:.75rem;--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-card:#15171b;--color-card-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:#f5a623;--radius-ctl:7px}}@layer base,components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.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}.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}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.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}.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}.field-sizing-content{field-sizing:content}.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}.min-h-16{min-height:calc(var(--spacing) * 16)}.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}.resize{resize:both}.scroll-my-1{scroll-margin-block:var(--spacing)}.scroll-py-1{scroll-padding-block:var(--spacing)}.auto-rows-min{grid-auto-rows:min-content}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-start{align-items:flex-start}.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)}.gap-6{gap:calc(var(--spacing) * 6)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.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-xl{border-radius:var(--radius-xl)}.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-card{background-color:var(--color-card)}.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-card-foreground{color:var(--color-card-foreground)}.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)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px 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-\[background-color\,border-color\,color\]{transition-property:background-color,border-color,color;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-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:#f5a62380}@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-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.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-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.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}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing) * 6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}: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{color-scheme:dark;--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;--page-read: 768px;--page-app: 768px;--page-wide: 1200px;--hero-top: clamp(32px, 8vh, 88px)}@font-face{font-family:"Jersey 10";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/jersey-10-COnnvJff.woff2) format("woff2")}@font-face{font-family:Logo Fallback;src:local("Helvetica Neue"),local("Arial"),local("Segoe UI"),local("Roboto");size-adjust:73%}*{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}:focus-visible{outline-color:var(--accent)}.admin input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox]{accent-color:var(--accent);width:20px;height:20px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.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{flex:none;display:grid;place-items:center;color:var(--accent)}#vault-name{font-family:"Jersey 10","Logo Fallback",var(--ui);font-size:18px;font-weight:400;font-synthesis:none;letter-spacing:.01em;line-height:1;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}.proj-mark svg{width:11px;height:11px}.proj-menu [data-slot=select-item]{display:flex;align-items:center;gap:8px}#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}.admin-table{width:100%;border-collapse:collapse;table-layout:fixed}.admin-table td .ai-main,.admin-table td a.ai-main,.admin-table td .ai-copy,.admin-table td .ai-tag{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-table th:last-child,.admin-table td:last-child{width:186px;text-align:right}.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:0;border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none}.admin-table td{padding:0;border-bottom:1px solid var(--border);overflow:hidden;text-overflow:ellipsis}.admin-table tr.admin-item{display:table-row}.admin-table tr.admin-item td{padding:8px 10px}.admin-card-table{overflow-x:auto}.shares-table .admin-table th:last-child,.shares-table .admin-table td:last-child{width:110px}.share-banner{margin:0 0 18px;padding:12px 14px;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--r-ctl);background:var(--surface)}.share-banner .sb-head{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text)}.share-banner .sb-head .ico,.share-banner .sb-head svg{width:15px;height:15px;flex:none;color:var(--accent)}.share-banner .sb-count{color:var(--text-faint);font-size:12px}.share-banner .sb-note{margin:6px 0 10px;font-size:12.5px;line-height:1.55;color:var(--text-faint);max-width:64ch}.share-banner .sb-link{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-top:8px;border-top:1px solid var(--border)}.share-banner .sb-link+.sb-link{margin-top:8px}.share-banner .sb-url{flex:1 1 260px;min-width:0;font-size:12px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.share-banner .sb-meta{font-size:11.5px;color:var(--text-faint)}.share-banner .sb-actions{display:flex;align-items:center;gap:6px;margin-left:auto}.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-faint);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 .plan-chip{margin-left:auto;color:var(--accent);border-color:var(--border-2)}#account-menu #signout{color:var(--del)}#account-menu #signout:hover{color:var(--del);background:var(--hover)}#billing-view .plan-chip{color:var(--accent)}.plan-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:700px){.plan-grid{grid-template-columns:1fr}}.usage-bar{background:var(--surface);border:1px solid var(--border);border-radius:4px;height:6px;overflow:hidden}.usage-bar>div{background:var(--accent);height:100%}.plan-price{font-size:20px;font-weight:700;margin:0 0 10px}.plan-price small{font-size:12px;color:var(--text-dim);font-weight:500}.muted-note{color:var(--text-dim);font-size:13px}#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}.page{width:100%;max-width:var(--page-app);margin-inline:auto;min-width:0}.page.read{max-width:var(--page-read)}.page.wide{max-width:var(--page-wide)}.empty{color:var(--text-faint);text-align:center;margin-top:var(--hero-top)}.empty-hint{display:block;margin-top:6px;font-size:12px;color:var(--text-faint)}.onboard{max-width:560px;margin:var(--hero-top) 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-card.ob-start{border-color:var(--border-2);box-shadow:inset 2px 0 0 var(--accent)}.ob-card.ob-start .pbtn{margin-top:2px}.ob-alt{margin:12px 0 0}.ob-alt a{color:var(--text-faint);font-size:12.5px;font-weight:600;text-decoration:none}.ob-alt a:hover{color:var(--text)}.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}[data-slot=input],[data-slot=textarea]{font:inherit;color:var(--text)}[data-slot=input][aria-invalid=true]:focus-visible,[data-slot=textarea][aria-invalid=true]:focus-visible{border-color:var(--del)}[data-slot=card],[data-slot=dropdown-menu-content]{border-color:var(--border)}.project-settings{display:flex;flex-direction:column;gap:14px}.project-settings>h2{font-size:21px;font-weight:640;letter-spacing:-.02em;margin:0 0 4px;color:#f4f6f9}.ps-form{display:flex;flex-direction:column;gap:18px}.ps-field{display:flex;flex-direction:column;gap:7px}.ps-field label{font-size:12.5px;color:var(--text-dim)}.ps-opt{color:var(--text-ghost);font-weight:400}.ps-icon-row{display:flex;align-items:center;gap:10px}.ps-icon-row .proj-mark{width:26px;height:26px;border-radius:7px}.ps-icon-row .proj-mark svg{width:15px;height:15px}.ps-meta{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.ps-meta .field-err{flex:0 1 auto;margin:0}.ps-count{font-size:11.5px;color:var(--text-faint);font-variant-numeric:tabular-nums}.ps-actions{display:flex;justify-content:flex-end}.ps-icon-grid{display:grid;grid-template-columns:repeat(6,30px);gap:4px;padding:8px}.ps-icon-cell{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;border:1px solid transparent;background:none;color:var(--text-dim);cursor:pointer}.ps-icon-cell svg{width:16px;height:16px}.ps-icon-cell:hover{background:var(--hover);color:var(--text)}.ps-icon-cell.active{border-color:var(--accent);color:var(--accent-bright)}.ps-danger [data-slot=card-title]{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:#d2695e;font-weight:600}.ps-chip{margin-left:10px;padding:2px 8px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-faint);font-size:11px;font-weight:600;letter-spacing:.02em;vertical-align:middle}.ps-people h4{font-size:12.5px;font-weight:600;color:var(--text-dim);margin:0}.ps-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--text-dim);margin:0 0 10px}.ps-people select{height:28px;padding:0 8px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:12.5px}.ps-people select:disabled{opacity:.6;cursor:default}.ps-note{color:var(--text-faint);font-size:12.5px;margin:0 0 12px;max-width:56ch;line-height:1.55}.ps-people-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:20px 0 8px}.ps-danger p{color:var(--text-dim);font-size:13px;margin:0 0 14px;max-width:52ch;line-height:1.55}.ps-facts{display:grid;grid-template-columns:auto 1fr;gap:8px 20px;margin:0;font-size:13px}.ps-facts dt{color:var(--text-faint)}.ps-facts dd{margin:0;color:var(--text-dim)}.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-lbl{flex:1 1 100%;margin:0 0 6px;font-size:12.5px;font-weight:600;color:var(--text-dim)}.admin-sub{color:var(--text-dim);font-size:13.5px;margin:-2px 0 16px;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-list.admin-card-table{overflow-x:auto;overflow-y:hidden}.admin-item{display:flex;align-items:center;gap:11px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13.5px}.modal-actions .ai-btn{height:32px}.empty a{color:var(--accent);text-decoration:none;display:inline-block;padding:6px 10px}.empty a:hover{text-decoration:underline}.empty h3{margin:0 0 8px;font-size:16px;color:var(--text)}.ai-copy{text-align:left;background:none;border:0;padding:6px 0;cursor:pointer}.ai-copy:hover{color:var(--text)}a.ai-main{color:var(--text-dim);text-decoration:none;padding:6px 0}a.ai-main:hover{color:var(--accent)}.th-sort{display:block;width:100%;text-align:left;background:none;border:0;padding:6px 10px;font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}.th-sort:hover{color:var(--text-dim)}.proj-trigger>[data-slot=select-value]{display:block;flex:1 1 auto;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-cell{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;justify-items:start}.admin-table td .role-static{text-align:left}.role-chip-row{margin:-6px 0 12px}.role-chip{margin-left:0;padding:2px 8px;border:1px solid var(--border-2);border-radius:99px;vertical-align:middle}.ext{margin-left:4px;color:var(--text-faint);font-size:11px}.admin-item:last-child{border-bottom:none}.admin-item:hover{background:var(--hover)}.field-err{flex:1 1 100%;margin:6px 0 0}.admin-row{flex-wrap:wrap}.admin-row input[aria-invalid=true]{border-color:var(--del)}.ai-main{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.admin-item>.ai-main{flex:1 1 55%;min-width:22ch}.admin-item>.ai-tag{flex:0 0 auto;min-width:0;max-width:45%}@media(max-width:1000px){.admin-item{flex-wrap:wrap}.admin-item>.ai-tag{flex:1 1 100%;max-width:100%}}.admin-table td .ai-main{min-width:0}.ai-main.mono{font:12px var(--mono);color:var(--text-dim);cursor:pointer}.ai-tag{font-size:11.5px;color:var(--text-faint);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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-del{color:var(--del);border-color:#f26d6d47}.ai-del:hover{background:#f26d6d1f;border-color:var(--del);color:#ff8b8b}.ai-btn:hover{background:var(--hover);color:var(--text);border-color:var(--border-2)}.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{margin-top:2px;flex:none}.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)}#account-btn.active{background:var(--glow)}#account-btn.active .acct b{color:var(--accent-bright)}.gd-body{margin-top:18px}.gd-desc{margin:2px 0 8px;color:var(--text-faint);font-size:13px;line-height:1.5}.gd-list{margin:4px 0 8px;padding-left:18px;display:grid;gap:6px}.gd-code{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:10px;margin:6px 0 10px;padding: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)}.gd-code>code{display:block;min-width:0;overflow-x:auto;white-space:pre}.gd-copy{align-self:start;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}.gd-copy:hover{color:var(--accent-bright);border-color:var(--accent-dim)}.gd-manual{margin:10px 0 0}.gd-manual>summary{display:inline-block;font-size:12.5px;font-weight:600;color:var(--text-faint);cursor:pointer;padding:4px 0}.gd-manual>summary:before{content:"▸ ";color:var(--text-ghost)}.gd-manual[open]>summary:before{content:"▾ "}.gd-manual>summary:hover{color:var(--text)}.home-insights{margin-top:30px;padding-top:22px;border-top:1px solid var(--border)}.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}.gd-head{display:flex;align-items:center;gap:9px}.gd-head .proj-mark{width:22px;height:22px;border-radius:6px}.gd-head .proj-mark svg{width:13px;height:13px}.in-desc{color:var(--text-dim);font-size:13.5px;line-height:1.55;margin:0 0 10px;max-width:62ch}.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%;max-width:760px;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-share{background:#b478e8}.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-sw.share{background:#b478e8}.in-sw-age{width:84px;margin:0 5px}.in-tm-range{margin-left:14px;color:var(--text-ghost)}.in-matrix rect{transition:opacity .1s}.in-matrix rect:hover{opacity:.85}.hentry{padding:11px 12px;border-bottom:1px solid var(--border);--hindent: 72px}.hentry:hover{background:#ffffff04}.hline{display:flex;gap:10px;align-items:center}.hkind{flex:none;width:62px;white-space:nowrap;text-align:center;font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:2px 6px;border-radius:4px;color:var(--add);background:#4cc38a1f}.hentry.edit .hkind{color:var(--accent-bright);background:var(--glow)}.hentry.delete .hkind{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:var(--hindent);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:var(--hindent);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:"›";display:inline-block;margin-right:5px;color:var(--text-ghost);transition:transform .12s}.hnote.open:before{transform:rotate(90deg)}.hnote a{color:var(--accent-bright);text-decoration:none}.hnote a:hover{text-decoration:underline}.hrun{border:1px solid var(--border);border-radius:var(--r-card);background:var(--bg-side);margin:10px 0;overflow:hidden}.hrun-head{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;color:var(--text);font-size:12.5px}.hrun-toggle{display:flex;flex:none;padding:2px;border:none;border-radius:4px;background:none;color:var(--text-faint);cursor:pointer}.hrun-toggle:hover{color:var(--text);background:var(--hover)}.hrun-toggle .ico{width:13px;height:13px}.hrun-note{font-weight:560;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:46%}.hrun-note a{color:var(--accent-bright);text-decoration:none}.hrun-note a:hover{text-decoration:underline}.hrun-meta{color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hrun-time{margin-left:auto;flex:none;color:var(--text-faint);font-variant-numeric:tabular-nums}.hrun-body{border-top:1px solid var(--border)}.hrun-body .hentry:last-child{border-bottom:none}.hrestore-btn,.hremove-btn{display:inline-flex;align-items:center;gap:4px;margin-left:auto;padding:2px 8px 2px 5px;border:1px solid var(--border);border-radius:5px;background:none;color:var(--text-faint);font:inherit;font-size:12px;cursor:pointer}.hrestore-btn:hover{color:var(--accent-bright);border-color:var(--border-2);background:var(--hover)}.hremove-btn:hover{color:var(--del);border-color:#f26d6d61;background:var(--hover)}.hrestore-btn:disabled,.hremove-btn:disabled{opacity:.5;cursor:default}.hrestore-btn .ico,.hremove-btn .ico{width:12px;height:12px}.hactions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0 0 23px}.hdiff-btn,.hver-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 7px 2px 4px;border:1px solid var(--border);border-radius:5px;background:none;color:var(--text-faint);font:inherit;font-size:12px;cursor:pointer;text-decoration:none}.hdiff-btn:hover,.hver-btn:hover{color:var(--text);border-color:var(--border-2);background:var(--hover)}.hdiff-btn .ico,.hver-btn .ico{width:12px;height:12px}.hdiff-none{flex-basis:100%;font-size:12px;color:var(--text-ghost)}.dv{margin:8px 0 2px 23px;border:1px solid var(--border);border-radius:6px;overflow:hidden}.dv-msg{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:9px 11px;font-size:12px;color:var(--text-faint)}.dv-dl{display:flex;gap:12px}.dv-msg a{color:var(--accent-bright);text-decoration:none}.dv-msg a:hover{text-decoration:underline}.dv-head{display:flex;align-items:center;gap:10px;padding:5px 11px;border-bottom:1px solid var(--border);font-size:11px;font-variant-numeric:tabular-nums}.dv-add{color:var(--add);font-weight:600}.dv-del{color:var(--del);font-weight:600}.dv-same{color:var(--text-ghost)}.dv-body{overflow-x:auto;padding:4px 0}.dv-line{display:flex;font-family:var(--mono);font-size:12px;line-height:1.55;white-space:pre}.dv-n{flex:none;width:34px;padding-right:8px;text-align:right;color:var(--text-ghost);-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}.dv-mark{flex:none;width:16px;text-align:center;-webkit-user-select:none;user-select:none}.dv-text{padding-right:12px}.dv-ins{background:#4cc38a1a;color:var(--add)}.dv-rm{background:#f26d6d1a;color:#ff8b8b}.dv-ctx{color:var(--text-dim)}#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{flex:1;width:100%;border:none;background:transparent;box-shadow:none;color:var(--text);font:inherit;font-size:15px;letter-spacing:-.01em;outline:none;padding:0}#palette input::placeholder{color:var(--text-ghost)}#palette-inputwrap .ico{width:17px;height:17px;color:var(--text-faint)}#palette [cmdk-list]{list-style:none;margin:0;padding:8px;max-height:46vh;overflow-y:auto}#palette [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 [cmdk-item][data-selected=true]{background:var(--glow)}#palette [cmdk-item][data-selected=true] .picon{color:var(--accent)}#palette [cmdk-item][data-selected=true] .plabel,#palette [cmdk-item][data-selected=true] .plabel b{color:var(--accent-bright)}#palette [cmdk-item] .picon{width:18px;flex:none;display:flex;justify-content:center;color:var(--text-faint)}#palette [cmdk-item] .picon .ico{width:15px;height:15px}#palette [cmdk-item] .plabel{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}#palette [cmdk-item] .plabel b{color:var(--accent-bright);font-weight:600}#palette [cmdk-item] .pkind{flex:none;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-ghost)}#palette [cmdk-list] .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-expiry{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:12.5px;color:var(--text-dim)}.modal-expiry 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}.modal-expiry select:disabled{opacity:.6;cursor:default}.modal-expiry-note{margin-left:auto;color:var(--text-dim)}.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)}.start-points{border:0;margin:0 0 18px;padding:0}.start-points legend{padding:0}.start-point{display:flex;align-items:flex-start;gap:10px;padding:9px 11px;border:1px solid var(--border);border-radius:var(--r-ctl);background:var(--surface);cursor:pointer;margin-bottom:6px}.start-point:hover{background:var(--hover)}.start-point.on{border-color:var(--accent);background:var(--hover)}.start-point input{accent-color:var(--accent);margin:2px 0 0;flex:none}.sp-text{display:flex;flex-direction:column;gap:2px;min-width:0}.sp-title{font-size:13.5px;color:var(--text);display:flex;align-items:center;gap:8px}.sp-rec{font-size:10.5px;letter-spacing:.02em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:0 6px;line-height:15px}.sp-blurb{font-size:12px;color:var(--text-dim);overflow-wrap:anywhere}.start-point.sp-rule{margin-top:16px}.modal{max-height:calc(100vh - 32px);overflow-y:auto}.gd-note{margin:-4px 0 16px;font-size:13px;color:var(--text-dim);border-left:2px solid var(--accent);padding-left:11px;line-height:1.55}[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,#search-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 table,pre.plain{display:block;overflow-x:auto;max-width:100%}.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-table thead{display:none}.admin-table,.admin-table tbody,.admin-table td{display:block;width:auto}.admin-table tr.admin-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.admin-table tr.admin-item td{padding:0;border-bottom:none}.admin-table tr.admin-item td:first-child{flex:1 1 100%;width:auto}.admin-table tr.admin-item td:last-child{width:auto;text-align:left}[data-slot=dropdown-menu-item]{min-height:44px}#projects{flex:0 1 auto;max-height:none}.admin-row{flex-wrap:wrap}.admin-row input{flex:1 1 100%;min-height:44px}.admin-row button{flex:0 0 auto;align-self:flex-start;min-height:44px}.admin-item .ai-main{flex:1 1 100%;white-space:normal;overflow-wrap:anywhere}.admin-table td{white-space:normal}.admin-table td .ai-main,.admin-table td a.ai-main,.admin-table td .ai-copy,.admin-table td .ai-tag{white-space:normal;overflow-wrap:anywhere}.admin-item .ai-tag{flex:1 1 100%;max-width:100%;white-space:normal;overflow-wrap:anywhere}.ai-copy{min-height:44px;display:block;padding:12px 0;white-space:normal;overflow-wrap:anywhere;text-overflow:clip}a.ai-main{min-height:44px;display:flex;align-items:center}.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{height:auto;min-height:44px}.modal-expiry select{height:44px}.pbtn,#palette [cmdk-item]{height:auto;min-height:44px}.more-item{min-height:44px}}.modal-actions .ai-del{margin-right:auto}@media(max-width:430px){.dl-row{flex-wrap:wrap;row-gap:2px}.dl-meta{flex:1 1 100%;padding-left:27px}.ai-tag{font-size:11px}.htime{white-space:nowrap;font-size:12px}.hline{flex-wrap:wrap}.hentry{--hindent: 0px}.modal-actions .ai-del{flex:0 0 100%;justify-content:center;text-align:center}}.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 .admin input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.admin input[aria-invalid=true]:focus-visible{outline-color:var(--del)}[role=dialog] input[aria-invalid=true]{border-color:var(--del)}[role=dialog] input[aria-invalid=true]:focus-visible{outline-color:var(--del)}button:disabled,.btn:disabled{cursor:default}input[type=checkbox]{accent-color:var(--accent)}.htmlview,.pdfview{display:block;width:100%;height:calc(100vh - 150px);border:1px solid var(--border);border-radius:var(--r-card);background:#fff}.notfound{margin-top:var(--hero-top);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}.vbanner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 22px;padding:11px 14px;border:1px solid var(--accent-dim);border-radius:var(--r-card);background:var(--glow)}.vbanner .vb-icon{flex:none;display:flex;color:var(--accent-bright)}.vbanner .vb-text{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:1px;font-size:12.5px;line-height:1.45}.vbanner .vb-text b{color:var(--accent-bright);font-weight:600}.vbanner .vb-text span{color:var(--text-dim)}.vbanner .vb-actions{flex:none;display:flex;gap:8px}.vbanner .vb-actions .ai-btn{display:inline-flex;align-items:center;text-decoration:none}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}.filecard{margin-top:var(--hero-top);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 b3b0706..2039df0 100644 --- a/internal/webapp/static/index.html +++ b/internal/webapp/static/index.html @@ -5,8 +5,8 @@ BearDrive - - + +