/* Scoped shared UI. Colors, typography and spacing come from platform.css only. */
.orbit-ui { color: var(--text); font-size: var(--fs-md); }
.orbit-ui-page { display: grid; gap: var(--sp-4); width: 100%; min-width: 0; max-width: none; margin: 0 auto; padding: var(--sp-6); }
.orbit-ui-header { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: var(--sp-4); }
.orbit-ui-header h1 { font-size: var(--fs-2xl); }
.orbit-ui-header h2, .orbit-ui-section legend, .orbit-ui-state h2 { font-size: var(--fs-lg); font-weight: 600; }
.orbit-ui-header p { margin-top: var(--sp-2); }
.orbit-ui-muted { color: var(--muted); font-size: var(--fs-sm); }
.orbit-ui-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); }
.orbit-ui-button { min-height: 44px; padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-xs); white-space: nowrap; }
.orbit-ui-button:disabled { opacity: 1; color: var(--disabled-text); background: var(--disabled-bg); border-color: var(--line); }
.orbit-ui-toolbar { display: flex; align-items: end; flex-wrap: wrap; gap: var(--sp-3); padding-bottom: var(--sp-4); border-bottom: 1px solid var(--line); }
.orbit-ui-toolbar .orbit-ui-field:first-child { flex: 1 1 240px; }
.orbit-ui-field { display: grid; align-content: start; gap: var(--sp-2); min-width: 0; }
.orbit-ui-field label { font-weight: 500; }
.orbit-ui-field input, .orbit-ui-field select, .orbit-ui-field textarea { width: 100%; min-height: 44px; padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line-strong); border-radius: var(--radius-xs); background: var(--panel); color: var(--text); }
.orbit-ui-field textarea { min-height: 100px; }
.orbit-ui-field [aria-invalid="true"] { border-color: var(--bad); }
.orbit-ui-error { color: var(--bad); font-size: var(--fs-sm); }
.orbit-ui-state { display: grid; gap: var(--sp-3); padding: var(--sp-8) var(--sp-4); text-align: center; justify-items: center; border: 1px solid var(--line); border-radius: var(--radius-sm); }
.orbit-ui-state-error h2, .orbit-ui-state-forbidden h2 { color: var(--bad); }
.orbit-ui-table-wrap { overflow: auto; border: 1px solid var(--line); border-radius: var(--radius-sm); }
.orbit-ui-table { width: 100%; min-width: 720px; border-collapse: collapse; font-size: var(--fs-base); }
.orbit-ui-table th, .orbit-ui-table td { padding: var(--sp-3); text-align: left; border-bottom: 1px solid var(--line); vertical-align: middle; }
.orbit-ui-table th { background: var(--head); color: var(--muted); font-weight: 500; white-space: nowrap; }
.orbit-ui-table tr:last-child td { border-bottom: 0; }
.orbit-ui-table tbody tr:hover { background: var(--hover-bg); }
.orbit-ui-table td { max-width: 320px; overflow-wrap: anywhere; }
.orbit-ui-table .orbit-ui-numeric { text-align: right; font-variant-numeric: tabular-nums; }
.orbit-ui-table .orbit-ui-center { text-align: center; }
.orbit-ui-table .orbit-ui-serial { font-variant-numeric: tabular-nums; }
.orbit-ui-tag { display: inline-flex; padding: var(--sp-1) var(--sp-2); border-radius: var(--radius-xs); font-size: var(--fs-sm); background: var(--head); color: var(--muted); white-space: nowrap; }
.orbit-ui-tag-success { background: var(--ok-bg); color: var(--ok-text); }
.orbit-ui-tag-warning { background: var(--warn-bg); color: var(--warn); }
.orbit-ui-tag-error { background: var(--bad-bg); color: var(--bad); }
.orbit-ui-pagination { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--sp-3); font-size: var(--fs-sm); color: var(--muted); }
.orbit-ui-form { max-width: 760px; display: grid; gap: var(--sp-6); }
.orbit-ui-section { margin: 0; padding: var(--sp-4) 0 0; border: 0; border-top: 1px solid var(--line); min-width: 0; }
.orbit-ui-section legend { padding-right: var(--sp-3); }
.orbit-ui-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-4); margin-top: var(--sp-4); }
.orbit-ui-full { grid-column: 1 / -1; }
.orbit-ui-form-actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; padding-top: var(--sp-4); border-top: 1px solid var(--line); }
.orbit-ui-dialog { width: min(600px, calc(100% - var(--sp-7))); max-height: calc(100% - var(--sp-7)); overflow: auto; padding: var(--sp-6); border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--panel); color: var(--text); }
.orbit-ui-dialog .orbit-ui-header { margin-bottom: var(--sp-4); }
.orbit-ui-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
@media (max-width: 768px) {
  .orbit-ui-page { padding: var(--sp-4); }
  .orbit-ui-fields { grid-template-columns: minmax(0, 1fr); }
  .orbit-ui-toolbar .orbit-ui-field { flex: 1 1 100%; }
}
.orbit-ui-results { display: grid; gap: var(--sp-4); min-width: 0; }
.orbit-ui-dialog dd { margin: var(--sp-1) 0 0; overflow-wrap: anywhere; }

.orbit-ui-state-loading { min-height: 240px; align-content: center; border: 0; }

/* Primary action contract: one per action context; legacy PD classes are aliases. */
.orbit-ui button.orbit-ui-button.primary,
.orbit-ui button.pd-btn-primary,
.orbit-ui button.pd-btn-highlight {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
  min-height: 44px; padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-xs);
  border: 1px solid var(--accent); background: var(--panel); color: var(--accent);
  font-weight: 600; box-shadow: none;
}
.orbit-ui button.orbit-ui-button.primary:hover:not(:disabled),
.orbit-ui button.pd-btn-primary:hover:not(:disabled),
.orbit-ui button.pd-btn-highlight:hover:not(:disabled),
.orbit-ui button.orbit-ui-button.primary:active:not(:disabled),
.orbit-ui button.pd-btn-primary:active:not(:disabled),
.orbit-ui button.pd-btn-highlight:active:not(:disabled) {
  background: var(--accent-soft); border-color: var(--accent-strong); color: var(--accent-strong);
}
.orbit-ui button.orbit-ui-button.primary:focus-visible,
.orbit-ui button.pd-btn-primary:focus-visible,
.orbit-ui button.pd-btn-highlight:focus-visible {
  outline: var(--focus-ring); outline-offset: 2px;
}
.orbit-ui button.orbit-ui-button.primary:disabled,
.orbit-ui button.pd-btn-primary:disabled,
.orbit-ui button.pd-btn-highlight:disabled {
  opacity: 1; background: var(--disabled-bg); border-color: var(--line); color: var(--disabled-text);
  cursor: not-allowed; transform: none; box-shadow: none;
}

/* 不折行：编码、型号这类标识符必须一行读完，折成两行会被误读成「编号坏了」。 */
.orbit-ui-table .orbit-ui-nowrap {
  white-space: nowrap;
}

/* 可搜索下拉：产品主档上千条时，原生 <select> 只能一路滚，装不下搜索框。
   面板用两行网格：搜索框那行不滚，列表那行自己滚 —— 搜索框因此永远固定在顶部。 */
.orbit-ui-picker { position: relative; display: grid; gap: var(--sp-1); }
.orbit-ui-picker-trigger {
  width: 100%; min-height: 44px; padding: var(--sp-2) var(--sp-3); font: inherit; text-align: left;
  border: 1px solid var(--line-strong); border-radius: var(--radius-xs); background: var(--panel); color: var(--text); cursor: pointer;
}
.orbit-ui-picker-trigger.is-empty { color: var(--muted); }
.orbit-ui-picker-panel {
  position: absolute; z-index: 30; top: calc(100% + var(--sp-1)); left: 0; right: 0;
  display: grid; grid-template-rows: auto minmax(0, 1fr); max-height: 320px; overflow: hidden;
  border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--panel); box-shadow: var(--shadow);
}
/* display 会盖掉 UA 的 [hidden]{display:none}，必须显式补回来。 */
.orbit-ui-picker-panel[hidden] { display: none; }
.orbit-ui-picker-search-row { padding: var(--sp-2); border-bottom: 1px solid var(--line); background: var(--panel); }
.orbit-ui-picker-search-row input {
  width: 100%; min-height: 40px; padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--line-strong); border-radius: var(--radius-xs); background: var(--panel); color: var(--text);
}
.orbit-ui-picker-list { display: grid; align-content: start; overflow: auto; padding: var(--sp-1); }
.orbit-ui-picker-option {
  padding: var(--sp-2) var(--sp-3); font: inherit; text-align: left;
  border: 0; border-radius: var(--radius-xs); background: transparent; color: var(--text); cursor: pointer;
}
.orbit-ui-picker-option:hover, .orbit-ui-picker-option:focus-visible { background: var(--hover-bg); }
.orbit-ui-picker-option[aria-selected="true"] { background: var(--accent-soft); color: var(--accent-strong); font-weight: 600; }
.orbit-ui-picker-empty { margin: 0; padding: var(--sp-3); color: var(--muted); font-size: var(--fs-sm); }
/* 下方放不下时翻到触发按钮上方，列表才能整段看见。 */
.orbit-ui-picker-panel.is-above { top: auto; bottom: calc(100% + var(--sp-1)); }

/* 文件选择：原生控件自带英文「Choose File / No file chosen」，只能藏起来换成中文按钮 */
.orbit-ui-file-native { display: none; }
.orbit-ui-file-field { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.orbit-ui-file-name { font-size: var(--fs-sm); word-break: break-all; }
.orbit-ui-field-label { font-weight: 500; }
