/* ============================================================
   深圳市易制毒化学品协会 · 网站管理后台
   配色取自新版官网（深蓝 + 藏青 + 金）
   ============================================================ */
:root{
  --blue:#12518f; --blue-light:#1a6fb5; --navy:#0c3a68;
  --green:#2e8b57; --gold:#c9a253; --gold-dark:#b08c3e;
  --bg:#f2f6fa; --card:#fff; --line:#e3ebf3; --text:#1f2d3d;
  --muted:#64748b; --red:#b5342f; --red-l:#fdecec;
  --ok:#2e8b57; --ok-l:#eaf6ef; --warn:#b45309; --warn-l:#fff7e6;
  --radius:10px; --shadow:0 2px 10px rgba(18,81,143,.07);
  --side-w:216px; --top-h:58px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Segoe UI",sans-serif;
  color:var(--text);background:var(--bg);font-size:14px;line-height:1.6}
a{color:inherit;text-decoration:none}
ul{list-style:none}
img{max-width:100%;display:block}
input,select,textarea,button{font-family:inherit;font-size:14px;color:inherit}
[hidden]{display:none !important}

/* ---------------- 通用控件 ---------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:34px;padding:0 14px;border:1px solid var(--line);border-radius:8px;
  background:#fff;color:var(--text);cursor:pointer;transition:.15s;white-space:nowrap}
.btn:hover{border-color:#bcd3e8;color:var(--blue);background:#f7fbff}
.btn:active{transform:translateY(1px)}
.btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn-primary:hover{background:var(--blue-light);border-color:var(--blue-light);color:#fff}
.btn-ghost-gold{background:#fff;border-color:#e8d7ae;color:var(--gold-dark)}
.btn-ghost-gold:hover{background:#fffdf6;border-color:var(--gold);color:var(--gold-dark)}
.btn-danger{color:var(--red);border-color:#f0cfcd}
.btn-danger:hover{background:var(--red-l);border-color:#e0b3b0;color:var(--red)}
.btn-sm{height:28px;padding:0 10px;font-size:13px;border-radius:7px}
.btn-lg{height:42px;padding:0 22px;font-size:15px}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-text{border:0;background:transparent;color:var(--blue);padding:0 4px;height:auto}
.btn-text:hover{color:var(--blue-light);text-decoration:underline;background:transparent}

.inp,.sel,.ta{width:100%;height:34px;padding:0 10px;border:1px solid var(--line);
  border-radius:8px;background:#fff;outline:none;transition:.15s}
.ta{height:auto;padding:8px 10px;resize:vertical;line-height:1.6}
.inp:focus,.sel:focus,.ta:focus{border-color:var(--blue-light);box-shadow:0 0 0 3px rgba(26,111,181,.12)}
.inp::placeholder,.ta::placeholder{color:#a9b6c6}
.sel{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2364748b'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:26px}
label.fl{display:block;margin-bottom:6px;color:var(--muted);font-size:13px}
.req::after{content:"*";color:var(--red);margin-left:3px}

.badge{display:inline-block;padding:1px 9px;border-radius:20px;font-size:12.5px;line-height:19px;white-space:nowrap}
.badge-gold{background:#fdf7e8;color:var(--gold-dark);border:1px solid #eddfbc}
.badge-plain{background:#f2f6fa;color:var(--muted);border:1px solid var(--line)}
.badge-blue{background:#eaf3fb;color:var(--blue);border:1px solid #cfe3f5}
.badge-ok{background:var(--ok-l);color:var(--ok);border:1px solid #cfe9db}
.badge-red{background:var(--red-l);color:var(--red);border:1px solid #f0cfcd}
.badge-warn{background:var(--warn-l);color:var(--warn);border:1px solid #f5e2bf}

/* ---------------- 登录 ---------------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:linear-gradient(160deg,#0c3a68 0%,#12518f 46%,#1a6fb5 100%)}
.login-card{width:100%;max-width:390px;background:#fff;border-radius:14px;
  padding:32px 30px 24px;box-shadow:0 18px 48px rgba(6,30,58,.32)}
.lg-brand{display:flex;align-items:center;gap:12px;margin-bottom:26px}
.lg-brand img{height:52px;width:auto}
.lg-brand h1{font-size:17px;color:var(--navy);line-height:1.35;letter-spacing:.5px}
.lg-brand p{font-size:13px;color:var(--muted);margin-top:2px}
.lg-field{display:block;margin-bottom:14px}
.lg-field span{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.lg-field input{width:100%;height:40px;padding:0 12px;border:1px solid var(--line);border-radius:8px;outline:none}
.lg-field input:focus{border-color:var(--blue-light);box-shadow:0 0 0 3px rgba(26,111,181,.12)}
.lg-remember{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);margin:4px 0 18px}
.lg-submit{width:100%;height:44px;font-size:16px;letter-spacing:4px;border-radius:9px}
.lg-msg{min-height:20px;color:var(--red);font-size:13px;margin-top:10px;text-align:center}
.lg-tip{margin-top:6px;padding-top:12px;border-top:1px dashed var(--line);color:#94a3b8;font-size:12px;line-height:1.7}

/* ---------------- 顶栏 ---------------- */
.topbar{position:fixed;top:0;left:0;right:0;height:var(--top-h);z-index:60;
  display:flex;align-items:center;gap:10px;padding:0 14px;
  background:var(--navy);color:#fff;box-shadow:0 2px 8px rgba(6,30,58,.18)}
.tb-menu{display:none;width:34px;height:34px;border:0;border-radius:8px;background:rgba(255,255,255,.12);cursor:pointer;
  flex-direction:column;align-items:center;justify-content:center;gap:4px}
.tb-menu span{display:block;width:17px;height:2px;background:#fff;border-radius:2px}
.tb-brand{display:flex;align-items:center;gap:9px;min-width:0}
.tb-brand img{height:30px;width:auto}
.tb-name{font-size:15.5px;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:14px}
.tb-link{font-size:13px;color:rgba(255,255,255,.82);padding:5px 10px;border-radius:8px;background:rgba(255,255,255,.1)}
.tb-link:hover{background:rgba(255,255,255,.2);color:#fff}
.tb-user{position:relative;display:flex;align-items:center;gap:8px;cursor:pointer;padding:5px 8px;border-radius:8px}
.tb-user:hover{background:rgba(255,255,255,.12)}
.tb-avatar{width:26px;height:26px;border-radius:50%;background:var(--gold);color:#4a3306;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.tb-uname{font-size:13.5px}
.tb-caret{font-size:10px;opacity:.75}
.tb-menu-pop{position:absolute;top:42px;right:0;min-width:150px;background:#fff;color:var(--text);
  border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(6,30,58,.16);overflow:hidden;padding:5px}
.tb-menu-pop a{display:block;padding:8px 12px;border-radius:7px;font-size:13.5px}
.tb-menu-pop a:hover{background:#f2f6fa;color:var(--blue)}

/* ---------------- 布局 ---------------- */
.layout{display:flex;padding-top:var(--top-h);min-height:100vh}
.side{position:fixed;top:var(--top-h);bottom:0;left:0;width:var(--side-w);background:#fff;
  border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:50}
.side-nav{flex:1;overflow-y:auto;padding:10px 8px}
.side-nav .g{font-size:12px;color:#9aa9bb;padding:12px 12px 5px;letter-spacing:.5px}
.side-nav a{display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:8px;
  color:#3d5063;font-size:14px;margin-bottom:2px;transition:.15s}
.side-nav a:hover{background:#f2f6fa;color:var(--blue)}
.side-nav a.on{background:#eaf3fb;color:var(--blue);font-weight:600}
.side-nav a .ic{width:18px;text-align:center;font-size:15px;flex-shrink:0}
.side-nav a .cnt{margin-left:auto;font-size:12px;color:#9aa9bb}
.side-foot{padding:12px 14px;border-top:1px solid var(--line);color:#9aa9bb;font-size:12px;line-height:1.7}
.side-foot-t{color:var(--muted);font-weight:600;margin-bottom:3px}
.side-foot a{color:var(--blue)}
.side-mask{position:fixed;inset:var(--top-h) 0 0 0;background:rgba(12,58,104,.4);z-index:45}
.content{margin-left:var(--side-w);flex:1;min-width:0;padding:18px 20px 40px}

/* ---------------- 页头 / 卡片 ---------------- */
.page-head{display:flex;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.page-head h2{font-size:19px;color:var(--navy);letter-spacing:.5px}
.page-head .sub{color:var(--muted);font-size:13px;margin-top:3px}
.page-head .acts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px}
.card-h{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.card-h h3{font-size:15px;color:var(--navy)}
.card-h .acts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.card-b{padding:16px}
.card-b.p0{padding:0}

/* 筛选栏 */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;padding:14px 16px;border-bottom:1px solid var(--line);background:#fafcfe}
.filters .f{display:flex;flex-direction:column;gap:5px}
.filters .f>span{font-size:12.5px;color:var(--muted)}
.filters .f .inp,.filters .f .sel{width:auto;min-width:132px;height:33px}
.filters .f .inp.wide{min-width:200px}
.filters .f.btns{flex-direction:row;gap:8px}

/* ---------------- 表格 ---------------- */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;min-width:640px}
table.tbl th,table.tbl td{padding:11px 12px;text-align:left;vertical-align:middle;border-bottom:1px solid var(--line)}
table.tbl th{background:#f7fafd;color:#48607a;font-weight:600;font-size:13px;white-space:nowrap;position:sticky;top:0;z-index:2}
table.tbl tbody tr:hover{background:#fafcff}
table.tbl td{font-size:13.5px}
table.tbl td.n{color:#9aa9bb;width:52px}
table.tbl td.t-title{font-weight:600;color:#22384f;min-width:220px;max-width:520px}
table.tbl td.t-title a:hover{color:var(--blue);text-decoration:underline}
table.tbl .cell-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--muted);max-width:420px}
table.tbl .rowacts{display:flex;gap:2px;flex-wrap:wrap;white-space:nowrap}
.tbl-empty{padding:46px 10px;text-align:center;color:#94a3b8}
.tbl-empty .big{font-size:26px;margin-bottom:6px}
.logo-thumb{height:38px;width:64px;object-fit:contain;border:1px solid var(--line);border-radius:6px;background:#fff}
.logo-none{color:#b6c2d0;font-size:12.5px}
.link-out{color:var(--blue);font-size:12.5px;word-break:break-all}
.link-out:hover{text-decoration:underline}

/* 分页 */
.pager{display:flex;align-items:center;gap:6px;padding:12px 16px;flex-wrap:wrap}
.pager .info{color:var(--muted);font-size:13px;margin-right:auto}
.pager button{min-width:32px;height:32px;padding:0 8px;border:1px solid var(--line);background:#fff;
  border-radius:7px;cursor:pointer;color:#3d5063}
.pager button:hover:not(:disabled){border-color:#bcd3e8;color:var(--blue)}
.pager button.on{background:var(--blue);border-color:var(--blue);color:#fff}
.pager button:disabled{opacity:.45;cursor:not-allowed}
.pager select{height:32px;border:1px solid var(--line);border-radius:7px;padding:0 6px;background:#fff}

/* ---------------- 表单 ---------------- */
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px}
.form-grid .full{grid-column:1/-1}
.fg label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.hint{color:#94a3b8;font-size:12px;margin-top:5px}

/* ---------------- 富文本编辑器（Word 风格） ----------------
   结构：.ed = 功能区(顶部常驻) + .ed-scroll(灰底滚动区) + 白纸 .ed-page + 状态栏 */
.ed{display:flex;flex-direction:column;background:#e9eef4;position:relative}
.ed-ribbon{display:flex;align-items:stretch;gap:0;background:#fff;border-bottom:1px solid var(--line);
  padding:5px 6px 6px;overflow-x:auto;overflow-y:hidden}
.ed-grp{display:flex;flex-direction:column;padding:0 7px;border-right:1px solid #edf2f7;flex:0 0 auto}
.ed-grp:last-child{border-right:0}
.ed-gl{font-size:10.5px;color:#a3b1c0;letter-spacing:.6px;padding:0 2px 3px;white-space:nowrap}
.ed-gb{display:flex;align-items:center;gap:2px;flex:1}
.ed-gb button{min-width:30px;height:30px;padding:0 7px;border:1px solid transparent;background:transparent;
  border-radius:6px;cursor:pointer;color:#3d5063;font-size:13.5px;white-space:nowrap}
.ed-gb button:hover{background:#e9f1f9;color:var(--blue)}
.ed-gb button.on{background:#dcebf9;color:var(--blue);border-color:#c3dcf2}
.ed-gb button .mono{font-family:Consolas,monospace;font-size:12.5px}
.ed-sel{height:30px;border:1px solid #dbe5ee;border-radius:6px;background:#fff;color:#3d5063;
  font-size:12.5px;padding:0 4px;cursor:pointer;max-width:132px}
.ed-sel:hover{border-color:#bcd3e8}
.ed-color{position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;border-radius:6px;cursor:pointer;overflow:hidden}
.ed-color span{font-size:13px;font-weight:700;color:#b5342f;border-bottom:3px solid #b5342f;line-height:1.2}
.ed-color.hl span{color:#8a7b3a;border-bottom:3px solid #ffe08a}
.ed-color:hover{background:#e9f1f9}
.ed-color input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;border:0;padding:0}
.ed-scroll{position:relative;flex:1;display:flex;flex-direction:column;overflow:auto;padding:16px;
  min-height:560px;max-height:min(78vh,1100px)}
.ed-page{flex:1 0 auto;width:100%;background:#fff;max-width:860px;min-height:520px;margin:0 auto;
  padding:38px 46px 64px;outline:none;border-radius:2px;
  box-shadow:0 1px 3px rgba(16,42,67,.09),0 10px 26px rgba(16,42,67,.07);
  font-size:16px;line-height:1.85;color:#1f2d3d;word-break:break-word;overflow-wrap:break-word}
.ed-page:empty::before{content:attr(data-ph);color:#b6c2d0}
.ed-page img{max-width:100%;height:auto;margin:8px 0;border-radius:2px;cursor:pointer}
.ed-page video{max-width:100%;height:auto;margin:10px 0;border-radius:4px;background:#0b1622;
  display:block;outline:none;cursor:pointer}
.ed-page video.ed-media-on,.ed-page img.ed-media-on{outline:2px solid var(--blue);outline-offset:3px}
.ed-page p[data-vph] .ed-up,.ed-page p[data-ph] .ed-up{display:block}
.ed-page p{margin:0 0 12px}
.ed-page h1,.ed-page h2,.ed-page h3,.ed-page h4{margin:18px 0 10px;color:var(--navy);line-height:1.45;font-weight:700}
.ed-page h2{font-size:21px}
.ed-page h3{font-size:18.5px}
.ed-page h4{font-size:17px}
.ed-page blockquote{border-left:3px solid #dfe8f1;background:#f8fbfe;padding:8px 14px;color:#46586c;margin:12px 0}
.ed-page table{border-collapse:collapse;width:100%;margin:10px 0}
.ed-page td,.ed-page th{border:1px solid #dbe5ee;padding:6px 9px}
.ed-page a{color:var(--blue);text-decoration:underline}
.ed-page ul,.ed-page ol{padding-left:26px;margin:0 0 12px}
.ed-page ul{list-style:disc}
.ed-page ol{list-style:decimal}
.ed-page hr{border:0;border-top:1px solid #e3ebf3;margin:18px 0}
.ed-up{display:inline-block;padding:9px 16px;background:#f1f5f9;color:#7b8ea3;border-radius:8px;font-size:13.5px}
.ed-imgbar{position:absolute;display:flex;align-items:center;gap:2px;background:#0c3a68;color:#fff;
  border-radius:9px;padding:4px 6px;box-shadow:0 8px 20px rgba(12,58,104,.3);z-index:30}
.ed-imgbar button{min-width:26px;height:26px;border:0;background:transparent;color:#fff;border-radius:5px;
  cursor:pointer;font-size:12.5px;padding:0 6px}
.ed-imgbar button:hover{background:rgba(255,255,255,.2)}
.ed-imgbar .w{color:#ffd98a;padding:0 5px;font-size:12.5px;white-space:nowrap}
.ed-foot{display:flex;align-items:center;gap:10px;padding:7px 14px;border-top:1px solid var(--line);
  background:#fff;color:#94a3b8;font-size:12.5px;flex-wrap:wrap}
.ed-foot .grow{margin-left:auto;display:flex;gap:8px;align-items:center}
/* 编辑器内的进度提示（微信图片转存等） */
.ed-msg{position:absolute;right:16px;bottom:56px;z-index:60;max-width:72%;
  background:rgba(18,81,143,.95);color:#fff;font-size:13px;line-height:1.5;
  padding:8px 14px;border-radius:8px;box-shadow:0 8px 22px rgba(16,42,67,.24)}
.ed.ta-mode .ed-page{display:none}
.ed-src{display:none;width:100%;min-height:560px;padding:16px;border:0;outline:none;
  font-family:Consolas,monospace;font-size:13px;line-height:1.7;resize:vertical}
.ed.ta-mode .ed-src{display:block}
.ed.full{position:fixed;inset:0;z-index:200;border-radius:0}
.ed.full .ed-ribbon{border-radius:0}
.ed.full .ed-scroll{max-height:none}
.card-flush{overflow:hidden}

/* 上传 */
.up-box{border:1px dashed #cddbe9;border-radius:10px;padding:14px;background:#fafcff;text-align:center}
.up-box .up-tip{color:var(--muted);font-size:13px}
.up-box .up-tip b{color:var(--blue)}
.up-preview{margin-top:10px;display:flex;align-items:center;gap:10px;justify-content:center;flex-wrap:wrap}
.up-preview img{height:64px;border:1px solid var(--line);border-radius:8px;background:#fff}

/* ---------------- 概览 ---------------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:16px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}
.stat .lb{color:var(--muted);font-size:13px}
.stat .vl{font-size:27px;font-weight:700;color:var(--navy);line-height:1.35;letter-spacing:.5px}
.stat .vl small{font-size:13px;font-weight:400;color:var(--muted);margin-left:4px}
.stat .ex{font-size:12.5px;color:#94a3b8;margin-top:5px}
.stat.accent .vl{color:var(--gold-dark)}
.bars{display:flex;flex-direction:column;gap:9px}
.bar-row{display:flex;align-items:center;gap:10px;font-size:13.5px}
.bar-row .nm{width:98px;color:#46586c;flex-shrink:0;text-align:right}
.bar-row .bar{flex:1;height:16px;background:#eef3f8;border-radius:8px;overflow:hidden}
.bar-row .bar i{display:block;height:100%;background:linear-gradient(90deg,#1a6fb5,#12518f);border-radius:8px}
.bar-row.gold .bar i{background:linear-gradient(90deg,#dfb96f,#c9a253)}
.bar-row .num{width:56px;color:var(--muted);font-size:12.5px;flex-shrink:0}
.quick-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.qc{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--line);border-radius:10px;background:#fff;transition:.15s}
.qc:hover{border-color:#bcd3e8;box-shadow:0 6px 18px rgba(18,81,143,.1);transform:translateY(-1px)}
.qc .qi{width:40px;height:40px;border-radius:10px;background:#eaf3fb;color:var(--blue);
  display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0}
.qc .qt b{display:block;font-size:14.5px;color:#22384f}
.qc .qt span{font-size:12.5px;color:var(--muted)}
.mini-list li{display:flex;gap:10px;align-items:baseline;padding:9px 0;border-bottom:1px dashed var(--line)}
.mini-list li:last-child{border-bottom:0}
.mini-list .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini-list .d{color:#94a3b8;font-size:12.5px;flex-shrink:0}

/* ---------------- 弹窗 / 提示 ---------------- */
.modal-host{position:fixed;inset:0;z-index:300;pointer-events:none}
.modal-mask{position:absolute;inset:0;background:rgba(12,58,104,.45);display:flex;align-items:flex-start;
  justify-content:center;padding:40px 16px;overflow-y:auto;pointer-events:auto}
.modal{background:#fff;border-radius:12px;box-shadow:0 24px 60px rgba(6,30,58,.28);width:100%;max-width:560px;
  animation:pop .16s ease-out}
.modal.wide{max-width:780px}
.modal-h{display:flex;align-items:center;padding:15px 18px;border-bottom:1px solid var(--line)}
.modal-h h3{font-size:16px;color:var(--navy)}
.modal-x{margin-left:auto;border:0;background:transparent;font-size:20px;line-height:1;color:#9aa9bb;cursor:pointer}
.modal-x:hover{color:var(--red)}
.modal-b{padding:18px}
.modal-f{display:flex;gap:10px;justify-content:flex-end;padding:13px 18px;border-top:1px solid var(--line);background:#fafcfe;border-radius:0 0 12px 12px}
@keyframes pop{from{opacity:0;transform:translateY(-10px) scale(.98)}to{opacity:1;transform:none}}
.msg-box{max-width:420px;margin-top:14vh;text-align:center}
.msg-box .mico{font-size:32px;margin-bottom:8px}
.msg-box p{color:#46586c;margin-bottom:16px;white-space:pre-wrap;text-align:left}

.toast-host{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:400;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);border-radius:9px;
  padding:10px 18px;box-shadow:0 10px 28px rgba(6,30,58,.16);font-size:14px;animation:tin .18s ease-out;max-width:88vw}
.toast.ok{border-left-color:var(--ok)}
.toast.err{border-left-color:var(--red)}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

.loading-mask{position:fixed;inset:0;z-index:500;background:rgba(242,246,250,.62);display:flex;align-items:center;justify-content:center;pointer-events:auto}
.loading-box{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:13px 20px;box-shadow:var(--shadow);color:var(--muted)}
.loading-box i{width:16px;height:16px;border:2px solid #d6e3f0;border-top-color:var(--blue);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* 提示条 */
.note{display:flex;gap:9px;padding:11px 14px;border-radius:9px;font-size:13.5px;line-height:1.7;margin-bottom:14px}
.note.info{background:#eef6fd;border:1px solid #d4e7f8;color:#255b8c}
.note.warn{background:var(--warn-l);border:1px solid #f3e0bb;color:#8a5a06}
.note.err{background:var(--red-l);border:1px solid #f0cfcd;color:#8f2a26}
.note .ni{flex-shrink:0}

/* 草稿恢复条 */
.draft-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:9px;
  background:#fffdf4;border:1px solid #f0e2bd;color:#8a6a12;font-size:13.5px;margin-bottom:12px}
.draft-bar .acts{margin-left:auto;display:flex;gap:8px}

/* ---------------- 首页照片管理 ---------------- */
.hs-tip{font-size:13px;color:#7b8ea3;padding:0 16px 14px;min-height:0}
.hs-tip.warn{color:#8a5a06}
.hs-tip.err{color:#b5342f}
.hs-tip.ok{color:#1c7c4a}
.hs-row{display:flex;align-items:flex-start;gap:12px;padding:12px;border:1px solid var(--line);
  border-radius:10px;background:#fff;margin-bottom:10px}
.hs-row:last-child{margin-bottom:0}
.hs-idx{flex:0 0 22px;height:22px;line-height:22px;text-align:center;border-radius:50%;
  background:#eef4fa;color:#5c7086;font-size:12.5px;margin-top:26px}
.hs-thumb{flex:0 0 168px;height:95px;border-radius:8px;overflow:hidden;background:#eef2f7;
  display:flex;align-items:center;justify-content:center;margin-top:6px}
.hs-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.hs-fields{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.hs-f{display:flex;flex-direction:column;gap:4px}
.hs-f>span{font-size:12.5px;color:#7b8ea3}
.hs-link{display:flex;gap:8px}
.hs-link .inp{flex:1;min-width:0}
.inp.bad{border-color:#e0a5a1;background:#fff7f6}
.hs-ops{flex:0 0 auto;display:flex;flex-direction:column;gap:6px}
.hs-ops .btn{width:76px}
.btn.on-dirty{box-shadow:0 0 0 3px rgba(201,162,83,.28)}
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:10px;
  max-height:52vh;overflow:auto;padding:4px}
.lib-item{position:relative;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff;
  padding:0;cursor:pointer;aspect-ratio:16/10}
.lib-item img{width:100%;height:100%;object-fit:cover;display:block}
.lib-item span{position:absolute;right:4px;bottom:4px;background:rgba(12,58,104,.78);color:#fff;
  font-size:11px;padding:1px 5px;border-radius:4px}
.lib-item:hover{border-color:var(--blue);box-shadow:0 4px 14px rgba(18,81,143,.18)}
.art-list{max-height:56vh;overflow:auto;border:1px solid var(--line);border-radius:9px}
.art-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 12px;
  border:0;border-bottom:1px solid #f1f5f9;background:#fff;cursor:pointer;font-size:13.5px;color:#25384a}
.art-item:last-child{border-bottom:0}
.art-item:hover{background:#f4f9fe}
.art-item .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.art-item .d{color:#94a3b8;font-size:12.5px;flex:0 0 auto}

/* ---------------- 移动端 ---------------- */
@media (max-width:900px){
  :root{--side-w:0px}
  .tb-menu{display:flex}
  .tb-name{font-size:14px}
  .tb-link{display:none}
  .side{transform:translateX(-100%);transition:transform .2s;width:230px;box-shadow:6px 0 24px rgba(6,30,58,.18)}
  body.side-open .side{transform:none}
  .content{margin-left:0;padding:14px 12px 40px}
  .form-grid{grid-template-columns:1fr}
  .filters{padding:12px}
  .filters .f{flex:1 1 calc(50% - 10px)}
  .filters .f .inp,.filters .f .sel{width:100%;min-width:0}
  .filters .f .inp.wide{min-width:0}
  .filters .f.btns{flex:1 1 100%}
  .filters .f.btns .btn{flex:1}
  .ed-gl{display:none}
  .ed-grp{padding:0 4px}
  .ed-scroll{padding:8px;min-height:420px;max-height:none}
  .ed-page{padding:16px 14px 40px;border-radius:0;font-size:15.5px;min-height:400px}
  .ed-ribbon{padding:5px 4px}
  table.tbl th,table.tbl td{padding:9px 9px}
  .page-head .acts{width:100%}
  .page-head .acts .btn{flex:1}
  .modal-mask{padding:14px 10px}
  /* 首页照片：窄屏改为纵向卡片 */
  .hs-row{flex-wrap:wrap}
  .hs-idx{display:none}
  .hs-thumb{flex:1 1 100%;height:170px;margin-top:0}
  .hs-fields{flex:1 1 100%}
  .hs-link{flex-wrap:wrap}
  .hs-ops{flex-direction:row;flex-wrap:wrap;width:100%}
  .hs-ops .btn{width:auto;flex:1}
}
