:root {
  --admin-primary: #eb67a5;
  --admin-primary-rgb: 235,103,165;
  --admin-primary-dark: #cc4b8a;
  --admin-primary-light: #fdf0f6;
  --admin-accent: #f08bbb;
  --bg-body: #f4f5f8;
  --bg-card: #ffffff;
  --bg-subtle: #f8f8fb;
  --bg-sidebar: #ffffff;
  --bg-sidebar-hover: #f2f3f6;
  --text-main: #24212c;
  --text-sub: #686372;
  --text-weak: #716b7a;
  --border-color: #e8e6ed;
  --border-strong: #d9d5e1;
  --shadow: 0 12px 32px rgba(34,25,48,.08);
  --shadow-hover: 0 10px 24px rgba(var(--admin-primary-rgb),.13);
  --danger: #c95b67;
  --success: #3e8b6f;
  --warning: #b87c3d;
  --info: #5a84b8;
  --topbar-height: 72px;
  --sidebar-width: 264px;
  /* 排版层级：6 个字号覆盖后台全部场景 */
  --text-xs: 11px;
  --text-sm: 12px;
  --text-base: 13px;
  --text-md: 14px;
  --text-lg: 17px;
  --text-xl: 21px;
  --text-2xl: 28px;
  --leading-tight: 1.25;
  --leading-normal: 1.5;
  --leading-relaxed: 1.65;
}
:root[data-theme="periwinkle"] { --admin-primary:#6c83f7; --admin-primary-rgb:108,131,247; --admin-primary-dark:#5269da; --admin-primary-light:#f0f2ff; --admin-accent:#93a4fa; }
:root[data-theme="violet"] { --admin-primary:#a486e6; --admin-primary-rgb:164,134,230; --admin-primary-dark:#8868ce; --admin-primary-light:#f5f0fd; --admin-accent:#bda6ef; }
:root[data-theme="indigo"] { --admin-primary:#2c80f6; --admin-primary-rgb:44,128,246; --admin-primary-dark:#1767d1; --admin-primary-light:#edf5ff; --admin-accent:#65a2f8; }
:root[data-theme="green"] { --admin-primary:#63ad46; --admin-primary-rgb:99,173,70; --admin-primary-dark:#4b8c32; --admin-primary-light:#f1f8ed; --admin-accent:#89c575; }
:root[data-theme="cyan"] { --admin-primary:#43b8d4; --admin-primary-rgb:67,184,212; --admin-primary-dark:#2696b2; --admin-primary-light:#edf9fc; --admin-accent:#79cde0; }
:root[data-theme="amber"] { --admin-primary:#ed8b22; --admin-primary-rgb:237,139,34; --admin-primary-dark:#cc6e10; --admin-primary-light:#fff5e9; --admin-accent:#f2a859; }
:root[data-theme="pink"] { --admin-primary:#eb67a5; --admin-primary-rgb:235,103,165; --admin-primary-dark:#cc4b8a; --admin-primary-light:#fdf0f6; --admin-accent:#f08bbb; }
:root[data-mode="dark"] {
  --bg-body:#17151d; --bg-card:#211e29; --bg-subtle:#282430; --bg-sidebar:#17121f; --bg-sidebar-hover:#2b2337;
  --text-main:#efecf3; --text-sub:#c2bcc9; --text-weak:#9c95a5; --border-color:#373140; --border-strong:#4a4255;
  --admin-primary-light:#33294a; --shadow:0 14px 34px rgba(0,0,0,.24);
}
[data-mode="dark"] .modal-box .modal-body .form-actions { background:rgba(33,30,41,.86); }
[data-mode="dark"] .modal-box .modal-body select.form-control { background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239c95a5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); }
* { margin:0; padding:0; box-sizing:border-box; }
html { min-width:320px; }
body { font-family:"PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif; font-size:var(--text-base); line-height:var(--leading-normal); background:var(--bg-body); color:var(--text-main); -webkit-font-smoothing:antialiased; letter-spacing:.002em; }
a { color:inherit; text-decoration:none; }
button,input,select,textarea { font:inherit; }
button,a { -webkit-tap-highlight-color:transparent; }
ul,ol { list-style:none; }
img { display:block; max-width:100%; }
::selection { color:var(--admin-primary-dark); background:var(--admin-primary-light); }
:focus-visible { outline:2px solid rgba(var(--admin-primary-rgb),.35); outline-offset:2px; }
::-webkit-scrollbar { width:8px; height:8px; }
::-webkit-scrollbar-thumb { border:2px solid transparent; border-radius:8px; background:#c8c2cf; background-clip:padding-box; }
::-webkit-scrollbar-track { background:transparent; }
.admin-icon { width:18px; height:18px; display:block; flex:0 0 auto; }
.admin-topbar { position:fixed; inset:0 0 auto; height:var(--topbar-height); z-index:100; display:flex; align-items:center; gap:16px; padding:0 24px; background:var(--bg-card); border-bottom:1px solid var(--border-color); }
.admin-topbar .logo { display:flex; align-items:center; gap:11px; min-width:205px; }
.logo-badge { display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto; width:38px; height:38px; border-radius:12px; color:#fff; background:var(--admin-primary); font-size:17px; font-weight:750; box-shadow:0 5px 14px rgba(var(--admin-primary-rgb),.25); }
.logo-badge.logo-img { object-fit:cover; background:#fff; }
.logo-copy { display:flex; flex-direction:column; line-height:1.25; }
.logo-copy strong { font-size:17px; letter-spacing:.02em; }
.logo-copy small { margin-top:3px; color:var(--text-weak); font-size:10px; letter-spacing:.12em; }
.menu-toggle,.tb-icon-btn { display:inline-flex; align-items:center; justify-content:center; width:38px; height:38px; border:1px solid transparent; border-radius:10px; color:var(--text-sub); background:transparent; cursor:pointer; transition:.18s; }
.menu-toggle:hover,.tb-icon-btn:hover { color:var(--admin-primary); background:var(--admin-primary-light); }
.tb-right { margin-left:auto; display:flex; align-items:center; gap:7px; color:var(--text-sub); }
.tb-link { display:inline-flex; align-items:center; gap:7px; min-height:38px; padding:0 11px; border-radius:10px; font-size:var(--text-sm); transition:.15s ease; }
.tb-link:hover { color:var(--admin-primary); background:var(--admin-primary-light); }
.tb-user { display:flex; align-items:center; gap:9px; margin:0 6px 0 10px; padding-left:16px; border-left:1px solid var(--border-color); }
.tb-avatar { display:inline-flex; align-items:center; justify-content:center; width:34px; height:34px; border-radius:11px; color:var(--admin-primary); background:var(--admin-primary-light); font-weight:700; }.tb-avatar-img { object-fit:contain; background:#fff; }
.tb-user-copy { display:flex; flex-direction:column; }
.tb-user-copy strong { font-size:12px; font-weight:600; }
.tb-user-copy small { margin-top:1px; color:var(--text-weak); font-size:10px; }
.theme-switch { display:flex; align-items:center; gap:7px; margin-right:4px; padding:6px 9px; border:1px solid var(--border-color); border-radius:11px; background:var(--bg-subtle); }
.theme-dot { width:15px; height:15px; border:2px solid var(--bg-card); border-radius:50%; cursor:pointer; box-shadow:0 0 0 1px transparent; }
.theme-dot.periwinkle { background:#6c83f7; }.theme-dot.violet { background:#a486e6; }.theme-dot.indigo { background:#2c80f6; }.theme-dot.green { background:#63ad46; }.theme-dot.cyan { background:#43b8d4; }.theme-dot.amber { background:#ed8b22; }.theme-dot.pink { background:#eb67a5; }
.theme-dot.selected { box-shadow:0 0 0 1px currentColor; }
.admin-aside { position:fixed; top:var(--topbar-height); bottom:0; left:0; width:var(--sidebar-width); z-index:90; overflow-y:auto; padding:21px 15px 24px; color:#5b5670; background:var(--bg-sidebar); border-right:1px solid var(--border-color); scrollbar-width:thin; scrollbar-color:#c8c2cf transparent; transition:width .2s ease; }
.nav-caption { display:flex; align-items:center; justify-content:space-between; padding:0 11px 12px; color:var(--text-weak); font-size:var(--text-xs); font-weight:600; letter-spacing:.16em; }
.nav-caption button { border:0; color:var(--text-weak); background:transparent; font-size:var(--text-xs); cursor:pointer; }
.nav-caption button:hover { color:var(--admin-primary); }
.nav-dashboard { display:flex; align-items:center; gap:11px; min-height:46px; margin-bottom:20px; padding:0 13px; border-radius:11px; color:#5f576e; font-size:var(--text-base); font-weight:600; transition:.15s ease; }
.nav-dashboard:hover { color:var(--admin-primary); background:var(--bg-sidebar-hover); }
.nav-dashboard.active { color:var(--admin-primary); background:#f0f2f5; }
.menu-group { margin:0 0 12px; padding:0 0 12px; border-bottom:1px solid var(--border-color); }
.menu-group:last-child { border-bottom:0; }
.mg-title { width:100%; min-height:42px; display:flex; align-items:center; justify-content:space-between; padding:0 11px; border:0; border-radius:9px; color:#4c455e; background:var(--bg-subtle); cursor:pointer; transition:.15s ease; }
.mg-title:hover { color:var(--text-main); background:var(--bg-sidebar-hover); }
.mg-main { display:flex; align-items:center; gap:11px; font-size:var(--text-base); font-weight:650; letter-spacing:.02em; }
.mg-chevron { display:flex; color:#9a93a6; transition:transform .15s ease; }
.mg-chevron .admin-icon { width:14px; height:14px; }
.menu-group.closed .mg-chevron { transform:rotate(-90deg); }
.mg-children { display:grid; grid-template-rows:1fr; transition:grid-template-rows .2s ease; margin-left:20px; padding-left:11px; border-left:1px solid var(--border-color); }
.menu-group.closed .mg-children { display:none; }
.menu-item { position:relative; display:flex; align-items:center; gap:11px; min-height:40px; margin:2px 0; padding:7px 11px; border-radius:8px; color:#6f6680; font-size:var(--text-base); font-weight:450; transition:.15s ease; }
.menu-item:hover { color:var(--admin-primary); background:var(--bg-sidebar-hover); }
.menu-item.active { color:var(--admin-primary); background:#f0f2f5; font-weight:600; }
.nav-icon { width:18px; height:18px; display:inline-flex; align-items:center; justify-content:center; flex:0 0 18px; }
.menu-item .nav-icon { color:#8d829d; }
.menu-item.active .nav-icon { color:var(--admin-primary); }
.aside-foot { display:flex; flex-direction:column; gap:4px; margin:26px 10px 0; padding-top:19px; border-top:1px solid var(--border-color); color:var(--text-weak); font-size:var(--text-xs); }
.aside-foot strong { color:var(--text-sub); font-size:var(--text-sm); }
.sidebar-mask { display:none; }
.admin-main { min-height:100vh; margin-left:var(--sidebar-width); padding:calc(var(--topbar-height) + 26px) 30px 42px; transition:margin-left .2s ease; }
body.sidebar-collapsed .admin-aside { width:74px; padding-right:11px; padding-left:11px; }
body.sidebar-collapsed .admin-main { margin-left:74px; }
body.sidebar-collapsed .nav-text,body.sidebar-collapsed .nav-caption,body.sidebar-collapsed .mg-chevron,body.sidebar-collapsed .aside-foot { display:none; }
body.sidebar-collapsed .mg-title,body.sidebar-collapsed .nav-dashboard,body.sidebar-collapsed .menu-item { justify-content:center; padding-right:0; padding-left:0; margin-left:0; }
body.sidebar-collapsed .menu-group { margin-bottom:8px; }
.card { margin-bottom:20px; padding:24px 26px; border:1px solid var(--border-color); border-radius:15px; background:var(--bg-card); }
.admin-main > .card:last-of-type { min-height:calc(100vh - var(--topbar-height) - 60px); display:flex; flex-direction:column; }
.admin-main > .card:last-of-type > .pager-bar { margin-top:auto; }
.card-titlebar { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:22px; flex-wrap:wrap; }
.card-titlebar h3 { font-size:var(--text-lg); line-height:var(--leading-tight); letter-spacing:-.01em; font-weight:650; }
.card-titlebar .right { display:flex; gap:9px; align-items:center; flex-wrap:wrap; }
.table-scroll { width:100%; overflow-x:auto; }
.tb { width:100%; border-collapse:collapse; font-size:var(--text-base); font-variant-numeric:tabular-nums; }
.tb th { padding:12px 15px; border-bottom:1px solid var(--border-color); color:var(--text-sub); background:var(--bg-subtle); font-size:var(--text-sm); font-weight:600; text-align:left; white-space:nowrap; }
.tb th:first-child { border-radius:8px 0 0 8px; }.tb th:last-child { border-radius:0 8px 8px 0; }
.tb td { max-width:360px; padding:16px 15px; border-bottom:1px solid var(--border-color); color:var(--text-main); vertical-align:middle; overflow-wrap:anywhere; }
.tb tbody tr:last-child td { border-bottom:0; }.tb tbody tr { transition:background .15s ease; }.tb tbody tr:hover { background:var(--bg-subtle); }
.tb .ops { min-width:110px; white-space:nowrap; }
.tb td.row-ops { display:table-cell; vertical-align:middle; }
.tb .ops a { display:inline-flex; margin:2px 12px 2px 0; color:var(--admin-primary); cursor:pointer; font-weight:550; }
.tb .ops a:hover { text-decoration:underline; text-underline-offset:3px; }.tb .ops a.danger,.tb .ops a[href*="/del"] { color:var(--danger); }
.tb img.thumb { width:64px; height:44px; object-fit:cover; border:1px solid var(--border-strong); border-radius:7px; }
.btn { display:inline-flex; align-items:center; justify-content:center; gap:7px; min-height:38px; padding:0 16px; border:1px solid var(--border-strong); border-radius:9px; color:var(--text-main); background:var(--bg-card); font-size:var(--text-sm); font-weight:600; cursor:pointer; transition:border-color .15s ease,color .15s ease,background .15s ease,box-shadow .15s ease; white-space:nowrap; }
.btn:hover { color:var(--admin-primary); border-color:rgba(var(--admin-primary-rgb),.35); background:var(--admin-primary-light); }
.btn:active { transform:scale(.985); }
.btn:disabled { opacity:.5; cursor:not-allowed; transform:none; }
.btn-solid { color:#fff; border-color:transparent; background:var(--admin-primary); box-shadow:0 5px 14px rgba(var(--admin-primary-rgb),.18); }
.btn-solid:hover { color:#fff; border-color:transparent; background:var(--admin-primary-dark); box-shadow:var(--shadow-hover); }
.btn-danger { color:var(--danger); border-color:rgba(217,75,91,.25); }.btn-danger:hover { color:#fff; border-color:var(--danger); background:var(--danger); }
.btn-sm { min-height:30px; padding:0 10px; font-size:var(--text-xs); border-radius:8px; }
.tag { display:inline-flex; align-items:center; min-height:24px; padding:2px 9px; border-radius:6px; color:var(--admin-primary); background:var(--admin-primary-light); font-size:var(--text-xs); font-weight:550; white-space:nowrap; }
.tag-green { color:var(--success); background:#e7f6f0; }.tag-red { color:var(--danger); background:#fceef0; }.tag-orange { color:var(--warning); background:#fff3e2; }.tag-blue { color:var(--info); background:#eaf2fc; }.tag-gray { color:var(--text-sub); background:var(--bg-body); }
:root[data-mode="dark"] .tag-green { background:#16362f; }:root[data-mode="dark"] .tag-red { background:#3c232a; }:root[data-mode="dark"] .tag-orange { background:#3c301d; }:root[data-mode="dark"] .tag-blue { background:#1e2c43; }
.form-item { margin-bottom:18px; }.form-item label { display:block; margin-bottom:7px; color:var(--text-sub); font-size:var(--text-sm); font-weight:550; }.form-item label .req { margin-right:3px; color:var(--danger); }
.form-control { width:100%; height:43px; padding:0 12px; border:1px solid var(--border-strong); border-radius:9px; outline:none; color:var(--text-main); background:var(--bg-card); font-size:var(--text-base); caret-color:var(--admin-primary); transition:border-color .15s ease,box-shadow .15s ease; }
.form-control::placeholder { color:var(--text-weak); }.form-control:hover { border-color:#bdb5c5; }.form-control:focus { border-color:var(--admin-primary); box-shadow:0 0 0 3px rgba(var(--admin-primary-rgb),.1); }.form-control:disabled { color:var(--text-weak); background:var(--bg-body); cursor:not-allowed; }
textarea.form-control { height:auto; min-height:92px; padding:10px 12px; line-height:var(--leading-relaxed); resize:vertical; }
select.form-control { cursor:pointer; appearance:none; -webkit-appearance:none; padding-right:34px; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239a92a8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 10 4 4 4-4'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 11px center; background-size:14px; }
select.form-control:hover { border-color:#bdb5c5; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237c0d9c' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 10 4 4 4-4'/%3E%3C/svg%3E"); }
select.form-control:disabled { background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a9a3b2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 10 4 4 4-4'/%3E%3C/svg%3E"); }
input[type="checkbox"],input[type="radio"] { accent-color:var(--admin-primary); }
.form-actions { display:flex; justify-content:flex-end; gap:10px; padding-top:4px; }
.search-bar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid var(--border-color); }
.search-bar .form-control { width:min(260px,100%); min-width:170px; height:37px; }
.status-tabs { display:flex; gap:4px; flex-wrap:wrap; margin-bottom:20px; padding:4px; width:fit-content; max-width:100%; border:1px solid var(--border-color); border-radius:11px; background:var(--bg-subtle); }
.status-tab { display:inline-flex; align-items:center; justify-content:center; gap:6px; min-height:32px; padding:0 13px; border:0; border-radius:8px; color:var(--text-sub); background:transparent; font-size:var(--text-sm); cursor:pointer; transition:.15s ease; }
.status-tab:hover { color:var(--admin-primary); }.status-tab.active { color:var(--admin-primary); background:var(--bg-card); box-shadow:0 2px 8px rgba(35,25,43,.07); font-weight:600; }
.status-tab .cnt { padding:0 6px; border-radius:6px; color:var(--text-sub); background:var(--border-color); font-size:var(--text-xs); font-style:normal; line-height:18px; }.status-tab.active .cnt { color:var(--admin-primary); background:var(--admin-primary-light); }
.type-tabs { display:flex; align-items:center; gap:26px; }
.type-tab { position:relative; display:inline-flex; align-items:center; gap:6px; margin:0; padding:4px 2px 12px; border:0; background:transparent; color:var(--text-sub); font-family:inherit; font-size:var(--text-md); cursor:pointer; transition:color .15s ease; }
.type-tab:hover { color:var(--admin-primary); }
.type-tab.active { color:var(--text-main); font-weight:600; }
.type-tab.active::after { content:""; position:absolute; right:2px; bottom:2px; left:2px; height:2px; border-radius:2px; background:var(--admin-primary); }
.type-tab .cnt { display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; border-radius:9px; background:var(--text-weak); color:#fff; font-size:var(--text-xs); font-style:normal; font-weight:600; line-height:18px; }
.pagination { display:flex; justify-content:flex-end; align-items:center; gap:6px; margin-top:20px; }.pagination li { display:inline-flex; }.pagination a,.pagination span { display:inline-flex; align-items:center; justify-content:center; min-width:34px; height:34px; padding:0 9px; border:1px solid var(--border-strong); border-radius:9px; color:var(--text-sub); background:var(--bg-card); font-size:var(--text-sm); }.pagination a:hover { color:var(--admin-primary); border-color:var(--admin-primary); }.pagination .active span { color:#fff; border-color:var(--admin-primary); background:var(--admin-primary); }.pagination .disabled span { color:var(--text-weak); background:var(--bg-body); }.pagination .pg-total { margin-right:auto; border:0; background:transparent; color:var(--text-weak); font-size:var(--text-xs); }
.modal-mask { position:fixed; top:var(--topbar-height); right:0; bottom:0; left:var(--sidebar-width); z-index:200; display:none; align-items:flex-start; justify-content:center; overflow-y:auto; padding:6vh 20px; background:rgba(25,18,34,.58); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }.modal-mask.show { display:flex; }body.sidebar-collapsed .modal-mask { left:74px; }
@keyframes modal-pop { from { opacity:0; transform:translateY(12px) scale(.985); } to { opacity:1; transform:translateY(0) scale(1); } }
.modal-box { width:720px; max-width:100%; border:1px solid var(--border-color); border-radius:16px; background:var(--bg-card); box-shadow:0 28px 80px rgba(25,17,35,.28); overflow:hidden; }.modal-mask.show .modal-box { animation:modal-pop .25s cubic-bezier(.16,1,.3,1); }.modal-box .modal-head { display:flex; align-items:center; justify-content:space-between; padding:21px 26px; border-bottom:1px solid var(--border-color); }.modal-box .modal-head h3 { position:relative; font-size:var(--text-lg); font-weight:650; }.modal-box .modal-head h3::before { content:""; position:absolute; left:-14px; top:50%; width:4px; height:18px; border-radius:2px; background:linear-gradient(180deg,var(--admin-primary),var(--admin-primary-dark)); transform:translateY(-50%); }.modal-box .modal-head .x { display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border:0; border-radius:50%; color:var(--text-weak); background:transparent; font-size:22px; line-height:1; cursor:pointer; transition:color .15s ease,background .15s ease; }.modal-box .modal-head .x:hover { color:var(--text-main); background:var(--bg-body); }.modal-box .modal-body { max-height:70vh; overflow-y:auto; padding:24px 26px 0; }
.dl-mask { position:fixed; inset:0; z-index:300; display:none; align-items:center; justify-content:center; padding:20px; background:rgba(25,18,34,.58); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }.dl-mask.show { display:flex; }.dl-mask.show .dl-box { animation:modal-pop .22s cubic-bezier(.16,1,.3,1); }.dl-box { width:390px; max-width:100%; padding:30px 28px 26px; border:1px solid var(--border-color); border-radius:16px; background:var(--bg-card); box-shadow:0 24px 70px rgba(25,17,35,.25); text-align:center; }.dl-box h3 { margin-bottom:8px; font-size:var(--text-lg); font-weight:650; }.dl-box p { margin:0 0 24px; color:var(--text-sub); line-height:var(--leading-relaxed); }.dl-box .dl-btns { display:flex; justify-content:center; gap:10px; }
.du-toast { position:fixed; top:88px; left:50%; z-index:400; display:none; max-width:min(520px,calc(100vw - 32px)); padding:12px 19px; border-radius:10px; color:#fff; background:#302b35; box-shadow:var(--shadow); font-size:var(--text-base); transform:translateX(-50%); }.du-toast.error { background:#b43b4a; }
.daterange-panel,.region-panel { position:absolute; z-index:500; display:none; max-width:calc(100vw - 24px); padding:14px; border:1px solid var(--border-strong); border-radius:12px; background:var(--bg-card); box-shadow:var(--shadow); }.daterange-panel.show,.region-panel.show { display:block; }
.daterange-panel .dr-quick { display:flex; gap:8px; flex-wrap:wrap; margin-bottom:10px; }.daterange-panel .dr-quick span { padding:4px 8px; border-radius:5px; color:var(--admin-primary); font-size:var(--text-sm); cursor:pointer; }.daterange-panel .dr-quick span:hover { background:var(--admin-primary-light); }.daterange-panel .dr-cals { display:flex; gap:14px; }.daterange-panel table { border-collapse:collapse; font-size:var(--text-sm); }.daterange-panel th { padding:4px; color:var(--text-weak); font-weight:400; }.daterange-panel td { padding:4px; border-radius:4px; color:var(--text-main); text-align:center; cursor:pointer; }.daterange-panel td:hover { background:var(--admin-primary-light); }.daterange-panel td.in { color:#fff; background:var(--admin-primary); }.daterange-panel td.dim { color:var(--text-weak); }.daterange-panel .dr-head { margin-bottom:6px; font-size:var(--text-base); }
.region-panel { width:460px; }.region-panel .rg-tabs { display:flex; gap:4px; margin-bottom:10px; border-bottom:1px solid var(--border-strong); }.region-panel .rg-tab { padding:7px 14px; border-bottom:2px solid transparent; color:var(--text-sub); font-size:var(--text-base); cursor:pointer; }.region-panel .rg-tab.on { color:var(--admin-primary); border-bottom-color:var(--admin-primary); }.region-panel .rg-grid { display:flex; flex-wrap:wrap; gap:6px; max-height:260px; overflow-y:auto; }.region-panel .rg-item { padding:6px 12px; border-radius:5px; color:var(--text-main); font-size:var(--text-sm); cursor:pointer; }.region-panel .rg-item:hover { color:var(--admin-primary); background:var(--admin-primary-light); }.region-panel .rg-item.on { color:#fff; background:var(--admin-primary); }
.page-heading { display:flex; align-items:center; justify-content:space-between; gap:20px; margin-bottom:24px; }.page-heading h1 { font-size:var(--text-2xl); letter-spacing:-.025em; line-height:var(--leading-tight); }.page-heading p { margin-top:8px; color:var(--text-sub); font-size:var(--text-sm); }.page-date { padding:7px 11px; border:1px solid var(--border-color); border-radius:8px; color:var(--text-sub); background:var(--bg-card); font-size:var(--text-xs); font-variant-numeric:tabular-nums; }
.metric-grid { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:0; margin-bottom:20px; overflow:hidden; border:1px solid var(--border-color); border-radius:15px; background:var(--bg-card); }.metric-card { position:relative; min-width:0; overflow:hidden; padding:21px 20px 19px; border:0; border-right:1px solid var(--border-color); border-radius:0; background:var(--bg-card); color:var(--text-main); }.metric-card:last-child { border-right:0; }.metric-card::after { display:none; }.metric-card .metric-icon { position:absolute; top:20px; right:18px; width:30px; height:30px; display:grid; place-items:center; border-radius:9px; }.metric-card .metric-icon .admin-icon { width:16px; height:16px; }.metric-card.violet .metric-icon { color:#7140bc; background:#f0e9fb; }.metric-card.blue .metric-icon { color:#386db6; background:#eaf1fa; }.metric-card.orange .metric-icon { color:#b66a20; background:#fff0df; }.metric-card.green .metric-icon { color:#268062; background:#e7f4ed; }.metric-card.pink .metric-icon { color:#b24e7c; background:#faeaf1; }.metric-card.cyan .metric-icon { color:#267d91; background:#e7f3f5; }.metric-card .metric-label { color:var(--text-sub); font-size:var(--text-sm); }.metric-card strong { display:block; margin-top:12px; color:var(--text-main); font-size:30px; line-height:var(--leading-tight); letter-spacing:-.035em; font-variant-numeric:tabular-nums; font-weight:700; }.metric-card .metric-foot { margin-top:8px; color:var(--text-weak); font-size:var(--text-xs); }
.dashboard-grid { display:grid; grid-template-columns:minmax(0,1.65fr) minmax(320px,1fr); gap:20px; }.dashboard-grid .card { min-width:0; margin-bottom:0; }.chart { width:100%; height:300px; }.chart-small { height:260px; }.dashboard-lower { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px; margin-top:20px; }.dashboard-lower .card { min-width:0; margin-bottom:0; }
.latest-list li { display:flex; align-items:center; gap:12px; padding:13px 0; border-bottom:1px solid var(--border-color); }.latest-list li:last-child { border-bottom:0; }.latest-avatar { display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto; width:35px; height:35px; border-radius:10px; color:var(--admin-primary); background:var(--admin-primary-light); font-size:var(--text-sm); font-weight:700; }.latest-main { min-width:0; flex:1; }.latest-main strong { display:block; overflow:hidden; font-size:var(--text-base); font-weight:550; text-overflow:ellipsis; white-space:nowrap; }.latest-main small { display:block; overflow:hidden; margin-top:3px; color:var(--text-weak); font-size:var(--text-xs); text-overflow:ellipsis; white-space:nowrap; }.latest-list time { color:var(--text-weak); font-size:var(--text-xs); white-space:nowrap; }
.empty-tip { padding:40px 16px!important; color:var(--text-weak)!important; text-align:center; }.mt10{margin-top:10px}.mb10{margin-bottom:10px}.mr10{margin-right:10px}.text-weak{color:var(--text-weak)}.fs12{font-size:var(--text-sm)}
/* 登录 */
.login-wrap { min-height:100vh; display:grid; grid-template-columns:minmax(480px,1.1fr) minmax(440px,.9fr); background:var(--bg-card); }
.login-brand { position:relative; display:flex; flex-direction:column; justify-content:space-between; overflow:hidden; padding:44px 54px; color:#fff; background:#17131f; }
.login-brand::before { content:""; position:absolute; width:620px; height:620px; right:-250px; top:-220px; border-radius:50%; background:radial-gradient(circle,rgba(var(--admin-primary-rgb),.48),transparent 67%); }
.login-brand::after { content:""; position:absolute; width:420px; height:420px; left:-210px; bottom:-220px; border-radius:50%; background:radial-gradient(circle,rgba(var(--admin-primary-rgb),.25),transparent 70%); }
.login-brand>* { position:relative; z-index:1; }.brand-row { display:flex; align-items:center; gap:12px; font-size:16px; font-weight:600; }.brand-row small { display:block; margin-top:2px; color:#9f94aa; font-size:10px; font-weight:400; letter-spacing:.13em; }
.login-brand-copy { max-width:590px; margin:auto 0; padding:50px 0; }.login-brand-copy h1 { max-width:520px; font-size:clamp(38px,4vw,58px); line-height:1.15; letter-spacing:-.04em; font-weight:650; }.login-brand-copy p { max-width:470px; margin-top:23px; color:#b9afc3; font-size:14px; line-height:1.95; }
.login-feature-list { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:36px; }.login-feature { padding:15px 0; border-top:1px solid #45364f; }.login-feature strong { display:block; font-size:13px; font-weight:550; }.login-feature span { display:block; margin-top:5px; color:#998ca5; font-size:10px; }
.login-brand-foot { color:#83768f; font-size:var(--text-xs); }.login-panel { position:relative; display:flex; align-items:center; justify-content:center; min-width:0; padding:44px; background:var(--bg-card); }.login-card { width:100%; max-width:390px; min-width:0; }.login-card .login-mark { display:none; }.login-card h2 { margin-bottom:8px; font-size:var(--text-2xl); letter-spacing:-.03em; }.login-card .sub { margin-bottom:31px; color:var(--text-sub); font-size:var(--text-base); }.login-card .form-item label { font-size:var(--text-sm); }.login-card .form-control { height:47px; padding-left:14px; border-radius:10px; }.login-card .btn { width:100%; min-height:47px; margin-top:5px; border-radius:10px; font-size:var(--text-sm); }.login-error { min-height:22px; margin:-4px 0 8px; color:var(--danger); font-size:var(--text-sm); }.login-hint { margin-top:19px; color:var(--text-weak); font-size:var(--text-xs); text-align:center; }.password-wrap { position:relative; }.password-wrap .form-control { padding-right:46px; }.password-toggle { position:absolute; top:0; right:4px; width:40px; height:47px; border:0; color:var(--text-weak); background:transparent; cursor:pointer; }.login-options { display:flex; align-items:center; justify-content:space-between; margin:-3px 0 16px; color:var(--text-sub); font-size:var(--text-sm); }.login-options label { display:flex; align-items:center; gap:7px; cursor:pointer; }
/* 运营概览 */
.ops-summary { position:relative; isolation:isolate; overflow:hidden; display:flex; align-items:center; justify-content:space-between; gap:20px; margin-bottom:20px; padding:26px 28px; border-radius:15px; color:#fff; background:#2c213d; box-shadow:0 14px 30px rgba(43,30,62,.14); }.ops-summary strong { font-size:var(--text-xl); font-weight:650; letter-spacing:-.02em; }.ops-summary p { margin-top:8px; color:#cfc2dc; font-size:var(--text-sm); }.ops-summary p b { color:#fff; }.summary-actions { display:flex; gap:10px; }.summary-actions a { display:flex; align-items:center; gap:14px; min-height:38px; padding:0 14px; border:1px solid #665372; border-radius:9px; color:#eee7f3; font-size:var(--text-xs); transition:.15s ease; }.summary-actions a:first-child { color:#332247; border-color:#fff; background:#fff; font-weight:600; }.summary-actions a:hover { border-color:#a88fc0; background:rgba(255,255,255,.08); }.summary-actions a:first-child:hover { background:#f1eaf7; }
.dashboard-main-grid { display:grid; grid-template-columns:minmax(0,1.65fr) minmax(320px,.85fr); gap:20px; }.dashboard-main-grid .card { min-width:0; margin-bottom:0; }.trend-card,.todo-card { min-height:408px; }.card-subtitle { margin-top:5px; color:var(--text-weak); font-size:var(--text-xs); font-weight:400; }.chart-legend { display:flex; align-items:center; gap:7px; color:var(--text-sub); font-size:var(--text-xs); }.chart-legend i { width:8px; height:8px; border-radius:50%; background:var(--admin-primary); }.todo-list { display:flex; flex-direction:column; }.todo-list>a { position:relative; display:flex; align-items:center; gap:12px; margin:0 -10px; padding:13px 10px; border-bottom:1px solid var(--border-color); border-radius:9px; transition:background .15s ease; }.todo-list>a:hover { background:var(--bg-subtle); }.todo-list>a:last-child { border:0; }.todo-list>a>div { flex:1; min-width:0; }.todo-list strong { display:block; font-size:var(--text-sm); font-weight:600; }.todo-list small { display:block; margin-top:4px; color:var(--text-weak); font-size:var(--text-xs); }.todo-list>a>b { min-width:25px; color:var(--admin-primary); font-size:17px; text-align:right; font-variant-numeric:tabular-nums; }.todo-list>a>span:last-child { color:var(--text-weak); }.todo-icon { position:relative; z-index:1; width:36px; height:36px; display:grid; place-items:center; flex:0 0 36px; border-radius:10px; }.todo-icon.violet { color:#7140bc; background:#f0e9fb; }.todo-icon.orange { color:#b66a20; background:#fff0df; }.todo-icon.blue { color:#386db6; background:#eaf1fa; }.todo-icon.green { color:#268062; background:#e7f4ed; }
.dashboard-insight-grid { display:grid; grid-template-columns:1fr 1.3fr 1fr; gap:20px; margin-top:20px; }.dashboard-insight-grid .card { min-width:0; margin-bottom:0; }.distribution-wrap { position:relative; }.distribution-total { position:absolute; top:42%; left:50%; display:flex; flex-direction:column; align-items:center; transform:translate(-50%,-50%); pointer-events:none; }.distribution-total strong { font-size:24px; }.distribution-total span { margin-top:3px; color:var(--text-weak); font-size:var(--text-xs); }.quick-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:0; }.quick-grid a { display:flex; flex-direction:column; align-items:center; gap:9px; padding:16px 6px; border:0; border-radius:9px; color:var(--text-sub); background:transparent; transition:.15s ease; }.quick-grid a:hover { color:var(--admin-primary); background:var(--admin-primary-light); transform:none; }.quick-grid a>span { display:grid; place-items:center; width:34px; height:34px; border-radius:10px; color:var(--admin-primary); background:var(--admin-primary-light); }.quick-grid strong { font-size:var(--text-sm); font-weight:550; }.latest-avatar.alt { color:#3275c7; background:#e7f0fb; }
:root[data-mode="dark"] .latest-avatar.alt { color:#b2cdf1; background:#223248; }
:root[data-mode="dark"] .metric-card.violet .metric-icon,:root[data-mode="dark"] .todo-icon.violet { color:#cfb8f3; background:#382b4c; }
:root[data-mode="dark"] .metric-card.blue .metric-icon,:root[data-mode="dark"] .todo-icon.blue { color:#b2cdf1; background:#223248; }
:root[data-mode="dark"] .metric-card.orange .metric-icon,:root[data-mode="dark"] .todo-icon.orange { color:#edc58f; background:#40301f; }
:root[data-mode="dark"] .metric-card.green .metric-icon,:root[data-mode="dark"] .todo-icon.green { color:#a6d9c3; background:#203b32; }
:root[data-mode="dark"] .metric-card.pink .metric-icon { color:#e8b4cd; background:#402b37; }
:root[data-mode="dark"] .metric-card.cyan .metric-icon { color:#a5d5df; background:#203840; }
@media(max-width:1280px){.dashboard-insight-grid{grid-template-columns:1fr 1fr}.quick-card{grid-column:1/-1}.quick-grid{grid-template-columns:repeat(6,1fr)}}
@media(max-width:1080px){.dashboard-main-grid{grid-template-columns:1fr}.trend-card,.todo-card{min-height:0}}
@media(max-width:960px){.dashboard-main-grid{grid-template-columns:1fr}.ops-summary{align-items:flex-start;flex-direction:column}.dashboard-insight-grid{grid-template-columns:1fr}.quick-card{grid-column:auto}}
@media(max-width:640px){.ops-summary{padding:20px}.summary-actions{flex-wrap:wrap;width:100%}.summary-actions a{flex:1;justify-content:center}.metric-card .metric-icon{top:17px;right:13px;width:27px;height:27px}.quick-grid{grid-template-columns:repeat(3,1fr)}}
/* 组织权限 */
.permission-tree { max-height:390px; overflow-y:auto; padding:6px 14px; border:1px solid var(--border-color); border-radius:12px; background:var(--bg-subtle); }.permission-group { padding:10px 0; border-bottom:1px solid var(--border-color); }.permission-group:last-child { border:0; }.permission-parent { display:flex; align-items:center; gap:8px; font-size:var(--text-base); font-weight:600; }.permission-children { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin:10px 0 2px 25px; }.permission-children label { display:flex; align-items:center; gap:7px; color:var(--text-sub); font-size:var(--text-sm); font-weight:400; }.permission-tools { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }.permission-tools button { border:0; color:var(--admin-primary); background:transparent; font-size:var(--text-sm); cursor:pointer; }.admin-person { display:flex; align-items:center; gap:10px; }.admin-person-avatar { width:34px; height:34px; display:grid; place-items:center; border-radius:10px; color:var(--admin-primary); background:var(--admin-primary-light); font-weight:700; }.admin-person-copy strong { display:block; font-size:var(--text-base); }.admin-person-copy small { display:block; margin-top:2px; color:var(--text-weak); font-size:var(--text-xs); }.role-summary { display:flex; align-items:center; gap:8px; }.role-count { color:var(--text-sub); font-size:var(--text-xs); }
/* 上传、搜索与广告 */
.oss-upload { display:flex; align-items:center; gap:14px; padding:12px; border:1px dashed var(--border-strong); border-radius:11px; background:var(--bg-subtle); }.oss-preview { width:116px; height:82px; display:flex; align-items:center; justify-content:center; flex:0 0 116px; overflow:hidden; border:1px solid var(--border-color); border-radius:9px; background:var(--bg-card); }.oss-preview img { width:100%; height:100%; object-fit:cover; }.oss-empty { display:flex; flex-direction:column; align-items:center; gap:5px; color:var(--text-weak); font-size:var(--text-xs); }.oss-empty .admin-icon { width:22px; height:22px; }.oss-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }.oss-status { width:100%; color:var(--admin-primary); font-size:var(--text-xs); }.oss-config-card { max-width:850px; }.oss-config-card form { display:grid; grid-template-columns:1fr 1fr; gap:0 22px; }.oss-config-card .form-item small { display:block; margin-top:6px; color:var(--text-weak); font-size:var(--text-xs); }.oss-config-card .form-actions { grid-column:1/-1; }.oss-config-card .form-item:has([name="access_key_secret"]) { grid-column:1/-1; }
.nav-search { position:relative; display:flex; align-items:center; gap:4px; height:38px; margin:0 1px 18px; padding:0 10px; border:1px solid var(--border-color); border-radius:9px; background:var(--bg-subtle); transition:border-color .15s ease,box-shadow .15s ease; }.nav-search:focus-within { border-color:rgba(var(--admin-primary-rgb),.5); box-shadow:0 0 0 2px rgba(var(--admin-primary-rgb),.08); }.nav-search .admin-icon { position:static; display:flex; color:var(--text-weak); pointer-events:none; }.nav-search .admin-icon svg { width:14px; height:14px; }.nav-search input { -webkit-appearance:none; appearance:none; flex:1; min-width:0; height:34px; padding:0; border:0; border-radius:0; outline:0; color:var(--text-main); background:transparent; font-size:var(--text-xs); line-height:34px; }.nav-search input::-webkit-search-cancel-button,.nav-search input::-webkit-search-decoration { display:none; }.nav-search input::placeholder { color:var(--text-weak); }.nav-search input:focus { border:0; background:transparent; box-shadow:none; }.nav-search button { position:static; right:auto; top:auto; display:none; flex:0 0 auto; width:auto; height:32px; padding:0 0 0 6px; border:0; border-left:1px solid var(--border-color); border-radius:0; color:var(--text-sub); background:transparent; font-size:var(--text-xs); white-space:nowrap; cursor:pointer; }.nav-search button.show { display:inline-flex; }.nav-search button:hover { color:var(--admin-primary); background:transparent; }.nav-search .nav-search-expand { position:static; display:inline-flex; flex:0 0 auto; width:auto; height:32px; padding:0 0 0 6px; border:0; border-left:1px solid var(--border-color); border-radius:0; color:var(--text-sub); background:transparent; font-size:var(--text-xs); white-space:nowrap; cursor:pointer; }.nav-search .nav-search-expand:hover { color:var(--admin-primary); background:transparent; }.menu-group.search-hidden,.menu-item.search-hidden { display:none; }
.ad-size-hint { display:flex; align-items:center; gap:7px; min-height:36px; padding:8px 10px; border-radius:8px; color:var(--admin-primary); background:var(--admin-primary-light); font-size:var(--text-xs); }.ad-thumb { width:104px; height:58px; object-fit:cover; border-radius:7px; }.ad-source { display:flex; flex-direction:column; gap:4px; }.ad-source small { color:var(--text-weak); font-size:var(--text-xs); }.ad-detail-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin:18px 0; }.ad-detail-grid>div { padding:13px; border-radius:9px; background:var(--bg-subtle); }.ad-detail-grid dt { color:var(--text-weak); font-size:var(--text-xs); }.ad-detail-grid dd { margin-top:6px; font-size:var(--text-sm); }.ad-detail-content { padding-top:18px; border-top:1px solid var(--border-color); line-height:var(--leading-relaxed); white-space:pre-wrap; }
.fixed-value { display:flex; align-items:center; min-height:43px; padding:0 12px; border-radius:9px; color:var(--success); background:#e7f6f0; font-size:var(--text-sm); font-weight:600; }.ad-daterange-item { grid-column:1/-1; }.ad-date-fields { display:grid; grid-template-columns:minmax(0,1fr) auto minmax(0,1fr); align-items:center; gap:12px; }.ad-date-fields>span { color:var(--text-weak); font-size:var(--text-sm); }.modal-box:has(#adCategory) { width:min(880px,calc(100% - 40px)); max-width:calc(100% - 40px); }.modal-box:has(#adCategory) .modal-body { max-height:calc(100vh - var(--topbar-height) - 12vh); }.modal-box input[type="date"] { min-height:48px; cursor:pointer; }.ad-rich-editor .rich-content { min-height:210px; max-height:300px; }.ad-rich-editor .w-e-text-container [data-slate-editor] { min-height:190px; }#adCourseField,#adPcLinkField,#adContentField { grid-column:1/-1; }
@media(max-width:800px){.modal-box:has(#adCategory) .modal-body form{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.modal-box:has(#adCategory) .modal-body form{grid-template-columns:1fr}.oss-upload{align-items:flex-start}.oss-preview{width:92px;height:72px;flex-basis:92px}.oss-config-card form{grid-template-columns:1fr}.ad-detail-grid{grid-template-columns:1fr 1fr}}
/* 导航层级、内容操作与编辑体验 */
.admin-main { transition:opacity .16s ease; }.page-loading .admin-main { opacity:.42; pointer-events:none; }.page-loading::after { content:""; position:fixed; top:25px; left:50%; z-index:500; width:18px; height:18px; border:2px solid var(--admin-primary-light); border-top-color:var(--admin-primary); border-radius:50%; animation:admin-spin .7s linear infinite; }@keyframes admin-spin{to{transform:rotate(360deg)}}
.tb .ops { min-width:150px; }.ops { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }.tb .ops a.action-button,.action-button { display:inline-flex; align-items:center; justify-content:center; gap:5px; min-height:30px; margin:0; padding:0 9px; border:1px solid var(--border-strong); border-radius:7px; color:var(--text-sub); background:var(--bg-card); font-size:var(--text-xs); font-weight:500; line-height:1; cursor:pointer; transition:.15s ease; }.action-button .admin-icon { width:13px; height:13px; }.tb .ops a.action-button:hover,.action-button:hover { color:var(--admin-primary); border-color:rgba(var(--admin-primary-rgb),.35); background:var(--admin-primary-light); text-decoration:none; }.tb .ops a.action-button.action-danger,.action-button.action-danger { color:var(--danger); border-color:rgba(217,75,91,.22); background:transparent; }.action-button.action-danger:hover { color:#fff!important; border-color:var(--danger)!important; background:var(--danger)!important; }
.modal-box:has(.course-records-body) .modal-head h3::after { content:none; }.modal-box .modal-head { padding:22px 28px 20px; }.modal-box .modal-head h3 { font-size:var(--text-lg); }.modal-box .modal-head h3::after { content:"请填写以下信息，带 * 为必填项"; display:block; margin-top:6px; color:var(--text-weak); font-size:var(--text-xs); font-weight:400; }.modal-box .modal-body { padding:24px 28px 0; }.modal-box .modal-body form { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:20px; }.modal-box .modal-body .form-item { min-width:0; margin-bottom:18px; }.modal-box .modal-body .form-item>label { margin-bottom:7px; color:var(--text-main); font-size:var(--text-sm); font-weight:550; }.modal-box .modal-body .form-item:has(textarea),.modal-box .modal-body .form-item:has(.permission-tree),.modal-box .modal-body .form-item:has(.upload-box),.modal-box .modal-body .form-item:has(.editor),.modal-box .modal-body .form-item:has(.wangeditor),.modal-box .modal-body .form-item:has([type="file"]),.modal-box .modal-body .form-actions,.modal-box .modal-body form>.grid,.modal-box .modal-body form>.form-grid,.modal-box .modal-body form>.inline-form { grid-column:1/-1; }.modal-box .modal-body .form-control { height:43px; background:var(--bg-card); }.modal-box .modal-body textarea.form-control { min-height:110px; }.modal-box .modal-body select.form-control { appearance:none; -webkit-appearance:none; padding-right:36px; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239895a0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 12px center; background-size:16px; }.modal-box .modal-body .form-control:focus { box-shadow:0 0 0 3px rgba(var(--admin-primary-rgb),.16); }.modal-box .modal-body .form-actions { position:sticky; bottom:0; z-index:2; gap:10px; margin:6px -28px 0; padding:16px 28px 20px; border-top:1px solid var(--border-color); background:rgba(255,255,255,.88); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px); }.modal-box .modal-body .form-actions .btn { min-width:96px; min-height:40px; border-radius:10px; font-weight:600; }.permission-tree { max-height:360px; }
@media(max-width:640px){.modal-box .modal-body form{grid-template-columns:1fr}.modal-box .modal-body .form-item{grid-column:1/-1}.modal-box .modal-body{padding:18px 18px 0}.modal-box .modal-body .form-actions{margin-right:-18px;margin-left:-18px;padding-right:18px;padding-left:18px}}
@media (min-width:1700px) { .admin-main { padding-right:36px; padding-left:36px; }.metric-grid { gap:16px; } }
@media (max-width:1280px) { :root { --sidebar-width:228px; }.admin-main { padding-right:20px; padding-left:20px; }.metric-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }.dashboard-lower { grid-template-columns:1fr 1fr; }.dashboard-lower .card:last-child { grid-column:1/-1; }.theme-switch { gap:5px; padding:6px 7px; }.tb-user-copy { display:none; } }
@media (max-width:960px) { .admin-topbar { padding:0 16px; }.admin-topbar .logo { min-width:0; }.logo-copy small { display:none; }.admin-aside { top:0; width:260px; padding-top:26px; transform:translateX(-100%); transition:transform .22s ease-out; }body.sidebar-open { overflow:hidden; }body.sidebar-open .admin-aside { transform:translateX(0); }.sidebar-mask { position:fixed; inset:0; z-index:80; background:rgba(20,15,26,.46); }body.sidebar-open .sidebar-mask { display:block; }.admin-main,body.sidebar-collapsed .admin-main { margin-left:0; }body.sidebar-collapsed .admin-aside { width:260px; }body.sidebar-collapsed .nav-text,body.sidebar-collapsed .nav-caption,body.sidebar-collapsed .mg-chevron,body.sidebar-collapsed .aside-foot { display:initial; }body.sidebar-collapsed .mg-title,body.sidebar-collapsed .nav-dashboard,body.sidebar-collapsed .menu-item { justify-content:flex-start; padding-left:11px; }.dashboard-grid { grid-template-columns:1fr; }.login-wrap { grid-template-columns:1fr; }.login-brand { display:none; }.login-panel { min-height:100vh; }.login-card .login-mark { display:flex; align-items:center; gap:10px; margin-bottom:34px; } }
@media (max-width:640px) { .admin-topbar { gap:8px; padding:0 12px; }.admin-topbar .logo-copy { display:none; }.tb-user { display:none; }.tb-link.cache-link span:last-child { display:none; }.theme-switch { gap:5px; }.tb-right { gap:2px; }.admin-main { padding:calc(var(--topbar-height) + 16px) 12px 24px; }.card { padding:17px 15px; border-radius:12px; }.card-titlebar { align-items:flex-start; margin-bottom:16px; }.card-titlebar h3 { font-size:16px; }.search-bar { align-items:stretch; }.search-bar .form-control { width:100%; min-width:0; }.tb { min-width:760px; }.tb td { overflow-wrap:normal; }.table-scroll { padding-bottom:4px; -webkit-overflow-scrolling:touch; }.status-tabs { width:100%; overflow-x:auto; flex-wrap:nowrap; }.status-tab { flex:0 0 auto; }.pagination { justify-content:center; flex-wrap:wrap; }.metric-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }.metric-card { padding:16px; }.metric-card strong { font-size:24px; }.dashboard-lower { grid-template-columns:1fr; gap:12px; }.dashboard-lower .card:last-child { grid-column:auto; }.chart { height:260px; }.page-heading { align-items:flex-start; }.page-heading h1 { font-size:21px; }.page-date { display:none; }.modal-mask { top:0; left:0; padding:20px 12px; }.modal-box .modal-body { max-height:72vh; padding:18px; }.daterange-panel .dr-cals { flex-direction:column; max-height:60vh; overflow-y:auto; }.login-panel { padding:28px 24px; }.login-options>span { display:none; }.login-card h2 { font-size:26px; }.permission-children { grid-template-columns:1fr 1fr; } }

@media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto!important; transition-duration:.01ms!important; animation-duration:.01ms!important; animation-iteration-count:1!important; } }

/* 广告投放日期 */
.ad-date-control { min-width:0; }
.ad-date-trigger { display:flex; align-items:center; justify-content:space-between; gap:12px; width:100%; height:48px; padding:0 14px; border:1px solid var(--border-strong); border-radius:10px; color:var(--text-main); background:var(--bg-card); text-align:left; cursor:pointer; transition:border-color .15s ease,box-shadow .15s ease,background .15s ease; }
.ad-date-trigger:hover { border-color:rgba(var(--admin-primary-rgb),.48); background:var(--bg-subtle); }
.ad-date-trigger:focus-visible,.ad-date-control.is-open .ad-date-trigger { border-color:var(--admin-primary); outline:0; box-shadow:0 0 0 3px rgba(var(--admin-primary-rgb),.11); }
.ad-date-trigger svg { width:18px; height:18px; flex:0 0 auto; color:var(--text-weak); transition:color .15s ease; }
.ad-date-trigger:hover svg,.ad-date-control.is-open .ad-date-trigger svg { color:var(--admin-primary); }
.ad-date-value { overflow:hidden; font-size:var(--text-base); font-variant-numeric:tabular-nums; text-overflow:ellipsis; white-space:nowrap; }
.ad-date-value.is-placeholder { color:var(--text-weak); }
.ad-calendar { position:fixed; z-index:600; display:none; max-height:calc(100vh - 24px); overflow-y:auto; padding:18px; border:1px solid var(--border-color); border-radius:16px; background:var(--bg-card); box-shadow:0 20px 55px rgba(31,24,40,.18),0 3px 12px rgba(31,24,40,.06); }
.ad-calendar.show { display:block; animation:ad-cal-enter .16s ease-out; }
.ad-cal-head { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:17px; }
.ad-cal-title { display:flex; flex-direction:column; gap:3px; }
.ad-cal-title span { color:var(--text-weak); font-size:var(--text-xs); font-weight:500; }
.ad-cal-title strong { color:var(--text-main); font-size:var(--text-lg); font-weight:650; letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.ad-cal-nav { display:flex; gap:5px; }
.ad-cal-nav button { display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border:1px solid var(--border-color); border-radius:8px; color:var(--text-sub); background:var(--bg-subtle); cursor:pointer; transition:.15s ease; }
.ad-cal-nav button:hover { color:var(--admin-primary); border-color:rgba(var(--admin-primary-rgb),.25); background:var(--admin-primary-light); }
.ad-cal-nav svg { width:16px; height:16px; }
.ad-cal-week,.ad-cal-days { display:grid; grid-template-columns:repeat(7,1fr); }
.ad-cal-week { margin-bottom:7px; }
.ad-cal-week span { display:flex; align-items:center; justify-content:center; height:24px; color:var(--text-weak); font-size:var(--text-xs); font-weight:550; }
.ad-cal-week .weekend { color:var(--admin-primary); }
.ad-cal-days { gap:4px; }
.ad-cal-days button { position:relative; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1; min-height:34px; border:0; border-radius:9px; color:var(--text-main); background:transparent; font-size:var(--text-sm); font-weight:500; font-variant-numeric:tabular-nums; cursor:pointer; transition:color .15s ease,background .15s ease,box-shadow .15s ease; }
.ad-cal-days button:hover:not(:disabled) { color:var(--admin-primary); background:var(--admin-primary-light); }
.ad-cal-days button:focus-visible { z-index:1; outline:2px solid var(--admin-primary); outline-offset:1px; }
.ad-cal-days .is-outside { color:var(--text-weak); opacity:.58; }
.ad-cal-days .is-weekend:not(.is-outside):not(.is-start):not(.is-end) { color:var(--admin-primary); }
.ad-cal-days .is-today:not(.is-start):not(.is-end)::after { content:""; position:absolute; bottom:4px; width:4px; height:4px; border-radius:50%; background:var(--admin-primary); }
.ad-cal-days .is-in-range { color:var(--admin-primary-dark); border-radius:7px; background:var(--admin-primary-light); }
.ad-cal-days .is-start,.ad-cal-days .is-end { color:#fff; background:var(--admin-primary); box-shadow:0 4px 10px rgba(var(--admin-primary-rgb),.22); font-weight:650; }
.ad-cal-days .is-start.is-end { box-shadow:0 4px 10px rgba(var(--admin-primary-rgb),.22); }
.ad-cal-days button:disabled { color:var(--text-weak); background:transparent; opacity:.32; cursor:not-allowed; }
.ad-cal-foot { display:flex; align-items:center; justify-content:space-between; margin:15px -18px -18px; padding:12px 18px; border-top:1px solid var(--border-color); background:var(--bg-subtle); border-radius:0 0 16px 16px; }
.ad-cal-foot button { min-height:30px; padding:0 5px; border:0; border-radius:6px; color:var(--text-sub); background:transparent; font-size:var(--text-xs); cursor:pointer; }
.ad-cal-foot button:hover:not(:disabled) { color:var(--admin-primary); background:var(--admin-primary-light); }
.ad-cal-foot .ad-cal-today { color:var(--admin-primary); font-weight:600; }
.ad-cal-foot button:disabled { opacity:.4; cursor:not-allowed; }
@keyframes ad-cal-enter { from { opacity:0; transform:translateY(-5px) scale(.985); } to { opacity:1; transform:translateY(0) scale(1); } }
:root[data-mode="dark"] .ad-calendar { box-shadow:0 22px 60px rgba(0,0,0,.42); }
:root[data-mode="dark"] .ad-cal-days .is-in-range { color:#ddd4ff; }
:root[data-mode="dark"] .ad-cal-week .weekend,:root[data-mode="dark"] .ad-cal-days .is-weekend:not(.is-outside):not(.is-start):not(.is-end),:root[data-mode="dark"] .ad-cal-foot .ad-cal-today { color:#b9acf2; }
@media(max-width:640px) { .ad-date-fields { gap:8px; }.ad-date-trigger { height:46px; padding:0 11px; }.ad-date-value { font-size:12px; }.ad-calendar { padding:16px; }.ad-cal-days { gap:3px; }.ad-cal-days button { min-height:36px; }.ad-cal-foot { margin:14px -16px -16px; padding:11px 16px; } }
@media(max-width:390px) { .ad-date-fields { grid-template-columns:1fr; }.ad-date-fields>span { display:none; } }

/* 课程列表、表单与视频预览 */
.course-table .course-title-cell { min-width:220px; max-width:360px; }.course-title-cell strong { display:block; line-height:1.65; overflow-wrap:anywhere; }
.course-table .id-cell { white-space:nowrap; }
.course-table .course-price { white-space:nowrap; }
.course-table td.fs12 { white-space:nowrap; }
.course-table .sales-cell { white-space:nowrap; }
.course-table .sales-cell .course-cell-sub { display:inline; margin-left:6px; color:var(--text-weak); font-size:var(--text-sm); }
.course-table th, .course-table td { padding-left:10px; padding-right:10px; }
.course-table .course-title-cell { min-width:180px; max-width:280px; }
.course-table .ops { display:flex; flex-wrap:wrap; gap:6px; }
.course-table { table-layout:fixed; }
.course-table th:nth-child(1) { width:4%; }
.course-table th:nth-child(2) { width:18%; }
.course-table th:nth-child(3) { width:6%; }
.course-table th:nth-child(4) { width:6%; }
.course-table th:nth-child(5) { width:14%; }
.course-table th:nth-child(6) { width:8%; }
.course-table th:nth-child(7) { width:6%; }
.course-table th:nth-child(8) { width:14%; }
.course-table th:nth-child(9) { width:24%; }
.course-table .ops a { min-height:28px; padding:0 8px; font-size:12px; }
.cover-edit { display:flex; align-items:center; gap:10px; }.cover-edit input { flex:1; }
.modal-box:has(#courseVideo) { width:min(900px,calc(100% - 40px)); max-width:calc(100% - 40px); }.modal-box:has(#courseVideo) .modal-body { max-height:calc(100vh - var(--topbar-height) - 12vh); }
.modal-box .modal-body .course-edit-form { grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:20px; }
.course-span-2,.course-form-section,.course-video-field,.course-metrics,.course-cover-field { grid-column:1/-1; }
.course-form-section { margin:8px 0 18px; padding-top:18px; border-top:1px solid var(--border-color); }.course-edit-form>.course-form-section:first-child { margin-top:0; padding-top:0; border-top:0; }.course-form-section h4 { font-size:var(--text-md); font-weight:650; }.course-form-section p { margin-top:4px; color:var(--text-weak); font-size:var(--text-xs); }
.course-cover-field .oss-upload { padding:10px 12px; }.course-cover-field .oss-preview { width:96px; height:68px; flex-basis:96px; }
.course-video-empty { display:flex; align-items:center; gap:15px; min-height:100px; padding:18px 20px; border:1px dashed var(--border-strong); border-radius:12px; background:var(--bg-subtle); }.course-video-empty[hidden],.course-video-preview[hidden] { display:none; }
.course-video-icon { display:flex; align-items:center; justify-content:center; width:44px; height:44px; flex:0 0 44px; border-radius:12px; color:var(--admin-primary); background:var(--admin-primary-light); }.course-video-icon svg { width:24px; height:24px; }
.course-video-empty>div { flex:1; min-width:0; }.course-video-empty strong { display:block; font-size:var(--text-base); font-weight:600; }.course-video-empty p { margin-top:4px; color:var(--text-weak); font-size:var(--text-xs); }.course-video-empty .btn { flex:0 0 auto; }
.course-video-preview { display:grid; grid-template-columns:minmax(0,1.35fr) minmax(220px,.65fr); overflow:hidden; border:1px solid var(--border-color); border-radius:12px; background:var(--bg-card); }.course-video-preview video { display:block; width:100%; height:220px; background:#111116; object-fit:contain; }
.course-video-toolbar { display:flex; flex-direction:column; align-items:stretch; justify-content:center; gap:18px; padding:18px; }.course-video-file { min-width:0; }.course-video-file strong { display:block; font-size:var(--text-sm); font-weight:600; }.course-video-file span { display:block; overflow:hidden; margin-top:4px; color:var(--text-weak); font-size:var(--text-xs); text-overflow:ellipsis; white-space:nowrap; }.course-video-actions { display:flex; gap:8px; flex-wrap:wrap; }.course-video-actions .btn { flex:1; white-space:nowrap; }
.course-video-caption { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:7px; color:var(--text-weak); font-size:var(--text-xs); }.course-video-status { color:var(--admin-primary); text-align:right; }.course-video-pick:disabled { opacity:.55; cursor:wait; }
.course-metrics { margin:2px 0 18px; border-top:1px solid var(--border-color); }.course-metrics summary { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:16px 0 4px; cursor:pointer; list-style:none; }.course-metrics summary::-webkit-details-marker { display:none; }.course-metrics summary::after { content:'+'; color:var(--admin-primary); font-size:var(--text-lg); }.course-metrics[open] summary::after { content:'−'; }.course-metrics summary span { font-size:var(--text-base); font-weight:600; }.course-metrics summary small { margin-left:auto; color:var(--text-weak); font-size:var(--text-xs); }.course-metrics-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:0 16px; padding-top:12px; }
@media(max-width:640px){.modal-box .modal-body .course-edit-form{grid-template-columns:1fr}.course-video-empty{align-items:flex-start;flex-wrap:wrap;padding:16px}.course-video-empty>div{min-width:150px}.course-video-empty .btn{width:100%}.course-video-preview{grid-template-columns:1fr}.course-video-preview video{height:210px}.course-video-toolbar{gap:12px;padding:14px}.course-video-caption{align-items:flex-start;flex-direction:column;gap:3px}.course-video-status{text-align:left}.course-metrics-grid{grid-template-columns:1fr 1fr}.course-metrics summary small{display:none}}


.mg-title { color:#6f6884; }
.mg-title:hover { color:var(--text-main); background:var(--bg-subtle); }
.admin-aside .mg-title { color:#4c455e; background:var(--bg-subtle); }
.menu-item { color:#6f6884; }
.menu-item:hover { color:var(--admin-primary); }
.mg-children { border-left-color:var(--border-color); }
.aside-foot { border-top-color:var(--border-color); color:var(--text-weak); }
.aside-foot strong { color:var(--text-sub); }
.nav-search input { border-color:var(--border-strong); color:var(--text-main); background:var(--bg-subtle); }
.nav-search input::placeholder { color:var(--text-weak); }
.nav-search button:hover { color:var(--admin-primary); background:var(--admin-primary-light); }
.menu-item .nav-icon { color:#8a8199; }
.menu-item.active .nav-icon { color:#fff; }

/* 暗色模式保持深色侧栏与浅色文字 */
:root[data-mode="dark"] .admin-aside { color:var(--text-sub); border-right-color:var(--border-color); }
:root[data-mode="dark"] .nav-caption,:root[data-mode="dark"] .nav-caption button { color:var(--text-weak); }
:root[data-mode="dark"] .nav-dashboard { color:var(--text-sub); }
:root[data-mode="dark"] .nav-dashboard:hover { color:var(--text-main); }
:root[data-mode="dark"] .mg-title,:root[data-mode="dark"] .admin-aside .mg-title { color:var(--text-main); background:rgba(255,255,255,.03); }
:root[data-mode="dark"] .mg-title:hover { color:#fff; background:rgba(255,255,255,.05); }
:root[data-mode="dark"] .menu-item { color:var(--text-sub); }
:root[data-mode="dark"] .menu-item:hover { color:#fff; }
:root[data-mode="dark"] .mg-children { border-left-color:var(--border-color); }
:root[data-mode="dark"] .aside-foot { border-top-color:var(--border-color); color:var(--text-weak); }
:root[data-mode="dark"] .aside-foot strong { color:var(--text-sub); }
:root[data-mode="dark"] .nav-search input { border-color:var(--border-color); color:var(--text-main); background:var(--bg-subtle); }
:root[data-mode="dark"] .menu-item .nav-icon { color:var(--text-weak); }
:root[data-mode="dark"] .menu-item.active .nav-icon { color:var(--admin-primary); }

/* 菜单管理树形表：分叉/末端/纵向连接线 + 分组带 */
.menu-tree .tree-group-row td { background: var(--bg-subtle); }
.menu-tree .tree-group-row td:first-child { border-radius: 8px 0 0 8px; }
.menu-tree .tree-group-row td:last-child { border-radius: 0 8px 8px 0; }
.tree-title { display: inline-flex; align-items: center; white-space: nowrap; }
.tree-title .tree-group-name { font-weight: 650; color: var(--text-main); }
.tree-title .tree-leaf-name { font-weight: 450; color: var(--text-main); }
.tree-title .tag { margin-left: 8px; }
.tg { position: relative; width: 18px; height: 22px; flex: none; }
.tg-line::before { content: ''; position: absolute; left: 8px; top: -16px; bottom: -16px; width: 1px; background: var(--border-strong); }
.tg-branch::before { content: ''; position: absolute; left: 8px; top: -16px; bottom: 0; width: 1px; background: var(--border-strong); }
.tg-branch::after { content: ''; position: absolute; left: 8px; top: calc(50% - .5px); width: 9px; height: 1px; background: var(--border-strong); }
.tg-end::before { content: ''; position: absolute; left: 8px; top: -16px; height: calc(50% + 16px); width: 1px; background: var(--border-strong); }
.tg-end::after { content: ''; position: absolute; left: 8px; top: calc(50% - .5px); width: 9px; height: 1px; background: var(--border-strong); }
.tree-ico { display: inline-flex; color: var(--text-sub); }
.tree-ico .admin-icon { width: 16px; height: 16px; }
/* 后台列表空状态：与主题变量同步，不影响表头及正常数据行。 */
.tb td.empty-tip{padding:0!important;border-bottom:0;background:transparent!important;white-space:normal}
.admin-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;padding:40px 24px 48px;text-align:center;box-sizing:border-box}
.admin-empty-icon{display:grid;place-items:center;width:72px;height:72px;margin-bottom:18px;border-radius:50%;background:var(--bg-subtle);color:var(--text-weak)}
.admin-empty-icon svg{display:block;width:42px;height:42px;opacity:.7}
.admin-empty-title{font-size:var(--text-base);font-weight:500;line-height:var(--leading-normal);color:var(--text-sub)}
.admin-empty-description{max-width:420px;margin:7px 0 0;font-size:var(--text-sm);font-weight:400;line-height:var(--leading-relaxed);color:var(--text-weak);overflow-wrap:anywhere}
.admin-empty-reset{display:inline-flex;align-items:center;justify-content:center;min-height:32px;margin-top:18px;padding:5px 14px;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-card);color:var(--text-sub);font-size:var(--text-sm);text-decoration:none;transition:background .15s,border-color .15s}
.admin-empty-reset:hover{background:var(--admin-primary-light);border-color:var(--admin-primary);color:var(--admin-primary)}
.admin-empty-reset:focus-visible{outline:2px solid var(--admin-primary);outline-offset:3px}
@media(max-width:640px){.admin-empty-state{min-height:230px;padding:30px 16px}.admin-empty-icon{width:60px;height:60px;margin-bottom:14px}.admin-empty-icon svg{width:36px;height:36px}}

@media(max-width:640px){.admin-main .tb.admin-empty-table{min-width:0!important;width:100%;table-layout:fixed}.admin-empty-table tr:has(th){display:none}}

/* 操作单元格保留表格布局，避免 flex 导致整行分隔线错位。 */
.tb td.ops,.course-table td.ops { display:table-cell; vertical-align:middle; }
.tb td.ops a.action-button { margin:3px 6px 3px 0; }
