canonrs-server 0.1.0

CanonRS server-side rendering support
/* ═══════════════════════════════════════════════════════════════
   TREE — Family B Selection tokens compliant
   ═══════════════════════════════════════════════════════════════ */

[data-rs-tree] {
  display: flex;
  flex-direction: column;
  gap: var(--tree-gap);
  min-width: var(--layout-width-xs);
}

[data-rs-tree-item] {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  min-height: var(--tree-item-height);
  padding: var(--tree-item-padding-y) var(--tree-item-padding-x);
  border-radius: var(--tree-item-radius);
  color: var(--tree-item-fg);
  font-size: var(--tree-item-font-size);
  font-weight: var(--tree-item-font-weight-leaf);
  cursor: pointer;
  user-select: none;
  transition:
    background var(--tree-transition-duration) var(--tree-transition-ease),
    color var(--tree-transition-duration) var(--tree-transition-ease);
}

[data-rs-tree-item][data-rs-depth="0"] {
  padding-left: var(--tree-item-padding-x);
  font-weight: var(--tree-item-font-weight-parent);
  color: var(--tree-item-fg);
}

[data-rs-tree-item][data-rs-depth="1"] {
  padding-left: var(--tree-indent-depth-1);
  font-weight: var(--tree-item-font-weight-leaf);
  color: var(--tree-item-fg-muted);
}

[data-rs-tree-item][data-rs-depth="2"] {
  padding-left: var(--tree-indent-depth-2);
  color: var(--tree-item-fg-muted);
}

[data-rs-tree-item][data-rs-depth="3"] {
  padding-left: calc(var(--tree-indent-depth-2) + var(--tree-indent));
  color: var(--tree-item-fg-muted);
}

[data-rs-tree-item]:hover:not([data-rs-state~="disabled"]) {
  background: var(--tree-item-hover-bg);
  color: var(--tree-item-fg);
}

[data-rs-tree-item]:focus-visible {
  outline: var(--focus-ring-width) solid var(--theme-action-focus-ring);
  outline-offset: -2px;
}

[data-rs-tree-item][data-rs-state~="selected"],
[data-rs-tree-item][data-rs-state~="active"] {
  background: var(--tree-item-active-bg);
  color: var(--tree-item-fg);
  font-weight: var(--tree-item-font-weight-parent);
}

[data-rs-tree-item][data-rs-state~="active"]::before {
  content: "";
  position: absolute;
  left: 0;
  top: var(--space-xs);
  bottom: var(--space-xs);
  width: var(--border-medium);
  background: var(--tree-item-active-indicator);
  border-radius: var(--radius-full);
}

[data-rs-tree-item][data-rs-state~="disabled"] {
  opacity: var(--opacity-disabled);
  cursor: not-allowed;
  pointer-events: none;
}

[data-rs-tree-toggle] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--space-xl);
  height: var(--space-xl);
  flex-shrink: 0;
  background: transparent;
  border: none;
  color: var(--tree-item-fg-muted);
  cursor: pointer;
  opacity: var(--opacity-disabled);
  transition:
    transform var(--tree-transition-duration) var(--tree-transition-ease),
    opacity var(--tree-transition-duration) var(--tree-transition-ease);
  padding: 0;
}

[data-rs-tree-item]:hover:not([data-rs-state~="disabled"]) [data-rs-tree-toggle] {
  opacity: 1;
}

[data-rs-tree-item][data-rs-state~="expanded"] [data-rs-tree-toggle] {
  transform: rotate(var(--tree-icon-rotation));
  opacity: var(--opacity-hover);
}

[data-rs-tree-item][data-rs-state~="collapsed"] [data-rs-tree-toggle] {
  transform: rotate(0deg);
}

[data-rs-tree-indent] {
  display: inline-flex;
  width: var(--space-xl);
  height: var(--space-xl);
  flex-shrink: 0;
}

[data-rs-tree-icon] {
  width: var(--tree-icon-size);
  height: var(--tree-icon-size);
  flex-shrink: 0;
  opacity: var(--opacity-disabled);
  transition: opacity var(--tree-transition-duration) var(--tree-transition-ease);
}

[data-rs-tree-item]:hover:not([data-rs-state~="disabled"]) [data-rs-tree-icon],
[data-rs-tree-item][data-rs-state~="active"] [data-rs-tree-icon] {
  opacity: 1;
}

[data-rs-tree-label] {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

[data-rs-tree-group] {
  display: flex;
  flex-direction: column;
  gap: var(--tree-gap);
  position: relative;
}

[data-rs-tree-group]::before {
  content: "";
  position: absolute;
  left: var(--tree-indent-depth-1);
  top: 0;
  bottom: 0;
  width: var(--border-thin);
  background: var(--tree-guide-color);
  pointer-events: none;
}

[data-rs-tree-item][data-rs-state~="collapsed"] + [data-rs-tree-group],
[data-rs-tree-item]:not([data-rs-state~="expanded"]):not([data-rs-state~="collapsed"]) + [data-rs-tree-group] {
  display: none;
}

[data-rs-tree-item][data-rs-state~="expanded"] + [data-rs-tree-group] {
  display: flex;
}