/* MurJor AI(TM) - BuddyVerse(TM). Mobile first; Buddy left, chapters right from 900px.
   Motion is transform / opacity / filter only, and fixed-size layers, so nothing shifts layout.
   The arrival is a CSS timeline on .bv.intro (present in the HTML, so it plays even before scripts run);
   prefers-reduced-motion skips it and shows the lit world at once. */
@property --t1{syntax:"<color>";inherits:true;initial-value:#8B5CF6}
@property --t2{syntax:"<color>";inherits:true;initial-value:#E6B85C}
:root{--ink:#F3F1FF;--muted:#C9C4EE;--dim:#A9A4D6;--navy:#0E1338;--deep:#080B24;--violet:#8B5CF6;--lav:#C4B5FD;--gold:#E6B85C;--gold-hi:#FFE7A8;--blue:#38BDF8;--line:#333B85;--card:rgba(24,28,78,.72);--ease:cubic-bezier(.2,.8,.2,1);--px:0;--py:0}
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
html{background:var(--deep)}
body{margin:0;color:var(--ink);font:16px/1.5 Inter,system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--deep);-webkit-font-smoothing:antialiased;overflow:hidden;overflow:clip}
:focus-visible{outline:3px solid var(--lav);outline-offset:2px}
h2:focus,h3:focus{outline:none}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
a{color:var(--lav)}
[hidden]{display:none!important}

/* ---------------------------------------------------------------- the world */
.bv{position:relative;display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden;overflow:clip;isolation:isolate;
  --t1:#8B5CF6;--t2:#E6B85C;transition:--t1 1.4s ease,--t2 1.4s ease;
  background:radial-gradient(130% 70% at 50% 0%,#2C2272 0%,#151A4E 40%,var(--navy) 68%,var(--deep) 100%)}
.bv[data-mode=campus]{--t1:#38BDF8;--t2:#9BE3FF}
.bv[data-mode=vibe]{--t1:#C026D3;--t2:#FFB4E6}
.bv[data-mode=power]{--t1:#3B82F6;--t2:#E0E7FF}
.bv-sky{position:absolute;inset:0;z-index:-1;width:100%;height:100%;display:block;pointer-events:none}
.bv-atmos{position:absolute;inset:0;z-index:-2;pointer-events:none;overflow:hidden}
.bv-atmos>div{position:absolute;will-change:transform}
.bv-aurora{inset:-25%;background:radial-gradient(38% 30% at 30% 30%,color-mix(in srgb,var(--t1) 42%,transparent),transparent 70%),radial-gradient(34% 26% at 72% 62%,color-mix(in srgb,var(--t2) 22%,transparent),transparent 70%);
  transform:translate3d(calc(var(--px) * 40px),calc(var(--py) * 28px),0);animation:aurora 22s ease-in-out infinite alternate}
.bv-beam{left:50%;top:-10%;width:60vmin;height:90%;margin-left:-30vmin;background:linear-gradient(180deg,color-mix(in srgb,var(--t2) 26%,transparent),transparent 75%);
  clip-path:polygon(42% 0,58% 0,100% 100%,0 100%);opacity:.5;filter:blur(18px);transform:translate3d(calc(var(--px) * -24px),0,0)}
.bv-horizon{left:-10%;right:-10%;bottom:-8%;height:40%;background:radial-gradient(60% 60% at 50% 100%,color-mix(in srgb,var(--t1) 55%,transparent),transparent 72%);transform:translate3d(calc(var(--px) * -16px),calc(var(--py) * -10px),0)}
.bv-fog{inset:auto -20% -6% -20%;height:30%;background:radial-gradient(50% 60% at 30% 100%,rgba(196,181,253,.16),transparent 70%),radial-gradient(50% 60% at 75% 100%,rgba(155,227,255,.12),transparent 70%);transform:translate3d(calc(var(--px) * -60px),0,0);animation:fog 18s ease-in-out infinite alternate}

/* ---------------------------------------------------------------- top bar */
.bv-top{flex:none;position:relative;z-index:4;display:flex;align-items:center;gap:8px;padding:calc(4px + env(safe-area-inset-top)) 8px 0}
.bv-logo{display:grid;place-items:center;width:44px;height:44px;border-radius:12px}
.bv-path{margin:0 auto}
.bv-path ol{display:flex;margin:0;padding:0;list-style:none}
.bv-path button{display:grid;place-items:center;width:28px;height:44px;padding:0;border:0;background:transparent}
.bv-path button::before{content:"";width:8px;height:8px;border-radius:999px;background:rgba(196,181,253,.28);transition:width .35s var(--ease),background .35s,box-shadow .35s}
.bv-path button.done::before{background:rgba(230,184,92,.65)}
.bv-path button[aria-current=step]::before{width:22px;background:var(--gold);box-shadow:0 0 12px rgba(230,184,92,.7)}
.bv-skip{min-width:44px;min-height:44px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:var(--muted);font-weight:600;font-size:14px}
.bv-skip:hover{color:#fff;background:rgba(196,181,253,.1)}

/* ---------------------------------------------------------------- layout */
.bv-world{flex:1;min-height:0;display:flex;flex-direction:column}
.bv-stage{position:relative;flex:none;height:34vh;height:34dvh;min-height:170px;display:flex;justify-content:center;align-items:flex-end;transition:height .8s var(--ease)}
.bv[data-chapter=arrival] .bv-stage{height:50vh;height:50dvh}
.bv[data-chapter=ready] .bv-stage{height:34vh;height:34dvh}
.bv[data-chapter=powers] .bv-stage{height:25vh;height:25dvh}
.bv[data-chapter=powers] .bv-caption{max-width:min(54%,300px);font-size:13px}
.bv-halo{position:absolute;left:50%;top:52%;width:min(360px,84vw);aspect-ratio:1;border-radius:50%;translate:-50% -50%;
  background:radial-gradient(closest-side,color-mix(in srgb,var(--blue) 40%,transparent),color-mix(in srgb,var(--t1) 30%,transparent) 58%,transparent);animation:glow 6s ease-in-out infinite}
.bv-orbit{position:absolute;left:50%;top:56%;width:min(330px,78vw);aspect-ratio:1;translate:-50% -50%;transform:scaleY(.3);opacity:.75}
.bv-orbit::before{content:"";position:absolute;inset:0;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--t2) 45%,transparent)}
.bv-orbit::after{content:"";position:absolute;inset:-6px;border-radius:50%;background:radial-gradient(circle at 50% 4px,#FFF6DA 0 4px,color-mix(in srgb,var(--t2) 60%,transparent) 5px,transparent 9px);animation:spin 14s linear infinite}
.bv-floor{position:absolute;left:50%;bottom:0;width:min(420px,96vw);height:40px;transform:translateX(-50%);border-radius:50%;background:radial-gradient(closest-side,color-mix(in srgb,var(--t2) 30%,transparent),transparent)}
.bv-poke{position:relative;z-index:1;height:100%;padding:0;border:0;background:transparent;border-radius:40% 40% 0 0;-webkit-tap-highlight-color:transparent;
  transform:translate3d(calc(var(--px) * -14px),calc(var(--py) * -8px),0)}
.bv-poke:focus-visible{outline-offset:-6px}
.bv-rig{display:block;height:100%;transform-origin:50% 90%}
/* The expression base (cleared visor) sits under the exact master; keep it unpainted until an expression mood needs
   it, so it never competes with the master for first paint. Hidden only after the master has faded back in. */
.bv-rig .mjb-visor{visibility:hidden;transition:visibility 0s linear .35s}
.bv-rig [data-face=vector] .mjb-visor{visibility:visible;transition-delay:0s}
.bv-rig mj-buddy{--mjb-ar:1220/1289;height:100%;width:auto;max-width:100%;-webkit-mask-image:radial-gradient(ellipse 54% 56% at 50% 46%,#000 64%,transparent 100%);mask-image:radial-gradient(ellipse 54% 56% at 50% 46%,#000 64%,transparent 100%)}
.bv-caption{position:absolute;z-index:3;overflow-wrap:anywhere;top:4px;right:10px;max-width:min(60%,300px);margin:0;padding:9px 13px;border-radius:16px 16px 4px 16px;background:rgba(243,241,255,.96);color:#1B1240;font-size:14px;line-height:1.38;font-weight:500;box-shadow:0 10px 30px rgba(0,0,0,.35);transform-origin:100% 100%}
.bv-caption:empty{display:none}
.bv-caption.pop{animation:pop .34s var(--ease)}
.bv-plate{position:absolute;z-index:2;bottom:4px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:7px;margin:0;padding:5px 14px;border-radius:999px;border:1px solid rgba(230,184,92,.6);background:rgba(14,19,56,.82);color:var(--gold-hi);font:600 14px Inter,sans-serif;letter-spacing:.04em;white-space:nowrap;max-width:90%;transition:opacity .4s}
.bv-plate span{overflow:hidden;text-overflow:ellipsis}
.bv-plate i{width:7px;height:7px;flex:none;border-radius:50%;background:#4ADE80;box-shadow:0 0 8px #4ADE80}
.bv[data-chapter=name] .bv-plate,.bv[data-chapter=ready] .bv-plate{opacity:0}
/* Buddy's name, written in light */
.bv-lightname{position:absolute;z-index:2;left:0;right:0;bottom:6px;margin:0;text-align:center;font:500 clamp(30px,9vw,46px)/1 Fraunces,Georgia,serif;letter-spacing:.02em;color:#FFF6DA;
  text-shadow:0 0 8px rgba(255,231,168,.9),0 0 26px rgba(230,184,92,.8),0 0 60px color-mix(in srgb,var(--t1) 70%,transparent);pointer-events:none;opacity:0;transition:opacity .5s;white-space:nowrap;overflow:hidden;text-overflow:clip}
.bv[data-chapter=name] .bv-lightname,.bv[data-chapter=ready] .bv-lightname{opacity:1}
.bv-lightname span{display:inline-block;animation:letterIn .6s var(--ease) both}
.bv-lightname.flare{animation:flare 1.1s ease}

.bv-panel{flex:1;min-height:0;position:relative;overflow-wrap:anywhere;z-index:2;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:12px 18px 18px;-webkit-overflow-scrolling:touch}
.bv-ch{max-width:540px;margin:0 auto;animation:chIn .55s var(--ease) both}
.bv[data-dir=back] .bv-ch{animation-name:chBack}
.bv-eyebrow{margin:0;font-size:12px;font-weight:600;letter-spacing:.24em;color:var(--gold)}
.bv-ch h2{margin:6px 0 0;font:400 clamp(28px,7.6vw,40px)/1.1 Fraunces,Georgia,serif;letter-spacing:-.01em;color:#fff;overflow-wrap:anywhere}
.bv-ch h3{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;font:600 17px/1.3 Inter,sans-serif;color:#fff}
.bv-lede{margin:10px 0 0;color:var(--muted);font-size:17px}
.bv-fine{margin:12px 0 0;color:var(--dim);font-size:13px}
.bv-hint{margin:6px 0 0;color:var(--dim);font-size:13px}
.bv-hint.bad{color:#FCA5A5}
.bv[data-chapter=arrival] .bv-ch{text-align:center}
.bv-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px}
.bv-row-center{justify-content:center}
.bv-reveal{display:inline-block}

/* ---------------------------------------------------------------- controls */
.bv-primary,.bv-ghost{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:0 24px;border-radius:16px;font-weight:700;font-size:16px;text-decoration:none;white-space:nowrap}
.bv-primary{border:0;color:#1B1240;background:linear-gradient(180deg,#FFE7A8,#E6B85C 60%,#C99A3E);box-shadow:0 10px 30px rgba(230,184,92,.25)}
.bv-primary:hover{filter:brightness(1.06)}
.bv-ghost{border:1px solid #4F5BB8;color:var(--ink);background:rgba(15,20,64,.6);font-weight:600}
.bv-ghost:hover{border-color:var(--lav)}
.bv-sm{min-height:44px;padding:0 16px;font-size:15px;border-radius:14px}
.bv-cta{margin-top:12px}
.bv-link{min-height:44px;padding:0 6px;border:0;background:transparent;color:var(--lav);font-weight:600;font-size:13px;text-decoration:underline;text-underline-offset:3px}
#helloBtn{min-width:220px;animation:breathe 2.6s ease-in-out infinite}
.bv-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.bv-chip{min-height:44px;padding:0 14px;border-radius:999px;border:1px solid #4450A8;background:rgba(15,20,64,.6);font-size:14px;font-weight:500;transition:border-color .2s,background .2s}
.bv-chip:hover{border-color:var(--lav)}
.bv-chip[aria-pressed=true]{border-color:var(--gold);background:rgba(230,184,92,.16);color:var(--gold-hi)}
.bv-tag{display:inline-flex;align-items:center;gap:5px;flex:none;font:700 10px/1.2 Inter,sans-serif;letter-spacing:.14em;text-transform:uppercase;padding:4px 9px;border-radius:999px;border:1px solid rgba(230,184,92,.65);color:var(--gold-hi);background:rgba(14,19,56,.6)}
.bv-tag[data-kind=prepared]::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--gold)}
.bv-tag[data-kind=live]{border-color:#4ADE80;color:#BBF7D0}
.bv-tag[data-kind=live]::before{content:"";width:6px;height:6px;border-radius:50%;background:#4ADE80;box-shadow:0 0 8px #4ADE80}
.bv-tag[data-kind=family]{border-color:#9BE3FF;color:#D4F3FF}
.bv-tag[data-kind=reference]{border-color:#E6B85C;color:#F7DFA0}
.bv-field{margin-top:18px}
.bv-field label{display:block;font-weight:600;font-size:15px}
.bv-field label small{font-weight:400;color:var(--dim)}
.bv-field input,.bv-ask input,.bv-access input,select{display:block;width:100%;min-height:48px;margin-top:6px;padding:11px 14px;border-radius:14px;border:1px solid #4450A8;background:#0F1440;font-size:16px}
select{width:auto;margin:0}
input:focus,select:focus{border-color:var(--violet);outline:none;box-shadow:0 0 0 3px rgba(139,92,246,.4)}
input[aria-invalid=true]{border-color:#F59E9E}

/* name */
.bv-nameform{display:flex;gap:8px;align-items:stretch;margin-top:16px}
.bv-bigin{flex:1;min-width:0;min-height:56px;padding:8px 16px;border-radius:16px;border:1px solid rgba(230,184,92,.55);background:rgba(15,20,64,.8);font:500 24px/1.2 Fraunces,Georgia,serif;color:#FFF6DA}
.bv-bigin::placeholder{color:rgba(255,246,218,.35)}
.bv-nameform .bv-primary{min-height:56px;padding:0 16px}

/* personality orbs */
.bv-orbs,.bv-picks,.bv-identity{margin:16px 0 0;padding:0;border:0;min-width:0}
.bv-orbs{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.bv-orb{position:relative;display:block;cursor:pointer}
.bv-orb input,.bv-pick input{position:absolute;opacity:0;width:1px;height:1px}
.bv-orb>span{position:relative;display:flex;flex-direction:column;gap:2px;min-height:64px;height:100%;padding:12px 14px 12px 44px;border-radius:18px;border:1px solid var(--line);background:var(--card);transition:border-color .25s,background .25s,box-shadow .25s,transform .25s var(--ease)}
.bv-orb>span::before{content:"";position:absolute;left:14px;top:16px;width:18px;height:18px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--c) 45%,transparent 72%);box-shadow:0 0 14px var(--c)}
.bv-orb[data-tone=classic]{--c:#E6B85C}.bv-orb[data-tone=campus]{--c:#38BDF8}.bv-orb[data-tone=vibe]{--c:#E879F9}.bv-orb[data-tone=power]{--c:#93C5FD}
.bv-orb b{font-size:16px;color:#fff}
.bv-orb small{font-size:13px;color:var(--muted)}
.bv-orb:hover>span{border-color:#5B66C8}
.bv-orb input:checked+span{border-color:var(--c);background:color-mix(in srgb,var(--c) 14%,#141A52);box-shadow:0 0 28px color-mix(in srgb,var(--c) 35%,transparent),inset 0 0 0 1px var(--c);transform:translateY(-2px)}
.bv-orb input:focus-visible+span,.bv-pick input:focus-visible+span{outline:3px solid var(--lav);outline-offset:2px}
.bv-sample{margin:14px 0 0;padding:12px;border-radius:18px;border:1px solid var(--line);background:rgba(8,11,36,.55);display:flex;flex-direction:column;gap:8px;min-height:170px}
.bv-sample figcaption{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--lav);font-weight:600}
.bv-msg{max-width:90%;margin:0;padding:8px 12px;border-radius:16px;font-size:15px;overflow-wrap:anywhere}
.bv-msg:empty{display:none}
.bv-msg.me{align-self:flex-end;background:linear-gradient(180deg,#5B3FD6,#4330B0);border-bottom-right-radius:5px}
.bv-msg.bud{align-self:flex-start;background:rgba(24,28,78,.95);border:1px solid var(--line);border-bottom-left-radius:5px}
.bv-msg.note{align-self:stretch;max-width:none;background:transparent;border:1px dashed rgba(230,184,92,.5);color:var(--gold-hi);font-size:13px}
.bv-msg .bv-tag{margin:0 0 6px;display:flex;width:max-content}
.bv-typing{display:inline-flex;gap:4px;padding:12px 14px}.bv-typing i{width:7px;height:7px;border-radius:50%;background:var(--lav);animation:dot 1s infinite}.bv-typing i:nth-child(2){animation-delay:.15s}.bv-typing i:nth-child(3){animation-delay:.3s}

/* voices */
.bv-voicecard{margin:16px 0 0;padding:14px;border-radius:18px;border:1px solid rgba(230,184,92,.4);background:rgba(8,11,36,.55)}
.bv-voicecard figcaption{margin:0 0 4px}

/* powers */
.bv-tabs{display:flex;gap:4px;margin-top:14px;padding:4px;border-radius:16px;border:1px solid var(--line);background:rgba(8,11,36,.55);overflow-x:auto;scrollbar-width:none}
.bv-tabs::-webkit-scrollbar{display:none}
.bv-tabs [role=tab]{flex:1 0 auto;min-height:44px;min-width:44px;padding:0 10px;border:0;border-radius:12px;background:transparent;color:var(--muted);font-weight:600;font-size:14px;transition:background .25s,color .25s}
.bv-tabs [role=tab][aria-selected=true]{background:linear-gradient(180deg,#3B2D8F,#2A1F6B);color:#fff;box-shadow:inset 0 0 0 1px rgba(196,181,253,.5)}
.bv-power{margin-top:12px;padding:14px;border-radius:20px;border:1px solid var(--line);background:var(--card);animation:chIn .4s var(--ease) both}
.bv-power:focus-visible{outline-offset:2px}
.bv-ask,.bv-access{display:flex;gap:8px;align-items:flex-end;margin-top:12px}
.bv-ask input{flex:1;min-width:0;margin:0}
.bv-access{flex-direction:column;align-items:stretch;padding:10px;border-radius:14px;border:1px dashed rgba(230,184,92,.5)}
.bv-access label{font-size:14px;font-weight:600}
.bv-access .bv-row{margin-top:6px;flex-wrap:nowrap}
.bv-access input{flex:1;min-width:0;margin:0}
.bv-thread{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.bv-thread:empty{display:none}
.bv-picks{display:flex;flex-wrap:wrap;gap:8px}
.bv-picks legend,.bv-identity legend{padding:0;margin-bottom:8px;font-weight:600;font-size:15px}
.bv-pick{position:relative;cursor:pointer}
.bv-pick>span{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border-radius:999px;border:1px solid #4450A8;background:rgba(15,20,64,.6);font-size:14px;transition:border-color .2s,background .2s}
.bv-pick>span small{color:var(--dim);font-size:12px}
.bv-pick input:checked+span{border-color:var(--gold);background:rgba(230,184,92,.16);color:var(--gold-hi)}
.bv-pick input[type=checkbox]:checked+span::before{content:"✓";font-weight:700}
.bv-timeline{margin:12px 0 0;padding:0;list-style:none;display:grid;gap:6px}
.bv-timeline li{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;align-items:center;padding:9px 12px;border-radius:14px;background:rgba(139,92,246,.14);border:1px solid rgba(139,92,246,.35);font-size:14px;animation:pop .35s var(--ease) both}
.bv-timeline time{color:var(--gold-hi);font-weight:600;font-variant-numeric:tabular-nums}
.bv-timeline li.end{background:transparent;border-style:dashed;color:var(--muted)}
.bv-post{margin:12px 0 0;padding:18px;border-radius:20px;background:linear-gradient(150deg,#3A2C86,#0E1338 70%);border:1px solid rgba(230,184,92,.55);box-shadow:0 18px 40px rgba(0,0,0,.3)}
.bv-post blockquote{margin:0;font:500 21px/1.3 Fraunces,Georgia,serif;color:#fff;min-height:3.9em}
.bv-post figcaption{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:var(--gold);font-size:12px;font-weight:600;letter-spacing:.08em}
.bv-action{margin-top:12px;padding:14px;border-radius:18px;border:1px solid rgba(230,184,92,.6);background:linear-gradient(160deg,rgba(58,44,134,.85),rgba(14,19,56,.95));animation:pop .35s var(--ease)}
.bv-action p{margin:0}
.bv-action-kind{font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--gold)}
.bv-action-title{margin-top:4px!important;font:500 22px/1.25 Fraunces,Georgia,serif;color:#fff;overflow-wrap:anywhere}
.bv-action-when{margin-top:2px!important;color:var(--muted);font-size:14px}
.bv-action.done{border-color:#4ADE80}
.bv-action.done .bv-action-kind::after{content:" · confirmed (demo)";color:#BBF7D0}
.bv-tagline{margin:6px 0 0;font:italic 400 17px Fraunces,Georgia,serif;color:var(--gold-hi)}
.bv-bridge{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:8px;margin-top:12px}
.bv-side{display:flex;flex-direction:column;align-items:center;text-align:center;min-width:0}
.bv-mini{display:block;width:84px;height:84px;border-radius:50%;overflow:hidden;background:radial-gradient(closest-side,rgba(56,189,248,.3),transparent);border:1px solid rgba(155,227,255,.4)}
.bv-mini mj-buddy{width:100%;height:100%}
.bv-lang{margin:6px 0 0;font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#9BE3FF}
.bv-said{margin:6px 0 0;min-height:3em;font:500 16px/1.35 Fraunces,Georgia,serif;color:#fff;overflow-wrap:anywhere}
.bv-said.in{animation:pop .4s var(--ease) both}
.bv-swap{align-self:center;width:44px;height:44px;border-radius:50%;border:1px solid #4F5BB8;background:rgba(15,20,64,.8);font-size:18px}
.bv-safe{margin:16px 0 0;padding:10px 12px;border-radius:14px;border:1px solid rgba(74,222,128,.35);background:rgba(16,40,40,.35);color:#D1FAE5;font-size:13px}

/* ready */
.bv-summary{margin:14px 0 0;padding:0;display:grid;border-radius:18px;border:1px solid var(--line);background:var(--card);overflow:hidden}
.bv-summary>div{display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:8px;padding:2px 6px 2px 14px;border-bottom:1px solid #232A6A}
.bv-summary>div:last-child{border-bottom:0}
.bv-summary dt{color:var(--dim);font-size:13px}
.bv-summary dd{margin:0;font-weight:600;overflow-wrap:anywhere}
.bv-summary dd small{display:block;font-weight:400;color:var(--dim);font-size:12px}
.bv-edit{min-height:44px;min-width:44px;padding:0 12px;border:0;border-radius:12px;background:transparent;color:var(--lav);font-weight:600;font-size:13px}
.bv-edit:hover{background:rgba(196,181,253,.1)}
.bv-identity{display:flex;flex-wrap:wrap;gap:8px}
.bv-identity legend{width:100%}
.bv-enter{min-width:200px}

/* bottom navigation */
.bv-nav{flex:none;position:relative;z-index:4;display:flex;align-items:center;gap:12px;padding:10px 18px calc(12px + env(safe-area-inset-bottom));border-top:1px solid rgba(68,80,168,.4);background:rgba(10,14,46,.78);backdrop-filter:blur(10px)}
.bv-nav .bv-primary{margin-left:auto;min-width:120px}
.bv-nav .bv-ghost{min-width:84px}
.bv-count{color:var(--dim);font-size:13px}
.bv[data-chapter=arrival] .bv-nav,.bv[data-chapter=ready] .bv-nav{display:none}

/* ---------------------------------------------------------------- Buddy's body language (fallback motion) */
.bv-rig.m-nod{animation:mNod .7s var(--ease)}
.bv-rig.m-bob{animation:mBob .9s var(--ease)}
.bv-rig.m-tilt-l{animation:mTiltL 1s var(--ease)}
.bv-rig.m-tilt-r{animation:mTiltR 1s var(--ease)}
.bv-rig.m-lean{animation:mLean 1.1s var(--ease)}
.bv-rig.m-shake{animation:mShake .6s ease}
.bv-rig.m-tap{animation:mTap .45s var(--ease)}
.bv.leaving .bv-rig{transition:transform .8s var(--ease),filter .8s;transform:scale(1.12) translateY(-2%);filter:brightness(1.3)}
.bv.leaving .bv-panel,.bv.leaving .bv-nav,.bv.leaving .bv-top{transition:opacity .45s;opacity:0}
.bv.leaving .bv-atmos{transition:transform .9s var(--ease);transform:scale(1.25)}

/* ---------------------------------------------------------------- arrival: a cinematic power-on (CSS timeline) */
.bv-curtain{position:absolute;inset:0;z-index:6;pointer-events:none;display:none}
.bv-curtain i{position:absolute;left:0;right:0;height:11vh;background:#03040F}
.bv-curtain i:first-child{top:0;transform-origin:top}.bv-curtain i:last-child{bottom:0;transform-origin:bottom}
.bv.intro .bv-curtain{display:block}
.bv.intro .bv-curtain i{animation:curtain 1.1s 2.6s var(--ease) both}
.bv.intro .bv-curtain::before{content:"";position:absolute;left:50%;top:38%;width:6px;height:6px;margin:-3px;border-radius:50%;background:#FFF6DA;box-shadow:0 0 30px 10px rgba(255,231,168,.9),0 0 120px 40px rgba(139,92,246,.6);animation:ignite 2s .1s ease-out both}
.bv.intro .bv-atmos{animation:lightsUp 2.4s .5s ease-out both}
.bv.intro .bv-sky{animation:fadeIn 1.6s .2s ease-out both}
.bv.intro .bv-halo{animation:haloUp 2s 1s var(--ease) both,glow 6s 3s ease-in-out infinite}
.bv.intro .bv-orbit{animation:fadeIn 1.4s 1.6s ease-out both}
.bv.intro .bv-rig{animation:powerOn 2.2s .9s cubic-bezier(.3,.7,.2,1) both}
.bv.intro .bv-reveal{animation:emerge 1s var(--ease) both}
.bv.intro .bv-reveal:nth-child(1){animation-delay:2.5s}.bv.intro .bv-reveal:nth-child(2){animation-delay:2.75s}
.bv.intro #ch-arrival .bv-eyebrow{animation:fadeIn .9s 2.3s both}
.bv.intro #ch-arrival .bv-lede{animation:emerge 1s 3.1s var(--ease) both}
.bv.intro #ch-arrival .bv-row,.bv.intro #ch-arrival .bv-hint{animation:rise .9s 3.2s var(--ease) both}
.bv.intro .bv-top,.bv.intro .bv-plate{animation:fadeIn .8s 3.2s both}
.bv.intro .bv-skip{animation:none}

/* ---------------------------------------------------------------- keyframes */
@keyframes chIn{from{opacity:0;transform:translate3d(0,18px,0)}to{opacity:1;transform:none}}
@keyframes chBack{from{opacity:0;transform:translate3d(0,-18px,0)}to{opacity:1;transform:none}}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.97)}to{opacity:1;transform:none}}
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
/* Words surface out of the dark: barely there (never fully transparent) until their cue. */
@keyframes emerge{from{opacity:.04;transform:translateY(14px);filter:blur(5px)}to{opacity:1;transform:none;filter:none}}
@keyframes glow{0%,100%{opacity:.75}50%{opacity:1}}
@keyframes spin{from{rotate:0deg}to{rotate:360deg}}
@keyframes aurora{0%{rotate:0deg;scale:1}100%{rotate:14deg;scale:1.12}}
@keyframes fog{0%{translate:-3% 0}100%{translate:3% 0}}
@keyframes breathe{0%,100%{box-shadow:0 10px 30px rgba(230,184,92,.25)}50%{box-shadow:0 10px 44px rgba(230,184,92,.55)}}
@keyframes dot{0%,100%{opacity:.3}50%{opacity:1}}
@keyframes eq{from{transform:scaleY(.2)}to{transform:scaleY(1)}}
@keyframes letterIn{from{opacity:0;transform:translateY(10px) scale(.6);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
@keyframes flare{0%{filter:brightness(1)}30%{filter:brightness(1.8)}100%{filter:brightness(1)}}
@keyframes ignite{0%{opacity:0;scale:.2}25%{opacity:1;scale:1}80%{opacity:.9;scale:1.6}100%{opacity:0;scale:3}}
@keyframes lightsUp{from{opacity:0}to{opacity:1}}
@keyframes haloUp{from{opacity:0;scale:.4}to{opacity:1;scale:1}}
@keyframes powerOn{0%{filter:brightness(.04) saturate(0);translate:0 4%}45%{filter:brightness(.35) saturate(.4)}70%{filter:brightness(1.25) saturate(1.1)}100%{filter:none;translate:0 0}}
@keyframes curtain{from{transform:scaleY(1)}to{transform:scaleY(0)}}
@keyframes mNod{0%,100%{rotate:0deg;translate:0 0}35%{translate:0 2%}65%{translate:0 -1%}}
@keyframes mBob{0%,100%{translate:0 0;scale:1}40%{translate:0 -4%;scale:1.02}70%{translate:0 1%}}
@keyframes mTiltL{0%,100%{rotate:0deg}40%,70%{rotate:-4deg}}
@keyframes mTiltR{0%,100%{rotate:0deg}40%,70%{rotate:4deg}}
@keyframes mLean{0%,100%{scale:1;translate:0 0}45%,70%{scale:1.05;translate:0 -2%}}
@keyframes mShake{0%,100%{rotate:0deg}25%{rotate:-2.5deg}50%{rotate:2.5deg}75%{rotate:-1.5deg}}
@keyframes mTap{0%{scale:1}35%{scale:.96}70%{scale:1.03}100%{scale:1}}

/* ---------------------------------------------------------------- reduced motion: the lit world, still */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .bv-curtain{display:none!important}
  .bv-atmos>div,.bv-poke{transform:none!important}
}

/* ---------------------------------------------------------------- small and short phones */
@media (max-width:360px){.bv-panel{padding-left:14px;padding-right:14px}.bv-nav{padding-left:14px;padding-right:14px}.bv-path button{width:24px}.bv-tabs [role=tab]{padding:0 8px;font-size:13px}}
@media (max-height:640px) and (max-width:899px){.bv-stage{height:26vh;height:26dvh;min-height:130px}.bv[data-chapter=arrival] .bv-stage{height:42vh;height:42dvh}.bv-caption{font-size:13px}}

/* ---------------------------------------------------------------- desktop: Buddy's world on the left, chapters on the right */
@media (min-width:900px){
  .bv-top{padding:16px 28px 0}
  .bv-world{flex-direction:row;align-items:stretch;max-width:1320px;width:100%;margin:0 auto;padding:0 32px 20px;gap:32px}
  .bv-stage,.bv[data-chapter] .bv-stage{flex:1 1 52%;height:auto;min-height:0;padding:80px 0 40px}
  .bv[data-chapter] .bv-caption{top:24px;right:4%;max-width:min(64%,360px);font-size:16px;padding:12px 16px}
  .bv-rig mj-buddy{height:min(calc(100vh - 210px),740px);height:min(calc(100dvh - 210px),740px);-webkit-mask-image:none;mask-image:none}
  .bv-poke{height:auto}
  .bv-halo{width:min(560px,42vw)}.bv-orbit{width:min(520px,38vw)}.bv-floor{width:min(520px,40vw);height:60px}
  .bv-caption{top:24px;right:4%;max-width:min(64%,360px);font-size:16px;padding:12px 16px}
  .bv-lightname{bottom:56px;font-size:56px}
  .bv-panel{flex:1 1 48%;max-width:600px;align-self:center;max-height:100%;padding:32px 36px 28px;border-radius:28px;border:1px solid rgba(68,80,168,.5);background:rgba(14,19,56,.58);backdrop-filter:blur(14px)}
  .bv-ch h2{font-size:42px}
  .bv[data-chapter=arrival] .bv-ch{text-align:left}
  .bv[data-chapter=arrival] .bv-row-center{justify-content:flex-start}
  .bv-nav{max-width:1320px;width:100%;margin:0 auto;border:0;background:transparent;backdrop-filter:none;padding:0 32px 22px;justify-content:flex-end}
  .bv-nav .bv-primary{margin-left:0}
  .bv-nav{gap:16px}
  .bv-mini{width:110px;height:110px}
}

/* Interactive Companion Selection entry point (/meet) */
.bv-meet{text-align:center}.bv-meet a{display:inline-flex;align-items:center;min-height:44px}

/* ---------------------------------------------------------------- v2: Buddy's voice toggle and badge */
.bv-sound{display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:999px;background:transparent;color:var(--muted)}
.bv-sound:hover{color:#fff;background:rgba(196,181,253,.1)}
.bv-sound .on{display:none}
.bv-sound[aria-pressed=true]{color:var(--gold-hi)}
.bv-sound[aria-pressed=true] .on{display:inline}.bv-sound[aria-pressed=true] .off{display:none}
.bv-voicebadge{position:absolute;z-index:3;top:4px;left:10px;margin:0;padding:3px 9px;border-radius:999px;border:1px solid rgba(155,227,255,.55);background:rgba(14,19,56,.8);color:#D4F3FF;font:700 10px/1.4 Inter,sans-serif;letter-spacing:.12em;text-transform:uppercase}
.bv-voicebadge[data-kind=signature]{border-color:#4ADE80;color:#BBF7D0}

/* typing dots in Buddy's speech bubble */
.bv-caption.typing{display:inline-flex;gap:5px;padding:13px 15px}
.bv-caption.typing i{width:7px;height:7px;border-radius:50%;background:#5B3FD6;animation:dot 1s infinite}
.bv-caption.typing i:nth-child(2){animation-delay:.15s}.bv-caption.typing i:nth-child(3){animation-delay:.3s}

/* a sweep of light across Buddy's armor (overlay blend: armor flares, the dark around him barely changes) */
.bv-sheen{position:absolute;inset:0;overflow:hidden;pointer-events:none;opacity:0;visibility:hidden;
  -webkit-mask-image:radial-gradient(ellipse 46% 52% at 50% 46%,#000 55%,transparent 100%);mask-image:radial-gradient(ellipse 46% 52% at 50% 46%,#000 55%,transparent 100%)}
.bv-sheen::before{content:"";position:absolute;top:-10%;bottom:-10%;left:0;width:45%;background:linear-gradient(100deg,transparent,rgba(255,246,218,.0) 20%,rgba(255,246,218,.95) 50%,rgba(255,246,218,0) 80%,transparent);transform:translate3d(-120%,0,0) skewX(-14deg)}
.bv.intro .bv-sheen,.bv.sheen .bv-sheen{opacity:1;visibility:visible;mix-blend-mode:overlay}
.bv.intro .bv-sheen::before{animation:sweep 1.3s 2.05s cubic-bezier(.45,.05,.25,1) both}
.bv.sheen .bv-sheen::before{animation:sweep 1.1s cubic-bezier(.45,.05,.25,1) both}

/* camera: a slow push-in on Buddy, the world behind moving less (depth) */
.bv.intro .bv-stage{animation:camIn 3.6s .1s cubic-bezier(.16,.7,.12,1) both;transform-origin:50% 40%}
.bv.intro .bv-atmos{animation:lightsUp 2.4s .5s ease-out both,camBack 3.8s .1s cubic-bezier(.16,.7,.12,1) both}
/* visor power-on: a scan line rises over Buddy, then his eyes light (the live expression layer) */
.bv-stage::after{content:"";position:absolute;left:18%;right:18%;top:0;height:3px;z-index:2;pointer-events:none;opacity:0;border-radius:3px;
  background:linear-gradient(90deg,transparent,#9BE3FF 30%,#fff 50%,#9BE3FF 70%,transparent);box-shadow:0 0 18px 4px rgba(155,227,255,.7)}
.bv.intro.visor .bv-stage::after{animation:scan .9s ease-out both}
.bv.intro.visor .bv-halo{animation:visorFlash 1.1s ease-out both,glow 6s 3s ease-in-out infinite}
/* a touch lands: Buddy's halo answers */
.bv.touched .bv-halo{animation:touchFlash .7s ease-out,glow 6s 1s ease-in-out infinite}

/* Buddy X: his world runs warmer (copper), same structure */
.bv[data-companion=buddy-x]{--gold:#FF9A4D;--gold-hi:#FFD2A8}
.bv[data-companion=buddy-x] .bv-halo{background:radial-gradient(closest-side,rgba(255,122,26,.35),color-mix(in srgb,var(--t1) 30%,transparent) 58%,transparent)}

@keyframes sweep{from{transform:translate3d(-120%,0,0) skewX(-14deg)}to{transform:translate3d(260%,0,0) skewX(-14deg)}}
@keyframes camIn{from{transform:scale(1.32) translate3d(0,7%,0)}to{transform:none}}
@keyframes camBack{from{transform:scale(1.12)}to{transform:none}}
@keyframes scan{0%{opacity:0;top:85%}20%{opacity:1}100%{opacity:0;top:12%}}
@keyframes visorFlash{0%{opacity:.6;scale:.9}35%{opacity:1;scale:1.12;filter:brightness(1.6)}100%{opacity:1;scale:1;filter:none}}
@keyframes touchFlash{0%{scale:1}30%{scale:1.1;filter:brightness(1.7)}100%{scale:1;filter:none}}
@media (prefers-reduced-motion:reduce){.bv-sheen,.bv-stage::after{display:none}.bv.intro .bv-stage,.bv.intro .bv-atmos{transform:none!important}}
@media (min-width:900px){.bv-voicebadge{top:28px;left:6%}}
.bv-logo,.bv-sound,.bv-skip{flex:none}
@media (max-width:340px){.bv-path button{width:20px}.bv-skip{padding:0 10px}}
.bv.intro #ch-arrival .bv-meet{animation:rise .9s 3.3s var(--ease) both}

/* ---------------------------------------------------------------- v2: the journey as one conversation
   Chapters stay in one continuous thread: what you already answered stays above (Buddy's question and your answer as
   chat bubbles), the current question is live at the bottom, and the panel glides to it. No card swaps. */
.bv-ch{animation:none}
.bv-ch+.bv-ch{margin-top:18px}
.bv-ch.now{animation:turnIn .5s var(--ease) both}
.bv-ch:not(#ch-arrival) .bv-eyebrow{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.bv-ch:not(#ch-arrival) h2{position:relative;display:block;width:fit-content;max-width:94%;margin:0 0 4px 34px;padding:10px 15px;border-radius:18px 18px 18px 5px;
  background:rgba(243,241,255,.96);color:#1B1240;font:600 clamp(18px,4.8vw,22px)/1.3 Inter,system-ui,sans-serif;letter-spacing:0;box-shadow:0 10px 26px rgba(0,0,0,.28)}
.bv-ch:not(#ch-arrival) h2::before{content:"";position:absolute;left:-34px;bottom:0;width:26px;height:26px;border-radius:50%;
  background:radial-gradient(circle at 50% 40%,#9BE3FF 0 3px,transparent 4px),radial-gradient(circle at 35% 30%,#fff,var(--gold) 55%,#3B2D8F);box-shadow:0 0 12px color-mix(in srgb,var(--gold) 60%,transparent)}
.bv-ch.now:not(#ch-arrival) h2{animation:bubbleIn .55s .05s var(--ease) both}
.bv-ch.now:not(#ch-arrival) h2~*{animation:rise .5s .35s var(--ease) both}
/* answered: only Buddy's question and your answer remain */
.bv-ch.past>*:not(h2):not(.bv-you){display:none!important}
.bv-ch.past h2{opacity:.78;transform:scale(.97);transform-origin:0 100%;font-size:16px!important}
.bv-ch.past#ch-arrival h2{margin:0;font:600 16px/1.3 Inter,sans-serif;text-align:left}
.bv[data-chapter] .bv-ch.past#ch-arrival{text-align:left}
.bv-you{display:block;width:fit-content;max-width:86%;margin:8px 0 0 auto;padding:9px 14px;border-radius:18px 18px 5px 18px;background:linear-gradient(180deg,#5B3FD6,#4330B0);color:#fff;font-size:15px;overflow-wrap:anywhere}
.bv-ch:not(.past) .bv-you{display:none}
.bv-ch.past .bv-you{animation:pop .35s var(--ease) both}

/* capabilities: a row of things to try, each opening as a hands-on card in the thread */
.bv-tabs{gap:8px;padding:0;border:0;background:transparent;flex-wrap:wrap;overflow:visible}
.bv-tabs [role=tab]{flex:0 0 auto;border:1px solid #4450A8;border-radius:999px;background:rgba(15,20,64,.6);padding:0 14px;color:var(--ink)}
.bv-tabs [role=tab][aria-selected=true]{border-color:var(--gold);background:rgba(230,184,92,.16);color:var(--gold-hi);box-shadow:none}
.bv-power{border-radius:20px 20px 20px 6px;background:linear-gradient(160deg,rgba(40,34,110,.9),rgba(16,20,66,.92));box-shadow:0 14px 34px rgba(0,0,0,.3)}
.bv-power h3{font-size:15px;color:var(--gold-hi)}
.bv-handoff{margin-top:10px}

@keyframes turnIn{from{opacity:0;transform:translate3d(0,26px,0)}to{opacity:1;transform:none}}
@keyframes bubbleIn{from{opacity:0;transform:translate3d(-8px,10px,0) scale(.92)}to{opacity:1;transform:none}}
@media (min-width:900px){.bv-ch:not(#ch-arrival) h2{font-size:22px}}
