:root{--sidebar-width: 248px;--page-bg: #f2f4f7;--surface: #ffffff;--surface-soft: #f7f7f7;--border: #dbe0e5;--border-strong: #c5c8ce;--text: #242b34;--muted: #515a6e;--primary: #10112d;--accent: #2d8cf0;--warning: #b56b00}.role-permissions-editor{color:var(--text);font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;font-size:14px}.role-permissions-editor,.role-permissions-editor *{box-sizing:border-box}.editor-layout{display:grid;grid-template-columns:260px minmax(0,1fr);gap:18px;align-items:start}.role-panel{position:sticky;top:20px;border:1px solid var(--border);border-radius:8px;padding:16px;background:#fffffff5;box-shadow:0 12px 28px #11183914}.role-panel h2{margin:0 0 14px;color:#171b26;font-size:18px;line-height:1.25}.field-label{display:block;margin-bottom:6px;color:#394456;font-size:13px;font-weight:760}.summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}.summary-tile{min-width:0;border:1px solid var(--border);border-radius:8px;padding:10px;background:var(--surface-soft)}.summary-tile strong,.summary-tile span{display:block}.summary-tile strong{color:var(--primary);font-size:22px;line-height:1}.summary-tile span{margin-top:4px;overflow:hidden;color:var(--muted);font-size:11px;font-weight:760;text-overflow:ellipsis;white-space:nowrap}.summary-tile--warning{border-color:#f1d08d;background:#fff7e6}.summary-tile--error{border-color:#f3a6a0;background:#fff0ee}.side-alert{margin-bottom:14px}.side-alert-content{display:grid;gap:8px}.side-alert-content strong{color:var(--warning);font-size:12px;line-height:1.35}.side-alert-content ul{display:grid;gap:4px;margin:0;padding-left:18px;color:var(--warning);font-size:12px;line-height:1.35}.side-alert--error .side-alert-content strong,.side-alert--error .side-alert-content ul{color:#b42318}.role-actions{display:grid;gap:8px}.permissions-area{min-width:0}.permissions-card{border:1px solid var(--border);border-radius:8px;padding:16px;background:var(--surface);box-shadow:0 10px 24px #1118390d}.permissions-card-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.permissions-title{margin:0;color:#171b26;font-size:18px;line-height:1.25}.section-tabs{margin:0}.tab-label{display:inline-flex;align-items:center;gap:7px}.matrix-wrap{border:1px solid var(--border);border-radius:8px;overflow:hidden}.permissions-matrix{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;background:#fff}.permissions-matrix th,.permissions-matrix td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);padding:8px 10px;vertical-align:middle}.permissions-matrix th{color:#242b34;background:#f7f7f7;font-size:13px;font-weight:700;text-align:center;white-space:nowrap}.permissions-matrix th:last-child,.permissions-matrix td:last-child{border-right:0}.permissions-matrix tbody tr:last-child td{border-bottom:0}.permissions-matrix tbody tr.is-selected{background:#fbfcff}.permissions-matrix tbody tr.has-problem{background:#fffdf6}.action-col{width:220px;color:#242b34;font-weight:500;text-align:left!important}.entity-col{min-width:0}.entity-col span{display:block;overflow:hidden;margin-bottom:4px;text-overflow:ellipsis;white-space:nowrap}.entity-col.has-problem{background:#fff4da}.entity-col.has-error{background:#fff0ee}.check-cell{height:40px;text-align:center}.empty-cell{display:inline-block;width:16px;height:1px;background:#dcdee2;vertical-align:middle}.matrix-warning{margin-top:10px;border:1px solid #fbdb94;border-radius:6px;padding:10px 12px;color:#7a4f00;background:#fff4da;font-size:13px;line-height:1.4}.matrix-warning strong{display:block;margin-bottom:6px}.matrix-warning ul{display:grid;gap:4px;margin:0;padding-left:18px}.matrix-warning--error{border-color:#f3a6a0;color:#b42318;background:#fff0ee}.payload-modal{width:min(760px,calc(100vw - 32px))}.payload-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.payload-preview{max-height:56vh;margin:0;overflow:auto;border:1px solid var(--border);border-radius:8px;padding:14px;color:#d9e5ff;background:#101827;font-size:12px;line-height:1.5}@media(max-width:1240px){.editor-layout{grid-template-columns:1fr}.role-panel{position:static}.summary-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.action-col{width:190px}}@media(max-width:720px){.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}html,body,#app{min-height:100%}body{margin:0;color:var(--text);background:radial-gradient(circle at 14% 16%,rgba(45,108,223,.06),transparent 24%),radial-gradient(circle at 0% 88%,rgba(45,108,223,.05),transparent 24%),var(--page-bg);font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;font-size:14px}button,input,textarea{font:inherit}.app{min-height:100vh}.site-sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar-width);padding:20px 14px;overflow-y:auto;color:#e6e9ff;background:#10112d}.brand{display:flex;align-items:center;gap:12px;min-height:56px;margin-bottom:22px;padding:0 8px}.brand-orbit{width:42px;height:42px;flex:0 0 auto;border-radius:50%;background:radial-gradient(circle at 58% 38%,#23d4ff 0 14%,transparent 15%),radial-gradient(circle at 32% 52%,#2f7df6 0 9%,transparent 10%),radial-gradient(circle at 73% 70%,#2465d8 0 7%,transparent 8%),repeating-radial-gradient(circle,rgba(45,127,249,.35) 0 1px,transparent 1px 7px)}.brand strong{color:#fff;font-size:18px;line-height:1;letter-spacing:.02em}.brand strong span{color:#2d7ff9}.site-nav{display:grid;gap:18px}.nav-group p{margin:0 0 8px;padding:0 6px;color:#fff;font-size:12px;font-weight:850;line-height:1.2;text-transform:uppercase}.nav-group a{display:flex;align-items:center;gap:12px;min-height:40px;border-radius:8px;padding:0 12px;color:#d8dcf5;font-size:14px;text-decoration:none}.nav-group a:hover,.nav-group a.active{color:#fff;background:#ffffff14}.page{min-height:100vh;margin-left:var(--sidebar-width);padding:28px 30px 40px}.page-header{margin-bottom:18px}.breadcrumbs{margin-bottom:8px;color:var(--muted);font-size:13px}.page-header h1{margin:0;color:#171b26;font-size:28px;line-height:1.2}@media(max-width:920px){:root{--sidebar-width: 76px}.site-sidebar{padding-inline:10px}.brand strong,.nav-group p,.nav-group a span{display:none}.brand,.nav-group a{justify-content:center;padding:0}.page{padding:20px}}@media(max-width:720px){:root{--sidebar-width: 0px}.site-sidebar{display:none}.page{margin-left:0;padding:16px}.page-header h1{font-size:24px}}
