/* Final UI pass: single-line controls, quiet graphite surfaces, and predictable motion. */

html body:has(.brand-lockup) {
  --ui-bg: #0f1216;
  --ui-surface: #15191f;
  --ui-surface-raised: #1b2129;
  --ui-surface-active: #202a35;
  --ui-border: #2a333e;
  --ui-border-strong: #394756;
  --ui-text: #eef2f6;
  --ui-muted: #9aa6b4;
  --ui-accent: #4da3ff;
  --ui-accent-strong: #2f84d8;
  --ui-success: #35c58b;
  background: var(--ui-bg) !important;
  color: var(--ui-text) !important;
}

html body:has(.brand-lockup) #root,
html body:has(.brand-lockup) .ant-layout,
html body:has(.brand-lockup) .ant-layout-content {
  background: var(--ui-bg) !important;
  color: var(--ui-text) !important;
}

/* Sidebar: flat active states with one restrained accent. */
html body:has(.brand-lockup) .ant-layout-sider,
html body:has(.brand-lockup) .ant-layout-sider-children {
  background: #11151a !important;
  border-right: 1px solid #242c35 !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) .ant-menu {
  background: transparent !important;
  padding: 10px 8px 18px !important;
}

html body:has(.brand-lockup) .ant-menu-item,
html body:has(.brand-lockup) .ant-menu-submenu-title {
  width: 100% !important;
  height: 38px !important;
  line-height: 38px !important;
  margin: 2px 0 !important;
  padding: 0 12px !important;
  border-radius: 8px !important;
  color: var(--ui-muted) !important;
  transition: background-color .16s ease, color .16s ease, transform .16s ease !important;
}

html body:has(.brand-lockup) .ant-menu-item:hover,
html body:has(.brand-lockup) .ant-menu-submenu-title:hover {
  background: #1a2027 !important;
  color: var(--ui-text) !important;
}

html body:has(.brand-lockup) .ant-menu-item-selected {
  position: relative !important;
  background: var(--ui-surface-active) !important;
  color: #f7fbff !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) .ant-menu-item-selected::before {
  position: absolute !important;
  inset: 8px auto 8px 0 !important;
  width: 3px !important;
  border-radius: 2px !important;
  background: var(--ui-accent) !important;
  content: "" !important;
}

html body:has(.brand-lockup) .ant-menu-item .anticon,
html body:has(.brand-lockup) .ant-menu-submenu-title .anticon {
  color: currentColor !important;
  font-size: 16px !important;
}

html body:has(.brand-lockup) .ant-menu-sub.ant-menu-inline {
  background: transparent !important;
  padding: 2px 0 4px 10px !important;
}

html body:has(.brand-lockup) .ant-menu-sub .ant-menu-item {
  height: 32px !important;
  line-height: 32px !important;
  margin: 1px 0 !important;
  font-size: 13px !important;
}

/* Search controls: one border belongs to the group; children stay borderless. */
html body:has(.brand-lockup) #root .ant-input-search {
  display: flex !important;
  width: min(400px, 100%) !important;
  height: 36px !important;
  min-height: 36px !important;
  border: 1px solid var(--ui-border) !important;
  border-radius: 9px !important;
  background: var(--ui-surface) !important;
  overflow: hidden !important;
  box-shadow: none !important;
  vertical-align: middle !important;
}

html body:has(.brand-lockup) #root .ant-input-search:focus-within {
  border-color: var(--ui-accent) !important;
  box-shadow: 0 0 0 2px rgba(77, 163, 255, .14) !important;
}

html body:has(.brand-lockup) #root .ant-input-search .ant-input-wrapper,
html body:has(.brand-lockup) #root .ant-input-search .ant-input-group {
  display: flex !important;
  flex: 1 1 auto !important;
  width: auto !important;
  min-width: 0 !important;
  height: 100% !important;
  border: 0 !important;
  background: transparent !important;
}

html body:has(.brand-lockup) #root .ant-input-search .ant-input-affix-wrapper {
  display: flex !important;
  flex: 1 1 auto !important;
  width: auto !important;
  min-width: 0 !important;
  height: 100% !important;
  padding: 0 10px !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) #root .ant-input-search input.ant-input {
  width: 100% !important;
  min-width: 0 !important;
  height: 100% !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--ui-text) !important;
  box-shadow: none !important;
  line-height: 34px !important;
}

html body:has(.brand-lockup) #root .ant-input-search input.ant-input::placeholder {
  color: #7f8b99 !important;
  opacity: 1 !important;
}

html body:has(.brand-lockup) #root .ant-input-search .ant-input-group-addon {
  display: block !important;
  flex: 0 0 40px !important;
  width: 40px !important;
  height: 100% !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
}

html body:has(.brand-lockup) #root .ant-input-search .ant-input-search-button {
  width: 40px !important;
  height: 100% !important;
  padding: 0 !important;
  border: 0 !important;
  border-left: 1px solid var(--ui-border) !important;
  border-radius: 0 !important;
  background: var(--ui-accent-strong) !important;
  color: #fff !important;
  box-shadow: none !important;
  transition: background-color .16s ease !important;
}

html body:has(.brand-lockup) #root .ant-input-search .ant-input-search-button:hover {
  background: var(--ui-accent) !important;
}

/* Legacy/custom search bars use the same geometry when present. */
html body:has(.brand-lockup) #root .inj-searchbar {
  display: flex !important;
  align-items: center !important;
  width: min(400px, 100%) !important;
  height: 36px !important;
  padding: 0 10px !important;
  border: 1px solid var(--ui-border) !important;
  border-radius: 9px !important;
  background: var(--ui-surface) !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) #root .inj-searchbar input {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  height: 100% !important;
  padding: 0 !important;
  border: 0 !important;
  outline: 0 !important;
  background: transparent !important;
  color: var(--ui-text) !important;
}

/* Dashboard device search is a plain input rather than Ant Input.Search. */
html body:has(.brand-lockup) #root input[placeholder*="搜索设备名"] {
  box-sizing: border-box !important;
  width: min(260px, 100%) !important;
  height: 38px !important;
  padding: 0 12px !important;
  border: 1px solid var(--ui-border) !important;
  border-radius: 9px !important;
  background: var(--ui-surface) !important;
  color: var(--ui-text) !important;
  box-shadow: none !important;
}

/* Segmented filters: clear grouping without the full-black slab. */
html body:has(.brand-lockup) #root .ant-segmented {
  border: 1px solid var(--ui-border) !important;
  border-radius: 9px !important;
  background: #12161b !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) #root .ant-segmented-item {
  border-radius: 7px !important;
  color: var(--ui-muted) !important;
  transition: background-color .16s ease, color .16s ease !important;
}

html body:has(.brand-lockup) #root .ant-segmented-item:hover {
  color: var(--ui-text) !important;
}

html body:has(.brand-lockup) #root .ant-segmented-item-selected {
  background: #252d36 !important;
  color: var(--ui-text) !important;
  box-shadow: none !important;
}

/* Neutral controls and cards. */
html body:has(.brand-lockup) #root button.ant-btn,
html body:has(.brand-lockup) #root .sidebar-btn,
html body:has(.brand-lockup) #root .sidebar-btn-sm,
html body:has(.brand-lockup) #root .ctrl-tab-action,
html body:has(.brand-lockup) #root .ctrl-qbtn {
  border: 1px solid var(--ui-border) !important;
  border-radius: 8px !important;
  background: var(--ui-surface) !important;
  background-image: none !important;
  color: var(--ui-text) !important;
  box-shadow: none !important;
  transition: background-color .16s ease, border-color .16s ease, color .16s ease, transform .16s ease !important;
}

html body:has(.brand-lockup) #root button.ant-btn:hover,
html body:has(.brand-lockup) #root .sidebar-btn:hover,
html body:has(.brand-lockup) #root .sidebar-btn-sm:hover,
html body:has(.brand-lockup) #root .ctrl-tab-action:hover,
html body:has(.brand-lockup) #root .ctrl-qbtn:hover {
  border-color: var(--ui-border-strong) !important;
  background: var(--ui-surface-raised) !important;
  color: #fff !important;
  transform: translateY(-1px);
}

html body:has(.brand-lockup) #root button.ant-btn:active,
html body:has(.brand-lockup) #root .sidebar-btn:active,
html body:has(.brand-lockup) #root .sidebar-btn-sm:active {
  transform: translateY(0);
}

html body:has(.brand-lockup) #root button.ant-btn-primary,
html body:has(.brand-lockup) #root button[type="submit"].ant-btn {
  border-color: var(--ui-accent-strong) !important;
  background: var(--ui-accent-strong) !important;
  color: #fff !important;
}

html body:has(.brand-lockup) #root button.ant-btn-primary:hover,
html body:has(.brand-lockup) #root button[type="submit"].ant-btn:hover {
  border-color: var(--ui-accent) !important;
  background: var(--ui-accent) !important;
}

html body:has(.brand-lockup) #root .rc-header,
html body:has(.brand-lockup) #root .ant-card,
html body:has(.brand-lockup) #root .ant-table-wrapper,
html body:has(.brand-lockup) #root .ant-table-container {
  border-color: var(--ui-border) !important;
  background: var(--ui-surface) !important;
  background-image: none !important;
  box-shadow: none !important;
}

html body:has(.brand-lockup) #root .rc-header {
  min-height: 56px !important;
  padding: 0 14px !important;
  border-radius: 12px !important;
}

html body:has(.brand-lockup) #root .ant-table-thead > tr > th {
  background: #171c22 !important;
  border-bottom-color: var(--ui-border) !important;
  color: var(--ui-muted) !important;
}

html body:has(.brand-lockup) #root .ant-table-tbody > tr > td {
  border-bottom-color: #242c35 !important;
}

html body:has(.brand-lockup) #root .ant-table-tbody > tr:hover > td {
  background: #1a2027 !important;
}

/* Keep motion intentional and avoid animated layout shifts. */
html body:has(.brand-lockup) #root button,
html body:has(.brand-lockup) #root input,
html body:has(.brand-lockup) #root .ant-menu-item,
html body:has(.brand-lockup) #root .ant-menu-submenu-title,
html body:has(.brand-lockup) #root .ant-card,
html body:has(.brand-lockup) #root .ant-table-tbody > tr {
  transition-property: background-color, border-color, color, box-shadow, transform !important;
  transition-duration: .16s !important;
  transition-timing-function: ease !important;
}

@media (max-width: 900px) {
  html body:has(.brand-lockup) .ant-layout-content {
    padding: 16px !important;
  }

  html body:has(.brand-lockup) #root .ant-space {
    flex-wrap: wrap !important;
  }

  html body:has(.brand-lockup) #root .ant-input-search {
    width: min(100%, 400px) !important;
  }

  html body:has(.brand-lockup) #root .ant-table-wrapper {
    overflow-x: auto !important;
  }
}

/* Final specificity pass: older theme layers use html:root[data-theme] and
   therefore outrank the first pass. Keep the search group single-bordered and
   make the sidebar state flat without changing any rendered markup. */
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search,
html:root body:has(.brand-lockup) #root .ant-input-search {
  background: var(--ui-surface) !important;
  border: 1px solid var(--ui-border) !important;
  box-shadow: none !important;
}

html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input-wrapper,
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input-group,
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input-affix-wrapper,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input-wrapper,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input-group,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input-affix-wrapper {
  background: transparent !important;
  border: 0 none !important;
  box-shadow: none !important;
}

html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input,
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search input.ant-input,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input,
html:root body:has(.brand-lockup) #root .ant-input-search input.ant-input {
  height: 100% !important;
  min-height: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  color: var(--ui-text) !important;
  line-height: 34px !important;
}

html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input-group-addon,
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-input-search .ant-input-search-button,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input-group-addon,
html:root body:has(.brand-lockup) #root .ant-input-search .ant-input-search-button {
  background: var(--ui-accent-strong) !important;
  border: 0 none !important;
  box-shadow: none !important;
}

/* The legacy dashboard selector has equal specificity and !important. */
html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-item-selected,
html[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-item-selected,
html:root body:has(.brand-lockup) #root .ant-menu-item-selected {
  background: var(--ui-surface-active) !important;
  background-image: none !important;
  color: #f7fbff !important;
  box-shadow: none !important;
  transform: none !important;
}

html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-item-selected::after,
html[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-item-selected::after,
html:root body:has(.brand-lockup) #root .ant-menu-item-selected::after {
  display: none !important;
  border: 0 none !important;
  content: none !important;
}

html:root[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-item.ant-menu-item-active:not(.ant-menu-item-selected),
html[data-theme="dark"] body:has(.brand-lockup) #root .ant-menu-submenu-title:hover,
html:root body:has(.brand-lockup) #root .ant-menu-submenu-title:hover {
  box-shadow: none !important;
  transform: none !important;
}

/* Terminal control uses a plain input with an inline style. */
html:root[data-theme="dark"] body:has(.brand-lockup) #root input[placeholder*="搜索设备"],
html:root body:has(.brand-lockup) #root input[placeholder*="搜索设备"] {
  background: var(--ui-surface) !important;
  border: 1px solid var(--ui-border) !important;
  box-shadow: none !important;
}
