/* === Zoom / Preview Modal === */
.modal-card.wide{max-width:1100px;max-height:92vh;display:flex;flex-direction:column}
.modal-card.wide .modal-body{overflow-y:auto;flex:1}
.zoom-grid{display:grid;grid-template-columns:1fr 320px;gap:20px;align-items:start}
@media (max-width:900px){.zoom-grid{grid-template-columns:1fr}}
.zoom-stage{
  position:relative;background:var(--bg-tint);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px;display:flex;align-items:center;justify-content:center;overflow:hidden;
}
.zoom-stage .stage-inner{
  position:relative;display:inline-block;max-width:100%;
}
.zoom-stage img,.zoom-stage svg{
  display:block;border-radius:4px;
  max-width:min(540px,100%);max-height:min(72vh,640px);
  width:auto;height:auto;object-fit:contain;
}
.zoom-highlight{
  position:absolute;border:3px solid #DC2626;border-radius:3px;pointer-events:none;
  box-shadow:0 0 0 9999px rgba(15,23,42,0.35);
  animation:zoomPulse 1.8s ease-in-out infinite;
  box-sizing:border-box;
}
.zoom-highlight::before{
  content:attr(data-label);position:absolute;top:-26px;left:0;
  background:#DC2626;color:#fff;font-size:11px;font-weight:700;
  padding:3px 8px;border-radius:3px;white-space:nowrap;
}
@keyframes zoomPulse{
  0%,100%{box-shadow:0 0 0 9999px rgba(15,23,42,0.35),0 0 0 0 rgba(220,38,38,0.6)}
  50%{box-shadow:0 0 0 9999px rgba(15,23,42,0.35),0 0 0 8px rgba(220,38,38,0)}
}
/* Edit mode: enable interactivity */
.zoom-highlight.editable{
  pointer-events:auto;cursor:move;animation:none;
  border-color:#2563EB;border-style:dashed;
}
.zoom-highlight.editable::before{background:#2563EB;content:"✋ " attr(data-label);}
.zoom-highlight .rh{
  position:absolute;width:14px;height:14px;background:#2563EB;border:2px solid #fff;
  border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.3);
}
.zoom-highlight .rh.nw{top:-7px;left:-7px;cursor:nwse-resize}
.zoom-highlight .rh.ne{top:-7px;right:-7px;cursor:nesw-resize}
.zoom-highlight .rh.sw{bottom:-7px;left:-7px;cursor:nesw-resize}
.zoom-highlight .rh.se{bottom:-7px;right:-7px;cursor:nwse-resize}
.zoom-highlight .rh.n{top:-7px;left:50%;margin-left:-7px;cursor:ns-resize}
.zoom-highlight .rh.s{bottom:-7px;left:50%;margin-left:-7px;cursor:ns-resize}
.zoom-highlight .rh.w{top:50%;left:-7px;margin-top:-7px;cursor:ew-resize}
.zoom-highlight .rh.e{top:50%;right:-7px;margin-top:-7px;cursor:ew-resize}
.zoom-highlight.editable .coord{
  position:absolute;bottom:-26px;right:0;background:#2563EB;color:#fff;
  font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:3px;
  font-family:"SF Mono",Consolas,monospace;white-space:nowrap;
}
.zoom-preview{
  position:absolute;overflow:hidden;border:3px solid #16A34A;border-radius:3px;
  box-shadow:0 0 0 9999px rgba(15,23,42,0.35),0 0 0 0 rgba(22,163,74,0.6);
  display:flex;align-items:center;justify-content:center;background:#fff;
}
.zoom-preview img{width:100%;height:100%;object-fit:cover;display:block;border-radius:0}
.zoom-preview::before{
  content:"✓ "attr(data-label);position:absolute;top:-26px;left:0;
  background:#16A34A;color:#fff;font-size:11px;font-weight:700;
  padding:3px 8px;border-radius:3px;white-space:nowrap;z-index:2;
}

.zoom-side{display:flex;flex-direction:column;gap:14px}
.zoom-side .panel{
  background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;
}
.zoom-side h3{font-size:13px;font-weight:700;color:var(--text);margin-bottom:8px;display:flex;align-items:center;gap:6px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.zoom-side .product-name{font-size:14px;font-weight:700;color:var(--primary);margin-bottom:8px}
.zoom-side .spec-list{font-size:12px;color:var(--text-sub);line-height:1.65}
.zoom-side .spec-list li{padding:3px 0;display:flex;justify-content:space-between;gap:8px}
.zoom-side .spec-list .k{color:var(--text-muted);font-weight:600}
.zoom-side .spec-list .v{font-family:"SF Mono",Consolas,monospace;color:var(--text);font-weight:600}

.zoom-upload{
  border:2px dashed var(--border-strong);border-radius:6px;padding:18px 14px;text-align:center;
  background:var(--bg-soft);cursor:pointer;transition:all 0.15s;
  display:flex;flex-direction:column;align-items:center;gap:4px;
}
.zoom-upload:hover,.zoom-upload.dragover{background:var(--accent-bg);border-color:var(--primary)}
.zoom-upload .icon{font-size:24px;line-height:1}
.zoom-upload .title{font-size:12.5px;font-weight:600;color:var(--text)}
.zoom-upload .sub{font-size:10.5px;color:var(--text-muted)}
.zoom-upload input{display:none}

.zoom-result{font-size:12px;line-height:1.6}
.zoom-result.ok{color:var(--success)}
.zoom-result.fail{color:var(--warn)}
.zoom-result .row{display:flex;justify-content:space-between;padding:3px 0}
.zoom-result .label{color:var(--text-muted);font-weight:600}
.zoom-result .value{color:var(--text);font-family:"SF Mono",Consolas,monospace;font-weight:600}
.zoom-result .errors{
  background:var(--warn-bg);border:1px solid #FECACA;border-radius:5px;
  padding:8px 10px;margin-top:8px;color:#7F1D1D;
}
.zoom-result .errors strong{color:#991B1B}
.zoom-result .errors ul{margin:4px 0 0 18px;font-size:11.5px}
.zoom-result .success-banner{
  background:var(--success-bg);border:1px solid #BBF7D0;border-radius:5px;
  padding:8px 10px;color:#15803D;font-weight:600;margin-top:8px;
}
.zoom-actions{display:flex;gap:6px;margin-top:8px}
.zoom-actions button{
  flex:1;padding:7px 10px;font-size:11.5px;border:1px solid var(--border);background:#fff;
  color:var(--text-sub);border-radius:5px;cursor:pointer;font-family:inherit;font-weight:500;
}
.zoom-actions button.primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.zoom-actions button.primary:hover{background:var(--primary-hover)}
.zoom-actions button:hover:not(.primary){background:var(--bg-soft);color:var(--text)}

/* Make mockup-slot clickable */
.mockup-slot{position:relative}
.mockup-slot .zoom-trigger{
  position:absolute;top:8px;right:8px;background:rgba(15,23,42,0.78);color:#fff;
  border:none;padding:5px 9px;border-radius:4px;font-size:10.5px;font-weight:600;
  cursor:pointer;opacity:0;transition:opacity 0.15s;display:flex;align-items:center;gap:4px;
  font-family:inherit;z-index:2;
}
.mockup-slot:hover .zoom-trigger{opacity:1}
.mockup-slot .zoom-trigger:hover{background:rgba(15,23,42,0.95)}
.mockup-slot img.real,.mockup-slot .fb{cursor:zoom-in}
