/* ===== Gallery (相册/素材库) shared UI ===== */
.gal-fab{position:fixed;right:18px;bottom:18px;z-index:9000;font-family:'Press Start 2P',monospace;font-size:11px;background:var(--red,#e01a2b);color:#fff;border:3px solid #fff;padding:13px 16px;cursor:pointer;box-shadow:4px 4px 0 #000;transition:.1s}
.gal-fab:hover{transform:translate(-1px,-1px);box-shadow:5px 5px 0 #000}
.gal-fab .gal-c{font-family:'VT323',monospace;font-size:15px;opacity:.85;margin-left:6px}
.gal-mask{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9998;display:none}
.gal-mask.on{display:block}
.gal-modal{position:fixed;inset:2.5% 1.5%;z-index:9999;background:var(--panel,#161616);border:4px solid var(--red,#e01a2b);box-shadow:8px 8px 0 #000;display:none;flex-direction:column;overflow:hidden}
.gal-modal.on{display:flex}
/* when a side panel (分享/导出/反扒) is open, shrink modal so the grid isn't covered */
body.gal-panel-open .gal-modal{right:calc(1.5% + min(440px,94vw))}
@media(max-width:900px){body.gal-panel-open .gal-modal{display:none}}
.gal-head{display:flex;align-items:center;gap:9px;padding:12px 14px;border-bottom:3px solid var(--line,#333);flex-wrap:wrap}
.gal-head h3{font-family:'Press Start 2P',monospace;font-size:12px;color:#fff;margin:0}
.gal-head .sp{flex:1}
.gal-search{font-family:'VT323',monospace;font-size:17px;background:#000;color:#fff;border:2px solid var(--line,#444);padding:7px 10px;width:200px}
.gal-search:focus{border-color:var(--red,#e01a2b);outline:none}
.gal-btn{font-family:'Press Start 2P',monospace;font-size:9px;background:var(--ink,#222);color:#fff;border:2px solid var(--line,#444);padding:9px 10px;cursor:pointer;white-space:nowrap}
.gal-btn:hover{border-color:#fff}
.gal-btn.red{background:var(--red,#e01a2b);border-color:#fff}
.gal-btn.on{background:var(--red,#e01a2b);border-color:#fff}
.gal-body{flex:1;display:flex;min-height:0}
.gal-side{width:210px;border-right:3px solid var(--line,#333);overflow-y:auto;padding:12px 10px;flex-shrink:0}
.gal-side h4{font-family:'Press Start 2P',monospace;font-size:9px;color:#fff;opacity:.8;margin:14px 0 8px}
.gal-side h4:first-child{margin-top:0}
.gal-col{font-family:'VT323',monospace;font-size:17px;color:#fff;padding:7px 9px;cursor:pointer;border:2px solid transparent;display:flex;align-items:center;gap:6px;justify-content:space-between}
.gal-col:hover{border-color:var(--line,#444)}
.gal-col.active{background:var(--red,#e01a2b);border-color:#fff}
.gal-col .ops{display:flex;gap:4px;opacity:0}.gal-col:hover .ops{opacity:.7}
.gal-col .ops span:hover{opacity:1;color:#fff}
.gal-grouphdr{grid-column:1/-1;font-family:'Press Start 2P',monospace;font-size:9px;color:#ffc000;padding:10px 2px 4px;border-bottom:1px dashed var(--line,#444);margin-bottom:4px}
.gal-grid{flex:1;overflow-y:auto;padding:14px;display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:12px;align-content:start}
.gal-card{position:relative;border:3px solid var(--line,#333);background:#000;box-shadow:3px 3px 0 #000;overflow:hidden;display:flex;flex-direction:column;height:max-content}
.gal-card .imgwrap{position:relative;flex:0 0 auto}
.gal-card.sel{border-color:#ffc000;box-shadow:0 0 0 3px #ffc000}
.gal-card .imgwrap{position:relative;background:#0a0a0a}
.gal-card img{width:100%;height:175px;object-fit:cover;display:block;cursor:zoom-in;background:#0a0a0a}
.gal-card .gal-zoom{position:absolute;bottom:6px;right:6px;font-family:'VT323',monospace;font-size:14px;background:rgba(0,0,0,.78);color:#fff;border:2px solid #fff;padding:2px 8px;cursor:pointer;opacity:0;transition:.12s}
.gal-card:hover .gal-zoom{opacity:1}
.gal-card .gal-zoom:hover{background:var(--red,#e01a2b)}
.gal-card.starred{border-color:#ffc000}
/* always-visible star button, top-right corner of each card */
.gal-starbtn{position:absolute;top:6px;right:6px;z-index:3;width:30px;height:30px;line-height:26px;text-align:center;font-size:18px;cursor:pointer;background:rgba(0,0,0,.6);border:2px solid #fff;color:#bbb;padding:0;transition:.1s}
.gal-starbtn:hover{transform:scale(1.12);color:#ffc000;border-color:#ffc000}
.gal-starbtn.on{color:#ffc000;background:#000;border-color:#ffc000;text-shadow:0 0 8px #ffc000}
/* action bar sits at the BOTTOM of the image, shows on hover */
.gal-card .ov{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;justify-content:center;gap:4px;padding:6px 4px;background:linear-gradient(transparent,rgba(0,0,0,.85));opacity:0;transition:.12s;pointer-events:none}
.gal-card:hover .ov,.gal-card.sel .ov{opacity:1}
.gal-ic{background:rgba(0,0,0,.85);border:2px solid #fff;color:#fff;font-size:14px;width:28px;height:28px;line-height:24px;text-align:center;cursor:pointer;font-family:'VT323',monospace;pointer-events:auto;flex:0 0 auto}
.gal-ic:hover{background:var(--red,#e01a2b)}
.gal-chk{position:absolute;top:6px;left:6px;width:22px;height:22px;z-index:4;cursor:pointer;pointer-events:auto;opacity:.85;accent-color:#ffc000}
.gal-card:hover .gal-chk,.gal-card.sel .gal-chk{opacity:1}
.gal-card .meta{font-family:'VT323',monospace;font-size:16px;line-height:1.25;color:#fff;opacity:.92;padding:5px 7px;border-top:2px solid var(--line,#333);white-space:normal;overflow-wrap:anywhere;word-break:break-word}
.gal-card .note-tag{color:#7fd1ff}
.gal-empty{grid-column:1/-1;font-family:'VT323',monospace;font-size:17px;color:#fff;opacity:.6;text-align:center;padding:40px}
.gal-selbar{display:none;align-items:center;gap:8px;padding:8px 14px;background:#000;border-bottom:2px solid #ffc000;font-family:'VT323',monospace;font-size:15px;color:#ffc000}
.gal-selbar.on{display:flex}
.gal-pop{position:fixed;z-index:10000;background:var(--panel,#161616);border:3px solid var(--red,#e01a2b);box-shadow:5px 5px 0 #000;padding:10px;display:none;min-width:190px;max-height:60vh;overflow:auto}
.gal-pop.on{display:block}
.gal-pop label{display:flex;align-items:center;gap:7px;font-family:'VT323',monospace;font-size:16px;color:#fff;padding:4px 2px;cursor:pointer}
.gal-pop .ttl{font-family:'Press Start 2P',monospace;font-size:8px;color:#fff;opacity:.7;margin-bottom:6px}
.gal-lb{position:fixed;inset:0;z-index:10001;background:rgba(0,0,0,.92);display:none;align-items:center;justify-content:center}
.gal-lb.on{display:flex}
.gal-lb img{max-width:92vw;max-height:84vh;border:4px solid #fff;box-shadow:0 0 40px #000}
.gal-lb .lb-close{position:absolute;top:18px;right:22px;font-family:'Press Start 2P',monospace;font-size:14px;color:#fff;cursor:pointer}
.gal-lb .lb-bar{position:absolute;bottom:20px;display:flex;gap:10px}
.gal-lb .lb-bar a,.gal-lb .lb-bar button{font-family:'Press Start 2P',monospace;font-size:10px;color:#fff;background:var(--red,#e01a2b);border:3px solid #fff;padding:11px 15px;text-decoration:none;cursor:pointer}
@media(max-width:640px){.gal-side{width:140px}.gal-card img{height:120px}.gal-search{width:130px}}

/* ===== 反扒参数面板 ===== */
.gal-analyze{position:fixed;top:0;right:0;width:min(440px,94vw);height:100%;background:var(--panel,#161616);border-left:4px solid var(--red,#e01a2b);box-shadow:-8px 0 0 #000;z-index:10002;transform:translateX(110%);transition:transform .22s;display:flex;flex-direction:column}
.gal-analyze.on{transform:translateX(0)}
.ga-head{display:flex;align-items:center;justify-content:space-between;padding:14px;border-bottom:3px solid var(--line,#333);font-family:'Press Start 2P',monospace;font-size:11px;color:#fff}
.ga-x{background:var(--red,#e01a2b);color:#fff;border:2px solid #fff;font-family:'Press Start 2P';font-size:9px;padding:7px 10px;cursor:pointer}
.ga-body{flex:1;overflow-y:auto;padding:14px}
.ga-thumb{width:100%;max-height:230px;object-fit:contain;background:#000;border:2px solid var(--line,#333);margin-bottom:12px}
.ga-field{margin-bottom:12px}
.ga-lbl{font-family:'Press Start 2P',monospace;font-size:9px;color:#ffc000;margin-bottom:5px;display:flex;align-items:center;gap:8px}
.ga-copy{font-family:'VT323',monospace;font-size:14px;background:var(--ink,#222);color:#fff;border:2px solid var(--line,#444);padding:2px 8px;cursor:pointer}
.ga-copy:hover{border-color:#fff}
.ga-field textarea{width:100%;background:#000;color:#fff;border:2px solid var(--line,#444);font-family:'VT323',monospace;font-size:16px;padding:8px;resize:vertical;min-height:70px;line-height:1.4}
.ga-note{font-family:'VT323',monospace;font-size:14px;color:#fff;opacity:.6;text-align:center;margin-top:8px}
.ga-loading{font-family:'VT323',monospace;font-size:17px;color:#fff;text-align:center;padding:40px 14px;line-height:1.6}

/* ===== 反扒上传框 ===== */
.unpack-row{margin-top:10px}
.unpack-zone{border:3px dashed var(--line,#555);background:rgba(255,255,255,.02);padding:18px 14px;text-align:center;cursor:pointer;transition:.12s}
.unpack-zone:hover,.unpack-zone.dragover{border-color:var(--red,#e01a2b);background:rgba(224,26,43,.07)}
.unpack-zone.busy{opacity:.7;pointer-events:none}
.unpack-zone .upload-ic{font-family:'Press Start 2P',monospace;font-size:13px;color:var(--red,#e01a2b);display:block;margin-bottom:8px}
.unpack-zone p{font-family:'VT323',monospace;font-size:16px;color:#fff;margin:0;line-height:1.5}
.unpack-zone small{opacity:.65;font-size:14px}
.lb-bar button{font-family:'Press Start 2P',monospace;font-size:10px;color:#fff;background:var(--red,#e01a2b);border:3px solid #fff;padding:11px 15px;cursor:pointer}

/* 反扒详细参数表 */
.ga-ptable{width:100%;border-collapse:collapse;font-family:'VT323',monospace;font-size:15px;color:#fff}
.ga-ptable td{border:1px solid var(--line,#333);padding:5px 8px;vertical-align:top}
.ga-ptable .pk{color:#ffc000;white-space:nowrap;width:90px;background:rgba(255,255,255,.03)}
.ga-ptable .pv{line-height:1.4}

/* SKU 搜索结果多选 */
.sku-bar,.as-sku-bar{display:flex;align-items:center;gap:10px;margin:6px 0}
.sku-selall,.as-sku-selall{font-family:'Press Start 2P',monospace;font-size:9px;background:var(--red,#e01a2b);color:#fff;border:2px solid #fff;padding:8px 10px;cursor:pointer}
.sku-selall:hover,.as-sku-selall:hover{filter:brightness(1.1)}
.sku-bar small,.as-sku-bar small{font-family:'VT323',monospace;font-size:14px;color:#fff;opacity:.6}
.sku-card,.as-sku-card{position:relative}
.sku-chk,.as-sku-chk{position:absolute;top:5px;left:5px;width:20px;height:20px;z-index:3;cursor:pointer;accent-color:#ffc000}
/* 生图结果区多选 */
.res-selbar{display:flex;align-items:center;gap:8px;margin:8px 0;font-family:'VT323',monospace;font-size:15px;color:#fff}
.res-selbar button{font-family:'Press Start 2P',monospace;font-size:9px;background:var(--ink,#222);color:#fff;border:2px solid var(--line,#444);padding:8px 10px;cursor:pointer}
.res-selbar button.red{background:var(--red,#e01a2b);border-color:#fff}
.res-chk{position:absolute;top:6px;left:6px;width:20px;height:20px;z-index:3;cursor:pointer;accent-color:#ffc000}

/* 货号历史生成图条 */
.sku-history{margin:8px 0}
.sku-hist-title{font-family:'VT323',monospace;font-size:15px;color:#ffc000;margin-bottom:6px}
.sku-hist-grid{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px}
.sku-hist-card{position:relative;flex:0 0 auto;width:90px;height:112px;border:2px solid var(--line,#444);background:#000}
.sku-hist-card img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.sku-hist-use{position:absolute;bottom:3px;right:3px;font-family:'VT323',monospace;font-size:14px;background:var(--red,#e01a2b);color:#fff;border:2px solid #fff;padding:0 6px;cursor:pointer;line-height:1.4}
.sku-hist-use:hover{filter:brightness(1.15)}

/* 分享中的集合:🔗 高亮 */
.gal-col .ops [data-sharecol].on{color:#2ecc71;text-shadow:0 0 6px #2ecc71}

/* 导出/水印面板 */
.ep-note{font-family:'VT323',monospace;font-size:15px;color:#fff;opacity:.7;margin-bottom:8px}
.ep-sel{width:100%;background:#000;color:#fff;border:2px solid var(--line,#444);font-family:'VT323',monospace;font-size:16px;padding:7px}
.ep-wmlist{margin-top:10px;font-family:'VT323',monospace;font-size:15px;color:#fff;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.ep-wmtag{background:#000;border:2px solid var(--line,#444);padding:3px 8px}
.ep-wmtag b{color:#e01a2b;cursor:pointer;margin-left:4px}

/* 客户通讯录管理 */
.cb-list{display:flex;flex-direction:column;gap:8px}
.cb-item{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;background:#000;border:2px solid var(--line,#444);padding:8px 10px}
.cb-info{display:flex;flex-direction:column;gap:2px;font-family:'VT323',monospace;font-size:16px;color:#fff}
.cb-info b{font-size:17px}.cb-info span{opacity:.85}.cb-info small{opacity:.6;font-size:14px}
.cb-ops{display:flex;gap:4px;flex:0 0 auto}
.cb-ops button{background:var(--ink,#222);color:#fff;border:2px solid var(--line,#444);font-size:14px;padding:3px 8px;cursor:pointer}
.cb-ops button:hover{border-color:var(--red,#e01a2b)}
