.cfg-shell{min-height:100vh;background:#f4f6f9;color:#303133;font:14px "Microsoft YaHei",sans-serif}.cfg-shell button,.cfg-overlay button{background:white;color:#606266;border:1px solid #dcdfe6;border-radius:4px;padding:7px 13px}.cfg-shell button:hover,.cfg-overlay button:hover{color:#409eff;border-color:#a9d3ff;background:#ecf5ff}.cfg-shell button.primary,.cfg-overlay button.primary{background:#409eff;color:white;border-color:#409eff}.cfg-shell button:disabled,.cfg-overlay button:disabled{opacity:.45;cursor:default}.cfg-top{display:flex;align-items:center;margin:0;padding:0 18px;height:58px;background:white;border-bottom:1px solid #e4e7ed;gap:22px}.cfg-brand{font-weight:700;font-size:24px;color:#2685d8;white-space:nowrap}.cfg-brand span{font-size:14px;font-weight:400;margin-left:6px}.cfg-top nav{display:flex;flex:1;overflow:auto;align-items:stretch;height:100%}.cfg-top nav button{border:0;background:white;white-space:nowrap;border-radius:0;padding:0 14px}.cfg-top nav button.on{color:#409eff;border-bottom:3px solid #409eff;background:#f2f8ff}.cfg-welcome{display:flex;justify-content:space-between;gap:15px;background:#eaf3fc;border-bottom:1px solid #dce7f2;padding:10px 22px;font-size:12px;color:#657489}.cfg-welcome b{margin-left:18px;color:#409eff}.cfg-environment{color:#aa792e;margin-left:12px}.cfg-body{display:grid;grid-template-columns:200px minmax(0,1fr);min-height:calc(100vh - 96px)}.cfg-side{position:sticky;top:0;height:calc(100vh - 96px);background:white;color:#303133;display:block!important;padding:15px 10px;overflow:auto;border-right:1px solid #e4e7ed}.cfg-side details{margin:4px 0 12px}.cfg-side summary{padding:12px 10px;cursor:pointer;font-weight:600}.cfg-side button{display:block;width:100%;text-align:left;border:0;border-radius:3px;padding:10px 16px;margin:2px 0;background:white;font-size:13px}.cfg-side button.on{background:#ecf5ff;color:#409eff;border-left:3px solid #409eff}.cfg-side p{padding:15px 10px;color:#a1a8b2;font-size:11px;line-height:1.9}.cfg-main{padding:0 20px 22px;min-width:0}.cfg-tabs{display:flex;align-items:center;gap:5px;padding:10px 0;border-bottom:1px solid #e4e7ed;overflow:auto;white-space:nowrap}.cfg-tabs button{font-size:12px;padding:6px 10px}.cfg-tabs button.on{color:#409eff;background:#edf6ff;border-color:#9acaff}.cfg-tabs span{margin-left:8px;color:#8ba6c4}.cfg-heading{display:flex;justify-content:space-between;align-items:center;padding:20px 0 16px}.cfg-heading h1{font-size:21px;line-height:1.4;margin:5px 0 0;font-weight:600}.cfg-breadcrumb{font-size:12px;color:#909399}.cfg-badge{display:inline-block;background:#ecf5ff;color:#409eff;border:1px solid #d9ecff;border-radius:3px;font-size:11px;padding:3px 8px}.cfg-badge.pending{color:#a6803d;background:#fdf6ec;border-color:#f5e6cc}.cfg-note{padding:10px 14px;background:#edf6ff;color:#63758a;border:1px solid #dbeafa;border-radius:4px;margin-bottom:14px;font-size:12px;line-height:1.8}.cfg-panel{background:white;border:1px solid #e5e9ee;border-radius:5px;overflow:hidden}.cfg-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:15px;flex-wrap:wrap}.cfg-toolbar form,.cfg-actions{display:flex;gap:8px;align-items:center}.cfg-shell input,.cfg-shell select,.cfg-overlay input,.cfg-overlay select,.cfg-overlay textarea{border:1px solid #dcdfe6;border-radius:4px;padding:8px 10px;background:white;color:#303133;font:inherit}.cfg-shell input:focus,.cfg-shell select:focus,.cfg-overlay input:focus,.cfg-overlay select:focus,.cfg-overlay textarea:focus{outline:2px solid #b4d9ff;outline-offset:1px;border-color:#409eff}.cfg-toolbar input{width:230px}.cfg-more{position:relative}.cfg-more summary{list-style:none;cursor:pointer;border:1px solid #dcdfe6;border-radius:4px;padding:7px 12px;background:white;color:#606266}.cfg-more>div{position:absolute;right:0;top:36px;z-index:3;display:grid;min-width:170px;padding:6px;background:white;border:1px solid #e3e7ec;box-shadow:0 6px 20px #182b4220}.cfg-more>div button{border:0;text-align:left;white-space:nowrap}.cfg-table-wrap{overflow:auto;min-height:330px;max-height:62vh;border-top:1px solid #ebeef5}.cfg-table{white-space:nowrap;min-width:100%;width:max-content;font-size:12px}.cfg-table th{position:sticky;top:0;padding:0;background:#f5f7fa;color:#606266;z-index:1;border-bottom:1px solid #e4e7ed;font-weight:500}.cfg-sort{background:transparent!important;border:0!important;font-size:12px!important;padding:12px 14px!important}.cfg-table td{padding:11px 14px;border-bottom:1px solid #ebeef5;max-width:360px;overflow:hidden;text-overflow:ellipsis}.cfg-table tr.selected td{background:#ecf5ff}.cfg-table .cfg-check{width:40px;min-width:40px;padding:10px}.cfg-shell input[type=checkbox],.cfg-overlay input[type=checkbox]{width:15px;height:15px;margin:0 6px 0 0;vertical-align:middle;accent-color:#409eff}.cfg-status{border-radius:3px;padding:2px 7px;font-size:11px}.cfg-status.enabled{color:#67a952;background:#f0f9eb}.cfg-status.disabled{color:#909399;background:#f4f4f5}.cfg-table .cfg-empty{height:290px;text-align:center;color:#adb3be}.cfg-empty div{font-size:15px;margin-bottom:10px}.cfg-empty small{font-size:12px}.cfg-pagination{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;color:#909399;font-size:12px;gap:10px}.cfg-pagination>div{display:flex;gap:9px;align-items:center}.cfg-pagination select{width:65px;padding:5px}.cfg-pagination input{width:60px;padding:5px}.cfg-pagination button{padding:5px 9px}.cfg-loading{padding:80px;text-align:center;color:#8da2b8}.cfg-error{color:#d95e5e;font-size:13px;line-height:1.8}.cfg-overlay{position:fixed;inset:0;background:#0f243c66;display:flex;align-items:center;justify-content:center;z-index:20;padding:25px}.cfg-dialog{background:white;border-radius:7px;width:560px;max-width:100%;max-height:92vh;box-shadow:0 10px 70px #14274040;display:flex;flex-direction:column}.cfg-dialog.wide{width:900px}.cfg-dialog>header{padding:17px 22px;margin:0;border-bottom:1px solid #ebeef5}.cfg-dialog h2{margin:0;font-size:18px;color:#303133}.cfg-dialog>header button{border:0;font-size:22px;padding:0 5px;color:#909399}.cfg-dialog-body{padding:22px;overflow:auto;min-height:0}.cfg-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.cfg-form-grid label{font-size:13px;color:#606266}.cfg-form-grid input,.cfg-form-grid select,.cfg-form-grid textarea{display:block;width:100%;margin-top:8px}.cfg-form-grid em{font-style:normal;color:#f56c6c}.cfg-form-grid textarea{min-height:70px;resize:vertical}.cfg-form-grid .cfg-check-label{display:flex;align-items:center;gap:5px;padding:12px 0}.cfg-form-grid .cfg-check-label input{display:inline;margin:0;width:15px}.cfg-form-grid fieldset{border:1px solid #e5e9ef;border-radius:4px;margin:0;padding:15px}.cfg-form-grid legend{color:#606266;font-size:13px}.cfg-span{grid-column:1/-1}.cfg-check-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:12px 0}.cfg-check-grid label{display:flex;align-items:center;white-space:normal;color:#606266;font-size:13px}.cfg-check-grid input{display:inline-block;margin:0}.cfg-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin:22px -22px -22px;padding:16px 22px;border-top:1px solid #ebeef5;background:#fafbfc}.cfg-dialog-footer>span{margin-right:auto;font-size:12px;color:#909399}.cfg-dict-row,.cfg-dict-head{display:grid;grid-template-columns:1fr 1.4fr 70px 40px 65px;gap:8px;align-items:center;margin-bottom:8px}.cfg-dict-row input{margin:0}.cfg-dict-head{font-size:12px;color:#909399;margin-bottom:10px}.cfg-role-list{border-right:1px solid #ebeef5;padding:20px;min-height:500px}.cfg-role-list h3{font-size:14px;margin:0 0 15px}.cfg-role-list button{display:block;text-align:left;border:0;width:100%;margin:5px 0;padding:11px}.cfg-role-list button.on{background:#ecf5ff;color:#409eff}.cfg-permission-layout{display:grid;grid-template-columns:180px minmax(0,1fr)}#cfg-grants{padding:25px}#cfg-grants header{margin:0 0 20px}#cfg-grants h2{margin:0}#cfg-grants small{font-size:11px;font-weight:400;color:#909399;margin-left:8px}#cfg-grants summary{padding:13px 8px;background:#f5f7fa;cursor:pointer;color:#536a85}#cfg-grants details{border:1px solid #ebeef5;border-radius:4px;margin:15px 0;padding:0 12px}#cfg-grants table{white-space:normal}.cfg-perm-table th,.cfg-perm-table td{padding:10px 15px}.cfg-perm-table label{display:flex;align-items:center;color:#606266}.cfg-param-tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid #dfe6ee;margin-bottom:15px}.cfg-param-tabs button{border:0;background:transparent;border-radius:0;padding:12px 18px;color:#606266}.cfg-param-tabs button.on{color:#409eff;border-bottom:2px solid #409eff;background:white}#cfg-param-form{padding:20px}.cfg-param-row{display:grid;grid-template-columns:1fr 1.2fr;align-items:center;gap:20px;border-bottom:1px solid #f0f2f5;padding:14px 8px}.cfg-param-row label{font-size:13px;line-height:1.8}.cfg-param-row .cfg-badge{margin-left:10px}.cfg-param-row input:disabled,.cfg-param-row select:disabled{color:#909399;background:#f6f7f9}.cfg-color-list>div{display:flex;align-items:center;gap:12px;margin:8px 0}.cfg-color-list input[type=number]{width:95px}.cfg-color-list input[type=color]{width:60px;height:36px;padding:4px}.cfg-account-flow{display:flex;flex-direction:column;gap:14px;margin-bottom:15px;padding:16px;background:#f3f8ff;color:#5484bc}#cfg-filter-panel{padding:10px 15px;display:flex;gap:15px;align-items:center;background:#fafbfc}#cfg-filter-panel[hidden]{display:none}#cfg-filter-panel label{display:flex;align-items:center;gap:8px}#cfg-filter-panel select{width:130px}.cfg-number{font:24px monospace;padding:20px;background:#f0f6ff;color:#2e85cd;border:1px dashed #abc9ec;border-radius:5px}.cfg-preview-tools{display:flex;gap:15px;margin-bottom:15px}.cfg-preview-tools select{flex:1}#cfg-print-frame{width:100%;height:55vh;border:1px solid #e4e7ed;background:white}#cfg-value-fields{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px}#cfg-value-fields input,#cfg-value-fields select{display:block;margin-top:8px;width:100%}#cfg-value-fields input[type=checkbox]{width:16px}#toast{z-index:30}@media(max-width:1050px){.cfg-body{grid-template-columns:170px minmax(0,1fr)}.cfg-main{padding:0 12px 15px}.cfg-top{gap:12px}.cfg-top nav button{padding:0 10px}.cfg-toolbar{align-items:flex-start}.cfg-pagination{flex-wrap:wrap}.cfg-check-grid{grid-template-columns:1fr 1fr}}@media(max-width:700px){.cfg-body{display:block}.cfg-side{position:static;height:auto;display:flex!important;overflow:auto;gap:5px;padding:6px}.cfg-side details{min-width:160px}.cfg-side p{display:none}.cfg-top{padding:0 8px;gap:8px}.cfg-brand{font-size:18px}.cfg-welcome{padding:10px;flex-wrap:wrap}.cfg-form-grid{grid-template-columns:1fr}.cfg-permission-layout{display:block}.cfg-role-list{min-height:0;display:flex;flex-wrap:wrap;gap:6px}.cfg-role-list h3{width:100%}.cfg-role-list button{width:auto}.cfg-param-row{grid-template-columns:1fr;gap:10px}.cfg-dialog-body{padding:16px}.cfg-overlay{padding:10px}.cfg-dialog-footer{margin:18px -16px -16px}.cfg-pagination>div{flex-wrap:wrap}.cfg-toolbar form{flex-wrap:wrap}.cfg-toolbar input{width:170px}.cfg-dict-row,.cfg-dict-head{grid-template-columns:1fr 1fr 50px 30px 55px}.cfg-check-grid{grid-template-columns:1fr}.cfg-span{grid-column:auto}.cfg-param-tabs button{padding:10px}.cfg-side button{padding:8px 12px}}
.cfg-hierarchy-layout{display:grid;grid-template-columns:170px minmax(0,1fr)}.cfg-hierarchy{border-right:1px solid #e5e9ee;padding:12px 5px;max-height:62vh;overflow:auto;background:#fcfdff}.cfg-hierarchy h3{font-size:12px;color:#909399;font-weight:400;padding:0 10px}.cfg-hierarchy button{display:block;text-align:left;white-space:nowrap;font-size:12px;width:100%;border:0;background:transparent;padding:10px 14px}.cfg-hierarchy button.on{color:#409eff;background:#ecf5ff}.cfg-top nav button{font-size:12px;padding:0 9px}@media(max-width:700px){.cfg-hierarchy-layout{grid-template-columns:120px minmax(0,1fr)}}
/* 配置表单 bool 字段开关按钮 */
.cfg-switch{position:relative;display:inline-block;width:38px;height:20px;flex:none;margin-right:8px}
.cfg-shell .cfg-switch input,.cfg-overlay .cfg-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:1}
.cfg-switch i{position:absolute;inset:0;background:#c4c8ce;border-radius:20px;transition:background .2s;pointer-events:none}
.cfg-switch i:before{content:'';position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.cfg-switch input:checked+i{background:#409eff}
.cfg-switch input:checked+i:before{transform:translateX(18px)}
.cfg-switch input:focus-visible+i{outline:2px solid #a4c9f5;outline-offset:2px}
.cfg-form-grid .cfg-switch-label{display:flex;align-items:center;padding:12px 0}
/* 角色管理：上级角色选择框加长一倍（占满整行）+ 级联触发按钮 */
.role-editor .cfg-form-grid label.role-parent-field{grid-column:1/-1}
.role-editor .role-parent-trigger{display:block;width:100%;margin-top:8px;text-align:left;background:white;color:#303133;border:1px solid #dcdfe6;border-radius:4px;padding:8px 10px;font:inherit;min-height:0}
.role-editor .role-parent-trigger:hover{color:#409eff;border-color:#a9d3ff;background:#ecf5ff}
.role-editor .role-parent-trigger:after{content:'﹀';float:right;color:#909399}
