@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
397 lines (336 loc) • 7.46 kB
CSS
/* Auth tab styles (#1791) — follows permissions.css patterns */
/* Intro explainer (#1816) */
/* Intro card spans the full grid width */
.sec-card--intro {
grid-column: 1 / -1;
}
.sec-intro-summary {
font-weight: 400;
font-size: 0.8125rem;
color: var(--ink-500, #6b7a8d);
}
.sec-intro-subtitle {
margin: 1.25rem 0 0.5rem;
font-size: 0.8125rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--ink-500, #6b7a8d);
}
.sec-intro-content p {
font-size: 0.875rem;
line-height: 1.7;
color: var(--ink-700, #324563);
margin: 0 0 0.5rem;
}
.sec-intro-list {
margin: 0.25rem 0 0 1.25rem;
padding: 0;
font-size: 0.8125rem;
line-height: 1.7;
color: var(--ink-700, #324563);
}
.sec-intro-list li {
margin-bottom: 0.625rem;
}
.sec-intro-list li strong {
color: var(--ink-900, #18243a);
}
/* Intro doc link */
.sec-intro-link {
font-size: 0.8125rem;
font-weight: 600;
color: var(--signal, #1e40af);
text-decoration: none;
}
.sec-intro-link:hover {
text-decoration: underline;
}
/* Dashboard grid — single column keeps cards readable at all widths.
The token card has too much metadata for a half-width column. */
.sec-dashboard {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
padding: 1rem;
max-width: 720px;
margin: 0 auto;
}
@media (min-width: 900px) {
.sec-dashboard {
grid-template-columns: 1fr 1fr;
max-width: 1200px;
}
}
/* Cards */
.sec-card {
background: var(--paper-strong, #ffffff);
border: 1px solid var(--line, #c8d5e9);
border-radius: 0.5rem;
overflow: hidden;
}
.sec-card--wide {
grid-column: 1 / -1;
}
.sec-card-header {
padding: 0.75rem 1rem;
background: var(--paper-base, #f8fbff);
border-bottom: 1px solid var(--line, #c8d5e9);
}
.sec-card-title {
margin: 0;
font-size: 0.875rem;
font-weight: 600;
color: var(--ink-900, #18243a);
}
/* Collapse/expand — intro card only */
.sec-card--intro .sec-card-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
border: none;
border-bottom: 1px solid var(--line, #c8d5e9);
cursor: pointer;
user-select: none;
font: inherit;
color: inherit;
text-align: left;
}
.sec-card--intro .sec-card-header:hover {
background: var(--surface-2, #f8fbff);
}
.sec-card-toggle {
font-size: 0.75rem;
color: var(--ink-500, #6b7a8d);
transition: transform 0.2s;
}
.sec-card[data-collapsed="true"] .sec-card-body {
display: none;
}
.sec-card[data-collapsed="true"] .sec-card-toggle {
transform: rotate(-90deg);
}
.sec-card-body {
padding: 1rem;
}
/* Token display */
.sec-token-row {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 1rem;
flex-wrap: wrap;
}
.sec-token-value {
font-family: var(--font-mono, monospace);
font-size: 0.8125rem;
background: var(--surface-1, #eaf1ff);
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
word-break: break-all;
flex: 1;
min-width: 0;
}
/* Metadata grid */
.sec-meta-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 0.5rem;
margin-bottom: 1rem;
}
.sec-meta {
font-size: 0.8125rem;
color: var(--ink-700, #324563);
}
.sec-meta code {
font-size: 0.75rem;
background: var(--surface-1, #eaf1ff);
padding: 0.125rem 0.25rem;
border-radius: 0.1875rem;
word-break: break-all;
}
.sec-meta-inline {
font-size: 0.8125rem;
color: var(--ink-500, #6b7a8d);
margin-left: 0.5rem;
}
.sec-label {
font-weight: 600;
color: var(--ink-900, #18243a);
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.04em;
margin-right: 0.25rem;
}
/* TOTP status */
.sec-totp-status {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.75rem;
font-size: 0.875rem;
}
.sec-status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
.sec-status-dot--green {
background: #22c55e;
box-shadow: 0 0 6px rgba(34, 197, 94, 0.5);
}
.sec-status-dot--amber {
background: #f59e0b;
box-shadow: 0 0 6px rgba(245, 158, 11, 0.5);
}
/* Buttons */
.sec-btn {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.375rem 0.75rem;
border: 1px solid var(--line, #c8d5e9);
border-radius: 0.375rem;
background: var(--paper-strong, #ffffff);
color: var(--ink-900, #18243a);
font-family: var(--font-mono, monospace);
font-size: 0.75rem;
font-weight: 600;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.sec-btn:hover { background: var(--surface-2, #f8fbff); }
.sec-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.sec-btn--sm {
padding: 0.25rem 0.5rem;
font-size: 0.6875rem;
}
.sec-btn--primary {
background: var(--signal, #1e40af);
color: #ffffff;
border-color: var(--signal, #1e40af);
}
.sec-btn--primary:hover { background: var(--signal-2, #3b82f6); }
.sec-btn--danger {
background: #b91c1c;
color: #ffffff;
border-color: #b91c1c;
}
.sec-btn--danger:hover { background: #dc2626; }
.sec-actions {
display: flex;
gap: 0.5rem;
margin-top: 0.75rem;
}
/* Hints */
.sec-hint {
font-size: 0.8125rem;
color: var(--ink-500, #6b7a8d);
margin: 0.5rem 0;
}
.sec-hint--warn {
color: #b45309;
font-weight: 600;
}
.sec-error {
color: #b91c1c;
padding: 1rem;
}
/* Enrollment flow */
.sec-enroll-flow h4 {
margin: 0 0 0.75rem;
font-size: 0.875rem;
}
.sec-qr-container {
display: flex;
justify-content: center;
margin: 1rem 0;
}
.sec-qr-img {
width: 200px;
height: 200px;
border: 1px solid var(--line, #c8d5e9);
border-radius: 0.5rem;
padding: 0.5rem;
background: #ffffff;
}
.sec-confirm-form {
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
margin-top: 1rem;
}
.sec-confirm-form label {
width: 100%;
font-size: 0.8125rem;
font-weight: 600;
color: var(--ink-700, #324563);
margin-bottom: 0.25rem;
}
.sec-input {
font-family: var(--font-mono, monospace);
font-size: 1.125rem;
padding: 0.5rem 0.75rem;
border: 1px solid var(--line, #c8d5e9);
border-radius: 0.375rem;
background: var(--paper-strong, #ffffff);
color: var(--ink-900, #18243a);
width: 10ch;
text-align: center;
letter-spacing: 0.2em;
}
/* Backup codes */
.sec-backup-codes h4 {
margin: 0 0 0.5rem;
}
.sec-codes-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 0.375rem;
margin: 0.75rem 0;
}
.sec-code {
font-family: var(--font-mono, monospace);
font-size: 0.875rem;
background: var(--surface-1, #eaf1ff);
padding: 0.375rem 0.5rem;
border-radius: 0.25rem;
text-align: center;
letter-spacing: 0.05em;
}
/* Responsive */
@media (max-width: 768px) {
.sec-dashboard {
grid-template-columns: 1fr;
}
.sec-meta-grid {
grid-template-columns: 1fr;
}
}
/* Dark mode */
[data-theme="dark"] .sec-card {
background: var(--paper-strong, #1a1a2e);
border-color: var(--line, #2d3748);
}
[data-theme="dark"] .sec-card-header {
background: var(--paper-base, #161625);
}
[data-theme="dark"] .sec-token-value,
[data-theme="dark"] .sec-meta code,
[data-theme="dark"] .sec-code {
background: var(--surface-1, #1e293b);
}
[data-theme="dark"] .sec-qr-img {
background: #ffffff;
}
[data-theme="dark"] .sec-input {
background: var(--paper-strong, #1a1a2e);
color: var(--ink-100, #e2e8f0);
border-color: var(--line, #2d3748);
}
[data-theme="dark"] .sec-hint--warn {
color: #fbbf24;
}