:root{
  --bg:#faf6f2; --card:#ffffff; --ink:#4a4038; --muted:#8a7d6c;
  --rose:#c98ba0; --rose-deep:#a9748a; --gold:#b8743a; --sage:#7fa06a;
  --line:#ece3d8; --shadow:0 6px 20px rgba(120,90,70,.08);
}
*{box-sizing:border-box}
body{margin:0;font-family:'Inter','Noto Sans SC',system-ui,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}
a{color:var(--rose-deep);text-decoration:none}
.topbar{background:#fff;border-bottom:1px solid var(--line);padding:10px 18px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:20;flex-wrap:nowrap}
.brand{font-family:'Cormorant Garamond','Noto Serif SC',serif;font-size:22px;font-weight:600;color:var(--ink);letter-spacing:.5px;line-height:1}
.brand small{font-family:'Inter';font-size:9px;color:var(--muted);display:block;letter-spacing:2px;margin-top:2px}
.brand-logo{display:flex;align-items:center;height:34px}
.brand-logo img{height:34px;width:auto;object-fit:contain}
.nav{display:flex;gap:4px;flex-wrap:nowrap;flex:1 1 auto;min-width:0;margin-left:6px;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px}
.nav::-webkit-scrollbar{height:6px}
.nav::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}
.nav a{padding:7px 12px;border-radius:8px;color:var(--muted);font-size:13px;white-space:nowrap;flex:0 0 auto}
.nav a:hover{background:var(--bg)}
.nav a.active{background:var(--rose);color:#fff}
/* —— 导航拖拽排序 —— */
.nav-item{display:inline-flex;align-items:center}
.nav-grip{display:none;margin-left:6px;color:var(--muted);font-size:12px;opacity:.7;letter-spacing:-2px}
.nav.sorting .nav-item{cursor:grab;background:var(--bg);box-shadow:inset 0 0 0 1px var(--line)}
.nav.sorting .nav-grip{display:inline}
.nav-item.dragging{opacity:.4;cursor:grabbing}
.nav-edit-toggle{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:9px;padding:6px 12px;font-size:12px;cursor:pointer;white-space:nowrap;font-family:inherit;flex:0 0 auto}
.nav-edit-toggle:hover{background:var(--bg)}
.nav-edit-toggle.active{background:var(--rose);color:#fff;border-color:var(--rose)}
.spacer{flex:1}
.btn{border:none;border-radius:9px;padding:9px 16px;font-size:13px;cursor:pointer;font-weight:500;font-family:inherit}
.btn.primary{background:var(--rose);color:#fff}
.btn.gold{background:var(--gold);color:#fff}
.btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink)}
.btn.sm{padding:5px 10px;font-size:12px}
.container{max-width:1100px;margin:24px auto;padding:0 18px}
.hero{background:linear-gradient(135deg,#fbeef0,#f6ece1);border-radius:18px;padding:26px 28px;margin-bottom:20px;box-shadow:var(--shadow)}
.hero h1{margin:0 0 4px;font-family:'Cormorant Garamond','Noto Serif SC',serif;font-size:30px}
.hero p{margin:0;color:var(--muted)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px}
.stat{background:var(--card);border-radius:14px;padding:16px;box-shadow:var(--shadow);border-left:4px solid var(--rose)}
.stat .n{font-size:26px;font-weight:600}
.stat .l{color:var(--muted);font-size:12px;margin-top:2px}
.card{background:var(--card);border-radius:14px;padding:20px;box-shadow:var(--shadow);margin-bottom:18px}
.card h2{margin:0 0 14px;font-size:18px;font-family:'Cormorant Garamond','Noto Serif SC',serif}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
th{color:var(--muted);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.5px}
tr:hover td{background:#fdfaf7}
.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:10px;align-items:end}
input,select,textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;font-family:inherit;background:#fff}
label{font-size:12px;color:var(--muted);display:block;margin-bottom:3px}
.tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;background:#fbeef0;color:var(--rose-deep)}
.tag.ok{background:#eaf3e4;color:var(--sage)}
.tag.due{background:#fbeede;color:var(--gold)}
.empty{color:var(--muted);text-align:center;padding:26px}
.login-wrap{min-height:100vh;width:100%;display:flex;align-items:center;justify-content:center;background-image:url('/static/img/banner.jpg');background-size:cover;background-position:center;background-repeat:no-repeat;position:relative}
.login-overlay{position:absolute;inset:0;background:linear-gradient(135deg,rgba(35,25,25,.55),rgba(75,55,55,.28));z-index:1}
.login-card{background:rgba(255,255,255,.92);border-radius:18px;padding:38px;width:380px;box-shadow:0 18px 50px rgba(20,15,15,.35);text-align:center;position:relative;z-index:2;border:1px solid rgba(255,255,255,.55)}
.login-card .logo-img{height:54px;margin-bottom:10px}
.login-card .remember{display:flex;align-items:center;gap:8px;margin:12px 0 18px;font-size:12px;color:var(--muted);cursor:pointer;justify-content:center}
.login-card .remember input{width:auto;margin:0}
.login-card input{margin:10px 0;padding:11px}
.err{color:#c0532f;font-size:12px;margin-bottom:8px}

/* Dashboard */
.dash-header{text-align:center;padding:22px 0 10px}
.dash-header img{height:54px;width:auto;margin-bottom:8px}
.dash-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:16px 0}
.dash-action{background:#fff;border-radius:14px;padding:16px;text-align:center;box-shadow:var(--shadow);border:1px solid var(--line);transition:transform .1s}
.dash-action:hover{transform:translateY(-2px)}
.dash-action .icon{font-size:22px;margin-bottom:6px}
.dash-action .t{font-weight:600;font-size:13px;color:var(--ink)}
.dash-action .s{font-size:11px;color:var(--muted)}
.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.metric{background:#fff;border-radius:14px;padding:16px;box-shadow:var(--shadow)}
.metric .v{font-size:24px;font-weight:600}
.metric .l{font-size:12px;color:var(--muted);margin-top:2px}
.metric .sub{font-size:11px;color:var(--gold);margin-top:4px}
.section-title{font-size:16px;font-weight:600;margin:18px 0 10px;color:var(--ink)}
.quick-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}