:root {
--bg-surface: #161410;
--bg-surface-elevated: #1F1C18;
--bg-surface-hover: #28241F;
--bg-surface-pressed: #322D27;
--surface: var(--bg-surface);
--surface-container: var(--bg-surface-elevated);
--surface-container-high: var(--bg-surface-hover);
--surface-container-highest: var(--bg-surface-pressed);
--surface-container-low: #1A1814;
--surface-container-lowest: #161410;
--background: var(--bg-surface);
--text-primary: #EBE5DD;
--text-secondary: #A0998F;
--text-tertiary: #6B6660;
--on-surface: var(--text-primary);
--on-surface-variant: var(--text-secondary);
--muted: var(--text-tertiary);
--accent: #D4683A;
--accent-hover: #E07B50;
--text-accent: #E8926C;
--ring-accent: #E8926C;
--primary: var(--accent);
--on-primary: #FFFFFF;
--border-subtle: #2A2621;
--border-default: #3D3832;
--border: var(--border-subtle);
--outline: var(--border-default);
--success: #5BAD75;
--error: #D9665E;
--warning: #E2A04A;
--on-error: #000000;
--secondary: #4A9E8E;
--on-secondary: #000000;
--state-user: #D4852B;
--state-assistant: #D4683A;
--state-thinking: #8B7EC8;
--state-tool: #4A9E8E;
--state-system: #8B8680;
--indigo-accent: var(--state-thinking);
--tertiary: var(--state-user);
--font-sans: 'Geist', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--font-display: 'Space Grotesk', sans-serif;
}
:root[data-theme="light"] {
--bg-surface: #FAF7F2;
--bg-surface-elevated: #F3EFE8;
--bg-surface-hover: #EDE8E0;
--bg-surface-pressed: #E5DFD5;
--surface: var(--bg-surface);
--surface-container: var(--bg-surface-elevated);
--surface-container-high: var(--bg-surface-hover);
--surface-container-highest: var(--bg-surface-pressed);
--surface-container-low: #F7F3EC;
--surface-container-lowest: #FAF7F2;
--background: var(--bg-surface);
--text-primary: #1E1B18;
--text-secondary: #5C5853;
--text-tertiary: #8B8680;
--on-surface: var(--text-primary);
--on-surface-variant: var(--text-secondary);
--muted: var(--text-tertiary);
--accent: #D4683A;
--accent-hover: #C2592E;
--text-accent: #C2592E;
--ring-accent: #D4683A;
--primary: var(--accent);
--on-primary: #FFFFFF;
--border-subtle: #E8E3DB;
--border-default: #D5CFC6;
--border: var(--border-subtle);
--outline: var(--border-default);
--success: #3B8C5A;
--error: #C5443B;
--warning: #D4852B;
--on-error: #FFFFFF;
--secondary: #3A8B7A;
--on-secondary: #FFFFFF;
--state-user: #D4852B;
--state-assistant: #D4683A;
--state-thinking: #8B7EC8;
--state-tool: #4A9E8E;
--state-system: #8B8680;
--indigo-accent: var(--state-thinking);
--tertiary: var(--state-user);
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
body {
font-family: var(--font-sans);
background: var(--background);
color: var(--on-surface);
font-size: 14px;
line-height: 1.5;
}
.header {
background: var(--background);
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
padding: 0 24px;
height: 64px;
position: fixed;
top: 0;
left: 0;
z-index: 50;
}
.header-left { display: flex; align-items: center; gap: 16px; flex: 1; min-width: 0; overflow: hidden; }
.header-logo { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.header-logo-icon { color: var(--primary); font-size: 18px; }
.header-logo-text {
font-family: var(--font-display);
font-size: 15px;
font-weight: 700;
letter-spacing: -0.01em;
color: var(--on-surface);
}
.header-separator { width: 1px; height: 20px; background: var(--border); flex-shrink: 0; }
.header-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; overflow: hidden; }
.header-back-link {
display: inline-block;
font-family: var(--font-mono);
font-size: 10px;
color: var(--primary);
text-decoration: none;
line-height: 1;
transition: color 0.15s;
white-space: nowrap;
}
.header-back-link:hover { color: var(--accent-hover); }
.header-session-title {
font-size: 13px;
font-weight: 500;
color: var(--on-surface);
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.header-meta-project { display: flex; flex-direction: column; gap: 2px; }
.header-meta-title {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--on-surface-variant);
line-height: 1;
}
.header-meta-path {
font-family: var(--font-mono);
font-size: 10px;
color: var(--muted);
line-height: 1;
opacity: 0.7;
}
.header-session-stats {
display: flex;
align-items: center;
gap: 6px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
white-space: nowrap;
flex-shrink: 0;
}
.header-stat-sep { color: var(--border-default); user-select: none; }
.header-actions { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }
.header-btn {
padding: 6px;
background: none;
border: none;
color: var(--on-surface-variant);
cursor: pointer;
font-size: 16px;
border-radius: 2px;
transition: background 0.15s;
}
.header-btn:hover { background: var(--surface-container); }
.filter-toggle-btn {
margin-left: auto;
padding: 4px 10px;
border-radius: 3px;
background: transparent;
color: var(--muted);
border: 1px solid var(--border-default);
font-family: var(--font-mono);
font-size: 11px;
cursor: pointer;
transition: background 0.15s, color 0.15s, border-color 0.15s;
white-space: nowrap;
flex-shrink: 0;
}
.filter-toggle-btn:hover {
background: var(--surface-container);
color: var(--on-surface);
border-color: var(--outline);
}
.layout-body { display: flex; padding-top: 64px; height: 100vh; }
.main-content {
flex: 1;
overflow-y: auto;
padding: 24px 32px;
background: var(--background);
display: flex;
flex-direction: column;
gap: 16px;
min-height: calc(100vh - 64px);
scroll-behavior: smooth;
}
.filter-bar {
display: flex; align-items: center; gap: 12px;
padding-bottom: 14px;
border-bottom: 1px solid var(--border-default);
}
.filter-search {
display: flex; align-items: center;
background: var(--surface-container-low);
border: 1px solid var(--border-default);
border-radius: 999px;
padding: 5px 14px;
transition: border-color 0.15s, background 0.15s;
flex-shrink: 0;
}
.filter-search:focus-within {
border-color: var(--ring-accent);
background: var(--surface-container);
}
.filter-search-icon { color: var(--muted); font-size: 13px; margin-right: 7px; }
.filter-search-input {
background: transparent; border: none; outline: none;
font-family: var(--font-mono); font-size: 12px;
color: var(--on-surface); width: 200px;
}
.filter-search-input::placeholder { color: var(--muted); }
.filter-divider { width: 1px; height: 22px; background: var(--border-default); flex-shrink: 0; }
mark.search-highlight {
background: rgba(251, 191, 36, 0.35);
color: inherit;
border-radius: 2px;
padding: 0 1px;
}
.filter-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.filter-chip {
padding: 4px 11px; border-radius: 3px;
background: var(--surface-container); color: var(--on-surface-variant);
border: 1px solid var(--border-default);
font-family: var(--font-mono); font-size: 12px;
cursor: pointer;
transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.filter-chip:hover {
background: var(--surface-container-high);
color: var(--on-surface);
border-color: var(--outline);
}
.filter-chip:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
}
.filter-chip--active {
background: color-mix(in srgb, var(--primary) 14%, var(--surface-container));
color: var(--text-accent);
border-color: color-mix(in srgb, var(--primary) 45%, transparent);
}
.filter-chip--active:hover {
background: color-mix(in srgb, var(--primary) 22%, var(--surface-container));
}
button.filter-chip {
font-family: inherit;
line-height: inherit;
}
.message-list {
display: flex; flex-direction: column; gap: 8px;
max-width: 1040px; width: 100%; margin: 0 auto;
padding: 12px 0 24px;
position: relative;
}
.message-list::before {
content: '';
position: absolute;
left: 23px;
top: 20px;
bottom: 20px;
width: 2px;
background: var(--border-subtle);
pointer-events: none;
z-index: 0;
}
.message-card-wrapper:not(.timeline-user) {
margin-left: 20px;
}
.message-card-wrapper.timeline-user {
position: relative;
z-index: 1;
background: var(--background);
padding: 4px 0;
}
.message-card-wrapper.timeline-user .user-block {
margin: 0;
}
.message-card-wrapper[hidden] { display: none !important; }
.turn {
max-width: 1040px; width: 100%; margin: 0;
}
.turn-header {
display: flex; align-items: center; gap: 8px;
padding: 4px 0 8px;
font-family: var(--font-mono); font-size: 12px;
color: var(--muted);
}
.turn-header time { color: var(--muted); }
.turn-body {
font-size: 14px; line-height: 1.6;
padding-bottom: 8px;
}
.turn--user {
background: var(--surface-container-low);
border-radius: 8px;
padding: 10px 16px;
}
.turn--user .turn-body p { margin: 0; }
.turn--assistant {
background: var(--surface);
border: 1px solid var(--border);
border-left: 3px solid var(--primary);
border-radius: 2px;
padding: 10px 16px;
}
.pill {
margin: 6px 0;
border: 1px solid var(--border);
border-radius: 4px;
overflow: hidden;
}
.pill-summary {
display: flex; align-items: center; gap: 8px;
padding: 8px 12px;
font-family: var(--font-mono); font-size: 11px;
font-weight: 600;
color: var(--muted);
cursor: pointer;
user-select: none;
list-style: none;
}
.pill-summary::-webkit-details-marker { display: none; }
.pill-summary::before {
content: '\25B8';
display: inline-block;
width: 14px;
font-size: 12px;
transition: transform 0.15s ease;
}
details[open] > .pill-summary::before { transform: rotate(90deg); }
.pill-body {
padding: 12px;
border-top: 1px solid var(--border);
font-size: 13px; line-height: 1.5;
}
.pill--thinking {
border-color: var(--indigo-accent);
background: rgba(99, 102, 241, 0.04);
}
.pill--thinking .pill-summary { color: var(--indigo-accent); }
.pill--tools {
border-color: var(--secondary);
background: rgba(3, 218, 198, 0.03);
}
.pill--tools .pill-summary { color: var(--secondary); }
.pill--disabled {
display: inline-block;
padding: 6px 12px;
font-family: var(--font-mono); font-size: 11px;
color: var(--muted); opacity: 0.4;
border: 1px dashed var(--border);
border-radius: 4px;
cursor: default;
}
.sub-agent {
margin: 8px 0 8px 12px;
border: 1px solid var(--border);
border-left: 3px solid var(--primary);
border-radius: 2px;
overflow: hidden;
}
.sub-agent-summary {
display: flex; align-items: center; gap: 8px;
padding: 8px 12px;
font-family: var(--font-mono); font-size: 11px;
color: var(--muted);
cursor: pointer;
user-select: none;
list-style: none;
}
.sub-agent-summary::-webkit-details-marker { display: none; }
.sub-agent-summary::before {
content: '\25B8';
display: inline-block;
width: 12px;
font-size: 11px;
transition: transform 0.15s ease;
}
details[open] > .sub-agent-summary::before { transform: rotate(90deg); }
.sub-agent-body {
padding: 12px 16px;
border-top: 1px solid var(--border);
font-size: 13px; line-height: 1.5;
}
.sub-agent .message-card { margin: 4px 0; }
.sub-agent .message-card-header { padding: 6px 12px; }
.sub-agent .message-card-body { padding: 8px 12px; }
.turn-body p { margin-bottom: 12px; }
.turn-body p:last-child { margin-bottom: 0; }
.turn-body ul,
.turn-body ol { margin-bottom: 12px; padding-left: 24px; }
.turn-body ul { list-style: disc; }
.turn-body ol { list-style: decimal; }
.turn-body li { margin-bottom: 4px; }
.turn-body li > p { margin-bottom: 4px; }
.turn-body ul:last-child,
.turn-body ol:last-child { margin-bottom: 0; }
.turn-body code {
font-family: var(--font-mono); font-size: 12px;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 1px 5px;
}
.turn-body pre {
font-family: var(--font-mono); font-size: 12px;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 12px 16px;
overflow-x: auto;
margin-bottom: 12px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
}
.turn-body pre code {
background: none; border: none; padding: 0;
}
.message-card {
border: 1px solid var(--border);
background: var(--surface);
border-radius: 2px;
overflow: hidden;
}
.message-card--error {
border-color: var(--error);
}
.message-card-header {
display: flex; align-items: center; justify-content: space-between; gap: 12px;
padding: 10px 16px;
border-bottom: 1px solid var(--border);
background: var(--surface-container-low);
cursor: pointer;
user-select: none;
}
.message-card-header:hover { background: var(--surface-container); }
.message-card-header-left {
display: flex; align-items: center; gap: 10px;
min-width: 0; flex: 1;
}
.message-card-header-right {
display: flex; align-items: center; gap: 10px;
flex-shrink: 0;
}
.message-card-meta {
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
white-space: nowrap;
}
.message-card-chevron {
font-size: 11px;
color: var(--muted);
transition: transform 0.15s ease;
}
.message-card.is-collapsed > .message-card-body { display: none; }
.message-card.is-collapsed > .message-card-header { border-bottom-color: transparent; }
.message-card.is-collapsed .message-card-chevron { transform: rotate(-90deg); }
.body-collapsible {
position: relative;
display: flex;
flex-direction: column;
}
.body-collapsible:not(.is-expanded) .body-collapsible-content {
max-height: 320px;
overflow: hidden;
mask-image: linear-gradient(180deg, #000 70%, transparent);
-webkit-mask-image: linear-gradient(180deg, #000 70%, transparent);
}
.body-collapsible.is-expanded .body-collapsible-content {
max-height: none;
mask-image: none;
-webkit-mask-image: none;
}
.show-more-btn {
align-self: flex-start;
margin-top: 8px;
padding: 4px 12px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 999px;
color: var(--on-surface-variant);
font-family: var(--font-sans);
font-size: 11px;
font-weight: 500;
cursor: pointer;
transition: background 0.15s, color 0.15s;
}
.show-more-btn:hover {
background: var(--surface-container-high);
color: var(--on-surface);
}
.message-card-header--user { }
.message-card-header--assistant { }
.message-card-header--thinking { }
.message-card-header--tool { }
.message-card-header--diff { }
.message-card-header--system { }
.message-card-header--hook { }
.message-card-role {
font-size: 13px;
font-weight: 600;
letter-spacing: 0.01em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.message-card-header--user .message-card-role { color: var(--tertiary); }
.message-card-header--assistant .message-card-role { color: var(--primary); }
.message-card-header--thinking .message-card-role { color: var(--indigo-accent); }
.message-card-header--tool .message-card-role { color: var(--secondary); }
.message-card-header--system .message-card-role { color: var(--muted); }
.message-card-header--hook .message-card-role { color: #94a3b8; }
.message-card-body {
padding: 16px;
font-size: 14px;
line-height: 1.6;
color: var(--on-surface);
}
.hook-section {
margin-top: 10px;
}
.hook-section:first-child { margin-top: 0; }
.hook-section-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 600;
color: var(--muted);
letter-spacing: 0.08em;
margin-bottom: 4px;
}
.hook-section-body {
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.5;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 8px 10px;
color: var(--on-surface);
white-space: pre-wrap;
word-break: break-word;
overflow-x: auto;
max-height: 320px;
}
.raw-json {
font-family: var(--font-mono);
font-size: 11px;
line-height: 1.5;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 8px 10px;
color: var(--on-surface-variant);
white-space: pre-wrap;
word-break: break-word;
overflow-x: auto;
max-height: 320px;
}
.back-to-top {
position: fixed;
bottom: 24px;
right: 24px;
z-index: 100;
width: 40px; height: 40px;
border-radius: 999px;
background: var(--surface-container-high);
color: var(--on-surface);
border: 1px solid var(--border);
font-size: 18px;
display: none;
align-items: center;
justify-content: center;
cursor: pointer;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
transition: background 0.15s, transform 0.15s;
}
.back-to-top:hover {
background: var(--surface-container-highest);
transform: translateY(-2px);
}
.back-to-top.is-visible { display: flex; }
.message-card-body p { margin-bottom: 12px; }
.message-card-body p:last-child { margin-bottom: 0; }
.message-card-body ul,
.message-card-body ol {
padding-left: 24px;
margin-bottom: 12px;
}
.message-card-body ul { list-style: disc; }
.message-card-body ol { list-style: decimal; }
.message-card-body li { margin-bottom: 4px; }
.message-card-body li > p { margin-bottom: 4px; }
.message-card-body ul:last-child,
.message-card-body ol:last-child { margin-bottom: 0; }
.message-card-body code {
font-family: var(--font-mono); font-size: 12px;
background: var(--surface-container-high);
padding: 1px 6px; border-radius: 4px;
color: var(--primary);
}
.message-card-body pre {
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 10px 12px;
margin: 8px 0;
overflow-x: auto;
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.5;
}
.message-card-body pre code {
background: transparent; padding: 0; color: var(--on-surface);
}
.message-card-body h1,
.message-card-body h2,
.message-card-body h3,
.message-card-body h4 {
margin: 14px 0 8px;
font-weight: 600;
}
.message-card-body h1 { font-size: 18px; }
.message-card-body h2 { font-size: 16px; }
.message-card-body h3 { font-size: 14px; }
.message-card-body h4 { font-size: 13px; color: var(--on-surface-variant); }
.message-card-body blockquote {
border-left: 3px solid var(--border);
padding-left: 12px;
margin: 8px 0;
color: var(--on-surface-variant);
}
.message-card-body a {
color: var(--primary);
text-decoration: underline;
text-underline-offset: 2px;
}
.message-card-body--collapsed {
display: flex; align-items: center; justify-content: flex-end;
padding: 8px 16px;
}
.message-card-body--code {
padding: 12px 16px;
background: var(--surface-container-lowest);
font-family: var(--font-mono);
font-size: 12px;
}
.thinking-token-info {
font-family: var(--font-mono); font-size: 11px; color: var(--muted);
}
.thinking-block {
border: 1px solid var(--border);
border-left: 2px solid var(--indigo-accent);
background: var(--surface-container-lowest);
border-radius: 2px;
margin: 10px 0;
overflow: hidden;
}
.thinking-block > .thinking-summary {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 12px;
padding: 8px 12px;
cursor: pointer;
list-style: none;
background: var(--surface-container-low);
user-select: none;
}
.thinking-block > .thinking-summary::-webkit-details-marker { display: none; }
.thinking-block > .thinking-summary::before {
content: "\25BE";
display: inline-block;
margin-right: 6px;
color: var(--muted);
transition: transform 0.15s ease;
}
.thinking-block:not([open]) > .thinking-summary::before {
transform: rotate(-90deg);
}
.thinking-block > .thinking-summary:hover {
background: var(--surface-container);
}
.thinking-summary-label {
font-size: 12px;
font-weight: 600;
letter-spacing: 0.01em;
color: var(--indigo-accent);
}
.thinking-summary-meta {
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
white-space: nowrap;
margin-left: auto;
}
.thinking-content {
padding: 12px 14px;
font-size: 13px;
line-height: 1.55;
color: var(--on-surface-variant);
font-style: italic;
white-space: pre-wrap;
word-break: break-word;
}
.thinking-empty { color: var(--muted); opacity: 0.7; }
.message-dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; }
.message-dot--user { background: var(--tertiary); }
.message-dot--assistant { background: var(--primary); }
.message-dot--thinking { background: var(--indigo-accent); }
.message-dot--tool { background: var(--secondary); }
.message-dot--file { background: var(--muted); }
.dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 3px; position: relative; z-index: 1; }
.dot--assistant { background: var(--text-secondary); }
.dot--tool { background: var(--secondary); }
.timeline-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 4px 0;
font-size: 13px;
line-height: 1.5;
}
.row-label {
color: var(--on-surface);
font-family: var(--font-mono);
flex: 1;
}
.row-meta {
color: var(--muted);
font-family: var(--font-mono);
font-size: 12px;
white-space: nowrap;
margin-left: 4px;
}
.tool-io {
display: flex; gap: 12px; padding: 3px 0;
font-family: var(--font-mono); font-size: 12px;
align-items: baseline;
}
.tool-io-label {
color: var(--muted);
min-width: 72px;
text-align: right;
flex-shrink: 0;
user-select: none;
font-weight: 500;
letter-spacing: 0.02em;
}
.tool-io-value {
color: var(--on-surface);
word-break: break-word;
min-width: 0;
flex: 1;
}
.tool-io-value--success { color: var(--secondary); }
.diff-file-icon { font-size: 14px; color: var(--muted); }
.diff-file-name { font-family: var(--font-mono); font-size: 12px; color: var(--on-surface); flex: 1; }
.diff-badge {
font-size: 10px; font-weight: 600; text-transform: uppercase;
letter-spacing: 0.05em; color: var(--muted);
}
.diff {
font-family: var(--font-mono); font-size: 11px;
background: var(--surface-container-lowest);
overflow-x: auto;
padding: 8px 0;
border-radius: 2px;
}
.diff-line {
display: flex; gap: 0;
padding: 1px 12px; line-height: 1.5;
white-space: pre-wrap; word-break: break-all;
}
.diff-line .ln {
display: inline-block;
min-width: 40px;
padding-right: 10px;
text-align: right;
color: var(--muted);
opacity: 0.5;
user-select: none;
flex-shrink: 0;
}
.diff-line .ln-old { margin-right: 4px; }
.diff-line .ln-new { margin-right: 8px; }
.diff-line--add {
background: rgba(91, 173, 117, 0.12);
color: var(--success);
}
.diff-line--del {
background: rgba(217, 102, 94, 0.12);
color: var(--error);
}
.diff-line--ctx {
background: none;
color: var(--muted);
}
.diff-summary {
font-family: var(--font-mono); font-size: 10px;
color: var(--muted); padding: 4px 12px 0;
text-transform: uppercase; letter-spacing: 0.05em;
}
.index-page,
.project-page {
max-width: 1200px;
margin: 0 auto;
padding: 80px 32px 32px;
min-height: 100vh;
}
.index-header {
margin-bottom: 32px;
}
.project-header {
margin-bottom: 28px;
}
.index-header-row {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 24px;
flex-wrap: wrap;
margin-bottom: 6px;
}
.index-header h1,
.project-header h1 {
font-family: var(--font-display);
font-size: 28px;
font-weight: 700;
color: var(--on-surface);
margin-bottom: 0;
}
.project-header h1 {
margin-bottom: 8px;
}
.project-header-path {
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
margin-top: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
}
.index-totals {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 20px;
}
.project-totals {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 20px;
}
.index-stat {
display: inline-flex;
align-items: baseline;
gap: 5px;
font-size: 12px;
color: var(--muted);
}
.index-stat-value {
font-family: var(--font-mono);
font-size: 16px;
font-weight: 700;
color: var(--on-surface);
letter-spacing: -0.02em;
}
.index-date-range {
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
margin-bottom: 4px;
}
.index-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 12px 0;
margin-bottom: 24px;
border-bottom: 1px solid var(--border);
}
.index-toolbar-center {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
.toolbar-divider {
width: 1px;
height: 16px;
background: var(--border);
flex-shrink: 0;
align-self: center;
}
.index-search {
display: flex;
align-items: center;
background: var(--background);
border: 1px solid var(--border);
border-radius: 999px;
padding: 6px 14px;
transition: border-color 0.15s;
}
.index-search:focus-within { border-color: var(--ring-accent); }
.index-search-icon { color: var(--muted); font-size: 14px; margin-right: 8px; }
.index-search-input {
background: transparent; border: none; outline: none;
font-family: var(--font-mono); font-size: 12px;
color: var(--on-surface); width: 240px;
}
.index-search-input::placeholder { color: var(--muted); }
.view-switcher {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 3px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 8px;
}
.view-switcher-btn {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border: none;
border-radius: 5px;
background: transparent;
color: var(--on-surface-variant);
cursor: pointer;
transition: background 0.15s, color 0.15s;
}
.view-switcher-btn:hover {
background: var(--surface-container-high);
color: var(--on-surface);
}
.view-switcher-btn:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
}
.view-switcher-btn[aria-pressed="true"] {
background: var(--primary);
color: var(--on-primary);
}
.view-switcher-icon {
display: block;
flex-shrink: 0;
}
.date-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.date-chip {
padding: 4px 12px; border-radius: 999px;
background: var(--surface-container); color: var(--on-surface-variant);
border: 1px solid var(--border);
font-family: var(--font-mono); font-size: 11px;
cursor: pointer;
transition: background 0.15s;
}
.date-chip:hover { background: var(--surface-container-high); }
.date-chip:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
}
.date-chip--active {
background: var(--primary); color: var(--on-primary); border-color: var(--primary);
}
.date-picker {
display: flex; align-items: center; gap: 6px;
}
.date-picker-from,
.date-picker-to {
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 6px;
padding: 4px 8px;
color: var(--on-surface);
font-family: var(--font-mono); font-size: 11px;
max-width: 130px;
}
.date-picker-from:focus,
.date-picker-to:focus {
border-color: var(--ring-accent);
outline: none;
}
.date-picker-sep { color: var(--muted); font-size: 12px; }
.back-link {
display: inline-block;
margin-bottom: 12px;
font-family: var(--font-mono);
font-size: 12px;
color: var(--primary);
text-decoration: none;
transition: color 0.15s;
}
.back-link:hover {
color: var(--accent-hover);
}
.back-link:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
border-radius: 2px;
}
.project-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
margin-bottom: 40px;
}
.project-card {
display: flex;
flex-direction: column;
height: 100%;
padding: 24px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 4px;
text-decoration: none;
transition: background 0.15s, border-color 0.15s;
}
.project-card:hover {
background: var(--surface-container-high);
border-color: var(--primary);
}
.project-card:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
}
.project-card-name {
font-family: var(--font-display);
font-size: 18px;
font-weight: 700;
color: var(--on-surface);
margin-bottom: 4px;
}
.project-card-path {
font-family: var(--font-mono);
font-size: 11px;
color: var(--on-surface-variant);
margin-bottom: 8px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-card-activity {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface-variant);
margin-bottom: 12px;
}
.project-card-activity .stat-label {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--muted);
margin-right: 4px;
}
.project-card-activity .stat-value-activity {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface-variant);
}
.project-card-stats {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-top: auto;
padding-top: 14px;
border-top: 1px solid var(--border-subtle);
}
.project-card-stats > div {
display: flex;
flex-direction: column;
gap: 2px;
}
.project-card-stats .stat-label {
font-size: 9px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.07em;
color: var(--muted);
line-height: 1;
}
.project-card-stats .stat-value {
font-family: var(--font-mono);
font-size: 15px;
font-weight: 700;
color: var(--on-surface);
letter-spacing: -0.01em;
line-height: 1;
}
.session-list {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 40px;
}
.session-card {
display: block;
padding: 14px 20px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 4px;
text-decoration: none;
transition: background 0.15s, border-color 0.15s;
}
.session-card:hover {
background: var(--surface-container-high);
border-color: var(--primary);
}
.session-card:focus-visible {
outline: 2px solid var(--ring-accent);
outline-offset: 2px;
}
.session-card-primary {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 16px;
margin-bottom: 8px;
}
.session-card-title {
font-family: var(--font-sans);
font-size: 13px;
font-weight: 500;
color: var(--on-surface);
line-height: 1.5;
flex: 1;
min-width: 0;
}
.session-card-time {
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
white-space: nowrap;
flex-shrink: 0;
padding-top: 1px;
}
.session-card-secondary {
display: flex;
align-items: center;
gap: 6px;
font-family: var(--font-mono);
font-size: 10px;
color: var(--muted);
overflow: hidden;
}
.session-card-id {
color: var(--on-surface-variant);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex-shrink: 1;
min-width: 0;
}
.session-card-meta-sep {
color: var(--border-default);
flex-shrink: 0;
user-select: none;
}
.session-card-meta {
display: flex;
gap: 16px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
}
.project-grid[data-view="list"] {
display: flex;
flex-direction: column;
gap: 2px;
}
.project-grid[data-view="list"] .project-card {
display: grid;
grid-template-columns: 2fr 1fr 0.7fr 0.7fr 0.8fr;
gap: 12px;
align-items: center;
padding: 10px 16px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 2px;
text-decoration: none;
transition: background 0.15s;
}
.project-grid[data-view="list"] .project-card:hover {
background: var(--surface-container-high);
transform: none;
}
.project-grid[data-view="list"] .project-card-col-name {
display: flex;
flex-direction: column;
min-width: 0;
}
.project-grid[data-view="list"] .project-card-name {
font-family: var(--font-sans);
font-size: 13px;
font-weight: 600;
color: var(--on-surface);
margin-bottom: 1px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-grid[data-view="list"] .project-card-path {
display: block;
font-family: var(--font-mono);
font-size: 10px;
color: var(--muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-grid[data-view="list"] .project-card-activity {
font-family: var(--font-mono);
font-size: 11px;
color: var(--on-surface-variant);
margin-bottom: 0;
white-space: nowrap;
}
.project-grid[data-view="list"] .project-card-stats {
display: contents;
}
.project-grid[data-view="list"] .project-card-stats .stat-label { display: none; }
.project-grid[data-view="list"] .project-card-stats .stat-value {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface-variant);
}
.project-grid[data-view="list"] .project-card-stats div {
display: flex;
align-items: center;
}
.project-grid[data-view="list"] .stat-label { display: none; }
.project-grid[data-view="list"] .project-card-activity .stat-value-activity {
font-family: var(--font-mono);
font-size: 11px;
color: var(--on-surface-variant);
}
.project-card[hidden],
.project-grid[data-view="list"] .project-card[hidden],
.session-card[hidden] { display: none !important; }
.list-header {
display: none;
padding: 8px 16px;
border-bottom: 1px solid var(--border);
margin-bottom: 4px;
}
.project-grid[data-view="list"] > .list-header {
display: grid;
grid-template-columns: 2fr 1fr 0.7fr 0.7fr 0.8fr;
gap: 12px;
align-items: center;
}
.list-header-cell {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--muted);
cursor: pointer;
user-select: none;
display: flex;
align-items: center;
gap: 4px;
}
.list-header-cell:hover { color: var(--on-surface-variant); }
.sort-asc::after { content: " \25B2"; font-size: 8px; }
.sort-desc::after { content: " \25BC"; font-size: 8px; }
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 48px 24px;
text-align: center;
}
.empty-state[hidden] { display: none; }
.empty-state-icon {
font-size: 32px;
opacity: 0.4;
}
.empty-state-text {
font-family: var(--font-mono);
font-size: 13px;
color: var(--muted);
}
.index-footer {
text-align: center;
font-family: var(--font-mono);
font-size: 11px;
color: var(--muted);
padding-top: 24px;
border-top: 1px solid var(--border);
}
@media (max-width: 640px) {
.index-page,
.project-page {
padding: 80px 16px 16px;
}
.project-grid {
grid-template-columns: 1fr;
}
.index-header h1,
.project-header h1 {
font-size: 22px;
}
.index-header-row {
flex-direction: column;
gap: 8px;
align-items: flex-start;
}
.index-totals {
gap: 14px;
}
}
@media (max-width: 1024px) {
.index-toolbar {
flex-wrap: wrap;
}
.index-toolbar-center {
order: 3;
width: 100%;
}
}
.status-bar {
margin-top: auto;
border-top: 1px solid var(--border);
padding-top: 12px;
padding-bottom: 24px;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--font-mono);
font-size: 12px;
color: var(--muted);
}
.status-bar-active { color: var(--secondary); }
.status-bar-stats { display: flex; gap: 12px; }
.tool-result {
padding: 4px 0;
border-left: 2px solid var(--border);
padding-left: 10px;
margin: 4px 0;
}
.tool-result--error {
border-left-color: var(--error);
}
.tool-result-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 600;
color: var(--muted);
letter-spacing: 0.08em;
margin-bottom: 2px;
}
.tool-result-content {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface);
word-break: break-word;
}
.todo-item {
display: flex; align-items: center; gap: 8px;
padding: 2px 0; font-size: 13px;
}
.todo-content { flex: 1; }
.todo-priority {
font-family: var(--font-mono); font-size: 11px; color: var(--muted);
}
.status-chip {
font-family: var(--font-mono); font-size: 10px;
padding: 1px 6px; border-radius: 4px; white-space: nowrap;
}
.question-block { margin-bottom: 10px; }
.question-text { font-size: 13px; font-weight: 500; margin-bottom: 6px; }
.question-options { display: flex; flex-wrap: wrap; gap: 6px; }
.question-option {
display: inline-block;
padding: 3px 10px;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 999px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--on-surface);
}
.tool-write-preview {
font-family: var(--font-mono); font-size: 12px;
line-height: 1.5; color: var(--on-surface);
white-space: pre-wrap; word-break: break-word;
max-height: 300px; overflow-y: auto;
}
.multiedit-op { margin-bottom: 12px; }
.multiedit-op:last-child { margin-bottom: 0; }
.tool-io-footer {
font-family: var(--font-mono); font-size: 10px;
color: var(--muted); margin-top: 4px;
}
.embedded-image {
max-width: 100%;
height: auto;
border-radius: 4px;
border: 1px solid var(--border);
margin: 12px 0;
display: block;
}
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.6);
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
}
.modal-overlay[hidden] { display: none; }
.modal-dialog {
position: relative;
background: var(--surface-container);
border: 1px solid var(--border);
border-radius: 8px;
max-width: 800px;
width: 100%;
max-height: 80vh;
overflow: hidden;
display: flex;
flex-direction: column;
}
.modal-close {
position: absolute;
top: 8px;
right: 10px;
background: none;
border: none;
color: var(--on-surface-variant);
font-size: 20px;
cursor: pointer;
line-height: 1;
padding: 4px 8px;
border-radius: 4px;
z-index: 1;
}
.modal-close:hover { background: var(--surface-container-high); }
.modal-body {
overflow-y: auto;
padding: 16px;
flex: 1;
font-size: 14px;
line-height: 1.6;
color: var(--on-surface);
}
.modal-body h1,
.modal-body h2,
.modal-body h3,
.modal-body h4 {
font-weight: 600;
margin: 16px 0 8px;
line-height: 1.3;
}
.modal-body h1 { font-size: 20px; }
.modal-body h2 { font-size: 17px; }
.modal-body h3 { font-size: 15px; }
.modal-body h4 { font-size: 13px; color: var(--on-surface-variant); }
.modal-body p { margin-bottom: 10px; }
.modal-body p:last-child { margin-bottom: 0; }
.modal-body ul,
.modal-body ol { padding-left: 24px; margin-bottom: 10px; }
.modal-body ul { list-style: disc; }
.modal-body ol { list-style: decimal; }
.modal-body li { margin-bottom: 4px; }
.modal-body li > p { margin-bottom: 4px; }
.modal-body ul:last-child,
.modal-body ol:last-child { margin-bottom: 0; }
.modal-body code {
font-family: var(--font-mono);
font-size: 12px;
background: var(--surface-container-high);
border: 1px solid var(--border);
border-radius: 2px;
padding: 1px 5px;
color: var(--on-surface);
}
.modal-body pre {
font-family: var(--font-mono);
font-size: 12px;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 10px 14px;
overflow-x: auto;
margin-bottom: 10px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
}
.modal-body pre code { background: none; border: none; padding: 0; }
.modal-body blockquote {
border-left: 3px solid var(--border-default);
padding-left: 12px;
margin: 8px 0;
color: var(--on-surface-variant);
}
.modal-body a {
color: var(--primary);
text-decoration: underline;
text-underline-offset: 2px;
}
.modal-body table {
width: 100%;
border-collapse: collapse;
margin-bottom: 10px;
font-family: var(--font-mono);
font-size: 12px;
}
.modal-body th,
.modal-body td {
border: 1px solid var(--border);
padding: 6px 10px;
text-align: left;
}
.modal-body th { background: var(--surface-container); font-weight: 600; }
.modal-body hr {
border: none;
border-top: 1px solid var(--border);
margin: 16px 0;
}
body.modal-open { overflow: hidden; }
.user-block {
background: var(--surface-container);
border-left: 3px solid var(--state-user);
border-radius: 6px;
padding: 14px 20px;
max-width: 1040px;
margin: 4px 0;
}
.user-block p { margin: 0 0 8px; }
.user-block p:last-child { margin-bottom: 0; }
.row-body {
flex: 1;
line-height: 1.6;
min-width: 0;
}
.timeline-row--text { align-items: flex-start; padding: 6px 0; }
.row-body p { margin: 0 0 8px; }
.row-body p:last-child { margin-bottom: 0; }
.row-body code {
font-family: var(--font-mono); font-size: 12px;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 1px 5px;
}
.row-body pre {
font-family: var(--font-mono); font-size: 12px;
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 10px 14px;
overflow-x: auto;
margin-bottom: 8px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
}
.thinking-row { border: none; }
.thinking-row > .timeline-row { cursor: pointer; list-style: none; }
.thinking-row > .timeline-row::-webkit-details-marker { display: none; }
.thinking-disabled { opacity: 0.5; color: var(--muted); pointer-events: none; }
.thinking-body {
margin-left: 18px;
padding: 8px 0 8px 10px;
border-left: 2px solid var(--border);
}
.thinking-pre {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface-variant);
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
margin: 0;
}
.tool-details { border: none; }
.tool-details > .timeline-row { cursor: pointer; list-style: none; }
.tool-details > .timeline-row::-webkit-details-marker { display: none; }
.tool-details-body {
margin-left: 18px;
padding: 6px 0;
border-left: 2px solid var(--border);
padding-left: 10px;
}
.tool-section {
margin-bottom: 6px;
}
.tool-section-label {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 600;
letter-spacing: 0.06em;
color: var(--muted);
text-transform: uppercase;
margin-bottom: 2px;
}
.tool-section-body {
font-family: var(--font-mono);
font-size: 12px;
color: var(--on-surface);
background: var(--surface-container-lowest);
border: 1px solid var(--border);
border-radius: 2px;
padding: 8px 12px;
overflow-x: auto;
white-space: pre-wrap;
word-break: break-word;
margin: 0;
line-height: 1.5;
}
.tool-section--error .tool-section-body {
border-color: var(--error);
background: color-mix(in srgb, var(--error) 8%, var(--surface));
}
.tool-section-pre-wrap {
position: relative;
}
.tool-section-pre-wrap .tool-section-body {
max-height: 12rem;
overflow: hidden;
}
.tool-section-pre-wrap.is-clamped {
cursor: pointer;
}
.tool-section-pre-wrap.is-clamped::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2.5rem;
background: linear-gradient(transparent, var(--surface-container-lowest));
pointer-events: none;
}
.tool-section--error .tool-section-pre-wrap.is-clamped::after {
background: linear-gradient(transparent, color-mix(in srgb, var(--error) 8%, var(--surface)));
}
.file-link {
background: none;
border: none;
color: inherit;
text-decoration: none;
cursor: pointer;
padding: 0;
font: inherit;
font-size: inherit;
}
.file-link:hover {
text-decoration: underline;
text-decoration-style: dotted;
}
.skill-link {
background: none;
border: none;
color: var(--on-surface);
cursor: pointer;
padding: 0;
font: inherit;
font-size: inherit;
text-decoration: underline;
text-decoration-style: dotted;
}
.skill-link:hover { color: var(--primary); }
.file-contents {
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
margin: 0;
color: var(--on-surface);
}
.modal-pre {
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
margin: 0;
color: var(--on-surface);
background: none;
border: none;
padding: 0;
}
.diff-count--add { color: var(--secondary); font-weight: 600; }
.diff-count--del { color: var(--error); font-weight: 600; }
.diff-summary {
font-family: var(--font-mono);
font-size: 11px;
padding: 4px 8px;
background: var(--surface-container-low);
border-bottom: 1px solid var(--border);
display: flex;
gap: 8px;
}
.diff-tok--del {
background: color-mix(in srgb, var(--error) 40%, transparent);
border-radius: 2px;
padding: 0 1px;
}
.diff-tok--add {
background: color-mix(in srgb, var(--secondary) 40%, transparent);
border-radius: 2px;
padding: 0 1px;
}
.images-row { padding: 6px 0; }
.img-thumbnails {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: flex-start;
}
.img-thumb-btn {
background: none;
border: 1px solid var(--border);
border-radius: 4px;
cursor: pointer;
padding: 2px;
overflow: hidden;
transition: border-color 0.15s;
}
.img-thumb-btn:hover { border-color: var(--primary); }
.img-thumb {
display: block;
width: 80px;
height: 60px;
object-fit: cover;
border-radius: 2px;
}
.img-modal-full {
max-width: 100%;
max-height: 70vh;
display: block;
margin: 0 auto;
border-radius: 4px;
}
.weavr-tooltip {
position: fixed;
z-index: 2000;
max-width: 360px;
padding: 4px 8px;
background: var(--surface-container-highest);
color: var(--on-surface);
border: 1px solid var(--border-default);
border-radius: 4px;
font-family: var(--font-mono);
font-size: 11px;
line-height: 1.4;
white-space: pre-wrap;
word-break: break-all;
pointer-events: none;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}
.weavr-tooltip[hidden] { display: none; }