/* The Vitru bubble (components/VitruBubble.astro, B1 / B/277): the values are Design/Design-Forum/vitru-bubble-demos.html "demo 12" (founder-approved), ported - not re-derived.
   Ported rules are scoped under .vitru-bubble and the keyframes are prefixed vb- so nothing leaks into the site. Deviations from the demo, all forced by the site's rules:
   (1) the blob "morph" (border-radius) and the "thinking" text shimmer (background-position) are not animated: only transform / opacity / stroke-dashoffset animate (restore's rule);
   (2) z-index sits below the cart scrim/drawer/menu (28/27 < 30) so those cover the bubble instead of the reverse; (3) the curtain delays that the demo sets from JS are plain CSS here (no inline style).
   Archivo 800 is self-hosted (font-src 'self'). The grain data: URI is allowed by img-src. */
@font-face { font-family: "Archivo"; font-weight: 800; font-style: normal; font-display: swap; src: url("/assets/fonts/Archivo-latin-800.woff2") format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
.vitru-bubble{
  --smoke:rgb(10 12 18 / 14%);--smoke-panel:rgb(32 34 38 / 40%);
  --t1:rgb(244 246 250 / 95%);--t2:rgb(236 240 248 / 74%);--t3:rgb(226 232 244 / 56%);
  --au-green:var(--vit-vitru-mint);--au-teal:var(--vit-vitru-cyan);--au-blue:var(--vit-vitru-blue);--au-violet:var(--vit-vitru-violet);--au-pink:var(--vit-vitru-magenta);--au-coral:var(--vit-vitru-coral);
  --ease:cubic-bezier(.2,.75,.25,1);
  --grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
  font-family:var(--vit-f-heb,Heebo,sans-serif);font-size:16px;line-height:1.5;
}
.vitru-bubble[hidden]{display:none}
.vitru-bubble .vb-defs{position:absolute;width:0;height:0;overflow:hidden}
.vitru-bubble :where(button,input){font:inherit;color:inherit;margin:0;box-sizing:border-box}
.vitru-bubble :where(button){appearance:none;-webkit-appearance:none;border:0;padding:0;background:none;text-align:inherit}
.vitru-bubble *,.vitru-bubble *::before,.vitru-bubble *::after{box-sizing:border-box}
.vitru-bubble .orbglass{position:relative;isolation:isolate;overflow:hidden;
  background:var(--smoke);backdrop-filter:blur(2.5px) saturate(140%) brightness(.92);-webkit-backdrop-filter:blur(2.5px) saturate(140%) brightness(.92)}
.vitru-bubble .au{position:absolute;inset:-20%;z-index:0;pointer-events:none;mix-blend-mode:screen;filter:blur(var(--au-blur,14px)) saturate(105%);opacity:var(--au-op,.5);transition:opacity .6s,filter .6s}
.vitru-bubble .au i{position:absolute;display:block;border-radius:50%;will-change:transform}
.vitru-bubble .au .c1{left:8%;top:5%;width:34%;height:95%;background:linear-gradient(180deg,transparent 0%,var(--au-green) 38%,rgb(43 227 160 / 35%) 70%,transparent 100%);animation:vb-c1 11s ease-in-out infinite alternate}
.vitru-bubble .au .c2{left:38%;top:0;width:30%;height:90%;background:linear-gradient(180deg,transparent 0%,var(--au-teal) 30%,var(--au-blue) 62%,transparent 100%);animation:vb-c2 14s ease-in-out infinite alternate}
.vitru-bubble .au .c3{left:62%;top:10%;width:32%;height:85%;background:linear-gradient(180deg,transparent 0%,var(--au-violet) 40%,rgb(224 95 176 / 55%) 75%,transparent 100%);animation:vb-c3 17s ease-in-out infinite alternate}
.vitru-bubble .au .c4{left:20%;top:55%;width:70%;height:55%;background:radial-gradient(closest-side,rgb(255 138 114 / 55%),transparent);animation:vb-c4 19s ease-in-out infinite alternate}
@keyframes vb-c1{0%{transform:translateX(-8%) skewX(-12deg) scaleY(.9)}100%{transform:translateX(22%) skewX(10deg) scaleY(1.1)}}
@keyframes vb-c2{0%{transform:translateX(14%) skewX(14deg) scaleY(1.05)}100%{transform:translateX(-20%) skewX(-8deg) scaleY(.85)}}
@keyframes vb-c3{0%{transform:translateX(-18%) skewX(8deg)}100%{transform:translateX(10%) skewX(-14deg) scaleY(1.15)}}
@keyframes vb-c4{0%{transform:translate(-10%,10%) scale(.9)}100%{transform:translate(12%,-8%) scale(1.15)}}
.vitru-bubble .frost{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgb(255 255 255 / 7%),rgb(255 255 255 / 0%) 45%,rgb(0 0 0 / 22%))}
.vitru-bubble .grain{position:absolute;inset:0;z-index:2;pointer-events:none;background:var(--grain);opacity:.07;mix-blend-mode:overlay}
.vitru-bubble .optics{position:absolute;inset:0;z-index:3;pointer-events:none;border-radius:inherit;
  box-shadow:inset 0 1px 0 rgb(255 255 255 / 38%),inset 0 -14px 26px rgb(0 0 0 / 38%),inset 0 0 0 .5px rgb(255 255 255 / 10%)}
.vitru-bubble .optics::before{content:"";position:absolute;inset:0;border-radius:inherit;
  background:radial-gradient(55% 32% at 30% 6%,rgb(255 255 255 / 30%),transparent 70%)}
.vitru-bubble .rim{position:absolute;inset:0;z-index:4;pointer-events:none;border-radius:inherit;padding:1.2px;overflow:hidden;
  -webkit-mask:linear-gradient(var(--vit-vitru-mask) 0 0) content-box,linear-gradient(var(--vit-vitru-mask) 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
.vitru-bubble .rim .au{--au-blur:4px;--au-op:.75;filter:blur(4px) saturate(120%) brightness(1.5);mix-blend-mode:normal}
.vitru-bubble .rim::after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgb(255 255 255 / 70%),transparent 35%,transparent 70%,rgb(255 255 255 / 25%))}
.vitru-bubble .aimark{display:block;overflow:visible;position:relative;z-index:5;color:var(--vit-vitru-mark);filter:drop-shadow(0 1px 6px rgb(0 0 0 / 45%))}
.vitru-bubble .aimark .cons{stroke-dasharray:90;stroke-dashoffset:90;animation:vb-draw 8s var(--ease) infinite}
.vitru-bubble .aimark .spark{transform-box:fill-box;transform-origin:center;animation:vb-twinkle 3.6s ease-in-out infinite}
@keyframes vb-draw{0%,10%{stroke-dashoffset:90}40%,82%{stroke-dashoffset:0}100%{stroke-dashoffset:-90}}
@keyframes vb-twinkle{0%,100%{transform:scale(.8) rotate(0)}50%{transform:scale(1.2) rotate(45deg)}}
.vitru-bubble .vb{position:fixed;left:24px;bottom:24px;width:82px;height:82px;z-index:28;touch-action:none;cursor:grab;user-select:none;
  border-radius:44% 56% 58% 42% / 47% 43% 57% 53%;
  box-shadow:0 14px 34px rgb(12 15 22 / 34%),0 2px 6px rgb(12 15 22 / 25%);transition:transform .2s var(--ease)}
.vitru-bubble .vb:hover{transform:scale(1.05)}
.vitru-bubble .vb:hover .au{--au-op:.7}
.vitru-bubble .vb:active{cursor:grabbing;transform:scale(.97)}
.vitru-bubble .vb:focus-visible{outline:2px solid var(--au-teal);outline-offset:4px}
.vitru-bubble .vb .aimark{position:absolute;left:50%;top:52%;width:42px;transform:translate(-50%,-50%)}
.vitru-bubble .vp{position:fixed;z-index:27;transform-origin:var(--ox,0) var(--oy,100%);width:min(400px,calc(100vw - 32px));border-radius:24px;color:var(--t1);
  background:var(--smoke-panel);backdrop-filter:blur(13px) saturate(60%) brightness(.72);-webkit-backdrop-filter:blur(13px) saturate(60%) brightness(.72);
  box-shadow:0 30px 70px rgb(12 15 22 / 38%),0 4px 14px rgb(12 15 22 / 22%);
  opacity:0;transform:scale(.2);pointer-events:none;transition:opacity .22s var(--ease),transform .38s cubic-bezier(.2,.9,.25,1.05)}
.vitru-bubble .vp.open{opacity:1;transform:none;pointer-events:auto}
.vitru-bubble .vp.thinking .au i{animation-duration:4s}
.vitru-bubble .vp .in{position:relative;z-index:5;padding:16px 18px 14px;text-shadow:0 1px 3px rgb(0 0 0 / 45%)}
.vitru-bubble .vp .top{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.vitru-bubble .vp .top b{font-size:17px;direction:ltr;display:block;color:var(--t1)}
.vitru-bubble .vp .top small{display:block;font-size:12.5px;color:var(--t2)}
.vitru-bubble .vp .x{margin-inline-start:auto;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:var(--t2);background:rgb(255 255 255 / 6%);box-shadow:inset 0 1px 0 rgb(255 255 255 / 12%)}
.vitru-bubble .vp .x:hover{color:var(--t1)}
.vitru-bubble .msgs{display:flex;flex-direction:column;gap:8px;max-height:min(290px,calc(100vh - 400px));min-height:90px;overflow:auto;margin-bottom:12px;padding:2px;scrollbar-width:thin;scrollbar-color:rgb(255 255 255 / 20%) transparent}
.vitru-bubble .m{padding:9px 13px;border-radius:14px;font-size:15.5px;max-width:88%;animation:vb-up .24s var(--ease) both}
.vitru-bubble .m.a{align-self:flex-start;background:none;box-shadow:inset 0 0 0 1px rgb(255 255 255 / 14%);color:var(--t1)}
.vitru-bubble .m.u{align-self:flex-end;background:none;box-shadow:inset 0 0 0 1px rgb(255 255 255 / 26%);color:var(--t1)}
@keyframes vb-up{from{opacity:0;transform:translateY(6px)}}
.vitru-bubble .spark-line{align-self:flex-start;display:flex;align-items:center;gap:8px;font-size:14px;color:var(--t3);padding:6px 4px}
.vitru-bubble .spark-line svg{width:16px;height:16px;animation:vb-spinspark 1.4s var(--ease) infinite}
@keyframes vb-spinspark{50%{transform:rotate(90deg) scale(1.25)}100%{transform:rotate(180deg)}}
.vitru-bubble .chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.vitru-bubble .chips button{font:inherit;border:0;font-size:13px;border-radius:999px;padding:5px 12px;cursor:pointer;color:var(--t1);background:none;box-shadow:inset 0 0 0 1px rgb(255 255 255 / 18%);transition:box-shadow .15s}
.vitru-bubble .chips button:hover{box-shadow:inset 0 0 0 1px rgb(255 255 255 / 40%)}
.vitru-bubble .inp{display:flex;gap:6px;align-items:center;border-radius:14px;padding:4px;background:none;box-shadow:inset 0 0 0 1px rgb(255 255 255 / 22%)}
.vitru-bubble .inp:focus-within{box-shadow:inset 0 0 0 1px rgb(255 255 255 / 50%)}
.vitru-bubble .inp input{flex:1;border:0;background:transparent;padding:8px 10px;font:inherit;font-size:15px;color:var(--t1);outline:0}
.vitru-bubble .inp input::placeholder{color:rgb(226 232 244 / 78%)}
.vitru-bubble .inp .send{background:linear-gradient(135deg,var(--vit-vitru-peach),var(--vit-vitru-rose));font-weight:700;border-radius:10px;padding:7px 14px;cursor:pointer;color:var(--vit-vitru-send-ink);box-shadow:inset 0 1px 0 rgb(255 255 255 / 35%)}
.vitru-bubble .legal{font-size:11.5px;color:var(--t2);margin-top:8px}
.vitru-bubble .edge-light{position:absolute;inset:0;z-index:0;border-radius:inherit;overflow:hidden;pointer-events:none;transition:opacity .5s}
.vitru-bubble .edge-light .au{inset:-15%;--au-op:.7;--au-blur:8px;mix-blend-mode:normal}
.vitru-bubble .vp .edge-light{
  -webkit-mask:linear-gradient(90deg,var(--vit-vitru-mask),transparent 30px,transparent calc(100% - 30px),var(--vit-vitru-mask)),linear-gradient(180deg,var(--vit-vitru-mask),transparent 30px,transparent calc(100% - 30px),var(--vit-vitru-mask));
  -webkit-mask-composite:source-over;mask:linear-gradient(90deg,var(--vit-vitru-mask),transparent 30px,transparent calc(100% - 30px),var(--vit-vitru-mask)),linear-gradient(180deg,var(--vit-vitru-mask),transparent 30px,transparent calc(100% - 30px),var(--vit-vitru-mask));mask-composite:add;opacity:.7}
.vitru-bubble .vb .edge-light{-webkit-mask:radial-gradient(closest-side,transparent 52%,var(--vit-vitru-mask) 96%);mask:radial-gradient(closest-side,transparent 52%,var(--vit-vitru-mask) 96%);opacity:.85}
.vitru-bubble .vp.thinking .edge-light{opacity:1}
.vitru-bubble .vp.thinking .edge-light .au i{animation-duration:4s}
.vitru-bubble .corners{position:absolute;inset:0;z-index:1;border-radius:inherit;pointer-events:none;mix-blend-mode:screen}
.vitru-bubble .vp .corners{background:
  radial-gradient(110px 80px at 0 0,rgb(43 227 160 / 26%),transparent 70%),
  radial-gradient(110px 80px at 100% 0,rgb(142 108 240 / 24%),transparent 70%),
  radial-gradient(110px 80px at 0 100%,rgb(255 138 114 / 20%),transparent 70%),
  radial-gradient(110px 80px at 100% 100%,rgb(76 125 246 / 22%),transparent 70%)}
.vitru-bubble .vb .corners{background:
  radial-gradient(40% 40% at 16% 16%,rgb(43 227 160 / 30%),transparent 70%),
  radial-gradient(40% 40% at 84% 84%,rgb(142 108 240 / 30%),transparent 70%),
  radial-gradient(34% 34% at 84% 18%,rgb(76 125 246 / 22%),transparent 70%),
  radial-gradient(34% 34% at 18% 84%,rgb(255 138 114 / 22%),transparent 70%)}
.vitru-bubble .optics{box-shadow:inset 1px 1px 0 rgb(255 255 255 / 38%),inset -1px -1px 0 rgb(255 255 255 / 10%),inset 0 0 0 .5px rgb(255 255 255 / 12%)}
.vitru-bubble .vp .optics::before{background:radial-gradient(70px 46px at 0 0,rgb(255 255 255 / 22%),transparent 75%)}
.vitru-bubble .vb .optics::before{background:radial-gradient(22% 16% at 30% 20%,rgb(255 255 255 / 42%),transparent 80%)}
.vitru-bubble .vb .optics{box-shadow:inset 1px 1.5px 0 rgb(255 255 255 / 40%),inset -1px -1px 0 rgb(255 255 255 / 10%)}
.vitru-bubble .vp .frost,.vitru-bubble .vp .grain{display:none}
.vitru-bubble .vp .grain{display:block;opacity:.05}
.vitru-bubble .vp .edge-light{opacity:.38}
.vitru-bubble .vp .edge-light .au{--au-blur:14px}
.vitru-bubble .vp .corners{opacity:.45}
.vitru-bubble .vp.thinking .edge-light{opacity:.75}
.vitru-bubble .vp .optics{box-shadow:inset 0 0 0 1px rgb(255 255 255 / 22%),inset 2px 2px 0 -1px rgb(255 255 255 / 30%),inset -2px -2px 0 -1px rgb(0 0 0 / 22%)}
.vitru-bubble .vp{box-shadow:0 0 0 1px rgb(20 22 28 / 45%),0 24px 60px rgb(12 15 22 / 30%)}
.vitru-bubble .vp .optics::before{background:radial-gradient(60px 36px at 0 0,rgb(255 255 255 / 14%),transparent 75%)}
.vitru-bubble .vp .rim{opacity:.55}
.vitru-bubble .vb .edge-light{opacity:.6}
.vitru-bubble .vb .corners{opacity:.6}
.vitru-bubble .vt{font-family:Archivo,Heebo,sans-serif;font-weight:800;letter-spacing:.24em}
.vitru-bubble .bmark{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;color:var(--vit-vitru-mark);filter:drop-shadow(0 1px 5px rgb(0 0 0 / 45%))}
.vitru-bubble .bmark .vt{font-size:8.5px;margin-inline-start:.24em;opacity:.9}
.vitru-bubble .bmark .aimark{width:34px;position:static;transform:none;filter:none}
.vitru-bubble .vp .top{gap:12px;align-items:center}
.vitru-bubble .engraved{display:flex;align-items:center;gap:7px;color:rgb(244 246 250 / 88%);
  filter:drop-shadow(0 1px 2px rgb(0 0 0 / 45%))}
.vitru-bubble .engraved .vt{font-size:16px;line-height:1}
.vitru-bubble .engraved .aimark{width:34px;filter:none;color:inherit}
.vitru-bubble .engraved .aimark line{display:none}
.vitru-bubble .vp .top small{font-size:12px}
.vitru-bubble .vb .edge-light .c1{animation-delay:-0.0s}
.vitru-bubble .vb .edge-light .c2{animation-delay:-2.7s}
.vitru-bubble .vb .edge-light .c3{animation-delay:-5.4s}
.vitru-bubble .vb .edge-light .c4{animation-delay:-8.1s}
.vitru-bubble .vb .rim .c1{animation-delay:-10.8s}
.vitru-bubble .vb .rim .c2{animation-delay:-0.5s}
.vitru-bubble .vb .rim .c3{animation-delay:-3.2s}
.vitru-bubble .vb .rim .c4{animation-delay:-5.9s}
.vitru-bubble .vp .edge-light .c1{animation-delay:-8.6s}
.vitru-bubble .vp .edge-light .c2{animation-delay:-11.3s}
.vitru-bubble .vp .edge-light .c3{animation-delay:-1.0s}
.vitru-bubble .vp .edge-light .c4{animation-delay:-3.7s}
.vitru-bubble .vp .rim .c1{animation-delay:-6.4s}
.vitru-bubble .vp .rim .c2{animation-delay:-9.1s}
.vitru-bubble .vp .rim .c3{animation-delay:-11.8s}
.vitru-bubble .vp .rim .c4{animation-delay:-1.5s}

/* ---- the shell's own additions (the demo has none of these) ---- */
.vitru-bubble .vb{display:block}
.vitru-bubble .vp{visibility:hidden;transition:opacity .22s var(--ease),transform .38s cubic-bezier(.2,.9,.25,1.05),visibility 0s .38s}
.vitru-bubble .vp.open{visibility:visible;transition-delay:0s}
.vitru-bubble .vp .x{border:0}
.vitru-bubble .vp .inp input{min-width:0}
.vitru-bubble .vp .send{border:0;font:inherit;font-weight:700}
.vitru-bubble .vp .vb-title{margin:0;font:inherit}
.vitru-bubble .vb:focus-visible,.vitru-bubble .vp .x:focus-visible,.vitru-bubble .vp .send:focus-visible{outline:2px solid var(--au-teal);outline-offset:4px}
.vitru-bubble.vb-paused *{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.vitru-bubble *,.vitru-bubble *::before,.vitru-bubble *::after{animation:none!important;transition:none!important}}
/* no backdrop-filter: an opaque dark pane, the same smoke colour at full opacity (AA text on any page) */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .vitru-bubble .vb{background:rgb(10 12 18)}
  .vitru-bubble .vp{background:rgb(32 34 38)}
}
.vitru-bubble .vb-defs .s-peach{stop-color:var(--vit-vitru-peach)}.vitru-bubble .vb-defs .s-rose{stop-color:var(--vit-vitru-rose)}.vitru-bubble .vb-defs .s-mint{stop-color:var(--vit-vitru-mint)}.vitru-bubble .vb-defs .s-cyan{stop-color:var(--vit-vitru-cyan)}.vitru-bubble .vb-defs .s-violet{stop-color:var(--vit-vitru-violet)}
.vitru-bubble .aimark .cons{stroke:var(--vit-vitru-mark-line)}.vitru-bubble .aimark .spark{fill:var(--vit-vitru-mark-line)}
.vitru-bubble .chips button:focus-visible{outline:2px solid var(--t1);outline-offset:2px}
.vitru-bubble .m.a a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.vitru-bubble .m .srcs{display:block;margin-top:6px;font-size:12.5px;color:var(--t2)}
.vitru-bubble .m.pending{color:var(--t2)}
.vitru-bubble .legal a{color:inherit;text-decoration:underline;text-underline-offset:3px}
