/* ==========================================================================
   Sidebar
   ========================================================================== */

#sidebar-column {
  width: 240px;
  min-width: 192px;
  max-width: 320px;
  background: var(--sidebar-bg);
  transition: width 0.2s ease;
  padding-bottom: 58px;
}

#sidebar {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

/* Sidebar items aren't meant to be text-selected — the sidebar is for
   navigation and drag-reorder. Disabling selection avoids accidental
   highlights during clicks and drags. Inputs and contenteditables
   inside the sidebar re-enable selection so users can still edit. */
#sidebar-column {
  -webkit-user-select: none;
  user-select: none;
}
#sidebar-column input,
#sidebar-column textarea,
#sidebar-column [contenteditable="true"] {
  -webkit-user-select: text;
  user-select: text;
}

#layout.sidebar-collapsed #sidebar-column {
  width: 0 !important;
  min-width: 0 !important;
  overflow: hidden;
}

/* --- Sidebar Header (removed — now in icon-strip + title-bar) --- */
#sidebar-header {
  display: none;
}

#sidebar-nav {
  display: flex;
  flex-direction: column;
  padding: 8px 8px 4px;
  flex-shrink: 0;
}

/* --- Project List --- */
#project-list-section {
  padding: 0 4px;
  margin-bottom: 4px;
  border-bottom: 1px solid var(--border-subtle);
}

#project-list-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 8px 6px;
}

.project-list-title {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dimmer);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

#project-list-add {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border: none;
  background: transparent;
  color: var(--text-dimmer);
  cursor: pointer;
  border-radius: 6px;
  transition: background 0.15s, color 0.15s;
}

#project-list-add:hover {
  background: var(--sidebar-hover);
  color: var(--text);
}

#project-list-add .lucide {
  width: 14px;
  height: 14px;
}

#project-list {
  padding: 0 0 6px;
  overflow-y: auto;
  max-height: 200px;
}

.project-list-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 8px 7px 10px;
  cursor: pointer;
  font-size: 13px;
  color: var(--text-muted);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
  border-left: 3px solid transparent;
  border-radius: 0 6px 6px 0;
}

.project-list-item:hover {
  background: rgba(var(--overlay-rgb), 0.05);
  color: var(--text-secondary);
}

.project-list-item.current {
  background: var(--accent-8);
  border-left-color: var(--accent);
  color: var(--text);
}

.project-list-item.current .pd-name {
  font-weight: 600;
}

.pd-name {
  flex: 1;
  font-size: 13px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.pd-count {
  font-size: 12px;
  color: var(--text-dimmer);
  flex-shrink: 0;
  font-variant-numeric: tabular-nums;
}

.pd-indicator {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex-shrink: 0;
}

.pd-indicator.active {
  background: var(--accent);
}

.pd-indicator.inactive {
  background: var(--text-dimmer);
  opacity: 0.4;
}

.pd-remove {
  display: none;
  background: none;
  border: none;
  color: var(--text-muted);
  cursor: pointer;
  padding: 2px;
  border-radius: 4px;
  flex-shrink: 0;
  line-height: 0;
  transition: color 0.15s, background 0.15s;
}

.pd-remove .lucide { width: 14px; height: 14px; }
.project-list-item:hover .pd-remove { display: block; }
.pd-remove:hover { color: var(--error); background: rgba(var(--overlay-rgb), 0.06); }

/* --- Project Hint (single-project onboarding) --- */
#project-hint {
  padding: 8px 10px;
  margin: 0 4px 4px;
  display: flex;
  align-items: flex-start;
  gap: 6px;
  border-radius: 8px;
  background: var(--accent-12);
  border: 1px solid var(--accent-20);
}

#project-hint.hidden {
  display: none;
}

.project-hint-text {
  font-size: 11px;
  color: var(--accent);
  line-height: 1.5;
}

.project-hint-text code {
  background: var(--accent-15);
  padding: 1px 5px;
  border-radius: 3px;
  font-family: "Roboto Mono", monospace;
  font-size: 10.5px;
  color: var(--accent-hover);
}

#project-hint-dismiss {
  background: none;
  border: none;
  color: var(--accent);
  cursor: pointer;
  padding: 1px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  opacity: 0.6;
  transition: opacity 0.15s;
}

#project-hint-dismiss:hover {
  opacity: 1;
}

#project-hint-dismiss .lucide {
  width: 12px;
  height: 12px;
}

/* Sidebar collapse button in title bar */
.sidebar-collapse-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  background: none;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  color: var(--text-muted);
  transition: background 0.15s, color 0.15s;
}

.sidebar-collapse-btn:hover {
  background: rgba(var(--overlay-rgb), 0.08);
  color: var(--text);
}

.sidebar-collapse-btn .lucide {
  width: 16px;
  height: 16px;
}

/* --- Sidebar section headers --- */
.sidebar-section-header {
  padding: 8px 12px 4px;
}

.sidebar-section-title {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dimmer);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

/* --- Section labels --- */
.sidebar-section-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dimmer);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding: 4px 12px 2px;
}

/* --- Tools section --- */
#sidebar-tools {
  flex-shrink: 0;
  padding-bottom: 6px;
}

/* Section header: "Tools" label on the left, a dim keyboard-hint next
   to it explaining the Cmd+O shortcut, and a small pencil icon edit
   button right-aligned. Three elements but each does just one thing,
   so nothing reads as pushy. */
.sidebar-tools-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 8px 2px 12px;
}
.sidebar-tools-header .sidebar-section-label {
  padding: 0;
}

/* Small shortcut-pill for the Cmd/Ctrl+O hotkey overlay. Mirrors the
   icon-strip hotkey hints so keyboard shortcuts look the same across
   the sidebar surface. */
.sidebar-tools-hint {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 28px;
  padding: 2px 4px;
  border: 1px solid var(--border-subtle);
  background: var(--bg-alt);
  color: var(--text-dimmer);
  font-size: 10px;
  font-weight: 600;
  font-family: inherit;
  border-radius: 6px;
  cursor: pointer;
  opacity: 0.7;
  transition: opacity 0.15s, color 0.15s, background 0.15s;
}
.sidebar-tools-hint:hover {
  opacity: 1;
  color: var(--text-muted);
  background: var(--bg);
}

/* Pencil-icon edit button, far-right of the header. Dim by default so
   it doesn't pull attention; on hover it brightens to signal that
   it's a real affordance. */
.tool-palette-edit-btn {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text-dimmer);
  opacity: 0.45;
  border-radius: 6px;
  transition: background 0.15s, color 0.15s, opacity 0.15s;
}
.tool-palette-edit-btn .lucide,
.tool-palette-edit-btn svg {
  width: 13px;
  height: 13px;
}
.tool-palette-edit-btn:hover {
  background: var(--sidebar-hover);
  color: var(--text-muted);
  opacity: 1;
}
.tool-palette-edit-btn.active {
  background: var(--accent);
  color: #fff;
  opacity: 1;
}
.tool-palette-edit-btn.active:hover {
  background: var(--accent);
  color: #fff;
  opacity: 1;
  filter: brightness(1.1);
}

/* Hidden-tools section appears only in edit mode when items are hidden. */
.tool-palette-hidden-section {
  padding: 4px 8px 8px;
  border-top: 1px dashed var(--border-subtle);
  margin-top: 4px;
}
.tool-palette-hidden-section.hidden {
  display: none;
}
.tool-palette-hidden-label {
  font-size: 10px;
  font-weight: 600;
  color: var(--text-dimmer);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding: 2px 4px 6px;
}
.tool-palette-hidden-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 4px;
}

/* --- Shared tile style (applies in both active and hidden grids) --- */
.palette-tile {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  min-height: 58px;
  padding: 6px 2px;
  border-radius: 10px;
  border: none;
  background: rgba(var(--overlay-rgb), 0.025);
  color: var(--text-muted);
  font-family: inherit;
  font-size: 10px;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.palette-tile .lucide { width: 16px; height: 16px; flex-shrink: 0; }
.palette-tile:hover {
  background: rgba(var(--overlay-rgb), 0.08);
  color: var(--text-secondary);
  box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.08);
}
.palette-tile.active {
  background: rgba(var(--overlay-rgb), 0.08);
  color: var(--text);
}
.palette-tile .tool-btn-label {
  font-size: 10px;
  font-weight: 500;
  line-height: 1.15;
  text-align: center;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  word-break: break-word;
}

/* --- Edit mode affordances (shared across session + mate palettes) --- */

/* × remove badge on each tile. Hidden in normal mode; shown in edit. */
.tool-palette-remove {
  position: absolute;
  top: -4px;
  right: -4px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--accent);
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  opacity: 0;
  transform: scale(0.6);
  pointer-events: none;
  transition: opacity 0.15s, transform 0.15s;
  z-index: 2;
  user-select: none;
}
.edit-mode .tool-palette-remove {
  opacity: 1;
  transform: scale(1);
  pointer-events: auto;
}
.edit-mode .tool-palette-remove:hover {
  filter: brightness(1.15);
}

/* Drag-reorder feedback. Tiles are draggable at all times (macOS dock
   pattern) so users can rearrange without entering a separate mode.
   -webkit-user-drag is explicit for Safari, which otherwise sometimes
   ignores draggable when user-select is none on an ancestor. Edit mode
   adds the outline so the tiles read as mutable during an edit. */
#session-actions [data-tool-id],
#mate-sidebar-tools [data-tool-id] {
  -webkit-user-drag: element;
}
.edit-mode [data-tool-id] {
  box-shadow: inset 0 0 0 1px var(--border-subtle);
  animation: tile-wiggle 0.22s ease-in-out infinite;
  transform-origin: 50% 50%;
}
/* Desync the wiggle across tiles so they don't swing in lockstep. */
.edit-mode [data-tool-id]:nth-child(2n) {
  animation-delay: -0.11s;
}
.edit-mode [data-tool-id]:nth-child(3n) {
  animation-duration: 0.26s;
}
@keyframes tile-wiggle {
  0%   { transform: rotate(-1.2deg); }
  50%  { transform: rotate(1.2deg);  }
  100% { transform: rotate(-1.2deg); }
}
/* The dragged tile shouldn't wiggle while under the cursor. */
[data-tool-id].dragging {
  opacity: 0.4;
  cursor: grabbing;
  animation: none;
}
/* Children shouldn't swallow drag events — the browser starts drag on
   the element under the pointer, and we want that to always be the
   draggable button, not the inner icon/label/badge. The × affordance
   stays interactive (it needs clicks in edit mode). */
[data-tool-id] > i,
[data-tool-id] > svg,
[data-tool-id] > .tool-btn-label,
[data-tool-id] > .sidebar-badge {
  pointer-events: none;
}

/* Hidden-section tiles are dimmed to signal "not active" and get a small
   + glyph on hover to suggest they can be restored. */
.tool-palette-hidden-grid [data-tool-id] {
  opacity: 0.55;
  cursor: pointer;
  transition: opacity 0.15s, background 0.15s, color 0.15s;
}
.tool-palette-hidden-grid [data-tool-id]:hover {
  opacity: 1;
}
.tool-palette-hidden-grid .tool-palette-remove {
  display: none;
}
.tool-palette-hidden-grid .sidebar-badge {
  display: none;
}

/* Hotkey badge shown on each active palette tile while Cmd/Ctrl+O pick
   mode is active. Top-left so it doesn't collide with the × (top-right)
   or count badges. High-contrast accent so the keystroke is obvious. */
.tool-palette-hotkey-badge {
  position: absolute;
  top: -4px;
  left: -4px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 4px;
  background: var(--accent);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  line-height: 16px;
  text-align: center;
  pointer-events: none;
  z-index: 3;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
  animation: tool-palette-hotkey-in 0.12s ease-out;
}
@keyframes tool-palette-hotkey-in {
  from { opacity: 0; transform: scale(0.7); }
  to   { opacity: 1; transform: scale(1); }
}

/* Right-click context menu on palette tiles. Mirrors .session-ctx-menu. */
.tool-palette-ctx-menu {
  position: fixed;
  background: var(--sidebar-bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 4px 0;
  min-width: 180px;
  box-shadow: 0 4px 16px rgba(var(--shadow-rgb), 0.4);
  z-index: 9999;
  font-family: inherit;
}
.tool-palette-ctx-item {
  display: flex;
  align-items: center;
  width: 100%;
  padding: 8px 12px;
  font-size: 13px;
  color: var(--text-secondary);
  background: none;
  border: none;
  font-family: inherit;
  cursor: pointer;
  text-align: left;
  transition: background 0.15s;
}
.tool-palette-ctx-item:hover {
  background: rgba(var(--overlay-rgb), 0.05);
}
/* --- Sessions header (pinned above scroll) --- */
#sidebar-sessions-header {
  flex-shrink: 0;
}

.sidebar-sessions-header-row {
  display: flex;
  align-items: center;
  padding: 4px 8px 2px 12px;
  gap: 8px;
}

/* --- Session search --- */
.sidebar-sessions-search-inline {
  position: relative;
  margin-left: auto;
  width: 150px;
}

.sidebar-sessions-search-inline.hidden {
  display: none;
}

.sidebar-sessions-header-row .sidebar-section-label {
  padding: 0;
}

.session-filter-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 6px;
  border-radius: 999px;
  background: rgba(var(--overlay-rgb), 0.08);
  color: var(--text-dimmer);
  font-size: 10px;
  font-weight: 600;
  line-height: 1;
}

.session-filter-count.hidden {
  display: none;
}

.sidebar-sessions-header-row > #session-header-search-btn {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border: none;
  border-radius: 6px;
  background: transparent;
  color: var(--text-dimmer);
  cursor: pointer;
  padding: 0;
  opacity: 0.45;
  transition: color 0.15s, background 0.15s, opacity 0.15s;
}

.sidebar-sessions-header-row > #session-header-search-btn.active,
.sidebar-sessions-header-row > #session-header-search-btn:hover {
  color: var(--text);
  background: var(--sidebar-hover);
  opacity: 1;
}

.sidebar-sessions-header-row > #session-header-search-btn .lucide,
.sidebar-sessions-header-row > #session-header-search-btn svg {
  width: 14px;
  height: 14px;
}

.sidebar-sessions-search-inline:not(.hidden) + #session-header-search-btn {
  margin-left: 0;
}

.sidebar-sessions-search-inline input {
  width: 100%;
  padding: 6px 28px 6px 10px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--input-bg);
  color: var(--text);
  font-size: 12px;
  font-family: inherit;
  outline: none;
  transition: border-color 0.15s;
  box-sizing: border-box;
}

.sidebar-sessions-search-inline input:focus {
  border-color: var(--accent);
}

.sidebar-sessions-search-inline input::placeholder {
  color: var(--text-dimmer);
}

.sidebar-sessions-search-inline button {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border: none;
  background: transparent;
  color: var(--text-dimmer);
  cursor: pointer;
  padding: 0;
  border-radius: 4px;
  transition: color 0.15s, background 0.15s;
}

.sidebar-sessions-search-inline button.hidden {
  display: none;
}

.sidebar-sessions-search-inline button .lucide { width: 14px; height: 14px; }
.sidebar-sessions-search-inline button:hover { color: var(--text); background: var(--sidebar-hover); }

.session-item.search-match {
  background: var(--accent-12);
  color: var(--text);
}

.session-item.search-match .session-item-text {
  color: var(--accent);
}

.session-highlight {
  background: var(--accent-30);
  color: var(--text);
  border-radius: 2px;
  padding: 0 1px;
}

#session-list {
  padding: 0 8px 2px;
}

.session-group-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 12px 8px 4px;
  padding: 0;
  min-height: 22px;
  font-size: 10px;
  font-weight: 600;
  color: var(--text-dimmer);
  letter-spacing: 0.2px;
}

.session-group-header-label {
  min-width: 0;
  color: var(--text-dimmer);
}

.session-group-clear-btn {
  border: none;
  background: rgba(var(--overlay-rgb), 0.04);
  color: var(--text-dimmer);
  font-family: inherit;
  font-size: 10px;
  font-weight: 600;
  cursor: pointer;
  padding: 0 8px;
  height: 20px;
  border-radius: 999px;
  letter-spacing: 0.2px;
  opacity: 0.82;
  transition: color 0.15s ease, background 0.15s ease;
}

.session-group-clear-btn:hover {
  color: var(--text);
  background: rgba(var(--overlay-rgb), 0.08);
}

/* --- Schedule countdown items --- */
.session-countdown-group {
  padding: 4px 0 8px;
  border-bottom: 1px solid var(--border-subtle, var(--border));
  margin-bottom: 4px;
}

.session-countdown-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  border-radius: 10px;
  font-size: 13px;
  color: var(--text-muted);
  cursor: default;
  pointer-events: none;
  border-left: 3px solid var(--accent);
  margin: 2px 8px;
  background: color-mix(in srgb, var(--accent) 6%, transparent);
  animation: countdown-pulse 2s ease-in-out infinite;
}

.session-countdown-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
  font-weight: 500;
}

.session-countdown-badge {
  font-size: 12px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
  flex-shrink: 0;
}

@keyframes countdown-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.7; }
}

.session-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 0 12px;
  height: 34px;
  border-radius: 10px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-muted);
  margin-bottom: 0;
  transition: background 0.35s ease, color 0.35s ease;
  contain: size layout;
}

.session-item-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

.session-item:hover {
  background: var(--sidebar-hover);
  color: var(--text-secondary);
}

.session-item.active {
  background: var(--sidebar-active);
  color: var(--text);
  font-weight: 600;
}

.session-item.drag-over-above::before,
.session-item.drag-over-below::after {
  content: "";
  position: absolute;
  left: 10px;
  right: 10px;
  height: 2px;
  border-radius: 999px;
  background: var(--accent);
  pointer-events: none;
}

.session-item.drag-over-above::before {
  top: -1px;
}

.session-item.drag-over-below::after {
  bottom: -1px;
}

.session-item .session-processing,
.mate-session-item .session-processing {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--success);
  margin-right: 8px;
  vertical-align: middle;
}

/* IO blink on session processing dot */
.session-item .session-processing.io,
.mate-session-item .session-processing.io {
  background: #fff !important;
  box-shadow: 0 0 4px var(--success);
}

/* Session unread badge */
.session-unread-badge {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  min-width: 18px;
  height: 18px;
  border-radius: 9px;
  background: #e74c3c;
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 0 5px;
  line-height: 18px;
  text-align: center;
  z-index: 2;
}

.session-item .session-item-text {
  padding-right: 28px;
}

.session-item:has(.session-presence) .session-item-text {
  padding-right: 54px;
}

.session-close-btn {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border: none;
  border-radius: 999px;
  background: transparent;
  color: var(--text-dimmer);
  cursor: pointer;
  padding: 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease, color 0.15s ease, background 0.15s ease;
}

.session-close-btn .lucide,
.session-close-btn svg {
  width: 12px;
  height: 12px;
  display: block;
}

.session-item:hover .session-close-btn,
.session-loop-child:hover .session-close-btn,
.session-item:focus-within .session-close-btn,
.session-loop-child:focus-within .session-close-btn {
  opacity: 0.82;
  pointer-events: auto;
}

.session-close-btn:hover {
  opacity: 1;
  color: var(--text);
  background: rgba(var(--overlay-rgb), 0.08);
}

.session-close-btn.armed {
  opacity: 1;
  pointer-events: auto;
  width: 20px;
  height: 20px;
  color: #fff;
  background: rgba(220, 38, 38, 0.92);
  box-shadow: 0 2px 8px rgba(var(--shadow-rgb), 0.18);
}

.session-close-btn.armed:hover {
  color: #fff;
  background: rgba(220, 38, 38, 1);
}

.session-close-btn.armed .lucide,
.session-close-btn.armed svg {
  width: 13px;
  height: 13px;
}

.session-item:hover .session-unread-badge,
.session-item:focus-within .session-unread-badge {
  opacity: 0;
  pointer-events: none;
}

.session-top-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 2px;
  padding: 0 0 2px;
}

.session-top-action {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 34px;
  padding: 0 12px;
  border: none;
  border-radius: 10px;
  background: transparent;
  color: var(--text-muted);
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  text-align: left;
  min-width: 0;
  opacity: 0.62;
  transition: background 0.15s, color 0.15s, opacity 0.15s;
}

.session-top-action .lucide,
.session-top-action svg {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}

.session-top-action-icon {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  border-radius: 4px;
  object-fit: cover;
}

.session-top-action:hover {
  background: var(--sidebar-hover);
  color: var(--text);
  opacity: 1;
}

/* Split button: main action + chevron sharing one grid cell. */
.session-top-action-split {
  display: flex;
  align-items: stretch;
  gap: 2px;
  min-width: 0;
}

.session-top-action-split .split-main {
  flex: 1 1 auto;
  width: auto;
}

.session-top-action-split .split-chevron {
  flex: 0 0 auto;
  width: 28px;
  min-width: 28px;
  padding: 0;
  justify-content: center;
  gap: 0;
}

.session-favorites-section {
  min-height: 6px;
  margin: 0 8px;
  border-radius: 12px;
  transition: background 0.15s ease, box-shadow 0.15s ease;
}

.session-favorites-empty {
  margin: 2px 0 0;
  padding: 6px 2px 2px;
  border: none;
  border-radius: 0;
  background: transparent;
  font-size: 11px;
  line-height: 1.4;
  color: color-mix(in srgb, var(--text-dimmer) 88%, transparent);
  text-align: center;
  text-shadow: 0 0 10px rgba(var(--shadow-rgb), 0.08);
}

.session-list-sticky-top {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--sidebar-bg);
}

.session-favorites-divider {
  position: relative;
  margin: 0 12px 2px;
  height: 18px;
  border-radius: 999px;
}

.session-favorites-divider::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 1px;
  background: var(--border-subtle, var(--border));
  transform: translateY(-50%);
}

.session-favorites-section.drag-hover,
.session-regular-drop.drag-hover {
  background: color-mix(in srgb, var(--accent) 10%, transparent);
}

.session-favorites-section.drag-hover {
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 45%, transparent);
}

.session-favorites-section.drag-hover .session-favorites-empty {
  background: transparent;
  color: var(--text);
}

.session-favorites-divider.drag-hover::before {
  background: var(--accent);
  height: 2px;
}

.session-regular-drop {
  min-height: 12px;
  border-radius: 12px;
}

.session-item[draggable="true"] {
  -webkit-user-drag: element;
}

.session-item.dragging {
  opacity: 0.45;
}

.session-unread-badge.has-unread {
  display: flex;
  transition: opacity 0.15s ease;
}

.session-more-btn {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  width: 24px;
  height: 24px;
  border-radius: 6px;
  border: none;
  background: transparent;
  color: var(--text-muted);
  cursor: pointer;
  align-items: center;
  justify-content: center;
  padding: 0;
  opacity: 0;
  transition: opacity 0.35s ease, color 0.15s, background 0.15s;
}

.session-more-btn .lucide,
.session-more-btn svg { width: 14px; height: 14px; display: block; }
.session-item:hover .session-more-btn,
.session-loop-group:hover .session-more-btn { opacity: 1; }
.session-more-btn:hover { color: var(--text); background: rgba(var(--overlay-rgb), 0.06); }

/* --- Session presence avatars (multi-user) --- */
.session-presence {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  margin-right: 2px;
}

.session-item .session-presence {
  position: absolute;
  right: 30px;
  top: 50%;
  transform: translateY(-50%);
  margin-right: 0;
}

.session-presence-avatar {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--sidebar-bg);
  background: var(--bg-alt);
  object-fit: cover;
  transition: filter 0.15s;
}

.session-presence-avatar:hover {
  filter: brightness(1.3);
}

.session-presence-more {
  font-size: 9px;
  font-weight: 600;
  color: var(--text-dimmer);
  margin-left: 2px;
}

/* --- Session context menu --- */
.session-ctx-menu {
  position: fixed;
  background: var(--sidebar-bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 4px 0;
  min-width: 140px;
  box-shadow: 0 4px 16px rgba(var(--shadow-rgb), 0.4);
  z-index: 9999;
}

.session-ctx-item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 8px 12px;
  font-size: 13px;
  color: var(--text-secondary);
  background: none;
  border: none;
  font-family: inherit;
  cursor: pointer;
  transition: background 0.15s;
}

.session-ctx-item .lucide { width: 14px; height: 14px; flex-shrink: 0; }
.session-ctx-item:hover { background: rgba(var(--overlay-rgb), 0.05); }

.session-ctx-item.session-ctx-delete { color: var(--error); }
.session-ctx-item.session-ctx-delete:hover { background: var(--error-8); }

/* --- Session inline rename --- */
.session-rename-input {
  width: 100%;
  background: var(--input-bg);
  border: 1px solid var(--text-dimmer);
  border-radius: 6px;
  color: var(--text);
  font-size: 13px;
  font-family: inherit;
  padding: 2px 6px;
  outline: none;
}

/* --- Session loop groups --- */
.session-loop-wrapper {
  margin-bottom: 0;
}

.session-loop-group {
  position: relative;
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 36px 0 4px;
  height: 34px;
  border-radius: 10px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-muted);
  transition: background 0.35s ease, color 0.35s ease;
}

.session-loop-group:hover {
  background: var(--sidebar-hover);
  color: var(--text-secondary);
}

.session-loop-group.active {
  background: var(--sidebar-active);
  color: var(--text);
}
.session-loop-group.scheduled .session-processing {
  background: var(--success, #27ae60);
}

.session-loop-group .session-item-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 5px;
}

.session-loop-group .session-processing {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--success);
  flex-shrink: 0;
}

.session-loop-icon {
  display: inline-flex;
  color: var(--accent);
  flex-shrink: 0;
}
.session-loop-icon.scheduled { color: var(--success, #27ae60); }
.session-loop-icon .lucide { width: 13px; height: 13px; }

.session-loop-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

.session-loop-count {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 600;
  color: var(--text-dimmer);
  background: rgba(var(--overlay-rgb), 0.08);
  padding: 1px 6px;
  border-radius: 8px;
  margin-left: auto;
}
.session-loop-count.scheduled {
  color: var(--success, #27ae60);
  background: color-mix(in srgb, var(--success, #27ae60) 12%, transparent);
}

/* Chevron */
.session-loop-chevron {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border: none;
  background: transparent;
  color: var(--text-dimmer);
  cursor: pointer;
  padding: 0;
  border-radius: 4px;
  flex-shrink: 0;
  transition: color 0.15s, transform 0.2s ease;
}
.session-loop-chevron .lucide { width: 14px; height: 14px; }
.session-loop-chevron:hover { color: var(--text); }
.session-loop-group.expanded .session-loop-chevron { transform: rotate(90deg); }

/* Children container */
.session-loop-children {
  position: relative;
  margin-left: 15px;
  padding: 2px 0 2px 0;
  border-left: 1.5px solid var(--border-subtle);
}

.session-loop-child {
  position: relative;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 0 12px 0 14px;
  height: 28px;
  border-radius: 0 8px 8px 0;
  cursor: pointer;
  font-size: 12px;
  font-weight: 500;
  color: var(--text-muted);
  transition: background 0.2s ease, color 0.2s ease;
}

/* Small horizontal tick connecting to vertical line */
.session-loop-child::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 8px;
  height: 0;
  border-top: 1.5px solid var(--border-subtle);
}

.session-loop-child:hover {
  background: var(--sidebar-hover);
  color: var(--text-secondary);
}

.session-loop-child.active {
  background: var(--sidebar-active);
  color: var(--text);
}

.session-loop-child .session-item-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 4px;
  padding-right: 22px;
}

.session-loop-child .session-processing {
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--success);
  flex-shrink: 0;
}

.session-loop-role-badge {
  display: inline-flex;
  align-items: center;
  font-size: 10px;
  font-weight: 600;
  color: var(--text-dimmer);
  background: rgba(var(--overlay-rgb), 0.06);
  padding: 1px 8px;
  border-radius: 6px;
  letter-spacing: 0.2px;
}
.session-loop-role-badge.crafting {
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.session-loop-role-badge.scheduled {
  color: var(--success, #27ae60);
  background: color-mix(in srgb, var(--success, #27ae60) 10%, transparent);
}

.session-loop-badge {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 600;
  padding: 1px 6px;
  border-radius: 8px;
  margin-left: auto;
}
.session-loop-badge.crafting {
  color: var(--accent);
  background: var(--accent-12, rgba(108, 92, 231, 0.12));
}

/* --- Loop run sub-groups (interval runs within a date group) --- */
.session-loop-run-wrapper {
  position: relative;
}

.session-loop-run {
  position: relative;
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 12px 0 6px;
  height: 28px;
  border-radius: 0 8px 8px 0;
  cursor: pointer;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-muted);
  transition: background 0.2s ease, color 0.2s ease;
}

.session-loop-run::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 8px;
  height: 0;
  border-top: 1.5px solid var(--border-subtle);
}

.session-loop-run:hover {
  background: var(--sidebar-hover);
  color: var(--text-secondary);
}

.session-loop-run.active {
  background: var(--sidebar-active);
  color: var(--text);
}

.session-loop-run.expanded .session-loop-chevron {
  transform: rotate(90deg);
}

.session-loop-run .session-loop-chevron {
  width: 18px;
  height: 18px;
}

.session-loop-run .session-item-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 4px;
}

.session-loop-run .session-processing {
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--success);
  flex-shrink: 0;
}

.session-loop-run-time {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-dimmer);
}

.session-loop-run-wrapper .session-loop-children {
  margin-left: 12px;
}

@media (hover: none) {
  .session-more-btn { opacity: 1; }
  .msg-copy-hint { opacity: 1; }
  .msg-user[data-uuid] .bubble::after { display: none; }
  .mermaid-diagram::after { display: none; }
}

/* --- User Island (bottom bar spanning icon strip + sidebar) --- */
#user-island {
  position: absolute;
  bottom: 8px;
  left: 8px;
  width: calc(72px + 240px - 16px);
  height: 58px;
  display: flex;
  align-items: center;
  background: var(--bg);
  padding: 0 8px 0 0;
  gap: 0;
  z-index: 15;
  border-radius: 10px;
}

#user-island.dm-hidden {
  display: none;
}

#user-island::before {
  content: "";
  position: absolute;
  top: 100%;
  left: -8px;
  right: -8px;
  height: 8px;
  background: var(--sidebar-bg);
}

.user-island-profile {
  display: flex;
  align-items: center;
  flex: 1;
  min-width: 0;
  padding: 6px 6px 6px 10px;
  border-radius: 8px;
  cursor: pointer;
  transition: background 0.15s;
}

.user-island-profile:hover {
  background: var(--sidebar-hover);
}

.user-island-avatar {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.user-island-avatar img {
  width: 32px;
  height: 32px;
  border-radius: 50%;
}

.user-island-avatar-letter {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--success);
  color: #fff;
  font-family: "Pretendard", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 15px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.user-island-info {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  margin-left: 8px;
}

.user-island-name {
  font-family: "Pretendard", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: block;
}

.user-island-cta {
  font-size: 11px;
  color: var(--accent, #7c3aed);
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: block;
  line-height: 1.2;
}

.user-island-cta.hidden {
  display: none;
}

.user-island-cta:hover {
  text-decoration: underline;
}

.user-island-actions {
  display: flex;
  align-items: center;
  gap: 2px;
  flex-shrink: 0;
}

.user-island-actions button {
  width: 32px;
  height: 32px;
  border-radius: 6px;
  border: none;
  background: transparent;
  color: var(--text-muted);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s, color 0.15s;
}

.user-island-actions button#user-theme-toggle-btn {
  color: var(--text-secondary);
}

.user-island-actions button#user-theme-toggle-btn:hover {
  color: var(--text);
}

.user-island-actions button#user-theme-toggle-btn.theme-toggle-light {
  color: #7b8cff;
}

.user-island-actions button#user-theme-toggle-btn.theme-toggle-light:hover {
  color: #98a4ff;
}

.user-island-actions button#user-theme-toggle-btn.theme-toggle-dark {
  color: #f2b84d;
}

.user-island-actions button#user-theme-toggle-btn.theme-toggle-dark:hover {
  color: #ffca6b;
}

.user-island-actions button .lucide {
  width: 16px;
  height: 16px;
}

.user-island-actions button:hover {
  background: var(--sidebar-hover);
  color: var(--text-secondary);
}

/* Cursor sharing toggle */
.cursor-share-btn {
  position: relative;
}
.cursor-share-btn.on {
  color: var(--accent, #0ACF83);
}
.cursor-share-btn.off {
  color: var(--text-muted);
  opacity: 0.5;
}
.cursor-share-btn.off::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 22px;
  height: 2px;
  background: var(--danger, #F24822);
  transform: translate(-50%, -50%) rotate(-45deg);
  border-radius: 1px;
  pointer-events: none;
}
.cursor-share-btn.on:hover {
  color: var(--accent, #0ACF83);
}
.cursor-share-btn.off:hover {
  opacity: 0.7;
}

#layout.sidebar-collapsed #user-island .user-island-info,
#layout.sidebar-collapsed #user-island .user-island-actions {
  display: none;
}
/* Mate DM: user island collapses with sidebar like project mode */



.footer-version {
  font-size: 11px;
  color: var(--text-dimmer);
  font-weight: 400;
}


.sidebar-menu-item.has-badge { position: relative; }
.sidebar-menu-item .menu-badge {
  margin-left: auto;
  font-size: 11px;
  font-weight: 600;
  color: var(--success);
}

/* --- Sidebar overlay (mobile) --- */
#sidebar-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(var(--shadow-rgb), 0.6);
  z-index: 99;
}

#sidebar-overlay.visible { display: block; }

/* --- Sidebar expand (desktop collapsed) --- */
#sidebar-expand-btn {
  display: none;
  background: none;
  border: none;
  color: var(--text-secondary);
  cursor: pointer;
  padding: 4px;
  margin-right: 10px;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  transition: color 0.15s;
}

#sidebar-expand-btn .lucide {
  width: 20px;
  height: 20px;
}

#sidebar-expand-btn:hover {
  color: var(--text);
}

#layout.sidebar-collapsed #sidebar-expand-btn {
  display: flex;
}

/* --- Hamburger --- */
#hamburger-btn {
  display: none;
  background: none;
  border: none;
  color: var(--text-secondary);
  cursor: pointer;
  padding: 4px;
  margin-right: 10px;
  flex-shrink: 0;
}

#hamburger-btn .lucide {
  width: 20px;
  height: 20px;
}

/* --- Theme picker --- */
.theme-picker {
  position: fixed;
  background: var(--bg-alt);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 0;
  min-width: 220px;
  max-height: 70vh;
  overflow-y: auto;
  box-shadow: 0 8px 32px rgba(var(--shadow-rgb), 0.5);
  z-index: 200;
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity 0.15s, transform 0.15s;
}

.theme-picker.visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.theme-picker-header {
  padding: 8px 14px 4px;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dimmer);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  position: sticky;
  top: 0;
  background: var(--bg-alt);
  z-index: 1;
}

.theme-picker-section {
  padding-bottom: 4px;
}

.theme-picker-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 7px 14px;
  border: none;
  background: none;
  color: var(--text-secondary);
  font-family: inherit;
  font-size: 13px;
  cursor: pointer;
  transition: background 0.15s;
}

.theme-picker-item:hover {
  background: rgba(var(--overlay-rgb), 0.05);
}

.theme-picker-item.active {
  color: var(--text);
}

.theme-swatches {
  display: flex;
  gap: 3px;
  flex-shrink: 0;
}

.theme-swatch {
  width: 12px;
  height: 12px;
  border-radius: 3px;
  border: 1px solid rgba(var(--overlay-rgb), 0.1);
}

.theme-picker-label {
  flex: 1;
  text-align: left;
}

.theme-picker-check {
  font-size: 14px;
  color: var(--accent);
  opacity: 0;
  flex-shrink: 0;
}

.theme-picker-item.active .theme-picker-check {
  opacity: 1;
}

/* --- Sidebar resize handle (overlay, no layout space) --- */
#sidebar-resize-handle {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 8px;
  margin-left: -4px;
  cursor: col-resize;
  z-index: 10;
}

#sidebar-resize-handle::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 2px;
  margin-left: -1px;
  background: var(--accent);
  opacity: 0;
  transition: opacity 0.2s;
}

#sidebar-resize-handle:hover::before,
#sidebar-resize-handle.dragging::before {
  opacity: 1;
}

/* Hide resize handle when sidebar is collapsed */
#layout.sidebar-collapsed #sidebar-resize-handle {
  display: none;
}

/* Mate sidebar resize handle (same style) */
#mate-sidebar-resize-handle {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 8px;
  margin-left: -4px;
  cursor: col-resize;
  z-index: 10;
}
#mate-sidebar-resize-handle::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 2px;
  margin-left: -1px;
  background: var(--accent);
  opacity: 0;
  transition: opacity 0.2s;
}
#mate-sidebar-resize-handle:hover::before,
#mate-sidebar-resize-handle.dragging::before {
  opacity: 1;
}
#mate-sidebar-resize-handle.hidden {
  display: none;
}

@media (max-width: 768px) {
  #sidebar-resize-handle,
  #mate-sidebar-resize-handle {
    display: none;
  }

  #user-island {
    display: none;
  }

  /* Mobile: hide both sidebars completely */
  #sidebar-column,
  #mate-sidebar-column {
    display: none !important;
  }

  /* Mobile: hide icon strip */
  #icon-strip {
    display: none !important;
  }

  /* Mobile: hide sidebar overlay */
  #sidebar-overlay {
    display: none !important;
  }
}

/* --- Skeleton loading placeholders --- */
.skeleton-session-group {
  padding: 8px 12px;
}
.skeleton-session-label {
  width: 48px;
  height: 10px;
  border-radius: 4px;
  background: var(--text-muted, #888);
  margin-bottom: 10px;
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
}
.skeleton-session-item {
  width: 100%;
  height: 28px;
  border-radius: 8px;
  background: var(--text-muted, #888);
  margin-bottom: 6px;
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
}
@keyframes skeleton-shimmer {
  0% { opacity: 0.1; }
  50% { opacity: 0.18; }
  100% { opacity: 0.1; }
}
