.app{background:var(--bg);flex-direction:column;height:100vh;display:flex;overflow:hidden}.topnav{background:var(--sidebar-bg);border-bottom:1px solid var(--border);z-index:30;flex:0 0 60px;justify-content:space-between;align-items:center;height:60px;padding:0 22px 0 0;display:flex;position:relative}.topnav-left{align-items:center;height:100%;display:flex}.brand{background:var(--sidebar-bg);border-right:1px solid var(--border);flex-shrink:0;align-items:center;gap:7px;width:186px;height:100%;padding-left:18px;display:flex}.brand-logo{display:flex}.brand-name{letter-spacing:.5px;color:var(--text);font-size:18px;font-weight:700}.brand-tag{color:var(--muted);margin-left:2px;font-size:12px}.topmenu{align-items:center;gap:30px;height:100%;margin-left:34px;display:flex}.topmenu-item{color:var(--text2);cursor:pointer;white-space:nowrap;background:0 0;border:none;height:100%;padding:0 2px;font-size:15px;transition:color .15s;position:relative}.topmenu-item:hover{color:var(--primary)}.topmenu-item.is-active{color:var(--primary);font-weight:600}.topmenu-item.is-active:after{content:"";background:var(--primary);border-radius:3px;width:26px;height:3px;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.topnav-right{align-items:center;gap:16px;display:flex}.topnav-user{cursor:pointer;border-radius:8px;align-items:center;gap:9px;padding:4px 6px;transition:background .15s;display:flex}.topnav-user:hover{background:#e4e8f0}.topnav-user-name{color:var(--text2);white-space:nowrap;font-size:14px}.avatar{cursor:pointer;background:linear-gradient(135deg,#b9c6d8,#8b9bb0);border:none;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;padding:0;transition:box-shadow .15s,transform .15s;display:flex}.avatar:hover{box-shadow:0 0 0 3px var(--primary-soft);transform:translateY(-1px)}.body{flex:1;min-height:0;display:flex;position:relative}.page{flex-direction:column;flex:1;min-width:0;display:flex;overflow:auto}.sidebar{background:var(--sidebar-bg);border-right:1px solid var(--border);z-index:20;flex-direction:column;flex:0 0 186px;width:186px;padding:10px 0 0;transition:width .2s,flex-basis .2s;display:flex}.sidebar.is-collapsed{flex-basis:60px;width:60px}.sidenav{flex:1;padding:0 10px;overflow-y:auto}.sidenav::-webkit-scrollbar{width:5px}.sidenav::-webkit-scrollbar-thumb{background:#e3e6eb;border-radius:3px}.sidenav-group{margin-bottom:2px}.sidenav-item{width:100%;height:42px;color:var(--text2);cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:11px;padding:0 12px;font-size:14.5px;transition:background .15s,color .15s;display:flex;position:relative}.sidenav-item:hover{background:#e4e8f0}.sidenav-item.is-parent-active{color:var(--primary);background:var(--primary-soft3);font-weight:600}.sidenav-icon{flex:none;display:flex}.sidenav-label{text-align:left;white-space:nowrap;flex:1;overflow:hidden}.sidenav-caret{transition:transform .2s;display:flex}.sidenav-caret.is-open{transform:rotate(180deg)}.is-collapsed .sidenav-label,.is-collapsed .sidenav-caret{display:none}.is-collapsed .sidenav-item{justify-content:center;padding:0}.sidenav-sub{padding:2px 0 4px}.sidenav-subitem{text-align:left;width:100%;height:38px;color:var(--text2);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:0 12px 0 42px;font-size:14px;line-height:38px;transition:background .15s,color .15s;display:block}.sidenav-subitem:hover{background:#e4e8f0}.sidenav-subitem.is-active{background:var(--primary-soft);color:var(--primary);font-weight:600}.sidenav-subitem.has-children{justify-content:space-between;align-items:center;display:flex}.sidenav-subitem.has-children .sidenav-caret{display:flex}.sidenav-subitem.is-l2{padding-left:58px}.sidebar-collapse{border:none;border-top:1px solid var(--border2);height:46px;color:var(--muted);cursor:pointer;background:0 0;flex:0 0 46px;justify-content:flex-end;align-items:center;padding-right:18px;display:flex}.is-collapsed .sidebar-collapse{justify-content:center;padding:0}.sidebar-collapse:hover{background:#e4e8f0}.main{flex-direction:column;flex:1;gap:14px;min-width:0;padding:18px 20px;display:flex}.page-head{justify-content:space-between;align-items:center;display:flex}.page-title{color:var(--text);font-size:18px;font-weight:600}.content-card{background:#fff;border:1px solid #edeff3;border-radius:12px;padding:18px;box-shadow:0 1px 2px #141e3c08,0 10px 30px #141e3c0f}.login-page{background:radial-gradient(1100px 540px at 82% -8%, #e8efff 0%, #e8efff00 60%), var(--bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-card{border:1px solid var(--border);background:#fff;border-radius:14px;width:400px;max-width:100%;padding:36px 36px 30px;box-shadow:0 12px 40px #141e3c1a}.login-brand{align-items:center;gap:9px;margin-bottom:6px;display:flex}.login-brand-name{letter-spacing:.5px;color:var(--text);font-size:22px;font-weight:700}.login-sub{color:var(--muted);margin:0 0 26px;font-size:13.5px}.login-foot{text-align:center;color:var(--muted);margin-top:18px;font-size:12.5px}.tpl-split{flex:1;gap:14px;min-height:0;display:flex}.sys-aside{background:#fff;border:1px solid #edeff3;border-radius:12px;flex-direction:column;flex:0 0 230px;width:230px;display:flex;overflow:hidden;box-shadow:0 1px 2px #141e3c08,0 10px 30px #141e3c0f}.sys-aside-head{border-bottom:1px solid var(--border2);color:var(--text);justify-content:space-between;align-items:center;padding:13px 16px;font-size:14px;font-weight:600;display:flex}.sys-aside-body{flex:1;min-height:0;padding:8px 10px;overflow-y:auto}.role-list{flex-direction:column;gap:2px;display:flex}.role-item{cursor:pointer;height:40px;color:var(--text2);border-radius:8px;align-items:center;gap:8px;padding:0 10px;transition:background .15s,color .15s;display:flex}.role-item:hover{background:#e4e8f0}.role-item.is-active{background:var(--primary-soft);color:var(--primary);font-weight:600}.role-item-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14px;overflow:hidden}.role-tag-admin{color:var(--primary);background:var(--primary-soft);border:1px solid var(--primary-soft3);border-radius:3px;flex:none;padding:0 5px;font-size:11px;line-height:17px}.role-perm{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.role-perm-head{border-bottom:1px solid var(--border2);background:#fafbfc;justify-content:space-between;align-items:center;gap:16px;padding:14px 18px;display:flex}.role-perm-head-left{align-items:center;gap:10px;min-width:0;display:flex}.role-perm-title{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:600;overflow:hidden}.role-perm-type{color:var(--text2);background:#eef1f6;border-radius:4px;flex:none;padding:1px 8px;font-size:12px}.role-perm-body{flex-direction:column;flex:1;min-height:0;display:flex}.role-perm-seg.ant-segmented{box-shadow:inset 0 0 0 1px var(--primary-soft3,#2d6bff2e);background:#eef2fb;border-radius:8px;padding:3px}.role-perm-seg.ant-segmented .ant-segmented-item{color:var(--text2);border-radius:6px;font-size:13px;font-weight:600}.role-perm-seg.ant-segmented .ant-segmented-item-label{padding:0 16px}.role-perm-seg.ant-segmented .ant-segmented-item-selected{background:var(--primary);color:#fff;box-shadow:0 2px 6px #2d6bff47}.role-perm-seg.ant-segmented .ant-segmented-thumb{background:var(--primary);border-radius:6px}.perm-cat-tabs{flex-wrap:wrap;gap:8px;padding:14px 18px 0;display:flex}.perm-cat-tab{color:var(--text2);cursor:pointer;background:#f1f3f8;border:1px solid #0000;border-radius:8px;padding:6px 16px;font-size:13px;transition:background .15s,color .15s}.perm-cat-tab:hover{color:var(--primary)}.perm-cat-tab.is-active{background:var(--primary-soft);color:var(--primary);border-color:var(--primary-soft3);font-weight:600}.role-perm-scroll{flex:1;min-height:0;padding:14px 18px 16px;overflow-y:auto}.role-perm-foot{border-top:1px solid var(--border2);background:#fff;flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex;box-shadow:0 -4px 12px #141e3c0d}.role-perm-empty{color:var(--ph);flex:1;justify-content:center;align-items:center;font-size:14px;display:flex}.role-perm-tip{color:var(--muted);font-size:13px}.perm-table .ant-table-thead>tr>th{text-align:center;background:#f7f9fc;font-weight:600}.perm-table .ant-table-tbody>tr>td{vertical-align:middle}.perm-table .ant-table-cell.perm-menu-cell,.perm-table .ant-table-cell.perm-sub-cell{text-align:center;color:var(--text);white-space:nowrap;background:#fcfdff;font-weight:500}.perm-actions{flex-direction:column;gap:8px;display:flex}.perm-actions-all{border-bottom:1px dashed var(--border2);padding-bottom:8px}.perm-actions-grid{flex-wrap:wrap;gap:8px 18px;display:flex}.perm-actions-grid .ant-checkbox-wrapper{margin-inline-start:0}:root{--primary:#2d6bff;--primary-soft:#2d6bff14;--primary-soft2:#2d6bff0d;--primary-soft3:#2d6bff2b;--text:#1d2129;--text2:#4e5969;--muted:#86909c;--ph:#c2c6cd;--border:#e9ebf0;--border2:#f0f2f5;--bg:#f5f7fa;--white:#fff;--sidebar-bg:#eef1f6;--radius:6px;--font:"PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px}a{color:var(--primary)}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:#dfe3e9;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#cdd3db}
