@loomhelix/deptrail 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +421 -0
- package/dist/actions/action-error.js +11 -0
- package/dist/actions/action-jobs.js +199 -0
- package/dist/actions/action-service.js +268 -0
- package/dist/actions/apply.js +120 -0
- package/dist/actions/availability.js +79 -0
- package/dist/actions/change-sets.js +117 -0
- package/dist/actions/dry-run.js +287 -0
- package/dist/actions/edge-moves.js +108 -0
- package/dist/actions/edit-plan.js +179 -0
- package/dist/actions/file-scope.js +118 -0
- package/dist/actions/fix-options.js +141 -0
- package/dist/actions/goal-check.js +80 -0
- package/dist/actions/install.js +27 -0
- package/dist/actions/job-registry.js +104 -0
- package/dist/actions/json-edit.js +189 -0
- package/dist/actions/labels.js +35 -0
- package/dist/actions/node-actions.js +102 -0
- package/dist/actions/overrides-location.js +59 -0
- package/dist/actions/parent-chain.js +210 -0
- package/dist/actions/range-style.js +38 -0
- package/dist/actions/recipes.js +31 -0
- package/dist/actions/root-files.js +30 -0
- package/dist/actions/sandbox.js +175 -0
- package/dist/actions/set-range.js +59 -0
- package/dist/actions/shared-packages.js +50 -0
- package/dist/actions/text-diff.js +203 -0
- package/dist/actions/types.js +1 -0
- package/dist/actions/update-options.js +232 -0
- package/dist/actions/workspace-edit.js +33 -0
- package/dist/adapters/command-runner.js +127 -0
- package/dist/adapters/manifest-only.js +20 -0
- package/dist/adapters/node-modules.js +148 -0
- package/dist/adapters/npm-lock.js +149 -0
- package/dist/adapters/package-manifest.js +57 -0
- package/dist/adapters/pnpm-lock.js +177 -0
- package/dist/adapters/resolve-today.js +93 -0
- package/dist/cli/cli.js +227 -0
- package/dist/cli/open-browser.js +14 -0
- package/dist/cli/package-version.js +6 -0
- package/dist/cli/usage-text.js +27 -0
- package/dist/config/glob.js +119 -0
- package/dist/config/npmrc.js +116 -0
- package/dist/config/root-config.js +103 -0
- package/dist/config/secrets.js +18 -0
- package/dist/discovery/find-roots.js +107 -0
- package/dist/enrich/credentials.js +143 -0
- package/dist/enrich/enrichment-cache.js +42 -0
- package/dist/enrich/enrichment-keys.js +71 -0
- package/dist/enrich/enrichment-service.js +399 -0
- package/dist/enrich/enrichment-status.js +86 -0
- package/dist/enrich/enrichment-store.js +143 -0
- package/dist/enrich/http.js +201 -0
- package/dist/enrich/on-demand.js +220 -0
- package/dist/enrich/osv-client.js +260 -0
- package/dist/enrich/registry-client.js +123 -0
- package/dist/enrich/types.js +1 -0
- package/dist/git/blob-reader.js +180 -0
- package/dist/git/git-commands.js +32 -0
- package/dist/git/git-process.js +71 -0
- package/dist/git/git-repository.js +136 -0
- package/dist/git/ref-list.js +78 -0
- package/dist/git/tree-index.js +87 -0
- package/dist/graph/global-index.js +19 -0
- package/dist/graph/root-graph-builder.js +114 -0
- package/dist/graph/serialize.js +19 -0
- package/dist/model.js +2 -0
- package/dist/query/children.js +38 -0
- package/dist/query/compare-shape.js +13 -0
- package/dist/query/compare.js +245 -0
- package/dist/query/decorations.js +121 -0
- package/dist/query/dependents.js +135 -0
- package/dist/query/duplicates.js +23 -0
- package/dist/query/enrichment-lookup.js +78 -0
- package/dist/query/fixes.js +60 -0
- package/dist/query/graph-diff.js +42 -0
- package/dist/query/issues.js +235 -0
- package/dist/query/lookup.js +49 -0
- package/dist/query/node-fix.js +46 -0
- package/dist/query/package-insight.js +112 -0
- package/dist/query/search.js +61 -0
- package/dist/query/subgraph.js +107 -0
- package/dist/query/versions.js +103 -0
- package/dist/scan/build-root.js +137 -0
- package/dist/scan/cache-shape.js +52 -0
- package/dist/scan/scan-cache.js +32 -0
- package/dist/scan/scan-session.js +127 -0
- package/dist/scan/source-registry.js +55 -0
- package/dist/server/auth.js +45 -0
- package/dist/server/branches.js +105 -0
- package/dist/server/error-log.js +9 -0
- package/dist/server/root-segment.js +13 -0
- package/dist/server/router.js +474 -0
- package/dist/server/server.js +166 -0
- package/dist/server/source-key.js +1 -0
- package/dist/server/static.js +59 -0
- package/dist/sources/file-reader.js +55 -0
- package/dist/sources/git-reader.js +45 -0
- package/dist/ui/assets/index-C4uyB5v3.css +1 -0
- package/dist/ui/assets/index-DYAG2LM-.js +51 -0
- package/dist/ui/index.html +15 -0
- package/package.json +72 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { open } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const CONTENT_TYPES = {
|
|
4
|
+
'.html': 'text/html; charset=utf-8',
|
|
5
|
+
'.js': 'text/javascript; charset=utf-8',
|
|
6
|
+
'.css': 'text/css; charset=utf-8',
|
|
7
|
+
'.svg': 'image/svg+xml',
|
|
8
|
+
'.json': 'application/json; charset=utf-8',
|
|
9
|
+
'.ico': 'image/x-icon',
|
|
10
|
+
'.png': 'image/png',
|
|
11
|
+
'.woff2': 'font/woff2',
|
|
12
|
+
};
|
|
13
|
+
const UI_NOT_BUILT = {
|
|
14
|
+
status: 503,
|
|
15
|
+
contentType: 'text/plain; charset=utf-8',
|
|
16
|
+
body: 'UI is not built. Run pnpm build.',
|
|
17
|
+
};
|
|
18
|
+
async function readFileIfPresent(file) {
|
|
19
|
+
let handle;
|
|
20
|
+
try {
|
|
21
|
+
handle = await open(file, 'r');
|
|
22
|
+
if (!(await handle.stat()).isFile())
|
|
23
|
+
return null;
|
|
24
|
+
return await handle.readFile();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await handle?.close();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function insideDirectory(directory, candidate) {
|
|
34
|
+
const relative = path.relative(directory, candidate);
|
|
35
|
+
return relative !== '' && !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
36
|
+
}
|
|
37
|
+
function respondWith(file, body) {
|
|
38
|
+
const contentType = CONTENT_TYPES[path.extname(file).toLowerCase()] ?? 'application/octet-stream';
|
|
39
|
+
return { status: 200, contentType, body };
|
|
40
|
+
}
|
|
41
|
+
export async function serveStatic(staticDir, pathname) {
|
|
42
|
+
const root = path.resolve(staticDir);
|
|
43
|
+
const indexFile = path.join(root, 'index.html');
|
|
44
|
+
let decoded;
|
|
45
|
+
try {
|
|
46
|
+
decoded = decodeURIComponent(pathname);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
decoded = '/';
|
|
50
|
+
}
|
|
51
|
+
const requested = path.resolve(root, `.${decoded}`);
|
|
52
|
+
if (insideDirectory(root, requested)) {
|
|
53
|
+
const body = await readFileIfPresent(requested);
|
|
54
|
+
if (body)
|
|
55
|
+
return respondWith(requested, body);
|
|
56
|
+
}
|
|
57
|
+
const index = await readFileIfPresent(indexFile);
|
|
58
|
+
return index ? respondWith(indexFile, index) : UI_NOT_BUILT;
|
|
59
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readFile, readdir, realpath, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
function toPosix(value) {
|
|
4
|
+
return value.split(path.sep).join('/');
|
|
5
|
+
}
|
|
6
|
+
export function createFsReader(repoPath) {
|
|
7
|
+
const absoluteRepoPath = path.resolve(repoPath);
|
|
8
|
+
const resolve = (relativePath) => path.resolve(absoluteRepoPath, relativePath);
|
|
9
|
+
return {
|
|
10
|
+
async readText(relativePath) {
|
|
11
|
+
try {
|
|
12
|
+
return await readFile(resolve(relativePath), 'utf8');
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
async exists(relativePath) {
|
|
19
|
+
try {
|
|
20
|
+
await stat(resolve(relativePath));
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async listDir(relativePath) {
|
|
28
|
+
try {
|
|
29
|
+
const entries = await readdir(resolve(relativePath), { withFileTypes: true });
|
|
30
|
+
return entries.map((entry) => ({
|
|
31
|
+
name: entry.name,
|
|
32
|
+
kind: entry.isSymbolicLink() ? 'symlink' : entry.isDirectory() ? 'dir' : 'file',
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
async realpath(relativePath) {
|
|
40
|
+
try {
|
|
41
|
+
const [resolvedRepo, resolvedTarget] = await Promise.all([
|
|
42
|
+
realpath(absoluteRepoPath),
|
|
43
|
+
realpath(resolve(relativePath)),
|
|
44
|
+
]);
|
|
45
|
+
const relative = path.relative(resolvedRepo, resolvedTarget);
|
|
46
|
+
if (relative === '..' || relative.startsWith('..' + path.sep) || path.isAbsolute(relative))
|
|
47
|
+
return null;
|
|
48
|
+
return relative === '' ? '.' : toPosix(relative);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { posix } from 'node:path';
|
|
2
|
+
const TOP = '.';
|
|
3
|
+
const PARENT_SEGMENT = '..';
|
|
4
|
+
function indexPathOf(relativePath) {
|
|
5
|
+
if (relativePath === '' || relativePath === TOP)
|
|
6
|
+
return TOP;
|
|
7
|
+
if (posix.isAbsolute(relativePath))
|
|
8
|
+
return null;
|
|
9
|
+
const normalized = posix.normalize(relativePath).replace(/\/+$/, '');
|
|
10
|
+
return normalized === '' ? TOP : normalized;
|
|
11
|
+
}
|
|
12
|
+
function isAboveTop(indexPath) {
|
|
13
|
+
return indexPath === PARENT_SEGMENT || indexPath.startsWith(`${PARENT_SEGMENT}/`);
|
|
14
|
+
}
|
|
15
|
+
export function createGitReader(index, readBlob) {
|
|
16
|
+
const isListed = (indexPath) => indexPath === TOP || index.kinds.has(indexPath) || index.directories.has(indexPath);
|
|
17
|
+
return {
|
|
18
|
+
async readText(relativePath) {
|
|
19
|
+
const indexPath = indexPathOf(relativePath);
|
|
20
|
+
const blobId = indexPath === null ? undefined : index.blobs.get(indexPath);
|
|
21
|
+
if (blobId === undefined)
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
return (await readBlob(blobId))?.toString('utf8') ?? null;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
async exists(relativePath) {
|
|
31
|
+
const indexPath = indexPathOf(relativePath);
|
|
32
|
+
return indexPath !== null && isListed(indexPath);
|
|
33
|
+
},
|
|
34
|
+
async listDir(relativePath) {
|
|
35
|
+
const indexPath = indexPathOf(relativePath);
|
|
36
|
+
return indexPath === null ? [] : [...(index.directories.get(indexPath) ?? [])];
|
|
37
|
+
},
|
|
38
|
+
async realpath(relativePath) {
|
|
39
|
+
const indexPath = indexPathOf(relativePath);
|
|
40
|
+
if (indexPath === null || isAboveTop(indexPath) || !isListed(indexPath) || index.kinds.get(indexPath) === 'symlink')
|
|
41
|
+
return null;
|
|
42
|
+
return indexPath;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.center[data-v-7e0b5950]{display:flex;flex:1;flex-direction:column;min-height:0}.center__bar[data-v-7e0b5950]{display:flex;flex:none;align-items:center;gap:12px;min-height:48px;padding:0 14px;border-bottom:1px solid var(--border)}.center__tabs[data-v-7e0b5950]{display:flex;flex:none;align-self:stretch;gap:4px}.center__tab[data-v-7e0b5950]{position:relative;display:inline-flex;align-items:center;gap:6px;padding:0 12px;border:0;background:none;color:var(--text-muted);font-weight:500;cursor:pointer}.center__tab[data-v-7e0b5950]:hover,.center__tab--selected[data-v-7e0b5950]{color:var(--text)}.center__tab--selected[data-v-7e0b5950]:after{position:absolute;right:6px;bottom:-1px;left:6px;height:2px;border-radius:1px;background:var(--accent);content:""}.center__tab[data-v-7e0b5950]:focus-visible{outline-offset:-2px}.center__count[data-v-7e0b5950]{padding:0 7px;border-radius:10px;background:var(--badge-neutral-bg);color:var(--badge-neutral-fg);font-size:12px;font-weight:600;line-height:20px}.center__end[data-v-7e0b5950]{display:flex;flex:1 1 auto;justify-content:flex-end;min-width:0}.center__panel[data-v-7e0b5950]{flex:1;min-height:0;overflow:auto}.app-icon[data-v-5b040367]{display:inline-block;flex-shrink:0;vertical-align:middle}.collapsible[data-v-2811308e]{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface-panel)}.collapsible[data-v-2811308e]:focus-visible{outline-offset:-2px}.collapsible__strip[data-v-2811308e]{display:flex;flex:1;justify-content:center;padding-top:8px}.collapsible__header[data-v-2811308e]{display:flex;flex:none;align-items:center;justify-content:space-between;gap:8px;min-height:48px;padding:8px 8px 8px 14px;border-bottom:1px solid var(--border)}.collapsible--right .collapsible__header[data-v-2811308e]{padding-left:16px}.collapsible--left .collapsible__strip[data-v-2811308e],.collapsible--left .collapsible__header[data-v-2811308e]{border-right:1px solid var(--border)}.collapsible--right .collapsible__strip[data-v-2811308e],.collapsible--right .collapsible__header[data-v-2811308e]{border-left:1px solid var(--border)}.collapsible__body[data-v-2811308e]{display:grid;flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr);min-height:0}.collapsible__toggle[data-v-2811308e]{display:inline-flex;flex:none;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid transparent;border-radius:var(--radius);background:none;color:var(--text-muted);font-size:18px;line-height:1;cursor:pointer}.collapsible__toggle[data-v-2811308e]:hover{border-color:var(--border-strong);background:var(--surface-hover);color:var(--text)}.advisory-list[data-v-2d8ea2c4]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.advisory[data-v-2d8ea2c4]{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-raised)}.advisory p[data-v-2d8ea2c4]{margin:0;overflow-wrap:anywhere}.advisory__head[data-v-2d8ea2c4]{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}.advisory__id[data-v-2d8ea2c4]{color:var(--accent)}.advisory__aliases[data-v-2d8ea2c4],.advisory__fixed[data-v-2d8ea2c4]{color:var(--text-muted);font-size:13px}.details-more[data-v-2c263d37]{padding:6px 16px;border-bottom:1px solid var(--border)}.details-more__summary[data-v-2c263d37]{min-height:32px;padding:5px 0;font-weight:600;cursor:pointer}.details-more__body[data-v-2c263d37]{display:grid;gap:6px;padding:4px 0 8px}.details-more__body p[data-v-2c263d37]{margin:0;overflow-wrap:anywhere}.details-more__check[data-v-2c263d37]{color:var(--text-muted)}.details-more__links[data-v-2c263d37]{display:flex;flex-wrap:wrap;gap:16px}.details-more__links a[data-v-2c263d37]{color:var(--accent)}.package-header__notice[data-v-10744edb]{display:grid;gap:4px;margin:12px 16px 0;padding:8px 12px;border-left:4px solid var(--badge-warn-fg);border-radius:var(--radius);background:var(--badge-warn-bg);color:var(--badge-warn-fg)}.package-header__notice-text[data-v-10744edb]{margin:0;overflow-wrap:anywhere}.package-header__main[data-v-10744edb]{display:grid;gap:6px;padding:16px 16px 14px;border-bottom:1px solid var(--border);transition:opacity .15s}.package-header__main--loading[data-v-10744edb]{opacity:.6}.package-header__main p[data-v-10744edb]{margin:0}.package-header__title[data-v-10744edb]{margin:0;font-size:17px;font-weight:600;overflow-wrap:anywhere}.package-header__title .mono[data-v-10744edb]{font-size:16px}.package-header__version[data-v-10744edb]{color:var(--text-muted);font-weight:500}.package-header__peer[data-v-10744edb],.package-header__place[data-v-10744edb]{color:var(--text-muted);overflow-wrap:anywhere}.package-header__root[data-v-10744edb]{margin-right:4px;font-size:13px}.package-header__link[data-v-10744edb]{display:inline;padding:0;border:0;background:none;color:var(--accent);text-align:left;cursor:pointer}.package-header__link[data-v-10744edb]:hover{text-decoration:underline}.package-header__separator[data-v-10744edb]{display:inline-block;color:var(--text-muted)}.package-header__labels[data-v-10744edb]{display:flex;flex-wrap:wrap;gap:6px}.change-goals[data-v-66ed9567]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.change-goals p[data-v-66ed9567]{margin:0}.change-goals__items[data-v-66ed9567]{display:grid;gap:2px;margin:0;padding:0;list-style:none}.change-goals__item[data-v-66ed9567]{overflow-wrap:anywhere}.change-goals__more[data-v-66ed9567]{color:var(--text-muted)}.change-goals__review[data-v-66ed9567]{color:var(--accent)}.scope-summary[data-v-d178b92a]{display:grid;gap:8px;padding:16px 16px 14px;border-bottom:1px solid var(--border)}.scope-summary p[data-v-d178b92a]{margin:0}.scope-summary__prompt[data-v-d178b92a]{color:var(--text-muted)}.scope-summary__title[data-v-d178b92a]{margin:0;font-size:17px;font-weight:600;overflow-wrap:anywhere}.scope-summary__title.mono[data-v-d178b92a]{font-size:16px}.scope-summary__roots[data-v-d178b92a]{display:grid;gap:6px;margin:0;padding:0;list-style:none}.scope-summary__root[data-v-d178b92a]{display:grid;gap:2px;overflow-wrap:anywhere}.scope-summary__name[data-v-d178b92a]{font-weight:600}.scope-summary__muted[data-v-d178b92a],.scope-summary__health[data-v-d178b92a]{color:var(--text-muted)}.scope-summary__link[data-v-d178b92a]{color:var(--accent)}.scope-summary__link--vulnerability[data-v-d178b92a]{color:var(--danger)}.scope-summary__source[data-v-d178b92a]{color:var(--text-muted);overflow-wrap:anywhere}.vulnerable-below[data-v-18c6c677]{padding:6px 16px;border-bottom:1px solid var(--border)}.vulnerable-below__summary[data-v-18c6c677]{min-height:32px;padding:5px 0;font-weight:600;cursor:pointer}.vulnerable-below__body[data-v-18c6c677]{display:grid;gap:6px;padding:4px 0 8px}.vulnerable-below__body p[data-v-18c6c677]{margin:0}.vulnerable-below__muted[data-v-18c6c677]{color:var(--text-muted)}.vulnerable-below__error[data-v-18c6c677]{color:var(--danger);overflow-wrap:anywhere}.vulnerable-below__rows[data-v-18c6c677]{display:grid;gap:2px;margin:0;padding:0;list-style:none}.vulnerable-below__row[data-v-18c6c677]{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-height:28px;overflow-wrap:anywhere}.vulnerable-below__link[data-v-18c6c677]{display:inline;padding:0;border:0;background:none;color:var(--accent);text-align:left;cursor:pointer}.vulnerable-below__link[data-v-18c6c677]:hover{text-decoration:underline}.fix-choices[data-v-99f74263]{display:grid;gap:8px}.fix-choices p[data-v-99f74263]{margin:0}.fix-choices__goal[data-v-99f74263]{color:var(--text-muted);overflow-wrap:anywhere}.fix-choices__options[data-v-99f74263]{display:grid;gap:8px}.fix-choices__note[data-v-99f74263]{overflow-wrap:anywhere}.choice[data-v-99f74263]{padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-raised);cursor:pointer}.choice--selected[data-v-99f74263]{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.choice__head[data-v-99f74263]{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}.choice__label[data-v-99f74263]{display:inline-flex;align-items:center;gap:8px;font-weight:600;cursor:pointer}.choice__label input[data-v-99f74263]{margin:0;accent-color:var(--accent)}.choice__steps[data-v-99f74263]{margin:4px 0 0;padding-left:40px}.choice__step[data-v-99f74263]{margin:4px 0 0;overflow-wrap:anywhere}.choice__step>span[data-v-99f74263]{display:block}.choice__reason[data-v-99f74263]{color:var(--text-faint);font-size:13px}.choice__warnings[data-v-99f74263]{margin:6px 0 0;padding:0 0 0 22px;list-style:none}.choice__warning[data-v-99f74263]{color:var(--badge-warn-fg);font-size:13px;font-weight:500;overflow-wrap:anywhere}.workspace-name[data-v-bc3b4bc7]{display:inline-block;max-width:100%;padding:0 4px;border:1px solid var(--workspace-border);border-radius:var(--radius);background:var(--workspace-bg);color:var(--workspace-fg);overflow-wrap:anywhere}.update-choice[data-v-02a381a4]{display:grid;gap:8px}.update-choice p[data-v-02a381a4]{margin:0}.update-choice__goal[data-v-02a381a4]{color:var(--text-muted);overflow-wrap:anywhere}.update-choice__field[data-v-02a381a4]{display:flex;align-items:center;gap:10px}.update-choice__label[data-v-02a381a4]{color:var(--text);font-size:13px;font-weight:600}.update-choice__select[data-v-02a381a4]{flex:1;min-width:0;max-width:280px;height:32px;padding:0 8px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text);font-family:var(--font-mono);font-size:13px}.update-choice__toggle[data-v-02a381a4]{display:inline-flex;align-items:center;gap:8px;justify-self:start;color:var(--text-muted);cursor:pointer}.update-choice__toggle input[data-v-02a381a4],.importer input[data-v-02a381a4]{margin:0;accent-color:var(--accent)}.update-choice__importers[data-v-02a381a4]{display:grid;gap:4px;min-width:0;margin:4px 0 0;padding:0;border:0}.update-choice__importers legend[data-v-02a381a4]{margin-bottom:4px;padding:0}.importer[data-v-02a381a4]{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;cursor:pointer;overflow-wrap:anywhere}.importer--disabled[data-v-02a381a4]{cursor:default}.importer__name[data-v-02a381a4]{font-weight:500}.importer__reason[data-v-02a381a4]{color:var(--text-faint);font-size:13px}.update-choice__warnings[data-v-02a381a4]{margin:0;padding:0;list-style:none}.update-choice__warning[data-v-02a381a4]{color:var(--badge-warn-fg);font-size:13px;font-weight:500;overflow-wrap:anywhere}.what-to-do[data-v-28ddbbec]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.what-to-do p[data-v-28ddbbec]{margin:0}.what-to-do__block[data-v-28ddbbec]{display:grid;gap:8px}.what-to-do__block+.what-to-do__block[data-v-28ddbbec]{margin-top:4px;padding-top:12px;border-top:1px solid var(--border)}.what-to-do__footer[data-v-28ddbbec]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:2px}.what-to-do__in-changes[data-v-28ddbbec]{color:var(--text-muted);overflow-wrap:anywhere}.what-to-do__commit[data-v-28ddbbec]{height:32px;border-color:var(--accent);color:var(--accent);font-weight:600}.what-to-do__commit--review[data-v-28ddbbec]{border-color:var(--badge-ok-fg);background:var(--badge-ok-bg);color:var(--badge-ok-fg);font-weight:500}.what-to-do__commit--review[data-v-28ddbbec]:hover:not(:disabled){background:var(--badge-ok-bg);text-decoration:underline}.what-to-do__error[data-v-28ddbbec]{color:var(--danger);overflow-wrap:anywhere}.why-here[data-v-445f6dfb]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.why-here p[data-v-445f6dfb]{margin:0}.why-here__empty[data-v-445f6dfb],.why-here__more[data-v-445f6dfb]{color:var(--text-muted)}.why-here__rows[data-v-445f6dfb]{display:grid;gap:2px;margin:0;padding:0;list-style:none}.why-here__row[data-v-445f6dfb]{min-height:28px;padding:3px 0;overflow-wrap:anywhere}.why-here__parent[data-v-445f6dfb]{display:inline;padding:0;border:0;background:none;color:var(--accent);text-align:left;cursor:pointer}.why-here__parent[data-v-445f6dfb]:hover{text-decoration:underline}.why-here__trail[data-v-445f6dfb]{height:32px}.workspace-summary__header[data-v-b7e7f175]{display:grid;gap:6px;padding:16px 16px 14px;border-bottom:1px solid var(--border);transition:opacity .15s}.workspace-summary__header--loading[data-v-b7e7f175]{opacity:.6}.workspace-summary p[data-v-b7e7f175]{margin:0}.workspace-summary__title[data-v-b7e7f175]{margin:0;font-size:17px;font-weight:600;overflow-wrap:anywhere}.workspace-summary__title .mono[data-v-b7e7f175]{font-size:16px}.workspace-summary__place[data-v-b7e7f175]{color:var(--text-muted);overflow-wrap:anywhere}.workspace-summary__root[data-v-b7e7f175]{margin-right:4px;font-size:13px}.workspace-summary__section[data-v-b7e7f175]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.workspace-summary__dependencies[data-v-b7e7f175]{display:block;color:var(--text-muted)}.workspace-summary__muted[data-v-b7e7f175]{color:var(--text-muted)}.workspace-summary__error[data-v-b7e7f175]{color:var(--danger);overflow-wrap:anywhere}.workspace-summary__problems[data-v-b7e7f175]{display:grid;gap:2px;margin:0;padding:0;list-style:none}.workspace-summary__problem[data-v-b7e7f175]{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-height:28px;overflow-wrap:anywhere}.workspace-summary__link[data-v-b7e7f175]{display:inline;padding:0;border:0;background:none;color:var(--accent);text-align:left;cursor:pointer}.workspace-summary__link[data-v-b7e7f175]:hover{text-decoration:underline}.details[data-v-32503a45]{overflow-y:auto;border-left:1px solid var(--border);background:var(--surface-panel)}.details__empty[data-v-32503a45],.details__error[data-v-32503a45]{margin:16px}.details__notice[data-v-32503a45]{display:flex;align-items:flex-start;gap:8px;margin:12px 16px 0;padding:6px 6px 6px 12px;border-radius:var(--radius);background:var(--badge-info-bg);color:var(--badge-info-fg)}.details__notice-text[data-v-32503a45]{flex:1;min-width:0;margin:3px 0;overflow-wrap:anywhere}.details__notice-dismiss[data-v-32503a45]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius);background:none;color:inherit;font-size:18px;line-height:1;cursor:pointer}.details__notice-dismiss[data-v-32503a45]:hover{border-color:currentColor}.details__missing[data-v-32503a45]{display:grid;gap:8px;margin:16px}.details__missing p[data-v-32503a45]{margin:0}.details__follow-links[data-v-32503a45]{display:grid;gap:4px;margin:0;padding:0;list-style:none}.details__error[data-v-32503a45]{color:var(--danger);overflow-wrap:anywhere}.link[data-v-32503a45]{padding:0;border:0;background:none;color:var(--accent);text-align:left;cursor:pointer}.link[data-v-32503a45]:hover{text-decoration:underline}@media(max-width:820px){.details[data-v-32503a45]{border-top:1px solid var(--border);border-left:0}}.notice-banner[data-v-80d0712f]{display:grid;flex:none;gap:4px;padding:10px 14px;border-bottom:1px solid var(--border);border-left:4px solid var(--danger);background:var(--badge-danger-bg);color:var(--badge-danger-fg)}.notice-banner__message[data-v-80d0712f]{margin:0;overflow-wrap:anywhere}.breakable-path__segment[data-v-0f6f68ec]{white-space:nowrap}.roots[data-v-8af9641f]{overflow-y:auto;border-right:1px solid var(--border);background:var(--surface-panel)}.progress[data-v-8af9641f]{display:grid;gap:6px;padding:12px 14px;border-bottom:1px solid var(--border);background:var(--surface-raised)}.progress p[data-v-8af9641f]{margin:0;overflow-wrap:anywhere}.progress__line[data-v-8af9641f]{font-weight:600}.progress__detail[data-v-8af9641f]{font-size:13px}.progress__bar[data-v-8af9641f]{height:6px;overflow:hidden;border-radius:3px;background:var(--badge-neutral-bg)}.progress__fill[data-v-8af9641f]{display:block;height:100%;background:var(--accent);transition:width .3s}.progress__problem[data-v-8af9641f]{display:grid;gap:2px;color:var(--badge-warn-fg);font-size:13px}.roots__empty[data-v-8af9641f]{margin:12px}.tree[data-v-8af9641f]{display:grid;padding:6px 0 12px}.tree__row[data-v-8af9641f]{display:flex;align-items:flex-start;gap:4px;min-width:0;padding:6px 14px 6px 6px;cursor:pointer}.tree__row[data-v-8af9641f]:hover{background:var(--surface-hover)}.tree__row[data-v-8af9641f]:focus{outline:none}.tree__row[data-v-8af9641f]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tree__row--scope[data-v-8af9641f]{background:var(--surface-raised);box-shadow:inset 3px 0 0 var(--accent)}.tree__row--scope[data-v-8af9641f]:hover{background:var(--surface-raised)}.tree__row--all[data-v-8af9641f]{align-items:center;min-height:36px;padding-left:14px}.tree__all[data-v-8af9641f]{font-weight:600}.tree__row--root[data-v-8af9641f]{padding-top:8px;padding-bottom:8px}.tree__row--package[data-v-8af9641f]{flex-direction:column;align-items:flex-start;gap:0;min-height:32px;padding:5px 14px 5px 34px}.tree__row--selected[data-v-8af9641f],.tree__row--selected[data-v-8af9641f]:hover{background:var(--surface-selected)}.root__disclosure[data-v-8af9641f]{display:inline-flex;flex:none;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--radius)}.root__disclosure[data-v-8af9641f]:hover{background:var(--surface-hover)}.root__chevron[data-v-8af9641f]{color:var(--text-muted)}.root__body[data-v-8af9641f]{display:grid;flex:1;grid-template-columns:minmax(0,1fr);justify-items:start;gap:4px;min-width:0}.root__body p[data-v-8af9641f]{margin:0}.root__heading[data-v-8af9641f]{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;max-width:100%}.root__title[data-v-8af9641f]{min-width:0;font-size:14px;line-height:24px}.root__parent[data-v-8af9641f]{color:var(--text-muted)}.root__leaf[data-v-8af9641f]{font-weight:600;overflow-wrap:anywhere}.root__meta[data-v-8af9641f]{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px 8px;font-size:13px}.root__manager[data-v-8af9641f]{color:var(--text-muted)}.root__error[data-v-8af9641f]{color:var(--danger);font-size:13px;overflow-wrap:anywhere}.root__health[data-v-8af9641f]{font-size:13px}.root__separator[data-v-8af9641f]{color:var(--text-muted)}.root__link[data-v-8af9641f]{display:inline-block;min-height:24px;line-height:24px;color:var(--accent);text-underline-offset:2px}.root__link[data-v-8af9641f]:hover{text-decoration-thickness:2px}.root__link--vulnerability[data-v-8af9641f]{color:var(--danger)}.root__pulse[data-v-8af9641f]{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse-8af9641f 1s ease-in-out infinite alternate}@keyframes pulse-8af9641f{0%{opacity:1}to{opacity:.25}}.root__resolve[data-v-8af9641f]{height:28px;margin-top:2px;font-size:13px}.root__warnings[data-v-8af9641f]{font-size:13px;color:var(--text-muted)}.root__warnings summary[data-v-8af9641f]{cursor:pointer}.root__warnings ul[data-v-8af9641f]{margin:4px 0 0;padding-left:16px;overflow-wrap:anywhere}.package__name[data-v-8af9641f],.package__path[data-v-8af9641f]{max-width:100%;overflow-wrap:break-word}.package__path[data-v-8af9641f]{font-size:12px}.source-notice[data-v-7e396e95]{display:flex;flex:none;align-items:center;gap:10px;padding:8px 16px;border-bottom:1px solid var(--source-commit-border);border-left:4px solid var(--source-commit-border);background:var(--source-commit-bg);color:var(--source-commit-fg)}.source-notice__icon[data-v-7e396e95]{flex:none}.source-notice__text[data-v-7e396e95]{flex:1;min-width:0;margin:0;white-space:normal}.source-notice__back[data-v-7e396e95]{flex:none}.selection-pill[data-v-059d1f55]{display:inline-flex;flex:0 1 auto;align-items:center;gap:2px;min-width:0;max-width:min(440px,100%);height:32px;padding:0 2px 0 12px;border:1px solid var(--accent);border-radius:16px;background:var(--surface-selected);color:var(--text)}.selection-pill__text[data-v-059d1f55]{min-width:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.selection-pill__clear[data-v-059d1f55]{display:inline-flex;flex:none;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:none;color:inherit;font-size:16px;line-height:1;cursor:pointer}.selection-pill__clear[data-v-059d1f55]:hover{background:var(--surface-hover)}.refresh[data-v-b9dde3b9]{position:relative;flex:none}.refresh__button[data-v-b9dde3b9]{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px 0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);cursor:pointer;white-space:nowrap}.refresh__button[data-v-b9dde3b9]:hover{background:var(--surface-hover)}.refresh__caret[data-v-b9dde3b9]{margin-left:4px;color:var(--text-muted)}.refresh__popover[data-v-b9dde3b9]{position:absolute;z-index:20;top:calc(100% + 4px);right:0;min-width:280px;padding:4px 0;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.refresh__item[data-v-b9dde3b9]{padding:6px 14px;cursor:pointer;white-space:nowrap}.refresh__item[data-v-b9dde3b9]:hover{background:var(--surface-hover)}.refresh__item[data-v-b9dde3b9]:focus{outline:none;background:var(--surface-selected)}.refresh__item[data-v-b9dde3b9]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.refresh__item[aria-disabled=true][data-v-b9dde3b9]{color:var(--text-muted);cursor:default}.refresh__item[aria-disabled=true][data-v-b9dde3b9]:hover{background:none}.refresh__last-check[data-v-b9dde3b9]{margin:4px 0 0;padding:6px 14px 4px;border-top:1px solid var(--border);color:var(--text-muted);font-size:13px}.switcher[data-v-7e147b18]{position:relative;flex:none}.switcher__button[data-v-7e147b18]{display:inline-flex;align-items:center;gap:8px;max-width:260px;height:32px;padding:0 10px 0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);cursor:pointer}.switcher__button[data-v-7e147b18]:hover{background:var(--surface-hover)}.switcher__current[data-v-7e147b18]{min-width:0;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.switcher__caret[data-v-7e147b18]{margin-left:4px;color:var(--text-muted)}.switcher__menu[data-v-7e147b18]{position:absolute;z-index:20;top:calc(100% + 4px);left:0;min-width:280px;max-width:min(440px,calc(100vw - 32px));max-height:min(70vh,560px);overflow-y:auto;padding:4px 0;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.switcher__item[data-v-7e147b18]{display:grid;grid-template-columns:16px minmax(0,1fr) auto;align-items:baseline;gap:2px 8px;padding:6px 14px 6px 10px;cursor:pointer}.switcher__item[data-v-7e147b18]:hover{background:var(--surface-hover)}.switcher__item[data-v-7e147b18]:focus{outline:none;background:var(--surface-selected)}.switcher__item[data-v-7e147b18]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.switcher__check[data-v-7e147b18]{color:var(--accent);font-weight:600}.switcher__name[data-v-7e147b18]{min-width:0;overflow-wrap:anywhere;font-weight:600}.switcher__mark[data-v-7e147b18]{justify-self:end}.switcher__detail[data-v-7e147b18]{grid-column:2 / -1;color:var(--text-muted);font-size:13px}.ref-picker[data-v-c06b15aa]{display:flex;flex-direction:column;min-width:0;max-height:inherit}.ref-picker__filter[data-v-c06b15aa]{height:32px;margin:8px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);font:inherit}.ref-picker__list[data-v-c06b15aa]{min-height:0;overflow-y:auto;padding-bottom:4px}.ref-picker__group-label[data-v-c06b15aa]{padding:8px 14px 4px;color:var(--text-muted);font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.ref-picker__option[data-v-c06b15aa]{display:grid;grid-template-columns:16px minmax(0,1fr) auto;align-items:baseline;gap:8px;padding:6px 14px 6px 10px;cursor:pointer}.ref-picker__option--active[data-v-c06b15aa]{background:var(--surface-selected)}.ref-picker__check[data-v-c06b15aa]{color:var(--accent)}.ref-picker__label[data-v-c06b15aa]{min-width:0;overflow-wrap:anywhere;white-space:normal}.ref-picker__detail[data-v-c06b15aa]{color:var(--text-muted);font-size:13px}.ref-picker__note[data-v-c06b15aa]{margin:0;padding:8px 14px;color:var(--text-muted);font-size:13px;white-space:normal}.source-switcher[data-v-44e50bf4]{position:relative;flex:none}.source-switcher__button[data-v-44e50bf4]{display:inline-flex;align-items:center;gap:8px;max-width:300px;height:32px;padding:0 10px 0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text);cursor:pointer}.source-switcher__button[data-v-44e50bf4]:hover{background:var(--surface-hover)}.source-switcher--commit[data-v-44e50bf4],.source-switcher--commit[data-v-44e50bf4]:hover{border-color:var(--source-commit-border);background:var(--source-commit-bg);color:var(--source-commit-fg)}.source-switcher__label[data-v-44e50bf4]{min-width:0;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.source-switcher__detail[data-v-44e50bf4]{overflow:hidden;color:var(--text-muted);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.source-switcher--commit .source-switcher__detail[data-v-44e50bf4]{color:inherit}.source-switcher__caret[data-v-44e50bf4]{color:var(--text-muted)}.source-switcher__panel[data-v-44e50bf4]{position:absolute;z-index:20;top:calc(100% + 4px);left:0;display:flex;flex-direction:column;width:min(420px,calc(100vw - 32px));max-height:min(70vh,560px);border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.source-switcher__message[data-v-44e50bf4]{margin:0;padding:12px 14px;color:var(--text-muted);white-space:normal}.source-switcher__none[data-v-44e50bf4]{flex:none;color:var(--text-muted);font-size:13px}.shortcuts[data-v-c10e93c1]{width:min(520px,calc(100vw - 32px));padding:0;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text);box-shadow:0 12px 32px #0000002e}.shortcuts[data-v-c10e93c1]::backdrop{background:#0f121673}.shortcuts__body[data-v-c10e93c1]{display:grid;gap:12px;padding:18px 20px 16px}.shortcuts__title[data-v-c10e93c1]{margin:0;font-size:16px;font-weight:600}.shortcuts__table[data-v-c10e93c1]{width:100%;border-collapse:collapse}.shortcuts__table th[data-v-c10e93c1]{padding:4px 12px 6px 0;border-bottom:1px solid var(--border-strong);color:var(--text-muted);font-weight:600;text-align:left}.shortcuts__table td[data-v-c10e93c1]{padding:6px 12px 6px 0;border-bottom:1px solid var(--border);vertical-align:baseline}.shortcuts__keys[data-v-c10e93c1]{white-space:nowrap}.shortcuts__key[data-v-c10e93c1]{display:inline-block;min-width:24px;padding:0 6px;border:1px solid var(--border-strong);border-radius:3px;background:var(--surface-panel);font:13px/22px var(--font-mono);text-align:center}.shortcuts__buttons[data-v-c10e93c1]{display:flex;justify-content:flex-end}.shortcuts__close[data-v-c10e93c1]{height:32px}.topbar[data-v-f7158c01]{display:flex;align-items:center;gap:12px;height:52px;padding:0 14px;border-bottom:1px solid var(--border);background:var(--surface)}.topbar__brand[data-v-f7158c01]{display:flex;flex:0 1 auto;align-items:baseline;gap:8px;max-width:240px;min-width:0}.topbar__name[data-v-f7158c01]{font-size:16px;font-weight:650;letter-spacing:-.01em}.topbar__repo[data-v-f7158c01]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kinds-chip[data-v-f7158c01]{display:inline-flex;flex:none;align-items:center;gap:2px;height:32px;padding:0 2px 0 12px;border:1px solid var(--badge-info-fg);border-radius:16px;background:var(--badge-info-bg);color:var(--badge-info-fg);white-space:nowrap}.kinds-chip__clear[data-v-f7158c01]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:none;color:inherit;font-size:16px;line-height:1;cursor:pointer}.kinds-chip__clear[data-v-f7158c01]:hover{background:var(--surface-hover)}.search[data-v-f7158c01]{position:relative;flex:1 1 360px;max-width:560px;min-width:160px}.search__input[data-v-f7158c01]{width:100%;height:32px;padding:0 56px 0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-panel)}.search__input[data-v-f7158c01]::placeholder{color:var(--text-faint)}.search__input[data-v-f7158c01]:focus{border-color:var(--accent);outline:none;background:var(--surface)}.search__hint[data-v-f7158c01]{position:absolute;top:50%;right:8px;padding:0 5px;border:1px solid var(--border);border-radius:3px;color:var(--text-faint);font:12px/18px var(--font-ui);transform:translateY(-50%);pointer-events:none}.search__dropdown[data-v-f7158c01]{position:absolute;z-index:10;top:calc(100% + 4px);right:0;left:0;max-height:min(60vh,520px);overflow-y:auto;padding:4px 0;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.search__status[data-v-f7158c01]{margin:0;padding:6px 12px}.search__group[data-v-f7158c01]{padding:4px 0}.search__group+.search__group[data-v-f7158c01]{border-top:1px solid var(--border)}.search__name[data-v-f7158c01]{padding:4px 14px;font-weight:600}.search__version[data-v-f7158c01]{display:flex;align-items:baseline;gap:12px;padding:2px 14px 2px 26px}.search__version-label[data-v-f7158c01]{flex-shrink:0;min-width:80px;color:var(--text-muted)}.search__roots[data-v-f7158c01]{display:flex;flex-wrap:wrap;gap:2px 4px}.search__option[data-v-f7158c01]{padding:2px 8px;border-radius:var(--radius);cursor:pointer}.search__option--active[data-v-f7158c01]{background:var(--surface-selected)}.topbar__end[data-v-f7158c01]{display:flex;flex:none;align-items:center;gap:8px;margin-left:auto}.topbar__help[data-v-f7158c01]{width:32px;height:32px;padding:0;border:1px solid var(--border-strong);border-radius:50%;background:var(--surface-raised);font-weight:600;cursor:pointer}.topbar__help[data-v-f7158c01]:hover{background:var(--surface-hover)}.search__variant[data-v-f7158c01]{margin-left:4px;color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.apply[data-v-90966fcb]{width:min(560px,calc(100vw - 32px));padding:0;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text);box-shadow:0 12px 32px #0000002e}.apply[data-v-90966fcb]::backdrop{background:#0f121673}.apply__form[data-v-90966fcb]{display:grid;gap:12px;padding:18px 20px 16px}.apply__form p[data-v-90966fcb]{margin:0}.apply__title[data-v-90966fcb]{margin:0;font-size:16px;font-weight:600;overflow-wrap:anywhere}.apply__unmet[data-v-90966fcb]{display:grid;gap:4px;padding:8px 10px;border-radius:var(--radius);background:var(--badge-danger-bg);color:var(--badge-danger-fg)}.apply__unmet-heading[data-v-90966fcb]{font-weight:600}.apply__unmet-lines[data-v-90966fcb]{margin:0;padding-left:18px;overflow-wrap:anywhere}.apply__writes[data-v-90966fcb]{overflow-wrap:anywhere}.apply__install[data-v-90966fcb]{display:grid;gap:2px}.apply__install-label[data-v-90966fcb]{display:flex;align-items:baseline;gap:8px;cursor:pointer}.apply__install-label input[data-v-90966fcb]{margin:0;accent-color:var(--accent);transform:translateY(2px)}.apply__note[data-v-90966fcb]{padding-left:21px;color:var(--text-faint);font-size:13px}.apply__buttons[data-v-90966fcb]{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.apply__button[data-v-90966fcb]{height:32px}.job[data-v-4ea48f0f]{display:grid;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border)}.job__head[data-v-4ea48f0f]{display:flex;align-items:center;gap:10px}.job__pulse[data-v-4ea48f0f]{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:job-pulse-4ea48f0f 1s ease-in-out infinite alternate}@keyframes job-pulse-4ea48f0f{0%{opacity:1}to{opacity:.25}}.job__phase[data-v-4ea48f0f]{font-weight:600}.job__cancel[data-v-4ea48f0f]{margin-left:auto}.job__log summary[data-v-4ea48f0f]{color:var(--text-muted);font-size:13px;cursor:pointer}.job__lines[data-v-4ea48f0f]{max-height:240px;margin:6px 0 0;padding:8px 10px;overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-panel);white-space:pre-wrap;overflow-wrap:anywhere}.job__empty[data-v-4ea48f0f]{margin:6px 0 0;font-size:13px}.job__outcome[data-v-4ea48f0f]{margin:0;color:var(--badge-ok-fg);font-weight:600;overflow-wrap:anywhere}.job__outcome--failed[data-v-4ea48f0f]{color:var(--danger)}.job__hint[data-v-4ea48f0f]{margin:0;overflow-wrap:anywhere}.job__command[data-v-4ea48f0f]{padding:1px 4px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-panel);color:var(--text)}.job__button[data-v-4ea48f0f]{height:32px}.job__revert[data-v-4ea48f0f]{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.file+.file[data-v-9841fe55]{border-top:1px solid var(--border)}.file__summary[data-v-9841fe55]{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;list-style:none}.file__summary[data-v-9841fe55]::-webkit-details-marker{display:none}.file__summary[data-v-9841fe55]:hover{background:var(--surface-hover)}.file__chevron[data-v-9841fe55]{color:var(--text-muted)}.file[open]>.file__summary .file__chevron[data-v-9841fe55]{transform:rotate(90deg)}.file__path[data-v-9841fe55]{min-width:0;overflow-wrap:anywhere}.file__stats[data-v-9841fe55]{margin-left:auto;color:var(--text-faint);white-space:nowrap}.file__message[data-v-9841fe55]{margin:0;padding:6px 10px;border-top:1px solid var(--border)}.file__message--error[data-v-9841fe55]{color:var(--danger)}.file__diff[data-v-9841fe55]{max-height:420px;margin:0;padding:6px 0;overflow:auto;border-top:1px solid var(--border);background:var(--surface-panel);line-height:1.45}.diff-line[data-v-9841fe55]{display:block;min-width:max-content;padding:0 10px;white-space:pre}.diff-line--added[data-v-9841fe55]{background:var(--badge-ok-bg)}.diff-line--removed[data-v-9841fe55]{background:var(--badge-danger-bg)}.diff-line--meta[data-v-9841fe55]{color:var(--text-faint)}.preview[data-v-d5ea8ad6]{padding:14px 16px 18px;border-top:1px solid var(--border-strong)}.preview__bar[data-v-d5ea8ad6]{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.preview__title[data-v-d5ea8ad6]{margin:0;font-size:15px;font-weight:600}.preview__label[data-v-d5ea8ad6]{margin:16px 0 6px;color:var(--text);font-size:13px;font-weight:600}.preview__list[data-v-d5ea8ad6]{display:grid;gap:4px;margin:0;padding:0;list-style:none}.preview__goal[data-v-d5ea8ad6],.preview__warning[data-v-d5ea8ad6]{overflow-wrap:anywhere}.preview__met[data-v-d5ea8ad6]{color:var(--badge-ok-fg);font-weight:700}.preview__unmet[data-v-d5ea8ad6]{color:var(--danger);font-weight:700}.preview__none[data-v-d5ea8ad6]{margin:0}.preview__issue[data-v-d5ea8ad6]{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;overflow-wrap:anywhere}.preview__warning[data-v-d5ea8ad6]{color:var(--badge-warn-fg)}.preview__files[data-v-d5ea8ad6]{display:grid;grid-template-columns:minmax(0,1fr);overflow:hidden;border:1px solid var(--border);border-radius:var(--radius)}.preview__package-changes[data-v-d5ea8ad6]{margin-top:16px}.preview__summary[data-v-d5ea8ad6]{margin:0 0 6px;cursor:pointer}.preview__summary-heading[data-v-d5ea8ad6]{display:inline;margin:0}.preview__changes[data-v-d5ea8ad6]{gap:2px}.preview__more[data-v-d5ea8ad6]{margin-top:6px;padding:0;border:0;background:none;color:var(--accent);cursor:pointer}.preview__more[data-v-d5ea8ad6]:hover{text-decoration:underline}.root-changes[data-v-03bc530d]{border-bottom:1px solid var(--border-strong)}.root-changes[data-v-03bc530d]:focus-visible{outline-offset:-2px}.root-changes__header[data-v-03bc530d]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface-panel)}.root-changes__title[data-v-03bc530d]{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;min-width:0}.root-changes__root[data-v-03bc530d]{margin:0;font-family:var(--font-mono);font-size:15px;font-weight:600;overflow-wrap:anywhere}.root-changes__steps[data-v-03bc530d]{display:flex;flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;font-size:13px}.root-changes__step+.root-changes__step[data-v-03bc530d]:before{content:"→" / "";margin-right:4px;color:var(--text-muted)}.root-changes__step--done[data-v-03bc530d],.root-changes__step--upcoming[data-v-03bc530d]{color:var(--text-muted)}.root-changes__step--done[data-v-03bc530d]:after{content:" ✓" / "";color:var(--badge-ok-fg)}.root-changes__step--current[data-v-03bc530d]{color:var(--accent);font-weight:600}.root-changes__buttons[data-v-03bc530d]{display:flex;gap:8px;margin-left:auto}.root-changes__button[data-v-03bc530d]{height:32px}.root-changes__button[aria-disabled=true][data-v-03bc530d],.root-changes__row-button[aria-disabled=true][data-v-03bc530d],.root-changes__remove[aria-disabled=true][data-v-03bc530d]{cursor:default;opacity:.55}.root-changes__notice[data-v-03bc530d]{margin:0;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--badge-warn-bg);color:var(--badge-warn-fg)}.root-changes__undo[data-v-03bc530d]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--badge-info-bg);color:var(--badge-info-fg)}.root-changes__message[data-v-03bc530d]{margin:0;padding:12px 16px;overflow-wrap:anywhere}.root-changes__message--error[data-v-03bc530d]{padding:10px 16px;border-bottom:1px solid var(--border);background:var(--badge-danger-bg);color:var(--badge-danger-fg)}.root-changes__row[data-v-03bc530d]{display:grid;grid-template-columns:minmax(72px,max-content) minmax(0,1fr) auto;align-items:start;gap:4px 12px;padding:10px 16px;border-bottom:1px solid var(--border)}.root-changes__row[data-v-03bc530d]:last-child{border-bottom:0}.root-changes__row[data-v-03bc530d]:hover{background:var(--surface-hover)}.root-changes__row[data-v-03bc530d]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.root-changes__badge-cell[data-v-03bc530d]{padding-top:1px}.root-changes__item[data-v-03bc530d]{display:grid;gap:2px;min-width:0}.root-changes__item p[data-v-03bc530d]{margin:0;overflow-wrap:anywhere}.root-changes__goal[data-v-03bc530d]{font-weight:600}.root-changes__warnings[data-v-03bc530d]{margin:2px 0 0;padding:0;list-style:none}.root-changes__warning[data-v-03bc530d]{color:var(--badge-warn-fg);overflow-wrap:anywhere}.root-changes__actions[data-v-03bc530d]{display:flex;align-items:center;gap:4px}.root-changes__row-button[data-v-03bc530d]{height:28px;padding:0 10px}.root-changes__remove[data-v-03bc530d]{width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius);background:none;color:var(--text-muted);font-size:18px;line-height:1;cursor:pointer}.root-changes__remove[data-v-03bc530d]:hover:not([aria-disabled=true]){border-color:var(--border-strong);background:var(--surface-raised);color:var(--danger)}.changes[data-v-3c9c07c1]{min-height:100%}.changes[data-v-3c9c07c1]:focus-visible{outline-offset:-2px}.changes__message[data-v-3c9c07c1]{margin:0;padding:16px;overflow-wrap:anywhere}.explore-options[data-v-f7089a1c]{position:relative}.explore-options__button[data-v-f7089a1c]{display:inline-flex;align-items:center;gap:6px;height:32px}.explore-options__caret[data-v-f7089a1c]{margin-left:4px;color:var(--text-muted)}.explore-options__popover[data-v-f7089a1c]{position:absolute;z-index:20;top:calc(100% + 4px);right:0;display:grid;min-width:248px;padding:6px 14px 10px;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.explore-options__popover[data-v-f7089a1c]:focus:not(:focus-visible){outline:none}.explore-options__choice[data-v-f7089a1c]{display:flex;align-items:center;gap:8px;min-height:32px;cursor:pointer;white-space:nowrap}.explore-options__choice input[data-v-f7089a1c]{margin:0;accent-color:var(--accent)}.explore-options__graph[data-v-f7089a1c]{display:grid;gap:4px;margin-top:6px;padding-top:6px;border-top:1px solid var(--border)}.explore-options__scope[data-v-f7089a1c]{display:grid;margin:0;padding:0;border:0}.explore-options__legend[data-v-f7089a1c]{float:left;width:100%;padding:4px 0 0;color:var(--text-muted);font-size:12px;font-weight:600}.explore-options__count[data-v-f7089a1c]{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:36px}.explore-options__number[data-v-f7089a1c]{width:84px;height:32px;padding:0 8px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text)}.explore-options__number[data-v-f7089a1c]:disabled{opacity:.55}.graph-canvas[data-v-de238534]{display:block;flex:1;width:100%;min-height:0;background:var(--surface);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.graph-edge[data-v-de238534]{fill:none;stroke:var(--text-faint);stroke-width:1.25}.graph-edge--stub[data-v-de238534]{stroke-dasharray:4 3}.graph-node[data-v-de238534]{cursor:pointer;outline:none}.graph-node__box[data-v-de238534]{fill:var(--surface-raised);stroke:var(--border-strong);stroke-width:1}.graph-node__inner[data-v-de238534]{fill:none;stroke:var(--text-muted);stroke-width:1}.graph-node__stack[data-v-de238534]{fill:var(--surface-panel);stroke:var(--border-strong);stroke-width:1}.graph-node__label[data-v-de238534]{fill:var(--text);font-family:var(--font-mono);font-size:13px}.graph-node__duplicate[data-v-de238534]{fill:var(--badge-warn-fg);stroke:var(--surface);stroke-width:1.5}.graph-node__stripe[data-v-de238534]{fill:var(--badge-neutral-fg)}.graph-pill__box[data-v-de238534]{fill:var(--badge-neutral-bg)}.graph-pill__label[data-v-de238534]{fill:var(--badge-neutral-fg);font-family:var(--font-ui);font-size:12px;font-weight:500}.graph-pill--outline .graph-pill__box[data-v-de238534]{fill:var(--surface);stroke:var(--badge-neutral-fg);stroke-width:1}.graph-tone--danger.graph-node__stripe[data-v-de238534],.graph-tone--danger .graph-pill__label[data-v-de238534]{fill:var(--badge-danger-fg)}.graph-tone--warn.graph-node__stripe[data-v-de238534],.graph-tone--warn .graph-pill__label[data-v-de238534]{fill:var(--badge-warn-fg)}.graph-tone--info .graph-pill__label[data-v-de238534]{fill:var(--badge-info-fg)}.graph-tone--danger .graph-pill__box[data-v-de238534]{fill:var(--badge-danger-bg)}.graph-tone--warn .graph-pill__box[data-v-de238534]{fill:var(--badge-warn-bg)}.graph-tone--info .graph-pill__box[data-v-de238534]{fill:var(--badge-info-bg)}.graph-tone--danger.graph-pill--outline .graph-pill__box[data-v-de238534]{fill:var(--surface);stroke:var(--badge-danger-fg)}.graph-tone--warn.graph-pill--outline .graph-pill__box[data-v-de238534]{fill:var(--surface);stroke:var(--badge-warn-fg)}.graph-tone--info.graph-pill--outline .graph-pill__box[data-v-de238534]{fill:var(--surface);stroke:var(--badge-info-fg)}.graph-node--importer .graph-node__box[data-v-de238534]{fill:var(--workspace-bg);stroke:var(--workspace-border)}.graph-node--importer .graph-node__label[data-v-de238534]{fill:var(--workspace-fg);font-weight:600}.graph-node--cluster .graph-node__box[data-v-de238534]{fill:var(--surface-panel)}.graph-node--cluster .graph-node__label[data-v-de238534],.graph-node--stub .graph-node__label[data-v-de238534]{fill:var(--text-muted)}.graph-node--stub .graph-node__box[data-v-de238534]{fill:var(--surface);stroke:var(--text-faint);stroke-dasharray:4 3}.graph-node__anchor-ring[data-v-de238534]{fill:none;stroke:var(--text-muted);stroke-width:1.5;stroke-dasharray:5 3}.graph-node--selected .graph-node__anchor-ring[data-v-de238534]{stroke:var(--accent)}.graph-node--selected .graph-node__box[data-v-de238534]{fill:var(--surface-selected);stroke:var(--accent);stroke-width:1.5}.graph-node--selected .graph-node__inner[data-v-de238534],.graph-node:hover .graph-node__box[data-v-de238534]{stroke:var(--accent)}.graph-node:focus-visible .graph-node__box[data-v-de238534]{stroke:var(--accent);stroke-width:2}.graph-node--dimmed[data-v-de238534]{opacity:.35}.graph[data-v-81fee149]{display:flex;flex-direction:column;height:100%;min-height:0}.graph__controls[data-v-81fee149]{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:8px 14px;border-bottom:1px solid var(--border);background:var(--surface-panel)}.graph__status[data-v-81fee149],.graph__hint[data-v-81fee149]{font-size:12px}.graph__hint[data-v-81fee149]{margin-left:auto}.graph__notice[data-v-81fee149]{margin:0;padding:6px 12px;border-bottom:1px solid var(--border);color:var(--text-muted)}.graph__notice--warn[data-v-81fee149]{background:var(--badge-warn-bg);color:var(--badge-warn-fg)}.graph__notice--error[data-v-81fee149]{color:var(--danger)}.graph__clusters[data-v-81fee149]{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;max-height:88px;padding:6px 12px;overflow-y:auto;border-bottom:1px solid var(--border)}.graph__clusters-title[data-v-81fee149]{color:var(--text);font-size:13px;font-weight:600}.graph__cluster[data-v-81fee149]{height:24px;padding:0 10px;border:1px dashed var(--border-strong);border-radius:12px;background:var(--surface-panel);color:var(--text-muted);font-family:var(--font-mono);font-size:12px;cursor:pointer;white-space:nowrap}.graph__cluster[data-v-81fee149]:hover{color:var(--text)}.graph__cluster[aria-pressed=true][data-v-81fee149]{border-style:solid;border-color:var(--accent);background:var(--surface-selected);color:var(--text)}.trail[data-v-3196be0b]{display:flex;flex-direction:column;height:100%;min-height:0}.trail__notice[data-v-3196be0b]{margin:0;padding:6px 12px;border-bottom:1px solid var(--border);color:var(--text-muted)}.trail__notice--error[data-v-3196be0b]{color:var(--danger)}.trail__columns[data-v-3196be0b]{display:flex;flex:1;min-height:0;overflow-x:auto}.trail__column[data-v-3196be0b]{display:flex;flex:1 0 176px;flex-direction:column;max-width:320px;min-height:0;border-right:1px solid var(--border)}.trail__title[data-v-3196be0b]{padding:8px 12px;border-bottom:1px solid var(--border);background:var(--surface-panel)}.trail__chips[data-v-3196be0b]{display:flex;flex-direction:column;gap:6px;min-height:0;padding:8px;overflow-y:auto}.trail__chip[data-v-3196be0b]{display:flex;flex:none;flex-wrap:wrap;align-items:center;gap:2px 8px;width:100%;min-height:32px;padding:6px 10px;overflow-wrap:anywhere;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);text-align:left;cursor:pointer}.trail__chip[data-v-3196be0b]:hover{background:var(--surface-hover)}.trail__chip--anchor[data-v-3196be0b]{font-weight:600}.trail__chip--on-path[data-v-3196be0b]{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.trail__chip--selected[data-v-3196be0b]{border-color:var(--accent);background:var(--surface-selected)}.trail__chip--selected[data-v-3196be0b]:hover{background:var(--surface-selected)}.trail__path[data-v-3196be0b]{font-size:12px}.tree[data-v-f45e1e03]{display:flex;flex-direction:column;height:100%;min-height:0}.tree__notice[data-v-f45e1e03]{margin:0;padding:6px 12px;border-bottom:1px solid var(--border);color:var(--text-muted)}.tree__notice--error[data-v-f45e1e03]{color:var(--danger)}.tree__scroller[data-v-f45e1e03]{flex:1;min-height:0;overflow:auto}.tree__spacer[data-v-f45e1e03]{position:relative;min-width:100%;width:max-content}.tree__row[data-v-f45e1e03]{position:absolute;right:0;left:0;display:flex;align-items:center;gap:8px;height:28px;padding-right:14px;white-space:nowrap;cursor:pointer}.tree__row[data-v-f45e1e03]:focus-visible{outline-offset:-2px}.tree__row[data-v-f45e1e03]:hover{background:var(--surface-hover)}.tree__label[data-v-f45e1e03]{display:inline-flex;align-items:center;gap:8px}.tree__row--selected[data-v-f45e1e03]{background:var(--surface-selected);box-shadow:inset 3px 0 0 var(--accent)}.tree__toggle[data-v-f45e1e03]{display:inline-grid;flex:none;place-content:center;width:24px;height:24px;padding:0;border:0;border-radius:var(--radius);background:none;color:var(--text-muted);cursor:pointer}.tree__toggle[data-v-f45e1e03]:hover{background:var(--surface-hover);color:var(--text)}.tree__toggle--empty[data-v-f45e1e03]{cursor:default}.tree__row:hover .tree__name[data-v-f45e1e03]{color:var(--accent);text-decoration:underline}.tree__range[data-v-f45e1e03],.tree__shown-above[data-v-f45e1e03]{font-size:12px}.tree__shown-above[data-v-f45e1e03]{font-style:italic}.tree__failed[data-v-f45e1e03]{color:var(--danger);font-size:12px}.explore[data-v-386c48ff]{display:flex;flex-direction:column;height:100%;min-height:0}.explore__toolbar[data-v-386c48ff]{display:flex;flex:none;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:8px 14px;border-bottom:1px solid var(--border)}.explore__modes[data-v-386c48ff]{display:inline-flex;flex:none;overflow:hidden;border:1px solid var(--border-strong);border-radius:var(--radius)}.explore__mode[data-v-386c48ff]{height:30px;padding:0 12px;border:0;background:var(--surface-raised);cursor:pointer;white-space:nowrap}.explore__mode+.explore__mode[data-v-386c48ff]{border-left:1px solid var(--border-strong)}.explore__mode[data-v-386c48ff]:hover:not(.explore__mode--checked){background:var(--surface-hover)}.explore__mode--checked[data-v-386c48ff]{background:var(--surface-selected);font-weight:600}.explore__mode[data-v-386c48ff]:focus-visible{outline-offset:-2px}.explore__title[data-v-386c48ff]{min-width:0;margin:0;overflow-wrap:anywhere;font-size:14px;font-weight:600}.explore__title[data-v-386c48ff]:focus:not(:focus-visible){outline:none}.explore__actions[data-v-386c48ff]{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto}.explore__focus-on[data-v-386c48ff]{height:32px;max-width:100%;overflow:hidden;text-overflow:ellipsis}.explore__root-choices[data-v-386c48ff]{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:12px}.explore__root-choice[data-v-386c48ff]{height:32px}.explore__body[data-v-386c48ff]{display:flex;flex:1;flex-direction:column;min-height:0}.explore__placeholder[data-v-386c48ff]{display:grid;flex:1;place-content:center;gap:4px;padding:24px;text-align:center}.explore__placeholder p[data-v-386c48ff]{margin:0}.explore__placeholder-title[data-v-386c48ff]{font-size:16px;font-weight:600}.compare-root[data-v-9ad1cecf]{padding:12px 16px 20px;border-bottom:1px solid var(--border);white-space:normal}.compare-root__title[data-v-9ad1cecf]{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin:0 0 8px;font-size:15px}.compare-root__heading[data-v-9ad1cecf]{margin:16px 0 6px;font-size:14px}.compare-root__note[data-v-9ad1cecf]{margin:4px 0;overflow-wrap:anywhere}.compare-root__more[data-v-9ad1cecf]{margin-top:8px}.compare-table[data-v-9ad1cecf]{width:100%;border-collapse:collapse;table-layout:fixed}.compare-table th[data-v-9ad1cecf]{padding:6px 8px;border-bottom:1px solid var(--border-strong);background:var(--surface-panel);font-size:13px;font-weight:600;text-align:left;overflow-wrap:anywhere}.compare-table td[data-v-9ad1cecf]{padding:5px 8px;border-bottom:1px solid var(--border);vertical-align:top;overflow-wrap:anywhere}.compare-table__col-name[data-v-9ad1cecf]{width:40%}.compare-table__narrow[data-v-9ad1cecf]{width:104px}.compare-table__link[data-v-9ad1cecf]{padding:0;border:0;background:none;color:var(--accent);font-size:inherit;line-height:inherit;text-align:left;text-decoration:underline;text-underline-offset:2px;cursor:pointer;overflow-wrap:anywhere}.compare[data-v-26157f41]{min-height:0;overflow-y:auto;white-space:normal}.compare__toolbar[data-v-26157f41]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 16px;border-bottom:1px solid var(--border)}.compare__label[data-v-26157f41]{font-weight:600}.compare__base[data-v-26157f41]{position:relative}.compare__base-button[data-v-26157f41]{display:inline-flex;align-items:center;gap:6px;max-width:280px}.compare__base-button .mono[data-v-26157f41]{overflow:hidden;text-overflow:ellipsis}.compare__picker[data-v-26157f41]{position:absolute;z-index:20;top:calc(100% + 4px);left:0;display:flex;flex-direction:column;width:min(420px,calc(100vw - 32px));max-height:min(60vh,520px);border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.compare__arrow[data-v-26157f41]{color:var(--text-muted)}.compare__target[data-v-26157f41]{font-weight:600;overflow-wrap:anywhere}.compare__merge-base[data-v-26157f41]{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.compare__swap[data-v-26157f41]{margin-left:auto}.compare__summary[data-v-26157f41]{margin:0;padding:10px 16px 4px;font-weight:600}.compare__status[data-v-26157f41]{margin:0;padding:8px 16px}.compare__status--error[data-v-26157f41]{color:var(--danger)}.add-fixes[data-v-724562a4]{width:min(520px,calc(100vw - 32px));padding:0;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);color:var(--text);box-shadow:0 12px 32px #0000002e}.add-fixes[data-v-724562a4]::backdrop{background:#0f121673}.add-fixes__form[data-v-724562a4]{display:grid;gap:12px;padding:18px 20px 16px}.add-fixes__form p[data-v-724562a4]{margin:0}.add-fixes__title[data-v-724562a4]{margin:0;font-size:16px;font-weight:600}.add-fixes__roots[data-v-724562a4]{display:grid;gap:6px;margin:0;padding:0;border:0}.add-fixes__legend[data-v-724562a4]{margin-bottom:4px;padding:0;font-weight:600}.add-fixes__root[data-v-724562a4]{display:flex;align-items:center;gap:8px;cursor:pointer}.add-fixes__root input[data-v-724562a4]{margin:0;accent-color:var(--accent)}.add-fixes__roots:disabled .add-fixes__root[data-v-724562a4]{cursor:default}.add-fixes__status[data-v-724562a4]{overflow-wrap:anywhere}.add-fixes__failures[data-v-724562a4]{display:grid;gap:4px;color:var(--danger);overflow-wrap:anywhere}.add-fixes__buttons[data-v-724562a4]{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:4px}.add-fixes__buttons .button[data-v-724562a4]{height:32px}.add-fixes__review[data-v-724562a4]{color:var(--accent)}.row-action[data-v-56e965a3]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 12px;min-width:180px}.row-action__text[data-v-56e965a3]{min-width:0;overflow-wrap:break-word;text-wrap:balance}.row-action__text--muted[data-v-56e965a3]{color:var(--text-muted)}.row-action__button[data-v-56e965a3]{grid-column:2;height:28px}.row-action__button--add[data-v-56e965a3]{border-color:var(--accent);color:var(--accent);font-weight:600}.row-action__button--in-changes[data-v-56e965a3]{border-color:var(--badge-ok-fg);background:var(--badge-ok-bg);color:var(--badge-ok-fg)}.row-action__button--in-changes[data-v-56e965a3]:hover:not(:disabled){background:var(--badge-ok-bg);text-decoration:underline}.row-action__error[data-v-56e965a3]{grid-column:1 / -1;margin:0;color:var(--danger);font-size:13px;overflow-wrap:anywhere}.via-list__item[data-v-e784fbeb]{display:inline-block;max-width:100%;overflow-wrap:anywhere}.via-list__more[data-v-e784fbeb]{white-space:nowrap}.direct-rows[data-v-e0129222]{width:100%;border-collapse:collapse;table-layout:auto}.direct-rows__col-problem[data-v-e0129222]{width:96px}.direct-rows__col-recommended[data-v-e0129222]{width:30%}.direct-rows thead th[data-v-e0129222]{position:sticky;top:0;z-index:1;padding:8px;border-bottom:1px solid var(--border-strong);background:var(--surface-panel);color:var(--text);font-size:13px;font-weight:600;text-align:left;white-space:nowrap}.direct-rows td[data-v-e0129222]{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:middle}.direct-rows__row[data-v-e0129222]{cursor:pointer}.direct-rows__row:hover td[data-v-e0129222]{background:var(--surface-hover)}.direct-rows__row[data-v-e0129222]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.direct-rows__row--direct td[data-v-e0129222]{border-top:1px solid var(--border-strong)}.direct-rows__row--direct .direct-rows__name[data-v-e0129222]{font-weight:600}.direct-rows__row--child td[data-v-e0129222]{border-bottom-color:var(--surface-panel)}.direct-rows__row--child td[data-v-e0129222]:nth-child(2){padding-left:32px}.direct-rows__row--selected td[data-v-e0129222],.direct-rows__row--selected:hover td[data-v-e0129222]{background:var(--surface-selected)}.direct-rows__row--selected td[data-v-e0129222]:first-child{box-shadow:inset 3px 0 0 var(--accent)}.direct-rows__badges[data-v-e0129222]{display:inline-flex;flex-wrap:wrap;gap:4px}.direct-rows__package[data-v-e0129222]{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px}.direct-rows__title[data-v-e0129222]{display:inline-flex;align-items:baseline;min-width:0}.direct-rows__name[data-v-e0129222]{overflow-wrap:anywhere}.direct-rows__latest[data-v-e0129222],.direct-rows__advisory[data-v-e0129222]{white-space:nowrap}.direct-rows__via[data-v-e0129222]{margin-top:2px;padding-left:24px;font-size:13px}.direct-rows__root[data-v-e0129222]{overflow-wrap:break-word}.direct-rows__disclosure[data-v-e0129222]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--text-muted);vertical-align:middle;cursor:pointer}.direct-rows__detail[data-v-e0129222]{font-size:13px;overflow-wrap:anywhere}.direct-rows__hidden td[data-v-e0129222]{padding-left:32px}.root-notes[data-v-eaa09cb3]{margin:0;padding:8px 14px;list-style:none;border-bottom:1px solid var(--border);background:var(--surface)}.root-notes__line[data-v-eaa09cb3]{color:var(--text-muted);overflow-wrap:anywhere}.issue-rows[data-v-0197f514]{width:100%;border-collapse:collapse;table-layout:auto}.issue-rows__col-problem[data-v-0197f514]{width:96px}.issue-rows__col-recommended[data-v-0197f514]{width:30%}.issue-rows thead th[data-v-0197f514]{position:sticky;top:0;z-index:1;padding:8px;border-bottom:1px solid var(--border-strong);background:var(--surface-panel);color:var(--text);font-size:13px;font-weight:600;text-align:left;white-space:nowrap}.issue-rows td[data-v-0197f514]{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:middle}.issue-rows__section th[data-v-0197f514]{padding:6px 12px;border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border);background:var(--surface-panel);text-align:left}.issue-rows__section-title[data-v-0197f514]{margin:0;font-size:14px;font-weight:600}.issue-rows__row[data-v-0197f514]{cursor:pointer}.issue-rows__row:hover td[data-v-0197f514]{background:var(--surface-hover)}.issue-rows__row[data-v-0197f514]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.issue-rows__row--package .issue-rows__name[data-v-0197f514]{font-weight:600}.issue-rows__row--child td[data-v-0197f514]{border-bottom-color:var(--surface-panel)}.issue-rows__location[data-v-0197f514]{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;padding-left:24px}.issue-rows__location-label[data-v-0197f514]{flex:0 1 9rem;overflow-wrap:break-word}.issue-rows__location-via[data-v-0197f514]{flex:1 1 10rem;min-width:0}.issue-rows__via[data-v-0197f514]{margin-top:2px;font-size:13px}.issue-rows__row--selected td[data-v-0197f514],.issue-rows__row--selected:hover td[data-v-0197f514]{background:var(--surface-selected)}.issue-rows__row--selected td[data-v-0197f514]:first-child{box-shadow:inset 3px 0 0 var(--accent)}.issue-rows__package[data-v-0197f514]{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px}.issue-rows__title[data-v-0197f514]{display:inline-flex;align-items:baseline;min-width:0}.issue-rows__name[data-v-0197f514]{overflow-wrap:anywhere}.issue-rows__latest[data-v-0197f514],.issue-rows__advisory[data-v-0197f514]{white-space:nowrap}.issue-rows__disclosure[data-v-0197f514]{display:inline-flex;flex:none;align-self:center;width:24px;color:var(--text-muted)}.issue-rows__detail[data-v-0197f514]{font-size:13px;overflow-wrap:anywhere}.issue-rows__root[data-v-0197f514]{overflow-wrap:break-word}.issue-rows__in-roots[data-v-0197f514]{white-space:nowrap}.issues-toolbar[data-v-b8ceb5c5]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--surface)}.issues-toolbar__types[data-v-b8ceb5c5]{display:inline-flex;flex-wrap:wrap;gap:8px}.issues-toolbar__type[data-v-b8ceb5c5]{height:32px;padding:0 14px;border:1px solid var(--border-strong);border-radius:16px;background:var(--surface-raised);color:var(--text-muted);cursor:pointer;white-space:nowrap}.issues-toolbar__type[data-v-b8ceb5c5]:hover:not(:disabled){background:var(--surface-hover)}.issues-toolbar__type--on[data-v-b8ceb5c5],.issues-toolbar__type--on[data-v-b8ceb5c5]:hover:not(:disabled){border-color:var(--accent);background:var(--surface-selected);color:var(--text);font-weight:600}.issues-toolbar__type[data-v-b8ceb5c5]:disabled{cursor:default;opacity:.55}.issues-toolbar__check[data-v-b8ceb5c5]{color:var(--text-muted);white-space:nowrap}.issues-toolbar__end[data-v-b8ceb5c5]{display:inline-flex;align-items:center;gap:8px;margin-left:auto}.issues-toolbar__add[data-v-b8ceb5c5],.view-menu__button[data-v-b8ceb5c5]{height:32px}.view-menu[data-v-b8ceb5c5]{position:relative}.view-menu__button[data-v-b8ceb5c5]{display:inline-flex;align-items:center;gap:6px}.view-menu__caret[data-v-b8ceb5c5]{margin-left:4px;color:var(--text-muted)}.view-menu__popover[data-v-b8ceb5c5]{position:absolute;z-index:20;top:calc(100% + 4px);right:0;min-width:220px;padding:4px 0;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface-raised);box-shadow:0 8px 24px #00000029}.view-menu__section+.view-menu__section[data-v-b8ceb5c5]{margin-top:4px;padding-top:4px;border-top:1px solid var(--border)}.view-menu__heading[data-v-b8ceb5c5]{padding:4px 14px 2px;color:var(--text-muted);font-size:12px;font-weight:600}.view-menu__item[data-v-b8ceb5c5]{display:flex;align-items:center;gap:8px;padding:6px 14px;cursor:pointer;white-space:nowrap}.view-menu__item[data-v-b8ceb5c5]:hover{background:var(--surface-hover)}.view-menu__item[data-v-b8ceb5c5]:focus{outline:none;background:var(--surface-selected)}.view-menu__item[data-v-b8ceb5c5]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.view-menu__item[aria-disabled=true][data-v-b8ceb5c5]{color:var(--text-muted);cursor:default}.view-menu__item[aria-disabled=true][data-v-b8ceb5c5]:hover{background:none}.view-menu__check[data-v-b8ceb5c5]{display:inline-flex;width:16px;color:var(--accent);text-align:center}.issues[data-v-f859bdce]{display:flex;flex-direction:column;min-height:100%}.issues__message[data-v-f859bdce]{margin:0;padding:24px 14px}.issues__message--error[data-v-f859bdce]{color:var(--danger)}.issues__body[data-v-f859bdce]{flex:1;min-height:0}:root{color-scheme:light dark;--surface: #ffffff;--surface-panel: #f1f3f6;--surface-raised: #ffffff;--surface-hover: rgba(31, 35, 40, .06);--surface-selected: #dbe6f9;--border: #d9dee4;--border-strong: #b9c0c9;--text: #1f2328;--text-muted: #525a63;--text-faint: #5f6770;--accent: #2560c4;--accent-text: #ffffff;--danger: #b8342a;--badge-neutral-bg: #eceff2;--badge-neutral-fg: #424a53;--badge-ok-bg: #e2f2e7;--badge-ok-fg: #1d6537;--badge-info-bg: #e2ebf9;--badge-info-fg: #1c4b93;--badge-warn-bg: #faefd6;--badge-warn-fg: #6f4b00;--badge-danger-bg: #fae3e1;--badge-danger-fg: #962a21;--source-commit-bg: #faefd6;--source-commit-border: #b07d12;--source-commit-fg: #5c3e00;--workspace-bg: #efe7fb;--workspace-fg: #5b3aa6;--workspace-border: #8f6fd1;--font-ui: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius: 4px}@media(prefers-color-scheme:dark){:root{--surface: #141619;--surface-panel: #1d2024;--surface-raised: #252a30;--surface-hover: rgba(255, 255, 255, .07);--surface-selected: #243858;--border: #31363d;--border-strong: #464d56;--text: #e6e9ec;--text-muted: #a8b0ba;--text-faint: #8e97a1;--accent: #78a8f4;--accent-text: #0e1116;--danger: #f08a80;--badge-neutral-bg: #2a2f35;--badge-neutral-fg: #c2c8cf;--badge-ok-bg: #1c3425;--badge-ok-fg: #8fd3a5;--badge-info-bg: #1d2e47;--badge-info-fg: #9fc1f3;--badge-warn-bg: #382d14;--badge-warn-fg: #edc474;--badge-danger-bg: #41201d;--badge-danger-fg: #f3a49c;--source-commit-bg: #382d14;--source-commit-border: #c99a3a;--source-commit-fg: #f2d08a;--workspace-bg: #2c2442;--workspace-fg: #c9b3f4;--workspace-border: #937bd3}}*,*:before,*:after{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--surface);color:var(--text);font:14px/1.5 var(--font-ui);-webkit-font-smoothing:antialiased}button,input{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}summary{list-style:none}summary::-webkit-details-marker{display:none}.summary-chevron{margin:-2px 4px 0 0;color:var(--text-muted)}details[open]>summary>.summary-chevron{transform:rotate(90deg)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.mono{font-family:var(--font-mono);font-size:13px}.muted{color:var(--text-muted)}.panel-heading{margin:0;font-size:14px;font-weight:600;color:var(--text)}.badge{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px;border-radius:10px;background:var(--badge-neutral-bg);color:var(--badge-neutral-fg);font-size:12px;font-weight:500;white-space:nowrap}.badge--ok{background:var(--badge-ok-bg);color:var(--badge-ok-fg)}.badge--info{background:var(--badge-info-bg);color:var(--badge-info-fg)}.badge--warn{background:var(--badge-warn-bg);color:var(--badge-warn-fg)}.badge--danger{background:var(--badge-danger-bg);color:var(--badge-danger-fg)}.badge--outline{border:1px solid currentColor;background:transparent}.button{height:32px;padding:0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);cursor:pointer;white-space:nowrap}.button:hover:not(:disabled){background:var(--surface-hover)}.button:disabled{cursor:default;opacity:.55}.button--primary{border-color:var(--accent);background:var(--accent);color:var(--accent-text)}.button--primary:hover:not(:disabled){background:var(--accent);filter:brightness(1.08)}.shell{--roots-width: 304px;--details-width: 400px;--details-height: minmax(0, 1fr);display:grid;height:100vh;grid-template-columns:var(--roots-width) minmax(0,1fr) var(--details-width);grid-template-rows:auto minmax(0,1fr);grid-template-areas:"top top top" "roots center details"}.shell__top{grid-area:top}.shell__roots{grid-area:roots}.shell__center{display:flex;flex-direction:column;grid-area:center;min-width:0;min-height:0}.shell__details{grid-area:details}@media(max-width:1366px){.shell{--roots-width: 264px;--details-width: 340px}}@media(max-width:820px){.shell{--roots-width: 240px;grid-template-columns:var(--roots-width) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) var(--details-height);grid-template-areas:"top top" "roots center" "roots details"}}.shell.shell--roots-collapsed{--roots-width: 36px}.shell.shell--details-collapsed{--details-width: 36px;--details-height: 48px}.commit-changes{display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:24px;white-space:normal}.commit-changes__text{margin:0}
|