Spaces:
Running
Running
Download css/mcp.css from hongcoding/perch-design: direct link, hf CLI and curl.
- Browser
- Download file 13.1 kB
-
https://huggingface.co/spaces/hongcoding/perch-design/resolve/main/css/mcp.css
- Command line
-
hf download hf://spaces/hongcoding/perch-design/css/mcp.css
-
curl -L -o mcp.css https://huggingface.co/spaces/hongcoding/perch-design/resolve/main/css/mcp.css
13.1 kB
| /* MCP 服务器 + 专家中心(Phase 5D):Warm Paper 全令牌配色。 | |
| 覆盖组件:McpPanel / ExpertsCenter / ExpertPicker,以及对话头部的专家入口。 | |
| 规则来自 docs/design-system.md:留白优先、衬线标题、语义色只出现在状态语境。 */ | |
| /* ---------- 通用面板骨架 ---------- */ | |
| .experts-center { | |
| flex: 1; | |
| min-width: 0; | |
| overflow-y: auto; | |
| padding: 36px 48px 48px; | |
| } | |
| .mcp-panel { | |
| min-width: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 20px; | |
| } | |
| .panel-head { | |
| display: flex; | |
| align-items: flex-end; | |
| justify-content: space-between; | |
| gap: 16px; | |
| flex-wrap: wrap; | |
| margin-bottom: 4px; | |
| } | |
| .panel-title { | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 30px; | |
| font-weight: 600; | |
| letter-spacing: -0.01em; | |
| color: var(--text); | |
| } | |
| .panel-desc { | |
| margin: 8px 0 0; | |
| max-width: 60ch; | |
| font-size: 13.5px; | |
| line-height: 1.7; | |
| color: var(--text-secondary); | |
| } | |
| .panel-error { | |
| margin: 0; | |
| padding: 10px 14px; | |
| border: 1px solid var(--danger); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| color: var(--danger); | |
| font-size: 13px; | |
| line-height: 1.6; | |
| } | |
| .panel-empty { | |
| margin: 0; | |
| padding: 28px 0; | |
| font-size: 13.5px; | |
| line-height: 1.9; | |
| color: var(--text-tertiary); | |
| } | |
| .inline-code { | |
| padding: 1px 6px; | |
| border-radius: 6px; | |
| background: var(--bg-sunken); | |
| color: var(--text-secondary); | |
| font-family: var(--font-mono); | |
| font-size: 12.5px; | |
| } | |
| /* ---------- 按钮(补充 App.css 的 .btn-primary/.btn-secondary)---------- */ | |
| .btn-ghost { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| height: 32px; | |
| padding: 0 12px; | |
| border: 1px solid transparent; | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text-secondary); | |
| font-family: inherit; | |
| font-size: 13px; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .btn-ghost:hover:not(:disabled) { | |
| background: var(--bg-elevated); | |
| color: var(--text); | |
| } | |
| .btn-ghost:disabled { | |
| opacity: 0.55; | |
| cursor: default; | |
| } | |
| .btn-danger { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| height: 32px; | |
| padding: 0 12px; | |
| border: 1px solid var(--danger); | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--danger); | |
| font-family: inherit; | |
| font-size: 13px; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .btn-danger:hover { | |
| background: var(--bg-elevated); | |
| } | |
| .btn-icon { | |
| display: inline-grid; | |
| place-items: center; | |
| width: 28px; | |
| height: 28px; | |
| border: 1px solid transparent; | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text-secondary); | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .btn-icon:hover { | |
| background: var(--bg-elevated); | |
| color: var(--text); | |
| } | |
| .mcp-panel .btn-primary, | |
| .experts-center .btn-primary { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| height: 36px; | |
| padding: 0 18px; | |
| } | |
| /* ---------- 表单 ---------- */ | |
| .mcp-form, | |
| .expert-form { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| padding: 20px 22px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-card); | |
| background: var(--bg-elevated); | |
| } | |
| .mcp-form-title { | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 19px; | |
| font-weight: 600; | |
| color: var(--text); | |
| } | |
| .field { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| } | |
| .field-label { | |
| font-size: 13px; | |
| font-weight: 500; | |
| color: var(--text-secondary); | |
| } | |
| .field-note { | |
| margin: 0; | |
| font-size: 12.5px; | |
| line-height: 1.7; | |
| color: var(--text-tertiary); | |
| } | |
| .field-input { | |
| width: 100%; | |
| padding: 9px 12px; | |
| border: 1px solid transparent; | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 13.5px; | |
| line-height: 1.6; | |
| resize: vertical; | |
| transition: border-color var(--dur) var(--ease); | |
| } | |
| .field-input:focus { | |
| outline: none; | |
| border-color: var(--accent); | |
| } | |
| .field-mono { | |
| font-family: var(--font-mono); | |
| font-size: 12.5px; | |
| } | |
| .mcp-env-row { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr auto; | |
| gap: 8px; | |
| align-items: center; | |
| } | |
| .mcp-form-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .expert-form-row { | |
| display: grid; | |
| grid-template-columns: 1fr 1.2fr; | |
| gap: 16px; | |
| align-items: start; | |
| } | |
| .expert-emoji-grid { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| } | |
| .expert-emoji { | |
| display: inline-grid; | |
| place-items: center; | |
| width: 34px; | |
| height: 34px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| font-size: 17px; | |
| cursor: pointer; | |
| transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease); | |
| } | |
| .expert-emoji:hover { | |
| background: var(--bg-elevated); | |
| } | |
| .expert-emoji.is-active { | |
| border-color: var(--accent); | |
| background: var(--accent-soft); | |
| } | |
| .expert-prompt { | |
| font-family: var(--font-sans); | |
| line-height: 1.75; | |
| } | |
| /* ---------- MCP 服务器卡片 ---------- */ | |
| .mcp-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 14px; | |
| margin: 0; | |
| padding: 0; | |
| list-style: none; | |
| } | |
| .mcp-card { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| padding: 18px 20px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-card); | |
| background: var(--bg-elevated); | |
| } | |
| .mcp-card-head { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 12px; | |
| flex-wrap: wrap; | |
| } | |
| .mcp-card-title { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| flex-wrap: wrap; | |
| } | |
| .mcp-name { | |
| font-family: var(--font-serif); | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: var(--text); | |
| } | |
| .mcp-status { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 12.5px; | |
| color: var(--text-secondary); | |
| } | |
| .mcp-status-dot { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--text-tertiary); | |
| } | |
| .mcp-status.is-connected .mcp-status-dot { | |
| background: var(--success); | |
| } | |
| .mcp-status.is-connecting .mcp-status-dot { | |
| background: var(--warning); | |
| } | |
| .mcp-status.is-error .mcp-status-dot { | |
| background: var(--danger); | |
| } | |
| .mcp-tools-count { | |
| font-size: 12.5px; | |
| color: var(--text-tertiary); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .mcp-card-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| flex-wrap: wrap; | |
| } | |
| .mcp-command { | |
| margin: 0; | |
| overflow-wrap: anywhere; | |
| } | |
| .mcp-enabled { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| cursor: pointer; | |
| } | |
| .mcp-error { | |
| margin: 0; | |
| font-size: 12.5px; | |
| line-height: 1.7; | |
| color: var(--danger); | |
| } | |
| .mcp-confirm { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 12.5px; | |
| color: var(--text-secondary); | |
| } | |
| /* ---------- MCP 工具清单 ---------- */ | |
| .mcp-tools { | |
| border-top: 1px solid var(--border); | |
| padding-top: 10px; | |
| } | |
| .mcp-tools-toggle { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 4px; | |
| padding: 4px 6px 4px 0; | |
| border: none; | |
| background: transparent; | |
| color: var(--text-secondary); | |
| font-family: inherit; | |
| font-size: 13px; | |
| cursor: pointer; | |
| } | |
| .mcp-tools-toggle:hover { | |
| color: var(--text); | |
| } | |
| .mcp-tool-list { | |
| display: flex; | |
| flex-direction: column; | |
| margin: 8px 0 0; | |
| padding: 0; | |
| list-style: none; | |
| } | |
| .mcp-tool { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 16px; | |
| padding: 9px 0; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .mcp-tool:last-child { | |
| border-bottom: none; | |
| } | |
| .mcp-tool-info { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| min-width: 0; | |
| } | |
| .mcp-tool-name { | |
| font-family: var(--font-mono); | |
| font-size: 12.5px; | |
| color: var(--text); | |
| overflow-wrap: anywhere; | |
| } | |
| .mcp-tool-desc { | |
| font-size: 12.5px; | |
| line-height: 1.6; | |
| color: var(--text-secondary); | |
| overflow-wrap: anywhere; | |
| } | |
| .mcp-tool-toggle { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| flex-shrink: 0; | |
| padding: 5px 10px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| color: var(--text-secondary); | |
| font-size: 12.5px; | |
| cursor: pointer; | |
| transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease); | |
| } | |
| .mcp-tool-toggle input { | |
| accent-color: var(--accent); | |
| } | |
| .mcp-tool-toggle.is-on { | |
| border-color: var(--success); | |
| background: var(--bg-elevated); | |
| color: var(--text); | |
| } | |
| /* ---------- 专家中心 ---------- */ | |
| .experts-tabs { | |
| display: inline-flex; | |
| gap: 4px; | |
| padding: 3px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| } | |
| .experts-tab { | |
| height: 30px; | |
| padding: 0 14px; | |
| border: none; | |
| border-radius: calc(var(--radius-control) - 2px); | |
| background: transparent; | |
| color: var(--text-secondary); | |
| font-family: inherit; | |
| font-size: 13px; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .experts-tab.is-active { | |
| background: var(--bg-elevated); | |
| color: var(--text); | |
| } | |
| .experts-actions { | |
| margin-bottom: 16px; | |
| } | |
| .expert-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); | |
| gap: 16px; | |
| margin: 0; | |
| padding: 0; | |
| list-style: none; | |
| } | |
| /* hover 统一(描边加深 + 轻上浮)在 App.css;transition 也集中在那里定义 */ | |
| .expert-card { | |
| display: flex; | |
| gap: 14px; | |
| padding: 18px 20px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-card); | |
| background: var(--bg-elevated); | |
| } | |
| .expert-card.is-active { | |
| border-color: var(--accent); | |
| } | |
| .expert-card-emoji { | |
| font-size: 30px; | |
| line-height: 1.2; | |
| } | |
| .expert-card-body { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| min-width: 0; | |
| } | |
| .expert-card-name { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: var(--text); | |
| } | |
| .expert-card-desc { | |
| margin: 0; | |
| font-size: 13px; | |
| line-height: 1.7; | |
| color: var(--text-secondary); | |
| } | |
| .expert-card-model { | |
| margin: 0; | |
| font-size: 12.5px; | |
| color: var(--text-tertiary); | |
| } | |
| .expert-card-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| flex-wrap: wrap; | |
| margin-top: 4px; | |
| } | |
| /* 状态徽章:与全站徽章同尺寸同字重 */ | |
| .expert-badge { | |
| padding: 2px 8px; | |
| border-radius: 999px; | |
| background: var(--bg-sunken); | |
| color: var(--text-tertiary); | |
| font-family: var(--font-sans); | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .expert-badge.is-custom { | |
| color: var(--text-secondary); | |
| } | |
| .experts-foot { | |
| margin: 18px 0 0; | |
| font-size: 12.5px; | |
| line-height: 1.7; | |
| color: var(--text-tertiary); | |
| } | |
| /* ---------- 对话头部的专家选择器 ---------- */ | |
| .chat-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 12px; | |
| padding: 10px 24px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .chat-header-title { | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 15px; | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| } | |
| .expert-picker { | |
| position: relative; | |
| } | |
| .expert-picker-trigger { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 7px; | |
| height: 32px; | |
| padding: 0 12px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 13px; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .expert-picker-trigger:hover { | |
| background: var(--bg-elevated); | |
| } | |
| .expert-picker-emoji { | |
| font-size: 15px; | |
| } | |
| .expert-menu { | |
| position: absolute; | |
| top: calc(100% + 6px); | |
| right: 0; | |
| z-index: 20; | |
| width: 300px; | |
| max-height: 360px; | |
| overflow-y: auto; | |
| padding: 10px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-float); | |
| background: var(--bg-elevated); | |
| box-shadow: var(--shadow-float); | |
| } | |
| .expert-menu-title { | |
| margin: 2px 6px 8px; | |
| font-size: 12px; | |
| color: var(--text-tertiary); | |
| } | |
| .expert-option { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 10px; | |
| width: 100%; | |
| padding: 8px 10px; | |
| border: none; | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text); | |
| font-family: inherit; | |
| text-align: left; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .expert-option:hover { | |
| background: var(--accent-soft); | |
| } | |
| .expert-option.is-active { | |
| background: var(--accent-soft); | |
| } | |
| .expert-option-emoji { | |
| font-size: 18px; | |
| line-height: 1.3; | |
| } | |
| .expert-option-body { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| min-width: 0; | |
| } | |
| .expert-option-name { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 13.5px; | |
| font-weight: 500; | |
| } | |
| .expert-option-desc { | |
| font-size: 12px; | |
| line-height: 1.6; | |
| color: var(--text-secondary); | |
| } | |
| .expert-menu-foot { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| margin: 8px 6px 2px; | |
| font-size: 12px; | |
| color: var(--text-tertiary); | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| .mcp-card, | |
| .expert-card, | |
| .expert-menu, | |
| .expert-option, | |
| .btn-ghost, | |
| .mcp-tool-toggle { | |
| transition: none; | |
| } | |
| } | |