.master-detail { display: grid; grid-template-columns: minmax(18rem, 0.9fr) minmax(0, 1.4fr); gap: 1.5rem; align-items: start; }
.doctor-toolbar { display: grid; grid-template-columns: minmax(14rem, 1fr) minmax(9rem, auto) auto auto; gap: .5rem; margin: 1rem 0; }
.doctor-master-detail { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(20rem, .75fr); gap: 1rem; align-items: start; }
.doctor-run-table .link-button { text-align: left; }
.doctor-run-table tr.is-selected { background: var(--surface-muted); }
.doctor-page-footer { display: flex; justify-content: space-between; align-items: center; gap: .75rem; margin-top: .75rem; }
.doctor-page-footer nav { display: flex; gap: .5rem; }
.doctor-detail { position: sticky; top: 1rem; min-width: 0; padding: 1rem; background: var(--surface-muted); border: 1px solid var(--line); border-radius: .6rem; }
.doctor-detail h3, .doctor-detail h4 { margin-top: 0; }
.doctor-facts { display: grid; gap: .45rem; margin: 1rem 0; }
.doctor-facts div { display: grid; grid-template-columns: 5rem minmax(0, 1fr); gap: .5rem; }
.doctor-facts dt { font-weight: 700; }
.doctor-facts dd { margin: 0; overflow-wrap: anywhere; }
.doctor-step-list { display: grid; gap: .45rem; padding-left: 1.5rem; }
.doctor-step { padding: .55rem; border-left: .25rem solid var(--line); background: var(--surface); }
.doctor-step strong { display: inline-block; margin-right: .5rem; }
.doctor-step.is-success { border-left-color: var(--status-success-fg); }
.doctor-step.is-danger { border-left-color: var(--status-danger-fg); }
.doctor-step.is-progress { border-left-color: var(--status-progress-fg); }
.doctor-topic-table { margin-top: 1rem; }
.doctor-guidance { margin-top: 1rem; }
.dashboard-notice-master-detail { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(16rem, .75fr); gap: 1rem; margin-top: 1rem; }
.dashboard-notice-table-heading, .dashboard-notice-row { display: grid; grid-template-columns: minmax(7rem, 1.35fr) .7fr .8fr auto minmax(8rem, 1fr); gap: .6rem; align-items: center; }
.dashboard-notice-table-heading { padding: 0 .75rem .45rem; color: var(--muted); font-size: .8125rem; font-weight: 700; }
.dashboard-notice-row { width: 100%; min-height: 44px; padding: .75rem; color: var(--ink); background: transparent; border: 0; border-top: 1px solid var(--line); border-radius: 0; font-weight: 400; text-align: left; }
.dashboard-notice-row:hover:not(:disabled), .dashboard-notice-row[aria-pressed="true"] { color: var(--ink); background: var(--accent-soft); border-color: var(--line); }
.dashboard-notice-title, .dashboard-notice-source, .dashboard-notice-topic, .dashboard-notice-time { min-width: 0; overflow-wrap: anywhere; }
.dashboard-notice-source, .dashboard-notice-topic, .dashboard-notice-time { color: var(--muted); font-size: .82rem; }
.dashboard-notice-time { white-space: normal; }
.dashboard-selected-notice-detail { padding: 1rem; background: var(--surface-muted); border: 1px solid var(--line); border-radius: .6rem; }
.dashboard-selected-notice-heading { display: grid; gap: .6rem; }
.dashboard-selected-notice-heading h4 { margin: 0; overflow-wrap: anywhere; }
.dashboard-selected-notice-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .75rem; margin: 1rem 0; }
.dashboard-selected-notice-meta div { min-width: 0; }
.dashboard-selected-notice-meta dt { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.dashboard-selected-notice-meta dd { margin: .2rem 0 0; overflow-wrap: anywhere; }
.dashboard-selected-notice-body { padding: .75rem; overflow-wrap: anywhere; white-space: pre-wrap; background: var(--surface); border: 1px solid var(--line); border-radius: .45rem; }
.dashboard-selected-notice-detail .timeline { margin: 1rem 0; }
.dashboard-failure-row { display: grid; gap: .3rem; width: 100%; min-height: 44px; padding: .75rem; color: var(--ink); text-align: left; background: transparent; border: 0; border-top: 1px solid var(--line); border-radius: 0; font-weight: 400; }
.dashboard-failure-row:hover:not(:disabled) { background: var(--accent-soft); }
.dashboard-failure-heading { display: flex; align-items: center; justify-content: space-between; gap: .6rem; }
.dashboard-failure-room { min-width: 0; overflow-wrap: anywhere; }
.dashboard-failure-path, .dashboard-failure-guidance, .dashboard-failure-time { min-width: 0; color: var(--muted); font-size: .82rem; overflow-wrap: anywhere; }
.notice-compose-error-summary { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: 0 0 1rem; }
.notice-compose-form { grid-template-columns: minmax(0, 1.15fr) minmax(22rem, .85fr); gap: 0; padding: 0; overflow: clip; background: #f8fafc; }
.notice-compose-fields, .notice-compose-review { display: grid; align-content: start; gap: .75rem; min-width: 0; }
.notice-compose-fields h3, .notice-compose-review h3 { margin: 0; }
.rich-compose-editor { padding: 1.25rem; background: var(--surface); }
.rich-compose-heading, .rich-preview-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.rich-compose-eyebrow { margin: 0 0 .2rem; color: var(--accent); font-size: .8125rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.rich-mode-toggle { display: inline-flex; align-items: center; gap: .55rem; padding: .3rem .45rem .3rem .7rem; color: var(--muted); background: var(--surface-muted); border: 1px solid var(--line); border-radius: 999px; font-size: .8125rem; white-space: nowrap; }
/* Same reason as .topic-management-toggle: a 44px-tall pill leaves the knob floating at
   the top. The enclosing .rich-mode-toggle label carries the tap area. */
.rich-mode-toggle input { appearance: none; width: 2.7rem; min-height: 1.5rem; margin: 0; padding: 0; background: #cbd5e1; border: 0; border-radius: 999px; box-shadow: inset 0 0 0 1px rgb(15 23 42 / .08); }
.rich-mode-toggle input::before { display: block; width: 1.15rem; height: 1.15rem; margin: .175rem; background: #fff; border-radius: 999px; box-shadow: 0 1px 3px rgb(15 23 42 / .28); content: ""; transition: transform .16s ease; }
.rich-mode-toggle input:checked { background: #0f8a83; }
.rich-mode-toggle input:checked::before { transform: translateX(1.2rem); }
/* 40px: these tabs sit directly on the editor's top border, and a 44px strip reads as a
   toolbar competing with the editor it labels. Above the 24px WCAG 2.2 minimum. */
.notice-compose-review { padding: 1.25rem; background: #f1f5f9; border-left: 1px solid var(--line); }
.telegram-preview-stage { display: grid; min-height: 31rem; padding: 1.4rem; place-items: center; background: #dcebd7; border: 1px solid #c8dbc3; border-radius: .75rem; }
.rich-preview-empty { max-width: 20rem; margin: 0; color: #526270; text-align: center; }
.rich-preview-disclaimer { margin: 0; font-size: .8125rem; }
.notice-readiness-list { display: grid; gap: .35rem; margin: 0; padding: 0; list-style: none; }
.notice-readiness-list li { display: flex; align-items: center; justify-content: space-between; gap: .5rem; padding: .35rem .6rem; background: var(--surface-muted); border-radius: .4rem; font-size: .8125rem; }
.notice-expected-targets { margin: .2rem 0 0; font-size: .875rem; font-weight: 800; color: var(--ink); }

.notice-compose-inspector { display: grid; gap: 1rem; margin-top: 1.25rem; }
.inspector-card { display: grid; gap: .75rem; padding: 1.1rem; background: var(--surface); border: 1px solid var(--console-border); border-radius: .75rem; box-shadow: 0 1px 3px rgb(15 23 42 / .04); }
.inspector-card-header { display: grid; gap: .2rem; }
.inspector-card-header h4 { margin: 0; font-size: .925rem; font-weight: 800; color: var(--ink); }
.inspector-card-header .muted { margin: 0; font-size: .8125rem; }

.rich-review-topic { display: grid; gap: .35rem; min-width: 0; }
.rich-review-topic > label { font-size: .8125rem; font-weight: 750; color: var(--ink); }
.rich-review-topic select { width: 100%; min-height: 44px; margin: 0; background: var(--surface); border: 1px solid var(--console-border); border-radius: .45rem; }

.notice-target-field { display: grid; min-width: 0; gap: .55rem; margin: 0; padding: 0; background: transparent; border: 0; }
.notice-target-field > legend { padding: 0; font-size: .8125rem; font-weight: 750; color: var(--ink); }
.notice-target-modes { display: grid; grid-template-columns: repeat(3, 1fr); gap: .3rem; padding: .25rem; background: var(--surface-muted); border: 1px solid var(--line); border-radius: .55rem; }
.notice-target-mode-pill { position: relative; display: flex; align-items: center; justify-content: center; min-height: 44px; margin: 0; padding: .35rem .5rem; cursor: pointer; border-radius: .4rem; text-align: center; transition: background .15s ease, color .15s ease, box-shadow .15s ease; user-select: none; }
.notice-target-mode-pill input { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; }
.notice-target-mode-pill .pill-label { font-size: .8125rem; font-weight: 700; color: var(--muted); line-height: 1.25; }
.notice-target-mode-pill:hover { background: color-mix(in srgb, var(--surface) 60%, transparent); }
.notice-target-mode-pill:has(input:checked) { background: var(--surface); box-shadow: 0 1px 3px rgb(15 23 42 / .12); }
.notice-target-mode-pill:has(input:checked) .pill-label { color: var(--accent); font-weight: 800; }
.notice-target-mode-pill:has(input:focus-visible) { outline: 2px solid var(--accent); outline-offset: 1px; }

.notice-target-selected { display: inline-flex; align-items: center; gap: .35rem; margin: 0; padding: .45rem .7rem; background: var(--surface-muted); border: 1px solid var(--console-border); border-radius: .45rem; font-size: .8125rem; font-weight: 750; color: var(--ink); overflow-wrap: anywhere; }
.notice-target-panel { display: grid; gap: .45rem; padding: .75rem; background: var(--surface-muted); border: 1px solid var(--console-border); border-radius: .55rem; }
.notice-target-panel > label { font-size: .8125rem; font-weight: 750; }
.notice-target-panel > input { width: 100%; min-height: 44px; margin: 0; background: var(--surface); border: 1px solid var(--console-border); border-radius: .45rem; }
.notice-target-panel > .muted { margin: 0; font-size: .8125rem; }
.notice-target-list, .notice-target-children { display: grid; gap: .35rem; margin: 0; padding: 0; list-style: none; }
.notice-target-list { max-height: 14rem; padding: .35rem; overflow-y: auto; background: var(--surface); border: 1px solid var(--line); border-radius: .45rem; }
.notice-target-children { margin: .35rem 0 0 .75rem; padding-left: .65rem; border-left: 2px solid var(--line); }
.notice-target-room { min-width: 0; }
.notice-target-room-select, .notice-target-expand { min-height: 44px; padding: .4rem .6rem; font-size: .8125rem; text-align: left; }
.notice-target-room-select { width: 100%; color: var(--ink); background: var(--surface); border-color: var(--console-border); border-radius: .35rem; overflow-wrap: anywhere; }
.notice-target-room-select[aria-pressed="true"] { color: #fff; background: var(--accent); border-color: var(--accent); font-weight: 750; }
.notice-target-room-select:disabled { color: var(--muted); background: var(--surface-muted); opacity: 1; }
.notice-target-expand { margin-top: .25rem; color: var(--accent); background: transparent; border-color: transparent; }
.notice-target-room-reason { display: block; margin: .2rem .35rem 0; color: var(--muted); font-size: .8125rem; }
.notice-target-more { width: 100%; min-height: 44px; font-size: .8125rem; }

.inspector-target-action-row { display: flex; align-items: center; justify-content: space-between; gap: .75rem; flex-wrap: wrap; padding-bottom: .65rem; border-bottom: 1px solid var(--line); }
.rich-review-targets, .rich-review-readiness { min-width: 0; }
.rich-review-targets > span, .rich-review-readiness > span { color: var(--muted); font-size: .8125rem; font-weight: 750; }
.rich-review-targets .muted { margin: .2rem 0 0; font-size: .8125rem; }
.inspector-verify-button { min-height: 44px; padding: 0 .9rem; font-weight: 750; font-size: .8125rem; white-space: nowrap; }

.notice-compose-actions { position: sticky; bottom: 0; z-index: 4; grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; padding: .85rem 1.25rem; background: color-mix(in srgb, var(--surface) 98%, transparent); border-top: 1px solid var(--line); backdrop-filter: blur(8px); box-shadow: 0 -2px 10px rgb(15 23 42 / .04); }
.notice-self-send-action { display: flex; align-items: center; gap: .75rem; }
.notice-self-send-action > button { min-height: 44px; padding: 0 1rem; font-weight: 700; white-space: nowrap; }
.notice-self-send-action > p { margin: 0; color: var(--muted); font-size: .8125rem; }
.notice-schedule-action { display: flex; align-items: center; gap: .85rem; margin-left: auto; }
.notice-schedule-action > button { min-height: 44px; padding: 0 1.35rem; font-size: .925rem; font-weight: 800; border-radius: .5rem; }
.notice-disabled-reason { margin: 0; color: var(--status-neutral-fg); font-size: .8125rem; text-align: right; }
.notice-settings-details { margin-top: 1rem; }
.notice-settings-details > summary { display: flex; align-items: center; min-height: 44px; cursor: pointer; font-weight: 700; }
.notice-settings-details[open] > summary { margin-bottom: 1rem; }
.topic-workspace-controls { display: grid; grid-template-columns: minmax(12rem, 1fr) auto; gap: .5rem 1rem; align-items: end; margin-bottom: 1rem; }
.topic-workspace-controls > label { grid-column: 1; font-weight: 700; }
.topic-workspace-controls > input { grid-column: 1; margin: 0; }
.topic-filter-group { display: flex; grid-column: 2; grid-row: 1 / span 2; flex-wrap: wrap; gap: .4rem; }
.topic-filter-group button { min-height: 44px; color: var(--ink); background: var(--surface); border-color: var(--console-border-strong); }
.topic-filter-group button[aria-pressed="true"] { color: #fff; background: var(--accent); border-color: var(--accent); }
.topic-management-master-detail { grid-template-columns: minmax(0, 1fr); }
.topic-management-table { padding: 0; overflow: visible; }
.topic-master-heading { display: flex; align-items: center; gap: .75rem; padding: 1rem; border-bottom: 1px solid var(--console-border); }
.topic-master-title { position: relative; display: flex; align-items: center; gap: .45rem; }
.topic-master-heading h3 { margin: 0; }
/* The single definition of this row. It used to be split across styles.css (a 5-column
   grid for a header/row pair) and here, with only `align-items` surviving from there --
   so reading either file alone gave the wrong answer about the rendered result. */
.topic-management-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .35rem .75rem; align-items: center; width: 100%; min-height: 44px; padding: .75rem .85rem; color: var(--ink); background: var(--surface); border: 1px solid var(--console-border); border-radius: .55rem; text-align: left; }
.topic-management-row:last-child { border-radius: .55rem; }
.topic-management-row:hover:not(:disabled), .topic-management-row[aria-pressed="true"] { color: var(--ink); background: var(--accent-soft); border-color: var(--console-border); }
.topic-management-row.needs-attention { border-left: 3px solid var(--status-warning-fg); }
.topic-row-name { min-width: 0; overflow-wrap: anywhere; }
.topic-row-use-state { justify-self: end; padding: .2rem .55rem; border-radius: 999px; font-size: .8125rem; font-weight: 750; white-space: nowrap; }
.topic-row-use-state.is-active { color: #166534; background: #dcfce7; }
.topic-row-use-state.is-inactive { color: #475569; background: #e2e8f0; }
.topic-row-route-state { grid-column: 1 / -1; color: var(--muted); font-size: .8125rem; font-weight: 700; overflow-wrap: anywhere; }
.topic-selected-detail { min-width: 0; }
.topic-selected-heading h3, .topic-routes-heading, .topic-recent-heading { margin: 0; }
.topic-selected-heading { margin-bottom: 1rem; }
.topic-detail-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1.25rem; }
.topic-detail-actions label, .topic-detail-actions .topic-edit-guidance { flex-basis: 100%; }
.topic-route-table-wrap { max-width: 100%; max-height: 42rem; margin-top: .75rem; overflow: auto; border: 1px solid var(--console-border); border-radius: .55rem; }
.topic-route-table { width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
.topic-route-table th, .topic-route-table td { padding: .7rem .65rem; border-bottom: 1px solid var(--console-border); text-align: left; vertical-align: top; }
.topic-route-table th:nth-child(1) { width: 21%; }
.topic-route-table th:nth-child(2) { width: 29%; }
.topic-route-table th:nth-child(3) { width: 15%; }
.topic-route-table th:nth-child(4) { width: 35%; }
.topic-route-table th { position: sticky; z-index: 1; top: 0; color: var(--muted); background: var(--surface-muted); font-size: .8125rem; }
.topic-route-table tbody tr:last-child td { border-bottom: 0; }
.topic-route-table tbody tr:hover { background: var(--accent-soft); }
.topic-route-room > strong, .topic-route-room > .topic-room-role { display: block; }
.topic-route-room > .topic-room-role { margin-top: .2rem; }
.topic-route-table .status-badge { margin-left: 0; }
.topic-route-combined-status > div { display: grid; grid-template-columns: 1.8rem auto; gap: .25rem; align-items: center; }
.topic-route-combined-status > div + div { margin-top: .35rem; }
.topic-route-combined-status > div > span:first-child { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.topic-route-table td { overflow-wrap: anywhere; }
.topic-route-guidance-cell .technical-details summary { white-space: nowrap; }
.topic-route-guidance-cell .technical-details code { display: block; min-width: 18rem; margin-top: .4rem; overflow-wrap: anywhere; white-space: pre-wrap; }
.topic-route-retry, .topic-room-verify { margin-top: .5rem; white-space: nowrap; }
.topic-room-verify + .topic-route-retry { margin-left: .4rem; }
.topic-room-role { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.topic-route-guidance { margin: 0; color: var(--ink); font-weight: 650; }
.topic-routes-heading, .topic-recent-heading { margin-top: 1.25rem; }
.topic-routes-heading-row { display: flex; flex-wrap: wrap; gap: .35rem 1rem; align-items: center; margin-top: 1.25rem; }
.topic-routes-heading-row .topic-routes-heading { margin-top: 0; }
.topic-route-summary { margin: 0; }
.topic-room-visibility-toggle { margin-left: auto; }
.topic-recheck-control { display: grid; gap: .35rem; justify-items: end; max-width: 24rem; }
.topic-recheck-help { margin: 0; font-size: .8125rem; line-height: 1.4; text-align: right; }
.topic-technical-guidance { margin: .75rem 0 0; }
.topic-create-drawer { position: fixed; z-index: 20; inset: 0 0 0 auto; width: min(28rem, 92vw); padding: 1.5rem; overflow-y: auto; background: var(--surface); border-left: 1px solid var(--console-border); box-shadow: -12px 0 30px rgb(15 23 42 / .18); }
.topic-create-drawer .topic-create-form { grid-template-columns: 1fr; }
.topic-owner-help { margin: -.35rem 0 .35rem; font-size: .8125rem; }
.network-sub-source-badge { display: inline-flex; width: fit-content; align-items: center; padding: .1rem .45rem; color: var(--status-info-fg); background: var(--accent-soft); border: 1px solid var(--status-info-fg); border-radius: 999px; font-size: .8125rem; font-weight: 750; white-space: nowrap; }
.network-node-button .network-sub-source-badge { justify-self: start; }
.network-lazy-identity .network-sub-source-badge,
.network-issue-identity .network-sub-source-badge { justify-self: start; }

.dispatch-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.dispatch-summary-card { display: grid; gap: .25rem; padding: 1rem; background: var(--surface); border: 1px solid var(--console-border); border-radius: .55rem; }
.dispatch-summary-card span { color: var(--muted); font-size: .82rem; font-weight: 700; }
.dispatch-summary-card strong { font-size: 1.6rem; }
.dispatch-summary-card small { color: var(--muted); }
.dispatch-workspace-controls { display: grid; grid-template-columns: minmax(13rem, 1fr) minmax(9rem, .45fr) minmax(9rem, .45fr) auto; gap: .45rem .75rem; align-items: end; margin-bottom: 1rem; }
.dispatch-workspace-controls > label { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.dispatch-workspace-controls > label[for="notice-search-input"] { grid-column: 1; grid-row: 2; }
.dispatch-workspace-controls > label[for="notice-source-filter"] { grid-column: 2; grid-row: 2; }
.dispatch-workspace-controls > label[for="notice-topic-filter"] { grid-column: 3; grid-row: 2; }
.dispatch-workspace-controls > input { grid-column: 1; grid-row: 3; margin: 0; }
.dispatch-workspace-controls > select { grid-row: 3; margin: 0; }
.dispatch-workspace-controls > select[id="notice-source-filter"] { grid-column: 2; }
.dispatch-workspace-controls > select[id="notice-topic-filter"] { grid-column: 3; }
.dispatch-workspace-controls > button { grid-column: 4; grid-row: 3; }
.dispatch-workspace-controls > button { min-height: 44px; }
.dispatch-group-tabs { display: flex; grid-column: 1 / -1; flex-wrap: wrap; gap: .4rem; margin-bottom: .45rem; }
.dispatch-group-tabs button { min-height: 44px; color: var(--ink); background: var(--surface); border-color: var(--console-border-strong); }
.dispatch-group-tabs button[aria-pressed="true"] { color: #fff; background: var(--accent); border-color: var(--accent); }
.dispatch-master-detail { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(18rem, .7fr); gap: 1rem; align-items: start; }
.dispatch-master { min-width: 0; }
.dispatch-detail-column { position: sticky; top: 1rem; min-width: 0; }
.dispatch-table { width: 100%; min-width: 54rem; border-collapse: collapse; font-size: .84rem; }
.dispatch-table th, .dispatch-table td { padding: .7rem .6rem; border-bottom: 1px solid var(--console-border); text-align: left; vertical-align: middle; }
.dispatch-table th { color: var(--muted); background: var(--surface-muted); font-size: .8125rem; }
.dispatch-table tr.is-selected { background: var(--accent-soft); }
.dispatch-row-select { display: block; width: 100%; min-height: 44px; padding: .35rem .15rem; color: var(--ink); background: transparent; border: 0; text-align: left; font-weight: 700; overflow-wrap: anywhere; }
.dispatch-row-select:hover:not(:disabled) { color: var(--accent); background: transparent; }
.dispatch-attachment-count, .dispatch-target-scope, .dispatch-time-label, .dispatch-table time { display: block; color: var(--muted); font-size: .8125rem; overflow-wrap: anywhere; }
.dispatch-result { min-width: 9rem; }
.dispatch-detail-column .notice-detail { margin-top: 0; }

/* 발송 관제 일자별 모드 — 색은 기존 토큰만 쓴다. 새 색값을 도입하지 않는다. */
.dispatch-mode-tabs { display: inline-flex; gap: .25rem; padding: .25rem; margin-bottom: 1rem; background: var(--surface); border: 1px solid var(--console-border-strong); border-radius: .6rem; }
.dispatch-mode-tabs button { min-height: 44px; padding: 0 1.4rem; color: var(--muted); background: transparent; border: 0; border-radius: .45rem; font-size: .875rem; font-weight: 700; }
.dispatch-mode-tabs button[aria-pressed="true"] { color: #fff; background: var(--accent); }
.dispatch-daily-controls { display: grid; grid-template-columns: minmax(0, 29rem) minmax(0, 1fr); gap: 1rem; align-items: start; margin-bottom: 1rem; }
.dispatch-calendar-toolbar { display: flex; grid-column: 1 / -1; align-items: center; gap: .5rem; }
.dispatch-calendar-toolbar button { min-width: 44px; min-height: 44px; }
.dispatch-month-label { font-size: .95rem; font-weight: 700; }
.dispatch-calendar-wrap { min-width: 0; }
.dispatch-calendar { width: 100%; border-collapse: collapse; table-layout: fixed; }
.dispatch-calendar-caption { padding: 0 0 .4rem; color: var(--muted); font-size: .8125rem; text-align: left; }
.dispatch-calendar th { padding: .3rem 0; color: var(--muted); border-bottom: 1px solid var(--console-border); font-size: .8125rem; }
.dispatch-calendar th.is-sunday { color: var(--danger); }
.dispatch-calendar td { padding: .15rem; border-bottom: 1px solid var(--console-border); vertical-align: top; }
.dispatch-calendar-day { display: block; width: 100%; min-height: 52px; padding: .25rem .35rem; color: var(--ink); background: transparent; border: 1px solid transparent; border-radius: .45rem; text-align: left; }
.dispatch-calendar-day.is-empty { min-height: 52px; }
.dispatch-calendar-day.has-warn { background: #fbeae7; }
.dispatch-calendar-day[aria-pressed="true"] { background: var(--accent-soft); border-color: var(--accent); }
.dispatch-calendar-daynum { font-size: .8125rem; font-weight: 700; }
.dispatch-calendar-today { margin-left: .25rem; color: var(--accent); font-size: .8125rem; font-weight: 700; }
.dispatch-calendar-metric { display: block; color: var(--muted); font-size: .8125rem; line-height: 1.45; }
.dispatch-calendar-metric.is-sent { color: #1b6b45; }
.dispatch-calendar-metric.is-warn { color: var(--danger); font-weight: 700; }
.dispatch-hour-wrap { min-width: 0; }
.dispatch-hour-strip { display: flex; gap: .4rem; align-items: flex-end; }
.dispatch-hour-bucket { flex: 1; min-height: 44px; padding: .4rem .2rem; color: var(--ink); background: var(--surface); border: 1px solid var(--console-border); border-radius: .45rem; }
.dispatch-hour-bucket[aria-pressed="true"] { background: var(--accent-soft); border-color: var(--accent); }
.dispatch-hour-bar { display: block; width: 1.6rem; height: .5rem; margin: 0 auto .35rem; background: var(--accent); border-radius: .2rem .2rem 0 0; }
.dispatch-hour-bar.is-warn { background: var(--danger); }
.dispatch-hour-label { display: block; font-size: .8125rem; font-weight: 700; }
.dispatch-hour-count { display: block; color: var(--muted); font-size: .8125rem; }
.dispatch-hour-empty { color: var(--muted); font-size: .8125rem; }
.dispatch-sort { display: flex; width: 100%; min-height: 44px; align-items: center; gap: .3rem; padding: 0 .1rem; color: var(--muted); background: transparent; border: 0; font-size: .8125rem; font-weight: 700; white-space: nowrap; }
.dispatch-table th[aria-sort="ascending"] .dispatch-sort,
.dispatch-table th[aria-sort="descending"] .dispatch-sort { color: var(--accent); }
.dispatch-sort-arrow { font-size: .8125rem; }
.dispatch-column-label { font-weight: 700; }
.dispatch-filter-row td { padding: .3rem .35rem; background: var(--surface); border-bottom: 2px solid var(--console-border); }
.dispatch-filter { width: 100%; min-height: 44px; margin: 0; font-size: .8125rem; }
.dispatch-filter.is-filled { border-color: var(--accent); }
.dispatch-target-count { font-variant-numeric: tabular-nums; text-align: right; }
.dispatch-target-count .dispatch-target-scope { margin-top: .2rem; }
.dispatch-pagination { display: flex; align-items: center; gap: .3rem; padding: .75rem .1rem 0; flex-wrap: wrap; }
.dispatch-pagination-info { margin-right: auto; color: var(--muted); font-size: .8125rem; }
.dispatch-pagination button { min-width: 44px; min-height: 44px; color: var(--ink); background: var(--surface); border: 1px solid var(--console-border-strong); border-radius: .45rem; font-size: .8125rem; }
.dispatch-pagination button[aria-current="page"] { color: #fff; background: var(--accent); border-color: var(--accent); }
.dispatch-propagation { margin-top: 1rem; }
.propagation-tree, .propagation-children { list-style: none; margin: 0; padding: 0; font-size: .8125rem; }
.propagation-children { margin-left: .85rem; padding-left: .75rem; border-left: 1px dashed var(--console-border); }
.propagation-node { padding: .3rem 0; }
.propagation-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: .35rem; }
.propagation-room { font-weight: 700; }
.propagation-root { color: var(--accent); font-size: .8125rem; font-weight: 700; }
.propagation-time { color: var(--muted); font-size: .8125rem; }
.propagation-bypassed { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.propagation-room-origin { color: var(--muted); font-weight: 400; }
.propagation-reason { margin: .1rem 0 0; color: var(--danger); font-size: .8125rem; }
.propagation-summary { margin: .1rem 0 0 .35rem; color: var(--muted); font-size: .8125rem; }
.propagation-expand { margin: 0 0 .5rem; }
/* 전역 규칙이 입력 요소를 44px 탭 영역으로 늘린다. 본문 옆의 체크박스에 그대로 적용되면
   글자보다 큰 상자가 되므로, 탭 영역은 감싼 label 이 맡는다. */
.propagation-expand label { display: flex; align-items: center; gap: .4rem; min-height: 44px; color: var(--muted); font-size: .8125rem; }
.propagation-expand input { width: auto; min-height: 1.1rem; margin: 0; }
.propagation-truncated { color: var(--muted); font-size: .8125rem; }
.notice-detail-section { margin-top: 1rem; }
.notice-detail-section:first-child { margin-top: 0; }
.notice-detail-section > h4 { margin: 0 0 .75rem; }
.notice-detail-status, .notice-dispatch-status { margin: 0 0 .75rem; }
.notice-body-preview, .notice-detail .technical-details { margin-top: .75rem; }
.notice-body-preview > summary, .notice-detail .technical-details > summary { min-height: 44px; cursor: pointer; font-weight: 700; }
.notice-body-preview > p { margin: .5rem 0 0; padding: .75rem; overflow-wrap: anywhere; white-space: pre-wrap; background: var(--surface); border: 1px solid var(--console-border); border-radius: .45rem; }
.notice-delivery-results { display: grid; gap: .75rem; }
.notice-delivery-card { display: grid; gap: .35rem; min-width: 0; padding: .85rem; background: var(--surface-muted); border: 1px solid var(--console-border); border-radius: .55rem; }
.notice-delivery-card h5, .notice-delivery-card p { margin: 0; overflow-wrap: anywhere; }
.notice-delivery-mode { font-weight: 700; }
.notice-delivery-result { justify-self: start; }
.notice-fallback-guidance { color: var(--status-warning-fg); font-weight: 650; }
.notice-detail .timeline { margin-top: .75rem; }
.notice-detail .timeline li.notice-progress-success { border-left-color: var(--status-success-fg); }
.notice-detail .timeline li.notice-progress-warning { border-left-color: var(--status-warning-fg); }
.notice-detail .timeline li.notice-progress-danger { border-left-color: var(--status-danger-fg); }
.notice-detail .timeline li.notice-progress-progress { border-left-color: var(--status-progress-fg); }
.notice-progress-secondary, .notice-message-result-limit { color: var(--muted); }
.notice-detail .technical-details code { display: block; margin-top: .5rem; overflow-wrap: anywhere; white-space: pre-wrap; }

.network-summary { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: .75rem; margin: 0 0 1rem; }
.network-summary-item { display: grid; gap: .1rem; min-width: 0; padding: .75rem 1rem; background: var(--surface); border: 1px solid var(--console-border); border-radius: .55rem; }
.network-summary-item small { color: var(--muted); font-size: .8125rem; }
.network-summary-item strong { font-size: 1.35rem; }
.network-filter-group { display: flex; grid-column: 2; grid-row: 1 / span 2; flex-wrap: wrap; gap: .4rem; }
.network-filter-group button { min-height: 44px; color: var(--ink); background: var(--surface); border-color: var(--console-border-strong); }
.network-filter-group button[aria-pressed="true"] { color: #fff; background: var(--accent); border-color: var(--accent); }
.network-detail { min-width: 0; }
.network-detail { position: sticky; top: 1rem; }
.network-tree-list, .network-tree-children, .network-disconnected-list, .network-attention-list { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.network-tree-children { margin-top: .5rem; }
.network-group-heading { margin: 1rem 0 .65rem; }
.network-group-heading:first-child { margin-top: .75rem; }
.network-node { position: relative; min-width: 0; padding-left: var(--network-indent, 0); }
.network-tree-children { margin-left: var(--network-outdent, 0); }
.network-node::before { position: absolute; top: 0; bottom: -.5rem; left: max(calc(var(--network-indent, 0rem) - .7rem), 0rem); width: 1px; background: var(--console-border); content: ""; }
.network-node::after { position: absolute; top: 1.35rem; left: max(calc(var(--network-indent, 0rem) - .7rem), 0rem); width: .7rem; height: 1px; background: var(--console-border); content: ""; }
.network-depth-0::before, .network-depth-0::after { display: none; }
.network-node-button { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .35rem .75rem; width: 100%; min-height: 44px; padding: .75rem; color: var(--ink); background: var(--surface-muted); border-color: var(--console-border); text-align: left; }
.network-node-button:hover:not(:disabled), .network-node-button[aria-pressed="true"] { color: var(--ink); background: var(--accent-soft); border-color: var(--accent); }
.network-node-title { min-width: 0; overflow-wrap: anywhere; }
.network-node-role, .network-node-stage { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.network-context-only > .network-node-button { opacity: .68; }
.network-context-only > .network-node-button::after { content: "경로 문맥"; color: var(--muted); font-size: .8125rem; }
.network-suspended > .network-node-button { border-style: dashed; }
.network-suspended > .network-node-button .network-node-title { color: var(--muted); }
.network-node-button .status-badge { justify-self: end; }
.network-node-fact { color: var(--muted); font-size: .8125rem; }
.network-node-emoji { font-size: 1.05rem; line-height: 1; }
.network-node-inherited-emoji { color: var(--status-info-fg); }
.network-node .technical-details { margin: .35rem 0 .65rem; }
.network-node .technical-details > summary { min-height: 44px; }
.network-node .technical-details code { display: block; overflow-wrap: anywhere; white-space: pre-wrap; }
.network-attention-section { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid var(--console-border); }
.network-attention-item { padding: .6rem .75rem; color: var(--status-warning-fg); background: var(--status-warning-bg); border-radius: .45rem; overflow-wrap: anywhere; }
.network-detail-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; }
.network-detail-title-group h3, .network-detail-title-group p { margin-bottom: .25rem; }
.network-detail-title-group { min-width: 0; flex: 1; }
.network-detail-title-line { display: flex; flex-wrap: wrap; gap: .4rem .5rem; align-items: center; }
.network-detail-title-line h3 { margin: 0; }
.network-detail-edit-actions { display: inline-flex; gap: .35rem; }
.network-detail-edit-button { min-width: auto; padding: .35rem .55rem; font-size: .8125rem; }
.network-detail-editors { width: 100%; margin-top: .5rem; }
.network-detail-inline-editor { width: 100%; }
.network-detail-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; margin: 1rem 0; }
.network-detail-facts div { min-width: 0; padding: .65rem; background: var(--surface-muted); border-radius: .45rem; }
.network-detail-facts dt { display: flex; align-items: center; gap: .25rem; color: var(--muted); font-size: .8125rem; font-weight: 700; }
.network-detail-facts dd { margin: .2rem 0 0; overflow-wrap: anywhere; }
.network-detail-status { display: flex; flex: 0 0 auto; align-items: center; gap: .25rem; }
.network-detail-topic-fact dd { display: grid; gap: .25rem; justify-items: start; }
.network-detail-topic-summary { color: var(--muted); font-size: .8125rem; }
.emoji-editor { min-width: 0; }
.emoji-editor-heading { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.emoji-editor-panel { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.emoji-editor-input { width: 5rem; min-height: 44px; padding: .3rem .45rem; font-size: 1.15rem; text-align: center; border: 1px solid var(--console-border-strong); border-radius: .35rem; }
.emoji-editor-save, .emoji-editor-clear { min-height: 44px; }
.emoji-editor-hint { flex-basis: 100%; margin: 0; color: var(--muted); font-size: .8125rem; }
/* The alias editor mirrors the emoji editor because they sit side by side and edit
   the same kind of thing: how this console presents a room, not what Telegram holds. */
.alias-editor { min-width: 0; }
.alias-editor-heading { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.alias-editor-panel { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.alias-editor-input { flex: 1 1 12rem; min-width: 0; min-height: 44px; padding: .3rem .5rem; border: 1px solid var(--console-border-strong); border-radius: .35rem; }
.alias-editor-save, .alias-editor-clear { min-height: 44px; }
.alias-editor-hint { flex-basis: 100%; margin: 0; color: var(--muted); font-size: .8125rem; }
/* The Telegram name trails the operator name in a lighter weight so the two read as
   one label rather than two competing titles. */
.network-node-origin-title { color: var(--muted); font-weight: 400; }
/* Room names now carry the alias AND the Telegram title, so a long unbroken name
   has to wrap inside its grid track instead of pushing the row's other columns
   off screen. */
.network-node-name { min-width: 0; overflow-wrap: anywhere; }
.network-tree-search-path { color: var(--muted); }
.room-controls-danger { border-top-color: var(--status-danger-fg); }
.network-removed-list { margin-top: .75rem; }
.network-untrusted-table-wrap, .network-removed-table-wrap { max-width: 100%; margin-top: .75rem; overflow-x: auto; border: 1px solid var(--console-border); border-radius: .55rem; background: var(--surface); }
.network-untrusted-table, .network-removed-table { width: 100%; min-width: 48rem; border-collapse: collapse; font-size: .875rem; }
.network-untrusted-table th, .network-untrusted-table td, .network-removed-table th, .network-removed-table td { padding: .75rem .85rem; border-bottom: 1px solid var(--console-border); text-align: left; vertical-align: middle; }
.network-untrusted-table th, .network-removed-table th { position: sticky; top: 0; z-index: 1; color: var(--muted); background: var(--surface-muted); font-size: .8125rem; font-weight: 700; }
.network-untrusted-table tbody tr:hover, .network-removed-table tbody tr:hover { background: var(--accent-soft); }
.network-untrusted-table tbody tr:last-child td, .network-removed-table tbody tr:last-child td { border-bottom: 0; }
.network-untrusted-name-cell, .network-removed-name-cell { min-width: 0; overflow-wrap: anywhere; }
.network-untrusted-name-cell strong, .network-removed-name-cell strong { display: block; font-size: .9375rem; }
.network-untrusted-name-cell small, .network-removed-name-cell small { display: block; margin-top: .15rem; color: var(--muted); font-size: .8125rem; }
.network-untrusted-status-cell, .network-removed-status-cell { white-space: nowrap; }
.network-untrusted-activity-cell, .network-removed-time-cell { white-space: nowrap; }
.network-untrusted-activity-cell strong, .network-removed-time-cell strong { display: block; font-weight: 600; }
.network-untrusted-activity-cell small, .network-removed-time-cell small { display: block; margin-top: .15rem; color: var(--muted); font-size: .8125rem; }
.network-untrusted-reason-cell { min-width: 0; overflow-wrap: anywhere; font-size: .875rem; }
.network-untrusted-action-cell, .network-removed-action-cell { white-space: nowrap; text-align: right; }
.network-untrusted-action-cell button, .network-removed-action-cell button { min-height: 44px; }
.network-untrusted-disabled-action { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: .35rem .75rem; color: var(--muted); background: var(--surface-muted); border: 1px solid var(--console-border); border-radius: .35rem; font-size: .8125rem; cursor: not-allowed; }
.room-controls { margin: 1rem 0; padding: .75rem; background: var(--surface-muted); border-radius: .45rem; }
.room-controls-heading { margin: 0 0 .5rem; font-size: .9375rem; }
.room-controls-panel { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.room-controls-panel + .room-controls-panel { margin-top: .75rem; padding-top: .75rem; border-top: 1px solid var(--console-border); }
.room-controls-panel > button { min-height: 44px; }
.room-move-select { flex: 1 1 12rem; min-width: 0; min-height: 44px; padding: .3rem .45rem; border: 1px solid var(--console-border-strong); border-radius: .35rem; }
.room-controls-hint { flex-basis: 100%; margin: 0; color: var(--muted); font-size: .8125rem; }
.room-control-feedback { margin: .75rem 0 0; font-size: .875rem; font-weight: 700; }
.network-detail-guidance { font-weight: 650; }
.network-detail .technical-details code { display: block; margin-top: .5rem; overflow-wrap: anywhere; white-space: pre-wrap; }
.network-2a-toolbar { display: grid; grid-template-columns: auto minmax(14rem, 1fr) auto; gap: .6rem; align-items: center; margin-bottom: .75rem; padding: .65rem; }
.network-mode-tabs { display: inline-flex; gap: .2rem; padding: .2rem; background: var(--surface-muted); border: 1px solid var(--console-border); border-radius: .55rem; }
.network-mode-tabs button { min-height: 44px; padding: .4rem .8rem; color: var(--muted); background: transparent; border-color: transparent; }
.network-mode-tabs button[aria-selected="true"] { color: #fff; background: var(--accent); border-color: var(--accent); }
.network-2a-toolbar input { margin: 0; }
.network-2a-toolbar > p { margin: 0; white-space: nowrap; }
.network-2a-summary { margin-bottom: .75rem; }
.network-mode-panel { padding: 0; overflow: hidden; }
.network-mode-panel > .section-heading-row { padding: .75rem 1rem; border-bottom: 1px solid var(--console-border); }
.network-mode-panel > #network-result-count { margin: 0; padding: .5rem 1rem; background: var(--surface-muted); border-bottom: 1px solid var(--console-border); }
.network-issue-list { display: grid; }
.network-bulk-report { padding: .75rem 1rem; background: var(--surface-muted); border-bottom: 1px solid var(--console-border); }
.network-bulk-report-headline { margin: 0; font-weight: 700; }
.network-bulk-report-failures { margin: .4rem 0 0; padding-left: 1.1rem; color: var(--status-warning-fg); font-size: .8125rem; overflow-wrap: anywhere; }
.network-room-outcome { margin: 0; padding: .75rem 1rem; background: var(--surface-muted); border-bottom: 1px solid var(--console-border); }
.network-issue-row { border-left: 4px solid var(--status-warning-fg); border-bottom: 1px solid var(--console-border); }
.network-issue-row.network-disconnected { border-left-color: var(--status-danger-fg); }
.network-issue-select { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: .75rem; align-items: center; width: 100%; min-height: 58px; padding: .65rem .85rem; color: var(--ink); background: var(--surface); border: 0; border-radius: 0; text-align: left; }
.network-issue-select:hover:not(:disabled), .network-issue-select[aria-expanded="true"] { color: var(--ink); background: var(--accent-soft); }
.network-issue-identity, .network-issue-impact { display: grid; min-width: 0; }
.network-issue-identity small, .network-issue-impact small { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.network-issue-impact { text-align: right; }
.network-issue-impact strong { color: var(--status-warning-fg); }
.network-issue-action { color: var(--accent); font-weight: 700; white-space: nowrap; }
/* The same room read the same way in both tabs, in the flat shape the tree already had.
   The renderer was always shared (renderNetworkDetail); only the container rule differed.
   Both tabs are lists of rows separated by 1px lines, so a bordered rounded card inside
   one of them reads as a second surface floating over the row it belongs to. The panel
   is full-bleed instead, and its only border is the rule that closes it off from the next
   row -- the same job that row's own bottom border does. */
.network-node-detail { margin: 0; padding: 1rem; background: var(--surface); border: 0; border-radius: 0; }
/* Indentation belongs to the diagram, not to this panel. A tree row shifts right with its
   depth to say where the room sits; the panel underneath is that room's full record, and
   sliding it right by the same amount would only put the same fields somewhere different
   for every row. So the panel keeps even padding on both sides at every depth, and the two
   tabs stay identical. What does differ is the closing line: .network-issue-row draws its
   own bottom border and would double it, while .network-lazy-node does not -- there the
   border sits on the row inside it, so the panel closes itself off from the next row. */
.network-lazy-node > .network-node-detail { border-bottom: 1px solid var(--console-border); }
.network-pagination { display: flex; align-items: center; justify-content: flex-end; gap: .75rem; padding: .75rem 1rem; }
.network-lazy-root, .network-lazy-children { display: grid; margin: 0; padding: 0; list-style: none; }
.network-lazy-node { min-width: 0; }
.network-lazy-row { display: grid; grid-template-columns: .55rem 1.75rem minmax(0, 1fr); column-gap: .25rem; min-height: 44px; padding-left: var(--network-indent, 0); border-bottom: 1px solid var(--console-border); }
.network-lazy-row:hover, .network-lazy-row.is-selected { background: var(--accent-soft); }
.network-lazy-state-marker { width: .55rem; height: 2rem; align-self: center; background: var(--status-success-fg); }
.network-warning > .network-lazy-row .network-lazy-state-marker { background: var(--status-warning-fg); }
.network-suspended > .network-lazy-row .network-lazy-state-marker { background: var(--status-neutral-fg); }
.network-disconnected > .network-lazy-row .network-lazy-state-marker { background: var(--status-danger-fg); }
.network-lazy-toggle { width: 1.75rem; min-height: 44px; padding: 0; color: var(--muted); background: transparent; border: 0; border-radius: 0; }
.network-lazy-toggle:hover:not(:disabled), .network-lazy-toggle:focus-visible { color: var(--accent); background: transparent; border-radius: 0; }
.network-lazy-leaf { display: grid; place-items: center; color: var(--muted); }
.network-lazy-select { display: grid; grid-template-columns: minmax(8rem, 1fr) auto auto auto; gap: .55rem; align-items: center; min-height: 44px; padding: .35rem .75rem .35rem 0; color: var(--ink); background: transparent; border: 0; border-radius: 0; text-align: left; }
.network-lazy-select:hover:not(:disabled), .network-lazy-select[aria-pressed="true"] { color: var(--ink); background: transparent; }
.network-lazy-select small { color: var(--muted); white-space: nowrap; }
.network-lazy-warning { padding: .05rem .3rem; color: var(--status-warning-fg) !important; background: var(--status-warning-bg); border-radius: .3rem; font-weight: 700; }
.network-lazy-members { color: var(--muted); text-align: right; font-size: .8125rem; font-variant-numeric: tabular-nums; white-space: nowrap; }
.network-lazy-identity { display: grid; gap: .15rem; min-width: 0; }
/* The state a row is in, said in words next to the name. Wraps rather than truncates:
   a clipped reason is worse than a taller row, because the operator cannot tell which
   of two similar reasons they are looking at. */
.network-room-state { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .4rem; }
.network-room-state .status-badge { flex: 0 0 auto; }
/* The reason, not the badge, is what marks a row as a problem. A room can sit in the
   queue while its stored status still reads 활성 — the record has not caught up with
   the permission it lost — and a muted grey reason next to a green badge would read as
   "fine". The tone follows the row's classification, so the two never disagree. */
.network-room-state-reason { color: var(--muted); overflow-wrap: anywhere; white-space: normal !important; }
.network-warning .network-room-state-reason { color: var(--status-warning-fg); font-weight: 700; }
.network-disconnected .network-room-state-reason { color: var(--status-danger-fg); font-weight: 700; }
.network-room-state-topic { padding: .05rem .3rem; color: var(--status-warning-fg) !important; background: var(--status-warning-bg); border-radius: .3rem; font-weight: 700; white-space: normal !important; }
.network-room-state-topic.is-pending { color: var(--muted) !important; background: transparent; font-weight: 400; }
.network-filter-row { display: flex; align-items: center; gap: .35rem; }
.network-tree-heading-row { display: flex; align-items: center; gap: .35rem; }
.network-legend-anchor { display: inline-flex; align-items: center; }
.network-lazy-children { margin-left: 0; }
.network-lazy-more { justify-self: end; margin: .55rem .75rem; }
.network-tree-search-results { display: grid; }
.network-tree-search-result { min-height: 44px; padding: .65rem 1rem; color: var(--ink); background: var(--surface); border: 0; border-bottom: 1px solid var(--console-border); border-radius: 0; text-align: left; }
.network-2a-actions > .room-controls-panel:first-child { padding-top: 0; }
.network-move-search { display: grid; grid-template-columns: minmax(10rem, 1fr) minmax(12rem, 1fr) auto; gap: .5rem; }
.connection-management-tabs { display: flex; gap: .35rem; margin-top: 1rem; padding-bottom: .65rem; border-bottom: 1px solid var(--console-border); }
.connection-management-tabs button { min-height: 44px; padding: 0 .9rem; color: var(--muted); background: transparent; border: 0; }
.connection-management-tabs button[aria-selected="true"] { color: var(--accent); background: var(--accent-soft); }
.connection-tab-count { display: inline-grid; min-width: 1.5rem; height: 1.5rem; margin-left: .25rem; padding: 0 .35rem; place-items: center; color: var(--surface); background: var(--accent); border-radius: 999px; font-size: .8125rem; }
.connection-management-panel { margin-top: 1rem; }
.connection-request-section { display: grid; gap: .85rem; }
.connection-request-section > .section-heading-row > div { min-width: 0; }
#requests-panel-status { display: grid; flex: 0 0 auto; gap: .15rem; align-self: flex-start; padding: .4rem .65rem; border-radius: .5rem; }
.connection-request-status-time { white-space: nowrap; font-variant-numeric: tabular-nums; }
.connection-request-scopes { display: flex; flex-wrap: wrap; gap: .35rem; }
.connection-request-scopes button { min-height: 44px; }
.connection-request-scopes button.is-active { color: var(--accent); background: var(--accent-soft); border-color: var(--accent); }
.connection-request-scopes button[data-request-scope="ATTENTION"]:not(.is-active) { color: var(--status-danger-fg); }
.connection-request-toolbar { display: grid; grid-template-columns: minmax(14rem, 1fr) minmax(10rem, 14rem) minmax(10rem, 14rem); gap: .65rem; }
.connection-request-toolbar > div { display: grid; gap: .35rem; min-width: 0; }
.connection-request-toolbar label { font-weight: 700; }
.connection-request-toolbar input, .connection-request-toolbar select { width: 100%; min-height: 44px; margin: 0; }
.connection-request-list { overflow: hidden; border: 1px solid var(--console-border); border-radius: .55rem; }
.connection-request-empty { margin: 0; padding: var(--space-4); color: var(--muted); background: var(--surface-muted); text-align: center; }
.connection-request-row { border-bottom: 1px solid var(--console-border); }
.connection-request-row:last-child { border-bottom: 0; }
.connection-request-summary { display: grid; grid-template-columns: minmax(16rem, 1.7fr) minmax(10rem, .9fr) minmax(9rem, .75fr) 2rem; gap: .8rem; align-items: center; width: 100%; min-height: 70px; padding: .65rem .8rem; color: var(--ink); background: var(--surface); border: 0; border-radius: 0; text-align: left; }
button.connection-request-summary:hover:not(:disabled), button.connection-request-summary:focus-visible { color: var(--ink); background: var(--accent-soft); border-color: transparent; }
.connection-request-route, .connection-request-applicant, .connection-request-timing { display: grid; gap: .25rem; min-width: 0; }
.connection-request-route > strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.connection-request-route .status-badge { justify-self: start; }
.connection-request-applicant strong, .connection-request-timing strong { overflow-wrap: anywhere; font-size: .875rem; }
.connection-request-applicant small, .connection-request-timing small { color: var(--muted); }
.connection-request-chevron { display: grid; width: 2rem; height: 2rem; place-items: center; color: var(--muted); border: 1px solid var(--console-border); border-radius: .4rem; font-size: 1.1rem; transition: transform .15s ease; }
.connection-request-summary[aria-expanded="true"] .connection-request-chevron { transform: rotate(90deg); }
.connection-request-detail { padding: 0 .8rem .8rem; background: var(--surface-muted); }
.connection-request-detail-facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .5rem; margin: 0; padding: .75rem; background: var(--surface); border: 1px solid var(--console-border); border-radius: .45rem; }
.connection-request-detail-facts div { min-width: 0; }
.connection-request-detail-facts dt { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.connection-request-detail-facts dd { margin: .2rem 0 0; overflow-wrap: anywhere; font-size: .875rem; }
.connection-request-detail .technical-details { margin-top: .55rem; }
.connection-request-detail .technical-details > summary { min-height: 44px; }
.connection-request-detail .technical-details code { display: block; overflow-wrap: anywhere; white-space: pre-wrap; }
.connection-request-footer { display: flex; align-items: center; justify-content: space-between; gap: .75rem; }
.connection-request-footer > p { margin: 0; }
.connection-request-footer:has(> p[hidden]):has(> nav[hidden]) { display: none; }
.member-section { display: grid; gap: 1rem; }
.member-section .section-heading-row p { margin-bottom: 0; }
.member-section > .warning, .member-section > .error { margin: 0; }
.member-section > .table-scroll:empty { display: none; }
.member-section > .connection-room-controls { margin-top: 0; }
.connection-room-controls { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem; margin-top: 1rem; }
.connection-room-controls > div { display: grid; gap: .35rem; min-width: 0; }
.connection-room-controls label { font-weight: 700; }
.connection-room-controls input, .connection-room-controls select { width: 100%; min-height: 44px; margin: 0; }
.member-table { width: 100%; min-width: 44rem; border-collapse: collapse; }
.member-table th, .member-table td { padding: .7rem .6rem; border-bottom: 1px solid var(--console-border); text-align: left; vertical-align: middle; }
.member-table th { color: var(--muted); background: var(--surface-muted); font-size: .8125rem; }
.member-table td { overflow-wrap: anywhere; }

@media (max-width: 56.25rem) {
  .master-detail { grid-template-columns: 1fr; gap: 1rem; }
  .doctor-toolbar { grid-template-columns: 1fr 1fr; }
  .doctor-master-detail { grid-template-columns: 1fr; }
  .doctor-detail { position: static; }
  .dashboard-notice-master-detail { grid-template-columns: 1fr; }
  .dashboard-notice-table-heading { display: none; }
  .dashboard-notice-row { grid-template-columns: minmax(0, 1fr) auto; gap: .45rem .75rem; }
  .dashboard-notice-source, .dashboard-notice-topic, .dashboard-notice-time { grid-column: 1; }
  .dashboard-notice-row .dashboard-notice-status { grid-column: 2; grid-row: 1; }
  .dashboard-selected-notice-meta { grid-template-columns: 1fr; gap: .5rem; }
  .notice-compose-form { grid-template-columns: 1fr; }
  .notice-compose-actions { grid-template-columns: 1fr; }
  .notice-compose-actions > button, .notice-self-send-action > button, .notice-schedule-action > button { width: 100%; }
  .notice-compose-error-summary { align-items: flex-start; flex-direction: column; }
  .topic-workspace-controls { grid-template-columns: 1fr; }
  .topic-workspace-controls > label, .topic-workspace-controls > input, .topic-filter-group { grid-column: 1; grid-row: auto; }
  .topic-filter-group button { flex: 1 1 auto; }
  .topic-management-master-detail { grid-template-columns: 1fr; }
  .topic-recheck-control { width: 100%; max-width: none; justify-items: stretch; }
  .topic-recheck-help { text-align: left; }
  .topic-create-drawer { width: 100%; }
  .dispatch-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dispatch-workspace-controls { grid-template-columns: 1fr; }
  .dispatch-workspace-controls > label,
  .dispatch-workspace-controls > label[for="notice-search-input"],
  .dispatch-workspace-controls > label[for="notice-source-filter"],
  .dispatch-workspace-controls > label[for="notice-topic-filter"],
  .dispatch-workspace-controls > input,
  .dispatch-workspace-controls > select,
  .dispatch-workspace-controls > button { grid-column: 1; grid-row: auto; transform: none; }
  .dispatch-workspace-controls > select[id="notice-source-filter"],
  .dispatch-workspace-controls > select[id="notice-topic-filter"] { grid-column: 1; }
  .dispatch-group-tabs { grid-column: 1; }
  .dispatch-group-tabs button { flex: 1 1 auto; }
  .dispatch-master-detail { grid-template-columns: 1fr; }
  /* 900px 이하에서는 달력과 시간대 스트립이 같은 열에 쌓인다. */
  .dispatch-daily-controls { grid-template-columns: 1fr; }
  .dispatch-detail-column { position: static; }
  .dispatch-detail-column { position: static; }
  .notice-delivery-card { padding: .75rem; }
  .network-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .network-2a-toolbar { grid-template-columns: 1fr; }
  .network-mode-tabs { width: 100%; }
  .network-mode-tabs button { flex: 1; }
  .network-2a-toolbar > p { white-space: normal; }
  .network-issue-select { grid-template-columns: minmax(0, 1fr) auto; }
  .network-issue-impact { grid-column: 1; text-align: left; }
  .network-issue-action { grid-column: 2; grid-row: 1 / span 2; }
  .network-lazy-select { grid-template-columns: minmax(0, 1fr) auto; }
  .network-lazy-select small, .network-lazy-members { display: none; }
  .network-move-search { grid-template-columns: 1fr; }
  .network-filter-group { grid-column: 1; grid-row: auto; }
  .network-filter-group button { flex: 1 1 auto; }
  .network-detail { position: static; }
  .network-detail-facts { grid-template-columns: 1fr; }
  .network-node { padding-left: var(--network-indent, 0); }
  .connection-request-summary { grid-template-columns: minmax(0, 1fr) 2rem; }
  .connection-request-applicant, .connection-request-timing { grid-column: 1; }
  .connection-request-chevron { grid-column: 2; grid-row: 1 / span 3; }
  .connection-request-detail-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .connection-room-controls { grid-template-columns: 1fr; }
}

@media (max-width: 40rem) {
  .connection-request-section > .section-heading-row, .member-section > .section-heading-row { flex-direction: column; }
  .connection-management-tabs { max-width: 100%; overflow-x: auto; }
  .connection-management-tabs button { flex: 0 0 auto; white-space: nowrap; }
  .connection-request-toolbar { grid-template-columns: 1fr; }
  .connection-request-detail-facts { grid-template-columns: 1fr; }
  .connection-request-footer { align-items: flex-start; flex-direction: column; }
  .connection-request-footer .network-pagination { width: 100%; justify-content: center; padding: 0; }
  .table-scroll { max-width: 100%; overflow-x: auto; }
  .topic-route-table { min-width: 28rem; }
  .dispatch-group-tabs { max-width: 100%; flex-wrap: nowrap; overflow-x: auto; }
  .dispatch-group-tabs button { flex: 0 0 auto; white-space: nowrap; }
  /* 390px 에서는 달력 셀을 숫자 중심으로 줄이고, 시간대 스트립은 가로 스크롤로
     둔다. 문서 레벨 가로 오버플로가 생기면 안 되므로 스크롤은 컨테이너가 갖는다. */
  .dispatch-mode-tabs { display: flex; width: 100%; }
  .dispatch-mode-tabs button { flex: 1; padding: 0 .5rem; }
  .dispatch-calendar-day { min-height: 46px; padding: .2rem .15rem; text-align: center; }
  .dispatch-calendar-metric { font-size: .8125rem; line-height: 1.3; }
  .dispatch-hour-wrap { max-width: 100%; overflow-x: auto; }
  .dispatch-hour-bucket { flex: 0 0 4.5rem; }
  .dispatch-pagination { justify-content: center; }
  .dispatch-pagination-info { width: 100%; margin: 0 0 .4rem; text-align: center; }
  .propagation-children { margin-left: .5rem; padding-left: .5rem; }
}
.notice-rich-tools { display: grid; gap: .75rem; padding: .85rem; border: 1px solid var(--line); border-radius: .65rem; background: var(--surface-muted); }
/* 서식·미디어 도구는 탭 없이 항상 보인다. 좁은 화면에서는 summary 로 접을 수 있다. */
.rich-tool-group { min-width: 0; display: grid; gap: .6rem; padding: .6rem .7rem; background: var(--surface); border: 1px solid var(--line); border-radius: .55rem; }
.rich-tool-group > summary { color: var(--muted); font-size: .85rem; font-weight: 600; cursor: pointer; }
.rich-tool-group[open] > summary { margin-bottom: .1rem; }
.rich-toolbar, .rich-options, .rich-media-upload { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.rich-toolbar + .rich-toolbar, .rich-toolbar + .rich-options { margin-top: .65rem; padding-top: .65rem; border-top: 1px solid var(--line); }
/* Formatting tools wrap while retaining a touch-sized interaction area. */
.rich-toolbar button { min-width: 2.75rem; min-height: 44px; padding: .35rem .65rem; color: #334155; background: var(--surface); border-color: #cbd5e1; }
.rich-toolbar button:hover:not(:disabled) { color: #075e59; background: #e8f7f5; border-color: #7bcfc7; }
.rich-options label { display: inline-flex; align-items: center; gap: .4rem; padding: .35rem .55rem; background: var(--surface); border: 1px solid var(--line); border-radius: .45rem; }
/* Native checkbox inside the label above, which carries the tap area. */
.rich-options input { width: 1.1rem; min-height: 1.1rem; margin: 0; }
.rich-media-panel { display: grid; gap: .75rem; }
.rich-media-upload { display: grid; grid-template-columns: minmax(7rem, .35fr) minmax(12rem, 1fr) auto; gap: .4rem .6rem; align-items: end; }
.rich-media-upload label { align-self: end; }
.rich-media-upload label:first-child { grid-column: 1; }
.rich-media-upload select { grid-column: 1; }
.rich-media-upload label:nth-of-type(2) { grid-column: 2; grid-row: 1; }
.rich-media-upload input { grid-column: 2; }
.rich-media-upload button { grid-column: 3; grid-row: 2; white-space: nowrap; }
.rich-syntax-help summary { min-height: 2.75rem; cursor: pointer; font-weight: 700; }
.rich-syntax-help p { margin: .4rem 0 0; color: var(--muted); font-size: .82rem; }
.rich-editor-meta { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.rich-editor-meta > p { margin: 0; }
#notice-rich-stats { color: var(--muted); font-size: .8125rem; font-variant-numeric: tabular-nums; }
/* 분할 안내는 오류가 아니라 사실 통지다. 그래서 --danger 를 쓰는 .field-message 와
   색을 나누고, 경고 단계와 실제 분할 단계만 서로 구분한다. */
.notice-split-notice { color: var(--muted); font-size: .8125rem; text-align: right; }
.notice-split-notice.warning, .notice-split-notice.split { color: var(--warning); font-weight: 600; }
#notice-body { min-height: 28rem; margin-top: 0; padding: 1rem; font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; line-height: 1.65; }
.rich-media-list { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.rich-media-list li { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: .55rem .65rem; background: var(--surface); border: 1px solid var(--line); border-radius: .45rem; }
.telegram-rich-preview { display: grid; width: min(100%, 31rem); gap: .6rem; padding: 1.1rem; color: #1f2937; white-space: normal; background: #fff; border-radius: .9rem .9rem .2rem .9rem; box-shadow: 0 12px 30px rgb(36 62 48 / .14); }
.telegram-rich-preview > * { margin: 0; }
.telegram-rich-preview h1 { font-size: 1.45rem; }
.telegram-rich-preview h2 { font-size: 1.25rem; }
.telegram-rich-preview h3, .telegram-rich-preview h4, .telegram-rich-preview h5, .telegram-rich-preview h6 { font-size: 1.05rem; }
.telegram-rich-preview p, .telegram-rich-preview li, .telegram-rich-preview td, .telegram-rich-preview th { font-size: .9rem; }
.telegram-rich-preview ul, .telegram-rich-preview ol { margin: 0; padding-left: 1.35rem; }
.telegram-rich-preview blockquote { padding: .55rem .7rem; color: #345b62; border-left: 3px solid #2aa7a0; background: #edf9f8; }
.telegram-rich-preview pre { max-width: 100%; padding: .65rem; overflow-x: auto; background: #f1f5f9; border-radius: .45rem; }
.telegram-rich-preview a { color: #1769d2; }
.telegram-rich-spoiler { padding: 0 .15rem; color: transparent; background: #64748b; border-radius: .2rem; }
.telegram-rich-media-placeholder { display: grid; gap: .25rem; min-height: 5rem; padding: 1rem; place-content: center; color: #526270; background: #f5f8fb; border: 1px dashed #94a3b8; border-radius: .55rem; text-align: center; }
.telegram-rich-media-placeholder figcaption { font-size: .8125rem; }
.telegram-rich-media-group { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .4rem; padding: .65rem; border: 1px solid var(--line); border-radius: .6rem; }
.telegram-rich-media-group > strong, .telegram-rich-media-group > p { grid-column: 1 / -1; }
.telegram-rich-media-group .telegram-rich-media-placeholder { min-height: 4rem; padding: .5rem; }
.telegram-rich-map, .telegram-rich-formula { padding: .8rem; text-align: center; background: #f8fafc; border: 1px solid var(--line); border-radius: .5rem; }
.telegram-rich-formula { font-family: Georgia, serif; font-size: 1.1rem; font-style: italic; }
.telegram-rich-table { width: 100%; border-collapse: collapse; }
.telegram-rich-table th, .telegram-rich-table td { padding: .4rem .5rem; border: 1px solid #cbd5e1; text-align: left; }
/* 실제 발송은 표를 is_bordered + is_striped 로 되돌려주므로 같은 시각을 맞춘다. */
.telegram-rich-table.striped tr:nth-child(even) td { background: #f8fafc; }
.telegram-rich-table th.align-left, .telegram-rich-table td.align-left { text-align: left; }
.telegram-rich-table th.align-center, .telegram-rich-table td.align-center { text-align: center; }
.telegram-rich-table th.align-right, .telegram-rich-table td.align-right { text-align: right; }
/* 접기 블록 본문은 이제 블록으로 렌더되므로 중첩 여백이 필요하다. */
.telegram-rich-preview details { display: grid; gap: .45rem; }
.telegram-rich-preview details > summary { margin-bottom: .1rem; cursor: pointer; }
.telegram-rich-preview details > :not(summary) { margin: 0; }
.telegram-rich-table th { background: #f1f5f9; }
.telegram-rich-checklist { padding: 0; list-style: none; }
.telegram-rich-checklist li { display: flex; align-items: center; gap: .45rem; }
/* Not an operational control: rich-message-view renders these `disabled`, reproducing a
   Telegram checklist inside the preview. A touch target would imply it can be toggled. */
.telegram-rich-checklist input { width: 1rem; min-height: 1rem; margin: 0; }

/* 공지망 변동: 일별 기록 목록과 선택한 날짜의 지표·변동 타임라인. */
.network-history-figures { display: grid; grid-template-columns: auto 1fr; gap: .35rem 1rem; margin: 0 0 1rem; }
.network-history-figures dt { font-weight: 600; color: var(--muted); }
.network-history-figures dd { margin: 0; font-variant-numeric: tabular-nums; }
.network-history-table td:nth-child(n+3), .network-history-table th:nth-child(n+3) { text-align: right; font-variant-numeric: tabular-nums; }
.network-history-changes-table { table-layout: auto; }
.link-button { padding: 0; border: 0; background: none; color: var(--accent); font: inherit; text-decoration: underline; cursor: pointer; }
.link-button[aria-current="true"] { font-weight: 700; text-decoration: none; }

@media (max-width: 60rem) {
  .network-history-figures { grid-template-columns: 1fr; }
  .network-history-figures dd { margin-bottom: .5rem; }
}

@media (max-width: 72rem) {
  .notice-compose-form { grid-template-columns: 1fr; }
  .notice-compose-review { border-top: 1px solid var(--line); border-left: 0; }
  .telegram-preview-stage { min-height: 24rem; }
}

@media (max-width: 56.25rem) {
  .rich-compose-heading { display: grid; }
  .rich-mode-toggle { justify-self: start; }
  .notice-compose-actions { flex-direction: column; align-items: stretch; gap: .75rem; }
  .notice-self-send-action { flex-direction: column; align-items: stretch; }
  .notice-self-send-action > button, .notice-schedule-action > button { width: 100%; }
  .notice-schedule-action { flex-direction: column; align-items: stretch; margin-left: 0; }
  .notice-disabled-reason { text-align: left; }
  .rich-media-upload { grid-template-columns: 1fr; }
  .rich-media-upload > * { grid-column: 1 !important; grid-row: auto !important; }
}

@media (max-width: 40rem) {
  .rich-compose-editor, .notice-compose-review, .notice-compose-actions { padding: .85rem; }
  .rich-toolbar { flex-wrap: wrap; padding-bottom: .25rem; }
  .rich-toolbar button { flex: 0 0 auto; }
  #notice-body { min-height: 22rem; }
  .telegram-preview-stage { min-height: 18rem; padding: .7rem; }
}

/* 방 관리 — 한 방의 전체 기록. 요약과 기록을 같은 폭으로 쌓아 시선이 위에서 아래로
   한 번만 흐르게 한다. 필터 칩과 페이지네이션은 공지망 화면 것을 그대로 쓴다. */
.room-console-picker .section-heading-row { align-items: flex-end; }
.room-console-search-field { flex: 1 1 20rem; min-width: 0; }
.room-console-search-field label { display: block; color: var(--muted); font-size: .8125rem; font-weight: 700; }
.room-console-search-results { display: grid; gap: .35rem; margin: var(--space-3) 0 0; padding: 0; list-style: none; }
.room-console-search-result {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
  width: 100%;
  min-height: 44px;
  padding: .55rem .75rem;
  color: var(--ink);
  text-align: left;
  background: var(--surface);
  border: 1px solid var(--console-border);
  border-radius: .45rem;
}
.room-console-search-result:hover { background: var(--surface-muted); }
.room-console-search-result .status-badge { flex-shrink: 0; }
.room-console-search-main { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.room-console-search-name { min-width: 0; overflow-wrap: anywhere; font-weight: 600; }
.room-console-search-path { min-width: 0; margin-top: .15rem; color: var(--muted); font-size: .8125rem; overflow-wrap: anywhere; }

.room-console-heading { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.room-console-heading h3 { margin: 0; }
.room-console-path { margin: .35rem 0 0; color: var(--muted); font-size: .875rem; overflow-wrap: anywhere; }
.room-console-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; margin: 1rem 0 0; }
.room-console-facts div { min-width: 0; padding: .65rem; background: var(--surface-muted); border-radius: .45rem; }
.room-console-facts dt { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.room-console-facts dd { margin: .2rem 0 0; overflow-wrap: anywhere; }
.room-console-origin { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid var(--console-border); }
.room-console-origin h3 { margin: 0; font-size: 1rem; }

.room-console-history .network-filter-group { grid-column: auto; grid-row: auto; margin-bottom: .75rem; }
.room-console-timeline { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.room-console-timeline-item {
  display: grid;
  grid-template-columns: minmax(9rem, max-content) minmax(0, 1fr);
  gap: .75rem;
  padding: .7rem .75rem;
  background: var(--surface);
  border: 1px solid var(--console-border);
  border-radius: .45rem;
}
.room-console-timeline-empty { padding: 0; background: none; border: 0; }
.room-console-timeline-time { color: var(--muted); font-size: .8125rem; font-variant-numeric: tabular-nums; }
.room-console-timeline-body { min-width: 0; }
.room-console-timeline-head { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }
.room-console-kind-chip {
  padding: .1rem .45rem;
  color: var(--muted);
  font-size: .8125rem;
  font-weight: 700;
  background: var(--surface-muted);
  border-radius: .3rem;
}
.room-console-timeline-summary { margin: .3rem 0 0; overflow-wrap: anywhere; }
.room-console-timeline-actor { margin: .25rem 0 0; color: var(--muted); font-size: .8125rem; overflow-wrap: anywhere; }

@media (max-width: 56.25rem) {
  .room-console-facts { grid-template-columns: 1fr; }
  .room-console-timeline-item { grid-template-columns: 1fr; gap: .25rem; }
}

/* 방 관리 — 이 방 조치. 공지망 상세의 room-controls-panel 을 그대로 쓰되, 사유 입력은
   강제 활성화가 가능한 방에서만 나타나므로 자기 자리를 따로 갖는다. */
/* Match the console's compact controls; the whole label remains a large tap target. */
.room-notice-policies { margin-top: var(--space-4); padding-top: var(--space-4); border-top: 1px solid var(--line); }
.room-notice-policies > h3 { margin: 0 0 var(--space-2); font-size: 1rem; }
.room-notice-policies > .room-topic-receipt-row + h3 { margin-top: var(--space-4); }
.room-topic-receipt-row { display: grid; grid-template-columns: 1.25rem minmax(0, 1fr) auto; align-items: center; gap: var(--space-2); min-height: 44px; margin-bottom: var(--space-1); padding: var(--space-2); background: var(--surface-muted); border: 1px solid var(--line); border-radius: .5rem; cursor: pointer; }
.room-topic-receipt-row:hover { background: var(--accent-soft); }
.room-topic-receipt-row:has(input:disabled) { cursor: default; }
/* The label carries the 44px tap target; keep the native checkbox at 20px. */
.room-topic-receipt-row input[type="checkbox"] { width: 1.25rem; height: 1.25rem; min-height: 1.25rem; margin: 0; padding: 0; accent-color: var(--accent); cursor: inherit; }
.room-topic-receipt-detail { display: grid; gap: .15rem; min-width: 0; overflow-wrap: anywhere; }
.room-topic-receipt-name { color: var(--ink); font-weight: 650; }
.room-topic-receipt-owner { color: var(--muted); font-size: .8125rem; font-weight: 400; }

.room-console-controls h3 { margin: 0 0 .75rem; font-size: 1rem; }
.room-console-reason-field { max-width: 32rem; margin-bottom: .75rem; }
.room-console-reason-field label { display: block; color: var(--muted); font-size: .8125rem; font-weight: 700; }
.room-console-controls .room-controls-panel { display: flex; flex-wrap: wrap; gap: .5rem; }
.room-console-controls .room-control-feedback { margin: .75rem 0 0; }

@media (max-width: 56.25rem) {
  .room-console-controls .room-controls-panel { display: grid; }
}

/* 방 관리 — 대화. 수집 중 배너는 장식이 아니라 무열람 원칙이 이 방에서만 유예되고 있다는
   상시 고지이므로, 접히거나 사라지지 않는 자리에 둔다. */
.room-console-capture-banner {
  margin: 0 0 .75rem;
  padding: .6rem .75rem;
  color: #7c2d12;
  background: #ffedd5;
  border: 1px solid #fdba74;
  border-radius: .45rem;
}
.room-console-messages { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.room-console-messages-empty { padding: 0; background: none; border: 0; }
.room-console-message {
  padding: .6rem .75rem;
  background: var(--surface);
  border: 1px solid var(--console-border);
  border-radius: .45rem;
}
.room-console-message[data-direction="OUTBOUND"] { background: var(--surface-muted); }
.room-console-message-meta { margin: 0; color: var(--muted); font-size: .8125rem; }
.room-console-message-failed { color: #991b1b; font-weight: 700; }
.room-console-message-body { margin: .3rem 0 0; white-space: pre-wrap; overflow-wrap: anywhere; }
.room-console-message-attachment,
.room-console-message-expired { margin: .25rem 0 0; color: var(--muted); font-size: .8125rem; }

.room-console-send { display: grid; gap: .5rem; }
.room-console-send label { color: var(--muted); font-size: .8125rem; font-weight: 700; }
.room-console-send textarea { min-height: 5rem; resize: vertical; }
.room-console-send button { justify-self: start; min-height: 44px; }
.room-console-send-topic { display: grid; gap: .25rem; }
.room-console-send-topic select { justify-self: start; min-width: min(16rem, 100%); max-width: 100%; min-height: 44px; }
.room-console-message-topic { font-weight: 700; }

.audit-evidence { min-width: 18rem; max-width: 46rem; padding-block: .5rem; }
.audit-evidence pre { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 28rem; overflow: auto; }
.audit-evidence button { display: block; margin-block: .5rem; }

/* Keep wide content within its scroll container and controls readable at sidebar widths. */
.doctor-master-detail > *, .rich-compose-editor, .rich-compose-editor > *,
.rich-toolbar, .network-2a-toolbar > *, .dashboard-notice-master-detail > * { min-width: 0; }
.rich-toolbar { max-width: 100%; }
.doctor-run-table { min-width: 52rem; }
.doctor-run-table th { white-space: nowrap; }
.doctor-topic-table { min-width: 28rem; }
.network-mode-tabs { max-width: 100%; min-width: 0; overflow-x: auto; }
.network-mode-tabs button { flex: 0 0 auto; white-space: nowrap; }
.network-tree-search-pagination, .connection-room-search-pagination { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-top: .5rem; }
.network-tree-search-pagination button, .connection-room-search-pagination button { min-height: 44px; }
.audit-detail-row > td { padding: .75rem; }
.audit-detail-row .audit-evidence { min-width: 0; max-width: none; }
.link-button { min-height: 44px; }
.link-button:hover:not(:disabled), .link-button:focus-visible { color: var(--accent); background: var(--accent-soft); }
.modal-card > *, .admin-account-form > * { min-width: 0; }
.admin-account-form label { overflow-wrap: anywhere; }
.admin-account-form input:not([type="checkbox"]) { width: 100%; }
.connection-request-section { grid-template-columns: minmax(0, 1fr); }
.topic-filter-group button:hover:not(:disabled) { color: var(--ink); background: var(--accent-soft); }
.topic-filter-group button[aria-pressed="true"]:hover:not(:disabled) { color: #fff; background: var(--accent); }
.network-history-table { min-width: 32rem; }
.network-history-changes-table { min-width: 40rem; }
.network-history-table th, .network-history-table td:first-child, .network-history-changes-table th { white-space: nowrap; }

@media (max-width: 72rem) {
  .dashboard-grid, .dashboard-notice-master-detail, .doctor-master-detail { grid-template-columns: minmax(0, 1fr); }
  .doctor-detail { position: static; }
  .network-2a-toolbar { grid-template-columns: minmax(0, 1fr); }
  .network-2a-toolbar > p { white-space: normal; }
  .connection-request-toolbar { grid-template-columns: minmax(0, 1fr); }
  .connection-request-summary { grid-template-columns: minmax(0, 1fr) 2rem; }
  .connection-request-applicant, .connection-request-timing { grid-column: 1; }
  .connection-request-chevron { grid-column: 2; grid-row: 1 / span 3; }
}

@media (min-width: 56.251rem) and (max-width: 72rem) {
  .topbar-primary { flex-wrap: wrap; padding-block: .75rem; }
  .topbar-actions { flex: 1 1 auto; flex-wrap: wrap; }
  .topbar-actions .muted { white-space: normal; }
}

@media (max-width: 56.25rem) {
  .network-mode-tabs button { flex: 0 0 auto; }
  .room-console-search-field { flex: 0 1 auto; width: 100%; align-self: stretch; }
  .doctor-page-footer { flex-wrap: wrap; }
}

.forensic-field { display: grid; gap: .4rem; margin-block: .8rem; }
.forensic-field textarea, .forensic-field input { width: 100%; min-width: 0; box-sizing: border-box; }
.forensic-field textarea { white-space: pre-wrap; resize: vertical; }
.forensic-result { border-top: 1px solid var(--line); padding-block: .8rem; overflow-wrap: anywhere; }
.forensic-settings { padding-block: .8rem; }
.forensic-toggle { display: flex; align-items: center; gap: .5rem; min-height: 44px; }
/* The wrapping label provides the 44px tap area around this compact native checkbox. */
.forensic-toggle input { width: 1.25rem; height: 1.25rem; min-height: 1.25rem; margin: 0; padding: 0; flex-shrink: 0; accent-color: var(--accent); }
.forensic-settings details, .forensic-detail details { margin-top: 1rem; }

/* 전역 참여자 검색: 사람별 카드 안에서 방 기록을 읽는다. */
.member-search-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-3); }
.member-search-query-field { flex: 1 1 20rem; min-width: 0; }
.member-search-query-field label { display: block; margin-bottom: var(--space-2); }
.member-search-query-field input { width: 100%; }
.member-search-filters { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: var(--space-3); }
.member-search-filters label { display: flex; align-items: center; gap: var(--space-2); }
.member-search-filters input { width: auto; margin: 0; }
.member-search-results, .member-search-rooms { list-style: none; padding: 0; margin: 0; }
.member-search-results { display: grid; gap: var(--space-3); margin-top: var(--space-3); }
.member-search-person { border: 1px solid var(--line); border-radius: .6rem; padding: var(--space-4); min-width: 0; }
.member-search-person h3 { margin: 0; overflow-wrap: anywhere; }
.member-search-identity { overflow-wrap: anywhere; }
.member-search-rooms { display: grid; gap: var(--space-2); }
.member-search-room { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2) var(--space-3); }
.member-search-room-name { text-align: left; overflow-wrap: anywhere; max-width: 100%; }
.member-search-room-facts { overflow-wrap: anywhere; font-size: .875rem; }
@media (max-width: 56.25rem) {
  .member-search-query-field { flex-basis: 100%; }
  .member-search-room { flex-direction: column; gap: var(--space-2); }
}
/* A merger preview is a sequence of decisions, with full-width paragraphs on mobile. */
.room-controls-panel.sub-source-replacement,
.room-console-controls .room-controls-panel.sub-source-replacement {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  align-items: stretch;
  gap: .65rem;
}
.sub-source-replacement[hidden] { display: none; }
.sub-source-replacement-preview { min-width: 0; overflow-wrap: anywhere; }
.sub-source-replacement-preview p { margin: .5rem 0; }
.sub-source-replacement input, .sub-source-replacement select { min-width: 0; width: 100%; }
