@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600&display=swap");
:root {
color-scheme: light;
--bg: #f8f4ed;
--bg-accent: #efe6da;
--panel: #fffdf9;
--panel-border: #dfd4c5;
--sidebar: #f1e8dc;
--sidebar-border: #decfbe;
--surface-muted: #f8f1e7;
--terminal-bg: #11100e;
--terminal-border: rgba(255, 255, 255, 0.08);
--ink: #1f1a16;
--ink-soft: #3a3128;
--muted: #6d6153;
--accent: #0e7a73;
--accent-soft: rgba(14, 122, 115, 0.16);
--warning: #d97706;
--shadow-soft: 0 16px 30px rgba(31, 26, 22, 0.08);
--shadow-strong: 0 28px 60px rgba(31, 26, 22, 0.12);
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-7: 32px;
--space-8: 40px;
--space-9: 48px;
--control-height: 44px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "Space Grotesk", "IBM Plex Mono", sans-serif;
color: var(--ink);
background: radial-gradient(circle at top, #fff, var(--bg)) fixed,
linear-gradient(120deg, var(--bg-accent), var(--bg));
min-height: 100vh;
line-height: 1.5;
}
.app {
max-width: 1520px;
margin: 0 auto;
padding: var(--space-8) var(--space-7) var(--space-9);
display: grid;
grid-template-columns: clamp(260px, 24vw, 340px) minmax(0, 1fr);
grid-template-areas: "sidebar main";
gap: var(--space-7);
align-items: start;
}
.sidebar {
grid-area: sidebar;
background: linear-gradient(170deg, rgba(255, 255, 255, 0.76), rgba(255, 255, 255, 0.5)),
var(--sidebar);
border: 1px solid var(--sidebar-border);
border-radius: 28px;
padding: var(--space-6);
box-shadow: var(--shadow-strong);
display: flex;
flex-direction: column;
gap: var(--space-6);
position: sticky;
top: var(--space-7);
max-height: calc(100vh - var(--space-8));
min-height: 0;
overflow: hidden;
}
.sidebar__header {
display: grid;
gap: var(--space-1);
}
.sidebar__eyebrow {
margin: 0;
color: var(--muted);
text-transform: uppercase;
letter-spacing: 0.14em;
font-size: 10px;
font-weight: 600;
}
.sidebar__title {
margin: 0;
color: var(--ink);
font-size: clamp(22px, 2.1vw, 30px);
line-height: 1.06;
letter-spacing: -0.02em;
}
.sidebar__subtitle {
margin: 0;
max-width: 34ch;
color: var(--muted);
font-size: 12px;
line-height: 1.4;
}
.sidebar__status {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: stretch;
gap: var(--space-2);
}
.status {
display: flex;
align-items: center;
gap: var(--space-2);
min-height: 38px;
padding: 0 var(--space-3);
border-radius: 999px;
background: var(--panel);
border: 1px solid var(--panel-border);
font-size: 12px;
font-weight: 500;
color: var(--ink-soft);
flex: 1;
min-width: 0;
}
.status__dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--warning);
flex-shrink: 0;
animation: pulse 2s infinite;
}
.status--connected .status__dot {
background: var(--accent);
}
.status__text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.sidebar__section {
display: flex;
flex-direction: column;
gap: var(--space-3);
flex: 1;
min-height: 0;
}
.sidebar__section-header {
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
gap: var(--space-2) var(--space-3);
}
.sidebar__section-heading {
display: inline-flex;
align-items: center;
gap: var(--space-2);
min-width: 0;
}
.sidebar__section-title {
margin: 0;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--muted);
}
.sessions-count {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
min-height: 20px;
border-radius: 999px;
border: 1px solid var(--panel-border);
background: var(--panel);
color: var(--ink-soft);
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
font-weight: 600;
padding: 0 8px;
}
.sidebar__section-header > .button--icon {
grid-column: 2;
grid-row: 1 / span 2;
align-self: center;
}
.sessions-mode-badge {
grid-column: 1;
justify-self: start;
font-size: 10px;
padding: 3px 8px;
border-radius: 999px;
border: 1px solid var(--warning);
background: rgba(217, 119, 6, 0.1);
color: var(--warning);
letter-spacing: 0.04em;
text-transform: uppercase;
}
.session-list {
display: flex;
flex-direction: column;
gap: var(--space-2);
overflow-y: auto;
overflow-x: hidden;
padding-right: var(--space-1);
flex: 1;
min-height: 0;
}
.session-item {
border: 1px solid var(--panel-border);
background: linear-gradient(165deg, #fffefb, var(--panel));
border-radius: 14px;
padding: var(--space-3);
display: grid;
gap: 7px;
cursor: pointer;
transition: transform 0.16s ease, box-shadow 0.16s ease, border-color 0.16s ease,
background-color 0.16s ease;
text-align: left;
box-shadow: var(--shadow-soft);
min-width: 0;
}
.session-item:hover {
border-color: rgba(14, 122, 115, 0.4);
transform: translateY(-1px);
}
.session-item--selected {
background: var(--accent-soft);
border-color: var(--accent);
box-shadow: 0 14px 28px rgba(14, 122, 115, 0.18);
}
.session-item__top {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
min-width: 0;
}
.session-item__badges {
display: inline-flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.session-item__status {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 10px;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
}
.session-item__status-label {
line-height: 1;
}
.session-item__dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--muted);
flex-shrink: 0;
}
.session-item__dot--running {
background: var(--accent);
}
.session-item__shortcut {
font-size: 10px;
color: var(--muted);
font-family: "IBM Plex Mono", monospace;
border-radius: 999px;
border: 1px solid var(--panel-border);
background: var(--surface-muted);
padding: 1px 7px;
}
.session-item__selected {
font-size: 10px;
color: var(--accent);
font-family: "IBM Plex Mono", monospace;
border-radius: 999px;
border: 1px solid rgba(14, 122, 115, 0.4);
background: rgba(14, 122, 115, 0.12);
padding: 1px 7px;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.session-item__id {
font-family: "IBM Plex Mono", monospace;
font-size: 13px;
font-weight: 600;
line-height: 1.2;
color: var(--ink);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.session-item__command {
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
line-height: 1.35;
color: var(--ink-soft);
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-break: break-word;
}
.session-item__meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
flex-wrap: wrap;
}
.session-item__facts {
display: flex;
flex-wrap: wrap;
gap: 6px;
min-width: 0;
}
.session-item__fact {
display: inline-flex;
align-items: center;
border-radius: 999px;
border: 1px solid var(--panel-border);
background: var(--surface-muted);
color: var(--muted);
font-family: "IBM Plex Mono", monospace;
font-size: 10px;
line-height: 1;
padding: 3px 7px;
}
.session-item__detail {
display: none;
color: var(--muted);
font-family: "IBM Plex Mono", monospace;
font-size: 10px;
line-height: 1.1;
white-space: nowrap;
max-width: 100%;
margin-left: auto;
overflow: hidden;
text-overflow: ellipsis;
}
.session-item--selected .session-item__detail,
.session-item:hover .session-item__detail,
.session-item:focus-visible .session-item__detail {
display: inline-block;
}
.session-empty {
font-size: 12px;
color: var(--muted);
padding: var(--space-3);
border-radius: 12px;
border: 1px dashed var(--panel-border);
background: rgba(255, 255, 255, 0.5);
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.25);
}
100% {
transform: scale(1);
}
}
.button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: var(--control-height);
padding: 0 var(--space-4);
border-radius: 10px;
border: none;
background: var(--accent);
color: white;
font-weight: 600;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.button:hover {
transform: translateY(-1px);
box-shadow: 0 10px 25px rgba(14, 122, 115, 0.25);
}
.button--icon {
min-height: var(--control-height);
min-width: var(--control-height);
padding: 0 var(--space-3);
gap: var(--space-2);
font-size: 12px;
background: var(--panel);
color: var(--ink-soft);
border: 1px solid var(--panel-border);
}
.button--icon:hover {
box-shadow: 0 4px 12px rgba(31, 26, 22, 0.15);
}
.button__icon {
width: 16px;
height: 16px;
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.button__label {
font-size: 12px;
line-height: 1;
}
.button--icon svg {
display: block;
stroke: currentColor;
}
.main {
grid-area: main;
display: grid;
grid-template-rows: minmax(0, 1fr) auto;
gap: var(--space-4);
min-width: 0;
height: calc(100vh - var(--space-8) * 2);
min-height: 520px;
overflow: hidden;
}
.terminal {
flex: 1;
display: flex;
flex-direction: column;
background: var(--terminal-bg);
border-radius: 22px;
padding: var(--space-6);
box-shadow: var(--shadow-strong);
border: 1px solid var(--terminal-border);
min-width: 0;
min-height: 0;
}
.button:focus-visible,
.session-item:focus-visible {
outline: 2px solid rgba(14, 122, 115, 0.4);
outline-offset: 2px;
}
.terminal__viewport {
flex: 1;
min-height: 0;
min-width: 0;
overflow-x: auto;
}
.timeline {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.84), rgba(255, 255, 255, 0.6)),
var(--panel);
border-radius: 18px;
border: 1px solid var(--panel-border);
box-shadow: var(--shadow-soft);
min-height: 136px;
max-height: 220px;
padding: var(--space-4);
display: flex;
flex-direction: column;
gap: var(--space-3);
min-width: 0;
}
.timeline__header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
}
.timeline__title {
margin: 0;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--muted);
}
.timeline__count {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
min-height: 20px;
border-radius: 999px;
border: 1px solid var(--panel-border);
background: var(--surface-muted);
color: var(--ink-soft);
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
font-weight: 600;
padding: 0 8px;
}
.timeline__list {
display: flex;
flex-direction: column;
gap: var(--space-2);
overflow-y: auto;
flex: 1;
min-height: 0;
padding-right: var(--space-1);
}
.timeline__item {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: baseline;
gap: var(--space-2);
border: 1px solid var(--panel-border);
border-radius: 12px;
padding: 8px var(--space-3);
font-size: 12px;
background: rgba(255, 255, 255, 0.86);
font-family: "IBM Plex Mono", monospace;
}
.timeline__item-kind {
color: var(--accent);
font-weight: 600;
text-transform: lowercase;
}
.timeline__item-value {
color: var(--ink-soft);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.timeline__item-time {
color: var(--muted);
font-size: 10px;
white-space: nowrap;
}
.timeline__empty {
font-size: 12px;
color: var(--muted);
border: 1px dashed var(--panel-border);
border-radius: 12px;
padding: var(--space-3);
background: rgba(255, 255, 255, 0.58);
}
.xterm {
font-family: "IBM Plex Mono", monospace !important;
}
@media (max-width: 980px) {
.app {
grid-template-columns: 1fr;
grid-template-areas:
"main"
"sidebar";
gap: var(--space-5);
padding: var(--space-6) var(--space-5) var(--space-8);
}
.sidebar {
position: static;
max-height: none;
top: auto;
}
.sidebar__section-header > .button--icon {
grid-row: 1;
}
.main {
height: min(70vh, 640px);
min-height: 420px;
}
.timeline {
min-height: 128px;
max-height: 180px;
}
}
@media (max-width: 720px) {
.app {
padding: var(--space-5) var(--space-4) var(--space-7);
gap: var(--space-4);
}
.sidebar {
border-radius: 22px;
padding: var(--space-5);
}
.sidebar__title {
font-size: 24px;
}
.session-item {
padding: var(--space-3) var(--space-3);
}
.main {
min-height: 360px;
height: min(64vh, 560px);
gap: var(--space-3);
}
.terminal {
padding: var(--space-4);
border-radius: 16px;
}
.timeline {
min-height: 120px;
max-height: 170px;
border-radius: 16px;
padding: var(--space-3);
}
.timeline__item {
grid-template-columns: auto 1fr;
}
.timeline__item-time {
grid-column: 1 / -1;
}
}
@media (max-width: 560px) {
.sidebar__status {
grid-template-columns: 1fr;
}
.sidebar__section-header {
grid-template-columns: 1fr;
}
.sidebar__section-header > .button--icon {
grid-column: 1;
grid-row: auto;
justify-self: stretch;
width: 100%;
}
.session-item__top {
flex-wrap: wrap;
align-items: flex-start;
justify-content: flex-start;
}
.session-item__meta {
align-items: flex-start;
}
.session-item__detail {
margin-left: 0;
white-space: normal;
overflow-wrap: anywhere;
width: 100%;
text-overflow: clip;
}
}
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}