Spaces:
Running
Running
Download css/kb.css from hongcoding/perch-design: direct link, hf CLI and curl.
- Browser
- Download file 12.6 kB
-
https://huggingface.co/spaces/hongcoding/perch-design/resolve/main/css/kb.css
- Command line
-
hf download hf://spaces/hongcoding/perch-design/css/kb.css
-
curl -L -o kb.css https://huggingface.co/spaces/hongcoding/perch-design/resolve/main/css/kb.css
12.6 kB
| /* 本地知识库(Phase 3 RAG):文档列表 + 检索测试 + 带引用问答。 | |
| Warm Paper 全令牌配色,遵循 design-system.md。 */ | |
| .kb { | |
| flex: 1; | |
| min-width: 0; | |
| overflow-y: auto; | |
| padding: 36px 48px 48px; | |
| } | |
| .kb-head { | |
| display: flex; | |
| align-items: flex-end; | |
| justify-content: space-between; | |
| gap: 16px; | |
| margin-bottom: 16px; | |
| flex-wrap: wrap; | |
| } | |
| .kb-head h1 { | |
| font-size: 30px; | |
| } | |
| .kb-head-sub { | |
| margin: 6px 0 0; | |
| font-size: 13.5px; | |
| color: var(--text-secondary); | |
| } | |
| .kb-head-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 14px; | |
| } | |
| .kb-stat { | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .kb-backend-note { | |
| margin: 0 0 16px; | |
| padding: 8px 14px; | |
| border: 1px dashed var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| } | |
| .kb-notice { | |
| margin: 0 0 16px; | |
| padding: 8px 14px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--accent-soft); | |
| font-size: 13px; | |
| color: var(--text); | |
| } | |
| .kb-error { | |
| margin: 8px 0 0; | |
| font-size: 13px; | |
| color: var(--danger); | |
| } | |
| .kb-muted { | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| } | |
| /* ── 按钮 / 输入 ────────────────────────────────────────────────── */ | |
| .kb-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| height: 36px; | |
| padding: 0 14px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 13.5px; | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease); | |
| } | |
| .kb-btn:hover:not(:disabled) { | |
| background: var(--bg-elevated); | |
| } | |
| .kb-btn:disabled { | |
| opacity: 0.55; | |
| cursor: default; | |
| } | |
| .kb-btn-primary { | |
| border-color: transparent; | |
| background: var(--accent); | |
| color: var(--bg); | |
| } | |
| .kb-btn-primary:hover:not(:disabled) { | |
| filter: brightness(0.94); | |
| } | |
| .kb-icon-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 28px; | |
| height: 28px; | |
| border: none; | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--text-secondary); | |
| cursor: pointer; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .kb-icon-btn:hover { | |
| background: var(--accent-soft); | |
| color: var(--text); | |
| } | |
| .kb-input { | |
| flex: 1; | |
| min-width: 0; | |
| height: 36px; | |
| padding: 0 12px; | |
| border: 1px solid transparent; | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 14px; | |
| } | |
| .kb-input::placeholder { | |
| color: var(--text-tertiary); | |
| } | |
| .kb-input:focus { | |
| outline: none; | |
| border-color: var(--accent); | |
| box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-soft) 65%, transparent); | |
| } | |
| .kb-select { | |
| height: 36px; | |
| padding: 0 8px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-elevated); | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 13px; | |
| } | |
| .kb-input-row { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin-bottom: 12px; | |
| } | |
| /* ── 双栏布局 ───────────────────────────────────────────────────── */ | |
| .kb-columns { | |
| display: grid; | |
| grid-template-columns: 320px minmax(0, 1fr); | |
| gap: 20px; | |
| align-items: start; | |
| } | |
| .kb-right { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 20px; | |
| min-width: 0; | |
| } | |
| .kb-panel { | |
| padding: 20px 22px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-card); | |
| background: var(--bg-elevated); | |
| } | |
| .kb-panel-title { | |
| margin: 0 0 14px; | |
| font-family: var(--font-serif); | |
| font-size: 17px; | |
| font-weight: 600; | |
| } | |
| /* ── 文档列表 ───────────────────────────────────────────────────── */ | |
| .kb-empty { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 28px 12px; | |
| text-align: center; | |
| color: var(--text-secondary); | |
| } | |
| .kb-empty p { | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 15px; | |
| color: var(--text); | |
| } | |
| .kb-empty .kb-muted { | |
| font-family: var(--font-sans); | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| } | |
| .kb-doc-list { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .kb-doc { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 8px; | |
| padding: 10px 4px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .kb-doc:last-child { | |
| border-bottom: none; | |
| } | |
| .kb-doc-main { | |
| display: flex; | |
| flex-direction: column; | |
| min-width: 0; | |
| } | |
| .kb-doc-name { | |
| font-size: 14px; | |
| color: var(--text); | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| } | |
| .kb-doc-meta { | |
| margin-top: 2px; | |
| font-size: 12px; | |
| color: var(--text-secondary); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* ── 检索命中卡片 ───────────────────────────────────────────────── */ | |
| .kb-hit-list { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| } | |
| .kb-hit { | |
| padding: 12px 14px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg); | |
| transition: border-color var(--dur) var(--ease); | |
| } | |
| .kb-hit:hover { | |
| border-color: var(--accent); | |
| } | |
| .kb-hit-head { | |
| display: flex; | |
| align-items: baseline; | |
| justify-content: space-between; | |
| gap: 10px; | |
| margin-bottom: 6px; | |
| } | |
| .kb-hit-source { | |
| font-size: 12.5px; | |
| color: var(--text-secondary); | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| } | |
| .kb-hit-score { | |
| flex-shrink: 0; | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--accent); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .kb-hit-excerpt { | |
| margin: 0; | |
| font-size: 13.5px; | |
| line-height: 1.6; | |
| color: var(--text); | |
| } | |
| /* ── 问答结果 ───────────────────────────────────────────────────── */ | |
| .kb-ask-result { | |
| margin-top: 4px; | |
| } | |
| .kb-question-line { | |
| margin: 10px 0 6px; | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| } | |
| .kb-answer-body { | |
| font-size: 14.5px; | |
| line-height: 1.7; | |
| } | |
| .kb-answer-body > * { | |
| margin: 0 0 10px; | |
| } | |
| .kb-cite-ref { | |
| display: inline; | |
| padding: 0 3px; | |
| margin: 0 1px; | |
| border: none; | |
| border-radius: 4px; | |
| background: var(--accent-soft); | |
| color: var(--accent); | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| cursor: pointer; | |
| vertical-align: super; | |
| line-height: 1; | |
| transition: background-color var(--dur) var(--ease); | |
| } | |
| .kb-cite-ref:hover { | |
| background: var(--accent); | |
| color: var(--bg); | |
| } | |
| /* ── 引用条目(可折叠) ─────────────────────────────────────────── */ | |
| .kb-citations { | |
| margin: 0 0 12px; | |
| padding: 10px 14px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-control); | |
| background: var(--bg-sunken); | |
| } | |
| .kb-citations > summary { | |
| cursor: pointer; | |
| font-size: 13px; | |
| color: var(--text-secondary); | |
| list-style: none; | |
| } | |
| .kb-citations > summary::-webkit-details-marker { | |
| display: none; | |
| } | |
| .kb-citation-list { | |
| list-style: none; | |
| margin: 10px 0 0; | |
| padding: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .kb-citation { | |
| padding-top: 8px; | |
| border-top: 1px solid var(--border); | |
| } | |
| .kb-citation:first-child { | |
| border-top: none; | |
| padding-top: 0; | |
| } | |
| .kb-citation-btn { | |
| display: flex; | |
| align-items: baseline; | |
| gap: 6px; | |
| width: 100%; | |
| padding: 0; | |
| border: none; | |
| background: transparent; | |
| text-align: left; | |
| cursor: pointer; | |
| } | |
| .kb-citation-rank { | |
| flex-shrink: 0; | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--accent); | |
| } | |
| .kb-citation-source { | |
| font-size: 12.5px; | |
| color: var(--text-secondary); | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| } | |
| .kb-citation-quote { | |
| margin: 4px 0 0; | |
| font-size: 13px; | |
| line-height: 1.55; | |
| color: var(--text); | |
| display: -webkit-box; | |
| -webkit-line-clamp: 2; | |
| -webkit-box-orient: vertical; | |
| overflow: hidden; | |
| } | |
| /* ── 引用原文抽屉 ───────────────────────────────────────────────── */ | |
| .kb-drawer-mask { | |
| position: fixed; | |
| inset: 0; | |
| display: flex; | |
| justify-content: flex-end; | |
| background: var(--scrim); | |
| z-index: 40; | |
| } | |
| .kb-drawer { | |
| display: flex; | |
| flex-direction: column; | |
| width: min(520px, 90vw); | |
| height: 100%; | |
| background: var(--bg-elevated); | |
| border-left: 1px solid var(--border); | |
| box-shadow: var(--shadow-float); | |
| animation: kb-drawer-in 180ms var(--ease); | |
| } | |
| @keyframes kb-drawer-in { | |
| from { | |
| opacity: 0; | |
| transform: translateX(12px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| .kb-drawer-head { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 10px; | |
| padding: 18px 22px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .kb-drawer-head > div { | |
| display: flex; | |
| align-items: baseline; | |
| gap: 8px; | |
| min-width: 0; | |
| } | |
| .kb-drawer-source { | |
| font-family: var(--font-serif); | |
| font-size: 15px; | |
| font-weight: 600; | |
| color: var(--text); | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| } | |
| .kb-drawer-body { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 20px 22px; | |
| font-size: 14.5px; | |
| line-height: 1.7; | |
| } | |
| .kb-drawer-body .md > * { | |
| margin: 0 0 12px; | |
| } | |
| /* ── 拖放蒙层 ───────────────────────────────────────────────────── */ | |
| .kb-drag-overlay { | |
| position: fixed; | |
| inset: 0; | |
| z-index: 50; | |
| background: var(--glass); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .kb-drag-card { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 40px 56px; | |
| border: 1px dashed var(--accent); | |
| border-radius: var(--radius-float); | |
| color: var(--text); | |
| } | |
| .kb-drag-title { | |
| margin: 0; | |
| font-family: var(--font-serif); | |
| font-size: 24px; | |
| font-weight: 600; | |
| } | |
| .kb-drag-sub { | |
| margin: 0; | |
| font-size: 13.5px; | |
| color: var(--text-secondary); | |
| } | |
| /* 转圈(theme.css 的 reduced-motion 会全局关停动画) */ | |
| .kb-spin { | |
| animation: kb-rot 1s linear infinite; | |
| } | |
| @keyframes kb-rot { | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| /* 窄屏:双栏折叠成单栏 */ | |
| @media (max-width: 900px) { | |
| .kb-columns { | |
| grid-template-columns: minmax(0, 1fr); | |
| } | |
| } | |
| /* ── 语义检索徽章(契约 7B)────────────────────────────────────── */ | |
| .kb-backend { | |
| margin-bottom: 12px; | |
| } | |
| /* 徽章本体是个按钮:点开才看细节,默认视图只给结论 */ | |
| .kb-backend-badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 4px 12px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-chip); | |
| background: var(--bg-elevated); | |
| color: var(--text-secondary); | |
| font-size: 12px; | |
| line-height: 1.6; | |
| cursor: pointer; | |
| transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease); | |
| } | |
| .kb-backend-badge:hover { | |
| border-color: var(--accent); | |
| color: var(--text); | |
| } | |
| .kb-backend-badge:focus-visible { | |
| outline: 2px solid var(--accent); | |
| outline-offset: 2px; | |
| } | |
| /* 状态点:启用=success,降级=warning。不用红——降级是设计内的正常状态 */ | |
| .kb-dot { | |
| width: 7px; | |
| height: 7px; | |
| border-radius: 50%; | |
| background: var(--warning); | |
| flex: none; | |
| } | |
| .kb-backend-on .kb-dot { | |
| background: var(--success); | |
| } | |
| .kb-backend-label { | |
| font-weight: 500; | |
| } | |
| .kb-backend-on .kb-backend-label { | |
| color: var(--text); | |
| } | |
| /* 模型名片片:次要信息,弱化显示 */ | |
| .kb-backend-model { | |
| padding-left: 6px; | |
| margin-left: 2px; | |
| border-left: 1px solid var(--border); | |
| color: var(--text-tertiary); | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| } | |
| .kb-backend-detail { | |
| margin-top: 8px; | |
| } | |
| .kb-backend-detail .kb-backend-note { | |
| margin: 0; | |
| } | |
| .kb-backend-meta { | |
| margin: 4px 0 0; | |
| color: var(--text-tertiary); | |
| font-size: 12px; | |
| } | |
| /* 导入进度:等宽数字更好读 */ | |
| .kb-import-progress { | |
| font-variant-numeric: tabular-nums; | |
| } | |