/* Dreem Scan — scanner widget. Address form → cinematic scan stage → result
   (handed to scan-render.js). Vertical-agnostic; styled entirely by the skin
   tokens (--ds-* set on the .dsw root), so it reskins per site like everything else. */
.dsw{display:block;font-family:var(--ds-font,inherit);color:var(--ds-text)}
.dsw-form{display:flex;gap:8px;background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);padding:8px}
.dsw-input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ds-text);font-size:16px;padding:10px 12px;font-family:inherit}
.dsw-input::placeholder{color:var(--ds-muted)}
.dsw-btn{border:none;border-radius:calc(var(--ds-radius) - 4px);background:var(--ds-accent);color:#fff;font-weight:500;font-size:14px;padding:0 18px;cursor:pointer;font-family:inherit;white-space:nowrap}
.dsw-shake{animation:dsw-shake .4s}
@keyframes dsw-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

/* cinematic live-satellite scan stage */
.dsw-stage{position:relative;width:100%;height:clamp(380px,54vh,580px);border-radius:calc(var(--ds-radius) + 2px);overflow:hidden;background:#05070a;border:1px solid var(--ds-line);box-shadow:inset 0 0 0 1px rgba(94,233,255,.08);animation:dsw-stage-in .5s ease both}
.dsw-map{position:absolute;inset:0;z-index:1}
.dsw-map .gm-style img{filter:saturate(1.06) contrast(1.05)}
.dsw-map .gmnoprint,.dsw-map .gm-style-cc{opacity:.32}
.dsw-sat{position:absolute;inset:0;background-size:cover;background-position:center;z-index:1}
.dsw-grid{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:.4;background-image:linear-gradient(rgba(94,233,255,.22) 1px,transparent 1px),linear-gradient(90deg,rgba(94,233,255,.22) 1px,transparent 1px);background-size:42px 42px}
.dsw-line{position:absolute;left:0;right:0;top:0;height:2px;z-index:3;background:linear-gradient(90deg,transparent,#5ee9ff,transparent);box-shadow:0 0 16px 3px rgba(94,233,255,.6);animation:dsw-scanline 2.2s ease-in-out infinite}
.dsw-reticle{position:absolute;left:50%;top:50%;width:66px;height:66px;z-index:4;transform:translate(-50%,-50%);border:1px solid rgba(94,233,255,.75);border-radius:50%;box-shadow:0 0 0 6px rgba(94,233,255,.08);animation:dsw-ping 1.7s ease-out infinite}
.dsw-reticle span{position:absolute;background:rgba(170,240,255,.85)}
.dsw-reticle span:nth-child(1){left:50%;top:-12px;bottom:-12px;width:1px;transform:translateX(-50%)}
.dsw-reticle span:nth-child(2){top:50%;left:-12px;right:-12px;height:1px;transform:translateY(-50%)}
.dsw-locked .dsw-reticle{width:130px;height:130px;border-color:#5ee9ff;box-shadow:0 0 0 6px rgba(94,233,255,.12),0 0 26px rgba(94,233,255,.4);animation:dsw-lock .5s ease}
.dsw-bracket{position:absolute;z-index:5;width:28px;height:28px;border:2px solid #5ee9ff;opacity:.9;filter:drop-shadow(0 0 4px rgba(94,233,255,.6))}
.dsw-bracket.tl{left:12px;top:12px;border-right:0;border-bottom:0}
.dsw-bracket.tr{right:12px;top:12px;border-left:0;border-bottom:0}
.dsw-bracket.bl{left:12px;bottom:12px;border-right:0;border-top:0}
.dsw-bracket.br{right:12px;bottom:12px;border-left:0;border-top:0}
.dsw-hud{position:absolute;left:12px;top:12px;z-index:6;display:flex;gap:10px;align-items:center;font:11px/1.4 var(--ds-mono,ui-monospace,SFMono-Regular,Menlo,monospace);color:#9fd9ea;background:rgba(0,0,0,.45);padding:5px 10px;border-radius:8px;letter-spacing:.03em}
.dsw-roof{color:#5ee9ff;font-weight:700;padding-left:8px;border-left:1px solid rgba(94,233,255,.3)}
.dsw-status{position:absolute;left:12px;bottom:18px;z-index:6;display:flex;align-items:center;gap:8px;font-size:11.5px;font-family:var(--ds-mono,ui-monospace,SFMono-Regular,Menlo,monospace);background:rgba(0,0,0,.5);color:#dbe7ee;padding:5px 11px;border-radius:999px;letter-spacing:.05em;text-transform:uppercase}
.dsw-dot{width:8px;height:8px;border-radius:50%;background:#5ee9ff;box-shadow:0 0 8px #5ee9ff;animation:dsw-blink 1s infinite}
.dsw-bar{position:absolute;left:0;right:0;bottom:0;height:3px;z-index:7;background:rgba(255,255,255,.08)}
.dsw-bar>i{display:block;height:100%;width:0;background:linear-gradient(90deg,#5ee9ff,#39d2e7);box-shadow:0 0 10px #5ee9ff;transition:width .5s ease}
.dsw-err{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);padding:18px;color:var(--ds-text)}
.dsw-again{display:block;margin:14px auto 0;background:transparent;border:1px solid var(--ds-line);color:var(--ds-text);border-radius:999px;padding:8px 16px;font-size:13px;cursor:pointer;font-family:inherit}

@keyframes dsw-stage-in{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}
@keyframes dsw-scanline{0%{top:0}50%{top:calc(100% - 2px)}100%{top:0}}
@keyframes dsw-ping{0%{box-shadow:0 0 0 0 rgba(94,233,255,.4)}100%{box-shadow:0 0 0 22px rgba(94,233,255,0)}}
@keyframes dsw-lock{0%{transform:translate(-50%,-50%) scale(1.55);opacity:0}100%{transform:translate(-50%,-50%) scale(1);opacity:1}}
@keyframes dsw-blink{50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.dsw-line,.dsw-reticle,.dsw-dot{animation:none}}
