:root{--nav:#142132;--nav2:#1c2d43;--blue:#1b72e8;--bg:#f4f7fb;--line:#e4e9f0;--ink:#172033;--muted:#718096;--danger:#d94141}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}.shell{min-height:100vh;display:flex}.sidebar{width:232px;min-height:100vh;background:var(--nav);color:#d9e3ef;display:flex;flex-direction:column}.brand{height:64px;padding:20px;font-size:17px;font-weight:650;color:#fff;border-bottom:1px solid #2c3c50}.brand span{color:#61a9ff;margin-right:8px}nav{padding:12px 8px}.nav-item,.sub-menu button{border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.nav-item{width:100%;padding:12px;border-radius:6px;text-align:left;display:flex;gap:10px;align-items:center;font-size:15px}.nav-item b{margin-left:auto;color:#94a3b8}.nav-item:hover,.nav-item.active{background:var(--nav2);color:#fff}.sub-menu{display:none;padding:4px 0 5px 38px}.sub-menu.open{display:block}.sub-menu button{display:block;width:100%;padding:9px 10px;text-align:left;color:#aebdd0;border-radius:5px}.sub-menu button:hover,.sub-menu button.selected{color:#fff;background:#254363}.side-user{margin:auto 16px 18px;border-top:1px solid #2c3c50;padding-top:15px;display:flex;gap:10px;align-items:center}.side-user small{display:block;color:#91a4b9;margin-top:3px}.avatar{width:30px;height:30px;display:inline-grid;place-items:center;border-radius:50%;background:#438eea;color:white;font-weight:600}.avatar.small{width:26px;height:26px;margin-left:8px}main{width:calc(100% - 232px);min-width:0}header{height:64px;padding:0 30px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;color:var(--muted)}.head-user{display:flex;align-items:center;color:var(--ink)}.page{display:none;padding:30px}.page.active{display:block}.welcome{max-width:700px;margin:12vh auto;text-align:center}.welcome h1{font-size:34px;margin:10px 0}.welcome p{font-size:16px;color:var(--muted)}.eyebrow{font-size:12px!important;letter-spacing:2px;color:var(--blue)!important}.page-title{display:flex;justify-content:space-between;margin-bottom:22px}.page-title h1,.placeholder h1{font-size:24px;margin:0 0 8px}.page-title p,.placeholder p{color:var(--muted);margin:0}.filter-bar{display:flex;gap:14px;align-items:end;padding:18px;background:#fff;border:1px solid var(--line);border-radius:8px}.filter-bar label{display:grid;gap:7px;color:#526174;font-weight:500;min-width:190px}input,select{height:36px;padding:0 10px;border:1px solid #ccd6e3;border-radius:5px;background:#fff;color:var(--ink);font:inherit;outline:none}input:focus,select:focus{border-color:var(--blue);box-shadow:0 0 0 3px #dbeafe}.primary,.secondary{height:36px;padding:0 16px;border-radius:5px;border:1px solid transparent;font:inherit;cursor:pointer;font-weight:550}.primary{background:var(--blue);color:#fff}.primary:hover{background:#1262cc}.secondary{background:#fff;color:#34445a;border-color:#cbd5e1}.secondary:hover{background:#f6f8fb}.primary:disabled,.secondary:disabled{opacity:.5;cursor:not-allowed}.toolbar{margin:20px 0 12px;display:flex;gap:10px;align-items:center}.toolbar span{margin-left:auto;color:var(--muted)}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:8px}table{border-collapse:collapse;width:100%;min-width:1180px}th,td{padding:14px 12px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}th{background:#f8fafc;color:#66758a;font-size:13px;font-weight:600}td{font-size:13px}tbody tr:hover{background:#fbfdff}.status{display:inline-block;padding:3px 8px;border-radius:12px;font-size:12px}.done{background:#e8f7ee;color:#23834d}.loading{background:#e6f0ff;color:#2368be}.failed{background:#ffebeb;color:#b63030}.actions{display:flex;gap:9px}.link-btn{border:0;background:transparent;color:var(--blue);padding:0;cursor:pointer;font:inherit}.link-btn.danger{color:var(--danger)}.modal{display:none;position:fixed;inset:0;background:#15203588;z-index:5;align-items:center;justify-content:center;padding:20px}.modal.show{display:flex}.dialog{width:min(480px,100%);background:#fff;border-radius:9px;box-shadow:0 16px 45px #0004}.dialog-head{padding:17px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.dialog h2{font-size:18px;margin:0}.icon-close{font-size:24px;line-height:1;border:0;background:transparent;color:var(--muted);cursor:pointer}.dialog form{padding:20px;display:grid;gap:17px}.dialog label:not(.radio):not(.check){display:grid;gap:8px;font-weight:500}.dialog em{color:var(--danger);font-style:normal}.dialog small,.hint{color:var(--muted);font-weight:400;margin:-3px 0 0}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.radio,.check{cursor:pointer}.dialog hr{border:0;border-top:1px solid var(--line);width:100%;margin:0}.placeholder{padding-top:70px}#toast{display:none;position:fixed;bottom:28px;left:50%;transform:translateX(-50%);padding:11px 17px;background:#202d40;color:white;border-radius:6px;z-index:10}@media(max-width:760px){.sidebar{width:56px}.brand{padding:20px 16px;font-size:0}.brand span{font-size:18px}.nav-item span,.nav-item b,.sub-menu,.side-user div{display:none!important}.nav-item{justify-content:center;padding:13px 4px}.side-user{margin: auto 12px 16px;padding-top:12px}.side-user .avatar{display:grid}main{width:calc(100% - 56px)}header{padding:0 16px}.page{padding:20px 14px}.filter-bar{display:grid;grid-template-columns:1fr 1fr}.filter-bar label{min-width:0}.filter-bar button{width:100%}}@media(max-width:480px){.filter-bar{grid-template-columns:1fr}.welcome h1{font-size:26px}}
.field-label{display:inline-flex;align-items:center;gap:4px;line-height:20px}.radio,.check{display:flex!important;align-items:center;gap:8px;min-height:20px;line-height:20px;cursor:pointer}.radio input,.check input{width:16px;height:16px;margin:0;flex:0 0 auto;accent-color:var(--blue)}
input[type="file"]{display:flex;align-items:center;padding:4px 10px;line-height:26px}input[type="file"]::file-selector-button{height:26px;margin:0 8px 0 0;padding:0 10px;border:1px solid #bfc9d7;border-radius:4px;background:#f7f9fc;color:var(--ink);font:inherit;line-height:24px;vertical-align:middle;cursor:pointer}input[type="file"]::file-selector-button:hover{background:#edf3fb}
.compact-table th,.compact-table td{padding:10px 12px}.check-cell{width:42px;text-align:center}.check-cell input{width:16px;height:16px;margin:0;accent-color:var(--blue)}.pagination{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:14px;color:var(--muted);flex-wrap:wrap}.pagination label{display:flex;align-items:center;gap:6px}.pagination select{height:32px}.pagination input{width:58px;height:32px}.page-actions{display:flex;align-items:center;gap:7px}.page-actions .secondary,.pagination>.secondary{height:32px;padding:0 11px}.dialog-small{width:min(420px,100%)}.confirm-content{padding:20px}.confirm-content p{line-height:1.7;margin:0;color:#3c4a5e}.danger-button{height:36px;padding:0 16px;border:1px solid transparent;border-radius:5px;background:var(--danger);color:#fff;font:inherit;font-weight:550;cursor:pointer}.danger-button:hover{background:#bf3030}@media(max-width:760px){.pagination{justify-content:flex-start}.page-actions{order:3;width:100%;justify-content:space-between}}
.three-fields label{min-width:150px}.dialog textarea{width:100%;padding:9px 10px;border:1px solid #ccd6e3;border-radius:5px;color:var(--ink);font:inherit;resize:vertical}.note-cell{max-width:180px;overflow:hidden;text-overflow:ellipsis}.empty-cell{text-align:center;color:var(--muted);padding:32px!important}.detail-list{display:grid;grid-template-columns:92px 1fr;gap:0;margin:0;padding:20px}.detail-list dt,.detail-list dd{margin:0;padding:10px 0;border-bottom:1px solid var(--line)}.detail-list dt{color:var(--muted)}.detail-list dd{overflow-wrap:anywhere}.detail-list .detail-note{white-space:pre-wrap;line-height:1.6}@media(max-width:760px){.three-fields{grid-template-columns:1fr}.three-fields label{min-width:0}}
#toast{top:28px;bottom:auto}.dialog #dev-note{height:36px;min-height:36px;overflow:hidden;resize:none;line-height:18px}.dev-record-table th,.dev-record-table td,.dev-upload-table th,.dev-upload-table td{padding-left:8px;padding-right:8px}.dev-record-table th:nth-child(7),.dev-record-table td:nth-child(7){width:154px}.dev-record-table th:nth-child(8),.dev-record-table td:nth-child(8){width:58px}.dev-upload-table th:nth-child(6),.dev-upload-table td:nth-child(6){width:154px}.dev-upload-table th:nth-child(7),.dev-upload-table td:nth-child(7){width:78px}
.dev-record-table table{min-width:860px;width:100%;table-layout:fixed}.dev-upload-table table{min-width:720px;width:100%;table-layout:fixed}.dev-record-table th,.dev-record-table td,.dev-upload-table th,.dev-upload-table td{padding-top:8px;padding-bottom:8px;line-height:18px}.dev-record-table th:nth-child(1),.dev-record-table td:nth-child(1){width:62px}.dev-record-table th:nth-child(2),.dev-record-table td:nth-child(2){width:90px}.dev-record-table th:nth-child(3),.dev-record-table td:nth-child(3){width:132px}.dev-record-table th:nth-child(4),.dev-record-table td:nth-child(4){width:132px}.dev-record-table th:nth-child(5),.dev-record-table td:nth-child(5){width:150px}.dev-record-table .note-cell{max-width:150px}.dev-upload-table th:nth-child(1),.dev-upload-table td:nth-child(1){width:42px}.dev-upload-table th:nth-child(2),.dev-upload-table td:nth-child(2){width:190px}.dev-upload-table th:nth-child(3),.dev-upload-table td:nth-child(3),.dev-upload-table th:nth-child(4),.dev-upload-table td:nth-child(4){width:88px}.dev-upload-table th:nth-child(5),.dev-upload-table td:nth-child(5){width:92px}@media(max-width:760px){.dev-record-table table{min-width:860px}.dev-upload-table table{min-width:720px}}
.dev-record-table th:nth-child(2),.dev-record-table td:nth-child(2){width:112px;padding-right:16px}.dev-record-table th:nth-child(5),.dev-record-table td:nth-child(5){width:122px;padding-right:4px}.dev-record-table th:nth-child(6),.dev-record-table td:nth-child(6){width:58px;padding-left:4px;padding-right:4px}.dev-record-table th:nth-child(7),.dev-record-table td:nth-child(7){width:142px;padding-left:4px}.dev-record-table .note-cell{max-width:122px}.dev-upload-table table{min-width:790px}.dev-upload-table th:nth-child(5),.dev-upload-table td:nth-child(5){width:64px}.dev-upload-table th:nth-child(6),.dev-upload-table td:nth-child(6){width:82px}.dev-upload-table th:nth-child(7),.dev-upload-table td:nth-child(7){width:142px}.dev-upload-table th:nth-child(8),.dev-upload-table td:nth-child(8){width:78px}
.dev-upload-table th,.dev-upload-table td{padding:8px 10px!important;vertical-align:middle}.dev-upload-table .check-cell{padding-left:10px!important;padding-right:10px!important}.dev-upload-table .actions{justify-content:center;gap:10px}
.dev-upload-table table{min-width:920px}.dev-upload-table th:nth-child(2),.dev-upload-table td:nth-child(2),.dev-upload-table th:nth-child(3),.dev-upload-table td:nth-child(3),.dev-upload-table th:nth-child(4),.dev-upload-table td:nth-child(4),.dev-upload-table th:nth-child(5),.dev-upload-table td:nth-child(5),.dev-upload-table th:nth-child(6),.dev-upload-table td:nth-child(6),.dev-upload-table th:nth-child(7),.dev-upload-table td:nth-child(7){width:132px!important}.dev-upload-table th:nth-child(7),.dev-upload-table td:nth-child(7){font-size:12px}
.dev-upload-table th:nth-child(7),.dev-upload-table td:nth-child(7){padding-right:18px!important}.dev-upload-table th:nth-child(8),.dev-upload-table td:nth-child(8){padding-left:18px!important}
.login-page{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#142132,#286fc4)}.login-card{width:min(390px,calc(100% - 32px));padding:34px;background:#fff;border-radius:12px;box-shadow:0 20px 60px #0005}.login-brand{color:var(--blue);font-size:17px;font-weight:700}.login-card h1{margin:26px 0 8px;font-size:25px}.login-card>p{margin:0 0 24px;color:var(--muted)}.login-card form{display:grid;gap:16px}.login-card label{display:grid;gap:8px;color:#526174;font-weight:600}.login-card .primary{width:100%;margin-top:4px}.login-error{min-height:18px;margin:0;color:var(--danger);font-size:13px}.permission-tree{max-height:58vh;overflow:auto;padding:16px 20px}.permission-row{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-start;gap:8px;padding:7px 0;line-height:20px;white-space:nowrap;cursor:pointer}.permission-row input{display:block;width:16px!important;height:16px!important;min-width:16px;margin:0!important;flex:0 0 16px;accent-color:var(--blue)}.permission-row span{display:block}.permission-row.level-1{padding-left:24px}.permission-row.level-2{padding-left:52px;color:#526174}.permission-row.level-0{font-weight:700}.user-table table,.role-table table{min-width:760px}.permission-dialog{width:min(620px,100%)}
.security-tip{font-size:14px!important;margin:12px 0!important;color:#d87800!important}.head-user .link-btn{margin-left:12px}
.user-menu{position:relative;margin-left:8px}.avatar-button{border:0;cursor:pointer;font:inherit}.user-menu-dropdown{display:none;position:absolute;right:0;top:36px;width:112px;padding:5px;background:#fff;border:1px solid var(--line);border-radius:7px;box-shadow:0 8px 22px #0002;z-index:12}.user-menu.open .user-menu-dropdown{display:grid}.user-menu-dropdown button{height:32px;padding:0 10px;border:0;border-radius:4px;background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer}.user-menu-dropdown button:hover{background:#f1f5f9}.user-menu-dropdown #logout-button{color:var(--danger)}
.language-toggle{height:28px;min-width:34px;margin-right:5px;padding:0 7px;border:1px solid #cbd5e1;border-radius:4px;background:#fff;color:#526174;font-size:12px;font-weight:650;cursor:pointer}.language-toggle:hover{border-color:var(--blue);color:var(--blue)}
.range-table table{min-width:790px;width:100%;table-layout:fixed}.range-table th,.range-table td{padding:8px 7px;line-height:18px}.range-table th:nth-child(1),.range-table td:nth-child(1){width:76px}.range-table th:nth-child(2),.range-table td:nth-child(2){width:116px}.range-table th:nth-child(3),.range-table td:nth-child(3){width:70px}.range-table th:nth-child(4),.range-table td:nth-child(4),.range-table th:nth-child(5),.range-table td:nth-child(5){width:122px}.range-table th:nth-child(6),.range-table td:nth-child(6){width:80px}.range-table th:nth-child(7),.range-table td:nth-child(7){width:92px}.range-table th:nth-child(8),.range-table td:nth-child(8){width:105px}.range-table .actions{gap:7px}
.password-field{position:relative;display:block}.password-field input{width:100%;padding-right:52px}.password-field button{position:absolute;right:7px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:var(--blue);font:inherit;font-size:0;cursor:pointer;padding:4px;line-height:1}.password-field button::after{content:"";display:block;width:18px;height:18px;background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 3l18 18'/%3E%3Cpath d='M10.6 10.6a2 2 0 0 0 2.8 2.8'/%3E%3Cpath d='M9.9 4.2A11.7 11.7 0 0 1 12 4c5.5 0 9.3 4.2 10 8-0.3 1.5-1.1 3-2.3 4.2'/%3E%3Cpath d='M6.6 6.6C4.7 8 3.4 10 2 12c1.1 3.1 4.7 8 10 8 1.7 0 3.2-0.5 4.5-1.2'/%3E%3C/svg%3E")}.password-field button:hover::after{filter:brightness(.72)}
.password-field button[aria-pressed="true"]::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12s3.6-6 10-6 10 6 10 6-3.6 6-10 6S2 12 2 12Z'/%3E%3Ccircle cx='12' cy='12' r='2.5'/%3E%3C/svg%3E")}
.header-left{display:flex;align-items:center;gap:12px}.mobile-nav-toggle{display:none;width:34px;height:34px;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--ink);font-size:20px;line-height:1;cursor:pointer}@media(max-width:760px){.mobile-nav-toggle{display:block}.shell.mobile-nav-open .sidebar{position:fixed;inset:0 auto 0 0;z-index:20;width:232px;box-shadow:12px 0 28px #0005}.shell.mobile-nav-open .brand{padding:20px;font-size:17px}.shell.mobile-nav-open .brand span{font-size:inherit}.shell.mobile-nav-open .nav-item{justify-content:flex-start;padding:12px}.shell.mobile-nav-open .nav-item span,.shell.mobile-nav-open .nav-item b,.shell.mobile-nav-open .side-user div{display:inline!important}.shell.mobile-nav-open .sub-menu.open{display:block!important}.shell.mobile-nav-open main{width:100%}.shell.mobile-nav-open .mobile-nav-toggle{position:fixed;top:15px;left:244px;z-index:21;box-shadow:0 2px 10px #0004}.shell.mobile-nav-open::after{content:"";position:fixed;inset:0;background:#0005;z-index:15}}
.totp-content{padding:20px;display:grid;gap:15px}.totp-content section{display:grid;gap:13px}.totp-content p{margin:0;line-height:1.65;color:#3c4a5e}.totp-content label{display:grid;gap:7px;font-weight:500}.totp-qr{width:190px;height:190px;justify-self:center;border:1px solid var(--line);border-radius:6px}.totp-content [hidden]{display:none!important}
.user-menu-dropdown{width:146px}
