/* Shared address-search loader ("resolution engine") for the demo pages.
   Techy, engaging wait state — NO fabricated metrics. Only honest signals:
   a staged pipeline, a real elapsed timer, and a random trace token (UI only).
   Used by parser / verification / geocoding demo pages via address-loader.js. */

/* Modal overlay: dim + blur the page, centre the panel. */
.al-overlay{
  position:fixed; inset:0; z-index:1000; display:flex; align-items:center; justify-content:center;
  padding:24px; opacity:0; transition:opacity .2s ease;
  background:rgba(3,8,16,.72); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
}
.al-overlay.al-show{opacity:1}
body.al-modal-open{overflow:hidden}

.al-panel{
  --al-bg:#0b1626; --al-bg2:#0e1c30; --al-line:#1a2c44; --al-ink:#e6f0fb;
  --al-mut:#7f97b3; --al-blue:#38a3ff; --al-cyan:#22d3ee; --al-ok:#2ee6a6;
  width:100%; max-width:580px; max-height:88vh; overflow:auto;
  background:linear-gradient(180deg,var(--al-bg),var(--al-bg2));
  border:1px solid var(--al-line); border-radius:16px;
  box-shadow:0 30px 80px rgba(0,0,0,.6);
  font-family:'Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  color:var(--al-ink);
  animation:al-pop .26s cubic-bezier(.2,.9,.3,1.3);
}
@keyframes al-pop{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.al-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:12px 20px;border-bottom:1px solid var(--al-line)}
.al-meta{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--al-mut);display:flex;gap:14px;flex-wrap:wrap}
.al-meta b{color:var(--al-cyan);font-weight:500}
.al-elapsed{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;color:var(--al-cyan);text-align:right}
.al-elapsed small{display:block;color:var(--al-mut);font-size:9px;letter-spacing:.14em}
.al-qline{padding:14px 20px 4px}
.al-qlabel{font-family:ui-monospace,monospace;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--al-mut)}
.al-query{font-family:ui-monospace,monospace;font-size:14.5px;font-weight:600;color:var(--al-ink);margin-top:3px;word-break:break-word}

.al-pipe{padding:6px 20px 16px}
.al-node{display:grid;grid-template-columns:34px 1fr;gap:14px;padding:13px 0;position:relative;align-items:start}
.al-node:not(:last-child)::after{content:"";position:absolute;left:16px;top:42px;bottom:-13px;width:2px;
  background:repeating-linear-gradient(180deg,var(--al-line) 0 6px,transparent 6px 12px)}
.al-node.is-active:not(:last-child)::after{background:repeating-linear-gradient(180deg,var(--al-cyan) 0 6px,transparent 6px 12px);animation:al-flow .6s linear infinite}
.al-node.is-done:not(:last-child)::after{background:var(--al-ok)}
@keyframes al-flow{to{background-position:0 12px}}
.al-orb{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:15px;z-index:1;
  border:2px solid var(--al-line);color:var(--al-mut);background:var(--al-bg);transition:.3s}
.al-node.is-active .al-orb{border-color:var(--al-cyan);color:var(--al-cyan);box-shadow:0 0 0 5px rgba(34,211,238,.14);animation:al-pz 1.2s ease-in-out infinite}
.al-node.is-done .al-orb{border-color:var(--al-ok);background:var(--al-ok);color:#04121e}
@keyframes al-pz{50%{box-shadow:0 0 0 11px transparent}}
.al-ntitle{font-weight:600;font-size:14.5px;color:var(--al-ink)}
.al-node.is-pending .al-ntitle{color:var(--al-mut)}
.al-nsub{font-size:12.5px;color:var(--al-mut);margin-top:2px;max-height:0;opacity:0;overflow:hidden;transition:.35s}
.al-node.is-active .al-nsub{max-height:44px;opacity:1}
.al-spin{width:13px;height:13px;border-radius:50%;border:2px solid rgba(56,163,255,.25);border-top-color:var(--al-cyan);display:inline-block;vertical-align:-2px;margin-right:7px;animation:al-sp .7s linear infinite}
@keyframes al-sp{to{transform:rotate(360deg)}}

.al-console{margin:0 20px 16px;background:#040a13;border:1px solid var(--al-line);border-radius:10px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:#9fb6d2;padding:10px 13px;min-height:60px;max-height:112px;overflow:hidden}
.al-ln{white-space:pre;opacity:0;transform:translateY(3px);animation:al-in .25s forwards}
.al-t{color:#41597a}.al-c{color:var(--al-cyan)}.al-g{color:var(--al-ok)}
@keyframes al-in{to{opacity:1;transform:none}}

.al-overlay.al-hiding{opacity:0;transition:opacity .35s ease}
.al-overlay.al-hiding .al-panel{transform:translateY(-4px) scale(.98);transition:transform .35s ease}

@media (prefers-reduced-motion: reduce){
  .al-node.is-active .al-orb,.al-spin,.al-node.is-active:not(:last-child)::after{animation:none}
  .al-panel{animation:none}
}
