

/* Sidebar layout and category navigation items. Extracted from style.css. */

/* Sidebar — full column height so its glass background paints the
   entire side of the viewport even when the items don't fill it.
   Internal scroll keeps the list usable without the page scrolling. */
.sidebar {
  width: 220px;
  height: 100%;
  display: flex;
  flex-direction: column;
  background: var(--sidebar-bg);
  color: var(--sidebar-text);
  border-right: 1px solid var(--sidebar-border);
  position: relative;
  z-index: 100;
  transition: transform 0.3s ease;
  backdrop-filter: blur(12px) saturate(140%);
  -webkit-backdrop-filter: blur(12px) saturate(140%);
  overflow-y: auto;
}

/* Tasks sidebar only: the first sidebar-category sits flush against the top
   without any top padding. Apps and config sidebars don't need this — their
   first items already have spacing baked in. */
.tasks-layout .sidebar {
  padding-top: 20px;
}

/* Apps sidebar search bar — glass input pinned to the top of the
   sidebar above the category list. Toggles the clear (×) button
   visibility via .has-value. */
.apps-search {
  position: relative;
  padding: 14px 20px;
  border-bottom: 1px solid var(--sidebar-border);
}

.apps-search-icon {
  position: absolute;
  left: 32px;
  top: 50%;
  transform: translateY(-50%);
  color: rgba(var(--text-rgb), 0.55);
  pointer-events: none;
}

.apps-search-input {
  width: 100%;
  padding: 9px 34px 9px 36px;
  background: rgba(var(--text-rgb), 0.06);
  border: 1px solid rgba(var(--text-rgb), 0.12);
  border-radius: 8px;
  color: var(--text-primary);
  font-size: 13px;
  font-family: inherit;
  transition: background 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}

.apps-search-input::placeholder {
  color: rgba(var(--text-rgb), 0.5);
}

.apps-search-input:focus {
  outline: none;
  background: rgba(var(--text-rgb), 0.10);
  border-color: rgba(var(--accent-rgb), 0.55);
  box-shadow: 0 0 0 3px rgba(var(--accent-rgb), 0.16);
}

/* Strip the native search-cancel (we render our own × button). */
.apps-search-input::-webkit-search-cancel-button {
  -webkit-appearance: none;
  appearance: none;
}

.apps-search-clear {
  position: absolute;
  right: 28px;
  top: 50%;
  transform: translateY(-50%);
  width: 22px;
  height: 22px;
  border: none;
  background: rgba(var(--text-rgb), 0.10);
  color: rgba(var(--text-rgb), 0.7);
  border-radius: 50%;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  display: none;
  align-items: center;
  justify-content: center;
  transition: background 0.18s ease, color 0.18s ease;
}

.apps-search-clear:hover {
  background: rgba(var(--status-danger-rgb), 0.20);
  color: var(--status-danger);
}

.apps-search.has-value .apps-search-clear {
  display: flex;
}

.sidebar h2 {
  padding: 20px;
  text-align: center;
  font-size: 20px;
  font-weight: 600;
  border-bottom: 1px solid var(--sidebar-border);
}

.category {
  padding: 15px 20px;
  cursor: pointer;
  color: var(--text-secondary);
  border-bottom: 1px solid var(--sidebar-border);
  display: flex;
  align-items: center;
  gap: 10px;
  transition: background 0.2s, color 0.2s;
}

.category:hover,
.category.active {
  background: var(--surface-hover);
  color: var(--text-primary);
}

.category img,
.category .category-icon {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
}

/* Mobile: take the sidebar out of flex flow entirely so the main
   content fills the full viewport. The drawer carries its contents
   when the burger is open. Lives here (and not in style.css) because
   sidebar.css loads after style.css — without this co-location the
   base .sidebar { position: relative } below wins the cascade and the
   sidebar keeps its 220px column at mobile widths. */
@media (max-width: 768px) {
  .sidebar {
    position: fixed;
    top: 60px;
    left: 0;
    height: calc(100vh - 60px);
    transform: translateX(-100%);
    border-right: none;
    z-index: 100;
  }
}
