:root{--lh-page:#f5f5f5;--lh-white:#fff;--lh-text:#1f2329;--lh-text2:#606266;--lh-muted:#8b93a1;--lh-orange:#ff8a00;--lh-orange2:#ff7a00;--lh-orange3:#ff6a00;--lh-blue:#409eff;--lh-line:#ebeef5;--lh-sider:232px;--lh-header:56px;--lh-radius:10px;--lh-shadow:0 2px 10px rgba(31,35,41,0.06)}*{box-sizing:border-box}body,html{margin:0;min-height:100%;background:var(--lh-page);color:var(--lh-text);font-family:Noto Sans SC,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.admin-shell{min-height:100vh;display:flex;background:var(--lh-page)}.admin-sider{width:var(--lh-sider);flex-shrink:0;background:var(--lh-white);border-right:1px solid var(--lh-line);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;z-index:20}.admin-brand{display:flex;align-items:center;gap:10px;padding:18px 18px 16px;border-bottom:1px solid #f2f3f5}.admin-brand__mark{width:40px;height:40px;border-radius:11px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#3b82f6,#1d4ed8);color:#fff;font-size:20px;font-weight:800;box-shadow:0 6px 14px rgba(37,99,235,.22);letter-spacing:-1px}.admin-brand__text{display:flex;flex-direction:column;line-height:1.2;min-width:0}.admin-brand__text strong{font-size:17px;font-weight:800;color:var(--lh-text)}.admin-brand__text em{margin-top:2px;font-style:normal;font-size:11px;color:var(--lh-muted);letter-spacing:.06em}.admin-sider__nav{flex:1 1;overflow:auto;padding:12px 10px 20px}.admin-nav-group{margin-bottom:14px}.admin-nav-group__title{padding:8px 12px 6px;font-size:11px;font-weight:700;color:var(--lh-muted);letter-spacing:.08em}.admin-nav-link{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:2px;border-radius:8px;color:#4a5360;font-size:14px;transition:background .15s ease,color .15s ease}.admin-nav-link__ico{display:inline-flex;width:18px;justify-content:center}.admin-nav-link__label{flex:1 1;min-width:0}.admin-nav-badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#f56c6c;color:#fff;font-size:11px;font-weight:700;font-style:normal;line-height:18px;text-align:center}.admin-nav-link .anticon{font-size:16px;color:#909399}.admin-nav-link:hover{background:#fff8f0}.admin-nav-link:hover,.admin-nav-link:hover .anticon{color:var(--lh-orange)}.admin-nav-link.is-active{background:linear-gradient(90deg,#fff4e6,#fffaf3);color:var(--lh-orange);font-weight:600;box-shadow:inset 3px 0 0 var(--lh-orange)}.admin-nav-link.is-active .anticon{color:var(--lh-orange)}.admin-topbar__msg{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px;border-radius:8px;color:#606266;font-size:13px;transition:background .15s ease,color .15s ease}.admin-topbar__msg:hover{background:#fff8f0;color:var(--lh-orange)}.admin-topbar__todo{height:26px;padding:0 10px;border-radius:13px;background:#fff1e6;color:#c45c00;font-size:12px;font-weight:700;line-height:26px}.admin-main{flex:1 1;min-width:0;display:flex;flex-direction:column}.admin-topbar{height:var(--lh-header);background:rgba(255,255,255,.96);border-bottom:1px solid var(--lh-line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;position:-webkit-sticky;position:sticky;top:0;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.admin-topbar__title{font-size:15px;font-weight:700;color:var(--lh-text)}.admin-topbar__title span{margin-left:8px;font-size:12px;font-weight:500;color:var(--lh-muted)}.admin-topbar__right{display:flex;align-items:center;gap:14px}.admin-topbar__user{font-size:13px;color:var(--lh-text2)}.admin-topbar__logout{border:0;background:#fff7ee;color:var(--lh-orange);height:32px;padding:0 14px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s ease}.admin-topbar__logout:hover{background:#ffeed8}.admin-content{padding:18px 20px 28px;flex:1 1}.admin-panel{background:var(--lh-white);border-radius:var(--lh-radius);box-shadow:var(--lh-shadow);padding:18px 18px 8px;min-height:280px}.admin-page-head{margin-bottom:14px}.admin-page-head h1{margin:0;font-size:22px;font-weight:800;color:var(--lh-text)}.admin-page-head p{margin:6px 0 0;font-size:13px;color:var(--lh-muted)}.admin-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:12px;gap:12px;margin-bottom:16px}.admin-stat-card{background:var(--lh-white);border-radius:var(--lh-radius);box-shadow:var(--lh-shadow);padding:16px 18px;border:1px solid transparent;transition:border-color .15s ease,transform .15s ease}.admin-stat-card:hover{border-color:#ffe0b8;transform:translateY(-1px)}.admin-stat-card__label{font-size:13px;color:var(--lh-muted)}.admin-stat-card__value{margin-top:8px;font-size:26px;font-weight:800;color:var(--lh-text);line-height:1.15}.admin-stat-card__value.is-orange{color:var(--lh-orange)}.admin-stat-card__value.is-blue{color:var(--lh-blue)}.admin-login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(900px 420px at 12% -10%,rgba(255,138,0,.16),transparent 60%),radial-gradient(700px 380px at 90% 10%,rgba(64,158,255,.14),transparent 55%),linear-gradient(180deg,#f7f8fa,#f0f2f5)}.admin-login__card{width:min(420px,100%);background:var(--lh-white);border-radius:14px;box-shadow:0 16px 40px rgba(31,35,41,.1);padding:28px 28px 24px}.admin-login__brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}.admin-login__brand .admin-brand__mark{width:46px;height:46px;font-size:22px}.admin-login__brand h1{margin:0;font-size:22px;font-weight:800}.admin-login__brand p{margin:4px 0 0;font-size:13px;color:var(--lh-muted)}.admin-login .ant-btn-primary{height:42px;font-weight:700;background:linear-gradient(135deg,#ff8a00,#ff6a00)!important;border:0!important;box-shadow:0 8px 18px rgba(255,122,0,.28)}.admin-login .ant-btn-primary:hover{filter:brightness(1.03)}.admin-shell .ant-table-wrapper{margin-top:4px}.admin-shell .ant-btn-primary{background:var(--lh-orange);border-color:var(--lh-orange)}.admin-shell .ant-btn-primary:not(:disabled):hover{background:var(--lh-orange2)!important;border-color:var(--lh-orange2)!important}.admin-shell .ant-tag-green,.admin-shell .ant-tag-success{border-radius:6px}@media (max-width:1100px){.admin-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:860px){.admin-sider{display:none}.admin-stat-grid{grid-template-columns:1fr 1fr}}.lh-upload{display:flex;flex-direction:column;gap:8px}.lh-upload__file{display:none!important}.lh-upload__cards{display:flex;flex-wrap:wrap;gap:8px}.lh-upload__add,.lh-upload__card{position:relative;width:104px;height:104px;border-radius:10px;border:1px dashed #d9d9d9;background:#fafafa;overflow:hidden;flex-shrink:0}.lh-upload.is-wide .lh-upload__add,.lh-upload.is-wide .lh-upload__card{width:180px;height:100px}.lh-upload__thumb{width:100%;height:100%;object-fit:cover;display:block;background:#f5f5f5}.lh-upload__mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:10px;background:rgba(0,0,0,.45);opacity:0;transition:opacity .15s ease}.lh-upload__card:hover .lh-upload__mask{opacity:1}.lh-upload__mask button{border:0;background:transparent;color:#fff;font-size:16px;cursor:pointer;padding:4px;line-height:1}.lh-upload__mask button:disabled{opacity:.5;cursor:not-allowed}.lh-upload__add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:#606266;cursor:pointer;font-size:12px;transition:border-color .15s ease,color .15s ease}.lh-upload__add:hover:not(:disabled){border-color:#ff8a00;color:#ff8a00}.lh-upload__add:disabled{opacity:.6;cursor:not-allowed}.lh-upload__add .anticon{font-size:18px}.lh-upload__tip{font-size:12px;color:var(--lh-muted);line-height:1.5}.lh-upload__url{max-width:480px}.admin-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.admin-toolbar__hint{color:var(--lh-muted);font-size:13px}.admin-form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 16px;gap:0 16px}@media (max-width:640px){.admin-form-grid{grid-template-columns:1fr}}.ant-upload-list-item .ant-upload-list-item-size,.ant-upload-list-item-name+span,.ant-upload-list-text .ant-upload-list-item-progress+span{display:none!important}.ant-upload-list-item-container .ant-upload-list-item-name{max-width:100%}