.catalog-format-filter { border-bottom: 1px solid var(--border-base); } .catalog-format-filter > summary { cursor: pointer; padding: 12px 16px; color: var(--ink-mute); font-size: 12px; } .catalog-format-filter > summary:focus-visible { outline: 2px solid var(--c-run); outline-offset: -2px; } .catalog-browser { max-width: 1800px; } .catalog-layout { display: grid; grid-template-columns: 285px minmax(0, 1fr); gap: 18px; align-items: start; } .catalog-sources, .catalog-content { min-width: 0; border: 1px solid var(--border-base); border-radius: 14px; background: var(--bg-panel); } .catalog-sources { max-height: calc(100vh - 220px); overflow: auto; padding: 12px; } .catalog-sources h2 { margin: 4px 8px 12px; color: var(--ink-base); font-size: 13px; } .catalog-source { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 10px; margin: 4px 0; border: 1px solid transparent; border-radius: 9px; padding: 11px; background: transparent; box-shadow: none; color: var(--ink-base); text-align: left; } .catalog-source:hover { background: var(--bg-soft); } .catalog-source.active { border-color: var(--c-run-border); background: var(--c-run-bg); color: var(--c-run); } .catalog-source > span { display: grid; min-width: 0; gap: 5px; } .catalog-source b { overflow-wrap: anywhere; font-size: 12px; } .catalog-source small { color: var(--ink-mute); font-size: 10px; } .catalog-source strong { flex: 0 0 auto; font-size: 12px; } .catalog-directory-tree { margin-top: 14px; border-top: 1px solid var(--border-base); padding-top: 12px; } .catalog-directory-tree h3 { margin: 0 8px 8px; color: var(--ink-base); font-size: 11px; } .catalog-directory-tree ul { display: grid; gap: 2px; margin: 0; padding: 0; list-style: none; } .catalog-directory-tree ul[role='group'] { margin-left: 16px; border-left: 1px solid var(--border-base); padding-left: 5px; } .catalog-tree-row { display: grid; grid-template-columns: 24px minmax(0, 1fr); align-items: center; gap: 2px; } .catalog-tree-toggle, .catalog-tree-name { border: 0; background: transparent; box-shadow: none; color: var(--ink-mute); } .catalog-tree-toggle { display: grid; width: 24px; height: 24px; place-items: center; padding: 0; border-radius: 5px; font-weight: 800; } .catalog-tree-toggle:hover { background: #e9f4fb; } .catalog-tree-name { overflow: hidden; padding: 5px 4px; text-align: left; text-overflow: ellipsis; white-space: nowrap; } .catalog-tree-name:hover { color: var(--c-run); text-decoration: underline; } .catalog-breadcrumbs { display: flex; min-height: 48px; align-items: center; gap: 5px; overflow-x: auto; border-bottom: 1px solid var(--border-base); padding: 8px 16px; white-space: nowrap; } .catalog-breadcrumbs span { display: flex; align-items: center; gap: 5px; } .catalog-breadcrumbs i { color: var(--ink-faint); font-style: normal; } .catalog-breadcrumbs button { max-width: 320px; overflow: hidden; border: 0; padding: 6px 8px; background: transparent; box-shadow: none; color: var(--c-run); text-overflow: ellipsis; white-space: nowrap; } .catalog-breadcrumbs span:last-child button { border-radius: 6px; background: #eaf4fc; color: var(--c-run); font-weight: 700; } .catalog-summary { display: flex; align-items: center; gap: 20px; border-bottom: 1px solid var(--border-base); padding: 14px 18px; color: var(--ink-mute); font-size: 12px; } .catalog-summary > div { display: grid; min-width: 220px; margin-right: auto; gap: 4px; } .catalog-summary strong { color: var(--ink-strong); font-size: 16px; } .catalog-summary small { color: var(--ink-mute); font-size: 10px; } .catalog-table-wrap { max-height: calc(100vh - 390px); overflow: auto; } .root-file-notice { display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--border-base); padding: 9px 18px; background: var(--c-warn-bg); color: var(--c-warn); font-size: 11px; } .root-file-notice button { flex: 0 0 auto; border: 1px solid var(--c-warn-border); padding: 6px 9px; background: var(--bg-panel); box-shadow: none; color: var(--c-warn); } .catalog-table .scope-badge { white-space: nowrap; } .catalog-back-row { border-bottom: 1px solid var(--border-base); padding: 8px 16px; } .catalog-back-row button { border: 0; padding: 6px 8px; background: transparent; box-shadow: none; color: var(--c-run); } .snapshot-timestamp { padding: 10px 16px; color: var(--ink-mute); font-size: 10px; text-align: right; } .catalog-routing { display: grid; gap: 9px; border-bottom: 1px solid var(--border-base); padding: 11px 16px; background: var(--bg-soft); } .routing-fields, .routing-actions { display: flex; flex-wrap: wrap; align-items: end; gap: 9px; } .routing-fields label { display: grid; gap: 4px; color: var(--ink-mute); font-size: 9px; } .routing-fields input { border: 1px solid var(--border-strong); border-radius: 6px; padding: 7px; } .routing-check { display: flex !important; align-items: center; gap: 5px; padding-bottom: 7px; } .routing-actions span { margin-right: auto; color: var(--ink-mute); font-size: 10px; } .routing-actions button { padding: 7px 9px; } .catalog-routing p { margin: 0; border-radius: 6px; padding: 7px; background: var(--c-done-bg); color: var(--c-done); font-size: 10px; } .catalog-file-routing { display: grid; gap: 6px; } .catalog-file-routing .catalog-file { align-items: center; } .catalog-file-routing select { width: max-content; max-width: 100%; border: 1px solid var(--border-strong); border-radius: 6px; padding: 5px; background: var(--bg-panel); color: var(--ink-base); font-size: 9px; } .catalog-file-routing small { color: var(--c-warn); font-size: 9px; } .catalog-refresh-progress { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(180px, 2fr) auto; align-items: center; gap: 12px; margin-bottom: 14px; border: 1px solid var(--c-run-border); border-radius: 10px; padding: 10px 14px; background: var(--c-run-bg); } .catalog-refresh-progress > div { display: grid; gap: 3px; } .catalog-refresh-progress strong { color: var(--c-run); font-size: 11px; } .catalog-refresh-progress span, .catalog-refresh-progress small { color: var(--ink-mute); font-size: 9px; } .catalog-refresh-progress progress { width: 100%; height: 12px; } .catalog-refresh-progress.completed { border-color: var(--c-done-border); background: var(--c-done-bg); } .catalog-refresh-progress.failed { border-color: var(--c-fail-border); background: var(--c-fail-bg); } @media (max-width: 700px) { .catalog-refresh-progress { grid-template-columns: 1fr; } .routing-fields { align-items: stretch; flex-direction: column; } } .routing-actions button:disabled, .catalog-file-routing select:disabled { cursor: not-allowed; border-color: var(--border-base); background: var(--bg-soft); color: var(--ink-faint); box-shadow: none; } .snapshot-timestamp { color: var(--ink-base); font-size: 11px; font-weight: 600; } .catalog-table tbody tr { scroll-margin-top: 42px; } .catalog-table { width: 100%; table-layout: fixed; } .catalog-table thead th { position: sticky; z-index: 2; top: 0; background: var(--bg-soft); } .catalog-table th, .catalog-table td { padding: 12px 10px; white-space: normal; overflow-wrap: anywhere; font-size: 11px; } .catalog-table th:nth-child(1) { width: 32%; } .catalog-table th:nth-child(2) { width: 8%; } .catalog-table th:nth-child(3) { width: 15%; } .catalog-table th:nth-child(4) { width: 9%; } .catalog-table th:nth-child(5) { width: 16%; } .catalog-table th:nth-child(6) { width: 20%; } .catalog-name { display: flex; align-items: flex-start; gap: 7px; border: 0; padding: 0; background: transparent; box-shadow: none; color: var(--c-run); text-align: left; line-height: 1.5; } .catalog-name:hover { text-decoration: underline; } .catalog-file { display: flex; align-items: flex-start; gap: 7px; color: var(--ink-base); line-height: 1.5; } .catalog-table td > span:not(.scope-badge) { display: block; } .catalog-table td small { display: block; margin-top: 4px; color: var(--ink-mute); } .problem-text { color: var(--c-warn) !important; } .scope-badge.mixed { background: var(--c-run-bg); color: var(--c-run); } .scope-badge.unknown { background: var(--bg-soft); color: var(--ink-mute); } @media (max-width: 1100px) { .catalog-layout { grid-template-columns: 220px minmax(0, 1fr); } .catalog-summary { flex-wrap: wrap; } .catalog-summary > div { width: 100%; margin: 0; } .catalog-table { min-width: 800px; } } @media (max-width: 800px) { .catalog-layout { grid-template-columns: 1fr; } .catalog-sources { max-height: 240px; } .catalog-table-wrap { max-height: 520px; } } .routing-actions label { display: flex; align-items: center; gap: 7px; color: var(--ink-mute); font-size: 10px; font-weight: 700; } .routing-actions select, .catalog-folder-routing select { border: 1px solid var(--border-strong); border-radius: 7px; padding: 7px 9px; background: var(--bg-panel); color: var(--ink-base); font: inherit; } .blocked-policy-note { color: var(--c-warn); font-size: 10px; line-height: 1.5; } .catalog-folder-routing { display: grid; gap: 7px; } .catalog-folder-routing select { width: max-content; max-width: 100%; font-size: 9px; } .catalog-folder-routing small { color: var(--ink-mute) !important; font-size: 9px; } .scope-badge.both { background: var(--c-run-bg); color: var(--c-run); } .scope-badge.blocked { background: var(--c-fail-bg); color: var(--c-fail); } .catalog-pathbar { display: flex; align-items: center; gap: 10px; min-height: 48px; border-bottom: 1px solid var(--border-base); padding: 8px 16px; background: var(--bg-panel); } .catalog-back-button { display: grid; flex: 0 0 auto; width: 30px; height: 30px; place-items: center; border: 1px solid var(--border-strong); border-radius: 7px; padding: 0; background: var(--bg-panel); color: var(--c-run); box-shadow: none; font-size: 18px; } .catalog-back-button:hover:not(:disabled) { background: var(--c-run-bg); } .catalog-pathbar nav { display: flex; min-width: 0; align-items: center; gap: 4px; overflow-x: auto; white-space: nowrap; } .catalog-pathbar nav span { display: flex; min-width: 0; align-items: center; gap: 4px; } .catalog-pathbar nav i { color: var(--ink-faint); font-style: normal; } .catalog-pathbar nav button { overflow: hidden; border: 0; border-radius: 6px; padding: 6px 7px; background: transparent; color: var(--c-run); box-shadow: none; text-overflow: ellipsis; white-space: nowrap; } .catalog-pathbar nav button:hover:not(:disabled) { background: var(--c-run-bg); } .catalog-pathbar nav button.current { color: var(--ink-base); font-weight: 700; } .catalog-pathbar nav button:disabled { cursor: default; background: transparent; color: var(--ink-base); } .catalog-policy-cell { display: grid; gap: 6px; justify-items: start; } .catalog-policy-cell select { max-width: 100%; border: 1px solid var(--border-strong); border-radius: 7px; padding: 6px 8px; background: var(--bg-panel); color: var(--ink-base); font-size: 10px; } .catalog-policy-cell small { min-height: 14px; color: var(--ink-mute); font-size: 9px; } .catalog-table th:nth-child(1) { width: 32%; } .catalog-table th:nth-child(2) { width: 8%; } .catalog-table th:nth-child(3) { width: 15%; } .catalog-table th:nth-child(4) { width: 9%; } .catalog-table th:nth-child(5) { width: 16%; } .catalog-table th:nth-child(6) { width: 20%; } .routing-actions .blocked-policy-button { border-color: var(--c-fail-border); background: var(--c-fail-bg); color: var(--c-fail); } .routing-actions .blocked-policy-button:hover:not(:disabled) { background: var(--c-fail-bg); } .catalog-node-control { display: flex; align-items: flex-start; gap: 7px; } .catalog-node-control input { margin-top: 4px; flex: 0 0 auto; } .routing-actions .internal-policy-button { border-color: var(--c-done); background: var(--c-done); color: var(--bg-panel); } .routing-actions .internal-policy-button:hover:not(:disabled) { background: var(--c-done); } .routing-actions .external-policy-button { border-color: var(--c-warn); background: var(--c-warn); color: var(--bg-panel); } .routing-actions .external-policy-button:hover:not(:disabled) { background: var(--c-warn); } .routing-actions .blocked-policy-button { border-color: var(--c-fail); background: var(--c-fail); color: var(--bg-panel); } .routing-actions .blocked-policy-button:hover:not(:disabled) { background: var(--c-fail); } .catalog-policy-cell .scope-badge.internal { background: var(--c-done-bg); color: var(--c-done); } .catalog-policy-cell .scope-badge.external { background: var(--c-warn-bg); color: var(--c-warn); } .catalog-policy-cell .scope-badge.blocked { background: var(--c-fail-bg); color: var(--c-fail); } .catalog-policy-actions { display: flex; align-items: flex-start; gap: 8px; margin-left: auto; } .blocked-policy-stack { display: grid; gap: 4px; } .blocked-policy-stack .selected-count { margin: 0; color: var(--ink-mute); font-size: 10px; line-height: 1.2; text-align: center; white-space: nowrap; } .snapshot-history { margin: 12px 0; border: 1px solid #d8e3f0; border-radius: 10px; padding: 14px 16px; background: var(--bg-soft); } .snapshot-history header { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .snapshot-history header h2 { margin: 0; font-size: 16px; } .snapshot-history header p { margin: 0; flex: 1; color: var(--ink-mute); font-size: 13px; } .snapshot-history-list { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; } .snapshot-history-list li { display: flex; align-items: center; gap: 12px; padding: 8px 10px; border: 1px solid var(--border-base); border-radius: 8px; background: var(--bg-panel); } .snapshot-history-list li > div { flex: 1; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .snapshot-history-list small { width: 100%; color: var(--ink-mute); } .snapshot-history-table { margin-top: 12px; } .catalog-history-button { margin-left: auto; } .catalog-refresh-detail { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 6px; color: var(--ink-base); font-size: 11px; } .catalog-refresh-pill { display: flex; align-items: center; gap: 8px; width: max-content; margin: 8px 0; padding: 7px 12px; border: 1px solid var(--c-run-border); border-radius: 999px; background: #eef6fc; color: var(--ink-base); font: inherit; font-size: 11px; font-weight: 700; box-shadow: none; } .catalog-refresh-pill:hover { background: var(--c-run-bg); } .pill-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c-run); display: inline-block; } .pill-dot.retry { background: var(--c-warn); } .catalog-refresh-hide { margin-left: auto; border: 0; background: transparent; color: #4c7d9e; font: inherit; font-size: 11px; text-decoration: underline; padding: 0 2px; } .catalog-refresh-failed-note { margin: 6px 0 0; color: var(--c-fail); font-size: 11px; } /* 首次扫描中的来源:还没快照,但立刻出现在列表里并显示进度。 */ .catalog-source.scanning strong { color: #b45309; } .catalog-scanning-state { display: flex; flex-direction: column; gap: 10px; padding: 18px; border: 1px solid var(--border, #e3e8ec); border-radius: 10px; background: var(--card, #fff); } .catalog-scanning-state > div { display: flex; align-items: baseline; gap: 10px; } .catalog-scanning-state strong { font-size: 15px; } .catalog-scanning-state span { color: var(--muted-foreground, #5b6773); font-size: 13px; } .catalog-scanning-state progress { width: 100%; height: 10px; } .catalog-scanning-state p { margin: 0; font-size: 13px; } .catalog-scanning-state small { color: var(--muted-foreground, #5b6773); font-size: 12px; }