/* Copyright 2026 CodifyAI S.R.L. — OPL-1 */
/* A company enters the estate as light. There are no panels, cards or wizard
   chrome in this layer: approach, identity and outcome all inhabit the same
   projected galaxy as the public homepage. */
#visitor-signal{position:fixed;z-index:90;inset:0;overflow:hidden;pointer-events:none;color:var(--ink,#f2f5ff);
  font-family:var(--mono,"IBM Plex Mono",monospace);perspective:1400px;--dock-x:50%;--dock-y:52%}
#visitor-signal::before{content:"";position:absolute;inset:0;opacity:0;pointer-events:none;
  background:radial-gradient(circle at var(--dock-x) var(--dock-y),rgba(109,155,255,.16),transparent 19%),
    radial-gradient(ellipse at 64% 46%,transparent 0 24%,rgba(2,4,10,.16) 52%,rgba(2,4,10,.28));
  transition:opacity 1.2s cubic-bezier(.16,0,.13,1)}
#visitor-signal.is-locking::before,#visitor-signal.is-docked::before{opacity:1}
#visitor-signal::after{content:"";position:absolute;z-index:3;left:var(--dock-x);top:var(--dock-y);width:min(760px,58vw);height:270px;
  pointer-events:none;opacity:0;transform:translate(-50%,-50%);background:radial-gradient(ellipse,rgba(2,4,10,.94) 0 28%,rgba(2,4,10,.7) 50%,transparent 78%);
  filter:blur(8px);transition:opacity .8s ease}
#visitor-signal.is-nearfield::after{opacity:.92}#visitor-signal.has-result::after{opacity:.24}
#visitor-signal.is-closing{opacity:0;transition:opacity .42s ease}
html.signal-arrival-departed #holo .slab.gate{opacity:.22!important;filter:brightness(.42);transition:opacity .8s ease,filter .8s ease}
/* Dim the existing journey as a composited layer. Never force opacity on each
   child: hidden stations and holograms use inline opacity for camera state, and
   overriding that value makes the entire journey appear at once. */
html.signal-arrival-near #holo{opacity:.16;filter:saturate(.72) brightness(.72);transition:opacity 1s ease,filter 1s ease}
html.signal-arrival-near #stations{opacity:.22;transition:opacity .7s ease}
html.signal-arrival-near .rail,
html.signal-arrival-near .path,
html.signal-arrival-near .pill,
html.signal-arrival-near .hint{opacity:0!important;pointer-events:none!important;transition:opacity .45s ease!important}
html.signal-arrival-active .legalbtn{z-index:99!important;opacity:.82!important;pointer-events:auto!important}
html.signal-arrival-active .drawer{z-index:120!important}

.vs-depth{position:absolute;inset:0;overflow:hidden;transform-style:preserve-3d}

/* The approach resolves into exactly the same kind of luminous system star as
   the estate. No Saturn icon and no foreign illustration language. */
.vs-arrival-star{position:absolute;left:50%;top:50%;z-index:4;width:16px;height:16px;margin:-8px;opacity:0;
  transform-style:preserve-3d;will-change:transform,opacity}
.is-locking .vs-arrival-star,.is-docked .vs-arrival-star{opacity:1;transform:translate3d(0,-6vh,0) scale(.72);
  transition:opacity .28s cubic-bezier(.16,0,.13,1)}
.vs-core{position:absolute;inset:0;border-radius:50%;background:#fff;
  box-shadow:0 0 5px #fff,0 0 15px #d7e6ff,0 0 36px var(--acc2,#a8c4ff),0 0 90px rgba(109,155,255,.56)}
.vs-core::before,.vs-core::after{content:"";position:absolute;left:50%;top:50%;pointer-events:none;
  background:linear-gradient(90deg,transparent,#fff,transparent);transform:translate(-50%,-50%)}
.vs-core::before{width:74px;height:1px}.vs-core::after{width:1px;height:74px;background:linear-gradient(180deg,transparent,#fff,transparent)}
.vs-corona{position:absolute;inset:-29px;border-radius:50%;opacity:.72;
  background:repeating-conic-gradient(from 0deg,rgba(168,196,255,.23) 0 .45deg,transparent .45deg 13deg);
  -webkit-mask:radial-gradient(circle,transparent 0 26%,#000 28%,transparent 67%);mask:radial-gradient(circle,transparent 0 26%,#000 28%,transparent 67%);
  animation:vs-corona 22s linear infinite}
.vs-pulse{position:absolute;inset:-8px;border-radius:50%;border:1px solid rgba(218,231,255,.65);opacity:0}
.is-docked .vs-pulse{animation:vs-dock-pulse 3s ease-out infinite}
@keyframes vs-corona{to{transform:rotate(360deg)}}
@keyframes vs-dock-pulse{0%{opacity:.74;transform:scale(.62)}72%,100%{opacity:0;transform:scale(5.2)}}

/* Three broken ellipses reveal the gravitational lens only after arrival. The
   negative masks keep them celestial and incomplete, never UI circles. */
.vs-resonance{position:absolute;left:var(--dock-x);top:var(--dock-y);z-index:2;width:1px;height:1px;opacity:0}
.is-locking .vs-resonance,.is-docked .vs-resonance{opacity:1;transition:opacity .8s ease}
.vs-resonance i{position:absolute;left:0;top:0;border:1px solid rgba(168,196,255,.16);border-radius:50%;
  transform:translate(-50%,-50%) rotate(var(--r));animation:vs-resonance 26s linear infinite}
.vs-resonance i:nth-child(1){width:min(25vw,390px);height:min(12vw,154px);--r:-17deg}
.vs-resonance i:nth-child(2){width:min(42vw,680px);height:min(20vw,250px);--r:13deg;opacity:.62;animation-direction:reverse;animation-duration:37s}
.vs-resonance i:nth-child(3){width:min(60vw,960px);height:min(28vw,370px);--r:-8deg;opacity:.26;animation-duration:48s}
.vs-resonance b{position:absolute;width:min(38vw,620px);height:1px;left:0;top:0;transform:rotate(-12deg);transform-origin:left;
  background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(168,196,255,.28) 28%,transparent 82%);
  box-shadow:0 0 10px rgba(168,196,255,.34)}
@keyframes vs-resonance{to{transform:translate(-50%,-50%) rotate(calc(var(--r) + 360deg))}}

.vs-dock-field{position:absolute;left:var(--dock-x);top:var(--dock-y);width:1px;height:1px;opacity:0}
.vs-dock-field::before,.vs-dock-field::after{content:"";position:absolute;left:0;top:0;border-radius:50%;
  border:1px solid rgba(204,220,255,.48);transform:translate(-50%,-50%) scale(.08)}
.vs-dock-field::before{width:82px;height:82px}.vs-dock-field::after{width:210px;height:210px;border-color:rgba(168,196,255,.18)}
.vs-dock-field i,.vs-dock-field b{display:none}
.is-locking .vs-dock-field,.is-docked .vs-dock-field{opacity:1}
.is-locking .vs-dock-field::before{animation:vs-capture-ring .92s cubic-bezier(.16,0,.13,1) both}
.is-locking .vs-dock-field::after{animation:vs-capture-ring 1.28s .08s cubic-bezier(.16,0,.13,1) both}
.is-docked .vs-dock-field::before,.is-docked .vs-dock-field::after{opacity:.09;transform:translate(-50%,-50%) scale(1)}
@keyframes vs-capture-ring{0%{opacity:0;transform:translate(-50%,-50%) scale(.05)}38%{opacity:1}
  100%{opacity:.08;transform:translate(-50%,-50%) scale(1)}}
.vs-orbit{display:none}

/* Close is deliberately peripheral: it does not become another button. It sits
   one line ABOVE the legal button — the legal control carries z-index 99 and
   owns the exact corner, so a dismiss underneath it could never be pressed. */
.vs-dismiss{position:absolute;right:clamp(14px,3vw,44px);bottom:clamp(50px,7vh,66px);z-index:9;opacity:0;
  pointer-events:auto;border:0;background:none;color:var(--acc2,#a8c4ff);padding:9px 2px 9px 19px;cursor:pointer;
  font:9.5px var(--mono);letter-spacing:.24em;text-shadow:0 2px 12px #000,0 0 20px rgba(2,4,10,.95);
  transition:color .2s ease,opacity .5s ease}
/* it sits beside a bordered pill on a bright nebula — at 7px in the faintest
   grey it read as debris. Same dot-and-light language as the other controls,
   at a size a person can actually find. */
.vs-dismiss::before{content:"";position:absolute;left:0;top:50%;width:5px;height:5px;border-radius:50%;
  transform:translateY(-50%);background:rgba(190,216,255,.85);
  box-shadow:0 0 6px rgba(168,196,255,.9),0 0 16px rgba(109,155,255,.55)}
.is-docked .vs-dismiss{opacity:1}
.vs-dismiss:hover,.vs-dismiss:focus-visible{color:#fff;outline:none;text-shadow:0 0 14px #a8c4ff,0 2px 12px #000}
.vs-dismiss:hover::before,.vs-dismiss:focus-visible::before{background:#fff;
  box-shadow:0 0 8px #fff,0 0 22px var(--acc2,#a8c4ff)}

/* The registry interaction is a clear workbench laid over the docked star. */
.vs-console{position:absolute;z-index:5;left:var(--dock-x);top:var(--dock-y);width:min(620px,45vw);height:154px;
  box-sizing:border-box;opacity:0;transform:translate(-50%,18px) scale(.94);pointer-events:none;clip-path:circle(0 at 50% 0);
  transition:opacity .82s .08s cubic-bezier(.16,0,.13,1),transform 1.05s cubic-bezier(.16,0,.13,1),
    clip-path 1.1s cubic-bezier(.16,0,.13,1)}
.is-locking .vs-console{opacity:.28;transform:translate(-50%,3px) scale(.98);clip-path:circle(24% at 50% 0)}
.is-docked .vs-console{opacity:1;transform:translate(-50%,0);clip-path:circle(120% at 50% 0);pointer-events:auto}
.vs-console::before{content:"";position:absolute;left:50%;top:43px;width:100%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(168,196,255,.22) 13%,rgba(255,255,255,.72) 50%,rgba(168,196,255,.22) 87%,transparent);
  box-shadow:0 0 14px rgba(109,155,255,.3);transform:translateX(-50%)}
.vs-copy{position:absolute;left:50%;bottom:118px;width:100%;text-align:center;transform:translateX(-50%);transition:opacity .45s ease}
.is-writing .vs-copy{opacity:.42}
.vs-kicker{display:block;margin:0 0 8px;color:var(--acc2,#a8c4ff);font:7px var(--mono);letter-spacing:.32em;text-transform:uppercase;
  text-shadow:0 2px 14px #000,0 0 16px rgba(109,155,255,.6)}
.vs-heading{margin:0;color:#f8faff;font:500 clamp(18px,1.75vw,26px)/1.05 var(--display,var(--sans));letter-spacing:-.035em;
  text-shadow:0 2px 26px #000,0 0 32px rgba(168,196,255,.18)}
.vs-intro{margin:7px 0 0;color:var(--muted,#9aa7c7);font:8px/1.4 var(--mono);letter-spacing:.08em;text-shadow:0 2px 14px #000}

.vs-form{position:absolute;left:50%;top:54px;width:min(540px,43vw);display:grid;grid-template-columns:1fr auto auto;gap:13px;
  align-items:center;transform:translateX(-50%)}
.vs-combobox{position:relative;min-width:0}.vs-input-beacon{position:absolute;left:0;top:50%;width:7px;height:7px;margin-top:-3.5px;
  border-radius:50%;z-index:2;background:#fff;box-shadow:0 0 7px #fff,0 0 18px var(--acc2,#a8c4ff),0 0 34px rgba(109,155,255,.6)}
.is-searching .vs-input-beacon{animation:vs-beacon .7s ease-in-out infinite alternate}
@keyframes vs-beacon{to{opacity:.25;transform:scale(.55)}}
.vs-form input{appearance:none;box-sizing:border-box;width:100%;height:42px;border:0;border-radius:0;background:transparent;color:#fff;
  padding:3px 9px 3px 22px;outline:0;font:12px var(--mono);letter-spacing:.07em;caret-color:#fff;
  text-shadow:0 0 14px rgba(168,196,255,.5),0 2px 16px #000}
.vs-form input::placeholder{color:rgba(154,167,199,.67)}
.vs-beam{position:absolute;left:0;bottom:2px;height:1px;width:var(--vs-beamw,14%);pointer-events:none;
  background:linear-gradient(90deg,#fff,var(--acc2,#a8c4ff) 62%,transparent);box-shadow:0 0 10px rgba(168,196,255,.7);
  transition:width .28s cubic-bezier(.16,0,.13,1),box-shadow .3s ease}
.is-armed .vs-beam{box-shadow:0 0 16px rgba(168,196,255,.95)}
.vs-voice,.vs-lock{appearance:none;border:0;background:none;color:var(--acc2,#a8c4ff);cursor:pointer;padding:8px 2px;
  font:7px var(--mono);letter-spacing:.2em;text-transform:uppercase;white-space:nowrap;text-shadow:0 0 14px rgba(109,155,255,.6)}
.vs-voice{display:flex;align-items:center;gap:7px}.vs-voice[hidden]{display:none}.vs-voice i{display:block;width:7px;height:7px;border-radius:50%;
  background:#fff;box-shadow:0 0 7px #fff,0 0 18px var(--acc)}
.is-listening .vs-voice i{animation:vs-listen .8s ease-out infinite}.is-listening .vs-voice{color:#fff}
@keyframes vs-listen{to{box-shadow:0 0 8px #fff,0 0 30px #70f0bd,0 0 72px rgba(112,240,189,.54);transform:scale(1.55)}}
.vs-lock{opacity:0;transform:translateX(-8px);pointer-events:none;transition:opacity .4s ease,transform .4s ease}
.is-armed .vs-lock{opacity:1;transform:none;pointer-events:auto}.vs-lock:hover,.vs-lock:focus-visible,.vs-voice:hover,.vs-voice:focus-visible{
  color:#fff;outline:0;text-shadow:0 0 7px #fff,0 0 24px var(--acc2)}
.vs-status{position:absolute;left:50%;top:106px;width:100%;min-height:11px;transform:translateX(-50%);text-align:center;
  color:var(--faint,#687593);font:6.5px/1.35 var(--mono);letter-spacing:.14em;text-transform:uppercase}
.vs-status[data-state="searching"]{color:var(--acc2)}.vs-status[data-state="error"]{color:#ff9b9b}.vs-status[data-state="resolved"]{color:#70f0bd}
.vs-spark{position:absolute;bottom:2px;width:3px;height:3px;margin-left:-1px;border-radius:50%;background:#fff;pointer-events:none;
  box-shadow:0 0 6px #fff,0 0 14px var(--acc2);animation:vs-spark-rise .85s cubic-bezier(.2,.6,.3,1) forwards}
@keyframes vs-spark-rise{from{opacity:.95;transform:translateY(0)}to{opacity:0;transform:translateY(-27px)}}
.is-docked.is-armed .vs-arrival-star{pointer-events:auto;cursor:pointer}.is-docked.is-armed .vs-pulse{animation-duration:1.2s}

/* The registry answers as a real constellation. Options keep complete listbox
   semantics, while their visual position and depth are calculated in JS. */
.vs-suggestions{position:absolute;z-index:12;inset:0;overflow:visible;border:0;background:none;box-shadow:none;pointer-events:none}
.vs-suggestion{appearance:none;position:absolute;left:0;top:0;width:auto;display:grid;grid-template-columns:9px minmax(0,1fr);gap:1px 10px;
  align-items:center;padding:0;border:0;background:transparent;color:var(--ink,#f2f5ff);text-align:left;cursor:pointer;pointer-events:auto;
  white-space:nowrap;opacity:var(--vs-o,0);transform:translate(-50%,-50%) scale(var(--vs-s,1));transform-origin:50% 50%;
  transition:filter .3s ease;will-change:transform,opacity}
.vs-suggestion.is-gone{pointer-events:none}.vs-suggestion.is-inactive .vs-suggestion-main strong{color:var(--muted,#9aa7c7)}
.vs-suggestion::after{content:"";position:absolute;left:4px;top:8px;height:1px;width:var(--vs-len,0px);transform-origin:0 50%;
  transform:rotate(var(--vs-ang,0rad));pointer-events:none;opacity:.5;background:linear-gradient(90deg,rgba(168,196,255,.56),transparent 76%)}
.vs-suggestion:hover,.vs-suggestion[aria-selected="true"]{outline:none;filter:brightness(1.55)}
.vs-suggestion-star{grid-row:1/3;width:8px;height:8px;border-radius:50%;background:#fff;
  box-shadow:0 0 8px #fff,0 0 20px var(--acc2),0 0 48px rgba(109,155,255,.48);transition:box-shadow .3s,transform .3s}
.vs-suggestion:hover .vs-suggestion-star,.vs-suggestion[aria-selected="true"] .vs-suggestion-star{transform:scale(1.45);
  box-shadow:0 0 10px #fff,0 0 30px var(--acc2),0 0 70px rgba(109,155,255,.8)}
.vs-suggestion-main{display:block;min-width:0;position:relative}.vs-suggestion-main strong,.vs-suggestion-main small{display:block;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;max-width:34ch;text-shadow:0 2px 16px #000,0 0 22px #000}
.vs-suggestion-main strong{font:500 8px var(--mono);letter-spacing:.14em;text-transform:uppercase}.vs-suggestion-main small{margin-top:3px;
  color:var(--faint,#687593);font:6px var(--mono);letter-spacing:.08em}.vs-suggestion-state{grid-column:2;color:var(--ok,#70f0bd);
  font:5.5px var(--mono);letter-spacing:.15em;text-shadow:0 2px 12px #000}

/* Resolution turns the same star into the customer's first system. Every next
   choice is another light in orbit; there is still no results card. */
.has-result .vs-console{opacity:0;transform:translate(-50%,30px) scale(.9);clip-path:circle(0 at 50% 0);pointer-events:none}
.has-result .vs-dock-field,.has-result .vs-resonance,.has-result .vs-arrival-star{opacity:0!important;transition:opacity .7s ease}
.vs-company-world{position:absolute;z-index:5;inset:0;opacity:0;visibility:hidden;pointer-events:none;transform:scale(.74);filter:blur(8px);
  transition:opacity .85s cubic-bezier(.16,0,.13,1),transform 1.1s cubic-bezier(.16,0,.13,1),filter 1.1s ease,visibility 0s 1.1s}
.has-result .vs-company-world{opacity:1;visibility:visible;pointer-events:auto;transform:none;filter:none;transition-delay:.14s,0s,0s,0s}
.vs-company-world::before{content:"";position:absolute;left:66%;top:49%;width:min(48vw,720px);height:min(58vh,610px);transform:translate(-50%,-50%);
  border-radius:50%;background:radial-gradient(circle,rgba(109,155,255,.17),rgba(109,155,255,.035) 34%,transparent 70%);filter:blur(18px)}
.vs-world-kicker{position:absolute;left:66%;top:15%;transform:translateX(-50%);color:var(--acc2);font:6.5px var(--mono);
  letter-spacing:.28em;text-transform:uppercase;white-space:nowrap}.vs-company-orbits{position:absolute;left:66%;top:49%;width:min(46vw,660px);
  height:min(45vh,430px);transform:translate(-50%,-50%)}
.vs-company-orbits i{position:absolute;left:50%;top:50%;border:1px solid rgba(168,196,255,.18);border-radius:50%;
  transform:translate(-50%,-50%) rotate(-12deg);animation:vs-world-orbit 24s linear infinite}
.vs-company-orbits,.vs-company-rays{pointer-events:none}
.vs-company-orbits i:nth-child(1){width:100%;height:62%}.vs-company-orbits i:nth-child(2){width:73%;height:100%;transform:translate(-50%,-50%) rotate(52deg);animation-direction:reverse}
.vs-company-orbits i:nth-child(3){width:40%;height:40%;transform:translate(-50%,-50%) rotate(-33deg);animation-duration:16s}
@keyframes vs-world-orbit{to{transform:translate(-50%,-50%) rotate(348deg)}}
.vs-company-anchor{position:absolute;left:66%;top:49%;width:min(460px,36vw);transform:translate(-50%,-50%);text-align:center}
.vs-company-core{appearance:none;position:relative;display:block;width:20px;height:20px;margin:0 auto 22px;padding:0;border:0;border-radius:50%;
  cursor:pointer;background:hsl(var(--vs-signature-hue,218) 88% 90%);transform:scale(var(--vs-star-scale,1));
  box-shadow:0 0 7px #fff,0 0 22px hsl(var(--vs-signature-hue,218) 88% 72%),0 0 58px var(--acc),0 0 118px rgba(109,155,255,.46);
  animation:vs-company-heartbeat var(--vs-heartbeat,3s) ease-in-out infinite}
.vs-company-core::before{content:"";position:absolute;inset:-11px;border:1px solid rgba(218,231,255,.55);border-radius:50%;
  opacity:0;animation:vs-company-pulse var(--vs-heartbeat,3s) ease-out infinite}
.vs-company-core:hover,.vs-company-core:focus-visible{outline:0;filter:brightness(1.42);box-shadow:0 0 10px #fff,0 0 36px var(--acc2),0 0 96px var(--acc)}
.has-result .vs-company-core{animation:vs-star-birth 1.35s cubic-bezier(.16,0,.13,1) both,vs-company-heartbeat var(--vs-heartbeat,3s) 1.4s ease-in-out infinite}
@keyframes vs-star-birth{0%{opacity:0;filter:blur(8px);transform:translateY(19vh) scale(.06)}42%{opacity:1}100%{filter:none;transform:translateY(0) scale(var(--vs-star-scale,1))}}
@keyframes vs-company-heartbeat{0%,100%{filter:brightness(.92);box-shadow:0 0 7px #fff,0 0 20px hsl(var(--vs-signature-hue,218) 88% 72%),0 0 54px var(--acc),0 0 105px rgba(109,155,255,.4)}48%{filter:brightness(1.16);box-shadow:0 0 9px #fff,0 0 30px hsl(var(--vs-signature-hue,218) 88% 74%),0 0 78px var(--acc),0 0 148px rgba(109,155,255,.54)}}
@keyframes vs-company-pulse{0%{opacity:.65;transform:scale(.45)}76%,100%{opacity:0;transform:scale(4.2)}}
.vs-company-rays{position:absolute;left:50%;top:10px;width:152px;height:152px;transform:translate(-50%,-50%);border-radius:50%;
  background:repeating-conic-gradient(from 0deg,rgba(168,196,255,.16) 0 .4deg,transparent .4deg var(--vs-ray-gap,11deg));
  -webkit-mask:radial-gradient(circle,#000 0,transparent 68%);mask:radial-gradient(circle,#000 0,transparent 68%);animation:vs-rays 28s linear infinite}
@keyframes vs-rays{to{transform:translate(-50%,-50%) rotate(360deg)}}
.vs-company,.vs-company-meta,.vs-source{display:block;position:relative}.vs-company{color:#fff;font:500 clamp(25px,3vw,46px)/1 var(--display,var(--sans));
  letter-spacing:-.045em;text-shadow:0 0 34px rgba(168,196,255,.5)}.vs-company-meta{max-width:560px;margin:10px auto 0;color:var(--muted);
  font:6.5px/1.55 var(--mono);letter-spacing:.09em;text-transform:uppercase}.vs-source{margin-top:8px;color:var(--ok,#70f0bd);
  font:6px var(--mono);letter-spacing:.18em;text-transform:uppercase}
.has-result .vs-company,.has-result .vs-company-rays{animation:vs-identity-in .9s .72s cubic-bezier(.16,0,.13,1) both}
.has-result .vs-company-meta,.has-result .vs-source,.has-result .vs-world-kicker{animation:vs-meta-breathe 6.8s 1.1s both}
@keyframes vs-identity-in{from{opacity:0;filter:blur(7px);transform:translateY(10px)}to{opacity:1;filter:none;transform:none}}
@keyframes vs-meta-breathe{0%{opacity:0}18%,58%{opacity:1}100%{opacity:.16}}
.vs-system-orbit{position:absolute;inset:0;pointer-events:none}.vs-system-node{position:absolute;display:flex;align-items:center;gap:8px;color:var(--acc2);
  font:6.5px var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;opacity:0;will-change:transform,filter,opacity}
.vs-system-node.is-locking{animation:vs-node-lock .95s var(--node-delay,900ms) cubic-bezier(.12,.72,.08,1) both}
.vs-system-node i{position:relative;width:7px;height:7px;border-radius:50%;background:#fff;box-shadow:0 0 8px #fff,0 0 22px var(--acc2)}
.vs-system-node i em{position:absolute;inset:-5px;border:1px solid rgba(168,196,255,.55);border-radius:50%;animation:vs-node-operation 2.7s calc(var(--node-delay,900ms) + 1s) ease-out infinite}
.vs-system-node b{font-weight:500;animation:vs-node-label-fade 6s calc(var(--node-delay,900ms) + 1.2s) both}.vs-system-node-1{left:29%;top:29%}.vs-system-node-2{right:20%;top:33%}
.vs-system-node-3{left:24%;bottom:26%}.vs-system-node-4{right:27%;bottom:21%}
.vs-system-node::after{content:"";position:absolute;top:50%;width:clamp(70px,10vw,150px);height:1px;background:linear-gradient(90deg,rgba(168,196,255,.45),transparent)}
.vs-system-node-1::after,.vs-system-node-3::after{left:100%;margin-left:12px}.vs-system-node-2::after,.vs-system-node-4::after{right:100%;margin-right:12px;transform:rotate(180deg)}
@keyframes vs-node-lock{0%{opacity:0;filter:blur(8px);transform:translate(var(--from-x,0),var(--from-y,0)) scale(.16)}38%{opacity:1}100%{opacity:1;filter:none;transform:none}}
@keyframes vs-node-operation{0%{opacity:.68;transform:scale(.35)}74%,100%{opacity:0;transform:scale(3.8)}}
@keyframes vs-node-label-fade{0%,44%{opacity:1}100%{opacity:.18}}
.vs-flow-field{position:absolute;z-index:1;left:66%;top:49%;width:1px;height:1px;pointer-events:none}
.vs-flow-particle{position:absolute;left:0;top:0;width:2px;height:2px;border-radius:50%;opacity:0;background:var(--acc2);
  box-shadow:0 0 5px #fff,0 0 13px var(--acc);animation:vs-operational-flow var(--flow-speed,6s) var(--flow-delay,0s) linear infinite}
[data-profile="fleet"] .vs-flow-particle:nth-child(4n),[data-profile="service"] .vs-flow-particle:nth-child(5n){background:var(--ok);box-shadow:0 0 6px var(--ok),0 0 18px rgba(112,240,189,.48)}
[data-profile="distribution"] .vs-flow-particle:nth-child(6n){background:var(--amber);box-shadow:0 0 6px var(--amber),0 0 17px rgba(241,183,86,.42)}
@keyframes vs-operational-flow{0%{opacity:0;transform:rotate(var(--flow-angle)) translateX(24px) scale(.35)}13%{opacity:.92}54%{opacity:.52;transform:rotate(calc(var(--flow-angle) + 15deg)) translateX(var(--flow-radius)) scale(.72)}82%{opacity:.76}100%{opacity:0;transform:rotate(calc(var(--flow-angle) + 180deg)) translateX(28px) scale(.28)}}
.vs-world-note{position:absolute;left:66%;bottom:20%;width:min(620px,54vw);transform:translateX(-50%);color:var(--muted);font:9px/1.55 var(--mono);
  letter-spacing:.06em;text-align:center}
.vs-continue{appearance:none;position:absolute;right:8%;bottom:8%;display:block;padding:8px 0 8px 21px;border:0;background:none;color:#fff;text-decoration:none;cursor:pointer;
  font:8.5px var(--mono);letter-spacing:.18em;text-transform:uppercase;text-shadow:0 0 17px var(--acc2)}
.vs-continue::before{content:"";position:absolute;left:0;top:50%;width:8px;height:8px;border-radius:50%;background:#fff;transform:translateY(-50%);
  box-shadow:0 0 7px #fff,0 0 20px var(--acc),0 0 56px rgba(109,155,255,.7)}
.vs-continue:hover,.vs-continue:focus-visible{outline:0;text-shadow:0 0 7px #fff,0 0 26px var(--acc2)}
.is-owned .vs-continue{color:var(--ok);text-shadow:0 0 18px rgba(112,240,189,.46)}
.is-claiming .vs-continue{opacity:0!important;pointer-events:none!important}
.slab.signal-match{opacity:1!important;color:#fff!important;text-shadow:0 0 8px #fff,0 0 24px var(--acc)!important;
  animation:vs-module-lock .8s var(--signal-delay,0ms) both}.slab.signal-match::after{background:#fff!important;box-shadow:0 0 12px var(--acc)}
@keyframes vs-module-lock{0%{filter:brightness(1)}45%{filter:brightness(2.6)}100%{filter:brightness(1)}}

/* ---- Arrival Protocol: when the journey engine hosts the living twin, the
   company runs INSIDE the galaxy and this layer's DOM world stays dormant.
   Only whispers remain: the lock line and the claim invitation, both riding
   the star's own projected position. ---- */
.is-twin .vs-company-world{display:none!important}
#visitor-signal.is-twin::after,#visitor-signal.is-twin::before{opacity:0!important}
html.twin-mode #stations,html.twin-mode .path,html.twin-mode .pill,html.twin-mode .hint{
  opacity:0!important;pointer-events:none!important;transition:opacity .5s ease!important}
.vs-twin-line{position:absolute;z-index:6;left:0;top:0;transform:translate(-50%,0);color:var(--acc2,#a8c4ff);
  max-width:min(620px,72vw);font:9px/1.55 var(--mono);letter-spacing:.06em;text-align:center;white-space:normal;opacity:0;pointer-events:none;
  text-shadow:0 2px 14px #000,0 0 18px rgba(109,155,255,.5)}
.vs-twin-line.is-live{opacity:.95;transition:opacity .45s ease}
@keyframes vs-twin-line{0%{opacity:0}12%,56%{opacity:.95}100%{opacity:0}}
.vs-continue.is-floating{position:absolute;right:auto;bottom:auto;left:0;top:0;
  transform:translate(-50%,0);padding-left:0;padding-top:19px;opacity:0;pointer-events:auto;transition:opacity 1.1s ease}
.vs-continue.is-floating::before{left:50%;top:6px;transform:translateX(-50%)}
.vs-continue.is-floating.is-whisper-in{opacity:1}
.is-owned .vs-continue.is-floating{opacity:.55}

/* Contact is asked only after the customer has received a useful first plan. */
.vs-relay{position:absolute;z-index:7;left:0;top:0;display:grid;grid-template-columns:7px minmax(0,1fr) auto;
  align-items:center;gap:10px;width:min(330px,76vw);padding:0;transform:translate(-50%,0) scale(.96);
  opacity:0;pointer-events:none;transition:opacity .9s cubic-bezier(.16,0,.13,1),transform .9s cubic-bezier(.16,0,.13,1)}
.vs-relay.is-open{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.vs-relay::after{content:"";position:absolute;left:0;right:34px;bottom:-3px;height:1px;pointer-events:none;
  background:linear-gradient(90deg,rgba(168,196,255,.75),rgba(168,196,255,.16) 70%,transparent);
  box-shadow:0 0 9px rgba(109,155,255,.5)}
.vs-relay-spark{width:7px;height:7px;border-radius:50%;background:#fff;
  box-shadow:0 0 7px #fff,0 0 17px var(--acc2,#a8c4ff),0 0 32px rgba(109,155,255,.55)}
.vs-relay.is-sending .vs-relay-spark{animation:vs-beacon .7s ease-in-out infinite alternate}
.vs-relay input{appearance:none;box-sizing:border-box;width:100%;height:34px;border:0;background:transparent;color:#fff;
  padding:2px 0;outline:0;font:11px var(--mono);letter-spacing:.06em;caret-color:#fff;
  text-shadow:0 0 12px rgba(168,196,255,.45),0 2px 14px #000}
.vs-relay input::placeholder{color:rgba(168,196,255,.62)}
.vs-relay button{appearance:none;border:0;background:none;color:var(--acc2,#a8c4ff);cursor:pointer;padding:6px 2px;
  font:11px var(--mono);text-shadow:0 0 12px rgba(109,155,255,.6)}
.vs-relay button:hover,.vs-relay button:focus-visible{color:#fff;outline:0;text-shadow:0 0 7px #fff,0 0 22px var(--acc2)}
.vs-relay-note{grid-column:1/-1;min-height:9px;margin-top:5px;color:var(--ok,#70f0bd);
  font:6px var(--mono);letter-spacing:.2em;text-transform:uppercase;text-shadow:0 2px 12px #000}
.vs-relay-note[data-state="error"]{color:#ff9b9b}
.vs-relay.is-sent input,.vs-relay.is-sent button{display:none}
.vs-relay.is-sent::after{opacity:.3}

/* Ground arrivals and reduced-motion visitors keep the same guided console,
   while the full system reading remains visible underneath and nothing orbits. */
html.signal-arrival-quiet #ground{opacity:.46;filter:saturate(.72) brightness(.64)}
html.signal-arrival-quiet #ground .g-actions{visibility:hidden}
#visitor-signal.is-quiet::before{opacity:.72;background:linear-gradient(90deg,rgba(2,4,10,.92),rgba(2,4,10,.74) 52%,rgba(2,4,10,.42))}
#visitor-signal.is-quiet::after{opacity:.78;filter:blur(14px)}
.is-quiet .vs-resonance,.is-quiet .vs-dock-field::before,.is-quiet .vs-dock-field::after,
.is-quiet .vs-corona,.is-quiet .vs-pulse{display:none}
.is-quiet .vs-company,.is-quiet .vs-company-meta,.is-quiet .vs-source,.is-quiet .vs-world-kicker,
.is-quiet .vs-company-core,.is-quiet .vs-company-core::before,.is-quiet .vs-system-node,
.is-quiet .vs-system-node i em,.is-quiet .vs-system-node b{animation:none!important;transition:none!important}
.is-quiet .vs-suggestions{inset:auto;left:50%;top:calc(var(--dock-y) + 76px);display:grid;width:min(560px,86vw);max-height:30vh;
  gap:10px;overflow:auto;transform:translateX(-50%);padding:8px 0 24px}
.is-quiet .vs-suggestion{position:relative;left:auto!important;top:auto!important;width:100%;transform:none!important;opacity:1!important;
  grid-template-columns:9px minmax(0,1fr);padding:6px 0}
.is-quiet .vs-suggestion::after{display:none}
.is-quiet.has-result .vs-company-world::before,.is-quiet .vs-company-orbits,.is-quiet .vs-company-rays,.is-quiet .vs-flow-field{display:none}
.is-quiet .vs-world-kicker{left:50%;top:20%}
.is-quiet .vs-company-anchor{left:50%;top:36%;width:min(620px,88vw)}
.is-fallback .vs-company-core{pointer-events:none}
.is-quiet .vs-system-orbit{inset:auto;left:50%;top:51%;width:min(680px,88vw);display:flex;justify-content:center;flex-wrap:wrap;
  gap:15px 24px;transform:translateX(-50%)}
.is-quiet .vs-system-node{position:relative;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;opacity:1;
  filter:none;transform:none!important;animation:none!important}
.is-quiet .vs-system-node b{opacity:1;animation:none!important}.is-quiet .vs-system-node::after{display:none}
.is-quiet .vs-world-note{left:50%;bottom:26%;width:min(620px,86vw);font-size:10px}
.is-quiet .vs-continue{right:50%;bottom:15%;transform:translateX(50%);white-space:nowrap}
.is-fallback .vs-relay{left:66%;top:auto!important;bottom:10%;transform:translate(-50%,0) scale(.96)}
.is-fallback .vs-relay.is-open{transform:translate(-50%,0)}
.is-quiet .vs-relay{left:50%;bottom:8%}

/* "Where do I even type?" — the beam is the field, so it has to read as one
   before anything is written: a brighter rest state and a slow breath on the
   beacon that stops the moment the visitor starts. */
.vs-form input::placeholder{color:rgba(178,196,235,.82)}
#visitor-signal.is-docked:not(.is-writing) .vs-input-beacon{animation:vs-invite 2.4s ease-in-out infinite}
#visitor-signal.is-docked:not(.is-writing) .vs-beam{box-shadow:0 0 14px rgba(168,196,255,.85);
  animation:vs-invite-beam 2.4s ease-in-out infinite}
@keyframes vs-invite{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.72}}
@keyframes vs-invite-beam{0%,100%{opacity:.7}50%{opacity:1}}

/* /build is a working conversation, not a puzzle. The galaxy remains the
   environment while labels, fields and actions use familiar form affordances.
   There is no panel or card around the guide. */
#visitor-signal{--dock-y:48%}
#visitor-signal::after{width:min(980px,82vw);height:520px}
.vs-console{width:min(760px,76vw);height:350px;overflow:visible}
.vs-console::before{display:none}
.vs-copy{left:50%;top:0;bottom:auto;width:100%;text-align:left}
.is-writing .vs-copy{opacity:1}
.vs-kicker{margin:0 0 12px;font-size:8px;letter-spacing:.24em}
.vs-heading{font-size:clamp(26px,2.6vw,40px);line-height:1.08}
.vs-intro{max-width:680px;margin-top:12px;color:rgba(218,228,251,.88);font:12px/1.55 var(--sans);letter-spacing:0}
.vs-form{top:128px;width:100%;grid-template-columns:minmax(0,1fr);gap:9px}
.vs-field-label,.vs-agent-label{display:block;color:rgba(218,228,251,.86);font:8px var(--mono);letter-spacing:.16em;text-transform:uppercase}
.vs-combobox{width:100%}
.vs-form input{height:58px;border:1px solid rgba(190,210,255,.52);border-radius:2px;background:rgba(3,7,17,.68);
  padding:8px 18px 8px 42px;font:15px var(--sans);letter-spacing:.01em;box-shadow:inset 0 0 24px rgba(109,155,255,.05),0 0 0 1px rgba(2,4,10,.45)}
.vs-form input:hover{border-color:rgba(218,231,255,.72)}
.vs-form input:focus{border-color:#fff;box-shadow:0 0 0 1px rgba(255,255,255,.4),0 0 28px rgba(109,155,255,.22)}
.vs-form input::placeholder{color:rgba(184,198,226,.64)}
.vs-input-beacon{left:18px}
.vs-beam{left:18px;bottom:8px;max-width:calc(100% - 36px)}
.vs-form-actions,.vs-agent-actions{display:flex;align-items:center;gap:18px;margin-top:4px}
.vs-lock,.vs-agent-next,.vs-confirm-yes{opacity:1;transform:none;pointer-events:auto;min-height:42px;border:1px solid rgba(218,231,255,.72);
  border-radius:2px;background:rgba(109,155,255,.18);color:#fff;padding:11px 22px;font:8.5px var(--mono);letter-spacing:.17em;
  text-transform:uppercase;text-shadow:0 0 14px rgba(168,196,255,.5);transition:border-color .2s,background .2s,opacity .2s}
.vs-lock:disabled,.vs-agent-next:disabled{opacity:.34;cursor:not-allowed;pointer-events:none}
.vs-lock:not(:disabled):hover,.vs-lock:not(:disabled):focus-visible,.vs-agent-next:not(:disabled):hover,.vs-agent-next:not(:disabled):focus-visible,
.vs-confirm-yes:hover,.vs-confirm-yes:focus-visible{outline:0;border-color:#fff;background:rgba(109,155,255,.32)}
.vs-voice,.vs-agent-voice{display:flex;align-items:center;gap:8px;opacity:.82;border:0;background:none;color:var(--acc2,#a8c4ff);cursor:pointer;
  padding:10px 2px;font:8px var(--mono);letter-spacing:.17em;text-transform:uppercase}
.vs-agent-voice i{display:block;width:7px;height:7px;border-radius:50%;background:#fff;box-shadow:0 0 7px #fff,0 0 18px var(--acc)}
.is-listening .vs-agent-voice i{animation:vs-listen .8s ease-out infinite}
.vs-confirm{position:absolute;left:50%;top:142px;display:flex;align-items:center;gap:18px;width:100%;transform:translateX(-50%)}
.vs-confirm[hidden],.vs-agent-form[hidden],.vs-form[hidden]{display:none!important}
.vs-confirm-again{appearance:none;border:0;background:none;color:var(--acc2);cursor:pointer;padding:11px 2px;font:8px var(--mono);
  letter-spacing:.17em;text-transform:uppercase}
.vs-confirm-again:hover,.vs-confirm-again:focus-visible{outline:0;color:#fff}
.vs-agent-form{position:absolute;left:50%;top:126px;width:100%;transform:translateX(-50%)}
.vs-agent-form textarea{box-sizing:border-box;width:100%;height:94px;resize:none;border:1px solid rgba(190,210,255,.52);border-radius:2px;
  background:rgba(3,7,17,.68);color:#fff;padding:15px 17px;outline:0;font:15px/1.45 var(--sans);caret-color:#fff;
  box-shadow:inset 0 0 24px rgba(109,155,255,.05),0 0 0 1px rgba(2,4,10,.45)}
.vs-agent-form textarea:focus{border-color:#fff;box-shadow:0 0 0 1px rgba(255,255,255,.4),0 0 28px rgba(109,155,255,.22)}
.vs-agent-form textarea::placeholder{color:rgba(184,198,226,.64)}
.vs-agent-label{margin-bottom:9px}
.vs-progress{position:absolute;left:0;top:326px;width:100%;color:rgba(168,196,255,.72);font:7px var(--mono);letter-spacing:.16em;text-transform:uppercase}
.is-confirming .vs-progress{top:210px}
.vs-status{top:305px;text-align:right;font-size:7px}

/* Registry matches stay beside the field in a readable list. They are still
   star-marked, but do not orbit or compete with the company-name action. */
.vs-suggestions{inset:auto!important;left:50%!important;top:calc(var(--dock-y) + 82px)!important;display:grid;width:min(760px,76vw);
  max-height:230px;overflow:auto;transform:translateX(-50%);padding:4px 0;background:rgba(3,7,17,.94);
  border:1px solid rgba(168,196,255,.34);box-shadow:0 22px 70px rgba(0,0,0,.5);pointer-events:auto}
.vs-suggestions[hidden]{display:none!important}
.vs-suggestion{position:relative!important;left:auto!important;top:auto!important;width:100%;min-height:48px;padding:9px 14px;
  transform:none!important;opacity:1!important;grid-template-columns:9px minmax(0,1fr);border-bottom:1px solid rgba(168,196,255,.11)}
.vs-suggestion:last-child{border-bottom:0}.vs-suggestion::after{display:none}
.vs-suggestion:hover,.vs-suggestion[aria-selected="true"]{background:rgba(109,155,255,.13)}
.vs-suggestion-main strong{font-size:9px;max-width:70ch}.vs-suggestion-main small{font-size:7px;max-width:78ch}

/* The email handoff is equally explicit after the customer has a plan. */
.vs-relay{grid-template-columns:7px minmax(0,1fr) auto;width:min(620px,86vw);gap:10px}
.vs-relay label{grid-column:1/-1;color:#fff;font:12px var(--sans);letter-spacing:0}
.vs-relay input{height:44px;border:1px solid rgba(190,210,255,.5);background:rgba(3,7,17,.7);padding:7px 12px;font:13px var(--sans)}
.vs-relay button{min-height:44px;border:1px solid rgba(218,231,255,.65);background:rgba(109,155,255,.18);padding:9px 14px;
  color:#fff;font:8px var(--mono);letter-spacing:.14em;white-space:nowrap}
.vs-relay::after{display:none}

@media(max-width:760px){
  #visitor-signal{--dock-x:50%;--dock-y:45%}
  .vs-twin-line{font-size:5.4px;letter-spacing:.2em}
  .vs-relay{width:min(300px,86vw)}.vs-relay input{font-size:12px}
  /* phones: the console owns the lower half — a ghosted station CTA printing
     through the input line reads as damage, so the copy steps fully out */
  html.signal-arrival-near #holo{opacity:.13;filter:saturate(.68) brightness(.68)}html.signal-arrival-near #stations{opacity:0}
  .is-locking .vs-arrival-star,.is-docked .vs-arrival-star{transform:translate3d(0,14vh,0) scale(.66)}
  .vs-resonance i:nth-child(1){width:68vw;height:28vw}.vs-resonance i:nth-child(2){width:112vw;height:48vw}.vs-resonance i:nth-child(3){display:none}
  .vs-resonance b{width:56vw}.vs-console{width:calc(100vw - 28px);height:440px}.vs-copy{top:0;bottom:auto}.vs-heading{font-size:26px}
  #visitor-signal::after{width:118vw;height:560px;opacity:0;background:radial-gradient(ellipse,rgba(2,4,10,.96) 0 34%,rgba(2,4,10,.76) 62%,transparent 84%)}
  #visitor-signal.is-nearfield::after{opacity:.96}#visitor-signal.has-result::after{top:43%;width:116vw;height:70vh;opacity:.78}
  .vs-intro{font-size:12px}.vs-form{top:132px;width:100%;grid-template-columns:1fr}.vs-form input{height:54px;font-size:14px}
  .vs-form-actions,.vs-agent-actions{gap:14px}.vs-lock,.vs-agent-next,.vs-confirm-yes{min-height:44px;padding:10px 16px}
  .vs-confirm{top:150px;align-items:flex-start;flex-direction:column;gap:6px}.vs-agent-form{top:132px}.vs-agent-form textarea{height:112px;font-size:14px}
  .vs-progress{top:408px}.is-confirming .vs-progress{top:270px}.vs-status{top:378px;text-align:left}.vs-dismiss{bottom:calc(30px + var(--safe-b,0px));right:12px;font-size:10.5px}
  .vs-suggestions{top:calc(var(--dock-y) + 120px)!important;width:calc(100vw - 28px);max-height:230px}
  .vs-suggestion-main strong{font-size:7px;max-width:22ch}.vs-suggestion-main small{font-size:5.5px;max-width:22ch}
  .vs-company-world::before,.vs-company-orbits,.vs-company-anchor{left:50%;top:43%}.vs-company-world::before{width:100vw;height:55vh}
  .vs-company-orbits{width:94vw;height:38vh}.vs-company-anchor{width:84vw}.vs-company{font-size:30px}.vs-company-meta{font-size:5.8px}
  .vs-system-node{font-size:5.2px}.vs-system-node-1{left:3%;top:22%}.vs-system-node-2{right:2%;top:27%}
  .vs-system-node-3{left:4%;bottom:29%}.vs-system-node-4{right:3%;bottom:25%}.vs-system-node::after{width:16vw}
  .vs-flow-field{left:50%;top:43%}.vs-world-note{left:50%;bottom:17%;font-size:5.2px}.vs-continue{right:50%;bottom:4%;transform:translateX(50%);white-space:nowrap}
}

@media(prefers-reduced-motion:reduce){
  .vs-arrival-star,.is-traversing .vs-arrival-star,.is-locking .vs-arrival-star,.is-docked .vs-arrival-star{
    opacity:1;animation:none!important;transform:translate3d(16vw,18vh,0) scale(.72)}
  .vs-corona,.vs-pulse,.vs-resonance i,.vs-company-orbits i,.vs-company-rays,.vs-company-core,.vs-company-core::before,.vs-system-node,.vs-system-node i em,.vs-system-node b,.slab.signal-match,.vs-voice i,.vs-agent-voice i{animation:none!important}
  .vs-console,.vs-dismiss,.vs-company-world{transition:none}.vs-system-node{opacity:1;filter:none;transform:none}.vs-system-node b{opacity:.3}.vs-flow-particle,.vs-spark{display:none}
  .vs-twin-line.is-live{animation:none;opacity:.9}.vs-continue.is-floating{transition:none}
  .vs-relay{transition:none}#visitor-signal.is-docked:not(.is-writing) .vs-input-beacon,
  #visitor-signal.is-docked:not(.is-writing) .vs-beam{animation:none!important}
}
@media(max-width:760px) and (prefers-reduced-motion:reduce){
  .vs-arrival-star,.is-traversing .vs-arrival-star,.is-locking .vs-arrival-star,.is-docked .vs-arrival-star{transform:translate3d(0,14vh,0) scale(.66)}
}
