Files
clawpanel/src/engines/hermes/style/hermes.css
2026-05-24 07:38:42 +08:00

7048 lines
189 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Hermes Agent — Editorial Luxury UI
* ----------------------------------------------------------
* Style archetype: Minimal Single Column + Liquid Glass hints
* Mood: editorial, premium, sophisticated (Hermes = messenger of the gods)
* Palette: warm black + muted gold (#CA8A04) + warm off-white
* Typography: Serif display (Playfair → Georgia fallback)
* + Inter body + JetBrains Mono code
*
* Scoped under `[data-engine="hermes"]`. OpenClaw is never touched.
*
* Design principles:
* 1. Restraint over density. Lots of whitespace.
* 2. Hairline borders, never heavy fills.
* 3. ONE accent color (gold). Use sparingly.
* 4. Serif italic for editorial eyebrow labels.
* 5. Subtle radial glow for depth, NEVER hard shadows.
* 6. Hover = color shift + 1px border, never scale/translate.
*/
/* ==========================================================================
* 0 · Design tokens — light theme (warm off-white, gold)
* ==========================================================================
*/
[data-engine="hermes"] {
/* Surfaces — warm, paper-like */
--hm-surface-0: #FAFAF9; /* page background (warm off-white) */
--hm-surface-1: #ffffff; /* raised panel */
--hm-surface-2: #F5F5F4; /* subtle inset / hover */
--hm-surface-3: #E7E5E4; /* input background */
/* Hairline borders */
--hm-border: rgba(28, 25, 23, 0.08);
--hm-border-subtle: rgba(28, 25, 23, 0.04);
--hm-border-strong: rgba(28, 25, 23, 0.20);
/* Text — warm not cool */
--hm-text-primary: #1C1917; /* stone-900 */
--hm-text-secondary: #44403C; /* stone-700 */
--hm-text-tertiary: #78716C; /* stone-500 */
--hm-text-muted: #A8A29E; /* stone-400 */
--hm-text-inverse: #FAFAF9;
/* Gold accent — the only feature color */
--hm-accent: #CA8A04; /* amber-600 */
--hm-accent-hover: #A16207; /* amber-700 */
--hm-accent-soft: rgba(202, 138, 4, 0.08);
--hm-accent-ring: rgba(202, 138, 4, 0.22);
/* State colors — desaturated, editorial */
--hm-success: #65A30D; /* lime-600 */
--hm-success-soft: rgba(101, 163, 13, 0.10);
--hm-error: #B91C1C; /* red-700 */
--hm-error-soft: rgba(185, 28, 28, 0.08);
--hm-warn: #B45309; /* amber-700 */
--hm-warn-soft: rgba(180, 83, 9, 0.08);
--hm-info: #0369A1; /* sky-700 */
--hm-info-soft: rgba(3, 105, 161, 0.08);
/* Fonts — editorial stack, no network imports */
--hm-font-serif: 'Playfair Display', 'Cormorant Garamond', 'Iowan Old Style',
'Palatino Linotype', Palatino, Georgia, 'Times New Roman',
'Noto Serif SC', 'Source Han Serif SC', serif;
--hm-font-sans: 'Inter', 'IBM Plex Sans', -apple-system, BlinkMacSystemFont,
'Segoe UI', 'PingFang SC', 'Noto Sans SC', sans-serif;
--hm-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Mono',
'Fira Code', Consolas, 'Liberation Mono', monospace;
/* Radii — soft but not round */
--hm-radius-sm: 4px;
--hm-radius-md: 8px;
--hm-radius-lg: 12px;
--hm-radius-xl: 20px;
/* Shadows — no heavy drops; a warm ring instead */
--hm-shadow-sm: 0 1px 0 rgba(28, 25, 23, 0.03);
--hm-shadow-md: 0 1px 2px rgba(28, 25, 23, 0.04),
0 8px 24px rgba(28, 25, 23, 0.04);
--hm-shadow-lg: 0 2px 4px rgba(28, 25, 23, 0.04),
0 24px 48px rgba(28, 25, 23, 0.06);
--hm-glow-gold: 0 0 0 1px var(--hm-accent-ring),
0 12px 32px rgba(202, 138, 4, 0.15);
/* Motion — slower, more deliberate */
--hm-ease: cubic-bezier(0.22, 1, 0.36, 1);
--hm-ease-serif: cubic-bezier(0.4, 0, 0.2, 1);
--hm-dur-fast: 180ms;
--hm-dur-normal: 280ms;
--hm-dur-slow: 500ms;
}
/* Dark theme overrides — warm black, not cool slate */
[data-theme="dark"] [data-engine="hermes"],
[data-engine="hermes"][data-theme="dark"] {
--hm-surface-0: #0C0A09; /* stone-950 warm black */
--hm-surface-1: #1C1917; /* stone-900 */
--hm-surface-2: #292524; /* stone-800 */
--hm-surface-3: #44403C; /* stone-700 */
--hm-border: rgba(250, 250, 249, 0.08);
--hm-border-subtle: rgba(250, 250, 249, 0.04);
--hm-border-strong: rgba(250, 250, 249, 0.20);
--hm-text-primary: #FAFAF9;
--hm-text-secondary: #D6D3D1; /* stone-300 */
--hm-text-tertiary: #A8A29E; /* stone-400 */
--hm-text-muted: #78716C; /* stone-500 */
--hm-text-inverse: #1C1917;
--hm-accent: #EAB308; /* amber-500 slightly brighter for dark */
--hm-accent-hover: #FACC15; /* amber-400 */
--hm-accent-soft: rgba(234, 179, 8, 0.12);
--hm-accent-ring: rgba(234, 179, 8, 0.28);
--hm-success: #84CC16; /* lime-500 */
--hm-success-soft: rgba(132, 204, 22, 0.14);
--hm-error: #EF4444; /* red-500 */
--hm-error-soft: rgba(239, 68, 68, 0.12);
--hm-warn: #F59E0B; /* amber-500 */
--hm-warn-soft: rgba(245, 158, 11, 0.12);
--hm-info: #0EA5E9; /* sky-500 */
--hm-info-soft: rgba(14, 165, 233, 0.12);
--hm-shadow-sm: 0 1px 0 rgba(0, 0, 0, 0.3);
--hm-shadow-md: 0 1px 2px rgba(0, 0, 0, 0.4),
0 8px 24px rgba(0, 0, 0, 0.4);
--hm-shadow-lg: 0 2px 4px rgba(0, 0, 0, 0.4),
0 24px 60px rgba(0, 0, 0, 0.6);
--hm-glow-gold: 0 0 0 1px var(--hm-accent-ring),
0 12px 40px rgba(234, 179, 8, 0.22);
}
/* ==========================================================================
* 1 · Page shell — editorial breathing room
* ==========================================================================
*/
[data-engine="hermes"].page {
/* 移除 1280px 硬限,宽屏填满;水平 padding 自适应避免内容贴边 */
padding: 40px clamp(20px, 3.5vw, 64px) 64px;
width: 100%;
font-family: var(--hm-font-sans);
color: var(--hm-text-primary);
background: var(--hm-surface-0);
position: relative;
font-feature-settings: 'ss01', 'cv11';
font-size: 14px;
line-height: 1.55;
letter-spacing: -0.005em;
}
/* ==========================================================================
* 2 · Hero — editorial big serif title
* ==========================================================================
*/
[data-engine="hermes"] .hm-hero {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 32px;
padding: 32px 0 28px;
margin-bottom: 32px;
border-bottom: 1px solid var(--hm-border);
position: relative;
}
/* Very subtle gold shimmer behind the title */
[data-engine="hermes"] .hm-hero::before {
content: '';
position: absolute;
top: -40px;
left: -80px;
width: 400px;
height: 280px;
background: radial-gradient(
ellipse at top left,
var(--hm-accent-soft) 0%,
transparent 60%
);
pointer-events: none;
z-index: 0;
opacity: 0;
transition: opacity var(--hm-dur-slow) var(--hm-ease);
}
[data-engine="hermes"] .hm-hero[data-state="running"]::before { opacity: 1; }
[data-engine="hermes"] .hm-hero-title,
[data-engine="hermes"] .hm-hero-actions {
position: relative;
z-index: 1;
}
[data-engine="hermes"] .hm-hero-title {
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-hero-eyebrow {
display: inline-flex;
align-items: center;
gap: 10px;
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
font-weight: 400;
color: var(--hm-accent);
margin-bottom: 14px;
letter-spacing: 0.02em;
text-transform: none;
}
[data-engine="hermes"] .hm-hero-eyebrow::after {
content: '';
width: 24px;
height: 1px;
background: var(--hm-accent);
opacity: 0.4;
margin-left: 4px;
}
[data-engine="hermes"] .hm-hero-h1 {
font-family: var(--hm-font-serif);
font-size: 44px;
font-weight: 500;
line-height: 1.05;
letter-spacing: -0.02em;
color: var(--hm-text-primary);
margin: 0 0 10px 0;
font-feature-settings: 'liga', 'dlig', 'kern';
}
[data-engine="hermes"] .hm-hero-sub {
font-family: var(--hm-font-mono);
font-size: 12px;
color: var(--hm-text-tertiary);
letter-spacing: 0.02em;
}
[data-engine="hermes"] .hm-hero-actions {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
/* Live dot — pulsing gold when running, warm red when stopped */
[data-engine="hermes"] .hm-dot {
width: 7px;
height: 7px;
border-radius: 50%;
display: inline-block;
position: relative;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-dot.hm-dot--run {
background: var(--hm-accent);
box-shadow: 0 0 0 3px var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-dot.hm-dot--run::after {
content: '';
position: absolute;
inset: -3px;
border-radius: 50%;
background: var(--hm-accent);
opacity: 0.3;
animation: hm-pulse 2.4s var(--hm-ease-serif) infinite;
}
[data-engine="hermes"] .hm-dot.hm-dot--stop {
background: var(--hm-error);
box-shadow: 0 0 0 3px var(--hm-error-soft);
}
[data-engine="hermes"] .hm-dot.hm-dot--idle {
background: var(--hm-text-muted);
box-shadow: 0 0 0 3px rgba(168, 162, 158, 0.15);
}
@keyframes hm-pulse {
0% { transform: scale(1); opacity: 0.5; }
70% { transform: scale(3); opacity: 0; }
100% { transform: scale(3); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
[data-engine="hermes"] .hm-dot::after { animation: none; }
}
/* ==========================================================================
* 3 · KPI grid — editorial data cards
* ==========================================================================
*/
[data-engine="hermes"] .hm-kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
/* Removed the gap+background "bleed" trick — it caused empty grid
cells (when card count ≠ columns × rows) to render as visible
placeholder rectangles. Instead, draw hairline dividers with
per-card inset box-shadows; empty cells stay blank. */
gap: 0;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
margin-bottom: 40px;
overflow: hidden;
}
[data-engine="hermes"] .hm-kpi {
position: relative;
padding: 22px 24px 20px;
background: var(--hm-surface-1);
/* Hairline dividers using inset shadow so they only draw on cells
that actually contain a card, never on empty grid slots. */
box-shadow:
inset -1px 0 0 var(--hm-border),
inset 0 -1px 0 var(--hm-border);
transition: background var(--hm-dur-normal) var(--hm-ease);
overflow: hidden;
}
[data-engine="hermes"] .hm-kpi:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-kpi.hm-kpi--link {
cursor: pointer;
border: none;
font: inherit;
text-align: left;
color: inherit;
width: 100%;
}
[data-engine="hermes"] .hm-kpi.hm-kpi--link::after {
content: '→';
position: absolute;
top: 24px;
right: 24px;
color: var(--hm-text-muted);
font-size: 14px;
transition: transform var(--hm-dur-normal) var(--hm-ease),
color var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-kpi.hm-kpi--link:hover::after {
transform: translateX(4px);
color: var(--hm-accent);
}
/* Tone = tiny thin underline under the label, not a bar */
[data-engine="hermes"] .hm-kpi-label {
display: inline-flex;
align-items: center;
gap: 6px;
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 12px;
font-weight: 400;
color: var(--hm-text-tertiary);
margin-bottom: 14px;
text-transform: none;
letter-spacing: 0.01em;
}
[data-engine="hermes"] .hm-kpi[data-tone="success"] .hm-kpi-label { color: var(--hm-success); }
[data-engine="hermes"] .hm-kpi[data-tone="error"] .hm-kpi-label { color: var(--hm-error); }
[data-engine="hermes"] .hm-kpi[data-tone="warn"] .hm-kpi-label { color: var(--hm-warn); }
[data-engine="hermes"] .hm-kpi[data-tone="info"] .hm-kpi-label { color: var(--hm-info); }
[data-engine="hermes"] .hm-kpi[data-tone="accent"] .hm-kpi-label { color: var(--hm-accent); }
[data-engine="hermes"] .hm-kpi-label .hm-kpi-icon,
[data-engine="hermes"] .hm-kpi-label svg {
width: 12px;
height: 12px;
opacity: 0.65;
}
[data-engine="hermes"] .hm-kpi-value {
font-family: var(--hm-font-serif);
font-size: 26px;
font-weight: 500;
line-height: 1.1;
color: var(--hm-text-primary);
letter-spacing: -0.015em;
display: flex;
align-items: baseline;
gap: 8px;
flex-wrap: wrap;
word-break: break-word;
}
[data-engine="hermes"] .hm-kpi-value .hm-kpi-unit {
font-family: var(--hm-font-mono);
font-size: 11px;
font-weight: 400;
color: var(--hm-text-muted);
letter-spacing: 0.02em;
}
[data-engine="hermes"] .hm-kpi-foot {
margin-top: 10px;
font-family: var(--hm-font-mono);
font-size: 11px;
color: var(--hm-text-muted);
display: flex;
align-items: center;
gap: 8px;
letter-spacing: 0.02em;
text-transform: lowercase;
}
[data-engine="hermes"] .hm-kpi-foot .hm-kpi-delta {
color: var(--hm-success);
font-weight: 500;
}
[data-engine="hermes"] .hm-kpi-foot .hm-kpi-delta--down {
color: var(--hm-error);
}
[data-engine="hermes"] .hm-native-dashboard-hint {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 10px;
margin: -8px 2px 20px;
color: var(--hm-text-muted);
font-family: var(--hm-font-mono);
font-size: 11px;
}
[data-engine="hermes"] .hm-native-dashboard-link {
border: 0;
background: transparent;
color: var(--hm-text-secondary);
font: inherit;
cursor: pointer;
padding: 0;
text-decoration: underline;
text-decoration-color: color-mix(in srgb, currentColor 30%, transparent);
text-underline-offset: 3px;
}
[data-engine="hermes"] .hm-native-dashboard-link:hover {
color: var(--hm-accent);
}
/* ==========================================================================
* 4 · Panel — clean section container
* ==========================================================================
*/
[data-engine="hermes"] .hm-panel {
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
margin-bottom: 24px;
overflow: hidden;
/* Soft paper-lift elevation on cream page — gives cards presence
without breaking the whisper-thin editorial aesthetic. */
box-shadow:
0 1px 2px rgba(28, 25, 23, 0.03),
0 2px 6px rgba(28, 25, 23, 0.035);
transition: border-color var(--hm-dur-normal) var(--hm-ease),
box-shadow var(--hm-dur-normal) var(--hm-ease);
}
[data-theme="dark"] [data-engine="hermes"] .hm-panel {
/* In dark mode the warm-black surfaces already read as elevated; drop
the drop-shadow so we don't muddy the depth. */
box-shadow: none;
}
/* Allow absolute-positioned children to escape the panel boundary. */
[data-engine="hermes"] .hm-panel.hm-panel--allow-overflow {
overflow: visible;
}
[data-engine="hermes"] .hm-panel-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 20px 28px 18px;
border-bottom: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-panel-header.hm-panel-header--toggle {
cursor: pointer;
transition: background var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-panel-header.hm-panel-header--toggle:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-panel-title {
font-family: var(--hm-font-serif);
font-size: 17px;
font-weight: 500;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
display: flex;
align-items: center;
gap: 10px;
text-transform: none;
}
/* editorial italic style instead of uppercase ops */
[data-engine="hermes"] .hm-panel-title::before {
content: '';
font-family: var(--hm-font-serif);
font-style: italic;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-panel-title .hm-panel-title-icon {
width: 15px;
height: 15px;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-panel-title .hm-panel-title-count {
padding: 2px 9px;
background: var(--hm-accent-soft);
border-radius: 999px;
font-family: var(--hm-font-mono);
font-size: 10.5px;
font-weight: 500;
color: var(--hm-accent);
letter-spacing: 0.02em;
font-style: normal;
margin-left: 4px;
}
[data-engine="hermes"] .hm-panel-actions {
display: flex;
align-items: center;
gap: 10px;
}
[data-engine="hermes"] .hm-panel-body {
padding: 24px 28px 26px;
}
[data-engine="hermes"] .hm-panel-body--tight {
padding: 16px 24px 18px;
}
[data-engine="hermes"] .hm-panel-body--none {
padding: 0;
}
[data-engine="hermes"] .hm-panel-chevron {
width: 14px;
height: 14px;
color: var(--hm-text-tertiary);
transition: transform var(--hm-dur-normal) var(--hm-ease);
}
[data-engine="hermes"] .hm-panel-header.is-open .hm-panel-chevron {
transform: rotate(180deg);
}
/* ==========================================================================
* 5 · Buttons — editorial restraint
* ==========================================================================
*/
[data-engine="hermes"] .hm-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
padding: 9px 18px;
min-height: 44px;
height: 44px;
border-radius: var(--hm-radius-sm);
border: 1px solid var(--hm-border-strong);
background: transparent;
color: var(--hm-text-primary);
font-family: var(--hm-font-sans);
font-size: 13px;
font-weight: 500;
letter-spacing: 0.005em;
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
white-space: nowrap;
user-select: none;
}
[data-engine="hermes"] .hm-btn:hover:not(:disabled) {
border-color: var(--hm-text-primary);
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-btn:active:not(:disabled) { opacity: 0.85; }
[data-engine="hermes"] .hm-btn:disabled { opacity: 0.4; cursor: not-allowed; }
[data-engine="hermes"] .hm-btn:focus-visible {
outline: none;
box-shadow: 0 0 0 3px var(--hm-accent-ring);
border-color: var(--hm-accent);
}
[data-engine="hermes"] .hm-btn--sm {
min-height: 44px;
height: 44px;
padding: 8px 14px;
font-size: 12px;
}
/* Primary = gold fill (the hero CTA) */
[data-engine="hermes"] .hm-btn--primary {
background: var(--hm-text-primary);
color: var(--hm-text-inverse);
border-color: var(--hm-text-primary);
font-weight: 500;
}
[data-engine="hermes"] .hm-btn--primary:hover:not(:disabled) {
background: var(--hm-surface-2);
color: var(--hm-text-primary);
border-color: var(--hm-text-primary);
}
[data-theme="dark"] [data-engine="hermes"] .hm-btn--primary {
background: var(--hm-text-primary);
color: var(--hm-text-inverse);
}
[data-theme="dark"] [data-engine="hermes"] .hm-btn--primary:hover:not(:disabled) {
background: var(--hm-surface-3);
color: var(--hm-text-primary);
}
/* CTA = the main action, gold */
[data-engine="hermes"] .hm-btn--cta {
background: var(--hm-accent);
color: #1C1917;
border-color: var(--hm-accent);
font-family: var(--hm-font-serif);
font-weight: 500;
font-size: 13px;
letter-spacing: 0.005em;
padding: 9px 22px;
}
[data-engine="hermes"] .hm-btn--cta:hover:not(:disabled) {
background: var(--hm-accent-hover);
border-color: var(--hm-accent-hover);
box-shadow: var(--hm-glow-gold);
}
[data-theme="dark"] [data-engine="hermes"] .hm-btn--cta {
color: #0C0A09;
}
[data-engine="hermes"] .hm-btn--danger {
color: var(--hm-error);
border-color: transparent;
background: var(--hm-error-soft);
}
[data-engine="hermes"] .hm-btn--danger:hover:not(:disabled) {
background: var(--hm-error);
color: var(--hm-text-inverse);
border-color: var(--hm-error);
}
[data-engine="hermes"] .hm-btn--ghost {
background: transparent;
border-color: transparent;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-btn--ghost:hover:not(:disabled) {
color: var(--hm-text-primary);
background: var(--hm-surface-2);
border-color: var(--hm-border);
}
[data-engine="hermes"] .hm-btn--icon {
width: 34px;
height: 34px;
padding: 0;
background: transparent;
border: 1px solid transparent;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-btn--icon:hover:not(:disabled) {
color: var(--hm-accent);
border-color: transparent;
background: var(--hm-accent-soft);
}
/* ==========================================================================
* 6 · Pills — minimal tag selectors
* ==========================================================================
*/
[data-engine="hermes"] .hm-pills {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
[data-engine="hermes"] .hm-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 14px;
background: transparent;
border: 1px solid var(--hm-border);
border-radius: 999px;
font-family: var(--hm-font-sans);
font-size: 12px;
font-weight: 500;
color: var(--hm-text-secondary);
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
user-select: none;
white-space: nowrap;
letter-spacing: 0.01em;
}
[data-engine="hermes"] .hm-pill:hover {
border-color: var(--hm-text-secondary);
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-pill.is-active {
background: var(--hm-text-primary);
border-color: var(--hm-text-primary);
color: var(--hm-text-inverse);
font-weight: 500;
}
[data-engine="hermes"] .hm-pill.is-active::before {
content: '';
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--hm-accent);
box-shadow: 0 0 0 2px rgba(202, 138, 4, 0.25);
}
/* ==========================================================================
* 7 · Form controls — understated, print-inspired
* ==========================================================================
*/
[data-engine="hermes"] .hm-field {
display: flex;
flex-direction: column;
gap: 8px;
}
[data-engine="hermes"] .hm-field-label {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 12px;
font-weight: 400;
color: var(--hm-text-tertiary);
letter-spacing: 0.01em;
text-transform: none;
display: inline-flex;
align-items: center;
gap: 6px;
}
[data-engine="hermes"] .hm-input {
font-family: var(--hm-font-mono);
font-size: 13px;
line-height: 1.5;
padding: 10px 14px;
min-height: 44px;
height: 44px;
border: 1px solid var(--hm-border);
background: var(--hm-surface-0);
color: var(--hm-text-primary);
border-radius: var(--hm-radius-sm);
transition: border-color var(--hm-dur-fast) var(--hm-ease),
box-shadow var(--hm-dur-fast) var(--hm-ease),
background var(--hm-dur-fast) var(--hm-ease);
width: 100%;
outline: none;
}
[data-engine="hermes"] .hm-input:focus {
border-color: var(--hm-accent);
box-shadow: 0 0 0 3px var(--hm-accent-ring);
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-input::placeholder {
color: var(--hm-text-muted);
opacity: 0.7;
}
[data-engine="hermes"] .hm-field-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 16px;
}
/* ==========================================================================
* 8 · Code & terminal blocks
* ==========================================================================
*/
[data-engine="hermes"] .hm-code {
display: inline-block;
padding: 2px 8px;
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
border-radius: 3px;
font-family: var(--hm-font-mono);
font-size: 11.5px;
color: var(--hm-text-primary);
letter-spacing: 0;
}
[data-engine="hermes"] .hm-term {
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.65;
padding: 18px 20px;
background: #1C1917;
color: #E7E5E4;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
overflow-x: auto;
}
[data-engine="hermes"] .hm-term .hm-muted {
color: #A8A29E;
}
/* ==========================================================================
* 9 · Table
* ==========================================================================
*/
[data-engine="hermes"] .hm-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
[data-engine="hermes"] .hm-table thead th {
text-align: left;
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 12px;
font-weight: 400;
letter-spacing: 0.01em;
text-transform: none;
color: var(--hm-text-tertiary);
padding: 14px 24px;
border-bottom: 1px solid var(--hm-border);
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-table tbody td {
padding: 15px 24px;
border-bottom: 1px solid var(--hm-border-subtle);
color: var(--hm-text-secondary);
vertical-align: top;
}
[data-engine="hermes"] .hm-table tbody tr {
transition: background var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-table tbody tr:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-table tbody tr:last-child td {
border-bottom: none;
}
/* ==========================================================================
* 10 · Utilities
* ==========================================================================
*/
[data-engine="hermes"] .hm-hr {
height: 1px;
background: var(--hm-border);
margin: 24px 0;
border: none;
}
[data-engine="hermes"] .hm-badge {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 2px 9px;
border-radius: 999px;
font-family: var(--hm-font-mono);
font-size: 10.5px;
font-weight: 500;
letter-spacing: 0.02em;
text-transform: lowercase;
background: var(--hm-surface-2);
color: var(--hm-text-secondary);
border: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-badge--success {
color: var(--hm-success);
background: var(--hm-success-soft);
border-color: transparent;
}
[data-engine="hermes"] .hm-badge--error {
color: var(--hm-error);
background: var(--hm-error-soft);
border-color: transparent;
}
[data-engine="hermes"] .hm-badge--warn {
color: var(--hm-warn);
background: var(--hm-warn-soft);
border-color: transparent;
}
[data-engine="hermes"] .hm-badge--accent {
color: var(--hm-accent);
background: var(--hm-accent-soft);
border-color: transparent;
}
[data-engine="hermes"] .hm-muted {
color: var(--hm-text-muted);
font-size: 11.5px;
font-family: var(--hm-font-mono);
letter-spacing: 0.01em;
}
[data-engine="hermes"] .hm-stack {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-stack--v {
flex-direction: column;
align-items: stretch;
}
[data-engine="hermes"] .hm-spacer { flex: 1; }
/* Skeleton loader */
[data-engine="hermes"] .hm-skel {
background: linear-gradient(
90deg,
var(--hm-surface-2) 0%,
var(--hm-surface-3) 50%,
var(--hm-surface-2) 100%
);
background-size: 200% 100%;
border-radius: 3px;
animation: hm-skel 1.8s ease-in-out infinite;
}
@keyframes hm-skel {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* ==========================================================================
* 11 · Dropdown
* ==========================================================================
*/
[data-engine="hermes"] .hm-dropdown {
position: absolute;
top: calc(100% + 6px);
left: 0;
right: 0;
max-height: 260px;
overflow-y: auto;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
box-shadow: var(--hm-shadow-lg);
z-index: 50;
font-family: var(--hm-font-mono);
padding: 4px;
}
[data-engine="hermes"] .hm-dropdown-item {
padding: 8px 12px;
font-size: 12px;
color: var(--hm-text-secondary);
cursor: pointer;
border-radius: 3px;
transition: background var(--hm-dur-fast) var(--hm-ease),
color var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-dropdown-item:hover {
background: var(--hm-accent-soft);
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-dropdown-item.is-selected {
background: var(--hm-accent-soft);
color: var(--hm-accent);
font-weight: 500;
}
/* Custom scrollbar */
[data-engine="hermes"] ::-webkit-scrollbar { width: 10px; height: 10px; }
[data-engine="hermes"] ::-webkit-scrollbar-track { background: transparent; }
[data-engine="hermes"] ::-webkit-scrollbar-thumb {
background: var(--hm-border-strong);
border-radius: 999px;
border: 3px solid var(--hm-surface-0);
}
[data-engine="hermes"] ::-webkit-scrollbar-thumb:hover {
background: var(--hm-text-tertiary);
}
/* ==========================================================================
* 12 · Page shell — editorial gutter for pages that still use .page
* (dashboard / cron / setup / env-editor / services / config / channels).
* Custom hermes-*-page shells (memory/logs/skills/chat/usage) set their
* own padding and opt out.
* ==========================================================================
*/
/* Same-element form (no space) because `.page` shares the host div with
`data-engine`. The descendant form silently misses every Hermes page
that uses the shared shell. */
[data-engine="hermes"].page {
/* Generous gutter via clamp() so dashboard / cron / services / memory feel
like one product on any width. No max-width — fill the viewport. */
padding: 40px clamp(20px, 3.5vw, 56px) 56px;
}
@media (max-width: 960px) {
[data-engine="hermes"].page {
padding: 28px 24px 40px;
}
}
@media (max-width: 480px) {
[data-engine="hermes"].page {
padding: 20px 16px 32px;
}
}
[data-engine="hermes"] .page-header h1 {
font-family: var(--hm-font-serif);
font-size: 32px;
font-weight: 500;
letter-spacing: -0.02em;
color: var(--hm-text-primary);
margin: 0;
}
[data-engine="hermes"] .page-header {
padding-bottom: 20px;
margin-bottom: 24px;
border-bottom: 1px solid var(--hm-border);
}
/* Re-style .card on non-refreshed Hermes pages for consistency */
[data-engine="hermes"] .card {
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
box-shadow: none;
}
[data-engine="hermes"] .card-body { padding: 22px 26px; }
/* ==========================================================================
* 13 · Global sidebar + content when Hermes engine is active
* ==========================================================================
* Applied via `body[data-active-engine="hermes"]` — OpenClaw unaffected.
* We define the same tokens here so global components (sidebar etc.) can
* consume them through standard var() resolution without knowing Hermes.
*/
body[data-active-engine="hermes"] {
/* Warm off-white page */
background: #FAFAF9;
}
body[data-active-engine="hermes"] #content {
background: #FAFAF9;
}
/* ---- Sidebar shell ---- */
body[data-active-engine="hermes"] #sidebar {
background: #FFFFFF;
border-right: 1px solid rgba(28, 25, 23, 0.08);
font-family: 'Inter', 'IBM Plex Sans', -apple-system, BlinkMacSystemFont,
'Segoe UI', 'PingFang SC', 'Noto Sans SC', sans-serif;
}
/* Header (logo + title + collapse) */
body[data-active-engine="hermes"] .sidebar-header {
border-bottom: 1px solid rgba(28, 25, 23, 0.06);
padding: 20px 18px;
height: auto;
}
body[data-active-engine="hermes"] .sidebar-title {
font-family: 'Playfair Display', 'Cormorant Garamond', 'Iowan Old Style',
'Palatino Linotype', Palatino, Georgia, 'Times New Roman', serif;
font-size: 19px;
font-weight: 500;
letter-spacing: -0.01em;
color: #1C1917;
}
body[data-active-engine="hermes"] .sidebar-collapse-btn,
body[data-active-engine="hermes"] .sidebar-close-btn {
min-width: 44px;
min-height: 44px;
color: #A8A29E;
background: transparent;
border: none;
font-size: 14px;
cursor: pointer;
transition: color 180ms cubic-bezier(0.22, 1, 0.36, 1);
}
body[data-active-engine="hermes"] .sidebar-collapse-btn:hover,
body[data-active-engine="hermes"] .sidebar-close-btn:hover {
color: #CA8A04;
}
/* Engine switcher — gold accent */
body[data-active-engine="hermes"] .engine-switcher {
border-bottom: 1px solid rgba(28, 25, 23, 0.06);
padding: 14px 14px 16px;
}
body[data-active-engine="hermes"] .engine-switcher-label {
font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 11px;
font-weight: 400;
letter-spacing: 0.01em;
text-transform: none;
color: #78716C;
padding: 0 4px 8px;
}
body[data-active-engine="hermes"] .engine-current {
min-height: 44px;
padding: 10px 12px;
border: 1px solid rgba(202, 138, 4, 0.25);
border-radius: 6px;
background: rgba(202, 138, 4, 0.05);
color: #1C1917;
font-size: 13px;
font-weight: 500;
transition: border-color 180ms, background 180ms;
}
body[data-active-engine="hermes"] .engine-current:hover {
border-color: #CA8A04;
background: rgba(202, 138, 4, 0.10);
}
body[data-active-engine="hermes"] .engine-icon { color: #CA8A04; }
body[data-active-engine="hermes"] .engine-dropdown {
background: #FFFFFF;
border: 1px solid rgba(28, 25, 23, 0.08);
box-shadow: 0 1px 2px rgba(28, 25, 23, 0.04), 0 8px 24px rgba(28, 25, 23, 0.08);
border-radius: 8px;
padding: 4px;
}
body[data-active-engine="hermes"] .engine-option {
padding: 8px 10px;
border-radius: 4px;
color: #44403C;
}
body[data-active-engine="hermes"] .engine-option:hover {
background: rgba(202, 138, 4, 0.08);
color: #1C1917;
}
body[data-active-engine="hermes"] .engine-option.active,
body[data-active-engine="hermes"] .engine-active-check {
color: #CA8A04;
font-weight: 500;
}
/* Section titles — italic serif */
body[data-active-engine="hermes"] .nav-section-title {
font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 11px;
font-weight: 400;
letter-spacing: 0.01em;
text-transform: none;
color: #A8A29E;
padding: 14px 14px 6px;
}
/* Nav items — minimal with gold active indicator */
body[data-active-engine="hermes"] .sidebar-nav {
padding: 4px 10px;
}
body[data-active-engine="hermes"] .nav-item {
min-height: 44px;
padding: 9px 14px;
border-radius: 6px;
color: #44403C;
font-size: 13px;
font-weight: 500;
letter-spacing: 0.005em;
transition: background 180ms cubic-bezier(0.22, 1, 0.36, 1),
color 180ms cubic-bezier(0.22, 1, 0.36, 1);
position: relative;
}
body[data-active-engine="hermes"] .nav-item:hover {
background: rgba(28, 25, 23, 0.04);
color: #1C1917;
}
body[data-active-engine="hermes"] .nav-item.active {
background: rgba(202, 138, 4, 0.08);
color: #CA8A04;
font-weight: 500;
}
/* Thin gold accent line on active item (left edge) */
body[data-active-engine="hermes"] .nav-item.active::before {
content: '';
position: absolute;
left: 5px;
top: 50%;
transform: translateY(-50%);
width: 2px;
height: 16px;
background: #CA8A04;
border-radius: 2px;
}
body[data-active-engine="hermes"] .nav-item svg {
opacity: 0.6;
width: 16px;
height: 16px;
}
body[data-active-engine="hermes"] .nav-item.active svg {
opacity: 1;
color: #CA8A04;
}
/* Footer (theme/lang/meta) */
body[data-active-engine="hermes"] .sidebar-footer {
border-top: 1px solid rgba(28, 25, 23, 0.06);
padding: 8px 10px;
}
body[data-active-engine="hermes"] #btn-theme-toggle,
body[data-active-engine="hermes"] .lang-trigger {
min-height: 44px;
padding: 8px 14px;
border-radius: 6px;
color: #78716C;
font-size: 12.5px;
transition: background 180ms, color 180ms;
}
body[data-active-engine="hermes"] #btn-theme-toggle:hover,
body[data-active-engine="hermes"] .lang-trigger:hover {
background: rgba(28, 25, 23, 0.04);
color: #1C1917;
}
body[data-active-engine="hermes"] .lang-dropdown {
background: #FFFFFF;
border: 1px solid rgba(28, 25, 23, 0.08);
box-shadow: 0 -4px 16px rgba(28, 25, 23, 0.08);
border-radius: 8px;
}
body[data-active-engine="hermes"] .lang-search {
min-height: 44px;
}
body[data-active-engine="hermes"] .lang-option {
padding: 8px 12px;
border-radius: 4px;
color: #44403C;
font-size: 12.5px;
}
body[data-active-engine="hermes"] .lang-option:hover {
background: rgba(202, 138, 4, 0.06);
}
body[data-active-engine="hermes"] .lang-option.active,
body[data-active-engine="hermes"] .lang-option-check {
color: #CA8A04;
font-weight: 500;
}
body[data-active-engine="hermes"] .lang-option-code {
font-family: 'JetBrains Mono', ui-monospace, 'SF Mono', Consolas, monospace;
font-size: 10.5px;
color: #A8A29E;
}
/* Footer meta strip (version + link) */
body[data-active-engine="hermes"] .sidebar-meta {
font-family: 'JetBrains Mono', ui-monospace, 'SF Mono', Consolas, monospace;
font-size: 10.5px;
padding: 8px 14px 4px;
color: #A8A29E;
}
body[data-active-engine="hermes"] .sidebar-link {
color: #A8A29E;
transition: color 180ms;
}
body[data-active-engine="hermes"] .sidebar-link:hover {
color: #CA8A04;
}
body[data-active-engine="hermes"] .sidebar-version { color: #A8A29E; }
/* ---- Dark mode variants ---- */
[data-theme="dark"] body[data-active-engine="hermes"],
body[data-active-engine="hermes"][data-theme="dark"] {
background: #0C0A09;
}
[data-theme="dark"] body[data-active-engine="hermes"] #content {
background: #0C0A09;
}
[data-theme="dark"] body[data-active-engine="hermes"] #sidebar {
background: #131210;
border-right-color: rgba(250, 250, 249, 0.06);
}
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-header {
border-bottom-color: rgba(250, 250, 249, 0.06);
}
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-title {
color: #FAFAF9;
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-switcher {
border-bottom-color: rgba(250, 250, 249, 0.06);
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-switcher-label,
[data-theme="dark"] body[data-active-engine="hermes"] .nav-section-title {
color: #78716C;
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-current {
border-color: rgba(234, 179, 8, 0.35);
background: rgba(234, 179, 8, 0.08);
color: #FAFAF9;
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-current:hover {
border-color: #EAB308;
background: rgba(234, 179, 8, 0.14);
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-icon,
[data-theme="dark"] body[data-active-engine="hermes"] .engine-option.active,
[data-theme="dark"] body[data-active-engine="hermes"] .engine-active-check {
color: #EAB308;
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-dropdown {
background: #1C1917;
border-color: rgba(250, 250, 249, 0.08);
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-option {
color: #D6D3D1;
}
[data-theme="dark"] body[data-active-engine="hermes"] .engine-option:hover {
background: rgba(234, 179, 8, 0.10);
color: #FAFAF9;
}
[data-theme="dark"] body[data-active-engine="hermes"] .nav-item {
color: #D6D3D1;
}
[data-theme="dark"] body[data-active-engine="hermes"] .nav-item:hover {
background: rgba(250, 250, 249, 0.05);
color: #FAFAF9;
}
[data-theme="dark"] body[data-active-engine="hermes"] .nav-item.active {
background: rgba(234, 179, 8, 0.12);
color: #EAB308;
}
[data-theme="dark"] body[data-active-engine="hermes"] .nav-item.active::before {
background: #EAB308;
}
[data-theme="dark"] body[data-active-engine="hermes"] .nav-item.active svg {
color: #EAB308;
}
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-footer {
border-top-color: rgba(250, 250, 249, 0.06);
}
[data-theme="dark"] body[data-active-engine="hermes"] #btn-theme-toggle,
[data-theme="dark"] body[data-active-engine="hermes"] .lang-trigger {
color: #A8A29E;
}
[data-theme="dark"] body[data-active-engine="hermes"] #btn-theme-toggle:hover,
[data-theme="dark"] body[data-active-engine="hermes"] .lang-trigger:hover {
background: rgba(250, 250, 249, 0.05);
color: #FAFAF9;
}
[data-theme="dark"] body[data-active-engine="hermes"] .lang-dropdown {
background: #1C1917;
border-color: rgba(250, 250, 249, 0.08);
}
[data-theme="dark"] body[data-active-engine="hermes"] .lang-option {
color: #D6D3D1;
}
[data-theme="dark"] body[data-active-engine="hermes"] .lang-option:hover {
background: rgba(234, 179, 8, 0.08);
}
[data-theme="dark"] body[data-active-engine="hermes"] .lang-option.active,
[data-theme="dark"] body[data-active-engine="hermes"] .lang-option-check {
color: #EAB308;
}
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-meta,
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-link,
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-version {
color: #78716C;
}
[data-theme="dark"] body[data-active-engine="hermes"] .sidebar-link:hover {
color: #EAB308;
}
/* ==========================================================================
* 14 · Legacy .hermes-* class overrides (setup/logs/skills/memory pages)
* ==========================================================================
* Existing pages (setup.js, chat.js, logs.js, etc.) use `.hermes-*` class
* names defined in src/style/pages.css. Since the JS bind()s them by class
* name we can't just delete them — instead we re-skin them while still
* scoped to [data-engine="hermes"].
*/
/* ---- Phase indicator (setup wizard steps) ---- */
[data-engine="hermes"] .hermes-phases {
display: flex;
align-items: center;
margin: 4px 0 36px;
padding: 20px 24px;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
}
[data-engine="hermes"] .hermes-phase {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
[data-engine="hermes"] .hermes-phase-dot {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--hm-surface-0);
border: 1px solid var(--hm-border-strong);
font-family: var(--hm-font-serif);
font-size: 14px;
font-weight: 500;
color: var(--hm-text-tertiary);
transition: all var(--hm-dur-normal) var(--hm-ease);
}
[data-engine="hermes"] .hermes-phase.active .hermes-phase-dot {
background: var(--hm-accent);
color: #1C1917;
border-color: var(--hm-accent);
box-shadow: var(--hm-glow-gold);
}
[data-engine="hermes"] .hermes-phase.done .hermes-phase-dot {
background: transparent;
border-color: var(--hm-accent);
color: var(--hm-accent);
}
[data-engine="hermes"] .hermes-phase.done .hermes-phase-dot svg {
stroke: var(--hm-accent);
}
[data-engine="hermes"] .hermes-phase-label {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 12px;
color: var(--hm-text-tertiary);
white-space: nowrap;
}
[data-engine="hermes"] .hermes-phase.active .hermes-phase-label {
color: var(--hm-accent);
font-weight: 500;
font-style: normal;
}
[data-engine="hermes"] .hermes-phase.done .hermes-phase-label {
color: var(--hm-text-secondary);
font-style: normal;
}
[data-engine="hermes"] .hermes-phase-line {
flex: 1;
height: 1px;
background: var(--hm-border-strong);
margin: 0 6px;
opacity: 0.5;
}
[data-engine="hermes"] .hermes-phase.done + .hermes-phase-line,
[data-engine="hermes"] .hermes-phase-line:has(+ .hermes-phase.active),
[data-engine="hermes"] .hermes-phase.done ~ .hermes-phase-line {
background: var(--hm-accent);
opacity: 1;
}
/* ---- Detection rows ---- */
[data-engine="hermes"] .hermes-detect-list {
display: flex;
flex-direction: column;
gap: 4px;
}
[data-engine="hermes"] .hermes-detect-row {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-0);
font-family: var(--hm-font-mono);
font-size: 12.5px;
color: var(--hm-text-secondary);
transition: background var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hermes-detect-row.ok {
color: var(--hm-text-primary);
border-color: var(--hm-success-soft);
background: var(--hm-success-soft);
}
[data-engine="hermes"] .hermes-detect-row.warn {
color: var(--hm-warn);
border-color: var(--hm-warn-soft);
background: var(--hm-warn-soft);
}
[data-engine="hermes"] .hermes-detect-row svg {
flex-shrink: 0;
}
/* ---- Form fields ---- */
[data-engine="hermes"] .hermes-form {
display: flex;
flex-direction: column;
gap: 18px;
}
[data-engine="hermes"] .hermes-field {
display: flex;
flex-direction: column;
gap: 8px;
}
[data-engine="hermes"] .hermes-field > span {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
font-weight: 400;
color: var(--hm-text-tertiary);
letter-spacing: 0;
}
[data-engine="hermes"] .hermes-field .input,
[data-engine="hermes"] input.input,
[data-engine="hermes"] textarea.input,
[data-engine="hermes"] select.input {
font-family: var(--hm-font-mono);
font-size: 13px;
padding: 10px 14px;
height: 40px;
border: 1px solid var(--hm-border);
background: var(--hm-surface-0);
color: var(--hm-text-primary);
border-radius: var(--hm-radius-sm);
transition: border-color var(--hm-dur-fast) var(--hm-ease),
box-shadow var(--hm-dur-fast) var(--hm-ease);
outline: none;
width: 100%;
box-sizing: border-box;
}
[data-engine="hermes"] .hermes-field .input:focus,
[data-engine="hermes"] input.input:focus,
[data-engine="hermes"] textarea.input:focus,
[data-engine="hermes"] select.input:focus {
border-color: var(--hm-accent);
box-shadow: 0 0 0 3px var(--hm-accent-ring);
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hermes-field .input::placeholder,
[data-engine="hermes"] input.input::placeholder {
color: var(--hm-text-muted);
}
/* ---- Progress bar ---- */
[data-engine="hermes"] .hermes-progress {
height: 4px;
background: var(--hm-surface-3);
border-radius: 2px;
overflow: hidden;
}
[data-engine="hermes"] .hermes-progress-bar {
height: 100%;
background: linear-gradient(90deg, var(--hm-accent), #EAB308);
border-radius: 2px;
transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}
[data-engine="hermes"] .hermes-progress-bar.error {
background: linear-gradient(90deg, var(--hm-error), #DC2626);
}
[data-engine="hermes"] .hermes-install-status {
padding: 14px 16px;
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
margin-bottom: 14px;
}
[data-engine="hermes"] .hermes-progress-text {
font-family: var(--hm-font-mono) !important;
letter-spacing: 0.02em;
}
/* ---- Log panel ---- */
[data-engine="hermes"] .hermes-log-panel {
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
overflow: hidden;
background: #1C1917;
}
[data-engine="hermes"] .hermes-log-content {
max-height: 260px;
min-height: 80px;
overflow-y: auto;
padding: 14px 16px;
font-family: var(--hm-font-mono);
font-size: 11.5px;
line-height: 1.65;
color: #D6D3D1;
background: #1C1917;
}
[data-engine="hermes"] .hermes-log-content div {
white-space: pre-wrap;
word-break: break-all;
}
[data-engine="hermes"] .hermes-log-content:empty::before {
content: '// waiting for stream…';
color: #78716C;
font-style: italic;
}
/* ---- Install-info checklist ---- */
[data-engine="hermes"] .hermes-install-info {
display: flex;
flex-direction: column;
gap: 4px;
padding: 10px 4px;
}
/* ---- Mode switch buttons ---- */
[data-engine="hermes"] .hermes-mode-btn.btn {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 8px 16px;
height: 36px;
border-radius: var(--hm-radius-sm);
border: 1px solid var(--hm-border-strong);
background: transparent;
color: var(--hm-text-primary);
font-family: var(--hm-font-sans);
font-size: 12.5px;
font-weight: 500;
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hermes-mode-btn.btn-primary {
background: var(--hm-text-primary);
color: var(--hm-text-inverse);
border-color: var(--hm-text-primary);
}
[data-theme="dark"] [data-engine="hermes"] .hermes-mode-btn.btn-primary {
background: var(--hm-accent);
color: #0C0A09;
border-color: var(--hm-accent);
}
[data-engine="hermes"] .hermes-mode-btn.btn-secondary:hover {
border-color: var(--hm-text-primary);
background: var(--hm-surface-2);
}
/* ---- Preset provider buttons (in configure phase) ---- */
[data-engine="hermes"] .hermes-preset-btn {
display: inline-flex;
align-items: center;
padding: 5px 14px;
background: transparent;
border: 1px solid var(--hm-border);
border-radius: 999px;
font-family: var(--hm-font-sans);
font-size: 12px;
font-weight: 500;
color: var(--hm-text-secondary);
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
white-space: nowrap;
}
[data-engine="hermes"] .hermes-preset-btn:hover {
border-color: var(--hm-text-secondary);
color: var(--hm-text-primary);
}
/* ---- Config form / fetch models button ---- */
[data-engine="hermes"] .hermes-fetch-models,
[data-engine="hermes"] .hermes-config-save,
[data-engine="hermes"] .hermes-config-skip,
[data-engine="hermes"] .hermes-gw-start,
[data-engine="hermes"] .hermes-gw-next,
[data-engine="hermes"] .hermes-go-dashboard,
[data-engine="hermes"] .hermes-install-btn,
[data-engine="hermes"] .hermes-custom-connect {
font-family: var(--hm-font-sans) !important;
}
/* ---- Model dropdown ---- */
[data-engine="hermes"] .hermes-model-dropdown {
position: absolute;
top: calc(100% + 4px);
left: 0;
right: 0;
max-height: 240px;
overflow-y: auto;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
box-shadow: var(--hm-shadow-lg);
z-index: 50;
padding: 4px;
}
[data-engine="hermes"] .hermes-model-option {
padding: 8px 12px;
font-family: var(--hm-font-mono);
font-size: 12px;
color: var(--hm-text-secondary);
cursor: pointer;
border-radius: 3px;
transition: all var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hermes-model-option:hover {
background: var(--hm-accent-soft);
color: var(--hm-text-primary);
}
/* ---- Global .btn overrides (since setup uses generic .btn classes) ---- */
[data-engine="hermes"] .btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
padding: 9px 18px;
height: 38px;
border-radius: var(--hm-radius-sm);
border: 1px solid var(--hm-border-strong);
background: transparent;
color: var(--hm-text-primary);
font-family: var(--hm-font-sans);
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
white-space: nowrap;
}
[data-engine="hermes"] .btn:hover:not(:disabled) {
border-color: var(--hm-text-primary);
background: var(--hm-surface-2);
}
[data-engine="hermes"] .btn:disabled {
opacity: 0.45;
cursor: not-allowed;
}
[data-engine="hermes"] .btn-primary {
background: var(--hm-accent);
color: #1C1917;
border-color: var(--hm-accent);
font-family: var(--hm-font-serif);
font-weight: 500;
}
[data-engine="hermes"] .btn-primary:hover:not(:disabled) {
background: var(--hm-accent-hover);
border-color: var(--hm-accent-hover);
color: #1C1917;
box-shadow: var(--hm-glow-gold);
}
[data-theme="dark"] [data-engine="hermes"] .btn-primary {
color: #0C0A09;
}
[data-theme="dark"] [data-engine="hermes"] .btn-primary:hover:not(:disabled) {
color: #0C0A09;
}
/* .btn-secondary intentionally inherits default .btn appearance */
[data-engine="hermes"] .btn-sm {
height: 30px;
padding: 4px 12px;
font-size: 12px;
}
[data-engine="hermes"] .btn-text {
background: transparent;
border: none;
color: var(--hm-text-tertiary);
font-size: 13px;
padding: 6px 10px;
transition: color var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .btn-text:hover {
color: var(--hm-accent);
background: transparent;
}
[data-engine="hermes"] .btn-icon {
width: 34px;
height: 34px;
padding: 0;
background: transparent;
border: 1px solid transparent;
color: var(--hm-text-tertiary);
border-radius: var(--hm-radius-sm);
cursor: pointer;
transition: all var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .btn-icon:hover {
color: var(--hm-accent);
background: var(--hm-accent-soft);
}
/* ---- Generic .input override (used by setup phase forms) ---- */
[data-engine="hermes"] .input {
font-family: var(--hm-font-mono);
font-size: 13px;
padding: 10px 14px;
height: 40px;
border: 1px solid var(--hm-border);
background: var(--hm-surface-0);
color: var(--hm-text-primary);
border-radius: var(--hm-radius-sm);
transition: border-color var(--hm-dur-fast) var(--hm-ease),
box-shadow var(--hm-dur-fast) var(--hm-ease);
outline: none;
width: 100%;
box-sizing: border-box;
}
[data-engine="hermes"] .input:focus {
border-color: var(--hm-accent);
box-shadow: 0 0 0 3px var(--hm-accent-ring);
background: var(--hm-surface-1);
}
/* ---- Chat page (chat.js uses .hermes-chat-*) ---- */
[data-engine="hermes"] .hermes-chat-header {
background: var(--hm-surface-1);
border-bottom: 1px solid var(--hm-border);
padding: 18px 28px;
}
[data-engine="hermes"] .hermes-chat-messages {
background: var(--hm-surface-0);
padding: 28px 36px;
}
[data-engine="hermes"] .hermes-chat-bubble {
max-width: 75%;
padding: 12px 18px;
border-radius: 14px;
font-family: var(--hm-font-sans);
font-size: 13.5px;
line-height: 1.6;
}
[data-engine="hermes"] .hermes-chat-bubble.user {
background: var(--hm-text-primary);
color: var(--hm-text-inverse);
border-bottom-right-radius: 4px;
box-shadow: none;
}
[data-theme="dark"] [data-engine="hermes"] .hermes-chat-bubble.user {
background: var(--hm-accent);
color: #0C0A09;
}
[data-engine="hermes"] .hermes-chat-bubble.assistant {
background: var(--hm-surface-1);
color: var(--hm-text-primary);
border: 1px solid var(--hm-border);
border-bottom-left-radius: 4px;
box-shadow: none;
}
[data-engine="hermes"] .hermes-chat-input-area {
background: var(--hm-surface-1);
border-top: 1px solid var(--hm-border);
padding: 14px 28px 22px;
}
[data-engine="hermes"] .hermes-chat-empty::before {
background: var(--hm-accent-soft);
}
/* ---- Logs page ---- */
[data-engine="hermes"] .hm-logs-header {
background: var(--hm-surface-1);
padding: 14px 24px;
border-bottom: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-log-entry {
font-family: var(--hm-font-mono);
}
/* ---- Skills page containers ---- */
[data-engine="hermes"] .hm-skills-header {
background: var(--hm-surface-1);
padding: 14px 24px;
border-bottom: 1px solid var(--hm-border);
}
/* ==========================================================================
* 15 · Memory page (three-section editorial layout)
* ==========================================================================
*/
/* NB: page shell uses same-element selector (no space) because logs.js etc.
put both `data-engine` and `.hermes-X-page` on the SAME div, not on a
parent/child pair. The descendant-combinator form silently failed and
left every page shell padding-less, hugging the viewport edges. */
[data-engine="hermes"].hermes-memory-page {
padding: 40px clamp(20px, 3.5vw, 64px) 64px;
width: 100%;
font-family: var(--hm-font-sans);
color: var(--hm-text-primary);
background: var(--hm-surface-0);
position: relative;
}
[data-engine="hermes"].hermes-memory-page::before {
content: '';
position: fixed;
top: 64px;
right: 0;
width: min(42vw, 520px);
height: min(42vw, 520px);
background: radial-gradient(circle, var(--hm-accent-soft), transparent 68%);
pointer-events: none;
opacity: 0.8;
z-index: -1;
}
[data-engine="hermes"] .hm-mem-overview {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(320px, 420px);
gap: 24px;
align-items: stretch;
margin: -10px 0 28px;
padding: 28px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-lg);
background:
linear-gradient(135deg, rgba(202, 138, 4, 0.10), transparent 36%),
var(--hm-surface-1);
box-shadow: var(--hm-shadow-md);
position: relative;
overflow: hidden;
}
[data-engine="hermes"] .hm-mem-overview::after {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(var(--hm-border-subtle) 1px, transparent 1px),
linear-gradient(90deg, var(--hm-border-subtle) 1px, transparent 1px);
background-size: 28px 28px;
mask-image: linear-gradient(90deg, transparent, #000 18%, transparent 78%);
pointer-events: none;
opacity: 0.45;
}
[data-engine="hermes"] .hm-mem-overview-copy,
[data-engine="hermes"] .hm-mem-overview-stats {
position: relative;
z-index: 1;
}
[data-engine="hermes"] .hm-mem-kicker {
font-family: var(--hm-font-mono);
font-size: 10.5px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--hm-accent);
margin-bottom: 12px;
}
[data-engine="hermes"] .hm-mem-overview-title {
font-family: var(--hm-font-serif);
font-size: clamp(24px, 3vw, 36px);
font-weight: 500;
line-height: 1.15;
letter-spacing: -0.025em;
max-width: 620px;
margin-bottom: 12px;
}
[data-engine="hermes"] .hm-mem-overview-desc {
color: var(--hm-text-secondary);
line-height: 1.85;
max-width: 660px;
}
[data-engine="hermes"] .hm-mem-overview-stats {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
overflow: hidden;
background: var(--hm-border);
}
[data-engine="hermes"] .hm-mem-stat {
padding: 18px;
background: color-mix(in srgb, var(--hm-surface-1) 88%, transparent);
backdrop-filter: blur(8px);
}
[data-engine="hermes"] .hm-mem-stat-label {
display: block;
font-family: var(--hm-font-mono);
font-size: 10.5px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--hm-text-muted);
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-mem-stat strong {
font-family: var(--hm-font-serif);
font-size: 26px;
font-weight: 500;
line-height: 1;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-mem-stats {
display: inline-flex;
align-items: center;
gap: 6px;
font-family: var(--hm-font-mono);
font-size: 11px;
color: var(--hm-text-tertiary);
letter-spacing: 0.01em;
white-space: nowrap;
}
[data-engine="hermes"] .hm-mem-sep { opacity: 0.5; }
[data-engine="hermes"] .hm-mem-desc {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
color: var(--hm-text-tertiary);
line-height: 1.65;
margin-bottom: 14px;
}
[data-engine="hermes"] .hm-mem-panel {
position: relative;
background:
linear-gradient(180deg, color-mix(in srgb, var(--hm-surface-1) 96%, var(--hm-accent-soft)), var(--hm-surface-1));
}
[data-engine="hermes"] .hm-mem-panel::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(180deg, transparent, var(--hm-accent), transparent);
opacity: 0.55;
}
[data-engine="hermes"] .hm-mem-panel:hover {
border-color: color-mix(in srgb, var(--hm-accent) 38%, var(--hm-border));
box-shadow: var(--hm-shadow-lg);
}
[data-engine="hermes"] .hm-mem-panel .hm-panel-header {
background: linear-gradient(90deg, var(--hm-surface-1), transparent);
}
[data-engine="hermes"] .hm-mem-card-topline {
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 16px;
}
[data-engine="hermes"] .hm-mem-card-index {
font-family: var(--hm-font-mono);
font-size: 10px;
letter-spacing: 0.2em;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-mem-card-meter {
flex: 1;
height: 1px;
background: var(--hm-border);
overflow: hidden;
}
[data-engine="hermes"] .hm-mem-card-meter span {
display: block;
height: 100%;
background: linear-gradient(90deg, var(--hm-accent), transparent);
}
/* Memory edit button — promote the ghost CTA to a visible outline chip
so users recognise it as an action, not inline meta-text. */
[data-engine="hermes"] .hm-mem-edit {
border-color: var(--hm-border-strong, rgba(28, 25, 23, 0.18));
color: var(--hm-text-secondary);
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-mem-edit:hover:not(:disabled) {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-theme="dark"] [data-engine="hermes"] .hm-mem-edit {
background: transparent;
border-color: rgba(250, 250, 249, 0.14);
}
/* Memory textarea — use tag+class selector to outrank `.hm-input`'s
`height: 40px` (same class-count as .hm-mem-editor, so the bare-class form
was a coin-flip). Make it markedly tall so users get a real writing
surface, and let it fill any extra card height through min-height: 50vh. */
[data-engine="hermes"] textarea.hm-mem-editor {
display: block;
width: 100%;
height: auto;
min-height: clamp(320px, 50vh, 560px);
max-height: 70vh;
resize: vertical;
box-sizing: border-box;
line-height: 1.65;
padding: 16px 18px;
font-size: 13.5px;
font-family: var(--hm-font-mono);
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
color: var(--hm-text-primary);
transition: border-color var(--hm-dur-fast) var(--hm-ease),
box-shadow var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] textarea.hm-mem-editor:focus {
outline: none;
border-color: var(--hm-accent);
box-shadow: 0 0 0 3px var(--hm-accent-ring);
background: var(--hm-surface-1);
}
[data-engine="hermes"] textarea.hm-mem-editor::placeholder {
color: var(--hm-text-muted);
opacity: 0.6;
font-style: italic;
}
[data-engine="hermes"].hm-mem-modal-overlay .modal {
width: min(920px, calc(100vw - 32px));
}
[data-engine="hermes"] .hm-mem-modal-wrap {
display: flex;
flex-direction: column;
gap: 12px;
}
[data-engine="hermes"] textarea.hm-mem-modal-editor {
min-height: min(62vh, 620px);
max-height: 70vh;
}
[data-engine="hermes"] .hm-mem-modal-foot {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-mem-empty {
padding: 22px 24px;
display: flex;
flex-direction: column;
gap: 6px;
border: 1px dashed var(--hm-border-strong);
border-radius: var(--hm-radius-md);
background: color-mix(in srgb, var(--hm-surface-2) 72%, transparent);
}
[data-engine="hermes"] .hm-mem-empty-title {
font-family: var(--hm-font-serif);
font-style: italic;
color: var(--hm-text-tertiary);
font-size: 14px;
}
[data-engine="hermes"] .hm-mem-empty-cta {
width: fit-content;
margin-top: 8px;
}
[data-engine="hermes"] .hm-mem-rendered {
font-family: var(--hm-font-sans);
font-size: 14px;
line-height: 1.75;
color: var(--hm-text-primary);
padding: 16px 18px;
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-md);
background: color-mix(in srgb, var(--hm-surface-0) 74%, transparent);
max-height: 280px;
overflow: auto;
}
[data-engine="hermes"] .hm-mem-rendered h2,
[data-engine="hermes"] .hm-mem-rendered h3,
[data-engine="hermes"] .hm-mem-rendered h4 {
font-family: var(--hm-font-serif);
font-weight: 500;
letter-spacing: -0.01em;
}
[data-engine="hermes"] .hm-mem-rendered h2 { font-size: 22px; margin: 18px 0 8px; }
[data-engine="hermes"] .hm-mem-rendered h3 { font-size: 18px; margin: 14px 0 6px; }
[data-engine="hermes"] .hm-mem-rendered h4 {
font-size: 15px;
font-style: italic;
margin: 12px 0 4px;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-mem-rendered pre {
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
padding: 12px 14px;
margin: 8px 0;
overflow-x: auto;
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.6;
}
[data-engine="hermes"] .hm-mem-rendered code {
font-family: var(--hm-font-mono);
font-size: 12.5px;
background: var(--hm-surface-2);
padding: 1px 6px;
border-radius: 3px;
}
[data-engine="hermes"] .hm-mem-rendered pre code {
background: transparent;
padding: 0;
}
[data-engine="hermes"] .hm-mem-rendered a {
color: var(--hm-accent);
text-decoration: underline;
text-underline-offset: 2px;
}
/* 注意viewport 宽度并不等于实际内容区宽度——ClawPanel 有 ~280px 侧栏。
在 1100px viewport 下内容区只有 ~820px2 列布局copy + 320~420px stats
会把 copy 压到 230px标题被迫 4 行。所以 1100px 就该切到单列。 */
@media (max-width: 1100px) {
[data-engine="hermes"] .hm-mem-overview {
grid-template-columns: 1fr;
}
}
@media (max-width: 920px) {
[data-engine="hermes"].hermes-memory-page {
padding: 28px 24px 44px;
}
}
@media (max-width: 620px) {
[data-engine="hermes"].hermes-memory-page {
padding: 22px 16px 36px;
}
[data-engine="hermes"] .hm-mem-overview {
padding: 20px;
border-radius: var(--hm-radius-md);
}
[data-engine="hermes"] .hm-mem-overview-stats {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-mem-panel .hm-panel-header {
flex-direction: column;
align-items: flex-start;
}
[data-engine="hermes"] .hm-mem-panel .hm-panel-actions {
width: 100%;
justify-content: space-between;
}
}
/* ==========================================================================
* 16 · Logs page (editorial layout with sidebar + live entries)
* ==========================================================================
*/
[data-engine="hermes"].hermes-logs-page {
padding: 40px clamp(20px, 3.5vw, 64px) 48px;
max-width: none;
height: 100vh;
display: flex;
flex-direction: column;
background: var(--hm-surface-0);
font-family: var(--hm-font-sans);
color: var(--hm-text-primary);
box-sizing: border-box;
}
[data-engine="hermes"].hermes-logs-page .hm-hero {
margin-bottom: 24px;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-logs-layout {
display: grid;
grid-template-columns: 260px 1fr;
gap: 18px;
flex: 1;
min-height: 0;
}
[data-engine="hermes"] .hm-logs-sidebar {
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
overflow: hidden;
display: flex;
flex-direction: column;
box-shadow:
0 1px 2px rgba(28, 25, 23, 0.03),
0 2px 6px rgba(28, 25, 23, 0.035);
}
[data-theme="dark"] [data-engine="hermes"] .hm-logs-sidebar { box-shadow: none; }
[data-engine="hermes"] .hm-logs-sidebar-title {
padding: 14px 18px 12px;
border-bottom: 1px solid var(--hm-border-subtle);
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-logs-file-list {
overflow-y: auto;
padding: 6px;
flex: 1;
}
[data-engine="hermes"] .hm-logs-file-item {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: 9px 12px;
background: transparent;
border: 1px solid transparent;
border-radius: var(--hm-radius-sm);
color: var(--hm-text-secondary);
cursor: pointer;
font-family: var(--hm-font-mono);
font-size: 12px;
text-align: left;
transition: all var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-logs-file-item:hover {
background: var(--hm-surface-2);
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-logs-file-item.is-active {
background: var(--hm-accent-soft);
color: var(--hm-accent);
font-weight: 500;
}
[data-engine="hermes"] .hm-logs-file-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-logs-file-size {
flex-shrink: 0;
font-size: 10.5px;
color: var(--hm-text-muted);
margin-left: 8px;
}
[data-engine="hermes"] .hm-logs-main {
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
overflow: hidden;
display: flex;
flex-direction: column;
min-width: 0;
box-shadow:
0 1px 2px rgba(28, 25, 23, 0.03),
0 2px 6px rgba(28, 25, 23, 0.035);
}
[data-engine="hermes"] .hm-logs-toolbar {
display: flex;
gap: 12px;
align-items: flex-end;
padding: 14px 18px 12px;
border-bottom: 1px solid var(--hm-border-subtle);
background: var(--hm-surface-0);
flex-wrap: wrap;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-logs-toolbar-item {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 110px;
}
[data-engine="hermes"] .hm-logs-toolbar-item--grow {
flex: 1;
min-width: 200px;
}
[data-engine="hermes"] .hm-logs-toolbar-actions {
flex-direction: row;
align-items: flex-end;
justify-content: flex-end;
min-width: 0;
}
[data-engine="hermes"] .hm-logs-count {
padding: 8px 18px;
border-bottom: 1px solid var(--hm-border-subtle);
font-size: 11px;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-logs-content {
flex: 1;
overflow-y: auto;
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.6;
padding: 6px 0;
background: var(--hm-surface-0);
min-height: 0;
}
[data-engine="hermes"] .hm-logs-loading,
[data-engine="hermes"] .hm-logs-empty-content {
padding: 40px 24px;
text-align: center;
}
/* --- Log entry row --- */
[data-engine="hermes"] .hm-log-entry {
display: flex;
align-items: baseline;
gap: 10px;
padding: 4px 20px;
border-left: 2px solid transparent;
transition: background var(--hm-dur-fast) var(--hm-ease);
min-width: 0;
}
[data-engine="hermes"] .hm-log-entry:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-log-entry[data-tone="error"] { border-left-color: var(--hm-error); }
[data-engine="hermes"] .hm-log-entry[data-tone="warn"] { border-left-color: var(--hm-warn); }
[data-engine="hermes"] .hm-log-entry[data-tone="info"] { border-left-color: var(--hm-info); }
[data-engine="hermes"] .hm-log-entry[data-tone="debug"] { border-left-color: var(--hm-text-muted); }
[data-engine="hermes"] .hm-log-entry--raw {
padding-left: 22px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-log-time {
flex-shrink: 0;
color: var(--hm-text-muted);
font-variant-numeric: tabular-nums;
min-width: 64px;
}
[data-engine="hermes"] .hm-log-level {
flex-shrink: 0;
display: inline-block;
min-width: 48px;
padding: 1px 6px;
border-radius: 3px;
font-weight: 600;
font-size: 10px;
letter-spacing: 0.04em;
text-transform: uppercase;
text-align: center;
background: var(--hm-surface-3);
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-log-level[data-tone="error"] {
background: var(--hm-error-soft); color: var(--hm-error);
}
[data-engine="hermes"] .hm-log-level[data-tone="warn"] {
background: var(--hm-warn-soft); color: var(--hm-warn);
}
[data-engine="hermes"] .hm-log-level[data-tone="info"] {
background: var(--hm-info-soft); color: var(--hm-info);
}
[data-engine="hermes"] .hm-log-level[data-tone="debug"] {
background: transparent; color: var(--hm-text-muted);
}
[data-engine="hermes"] .hm-log-logger {
flex-shrink: 0;
color: var(--hm-text-tertiary);
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-log-msg {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
color: var(--hm-text-secondary);
flex: 1;
}
[data-engine="hermes"] .hm-log-entry[data-tone="error"] .hm-log-msg { color: var(--hm-error); }
[data-engine="hermes"] .hm-log-entry[data-tone="warn"] .hm-log-msg { color: var(--hm-warn); }
/* --- Access log decoration --- */
[data-engine="hermes"] .hm-log-access {
display: inline-flex;
align-items: baseline;
gap: 8px;
min-width: 0;
overflow: hidden;
flex: 1;
}
[data-engine="hermes"] .hm-log-method {
flex-shrink: 0;
font-weight: 600;
color: var(--hm-text-primary);
padding: 0 6px;
background: var(--hm-surface-2);
border-radius: 3px;
font-size: 11px;
}
[data-engine="hermes"] .hm-log-path {
color: var(--hm-accent);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-log-status {
flex-shrink: 0;
font-weight: 600;
font-size: 11px;
padding: 0 6px;
border-radius: 3px;
}
[data-engine="hermes"] .hm-log-status--2xx {
color: var(--hm-success); background: var(--hm-success-soft);
}
[data-engine="hermes"] .hm-log-status--3xx {
color: var(--hm-warn); background: var(--hm-warn-soft);
}
[data-engine="hermes"] .hm-log-status--4xx,
[data-engine="hermes"] .hm-log-status--5xx {
color: var(--hm-error); background: var(--hm-error-soft);
}
/* --- Search highlight mark --- */
[data-engine="hermes"] mark.hm-log-hl {
background: var(--hm-accent-soft);
color: var(--hm-accent);
padding: 0 2px;
border-radius: 2px;
}
/* Active tail button state */
[data-engine="hermes"] .hm-logs-tail.is-active {
color: var(--hm-accent);
background: var(--hm-accent-soft);
border-color: transparent;
}
/* ==========================================================================
* 17 · Cron / Jobs page
* ==========================================================================
*/
[data-engine="hermes"] .hm-cron-list {
display: flex;
flex-direction: column;
gap: 12px;
}
[data-engine="hermes"] .hm-cron-item {
margin-bottom: 0;
transition: border-color var(--hm-dur-fast) var(--hm-ease),
box-shadow var(--hm-dur-normal) var(--hm-ease);
}
[data-engine="hermes"] .hm-cron-item:hover {
border-color: var(--hm-border-strong);
box-shadow: var(--hm-shadow-md);
}
[data-engine="hermes"] .hm-cron-item[data-state="paused"] { opacity: 0.75; }
[data-engine="hermes"] .hm-cron-item[data-state="disabled"] { opacity: 0.55; }
/* --- Card head (title + actions) --- */
[data-engine="hermes"] .hm-cron-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 14px;
padding: 18px 22px 14px;
border-bottom: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-cron-head-left {
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-cron-title-row {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 6px;
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-cron-name {
font-family: var(--hm-font-serif);
font-size: 16px;
font-weight: 500;
color: var(--hm-text-primary);
letter-spacing: -0.01em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 360px;
}
[data-engine="hermes"] .hm-cron-prompt {
font-family: var(--hm-font-sans);
font-size: 12.5px;
color: var(--hm-text-tertiary);
line-height: 1.55;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
[data-engine="hermes"] .hm-cron-actions {
display: flex;
gap: 4px;
flex-shrink: 0;
}
/* --- Meta grid --- */
[data-engine="hermes"] .hm-cron-meta {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 14px 24px;
padding: 14px 22px 18px;
}
[data-engine="hermes"] .hm-cron-meta-item {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 0;
}
[data-engine="hermes"] .hm-cron-meta-label {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 11px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-cron-meta-value {
font-family: var(--hm-font-mono);
font-size: 12px;
color: var(--hm-text-primary);
display: inline-flex;
align-items: baseline;
gap: 6px;
flex-wrap: wrap;
min-width: 0;
}
[data-engine="hermes"] .hm-cron-rel {
color: var(--hm-text-muted);
font-size: 11px;
}
[data-engine="hermes"] .hm-cron-last-ok {
color: var(--hm-success);
font-weight: 500;
}
[data-engine="hermes"] .hm-cron-last-err {
color: var(--hm-error);
font-weight: 500;
cursor: help;
}
[data-engine="hermes"] .hm-cron-schedule-desc {
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-cron-schedule-expr {
font-size: 11px;
}
/* Skills tags row inside cron card */
[data-engine="hermes"] .hm-cron-meta-item--skills { grid-column: 1 / -1; }
[data-engine="hermes"] .hm-cron-skill-tag {
display: inline-block;
padding: 2px 8px;
margin-right: 4px;
border: 1px solid var(--hm-border);
border-radius: 999px;
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-secondary);
background: var(--hm-surface-2);
}
/* --- Error row (last_error) --- */
[data-engine="hermes"] .hm-cron-err {
border-top: 1px solid var(--hm-border-subtle);
padding: 12px 22px;
background: var(--hm-error-soft);
display: flex;
flex-direction: column;
gap: 4px;
}
[data-engine="hermes"] .hm-cron-err-label {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 11px;
color: var(--hm-error);
}
[data-engine="hermes"] .hm-cron-err-msg {
font-family: var(--hm-font-mono);
font-size: 11.5px;
color: var(--hm-error);
background: transparent;
border: none;
padding: 0;
word-break: break-word;
white-space: pre-wrap;
}
/* ==========================================================================
* 18 · Skills page (sidebar + detail + file browser)
* ==========================================================================
*
* Matches the memory/logs/cron editorial family: warm off-white surfaces,
* hairline borders, serif display + sans body + mono code.
*/
/* ---- Pill variants reused elsewhere (status tags) ---- */
[data-engine="hermes"] .hm-pill--ok {
color: var(--hm-success);
border-color: color-mix(in srgb, var(--hm-success) 35%, transparent);
background: color-mix(in srgb, var(--hm-success) 8%, transparent);
}
[data-engine="hermes"] .hm-pill--muted {
color: var(--hm-text-tertiary);
border-color: var(--hm-border);
background: var(--hm-surface-2);
}
/* ---- Page shell ---- */
[data-engine="hermes"].hermes-skills-page {
/* Bottom padding restored so the two-column card doesn't kiss the viewport
edge — matches the logs page gutter. */
padding: 40px clamp(20px, 3.5vw, 64px) 48px;
max-width: none;
height: 100vh;
display: flex;
flex-direction: column;
background: var(--hm-surface-0);
font-family: var(--hm-font-sans);
color: var(--hm-text-primary);
box-sizing: border-box;
}
[data-engine="hermes"] .hm-skills-count-inline {
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 11.5px;
letter-spacing: 0.01em;
}
/* ---- Two-column layout ---- */
[data-engine="hermes"] .hm-skills-layout {
flex: 1;
min-height: 0;
display: grid;
grid-template-columns: 320px 1fr;
gap: 0;
/* Full frame so the two-column skills workspace reads as one card on
the cream page, not as floating search + empty state. */
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
margin-top: 24px;
margin-bottom: 24px;
background: var(--hm-surface-1);
overflow: hidden;
box-shadow:
0 1px 2px rgba(28, 25, 23, 0.03),
0 2px 6px rgba(28, 25, 23, 0.035);
}
[data-theme="dark"] [data-engine="hermes"] .hm-skills-layout { box-shadow: none; }
/* ---- Sidebar ---- */
[data-engine="hermes"] .hm-skills-sidebar {
border-right: 1px solid var(--hm-border);
display: flex;
flex-direction: column;
min-height: 0;
overflow: hidden;
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-skills-sidebar-search {
position: relative;
padding: 14px 16px;
border-bottom: 1px solid var(--hm-border-subtle);
background: var(--hm-surface-1);
flex-shrink: 0;
}
[data-engine="hermes"] .hm-skills-search-icon {
position: absolute;
left: 26px;
top: 50%;
transform: translateY(-50%);
color: var(--hm-text-tertiary);
pointer-events: none;
display: inline-flex;
}
[data-engine="hermes"] .hm-skills-search-input {
width: 100%;
padding: 7px 10px 7px 30px;
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
color: var(--hm-text-primary);
font-size: 13px;
font-family: var(--hm-font-sans);
transition: all 0.15s ease;
box-sizing: border-box;
}
[data-engine="hermes"] .hm-skills-search-input:focus {
outline: none;
border-color: var(--hm-accent);
box-shadow: 0 0 0 2px rgba(202, 138, 4, 0.12);
}
[data-engine="hermes"] .hm-skills-search-input::placeholder {
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-skills-sidebar-scroll {
flex: 1;
overflow-y: auto;
padding: 6px 0 14px;
}
[data-engine="hermes"] .hm-skills-loading {
padding: 18px 18px;
}
[data-engine="hermes"] .hm-skills-empty {
padding: 42px 20px;
text-align: center;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13.5px;
}
/* ---- Categories ---- */
[data-engine="hermes"] .hm-skill-category {
margin: 4px 0 8px;
}
[data-engine="hermes"] .hm-skill-cat-header {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
padding: 8px 16px;
border: none;
background: transparent;
color: var(--hm-text-secondary);
font-family: var(--hm-font-sans);
font-size: 11.5px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
cursor: pointer;
transition: color 0.15s ease;
}
[data-engine="hermes"] .hm-skill-cat-header:hover {
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skill-cat-arrow {
color: var(--hm-text-tertiary);
transition: transform 0.18s ease;
display: inline-flex;
width: 14px;
justify-content: center;
}
[data-engine="hermes"] .hm-skill-cat-header.is-collapsed .hm-skill-cat-arrow {
transform: rotate(-90deg);
}
[data-engine="hermes"] .hm-skill-cat-name {
flex: 1;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-skill-cat-count {
font-family: var(--hm-font-mono);
font-size: 10px;
font-weight: 500;
padding: 1px 7px;
border-radius: 999px;
background: var(--hm-surface-2);
color: var(--hm-text-tertiary);
border: 1px solid var(--hm-border-subtle);
letter-spacing: 0;
text-transform: none;
}
[data-engine="hermes"] .hm-skill-cat-desc {
padding: 0 16px 6px 38px;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 11.5px;
line-height: 1.55;
}
[data-engine="hermes"] .hm-skill-cat-items {
padding: 2px 0 4px;
}
/* ---- Skill item button ---- */
[data-engine="hermes"] .hm-skill-item {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
padding: 7px 16px 7px 32px;
border: none;
background: transparent;
color: var(--hm-text-primary);
text-align: left;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
border-left: 2px solid transparent;
box-sizing: border-box;
}
[data-engine="hermes"] .hm-skill-item:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-skill-item.is-active {
background: var(--hm-accent-soft);
border-left-color: var(--hm-accent);
}
[data-engine="hermes"] .hm-skill-item.is-disabled .hm-skill-name,
[data-engine="hermes"] .hm-skill-item.is-disabled .hm-skill-desc {
color: var(--hm-text-tertiary);
text-decoration: line-through;
text-decoration-color: color-mix(in srgb, var(--hm-text-tertiary) 40%, transparent);
text-decoration-thickness: 1px;
}
[data-engine="hermes"] .hm-skill-info {
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-skill-name {
font-size: 13px;
line-height: 1.35;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skill-desc {
font-size: 11px;
color: var(--hm-text-tertiary);
line-height: 1.4;
margin-top: 2px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
/* ---- Toggle switch ---- */
[data-engine="hermes"] .hm-switch {
position: relative;
flex-shrink: 0;
width: 30px;
height: 16px;
cursor: pointer;
display: inline-block;
}
[data-engine="hermes"] .hm-switch-track {
position: absolute;
inset: 0;
background: var(--hm-border);
border-radius: 999px;
transition: background 0.18s ease;
}
[data-engine="hermes"] .hm-switch-thumb {
position: absolute;
top: 2px;
left: 2px;
width: 12px;
height: 12px;
background: var(--hm-surface-0);
border-radius: 50%;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
transition: transform 0.18s ease, background 0.18s ease;
}
[data-engine="hermes"] .hm-switch.is-on .hm-switch-track {
background: var(--hm-accent);
}
[data-engine="hermes"] .hm-switch.is-on .hm-switch-thumb {
transform: translateX(14px);
background: #FFFFFF;
}
[data-engine="hermes"] .hm-switch.is-busy {
opacity: 0.55;
cursor: progress;
}
[data-engine="hermes"] .hm-switch.is-busy .hm-switch-thumb {
animation: hm-switch-pulse 0.9s ease-in-out infinite;
}
@keyframes hm-switch-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
/* ---- Main detail pane ---- */
[data-engine="hermes"] .hm-skills-main {
overflow-y: auto;
padding: 28px 36px 40px;
min-width: 0;
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-skills-detail-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
min-height: 320px;
gap: 10px;
color: var(--hm-text-tertiary);
text-align: center;
}
[data-engine="hermes"] .hm-skills-detail-empty-title {
font-family: var(--hm-font-serif);
font-size: 18px;
color: var(--hm-text-secondary);
letter-spacing: -0.005em;
margin-top: 14px;
}
[data-engine="hermes"] .hm-skills-detail-empty-sub {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
color: var(--hm-text-tertiary);
}
/* ---- Detail head ---- */
[data-engine="hermes"] .hm-skills-detail-head {
padding-bottom: 16px;
margin-bottom: 18px;
border-bottom: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-skills-detail-title {
display: flex;
align-items: baseline;
gap: 8px;
flex-wrap: wrap;
font-family: var(--hm-font-serif);
font-size: 22px;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skills-title-cat {
color: var(--hm-text-tertiary);
font-size: 16px;
}
[data-engine="hermes"] .hm-skills-title-sep {
color: var(--hm-text-tertiary);
font-size: 16px;
}
[data-engine="hermes"] .hm-skills-title-name {
font-weight: 500;
}
[data-engine="hermes"] .hm-skills-status {
align-self: center;
margin-left: 4px;
font-family: var(--hm-font-mono);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.08em;
}
[data-engine="hermes"] .hm-skills-detail-sub {
display: inline-flex;
align-items: center;
gap: 6px;
margin-top: 8px;
font-family: var(--hm-font-mono);
font-size: 11.5px;
color: var(--hm-text-tertiary);
letter-spacing: 0.01em;
}
/* ---- Detail body / markdown ---- */
[data-engine="hermes"] .hm-skills-detail-body {
padding-bottom: 20px;
}
[data-engine="hermes"] .hm-skills-markdown {
font-family: var(--hm-font-sans);
font-size: 14px;
line-height: 1.75;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skills-markdown p { margin: 0 0 10px; }
[data-engine="hermes"] .hm-skills-markdown h2,
[data-engine="hermes"] .hm-skills-markdown h3,
[data-engine="hermes"] .hm-skills-markdown h4,
[data-engine="hermes"] .hm-skills-markdown h5 {
font-family: var(--hm-font-serif);
font-weight: 500;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skills-markdown h2 { font-size: 20px; margin: 20px 0 8px; }
[data-engine="hermes"] .hm-skills-markdown h3 { font-size: 17px; margin: 16px 0 6px; }
[data-engine="hermes"] .hm-skills-markdown h4 {
font-size: 14.5px;
font-style: italic;
color: var(--hm-accent);
margin: 14px 0 4px;
}
[data-engine="hermes"] .hm-skills-markdown h5 {
font-size: 13px;
color: var(--hm-text-secondary);
margin: 12px 0 4px;
}
[data-engine="hermes"] .hm-skills-markdown ul {
margin: 4px 0 10px;
padding-left: 22px;
}
[data-engine="hermes"] .hm-skills-markdown li {
margin: 2px 0;
line-height: 1.7;
}
[data-engine="hermes"] .hm-skills-markdown pre {
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
padding: 12px 14px;
margin: 10px 0;
overflow-x: auto;
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.65;
}
[data-engine="hermes"] .hm-skills-markdown code {
font-family: var(--hm-font-mono);
font-size: 12.5px;
background: var(--hm-surface-2);
padding: 1px 6px;
border-radius: 3px;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-skills-markdown pre code {
background: transparent;
padding: 0;
}
[data-engine="hermes"] .hm-skills-markdown a {
color: var(--hm-accent);
text-decoration: underline;
text-underline-offset: 2px;
}
[data-engine="hermes"] .hm-skills-markdown strong { font-weight: 600; }
[data-engine="hermes"] .hm-skills-markdown em { font-style: italic; }
/* ---- Attached files section ---- */
[data-engine="hermes"] .hm-skills-files {
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-skills-files-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
}
[data-engine="hermes"] .hm-skills-files-label {
font-family: var(--hm-font-sans);
font-size: 11px;
font-weight: 600;
color: var(--hm-text-secondary);
text-transform: uppercase;
letter-spacing: 0.08em;
}
[data-engine="hermes"] .hm-skills-files-count {
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-tertiary);
padding: 0 7px;
border-radius: 999px;
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-skills-files-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
[data-engine="hermes"] .hm-skills-file-chip {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 10px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-1);
color: var(--hm-text-secondary);
font-family: var(--hm-font-mono);
font-size: 11.5px;
cursor: pointer;
transition: all 0.15s ease;
max-width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-skills-file-chip span {
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-skills-file-chip:hover {
border-color: var(--hm-accent);
color: var(--hm-accent);
background: var(--hm-surface-0);
}
/* ---- Breadcrumb for file view ---- */
[data-engine="hermes"] .hm-skills-detail-breadcrumb {
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 14px;
margin-bottom: 14px;
border-bottom: 1px solid var(--hm-border);
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-skills-back-btn {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 4px 10px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-1);
color: var(--hm-text-secondary);
font-family: var(--hm-font-sans);
font-size: 12px;
cursor: pointer;
transition: all 0.15s ease;
}
[data-engine="hermes"] .hm-skills-back-btn:hover {
color: var(--hm-accent);
border-color: var(--hm-accent);
}
[data-engine="hermes"] .hm-skills-breadcrumb-sep {
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-skills-breadcrumb-path {
font-family: var(--hm-font-mono);
font-size: 11.5px;
color: var(--hm-text-tertiary);
word-break: break-all;
}
/* Responsive: collapse sidebar on narrow viewports */
@media (max-width: 960px) {
[data-engine="hermes"] .hm-skills-layout {
grid-template-columns: 260px 1fr;
}
[data-engine="hermes"].hermes-skills-page {
padding: 28px 24px 40px;
}
[data-engine="hermes"] .hm-skills-main {
padding: 22px 24px 36px;
}
}
@media (max-width: 720px) {
[data-engine="hermes"] .hm-skills-layout {
grid-template-columns: 1fr;
grid-template-rows: auto 1fr;
}
[data-engine="hermes"] .hm-skills-sidebar {
border-right: none;
border-bottom: 1px solid var(--hm-border);
max-height: 40vh;
}
}
/* ---- Skills page · prevent hero + toolsets from being squashed ---------
.hermes-skills-page is `display:flex;flex-direction:column;height:100%`
(defined in pages.css) so .hm-skills-layout (flex:1) can fill the viewport
and let the two-column sidebar scroll independently. Without these
shrink-locks, the flex distribution squeezes hero (240→165px) and toolsets
when they share viewport with the layout. */
[data-engine="hermes"].hermes-skills-page > .hm-hero,
[data-engine="hermes"].hermes-skills-page > .hm-toolsets {
flex-shrink: 0;
}
/* ---- Skills · Toolsets section ---------------------------------------- */
[data-engine="hermes"] .hm-toolsets {
margin: 24px 0 0;
padding: 18px 22px 14px;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
box-shadow: 0 1px 2px rgba(28, 25, 23, 0.03), 0 2px 6px rgba(28, 25, 23, 0.035);
}
[data-theme="dark"] [data-engine="hermes"] .hm-toolsets { box-shadow: none; }
[data-engine="hermes"] .hm-toolsets-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
margin-bottom: 14px;
}
[data-engine="hermes"] .hm-toolsets-title-block {
min-width: 0;
}
[data-engine="hermes"] .hm-toolsets-title {
font-family: var(--hm-font-serif);
font-size: 17px;
font-weight: 500;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
display: flex;
align-items: center;
gap: 10px;
}
[data-engine="hermes"] .hm-toolsets-count {
font-family: var(--hm-font-mono);
font-size: 11px;
font-weight: 400;
color: var(--hm-text-tertiary);
background: var(--hm-surface-2);
padding: 2px 8px;
border-radius: 999px;
}
[data-engine="hermes"] .hm-toolsets-sub {
font-size: 11.5px;
color: var(--hm-text-tertiary);
margin-top: 4px;
font-family: var(--hm-font-mono);
}
[data-engine="hermes"] .hm-toolsets-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px;
}
[data-engine="hermes"] .hm-toolset-card {
padding: 12px 14px;
background: var(--hm-surface-0);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
transition: border-color 0.18s ease, background 0.18s ease;
}
[data-engine="hermes"] .hm-toolset-card.is-on {
border-color: var(--hm-border);
}
[data-engine="hermes"] .hm-toolset-card.is-off {
background: transparent;
opacity: 0.55;
}
[data-engine="hermes"] .hm-toolset-card:hover {
border-color: var(--hm-accent, var(--hm-text-primary));
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-toolset-card--skel {
pointer-events: none;
border-color: var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-toolset-card-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
}
[data-engine="hermes"] .hm-toolset-status {
font-size: 13px;
font-weight: 700;
width: 14px;
display: inline-block;
text-align: center;
}
[data-engine="hermes"] .hm-toolset-status.is-on { color: var(--hm-success, #2d7d4f); }
[data-engine="hermes"] .hm-toolset-status.is-off { color: var(--hm-text-tertiary); }
[data-engine="hermes"] .hm-toolset-name {
font-family: var(--hm-font-mono);
font-size: 12.5px;
font-weight: 500;
color: var(--hm-text-primary);
letter-spacing: -0.01em;
}
[data-engine="hermes"] .hm-toolset-desc {
font-size: 11.5px;
color: var(--hm-text-secondary);
line-height: 1.5;
/* 限两行 + 截断emoji + 文字混排时避免一个 toolset 的描述把卡片撑得很高 */
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
[data-engine="hermes"] .hm-toolsets-empty,
[data-engine="hermes"] .hm-toolsets-fallback-hint {
padding: 12px 0 4px;
font-style: italic;
font-family: var(--hm-font-serif);
color: var(--hm-text-tertiary);
font-size: 13px;
}
[data-engine="hermes"] .hm-toolsets-fallback-pre {
margin: 8px 0 0;
padding: 12px 14px;
background: var(--hm-surface-0);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
font-family: var(--hm-font-mono);
font-size: 11.5px;
line-height: 1.6;
color: var(--hm-text-secondary);
white-space: pre-wrap;
word-break: break-all;
max-height: 320px;
overflow: auto;
}
[data-engine="hermes"] .hm-toolsets-hint {
margin-top: 12px;
padding-top: 10px;
border-top: 1px solid var(--hm-border-subtle);
font-size: 11px;
color: var(--hm-text-tertiary);
line-height: 1.6;
font-family: var(--hm-font-mono);
}
@media (max-width: 720px) {
[data-engine="hermes"] .hm-toolsets {
padding: 14px 16px 12px;
}
[data-engine="hermes"] .hm-toolsets-grid {
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
}
}
/* ==========================================================================
* 19 · Chat page (editorial luxury re-write)
* ==========================================================================
*/
/* ---- Page shell ---- */
[data-engine="hermes"].hermes-chat-page {
height: 100vh;
width: 100%;
max-width: none;
display: flex;
flex-direction: column;
background: var(--hm-surface-0);
color: var(--hm-text-primary);
font-family: var(--hm-font-sans);
box-sizing: border-box;
overflow: hidden;
}
/* Switched from grid (`280px 1fr`) to flex so collapsing the sidebar
releases its width back to the chat area. The grid version pinned the
first track at 280px regardless of the inner element's width:0 — the
sidebar shrank inside its track but the empty 280px slot stayed. */
[data-engine="hermes"] .hm-chat-shell {
flex: 1;
width: 100%;
max-width: none;
min-height: 0;
display: flex;
position: relative;
}
[data-engine="hermes"] .hm-chat-sidebar-backdrop {
display: none;
}
/* ---- Sidebar ---- */
[data-engine="hermes"] .hm-chat-sidebar {
width: 280px;
min-width: 0;
flex: 0 0 280px;
border-right: 1px solid var(--hm-border);
display: flex;
flex-direction: column;
min-height: 0;
background: var(--hm-surface-1);
overflow: hidden;
transition: width 0.22s ease, opacity 0.22s ease;
}
[data-engine="hermes"] .hm-chat-sidebar.is-collapsed {
width: 0;
flex-basis: 0;
border-right-color: transparent;
pointer-events: none;
opacity: 0;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-sidebar {
display: none;
}
/* Main column — absorbs leftover horizontal space when sidebar collapses. */
[data-engine="hermes"] .hm-chat-main {
flex: 1 1 0;
width: 0;
min-width: 0;
position: relative;
display: flex;
flex-direction: column;
min-height: 0;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-main {
width: 100%;
flex-basis: 100%;
}
[data-engine="hermes"] .hm-chat-sidebar-profile {
position: relative;
padding: 12px 14px 4px;
}
[data-engine="hermes"] .hm-chat-profile-toggle {
width: 100%;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
border: 1px solid var(--hm-border);
border-radius: 999px;
background: var(--hm-surface-0);
color: var(--hm-text-primary);
font-family: var(--hm-font-mono);
font-size: 11.5px;
letter-spacing: 0.02em;
cursor: pointer;
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
}
[data-engine="hermes"] .hm-chat-profile-toggle:hover:not(:disabled) {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-profile-toggle:disabled {
cursor: default;
opacity: 0.7;
}
[data-engine="hermes"] .hm-chat-profile-toggle.is-open {
border-color: var(--hm-accent);
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-profile-name {
flex: 1;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-chat-profile-caret {
display: inline-flex;
transform: rotate(90deg);
opacity: 0.7;
}
[data-engine="hermes"] .hm-chat-profile-toggle.is-open .hm-chat-profile-caret {
transform: rotate(-90deg);
}
[data-engine="hermes"] .hm-chat-profile-menu {
position: absolute;
left: 14px;
right: 14px;
top: 100%;
margin-top: 4px;
z-index: 30;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
box-shadow: var(--hm-shadow-md);
overflow: hidden;
display: flex;
flex-direction: column;
max-height: 320px;
}
[data-engine="hermes"] .hm-chat-profile-menu-head,
[data-engine="hermes"] .hm-chat-profile-menu-foot {
padding: 8px 14px;
font-family: var(--hm-font-mono);
font-size: 10px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--hm-text-tertiary);
background: var(--hm-surface-0);
border-bottom: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-chat-profile-menu-foot {
border-bottom: none;
border-top: 1px solid var(--hm-border-subtle);
text-transform: none;
letter-spacing: 0.01em;
font-size: 10.5px;
}
[data-engine="hermes"] .hm-chat-profile-item {
display: flex;
align-items: center;
gap: 8px;
padding: 9px 14px;
width: 100%;
text-align: left;
background: transparent;
border: none;
border-bottom: 1px solid var(--hm-border-subtle);
color: var(--hm-text-primary);
font-family: var(--hm-font-mono);
font-size: 11.5px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
[data-engine="hermes"] .hm-chat-profile-item:last-of-type {
border-bottom: none;
}
[data-engine="hermes"] .hm-chat-profile-item:hover:not(:disabled) {
background: var(--hm-accent-soft);
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-profile-item.is-active {
color: var(--hm-accent);
background: color-mix(in srgb, var(--hm-accent) 6%, transparent);
}
[data-engine="hermes"] .hm-chat-profile-item:disabled {
cursor: default;
opacity: 0.6;
}
[data-engine="hermes"] .hm-chat-profile-item-name {
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-chat-profile-item-badge {
font-size: 9.5px;
padding: 1px 6px;
border-radius: 999px;
background: color-mix(in srgb, var(--hm-success) 16%, transparent);
color: var(--hm-success);
}
[data-engine="hermes"] .hm-chat-profile-item-active {
display: inline-flex;
}
[data-engine="hermes"] .hm-chat-sidebar-head-actions {
display: inline-flex;
align-items: center;
gap: 6px;
}
[data-engine="hermes"] .hm-chat-select-toggle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border: 1px solid var(--hm-border);
border-radius: 50%;
background: var(--hm-surface-0);
color: var(--hm-text-secondary);
cursor: pointer;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
[data-engine="hermes"] .hm-chat-select-toggle:hover {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-select-toggle.is-active {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-bulkbar {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 14px 10px;
border-bottom: 1px solid var(--hm-border-subtle);
font-family: var(--hm-font-mono);
font-size: 11px;
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-chat-bulkbar-select-all {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
border: 1px solid var(--hm-border-subtle);
border-radius: 999px;
background: transparent;
color: var(--hm-text-secondary);
cursor: pointer;
font-family: inherit;
font-size: inherit;
}
[data-engine="hermes"] .hm-chat-bulkbar-select-all:hover {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-bulkbar-count {
flex: 1;
text-align: right;
letter-spacing: 0.02em;
}
[data-engine="hermes"] .hm-chat-bulkbar-delete {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
border: 1px solid color-mix(in srgb, var(--hm-error) 30%, transparent);
border-radius: 999px;
background: var(--hm-error-soft);
color: var(--hm-error);
cursor: pointer;
font-family: inherit;
font-size: inherit;
}
[data-engine="hermes"] .hm-chat-bulkbar-delete:disabled {
opacity: 0.5;
cursor: default;
}
[data-engine="hermes"] .hm-chat-bulkbar-delete:not(:disabled):hover {
background: color-mix(in srgb, var(--hm-error) 18%, transparent);
}
[data-engine="hermes"] .hm-chat-session-check {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
margin-right: 6px;
border: none;
background: transparent;
color: var(--hm-text-tertiary);
cursor: pointer;
border-radius: 50%;
transition: color 0.15s ease, background 0.15s ease;
}
[data-engine="hermes"] .hm-chat-session-check:hover,
[data-engine="hermes"] .hm-chat-session-check.is-on {
color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-session-item.is-selected {
border-color: color-mix(in srgb, var(--hm-accent) 35%, transparent);
background: color-mix(in srgb, var(--hm-accent) 8%, transparent);
}
[data-engine="hermes"] .hm-chat-sidebar.is-select-mode .hm-chat-session-actions {
display: none;
}
[data-engine="hermes"].hm-sessions-page {
display: flex;
flex-direction: column;
gap: 18px;
}
[data-engine="hermes"] .hm-sessions-hero {
display: flex;
justify-content: space-between;
gap: 18px;
padding: 22px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-lg);
background:
radial-gradient(circle at top left, color-mix(in srgb, var(--hm-accent) 15%, transparent), transparent 34%),
var(--hm-surface-1);
box-shadow: var(--hm-shadow-sm);
}
[data-engine="hermes"] .hm-sessions-eyebrow {
font-family: var(--hm-font-mono);
font-size: 10.5px;
letter-spacing: 0.16em;
color: var(--hm-accent);
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-sessions-hero h1 {
margin: 0 0 8px;
font-size: clamp(24px, 3vw, 34px);
letter-spacing: -0.04em;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-sessions-hero p {
margin: 0;
max-width: 620px;
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-sessions-hero-actions {
display: flex;
align-items: flex-start;
gap: 8px;
flex-wrap: wrap;
justify-content: flex-end;
}
[data-engine="hermes"] .hm-sessions-btn,
[data-engine="hermes"] .hm-sessions-bulkbar button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
border: 1px solid var(--hm-border);
border-radius: 999px;
background: var(--hm-surface-0);
color: var(--hm-text-primary);
padding: 8px 13px;
font-size: 12px;
font-family: var(--hm-font-mono);
cursor: pointer;
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease, transform 0.15s ease;
}
[data-engine="hermes"] .hm-sessions-btn:hover:not(:disabled),
[data-engine="hermes"] .hm-sessions-bulkbar button:hover:not(:disabled) {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
transform: translateY(-1px);
}
[data-engine="hermes"] .hm-sessions-btn:disabled,
[data-engine="hermes"] .hm-sessions-bulkbar button:disabled {
opacity: 0.5;
cursor: default;
}
[data-engine="hermes"] .hm-sessions-btn.is-danger,
[data-engine="hermes"] .hm-sessions-bulkbar button.is-danger {
color: var(--hm-error);
border-color: color-mix(in srgb, var(--hm-error) 32%, transparent);
background: var(--hm-error-soft);
}
[data-engine="hermes"] .hm-sessions-btn.is-ghost {
background: transparent;
}
[data-engine="hermes"] .hm-sessions-profile-select,
[data-engine="hermes"] .hm-sessions-toolbar select {
border: 1px solid var(--hm-border);
border-radius: 999px;
background: var(--hm-surface-0);
color: var(--hm-text-primary);
padding: 8px 12px;
font-family: var(--hm-font-mono);
font-size: 12px;
outline: none;
}
[data-engine="hermes"] .hm-sessions-profile-static {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
border: 1px solid var(--hm-border);
border-radius: 999px;
color: var(--hm-text-secondary);
font-family: var(--hm-font-mono);
font-size: 12px;
}
[data-engine="hermes"] .hm-sessions-stats {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
}
[data-engine="hermes"] .hm-sessions-stats > div,
[data-engine="hermes"] .hm-session-stat-grid > div {
padding: 14px;
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-sessions-stats span,
[data-engine="hermes"] .hm-session-stat-grid span {
display: block;
margin-bottom: 7px;
color: var(--hm-text-tertiary);
font-size: 10.5px;
font-family: var(--hm-font-mono);
text-transform: uppercase;
letter-spacing: 0.08em;
}
[data-engine="hermes"] .hm-sessions-stats strong,
[data-engine="hermes"] .hm-session-stat-grid strong {
color: var(--hm-text-primary);
font-size: 20px;
word-break: break-word;
}
[data-engine="hermes"] .hm-sessions-shell {
display: grid;
grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
gap: 16px;
min-height: 560px;
}
[data-engine="hermes"] .hm-sessions-list-panel,
[data-engine="hermes"] .hm-session-detail {
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-lg);
background: var(--hm-surface-1);
overflow: hidden;
min-height: 0;
}
[data-engine="hermes"] .hm-sessions-list-panel {
display: flex;
flex-direction: column;
}
[data-engine="hermes"] .hm-sessions-toolbar {
display: flex;
gap: 8px;
padding: 14px;
border-bottom: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-sessions-search {
flex: 1;
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
border: 1px solid var(--hm-border);
border-radius: 999px;
background: var(--hm-surface-0);
padding: 0 11px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-sessions-search input {
width: 100%;
min-width: 0;
border: none;
outline: none;
background: transparent;
color: var(--hm-text-primary);
padding: 9px 0;
font-size: 12px;
}
[data-engine="hermes"] .hm-sessions-bulkbar {
display: flex;
justify-content: space-between;
gap: 8px;
padding: 10px 14px;
border-bottom: 1px solid var(--hm-border-subtle);
background: color-mix(in srgb, var(--hm-surface-0) 70%, transparent);
}
[data-engine="hermes"] .hm-sessions-bulkbar button {
padding: 6px 10px;
font-size: 11px;
}
[data-engine="hermes"] .hm-sessions-list {
overflow: auto;
padding: 10px;
}
[data-engine="hermes"] .hm-session-row {
width: 100%;
display: grid;
grid-template-columns: 26px minmax(0, 1fr) auto;
gap: 10px;
align-items: center;
padding: 11px;
margin-bottom: 8px;
border: 1px solid transparent;
border-radius: var(--hm-radius-sm);
background: transparent;
color: var(--hm-text-primary);
text-align: left;
cursor: pointer;
transition: border-color 0.15s ease, background 0.15s ease, transform 0.15s ease;
}
[data-engine="hermes"] .hm-session-row:hover,
[data-engine="hermes"] .hm-session-row.is-active {
border-color: color-mix(in srgb, var(--hm-accent) 28%, transparent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-session-row.is-selected {
border-color: color-mix(in srgb, var(--hm-accent) 42%, transparent);
background: color-mix(in srgb, var(--hm-accent) 10%, transparent);
}
[data-engine="hermes"] .hm-session-row-check {
display: inline-flex;
align-items: center;
justify-content: center;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-session-row-main {
min-width: 0;
display: flex;
flex-direction: column;
gap: 5px;
}
[data-engine="hermes"] .hm-session-row-title {
display: flex;
align-items: center;
gap: 6px;
font-weight: 650;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-session-row-preview {
color: var(--hm-text-secondary);
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-session-row-meta {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
[data-engine="hermes"] .hm-session-row-meta span {
padding: 2px 6px;
border-radius: 999px;
background: var(--hm-surface-0);
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 10px;
}
[data-engine="hermes"] .hm-session-row-time {
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 10.5px;
white-space: nowrap;
}
[data-engine="hermes"] .hm-sessions-loading,
[data-engine="hermes"] .hm-sessions-empty,
[data-engine="hermes"] .hm-session-empty-messages {
padding: 28px 14px;
color: var(--hm-text-tertiary);
text-align: center;
font-family: var(--hm-font-mono);
font-size: 12px;
}
[data-engine="hermes"] .hm-session-detail {
display: flex;
flex-direction: column;
}
[data-engine="hermes"] .hm-session-detail.is-empty {
align-items: center;
justify-content: center;
gap: 12px;
text-align: center;
color: var(--hm-text-tertiary);
padding: 34px;
}
[data-engine="hermes"] .hm-session-detail.is-empty h3 {
margin: 0;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-session-detail.is-empty p {
margin: 0;
max-width: 380px;
}
[data-engine="hermes"] .hm-session-detail-head {
display: flex;
justify-content: space-between;
gap: 18px;
padding: 20px;
border-bottom: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-session-detail-kicker {
margin-bottom: 8px;
color: var(--hm-accent);
font-family: var(--hm-font-mono);
font-size: 10.5px;
letter-spacing: 0.12em;
text-transform: uppercase;
}
[data-engine="hermes"] .hm-session-detail h2 {
margin: 0 0 8px;
color: var(--hm-text-primary);
font-size: 24px;
letter-spacing: -0.03em;
}
[data-engine="hermes"] .hm-session-detail-id {
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 11px;
word-break: break-all;
}
[data-engine="hermes"] .hm-session-detail-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-content: flex-start;
justify-content: flex-end;
}
[data-engine="hermes"] .hm-session-stat-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
padding: 14px 20px;
}
[data-engine="hermes"] .hm-session-stat-grid strong {
font-size: 15px;
}
[data-engine="hermes"] .hm-session-message-list {
flex: 1;
overflow: auto;
padding: 18px 20px 22px;
}
[data-engine="hermes"] .hm-session-msg {
margin-bottom: 12px;
padding: 13px;
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-session-msg-role {
margin-bottom: 7px;
color: var(--hm-accent);
font-family: var(--hm-font-mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
[data-engine="hermes"] .hm-session-msg-body {
white-space: pre-wrap;
color: var(--hm-text-primary);
line-height: 1.58;
font-size: 13px;
}
@media (max-width: 980px) {
[data-engine="hermes"] .hm-sessions-hero,
[data-engine="hermes"] .hm-session-detail-head {
flex-direction: column;
}
[data-engine="hermes"] .hm-sessions-shell {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-sessions-stats,
[data-engine="hermes"] .hm-session-stat-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 640px) {
[data-engine="hermes"] .hm-sessions-stats,
[data-engine="hermes"] .hm-session-stat-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-sessions-toolbar,
[data-engine="hermes"] .hm-sessions-hero-actions {
flex-direction: column;
align-items: stretch;
}
[data-engine="hermes"] .hm-session-row {
grid-template-columns: 24px minmax(0, 1fr);
}
[data-engine="hermes"] .hm-session-row-time {
grid-column: 2;
}
}
[data-engine="hermes"] .hm-chat-sidebar-head {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 18px 10px;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-sidebar-title {
font-family: var(--hm-font-sans);
font-size: 10.5px;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-new-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
border: 1px solid var(--hm-border);
border-radius: 50%;
background: var(--hm-surface-0);
color: var(--hm-text-secondary);
cursor: pointer;
transition: all 0.15s ease;
}
[data-engine="hermes"] .hm-chat-new-btn:hover {
color: var(--hm-accent);
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-sidebar-tip {
padding: 0 18px 12px;
border-bottom: 1px solid var(--hm-border-subtle);
font-family: var(--hm-font-mono);
font-size: 10px;
line-height: 1.5;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-sidebar-body {
flex: 1;
overflow-y: auto;
padding: 8px 8px 18px;
}
[data-engine="hermes"] .hm-chat-sidebar-loading,
[data-engine="hermes"] .hm-chat-sidebar-empty {
padding: 30px 12px;
text-align: center;
font-family: var(--hm-font-serif);
font-style: italic;
color: var(--hm-text-tertiary);
font-size: 13px;
}
[data-engine="hermes"] .hm-chat-group {
margin: 2px 0 4px;
}
[data-engine="hermes"] .hm-chat-group-head {
display: flex;
align-items: center;
gap: 6px;
width: 100%;
padding: 9px 12px 6px;
border: none;
background: transparent;
color: var(--hm-text-tertiary);
cursor: pointer;
font-family: var(--hm-font-sans);
font-size: 10.5px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
transition: color 0.15s ease;
}
[data-engine="hermes"] .hm-chat-group-head:hover {
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-chat-group-head--static {
cursor: default;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-group-head--static:hover {
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-group-arrow {
display: inline-flex;
transition: transform 0.15s ease;
transform: rotate(90deg);
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-group-head.is-collapsed .hm-chat-group-arrow {
transform: rotate(0deg);
}
[data-engine="hermes"] .hm-chat-group-label {
flex: 1;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-chat-group-count {
font-family: var(--hm-font-mono);
font-size: 10px;
font-weight: 500;
color: var(--hm-text-tertiary);
background: var(--hm-surface-2);
padding: 1px 6px;
border-radius: 999px;
border: 1px solid var(--hm-border-subtle);
letter-spacing: 0;
text-transform: none;
}
/* ---- Session item ---- */
[data-engine="hermes"] .hm-chat-session-item {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
padding: 8px 10px 8px 14px;
border: none;
background: transparent;
color: var(--hm-text-primary);
cursor: pointer;
text-align: left;
border-left: 2px solid transparent;
border-radius: 0 var(--hm-radius-sm) var(--hm-radius-sm) 0;
transition: background 0.12s ease;
position: relative;
}
[data-engine="hermes"] .hm-chat-session-item:hover {
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-chat-session-item:hover .hm-chat-session-del {
opacity: 1;
}
[data-engine="hermes"] .hm-chat-session-item.is-active {
background: var(--hm-accent-soft);
border-left-color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-session-item.is-active .hm-chat-session-title {
color: var(--hm-accent);
font-weight: 500;
}
[data-engine="hermes"] .hm-chat-session-item.is-live .hm-chat-session-title {
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-session-main {
flex: 1;
min-width: 0;
}
[data-engine="hermes"] .hm-chat-session-title-row {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
[data-engine="hermes"] .hm-chat-session-title {
flex: 1;
font-size: 13px;
line-height: 1.35;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-chat-session-spinner {
flex-shrink: 0;
color: var(--hm-accent);
animation: hm-chat-spin 1.1s linear infinite;
}
[data-engine="hermes"] .hm-chat-session-pin {
flex-shrink: 0;
color: var(--hm-accent);
opacity: 0.85;
}
[data-engine="hermes"] .hm-chat-session-live {
display: inline-flex;
align-items: center;
gap: 4px;
flex-shrink: 0;
padding: 1px 7px;
border-radius: 999px;
font-family: var(--hm-font-sans);
font-size: 9.5px;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-live-dot {
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--hm-accent);
animation: hm-chat-live-pulse 2s ease-in-out infinite;
}
@keyframes hm-chat-live-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.7); }
}
@keyframes hm-chat-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
[data-engine="hermes"] .hm-chat-session-meta {
display: flex;
align-items: center;
gap: 6px;
margin-top: 2px;
}
[data-engine="hermes"] .hm-chat-session-model {
font-family: var(--hm-font-mono);
font-size: 10px;
color: var(--hm-accent);
background: var(--hm-accent-soft);
padding: 0 5px;
line-height: 15px;
border-radius: 3px;
max-width: 110px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-chat-session-time {
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-tertiary);
letter-spacing: 0.01em;
}
/* Always show the delete button at low opacity so users know it's there;
bump to full opacity on row hover. Pure-on-hover discoverability bug
was making people think "sessions can't be deleted". */
[data-engine="hermes"] .hm-chat-session-del {
flex-shrink: 0;
opacity: 0.45;
padding: 4px;
border: none;
background: transparent;
color: var(--hm-text-tertiary);
cursor: pointer;
border-radius: 4px;
transition: all 0.15s ease;
display: inline-flex;
align-items: center;
justify-content: center;
}
[data-engine="hermes"] .hm-chat-session-del:hover {
color: var(--hm-error);
background: var(--hm-error-soft);
}
[data-engine="hermes"] .hm-chat-session-actions {
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 4px;
}
[data-engine="hermes"] .hm-chat-session-action {
min-width: 26px;
height: 26px;
padding: 0 7px;
border: 1px solid var(--hm-border-subtle);
border-radius: 999px;
background: color-mix(in srgb, var(--hm-surface-0) 76%, transparent);
color: var(--hm-text-tertiary);
display: inline-flex;
align-items: center;
justify-content: center;
gap: 4px;
cursor: pointer;
transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
}
[data-engine="hermes"] .hm-chat-session-action:hover {
color: var(--hm-text-primary);
background: var(--hm-surface-0);
border-color: var(--hm-border);
}
[data-engine="hermes"] .hm-chat-session-del {
opacity: 1;
}
[data-engine="hermes"] .hm-chat-session-del span {
font-size: 11px;
line-height: 1;
}
[data-engine="hermes"] .hm-chat-session-del:hover {
color: var(--hm-error);
background: var(--hm-error-soft);
border-color: color-mix(in srgb, var(--hm-error) 30%, transparent);
}
[data-engine="hermes"] .hm-chat-session-menu {
padding: 0;
}
/* ---- Main area ---- */
[data-engine="hermes"] .hm-chat-main {
display: flex;
flex-direction: column;
min-width: 0;
overflow: hidden;
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-chat-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 28px;
border-bottom: 1px solid var(--hm-border);
flex-shrink: 0;
background: var(--hm-surface-0);
gap: 16px;
}
[data-engine="hermes"] .hm-chat-header-left {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
min-width: 0;
overflow: hidden;
}
[data-engine="hermes"] .hm-chat-toggle-sidebar {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 5px 7px;
border: 1px solid transparent;
background: transparent;
color: var(--hm-text-tertiary);
cursor: pointer;
border-radius: 999px;
transition: all 0.15s ease;
font-family: var(--hm-font-sans);
font-size: 12px;
}
[data-engine="hermes"] .hm-chat-toggle-sidebar span {
display: none;
}
[data-engine="hermes"] .hm-chat-toggle-sidebar:hover {
color: var(--hm-text-primary);
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-chat-toggle-sidebar.is-collapsed {
border-color: var(--hm-border-subtle);
background: var(--hm-surface-1);
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-chat-toggle-sidebar.is-collapsed span {
display: inline;
}
[data-engine="hermes"] .hm-chat-header-title-wrap {
display: flex;
align-items: baseline;
gap: 10px;
min-width: 0;
overflow: hidden;
}
[data-engine="hermes"] .hm-chat-header-title {
font-family: var(--hm-font-serif);
font-size: 18px;
font-weight: 500;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-chat-source-badge {
flex-shrink: 0;
font-family: var(--hm-font-mono);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--hm-text-tertiary);
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
padding: 1px 7px;
border-radius: 999px;
line-height: 16px;
}
[data-engine="hermes"] .hm-chat-header-right {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-gw-status {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 10px;
border: 1px solid var(--hm-border);
border-radius: 999px;
background: var(--hm-surface-1);
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-tertiary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
[data-engine="hermes"] .hm-chat-gw-status.is-online {
color: var(--hm-success);
border-color: color-mix(in srgb, var(--hm-success) 30%, transparent);
background: color-mix(in srgb, var(--hm-success) 6%, transparent);
}
[data-engine="hermes"] .hm-chat-gw-status.is-offline {
color: var(--hm-warn, #CA8A04);
border-color: color-mix(in srgb, var(--hm-warn, #CA8A04) 30%, transparent);
background: color-mix(in srgb, var(--hm-warn, #CA8A04) 6%, transparent);
}
/* "GATEWAY" label — muted prefix, always grey regardless of state tint */
[data-engine="hermes"] .hm-chat-gw-label {
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 10.5px;
letter-spacing: 0.08em;
font-weight: 500;
}
[data-engine="hermes"] .hm-chat-gw-status .hm-chat-gw-text {
font-weight: 600;
letter-spacing: 0.04em;
}
[data-engine="hermes"] .hm-chat-gw-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-gw-status.is-online .hm-chat-gw-dot {
background: var(--hm-success);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--hm-success) 20%, transparent);
}
[data-engine="hermes"] .hm-chat-gw-model {
color: var(--hm-text-secondary);
text-transform: none;
letter-spacing: 0;
font-size: 10.5px;
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
padding-left: 4px;
border-left: 1px solid var(--hm-border);
margin-left: 2px;
}
/* ---- Health banner (install / gateway readiness) ---- */
[data-engine="hermes"] .hm-chat-health-banner {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 28px;
font-size: 13px;
border-bottom: 1px solid var(--hm-border);
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-health-banner.is-error {
background: var(--hm-error-soft);
color: var(--hm-error);
}
[data-engine="hermes"] .hm-chat-health-banner.is-warn {
background: var(--hm-warn-soft);
color: var(--hm-warn);
}
[data-engine="hermes"] .hm-chat-health-icon {
font-size: 14px;
line-height: 1;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-health-msg {
flex: 1;
line-height: 1.5;
}
[data-engine="hermes"] .hm-chat-health-action {
flex-shrink: 0;
padding: 4px 12px;
border-radius: 999px;
color: inherit;
text-decoration: none;
font-weight: 500;
font-size: 12px;
border: 1px solid currentColor;
background: transparent;
transition: background 0.16s ease, color 0.16s ease;
}
[data-engine="hermes"] .hm-chat-health-action:hover {
background: currentColor;
color: var(--hm-surface-0);
}
/* ---- Messages area ---- */
[data-engine="hermes"] .hm-chat-messages {
flex: 1;
overflow-y: auto;
padding: 28px 48px;
display: flex;
flex-direction: column;
gap: 20px;
background: var(--hm-surface-0);
}
[data-engine="hermes"] .hm-chat-jump-bottom {
position: absolute;
right: 32px;
bottom: 112px;
z-index: 8;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 12px;
border: 1px solid var(--hm-border);
border-radius: 999px;
background: color-mix(in srgb, var(--hm-surface-0) 88%, transparent);
color: var(--hm-text-secondary);
box-shadow: var(--hm-shadow-sm);
font-family: var(--hm-font-mono);
font-size: 11px;
cursor: pointer;
opacity: 0;
pointer-events: none;
transform: translateY(8px);
transition: opacity 0.18s ease, transform 0.18s ease, color 0.15s ease, background 0.15s ease;
}
[data-engine="hermes"] .hm-chat-jump-bottom.is-visible {
opacity: 1;
pointer-events: auto;
transform: translateY(0);
}
[data-engine="hermes"] .hm-chat-jump-bottom:hover {
color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-messages-empty {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 6px;
color: var(--hm-text-tertiary);
text-align: center;
min-height: 320px;
}
[data-engine="hermes"] .hm-chat-empty-title {
font-family: var(--hm-font-serif);
font-size: 18px;
color: var(--hm-text-secondary);
letter-spacing: -0.005em;
}
[data-engine="hermes"] .hm-chat-empty-sub {
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
color: var(--hm-text-tertiary);
}
/* ---- Message bubbles ---- */
[data-engine="hermes"] .hm-chat-msg { display: flex; flex-direction: column; }
[data-engine="hermes"] .hm-chat-msg--user { align-items: flex-end; }
[data-engine="hermes"] .hm-chat-msg--assistant { align-items: flex-start; }
[data-engine="hermes"] .hm-chat-msg--system { align-items: center; }
[data-engine="hermes"] .hm-chat-msg-body {
display: flex;
gap: 10px;
max-width: min(78%, 760px);
align-items: flex-start;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-msg-body {
max-width: min(82%, 820px);
}
[data-engine="hermes"] .hm-chat-msg--user .hm-chat-msg-body { flex-direction: row-reverse; }
[data-engine="hermes"] .hm-chat-msg-avatar {
flex-shrink: 0;
width: 32px;
height: 32px;
border-radius: 50%;
display: inline-flex;
align-items: center;
justify-content: center;
font-family: var(--hm-font-serif);
font-weight: 500;
font-size: 14px;
color: var(--hm-accent);
background: var(--hm-accent-soft);
border: 1px solid color-mix(in srgb, var(--hm-accent) 25%, transparent);
margin-top: 2px;
}
[data-engine="hermes"] .hm-chat-msg-content-wrap {
display: flex;
flex-direction: column;
min-width: 0;
}
[data-engine="hermes"] .hm-chat-msg-bubble {
padding: 12px 16px;
font-size: 14px;
line-height: 1.7;
border-radius: var(--hm-radius-md);
word-break: break-word;
max-width: 100%;
overflow-wrap: anywhere;
}
[data-engine="hermes"] .hm-chat-msg--user .hm-chat-msg-bubble {
background: var(--hm-accent-soft);
color: var(--hm-text-primary);
border: 1px solid color-mix(in srgb, var(--hm-accent) 16%, transparent);
font-family: var(--hm-font-serif);
font-size: 14.5px;
line-height: 1.7;
}
[data-engine="hermes"] .hm-chat-msg--assistant .hm-chat-msg-bubble {
background: var(--hm-surface-1);
color: var(--hm-text-primary);
border: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-chat-msg--system .hm-chat-msg-bubble {
background: var(--hm-error-soft);
color: var(--hm-error);
border: 1px solid color-mix(in srgb, var(--hm-error) 25%, transparent);
font-family: var(--hm-font-mono);
font-size: 12.5px;
max-width: 90%;
}
[data-engine="hermes"] .hm-chat-msg-footer {
display: flex;
align-items: center;
gap: 8px;
margin-top: 4px;
padding: 0 4px;
}
[data-engine="hermes"] .hm-chat-msg--user .hm-chat-msg-footer {
justify-content: flex-end;
}
[data-engine="hermes"] .hm-chat-msg-time {
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-tertiary);
letter-spacing: 0.01em;
}
[data-engine="hermes"] .hm-chat-msg-copy {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 2px 6px;
border: 1px solid var(--hm-border-subtle);
border-radius: 999px;
background: transparent;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 10px;
line-height: 1.2;
cursor: pointer;
opacity: 0;
transform: translateY(1px);
transition: opacity 0.15s ease, color 0.15s ease, background 0.15s ease, transform 0.15s ease;
}
[data-engine="hermes"] .hm-chat-msg:hover .hm-chat-msg-copy,
[data-engine="hermes"] .hm-chat-msg-copy:focus-visible {
opacity: 1;
transform: translateY(0);
}
[data-engine="hermes"] .hm-chat-msg-copy:hover {
color: var(--hm-accent);
background: var(--hm-accent-soft);
border-color: color-mix(in srgb, var(--hm-accent) 24%, transparent);
}
/* Markdown inside message content */
[data-engine="hermes"] .hm-chat-msg-content p { margin: 0 0 8px; }
[data-engine="hermes"] .hm-chat-msg-content p:last-child { margin-bottom: 0; }
[data-engine="hermes"] .hm-chat-msg-content h2,
[data-engine="hermes"] .hm-chat-msg-content h3,
[data-engine="hermes"] .hm-chat-msg-content h4,
[data-engine="hermes"] .hm-chat-msg-content h5 {
font-family: var(--hm-font-serif);
font-weight: 500;
letter-spacing: -0.01em;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-chat-msg-content h2 { font-size: 18px; margin: 14px 0 6px; }
[data-engine="hermes"] .hm-chat-msg-content h3 { font-size: 16px; margin: 12px 0 5px; }
[data-engine="hermes"] .hm-chat-msg-content h4 {
font-size: 14px;
font-style: italic;
color: var(--hm-accent);
margin: 10px 0 4px;
}
[data-engine="hermes"] .hm-chat-msg-content h5 {
font-size: 13px;
color: var(--hm-text-secondary);
margin: 10px 0 4px;
}
[data-engine="hermes"] .hm-chat-msg-content ul {
margin: 4px 0 8px;
padding-left: 22px;
}
[data-engine="hermes"] .hm-chat-msg-content li { margin: 2px 0; line-height: 1.65; }
[data-engine="hermes"] .hm-chat-msg-content code {
font-family: var(--hm-font-mono);
font-size: 12.5px;
background: var(--hm-surface-2);
padding: 1px 6px;
border-radius: 3px;
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-msg-content pre {
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
padding: 10px 12px;
margin: 8px 0;
overflow-x: auto;
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.6;
}
[data-engine="hermes"] .hm-chat-msg-content pre.hm-chat-code-block {
position: relative;
padding-top: 34px;
}
[data-engine="hermes"] .hm-chat-code-copy {
position: absolute;
top: 6px;
right: 8px;
display: inline-flex;
align-items: center;
height: 22px;
padding: 0 8px;
border: 1px solid var(--hm-border-subtle);
border-radius: 999px;
background: color-mix(in srgb, var(--hm-surface-0) 82%, transparent);
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono);
font-size: 10px;
cursor: pointer;
opacity: 0;
transition: opacity 0.15s ease, color 0.15s ease, background 0.15s ease;
}
[data-engine="hermes"] .hm-chat-code-block:hover .hm-chat-code-copy,
[data-engine="hermes"] .hm-chat-code-copy:focus-visible {
opacity: 1;
}
[data-engine="hermes"] .hm-chat-code-copy:hover {
color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-msg-content pre code {
background: transparent;
padding: 0;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-chat-msg-content a {
color: var(--hm-accent);
text-decoration: underline;
text-underline-offset: 2px;
}
[data-engine="hermes"] .hm-chat-msg-content strong { font-weight: 600; }
[data-engine="hermes"] .hm-chat-msg-content em { font-style: italic; }
/* Streaming dots pulse (shown while first delta hasn't arrived) */
[data-engine="hermes"] .hm-chat-streaming-dots {
display: inline-flex;
gap: 4px;
padding: 4px 0;
}
[data-engine="hermes"] .hm-chat-streaming-dots span {
width: 6px;
height: 6px;
background: var(--hm-text-tertiary);
border-radius: 50%;
animation: hm-chat-dots 1.4s infinite ease-in-out;
}
[data-engine="hermes"] .hm-chat-streaming-dots span:nth-child(2) { animation-delay: 0.2s; }
[data-engine="hermes"] .hm-chat-streaming-dots span:nth-child(3) { animation-delay: 0.4s; }
@keyframes hm-chat-dots {
0%, 80%, 100% { opacity: 0.25; transform: scale(0.7); }
40% { opacity: 1; transform: scale(1); }
}
/* ---- Tool messages ---- */
[data-engine="hermes"] .hm-chat-msg--tool {
align-items: flex-start;
padding-left: 42px; /* align with assistant content, not avatar */
}
[data-engine="hermes"] .hm-chat-tool-line {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 8px;
border-radius: var(--hm-radius-sm);
font-family: var(--hm-font-sans);
font-size: 11px;
color: var(--hm-text-tertiary);
max-width: 100%;
}
[data-engine="hermes"] .hm-chat-tool-line.is-expandable {
cursor: pointer;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border-subtle);
transition: all 0.15s ease;
}
[data-engine="hermes"] .hm-chat-tool-line.is-expandable:hover {
border-color: var(--hm-accent);
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-chat-tool-chevron {
display: inline-flex;
transition: transform 0.15s ease;
}
[data-engine="hermes"] .hm-chat-tool-chevron.is-open {
transform: rotate(90deg);
}
[data-engine="hermes"] .hm-chat-tool-icon {
display: inline-flex;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-tool-name {
font-family: var(--hm-font-mono);
font-size: 11px;
color: var(--hm-text-primary);
font-weight: 500;
}
[data-engine="hermes"] .hm-chat-tool-preview {
color: var(--hm-text-tertiary);
max-width: 360px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-chat-tool-err {
font-size: 9.5px;
color: var(--hm-error);
background: var(--hm-error-soft);
padding: 1px 6px;
border-radius: 3px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
[data-engine="hermes"] .hm-chat-tool-spinner {
width: 10px;
height: 10px;
border: 1.5px solid var(--hm-text-tertiary);
border-top-color: transparent;
border-radius: 50%;
animation: hm-chat-spin 0.7s linear infinite;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-tool-details {
margin-top: 4px;
margin-left: 10px;
border-left: 2px solid var(--hm-border);
padding-left: 12px;
}
[data-engine="hermes"] .hm-chat-tool-section {
margin-bottom: 6px;
}
[data-engine="hermes"] .hm-chat-tool-label {
font-family: var(--hm-font-sans);
font-size: 10px;
font-weight: 600;
color: var(--hm-text-tertiary);
text-transform: uppercase;
letter-spacing: 0.08em;
margin-bottom: 3px;
}
[data-engine="hermes"] .hm-chat-tool-code {
background: var(--hm-surface-2);
border: 1px solid var(--hm-border-subtle);
border-radius: var(--hm-radius-sm);
padding: 8px 10px;
font-family: var(--hm-font-mono);
font-size: 11.5px;
line-height: 1.55;
color: var(--hm-text-primary);
white-space: pre-wrap;
word-break: break-word;
max-height: 280px;
overflow-y: auto;
margin: 0;
}
/* ---- Streaming indicator (thinking + live tool calls) ---- */
[data-engine="hermes"] .hm-chat-streaming {
display: flex;
flex-direction: column;
gap: 6px;
padding-left: 42px;
}
[data-engine="hermes"] .hm-chat-streaming-mark {
display: inline-flex;
align-items: center;
gap: 8px;
font-family: var(--hm-font-serif);
font-style: italic;
font-size: 13px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-streaming-pulse {
width: 8px;
height: 8px;
background: var(--hm-accent);
border-radius: 50%;
animation: hm-chat-live-pulse 1.6s ease-in-out infinite;
}
/* ---- Batch 1 §C-bis: Approval Flow 气泡 ---- */
[data-engine="hermes"] .hm-chat-approval {
margin: 12px 0 16px 42px;
padding: 16px;
background: rgba(245, 158, 11, 0.08);
border: 1px solid rgba(245, 158, 11, 0.35);
border-radius: 12px;
display: flex;
flex-direction: column;
gap: 10px;
max-width: 720px;
}
[data-engine="hermes"] .hm-chat-approval-head {
display: flex;
align-items: center;
gap: 10px;
}
[data-engine="hermes"] .hm-chat-approval-emoji {
font-size: 22px;
line-height: 1;
}
[data-engine="hermes"] .hm-chat-approval-title {
font-size: 14px;
font-weight: 600;
color: var(--hm-text-primary);
line-height: 1.4;
}
[data-engine="hermes"] .hm-chat-approval-args {
background: rgba(0, 0, 0, 0.06);
border-radius: 8px;
padding: 10px 12px;
font-size: 12px;
font-family: var(--hm-font-mono, monospace);
color: var(--hm-text-secondary);
margin: 0;
max-height: 180px;
overflow: auto;
word-break: break-all;
white-space: pre-wrap;
}
[data-engine="hermes"] .hm-chat-approval-hint {
font-size: 12px;
color: var(--hm-text-tertiary);
line-height: 1.5;
}
[data-engine="hermes"] .hm-chat-approval-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
[data-theme="dark"] [data-engine="hermes"] .hm-chat-approval {
background: rgba(245, 158, 11, 0.10);
border-color: rgba(245, 158, 11, 0.45);
}
[data-theme="dark"] [data-engine="hermes"] .hm-chat-approval-args {
background: rgba(255, 255, 255, 0.04);
}
/* ---- Batch 3 §K: 多模态图片附件 ---- */
[data-engine="hermes"] .hm-chat-attach-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 8px;
border: 0;
background: transparent;
color: var(--hm-text-tertiary);
cursor: pointer;
transition: background 0.15s, color 0.15s;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-attach-btn:hover:not(:disabled) {
background: var(--hm-surface-1);
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-chat-attach-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
[data-engine="hermes"] .hm-chat-attach-preview {
display: flex;
gap: 8px;
padding: 8px 12px;
flex-wrap: wrap;
border-bottom: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-chat-attach-chip {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 8px 4px 4px;
background: var(--hm-surface-1);
border-radius: 8px;
max-width: 220px;
}
[data-engine="hermes"] .hm-chat-attach-chip img {
width: 32px;
height: 32px;
object-fit: cover;
border-radius: 4px;
}
[data-engine="hermes"] .hm-chat-attach-chip-name {
font-size: 12px;
color: var(--hm-text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 140px;
}
[data-engine="hermes"] .hm-chat-attach-chip-remove {
border: 0;
background: transparent;
color: var(--hm-text-tertiary);
font-size: 16px;
cursor: pointer;
padding: 0 4px;
line-height: 1;
}
[data-engine="hermes"] .hm-chat-attach-chip-remove:hover {
color: var(--hm-error, #ef4444);
}
[data-engine="hermes"] .hm-chat-input-wrap--dragover {
outline: 2px dashed var(--hm-accent);
outline-offset: -2px;
background: rgba(99, 102, 241, 0.04);
}
/* 消息气泡内的图片渲染 */
[data-engine="hermes"] .hm-chat-msg-attachments {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-chat-msg-image {
max-width: 240px;
max-height: 240px;
border-radius: 8px;
cursor: zoom-in;
object-fit: contain;
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-chat-msg-image--zoom {
max-width: 100%;
max-height: 80vh;
cursor: zoom-out;
}
/* ---- Batch 3 §M: Kanban 看板 ---- */
[data-engine="hermes"] .hm-kanban-board {
display: flex;
gap: 12px;
overflow-x: auto;
padding-bottom: 8px;
}
[data-engine="hermes"] .hm-kanban-col {
flex: 0 0 280px;
background: var(--hm-surface-1);
border-radius: 10px;
padding: 12px;
display: flex;
flex-direction: column;
gap: 8px;
max-height: calc(100vh - 220px);
}
[data-engine="hermes"] .hm-kanban-col-head {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 6px;
border-bottom: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-kanban-col-name {
font-size: 13px;
font-weight: 600;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-kanban-col-count {
background: var(--hm-surface-2);
color: var(--hm-text-tertiary);
border-radius: 10px;
padding: 2px 8px;
font-size: 11px;
font-weight: 600;
}
[data-engine="hermes"] .hm-kanban-col-body {
display: flex;
flex-direction: column;
gap: 6px;
overflow-y: auto;
flex: 1;
}
[data-engine="hermes"] .hm-kanban-col-empty {
color: var(--hm-text-tertiary);
font-size: 12px;
text-align: center;
padding: 24px 0;
}
[data-engine="hermes"] .hm-kanban-task {
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: 8px;
padding: 10px;
cursor: pointer;
transition: border-color 0.15s, box-shadow 0.15s;
}
[data-engine="hermes"] .hm-kanban-task:hover {
border-color: var(--hm-accent);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
}
[data-engine="hermes"] .hm-kanban-task-title {
font-size: 13px;
font-weight: 500;
color: var(--hm-text-primary);
margin-bottom: 4px;
word-break: break-word;
}
[data-engine="hermes"] .hm-kanban-task-summary {
font-size: 11px;
color: var(--hm-text-tertiary);
margin-bottom: 6px;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
[data-engine="hermes"] .hm-kanban-task-meta {
display: flex;
gap: 6px;
align-items: center;
flex-wrap: wrap;
font-size: 10px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-kanban-task-prio {
background: rgba(245, 158, 11, 0.15);
color: rgb(180, 100, 0);
padding: 1px 6px;
border-radius: 4px;
font-weight: 600;
}
[data-engine="hermes"] .hm-kanban-task-assignee {
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-kanban-detail-row {
margin-bottom: 10px;
font-size: 13px;
color: var(--hm-text-secondary);
}
/* ---- Batch 3 §P: TTS 朗读按钮(复用 copy 按钮样式) ---- */
[data-engine="hermes"] .hm-chat-msg-tts {
display: inline-flex;
align-items: center;
gap: 4px;
background: transparent;
border: 0;
color: var(--hm-text-tertiary);
font-size: 11px;
cursor: pointer;
padding: 2px 6px;
border-radius: 4px;
transition: background 0.15s, color 0.15s;
}
[data-engine="hermes"] .hm-chat-msg-tts:hover {
background: var(--hm-surface-1);
color: var(--hm-accent);
}
/* ---- Batch 3 §L: 文件管理器 ---- */
[data-engine="hermes"] .hm-files-layout {
display: grid;
grid-template-columns: minmax(280px, 360px) 1fr;
gap: 16px;
height: calc(100vh - 200px);
min-height: 480px;
}
[data-engine="hermes"] .hm-files-tree {
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: 10px;
padding: 12px;
overflow-y: auto;
display: flex;
flex-direction: column;
}
[data-engine="hermes"] .hm-files-breadcrumb {
display: flex;
flex-wrap: wrap;
gap: 4px;
padding-bottom: 10px;
margin-bottom: 8px;
border-bottom: 1px solid var(--hm-border);
font-size: 12px;
align-items: center;
}
[data-engine="hermes"] .hm-files-crumb {
color: var(--hm-accent);
text-decoration: none;
font-family: var(--font-mono);
}
[data-engine="hermes"] .hm-files-crumb:hover {
text-decoration: underline;
}
[data-engine="hermes"] .hm-files-crumb-sep {
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-files-list {
display: flex;
flex-direction: column;
gap: 2px;
}
[data-engine="hermes"] .hm-files-entry {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 8px;
border-radius: 6px;
cursor: pointer;
font-size: 13px;
transition: background 0.1s;
}
[data-engine="hermes"] .hm-files-entry:hover {
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-files-entry.is-selected {
background: var(--hm-surface-2);
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-files-entry.is-dir .hm-files-name {
font-weight: 500;
}
[data-engine="hermes"] .hm-files-icon {
width: 16px;
flex-shrink: 0;
font-size: 14px;
line-height: 1;
}
[data-engine="hermes"] .hm-files-name {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-engine="hermes"] .hm-files-meta {
font-size: 10px;
color: var(--hm-text-tertiary);
font-family: var(--font-mono);
flex-shrink: 0;
}
[data-engine="hermes"] .hm-files-pane {
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: 10px;
display: flex;
flex-direction: column;
overflow: hidden;
}
[data-engine="hermes"] .hm-files-pane-empty {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
color: var(--hm-text-tertiary);
font-size: 14px;
}
[data-engine="hermes"] .hm-files-pane-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
border-bottom: 1px solid var(--hm-border);
gap: 12px;
}
[data-engine="hermes"] .hm-files-pane-title {
font-family: var(--font-mono);
font-size: 13px;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
}
[data-engine="hermes"] .hm-files-pane-actions {
display: flex;
align-items: center;
gap: 10px;
}
[data-engine="hermes"] .hm-files-pane-size {
font-size: 11px;
color: var(--hm-text-tertiary);
font-family: var(--font-mono);
}
[data-engine="hermes"] .hm-files-editor {
flex: 1;
border: 0;
outline: none;
padding: 14px 16px;
font-family: var(--font-mono);
font-size: 13px;
line-height: 1.6;
resize: none;
background: transparent;
color: var(--hm-text-primary);
width: 100%;
}
[data-engine="hermes"] .hm-files-binary-preview {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
overflow: auto;
}
[data-engine="hermes"] .hm-files-binary-preview img {
max-width: 100%;
max-height: 70vh;
object-fit: contain;
}
[data-engine="hermes"] .hm-files-binary-meta {
padding: 32px;
text-align: center;
color: var(--hm-text-tertiary);
}
@media (max-width: 768px) {
[data-engine="hermes"] .hm-files-layout {
grid-template-columns: 1fr;
height: auto;
}
[data-engine="hermes"] .hm-files-tree {
max-height: 280px;
}
}
/* ---- Batch 3 §N: 群聊 ---- */
[data-engine="hermes"] .hm-gc-layout {
display: grid;
grid-template-columns: 240px 1fr;
gap: 16px;
height: calc(100vh - 200px);
min-height: 480px;
}
[data-engine="hermes"] .hm-gc-side {
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: 10px;
padding: 14px;
display: flex;
flex-direction: column;
gap: 8px;
overflow-y: auto;
}
[data-engine="hermes"] .hm-gc-side-title {
font-weight: 600;
font-size: 13px;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-gc-side-hint {
font-size: 11px;
color: var(--hm-text-tertiary);
margin-bottom: 4px;
}
[data-engine="hermes"] .hm-gc-profile-list {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1;
}
[data-engine="hermes"] .hm-gc-profile-item {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 8px;
border-radius: 6px;
cursor: pointer;
font-size: 13px;
user-select: none;
transition: background 0.1s;
}
[data-engine="hermes"] .hm-gc-profile-item:hover {
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-gc-profile-item.is-checked {
background: var(--hm-surface-2);
color: var(--hm-accent);
}
[data-engine="hermes"] .hm-gc-profile-name {
font-family: var(--font-mono);
}
[data-engine="hermes"] .hm-gc-selected-count {
font-size: 11px;
color: var(--hm-text-tertiary);
padding-top: 8px;
border-top: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-gc-main {
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: 10px;
display: flex;
flex-direction: column;
overflow: hidden;
}
[data-engine="hermes"] .hm-gc-messages {
flex: 1;
overflow-y: auto;
padding: 16px;
display: flex;
flex-direction: column;
gap: 14px;
}
[data-engine="hermes"] .hm-gc-empty {
text-align: center;
color: var(--hm-text-tertiary);
font-size: 13px;
padding: 60px 20px;
}
[data-engine="hermes"] .hm-gc-msg {
display: flex;
flex-direction: column;
gap: 4px;
}
[data-engine="hermes"] .hm-gc-msg--user {
align-items: flex-end;
}
[data-engine="hermes"] .hm-gc-msg--user .hm-gc-msg-bubble {
background: var(--hm-accent);
color: white;
max-width: 70%;
}
[data-engine="hermes"] .hm-gc-msg--assistant .hm-gc-msg-bubble {
background: var(--hm-surface-1);
max-width: 80%;
}
[data-engine="hermes"] .hm-gc-msg--system {
text-align: center;
}
[data-engine="hermes"] .hm-gc-msg-bubble {
padding: 10px 14px;
border-radius: 12px;
font-size: 13px;
line-height: 1.6;
white-space: pre-wrap;
word-break: break-word;
}
[data-engine="hermes"] .hm-gc-msg-meta {
font-size: 11px;
color: var(--hm-text-tertiary);
display: flex;
align-items: center;
gap: 6px;
}
[data-engine="hermes"] .hm-gc-msg-from {
background: var(--hm-surface-2);
color: var(--hm-accent);
padding: 1px 6px;
border-radius: 4px;
font-family: var(--font-mono);
font-weight: 500;
}
[data-engine="hermes"] .hm-gc-loading-dots {
display: inline-flex;
gap: 3px;
}
[data-engine="hermes"] .hm-gc-loading-dots span {
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--hm-text-tertiary);
animation: hm-gc-pulse 1.4s ease-in-out infinite both;
}
[data-engine="hermes"] .hm-gc-loading-dots span:nth-child(2) { animation-delay: 0.16s }
[data-engine="hermes"] .hm-gc-loading-dots span:nth-child(3) { animation-delay: 0.32s }
@keyframes hm-gc-pulse {
0%, 80%, 100% { opacity: 0.3; transform: scale(0.7) }
40% { opacity: 1; transform: scale(1) }
}
[data-engine="hermes"] .hm-gc-input-wrap {
display: flex;
gap: 8px;
padding: 12px;
border-top: 1px solid var(--hm-border);
}
[data-engine="hermes"] .hm-gc-input {
flex: 1;
padding: 10px 12px;
border: 1px solid var(--hm-border);
border-radius: 8px;
background: var(--hm-surface-1);
color: var(--hm-text-primary);
font-family: var(--font-sans);
font-size: 13px;
resize: none;
min-height: 40px;
max-height: 120px;
line-height: 1.5;
}
[data-engine="hermes"] .hm-gc-input:focus {
outline: none;
border-color: var(--hm-accent);
}
@media (max-width: 768px) {
[data-engine="hermes"] .hm-gc-layout {
grid-template-columns: 1fr;
height: auto;
}
[data-engine="hermes"] .hm-gc-side {
max-height: 240px;
}
}
[data-engine="hermes"] .hm-chat-live-tools {
display: flex;
flex-direction: column;
gap: 3px;
}
[data-engine="hermes"] .hm-chat-live-tool {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 8px;
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-1);
border: 1px solid var(--hm-border-subtle);
font-size: 11px;
color: var(--hm-text-secondary);
max-width: fit-content;
}
[data-engine="hermes"] .hm-chat-live-tool-icon {
display: inline-flex;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-live-tool-name {
font-family: var(--hm-font-mono);
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-chat-live-tool-preview {
color: var(--hm-text-tertiary);
max-width: 240px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* ---- Input area ---- */
[data-engine="hermes"] .hm-chat-input-area {
flex-shrink: 0;
padding: 16px 48px 18px;
border-top: 1px solid var(--hm-border);
background: var(--hm-surface-0);
position: relative;
}
[data-engine="hermes"] .hm-chat-input-wrap {
display: flex;
align-items: flex-end;
gap: 10px;
width: 100%;
max-width: 760px;
margin: 0 auto;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
padding: 10px 12px;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
[data-engine="hermes"] .hm-chat-input-wrap:focus-within {
border-color: var(--hm-accent);
box-shadow: 0 0 0 2px rgba(202, 138, 4, 0.12);
}
[data-engine="hermes"] .hm-chat-input {
flex: 1;
resize: none;
border: none;
outline: none;
background: transparent;
color: var(--hm-text-primary);
font-family: var(--hm-font-serif);
font-size: 14.5px;
line-height: 1.6;
max-height: 160px;
min-height: 22px;
overflow-y: auto;
padding: 2px 2px;
}
[data-engine="hermes"] .hm-chat-input::placeholder {
color: var(--hm-text-tertiary);
font-style: italic;
}
[data-engine="hermes"] .hm-chat-input:disabled {
opacity: 0.55;
cursor: not-allowed;
}
[data-engine="hermes"] .hm-chat-input-actions {
display: flex;
align-items: center;
gap: 6px;
flex-shrink: 0;
}
[data-engine="hermes"] .hm-chat-send-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border: none;
border-radius: 50%;
background: var(--hm-accent);
color: #FFFFFF;
cursor: pointer;
transition: all 0.15s ease;
}
[data-engine="hermes"] .hm-chat-send-btn:hover:not(:disabled) {
background: var(--hm-accent-hover, var(--hm-accent));
transform: translateX(1px);
}
[data-engine="hermes"] .hm-chat-send-btn:disabled {
background: var(--hm-surface-2);
color: var(--hm-text-tertiary);
cursor: not-allowed;
}
/* ---- Token usage strip (above textarea) ----
Sits between the slash menu and the input wrap. Pills are minimal,
monospace, and use accent tint for cost so it draws the eye without
being shouty. The whole bar can be hidden by `display:none` on the
element itself; we just don't render it when usage is zero. */
[data-engine="hermes"] .hm-chat-usage-bar {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 8px;
max-width: 760px;
margin-left: auto;
margin-right: auto;
padding: 0 2px;
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-input-wrap,
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-usage-bar {
max-width: 820px;
}
[data-engine="hermes"] .hm-chat-usage-pill {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 9px;
border-radius: 999px;
background: var(--hm-surface-1);
border: 1px solid var(--hm-border-subtle);
font-family: var(--hm-font-mono);
font-size: 10.5px;
color: var(--hm-text-secondary);
letter-spacing: 0.01em;
line-height: 1.4;
}
[data-engine="hermes"] .hm-chat-usage-pill[data-kind="cost"] {
background: var(--hm-accent-soft);
border-color: transparent;
color: var(--hm-accent);
font-weight: 600;
}
[data-engine="hermes"] .hm-chat-usage-pill[data-kind="cache"] {
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-chat-usage-label {
text-transform: uppercase;
font-size: 9px;
letter-spacing: 0.06em;
color: var(--hm-text-tertiary);
font-weight: 500;
}
[data-engine="hermes"] .hm-chat-usage-value {
color: var(--hm-text-primary);
font-weight: 600;
}
[data-engine="hermes"] .hm-chat-usage-pill[data-kind="cost"] .hm-chat-usage-value {
color: var(--hm-accent);
}
/* ---- Slash menu ---- */
[data-engine="hermes"] .hm-chat-slash-menu {
position: absolute;
left: 48px;
right: 48px;
bottom: calc(100% + 4px);
background: var(--hm-surface-0);
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.06);
padding: 4px;
max-height: 260px;
overflow-y: auto;
z-index: 5;
bottom: auto;
top: auto;
transform: translateY(-100%);
/* The slash menu is anchored INSIDE the input area (bottom: 100%). */
}
[data-engine="hermes"] .hm-chat-input-area .hm-chat-slash-menu {
position: absolute;
left: 48px;
right: 48px;
bottom: calc(100% - 4px);
top: auto;
transform: translateY(-6px);
}
[data-engine="hermes"] .hm-chat-slash-item {
display: flex;
align-items: baseline;
gap: 10px;
width: 100%;
padding: 8px 12px;
border: none;
background: transparent;
color: var(--hm-text-primary);
text-align: left;
cursor: pointer;
border-radius: var(--hm-radius-sm);
transition: background 0.12s ease;
}
[data-engine="hermes"] .hm-chat-slash-item:hover {
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-chat-slash-cmd {
font-family: var(--hm-font-mono);
font-size: 12px;
font-weight: 500;
color: var(--hm-accent);
min-width: 72px;
}
[data-engine="hermes"] .hm-chat-slash-desc {
font-family: var(--hm-font-sans);
font-size: 12px;
color: var(--hm-text-tertiary);
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* ---- Context menu ---- */
.hm-chat-ctxmenu {
position: fixed;
z-index: 10000;
background: var(--hm-surface-0, #FFFCF5);
border: 1px solid var(--hm-border, #E5E0D0);
border-radius: 8px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
padding: 4px;
min-width: 180px;
font-family: var(--hm-font-sans, sans-serif);
}
.hm-chat-ctxmenu-item {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
padding: 7px 10px;
border: none;
background: transparent;
color: var(--hm-text-primary, #1C1917);
font-size: 12.5px;
text-align: left;
cursor: pointer;
border-radius: 6px;
transition: background 0.12s ease;
}
.hm-chat-ctxmenu-item:hover {
background: var(--hm-accent-soft, rgba(202, 138, 4, 0.06));
}
.hm-chat-ctxmenu-item.is-danger {
color: var(--hm-error, #B91C1C);
}
.hm-chat-ctxmenu-item.is-danger:hover {
background: var(--hm-error-soft, rgba(185, 28, 28, 0.06));
}
/* ---- Rename modal input (reuses .modal-overlay/.modal from modal.js) ---- */
[data-engine="hermes"] .hm-chat-rename-input,
.hm-chat-rename-input {
width: 100%;
padding: 8px 12px;
border: 1px solid var(--hm-border, #E5E0D0);
border-radius: 6px;
background: var(--hm-surface-0, #FFFCF5);
color: var(--hm-text-primary, #1C1917);
font-family: var(--hm-font-serif, serif);
font-size: 14px;
box-sizing: border-box;
outline: none;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.hm-chat-rename-input:focus {
border-color: var(--hm-accent, #CA8A04);
box-shadow: 0 0 0 2px rgba(202, 138, 4, 0.15);
}
/* ---- Stop button (replaces Send during streaming) ---- */
[data-engine="hermes"] .hm-chat-stop-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border: 1px solid color-mix(in srgb, var(--hm-error) 40%, transparent);
border-radius: 50%;
background: color-mix(in srgb, var(--hm-error) 10%, transparent);
color: var(--hm-error);
cursor: pointer;
transition: all 0.15s ease;
}
[data-engine="hermes"] .hm-chat-stop-btn:hover {
background: color-mix(in srgb, var(--hm-error) 18%, transparent);
border-color: var(--hm-error);
}
[data-engine="hermes"] .hm-chat-input-wrap.is-streaming {
border-color: color-mix(in srgb, var(--hm-accent) 30%, transparent);
background: color-mix(in srgb, var(--hm-accent) 3%, var(--hm-surface-1));
}
/* ---- Session Search modal (Ctrl+K) ---- */
.hm-chat-search-overlay {
position: fixed;
inset: 0;
z-index: 10500;
background: rgba(28, 25, 23, 0.35);
backdrop-filter: blur(3px);
display: flex;
align-items: flex-start;
justify-content: center;
padding: 12vh 16px 16px;
animation: hm-chat-search-fade 0.15s ease;
}
@keyframes hm-chat-search-fade {
from { opacity: 0; }
to { opacity: 1; }
}
[data-engine="hermes"] .hm-chat-search-panel,
.hm-chat-search-panel[data-engine="hermes"] {
width: 100%;
max-width: 560px;
max-height: 70vh;
background: var(--hm-surface-0, #FFFCF5);
border: 1px solid var(--hm-border, #E5E0D0);
border-radius: 10px;
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.18);
overflow: hidden;
display: flex;
flex-direction: column;
animation: hm-chat-search-slide 0.2s ease;
font-family: var(--hm-font-sans, sans-serif);
color: var(--hm-text-primary, #1C1917);
}
@keyframes hm-chat-search-slide {
from { transform: translateY(-8px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.hm-chat-search-panel .hm-chat-search-head {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 18px;
border-bottom: 1px solid var(--hm-border-subtle, #EDE8D9);
background: var(--hm-surface-1, #FAF7EE);
}
.hm-chat-search-panel .hm-chat-search-icon {
color: var(--hm-text-tertiary);
flex-shrink: 0;
}
.hm-chat-search-panel .hm-chat-search-input {
flex: 1;
border: none;
outline: none;
background: transparent;
color: var(--hm-text-primary, #1C1917);
font-family: var(--hm-font-serif, serif);
font-size: 16px;
line-height: 1.4;
padding: 2px 0;
}
.hm-chat-search-panel .hm-chat-search-input::placeholder {
color: var(--hm-text-tertiary);
font-style: italic;
}
.hm-chat-search-panel .hm-chat-search-kbd {
font-family: var(--hm-font-mono, monospace);
font-size: 10px;
color: var(--hm-text-tertiary);
padding: 2px 6px;
border: 1px solid var(--hm-border);
border-radius: 4px;
background: var(--hm-surface-0);
letter-spacing: 0.03em;
}
.hm-chat-search-panel .hm-chat-search-results {
overflow-y: auto;
flex: 1;
padding: 6px 0 8px;
}
.hm-chat-search-panel .hm-chat-search-empty {
padding: 36px 20px;
text-align: center;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif, serif);
font-style: italic;
font-size: 13.5px;
}
.hm-chat-search-panel .hm-chat-search-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
width: 100%;
padding: 9px 18px;
border: none;
background: transparent;
color: var(--hm-text-primary, #1C1917);
text-align: left;
cursor: pointer;
transition: background 0.1s ease;
border-left: 2px solid transparent;
}
.hm-chat-search-panel .hm-chat-search-item:hover,
.hm-chat-search-panel .hm-chat-search-item.is-active {
background: var(--hm-accent-soft, rgba(202, 138, 4, 0.08));
border-left-color: var(--hm-accent, #CA8A04);
}
.hm-chat-search-panel .hm-chat-search-item-main {
flex: 1;
min-width: 0;
}
.hm-chat-search-panel .hm-chat-search-item-title {
display: flex;
align-items: baseline;
gap: 8px;
font-size: 13.5px;
color: var(--hm-text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hm-chat-search-panel .hm-chat-search-item-src {
font-family: var(--hm-font-mono, monospace);
font-size: 9.5px;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--hm-text-tertiary);
background: var(--hm-surface-2, #F1ECDC);
border: 1px solid var(--hm-border-subtle);
padding: 1px 5px;
border-radius: 999px;
flex-shrink: 0;
}
.hm-chat-search-panel .hm-chat-search-item-snippet {
margin-top: 3px;
font-family: var(--hm-font-serif, serif);
font-style: italic;
font-size: 12px;
color: var(--hm-text-tertiary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hm-chat-search-panel .hm-chat-search-item-meta {
display: flex;
align-items: center;
gap: 6px;
flex-shrink: 0;
}
.hm-chat-search-panel .hm-chat-search-item-model {
font-family: var(--hm-font-mono, monospace);
font-size: 10px;
color: var(--hm-accent, #CA8A04);
background: var(--hm-accent-soft);
padding: 0 5px;
border-radius: 3px;
line-height: 15px;
max-width: 110px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hm-chat-search-panel .hm-chat-search-item-time {
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
color: var(--hm-text-tertiary);
}
.hm-chat-search-panel .hm-chat-search-foot {
display: flex;
justify-content: space-between;
padding: 8px 18px;
border-top: 1px solid var(--hm-border-subtle);
background: var(--hm-surface-1);
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
color: var(--hm-text-tertiary);
}
.hm-chat-search-panel .hm-chat-search-foot kbd {
font-family: var(--hm-font-mono, monospace);
font-size: 10px;
padding: 1px 5px;
border: 1px solid var(--hm-border);
border-radius: 3px;
background: var(--hm-surface-0);
color: var(--hm-text-secondary);
margin: 0 1px;
}
[data-engine="hermes"].hm-usage-page {
width: 100%;
padding: 28px clamp(16px, 3vw, 56px) 40px;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-usage-hero {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 18px;
margin-bottom: 18px;
}
[data-engine="hermes"] .hm-usage-hero-copy {
min-width: 0;
}
[data-engine="hermes"] .hm-usage-eyebrow {
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--hm-text-tertiary);
margin-bottom: 10px;
}
[data-engine="hermes"] .hm-usage-title {
margin: 0;
font-family: var(--hm-font-serif, serif);
font-size: clamp(32px, 4vw, 44px);
line-height: 1.02;
font-weight: 500;
letter-spacing: -0.025em;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-usage-desc {
margin: 10px 0 0;
max-width: 720px;
color: var(--hm-text-secondary);
font-size: 14px;
line-height: 1.7;
}
[data-engine="hermes"] .hm-usage-refresh {
flex-shrink: 0;
}
[data-engine="hermes"] .hm-usage-body {
display: flex;
flex-direction: column;
gap: 16px;
}
[data-engine="hermes"] .hm-usage-loading,
[data-engine="hermes"] .hm-usage-empty,
[data-engine="hermes"] .hm-usage-error-card {
border: 1px solid var(--hm-border);
border-radius: 18px;
background: var(--hm-surface-0);
box-shadow: 0 16px 36px rgba(28, 25, 23, 0.05);
}
[data-engine="hermes"] .hm-usage-loading,
[data-engine="hermes"] .hm-usage-empty {
padding: 56px 24px;
text-align: center;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif, serif);
font-style: italic;
font-size: 15px;
}
[data-engine="hermes"] .hm-usage-error-card {
padding: 24px;
}
[data-engine="hermes"] .hm-usage-error-title {
font-family: var(--hm-font-serif, serif);
font-size: 24px;
color: var(--hm-text-primary);
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-usage-error-text {
color: var(--hm-error);
font-size: 13px;
margin-bottom: 14px;
}
[data-engine="hermes"] .hm-usage-stat-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
}
[data-engine="hermes"] .hm-usage-stat-card {
min-height: 132px;
padding: 18px 18px 16px;
border-radius: 18px;
border: 1px solid var(--hm-border);
background: var(--hm-surface-0);
box-shadow: 0 16px 36px rgba(28, 25, 23, 0.05);
display: flex;
flex-direction: column;
justify-content: space-between;
}
[data-engine="hermes"] .hm-usage-stat-card.is-accent {
background: linear-gradient(180deg, color-mix(in srgb, var(--hm-accent) 9%, var(--hm-surface-0)) 0%, var(--hm-surface-0) 100%);
}
[data-engine="hermes"] .hm-usage-stat-card.is-muted {
background: linear-gradient(180deg, color-mix(in srgb, var(--hm-text-primary) 3%, var(--hm-surface-0)) 0%, var(--hm-surface-0) 100%);
}
[data-engine="hermes"] .hm-usage-stat-label {
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-usage-stat-value {
margin-top: 10px;
font-family: var(--hm-font-serif, serif);
font-size: clamp(28px, 3vw, 36px);
line-height: 1.04;
color: var(--hm-text-primary);
letter-spacing: -0.03em;
}
[data-engine="hermes"] .hm-usage-stat-sub {
margin-top: 10px;
color: var(--hm-text-secondary);
font-size: 12px;
line-height: 1.55;
}
[data-engine="hermes"] .hm-usage-card {
border: 1px solid var(--hm-border);
border-radius: 20px;
background: var(--hm-surface-0);
box-shadow: 0 16px 36px rgba(28, 25, 23, 0.05);
padding: 18px 20px 20px;
}
[data-engine="hermes"] .hm-usage-card-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 14px;
}
[data-engine="hermes"] .hm-usage-card-title {
margin: 0;
font-family: var(--hm-font-serif, serif);
font-size: 22px;
font-weight: 500;
line-height: 1.15;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-usage-model-list {
display: flex;
flex-direction: column;
gap: 10px;
}
[data-engine="hermes"] .hm-usage-model-row {
display: grid;
grid-template-columns: minmax(0, 180px) 1fr 72px;
align-items: center;
gap: 12px;
}
[data-engine="hermes"] .hm-usage-model-name,
[data-engine="hermes"] .hm-usage-model-meta {
font-family: var(--hm-font-mono, monospace);
font-size: 12px;
}
[data-engine="hermes"] .hm-usage-model-name {
color: var(--hm-text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
[data-engine="hermes"] .hm-usage-model-meta {
color: var(--hm-text-tertiary);
text-align: right;
}
[data-engine="hermes"] .hm-usage-model-track {
position: relative;
height: 14px;
border-radius: 999px;
background: color-mix(in srgb, var(--hm-text-primary) 6%, var(--hm-surface-2));
overflow: hidden;
}
[data-engine="hermes"] .hm-usage-model-bar {
height: 100%;
min-width: 2px;
border-radius: inherit;
background: linear-gradient(90deg, var(--hm-accent) 0%, color-mix(in srgb, var(--hm-accent) 72%, #f6c453) 100%);
}
[data-engine="hermes"] .hm-usage-empty-inline {
padding: 12px 0 4px;
color: var(--hm-text-tertiary);
font-size: 13px;
}
[data-engine="hermes"] .hm-usage-card--trend {
padding-bottom: 16px;
}
[data-engine="hermes"] .hm-usage-trend-wrap {
position: relative;
height: 232px;
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-usage-trend-svg {
width: 100%;
height: 100%;
display: block;
}
[data-engine="hermes"] .hm-usage-trend-grid {
stroke: color-mix(in srgb, var(--hm-border) 88%, transparent);
stroke-width: 1;
stroke-dasharray: 4 6;
}
[data-engine="hermes"] .hm-usage-trend-area {
fill: url(#hm-usage-trend-fill);
}
[data-engine="hermes"] .hm-usage-trend-bar {
fill: color-mix(in srgb, var(--hm-accent) 30%, transparent);
}
[data-engine="hermes"] .hm-usage-trend-line {
fill: none;
stroke: var(--hm-accent);
stroke-width: 2.4;
stroke-linecap: round;
stroke-linejoin: round;
}
[data-engine="hermes"] .hm-usage-trend-dot {
fill: var(--hm-accent);
stroke: var(--hm-surface-0);
stroke-width: 1.5;
}
[data-engine="hermes"] .hm-usage-trend-range {
display: flex;
justify-content: space-between;
gap: 12px;
margin-bottom: 14px;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
}
[data-engine="hermes"] .hm-usage-table-wrap {
overflow-x: auto;
}
[data-engine="hermes"] .hm-usage-table {
width: 100%;
border-collapse: collapse;
}
[data-engine="hermes"] .hm-usage-table th {
text-align: left;
padding: 9px 8px;
border-bottom: 1px solid var(--hm-border);
color: var(--hm-text-tertiary);
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
}
[data-engine="hermes"] .hm-usage-table td {
padding: 9px 8px;
border-bottom: 1px solid color-mix(in srgb, var(--hm-border) 82%, transparent);
color: var(--hm-text-secondary);
font-family: var(--hm-font-mono, monospace);
font-size: 12px;
}
[data-engine="hermes"] .hm-usage-table tbody tr:last-child td {
border-bottom: none;
}
[data-engine="hermes"].hm-services-page {
width: 100%;
padding: 28px clamp(16px, 3vw, 56px) 40px;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-services-desc {
margin: 0 0 18px;
max-width: 760px;
color: var(--hm-text-secondary);
font-size: 14px;
line-height: 1.7;
}
[data-engine="hermes"] .hm-services-msg {
margin: 14px 0 18px;
padding: 12px 14px;
border: 1px solid var(--hm-border);
border-radius: 14px;
background: var(--hm-surface-1);
font-family: var(--hm-font-mono, monospace);
font-size: 12px;
line-height: 1.6;
}
[data-engine="hermes"] .hm-services-msg[data-tone="success"] {
color: var(--hm-success);
border-color: color-mix(in srgb, var(--hm-success) 24%, var(--hm-border));
background: color-mix(in srgb, var(--hm-success) 7%, var(--hm-surface-1));
}
[data-engine="hermes"] .hm-services-msg[data-tone="error"] {
color: var(--hm-error);
border-color: color-mix(in srgb, var(--hm-error) 24%, var(--hm-border));
background: color-mix(in srgb, var(--hm-error) 8%, var(--hm-surface-1));
}
[data-engine="hermes"] .hm-services-msg[data-tone="warn"] {
color: var(--hm-warn);
border-color: color-mix(in srgb, var(--hm-warn) 28%, var(--hm-border));
background: color-mix(in srgb, var(--hm-warn) 10%, var(--hm-surface-1));
}
[data-engine="hermes"] .hm-services-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
margin-top: 16px;
}
[data-engine="hermes"] .hm-services-rows {
display: flex;
flex-direction: column;
gap: 12px;
}
[data-engine="hermes"] .hm-services-row {
display: grid;
grid-template-columns: 120px minmax(0, 1fr);
gap: 16px;
align-items: start;
}
[data-engine="hermes"] .hm-services-row-label {
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif, serif);
font-style: italic;
font-size: 12px;
line-height: 1.5;
}
[data-engine="hermes"] .hm-services-row-value {
color: var(--hm-text-primary);
font-size: 13px;
line-height: 1.7;
word-break: break-word;
}
[data-engine="hermes"] .hm-services-row-value.is-mono {
font-family: var(--hm-font-mono, monospace);
font-size: 12px;
color: var(--hm-text-secondary);
}
[data-engine="hermes"] .hm-services-note {
color: var(--hm-text-secondary);
font-size: 13px;
line-height: 1.65;
}
[data-engine="hermes"] .hm-services-env-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 12px;
margin-top: 14px;
}
[data-engine="hermes"] .hm-services-env-card {
border: 1px solid var(--hm-border);
border-radius: 16px;
background: var(--hm-surface-1);
padding: 14px 16px;
}
[data-engine="hermes"] .hm-services-env-title {
font-family: var(--hm-font-serif, serif);
font-size: 18px;
line-height: 1.2;
color: var(--hm-text-primary);
margin-bottom: 8px;
}
[data-engine="hermes"] .hm-services-env-meta {
color: var(--hm-text-secondary);
font-family: var(--hm-font-mono, monospace);
font-size: 11.5px;
line-height: 1.7;
word-break: break-word;
}
[data-engine="hermes"] .hm-services-inline-msg {
font-family: var(--hm-font-mono, monospace);
font-size: 11.5px;
line-height: 1.6;
}
[data-engine="hermes"] .hm-services-inline-msg[data-tone="success"] {
color: var(--hm-success);
}
[data-engine="hermes"] .hm-services-inline-msg[data-tone="error"] {
color: var(--hm-error);
}
[data-engine="hermes"] .hm-services-inline-msg[data-tone="warn"] {
color: var(--hm-warn);
}
[data-engine="hermes"] .hm-services-health-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
gap: 12px;
}
[data-engine="hermes"] .hm-services-health-card {
border: 1px solid var(--hm-border);
border-radius: 16px;
background: var(--hm-surface-1);
padding: 14px 16px;
min-height: 88px;
}
[data-engine="hermes"] .hm-services-health-key {
font-family: var(--hm-font-mono, monospace);
font-size: 10.5px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-services-health-value {
margin-top: 10px;
font-family: var(--hm-font-serif, serif);
font-size: 22px;
line-height: 1.2;
color: var(--hm-text-primary);
word-break: break-word;
}
[data-engine="hermes"] .hm-services-json-wrap {
margin-top: 16px;
}
[data-engine="hermes"] .hm-services-json-wrap summary {
cursor: pointer;
color: var(--hm-text-secondary);
font-size: 12px;
font-family: var(--hm-font-mono, monospace);
}
[data-engine="hermes"] .hm-services-json {
margin-top: 10px;
max-height: 260px;
}
[data-engine="hermes"] .hm-services-empty {
padding: 18px 0 4px;
color: var(--hm-text-tertiary);
font-family: var(--hm-font-serif, serif);
font-style: italic;
font-size: 15px;
}
[data-engine="hermes"] .hm-services-action-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
[data-engine="hermes"] .hm-services-mode {
appearance: none;
}
[data-engine="hermes"].hm-channels-page {
max-width: 1280px;
}
[data-engine="hermes"] .hm-channel-summary {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
margin: -12px 0 18px;
}
[data-engine="hermes"] .hm-channel-stat {
min-height: 72px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-md);
background: var(--hm-surface-1);
padding: 14px 16px;
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 8px;
}
[data-engine="hermes"] .hm-channel-stat span {
font-family: var(--hm-font-serif);
font-size: 12px;
font-style: italic;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-channel-stat strong {
font-family: var(--hm-font-mono);
font-size: 18px;
font-weight: 600;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-channel-alert {
display: flex;
align-items: flex-start;
gap: 10px;
margin: 0 0 18px;
padding: 12px 14px;
border-radius: var(--hm-radius-sm);
border: 1px solid var(--hm-border);
font-size: 13px;
line-height: 1.55;
}
[data-engine="hermes"] .hm-channel-alert.is-error {
color: var(--hm-error);
background: var(--hm-error-soft);
border-color: color-mix(in srgb, var(--hm-error) 24%, transparent);
}
[data-engine="hermes"] .hm-channel-alert.is-success {
color: var(--hm-success);
background: var(--hm-success-soft);
border-color: color-mix(in srgb, var(--hm-success) 24%, transparent);
}
[data-engine="hermes"] .hm-channel-layout {
display: grid;
grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
gap: 18px;
align-items: start;
}
[data-engine="hermes"] .hm-channel-list-panel {
position: sticky;
top: 18px;
}
[data-engine="hermes"] .hm-channel-list {
display: grid;
gap: 8px;
}
[data-engine="hermes"] .hm-channel-tab {
width: 100%;
min-height: 58px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
background: var(--hm-surface-0);
color: var(--hm-text-primary);
display: grid;
grid-template-columns: 34px minmax(0, 1fr) 10px;
align-items: center;
gap: 10px;
padding: 10px 12px;
text-align: left;
cursor: pointer;
transition: border-color var(--hm-dur-fast) var(--hm-ease),
background var(--hm-dur-fast) var(--hm-ease);
}
[data-engine="hermes"] .hm-channel-tab:hover:not(:disabled) {
border-color: var(--hm-border-strong);
background: var(--hm-surface-2);
}
[data-engine="hermes"] .hm-channel-tab.is-active {
border-color: var(--hm-accent);
background: var(--hm-accent-soft);
}
[data-engine="hermes"] .hm-channel-tab:disabled {
cursor: not-allowed;
opacity: 0.58;
}
[data-engine="hermes"] .hm-channel-tab:focus-visible {
outline: none;
box-shadow: 0 0 0 3px var(--hm-accent-ring);
}
[data-engine="hermes"] .hm-channel-tab-icon {
width: 34px;
height: 34px;
border: 1px solid var(--hm-border);
border-radius: var(--hm-radius-sm);
display: inline-flex;
align-items: center;
justify-content: center;
color: var(--hm-accent);
background: var(--hm-surface-1);
}
[data-engine="hermes"] .hm-channel-tab-main {
display: grid;
gap: 2px;
min-width: 0;
}
[data-engine="hermes"] .hm-channel-tab-main strong {
font-size: 13px;
line-height: 1.25;
overflow-wrap: anywhere;
}
[data-engine="hermes"] .hm-channel-tab-main small {
color: var(--hm-text-tertiary);
font-size: 11px;
line-height: 1.25;
}
[data-engine="hermes"] .hm-channel-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--hm-text-muted);
box-shadow: 0 0 0 3px var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-channel-dot.is-on {
background: var(--hm-success);
box-shadow: 0 0 0 3px var(--hm-success-soft);
}
[data-engine="hermes"] .hm-channel-form-panel .hm-panel-header {
align-items: flex-start;
}
[data-engine="hermes"] .hm-config-runtime-panel .hm-panel-header {
align-items: flex-start;
}
[data-engine="hermes"] .hm-config-runtime-grid {
display: grid;
grid-template-columns: minmax(220px, 1.2fr) repeat(2, minmax(140px, 0.8fr));
gap: 16px;
align-items: end;
}
[data-engine="hermes"] .hm-config-compression-grid {
grid-template-columns: repeat(4, minmax(140px, 1fr));
margin-top: 18px;
}
[data-engine="hermes"] .hm-config-guardrails-grid {
grid-template-columns: repeat(3, minmax(160px, 1fr));
margin-top: 12px;
}
[data-engine="hermes"] .hm-config-subtitle {
margin-top: 20px;
color: var(--hm-text-secondary);
font-family: var(--hm-font-serif);
font-size: 13px;
font-weight: 500;
}
[data-engine="hermes"] .hm-config-check-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px 16px;
margin-top: 18px;
}
[data-engine="hermes"] .hm-config-alert {
margin: 0 0 18px;
padding: 12px 14px;
border-radius: var(--hm-radius-sm);
border: 1px solid color-mix(in srgb, var(--hm-error) 24%, transparent);
background: var(--hm-error-soft);
color: var(--hm-error);
font-family: var(--hm-font-mono);
font-size: 12px;
line-height: 1.6;
overflow-wrap: anywhere;
}
[data-engine="hermes"] .hm-panel-body > .hm-config-alert {
margin: 16px 18px;
}
[data-engine="hermes"] .hm-config-alert-hint {
margin-top: 4px;
color: var(--hm-text-tertiary);
}
[data-engine="hermes"] .hm-config-alert details {
margin-top: 6px;
}
[data-engine="hermes"] .hm-config-alert pre {
margin: 6px 0 0;
white-space: pre-wrap;
word-break: break-word;
}
[data-engine="hermes"] .hm-channel-panel-desc {
margin-top: 6px;
color: var(--hm-text-tertiary);
font-size: 13px;
line-height: 1.6;
max-width: 720px;
}
[data-engine="hermes"] .hm-channel-switch,
[data-engine="hermes"] .hm-channel-check {
min-height: 44px;
display: inline-flex;
align-items: center;
gap: 10px;
color: var(--hm-text-secondary);
font-size: 13px;
line-height: 1.45;
cursor: pointer;
}
[data-engine="hermes"] .hm-channel-switch input,
[data-engine="hermes"] .hm-channel-check input {
width: 18px;
height: 18px;
accent-color: var(--hm-accent);
flex: 0 0 auto;
}
[data-engine="hermes"] .hm-channel-section {
display: grid;
gap: 16px;
}
[data-engine="hermes"] .hm-channel-section + .hm-channel-section {
margin-top: 26px;
padding-top: 24px;
border-top: 1px solid var(--hm-border-subtle);
}
[data-engine="hermes"] .hm-channel-section-title {
font-family: var(--hm-font-serif);
font-size: 16px;
font-weight: 500;
color: var(--hm-text-primary);
}
[data-engine="hermes"] .hm-channel-textarea {
min-height: 104px;
height: auto;
resize: vertical;
}
[data-engine="hermes"] .hm-channel-toggle-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px 16px;
}
[data-engine="hermes"] .hm-channel-check--wide {
width: fit-content;
}
[data-engine="hermes"] .hm-channel-footnote,
[data-engine="hermes"] .hm-channel-loading {
margin-top: 20px;
display: flex;
align-items: flex-start;
gap: 9px;
color: var(--hm-text-tertiary);
font-size: 12.5px;
line-height: 1.6;
}
@media (max-width: 960px) {
[data-engine="hermes"].hm-usage-page {
padding: 24px 22px 34px;
}
[data-engine="hermes"] .hm-usage-stat-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
[data-engine="hermes"].hm-services-page {
padding: 24px 22px 34px;
}
[data-engine="hermes"] .hm-services-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-services-action-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-channel-layout {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-channel-list-panel {
position: static;
}
[data-engine="hermes"] .hm-channel-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
[data-engine="hermes"] .hm-config-runtime-grid,
[data-engine="hermes"] .hm-config-compression-grid,
[data-engine="hermes"] .hm-config-guardrails-grid,
[data-engine="hermes"] .hm-config-check-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 720px) {
[data-engine="hermes"] .hm-usage-hero {
flex-direction: column;
align-items: flex-start;
}
[data-engine="hermes"] .hm-usage-refresh {
width: 100%;
}
[data-engine="hermes"] .hm-usage-stat-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-usage-model-row {
grid-template-columns: 1fr;
gap: 8px;
}
[data-engine="hermes"] .hm-usage-model-meta {
text-align: left;
}
[data-engine="hermes"] .hm-usage-table th,
[data-engine="hermes"] .hm-usage-table td {
padding-left: 4px;
padding-right: 4px;
}
[data-engine="hermes"] .hm-services-row {
grid-template-columns: 1fr;
gap: 4px;
}
[data-engine="hermes"] .hm-services-env-grid,
[data-engine="hermes"] .hm-services-health-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"].hm-channels-page {
padding: 24px 18px 34px;
}
[data-engine="hermes"].hm-channels-page .hm-hero {
align-items: stretch;
}
[data-engine="hermes"].hm-channels-page .hm-hero-actions {
width: 100%;
flex-wrap: wrap;
}
[data-engine="hermes"].hm-channels-page .hm-hero-actions .hm-btn {
flex: 1 1 150px;
min-height: 44px;
}
[data-engine="hermes"] .hm-channel-summary,
[data-engine="hermes"] .hm-channel-list,
[data-engine="hermes"] .hm-channel-toggle-grid {
grid-template-columns: 1fr;
}
[data-engine="hermes"] .hm-channel-form-panel .hm-panel-header {
flex-direction: column;
}
[data-engine="hermes"] .hm-config-runtime-panel .hm-panel-header {
flex-direction: column;
}
[data-engine="hermes"] .hm-config-runtime-panel .hm-panel-actions {
width: 100%;
flex-wrap: wrap;
}
[data-engine="hermes"] .hm-config-runtime-panel .hm-panel-actions .hm-muted {
width: 100%;
}
[data-engine="hermes"] .hm-config-runtime-panel .hm-panel-actions .hm-btn {
width: 100%;
}
[data-engine="hermes"] .hm-channel-switch {
width: 100%;
}
}
/* ---- Responsive breakpoints ---- */
@media (max-width: 960px) {
[data-engine="hermes"] .hm-chat-sidebar {
width: 240px;
flex-basis: 240px;
}
[data-engine="hermes"] .hm-chat-messages {
padding: 24px 28px;
}
[data-engine="hermes"] .hm-chat-input-area {
padding: 14px 28px 16px;
}
[data-engine="hermes"] .hm-chat-header {
padding: 14px 20px;
}
}
@media (max-width: 720px) {
[data-engine="hermes"] .hm-chat-sidebar-backdrop {
display: block;
position: absolute;
inset: 0;
z-index: 19;
opacity: 1;
pointer-events: auto;
background: rgba(28, 25, 23, 0.28);
backdrop-filter: blur(2px);
transition: opacity 0.18s ease;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-sidebar-backdrop {
opacity: 0;
pointer-events: none;
}
[data-engine="hermes"] .hm-chat-shell.is-sidebar-collapsed .hm-chat-sidebar {
display: flex;
}
[data-engine="hermes"] .hm-chat-sidebar {
/* Below 720px the sidebar floats over the main column instead of
sharing the row, so the chat surface gets the full viewport. */
position: absolute;
inset: 0 auto 0 0;
width: 280px;
flex-basis: 280px;
z-index: 20;
box-shadow: 2px 0 16px rgba(0, 0, 0, 0.08);
}
[data-engine="hermes"] .hm-chat-sidebar.is-collapsed {
transform: translateX(-100%);
}
[data-engine="hermes"] .hm-chat-messages {
padding: 20px 18px;
}
[data-engine="hermes"] .hm-chat-jump-bottom {
right: 18px;
bottom: 106px;
}
[data-engine="hermes"] .hm-chat-input-area {
padding: 12px 18px 14px;
}
[data-engine="hermes"] .hm-chat-msg-body {
max-width: 92%;
}
[data-engine="hermes"] .hm-chat-input-area .hm-chat-slash-menu {
left: 18px;
right: 18px;
}
}
@media (max-width: 860px) {
[data-engine="hermes"].hm-extensions-page .hm-grid--2 {
grid-template-columns: 1fr !important;
}
[data-engine="hermes"].hm-extensions-page .hm-kpi-grid {
grid-template-columns: 1fr !important;
}
}