/*!
 * web/assets/css/index/07-print.css
 * 打印中心 / 上传遮罩 / 财务报表 / 采购单合并
 *
 * 本文件由 tools/split_spa.py 从单文件 SPA 机械拆出，请勿手工改动切分边界。
 * 加载顺序由入口 HTML 统一控制（经典 script 共享全局词法环境）。
 */

/* ===== 打印中心弹窗（跟随项目主题，#1） ===== */
/* 打印遮罩要压住所有弹层：同样走 --gp-ztop（写死 10000 会被只增不减的弹层计数器越过，#162） */
.pc-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:calc(var(--gp-ztop,2000) + 40)!important;display:flex;align-items:center;justify-content:center;padding:16px}
/* 上传等待遮罩 */
.gp-upload-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:calc(var(--gp-ztop,2000) + 50)!important;display:none;align-items:center;justify-content:center;padding:16px}
.gp-upload-mask__box{background:var(--cd);color:var(--tc);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;align-items:center;gap:10px;box-shadow:0 10px 40px rgba(0,0,0,.35);min-width:140px}
.gp-upload-mask__spin{width:28px;height:28px;border:3px solid var(--pc);border-top-color:transparent;border-radius:50%;animation:gpSpin .8s linear infinite}
.gp-upload-mask__txt{font-size:13px;text-align:center}
@keyframes gpSpin{to{transform:rotate(360deg)}}
/* 规格选项里的规格图（图片+文字同时显示） */
.pos-sheet__opt-img{width:18px;height:18px;object-fit:cover;border-radius:4px;vertical-align:middle;margin-right:4px;border:1px solid var(--bd)}
/* 财务报表：列表/图表切换 */
.fr-view-toggle{display:flex;gap:6px;padding:8px 12px}
.fr-view-toggle span{padding:4px 14px;border:1px solid var(--bd);border-radius:16px;font-size:13px;color:var(--ts);cursor:pointer}
.fr-view-toggle span.on{border-color:var(--pc);background:var(--pc);color:#fff;font-weight:600}
.fr-g2{width:100%;height:200px}
/* 采购单合并选择条 */
.po-merge-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;background:var(--cb);border-bottom:1px solid var(--bd);font-size:13px;color:var(--ts)}
.pc-modal{position:relative;width:340px;max-width:100%;max-height:86vh;overflow:auto;background:var(--cd);color:var(--tc);border:1px solid var(--bd);border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.35);font-size:14px}
/* 2026-09-12：右上角显式关闭按钮（暗色下与遮罩同色时也能一眼关闭） */
.pc-x{position:absolute;top:8px;right:10px;width:28px;height:28px;border:0;border-radius:50%;background:var(--cb);color:var(--ts);font-size:14px;line-height:1;cursor:pointer;z-index:2;display:flex;align-items:center;justify-content:center}
.pc-x:hover{color:var(--tc);background:var(--bd)}
.pc-modal__title{font-weight:600;font-size:15px;padding:16px 16px 8px;color:var(--tc)}
.pc-modal__body{padding:0 16px 8px;color:var(--tc)}
.pc-modal__empty{background:var(--cb);border-radius:8px;padding:12px;color:var(--ts);line-height:1.6}
.pc-modal__empty a{color:var(--pci);text-decoration:none;cursor:pointer}
/* 2026-09-09 加载中：带旋转图标的占位（避免 modal 内空白被误判为卡死） */
.pc-modal__loading{display:flex;align-items:center;gap:8px;padding:14px 4px;color:var(--ts);font-size:13px}
.pc-spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--bd);border-top-color:var(--pc);border-radius:50%;animation:pc-spin .8s linear infinite}
@keyframes pc-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.pc-modal__dev{display:block;background:var(--cd);border:1px solid var(--bd);border-radius:8px;padding:10px;margin-bottom:8px;cursor:pointer;transition:border-color .15s ease,background .15s ease}
.pc-modal__dev.on{border-color:var(--pc);background:var(--cb)}
.pc-modal__dev-name{font-weight:600;color:var(--tc)}
.pc-modal__dev-meta{color:var(--ts);font-size:12px;margin-top:2px}
/* #583 设备行：状态点/状态文字/下一步一句 + 一颗「连接检测」。
   四种状态的**颜色不写在 CSS 里**，由 core/20-api.js 的 printDeviceView.STATE_TONE 一处给
   （写四条 .pc-dot--x 类，模板里就得再写四遍状态比较 —— 那是第二份口径，见该处注释）。
   这里只留与状态无关的形状，颜色靠 JS 写进 style 的主题令牌。 */
.pc-dot{width:8px;height:8px;border-radius:50%;flex:none;display:inline-block;vertical-align:middle;margin-right:5px}
.pc-dev__row{display:flex;align-items:flex-start;gap:8px}
.pc-dev__main{flex:1;min-width:0}
.pc-dev__state{display:flex;align-items:center;font-size:12px;margin-top:4px;font-weight:600}
.pc-dev__next{display:block;font-size:12px;color:var(--ts);line-height:1.5;margin-top:2px}
/* 「下一步」按钮的唯一挂法：说明 + 若干颗真按钮。旧版用一句 toast 表达失败，toast 3 秒就没，
   而「这台接不上、该怎么办」必须还在屏幕上（§92.4），所以做成常驻的说明格。 */
.pc-modal__notice:empty{display:none}
.pc-modal__notice{margin:2px 16px 8px;padding:8px 10px;border-radius:8px;background:var(--cb);border:1px solid var(--bd)}
.pc-note__line{font-size:12px;line-height:1.6;color:var(--tc);word-break:break-word}
.pc-note__line--fail{color:var(--dci)}
.pc-note__line--warn{color:var(--wci)}
.pc-note__acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
/* 触摸下限：小按钮也要够 34px（§42.3），文字 12px 是弹层里的辅助控件 */
.pc-mini{min-height:34px;padding:0 12px;border:1px solid var(--bd);border-radius:8px;background:var(--cd);color:var(--pci);font-size:12px;line-height:1.5;cursor:pointer;flex:none}
.pc-mini--primary{background:var(--pc);border-color:var(--pc);color:#fff}
.pc-mini[disabled]{opacity:.6;cursor:default}
/* 一台都没登记时的引导面板：三步 + 底部那颗「添加设备」是真跳转，不是一句「不支持」 */
.pc-guide{background:var(--cb);border-radius:8px;padding:12px;line-height:1.6}
.pc-guide__title{font-weight:600;color:var(--tc);margin-bottom:6px}
.pc-guide__step{font-size:12px;color:var(--ts);margin:2px 0}
/* queue_pending 只由服务端下发（数不出来就不出这一行，§179「没读到」≠「没有」） */
.pc-queue{font-size:12px;color:var(--wci);padding:6px 0}
/* 设置页顶部那行状态计数（state_counts 由服务端下发，客户端不自己数） */
.pc-devcount{font-size:12px;color:var(--ts);line-height:1.5;margin:2px 0 8px}
.pc-modal__fin-title{font-size:13px;color:var(--ts);margin:10px 0 4px;font-weight:600}
.pc-check{display:flex;align-items:center;gap:6px;font-size:13px;margin:2px 0;cursor:pointer}
.pc-modal__copies{display:flex;align-items:center;gap:12px;padding:6px 0 2px;color:var(--ts)}
.pc-modal__copies button{width:28px;height:28px;border:none;border-radius:6px;background:var(--cb);border:1px solid var(--bd);color:var(--tc);font-size:16px;cursor:pointer}
.pc-modal__copies span{min-width:18px;text-align:center;color:var(--tc)}
.pc-modal__foot{display:flex;gap:8px;padding:8px 16px 16px}
.pc-btn{flex:1;padding:9px 0;border:none;border-radius:8px;font-size:14px;cursor:pointer;transition:filter .15s ease,transform .12s ease}
.pc-btn:active{transform:scale(.98)}
.pc-btn--primary{background:var(--pc);color:#fff}
.pc-btn--ghost{background:var(--cb);color:var(--tc);border:1px solid var(--bd)}
.pc-btn--text{background:transparent;color:var(--ts);flex:none;padding:9px 12px}
.pc-btn[disabled]{opacity:.6;cursor:default}
/* ===== 订单列表/详情/发货（原嵌在 template 字符串内被运行时编译器丢弃，#2 提升到全局） ===== */
.ord-card{display:flex;gap:10px;background:var(--cd);border-radius:10px;padding:12px;margin:8px 12px;box-shadow:var(--sh);cursor:pointer;align-items:stretch;transition:transform .12s ease}
.ord-card:active{transform:scale(.985)}
.ord-card--rows{flex-direction:column;gap:8px;padding:12px 14px}
.ord-card__thumb{width:44px;height:44px;object-fit:cover;border-radius:8px;flex:none;background:var(--bg);border:1px solid var(--bd)}
.ord-r1{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ord-r1__cust{display:flex;align-items:center;gap:5px;min-width:0;color:var(--pci);cursor:pointer;flex:1}
.ord-r1__cname{font-weight:700;font-size:17px;color:var(--tc);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60vw}
.ord-r1__ficon{color:var(--ts);opacity:.7;flex:none}
.ord-r1__amount{font-size:17px;font-weight:700;color:var(--dc);flex:none}
/* #144（2026-09-25）：作废印章。原先是模板里的绝对定位（top:8/right:12）盖在卡片右上角，
   正好压在同一个右上角的金额上（实测「已作废」叠住 ¥5,180.00，两个都读不出）。
   现在作为 .ord-r1 的 flex 子项与金额并排占位 —— 六种语种字宽差几倍也不会互相盖。
   pointer-events:none：不抢整张卡片的点击。 */
.ord-void-stamp{flex:none;white-space:nowrap;transform:rotate(-14deg);border:2px solid var(--dc);color:var(--dc);border-radius:6px;padding:1px 9px;font-size:13px;font-weight:700;letter-spacing:3px;opacity:.85;pointer-events:none}
.ord-r2{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ord-r2__qty{font-size:15px;font-weight:700;color:var(--tc)}
.ord-r2__unit{font-size:11px;font-weight:400;color:var(--ts);margin-left:2px}
.ord-r2__disc{font-size:12px;color:var(--sc)}
.ord-r3{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ts)}
.ord-r3__no{font-weight:600}
.ord-r3__prog{display:flex;align-items:center;gap:6px;margin-left:auto;flex:1;justify-content:flex-end}
.ord-r3__bar{display:inline-block;width:64px;height:6px;background:var(--bd);border-radius:4px;overflow:hidden}
.ord-r3__fill{display:block;height:100%;background:var(--pc);border-radius:4px;transition:width .3s ease}
.ord-r3__pct{flex:none}
/* 2026-09-21（送审反馈 图1）：列表行补「已发 / 待发货」数量，光有百分比看不出欠几件 */
.ord-r3__qty{flex:none;font-size:11px;color:var(--ts);white-space:nowrap}
.ord-card__no{font-weight:700;font-size:14px;color:var(--tc)}
.ord-card__time{font-size:11px;color:var(--ts)}
.ord-card__prog{margin-top:2px}
.ord-card__prog-bar{height:6px;background:var(--bd);border-radius:4px;overflow:hidden}
.ord-card__prog-fill{height:100%;background:var(--pc);border-radius:4px;transition:width .3s ease}
.ord-card__prog-txt{font-size:10px;color:var(--ts);margin-top:2px}
.ord-card__cust{font-weight:700;font-size:20px;color:var(--tc);line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-card__region{font-size:12px;color:var(--ts);display:flex;align-items:center;gap:2px}
.ord-card__amount{font-size:16px;font-weight:600;color:var(--dc)}
.ord-card__qty{font-size:24px;font-weight:800;color:var(--tc);line-height:1}
.ord-card__unit{font-size:12px;font-weight:400;color:var(--ts);margin-left:2px}
.ord-card__disc{font-size:12px;color:var(--sc)}
.ord-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 12px}
.ord-summary__cell{background:var(--cd);border-radius:10px;padding:12px 8px;text-align:center;box-shadow:var(--sh);min-width:0;display:flex;flex-direction:column;justify-content:center}
.ord-summary__val{font-size:17px;font-weight:700;color:var(--tc);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-summary__u{font-size:11px;font-weight:400;color:var(--ts);margin-left:2px}
.ord-summary__paid{color:var(--pci)}
.ord-summary__lbl{font-size:11px;color:var(--ts);margin-top:6px;font-weight:500}
@media(min-width:600px){.ord-summary{grid-template-columns:repeat(4,1fr)}}
.ord-shipbar{margin:12px 12px 0;background:var(--cd);border-radius:10px;padding:10px 12px;box-shadow:var(--sh)}
.ord-shipbar__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.ord-shipbar__pct{font-size:12px;color:var(--ts)}
.ord-shipbar__prog{height:8px;background:var(--bd);border-radius:5px;overflow:hidden}
.ord-shipbar__fill{height:100%;background:linear-gradient(90deg,var(--pc),#07c160);border-radius:5px;transition:width .3s ease}
.ord-forbid-hint{margin:6px 16px 0;padding:6px 10px;background:rgba(255,149,0,.1);border-radius:8px;font-size:12px;color:var(--wc);display:flex;align-items:center;gap:4px}
.ord-items{padding:8px 0}
.ord-card2
.ord-card2__img
.ord-card2__img--ph
.ord-card2__body
.ord-card2__name
.ord-card2__spec
.ord-card2__style{color:var(--ts);font-size:12px;font-weight:400}
.ord-card2__price
.ord-card2__price b
.ord-pcard{background:var(--cd);border-radius:10px;margin:8px 12px;box-shadow:var(--sh);overflow:hidden}
.ord-pcard__hd{display:flex;align-items:center;gap:10px;padding:10px;cursor:pointer}
.ord-pcard__img{width:56px;height:56px;border-radius:8px;object-fit:cover;flex:none;background:var(--bd);cursor:pointer}
.ord-pcard__img--ph{display:flex;align-items:center;justify-content:center;color:var(--ts);font-size:24px}
.ord-pcard__simg{width:30px;height:30px;border-radius:5px;object-fit:cover;background:var(--bd);vertical-align:middle;display:inline-block}
.ord-pcard__simg--ph{display:inline-flex;align-items:center;justify-content:center;color:var(--ts);font-size:14px;width:30px;height:30px;border-radius:5px;background:var(--cb)}
.ord-pcard__info{flex:1;min-width:0}
.ord-pcard__name{font-weight:600;font-size:15px;color:var(--tc);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ord-pcard__sub{font-size:12px;color:var(--ts);margin-top:3px}
.ord-pcard__tbl{padding:0 10px 10px}
.ord-pcard__tbl table{width:100%;border-collapse:collapse;font-size:12px;background:var(--cb);border-radius:8px;overflow:hidden}
.ord-pcard__tbl th{background:var(--cd);color:var(--ts);font-weight:500;padding:6px 8px;text-align:left;white-space:nowrap}
.ord-pcard__tbl td{padding:7px 8px;color:var(--tc);border-top:1px solid var(--bd)}
.ord-pcard__stock{color:var(--ts);font-size:11px}
.ord-pcard__tosend{color:var(--pci)}
.ord-pcard__done{color:var(--ts);font-weight:400}
.ord-card2__ship
.ord-card2__tosend b
.ord-card2__shipped
.ord-pay{padding:8px 0}
.ord-shiplog{padding:8px 12px}
.ord-shiplog__row{background:var(--cd);border-radius:8px;padding:8px 10px;margin-bottom:8px;box-shadow:var(--sh)}
.ord-shiplog__name{font-size:14px;font-weight:600;color:var(--tc);margin-bottom:4px}
.ord-shiplog__meta{color:var(--ts);font-weight:400;font-size:12px}
.ord-shiplog__bar{height:6px;background:var(--bd);border-radius:4px;overflow:hidden;margin:4px 0}
.ord-shiplog__fill{height:100%;background:var(--pc);border-radius:4px}
.ord-shiplog__txt{font-size:12px;color:var(--ts)}
.ord-bar{display:flex;flex-wrap:wrap;gap:8px;padding:8px 12px;box-sizing:border-box}
.ord-bar--sec{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-top:0;padding-bottom:4px}
.ord-bar--sec>*{margin-top:0!important;width:auto!important}

/* ===== #148（2026-09-25）打印两种选择的样式 =====
 * 打印页工具栏：自定义版式 / 系统版式 二选一（只有存在版式时才出现） */
.pd-mode-sw{margin:0 4px}
.pd-mode-sw .el-radio-button__inner{padding:5px 10px;font-size:12px;line-height:1.4}
/* 窄屏按 §42/§76 的 44px 触摸下限（本条在 07-print.css，加载早于 14-ui-unify，
   但选择器特异度更高，不会被那边的 .el-button 规则盖掉） */
@media(max-width:768px){.pd-mode-sw .el-radio-button__inner{min-height:44px;display:inline-flex;align-items:center}}
/* #562 稿件的纸档与页签当前档不一致时的说明条：这一张交回系统版式那条分支排，
   但必须把原因说出来（静默回落等于用户以为稿子没了）。--wc 只描边，文字用警示色的墨水档 --wci
   —— 主色/强调色当墨水那条判据（#364）不认实心底之外的用法。 */
.pd-mismatch{margin:2px 12px 6px;padding:6px 10px;font-size:12px;line-height:1.6;
  border:1px solid var(--wc);border-radius:8px;background:rgba(230,162,60,.12);color:var(--wci)}
/* 打印中心弹层：这一张交回系统版式那条分支排时的说明条（#562 那条 pd-mismatch 的同族）。
   旧版这里还有一条 .pc-mode-note —— 它服务的「版式生效就把发送到打印机置灰」分支在 #228
   （设备任务改吃稿件）之后已经删掉了，那条规则留着就是死 CSS（dead_css_scan 的 0 基线）。 */
