/* ============================================================
   书循环 · 校园旧书循环交易平台 V1.0 原型
   零依赖纯 CSS 设计系统
   ============================================================ */
:root{
  --primary:#4f46e5; --primary-2:#6366f1; --primary-dark:#4338ca; --primary-soft:#eef2ff;
  --teal:#0d9488; --teal-2:#14b8a6; --teal-dark:#0f766e; --teal-soft:#ccfbf1;
  --bg:#f1f5f9; --card:#ffffff; --border:#e2e8f0; --border-2:#cbd5e1;
  --text:#0f172a; --muted:#64748b; --faint:#94a3b8;
  --ok:#16a34a; --ok-soft:#dcfce7;
  --warn:#d97706; --warn-soft:#fef3c7;
  --err:#dc2626; --err-soft:#fee2e2;
  --info:#0284c7; --info-soft:#e0f2fe;
  --purple:#7c3aed; --purple-soft:#ede9fe;
  --radius:12px; --radius-sm:8px;
  --shadow:0 1px 2px rgba(15,23,42,.05), 0 10px 28px -14px rgba(15,23,42,.16);
  --mono:ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, Menlo, monospace;
  --font:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif;
}
*{box-sizing:border-box; margin:0; padding:0;}
html,body{height:100%;}
body{
  font-family:var(--font); color:var(--text); background:var(--bg);
  font-size:14px; line-height:1.55; -webkit-font-smoothing:antialiased;
  background-image:radial-gradient(1200px 500px at 15% -10%, #eef2ff 0%, transparent 60%),
                   radial-gradient(900px 420px at 90% 0%, #f0fdfa 0%, transparent 55%);
  background-attachment:fixed;
}
button{font-family:inherit; cursor:pointer;}
input,select,textarea{font-family:inherit; font-size:inherit; color:var(--text);}
code{font-family:var(--mono); font-size:.92em; background:var(--primary-soft); color:var(--primary-dark); padding:1px 6px; border-radius:5px;}
.mono{font-family:var(--mono); font-size:.9em;}
.hidden{display:none !important;}
.muted{color:var(--muted);} .faint{color:var(--faint);} .small{font-size:12px;} .center{text-align:center;}
.plus{color:var(--ok); font-variant-numeric:tabular-nums;} .minus{color:var(--err); font-variant-numeric:tabular-nums;}
.money{font-weight:700; font-variant-numeric:tabular-nums; color:var(--text);}
.count{color:var(--muted); font-size:12px; font-weight:500;}
.trunc-cell{max-width:280px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.mt{margin-top:14px;}

/* ---------- 顶部导航 ---------- */
.app-header{
  position:sticky; top:0; z-index:60; background:rgba(255,255,255,.88);
  backdrop-filter:blur(10px); border-bottom:1px solid var(--border);
}
.header-inner{
  max-width:1280px; margin:0 auto; padding:10px 20px; display:flex; align-items:center; gap:18px; flex-wrap:wrap;
}
.brand{display:flex; align-items:center; gap:11px;}
.brand-logo{
  width:38px; height:38px; border-radius:11px; color:#fff; display:grid; place-items:center;
  background:linear-gradient(135deg, var(--primary), var(--primary-2));
  box-shadow:0 6px 16px -6px rgba(79,70,229,.55);
}
.brand-name{font-size:17px; font-weight:800; letter-spacing:.5px; display:flex; align-items:center; gap:8px;}
.brand-tag{font-size:10px; font-weight:700; color:var(--primary-dark); background:var(--primary-soft); padding:2px 7px; border-radius:99px; letter-spacing:.4px;}
.brand-sub{font-size:11px; color:var(--muted); margin-top:1px;}
.portal-switch{display:flex; background:var(--bg); border:1px solid var(--border); border-radius:99px; padding:3px; gap:3px;}
.portal-btn{
  border:0; background:transparent; padding:7px 16px; border-radius:99px; font-size:13px; font-weight:600;
  color:var(--muted); transition:all .18s ease;
}
.portal-btn:hover{color:var(--text);}
.portal-btn.active{background:var(--card); color:var(--primary); box-shadow:var(--shadow);}
.header-meta{margin-left:auto; display:flex; align-items:center; gap:8px;}
.dot{display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--faint); margin-left:6px; transition:.2s;}
.dot.on{background:var(--ok); box-shadow:0 0 0 3px var(--ok-soft);}

/* ---------- 通用控件 ---------- */
.btn{
  border:1px solid transparent; border-radius:var(--radius-sm); padding:8px 15px; font-size:13px; font-weight:600;
  transition:all .16s ease; display:inline-flex; align-items:center; gap:6px; white-space:nowrap;
}
.btn:disabled{opacity:.45; cursor:not-allowed;}
.btn-primary{background:var(--primary); color:#fff; box-shadow:0 4px 12px -4px rgba(79,70,229,.5);}
.btn-primary:hover{background:var(--primary-dark); transform:translateY(-1px);}
.btn-soft{background:var(--primary-soft); color:var(--primary-dark);}
.btn-soft:hover{background:#e0e7ff;}
.btn-ghost{background:transparent; color:var(--muted); border-color:var(--border);}
.btn-ghost:hover{background:var(--bg); color:var(--text);}
.btn-danger-ghost{color:var(--err);}
.btn-danger-ghost:hover{background:var(--err-soft); border-color:var(--err-soft);}
.btn-light{background:#fff; color:var(--text); border-color:var(--border-2);}
.btn-light:hover{background:var(--bg);}
.btn-sm{padding:5px 11px; font-size:12px; border-radius:7px;}
.btn.full{width:100%; justify-content:center;}
.btn.danger{color:var(--err);}
.btn-close{
  border:0; background:transparent; color:var(--faint); font-size:20px; line-height:1; padding:4px 8px; border-radius:7px;
  transition:.15s;
}
.btn-close:hover{background:var(--bg); color:var(--text);}

.chip{
  display:inline-flex; align-items:center; gap:5px; border:1px solid var(--border); background:var(--card);
  color:var(--muted); font-size:12px; font-weight:600; padding:3px 10px; border-radius:99px; transition:.15s;
}
.chip.active{background:var(--primary); border-color:var(--primary); color:#fff;}
.chip-ok{background:var(--ok-soft); border-color:#bbf7d0; color:var(--ok);}
.chip-warn{background:var(--warn-soft); border-color:#fde68a; color:var(--warn);}
.chip.mini{padding:1px 8px; font-size:11px;}

.badge{
  display:inline-flex; align-items:center; padding:2px 9px; border-radius:99px; font-size:11px; font-weight:700;
  white-space:nowrap; letter-spacing:.2px;
}
.b-ok{background:var(--ok-soft); color:var(--ok);}
.b-warn{background:var(--warn-soft); color:var(--warn);}
.b-err{background:var(--err-soft); color:var(--err);}
.b-info{background:var(--info-soft); color:var(--info);}
.b-gray{background:#f1f5f9; color:var(--muted);}
.b-cat{background:var(--purple-soft); color:var(--purple);}
.b-cond{background:var(--teal-soft); color:var(--teal-dark);}
.b-muted{background:#f1f5f9; color:var(--muted);}

.select{
  border:1px solid var(--border); border-radius:var(--radius-sm); padding:7px 10px; background:var(--card);
  font-size:13px; color:var(--text); outline:none; transition:border .15s; min-width:110px;
}
.select:focus{border-color:var(--primary-2); box-shadow:0 0 0 3px var(--primary-soft);}
input[type="text"], input[type="number"], textarea{
  border:1px solid var(--border); border-radius:var(--radius-sm); padding:8px 12px; background:var(--card);
  outline:none; transition:border .15s, box-shadow .15s; width:100%;
}
input:focus, textarea:focus{border-color:var(--primary-2); box-shadow:0 0 0 3px var(--primary-soft);}

/* ---------- Portal 布局 ---------- */
.portal{max-width:1280px; margin:0 auto; padding:22px 20px 70px;}
.portal-note{text-align:center; color:var(--faint); font-size:12px; margin-top:16px;}
.page-foot{text-align:center; color:var(--faint); font-size:11px; padding:18px; border-top:1px solid var(--border); background:rgba(255,255,255,.6);}

/* ---------- 学生端 · 手机框架 ---------- */
.portal-student{padding-top:26px;}
.phone{
  width:402px; max-width:100%; margin:0 auto; border-radius:44px; border:11px solid #0f172a;
  background:#fff; box-shadow:0 30px 70px -25px rgba(15,23,42,.45);
  height:min(812px, calc(100vh - 128px)); min-height:560px;
  display:flex; flex-direction:column; position:relative; overflow:hidden;
}
.phone-notch{
  position:absolute; top:9px; left:50%; transform:translateX(-50%); width:118px; height:22px;
  background:#0f172a; border-radius:0 0 14px 14px; z-index:5;
}
.phone-statusbar{
  display:flex; justify-content:space-between; align-items:center; padding:8px 20px 4px;
  font-size:12px; font-weight:700; color:var(--text); flex-shrink:0;
}
.ps-icons{display:flex; gap:5px; align-items:center;}
.phone-header{
  display:flex; justify-content:space-between; align-items:center; padding:8px 18px 10px; flex-shrink:0;
}
.phone-title{font-size:17px; font-weight:800;}
.phone-body{flex:1; overflow-y:auto; padding:8px 14px 20px; scrollbar-width:thin;}
.phone-body::-webkit-scrollbar{width:4px;}
.phone-body::-webkit-scrollbar-thumb{background:var(--border-2); border-radius:99px;}
.phone-tabbar{
  display:flex; border-top:1px solid var(--border); background:#fff; flex-shrink:0; padding:5px 6px 8px;
}
.tab-btn{
  flex:1; border:0; background:transparent; display:flex; flex-direction:column; align-items:center; gap:2px;
  color:var(--faint); font-size:10px; font-weight:600; padding:5px 0; border-radius:10px; transition:.15s;
}
.tab-btn.active{color:var(--teal);}
.tab-btn.active svg{filter:drop-shadow(0 2px 4px rgba(13,148,136,.35));}
.tab-btn:hover{color:var(--teal-2);}

/* ---------- 学生端 · 通用面板 ---------- */
.stu-panel{display:none; animation:fadeUp .25s ease;}
.stu-panel.active{display:block;}
@keyframes fadeUp{from{opacity:0; transform:translateY(8px);} to{opacity:1; transform:none;}}
.stu-section-head{display:flex; justify-content:space-between; align-items:baseline; margin:16px 2px 10px;}
.stu-section-head h3{font-size:15px; font-weight:800;}
.stu-search{
  display:flex; align-items:center; gap:8px; background:var(--bg); border:1px solid var(--border);
  border-radius:14px; padding:6px 6px 6px 12px; transition:box-shadow .15s, border .15s;
}
.stu-search:focus-within{border-color:var(--teal); box-shadow:0 0 0 3px var(--teal-soft);}
.stu-search .s-ico{color:var(--faint); flex-shrink:0;}
.stu-search input{border:0; background:transparent; padding:6px 4px; font-size:14px;}
.stu-search input:focus{box-shadow:none;}
.stu-search-btn{
  border:0; background:var(--teal); color:#fff; font-weight:700; font-size:13px; padding:7px 16px;
  border-radius:10px; transition:.15s; flex-shrink:0;
}
.stu-search-btn:hover{background:var(--teal-dark);}
.stu-search-btn.primary{background:var(--primary);}
.stu-search-btn.primary:hover{background:var(--primary-dark);}
.stu-chips{display:flex; gap:7px; margin-top:12px; flex-wrap:wrap;}
.stu-chips .chip{padding:5px 13px;}
.stu-chips .chip.active{background:var(--teal); border-color:var(--teal); color:#fff;}
.sell-actions{display:flex; gap:10px; margin:2px 0 4px;}
.sell-actions .btn{flex:1; justify-content:center;}

/* 书卡 */
.book-grid{display:flex; flex-direction:column; gap:10px;}
.book-card{
  display:flex; gap:12px; background:var(--card); border:1px solid var(--border); border-radius:16px;
  padding:12px; position:relative; transition:.18s; animation:fadeUp .25s ease;
}
.book-card:hover{box-shadow:var(--shadow); transform:translateY(-1px); border-color:var(--border-2);}
.book-info{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
.book-title{font-weight:700; font-size:13.5px; line-height:1.35; overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;}
.book-meta{color:var(--muted); font-size:11.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.book-isbn{color:var(--faint); font-family:var(--mono); font-size:10.5px;}
.book-tags{display:flex; gap:5px; margin-top:5px; flex-wrap:wrap;}
.book-foot{display:flex; flex-direction:column; align-items:flex-end; justify-content:space-between; gap:8px; flex-shrink:0;}
.book-price{font-size:16px; font-weight:800; color:var(--teal-dark); font-variant-numeric:tabular-nums;}
.book-price .unit{font-size:10px; color:var(--faint); font-weight:500;}

/* 封面占位 */
.cover{border-radius:12px; color:#fff; position:relative; display:flex; flex-direction:column; justify-content:center; align-items:center; overflow:hidden; flex-shrink:0; box-shadow:inset 0 0 0 1px rgba(255,255,255,.18);}
.cover.sm{width:58px; height:78px;}
.cover.xs{width:34px; height:46px; border-radius:7px;}
.cover.md{width:74px; height:100px;}
.cover-ch{font-size:24px; font-weight:900; line-height:1;}
.cover.sm .cover-ch{font-size:22px;} .cover.xs .cover-ch{font-size:14px;}
.cover-cat{position:absolute; bottom:5px; font-size:8.5px; background:rgba(255,255,255,.22); padding:1px 6px; border-radius:99px; letter-spacing:.3px;}
.cover::after{content:"📖"; position:absolute; top:4px; right:5px; font-size:9px; opacity:.85;}

/* 空态 */
.empty{
  text-align:center; color:var(--muted); padding:36px 16px; font-size:13px;
  border:1.5px dashed var(--border-2); border-radius:16px; background:rgba(255,255,255,.5);
}
.empty.small{padding:18px; font-size:12px;}

/* 卖书流程 */
.sell-card{background:var(--card); border:1px solid var(--border); border-radius:16px; padding:14px; margin-top:12px; animation:fadeUp .25s ease;}
.sell-card.hit{border-color:#bbf7d0; background:linear-gradient(180deg,#f0fdfa,#fff);}
.sell-card.miss{border-color:#fecaca; background:linear-gradient(180deg,#fef2f2,#fff);}
.sell-step{display:flex; align-items:center; gap:8px; font-weight:800; font-size:13.5px; margin-bottom:10px;}
.step-no{
  width:22px; height:22px; border-radius:50%; background:var(--teal); color:#fff; font-size:12px;
  display:grid; place-items:center; flex-shrink:0;
}
.sell-samples{font-size:12px; color:var(--muted); margin-top:9px;}
.linklike{border:0; background:none; color:var(--teal-dark); font-weight:600; font-size:12px; padding:0 2px; text-decoration:underline dotted; text-underline-offset:3px;}
.linklike:hover{color:var(--primary);}
.sell-book{display:flex; gap:12px; margin-bottom:4px;}
.sell-book-info{display:flex; flex-direction:column; gap:3px; min-width:0;}
.warn-text{color:var(--warn); background:var(--warn-soft); border-radius:8px; padding:6px 10px; font-size:11.5px; margin-top:9px;}
.sell-miss-ico{font-size:30px;}
.sell-miss-title{font-weight:800; font-size:14px; margin:4px 0 2px;}
.cond-pills{display:flex; gap:7px; flex-wrap:wrap; margin-bottom:12px;}
.cond-pill{
  border:1px solid var(--border); background:#fff; color:var(--muted); border-radius:99px; padding:6px 13px;
  font-size:12.5px; font-weight:600; transition:.15s;
}
.cond-pill:hover{border-color:var(--teal); color:var(--teal-dark);}
.cond-pill.active{background:var(--teal); border-color:var(--teal); color:#fff;}
.preview-title{display:flex; justify-content:space-between; align-items:baseline; font-weight:800; font-size:13px; margin-bottom:8px;}
.preview-note{font-size:10.5px; color:var(--faint); font-weight:500;}
.fee-rows{background:var(--bg); border-radius:12px; padding:10px 12px;}
.fee-row{display:flex; justify-content:space-between; align-items:center; font-size:13px; padding:4px 0; color:var(--muted);}
.fee-row.total{border-top:1px dashed var(--border-2); margin-top:6px; padding-top:8px; font-weight:800; color:var(--text); font-size:14px;}
.fee-row.total .money{font-size:17px; color:var(--teal-dark);}
/* 查询管线 */
.pipe-row{
  display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--muted);
  padding:7px 10px; border-radius:9px; margin-top:6px; background:var(--card); border:1px solid var(--border);
  animation:fadeUp .2s ease;
}
.pipe-row.on{border-color:var(--primary-soft); background:var(--primary-soft); color:var(--primary-dark);}
.pipe-row.ok{border-color:#bbf7d0; background:var(--ok-soft); color:var(--ok);}
.pipe-row.warn{border-color:#fde68a; background:var(--warn-soft); color:var(--warn);}
.pipe-row.err{border-color:#fecaca; background:var(--err-soft); color:var(--err);}
.pipe-row.off{opacity:.5;}
.pipe-dot{width:8px; height:8px; border-radius:50%; background:currentColor; flex-shrink:0;}
.pipe-row b{font-weight:700;}

/* 书单项 */
.mylist-item{
  display:flex; align-items:center; gap:10px; background:var(--card); border:1px solid var(--border);
  border-radius:14px; padding:12px; margin-bottom:9px; transition:.15s; animation:fadeUp .25s ease;
}
.mylist-item:hover{box-shadow:var(--shadow);}
.mylist-main{flex:1; min-width:0;}
.mylist-foot{display:flex; align-items:center; gap:8px; margin-top:6px;}

/* 钱包 / 我的 */
.wallet-card{
  background:linear-gradient(135deg, var(--teal), var(--teal-dark)); border-radius:18px; color:#fff;
  padding:20px; position:relative; overflow:hidden; box-shadow:0 14px 30px -12px rgba(13,148,136,.55);
}
.wallet-card::after{content:"¥"; position:absolute; right:14px; bottom:-16px; font-size:96px; font-weight:900; opacity:.12;}
.wallet-label{font-size:12px; opacity:.85; display:flex; justify-content:space-between; align-items:center;}
.wallet-note{font-size:10px; opacity:.7;}
.wallet-amount{font-size:38px; font-weight:900; font-variant-numeric:tabular-nums; margin:6px 0 14px; letter-spacing:-1px;}
.txn-row{display:flex; align-items:center; gap:11px; background:var(--card); border:1px solid var(--border); border-radius:13px; padding:10px 12px; margin-bottom:8px;}
.txn-ico{width:34px; height:34px; border-radius:10px; display:grid; place-items:center; font-weight:900; font-size:15px; flex-shrink:0; background:var(--bg); color:var(--muted);}
.txn-ico.rebate{background:var(--ok-soft); color:var(--ok);}
.txn-ico.fee{background:var(--warn-soft); color:var(--warn);}
.txn-ico.withdraw{background:var(--info-soft); color:var(--info);}
.txn-main{flex:1; min-width:0;}
.txn-title{font-weight:600; font-size:13px;}
.txn-amt{font-weight:800; font-variant-numeric:tabular-nums; font-size:14px;}
.order-card{background:var(--card); border:1px solid var(--border); border-radius:14px; padding:12px; margin-bottom:9px;}
.order-head{display:flex; justify-content:space-between; align-items:center; margin-bottom:5px;}
.order-no{font-family:var(--mono); font-size:12px; color:var(--muted);}
.order-books{font-size:12.5px; color:var(--text); margin-bottom:7px;}
.order-foot{display:flex; align-items:center; gap:10px; justify-content:space-between;}

/* ---------- 管理后台布局 ---------- */
.portal-admin{max-width:none; padding:0; display:flex; min-height:calc(100vh - 61px);}
.sidebar{
  width:218px; background:#0f172a; color:#cbd5e1; display:flex; flex-direction:column; flex-shrink:0;
  position:sticky; top:61px; height:calc(100vh - 61px); padding:16px 12px;
}
.sidebar-brand{font-size:14px; font-weight:800; color:#fff; display:flex; align-items:center; gap:9px; padding:6px 10px 16px; border-bottom:1px solid rgba(255,255,255,.08); margin-bottom:12px;}
.sb-logo{font-size:19px;}
.sidebar-nav{display:flex; flex-direction:column; gap:3px; flex:1;}
.nav-btn{
  display:flex; align-items:center; gap:11px; border:0; background:transparent; color:#94a3b8; text-align:left;
  font-size:13.5px; font-weight:600; padding:10px 12px; border-radius:10px; transition:.15s; position:relative;
}
.nav-btn:hover{background:rgba(255,255,255,.06); color:#e2e8f0;}
.nav-btn.active{background:var(--primary); color:#fff; box-shadow:0 6px 16px -6px rgba(79,70,229,.7);}
.nav-ico{font-size:16px;}
.sidebar-foot{border-top:1px solid rgba(255,255,255,.08); padding-top:12px; display:flex; flex-direction:column; gap:10px;}
.side-stat{display:flex; justify-content:space-between; font-size:11.5px; color:#94a3b8; padding:0 4px;}
.side-stat .ok{color:#4ade80;}
.sidebar-foot .btn{color:#94a3b8; border-color:rgba(255,255,255,.14);}
.sidebar-foot .btn:hover{color:#fff; background:rgba(255,255,255,.08);}

.admin-main{flex:1; min-width:0; display:flex; flex-direction:column;}
.admin-topbar{
  display:flex; justify-content:space-between; align-items:center; gap:14px; background:#fff;
  border-bottom:1px solid var(--border); padding:14px 24px; flex-wrap:wrap; position:sticky; top:61px; z-index:20;
}
.adm-title{font-size:18px; font-weight:800;}
.adm-sub{font-size:12px; color:var(--muted); margin-top:1px;}
.topbar-actions{display:flex; align-items:center; gap:8px; flex-wrap:wrap;}
.admin-content{padding:22px 24px 60px; display:flex; flex-direction:column; gap:18px; max-width:1400px; width:100%;}
.adm-panel{display:none; animation:fadeUp .22s ease;}
.adm-panel.active{display:flex; flex-direction:column; gap:18px;}

/* 统计卡 */
.stat-grid{display:grid; grid-template-columns:repeat(6, 1fr); gap:14px;}
.stat-card{
  background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:16px;
  box-shadow:var(--shadow); transition:.18s; position:relative; overflow:hidden;
}
.stat-card:hover{transform:translateY(-2px);}
.stat-card::before{content:""; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--primary);}
.stat-card:nth-child(2)::before{background:var(--teal);}
.stat-card:nth-child(3)::before{background:var(--ok);}
.stat-card:nth-child(4)::before{background:var(--warn);}
.stat-card:nth-child(5)::before{background:var(--purple);}
.stat-card:nth-child(6)::before{background:var(--info);}
.stat-label{font-size:12px; color:var(--muted); font-weight:600;}
.stat-value{font-size:26px; font-weight:900; font-variant-numeric:tabular-nums; margin-top:5px; letter-spacing:-.5px;}
.stat-unit{font-size:12px; font-weight:600; color:var(--muted); margin-left:4px;}

/* 卡片与行 */
.cards-row{display:grid; grid-template-columns:1fr 1fr; gap:18px;}
.card{background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:18px; box-shadow:var(--shadow);}
.card.grow{flex:1;}
.card-title{font-size:14px; font-weight:800; margin-bottom:13px; display:flex; align-items:center; gap:8px;}

/* 图表 */
.chart{display:flex; align-items:flex-end; gap:12px; height:172px; padding:6px 4px 0;}
.chart-col{flex:1; display:flex; flex-direction:column; align-items:center; gap:6px; height:100%;}
.chart-bars{flex:1; display:flex; align-items:flex-end; gap:5px; width:100%; justify-content:center;}
.bar{width:14px; border-radius:5px 5px 2px 2px; transition:height .5s cubic-bezier(.2,.8,.3,1); position:relative;}
.bar:hover{filter:brightness(1.08);}
.bar-o{background:linear-gradient(180deg, var(--primary-2), var(--primary));}
.bar-r{background:linear-gradient(180deg, #fbbf24, #f59e0b);}
.chart-label{font-size:10px; color:var(--muted);}
.chart-num{font-size:10px; font-weight:700; color:var(--faint); font-variant-numeric:tabular-nums;}
.chart-legend{display:flex; gap:16px; justify-content:center; margin-top:10px; font-size:11.5px; color:var(--muted);}
.chart-legend i{display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:5px; vertical-align:-1px;}
.lg-o{background:var(--primary);} .lg-r{background:#f59e0b;}

/* 库存分布 */
.dist-bar{display:flex; height:26px; border-radius:99px; overflow:hidden; margin:14px 0 12px; gap:2px; background:var(--bg);}
.dist-seg{height:100%; transition:.3s; position:relative;}
.dist-seg:hover{filter:brightness(1.1);}
.d-1{background:#10b981;} .d-0{background:#f59e0b;} .d-2{background:#94a3b8;} .d-3{background:#cbd5e1;}
.dist-legend{display:flex; gap:14px; flex-wrap:wrap; font-size:11.5px; color:var(--muted);}
.dist-legend .dot{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:5px;}

/* 表格 */
.table-wrap{overflow-x:auto;}
.table{width:100%; border-collapse:collapse; font-size:12.8px;}
.table th{
  text-align:left; font-size:11px; color:var(--muted); text-transform:none; letter-spacing:.3px; font-weight:700;
  padding:9px 12px; border-bottom:1.5px solid var(--border-2); background:var(--bg); white-space:nowrap;
}
.table td{padding:10px 12px; border-bottom:1px solid var(--border); vertical-align:middle;}
.table tbody tr{transition:background .12s;}
.table tbody tr:hover{background:#f8fafc;}
.table .actions{white-space:nowrap;}
.table .actions .btn{margin-left:4px;}
.ta-r{text-align:right;}
.empty-row{text-align:center; color:var(--faint); padding:26px !important;}
.cell-book{display:flex; align-items:center; gap:10px; min-width:0;}
.cell-title{font-weight:600; font-size:12.8px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:230px;}

/* 工具栏 / 分页 */
.toolbar{display:flex; align-items:center; gap:10px; flex-wrap:wrap;}
.search-box{
  display:flex; align-items:center; gap:7px; background:var(--card); border:1px solid var(--border);
  border-radius:var(--radius-sm); padding:0 11px; color:var(--faint); width:300px; max-width:100%;
  transition:border .15s, box-shadow .15s;
}
.search-box:focus-within{border-color:var(--primary-2); box-shadow:0 0 0 3px var(--primary-soft);}
.search-box input{border:0; background:transparent; padding:8px 0; font-size:13px;}
.search-box input:focus{box-shadow:none;}
.toolbar-spacer{flex:1;}
.pagination{display:flex; align-items:center; justify-content:flex-end; gap:12px; padding-top:4px;}
.page-info{font-size:12px; color:var(--muted);}

/* 横幅 */
.banner{border-radius:var(--radius); padding:12px 16px; font-size:12.5px; line-height:1.7;}
.banner.info{background:var(--info-soft); border:1px solid #bae6fd; color:#075985;}
.banner code{background:rgba(255,255,255,.7);}

/* 开关 */
.switch{
  display:inline-flex; width:38px; height:21px; border-radius:99px; background:var(--border-2); position:relative;
  cursor:pointer; transition:.2s; vertical-align:middle; flex-shrink:0;
}
.switch i{position:absolute; top:2px; left:2px; width:17px; height:17px; border-radius:50%; background:#fff; transition:.2s; box-shadow:0 1px 3px rgba(0,0,0,.25);}
.switch.on{background:var(--ok);}
.switch.on i{left:19px;}
.switch.big{width:46px; height:25px;}
.switch.big i{width:21px; height:21px;}
.switch.big.on i{left:23px;}
.secret{letter-spacing:1.5px;}
.cfg-key{font-weight:700; white-space:nowrap;}

/* ---------- 弹窗 ---------- */
.modal-ov{
  position:fixed; inset:0; background:rgba(15,23,42,.45); backdrop-filter:blur(3px); z-index:100;
  display:flex; align-items:center; justify-content:center; padding:20px;
  opacity:0; transition:opacity .18s ease;
}
.modal-ov.in{opacity:1;}
.modal-ov.out{opacity:0;}
.modal{
  background:#fff; border-radius:16px; width:min(var(--mw, 480px), 100%); max-height:88vh; overflow:auto;
  box-shadow:0 30px 80px -20px rgba(15,23,42,.5);
  transform:translateY(14px) scale(.97); transition:transform .2s cubic-bezier(.2,.8,.3,1);
  display:flex; flex-direction:column;
}
.modal-ov.in .modal{transform:none;}
.modal-head{
  display:flex; justify-content:space-between; align-items:center; padding:15px 18px;
  border-bottom:1px solid var(--border); flex-shrink:0;
}
.modal-head h3{font-size:15px; font-weight:800;}
.modal-body{padding:18px; overflow-y:auto; flex:1;}
.modal-foot{
  padding:13px 18px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:9px;
  flex-wrap:wrap; flex-shrink:0;
}

/* 表单 */
.form-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
.form-field{display:flex; flex-direction:column; gap:5px;}
.form-field label{font-size:12px; font-weight:700; color:var(--muted);}
.form-field .req{color:var(--err);}
.form-field input,.form-field select{padding:8px 11px; font-size:13px;}
.form-field select{border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--card); outline:none;}
.form-field select:focus{border-color:var(--primary-2);}

/* 购物车 */
.cart-line{display:flex; align-items:center; gap:11px; padding:10px 0; border-bottom:1px dashed var(--border);}
.cart-info{flex:1; min-width:0;}
.cart-qty{display:flex; align-items:center; gap:8px;}
.qty-btn{
  width:26px; height:26px; border-radius:8px; border:1px solid var(--border); background:#fff; font-weight:800;
  color:var(--muted); font-size:15px; line-height:1; transition:.15s;
}
.qty-btn:hover{border-color:var(--primary); color:var(--primary);}
.cart-qty span{min-width:22px; text-align:center; font-weight:800; font-variant-numeric:tabular-nums;}
.cart-price{font-weight:800; font-variant-numeric:tabular-nums; min-width:66px; text-align:right;}
.cart-type-row{display:flex; align-items:center; gap:7px; flex-wrap:wrap; margin-bottom:10px; width:100%;}
.cart-total{background:var(--bg); border-radius:12px; padding:10px 13px; width:100%;}
.cart-actions{width:100%; display:flex; justify-content:flex-end; margin-top:4px;}

/* 订单成功 / 支付 */
.order-ok{text-align:center; padding:6px 0;}
.order-ok-ico{font-size:42px; margin-bottom:8px;}
.order-ok p{margin-bottom:10px;}
.pay-sim{text-align:center; padding:14px 0;}
.pay-ico{font-size:44px; margin-bottom:10px; animation:pulse 1.2s ease infinite;}
@keyframes pulse{0%,100%{transform:scale(1);}50%{transform:scale(1.12);}}

/* OCR */
.ocr-title{font-weight:800; font-size:13.5px; margin:16px 0 9px; display:flex; align-items:center; gap:7px;}
.ocr-title.warn-title{color:var(--warn);}
.ocr-progress{height:10px; border-radius:99px; background:var(--bg); overflow:hidden; margin:14px 0 8px;}
.ocr-progress-bar{height:100%; width:0; background:linear-gradient(90deg, var(--primary), var(--teal)); transition:width .12s linear; border-radius:99px;}
.ocr-progress-text{text-align:center; color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums;}
.ocr-lines{max-height:210px; overflow-y:auto; border:1px solid var(--border); border-radius:12px; background:var(--bg);}
.ocr-line{display:flex; justify-content:space-between; gap:8px; padding:6px 11px; border-bottom:1px dashed var(--border); font-family:var(--mono); font-size:11.5px; color:#334155;}
.ocr-line:last-child{border-bottom:0;}
.ocr-conf{font-weight:800; color:var(--teal-dark); flex-shrink:0;}
.pipe-flow{display:flex; flex-direction:column; gap:6px;}
.ocr-item{display:flex; align-items:center; gap:10px; border:1px solid var(--border); border-radius:12px; padding:10px 12px; margin-bottom:8px; background:var(--card);}
.ocr-item.is-dup{border-color:#fde68a; background:#fffbeb;}
.ocr-item.is-miss{border-color:#fecaca; background:#fef2f2;}
.ocr-item-info{flex:1; min-width:0;}
.ocr-item-state{flex-shrink:0;}
.ocr-item-actions{display:flex; gap:5px; flex-shrink:0;}
.ocr-edit-row{display:flex; gap:7px; align-items:center; margin-top:6px;}
.ocr-edit-input{flex:1; font-family:var(--mono);}
.ocr-dup-banner{background:var(--warn-soft); border:1px solid #fde68a; color:#92400e; border-radius:12px; padding:11px 13px; font-size:12.5px; margin-bottom:4px;}
.ocr-foot{display:flex; justify-content:flex-end; gap:9px; margin-top:16px; padding-top:13px; border-top:1px solid var(--border);}
.api-payload{margin-top:14px; font-size:12px; color:var(--muted);}
.api-payload summary{cursor:pointer; font-weight:600; user-select:none;}
.api-payload pre{background:#0f172a; color:#a5f3fc; padding:12px; border-radius:10px; overflow:auto; font-size:11px; line-height:1.6; margin-top:8px; max-height:230px;}

/* 重复书籍弹窗 */
.dup-box{display:flex; flex-direction:column; gap:11px;}
.dup-item{background:var(--warn-soft); border:1px solid #fde68a; border-radius:12px; padding:12px 14px;}
.dup-msg{font-weight:800; font-size:13.5px; color:#92400e;}
.dup-sub{font-size:12.5px; color:#b45309; margin-top:3px;}
.dup-reason{display:flex; align-items:center; gap:8px; margin-top:8px;}

/* 审核列表 */
.review-row{display:flex; align-items:center; gap:10px; border:1px solid var(--border); border-radius:12px; padding:10px 12px; margin-bottom:9px; background:var(--card);}
.review-row .book-title{flex:1;}
.review-actions{display:flex; gap:6px; flex-shrink:0;}

/* ---------- Toast ---------- */
.toast-root{position:fixed; top:74px; right:18px; z-index:200; display:flex; flex-direction:column; gap:9px; align-items:flex-end;}
.toast{
  display:flex; align-items:center; gap:9px; background:#0f172a; color:#fff; border-radius:11px;
  padding:11px 16px; font-size:13px; font-weight:600; box-shadow:0 16px 40px -12px rgba(15,23,42,.5);
  opacity:0; transform:translateX(24px); transition:.28s cubic-bezier(.2,.8,.3,1); max-width:340px;
}
.toast.show{opacity:1; transform:none;}
.toast-ico{width:20px; height:20px; border-radius:50%; display:grid; place-items:center; font-size:11px; font-weight:900; flex-shrink:0;}
.toast-ok .toast-ico{background:#22c55e;}
.toast-err .toast-ico{background:#ef4444;}
.toast-warn .toast-ico{background:#f59e0b;}

/* ---------- 接口日志抽屉 ---------- */
.api-log{
  position:fixed; right:16px; bottom:16px; width:430px; max-width:calc(100vw - 32px); max-height:46vh;
  background:#0f172a; color:#cbd5e1; border-radius:14px; box-shadow:0 24px 60px -14px rgba(15,23,42,.6);
  display:flex; flex-direction:column; overflow:hidden; z-index:90; animation:fadeUp .2s ease;
  border:1px solid rgba(255,255,255,.08);
}
.api-log-head{
  display:flex; justify-content:space-between; align-items:center; padding:11px 14px; font-size:12.5px; font-weight:800;
  color:#fff; background:rgba(255,255,255,.05); border-bottom:1px solid rgba(255,255,255,.08);
}
.api-log-body{padding:8px 10px; overflow-y:auto; font-family:var(--mono); font-size:11px;}
.api-log-row{display:flex; gap:8px; align-items:baseline; padding:5px 4px; border-bottom:1px dashed rgba(255,255,255,.07); word-break:break-all;}
.api-log-row:last-child{border-bottom:0;}
.alg-time{color:#64748b; flex-shrink:0;}
.alg-method{font-weight:800; flex-shrink:0;}
.alg-method.GET{color:#4ade80;} .alg-method.POST{color:#60a5fa;} .alg-method.PUT{color:#fbbf24;} .alg-method.DELETE{color:#f87171;}
.alg-detail{color:#94a3b8; flex-shrink:0;}
.api-log-empty{color:#64748b; text-align:center; padding:16px;}

/* ---------- 响应式 ---------- */
@media (max-width:1100px){
  .stat-grid{grid-template-columns:repeat(3,1fr);}
  .cards-row{grid-template-columns:1fr;}
}
@media (max-width:860px){
  .sidebar{position:static; width:100%; height:auto; flex-direction:row; flex-wrap:wrap; align-items:center; gap:6px; padding:10px;}
  .sidebar-brand{display:none;}
  .sidebar-nav{flex-direction:row; flex-wrap:wrap; flex:1;}
  .nav-btn{flex:1; justify-content:center; min-width:96px; padding:8px 6px; font-size:12px;}
  .sidebar-foot{flex-direction:row; align-items:center;}
  .portal-admin{flex-direction:column;}
  .admin-topbar{position:static;}
  .phone{height:min(812px, calc(100vh - 140px));}
}
@media (max-width:560px){
  .header-meta{width:100%; justify-content:flex-end;}
  .portal{padding:14px 10px;}
  .form-grid{grid-template-columns:1fr;}
  .stat-grid{grid-template-columns:repeat(2,1fr);}
}

/* ============================================================
   补充需求（V1.1）样式
   ============================================================ */

/* 首页书卡双按钮 */
.book-actions{display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end;}
.book-actions .btn{padding:5px 10px; font-size:11.5px;}

/* 卖书页扫码按钮 */
.stu-scan-btn{
  border:1px solid var(--border); background:#fff; color:var(--teal-dark); width:38px; height:38px;
  border-radius:10px; font-size:17px; flex-shrink:0; transition:.15s; display:grid; place-items:center;
}
.stu-scan-btn:hover{border-color:var(--teal); background:var(--teal-soft);}

/* 扫码模拟弹窗 */
.scan-frame{
  position:relative; height:150px; border-radius:14px; background:linear-gradient(180deg,#eef2ff,#f0fdfa);
  border:1px solid var(--border); overflow:hidden; display:grid; place-items:center; margin-bottom:10px;
}
.scan-barcode{
  width:150px; height:74px;
  background:repeating-linear-gradient(90deg, #0f172a 0 3px, transparent 3px 7px, #0f172a 7px 9px, transparent 9px 13px, #0f172a 13px 15px, transparent 15px 21px);
  border-radius:6px;
}
.scan-line{
  position:absolute; left:8%; right:8%; height:3px; top:10%;
  background:linear-gradient(90deg, transparent, var(--err), transparent);
  box-shadow:0 0 12px 2px rgba(239,68,68,.55); border-radius:99px;
  animation:scanMove 1.6s ease-in-out infinite;
}
@keyframes scanMove{0%,100%{top:12%;}50%{top:82%;}}
.scan-corner{position:absolute; width:22px; height:22px; border:3px solid var(--err);}
.scan-corner.tl{top:10px; left:10px; border-right:0; border-bottom:0; border-radius:6px 0 0 0;}
.scan-corner.tr{top:10px; right:10px; border-left:0; border-bottom:0; border-radius:0 6px 0 0;}
.scan-corner.bl{bottom:10px; left:10px; border-right:0; border-top:0; border-radius:0 0 0 6px;}
.scan-corner.br{bottom:10px; right:10px; border-left:0; border-top:0; border-radius:0 0 6px 0;}
.scan-result{min-height:44px;}
.scan-ok{
  background:var(--ok-soft); border:1px solid #bbf7d0; color:var(--ok); border-radius:11px;
  padding:10px 13px; font-size:13px; font-weight:700; text-align:center; animation:fadeUp .25s ease;
}

/* 登录 / 注册卡片（学生端我的页） */
.login-card{
  background:var(--card); border:1px solid var(--border); border-radius:18px; padding:18px;
  box-shadow:var(--shadow); margin-top:4px;
}
.login-head{font-size:17px; font-weight:800; text-align:center;}
.login-tabs{display:flex; background:var(--bg); border-radius:11px; padding:3px; margin:12px 0 14px; gap:3px;}
.ltab{
  flex:1; border:0; background:transparent; padding:8px; border-radius:9px; font-size:13px; font-weight:700;
  color:var(--muted); transition:.15s;
}
.ltab.active{background:#fff; color:var(--primary); box-shadow:var(--shadow);}
.login-demo{display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:14px; padding-top:12px; border-top:1px dashed var(--border);}

/* 我的 · 个人资料卡 */
.profile-card{
  display:flex; align-items:center; gap:12px; background:var(--card); border:1px solid var(--border);
  border-radius:16px; padding:14px; margin-bottom:12px; box-shadow:var(--shadow);
}
.profile-avatar{
  width:52px; height:52px; border-radius:50%; background:linear-gradient(135deg,var(--primary),var(--teal));
  color:#fff; font-size:22px; font-weight:900; display:grid; place-items:center; flex-shrink:0;
}
.profile-info{flex:1; min-width:0;}
.profile-name{font-size:15px; font-weight:800; display:flex; align-items:center; gap:7px;}
.profile-actions{display:flex; gap:6px; flex-direction:column; align-items:flex-end;}

/* 订单确认 */
.co-title{font-weight:800; font-size:13px; margin-bottom:8px;}
.co-items{border:1px solid var(--border); border-radius:12px; padding:0 12px; margin-bottom:12px;}
.co-addr{background:var(--primary-soft); border:1px solid #c7d2fe; border-radius:12px; padding:12px; margin:10px 0;}
.co-addr-title{font-size:12.5px; font-weight:800; color:var(--primary-dark); margin-bottom:9px;}
.addr-summary{font-size:13px; line-height:1.9; color:var(--text); background:#fff; border-radius:9px; padding:9px 12px;}

/* 手动添加 · 搜索结果 */
.ma-results{margin-top:9px; display:flex; flex-direction:column; gap:7px; max-height:240px; overflow-y:auto;}
.ma-hint{color:var(--faint); font-size:12px; text-align:center; padding:14px 8px; border:1.5px dashed var(--border-2); border-radius:10px;}
.ma-result{
  display:flex; flex-direction:column; gap:2px; text-align:left; border:1px solid var(--border);
  border-radius:10px; padding:9px 12px; background:var(--card); transition:.15s;
}
.ma-result:hover{border-color:var(--primary-2); box-shadow:var(--shadow);}
.ma-title{font-weight:700; font-size:13px;}
.ma-sub{color:var(--muted); font-family:var(--mono); font-size:11px;}
.ma-selected{
  display:flex; align-items:center; gap:11px; margin-top:10px; background:var(--teal-soft);
  border:1px solid #99f6e4; border-radius:11px; padding:10px 12px;
}

/* 后台登录 */
.admin-login{max-width:420px; margin:60px auto 0; padding:0 16px;}
.admin-login-card{
  background:var(--card); border:1px solid var(--border); border-radius:18px; padding:26px 26px 22px;
  box-shadow:0 24px 60px -24px rgba(15,23,42,.35); text-align:center;
}
.admin-login-logo{font-size:40px; margin-bottom:8px;}
.admin-login-card h2{font-size:19px; font-weight:900; margin-bottom:4px;}
.admin-login-card .form-field{text-align:left;}
.admin-login-msg{color:var(--err); font-size:12px; margin-top:9px; min-height:16px; text-align:left;}
.admin-demo{display:flex; gap:8px; align-items:center; justify-content:center; margin-top:16px; flex-wrap:wrap;}
.admin-login-card .full{justify-content:center;}

/* 侧栏账号信息 */
.side-account{
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.12); border-radius:10px;
  padding:9px 11px; color:#cbd5e1; display:flex; flex-direction:column; gap:1px;
}
.side-account b{color:#fff; font-size:13px;}
.side-account span{font-size:11px; color:#94a3b8;}
.admin-account-chip{background:var(--primary-soft); border-color:#c7d2fe; color:var(--primary-dark);}

/* 数据看板 · 横向条形图 / 小统计 */
.hbar-list{display:flex; flex-direction:column; gap:9px; margin-top:4px;}
.hbar-row{display:flex; align-items:center; gap:9px;}
.hbar-label{width:74px; font-size:12px; color:var(--muted); flex-shrink:0;}
.hbar-track{flex:1; height:12px; background:var(--bg); border-radius:99px; overflow:hidden;}
.hbar-fill{height:100%; background:linear-gradient(90deg, var(--primary-2), var(--primary)); border-radius:99px; transition:width .4s cubic-bezier(.2,.8,.3,1);}
.hbar-num{width:26px; text-align:right; font-weight:800; font-size:12px; font-variant-numeric:tabular-nums; color:var(--text);}
.mini-stat-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:10px;}
.mini-stat-grid .stat-card{padding:11px 12px; box-shadow:none;}
.mini-stat-grid .stat-value{font-size:19px;}

/* 配送 / 用户表格徽章辅助 */
.admin-account{display:flex; flex-direction:column; gap:6px;}

/* 侧栏导航可滚动 */
.sidebar-nav{overflow-y:auto;}
.sidebar-nav::-webkit-scrollbar{width:4px;}
.sidebar-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15); border-radius:99px;}

/* ============================================================
   补充需求（V1.2）样式
   ============================================================ */

/* 表单只读输入 */
.readonly-input{background:var(--bg) !important; color:var(--muted) !important; cursor:not-allowed;}

/* 学生端订单卡 · 售后行 */
.order-as-row{display:flex; align-items:center; gap:7px; flex-wrap:wrap; margin:7px 0 2px; padding-top:7px; border-top:1px dashed var(--border);}

/* 配送员 · 移动优先手机形态 */
.body-courier .admin-topbar{padding:10px 14px;}
.body-courier .admin-content{padding:16px 14px 40px;}
.courier-phone{
  max-width:430px; width:100%; margin:0 auto; background:var(--bg);
  border:1px solid var(--border-2); border-radius:26px; padding:14px;
  box-shadow:0 18px 40px -22px rgba(15,23,42,.4);
}
.courier-phone-head{
  display:flex; justify-content:space-between; align-items:center; font-weight:800; font-size:15px;
  padding:2px 4px 12px; border-bottom:1px solid var(--border); margin-bottom:12px;
}
.courier-phone-user{font-size:12px; color:var(--muted); font-weight:700;}
.courier-stats{display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:12px;}
.courier-stat{
  background:var(--card); border:1px solid var(--border); border-radius:12px;
  padding:9px 8px; text-align:center;
}
.courier-stat b{display:block; font-size:18px; font-variant-numeric:tabular-nums; color:var(--text);}
.courier-stat span{font-size:10.5px; color:var(--muted);}
.courier-card{
  background:var(--card); border:1px solid var(--border); border-radius:15px; padding:12px;
  margin-bottom:10px; box-shadow:0 8px 22px -16px rgba(15,23,42,.25); animation:fadeUp .22s ease;
}
.courier-card-top{display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:7px;}
.courier-card-top .mono{font-size:12px; color:var(--muted);}
.courier-card-row{
  display:flex; gap:7px; align-items:baseline; font-size:12.5px; color:var(--text); margin:3px 0; line-height:1.5;
}
.courier-card-label{color:var(--faint); flex-shrink:0; font-size:11.5px;}
.courier-card-row b{font-weight:800;}
.courier-card-actions{display:flex; gap:8px; margin-top:11px; padding-top:10px; border-top:1px dashed var(--border);}
.courier-card-actions .btn{flex:1; justify-content:center;}

/* 配送员角色 · 窄屏适配 */
@media (max-width:860px){
  body.body-courier .sidebar{position:static; width:100%; height:auto; flex-direction:row; flex-wrap:wrap; align-items:center; gap:6px; padding:10px;}
  body.body-courier .sidebar-brand{display:none;}
  body.body-courier .sidebar-nav{flex-direction:row; flex-wrap:wrap; flex:1;}
  body.body-courier .nav-btn{flex:1; justify-content:center; min-width:96px; padding:8px 6px; font-size:12px;}
  body.body-courier .sidebar-foot{flex-direction:row; align-items:center; flex-wrap:wrap;}
  body.body-courier .portal-admin{flex-direction:column;}
  body.body-courier .admin-topbar{position:static;}
}
@media (max-width:560px){
  .courier-phone{border-radius:18px; padding:10px;}
  .courier-card{padding:10px;}
  .courier-stats{grid-template-columns:repeat(3,1fr); gap:6px;}
  .courier-card-row{font-size:12px;}
}
