/* Studio Concierge 2.0 · launcher only (every World 1 page). The workspace itself lives in
   css/concierge2.css and arrives with the first open. Graphite with an azure dot field: the same
   materials as the workspace it opens into, no glow, no gradient. */
/* placement: clear of the page frame. The hero card sits 20 px in from the viewport (10 px below 901 px)
   with a 40 px corner radius; the launcher keeps 24 px (16 px on phones) inside that edge, so the
   rounded corner never cuts through it. */
.cg2-root{--l-bg:#16181D;--l-bg-h:#1F232A;--l-ink:#F2F4F7;--l-disc:#0E1013;--l-dot:#5FA8FF;--l-dot2:#B9D6FA;--l-core:#E8EEF6;--l-acc:#2F7FE0;--l-pulse:rgba(95,168,255,.7);
  position:fixed;right:max(44px,env(safe-area-inset-right));bottom:max(44px,calc(12px + env(safe-area-inset-bottom)));z-index:8500;
  font-family:var(--font,Inter),system-ui,sans-serif;font-feature-settings:"cv11","ss01","calt";letter-spacing:-.018em;-webkit-font-smoothing:antialiased}
.cg2-launch{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 18px 0 8px;margin:0;border:0;border-radius:999px;cursor:pointer;
  background:var(--l-bg);color:var(--l-ink);font:inherit;font-size:14.5px;font-weight:500;line-height:1;white-space:nowrap;
  box-shadow:0 0 0 1px rgba(255,255,255,.12),0 10px 28px rgba(8,10,14,.28);
  transition:transform .22s cubic-bezier(.2,.7,.2,1),background-color .2s ease,opacity .25s ease,visibility 0s}
.cg2-launch:hover{background:var(--l-bg-h)}
.cg2-launch:active{transform:scale(.97)}
.cg2-launch:focus-visible{outline:2px solid var(--l-acc);outline-offset:3px}
.cg2-launch[aria-busy="true"]{cursor:progress}
/* the orb disc, 36 px. Until the orb has drawn its first frame (or if its script never arrives) seven
   static dots stand in: a small sphere seen from slightly above, silver-white in front, azure at the rim. */
.cg2-launch{padding-left:6px}
.cg2-launch-orb{position:relative;width:36px;height:36px;border-radius:50%;background:var(--l-disc);box-shadow:inset 0 0 0 1px rgba(255,255,255,.10);flex:none;overflow:hidden}
.cg2-launch-orb i{position:absolute;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background:var(--l-dot)}
.cg2-launch-orb i:nth-child(1){left:50%;top:52%;width:6px;height:6px;margin:-3px 0 0 -3px;background:var(--l-core)}
.cg2-launch-orb i:nth-child(2){left:50%;top:27%;width:3px;height:3px;margin:-1.5px 0 0 -1.5px;opacity:.55}
.cg2-launch-orb i:nth-child(3){left:73%;top:39%;width:4px;height:4px;background:var(--l-dot2);opacity:.8}
.cg2-launch-orb i:nth-child(4){left:73%;top:65%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;opacity:.9}
.cg2-launch-orb i:nth-child(5){left:50%;top:77%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;background:var(--l-dot2)}
.cg2-launch-orb i:nth-child(6){left:27%;top:65%;width:4px;height:4px;opacity:.75}
.cg2-launch-orb i:nth-child(7){left:27%;top:39%;width:3px;height:3px;margin:-1.5px 0 0 -1.5px;opacity:.5}
/* the real orb: the canvas sits on the disc; the static dots leave once it has drawn */
.cg2-launch-cv{position:absolute;inset:0;width:36px;height:36px;display:block}
.cg2-root.has-orb .cg2-launch-orb i{opacity:0}
/* activation pulse: one beat on click, before the workspace has even loaded */
.cg2-launch.is-pulse{animation:cg2-pulse .26s cubic-bezier(.2,.7,.2,1)}
.cg2-launch.is-pulse .cg2-launch-orb{animation:cg2-orb-pulse .26s cubic-bezier(.2,.7,.2,1)}
@keyframes cg2-pulse{0%{transform:scale(1)}40%{transform:scale(.95)}100%{transform:scale(1)}}
@keyframes cg2-orb-pulse{0%{box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}35%{box-shadow:inset 0 0 0 1px var(--l-pulse)}100%{box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}}
/* while the workspace is open (or morphing out of it) the launcher steps out of the way */
.cg2-root.is-open .cg2-launch,.cg2-root[data-state="opening"] .cg2-launch{opacity:0;visibility:hidden;transition:opacity .12s ease,visibility 0s .12s}
@media (max-width:900px){.cg2-root{right:max(32px,env(safe-area-inset-right));bottom:max(32px,calc(12px + env(safe-area-inset-bottom)))}}
@media (max-width:600px){
  .cg2-root{right:max(26px,calc(10px + env(safe-area-inset-right)));bottom:calc(26px + env(safe-area-inset-bottom))}
}
/* phones and tablets (27 Oct 2026): a compact pill. One line that never wraps, a 28 px orb with clear
   space before the label, 48 px tall (its 24 px end radius still sits inside the card's 40 px corner),
   and never wider than the screen minus both side margins. The orb canvas is created at 28 px by
   js/concierge2-boot.js when this query matches, so the bitmap is not a shrunken 36 px one. */
@media (max-width:900px){
  .cg2-launch{min-height:48px;padding:0 17px 0 10px;gap:10px;font-size:14px;font-weight:500;letter-spacing:-.01em;
    max-width:calc(100vw - 52px - env(safe-area-inset-left) - env(safe-area-inset-right));box-sizing:border-box}
  .cg2-launch-label{min-width:0;overflow:hidden;text-overflow:ellipsis}
  .cg2-launch-orb,.cg2-launch-cv{width:28px;height:28px}
  .cg2-launch-orb i:nth-child(n){transform:scale(.78)}
  .cg2-launch:focus:not(:focus-visible){outline:none}
}
/* the cookie bar owns the bottom of narrow screens until the visitor decides */
@media (max-width:900px){.cg2-root.cc-pending{opacity:0;transform:translateY(14px);pointer-events:none;transition:opacity .3s ease,transform .3s ease}}
@media (prefers-reduced-motion:reduce){
  .cg2-launch,.cg2-root.cc-pending{transition:none}
  .cg2-launch.is-pulse,.cg2-launch.is-pulse .cg2-launch-orb{animation:none}
}
@media (forced-colors:active){.cg2-launch{border:1px solid ButtonText}}
/* beats css/a11y-focus.css (html button:focus-visible, 8px radius) and keeps the pill */
html .cg2-launch:focus-visible{outline:2px solid var(--l-acc);outline-offset:3px;border-radius:999px;box-shadow:0 0 0 1px rgba(255,255,255,.12),0 10px 28px rgba(8,10,14,.28)}

/* Focus ring (both worlds, 27 Oct 2026): 2 px, 3 px offset, at least 3:1 against the page and the pill.
   World 1 #2F7FE0: 4.0:1 on white, 4.4:1 against the pill (the earlier #5FA8FF was 2.5:1 on white). */
/* World 2 (the AI Lab): the same launcher in navy and violet; only the tokens differ.
   Label #F5F5FA on #141A33 15.8:1. The focus ring is the deeper purple #7868E8: 3.7:1 on the light
   sections (#F0F0F0), 4.2:1 on the dark ones (#181818) and 4.0:1 against the pill itself. */
.cg2-root[data-mode=ai]{--l-bg:#141A33;--l-bg-h:#1C2342;--l-ink:#F5F5FA;--l-disc:#0B0F20;--l-dot:#A69AF5;--l-dot2:#D4CEFB;--l-core:#EEEDFB;--l-acc:#7868E8;--l-pulse:rgba(166,154,245,.7)}
/* The AI Lab's page CSS is not the studio's (another face, a reset of every margin and padding, other
   letter-spacing), and the chat must not inherit any of that. These rules give the chat in World 2
   exactly what it inherits from the studio's page in World 1, at the same (lowest) specificity:
   Inter at 15/1.5, weight 500, the -.03em tracking style.css gives these tags, the field's own inset. */
.cg2-root[data-mode=ai]{--font:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;font-size:15px;line-height:1.5;font-weight:500}
:where(.cg2-root[data-mode=ai]) :is(p,li,dd,dt,span,small,time,label,input,textarea,button,a,strong,b,em){letter-spacing:-.03em}
:where(.cg2-root[data-mode=ai]) input{padding:revert}
