:root{font-family:Inter,Microsoft YaHei,system-ui,sans-serif;color:#1f2937;background:#f5f7fb}*{box-sizing:border-box}html,body,#root{margin:0;min-width:1100px;min-height:100%}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}.admin-shell{display:flex;min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:220px;display:flex;flex-direction:column;padding:17px 13px;background:#101828;color:#fff;z-index:5}.side-brand,.login-brand{display:flex;align-items:center;gap:11px}.side-brand{height:52px;padding:0 9px}.side-brand b,.side-brand small,.login-brand b,.login-brand small{display:block}.side-brand b{font-size:16px}.side-brand small,.login-brand small{margin-top:3px;color:#667085;font-size:8px;letter-spacing:.16em}.logo{position:relative;width:36px;height:36px;flex:none;border-radius:9px;background:linear-gradient(145deg,#1677ff,#6941c6);box-shadow:0 8px 20px #1677ff40}.logo span{position:absolute;width:6px;height:15px;border-radius:5px;background:#fff;transform:rotate(25deg)}.logo span:nth-child(1){left:8px;top:10px}.logo span:nth-child(2){left:15px;top:6px}.logo span:nth-child(3){left:22px;top:12px;height:10px}.nav-label{margin:24px 11px 8px;color:#667085;font-size:9px;letter-spacing:.15em}.sidebar nav{display:grid;gap:4px}.sidebar nav button{height:42px;display:grid;grid-template-columns:20px 1fr 14px;align-items:center;gap:8px;padding:0 11px;border:0;border-radius:7px;background:transparent;color:#98a2b3;text-align:left}.sidebar nav button:hover{background:#1d2939;color:#e4e7ec}.sidebar nav button.active{background:#1677ff;color:#fff;box-shadow:0 5px 14px #1677ff32}.sidebar nav button svg:last-child{opacity:.4}.side-foot{margin-top:auto;padding:14px 7px 0;border-top:1px solid #344054}.current-user{display:flex;align-items:center;gap:9px}.current-user>span{width:32px;height:32px;display:grid;place-items:center;border-radius:50%;background:#344054;font-weight:700}.current-user b,.current-user small{display:block}.current-user b{font-size:12px}.current-user small{margin-top:2px;color:#98a2b3;font-size:9px}.side-foot>button{width:100%;height:33px;display:flex;align-items:center;gap:7px;margin-top:9px;padding:0 7px;border:0;background:transparent;color:#98a2b3;font-size:11px}.side-foot>button:hover{color:#fff}.main{width:calc(100% - 220px);min-height:100vh;margin-left:220px}.topbar{height:74px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;border-bottom:1px solid #e4e7ec;background:#fff}.crumb{display:flex;align-items:center;gap:5px;color:#98a2b3;font-size:10px}.crumb b{color:#475467}.topbar h1{margin:7px 0 0;font-size:18px}.top-actions{display:flex;align-items:center;gap:10px}.server{display:flex;align-items:center;gap:6px;padding:7px 10px;border:1px solid #e4e7ec;border-radius:7px;color:#475467;font-size:10px}.server i,.secure i{width:6px;height:6px;border-radius:50%;background:#12b76a;box-shadow:0 0 0 3px #d1fadf}.icon-btn{width:32px;height:32px;display:grid;place-items:center;border:1px solid #d0d5dd;border-radius:7px;background:#fff;color:#667085}.content{padding:20px 24px 32px}.notice{display:flex;align-items:center;justify-content:space-between;margin:14px 24px 0;padding:10px 13px;border-radius:7px;font-size:11px}.notice.success{background:#ecfdf3;color:#027a48}.notice.error,.error-box{background:#fef3f2;color:#b42318}.notice button{border:0;background:transparent;color:inherit}.dashboard{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:14px}.welcome{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;min-height:170px;padding:28px;border-radius:10px;background:linear-gradient(120deg,#101828,#1d2939 60%,#194185);color:#fff;box-shadow:0 12px 28px #10182820}.welcome>div>span{color:#84adff;font-size:9px;letter-spacing:.15em}.welcome h2{margin:11px 0 8px;font-size:26px}.welcome p{max-width:650px;margin:0;color:#b2ccff;font-size:12px}.service-card{min-width:230px;display:grid;gap:6px;padding:18px;border:1px solid #ffffff25;border-radius:9px;background:#ffffff0e}.service-card small{color:#98a2b3;font-size:9px}.stat{display:flex;align-items:center;gap:13px;padding:17px;border:1px solid #eaecf0;border-radius:9px;background:#fff;box-shadow:0 2px 5px #10182808}.stat>span{width:38px;height:38px;display:grid;place-items:center;border-radius:9px}.stat>span.blue{background:#eff8ff;color:#175cd3}.stat>span.violet{background:#f4f3ff;color:#5925dc}.stat>span.green{background:#ecfdf3;color:#027a48}.stat>span.orange{background:#fffaeb;color:#b54708}.stat small,.stat b,.stat em{display:block}.stat small{color:#667085;font-size:10px}.stat b{margin:2px 0;font-size:23px}.stat em{color:#98a2b3;font-size:9px;font-style:normal}.card{border:1px solid #eaecf0;border-radius:9px;background:#fff;box-shadow:0 2px 6px #10182808}.responsibilities{grid-column:span 3}.credential-list{grid-column:span 1}.heading{min-height:70px;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:15px 18px;border-bottom:1px solid #f2f4f7}.heading h3{margin:0;font-size:14px}.heading p{margin:5px 0 0;color:#98a2b3;font-size:10px}.heading-actions{display:flex;align-items:center;gap:8px}.responsibilities>div{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:18px}.responsibilities article{display:grid;grid-template-columns:28px 1fr;align-items:center;gap:4px 8px;padding:16px;border:1px solid #eaecf0;border-radius:8px;background:#f9fafb}.responsibilities article svg{grid-row:span 2;color:#1677ff}.responsibilities article b{font-size:12px}.responsibilities article span{color:#667085;font-size:10px}.credential-list>div{padding:8px 17px}.credential-list p{display:flex;align-items:center;justify-content:space-between;min-height:45px;margin:0;border-bottom:1px solid #f2f4f7;font-size:11px}.primary,.secondary{height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 11px;border-radius:7px;font-size:11px;font-weight:600}.primary{border:1px solid #1677ff;background:#1677ff;color:#fff}.secondary{border:1px solid #d0d5dd;background:#fff;color:#475467}.search{width:220px;height:34px;display:flex;align-items:center;gap:7px;padding:0 10px;border:1px solid #d0d5dd;border-radius:7px;color:#98a2b3}.search input{width:100%;border:0;outline:0;font-size:11px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;white-space:nowrap}th,td{padding:12px 15px;border-bottom:1px solid #f2f4f7;text-align:left;font-size:11px}th{background:#f9fafb;color:#667085;font-size:10px}.right{text-align:right}.identity{display:flex;align-items:center;gap:9px}.identity>span{width:31px;height:31px;display:grid;place-items:center;border-radius:50%;background:#eff8ff;color:#175cd3;font-weight:700}.identity b,.identity small{display:block}.identity small{margin-top:3px;color:#98a2b3;font-size:9px}.role{padding:4px 8px;border-radius:99px;background:#f4f3ff;color:#5925dc;font-size:9px}.status{display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border-radius:99px;font-size:9px}.status i{width:5px;height:5px;border-radius:50%;background:currentColor}.status.ok{background:#ecfdf3;color:#027a48}.status.warning{background:#fffaeb;color:#b54708}.action{display:inline-flex;align-items:center;gap:4px;padding:5px 7px;border:0;border-radius:5px;background:transparent;color:#175cd3;font-size:10px}.action:hover{background:#eff8ff}.action.danger{color:#b42318}.role-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:18px}.role-grid article{display:grid;gap:12px;padding:16px;border:1px solid #eaecf0;border-radius:8px}.role-title{display:flex;align-items:center;gap:9px}.role-title>span{width:36px;height:36px;display:grid;place-items:center;border-radius:8px;background:#eff8ff;color:#175cd3}.role-title b,.role-title small{display:block}.role-title small{margin-top:3px;color:#98a2b3;font-size:9px}.role-grid article p{min-height:34px;margin:0;color:#667085;font-size:10px}.role-grid article footer{display:flex;align-items:center;justify-content:space-between;padding-top:10px;border-top:1px solid #f2f4f7}.role-grid em{color:#667085;font-size:9px;font-style:normal}.role-grid footer button{display:flex;gap:4px;border:0;background:transparent;color:#175cd3;font-size:9px}.logs{padding:0 18px 12px}.log-head,.log-row{display:grid;grid-template-columns:80px 155px 190px 1fr;align-items:center;gap:8px}.log-head{height:36px;color:#98a2b3;font-size:9px}.log-row{min-height:43px;border-top:1px solid #f2f4f7;font-size:10px}.log-row>span{display:flex;align-items:center;gap:6px;text-transform:uppercase}.log-row i{width:6px;height:6px;border-radius:50%;background:#98a2b3}.log-row i.success{background:#12b76a}.log-row i.warn{background:#f79009}.log-row i.error{background:#f04438}.log-row time{color:#98a2b3}.log-row em{color:#667085;font-style:normal}.empty{min-height:160px;display:grid;place-items:center;align-content:center;gap:9px;color:#c0c7d1;font-size:11px}.login-page{min-height:100vh;display:grid;grid-template-rows:auto 1fr auto;place-items:center;padding:32px;background:radial-gradient(circle at 50% 0,#eaf2ff,#f5f7fb 45%,#eef2f6)}.login-brand b{font-size:18px}.login-card{width:390px;padding:31px;border:1px solid #e4e7ec;border-radius:11px;background:#fff;box-shadow:0 20px 60px #10182814}.login-icon{width:44px;height:44px;display:grid;place-items:center;border-radius:10px;background:#eff8ff;color:#1677ff}.login-card h1{margin:17px 0 6px;font-size:20px}.login-card>p{margin:0 0 22px;color:#667085;font-size:11px}.login-card label{display:grid;gap:6px;margin-top:13px;color:#344054;font-size:11px}.login-card input{height:39px;padding:0 11px;border:1px solid #d0d5dd;border-radius:7px;outline:0}.login-submit{width:100%;height:39px;margin-top:20px}.secure{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:14px;color:#98a2b3;font-size:9px}.login-page footer{color:#98a2b3;font-size:9px}.error-box{margin-top:12px;padding:9px;border-radius:6px;font-size:10px}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:20px;background:#10182880;z-index:20}.modal{width:min(680px,calc(100vw - 40px));max-height:calc(100vh - 40px);overflow:auto;border-radius:10px;background:#fff;box-shadow:0 25px 70px #10182835}.modal>header{display:flex;align-items:flex-start;justify-content:space-between;padding:18px 20px;border-bottom:1px solid #eaecf0}.modal>header h3{margin:0;font-size:15px}.modal>header p{margin:5px 0 0;color:#98a2b3;font-size:9px}.modal>header button{width:28px;height:28px;border:0;border-radius:6px;background:#f2f4f7}.modal form{padding:18px 20px 20px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid label{display:grid;gap:6px;color:#344054;font-size:10px}.form-grid .full{grid-column:1/-1}.form-grid input,.form-grid select,.form-grid textarea{width:100%;border:1px solid #d0d5dd;border-radius:7px;outline:0}.form-grid input,.form-grid select{height:38px;padding:0 10px}.form-grid textarea{min-height:170px;padding:10px;resize:vertical;font:11px/1.6 Consolas,monospace}.toggle{grid-column:1/-1!important;display:flex!important;align-items:center;gap:8px!important;padding:10px;border:1px solid #eaecf0;border-radius:7px;background:#f9fafb}.toggle input{width:15px;height:15px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:19px;padding-top:15px;border-top:1px solid #f2f4f7}.json-tip{display:flex;align-items:center;gap:8px;margin-top:14px;padding:10px;border-radius:7px;background:#eff8ff;color:#175cd3;font-size:9px}.permission-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.permission-grid label{display:flex;align-items:flex-start;gap:8px;padding:10px;border:1px solid #eaecf0;border-radius:7px}.permission-grid b,.permission-grid small{display:block}.permission-grid small{margin-top:3px;color:#98a2b3;font:8px Consolas}.busy{position:fixed;right:18px;bottom:18px;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:#101828;color:#fff;z-index:30}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:1280px){.dashboard{grid-template-columns:repeat(2,1fr)}.responsibilities,.credential-list{grid-column:1/-1}.role-grid{grid-template-columns:1fr 1fr}}.menu-tree{display:grid!important;gap:3px}.menu-tree .menu-home,.menu-parent{height:40px!important}.menu-group{display:grid;gap:2px}.menu-parent.selected{color:#e4e7ec!important;background:#1d2939!important}.menu-parent svg:last-child{transition:transform .18s}.menu-parent svg:last-child.expanded{transform:rotate(90deg)}.submenu{display:grid;gap:2px;margin:2px 0 6px;padding-left:18px}.submenu button{height:36px!important;grid-template-columns:7px 16px 1fr!important;padding:0 10px!important;font-size:11px}.submenu button.active{background:#1677ff!important}.submenu-dot{width:4px;height:4px;border-radius:50%;background:#667085}.submenu button.active .submenu-dot{background:#fff}.overview-page{display:grid;gap:14px}.overview-stats{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:14px}.overview-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.system-status-card,.quick-entry-card,.recent-card,.credential-card{min-height:280px}.system-status-list{display:grid;padding:8px 18px 14px}.system-status-list>div{min-height:46px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #f2f4f7;font-size:11px}.system-status-list span{display:flex;align-items:center;gap:8px;color:#475467}.system-status-list b{font-size:10px;color:#027a48}.health-dot{width:7px;height:7px;border-radius:50%;background:#12b76a;box-shadow:0 0 0 3px #d1fadf}.health-dot.warn{background:#f79009;box-shadow:0 0 0 3px #fef0c7}.quick-entry-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:14px 18px}.quick-entry-list button{min-height:69px;display:grid;grid-template-columns:36px 1fr 16px;align-items:center;gap:9px;padding:10px;border:1px solid #eaecf0;border-radius:7px;background:#fff;text-align:left;color:#344054}.quick-entry-list button:hover{border-color:#84adff;background:#f5f9ff}.quick-entry-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:7px;background:#eff8ff;color:#175cd3}.quick-entry-list b,.quick-entry-list small{display:block}.quick-entry-list b{font-size:11px}.quick-entry-list small{margin-top:4px;color:#98a2b3;font-size:9px}.quick-entry-list>button>svg{color:#98a2b3}.recent-list,.credential-rows{padding:7px 18px 14px}.recent-list>div,.credential-rows>div{min-height:48px;display:flex;align-items:center;gap:9px;border-bottom:1px solid #f2f4f7}.recent-level{width:7px;height:7px;flex:none;border-radius:50%;background:#98a2b3}.recent-level.success{background:#12b76a}.recent-level.warn{background:#f79009}.recent-level.error{background:#f04438}.recent-list>div>div{min-width:0;flex:1}.recent-list b,.recent-list small,.credential-rows b,.credential-rows small{display:block}.recent-list b{overflow:hidden;color:#344054;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.recent-list small,.credential-rows small{margin-top:3px;color:#98a2b3;font-size:9px}.recent-list time{color:#98a2b3;font-size:9px}.credential-rows>div{justify-content:space-between}.credential-rows b{font-size:11px}@media(max-width:1280px){.overview-stats{grid-template-columns:repeat(2,1fr)}}.modal-wide{width:min(920px,calc(100vw - 40px));max-height:calc(100vh - 40px);overflow:auto}.platform-form{padding:18px 20px 20px}.json-import{border:1px solid #d0d5dd;border-radius:8px;background:#f9fafb;padding:13px}.json-import-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.json-import-title b,.json-import-title small{display:block}.json-import-title b{font-size:12px;color:#101828}.json-import-title small{margin-top:3px;font-size:9px;color:#667085}.json-import textarea{width:100%;min-height:190px;padding:11px;border:1px solid #d0d5dd;border-radius:7px;background:#fff;resize:vertical;font:10px/1.55 Consolas,monospace;outline:0}.json-import textarea:focus{border-color:#84adff;box-shadow:0 0 0 3px #eff4ff}.parsed-title{display:flex;align-items:center;gap:7px;margin:17px 0 11px;color:#175cd3}.parsed-title b{font-size:11px}.parsed-title span{color:#667085;font-size:9px}.parsed-grid{padding:0!important}.input-secret{position:relative}.input-secret input{padding-right:38px!important}.input-secret button{position:absolute;right:4px;top:4px;width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:5px;background:#f2f4f7;color:#475467}.secret-cell{max-width:180px}.secret-cell code{display:block;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#344054}.cell-sub{display:block;margin-top:3px;color:#98a2b3;font-size:9px}.role-name{display:flex;align-items:center;gap:8px;color:#175cd3}.role-edit-summary{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid #eaecf0;background:#f9fafb}.role-edit-summary b,.role-edit-summary small{display:block}.role-edit-summary b{font-size:12px;color:#101828}.role-edit-summary small{margin-top:3px;color:#667085;font-size:9px}.permission-tree-form{padding:0!important}.permission-tree{display:grid;gap:10px;padding:15px 18px;max-height:540px;overflow:auto}.permission-tree section{overflow:hidden;border:1px solid #eaecf0;border-radius:8px;background:#fff}.permission-parent{min-height:42px;display:flex;align-items:center;gap:8px;padding:0 12px;background:#f9fafb;border-bottom:1px solid #eaecf0;color:#344054}.permission-parent input,.permission-children input{width:15px;height:15px;accent-color:#1677ff}.permission-parent b{font-size:11px;flex:1}.permission-parent span{font-size:9px;color:#667085}.permission-children{display:grid;grid-template-columns:1fr 1fr;gap:0}.permission-children label{display:flex;align-items:flex-start;gap:8px;padding:11px 12px;border-bottom:1px solid #f2f4f7}.permission-children label:nth-child(odd){border-right:1px solid #f2f4f7}.permission-children b,.permission-children small{display:block}.permission-children b{font-size:10px;color:#344054}.permission-children small{margin-top:3px;color:#98a2b3;font:8px Consolas}.permission-tree-form .modal-actions{margin:0 18px 18px}.overview-stats{grid-template-columns:repeat(3,minmax(150px,1fr))!important}@media(max-width:900px){.permission-children{grid-template-columns:1fr}.permission-children label:nth-child(odd){border-right:0}.parsed-grid{grid-template-columns:1fr}.form-grid .full{grid-column:1}}
