Files
web-terminal/public/style.css
Yaojia Wang 32fb4b09b1 polish(v0.6): redesign Sessions/Projects toggle + hide keybar on home
- Segmented control: replace the two free-standing bordered boxes with a
  single rounded track holding two pill buttons (iOS-style), active segment
  filled Amber; centred via fit-content + margin auto. Panel top-offset 44→68px.
- Hide the bottom key-bar on the home chooser (it only targets an active
  terminal): updateHomeView toggles body.home-open; CSS hides #keybar.

Frontend-only. 415 tests green; both typechecks clean; verified in-browser
(toggle pill renders, keybar hidden on home, reappears when a tab opens).
2026-06-30 11:51:47 +02:00

1167 lines
23 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.

/* Web Terminal — modern dark UI */
:root {
/* palette (design tokens) — Amber 琥珀金 theme (warm-neutral base + gold accent) */
--bg: #100f0d; /* terminal / deepest surface — warm near-neutral */
--surface-1: #181613; /* tab bar, key bar */
--surface-2: #1f1c17; /* tabs, buttons, cards */
--surface-3: #2a2620; /* hover / active */
--border: rgba(255, 255, 255, 0.07);
--border-strong: rgba(255, 255, 255, 0.14);
--text: #ece9e3;
--text-dim: #a8a299;
--text-faint: #6f6a61;
--accent: #e3a64a; /* amber gold */
--accent-2: #c9892f; /* deeper gold (gradients / hover) */
--accent-soft: rgba(227, 166, 74, 0.15);
--on-accent: #1a1305; /* text/icon color on a gold accent background (contrast) */
--green: #46d07f; /* connection-status: connected */
--amber: #f5b14c; /* connection-status: connecting */
--red: #ff6b6b; /* connection-status: disconnected / error */
--shadow: 0 10px 40px rgba(0, 0, 0, 0.55);
--radius: 9px;
--radius-lg: 14px;
--tabbar-h: 40px;
--keybar-h: 46px;
--ui-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
}
@media (pointer: coarse) {
:root {
--tabbar-h: 48px;
--keybar-h: 60px;
}
}
html,
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background-color: var(--bg);
color: var(--text);
font-family: var(--ui-font);
overflow: hidden;
}
* {
scrollbar-width: thin;
scrollbar-color: var(--surface-3) transparent;
}
/* ── Tab bar ─────────────────────────────────────────────────────── */
#tabbar {
position: fixed;
inset: 0 0 auto 0;
height: var(--tabbar-h);
background: linear-gradient(180deg, #181a22, var(--surface-1));
border-bottom: 1px solid var(--border);
display: flex;
align-items: stretch;
z-index: 1001;
}
#tabs {
flex: 1 1 auto;
display: flex;
align-items: center;
gap: 2px;
padding: 0 4px;
overflow-x: auto;
overflow-y: hidden;
}
#tabs::-webkit-scrollbar {
height: 0;
}
/* tabs as floating rounded chips */
.tab {
display: flex;
align-items: center;
gap: 2px;
height: calc(var(--tabbar-h) - 12px);
padding: 0 4px 0 10px;
border-radius: 8px;
color: var(--text-dim);
background: transparent;
cursor: pointer;
white-space: nowrap;
font-size: 13px;
user-select: none;
max-width: 220px;
transition:
background 0.12s ease,
color 0.12s ease;
}
.tab:hover {
background: var(--surface-2);
color: var(--text);
}
.tab.active {
background: var(--surface-3);
color: #fff;
box-shadow: inset 0 0 0 1px var(--border-strong);
}
.tab-dot {
width: 7px;
height: 7px;
border-radius: 50%;
margin-right: 8px;
flex: none;
background: var(--text-faint);
}
.dot-connected {
background: var(--green);
box-shadow: 0 0 6px rgba(70, 208, 127, 0.5);
}
.dot-connecting,
.dot-reconnecting {
background: var(--amber);
}
.dot-exited {
background: var(--red);
}
.tab-label {
padding-right: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.tab-rename {
width: 120px;
margin: 0 4px;
padding: 3px 6px;
font: inherit;
font-size: 13px;
color: #fff;
background: var(--bg);
border: 1px solid var(--accent);
border-radius: 6px;
outline: none;
}
/* unread / Claude-waiting accents */
.tab.unread .tab-dot {
box-shadow: 0 0 0 3px var(--accent-soft);
}
.tab.unread .tab-label {
color: #fff;
font-weight: 600;
}
.tab-claude {
margin-right: 4px;
font-size: 12px;
flex: none;
}
.tab.claude-waiting {
background: rgba(245, 177, 76, 0.14);
box-shadow: inset 0 0 0 1px rgba(245, 177, 76, 0.5);
}
.tab.dragging {
opacity: 0.4;
}
.tab.drag-over {
box-shadow: inset 3px 0 0 var(--accent);
}
.tab-close {
background: none;
border: none;
color: var(--text-faint);
cursor: pointer;
font-size: 16px;
line-height: 1;
padding: 3px 6px;
border-radius: 6px;
flex: none;
}
.tab-close:hover {
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
@media (pointer: fine) {
.tab:not(.active):not(:hover) .tab-close {
opacity: 0;
}
}
.tab-add {
background: none;
border: none;
color: var(--text-dim);
cursor: pointer;
font-size: 18px;
padding: 0 10px;
flex: none;
border-radius: 7px;
}
.tab-add:hover {
color: #fff;
background: var(--surface-2);
}
/* v0.6: Home (⌂) button — opens the Sessions/Projects chooser over open tabs. */
.tab-home {
background: none;
border: none;
color: var(--text-dim);
cursor: pointer;
font-size: 17px;
padding: 0 10px;
flex: none;
border-radius: 7px;
}
.tab-home:hover {
color: #fff;
background: var(--surface-2);
}
.tab-home.active {
color: var(--on-accent, #1a1408);
background: var(--accent);
}
/* toolbar */
#toolbar {
flex: 0 0 auto;
display: flex;
align-items: center;
gap: 2px;
padding: 0 6px;
border-left: 1px solid var(--border);
}
.toolbtn {
background: none;
border: none;
color: var(--text-dim);
cursor: pointer;
font-size: 15px;
padding: 7px 9px;
border-radius: 8px;
line-height: 1;
transition: background 0.12s ease;
}
.toolbtn:hover {
color: #fff;
background: var(--surface-2);
}
/* ── Terminal area ───────────────────────────────────────────────── */
#term {
position: absolute;
inset: var(--tabbar-h) 0 var(--keybar-h) 0;
background: var(--bg);
overflow: hidden;
}
.term-pane {
position: absolute;
inset: 0;
padding: 6px 8px 0;
box-sizing: border-box;
overflow: hidden;
}
/* ── Key bar (rounded chips) ─────────────────────────────────────── */
#keybar {
position: fixed;
inset: auto 0 0 0;
height: var(--keybar-h);
background: var(--surface-1);
border-top: 1px solid var(--border);
display: flex;
align-items: center;
gap: 5px;
padding: 0 6px;
overflow-x: auto;
overflow-y: hidden;
z-index: 1000;
}
#keybar::-webkit-scrollbar {
height: 0;
}
#keybar button {
flex: 1 0 auto;
min-width: 50px;
height: calc(var(--keybar-h) - 12px);
padding: 0 10px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1px;
border: 1px solid var(--border);
background: var(--surface-2);
color: var(--text);
font-family: var(--ui-font);
cursor: pointer;
border-radius: 8px;
transition:
background 0.1s ease,
transform 0.05s ease;
user-select: none;
-webkit-user-select: none;
-webkit-touch-callout: none;
}
#keybar .kb-key {
font-size: 13px;
line-height: 1.1;
}
#keybar .kb-cap {
font-size: 9px;
line-height: 1;
color: var(--text-faint);
letter-spacing: 0.02em;
}
#keybar button:hover {
background: var(--surface-3);
}
#keybar button:active {
transform: translateY(1px);
background: var(--surface-3);
}
#keybar button.keybar-btn-primary {
background: var(--accent-soft);
color: #f0d49a;
border-color: rgba(227, 166, 74, 0.4);
font-weight: 600;
min-width: 54px;
}
#keybar button.keybar-btn-primary:hover {
background: rgba(227, 166, 74, 0.26);
}
#keybar button.keybar-btn-primary .kb-cap {
color: rgba(240, 212, 154, 0.7);
}
/* ── Shared: overlays, cards, inputs, buttons ────────────────────── */
.overlay {
position: fixed;
inset: 0;
z-index: 1200;
display: flex;
background: rgba(8, 9, 12, 0.6);
-webkit-backdrop-filter: blur(6px);
backdrop-filter: blur(6px);
}
#searchbox {
position: fixed;
top: calc(var(--tabbar-h) + 8px);
right: 10px;
z-index: 1100;
display: flex;
gap: 5px;
padding: 7px;
background: var(--surface-2);
border: 1px solid var(--border-strong);
border-radius: 10px;
box-shadow: var(--shadow);
}
.search-input {
width: 190px;
padding: 5px 8px;
font: inherit;
font-size: 13px;
color: #fff;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 7px;
outline: none;
}
.search-input:focus {
border-color: var(--accent);
}
#searchbox button {
background: var(--surface-3);
border: 1px solid var(--border);
color: var(--text);
cursor: pointer;
border-radius: 7px;
padding: 0 10px;
}
#searchbox button:hover {
background: var(--accent-soft);
}
/* QR + share modals */
#qrmodal,
#sharemodal {
position: fixed;
inset: 0;
z-index: 1200;
display: flex;
align-items: center;
justify-content: center;
background: rgba(8, 9, 12, 0.6);
-webkit-backdrop-filter: blur(6px);
backdrop-filter: blur(6px);
}
.qr-card {
background: var(--surface-2);
color: var(--text);
border: 1px solid var(--border-strong);
border-radius: var(--radius-lg);
padding: 22px;
text-align: center;
max-width: 90vw;
box-shadow: var(--shadow);
}
.qr-card canvas {
border-radius: 10px;
background: #fff;
padding: 8px;
}
.qr-title {
font-weight: 600;
margin-bottom: 14px;
}
.qr-url {
margin-top: 12px;
font-size: 13px;
color: var(--accent);
word-break: break-all;
}
.qr-note {
margin-top: 8px;
font-size: 12px;
color: var(--text-dim);
max-width: 240px;
}
.qr-close {
margin-top: 16px;
padding: 8px 20px;
border: 1px solid var(--border-strong);
border-radius: 8px;
background: var(--surface-3);
color: #fff;
cursor: pointer;
font: inherit;
}
.qr-close:hover {
background: var(--accent-soft);
}
/* Settings panel */
#settingspanel {
position: fixed;
top: calc(var(--tabbar-h) + 8px);
right: 10px;
z-index: 1100;
background: var(--surface-2);
border: 1px solid var(--border-strong);
border-radius: 12px;
padding: 12px;
min-width: 220px;
box-shadow: var(--shadow);
color: var(--text);
}
.settings-row {
display: flex;
align-items: center;
gap: 6px;
margin: 8px 0;
}
.settings-label {
width: 48px;
color: var(--text-dim);
font-size: 13px;
}
.settings-opt {
background: var(--surface-3);
border: 1px solid var(--border);
color: var(--text);
border-radius: 7px;
padding: 5px 10px;
cursor: pointer;
font: inherit;
font-size: 12px;
transition: background 0.1s ease;
}
.settings-opt:hover {
background: var(--surface-1);
}
.settings-opt.active {
background: var(--accent);
color: var(--on-accent);
border-color: var(--accent);
}
.settings-size {
min-width: 22px;
text-align: center;
}
/* Dashboard + history + shortcuts share the centered-card look */
#dashboard,
#historymodal,
#shortcutsmodal {
position: fixed;
inset: 0;
z-index: 1200;
display: flex;
align-items: flex-start;
justify-content: center;
padding-top: 60px;
background: rgba(8, 9, 12, 0.6);
-webkit-backdrop-filter: blur(6px);
backdrop-filter: blur(6px);
}
.dash-card,
.hist-card,
.sc-card {
background: var(--surface-2);
border: 1px solid var(--border-strong);
border-radius: var(--radius-lg);
min-width: 340px;
max-width: 92vw;
max-height: 72vh;
overflow-y: auto;
box-shadow: var(--shadow);
}
.sc-card {
width: 540px;
}
.dash-title,
.hist-title,
.sc-title {
padding: 14px 18px;
font-weight: 600;
color: #fff;
border-bottom: 1px solid var(--border);
position: sticky;
top: 0;
background: var(--surface-2);
}
/* Shortcut cheat-sheet */
.sc-group {
padding: 12px 18px 4px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--accent);
}
.sc-row {
display: flex;
align-items: center;
gap: 12px;
padding: 6px 18px;
}
.sc-key {
flex: none;
min-width: 110px;
font-family: Menlo, Consolas, monospace;
font-size: 12px;
color: #fff;
background: var(--bg);
border: 1px solid var(--border-strong);
border-radius: 6px;
padding: 3px 8px;
text-align: center;
}
.sc-desc {
flex: 1 1 auto;
color: var(--text-dim);
font-size: 13px;
}
.sc-tag {
flex: none;
font-size: 10px;
color: var(--accent);
background: var(--accent-soft);
border-radius: 5px;
padding: 2px 6px;
}
.dash-row,
.hist-row {
display: flex;
align-items: center;
gap: 10px;
padding: 11px 18px;
cursor: pointer;
color: var(--text);
border-bottom: 1px solid var(--border);
transition: background 0.1s ease;
}
.dash-row:hover,
.hist-row:hover {
background: var(--surface-3);
}
.dash-row.active {
box-shadow: inset 3px 0 0 var(--accent);
}
.dash-name {
flex: 1;
}
.dash-claude {
color: var(--text-dim);
font-size: 13px;
}
.dash-claude.pending {
color: var(--amber);
font-weight: 600;
}
.hist-empty {
padding: 18px;
color: var(--text-dim);
}
.hist-row {
cursor: default;
}
.hist-main {
flex: 1 1 auto;
min-width: 0;
}
.hist-proj {
color: #fff;
font-size: 13px;
}
.hist-prev {
color: var(--text-dim);
font-size: 12px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hist-resume {
flex: none;
background: var(--accent);
color: var(--on-accent);
border: none;
border-radius: 8px;
padding: 7px 15px;
cursor: pointer;
font: inherit;
font-weight: 500;
transition: background 0.1s ease;
}
.hist-resume:hover {
background: var(--accent-2);
}
/* Approval banner (H3) */
#approvalbar {
position: fixed;
inset: auto 0 var(--keybar-h) 0;
z-index: 1050;
display: flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
background: linear-gradient(180deg, rgba(245, 177, 76, 0.16), rgba(245, 177, 76, 0.08));
border-top: 1px solid rgba(245, 177, 76, 0.5);
color: #ffe0ad;
font-size: 14px;
}
.approval-label {
flex: 1 1 auto;
}
#approvalbar button {
flex: none;
border: none;
border-radius: 8px;
padding: 8px 16px;
cursor: pointer;
font: inherit;
font-weight: 600;
}
.approval-yes {
background: var(--green);
color: #06210f;
}
.approval-no {
background: var(--red);
color: #2a0808;
}
/* ── Launcher (home session chooser, shown when no tab is open) ──── */
.launcher {
position: absolute;
inset: 68px 0 0 0; /* top offset reserves space for .home-seg (track pill + margins) */
overflow-y: auto;
padding: 22px 18px 40px;
box-sizing: border-box;
background: var(--bg);
}
.launcher-head {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px 16px;
margin-bottom: 18px;
}
.launcher-title {
font-size: 20px;
font-weight: 700;
color: #fff;
}
.launcher-sub {
flex: 1 1 auto;
color: var(--text-dim);
font-size: 13px;
}
.launcher-actions {
display: flex;
gap: 8px;
}
.launcher-new {
background: var(--accent);
color: var(--on-accent);
border: none;
border-radius: 8px;
padding: 9px 16px;
font: inherit;
font-weight: 600;
cursor: pointer;
}
.launcher-new:hover {
background: var(--accent-2);
}
/* ── Session Manager page (manage.html) ──────────────────────────── */
#manage-root {
max-width: 1200px;
margin: 0 auto;
padding: 24px 16px 60px;
height: 100%;
overflow-y: auto;
box-sizing: border-box;
}
.mg-header {
margin-bottom: 18px;
}
.mg-title {
font-size: 22px;
font-weight: 700;
color: #fff;
}
.mg-sub {
color: var(--text-dim);
font-size: 13px;
margin-top: 2px;
}
.mg-bar {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 14px;
}
.mg-btn {
background: var(--surface-2);
border: 1px solid var(--border-strong);
color: var(--text);
border-radius: 8px;
padding: 8px 14px;
cursor: pointer;
font: inherit;
font-size: 13px;
text-decoration: none;
transition: background 0.1s ease;
}
.mg-btn:hover {
background: var(--surface-3);
}
.mg-btn.warn {
border-color: rgba(245, 177, 76, 0.5);
color: var(--amber);
}
.mg-btn.danger {
border-color: rgba(255, 107, 107, 0.5);
color: var(--red);
}
.mg-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
gap: 14px;
}
.mg-card {
display: flex;
flex-direction: column;
gap: 10px;
padding: 12px;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 12px;
}
.mg-card-head {
display: flex;
align-items: center;
gap: 8px;
}
.mg-name {
flex: 1 1 auto;
min-width: 0;
color: #fff;
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Live preview thumbnail (scaled read-only xterm) */
.mg-thumb {
position: relative;
width: 100%;
min-height: 90px;
background: #0e0f13;
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
cursor: pointer;
}
.mg-thumb:hover {
border-color: var(--accent);
}
.mg-thumb-inner {
position: absolute;
top: 0;
left: 0;
transform-origin: top left;
padding: 4px;
}
.mg-watch {
font-size: 11px;
color: var(--text-faint);
background: var(--surface-3);
border-radius: 5px;
padding: 1px 6px;
}
.mg-watch.live {
color: var(--green);
background: rgba(70, 208, 127, 0.14);
}
.mg-status {
font-size: 11px;
color: var(--text-dim);
}
.mg-status.mg-waiting {
color: var(--amber);
font-weight: 600;
}
.mg-status.mg-working {
color: var(--accent);
}
.mg-meta {
color: var(--text-faint);
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: Menlo, Consolas, monospace;
}
.mg-actions {
display: flex;
gap: 6px;
}
.mg-actions .mg-open {
flex: 1 1 auto;
text-align: center;
}
.mg-open {
background: var(--accent);
color: var(--on-accent);
border-radius: 8px;
padding: 7px 13px;
text-decoration: none;
font-size: 13px;
}
.mg-open:hover {
background: var(--accent-2);
}
.mg-kill {
background: transparent;
border: 1px solid rgba(255, 107, 107, 0.4);
color: var(--red);
border-radius: 8px;
padding: 7px 13px;
cursor: pointer;
font: inherit;
font-size: 13px;
}
.mg-kill:hover {
background: rgba(255, 107, 107, 0.14);
}
.mg-empty {
color: var(--text-dim);
padding: 30px 0;
text-align: center;
}
/* ── v0.6 Projects panel ─────────────────────────────────────────────────── */
/* Panel wrapper (same host as .launcher; toggled via display) */
.proj-panel {
position: absolute;
inset: 68px 0 0 0; /* top offset reserves space for .home-seg (track pill + margins) */
overflow-y: auto;
padding: 22px 18px 40px;
box-sizing: border-box;
background: var(--bg);
}
/* Search box */
.proj-search-wrap {
margin-bottom: 16px;
}
.proj-search {
width: 100%;
max-width: 320px;
padding: 8px 12px;
font: inherit;
font-size: 14px;
color: var(--text);
background: var(--surface-2);
border: 1px solid var(--border-strong);
border-radius: 8px;
outline: none;
box-sizing: border-box;
}
.proj-search:focus {
border-color: var(--accent);
box-shadow: 0 0 0 2px var(--accent-soft);
}
/* Grid — mirrors .mg-grid layout */
.proj-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 14px;
}
/* Project card */
.proj-card {
display: flex;
flex-direction: column;
gap: 8px;
padding: 14px;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 12px;
transition: border-color 0.12s ease;
}
.proj-card:hover {
border-color: var(--border-strong);
}
/* Card header row */
.proj-card-head {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
/* Repo name */
.proj-name {
flex: 1 1 auto;
color: #fff;
font-weight: 600;
font-size: 14px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Branch chip */
.proj-branch {
font-size: 11px;
color: var(--accent);
background: var(--accent-soft);
border-radius: 5px;
padding: 2px 7px;
white-space: nowrap;
flex: none;
}
/* Dirty indicator (● dot) */
.proj-dirty {
font-size: 10px;
color: var(--amber);
flex: none;
}
/* Meta line (last-active time) */
.proj-meta {
font-size: 11px;
color: var(--text-faint);
font-family: Menlo, Consolas, monospace;
}
/* Favourite star toggle */
.proj-fav {
background: none;
border: none;
color: var(--text-faint);
cursor: pointer;
font-size: 15px;
padding: 0 2px;
line-height: 1;
flex: none;
transition: color 0.12s ease;
}
.proj-fav:hover {
color: var(--accent);
}
.proj-fav.on {
color: var(--accent);
}
/* Sessions list (1:N) */
.proj-sessions-list {
display: flex;
flex-direction: column;
gap: 4px;
}
/* One running-session row */
.proj-session-row {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 10px;
border-radius: 8px;
background: var(--surface-3);
cursor: pointer;
font-size: 13px;
color: var(--text);
transition: background 0.1s ease;
}
.proj-session-row:hover {
background: rgba(255, 255, 255, 0.08);
}
/* Status dot on a session row — colours from THEME.md v0.6 note */
.proj-session-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex: none;
background: var(--text-faint);
}
.proj-dot-working {
background: var(--accent);
box-shadow: 0 0 5px var(--accent-soft);
}
.proj-dot-waiting {
background: var(--amber);
}
.proj-dot-idle {
background: #8b8a86;
}
.proj-dot-unknown {
background: var(--text-faint);
}
/* Session title */
.proj-session-title {
flex: 1 1 auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Client-count badge (👁 N) */
.proj-session-badge {
font-size: 11px;
color: var(--text-dim);
background: var(--surface-2);
border-radius: 4px;
padding: 1px 5px;
flex: none;
}
/* " New" / " start claude here" action button */
.proj-new {
background: var(--surface-3);
border: 1px solid var(--border);
color: var(--text-dim);
border-radius: 8px;
padding: 7px 12px;
cursor: pointer;
font: inherit;
font-size: 13px;
text-align: center;
transition: background 0.1s ease, color 0.1s ease, border-color 0.1s ease;
}
.proj-new:hover {
background: var(--accent-soft);
color: var(--accent);
border-color: rgba(227, 166, 74, 0.3);
}
/* Primary action — no sessions yet; full Amber accent button */
.proj-new.proj-new-primary {
background: var(--accent);
color: var(--on-accent);
border-color: var(--accent);
font-weight: 600;
}
.proj-new.proj-new-primary:hover {
background: var(--accent-2);
border-color: var(--accent-2);
color: var(--on-accent);
}
/* Empty state */
.proj-empty {
color: var(--text-dim);
padding: 30px 0;
text-align: center;
}
/* ── Home segmented control (P6 builds the DOM; styles defined here per spec) */
/* Horizontal pill container, centered above the home grid */
/* Segmented control: a single rounded "track" holding two pill buttons, with
* the active one filled (iOS-style). Centred with fit-content + margin auto. */
.home-seg {
width: fit-content;
margin: 14px auto 18px;
display: flex;
gap: 3px;
padding: 3px;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 999px;
}
/* Inactive segment */
.home-seg-btn {
background: transparent;
border: none;
color: var(--text-dim);
cursor: pointer;
font: inherit;
font-size: 13px;
font-weight: 500;
padding: 6px 22px;
border-radius: 999px;
transition: background 0.12s ease, color 0.12s ease;
}
.home-seg-btn:not(.active):hover {
color: var(--text);
background: var(--surface-3);
}
/* Active segment — Amber accent; text uses --on-accent for contrast */
.home-seg-btn.active {
background: var(--accent);
color: var(--on-accent);
font-weight: 600;
}
.home-seg-btn.active:hover {
background: var(--accent-2);
}
/* On the home chooser (Sessions/Projects), there is no active terminal, so the
* bottom key-bar is just noise — hide it. Toggled by TabApp.updateHomeView(). */
body.home-open #keybar {
display: none;
}