canonrs-server 0.1.0

CanonRS server-side rendering support
/* ═══════════════════════════════════════════════════════════════
   MENU — Family B Selection tokens compliant
   State via data-rs-state — zero pseudo-class state selectors
   ═══════════════════════════════════════════════════════════════ */

[data-rs-menu] {
  background: var(--menu-bg);
  padding: var(--menu-padding);
  display: flex;
  flex-direction: column;
  gap: var(--menu-gap);
}

[data-rs-menu-item] {
  display: flex;
  align-items: center;
  width: 100%;
  height: var(--menu-item-height);
  padding: var(--menu-item-padding);
  border-radius: var(--menu-item-radius);
  color: var(--menu-item-fg);
  font-size: var(--menu-item-font-size);
  cursor: pointer;
  background: transparent;
  border: none;
  text-align: left;
  will-change: background;
  transition:
    background var(--menu-item-transition-duration) var(--menu-item-transition-ease),
    color var(--menu-item-transition-duration) var(--menu-item-transition-ease);
}

[data-rs-menu-item][data-rs-state~="hover"] {
  background: var(--menu-item-hover-bg);
}

[data-rs-menu-item][data-rs-state~="active"] {
  background: var(--menu-item-hover-bg);
}

[data-rs-menu-item][data-rs-state~="selected"] {
  background: var(--menu-item-active-bg);
  color: var(--menu-item-active-fg);
}

[data-rs-menu-item]:focus-visible { outline: none; }
[data-rs-menu-item][data-rs-state~='focused']:focus-visible { outline: var(--focus-ring-width) solid var(--theme-action-focus-ring); outline-offset: var(--focus-ring-offset); }
[data-rs-menu-item][data-rs-state~="focused"] {
  outline: var(--focus-ring-width) solid var(--theme-action-focus-ring);
  outline-offset: var(--focus-ring-offset);
}

[data-rs-menu-item]:active {
  transform: scale(0.98);
}

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

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

[data-rs-menu-label] {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--menu-item-fg);
  opacity: 0.7;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: var(--space-xs) var(--space-sm);
}

[data-rs-menu-separator] {
  height: var(--border-thin);
  background: var(--theme-surface-border);
  margin: var(--menu-separator-margin);
}