.mcp-panel { position: fixed; top: 8vh; left: 50%; transform: translateX(-50%); width: min(680px, 92vw); max-height: 84vh; background: #161616; color: #ccc; border: 1px solid #2a2a2a; border-radius: 8px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6); z-index: 100; display: flex; flex-direction: column; overflow: hidden; font-family: "Cascadia Mono", "JetBrains Mono", "Consolas", monospace; } .mcp-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid #2a2a2a; } .mcp-title { font-weight: 600; font-size: 13px; } .mcp-close { background: transparent; border: none; color: #888; font-size: 18px; line-height: 1; padding: 2px 8px; cursor: pointer; border-radius: 3px; } .mcp-close:hover { background: #2a2a2a; color: #ddd; } /* ---- Tab bar ------------------------------------------------------------ */ .mcp-tabs { display: flex; gap: 0; border-bottom: 1px solid #2a2a2a; padding: 0 10px; } .mcp-tab { position: relative; font: inherit; font-family: inherit; font-size: 11px; font-weight: 500; letter-spacing: 0.04em; background: transparent; color: #777; border: none; border-bottom: 2px solid transparent; padding: 7px 12px 5px; cursor: pointer; transition: color 0.1s, border-color 0.1s; } .mcp-tab:hover { color: #bbb; } .mcp-tab--active { color: #cce6ff; border-bottom-color: #4488cc; } /* Unread dot badge on the Audit tab */ .mcp-tab-badge { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: #d8a040; vertical-align: middle; margin-left: 5px; margin-bottom: 1px; } /* ---- Body --------------------------------------------------------------- */ .mcp-body { padding: 14px 18px; overflow-y: auto; font-size: 12px; line-height: 1.45; scrollbar-width: thin; scrollbar-color: #2a2a2a transparent; } .mcp-body::-webkit-scrollbar { width: 8px; height: 8px; } .mcp-body::-webkit-scrollbar-track { background: transparent; } .mcp-body::-webkit-scrollbar-thumb { background: #2a2a2a; border-radius: 4px; border: 1px solid #1a1a1a; } .mcp-body::-webkit-scrollbar-thumb:hover { background: #3a3a3a; } .mcp-body::-webkit-scrollbar-corner { background: transparent; } .mcp-blurb { color: #aaa; margin: 0 0 12px; } .mcp-toggle-row { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; } .mcp-toggle { font: inherit; font-family: inherit; font-size: 12px; font-weight: 600; padding: 6px 14px; border-radius: 4px; cursor: pointer; background: #222; color: #999; border: 1px solid #2a2a2a; display: inline-flex; align-items: center; gap: 8px; } .mcp-toggle:hover:not(:disabled) { background: #2a2a2a; color: #ddd; } .mcp-toggle:disabled { opacity: 0.5; cursor: progress; } .mcp-toggle.on { background: #1a3a1a; color: #80e080; border-color: #2a6a2a; } .mcp-dot { width: 8px; height: 8px; border-radius: 50%; background: #555; } .mcp-toggle.on .mcp-dot { background: #80e080; box-shadow: 0 0 6px rgba(128, 224, 128, 0.6); } .mcp-allow-count { color: #888; font-size: 11px; } .mcp-allow-warn { color: #d8a040; } .mcp-field { margin-bottom: 12px; } .mcp-field label { display: block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: #777; margin-bottom: 3px; } .mcp-field-row { display: flex; gap: 6px; } .mcp-field input { flex: 1 1 auto; font: inherit; font-family: inherit; font-size: 12px; color: #e6e6e6; background: #0c0c0c; border: 1px solid #2a2a2a; border-radius: 3px; padding: 4px 8px; outline: none; } .mcp-field button { font: inherit; font-family: inherit; font-size: 11px; background: #222; color: #aac; border: 1px solid #2a2a3a; border-radius: 3px; padding: 0 10px; cursor: pointer; } .mcp-field button:hover { background: #2a2a3a; color: #ccd; } /* Inline small-print under inputs — small, muted, tight line-height. Used by * the token hint and the .mcpb install hint. */ .mcp-hint { margin: 4px 0 0; color: #888; font-size: 11px; line-height: 1.4; } .mcp-hint code { background: #0c0c0c; padding: 1px 4px; border-radius: 2px; font-family: inherit; color: #aac; } /* ---- Claude Desktop .mcpb install row ----------------------------------- */ .mcp-mcpb-row { display: flex; align-items: flex-start; gap: 12px; } .mcp-mcpb-btn { font: inherit; font-family: inherit; font-size: 11px; font-weight: 600; background: #1a2a3a; color: #cce6ff; border: 1px solid #2a4a6a; border-radius: 3px; padding: 6px 14px; cursor: pointer; flex-shrink: 0; white-space: nowrap; } .mcp-mcpb-btn:hover { background: #2a4a6a; color: #e0f0ff; border-color: #4488cc; } .mcp-mcpb-hint { flex: 1 1 auto; margin: 0; } .mcp-snippet { font: inherit; font-family: inherit; font-size: 11px; background: #0c0c0c; border: 1px solid #2a2a2a; border-radius: 3px; padding: 8px 10px; margin: 0 0 6px; color: #cce6ff; white-space: pre-wrap; word-break: break-all; } .mcp-tips { background: #1a2030; border: 1px solid #2a3040; border-radius: 4px; padding: 10px 12px; color: #aac; font-size: 11px; margin: 12px 0; } .mcp-tips strong { color: #cce6ff; } .mcp-tips code { background: #0c0c0c; padding: 1px 4px; border-radius: 2px; font-family: inherit; } .mcp-tips pre { font: inherit; font-family: inherit; background: #0c0c0c; padding: 6px 8px; border-radius: 3px; margin: 4px 0; color: #cce6ff; } .mcp-off-hint { color: #888; font-size: 11px; font-style: italic; margin: 8px 0 12px; } .mcp-security { margin: 12px 0 0; padding-top: 10px; border-top: 1px solid #2a2a2a; color: #888; font-size: 11px; line-height: 1.45; } .mcp-security strong { color: #d8a040; } .mcp-security em { color: #d88; font-style: normal; } /* ========================================================================= Audit tab ========================================================================= */ .audit-tab { display: flex; flex-direction: column; gap: 8px; } .audit-toolbar { display: flex; align-items: center; justify-content: flex-end; gap: 8px; min-height: 24px; } .audit-unread { font-size: 10px; color: #d8a040; margin-right: auto; } .audit-clear { font: inherit; font-family: inherit; font-size: 11px; background: #222; color: #aac; border: 1px solid #2a2a3a; border-radius: 3px; padding: 2px 10px; cursor: pointer; } .audit-clear:hover:not(:disabled) { background: #2a2a3a; color: #ccd; } .audit-clear:disabled { opacity: 0.4; cursor: default; } .audit-empty { color: #666; font-style: italic; font-size: 11px; margin: 12px 0; } .audit-table { width: 100%; border-collapse: collapse; font-size: 11px; } .audit-table th { text-align: left; font-size: 10px; text-transform: uppercase; letter-spacing: 0.07em; color: #666; padding: 0 6px 4px; border-bottom: 1px solid #2a2a2a; } .audit-table td { padding: 2px 6px; vertical-align: top; border-bottom: 1px solid #1c1c1c; } /* Row tinting */ .audit-row--ok td { background: rgba(80, 200, 80, 0.04); } .audit-row--denied td { background: rgba(220, 60, 60, 0.06); } .audit-row--failed td { background: rgba(220, 140, 30, 0.06); } .audit-cell--time { font-size: 10px; color: #666; white-space: nowrap; font-family: inherit; } .audit-cell--tool { color: #cce6ff; white-space: nowrap; } .audit-cell--args { color: #aaa; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .audit-cell--result { white-space: nowrap; } .audit-errmsg { color: #888; font-size: 10px; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: inline-block; vertical-align: middle; } .audit-cell--dur { color: #777; text-align: right; white-space: nowrap; } /* Result chips */ .audit-chip { display: inline-block; font-size: 10px; font-weight: 600; padding: 1px 5px; border-radius: 3px; vertical-align: middle; } .audit-chip--ok { background: #1a3a1a; color: #80e080; border: 1px solid #2a5a2a; } .audit-chip--denied { background: #3a1a1a; color: #e06060; border: 1px solid #5a2a2a; } .audit-chip--failed { background: #3a2a10; color: #d8a040; border: 1px solid #5a4a20; } .audit-chip--denied em { font-style: italic; color: #c04040; margin-left: 3px; } /* ========================================================================= Policy tab ========================================================================= */ .policy-tab { display: flex; flex-direction: column; gap: 14px; } .policy-loading { color: #777; font-style: italic; font-size: 11px; } .policy-toolbar { display: flex; align-items: flex-start; gap: 10px; } .policy-hint { flex: 1 1 auto; color: #888; font-size: 11px; font-style: italic; margin: 0; line-height: 1.45; } .policy-save-area { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } .policy-save-error { color: #e06060; font-size: 10px; max-width: 150px; } .policy-save-btn { font: inherit; font-family: inherit; font-size: 11px; font-weight: 600; background: #1a3a1a; color: #80e080; border: 1px solid #2a6a2a; border-radius: 3px; padding: 4px 14px; cursor: pointer; } .policy-save-btn:hover:not(:disabled) { background: #225a22; } .policy-save-btn:disabled { opacity: 0.4; cursor: default; } .policy-buckets { display: flex; flex-direction: column; gap: 10px; } .policy-bucket { background: #111; border: 1px solid #2a2a2a; border-radius: 4px; padding: 8px 10px; display: flex; flex-direction: column; gap: 6px; } .policy-bucket--deny { border-color: #3a2020; } .policy-bucket--ask { border-color: #3a3020; } .policy-bucket--allow { border-color: #1a2a1a; } .policy-bucket-header { font-size: 10px; text-transform: uppercase; letter-spacing: 0.07em; color: #888; padding-bottom: 4px; border-bottom: 1px solid #2a2a2a; } .policy-bucket--deny .policy-bucket-header { color: #c06060; } .policy-bucket--ask .policy-bucket-header { color: #c09040; } .policy-bucket--allow .policy-bucket-header { color: #60a060; } .policy-rule-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 3px; min-height: 24px; } .policy-rule-empty { color: #555; font-size: 11px; padding: 2px 0; } .policy-rule { display: flex; align-items: center; gap: 4px; } .policy-rule-text { flex: 1 1 auto; font-family: inherit; font-size: 11px; color: #ccc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .policy-rule-remove { background: transparent; border: none; color: #666; font-size: 14px; line-height: 1; padding: 0 3px; cursor: pointer; border-radius: 2px; flex-shrink: 0; } .policy-rule-remove:hover { color: #e06060; background: #2a1a1a; } .policy-add-row { display: flex; gap: 4px; margin-top: 2px; } .policy-add-input { flex: 1 1 auto; font: inherit; font-family: inherit; font-size: 11px; color: #ddd; background: #0c0c0c; border: 1px solid #2a2a2a; border-radius: 3px; padding: 3px 6px; outline: none; min-width: 0; } .policy-add-input:focus { border-color: #4488cc; } .policy-add-btn { font: inherit; font-family: inherit; font-size: 11px; background: #222; color: #aac; border: 1px solid #2a2a3a; border-radius: 3px; padding: 0 8px; cursor: pointer; flex-shrink: 0; } .policy-add-btn:hover:not(:disabled) { background: #2a2a3a; color: #ccd; } .policy-add-btn:disabled { opacity: 0.4; cursor: default; } /* Hard-deny section */ .policy-hard-deny { background: #0e0e0e; border: 1px solid #222; border-radius: 4px; padding: 10px 12px; } .policy-hard-deny-header { font-size: 10px; font-variant: small-caps; letter-spacing: 0.1em; color: #666; margin-bottom: 6px; text-transform: lowercase; } .policy-hard-deny-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; } .policy-hard-deny-rule { display: flex; align-items: center; gap: 8px; font-size: 11px; } .policy-hard-deny-rule code { font-family: inherit; color: #888; background: #0c0c0c; padding: 1px 5px; border-radius: 2px; border: 1px solid #1e1e1e; flex-shrink: 0; } .policy-hard-deny-badge { font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; color: #555; border: 1px solid #2a2a2a; border-radius: 3px; padding: 1px 5px; white-space: nowrap; } .policy-hard-deny-footnote { font-size: 10px; font-style: italic; color: #555; margin: 8px 0 0; line-height: 1.4; } /* ---- Confirm modal ------------------------------------------------------ */ .mcp-confirm { position: fixed; top: 20vh; left: 50%; transform: translateX(-50%); width: min(520px, 92vw); max-height: 60vh; background: #161616; color: #ccc; border: 1px solid #c09040; border-radius: 8px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.7); z-index: 200; display: flex; flex-direction: column; overflow: hidden; font-family: "Cascadia Mono", "JetBrains Mono", "Consolas", monospace; } .mcp-confirm-header { padding: 10px 14px; border-bottom: 1px solid #2a2a2a; background: linear-gradient(180deg, #2a2010, #161616); } .mcp-confirm-title { font-size: 13px; font-weight: 600; } .mcp-confirm-title code { color: #c09040; background: transparent; font-size: 12px; } .mcp-confirm-body { padding: 14px 16px; overflow-y: auto; font-size: 12px; line-height: 1.5; scrollbar-width: thin; scrollbar-color: #2a2a2a transparent; } .mcp-confirm-body::-webkit-scrollbar { width: 8px; } .mcp-confirm-body::-webkit-scrollbar-thumb { background: #2a2a2a; border-radius: 4px; border: 1px solid #1a1a1a; } .mcp-confirm-summary { margin: 0 0 8px; color: #ddd; } .mcp-confirm-reason { margin: 0 0 8px; color: #888; font-size: 11px; } .mcp-confirm-reason em { color: #c09040; font-style: normal; } .mcp-confirm-args { margin-top: 10px; font-size: 11px; } .mcp-confirm-args summary { color: #888; cursor: pointer; user-select: none; padding: 2px 0; } .mcp-confirm-args summary:hover { color: #aaa; } .mcp-confirm-args pre { background: #0c0c0c; border: 1px solid #2a2a2a; border-radius: 3px; padding: 8px; margin: 6px 0 0; color: #aaa; font-size: 11px; overflow-x: auto; white-space: pre-wrap; } .mcp-confirm-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 10px 14px; border-top: 1px solid #2a2a2a; background: #111; } .mcp-confirm-reject, .mcp-confirm-accept { font: inherit; font-size: 12px; padding: 5px 14px; border-radius: 3px; cursor: pointer; border: 1px solid #2a2a3a; } .mcp-confirm-reject { background: #1a1a1a; color: #aaa; } .mcp-confirm-reject:hover { background: #2a1a1a; color: #e08080; border-color: #4a2020; } .mcp-confirm-accept { background: #1a2a1a; color: #80c080; border-color: #2a4a2a; } .mcp-confirm-accept:hover { background: #2a4a2a; color: #a0e0a0; } .mcp-confirm-always { font: inherit; font-size: 12px; padding: 5px 14px; border-radius: 3px; cursor: pointer; background: #1a1a2a; color: #aac; border: 1px solid #2a2a4a; margin-right: auto; } .mcp-confirm-always:hover { background: #2a2a4a; color: #ccd; border-color: #4488cc; } .mcp-confirm-ssh-warn { background: #2a1a1a; border: 1px solid #a04040; border-radius: 4px; padding: 8px 10px; margin: 0 0 10px; color: #e0a0a0; font-size: 11px; line-height: 1.5; } .mcp-confirm-ssh-warn strong { color: #ff8080; } .mcp-confirm-ssh-warn code { background: #0c0c0c; padding: 1px 4px; border-radius: 2px; color: #ffcccc; } .mcp-confirm-ssh-warn em { color: #ffd0a0; font-style: normal; } /* ---- SSH safeguards section ------------------------------------------- */ .policy-ssh-safeguards { background: #1a1410; border: 1px solid #4a2a1a; border-radius: 4px; padding: 10px 12px; margin-bottom: 12px; } .policy-ssh-safeguards .policy-bucket-header { color: #d8a040; border-bottom-color: #3a2a1a; margin-bottom: 8px; } .policy-toggle-row { display: flex; align-items: flex-start; gap: 8px; padding: 6px 0; cursor: pointer; border-top: 1px solid #2a1a10; } .policy-toggle-row:first-of-type { border-top: none; } .policy-toggle-row input[type="checkbox"] { margin-top: 3px; accent-color: #d8a040; flex-shrink: 0; } .policy-toggle-text { font-size: 11px; color: #b8a890; line-height: 1.45; } .policy-toggle-text strong { color: #d8a040; display: block; margin-bottom: 2px; } .policy-toggle-text code { background: #0c0c0c; padding: 1px 4px; border-radius: 2px; font-family: inherit; color: #ffcc80; } .policy-toggle-row input:disabled + .policy-toggle-text { opacity: 0.5; }