/* Permission matrix: a bounded operational table; colors never grant or deny access. */
.bms-permission-grid__scroller { position:relative; isolation:isolate; }
.bms-permission-grid__cell-toggle { position:relative; }
.bms-permission-grid { --permission-grid-text:var(--bms-text,var(--ink)); --permission-grid-muted:var(--bms-text-muted,var(--muted)); --permission-grid-line:var(--bms-border,var(--line)); --permission-grid-surface:var(--bms-surface,var(--surface)); --permission-grid-soft:var(--bms-surface-subtle,var(--surface-soft)); display:grid; gap:var(--bms-space-3,12px); min-width:0; color:var(--permission-grid-text); font-family:var(--bms-font-ui,inherit); }
.bms-permission-grid__controls { display:grid; grid-template-columns:minmax(180px,.8fr) minmax(190px,1fr) minmax(220px,1.2fr) auto auto; align-items:end; gap:var(--bms-space-3); }
.bms-permission-grid__scope { display:grid; gap:var(--bms-space-1,4px); color:var(--permission-grid-muted); font-size:12px; font-weight:700; }
.bms-permission-grid__scope select { min-height:var(--bms-control-touch); }
.bms-permission-grid__search { width:100%; }
.bms-permission-grid__search input { width:100%; }
.bms-permission-grid__summary { margin:0; color:var(--permission-grid-muted); font-size:13px; }
.bms-permission-grid__readonly { margin:0; padding:var(--bms-space-3); border-inline-start:4px solid var(--bms-warning); color:var(--bms-warning); background:var(--bms-warning-soft); font-size:13px; }
.bms-permission-grid__conflict { display:flex; align-items:center; justify-content:space-between; gap:var(--bms-space-3); padding:var(--bms-space-3); border-inline-start:4px solid var(--bms-danger); color:var(--bms-danger); background:var(--bms-danger-soft); font-size:13px; }
.bms-permission-grid__state { display:grid; justify-items:center; gap:var(--bms-space-3,12px); margin:0; padding:var(--bms-space-8,32px); border:1px solid var(--permission-grid-line); border-radius:var(--bms-radius-2,12px); color:var(--permission-grid-muted); background:var(--permission-grid-soft); text-align:center; }
.bms-permission-grid__state.is-error { border-color:var(--bms-danger); color:var(--bms-danger); background:var(--bms-danger-soft); }
.bms-permission-grid__scroller { max-width:100%; max-height:min(68vh,720px); overflow:auto; border:1px solid var(--permission-grid-line); border-radius:var(--bms-radius-2,12px); background:var(--permission-grid-surface); box-shadow:var(--bms-shadow-1); }
.bms-permission-grid__scroller:focus-visible { outline:3px solid color-mix(in srgb,var(--bms-focus) 28%,transparent); outline-offset:2px; }
.bms-permission-grid__table { width:max-content; min-width:100%; border-collapse:separate; border-spacing:0; font-size:12px; }
.bms-permission-grid__table th,.bms-permission-grid__table td { border-bottom:1px solid var(--permission-grid-line); border-inline-end:1px solid var(--permission-grid-line); }
.bms-permission-grid__table tr:last-child > * { border-bottom:0; }
.bms-permission-grid__table thead { position:sticky; top:0; z-index:5; }.bms-permission-grid__person-head,.bms-permission-grid__person { position:sticky; left:0; z-index:3; min-width:220px; max-width:280px; background:var(--permission-grid-surface); box-shadow:2px 0 0 var(--permission-grid-line); text-align:start; }
.bms-permission-grid__person-head { z-index:7; padding:var(--bms-space-3,12px) var(--bms-space-4,16px); background:var(--permission-grid-soft); font-size:12px; }
.bms-permission-grid__section-head { padding:var(--bms-space-2,8px) var(--bms-space-3,12px); color:var(--permission-grid-muted); background:var(--permission-grid-soft); font-size:11px; letter-spacing:.04em; text-align:start; text-transform:uppercase; }
.bms-permission-grid__group-head { min-width:92px; padding:var(--bms-space-2,8px); background:var(--permission-grid-soft); text-align:center; vertical-align:top; }
.bms-permission-grid__group-title { display:block; min-width:74px; min-height:32px; color:var(--permission-grid-text); font-weight:700; line-height:1.3; overflow-wrap:anywhere; }
.bms-permission-grid__group-actions { display:flex; align-items:center; justify-content:center; gap:var(--bms-space-1); margin-top:var(--bms-space-1); }
.bms-permission-grid__expand { display:grid; width:32px; min-width:32px; height:32px; place-items:center; padding:0; border:1px solid var(--bms-border-strong,var(--permission-grid-line)); border-radius:var(--bms-radius-round,999px); color:var(--permission-grid-text); background:var(--permission-grid-surface); font-weight:700; }
.bms-permission-grid__expand:hover:not(:disabled) { border-color:var(--bms-primary); color:var(--bms-primary); }
.bms-permission-grid__right-head { width:70px; min-width:70px; max-width:70px; padding:var(--bms-space-2,8px); color:var(--permission-grid-muted); background:var(--permission-grid-surface); font-size:11px; font-weight:600; line-height:1.3; overflow-wrap:anywhere; vertical-align:bottom; }
.bms-permission-grid__person { padding:var(--bms-space-3) var(--bms-space-4); vertical-align:middle; }
.bms-permission-grid__person-select { display:flex; align-items:center; gap:var(--bms-space-2,8px); min-height:44px; cursor:pointer; }
.bms-permission-grid__person-select > span { min-width:0; }
.bms-permission-grid__person-select input { width:18px; height:18px; flex:0 0 18px; accent-color:var(--bms-primary); }
.bms-permission-grid__person strong,.bms-permission-grid__person small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bms-permission-grid__person strong { color:var(--permission-grid-text); font-size:13px; }.bms-permission-grid__person small { margin-top:2px; color:var(--permission-grid-muted); font-weight:400; }
.bms-permission-grid__cell { width:70px; min-width:70px; height:58px; padding:0; text-align:center; vertical-align:middle; }
.bms-permission-grid__cell-toggle { display:grid; width:44px; height:44px; place-items:center; margin:auto; cursor:pointer; }.bms-permission-grid__cell input,.bms-permission-grid__group-actions input { width:18px; height:18px; margin:0; accent-color:var(--bms-primary); cursor:pointer; }
.bms-permission-grid__cell.is-override { box-shadow:inset 0 -3px 0 var(--bms-review,var(--bms-primary)); }
.bms-permission-grid__sr-only { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
.bms-permission-grid__table tr:hover .bms-permission-grid__cell,.bms-permission-grid__table tr:hover .bms-permission-grid__person { background:var(--bms-surface-selected,var(--permission-grid-soft)); }
.bms-permission-grid__table tr.is-fixed .bms-permission-grid__person { background:var(--permission-grid-soft); }.bms-permission-grid input:disabled { cursor:not-allowed; opacity:.62; }.bms-permission-grid input:disabled + .bms-permission-grid__sr-only { cursor:not-allowed; }
@media (max-width:900px) { .bms-permission-grid__controls { grid-template-columns:repeat(2,minmax(0,1fr)); }.bms-permission-grid__controls .btn { width:100%; } }
@media (max-width:600px) { .bms-permission-grid__controls { grid-template-columns:1fr; }.bms-permission-grid__conflict { align-items:stretch; flex-direction:column; }.bms-permission-grid__person-head,.bms-permission-grid__person { min-width:174px; max-width:174px; }.bms-permission-grid__right-head,.bms-permission-grid__cell { width:62px; min-width:62px; } }
@media (prefers-reduced-motion:reduce) { .bms-permission-grid * { scroll-behavior:auto !important; transition:none !important; } }

/* Wave 5 owns generic Users tables; this component owns its nested matrix contract. */
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table { width:max-content; min-width:100%; border-collapse:separate; border-spacing:0; background:var(--permission-grid-surface); }
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th { position:static; top:auto; z-index:auto; color:inherit; background:var(--permission-grid-surface); }
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table thead { position:sticky; top:0; z-index:5; background:var(--permission-grid-surface); }
/* Include table + th so the generic reset above cannot unstick row identities. */
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th.bms-permission-grid__person-head,
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th.bms-permission-grid__person { position:sticky; top:auto; left:0; z-index:3; background:var(--permission-grid-surface); }
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th.bms-permission-grid__person-head { z-index:7; background:var(--permission-grid-soft); }
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th.bms-permission-grid__group-head,
.bms-wave-5 .panel[data-panel="users"] .bms-permission-grid .bms-permission-grid__table th.bms-permission-grid__section-head { background:var(--permission-grid-soft); }

/* Điện thoại: chữ nhỏ, cột hẹp để một hàng thấy ít nhất 5 ô quyền; nút "Xem ngang" mở khung toàn màn hình (bms-landscape-view). */
.bms-permission-grid-frame__bar { display:none; align-items:center; justify-content:space-between; gap:var(--bms-space-2,8px); margin-bottom:var(--bms-space-2,8px); }
.bms-permission-grid-frame__bar strong { color:var(--bms-text,var(--ink)); font-size:14px; }
@media (max-width:900px) { .bms-permission-grid-frame__bar { display:flex; } }
.bms-permission-grid-frame.is-expanded .bms-permission-grid-frame__bar { display:flex; margin:0; }
.bms-permission-grid-frame__expand { display:inline-flex; align-items:center; gap:var(--bms-space-2,8px); }
.bms-permission-grid-frame__expand svg { width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
/* Bộ chọn có th/td để thắng padding chung của bảng v8 (body.bms-opendesign-v8 .panel :is(th, td)). */
.bms-permission-grid-frame.is-compact .bms-permission-grid__table :is(th.bms-permission-grid__person-head, th.bms-permission-grid__person) { min-width:124px; max-width:124px; padding:6px 8px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table .bms-permission-grid__person strong { font-size:12px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table .bms-permission-grid__person small { font-size:10px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table .bms-permission-grid__person-select { gap:6px; min-height:36px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table th.bms-permission-grid__section-head { padding:4px 8px; font-size:10px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table th.bms-permission-grid__group-head { min-width:52px; padding:4px 2px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table .bms-permission-grid__group-title { min-width:0; min-height:0; font-size:10px; line-height:1.25; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table .bms-permission-grid__group-actions { gap:2px; margin-top:2px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table :is(th.bms-permission-grid__right-head, td.bms-permission-grid__cell) { width:52px; min-width:52px; max-width:52px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table th.bms-permission-grid__right-head { padding:4px; font-size:10px; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__table td.bms-permission-grid__cell { height:44px; padding:0; }
.bms-permission-grid-frame.is-compact .bms-permission-grid__summary { font-size:12px; }
/* Vượt quy tắc ô bấm 44px chung của điện thoại (bộ chọn đó có #id nên ở đây cũng cần #id): ô tích vẫn nằm trong vùng bấm 44px của nhãn; nút + còn 28px (DD-009). */
#permissionGridPanel.is-compact .bms-permission-grid__table input[type="checkbox"] { width:16px; height:16px; min-height:0; }
#permissionGridPanel.is-compact .bms-permission-grid__table button.bms-permission-grid__expand { width:28px; min-width:28px; height:28px; min-height:0; }
.bms-permission-grid-frame.is-expanded { display:flex; flex-direction:column; gap:6px; padding:8px; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid { display:flex; flex:1 1 auto; flex-direction:column; gap:6px; min-height:0; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__controls { grid-template-columns:minmax(150px,.8fr) minmax(150px,1fr) minmax(150px,1fr) auto auto; gap:6px; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__controls .btn { width:auto; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__summary ~ .bms-permission-grid__summary { display:none; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__scroller { flex:1 1 0; min-height:120px; max-height:none; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__scope > span { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.bms-permission-grid-frame.is-expanded .bms-permission-grid__summary { font-size:11px; }
