/* Phase 3: contextual My Role + Director Role Access Manager */
:root{
  --p3-primary:#6d28d9;--p3-primary-2:#2563eb;--p3-ink:#172033;--p3-soft:#64748b;
  --p3-line:#dce4f0;--p3-surface:#fff;--p3-muted:#f6f8fc;--p3-good:#079455;
}
[data-theme="dark"]{--p3-ink:#f1f5f9;--p3-soft:#94a3b8;--p3-line:#334155;--p3-surface:#111827;--p3-muted:#182235}
.p3-my-role-layer,.p3-role-manager-layer{position:fixed;inset:0;z-index:16000;display:flex;background:rgba(15,23,42,.52);backdrop-filter:blur(5px);animation:p3Fade .18s ease both}
.p3-my-role-layer{align-items:flex-end;justify-content:center;padding:16px max(12px,env(safe-area-inset-right)) max(0px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
.p3-role-manager-layer{align-items:center;justify-content:center;padding:20px}
.p3-my-role-layer.is-closing,.p3-role-manager-layer.is-closing{animation:p3FadeOut .16s ease both;pointer-events:none}
.p3-my-role-sheet,.p3-role-manager{color:var(--p3-ink);background:var(--p3-surface);border:1px solid color-mix(in srgb,var(--p3-line) 80%,transparent);box-shadow:0 28px 90px rgba(15,23,42,.26);overflow:hidden}
.p3-my-role-sheet{width:min(700px,100%);max-height:min(820px,calc(100dvh - 24px));border-radius:28px 28px 18px 18px;animation:p3SheetUp .25s cubic-bezier(.2,.8,.2,1) both;display:flex;flex-direction:column}
.p3-role-manager{width:min(1180px,100%);height:min(820px,calc(100dvh - 40px));border-radius:24px;animation:p3Scale .2s ease both;display:flex;flex-direction:column}
.p3-my-role-sheet>header,.p3-role-manager>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px 24px 18px;border-bottom:1px solid var(--p3-line);background:linear-gradient(135deg,color-mix(in srgb,var(--p3-primary) 8%,var(--p3-surface)),var(--p3-surface) 64%)}
.p3-my-role-sheet h2,.p3-role-manager h2{margin:2px 0 2px;font-size:clamp(1.3rem,3vw,1.75rem);line-height:1.15;color:var(--p3-ink)}
.p3-my-role-sheet header p,.p3-role-manager header p{margin:0;color:var(--p3-soft);font-size:.85rem}
.p3-role-manager header p b{display:inline-flex;margin-left:7px;padding:3px 8px;border-radius:999px;background:color-mix(in srgb,var(--p3-primary) 10%,transparent);color:var(--p3-primary);font-size:.72rem}
.p3-eyebrow{display:block;color:var(--p3-primary);font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.p3-icon-button{flex:0 0 44px;width:44px;height:44px;border:1px solid var(--p3-line);border-radius:14px;background:var(--p3-surface);color:var(--p3-ink);display:grid;place-items:center;cursor:pointer;font-size:1rem}
.p3-icon-button:hover,.p3-icon-button:focus-visible{border-color:var(--p3-primary);color:var(--p3-primary);outline:3px solid color-mix(in srgb,var(--p3-primary) 16%,transparent)}
.p3-sheet-scroll{padding:20px 24px;overflow:auto;overscroll-behavior:contain}
.p3-assigned>h3{display:flex;align-items:center;gap:8px;margin:0 0 12px;font-size:.92rem}.p3-assigned>h3 span{display:grid;place-items:center;min-width:25px;height:25px;padding:0 7px;border-radius:99px;background:var(--p3-muted);color:var(--p3-primary);font-size:.72rem}
.p3-role-card{display:grid;grid-template-columns:50px minmax(0,1fr);gap:13px;padding:15px;margin-bottom:10px;border:1px solid var(--p3-line);border-radius:18px;background:var(--p3-surface);box-shadow:0 5px 18px rgba(15,23,42,.035)}
.p3-role-icon{width:50px;height:50px;border-radius:16px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--p3-primary),var(--p3-primary-2));box-shadow:0 8px 16px color-mix(in srgb,var(--p3-primary) 22%,transparent)}
.p3-role-heading{display:flex;align-items:center;flex-wrap:wrap;gap:7px;min-height:24px}.p3-role-heading strong{font-size:.96rem}.p3-active-badge,.p3-primary-badge{display:inline-flex;align-items:center;gap:4px;border-radius:99px;padding:3px 7px;font-size:.62rem;font-weight:800}.p3-active-badge{background:#e9f9f0;color:var(--p3-good)}.p3-primary-badge{background:#eee8ff;color:var(--p3-primary)}
.p3-role-copy>p{margin:5px 0;color:var(--p3-soft);font-size:.8rem;line-height:1.45}.p3-role-copy>small{display:block;color:var(--p3-soft);font-size:.7rem}.p3-role-copy>small i{color:var(--p3-primary);margin-right:4px}
.p3-role-copy details{margin-top:10px;border-top:1px dashed var(--p3-line);padding-top:8px}.p3-role-copy summary{min-height:32px;display:flex;align-items:center;gap:6px;width:max-content;color:var(--p3-primary);font-size:.72rem;font-weight:800;cursor:pointer;list-style:none}.p3-role-copy summary::-webkit-details-marker{display:none}.p3-role-copy details[open] summary i{transform:rotate(180deg)}.p3-role-copy ul{margin:6px 0 0;padding:0 0 0 17px;color:var(--p3-soft);font-size:.72rem;line-height:1.6}
.p3-effective{margin-top:17px;padding:17px;display:grid;grid-template-columns:44px minmax(0,1fr);gap:13px;border:1px solid color-mix(in srgb,var(--p3-primary) 25%,var(--p3-line));border-radius:19px;background:linear-gradient(135deg,color-mix(in srgb,var(--p3-primary) 9%,var(--p3-surface)),color-mix(in srgb,var(--p3-primary-2) 4%,var(--p3-surface)))}
.p3-effective-icon{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;color:var(--p3-primary);background:var(--p3-surface);box-shadow:0 4px 14px rgba(15,23,42,.08)}.p3-effective span{display:block;color:var(--p3-primary);font-weight:800;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em}.p3-effective strong{display:block;margin-top:4px;font-size:.88rem}.p3-effective strong i{font-size:.55rem;margin:0 3px;color:var(--p3-soft)}.p3-effective p{margin:7px 0 3px;color:var(--p3-soft);font-size:.76rem}.p3-effective small{color:var(--p3-soft);font-size:.68rem}
.p3-my-role-sheet>footer,.p3-role-manager>footer{border-top:1px solid var(--p3-line);background:var(--p3-surface)}.p3-my-role-sheet>footer{padding:12px 24px max(12px,env(safe-area-inset-bottom));display:flex;justify-content:flex-end}
.p3-primary-button,.p3-secondary-button{min-height:44px;padding:0 17px;border-radius:12px;font-weight:800;font-size:.8rem;cursor:pointer}.p3-primary-button{border:0;color:#fff;background:linear-gradient(135deg,var(--p3-primary),var(--p3-primary-2));box-shadow:0 8px 18px color-mix(in srgb,var(--p3-primary) 20%,transparent)}.p3-secondary-button{border:1px solid var(--p3-line);color:var(--p3-ink);background:var(--p3-surface)}.p3-primary-button:disabled{opacity:.55;cursor:wait}
.p3-desktop-role-trigger{display:flex;justify-content:flex-end;margin:0 0 12px}.p3-desktop-role-trigger button{min-height:48px;display:flex;align-items:center;gap:10px;padding:7px 9px 7px 12px;border:1px solid var(--p3-line);border-radius:15px;background:var(--p3-surface);color:var(--p3-ink);cursor:pointer;box-shadow:0 4px 14px rgba(15,23,42,.05)}.p3-desktop-role-trigger button>i{color:var(--p3-primary)}.p3-desktop-role-trigger span{display:flex;flex-direction:column;align-items:flex-start}.p3-desktop-role-trigger small{font-size:.58rem;color:var(--p3-soft);text-transform:uppercase;letter-spacing:.06em}.p3-desktop-role-trigger strong{font-size:.82rem}.p3-desktop-role-trigger b{display:grid;place-items:center;min-width:29px;height:29px;border-radius:10px;color:#fff;background:var(--p3-primary);font-size:.72rem}
.p3-admin-info{display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:center;gap:13px;margin:14px 0;padding:14px 16px;border:1px solid color-mix(in srgb,var(--p3-primary) 25%,var(--p3-line));border-radius:17px;background:linear-gradient(120deg,color-mix(in srgb,var(--p3-primary) 8%,var(--p3-surface)),var(--p3-surface))}.p3-admin-info>span{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--p3-primary),var(--p3-primary-2))}.p3-admin-info strong{display:block;font-size:.9rem}.p3-admin-info p{margin:3px 0 0;color:var(--p3-soft);font-size:.75rem}.p3-admin-info>b{padding:5px 8px;border-radius:99px;background:#eee8ff;color:var(--p3-primary);font-size:.62rem;text-transform:uppercase;letter-spacing:.06em}.p3-manage-roles span{white-space:nowrap}
.p3-table-role,.p3-table-access{min-width:118px}.p3-table-role>span{display:block;color:var(--p3-primary);font-size:.55rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em}.p3-table-role>strong,.p3-table-access>strong{display:block;font-size:.7rem;line-height:1.3}.p3-table-role>small,.p3-table-access>small{display:block;margin-top:3px;color:var(--p3-soft);font-size:.58rem;line-height:1.35;max-width:190px}
.p3-role-manager>header{flex:0 0 auto}.p3-manager-body{flex:1;min-height:0;overflow:hidden}.p3-manager-loading,.p3-manager-failure{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:32px;color:var(--p3-soft)}.p3-manager-loading>i,.p3-manager-failure>i{font-size:2rem;color:var(--p3-primary);margin-bottom:14px}.p3-manager-loading strong,.p3-manager-failure strong{color:var(--p3-ink)}.p3-manager-loading p,.p3-manager-failure p{margin:5px 0;font-size:.8rem}.p3-manager-failure button{min-height:44px;margin-top:12px;padding:0 17px;border:0;border-radius:12px;color:#fff;background:var(--p3-primary);font-weight:800}
.p3-manager-error{margin:10px 18px 0;padding:11px 14px;border:1px solid #fecaca;border-radius:12px;background:#fff1f2;color:#b42318;font-weight:700;font-size:.78rem}.p3-manager-columns{display:grid;grid-template-columns:370px minmax(0,1fr);height:100%;min-height:0}.p3-package-pane,.p3-config-pane{min-height:0;overflow:auto;padding:18px}.p3-package-pane{border-right:1px solid var(--p3-line);background:var(--p3-muted)}
.p3-pane-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:13px}.p3-pane-heading span{display:block;color:var(--p3-primary);font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em}.p3-pane-heading h3{margin:2px 0 0;font-size:1rem}.p3-pane-heading>b{padding:5px 8px;border:1px solid var(--p3-line);border-radius:99px;background:var(--p3-surface);color:var(--p3-soft);font-size:.65rem;white-space:nowrap}
.p3-package-list{display:grid;gap:8px}.p3-package-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px;border:1px solid var(--p3-line);border-radius:15px;background:var(--p3-surface);transition:border-color .15s,box-shadow .15s}.p3-package-row:has([data-p3-role-check]:checked){border-color:color-mix(in srgb,var(--p3-primary) 55%,var(--p3-line));box-shadow:0 4px 13px color-mix(in srgb,var(--p3-primary) 8%,transparent)}.p3-package-row>label:first-child{min-width:0;display:grid;grid-template-columns:20px 38px minmax(0,1fr);align-items:center;gap:8px;cursor:pointer}.p3-package-row input{accent-color:var(--p3-primary);width:17px;height:17px}.p3-package-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:color-mix(in srgb,var(--p3-primary) 9%,var(--p3-surface));color:var(--p3-primary)}.p3-package-row strong{display:block;font-size:.77rem}.p3-package-row small{display:-webkit-box;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:2px;color:var(--p3-soft);font-size:.62rem;line-height:1.35}.p3-primary-choice{display:flex;align-items:center;gap:4px;min-height:36px;padding:0 7px;border-radius:10px;color:var(--p3-soft);font-size:.62rem;font-weight:800;cursor:pointer}.p3-primary-choice:has(input:checked){background:#eee8ff;color:var(--p3-primary)}.p3-primary-choice input:disabled{opacity:.35}
.p3-source-note{display:flex;align-items:flex-start;gap:7px;margin:0 0 12px;padding:10px;border:1px solid color-mix(in srgb,var(--p3-primary) 18%,var(--p3-line));border-radius:12px;background:color-mix(in srgb,var(--p3-primary) 6%,var(--p3-surface));color:var(--p3-soft);font-size:.68rem;line-height:1.45}.p3-source-note i{margin-top:2px;color:var(--p3-primary)}.p3-settings-owned{cursor:default}.p3-settings-owned input:disabled,.p3-settings-owned select:disabled{opacity:.75;cursor:not-allowed}.p3-settings-owned>label{cursor:default!important}
.p3-scope-list{display:grid;gap:10px}.p3-scope-block{padding:14px;border:1px solid var(--p3-line);border-radius:16px;background:var(--p3-surface)}.p3-scope-block h4{margin:0;font-size:.84rem}.p3-scope-block h4 em,.p3-scope-block h4 span{margin-left:6px;font-style:normal;font-size:.57rem;padding:3px 6px;border-radius:99px}.p3-scope-block h4 em{color:#b42318;background:#fff1f2}.p3-scope-block h4 span{color:var(--p3-primary);background:#eee8ff}.p3-scope-block p{margin:4px 0 10px;color:var(--p3-soft);font-size:.68rem}.p3-class-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.p3-class-grid label{min-height:42px;display:flex;align-items:center;gap:7px;padding:0 9px;border:1px solid var(--p3-line);border-radius:11px;font-size:.7rem;font-weight:700;cursor:pointer}.p3-class-grid label:has(input:checked){border-color:var(--p3-primary);background:color-mix(in srgb,var(--p3-primary) 7%,var(--p3-surface));color:var(--p3-primary)}.p3-class-grid input{accent-color:var(--p3-primary)}
.p3-field-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.p3-field-grid label>span{display:block;margin-bottom:5px;color:var(--p3-soft);font-size:.65rem;font-weight:800}.p3-field-grid select{width:100%;min-height:44px;border:1px solid var(--p3-line);border-radius:11px;padding:0 10px;background:var(--p3-surface);color:var(--p3-ink)}.p3-field-grid select:focus{border-color:var(--p3-primary);outline:3px solid color-mix(in srgb,var(--p3-primary) 12%,transparent)}
.p3-readonly-scope,.p3-fixed-scope{background:var(--p3-muted)}.p3-fixed-scope{display:grid;grid-template-columns:40px 1fr;align-items:center;gap:11px}.p3-fixed-scope>i{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;color:var(--p3-primary);background:var(--p3-surface)}.p3-fixed-scope p{margin-bottom:0}.p3-assignment-list{display:flex;flex-wrap:wrap;gap:7px}.p3-assignment-list>span{display:flex;flex-direction:column;gap:2px;padding:7px 9px;border:1px solid var(--p3-line);border-radius:10px;background:var(--p3-surface);font-size:.63rem;color:var(--p3-soft)}.p3-assignment-list b{color:var(--p3-ink);font-size:.69rem}.p3-inline-warning{padding:9px;border-radius:10px;background:#fff7ed;color:#9a3412;font-size:.68rem}
.p3-manager-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:150px;border:1px dashed var(--p3-line);border-radius:16px;color:var(--p3-soft);font-size:.76rem}.p3-manager-empty i{font-size:1.5rem;color:var(--p3-primary)}
.p3-advanced{margin-top:13px;border:1px solid var(--p3-line);border-radius:16px;overflow:hidden;background:var(--p3-surface)}.p3-advanced>summary{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 13px;cursor:pointer;list-style:none}.p3-advanced>summary::-webkit-details-marker{display:none}.p3-advanced>summary>span{display:grid;grid-template-columns:32px 1fr;align-items:center}.p3-advanced>summary>span>i{grid-row:1/3;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;background:#eee8ff;color:var(--p3-primary)}.p3-advanced>summary b{margin-left:9px;font-size:.76rem}.p3-advanced>summary small{margin-left:9px;color:var(--p3-soft);font-size:.61rem}.p3-advanced[open]>summary>i{transform:rotate(180deg)}.p3-advanced-body{border-top:1px solid var(--p3-line);padding:12px}.p3-permission-search{height:42px;display:flex;align-items:center;gap:8px;padding:0 11px;border:1px solid var(--p3-line);border-radius:11px}.p3-permission-search i{color:var(--p3-soft)}.p3-permission-search input{width:100%;border:0;outline:0;background:transparent;color:var(--p3-ink);font:inherit}.p3-permission-list{max-height:260px;overflow:auto;margin-top:8px}.p3-permission-row{min-height:49px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 4px;border-bottom:1px solid var(--p3-line)}.p3-permission-row strong{display:block;font-size:.7rem}.p3-permission-row small{display:block;color:var(--p3-soft);font-size:.58rem}.p3-permission-row select{min-height:38px;border:1px solid var(--p3-line);border-radius:9px;background:var(--p3-surface);color:var(--p3-ink);font-size:.66rem}
.p3-role-manager>footer{flex:0 0 auto;min-height:68px;padding:10px 18px max(10px,env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:space-between;gap:12px}.p3-role-manager>footer>span{color:var(--p3-soft);font-size:.68rem}.p3-role-manager>footer>span i{color:var(--p3-good);margin-right:4px}.p3-role-manager>footer>div{display:flex;gap:8px}
@media(max-width:1024px){
  .p3-role-manager-layer{align-items:flex-end;padding:0}.p3-role-manager{width:100%;height:min(94dvh,920px);border-radius:25px 25px 0 0;animation:p3SheetUp .25s cubic-bezier(.2,.8,.2,1) both}.p3-manager-columns{grid-template-columns:minmax(300px,40%) minmax(0,1fr)}
  .p3-manage-roles span{display:none}.p3-manage-roles{min-width:38px}
}
@media(max-width:699px){
  .p3-my-role-layer{padding:0}.p3-my-role-sheet{max-height:94dvh;border-radius:25px 25px 0 0}.p3-my-role-sheet>header,.p3-role-manager>header{padding:18px 16px 14px}.p3-sheet-scroll{padding:15px 14px}.p3-role-card{grid-template-columns:43px minmax(0,1fr);padding:12px}.p3-role-icon{width:43px;height:43px;border-radius:14px}.p3-role-heading{gap:5px}.p3-role-copy>p{font-size:.75rem}.p3-effective{grid-template-columns:38px minmax(0,1fr);padding:13px}.p3-effective-icon{width:38px;height:38px}.p3-my-role-sheet>footer{padding:10px 14px max(10px,env(safe-area-inset-bottom))}.p3-my-role-sheet>footer button{width:100%}
  .p3-role-manager{height:100dvh;max-height:100dvh;border-radius:0}.p3-manager-body{overflow:auto}.p3-manager-columns{display:block;height:auto}.p3-package-pane,.p3-config-pane{overflow:visible;padding:14px}.p3-package-pane{border:0;border-bottom:1px solid var(--p3-line)}.p3-package-row{padding:9px}.p3-package-row>label:first-child{grid-template-columns:20px 34px minmax(0,1fr)}.p3-package-icon{width:34px;height:34px}.p3-primary-choice span{display:none}.p3-primary-choice{padding:0 4px}.p3-class-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.p3-field-grid{grid-template-columns:1fr}.p3-permission-row{align-items:flex-start;flex-direction:column}.p3-permission-row select{width:100%}.p3-role-manager>footer{position:sticky;bottom:0;z-index:3;display:block}.p3-role-manager>footer>span{display:none}.p3-role-manager>footer>div{display:grid;grid-template-columns:1fr 1.5fr}.p3-role-manager>footer button{width:100%}.p3-admin-info{grid-template-columns:40px minmax(0,1fr);padding:12px}.p3-admin-info>span{width:40px;height:40px}.p3-admin-info>b{display:none}
}
@media(max-width:380px){.p3-class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.p3-primary-button,.p3-secondary-button{padding-inline:10px}}
@media(prefers-reduced-motion:reduce){.p3-my-role-layer,.p3-role-manager-layer,.p3-my-role-sheet,.p3-role-manager{animation:none!important}.p3-role-copy details *{scroll-behavior:auto!important}}
@keyframes p3Fade{from{opacity:0}to{opacity:1}}@keyframes p3FadeOut{to{opacity:0}}@keyframes p3SheetUp{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:none}}@keyframes p3Scale{from{opacity:0;transform:scale(.975)}to{opacity:1;transform:none}}
