/* States occupy the photo's existing box; no wrappers, cropping or layout shifts. */
.photo-host{position:relative}
img.photo-pending{opacity:0!important}
img.photo-reserved{aspect-ratio:4/3;object-fit:contain!important}
.photo-state{position:absolute;z-index:6;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:14px;background:#171b18;color:#faf9f5;text-align:center;text-shadow:none;pointer-events:none;overflow:hidden}
.photo-state[hidden],.photo-retry[hidden]{display:none!important}
.photo-state-message{font:500 14px/1.5 Arial,sans-serif;color:#faf9f5;letter-spacing:0;text-transform:none}
.photo-state[data-state="loading"] .photo-state-message:before,.photo-state[data-state="slow"] .photo-state-message:before{content:"";display:block;margin:0 auto 10px;width:14px;height:14px;border:2px solid #ffffff40;border-top-color:#d5bc82;border-radius:50%;animation:photo-loading .9s linear infinite}
.photo-retry{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;max-width:100%;padding:10px 16px;border:1px solid #d5bc82;background:#faf9f5;color:#121414!important;font:600 14px/1.4 Arial,sans-serif;letter-spacing:0;text-transform:none;text-decoration:none;cursor:pointer;pointer-events:auto}
.photo-retry:focus-visible{outline:3px solid #d5bc82;outline-offset:3px}
.photo-state-small{padding:3px;gap:0}.photo-state-small .photo-state-message{font-size:10px}.photo-state-small:has(.photo-retry:not([hidden])) .photo-state-message{display:none}.photo-state-small .photo-retry{padding:6px;font-size:11px;width:100%}
@keyframes photo-loading{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.photo-state-message:before{animation:none!important}}
/* The same full-size stage remains in place while saved-project photos arrive. */
.shortlist-photo .shortlist-photo-stage{height:min(56svh,620px);aspect-ratio:auto}
@media(max-width:700px){.shortlist-photo .shortlist-photo-stage{height:clamp(140px,34svh,340px)}}
/* Long fallback names must not widen the corporate-mark grid if a logo fails. */
.client-marks>span{min-width:0}.client-marks img{max-width:100%}
.shortlist-photo-status p{color:#faf9f5!important}
.shortlist-photo-status button{min-height:44px;border:1px solid #d5bc82;color:#faf9f5}
/* Thumbnail captions also use spans; keep their rules off the recovery controls. */
.photo-state .photo-state-message{position:static;background:transparent;padding:0;color:#faf9f5;font:500 14px/1.5 Arial,sans-serif}
.photo-state .photo-retry{position:static;background:#faf9f5;color:#121414!important;padding:10px 16px;font:600 14px/1.4 Arial,sans-serif}
.album-thumbnails .photo-state{padding:3px;background:#171b18}
.photo-state-small .photo-state-message{font-size:10px}.photo-state-small .photo-retry{padding:6px;font-size:11px}
