/* Phone infrastructure: composition only. Halo owns controls and working surfaces. */
.pbx-workspace, .pbx-dialog { font-family: var(--halo-font); color: var(--halo-text); font-size: var(--halo-text-body); }
.pbx-workspace { display: grid; grid-template-columns: 208px minmax(0, 1fr); gap: var(--halo-6); align-items: start; }
.pbx-navigation { position: sticky; top: var(--halo-4); padding: var(--halo-4) var(--halo-3); background: var(--halo-surface); border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-lg); }
.pbx-navigation__title { display: flex; align-items: center; gap: var(--halo-2); font-weight: 650; }
.pbx-navigation__title .mud-icon-root { color: var(--halo-ink-brand); width: 20px; }
.pbx-navigation__hint { color: var(--halo-text-secondary); font-size: var(--halo-text-sm); margin: var(--halo-2) 0 var(--halo-5); }
.pbx-navigation__groups, .pbx-navigation__group { display: grid; gap: var(--halo-1); }
.pbx-navigation__groups { gap: var(--halo-4); }
.pbx-navigation__label { color: var(--halo-text-tertiary); font-size: var(--halo-text-caption); font-weight: 600; padding: var(--halo-1) var(--halo-2); }
.pbx-navigation__link { display: flex; align-items: center; gap: var(--halo-2); padding: var(--halo-2); min-height: 38px; color: var(--halo-text-secondary); border-radius: var(--halo-radius-sm); text-decoration: none; transition: background var(--halo-duration-1) var(--halo-ease-out), color var(--halo-duration-1) var(--halo-ease-out), box-shadow var(--halo-duration-1) var(--halo-ease-out); }
.pbx-navigation__link:hover { background: var(--halo-surface-hover); color: var(--halo-text); text-decoration: none; }
.pbx-navigation__link.is-active { background: rgb(var(--halo-tone-brand) / .12); color: var(--halo-ink-brand); font-weight: 600; box-shadow: inset 3px 0 0 rgb(var(--halo-tone-brand)); }
.pbx-mobile-navigation { display: none; }
.pbx-content { display: flex; flex-direction: column; gap: var(--halo-5); min-width: 0; }
.pbx-content .halo-page-header { margin-bottom: 0; }
.pbx-content > .halo-card, .pbx-content > .halo-metric-grid { width: 100%; }
.pbx-content h2 { font-family: var(--halo-font-display); font-size: var(--halo-text-title); font-weight: 700; letter-spacing: -0.02em; margin: 0; }
.pbx-help, .pbx-content small, .pbx-dialog small { color: var(--halo-text-secondary); font-size: var(--halo-text-sm); }
.pbx-help { margin: var(--halo-3) 0 0; }
.pbx-content .mud-typography-body1, .pbx-dialog .mud-typography-body1 { font-size: var(--halo-text-body); }
.pbx-content .mud-typography-body2, .pbx-dialog .mud-typography-body2 { color: var(--halo-text-secondary); font-size: var(--halo-text-body); }
.pbx-content .mud-typography-caption, .pbx-dialog .mud-typography-caption { color: var(--halo-text-secondary); font-size: var(--halo-text-sm); }
.pbx-content .mud-typography-h6, .pbx-dialog .mud-typography-h6 { color: var(--halo-text); font-family: var(--halo-font-display); font-size: var(--halo-text-title); font-weight: 700; letter-spacing: -0.02em; }
.pbx-content .halo-table-shell, .pbx-dialog .halo-table-shell { overflow: auto; max-width: 100%; }
.pbx-content .halo-table td, .pbx-dialog .halo-table td { font-variant-numeric: tabular-nums; }
.pbx-content .halo-table th, .pbx-dialog .halo-table th { white-space: nowrap; }
.pbx-content .halo-table td { min-width: 88px; }
.pbx-content .halo-table td a, .pbx-content .pbx-object-link { color: var(--halo-ink-brand); }
.pbx-content :focus-visible, .pbx-dialog :focus-visible { outline: 2px solid var(--halo-focus-color); outline-offset: 2px; }
.pbx-warning-row { display: flex; gap: var(--halo-3); align-items: center; padding: var(--halo-2) 0; }
.pbx-warning-row .halo-alert { flex: 1; }
.pbx-call-path { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); list-style: none; padding: 0; margin: 0; gap: var(--halo-4); }
.pbx-call-path li { display: grid; align-content: start; gap: var(--halo-2); border-left: 2px solid var(--halo-hairline-strong); padding-left: var(--halo-3); }
.pbx-call-path li > span { color: var(--halo-ink-brand); font-variant-numeric: tabular-nums; font-size: var(--halo-text-sm); }
.pbx-inventory-summary { display: flex; gap: var(--halo-6); flex-wrap: wrap; }
.pbx-inventory-summary span { display: grid; gap: var(--halo-1); color: var(--halo-text-secondary); }
.pbx-inventory-summary strong { color: var(--halo-text); font-family: var(--halo-font-display); font-size: var(--halo-text-title); font-weight: 800; font-variant-numeric: tabular-nums; }
.pbx-content :is(.ext-shell, .recording-shell, .pn-search-stack, .pn-ownership, .moh-form, .sub-status-cell) { display: grid; gap: var(--halo-4); min-width: 0; }
.pbx-content :is(.ext-dialplan, .ext-recording-policy, .ext-directory, .recording-panel) { padding: var(--halo-5); background: var(--halo-surface); border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-lg); min-width: 0; }
.pbx-content :is(.ext-section-head, .recording-panel-head, .pn-ownership-summary, .pn-result-toolbar, .pn-result-main, .ext-range-actions, .moh-form-actions) { display: flex; align-items: center; justify-content: space-between; gap: var(--halo-3); flex-wrap: wrap; }
.pbx-content :is(.ext-section-head, .recording-panel-head) { margin-bottom: var(--halo-4); }
.pbx-content :is(.ext-eyebrow, .recording-eyebrow, .recording-count) { color: var(--halo-text-tertiary); font-size: var(--halo-text-sm); }
.pbx-content :is(.ext-toolbar, .recording-extension-toolbar, .q-card-toolbar, .ir-card-toolbar, .rg-card-toolbar, .ivr-card-toolbar, .vm-card-toolbar, .bl-card-toolbar) { display: flex; align-items: end; gap: var(--halo-3); flex-wrap: wrap; padding-bottom: var(--halo-4); }
.pbx-content :is(.ext-toolbar, .recording-extension-toolbar) .halo-field { flex: 1; min-width: 160px; }
.pbx-content :is(.ext-select, .pn-page-button, .ext-icon-btn) { background: var(--halo-surface); color: var(--halo-text); border: 1px solid var(--halo-hairline-strong); border-radius: var(--halo-radius-md); padding: var(--halo-2) var(--halo-3); min-height: 44px; font: inherit; transition: background var(--halo-duration-1) var(--halo-ease-out), border-color var(--halo-duration-1) var(--halo-ease-out), color var(--halo-duration-1) var(--halo-ease-out); }
.pbx-content :is(.ext-policy-controls, .ext-range-grid, .recording-policy-grid, .pn-search-grid, .moh-form-grid) { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--halo-4); align-items: end; }
.pbx-content :is(.ext-policy-controls, .ext-range-grid) > .halo-btn { justify-self: start; }
.pbx-content :is(.ext-toggle-row, .recording-toggle-row, .moh-toggle-row) { display: flex; align-items: center; justify-content: space-between; gap: var(--halo-3); padding: var(--halo-3) 0; }
.pbx-content :is(.recording-toggle-row, .recording-extension, .ext-assignment-cell, .sub-primary-cell, .pn-result-main) > div, .pbx-content :is(.recording-extension, .ext-assignment-cell, .sub-primary-cell) { display: grid; gap: var(--halo-1); }
.pbx-content :is(.ext-message, .recording-message) { display: flex; align-items: center; gap: var(--halo-3); border: 1px solid var(--halo-hairline-strong); padding: var(--halo-4); border-radius: var(--halo-radius-md); background: var(--halo-surface); }
.pbx-content :is(.ext-message-error, .recording-message-error) { color: var(--halo-ink-critical); }
.pbx-content :is(.ext-message-ok, .recording-message-ok) { color: var(--halo-ink-success); }
.pbx-content :is(.pn-guidance-pill-wrap, .pn-capability-row, .pn-page-controls, .pn-ownership-actions, .ir-summary, .moh-form-toggles) { display: flex; flex-wrap: wrap; gap: var(--halo-2); align-items: center; }
.pbx-content :is(.pn-guidance-pill, .ir-summary-pill, .ext-limit-pill, .recording-pill, .ext-assignment-pill, .moh-default-badge) { display: inline-flex; padding: var(--halo-1) var(--halo-2); background: var(--halo-surface-sunken); color: var(--halo-text-secondary); border-radius: var(--halo-radius-sm); font-size: var(--halo-text-sm); font-variant-numeric: tabular-nums; }
.pbx-content .pn-guidance { display: flex; justify-content: space-between; gap: var(--halo-4); align-items: center; }
.pbx-content :is(.pn-guidance-title, .pn-result-phone, .ext-number, .ext-name, .q-name, .ir-name, .rg-name, .ivr-name, .vm-name, .moh-name, .sub-name) { color: var(--halo-text); font-weight: 600; }
.pbx-content :is(.pn-result-phone, .ext-number) { font-family: var(--halo-font-mono); font-variant-numeric: tabular-nums; }
.pbx-content :is(.ext-limit-warn, .sub-warning) { color: var(--halo-ink-warning); }
.pbx-content .ext-limit-full { color: var(--halo-ink-critical); }
.pbx-content :is(.ext-no-results, .recording-empty, .q-no-results, .ir-no-results, .rg-no-results, .ivr-no-results, .vm-no-results, .bl-no-results) { display: grid; justify-items: center; gap: var(--halo-3); padding: var(--halo-10) var(--halo-4); color: var(--halo-text-secondary); }
.pbx-content .pn-result-list { display: grid; gap: var(--halo-3); }
.pbx-content .pn-result-card { display: flex; justify-content: space-between; align-items: center; gap: var(--halo-3); padding: var(--halo-4); background: var(--halo-surface); border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-md); transition: border-color var(--halo-duration-1) var(--halo-ease-out), box-shadow var(--halo-duration-1) var(--halo-ease-out), transform var(--halo-duration-2) var(--halo-ease-spring); }
.pbx-content .pn-result-card:hover { border-color: var(--halo-hairline-strong); box-shadow: var(--halo-shadow-2); transform: translateY(-1px); }
.pbx-content .recording-pager { display: flex; align-items: center; justify-content: space-between; gap: var(--halo-3); padding-top: var(--halo-4); flex-wrap: wrap; }
.pbx-savebar, .pbx-content .recording-actions { display: flex; justify-content: flex-end; align-items: center; gap: var(--halo-3); position: sticky; bottom: var(--halo-3); padding: var(--halo-4); border: 1px solid var(--halo-hairline-strong); border-radius: var(--halo-radius-lg); background: var(--halo-surface); z-index: 2; box-shadow: var(--halo-shadow-1); }
.pbx-savebar > span { margin-right: auto; color: var(--halo-text-secondary); }
.pbx-disclosure { border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-lg); background: var(--halo-surface); }
.pbx-disclosure > summary { cursor: pointer; padding: var(--halo-4); color: var(--halo-text); font-weight: 600; }
.pbx-disclosure[open] > summary { border-bottom: 1px solid var(--halo-hairline); }
.pbx-disclosure > section { border: 0 !important; }
/* Portalled dialogs share this scope with nested editors. */
.pbx-dialog .dialog-header { display: flex; gap: var(--halo-3); align-items: center; }
.pbx-dialog .dialog-header > .mud-icon-root { color: var(--halo-ink-brand); }
.pbx-dialog .dialog-form { display: grid; gap: var(--halo-4); min-width: 0; }
.pbx-dialog .dialog-actions { display: flex; align-items: center; justify-content: flex-end; width: 100%; gap: var(--halo-3); }
.pbx-dialog .form-section-label { padding-bottom: var(--halo-2); border-bottom: 1px solid var(--halo-hairline); margin-top: var(--halo-2); }
.pbx-dialog .form-section-label .mud-typography { color: var(--halo-text); font-weight: 600; }
.pbx-dialog .form-toggle-row { display: flex; align-items: center; justify-content: space-between; gap: var(--halo-3); }
.pbx-dialog :is(.form-grid--two, .rdp-picker, .time-row) { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--halo-4); align-items: start; }
.pbx-dialog .rdp-step { min-width: 0; }
.pbx-dialog :is(.time-condition-editor, .member-editor, .member-list, .ivr-option-editor, .ivr-option-list, .pn-confirm-body) { display: grid; gap: var(--halo-3); }
.pbx-dialog :is(.member-editor-header, .ivr-option-header, .ivr-option-card-header, .pn-confirm-cost-row) { display: flex; align-items: center; justify-content: space-between; gap: var(--halo-3); }
.pbx-dialog :is(.voice-helper, .tc-section-label, .queue-dialog-hint) { color: var(--halo-text-secondary); font-size: var(--halo-text-sm); }
.pbx-dialog .voice-helper { display: flex; align-items: center; gap: var(--halo-1); }
.pbx-dialog .member-row { display: flex; gap: var(--halo-3); align-items: center; border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-md); padding: var(--halo-3); }
.pbx-dialog .member-info { display: grid; gap: var(--halo-1); flex: 1; }
.pbx-dialog .member-ext-number { font-family: var(--halo-font-mono); font-weight: 600; font-variant-numeric: tabular-nums; }
.pbx-dialog .member-fields { display: flex; gap: var(--halo-2); width: 210px; }
.pbx-dialog .member-fields > * { flex: 1; min-width: 0; }
.pbx-dialog .drag-handle { cursor: grab; color: var(--halo-text-tertiary); }
.pbx-dialog .member-row--drop-target { border-color: var(--halo-focus-color); }
.pbx-dialog :is(.day-toggles, .ivr-add-row, .pn-confirm-capabilities) { display: flex; gap: var(--halo-2); flex-wrap: wrap; }
.pbx-dialog :is(.day-pill, .ivr-digit-button) { min-width: 44px; min-height: 44px; border: 1px solid var(--halo-hairline-strong); border-radius: var(--halo-radius-md); background: var(--halo-surface); color: var(--halo-text); padding: var(--halo-2); font: inherit; cursor: pointer; transition: background var(--halo-duration-1) var(--halo-ease-out), border-color var(--halo-duration-1) var(--halo-ease-out), color var(--halo-duration-1) var(--halo-ease-out), transform var(--halo-duration-2) var(--halo-ease-spring); }
.pbx-dialog :is(.day-pill, .ivr-digit-button):not(:disabled):active { transform: scale(.97); }
.pbx-dialog .day-pill--active { color: var(--halo-ink-brand); background: rgb(var(--halo-tone-brand) / .12); border-color: var(--halo-focus-color); }
.pbx-dialog .ivr-digit-button:disabled { color: var(--halo-text-tertiary); background: var(--halo-surface-sunken); cursor: default; }
.pbx-dialog .ivr-option-card { padding: var(--halo-4); border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-md); display: grid; gap: var(--halo-3); }
.pbx-dialog .ivr-digit-badge { font-family: var(--halo-font-mono); font-variant-numeric: tabular-nums; font-size: var(--halo-text-title); color: var(--halo-ink-brand); }
.pbx-dialog :is(.ivr-audio-upload-box, .rdp-audio-upload), .pbx-content .moh-upload-box { display: grid; gap: var(--halo-2); border: 1px dashed var(--halo-hairline-strong); border-radius: var(--halo-radius-md); padding: var(--halo-4); color: var(--halo-text-secondary); }
.pbx-content audio, .pbx-dialog audio { max-width: 100%; height: 38px; }
.pbx-dialog .pn-confirm-number { display: grid; gap: var(--halo-2); padding-bottom: var(--halo-4); border-bottom: 1px solid var(--halo-hairline); }
.pbx-dialog .pn-confirm-costs { display: grid; gap: var(--halo-3); }
.pbx-dialog .pn-confirm-cost-row strong { font-variant-numeric: tabular-nums; }
.pbx-editor-tabs { display: flex; flex-wrap: wrap; gap: var(--halo-2); padding-bottom: var(--halo-3); border-bottom: 1px solid var(--halo-hairline); position: sticky; top: 0; background: var(--halo-surface); z-index: 1; }
.pbx-editor-tabs button { font: inherit; min-height: 38px; border: 0; padding: var(--halo-2) var(--halo-3); border-radius: var(--halo-radius-sm); background: transparent; color: var(--halo-text-secondary); cursor: pointer; transition: background var(--halo-duration-1) var(--halo-ease-out), color var(--halo-duration-1) var(--halo-ease-out); }
.pbx-editor-tabs button:hover { color: var(--halo-text); background: var(--halo-surface-hover); }
.pbx-editor-tabs button[aria-pressed="true"] { background: rgb(var(--halo-tone-brand) / .12); color: var(--halo-ink-brand); font-weight: 600; }
.pbx-editor-section { display: grid; gap: var(--halo-4); }
.pbx-editor-section[hidden] { display: none; }
.pbx-dialog .pbx-supervisor-grid { min-width: 800px; }
.pbx-dialog .pbx-supervisor-grid .halo-switch__label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.pbx-content .halo-switch, .pbx-dialog .halo-switch { min-height: 44px; }
.pbx-content fieldset, .pbx-dialog fieldset { border: 0; padding: 0; margin: 0; min-width: 0; }
@media (max-width: 1150px) {
    .pbx-workspace { grid-template-columns: 180px minmax(0, 1fr); gap: var(--halo-4); }
    .pbx-call-path { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
    .pbx-workspace { grid-template-columns: minmax(0, 1fr); }
    .pbx-navigation { position: static; }
    .pbx-navigation__groups, .pbx-navigation__hint { display: none; }
    .pbx-mobile-navigation { display: grid; margin-top: var(--halo-3); }
    .pbx-content :is(.ext-range-grid, .ext-policy-controls, .recording-policy-grid, .pn-search-grid, .moh-form-grid), .pbx-dialog :is(.form-grid--two, .rdp-picker, .time-row) { grid-template-columns: minmax(0, 1fr); }
    .pbx-warning-row, .pbx-content .pn-guidance { align-items: stretch; flex-direction: column; }
    .pbx-dialog .member-row { flex-wrap: wrap; }
    .pbx-dialog .member-fields { width: 100%; }
    .pbx-savebar, .pbx-content .recording-actions { position: static; flex-wrap: wrap; }
    .pbx-savebar > span { flex-basis: 100%; }
}
@media (max-width: 480px) { .pbx-call-path { grid-template-columns: minmax(0, 1fr); } }
.pbx-destination { color: var(--halo-text-secondary); overflow-wrap: anywhere; }
.pbx-content .halo-operational-grid { width: 100%; }
.pbx-content .ir-name-wrap { display: grid; gap: var(--halo-1); }
.pbx-content .ir-flow-hint { display: none; }
.pbx-content .pbx-inset { padding: var(--halo-4); border: 1px solid var(--halo-hairline); border-radius: var(--halo-radius-md); background: var(--halo-surface); display: grid; gap: var(--halo-3); }
.pbx-content :is(.ext-message, .recording-message) { font-size: var(--halo-text-body); }
@media (prefers-reduced-motion: reduce) {
    .pbx-navigation__link, .pbx-editor-tabs button, .pbx-content .pn-result-card, .pbx-content :is(.ext-select, .pn-page-button, .ext-icon-btn), .pbx-dialog :is(.day-pill, .ivr-digit-button) { transition: none; }
    .pbx-content .pn-result-card:hover, .pbx-dialog :is(.day-pill, .ivr-digit-button):not(:disabled):active { transform: none; }
}
