.cam{--cam-right:24px;--cam-bottom:24px;--cam-ease:cubic-bezier(0.22,1,0.36,1);--cam-ink:var(--ink);--cam-soft:var(--ink-3);--cam-radius:min(var(--radius),10px);position:fixed;right:var(--cam-right);bottom:var(--cam-bottom);z-index:60;transition:bottom .5s var(--cam-ease)}.cam-launch{position:relative;display:block;width:66px;height:66px;padding:0;border:0;border-radius:50%;background:none;cursor:pointer}.cam-launch:focus-visible{outline:2px solid var(--grape);outline-offset:6px}.cam-stage{position:absolute;right:0;bottom:0;width:260px;aspect-ratio:1;transform:scale(calc(66 / 260));transform-origin:100% 100%;transition:transform .65s var(--cam-ease)}.cam-spin{animation:cam-sway 7s ease-in-out infinite}.cam-reveal,.cam-spin{position:absolute;inset:0}.cam-reveal{z-index:1;width:100%;height:100%;object-fit:cover;opacity:0;transform:translateY(8%) scale(.9);-webkit-mask-image:linear-gradient(#000 62%,transparent 97%);mask-image:linear-gradient(#000 62%,transparent 97%);transition:opacity .35s,transform .5s var(--cam-ease);pointer-events:none}.cam-tornado{position:absolute;inset:0;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 12px 26px color-mix(in oklab,var(--ink) 30%,transparent));transition:opacity .45s,transform .6s var(--cam-ease)}.cam-t-color{transition:opacity .4s}.cam-t-line,.cam-t-window{opacity:0;transition:opacity .4s}.cam-t-line path{stroke-width:1.6;vector-effect:non-scaling-stroke}.cam-caption{position:absolute;right:268px;bottom:18px;display:grid;justify-items:end;gap:2px;white-space:nowrap;color:var(--cam-ink);text-shadow:0 1px 14px color-mix(in oklab,var(--paper) 90%,transparent);opacity:0;transform:translateX(8px);transition:opacity .3s,transform .5s var(--cam-ease);pointer-events:none}.cam-caption b{font-family:var(--font-display),ui-sans-serif,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1;letter-spacing:-.01em}.cam-caption small{font-size:13px;color:var(--cam-soft)}.cam-launch:is(:hover,:focus-visible) .cam-stage{transform:scale(1)}.cam-launch:is(:hover,:focus-visible) .cam-t-color{opacity:0}.cam-launch:is(:hover,:focus-visible) :is(.cam-t-window,.cam-t-line){opacity:1}.cam-launch:is(:hover,:focus-visible) .cam-reveal{opacity:1;transform:translateY(-4%) scale(1.02);transition:opacity .7s .45s,transform .9s .45s var(--cam-ease)}.cam-launch:is(:hover,:focus-visible) .cam-tornado{opacity:.32;transform:translateY(7%) scale(1.08);transition:opacity .6s .45s,transform .9s .45s var(--cam-ease)}.cam-launch:is(:hover,:focus-visible) .cam-caption{opacity:1;transform:none;transition:opacity .5s .6s,transform .7s .6s var(--cam-ease)}.cam-live{position:relative;width:clamp(230px,24vw,360px);aspect-ratio:1;animation:cam-arrive .8s var(--cam-ease) both}.cam-figure{position:absolute;inset:0;-webkit-mask-image:linear-gradient(#000 68%,transparent 98%);mask-image:linear-gradient(#000 68%,transparent 98%);animation:cam-float 6.5s ease-in-out infinite}.cam-face{position:relative;display:block;width:100%;height:100%;overflow:hidden;border-radius:inherit;background:var(--clone-bg,var(--paper-2));--clone-zoom:1.18;--clone-shift:3%}.cam-face>canvas,.cam-face>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;transform:scale(var(--clone-zoom)) translateY(var(--clone-shift));transform-origin:50% 40%}.cam-face>canvas{opacity:0;transition:opacity .45s ease}.cam-face.is-live>canvas{opacity:1}.cam-face.is-live>img{opacity:0;transition:opacity .45s ease .2s}.cam-face:not(.is-live)>img{animation:cam-face-breathe 6s ease-in-out infinite}@keyframes cam-face-breathe{50%{transform:scale(calc(var(--clone-zoom) * 1.015)) translateY(calc(var(--clone-shift) - .6%))}}.cam-live .cam-face{--clone-bg:transparent;--clone-zoom:1;--clone-shift:0%;border-radius:0}.cam-ground{position:absolute;left:14%;right:14%;bottom:1%;height:15%;border-radius:50%;background:radial-gradient(closest-side,color-mix(in oklab,var(--grape) 55%,transparent),transparent);filter:blur(10px);opacity:calc(.3 + var(--cam-mic, 0) * .7);transform:scale(calc(.9 + var(--cam-mic, 0) * .25));transition:opacity .12s,transform .12s}.cam[data-status=speaking] .cam-ground{background:radial-gradient(closest-side,color-mix(in oklab,var(--bubble) 50%,transparent),transparent)}.cam-controls{position:absolute;left:-46px;bottom:18%;display:grid;gap:8px}.cam-controls button{display:grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid color-mix(in oklab,var(--paper) 16%,transparent);border-radius:var(--cam-radius);background:color-mix(in oklab,var(--ink) 62%,transparent);color:var(--paper);cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:background-color .2s,transform .2s}.cam-controls button:hover{background:color-mix(in oklab,var(--ink) 85%,transparent);transform:scale(1.06)}.cam-controls button[aria-pressed=true]{background:var(--stop);border-color:transparent}.cam-notice{position:absolute;right:0;bottom:calc(100% + 12px);width:max-content;max-width:260px;margin:0;padding:9px 13px;border-radius:var(--cam-radius);background:color-mix(in oklab,var(--ink) 85%,transparent);color:var(--paper);font-size:13px;line-height:1.4;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.cam-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@keyframes cam-arrive{0%{opacity:0;transform:translateY(18px) scale(.94);filter:blur(8px)}}@keyframes cam-float{0%,to{translate:0 0}50%{translate:0 -8px}}@keyframes cam-sway{0%,to{transform:rotate(-2deg) skewX(2deg)}50%{transform:rotate(2deg) skewX(-3deg)}}@media (max-width:640px){.cam{--cam-right:14px;--cam-bottom:14px}.cam-launch{width:56px;height:56px}.cam-stage{transform:scale(calc(56 / 260))}.cam-live{width:min(64vw,280px)}}@media (prefers-reduced-motion:reduce){.cam-figure,.cam-live,.cam-spin{animation:none}.cam-caption,.cam-reveal,.cam-stage,.cam-tornado{transition-duration:.01s;transition-delay:0s}.cam-face:not(.is-live)>img{animation:none}}[data-cam-focus]{outline:2px solid color-mix(in oklab,var(--grape) 55%,transparent);outline-offset:6px;animation:cam-focus 2.6s ease-out forwards}@keyframes cam-focus{80%{outline-color:color-mix(in oklab,var(--grape) 55%,transparent)}to{outline-color:color-mix(in oklab,var(--grape) 0%,transparent)}}@media (prefers-reduced-motion:reduce){[data-cam-focus]{animation:none}}