/* ===== Aesop 风格后台配色 ===== */
:root{
  --bg:#EFEDE4;            /* 页面底 暖米白 */
  --content:#F4F2EA;       /* 内容区 */
  --panel:#FBFAF5;         /* 卡片/面板 */
  --line:#E1DCCF;          /* 分隔线 */
  --line2:#EDE9DE;
  --txt:#33302A;           /* 主文字 墨褐黑 */
  --muted:#8C8577;         /* 次要文字 */
  --side:#2E2A24;          /* 侧边栏 深espresso */
  --side-txt:#C7C0B1;      /* 侧边栏文字 */
  --side-hover:#3A362E;
  --side-active:#403A31;
  --accent:#9C8B63;        /* 克制的橄榄金 */
  --accent-soft:#C9BE9E;
  --green:#5E7355; --red:#A8503F; --amber:#9A7B3A; --blue:#5A6B7A;
  --serif:"Songti SC","STSong","Georgia","Times New Roman",serif;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--txt);}
a{color:inherit;text-decoration:none;}

.admin{display:flex;min-height:100vh;}

/* ===== 侧边栏 ===== */
.sidebar{width:246px;background:var(--side);color:var(--side-txt);display:flex;flex-direction:column;position:fixed;height:100vh;overflow-y:auto;}
.sidebar::-webkit-scrollbar{width:8px;}
.sidebar::-webkit-scrollbar-thumb{background:#4a463c;border-radius:4px;}
.sidebar .logo{display:flex;align-items:center;gap:10px;padding:22px 20px;font-size:17px;font-weight:600;color:#F2EEE4;border-bottom:1px solid #423d33;letter-spacing:.5px;font-family:var(--serif);}
.sidebar .logo .mk{width:32px;height:32px;border-radius:6px;background:var(--accent);color:#2E2A24;display:grid;place-items:center;font-family:var(--serif);font-size:18px;flex:none;}
.sidebar nav{padding:8px 0 14px;flex:1;}

/* 单项（仪表盘） */
.nav-single{display:flex;align-items:center;gap:11px;padding:12px 20px;font-size:14px;color:var(--side-txt);border-left:3px solid transparent;}
.nav-single:hover{background:var(--side-hover);color:#fff;}
.nav-single.active{background:var(--side-active);color:#fff;border-left-color:var(--accent);}
.nav-single .ic{width:18px;text-align:center;}

/* 一级菜单分组 */
.nav-group{margin:2px 0;}
.grp-head{width:100%;display:flex;align-items:center;gap:11px;padding:12px 20px;font-size:14px;color:var(--side-txt);background:none;border:none;cursor:pointer;font-family:inherit;text-align:left;}
.grp-head:hover{background:var(--side-hover);color:#fff;}
.grp-head .ic{width:18px;text-align:center;}
.grp-head .tx{flex:1;}
.grp-head .chev{transition:transform .22s ease;font-size:16px;color:#8f8879;}
.nav-group.open .grp-head .chev{transform:rotate(90deg);}
.nav-group.open .grp-head{color:#F2EEE4;}

/* 二级菜单容器：手风琴过渡 */
.grp-body{max-height:0;overflow:hidden;transition:max-height .28s ease;background:#282520;}
.nav-group.open .grp-body{max-height:640px;}
.grp-body .sub{display:flex;align-items:center;gap:10px;padding:10px 20px 10px 32px;font-size:13.5px;color:#A8A192;border-left:3px solid transparent;}
.grp-body .sub:hover{color:#fff;background:var(--side-hover);}
.grp-body .sub.active{color:#fff;background:var(--side-active);border-left-color:var(--accent);}
.grp-body .sub .dot{width:5px;height:5px;border-radius:50%;background:#6c6656;flex:none;}
.grp-body .sub.active .dot{background:var(--accent);}

.sidebar .me{padding:16px 20px;border-top:1px solid #423d33;font-size:13px;color:#A8A192;}
.sidebar .me b{color:#F2EEE4;}

/* ===== 主区 ===== */
.main{margin-left:246px;flex:1;display:flex;flex-direction:column;min-width:0;background:var(--content);}
.topbar{height:64px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:10;}
.topbar h1{font-size:19px;font-weight:600;font-family:var(--serif);letter-spacing:.5px;}
.topbar .right{display:flex;gap:14px;align-items:center;}
.content{padding:28px;}

/* 统计卡 */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-bottom:26px;}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:20px;}
.stat .n{font-size:28px;font-weight:700;font-family:var(--serif);}
.stat .l{color:var(--muted);font-size:13px;margin-top:4px;}
.stat.warn{border-color:var(--accent-soft);background:#F7F3E7;}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:22px;margin-bottom:20px;}
.panel h2{font-size:16px;margin-bottom:14px;font-family:var(--serif);font-weight:600;}

table.tbl{width:100%;border-collapse:collapse;font-size:14px;}
table.tbl th{text-align:left;padding:11px 13px;background:var(--line2);border-bottom:1px solid var(--line);color:var(--muted);font-weight:600;}
table.tbl td{padding:11px 13px;border-bottom:1px solid var(--line);}
table.tbl tr:hover{background:#F6F3EA;}

.badge{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;}
.badge.g{background:#E7EDE2;color:var(--green);}
.badge.r{background:#F3E2DD;color:var(--red);}
.badge.y{background:#F2EBD6;color:var(--amber);}
.badge.b{background:#E2E8EC;color:var(--blue);}
.badge.gray{background:#ECE9E0;color:var(--muted);}

.btn{padding:9px 16px;border-radius:3px;border:1px solid var(--line);background:var(--panel);cursor:pointer;font-size:14px;font-family:inherit;color:var(--txt);transition:.15s;}
.btn:hover{background:#EFEBE0;}
.btn.pri{background:var(--side);color:#F2EEE4;border-color:var(--side);}
.btn.pri:hover{background:#000;}
.btn.y{background:var(--accent);color:#2E2A24;border-color:var(--accent);}
.btn.y:hover{filter:brightness(.95);}
.btn.danger{background:var(--panel);color:var(--red);border-color:#E0C6bf;}
.btn.danger:hover{background:#F3E2DD;}
.btn.sm{padding:5px 11px;font-size:13px;}

.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:18px;flex-wrap:wrap;}
.toolbar input,.toolbar select{padding:8px 12px;border:1px solid var(--line);border-radius:3px;font-family:inherit;font-size:14px;background:var(--panel);}

form .row{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.field{margin-bottom:16px;}
.field label{display:block;font-size:13px;margin-bottom:6px;color:var(--txt);font-weight:600;}
.field input,.field textarea,.field select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:3px;font-family:inherit;font-size:14px;background:var(--panel);}
.field textarea{min-height:110px;resize:vertical;}
.field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:var(--accent);}
.hint{color:var(--muted);font-size:12px;margin-top:4px;}

.alert{padding:12px 16px;border-radius:3px;margin-bottom:16px;font-size:14px;}
.alert.success{background:#E7EDE2;color:var(--green);}
.alert.warning{background:#F2EBD6;color:var(--amber);}
.alert.danger{background:#F3E2DD;color:var(--red);}

.login-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 30% 20%,#3A362E,#26231E);}
.login-box{width:390px;background:var(--panel);border-radius:6px;padding:40px;box-shadow:0 24px 70px rgba(0,0,0,.35);}
.login-box .logo{display:flex;align-items:center;gap:10px;font-size:22px;font-weight:700;margin-bottom:6px;font-family:var(--serif);}
.login-box .logo .mk{width:38px;height:38px;border-radius:8px;background:var(--accent);color:#2E2A24;display:grid;place-items:center;font-family:var(--serif);font-size:22px;}
.login-box .sub{color:var(--muted);font-size:13px;margin-bottom:24px;}

.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
.chart-box{background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:18px;}
.chart-box h3{font-size:15px;margin-bottom:12px;font-family:var(--serif);}
.kpi{display:flex;gap:16px;margin-bottom:20px;}
.kpi .box{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:18px;text-align:center;}
.kpi .box .n{font-size:26px;font-weight:700;font-family:var(--serif);}
.kpi .box .l{color:var(--muted);font-size:13px;}

/* ===== 通用表单字段（权限模块） ===== */
.fld{margin-bottom:16px;}
.fld>label{display:block;font-size:13px;margin-bottom:6px;color:var(--txt);font-weight:600;}
.fld input[type=text],.fld input[type=number],.fld input[type=password],.fld select,.fld textarea{
  width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:3px;font-family:inherit;font-size:14px;background:var(--panel);}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:none;border-color:var(--accent);}
.fld small{display:block;margin-top:4px;}
.fld input:disabled{background:var(--line2);color:var(--muted);}
label.chk{display:inline-flex;align-items:center;gap:8px;font-weight:400 !important;cursor:pointer;}
label.chk input{width:16px;height:16px;accent-color:var(--accent);}

/* ===== 权限树（角色授权） ===== */
.perm-tree{border:1px solid var(--line);border-radius:4px;background:var(--panel);transition:opacity .2s;}
.perm-top{border-bottom:1px solid var(--line);}
.perm-top:last-child{border-bottom:none;}
.perm-node{display:flex;align-items:center;gap:8px;cursor:pointer;}
.perm-node .pn{font-size:14px;}
.perm-node .pmk{color:var(--muted);font-family:monospace;font-size:11px;}
.perm-node input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex:none;}
.perm-node.lvl0{padding:12px 16px;background:var(--line2);font-weight:600;}
/* 一级可折叠 */
.perm-top-head{display:flex;align-items:center;gap:4px;}
.perm-top-head .chev{width:18px;text-align:center;color:var(--muted);cursor:pointer;font-size:13px;flex:none;transition:transform .2s;user-select:none;}
.perm-top.collapsed .perm-top-head .chev{transform:rotate(-90deg);}
.perm-top.collapsed .perm-children{display:none;}
.perm-sub{padding:10px 16px 10px 38px;border-top:1px dashed var(--line2);}
.perm-node.lvl1{font-weight:600;}
.perm-btns{display:flex;flex-wrap:wrap;gap:16px;margin:8px 0 0 26px;}
.perm-node.lvl2{color:var(--muted);font-weight:400;}
.perm-node.lvl2 .pn{font-size:13px;}

/* ===== 菜单管理树 ===== */
.menu-tree .pmk{color:var(--muted);font-family:monospace;font-size:11px;}
.menu-top{border:1px solid var(--line);border-radius:4px;margin-bottom:12px;background:var(--panel);overflow:hidden;}
.menu-row{display:flex;align-items:center;gap:10px;padding:11px 16px;}
.menu-row.lvl0{background:var(--line2);font-size:15px;}
.menu-row.lvl1{border-top:1px solid var(--line2);}
/* 一级可折叠 */
.menu-row .chev{width:18px;text-align:center;color:var(--muted);cursor:pointer;font-size:13px;flex:none;transition:transform .2s;user-select:none;}
.menu-top.collapsed .menu-row .chev{transform:rotate(-90deg);}
.menu-top.collapsed .menu-subs{display:none;}
.menu-row .drag{cursor:grab;color:var(--muted);user-select:none;font-size:15px;}
.menu-row .mi{width:20px;text-align:center;}
.menu-row .rt{color:var(--muted);font-size:11px;font-family:monospace;}
.menu-row .row-act{margin-left:auto;display:flex;gap:6px;align-items:center;}
.menu-subs{padding:0 0 0 22px;}
.menu-sub{border-top:1px solid var(--line2);}
.menu-buttons{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px 12px 48px;}
.btn-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 6px 3px 10px;border-radius:14px;background:#EDE9DE;font-size:12px;color:var(--txt);}
.btn-chip small{color:var(--muted);font-family:monospace;font-size:10px;}
.chip-x{border:none;background:none;color:var(--red);cursor:pointer;font-size:14px;line-height:1;padding:0 2px;}
.btn-add-form{display:inline-flex;align-items:center;gap:6px;}
.btn-add-form input{padding:5px 8px;border:1px solid var(--line);border-radius:3px;font-size:12px;background:var(--panel);}

@media(max-width:900px){.sidebar{display:none;}.main{margin-left:0;}.row,.chart-grid{grid-template-columns:1fr;}}
