/* Only explicitly owned components use this contract. No view-size rules,
   resize observers, per-input listeners or action dispatch are installed. */
.shared-asset-icon { display: inline-block; flex: 0 0 auto; width: var(--ui-mini-icon-size); height: var(--ui-mini-icon-size); background: currentColor; mask: var(--asset-icon-source) center / contain no-repeat; }
.shared-asset-icon[data-ui-icon="asset"] { color: var(--ui-icon-asset); }
.shared-asset-icon[data-ui-icon="personnel"] { color: var(--ui-icon-personnel); }
.shared-asset-icon:is([data-ui-icon="layout_plan"],[data-ui-icon="room"]) { color: var(--ui-icon-layout); }
.shared-asset-icon[data-ui-icon="daily_checks"] { color: var(--ui-icon-checks); }
.shared-asset-icon[data-ui-icon="temperature"] { color: var(--ui-icon-temperature); }
.shared-asset-icon[data-ui-icon="humidity"] { color: var(--ui-icon-humidity); }
.shared-asset-icon[data-ui-icon="cleaning"] { color: var(--ui-icon-cleaning); }
.shared-asset-icon[data-ui-icon="waste"] { color: var(--ui-icon-waste); }
[data-ui="button"][data-ui-variant="primary"] .shared-asset-icon { color: inherit; }
[data-ui="page-heading"] { display: grid; grid-template-columns: var(--ui-page-heading-icon-size) minmax(0, 1fr) auto; gap: var(--ui-page-heading-gap); align-items: start; min-height: var(--ui-page-heading-height); margin-bottom: var(--ui-page-heading-content-gap); }
[data-ui="page-heading"] [data-object="akPageHeadingIcon"] { position: relative; width: var(--ui-page-heading-icon-size); height: var(--ui-page-heading-icon-size); display: flex; align-items: center; justify-content: center; }
[data-ui="page-heading"] [data-heading-frame] { position: absolute; inset: 0; width: 100%; height: 100%; fill: var(--ui-page-heading-frame-fill); stroke: var(--ui-page-heading-frame-line); stroke-width: var(--ui-page-heading-frame-width); pointer-events: none; }
[data-ui="page-heading"] [data-object="akPageHeadingIcon"] .shared-asset-icon { width: var(--ui-page-heading-glyph-size); height: var(--ui-page-heading-glyph-size); color: var(--ui-accent); opacity: var(--ui-page-heading-glyph-opacity); }
[data-ui="page-heading"] [data-object="akPageHeadingTitle"] { min-height: var(--ui-page-heading-title-height); margin: 0; }
[data-ui="page-heading"] [data-heading-labels] { display: grid; row-gap: var(--ui-page-heading-support-gap); }
[data-ui="page-heading"] [data-object="akPageHeadingDescription"] { margin: 0; min-height: var(--ui-page-heading-support-height); color: var(--ui-muted); }
[data-ui="page-heading"] [data-heading-actions] { display: flex; align-self: center; gap: 10px; }
[data-ui="button"], [data-ui="field"], [data-ui="combo"] {
  box-sizing: border-box;
  border: var(--ui-control-border, var(--ui-border-width) solid var(--ui-line));
  border-radius: var(--ui-radius);
  color: var(--ui-control-color, var(--ui-text));
  background: var(--ui-control-background, var(--ui-surface));
  box-shadow: none;
}
[data-ui="button"] { padding: var(--ui-control-padding, var(--ui-button-padding)); cursor: pointer; transition: background-color var(--ui-motion), border-color var(--ui-motion), box-shadow var(--ui-motion); }
[data-ui-size="action-height"] { --ui-height: var(--ui-action-height); }
[data-ui-size="compact-height"] { --ui-height: var(--ui-compact-height); }
[data-ui-size="auth-height"] { --ui-height: var(--ui-auth-height); }
[data-ui-size="icon-size"] { --ui-height: var(--ui-icon-size); }
[data-ui-size="mini-icon-size"] { --ui-height: var(--ui-mini-icon-size); }
[data-ui-size="close-size"] { --ui-height: var(--ui-close-size); }
[data-ui-size="header-icon-size"] { --ui-height: var(--ui-header-icon-size); }
[data-ui="button"]:not(.qt-node)[data-ui-size], [data-ui="field"][data-ui-size] { height: var(--ui-height); min-height: var(--ui-height); }
[data-ui="button"][data-ui-kind="icon"] { width: var(--ui-height); }
[data-ui="button"][data-ui-kind="reveal"] { border-left: var(--ui-control-separator, 0); }
[data-ui="button"]:is([data-ui-size="summary-height"],[data-ui-size="icon-size"],[data-ui-size="mini-icon-size"],[data-ui-size="close-size"],[data-ui-size="header-icon-size"],[data-ui-size="chip-close-size"],[data-ui-size="inline-toggle-height"]) { padding: 0; }
[data-ui="field"] { padding: var(--ui-control-padding, var(--ui-field-padding)); }
[data-ui="field"][data-ui-field="spin"] { padding: var(--ui-combo-padding); }
[data-ui="field"][data-ui-field="multiline"] { padding: var(--ui-multiline-padding); }
[data-ui="combo"] { padding: var(--ui-combo-padding); }
[data-ui="combo"][data-ui-kind="form-combo"] { position: relative; height: var(--ui-height); min-height: var(--ui-height); }
[data-ui-kind="form-combo"]:focus-within { outline: var(--ui-focus-width) solid var(--ui-focus); outline-offset: -2px; }
[data-ui-kind="form-combo"] .qt-combo { padding-right: 0; }
[data-ui-kind="compact-combo"] { padding: var(--ui-compact-combo-padding); }
[data-ui-kind="editor-combo"] { padding: var(--ui-editor-combo-padding); }
[data-ui-kind="cell-combo"] { padding: var(--ui-cell-combo-padding); }
[data-ui-kind="cell-field"] { padding: var(--ui-cell-field-padding); }
[data-ui-kind="form-date"] { padding: var(--ui-form-date-padding); }
[data-ui-kind="table-date"] { padding: var(--ui-table-date-padding); }
[data-ui-kind="disclosure"], [data-ui-kind="canvas-choice"], [data-ui-kind="bare"] { padding: 0; }
[data-ui="field"][data-enabled="false"], [data-ui="combo"][data-enabled="false"] { background: var(--ui-control-background, var(--ui-readonly-surface)); }
[data-ui="field"][data-ui-variant="tolerance"] { background: var(--ui-surface); color: var(--ui-text); border-color: var(--ui-line); }
[data-ui="field"][data-ui-variant="tolerance"][data-enabled="false"] { background: var(--ui-inactive-surface); color: var(--ui-muted); border-color: var(--ui-group-line); }
[data-ui="button"][data-ui-variant="primary"] { color: var(--ui-control-color, #fff); background: var(--ui-control-background, var(--ui-accent)); border: var(--ui-control-border, var(--ui-border-width) solid var(--ui-accent)); }
[data-ui="button"][data-ui-variant="ghost"] { background: var(--ui-control-background, transparent); border: var(--ui-control-border, var(--ui-border-width) solid var(--ui-group-line)); }
[data-ui="button"][data-ui-variant="subtle"] { border: var(--ui-control-border, var(--ui-border-width) solid var(--ui-group-line)); }
[data-ui="button"][data-ui-variant="text"] { background: var(--ui-control-background, transparent); border: var(--ui-control-border, 0 solid currentColor); }
[data-ui="button"]:not(:disabled):not(:has(>button:disabled)):hover { border-color: var(--ui-hover-border-color, var(--ui-accent)); color: var(--ui-hover-color, var(--ui-control-color, var(--ui-text))); background: var(--ui-hover-background, var(--ui-control-background, var(--ui-surface))); }
[data-ui="button"][data-ui-variant="primary"]:not(:disabled):not(:has(>button:disabled)):hover { background: var(--ui-hover-background, var(--ui-accent-hover)); border-color: var(--ui-hover-border-color, var(--ui-accent-hover)); color: var(--ui-hover-color, var(--ui-control-color, #fff)); }
[data-ui="button"]:not(:disabled):is(:active,:not(:has(>button:disabled)):has(>button:active)) { box-shadow: var(--ui-pressed-shadow); }
[data-ui="button"]:is(:disabled,:has(>button:disabled)):not([data-ui-variant="tab"]:has(>button[aria-pressed="true"])) { opacity: var(--ui-disabled-opacity); cursor: default; }
[data-ui="button"][data-ui-variant="tab"]:has(>button[aria-pressed="true"]) { background: var(--ui-control-background, var(--ui-selection)); color: var(--ui-control-color, var(--ui-selection-accent, var(--ui-accent))); border: var(--ui-control-border, var(--ui-border-width) solid var(--ui-selection-accent, var(--ui-accent))); }
[data-ui="button"]:is(:focus-visible,:has(>button:focus-visible)), [data-ui="field"]:is(:focus-visible,:has(>.qt-native:focus-visible)), [data-ui="combo"]:is(:focus-visible,:has(>.qt-native:focus-visible)) { outline: var(--ui-focus-width) solid var(--ui-focus); outline-offset: -2px; }
[data-ui="surface"], [data-ui="group"] { background: var(--ui-surface); border: var(--ui-border-width) solid var(--ui-surface-line); border-radius: var(--ui-radius); box-shadow: none; }
[data-ui="group"] { border-color: var(--ui-group-line); }
[data-ui-theme="qc"] { --ui-selection-accent: #0891b2; --ui-selection: #e6f7fb; }

[data-ui="menu"] {
  box-sizing: border-box;
  position: fixed; pointer-events: auto; min-width: 100px; max-height: 420px; overflow: auto;
  background: var(--ui-surface); color: #263241; border: var(--ui-border-width) solid var(--ui-line);
  border-radius: calc(var(--ui-radius) * var(--combo-scale, 1)); box-shadow: var(--ui-popup-shadow);
  font: inherit; padding: calc(2px * var(--combo-scale, 1)) 0;
}
[data-ui="option"] {
  box-sizing: border-box;
  display: block; width: 100%; border: 0; border-radius: 0;
  padding: calc(5px * var(--combo-scale, 1)) calc(12px * var(--combo-scale, 1));
  min-height: calc(var(--ui-option-row-height) * var(--combo-scale, 1)); font: inherit; text-align: left;
  white-space: pre; background: var(--ui-surface); color: inherit; cursor: pointer;
  transition: background-color var(--ui-motion), box-shadow var(--ui-motion);
}
[data-ui="option"]:not(:disabled):is(:hover,[aria-selected="true"]) { background: var(--ui-option-hover); }
[data-ui="option"]:focus-visible { background: var(--ui-option-hover); outline: var(--ui-focus-width) solid var(--ui-focus); outline-offset: -2px; }
[data-ui="option"]:not(:disabled):active { box-shadow: var(--ui-pressed-shadow); }
[data-ui="option"]:disabled { opacity: var(--ui-disabled-opacity); cursor: default; }

/* Compact controls keep their own geometry. Their interaction rules are shared. */
[data-ui="tab"], [data-ui="menu-action"], .qt-spin-controls button, .qt-check, [data-native-day], [data-action]:not(button), [data-nav] {
  cursor: pointer; transition: background-color var(--ui-motion), box-shadow var(--ui-motion);
}
[data-ui="tab"]:focus-visible, [data-ui="menu-action"]:focus-visible, .qt-spin-controls button:focus-visible, .qt-check:has(input:focus-visible), [data-native-day]:focus-visible, [data-action]:not(button):focus-visible, [data-nav]:focus-visible {
  outline: var(--ui-focus-width) solid var(--ui-focus); outline-offset: -2px;
}
[data-ui="tab"]:not(:disabled):active, [data-ui="menu-action"]:not(:disabled):active, .qt-spin-controls button:not(:disabled):active, .qt-check:has(input:enabled):active, [data-native-day]:active, [data-action]:not(button):active, [data-nav]:active {
  box-shadow: var(--ui-pressed-shadow);
}
[data-ui="tab"]:disabled, [data-ui="menu-action"]:disabled, .qt-spin-controls button:disabled { opacity: var(--ui-disabled-opacity); cursor: default; }
[data-ui="menu-action"] { border-radius: var(--ui-radius); }
#popup-layer { position: fixed; inset: 0; z-index: 200000; pointer-events: none; }
@media print { #popup-layer { display: none; } }
input[type="file"]::file-selector-button { border-radius: var(--ui-radius); transition: background-color var(--ui-motion), box-shadow var(--ui-motion); }
input[type="file"]:not(:disabled)::file-selector-button:active { box-shadow: var(--ui-pressed-shadow); }

/* Management pages use the same controls, with compact table/menu roles.
   Account cards and password reveal controls retain their content geometry. */
:where(.admin-redesign,.lab-management) :is(.button,.table-action)[data-ui="button"] { height: var(--ui-action-height); min-height: var(--ui-action-height); }
:where(.admin-redesign,.lab-management) :is(.button.small,.button-small,.table-action)[data-ui="button"] { height: var(--ui-compact-height); min-height: var(--ui-compact-height); }
:where(.admin-redesign,.lab-management) .icon-button[data-ui="button"] { width: var(--ui-icon-size); height: var(--ui-icon-size); padding: 0; }
:where(.admin-redesign,.lab-management) .menu-toggle[data-ui="button"] { height: var(--ui-header-icon-size); padding: 0; }
:where(.admin-redesign,.lab-management) .auth-card .button-full[data-ui="button"] { height: var(--ui-auth-height); min-height: var(--ui-auth-height); }
:where(.admin-redesign,.lab-management) .tab[data-ui="tab"] { min-height: var(--ui-management-tab-height); }
:where(.admin-redesign,.lab-management) .menu-popup [data-ui="button"] { min-height: var(--ui-menu-row-height); padding: var(--ui-menu-action-padding); }
:where(.admin-redesign,.lab-management) .user-row[data-ui="button"] { border-bottom: var(--ui-control-row-divider); }
:where(.admin-redesign,.lab-management) [data-ui="field"]:is([readonly],:disabled) { --ui-hover-border-color: var(--ui-line); }
[data-ui="disclosure"] { cursor: pointer; }
[data-ui="disclosure"]:focus-visible { outline: var(--ui-focus-width) solid var(--ui-focus); outline-offset: -2px; }
