@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.
485 lines (418 loc) • 11.5 kB
CSS
/* Session indicator — matches existing site-stats style */
.session-indicator {
display: flex;
align-items: center;
}
.session-indicator-wrapper {
position: relative;
}
/* Labeled box — mirrors the "1655 portfolio" / "72 collection" stat boxes */
.session-box {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.3rem;
padding: 0.25rem 0.6rem;
min-width: 8.5rem;
border: 1px solid var(--line, #c8d5e9);
border-radius: var(--radius-sm, 0.42rem);
background: var(--paper-strong, #fff);
color: var(--ink-700, #324563);
font-family: var(--font-body);
font-size: var(--step--1, 0.82rem);
cursor: pointer;
transition: border-color 0.15s, box-shadow 0.15s;
line-height: 1.4;
}
.session-box:hover {
border-color: var(--signal-2, #3b82f6);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--signal-2, #3b82f6) 15%, transparent);
}
.session-box[aria-expanded="true"] {
border-color: var(--signal, #1e40af);
}
.session-box-count {
font-weight: 700;
color: var(--ink-900, #18243a);
}
.session-box-label {
font-weight: 500;
}
.session-box-arrow {
display: inline-block;
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 5px solid var(--ink-500, #677893);
margin-left: 0.2rem;
transition: transform 0.15s;
}
.session-box[aria-expanded="true"] .session-box-arrow {
transform: rotate(180deg);
}
/* Dropdown panel */
.session-dropdown {
position: absolute;
top: calc(100% + 0.4rem);
right: 0;
width: min(34rem, calc(100vw - 1rem));
box-sizing: border-box;
background: var(--paper-strong, #fff);
border: 1px solid var(--line, #c8d5e9);
border-radius: var(--radius-md, 0.85rem);
box-shadow: var(--shadow-soft, 0 0.95rem 1.8rem -1.15rem rgba(17,40,74,0.28));
z-index: 200;
overflow: hidden;
}
.session-dropdown-heading {
padding: 0.5rem 0.75rem 0.3rem;
font-family: var(--font-heading);
font-size: var(--step--1, 0.82rem);
font-weight: 700;
color: var(--ink-500, #677893);
text-transform: uppercase;
letter-spacing: 0.04em;
border-bottom: 1px solid var(--line, #c8d5e9);
}
.session-dropdown-heading--toggle {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.session-dropdown-heading-label {
min-width: 0;
}
.session-dropdown-toggle-group {
display: inline-flex;
align-items: center;
gap: 0.45rem;
flex-shrink: 0;
}
.session-dropdown-toggle-label {
font-family: var(--font-mono, monospace);
font-size: 0.68rem;
font-weight: 700;
color: var(--ink-500, #677893);
text-transform: none;
letter-spacing: 0.02em;
}
.session-dropdown-switch {
--session-toggle-width: 3.8rem;
--session-toggle-height: 1.55rem;
appearance: none;
border: 1px solid var(--line, #c8d5e9);
border-radius: 999px;
background: var(--paper-strong, #fff);
color: var(--ink-700, #324563);
width: var(--session-toggle-width);
height: var(--session-toggle-height);
padding: 0;
cursor: pointer;
transition: border-color 0.15s, background 0.15s, color 0.15s;
position: relative;
display: inline-grid;
grid-template-columns: 1fr 1fr;
align-items: center;
overflow: hidden;
}
.session-dropdown-switch[data-state="on"] {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 12%, var(--paper-strong, #fff));
border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 45%, var(--line, #c8d5e9));
color: var(--signal, #1e40af);
}
.session-dropdown-switch:hover,
.session-dropdown-switch:focus-visible {
border-color: var(--signal-2, #3b82f6);
outline: none;
}
.session-dropdown-switch-label {
position: relative;
z-index: 1;
text-align: center;
font-family: var(--font-mono, monospace);
font-size: 0.66rem;
font-weight: 700;
color: var(--ink-500, #677893);
transition: color 0.15s;
}
.session-dropdown-switch[data-state="off"] .session-dropdown-switch-label--off,
.session-dropdown-switch[data-state="on"] .session-dropdown-switch-label--on {
color: var(--signal, #1e40af);
}
.session-dropdown-switch-thumb {
position: absolute;
top: 2px;
left: 2px;
width: calc((var(--session-toggle-width) - 6px) / 2);
height: calc(var(--session-toggle-height) - 6px);
border-radius: 999px;
background: color-mix(in srgb, var(--signal-2, #3b82f6) 16%, var(--paper-strong, #fff));
transition: transform 0.18s ease;
}
.session-dropdown-switch[data-state="on"] .session-dropdown-switch-thumb {
transform: translateX(calc((var(--session-toggle-width) - 6px) / 2));
}
.session-dropdown-divider {
height: 1px;
background: var(--line, #c8d5e9);
margin: 0.15rem 0;
}
.session-dropdown-item {
display: grid;
grid-template-columns: 1rem 8px minmax(0, 1fr) 5.5rem 6.75rem 4.5rem 1.2rem;
align-items: center;
column-gap: 0.7rem;
row-gap: 0.3rem;
padding: 0.55rem 0.9rem;
font-size: var(--step--1, 0.82rem);
cursor: pointer;
transition: background 0.1s;
user-select: none;
}
.session-dropdown-item--all {
grid-template-columns: 1rem 1fr auto;
}
.session-dropdown-item:hover {
background: var(--surface-1, #eaf1ff);
}
.session-dropdown-item--selected {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 8%, transparent);
}
.session-dropdown-item--selected:hover {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 14%, transparent);
}
.session-dropdown-check {
width: 1rem;
text-align: center;
font-size: 0.75rem;
font-weight: 700;
color: var(--signal, #1e40af);
flex-shrink: 0;
}
.session-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--signal-2, #3b82f6);
flex-shrink: 0;
}
.session-dropdown-name {
font-weight: 600;
color: var(--ink-900, #18243a);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.session-dropdown-primary {
min-width: 0;
display: flex;
flex-direction: column;
gap: 0.18rem;
align-self: center;
}
.session-dropdown-meta {
display: flex;
align-items: center;
gap: 0.35rem;
min-width: 0;
flex-wrap: wrap;
}
.session-dropdown-version {
font-size: 0.7rem;
font-family: var(--font-mono, monospace);
color: var(--ink-500, #677893);
white-space: nowrap;
}
.session-dropdown-update {
display: inline-flex;
align-items: center;
padding: 1px 5px;
border-radius: 999px;
font-size: 0.62rem;
font-weight: 700;
letter-spacing: 0.04em;
background: #ecfdf5;
color: #166534;
border: 1px solid #86efac;
white-space: nowrap;
}
.session-dropdown-uptime {
font-size: 0.7rem;
font-family: var(--font-mono, monospace);
color: var(--ink-500, #677893);
white-space: nowrap;
text-align: right;
min-width: 4.5rem;
justify-self: end;
}
.session-dropdown-role {
font-size: 0.65rem;
font-weight: 600;
color: var(--ink-500, #677893);
text-transform: uppercase;
letter-spacing: 0.04em;
}
/* Dark theme overrides */
[data-theme="dark"] .session-box {
background: var(--paper-strong, #1a1a2e);
border-color: var(--line, #2a3a5e);
color: var(--ink-500, #8899bb);
}
[data-theme="dark"] .session-box-count {
color: var(--ink-900, #e0e8f0);
}
[data-theme="dark"] .session-dropdown {
background: var(--paper-strong, #1a1a2e);
border-color: var(--line, #2a3a5e);
}
[data-theme="dark"] .session-dropdown-item:hover {
background: var(--surface-1, #1e2848);
}
[data-theme="dark"] .session-dropdown-item--selected {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 12%, transparent);
}
[data-theme="dark"] .session-dropdown-check {
color: var(--signal-2, #3b82f6);
}
[data-theme="dark"] .session-dropdown-divider {
background: var(--line, #2a3a5e);
}
[data-theme="dark"] .session-dropdown-name {
color: var(--ink-900, #e0e8f0);
}
[data-theme="dark"] .session-dropdown-version {
color: var(--ink-500, #8899bb);
}
[data-theme="dark"] .session-dropdown-update {
background: #052e16;
color: #bbf7d0;
border-color: #166534;
}
[data-theme="dark"] .session-dropdown-toggle-label {
color: var(--ink-500, #8899bb);
}
[data-theme="dark"] .session-dropdown-switch {
background: var(--paper-strong, #1a1a2e);
border-color: var(--line, #2a3a5e);
color: var(--ink-900, #e0e8f0);
}
[data-theme="dark"] .session-dropdown-switch[data-state="on"] {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 18%, var(--paper-strong, #1a1a2e));
border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 55%, var(--line, #2a3a5e));
color: var(--signal-2, #93c5fd);
}
[data-theme="dark"] .session-dropdown-switch-label {
color: var(--ink-500, #8899bb);
}
[data-theme="dark"] .session-dropdown-switch[data-state="off"] .session-dropdown-switch-label--off,
[data-theme="dark"] .session-dropdown-switch[data-state="on"] .session-dropdown-switch-label--on {
color: var(--signal-2, #93c5fd);
}
[data-theme="dark"] .session-dropdown-switch-thumb {
background: color-mix(in srgb, var(--signal-2, #3b82f6) 24%, var(--paper-strong, #1a1a2e));
}
/* Kill button */
.session-kill-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 1.2rem;
height: 1.2rem;
border: none;
border-radius: 50%;
background: transparent;
color: var(--ink-500, #677893);
font-size: 0.85rem;
font-weight: 600;
cursor: pointer;
flex-shrink: 0;
transition: background 0.15s, color 0.15s;
line-height: 1;
padding: 0;
}
.session-kill-btn:hover {
background: color-mix(in srgb, #ef4444 12%, var(--paper-strong, #fff));
color: #dc2626;
}
/* Session badge on log entries */
.log-session-badge {
display: inline-block;
padding: 0 0.35rem;
border-radius: 3px;
font-size: 0.65rem;
font-weight: 600;
color: var(--ink-900, #18243a);
background: var(--surface-1, #eaf1ff);
margin-right: 0.35rem;
vertical-align: middle;
line-height: 1.4;
letter-spacing: 0.02em;
}
/* Session status badges — auth + client indicators (#1805)
* Two independent dimensions, each with:
* - Shape (filled/empty circle for auth, checkmark/X for client)
* - Text label (always present for accessibility)
* - Color (blue=positive, orange=negative — colorblind-safe pair)
*/
.session-status-badge {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 2px 7px;
border-radius: 5px;
font-size: 10px;
font-weight: 600;
letter-spacing: 0.04em;
white-space: nowrap;
text-align: center;
min-width: 4.75rem;
box-sizing: border-box;
}
.session-dropdown-item > .session-status-badge {
justify-self: center;
}
.session-dropdown-badge-stack {
display: flex;
flex-direction: column;
align-items: center;
justify-self: center;
gap: 0.24rem;
width: 100%;
max-width: 6.75rem;
}
.session-dropdown-client-label {
font-size: 0.62rem;
line-height: 1.15;
color: var(--ink-500, #677893);
text-align: center;
width: 100%;
}
.session-status-badge[data-status="positive"] {
background: #eff6ff;
color: #1e40af;
border: 1px solid #bfdbfe;
}
.session-status-badge[data-status="negative"] {
background: #fff7ed;
color: #9a3412;
border: 1px solid #fed7aa;
}
[data-theme="dark"] .session-status-badge[data-status="positive"] {
background: #172554;
color: #93c5fd;
border-color: #1e40af;
}
[data-theme="dark"] .session-status-badge[data-status="negative"] {
background: #431407;
color: #fdba74;
border-color: #9a3412;
}
[data-theme="dark"] .session-dropdown-client-label {
color: var(--ink-500, #8899bb);
}
/* Session filter in the log viewer */
#log-session-filter {
min-width: 120px;
}