// ─────────────────────────────────────────────────────────────────────────────
// Component: MCP Docs
// File: src/scss/components/_mcp-docs.scss
//
// Variants: .tool-card .tool-card--{kind} .step-card .kv-table
// .resource-card .prompt-card .param-type .tool-filter-bar
// Tokens: --border-subtle, --border-default, --text-primary, --text-muted
// --color-accent, --color-success, --color-warning, --color-purple
// --color-danger, --color-orange, --bg-hover, --bg-canvas
// Usage:
…
// ─────────────────────────────────────────────────────────────────────────────
// ── Quick-start step cards ────────────────────────────────────────────────────
.step-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
@media (max-width: 768px) { grid-template-columns: 1fr; }
}
.step-card {
display: flex;
gap: var(--space-3);
align-items: flex-start;
padding: var(--space-3);
background: transparent;
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
transition: border-color var(--transition-fast), background var(--transition-fast);
&:hover { border-color: var(--border-default); background: rgba(255, 255, 255, 0.02); }
&--prompt .step-card__num { background: color-mix(in srgb, var(--color-purple) 15%, transparent); color: var(--color-purple); }
}
.step-card__num {
width: 24px;
height: 24px;
border-radius: 50%;
background: color-mix(in srgb, var(--color-accent) 15%, transparent);
color: var(--color-accent);
font-size: 11px;
font-weight: var(--weight-bold);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.step-card__title {
font-size: 13px;
font-weight: var(--weight-semibold);
margin: 0 0 2px;
color: var(--text-primary);
}
.step-card__body {
font-size: 12px;
color: var(--text-muted);
margin: 0;
line-height: 1.5;
code { font-size: 11px; }
}
// ── KV connection table ───────────────────────────────────────────────────────
.kv-table {
border: 1px solid var(--border-subtle);
border-radius: var(--radius-base);
overflow: hidden;
}
.kv-table__row {
display: grid;
grid-template-columns: 160px 1fr;
align-items: start;
border-bottom: 1px solid var(--border-subtle);
&:last-child { border-bottom: none; }
}
.kv-table__key {
font-size: 11px;
font-weight: var(--weight-semibold);
color: var(--text-muted);
padding: var(--space-2) var(--space-3);
border-right: 1px solid var(--border-subtle);
display: flex;
align-items: center;
}
.kv-table__val {
font-size: 11px;
padding: var(--space-2) var(--space-3);
background: none;
word-break: break-all;
}
// ── Tool filter bar ───────────────────────────────────────────────────────────
.tool-filter-bar {
display: flex;
align-items: center;
gap: var(--space-2);
padding: 0 var(--space-3);
height: 38px;
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 6px;
margin-bottom: var(--space-5);
color: var(--text-muted);
transition: border-color var(--transition-fast);
&:focus-within { border-color: color-mix(in srgb, var(--color-accent) 45%, transparent); }
input {
flex: 1;
background: none;
border: none;
outline: none;
box-shadow: none;
appearance: none;
-webkit-appearance: none;
font-size: 13px;
color: var(--text-primary);
&::placeholder { color: var(--text-muted); }
}
}
.tool-count {
font-size: 11px;
color: var(--text-muted);
flex-shrink: 0;
font-family: var(--font-mono);
}
// ── Tool cards ────────────────────────────────────────────────────────────────
.tool-list {
display: flex;
flex-direction: column;
gap: var(--space-2);
margin-bottom: var(--space-4);
}
.tool-card {
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
overflow: hidden;
background: transparent;
transition: border-color var(--transition-fast), background var(--transition-fast);
&:hover { border-color: var(--border-default); background: rgba(255, 255, 255, 0.015); }
&[hidden] { display: none; }
}
.tool-card__header { padding: var(--space-3); }
.tool-card__title-row {
display: flex;
align-items: center;
gap: var(--space-2);
flex-wrap: wrap;
margin-bottom: var(--space-1);
}
.tool-card__name {
font-size: 13px;
font-weight: var(--weight-semibold);
color: var(--text-primary);
}
.tool-card__badges { display: flex; gap: 4px; flex-wrap: wrap; }
.tool-card__desc {
font-size: 12px;
color: var(--text-muted);
margin: 0;
line-height: 1.5;
code {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-accent);
background: color-mix(in srgb, var(--color-accent) 8%, transparent);
border-radius: 3px;
padding: 1px 4px;
}
}
.tool-card__params { border-top: 1px solid var(--border-subtle); }
.tool-card__params-summary {
display: flex;
align-items: center;
gap: 6px;
padding: var(--space-2) var(--space-3);
font-size: 11px;
font-weight: var(--weight-semibold);
color: var(--text-muted);
cursor: pointer;
list-style: none;
&::-webkit-details-marker { display: none; }
&:hover { color: var(--text-primary); background: var(--bg-hover); }
}
.tool-card__chevron {
transition: transform var(--transition-fast);
.tool-card__params[open] & { transform: rotate(90deg); }
}
.tool-card__param-count {
margin-left: auto;
font-size: 10px;
background: var(--bg-hover);
color: var(--text-muted);
border-radius: 8px;
padding: 0 6px;
}
.tool-card__no-params {
font-size: 11px;
color: var(--text-muted);
padding: var(--space-1) var(--space-3) var(--space-2);
border-top: 1px solid var(--border-subtle);
margin: 0;
}
// ── Params table ──────────────────────────────────────────────────────────────
.params-table {
width: 100%;
border-collapse: collapse;
font-size: 11px;
th {
text-align: left;
padding: var(--space-1) var(--space-3);
font-weight: var(--weight-semibold);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
background: var(--bg-canvas);
border-bottom: 1px solid var(--border-subtle);
}
td {
padding: var(--space-1) var(--space-3);
border-bottom: 1px solid rgba(255, 255, 255, 0.03);
vertical-align: top;
}
tr:last-child td { border-bottom: none; }
}
.params-table__name { font-size: 11px; }
.params-table__desc {
color: var(--text-muted);
code {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-accent);
background: color-mix(in srgb, var(--color-accent) 8%, transparent);
border-radius: 3px;
padding: 1px 4px;
}
}
.param-type {
font-family: var(--font-mono);
font-size: 10px;
padding: 1px 5px;
border-radius: 3px;
&--string { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); }
&--integer,
&--number { background: color-mix(in srgb, var(--color-accent) 10%, transparent); color: var(--color-accent); }
&--boolean { background: color-mix(in srgb, var(--color-warning) 10%, transparent); color: var(--color-warning); }
&--array { background: color-mix(in srgb, var(--color-purple) 10%, transparent); color: var(--color-purple); }
&--object { background: color-mix(in srgb, var(--color-orange) 10%, transparent); color: var(--color-orange); }
&--any { background: var(--bg-hover); color: var(--text-muted); }
}
.req-star { color: var(--color-danger); font-weight: var(--weight-bold); }
.opt-dash { color: var(--border-default); }
// ── Resources ─────────────────────────────────────────────────────────────────
.resource-card {
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
padding: var(--space-3);
background: transparent;
transition: border-color var(--transition-fast), background var(--transition-fast);
&:hover { border-color: var(--border-default); background: rgba(255, 255, 255, 0.015); }
}
.resource-card__top {
display: flex;
align-items: flex-start;
gap: var(--space-2);
justify-content: space-between;
margin-bottom: 4px;
}
.resource-card__uri {
font-size: 11px;
word-break: break-all;
color: var(--color-orange);
}
.resource-card__mime {
font-size: 10px;
color: var(--text-muted);
flex-shrink: 0;
background: var(--bg-hover);
padding: 1px 5px;
border-radius: 3px;
}
.resource-card__name {
font-size: 12px;
font-weight: var(--weight-semibold);
color: var(--text-primary);
margin: 0 0 2px;
}
.resource-card__desc {
font-size: 11px;
color: var(--text-muted);
margin: 0;
line-height: 1.5;
code {
font-family: var(--font-mono);
font-size: 10px;
color: var(--color-orange);
background: color-mix(in srgb, var(--color-orange) 8%, transparent);
border-radius: 3px;
padding: 1px 4px;
}
}
// ── Prompts ───────────────────────────────────────────────────────────────────
.prompt-card {
border: 1px solid var(--border-subtle);
border-radius: var(--radius-sm);
padding: var(--space-3);
background: transparent;
transition: border-color var(--transition-fast), background var(--transition-fast);
&:hover { border-color: var(--border-default); background: rgba(255, 255, 255, 0.015); }
}
.prompt-card__header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
margin-bottom: var(--space-1);
}
.prompt-card__name {
font-size: 12px;
font-weight: var(--weight-semibold);
color: var(--color-danger);
}
.prompt-card__arg-count {
font-size: 10px;
color: var(--text-muted);
background: var(--bg-hover);
padding: 1px 6px;
border-radius: 8px;
}
.prompt-card__desc {
font-size: 12px;
color: var(--text-muted);
margin: 0 0 var(--space-2);
line-height: 1.5;
code {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-danger);
background: color-mix(in srgb, var(--color-danger) 8%, transparent);
border-radius: 3px;
padding: 1px 4px;
}
}
.prompt-card__args { display: flex; flex-direction: column; gap: 4px; }
.prompt-card__arg-chip {
font-size: 11px;
color: var(--text-muted);
line-height: 1.4;
code { font-size: 11px; color: var(--text-primary); }
}
.prompt-card__arg-hint { color: var(--text-muted); }
// ── Copy button ───────────────────────────────────────────────────────────────
.copy-btn {
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
padding: 2px;
border-radius: 3px;
&:hover { color: var(--text-primary); background: var(--bg-hover); }
}