/* FIPS management page — sovereign://fips * Imports the shared sovereign:// base theme, then adds FIPS-specific * layout for status cards, the peers table, and the add-peer form. */ @import url("sovereign://sovereign-base.css"); .card { border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 16px; margin: 10px 0 20px; } .card .actions { margin-top: 12px; } .mono { font-family: var(--font); word-break: break-all; } .err-text { color: var(--accent); } /* State indicator dot. */ .state-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-left: 6px; vertical-align: middle; background: var(--muted); } .state-dot.ready { background: var(--primary); } .state-dot.failed { background: var(--accent); } .state-dot.starting, .state-dot.stopping, .state-dot.bootstrapping, .state-dot.discovering, .state-dot.attaching { background: var(--accent); animation: pulse 1s infinite; } /* Peers table. */ #peers-table { width: 100%; border-collapse: collapse; margin: 10px 0; } #peers-table th, #peers-table td { text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--border); font-size: 13px; } #peers-table th { color: var(--muted); font-weight: bold; border-bottom: 2px solid var(--primary); } #peers-table td.mono { word-break: break-all; } .peer-state-connected { color: var(--primary); } .peer-state-connecting, .peer-state-disconnected { color: var(--muted); } .peer-state-failed { color: var(--accent); } #refresh-btn { margin-left: 12px; } /* Tab navigation. */ .tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 16px; } .tab-btn { background: var(--bg); color: var(--muted); border: 1px solid transparent; border-bottom: none; border-radius: var(--radius) var(--radius) 0 0; padding: 6px 16px; cursor: pointer; font-family: var(--font); font-size: 13px; font-weight: bold; margin-left: 0; min-width: auto; transition: color 0.2s, border-color 0.2s; } .tab-btn:hover { color: var(--primary); } .tab-btn.active { color: var(--primary); border-color: var(--border); border-bottom: 1px solid var(--bg); margin-bottom: -1px; } .tab-panel { display: none; } .tab-panel.active { display: block; } /* Known-nodes / tree-peers tables. */ #nodes-table, #tree-peers-table { width: 100%; border-collapse: collapse; margin: 10px 0; } #nodes-table th, #nodes-table td, #tree-peers-table th, #tree-peers-table td { text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--border); font-size: 13px; } #nodes-table th, #tree-peers-table th { color: var(--muted); font-weight: bold; border-bottom: 2px solid var(--primary); } #nodes-table td.mono, #tree-peers-table td.mono { word-break: break-all; } /* Direct-peer badge in the known-nodes table. */ .peer-badge { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--primary); } .peer-badge.indirect { background: var(--muted); } /* Staleness coloring for last-seen. */ .last-seen-fresh { color: var(--primary); } .last-seen-stale { color: var(--muted); } .last-seen-old { color: var(--muted); font-style: italic; } /* Tree role tags. */ .tree-role { font-size: 11px; padding: 1px 6px; border-radius: 3px; border: 1px solid var(--border); } .tree-role.root { color: var(--accent); border-color: var(--accent); } .tree-role.parent { color: var(--primary); } .tree-role.child { color: var(--muted); } /* Directory tab — compact one-line rows, wider table, smaller font. */ body.wide { max-width: 1400px; } #tab-directory { max-width: 100%; } #dir-table { width: 100%; border-collapse: collapse; margin: 10px 0; table-layout: fixed; } #dir-table th, #dir-table td { text-align: left; padding: 3px 8px; border-bottom: 1px solid var(--border); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } #dir-table th { color: var(--muted); font-weight: bold; border-bottom: 2px solid var(--primary); } /* Column widths: badge | npub | endpoint | connect */ #dir-table th:nth-child(1), #dir-table td:nth-child(1) { width: 20px; } #dir-table th:nth-child(3), #dir-table td:nth-child(3) { width: 35%; } #dir-table th:nth-child(4), #dir-table td:nth-child(4) { width: 80px; } #dir-table td.mono { font-family: var(--font); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Pinned "this is you" row — highlighted border. */ #dir-table tr.dir-ours-row { border: 2px solid var(--accent); background: rgba(255, 0, 0, 0.05); } #dir-table tr.dir-ours-row td { border-bottom: 2px solid var(--accent); font-weight: bold; } .dir-ours-tag { color: var(--accent); font-size: 10px; font-weight: bold; border: 1px solid var(--accent); padding: 1px 4px; border-radius: 3px; } /* Connect as clickable text, not a button. */ .dir-connect-link { color: var(--accent); font-size: 11px; cursor: pointer; text-decoration: underline; } .dir-connect-link:hover { text-decoration: none; }