/* 用错方式打开（file:// 等 origin 不固定）的提示条 */
.origin-tip{position:fixed;top:0;left:0;right:0;z-index:300;display:flex;align-items:center;gap:10px;
  background:var(--tint);color:var(--text);border-bottom:1px solid var(--line);
  padding:8px 12px;font-size:12px;line-height:1.4;box-shadow:0 2px 8px rgba(0,0,0,.08);}
.origin-txt{flex:1;}
.origin-tip b{color:var(--brand-deep);}
.origin-btn{flex:none;border:none;background:var(--brand);color:#fff;border-radius:10px;padding:6px 12px;font-size:12px;cursor:pointer;white-space:nowrap;transition:background .15s ease;}
.origin-btn:hover{background:var(--brand-deep);}
.origin-x{flex:none;border:none;background:transparent;color:var(--muted);font-size:18px;line-height:1;cursor:pointer;padding:0 4px;}

/* 配色取自《莫兰蒂色卡（网站设计用）》v45：主色·暖橙 / 辅助·鼠尾草绿 已对调 */
:root{
  /* 活力系列：主色·鲜亮暖橙 / 辅助·鼠尾草绿 / 强调·蓝紫 / 大面积·米杏 */
  --brand:#ECA53C;        /* 主色：鲜亮活力橙（温暖、跳、有生命力） */
  --brand-deep:#D98B22;   /* 主色深：仅用于按下态/白字可读处，不再做大面积渐变底 */
  --brand-soft:#F6CE86;   /* 浅主色：点缀条渐变右端（亮到更亮，不加深） */
  --accent:#A6B3A8;       /* 辅助色：鼠尾草绿（清新柔和·轻提示） */
  --accent-deep:#7E8F82;  /* 辅助色深：绿字/可读 */
  --highlight:#6F7FA3;    /* 强调色：蓝紫（专业冷静·层次感） */
  --gold:#ECA53C;         /* 暖金：常用热卖条（同主色橙） */
  --bg:#EFEBE3;           /* 大面积底：米杏 */
  --card:#FDFCF9;         /* 卡片：暖白 */
  --line:#DDD8CC;         /* 分隔线：暖灰米 */
  --text:#3F4A4A;         /* 正文：中性深灰 */
  --muted:#8A938E;        /* 次要文字：灰绿 */
  --ok:#7E8F82;           /* 完成：辅助绿 */
  --doing:var(--brand);  /* 进行中：暖橙（主色·鲜亮） */
  --todo:#D6D2C8;         /* 未开始：浅米灰 */
  --danger:#BC6B5A;       /* 危险/删除：砖陶红 */
  --tint:#F6EBD8;         /* 主色浅底：选中/标签 */
  --warm-dark:#3F4A4A;    /* 顶栏/深底：中性深灰 */
  /* 方案 D：活力暖色渐变 + 薄荷绿点缀 */
  --grad:linear-gradient(135deg,#FFC07A 0%,#FF9B7E 46%,#FF7A9C 100%);
  --grad-soft:linear-gradient(135deg,#FFD8B0 0%,#FFB3C1 100%);
  --mint:#5FD3C0;
  --mint-soft:#E7F8F4;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;padding:0;color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:15px;line-height:1.5;min-height:100vh;
  /* 方案D整面渐变柔光底：橙→珊瑚粉 + 薄荷绿/暖桃/白光三层径向柔光，fixed 不随滚动错位 */
  background:
    radial-gradient(60vw 60vw at 84% 6%, rgba(95,211,192,.40), transparent 60%),
    radial-gradient(55vw 55vw at 4% 94%, rgba(255,196,150,.46), transparent 62%),
    radial-gradient(48vw 48vw at 50% -14%, rgba(255,255,255,.55), transparent 60%),
    var(--grad);
  background-attachment:fixed;}
button{font-family:inherit;cursor:pointer;border:none;background:none;}

/* topbar —— 加高 Hero：纯主色底，活力鲜亮 */
.topbar{position:relative;z-index:20;color:var(--text);}
.topbar-hero{
  background:var(--grad);
  box-shadow:0 2px 16px rgba(255,140,120,.30);
  overflow:hidden;position:relative;
}
.topbar-hero::before{content:"";position:absolute;width:420px;height:420px;border-radius:50%;
  right:-120px;top:-160px;background:radial-gradient(circle,rgba(95,211,192,.5),transparent 70%);filter:blur(18px);pointer-events:none;}
.topbar-hero::after{content:"";position:absolute;width:360px;height:360px;border-radius:50%;
  left:-140px;bottom:-180px;background:radial-gradient(circle,rgba(255,255,255,.42),transparent 70%);filter:blur(18px);pointer-events:none;}
.topbar-inner{max-width:1280px;margin:0 auto;display:flex;align-items:center;
  justify-content:space-between;padding:30px 20px 24px;gap:12px;position:relative;z-index:2;}
.hero-left{display:flex;align-items:center;min-width:0;gap:14px;}
.hero-logo{width:46px;height:46px;border-radius:50%;border:2px solid #fff;
  box-shadow:0 3px 10px rgba(30,90,95,.28);flex:none;display:block;}
.hero-title-wrap{min-width:0;}
.topbar-title{font-size:38px;font-weight:800;letter-spacing:4px;line-height:1.15;white-space:nowrap;
  color:#fff;text-shadow:0 2px 10px rgba(124,72,8,.45);}
.topbar-sub{display:block;font-size:22px;color:rgba(255,255,255,.95);margin-top:3px;font-weight:600;
  letter-spacing:2px;text-shadow:0 1px 3px rgba(124,72,8,.34);}
.hero-right{display:flex;align-items:center;gap:10px;flex:none;}
.admin-entry{font-size:12px;color:var(--text);border:1px solid rgba(63,74,74,.22);
  border-radius:15px;padding:4px 11px;position:relative;background:rgba(255,255,255,.5);
  display:inline-flex;align-items:center;gap:5px;cursor:pointer;}
.admin-entry svg{width:13px;height:13px;color:var(--accent-deep);}
/* 新用户数字角标 */
.admin-entry.has-dot::after{content:attr(data-count);position:absolute;top:-7px;right:-7px;
  min-width:17px;height:17px;line-height:17px;padding:0 4px;border-radius:9px;
  background:#E6483A;color:#fff;font-size:10px;font-weight:700;text-align:center;
  box-shadow:0 0 0 2px var(--brand);}

/* main */
main#app{max-width:1280px;margin:14px auto 0;padding:20px 22px 30px;min-height:60vh;
  /* 方案D：所有页面内容收进悬浮毛玻璃大面板 */
  background:rgba(255,255,255,.72);
  backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);
  border:1px solid rgba(255,255,255,.6);border-radius:20px;
  box-shadow:0 16px 50px rgba(255,140,120,.20);}

/* home */
.home-hero{background:var(--grad);
  color:#fff;border-radius:14px;padding:18px 16px;margin-bottom:14px;}
.home-hero h1{margin:0 0 4px;font-size:19px;color:#fff;}
.home-hero p{margin:0;font-size:13px;color:rgba(255,255,255,.92);}
.stat-row{display:flex;gap:10px;margin:14px 0;}
.stat{flex:1;background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.7);border-radius:12px;
  padding:12px 8px;text-align:center;}
.stat b{display:block;font-size:22px;color:var(--brand);line-height:1.1;}
.stat span{font-size:12px;color:var(--muted);}
.section-title{font-size:15px;font-weight:700;margin:18px 2px 10px;
  display:flex;align-items:center;gap:6px;}
.section-title::before{content:"";width:4px;height:15px;background:var(--brand);border-radius:2px;}
.quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.quick{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:14px 12px;font-weight:600;color:var(--text);text-align:left;
  display:flex;flex-direction:column;gap:2px;}
.quick small{font-weight:400;color:var(--muted);font-size:12px;}
.motto{margin-top:16px;font-size:12px;color:var(--muted);text-align:center;line-height:1.7;}

/* toolbar */
.toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center;}
.search{flex:1;min-width:140px;display:flex;align-items:center;background:var(--card);
  border:1px solid var(--line);border-radius:10px;padding:8px 10px;}
.search input{border:none;outline:none;width:100%;font-size:14px;background:transparent;}
.filter-chip{font-size:12px;padding:6px 11px;border-radius:14px;background:var(--card);
  border:1px solid var(--line);color:var(--muted);white-space:nowrap;}
.filter-chip.on{background:var(--grad);color:#fff;border-color:transparent;}
.filter-select{font-size:12px;padding:7px 11px;border-radius:14px;background:var(--card);
  border:1px solid var(--line);color:var(--text);max-width:220px;}

/* cards */
.grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:11px 11px 12px;display:flex;flex-direction:column;gap:6px;position:relative;}
.card .badge{position:absolute;top:9px;right:9px;font-size:11px;padding:2px 7px;
  border-radius:10px;font-weight:600;}
.badge.first{background:#F6EBD8;color:var(--brand-deep);}
.badge.rare{background:#E4E9E3;color:#6E7F72;}
.badge.teach{background:#E4E9E3;color:var(--accent-deep);}
.badge.course{background:#E6E9F2;color:var(--highlight);}
.card .nm{font-size:14px;font-weight:600;line-height:1.35;padding-right:54px;}
.card .meta{font-size:12px;color:var(--muted);display:flex;gap:8px;flex-wrap:wrap;}
.card .meta b{color:var(--text);font-weight:600;}
.tag-l2{display:inline-block;font-size:11px;color:#6E7F72;
  background:#E4E9E3;border-radius:8px;padding:2px 8px;}
.card .acts{display:flex;gap:7px;margin-top:2px;}
.btn-mini{display:inline-flex;align-items:center;justify-content:center;gap:5px;flex:1;font-size:13px;font-weight:600;
  padding:7px 14px;border-radius:var(--radius-btn);border:1px solid var(--line);background:#fff;color:var(--text);
  transition:background .15s ease,transform .12s ease,border-color .15s ease;}
.btn-mini:hover{background:var(--bg);}
.btn-mini:active{transform:translateY(1px);}
/* 紧凑小按钮：不占整行，靠右对齐 */
.btn-mini.compact{flex:none;width:auto;font-size:13px;padding:7px 14px;border-radius:var(--radius-btn);
  border:1px solid var(--brand);color:var(--brand-deep);background:#fff;line-height:1.4;font-weight:600;
  transition:background .15s ease,transform .12s ease;}
.btn-mini.compact:hover{background:var(--tint);}
.btn-mini.compact:active{transform:translateY(1px);}
#edImgUrl{flex:1;min-width:0;border:1px solid var(--line);border-radius:9px;padding:9px 10px;
  font-size:14px;outline:none;background:#fff;}
.btn-mini.apply{border-color:var(--brand);color:var(--brand);}
.btn-mini.promo{background:var(--gold);border-color:var(--gold);color:#3a2c10;font-weight:600;}
.empty{text-align:center;color:var(--muted);padding:40px 0;font-size:14px;}

/* prep */
.prep-group{margin-bottom:18px;}
.prep-card{background:var(--card);border:1px solid var(--line);border-radius:12px;cursor:pointer;transition:box-shadow .15s, transform .15s;padding:14px 16px;margin-bottom:12px;}
.prep-card:hover{box-shadow:0 6px 18px rgba(120,70,30,.14);}
.prep-card .ph{display:flex;align-items:center;gap:8px;}
.prep-card .nm{margin-right:auto;}
.prep-card .nm{font-weight:700;font-size:14px;}
.prep-card .pr{font-size:11px;padding:2px 7px;border-radius:9px;white-space:nowrap;}
.pr.高{background:#E6E9F2;color:var(--highlight);}
.pr.中{background:#F6EBD8;color:var(--brand-deep);}
.prep-card .desc{font-size:12px;color:var(--muted);margin:5px 0 9px;}
.stepper{display:flex;gap:0;align-items:center;}
.step{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative;}
.step::before{content:"";position:absolute;top:8px;left:-50%;width:100%;height:2px;background:var(--line);z-index:0;}
.step:first-child::before{display:none;}
.step .dot{width:16px;height:16px;border-radius:50%;background:var(--todo);z-index:1;border:2px solid #fff;}
.step.done .dot{background:var(--ok);}
.step.doing .dot{background:var(--doing);box-shadow:0 0 0 3px rgba(236,165,60,.30);}
.step .lb{font-size:10px;color:var(--muted);}
.step.done .lb{color:var(--ok);}
.step.doing .lb{color:var(--doing);font-weight:600;}
.cat-hint{font-size:12px;color:var(--muted);margin:4px 2px 8px;}

/* apply */
.form-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;}
.form-card h3{margin:0 0 10px;font-size:15px;}
.field{margin-bottom:11px;}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px;}
.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);
  border-radius:9px;padding:9px 10px;font-size:14px;outline:none;background:#fff;}
.field textarea{resize:vertical;}
.btn-primary{background:var(--grad);color:#fff;border:1px solid transparent;border-radius:var(--radius-btn);padding:11px 18px;font-size:15px;font-weight:600;
  box-shadow:var(--shadow-btn);transition:transform .12s ease,box-shadow .15s ease,filter .15s ease;}
.btn-primary:hover{filter:brightness(1.03);}
.btn-primary:active{transform:translateY(1px);box-shadow:var(--shadow-btn-active);}
.btn-ghost{background:#fff;color:var(--text);border:1px solid var(--line);border-radius:var(--radius-btn);padding:11px 18px;font-size:15px;font-weight:600;
  transition:background .15s ease,transform .12s ease,border-color .15s ease;}
.btn-ghost:hover{background:var(--bg);}
.btn-ghost:active{transform:translateY(1px);}
.app-list{margin-top:16px;}
.app-item{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:9px;font-size:13px;}
.app-item .top{display:flex;justify-content:space-between;gap:8px;}
.app-item .st{font-size:11px;padding:2px 8px;border-radius:9px;}
.st.pending{background:#F6EBD8;color:var(--accent-deep);}
.st.approved{background:#E4E9E3;color:var(--brand-deep);}
.st.rejected{background:#F5E1DC;color:var(--danger);}

/* tabbar —— 悬浮胶囊，高级感 */
.tabbar{position:fixed;left:12px;right:12px;bottom:calc(10px + env(safe-area-inset-bottom));
  z-index:20;display:flex;align-items:center;gap:2px;padding:6px;
  max-width:560px;margin:0 auto;
  background:rgba(255,255,255,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(63,74,74,.10);border-radius:22px;
  box-shadow:0 10px 32px rgba(47,58,58,.18);}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  font-size:11px;color:var(--accent-deep);padding:8px 4px;border-radius:16px;
  transition:background .2s,color .2s,transform .15s;}
.tab .ic{width:24px;height:24px;display:flex;align-items:center;justify-content:center;}
.tab .ic svg{width:22px;height:22px;}
.tab:active{transform:scale(.96);}
.tab.active{color:#fff;font-weight:700;
  background:var(--grad);text-shadow:0 1px 3px rgba(120,70,10,.30);
  box-shadow:0 4px 12px rgba(255,130,140,.40);}

/* modal（居中弹出） */
.modal{position:fixed;inset:0;z-index:80;background:rgba(0,0,0,.45);
  display:flex;align-items:flex-start;justify-content:center;padding:16px;overflow:auto;}
.modal.hidden{display:none;}
/* 关闭前防丢确认弹窗：层级须高于录入弹窗(edit/prep 为 70) */
#dirtyConfirmModal{z-index:130;}
#delConfirmModal{z-index:140;}
/* 关键：滚动交给 .modal 层，卡片本身 overflow:visible，避免原生/自定义下拉浮层被裁剪导致“打不开” */
.modal-card{position:relative;background:#fff;width:100%;max-width:560px;border-radius:16px;
  margin:auto;max-height:none;overflow:visible;padding:16px 16px 20px;}
.modal-x{position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;
  background:rgba(43,39,34,.08);color:var(--muted);font-size:14px;line-height:30px;
  text-align:center;z-index:3;}
.modal-x:active{background:rgba(43,39,34,.18);}
.modal-card.wide{max-width:720px;}
.modal-head{font-size:16px;font-weight:700;margin-bottom:12px;color:var(--brand);text-align:left;}
.modal-body label{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px;}
.modal-body select,.modal-body input,.modal-body textarea{width:100%;border:1px solid var(--line);
  border-radius:9px;padding:9px 10px;font-size:14px;outline:none;}
.modal-foot{display:flex;gap:10px;margin-top:16px;}
.modal-foot button{flex:1;}

/* admin */
.admin-list{margin-top:12px;}
.admin-empty{color:var(--muted);font-size:13px;text-align:center;padding:16px 0;}
.btn-mini.armed{background:var(--danger);border-color:var(--danger);color:#fff;}
.adm-item{background:rgba(255,255,255,.5);border:1px solid var(--line);border-radius:10px;
  padding:10px 11px;margin-bottom:9px;font-size:13px;}
.adm-item .top{font-weight:600;margin-bottom:3px;}
.adm-item .sub{color:var(--muted);font-size:12px;margin-bottom:8px;}
.adm-acts{display:flex;gap:10px;justify-content:flex-end;margin-top:8px;}
.adm-acts button{flex:none;width:auto;padding:6px 14px;border-radius:var(--radius-btn);font-size:13px;font-weight:600;
  border:1px solid var(--line);background:#fff;color:var(--text);cursor:pointer;transition:background .15s ease,transform .12s ease;}
.adm-acts button:active{transform:translateY(1px);}
.adm-acts .adm-ok{background:#E4E9E3;color:var(--brand-deep);border:1px solid #C7D0C8;}
.adm-acts .adm-no{background:#fff;color:var(--muted);border:1px solid var(--line);}
/* 超级管理员行：不可被他人修改，仅本人可转移 */
.adm-item.is-super{background:linear-gradient(90deg,rgba(255,179,107,.14),rgba(255,179,107,.04));
  border-left:3px solid #CD9A52;}
.adm-tag-super{font-size:11px;font-weight:700;color:#8A5A1B;background:rgba(255,179,107,.28);
  border:1px solid rgba(205,154,82,.5);border-radius:10px;padding:2px 8px;white-space:nowrap;}
.adm-locked{font-size:11px;color:var(--muted);white-space:nowrap;}
.adm-acts .adm-transfer{font-size:11px;font-weight:600;color:#8A5A1B;background:rgba(255,255,255,.7);
  border:1px solid rgba(205,154,82,.55);border-radius:10px;padding:2px 10px;cursor:pointer;white-space:nowrap;}
.adm-acts .adm-transfer:hover{background:#CD9A52;color:#fff;}
.adm-tip.warn{color:#8A5A1B;background:rgba(255,179,107,.16);border:1px solid rgba(205,154,82,.35);}
#transferTarget{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  font-size:14px;background:rgba(255,255,255,.9);color:var(--text);margin-top:4px;}

/* toast */
.toast{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:250;
  background:rgba(43,39,34,.92);color:#fff;padding:11px 18px;border-radius:10px;
  font-size:14px;max-width:80%;text-align:center;}
.toast.hidden{display:none;}

/* 全局加载中 */
#loading{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:rgba(43,39,34,.25);}
#loading.hidden{display:none;}
.loading-inner{display:flex;align-items:center;gap:12px;background:rgba(43,39,34,.78);
  padding:16px 22px;border-radius:14px;}
.spinner{width:30px;height:30px;border:3px solid rgba(255,255,255,.45);
  border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;flex:none;}
@keyframes spin{to{transform:rotate(360deg);}}
.loading-label{color:#fff;font-size:14px;}

/* user badge（线性图标风，与底栏 tab 统一） */
.user-badge{font-size:12px;color:var(--text);background:rgba(255,255,255,.5);
  border-radius:15px;padding:4px 11px;cursor:default;}
.user-badge svg{width:14px;height:14px;flex:none;color:var(--accent-deep);}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:50%;border:none;cursor:pointer;color:var(--brand-deep);
  background:rgba(255,255,255,.6);transition:background .15s,transform .12s;
  -webkit-tap-highlight-color:transparent;}
.icon-btn:hover{background:rgba(255,255,255,.92);}
.icon-btn:active{transform:scale(.94);}
.icon-btn svg{width:16px;height:16px;}

/* gate */
.gate{text-align:center;padding:24px 18px;}
.gate-logo{font-size:22px;font-weight:800;color:var(--brand);letter-spacing:3px;}
.gate-sub{font-size:13px;color:var(--muted);margin:6px 0 16px;}
.gate label{display:block;text-align:left;font-size:12px;color:var(--muted);margin:10px 0 4px;}
.gate input{width:100%;border:1px solid var(--line);border-radius:9px;padding:10px 12px;font-size:15px;outline:none;}
.gate .btn-primary{width:100%;margin-top:16px;}
.btn-link{background:none;border:none;color:var(--brand);font-size:13px;margin-top:12px;text-decoration:underline;}
.gate-hint{font-size:11px;color:var(--muted);margin-top:12px;line-height:1.6;}

/* admin sections */
.adm-section{border-top:1px solid var(--line);padding:14px 0;}
.adm-section:first-child{border-top:none;}
.adm-h{font-size:14px;font-weight:700;color:var(--brand);margin-bottom:6px;text-align:left;}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.row input[type=file]{flex:1;font-size:12px;}
.adm-tip{font-size:11px;color:var(--muted);margin-top:6px;line-height:1.6;background:rgba(255,255,255,.5);
  border-radius:8px;padding:7px 9px;}
/* 管理台各二级页列表：不再限定显示区域（取消 max-height/内部滚动），全部内容平铺展示；
   长列表由外层 .adm-content 统一滚动承载 */
.adm-list{margin-top:8px;max-height:none;overflow:visible;}

/* product grid */
.prod-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;}
.pcard{background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.7);border-radius:12px;overflow:hidden;
  display:flex;flex-direction:column;border-top:3px solid var(--line);}
.pcard.first{border-top-color:var(--doing);}
.pcard.rare{border-top-color:#8FA294;}
.pcard.teach{border-top-color:var(--accent);}
.pcard.course{border-top-color:var(--highlight);}
.pimg{height:120px;width:100%;object-fit:cover;background:var(--grad-soft);display:flex;
  align-items:center;justify-content:center;color:var(--muted);font-size:12px;}
.pimg.noimg{background:var(--grad-soft);}
.pinfo{padding:9px 10px 11px;display:flex;flex-direction:column;gap:5px;flex:1;}
.pname{font-size:14px;font-weight:600;line-height:1.35;min-height:2.7em;}
.pmeta{font-size:12px;color:var(--muted);display:flex;gap:8px;flex-wrap:wrap;}
.pmeta .inv{background:#E4E9E3;color:#6E7F72;border-radius:6px;padding:1px 7px;}
.pmeta .stock b{color:var(--text);}
.pl2{font-size:11px;color:#6E7F72;background:#E4E9E3;border-radius:6px;padding:1px 7px;align-self:flex-start;}
.pdesc{margin-top:2px;display:flex;flex-direction:column;gap:2px;}
.desctext{font-size:12.5px;color:var(--text);line-height:1.55;white-space:pre-wrap;word-break:break-word;}
.desctext .placeholder{color:var(--muted);}
.linkbtn{background:none;border:none;color:var(--brand);font-size:12px;padding:4px 0 0;cursor:pointer;text-decoration:none;}
.linkbtn:hover{text-decoration:underline;}
.logtoggle{margin-top:6px;cursor:pointer;font-size:11.5px;color:var(--muted);}
.logtoggle .lab{color:var(--brand);}
.logbody{margin-top:6px;border-left:2px solid var(--line);padding-left:8px;}
.logitem{font-size:11.5px;color:var(--muted);margin-bottom:6px;line-height:1.5;}
.logitem .who{color:var(--text);font-weight:600;}
.logitem .diff{color:var(--muted);font-size:11px;margin-top:2px;white-space:pre-wrap;word-break:break-word;}

/* desc modal */
.desc-for{font-size:13px;color:var(--brand);font-weight:600;margin-bottom:8px;}
#descArea{width:100%;border:1px solid var(--line);border-radius:9px;padding:10px;font-size:14px;outline:none;font-family:inherit;}
.img-preview{margin-top:8px;max-width:100%;max-height:180px;border-radius:8px;border:1px solid var(--line);display:none;}

/* prep modal stages */
.pfld{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px;}
.pfld span{width:48px;color:var(--muted);}
.pfld select{flex:1;border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-size:13px;background:#fff;}
.pfld .csel{flex:1;min-width:0;}
/* 阶段状态：网格排布，5 个阶段一屏可见，不再被顶到折叠区外 */
#pStages{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px 12px;margin-top:6px;}
#pStages .pfld{margin-bottom:0;}
#pStages .pfld span{width:40px;flex:none;}
#pStages .pfld .csel{flex:1;min-width:0;}

/* 自定义下拉（解决 overflow 容器内原生 select 被裁剪的顽疾） */
.csel{position:relative;width:100%;}
.csel-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  border:1px solid var(--line);border-radius:9px;padding:9px 10px;font-size:14px;background:#fff;
  color:var(--text);cursor:pointer;text-align:left;transition:border-color .15s,background .15s;}
.csel-btn:hover{border-color:var(--brand);}
.csel-val{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.csel-caret{width:14px;height:14px;flex:none;color:var(--muted);transition:transform .2s;}
.csel.open .csel-caret{transform:rotate(180deg);}
.csel-pop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:6;background:#fff;
  border:1px solid var(--line);border-radius:11px;box-shadow:0 10px 28px rgba(0,0,0,.16);
  max-height:230px;overflow:auto;padding:5px;display:none;}
.csel.open .csel-pop{display:block;}
.csel-opt{padding:9px 11px;border-radius:8px;font-size:14px;cursor:pointer;display:flex;align-items:center;gap:7px;}
.csel-opt:hover{background:var(--tint);}
.csel-opt.st-todo{color:var(--muted);}
.csel-opt.st-doing{color:var(--brand-deep);font-weight:600;}
.csel-opt.st-done{color:var(--ok);font-weight:600;}
.csel-btn.st-todo{color:var(--muted);}
.csel-btn.st-doing{color:var(--brand-deep);border-color:var(--brand);background:var(--tint);font-weight:600;}
.csel-btn.st-done{color:var(--ok);border-color:var(--ok);background:#EEF3EE;font-weight:600;}
.csel-sm .csel-btn{padding:7px 10px;font-size:13px;}
/* 分组标题（对应原 optgroup） */
.csel-grp{padding:6px 11px 3px;font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.04em;}
/* 智能向上展开：下拉在视口底部时翻转到按钮上方，避免被裁 */
.csel.open-up .csel-pop{top:auto;bottom:calc(100% + 4px);}
@media (max-width:420px){
  .prep-actions{gap:7px;}
  .prep-actions .pbtn{padding:8px 12px;font-size:12.5px;}
  .section-title{flex-wrap:wrap;}
  .prep-actions{margin-left:0;width:100%;justify-content:flex-end;}
}
.pname-err{font-size:12px;color:var(--danger);margin-top:4px;min-height:14px;}
.cat-pfx-hint{font-size:11px;color:var(--muted);margin-top:4px;}

/* home: clickable image + stat + more-jump */
.pimg-wrap{position:relative;cursor:pointer;}
.pimg-wrap .img-edit-hint{position:absolute;left:0;right:0;bottom:0;font-size:11px;color:#fff;background:rgba(43,39,34,.55);
  text-align:center;padding:3px 0;opacity:0;transition:opacity .15s;}
.pimg-wrap:hover .img-edit-hint{opacity:1;}
.stat{cursor:pointer;transition:transform .1s,box-shadow .15s;}
.stat:hover{box-shadow:0 2px 10px rgba(255,140,120,.22);transform:translateY(-1px);}
.stat:active{transform:translateY(0);}
.more-jump{width:100%;margin-top:12px;padding:12px;border:1px dashed var(--brand);border-radius:12px;
  background:#fff;color:var(--brand);font-weight:600;font-size:14px;}
.more-jump:active{background:#E4E9E3;}

/* user badge role dot */
.user-badge{display:flex;align-items:center;gap:5px;}
.user-badge .who-email{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* 首字母头像：圆底显示姓名首个中/英文字，手机端缩成图标也能认出是谁 */
.avatar-ch{width:24px;height:24px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;line-height:1;flex:none;box-shadow:0 1px 3px rgba(74,66,52,.25);}
/* 头像按身份上色：超级管理员=橙、管理员=现绿、浏览=珊瑚红（与角色圆点同色系） */
.avatar-ch.super{background:#F0A23C;}
.avatar-ch.ok{background:#3FB593;}
.avatar-ch.viewer{background:#F0866F;}
.role-dot{width:8px;height:8px;border-radius:50%;display:inline-block;}
.role-dot.ok{background:var(--mint);box-shadow:0 0 0 2px rgba(95,211,192,.3);}
.role-dot.viewer{background:#FFB3A0;box-shadow:0 0 0 2px rgba(255,179,160,.3);}
.role-dot.super{background:#FFB36B;box-shadow:0 0 0 2px rgba(255,179,107,.35);}
.role-txt{font-weight:600;}

/* ===== 登录页（方案 D：渐变柔光 + 居中毛玻璃卡） ===== */
.login-page{position:fixed;inset:0;z-index:100;overflow:hidden;background:var(--grad);
  display:flex;align-items:center;justify-content:center;padding-bottom:84px;}
.login-page.hidden{display:none;}
.login-glow{position:absolute;border-radius:50%;filter:blur(60px);opacity:.55;pointer-events:none;}
.login-glow.g1{width:520px;height:520px;right:-120px;top:-140px;background:var(--mint);}
.login-glow.g2{width:460px;height:460px;left:-130px;bottom:-150px;background:#FFB37A;}
.login-glow.g3{width:300px;height:300px;left:50%;top:-60px;transform:translateX(-50%);background:#FFFFFF;}
.login-glow.g4{width:420px;height:420px;right:-80px;bottom:-120px;background:#FF7A9C;}
.g1{width:620px;height:620px;right:-160px;top:-200px;background:radial-gradient(circle,rgba(95,211,192,.9),rgba(95,211,192,0) 70%);}
.g2{width:560px;height:560px;left:-180px;bottom:-220px;background:radial-gradient(circle,rgba(255,224,160,.9),rgba(255,224,160,0) 70%);}
.g3{width:420px;height:420px;left:40%;top:-140px;background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);opacity:.5;}
.g4{width:380px;height:380px;right:8%;bottom:-160px;background:radial-gradient(circle,rgba(255,122,156,.6),rgba(255,122,156,0) 70%);}
.login-card{position:relative;z-index:3;width:min(90vw,420px);background:rgba(255,255,255,.92);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  border:1px solid rgba(255,255,255,.6);border-radius:30px;padding:30px 38px 26px;
  box-shadow:0 30px 70px rgba(180,80,100,.30);text-align:center;}
.login-card .brand{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:22px;}
.login-card .login-logo{width:50px;height:50px;border-radius:50%;border:2px solid #fff;
  box-shadow:0 4px 14px rgba(30,90,95,.28);display:block;}
.login-card .name{font-size:32px;font-weight:800;letter-spacing:3px;color:var(--text);}
.login-card h3{font-size:24px;font-weight:800;letter-spacing:1px;color:var(--text);}
.login-card .sub{font-size:13px;color:var(--muted);margin:4px 0 20px;}
/* 登录表单直接铺在卡片里（不再弹窗） */
.lf-label{display:block;text-align:left;font-size:12px;color:var(--muted);margin:10px 0 4px;}
.login-card input{width:100%;border:1px solid #EBD9CC;border-radius:12px;padding:12px 14px;
  font-size:15px;outline:none;background:rgba(255,255,255,.85);color:var(--text);
  transition:border-color .15s,box-shadow .15s;}
.login-card input:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(255,164,110,.18);}
.login-card .login-msg{font-size:12px;color:#E0664F;margin-top:12px;min-height:16px;text-align:center;}
.login-card .cta-btn{width:100%;padding:14px 30px;border-radius:14px;font-size:16px;font-weight:700;
  letter-spacing:3px;margin-top:12px;transition:transform .12s,box-shadow .15s;display:block;}
.login-card .cta-btn:active{transform:translateY(1px);}
.cta-login{background:var(--grad);color:#fff;box-shadow:0 12px 26px rgba(255,130,140,.32);}
.cta-register{background:#FFF0E9;color:#E0664F;border:1.5px solid #FFD8C6;}
.login-foot{position:absolute;bottom:26px;left:0;right:0;text-align:center;z-index:5;
  color:rgba(255,255,255,.92);font-size:18px;letter-spacing:1px;font-weight:600;}

.login-links{display:flex;justify-content:space-between;margin-top:10px;}
.login-msg{font-size:12px;color:var(--brand);margin-top:10px;min-height:16px;text-align:center;}

/* 登录方式 tab 切换 */
.login-tabs{display:flex;gap:6px;margin:6px 0 4px;background:rgba(255,255,255,.6);
  border:1px solid #EBD9CC;border-radius:12px;padding:4px;}
.login-tab{flex:1;border:none;background:transparent;color:var(--muted);font-size:14px;
  font-weight:600;padding:9px 0;border-radius:9px;cursor:pointer;transition:all .15s;}
.login-tab.active{background:var(--grad);color:#fff;box-shadow:0 6px 14px rgba(255,130,140,.25);}
.login-hint{font-size:11px;color:var(--muted);text-align:center;margin-top:10px;line-height:1.5;}
.login-remember{margin-top:12px;display:flex;flex-direction:column;gap:6px;align-items:flex-start;}
.remember-chk{font-size:12px;color:var(--muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;}
.remember-chk input{width:14px;height:14px;accent-color:#E08A6B;cursor:pointer;}

/* 注册/重置弹窗必须盖在登录页(z-index:100)之上，否则被背景挡住 */
#registerModal, #resetModal{z-index:110;}
/* 编辑/描述弹窗需盖在手机版详情页(mDetail z-index:60)之上，否则手机端点"编辑产品"打开的弹窗被详情页遮住，表现为"无反应" */
#editModal, #descModal{z-index:70;}

.modal-tip{font-size:12px;color:var(--muted);background:#FBF3EA;border:1px solid #F0DFCD;
  border-radius:10px;padding:9px 12px;margin-bottom:12px;line-height:1.6;}

/* 产品详情弹窗 */
.pcard{cursor:pointer;transition:transform .1s,box-shadow .15s;}
.pcard:active{transform:scale(.985);box-shadow:0 2px 10px rgba(43,39,34,.12);}
.dt-imgwrap{height:220px;border-radius:10px;overflow:hidden;
  background:linear-gradient(135deg,#EAE6DD,#DED9CE);
  display:flex;align-items:center;justify-content:center;margin-bottom:8px;}
.dt-imgwrap img{width:100%;height:100%;object-fit:cover;cursor:zoom-in;}
.dt-imgwrap.noimg::after{content:"无图";color:var(--muted);font-size:13px;}
.dt-thumbs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
.dt-thumbs img{width:52px;height:52px;object-fit:cover;border-radius:6px;
  border:2px solid transparent;cursor:pointer;}
.dt-thumbs img.on{border-color:var(--brand);}
.dt-name{font-size:17px;font-weight:700;margin-bottom:6px;padding-right:34px;}
#detailModal .desctext{margin-top:10px;}

/* 桌面端：登录卡片略放大，柔光更舒展 */
@media(min-width:760px){
  .login-card{width:min(92vw,440px);padding:52px 48px 44px;}
  .g1{width:760px;height:760px;} .g2{width:700px;height:700px;}
  .g3{width:520px;height:520px;} .g4{width:480px;height:480px;}
}

/* 手机顶栏：标题独占一行，用户区换行靠右，不与标题挤 */
.ver-box{margin-top:14px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.5);font-size:13px;color:var(--muted);}
.ver-box b{color:var(--brand-deep);font-size:14px;}

@media(max-width:700px){
  .topbar-hero{background:var(--grad);}
  .topbar-inner{flex-wrap:nowrap;align-items:center;padding:10px 12px;gap:8px;}
  .hero-left{width:auto;min-width:0;flex:1 1 auto;}
  .hero-right{width:auto;flex:none;gap:6px;margin-top:0;justify-content:flex-end;}
  .topbar-title{font-size:21px;letter-spacing:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .topbar-sub{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .hero-logo{width:32px;height:32px;}
  /* 手机端顶栏右侧全部图标化：用户名→首字母头像，管理台→网格图标，退出本就是图标，给标题让出空间 */
  /* 三者统一 30px 圆形外圈，外直径一致（头像/管理台/退出） */
  .user-badge,.admin-entry,.icon-btn{
    width:30px;height:30px;border-radius:50%;padding:0;
    display:inline-flex;align-items:center;justify-content:center;
    background:rgba(255,255,255,.55);border:1px solid rgba(63,74,74,.18);
  }
  .user-badge .avatar-ch{width:24px;height:24px;box-shadow:none;}
  .user-badge .who-email,.user-badge .role-txt,.user-badge .role-dot{display:none;}
  .admin-entry svg{width:15px;height:15px;}
  .admin-entry span{display:none;}
}

/* 筹备卡：编辑/删除置于右侧，小号轻量文字，不抢眼 */
.prep-acts{display:flex;flex:none;margin-left:auto;align-items:center;}
.prep-acts .linkbtn{padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:var(--radius-btn);
  font-size:13px;font-weight:600;color:var(--text);cursor:pointer;
  transition:background .15s ease,transform .12s ease;}
.prep-acts .linkbtn:hover{background:var(--bg);}
.prep-edit{color:var(--brand-deep);}
.prep-del{color:var(--danger);}
.prep-acts .linkbtn:active{transform:translateY(1px);}

/* ===== 编辑图标 / 图片计数 ===== */
.pname{display:flex;align-items:flex-start;gap:6px;}
.pname .nm-text{flex:1;min-width:0;min-height:2.7em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.imgcount{position:absolute;top:6px;right:6px;background:rgba(43,39,34,.7);color:#fff;
  font-size:11px;border-radius:10px;padding:1px 7px;z-index:2;}

/* ===== 多图编辑 ===== */
.edimgs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px;}
.edimg{position:relative;width:72px;height:72px;border-radius:8px;overflow:hidden;border:1px solid var(--line);}
.edimg img{width:100%;height:100%;object-fit:cover;}
.edimg-del{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;
  background:rgba(43,39,34,.75);color:#fff;font-size:11px;line-height:18px;text-align:center;}

/* ===== 大图预览 ===== */
.lightbox-inner{position:relative;max-width:92vw;max-height:90vh;display:flex;align-items:center;justify-content:center;}
.lightbox-inner img{max-width:92vw;max-height:86vh;border-radius:10px;background:#fff;}
.lightbox-close{position:absolute;top:-6px;right:-6px;width:32px;height:32px;border-radius:50%;
  background:rgba(43,39,34,.8);color:#fff;font-size:16px;line-height:32px;text-align:center;}

/* ===== 隐藏工具类 ===== */
.hidden{display:none !important;}

/* 响应式网格：全屏多列 */
@media(min-width:900px){ .prod-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));} }
@media(min-width:1200px){ .prod-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));} }

/* ============================================================
   UI 精修层：统一圆角/阴影/间距，提升美观与易用
   ============================================================ */
:root{
  --radius:14px;
  --radius-btn:11px;          /* 统一按钮圆角（矩形按钮） */
  --radius-pill:999px;        /* 胶囊：底栏tab/筛选chip/标签 */
  --shadow-sm:0 1px 3px rgba(46,61,53,.06), 0 1px 2px rgba(46,61,53,.04);
  --shadow-md:0 4px 16px rgba(46,61,53,.08);
  --shadow-lg:0 12px 32px rgba(46,61,53,.14);
  --shadow-btn:0 4px 12px rgba(255,140,120,.30);
  --shadow-btn-active:0 2px 6px rgba(255,140,120,.26);
}
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}
button{outline:none;-webkit-tap-highlight-color:transparent;}
button:focus-visible{outline:2px solid var(--brand);outline-offset:2px;}

/* 顶栏（Hero 样式见上方 base 区，此处不再覆盖背景/内边距） */
.admin-entry{font-weight:600;}

/* 主内容留白 */
main#app{padding:16px 16px 92px;}

/* 统计卡 */
.stat{border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:16px 8px;}

/* 统计卡重新设计：专属色顶饰条 + 米杏渐变卡底 + 暖橙数字 */
.stat{position:relative;overflow:hidden;border-radius:var(--radius);padding:18px 8px 14px;
  background:linear-gradient(180deg,#FDFCF9 0%,#EFEBE2 100%);
  border:1px solid rgba(63,74,74,.12);
  box-shadow:0 3px 14px rgba(63,74,74,.09);}
.stat::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--grad);}
.stat[data-batch="first"]::before{background:linear-gradient(90deg,var(--brand),var(--brand-soft));}
.stat[data-batch="rare"]::before{background:linear-gradient(90deg,#8FA294,#B7C2B8);}
.stat[data-jump="prep"]::before{background:linear-gradient(90deg,var(--brand),var(--brand-soft));}
.stat b{color:var(--brand);font-size:26px;font-weight:800;position:relative;}
.stat span{color:var(--text);font-weight:500;position:relative;}
.stat:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(63,74,74,.13);}

/* 区块标题 */
.section-title{font-size:16px;font-weight:700;margin:20px 4px 12px;}
.section-title::before{width:4px;height:16px;border-radius:2px;}
/* 标题内按钮（如"新增"）推到最右，标题文字严格居左——三个页面结构一致 */
.section-title > button{margin-left:auto;}
/* 产品库/筹备页：导航标题贴近顶栏，减少上方空白（页面整体上移） */
.section-title.page-head{margin-top:0;}
/* 筹备行删除按钮：二次确认统一走 #delConfirmModal 弹窗（此处仅保留危险色） */

/* 搜索 / 筛选 */
.search{border-radius:24px;padding:9px 14px;box-shadow:var(--shadow-sm);}
.search input{font-size:14px;}
.filter-chip{border-radius:20px;padding:7px 14px;font-weight:500;box-shadow:var(--shadow-sm);}
.filter-chip.on{box-shadow:0 2px 8px rgba(255,140,120,.35);}
.filter-select{border-radius:20px;padding:8px 14px;box-shadow:var(--shadow-sm);}

/* 产品卡 */
.pcard{border-radius:var(--radius);border:none;box-shadow:var(--shadow-sm);overflow:hidden;
  transition:transform .15s,box-shadow .2s;}
.pcard:hover{box-shadow:var(--shadow-md);transform:translateY(-2px);}
.pcard:active{transform:scale(.98);}
.pimg{height:132px;}
.pinfo{padding:10px 12px 12px;gap:6px;}
.pname{font-size:14.5px;}
.pmeta{font-size:12px;}
.desctext{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}

/* 按钮（基础几何/阴影已在 .btn-primary/.btn-ghost/.btn-mini 基础规则统一定义，此处仅保留危险态） */
/* 危险操作按钮：编辑页删除 / 排重；二次确认态变实心红 */
#edDelete{color:var(--danger);border:1px solid var(--danger);background:#fff;}
#edDelete:hover{background:#F9EDEA;}
#edDelete.armed,.btn-mini.armed{background:var(--danger) !important;color:#fff !important;
  border-color:var(--danger) !important;font-weight:700;}

/* 弹窗 */
.modal-card{box-shadow:var(--shadow-lg);border-radius:18px;}
.modal-head{font-size:17px;padding-right:28px;}
.modal-body label{font-weight:500;}

/* 详情弹窗 */
.dt-imgwrap{height:240px;border-radius:12px;}
.dt-name{font-size:18px;}
.dt-thumbs img{border-radius:8px;}

/* 筹备卡 */
.prep-card{border-radius:var(--radius);border:none;box-shadow:var(--shadow-sm);}
.step .dot{width:14px;height:14px;}
.step .lb{font-size:11px;}

/* 空态 */
.empty{padding:48px 0;color:var(--muted);}

/* 底部导航（悬浮胶囊样式见上方 base 区） */

/* 管理台 */
.adm-section{padding:16px 0;}
.adm-h{font-size:15px;}
.adm-item{border-radius:10px;box-shadow:var(--shadow-sm);}

/* ===== 管理台：侧栏导航 + 分面板 ===== */
.adm-full{max-width:1040px;width:96vw;height:88vh;max-height:88vh;display:flex;flex-direction:column;
  overflow:hidden;padding:0;}
.adm-layout{display:flex;flex:1;min-height:0;}
.adm-side{width:212px;flex:none;background:var(--bg);border-radius:18px 0 0 18px;
  padding:14px 10px;display:flex;flex-direction:column;gap:4px;overflow:auto;}
.adm-side-title{font-size:13px;font-weight:700;color:var(--muted);padding:4px 12px 8px;letter-spacing:1px;}
.adm-nav{position:relative;display:flex;align-items:center;gap:10px;text-align:left;font-size:14px;color:var(--text);padding:11px 13px;border-radius:11px;
  background:transparent;transition:background .12s;}
.adm-nav svg{width:18px;height:18px;flex:none;color:var(--muted);transition:color .12s;}
.adm-nav:hover{background:rgba(255,255,255,.6);}
.adm-nav:hover svg{color:var(--text);}
.adm-nav.active{background:var(--tint);color:var(--brand-deep);font-weight:600;box-shadow:inset 3px 0 0 var(--brand);}
.adm-nav.active svg{color:var(--brand-deep);}
.adm-nav-badge{position:absolute;top:7px;right:10px;min-width:16px;height:16px;line-height:16px;padding:0 4px;
  border-radius:8px;background:#E6483A;color:#fff;font-size:10px;font-weight:700;text-align:center;}
.adm-content{flex:1;min-width:0;padding:18px 20px 22px;overflow:auto;position:relative;}
.adm-back{display:none;}
.adm-panel{display:none;}
.adm-panel.active{display:block;animation:fadeIn .18s ease;}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}
.adm-subh{font-size:14px;font-weight:700;margin:6px 0 4px;color:var(--brand-deep);}

/* 分类树 */
.cat-actions{margin:4px 0 2px;}
.cat-tree{display:flex;flex-direction:column;gap:10px;margin-top:8px;}
.cat-l1{background:linear-gradient(135deg,rgba(255,179,107,.14),rgba(255,255,255,.6));
  border:1px solid var(--line);border-radius:13px;padding:9px 11px;}
.cat-children{margin:9px 0 2px 20px;display:flex;flex-direction:column;gap:7px;}
.cat-l2{background:rgba(255,255,255,.62);border:1px solid var(--line);border-radius:10px;padding:7px 10px;}
.cat-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.cat-name-input{flex:1 1 130px;min-width:110px;font-weight:600;font-size:13px;
  padding:6px 9px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--text);}
.cat-name-input:focus{outline:none;border-color:var(--brand);background:var(--tint);}
.cat-pfxwrap{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);flex:none;}
.cat-pfx-input{width:78px;font-size:12px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;
  padding:5px 7px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--brand-deep);}
.cat-pfx-input:focus{outline:none;border-color:var(--brand);background:var(--tint);}
.cat-name{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cat-tag{font-size:10px;color:var(--muted);background:var(--bg);border:1px solid var(--line);
  border-radius:8px;padding:1px 7px;flex:none;}
.cat-acts{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end;}
.mini{display:inline-flex;align-items:center;justify-content:center;font-size:12px;padding:5px 11px;border-radius:var(--radius-btn);border:1px solid var(--line);
  background:#fff;color:var(--text);flex:none;white-space:nowrap;transition:background .15s ease,transform .12s ease;}
.mini:active{transform:translateY(1px);}
.mini:hover{background:var(--bg);}
.cat-cnt{font-size:10px;color:var(--muted);background:var(--bg);border:1px solid var(--line);
  border-radius:8px;padding:1px 7px;flex:none;}
.cat-cnt.has{color:var(--brand-deep);background:var(--tint);border-color:var(--brand);}
.mini.del.locked{opacity:.4;cursor:not-allowed;}
/* 分类删除按钮：二次确认统一走 #delConfirmModal 弹窗，不再有"点两次"armed 态 */

/* 货品编号行（前缀 + 序号，均只读自动出号） */
.inv-row{display:flex;align-items:center;gap:8px;}
.inv-seg{min-width:74px;text-align:center;padding:8px 12px;border-radius:10px;
  background:var(--tint);border:1px dashed var(--brand);color:var(--brand-deep);
  font-weight:700;font-size:14px;letter-spacing:.5px;}
.inv-dash{font-weight:700;color:var(--muted);}
.inv-preview{font-size:12px;color:var(--muted);margin-top:6px;}
.inv-note{font-size:11px;color:var(--muted);margin-top:3px;}
.inv-note.ok{color:var(--ok);}
.inv-note.err{color:var(--danger);}
#invPreview{color:var(--brand-deep);font-weight:700;font-size:14px;}
/* 手动指定编号（新增产品时可覆盖自动号，带全库唯一实时校验） */
.inv-manual{margin-top:8px;}
.inv-switch{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text);cursor:pointer;user-select:none;}
.inv-switch input{width:15px;height:15px;accent-color:var(--brand);cursor:pointer;}
.inv-manual-input{width:100%;margin-top:6px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;
  background:var(--card);color:var(--text);font-size:13px;font-weight:700;letter-spacing:.5px;}
.inv-manual-input:focus{outline:none;border-color:var(--brand);}

/* 关联产品（模糊搜索选择） */
.rel-box{display:flex;flex-direction:column;gap:7px;
  border:1px solid var(--line);border-radius:11px;padding:9px 10px;background:rgba(255,255,255,.5);}
.rel-sel{display:flex;flex-wrap:wrap;gap:0;min-height:20px;}
.rel-search{width:100%;box-sizing:border-box;font-size:13px;}
.rel-drop{position:relative;max-height:190px;overflow:auto;border:1px solid var(--line);
  border-radius:10px;background:#fff;}
.rel-opt{display:flex;align-items:center;gap:8px;padding:8px 10px;font-size:13px;
  cursor:pointer;border-bottom:1px solid var(--line);}
.rel-opt:last-child{border-bottom:none;}
.rel-opt:hover{background:var(--tint);}
.rel-opt.on{background:var(--mint-soft);color:#1f6f5f;font-weight:600;}
.rel-empty{padding:10px;font-size:12px;color:var(--muted);text-align:center;}
.prep-rel{margin-top:8px;font-size:12px;color:var(--muted);}
.rel-tag{display:inline-flex;align-items:center;gap:5px;background:var(--tint);color:var(--brand-deep);
  border-radius:9px;padding:3px 4px 3px 9px;font-size:11px;margin:3px 5px 0 0;}
/* 筹备详情页：关联产品可点击跳转（与列表「查看详情」箭头呼应） */
.rel-tag.rel-link{cursor:pointer;transition:background .14s, color .14s, box-shadow .14s;outline:none;}
.rel-tag.rel-link svg{width:13px;height:13px;transition:transform .14s;}
.rel-tag.rel-link:hover,.rel-tag.rel-link:focus-visible{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(236,165,60,.30);}
.rel-tag.rel-link:hover svg,.rel-tag.rel-link:focus-visible svg{transform:translateX(2px);}
.rel-x{border:none;background:rgba(0,0,0,.07);color:var(--muted);border-radius:50%;
  width:15px;height:15px;line-height:13px;font-size:11px;cursor:pointer;padding:0;flex:none;}
.rel-x:hover{background:var(--danger);color:#fff;}
.prep-owner{margin-top:7px;font-size:12px;color:var(--muted);}
.prep-owner b{color:var(--brand-deep);}
/* 筹备：新增 / 升级 —— 列表卡片与弹窗按钮区分 */
.prep-actions{display:flex;gap:10px;margin-left:auto;align-items:center;}
.prep-actions .pbtn{display:inline-flex;align-items:center;gap:6px;border-radius:999px;
  padding:9px 16px;font-size:13.5px;font-weight:600;cursor:pointer;line-height:1;white-space:nowrap;
  box-shadow:0 2px 8px rgba(0,0,0,.10);transition:transform .16s, box-shadow .16s, filter .16s;}
.prep-actions .pbtn svg{width:15px;height:15px;flex:none;}
.pbtn-add{background:var(--grad);color:#fff;border:1px solid rgba(255,255,255,.45);}
.pbtn-add:hover{filter:brightness(1.05);box-shadow:0 5px 16px rgba(255,140,120,.38);transform:translateY(-1px);}
.pbtn-add:active{transform:translateY(0);}
.pbtn-suggest{background:#fff;color:var(--brand-deep);border:1.5px solid var(--brand);}
.pbtn-suggest:hover{background:var(--tint);transform:translateY(-1px);box-shadow:0 5px 14px rgba(236,165,60,.22);}
.pbtn-suggest:active{transform:translateY(0);}
/* 筹备列表加载态：显示"正在加载"而非误报空列表 */
.prep-loading{display:flex;align-items:center;justify-content:center;gap:9px;padding:44px 0;color:var(--muted);font-size:14px;}
.prep-spin{width:15px;height:15px;border:2px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:prepspin .8s linear infinite;}
@keyframes prepspin{to{transform:rotate(360deg);}}
.prep-type-badge{display:inline-block;font-size:11px;font-weight:700;line-height:1.5;padding:1px 9px;border-radius:11px;margin-right:7px;vertical-align:middle;}
.prep-type-badge.t-upgrades{background:var(--brand);color:#fff;}
.prep-type-badge.t-news{background:#3F9D74;color:#fff;}
.prep-card.t-upgrades{border-left:3px solid var(--brand);}
.prep-card.t-news{border-left:3px solid #3F9D74;}

/* 提建议感谢态 */
.sg-thanks{margin-top:14px;background:var(--mint-soft);border:1px solid var(--mint);
  color:#1f6f5f;border-radius:11px;padding:13px;text-align:center;font-size:14px;font-weight:600;}

/* 最近更新人·时间 */
.pupdate{font-size:11px;color:var(--muted);margin-top:5px;}
.dt-update{font-size:12px;color:var(--muted);margin:10px 0;padding-top:9px;border-top:1px dashed var(--line);}

/* 手机版：侧栏即一级列表，点击进入页面（全屏）+ 返回 */
@media (max-width:760px){
  .adm-full{width:100vw;height:100vh;max-height:100vh;border-radius:0;}
  .adm-layout{flex-direction:column;}
  .adm-side{width:100%;border-radius:0;flex-direction:column;gap:6px;padding:14px 12px 18px;}
  .adm-side-title{font-size:14px;padding-left:4px;}
  .adm-nav{font-size:15px;padding:13px 14px;border:1px solid var(--line);background:rgba(255,255,255,.6);}
  .adm-nav.active{box-shadow:inset 4px 0 0 var(--brand);}
  /* 菜单态：仅侧栏 */
  #admLayout.mm-menu .adm-side{display:flex;}
  #admLayout.mm-menu #admContent{display:none;}
  /* 面板态：侧栏隐藏，内容全屏，显示返回 */
  #admLayout.mm-panel .adm-side{display:none;}
  #admLayout.mm-panel #admContent{display:block;padding:14px 14px 22px;}
  #admLayout.mm-panel .adm-back{display:inline-flex;align-items:center;gap:4px;margin-bottom:12px;font-size:14px;font-weight:700;color:var(--brand-deep);
    background:rgba(255,255,255,.9);border:1px solid rgba(63,74,74,.22);border-radius:12px;padding:7px 15px;cursor:pointer;
    box-shadow:0 2px 8px rgba(124,72,8,.20);transition:background .15s,transform .12s;}
  #admLayout.mm-panel .adm-back::before{content:"‹";font-size:20px;line-height:1;font-weight:800;margin-top:-1px;}
  #admLayout.mm-panel .adm-back:active{background:#fff;transform:translateY(1px);}
  /* 分类行手机端换行布局：名称一行，前缀+按钮一行 */
  .cat-row{gap:6px;}
  .cat-name-input{flex:1 1 100%;}
  .cat-pfxwrap{margin-left:0;}
  .cat-acts{margin-left:auto;}
  /* 编号只读段 */
  .inv-seg{min-width:56px;padding:7px 9px;font-size:13px;}
  /* 二级页面导航标题：手机版居中、电脑版左对齐（统一规则） */
  .adm-h, .modal-head{text-align:center;}
  .m-dt-title{text-align:center;}
}

/* 管理台侧栏：受权限隐藏的项 */
.adm-nav.hidden{display:none;}

/* 个人信息面板 */
.mine-card{display:flex;gap:18px;align-items:flex-start;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;margin-top:8px;}
.mine-avatar{width:64px;height:64px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;flex:none;box-shadow:0 2px 6px rgba(74,66,52,.25);}
.mine-fields{flex:1;min-width:0;}
.mine-row{display:flex;align-items:center;gap:10px;margin-bottom:6px;}
.mine-row label{width:42px;color:var(--muted);font-size:13px;flex:none;}
.mine-row input{flex:1;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:#fff;}
.mine-row input[readonly]{background:#f3efe6;color:var(--muted);}
.mine-note{font-size:11px;color:var(--muted);white-space:nowrap;}
.mine-msg{font-size:12px;min-height:16px;margin:2px 0 10px 52px;}

/* 分类「?」说明按钮 */
.help-q{margin-left:8px;width:18px;height:18px;border-radius:50%;border:1px solid var(--brand);background:#fff;color:var(--brand);font-size:12px;font-weight:700;line-height:1;cursor:pointer;flex:none;}
.help-q:hover{background:var(--brand);color:#fff;}

/* 分类说明弹窗 */
.help-card{max-width:520px;}
.help-body{font-size:13px;line-height:1.7;color:#4A4234;}
.help-body p{margin:0 0 10px;}
.help-body h4{margin:14px 0 6px;color:var(--brand);font-size:13px;}
.help-body ul{margin:0;padding-left:18px;}
.help-body li{margin-bottom:6px;}
.help-head{display:flex;align-items:center;justify-content:space-between;margin:-2px 0 8px;padding-right:30px;}
.help-head h3{margin:0;font-size:16px;color:var(--brand);font-weight:700;}
.help-body b{color:#2f2a20;}

/* ============================================================
   需求5：手机版产品库 → 列表视图（替代卡片）+ 全屏详情页
   仅手机端（≤700px）生效；桌面端维持原卡片网格不变；风格对齐「方案D」
   ============================================================ */
@media (max-width:700px){
  /* 列表容器 */
  .plist{display:block;margin-top:4px;}
  /* 列表行：暖白卡片 + 圆角 + 轻投影，与网站卡片风格统一 */
  .prow{display:flex;gap:12px;align-items:center;padding:11px;background:var(--card);
    border:1px solid rgba(255,255,255,.6);border-radius:16px;box-shadow:0 6px 18px rgba(255,140,120,.10);
    cursor:pointer;margin-bottom:10px;}
  .prow:active{transform:scale(.99);}
  .thumb{position:relative;width:56px;height:56px;border-radius:12px;flex:none;overflow:hidden;
    display:flex;align-items:center;justify-content:center;background:var(--grad);
    color:#fff;font-size:20px;font-weight:800;box-shadow:0 4px 12px rgba(255,140,120,.25);}
  .thumb-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:2;}
  .thumb.noimg .thumb-img{display:none;}
  .thumb-tx{position:relative;z-index:1;}
  .pmain{flex:1;min-width:0;}
  .pname{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
    display:flex;align-items:center;gap:6px;}
  .row-edit{flex:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
    border-radius:50%;border:none;cursor:pointer;color:var(--brand-deep);background:rgba(255,255,255,.6);
    font-size:15px;transition:background .15s,transform .12s;}
  .row-edit:hover{background:rgba(255,255,255,.92);}
  .row-edit:active{transform:scale(.94);}
  .pmeta{font-size:12px;color:var(--muted);margin-top:3px;display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
  .pmeta b{color:var(--text);font-weight:600;}
  .chev{color:#c9c2b3;font-size:18px;flex:none;}
}

/* 手机端全屏详情页（与网站 Hero / 毛玻璃面板一致） */
.m-detail{position:fixed;inset:0;z-index:60;display:none;flex-direction:column;
  background:
    radial-gradient(60vw 60vw at 84% 6%, rgba(95,211,192,.40), transparent 60%),
    radial-gradient(55vw 55vw at 4% 94%, rgba(255,196,150,.46), transparent 62%),
    radial-gradient(48vw 48vw at 50% -14%, rgba(255,255,255,.55), transparent 60%),
    var(--grad);
  background-attachment:fixed;}
.m-detail:not(.hidden){display:flex;}
.m-detail .topbar-hero{border-radius:0;flex:none;box-shadow:0 2px 16px rgba(255,140,120,.30);}
.m-detail .topbar-inner{justify-content:flex-start;gap:12px;}
.m-back{display:inline-flex;align-items:center;gap:4px;font-size:14px;font-weight:700;color:var(--brand-deep);
  background:rgba(255,255,255,.9);border:1px solid rgba(63,74,74,.22);border-radius:12px;padding:7px 15px;cursor:pointer;
  box-shadow:0 2px 8px rgba(124,72,8,.20);transition:background .15s,transform .12s;}
.m-back::before{content:"‹";font-size:20px;line-height:1;font-weight:800;margin-top:-1px;}
.m-back:active{background:#fff;transform:translateY(1px);}
.m-dt-title{color:#fff;font-size:15px;font-weight:800;letter-spacing:1px;text-align:center;text-shadow:0 1px 3px rgba(124,72,8,.38);}
.m-detail .glass{flex:1;overflow:auto;margin:12px;border-radius:20px;background:rgba(255,255,255,.82);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);padding:16px;box-shadow:0 10px 34px rgba(120,80,40,.18);}
.m-detail .dt-imgwrap{background:var(--grad);color:#fff;font-size:42px;font-weight:800;height:200px;border-radius:14px;
  display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(255,140,120,.25);}
.m-detail .dt-imgwrap img{width:100%;height:100%;object-fit:cover;}
.m-detail .dt-init{position:relative;z-index:1;}
.m-detail .dt-name{padding-right:0;}
.dt-tags{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 10px;}
.dt-tags span{font-size:11px;background:#E4E9E3;color:var(--accent-deep);padding:3px 9px;border-radius:9px;}
.dt-tag{font-size:11px;padding:3px 9px;border-radius:9px;}
.dt-tag.first{background:#F6EBD8;color:var(--brand-deep);}
.dt-tag.rare{background:#E4E9E3;color:#6E7F72;}
.dt-meta{display:flex;gap:18px;font-size:12px;color:var(--muted);margin-bottom:10px;flex-wrap:wrap;}
.dt-meta b{color:var(--text);font-size:15px;display:block;margin-top:2px;}
.dt-desc{font-size:13px;line-height:1.7;color:var(--text);background:var(--card);
  border:1px solid var(--line);border-radius:12px;padding:12px;}
/* 筹备详情页封面横幅：与产品详情页 .dt-imgwrap 视觉呼应（同渐变+白字） */
.pd-cover{background:var(--grad);color:#fff;border-radius:14px;padding:22px 20px;display:flex;flex-direction:column;gap:10px;align-items:flex-start;box-shadow:0 8px 24px rgba(255,140,120,.22);margin-bottom:14px;}
.pd-cover-name{font-size:20px;font-weight:800;line-height:1.3;text-shadow:0 1px 3px rgba(124,72,8,.30);}
.pd-cover .prep-type-badge{margin-right:0;}

/* ============ 筹备：上线交付物 ============ */
/* 编辑弹窗交付物区 */
.deliv{margin-top:14px;border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(180deg,#FFFDF8,#FCF6EC);padding:14px 14px 16px;}
.deliv-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;}
.deliv-title{font-size:15px;font-weight:700;color:var(--brand-deep);}
.deliv-badge{font-size:11px;font-weight:700;color:#fff;background:var(--grad);border-radius:999px;padding:2px 10px;white-space:nowrap;}
.deliv-sub{font-size:12px;color:var(--muted);line-height:1.6;margin-bottom:12px;}
.deliv-sub b{color:var(--brand-deep);}
.req,.opt{font-size:11px;font-weight:700;border-radius:6px;padding:1px 7px;margin-left:6px;vertical-align:middle;}
.req{color:var(--danger);background:#F8E2DC;border:1px solid #E8C3B8;}
.opt{color:var(--muted);background:#EFEDE8;border:1px solid var(--line);}
.req-hint{font-size:11px;color:var(--muted);font-weight:400;margin-left:6px;}

.dz-list{display:flex;flex-direction:column;gap:10px;}
.dz{border:1px solid var(--line);border-radius:11px;background:#fff;padding:11px 12px;}
.dz-h{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:700;color:var(--text);}
.dz-ic{width:17px;height:17px;color:var(--brand-deep);flex:none;}
.dz-name{flex:1;}
.dz-hint{font-size:11px;color:var(--muted);margin:3px 0 9px;}
.dz-drop{width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:11px;border:1.5px dashed var(--brand);border-radius:9px;background:var(--tint);color:var(--brand-deep);font-size:13px;font-weight:600;cursor:pointer;}
.dz-drop:hover{background:#FBEFD8;}
.dz-drop svg{width:16px;height:16px;}
.dz-locked{display:flex;align-items:center;gap:6px;padding:10px;border:1px dashed var(--line);border-radius:9px;color:var(--muted);font-size:12.5px;background:#FBFAF7;}
.dz-locked svg{width:15px;height:15px;color:var(--muted);}
.dz-file{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #C9E0CE;border-radius:9px;background:#F1F6F2;}
.dzf-ic{width:20px;height:20px;color:var(--ok);flex:none;}
.dzf-meta{flex:1;min-width:0;}
.dzf-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dzf-sub{font-size:11px;color:var(--muted);}
.dzf-acts{display:flex;gap:6px;flex:none;}
.dzf-acts button{display:inline-flex;align-items:center;gap:3px;font-size:12px;padding:5px 9px;border:1px solid var(--line);background:#fff;border-radius:8px;color:var(--brand-deep);cursor:pointer;}
.dzf-acts button:hover{background:var(--tint);}
.dzf-acts .dzf-del{color:var(--danger);border-color:#E8C3B8;}
.dzf-acts svg{width:14px;height:14px;}

/* 列表卡片：查看详情箭头 + 交付物状态条 */
.prep-go{margin-left:2px;color:var(--muted);display:flex;align-items:center;transition:color .15s, transform .15s;flex:none;}
.prep-go svg{width:18px;height:18px;}
.prep-card:hover .prep-go{color:var(--brand-deep);transform:translateX(2px);}
.deliv-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:9px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:#FBFAF7;font-size:12px;}
.deliv-bar.silent{color:var(--muted);background:transparent;border:1px dashed var(--line);padding:7px 10px;}
.db-h{display:inline-flex;align-items:center;gap:5px;font-weight:700;color:var(--brand-deep);}
.db-ic{width:15px;height:15px;}
.dchips{display:flex;flex-wrap:wrap;gap:6px;}
.dchip{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;border-radius:7px;padding:2px 8px;border:1px solid var(--line);background:#fff;color:var(--muted);}
.dchip-ic{width:13px;height:13px;}
.dchip.ok{color:var(--ok);border-color:#C7D6CB;background:#EFF5F0;}
.dchip.ok .dchip-ic{color:var(--ok);}
.dchip.ok .dck{width:12px;height:12px;color:var(--ok);}
.dchip.miss{color:var(--danger);border-color:#E8C3B8;background:#F8E2DC;}
.dchip.miss .dchip-ic{color:var(--danger);}
.dchip.omiss{color:var(--muted);border-style:dashed;}
.db-sum{font-weight:600;}
.db-sum.ok{color:var(--ok);}
.db-sum.warn{color:var(--danger);}
.deliv-lock{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-size:12px;margin-left:auto;}
.dl-ic{width:14px;height:14px;}
.deliv-go{margin-left:auto;color:var(--brand-deep);font-weight:700;font-size:12.5px;cursor:pointer;white-space:nowrap;}
.deliv-go:hover{text-decoration:underline;}

/* 抽屉（现为全屏二级详情页） */
.drawer{position:fixed;inset:0;z-index:120;display:block;}
.drawer.hidden{display:none;}
.drawer-scrim{position:absolute;inset:0;background:rgba(40,30,20,.42);}
.drawer-panel{position:relative;width:100vw;height:100vh;max-width:none;background:var(--bg);overflow-y:auto;}
.drawer-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:16px 22px;background:var(--grad);color:#fff;}
.drawer-t{display:flex;align-items:center;gap:8px;font-size:17px;font-weight:700;}
.drawer-t svg{width:20px;height:20px;}
.drawer-x{background:rgba(255,255,255,.22);border:none;color:#fff;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;}
.drawer-x svg{width:18px;height:18px;}
.drawer-body{padding:20px 18px 44px;max-width:880px;margin:0 auto;}
.dr-title{font-size:18px;font-weight:800;color:var(--text);margin-bottom:12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.dr-info{background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px 14px;display:flex;flex-direction:column;gap:9px;margin-bottom:14px;}
.dr-row{display:flex;gap:10px;font-size:13px;}
.dr-row .k{width:64px;flex:none;color:var(--muted);}
.dr-row .v{color:var(--text);flex:1;}
.dr-sec-t{display:flex;align-items:center;gap:6px;font-weight:700;color:var(--brand-deep);font-size:14px;margin:6px 0 10px;}
.dr-sec-t svg{width:16px;height:16px;}
.dr-files{display:flex;flex-direction:column;gap:9px;}
.dr-acts{display:flex;gap:10px;margin-top:18px;padding-top:14px;border-top:1px solid var(--line);}
.dr-acts button{flex:1;padding:10px 14px;border-radius:var(--radius-btn);font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:filter .15s, background .15s;}
.dr-acts .btn-line{background:#fff;border-color:var(--line);color:var(--text);}
.dr-acts .btn-line:hover{background:var(--bg);}
.dr-acts .btn-danger{background:var(--danger);color:#fff;}
.dr-acts .btn-danger:hover{filter:brightness(1.05);}
/* ===== 阶段时间线（筹备详情） ===== */
.tl{list-style:none;margin:8px 0 0;padding:0;}
.tl-i{position:relative;display:flex;gap:12px;padding:0 0 16px;}
.tl-i:last-child{padding-bottom:0;}
.tl-dot{flex:none;width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-top:1px;
  background:var(--bg);color:var(--muted);border:1.5px solid var(--line);}
.tl-dot svg{width:13px;height:13px;}
.tl-body{flex:1;min-width:0;}   /* 撑满剩余宽度，避免文字被挤成窄列 */
.tl-i::before{content:'';position:absolute;left:10px;top:22px;bottom:0;width:2px;background:var(--line);}
.tl-i:last-child::before{display:none;}
.tl-i.done .tl-dot{background:var(--brand);color:#fff;border-color:var(--brand);}
.tl-i.done::before{background:var(--brand);}
.tl-i.doing .tl-dot{background:#fff;color:var(--brand-deep);border-color:var(--brand);box-shadow:0 0 0 3px var(--tint);}
.tl-name{font-size:14px;font-weight:600;color:var(--text);}
.tl-i.todo .tl-name{color:var(--muted);}
.tl-time{font-size:12px;color:var(--muted);margin-top:2px;font-variant-numeric:tabular-nums;}
.tl-time.doing{color:var(--brand-deep);font-weight:600;}
.tl-time.nomtime,.tl-time.na{color:#B9B2A6;}
/* 产品详情页尾操作区复用 .dr-acts，加一点顶部留白避免与正文贴太近 */
.m-detail .dr-acts{margin-top:14px;}
.drf{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;}
.drf.miss{border-style:dashed;border-color:#E8C3B8;background:#FCF6F4;}
.drf-ic{width:22px;height:22px;color:var(--brand-deep);flex:none;}
.drf-main{flex:1;min-width:0;}
.drf-name{font-size:13.5px;font-weight:700;color:var(--text);}
.drf-file{font-size:12px;color:var(--text);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drf-sub{color:var(--muted);}
.drf-nf{font-size:12px;color:var(--danger);font-weight:600;margin-top:2px;}
.drf-acts{display:flex;gap:6px;flex:none;}
.drf-acts button{display:inline-flex;align-items:center;gap:3px;font-size:12px;padding:6px 10px;border:1px solid var(--line);background:#fff;border-radius:8px;color:var(--brand-deep);cursor:pointer;}
.drf-acts button:hover{background:var(--tint);}
.drf-acts svg{width:14px;height:14px;}
.drf-lock{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);flex:none;padding:6px 10px;border:1px dashed var(--line);border-radius:8px;background:#FBFAF7;}
.drf-lock svg{width:14px;height:14px;}
.dr-tip{margin-top:14px;font-size:11.5px;color:var(--muted);line-height:1.6;border-top:1px dashed var(--line);padding-top:10px;}

/* 产品详情：研发物料入口 */
.rd-box{margin-top:12px;border:1.5px solid var(--line);border-radius:12px;overflow:hidden;background:#fff;}
.rd-box.rd-empty{border-style:dashed;}
.rd-h{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:700;color:var(--brand-deep);padding:10px 13px;background:var(--tint);}
.rd-h svg{width:17px;height:17px;color:var(--brand-deep);}
.rd-body{padding:12px 13px;}
.rd-link{display:inline-flex;align-items:center;gap:6px;background:var(--grad);color:#fff;border:none;border-radius:var(--radius-btn);padding:9px 15px;font-size:13.5px;font-weight:700;cursor:pointer;box-shadow:0 4px 12px rgba(255,130,140,.25);}
.rd-link:hover{filter:brightness(1.04);}
.rd-meta{margin-top:9px;font-size:12px;color:var(--muted);line-height:1.5;}
.rd-empty-tx{padding:13px;font-size:12.5px;color:var(--muted);line-height:1.6;}

/* 状态圆点内对勾（完成态） */
.step.done .dot{display:flex;align-items:center;justify-content:center;}
.step.done .dot .ck{width:11px;height:11px;color:#fff;display:block;}

@media (max-width:760px){
  .deliv-bar{gap:7px;}
}

/* 产品列表：关联升级筹备标识（仅展示，不在列表跳转） */
.tag-prep{display:inline-block;margin-left:7px;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:700;color:#fff;background:var(--grad);vertical-align:middle;}

/* 交付物抽屉：图片 / 音视频内联预览 */
.drf-inline{margin-top:7px;}
.drf-media{max-width:100%;border-radius:8px;background:#0f0f0f;display:block;}
.drf-img{max-height:170px;object-fit:contain;border:1px solid var(--line);}

/* 管理台 → 版本信息（升级说明日志） */
.ver-list{display:flex;flex-direction:column;gap:14px;margin-top:6px;}
.ver-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;}
.ver-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;}
.ver-tag{background:var(--grad);color:#fff;font-weight:700;font-size:12px;padding:2px 9px;border-radius:999px;letter-spacing:.3px;}
.ver-date{color:var(--muted);font-size:12px;}
.ver-title{font-weight:700;color:var(--text);font-size:15px;margin-left:2px;}
.ver-note{display:inline-block;margin:8px 0 2px;padding:2px 9px;border-radius:6px;background:var(--tint);color:var(--brand-deep);font-size:12px;font-weight:600;}
.ver-changes{margin:8px 0 0;padding-left:18px;}
.ver-changes li{margin:5px 0;color:var(--text);font-size:13px;line-height:1.55;}
.ver-changes li::marker{color:var(--brand);}

/* 升级型筹备：关联产品区卡片（与交付物区视觉一致） */
#pRelSection{margin-top:12px;padding:12px 14px;background:var(--tint);border:1px solid var(--line);border-radius:14px;}
#pRelSection > label{margin-top:0;}
.dr-sec-t.muted{opacity:.65;font-weight:600;}

/* 管理台 → 平台操作说明（问题列表 + 步骤 + 每步预览图） */
.guide-list{display:flex;flex-direction:column;gap:4px;margin-top:8px;}
.guide-cat{margin:14px 0 2px;font-size:12px;font-weight:700;letter-spacing:.5px;color:var(--brand-deep);text-transform:none;}
.guide-cat:first-child{margin-top:4px;}
.guide-q{border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden;}
.guide-q + .guide-q{margin-top:8px;}
.guide-q-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 15px;cursor:pointer;user-select:none;}
.guide-q-h:hover{background:var(--tint);}
.guide-q-t{font-size:14px;color:var(--text);font-weight:600;}
.guide-q-ar{color:var(--brand);font-size:18px;line-height:1;flex:none;}
.guide-q.open .guide-q-h{background:var(--tint);}
.guide-q-body{padding:4px 15px 16px;border-top:1px solid var(--line);}
.guide-empty{padding:16px 2px;color:var(--muted);font-size:13px;}
.guide-step{display:flex;gap:12px;padding:14px 0;border-bottom:1px dashed var(--line);}
.guide-step:last-child{border-bottom:none;}
.guide-step-no{flex:none;width:24px;height:24px;border-radius:50%;background:var(--grad);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;}
.guide-step-main{min-width:0;flex:1;}
.guide-step-t{font-size:13.5px;font-weight:700;color:var(--text);}
.guide-step-d{margin-top:4px;font-size:12.5px;line-height:1.6;color:var(--muted);}

/* 每步预览图：CSS 模拟手机界面（仿 App 截图） */
.guide-mock{margin-top:10px;display:flex;justify-content:center;}
.gm-phone{width:230px;max-width:100%;background:#fff;border:7px solid #2b2b2b;border-radius:26px;overflow:hidden;box-shadow:0 6px 18px rgba(0,0,0,.12);font-size:11px;color:#333;}
.gm-hero{background:var(--grad);color:#fff;font-weight:700;font-size:11.5px;padding:9px 10px;text-align:center;}
.gm-body{padding:12px 12px 16px;min-height:64px;background:#FBF7F0;}
.gm-hint{color:#9a8f7d;font-size:10.5px;text-align:center;padding:10px 4px;border:1px dashed #d9cfbe;border-radius:9px;background:#fff;}
.gm-search{display:flex;align-items:center;gap:6px;margin:0 0 10px;padding:7px 9px;background:#fff;border:1px solid var(--line);border-radius:9px;color:#444;}
.gm-search svg{width:13px;height:13px;flex:none;color:#b09a7e;}
.gm-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px;}
.gm-chips .gc{font-size:10.5px;padding:4px 10px;border-radius:999px;background:#fff;border:1px solid var(--line);color:#7a6f5d;}
.gm-chips .gc.on{background:var(--grad);color:#fff;border-color:transparent;font-weight:700;}
.gm-card{background:#fff;border:1px solid var(--line);border-radius:11px;padding:9px;display:flex;gap:9px;align-items:center;}
.gm-thumb{width:46px;height:46px;border-radius:8px;flex:none;background:linear-gradient(135deg,#FFE3C2,#FFC6B0);}
.gm-name{font-size:12px;font-weight:700;color:#3F4A4A;}
.gm-meta{font-size:10px;color:#9a8f7d;margin-top:3px;}
.gm-tabbar{display:flex;border-top:1px solid var(--line);background:#fff;}
.gm-tabbar span{flex:1;text-align:center;padding:8px 2px;font-size:10.5px;color:#9a8f7d;}
.gm-tabbar span.on{color:var(--brand-deep);font-weight:700;}
/* 真实截图预览（guide_shots/*.png，来自 8080 真机截图） */
.guide-shot{display:block;width:100%;max-width:280px;margin:10px auto 2px;border-radius:14px;border:1px solid var(--line);box-shadow:0 4px 14px rgba(120,70,30,.10);background:#fff;}
/* 操作说明预览图 · 扩展组件 */
.gm-title{font-size:12.5px;font-weight:800;color:#3F4A4A;padding:10px 12px 2px;}
.gm-sub{font-size:10px;color:#9a8f7d;padding:2px 12px 8px;}
.gm-badge{display:inline-block;font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;color:#fff;vertical-align:middle;}
.gm-badge.up{background:#ECA53C;}
.gm-badge.new{background:#3F9D74;}
.gm-prog{display:inline-block;font-size:10px;font-weight:700;color:#fff;background:var(--grad);border-radius:999px;padding:2px 9px;margin-left:6px;}
.gm-steprow{display:flex;gap:0;align-items:center;margin:8px 0;padding:0 2px;}
.gm-steprow .s{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;position:relative;font-size:9.5px;color:#9a8f7d;}
.gm-steprow .s::before{content:"";position:absolute;top:6px;left:-50%;width:100%;height:2px;background:#e6ddcd;z-index:0;}
.gm-steprow .s:first-child::before{display:none;}
.gm-steprow .dot{width:13px;height:13px;border-radius:50%;background:#e6ddcd;z-index:1;border:2px solid #fff;}
.gm-steprow .s.done .dot{background:var(--ok);}
.gm-steprow .s.done{color:var(--ok);}
.gm-steprow .s.doing .dot{background:#ECA53C;box-shadow:0 0 0 3px rgba(236,165,60,.3);}
.gm-form{background:#fff;border:1px solid var(--line);border-radius:11px;padding:10px;margin:8px 0;}
.gm-field{display:flex;flex-direction:column;gap:3px;margin-bottom:8px;}
.gm-field:last-child{margin-bottom:0;}
.gm-field label{font-size:9.5px;color:#9a8f7d;font-weight:700;}
.gm-input{font-size:11px;padding:6px 8px;background:#FBF7F0;border:1px solid var(--line);border-radius:7px;color:#5a5249;}
.gm-input.ph{color:#b9ad9a;}
.gm-btn{display:block;text-align:center;background:var(--grad);color:#fff;font-weight:700;font-size:11px;padding:9px;border-radius:9px;margin-top:4px;}
.gm-btn2{display:block;text-align:center;background:#fff;border:1px solid var(--line);color:var(--text);font-weight:700;font-size:11px;padding:9px;border-radius:9px;margin-top:6px;}
.gm-row{display:flex;justify-content:space-between;gap:8px;font-size:10.5px;padding:5px 0;border-bottom:1px dashed #e6ddcd;}
.gm-row:last-child{border-bottom:none;}
.gm-row .k{color:#9a8f7d;}
.gm-row .v{color:#3F4A4A;font-weight:600;text-align:right;}
.gm-doc{background:#fff;border:1px solid var(--line);border-radius:10px;padding:9px;font-size:10.5px;color:#5a5249;line-height:1.5;}
.gm-list{display:flex;flex-direction:column;gap:6px;margin:6px 0;}
.gm-li{display:flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 9px;font-size:10.5px;color:#3F4A4A;}
.gm-li .tk{width:14px;height:14px;border-radius:4px;flex:none;background:#ECA53C;}
.gm-li .tk.ok{background:var(--ok);}
.gm-li .tk.no{background:#e6ddcd;}
.gm-lock{display:inline-flex;align-items:center;gap:4px;font-size:9.5px;color:#9a8f7d;}
.gm-check{color:var(--ok);font-weight:700;}
.gm-drop{background:#fff;border:1px solid var(--line);border-radius:7px;padding:6px 8px;font-size:10.5px;color:#3F4A4A;display:flex;justify-content:space-between;align-items:center;}
.gm-drop::after{content:"▾";color:#b09a7e;}
.gm-note{font-size:10px;color:#9a8f7d;padding:6px 8px;background:#FBF7F0;border-radius:8px;margin-top:6px;line-height:1.5;}
.gm-hero.alt{background:#fff;color:var(--brand-deep);border-bottom:1px solid var(--line);}


