Checkpoint peering identity and opt-in discovery

This commit is contained in:
Codex committed 2026-10-13 22:00:54 +02:00
1 parent eba9b50e30
commit 47de081721
44 files changed
+1557 -55

No files matched your search

+35 -9
View File
@@ -101,7 +101,8 @@ main { max-width: 1200px; margin: 0 auto; padding: 16px; }
.toolbar select { flex: 1; }
.grid { grid-template-columns: repeat(2, 1fr); gap: 16px 12px; }
.nav { padding-left: 12px; padding-right: 12px; }
.nav { gap: 5px; }
.nav { gap: 5px; flex-wrap: wrap; }
.nav .grow { display: none; }
.nav .brand { font-size: 14px; }
.nav .btn { padding-left: 7px; padding-right: 7px; font-size: 12px; }
.nav-greatest { font-size: 0 !important; }
@@ -119,6 +120,11 @@ main { max-width: 1200px; margin: 0 auto; padding: 16px; }
.chip-link { text-decoration: none; border: 1px solid transparent; }
.chip-link:hover { border-color: var(--accent); color: #ffd8de; }
.desc { white-space: pre-line; margin: 10px 0; }
.coverage-indicators { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 9px; margin: 6px 0; }
.coverage-badge { display: inline-block; border: 1px solid; border-radius: 999px; padding: 3px 9px; font-size: 12px; font-weight: 700; line-height: 1.3; }
.coverage-complete { color: #a7f3c7; border-color: #39875d; background: #153323; }
.coverage-partial { color: #ffd09b; border-color: #9a6630; background: #332417; }
.coverage-unknown { color: var(--fg); border-color: var(--line); background: var(--card2); }
.actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.sources a { margin-right: 10px; }
.metadata.card { max-width: none; }
@@ -248,8 +254,16 @@ main { max-width: 1200px; margin: 0 auto; padding: 16px; }
.peer-table-head { color: var(--muted); font-size: 12px; text-transform: uppercase; }
.peer-row-button { width: 100%; color: var(--fg); background: transparent; border: 0; border-bottom: 1px solid var(--line); text-align: left; cursor: pointer; font: inherit; }
.peer-row-button:hover { background: #ffffff08; }
.peer-status-ok { color: #8fe0b2; }
.peer-status-pending { color: #efc36e; }
.peer-status-ok { color: #a7f3c7; font-weight: 700; }
.peer-status-pending { color: #ffe08a; font-weight: 650; }
.peer-state { display: grid; gap: 3px; margin: 10px 0 14px; padding: 11px 13px; border: 1px solid var(--line); border-left-width: 4px; border-radius: 8px; background: var(--card2); }
.peer-state strong { font-size: 14px; font-weight: 750; }
.peer-state span { font-size: 13px; line-height: 1.4; }
.peer-state-ok { color: #a7f3c7; border-color: #39875d; background: #153323; }
.peer-state-pending { color: #ffe08a; border-color: #987631; background: #332b16; }
.peer-state-warn { color: #ffd09b; border-color: #9a6630; background: #332417; }
.peer-state-error { color: #ffb4b4; border-color: #9a3e48; background: #351b20; }
.peer-state-neutral { color: var(--fg); border-color: var(--line); background: var(--card2); }
.peer-row-action { white-space: nowrap; color: var(--accent); }
.peer-wizard-grid, .peer-limits-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.peer-step { min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); }
@@ -279,6 +293,18 @@ main { max-width: 1200px; margin: 0 auto; padding: 16px; }
.peer-catalog-toolbar > .seg .btn { flex: 1; }
.peer-dialog-cover { max-width: 180px; }
}
.discovery-settings, .discovery-admin { max-width: none; }
.discovery-hint { display: block; font-weight: 400; margin-top: 3px; }
.discovery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 330px), 1fr)); gap: 14px; }
.discovery-card { display: grid; grid-template-columns: 90px minmax(0, 1fr); gap: 12px; margin: 0; max-width: none; min-width: 0; }
.discovery-card > img, .discovery-no-cover { width: 90px; height: 130px; object-fit: cover; border-radius: 5px; background: var(--card2); }
.discovery-no-cover { display: grid; place-items: center; text-align: center; color: var(--muted); font-size: 12px; }
.discovery-card-body { min-width: 0; overflow-wrap: anywhere; }
.discovery-card-body h2 { font-size: 17px; margin-bottom: 4px; }
.discovery-card-body p { margin: 6px 0 10px; }
.discovery-card-body details { margin: 10px 0; }
.discovery-card-body ul { padding-left: 18px; }
.discovery-actions { margin: 10px 0; }
.catalog-workspace { min-width: 0; margin: 0; padding: 0; border: 0; }
.catalog-workspace > .row { margin-bottom: 16px; }
.catalog-workspace input, .catalog-workspace select, .catalog-workspace textarea { min-width: 0; max-width: 100%; }
@@ -365,6 +391,10 @@ body.reader { position: fixed; top: 0; left: 0; right: 0; bottom: 0; overflow: h
#canvas { position: relative; }
.pg { position: absolute; overflow: hidden; background: #19191c; }
.pg img { display: block; width: 100%; height: 100%; -webkit-user-drag: none; }
#canvas[data-page-tone="inverted"] .pg img { filter: invert(1); }
#canvas[data-page-tone="sepia"] .pg img { filter: sepia(.8) brightness(.9); }
#canvas[data-page-tone="dim"] .pg img { filter: brightness(.7); }
#canvas[data-page-tone="extra-dim"] .pg img { filter: brightness(.45); }
.pg.rot img { position: absolute; left: 50%; top: 50%; max-width: none; }
/* still loading: a spinner that only appears after 150 ms, so fast loads never flash it */
.pg.loading::after {
@@ -406,6 +436,8 @@ body.nobars #bot { transform: translateY(100%); opacity: 0; pointer-events: none
.seg button.meh:not(.on) { color: var(--muted); }
.zoom-controls button { min-width: 34px; padding-left: 9px; padding-right: 9px; }
.zoom-controls #zoom { min-width: 58px; font-variant-numeric: tabular-nums; }
.page-tone { white-space: nowrap; }
.page-tone:not([data-page-tone="original"]) { border-color: var(--accent); }
.clock-chip { font-variant-numeric: tabular-nums; white-space: nowrap; }
.clock-chip.clock-running { border-color: #3d8b62; background: #183426; }
.clock-chip.clock-warning { border-color: #c58a27; background: #3b2c14; }
@@ -430,9 +462,3 @@ body.nobars #bot { transform: translateY(100%); opacity: 0; pointer-events: none
.seg button { padding: 7px 10px; } #bot .btn { padding: 6px 10px; } .wide-only { display: none; }
.clock-panel { bottom: calc(124px + env(safe-area-inset-bottom)); }
}
#canvas[data-page-tone="inverted"] .pg img { filter: invert(1); }
#canvas[data-page-tone="sepia"] .pg img { filter: sepia(.8) brightness(.9); }
#canvas[data-page-tone="dim"] .pg img { filter: brightness(.7); }
#canvas[data-page-tone="extra-dim"] .pg img { filter: brightness(.45); }
.page-tone { white-space: nowrap; }
.page-tone:not([data-page-tone="original"]) { border-color: var(--accent); }