.project-visual{--pv-line:var(--visual-line,#a4aba7);--pv-surface:var(--visual-surface,#f9faf8);--pv-side:var(--visual-side,#e3e7e2);--pv-grid:var(--visual-grid,#d6ddd7);--pv-accent:var(--accent,#279875);perspective:800px;justify-content:center;align-items:center;width:100%;min-width:0;height:100%;min-height:0;padding:28px 16px 34px;display:flex;overflow:hidden}.project-visual-scene{width:100%;min-width:0;height:100%;min-height:0;transform:rotateX(var(--pv-rotate-x,0deg)) rotateY(var(--pv-rotate-y,0deg));stroke-width:1.2px;stroke-linejoin:round;stroke-linecap:round;flex:none;transition:transform .45s cubic-bezier(.2,.65,.25,1);display:block;overflow:visible}.project-visual .pv-ground{stroke:var(--pv-grid);stroke-width:.65px;opacity:.26}.project-visual .pv-shadow{fill:var(--pv-line);opacity:.075;filter:blur(5px)}.project-visual .pv-surface{fill:var(--pv-surface);stroke:var(--pv-line)}.project-visual .pv-side{fill:var(--pv-side);stroke:var(--pv-line)}.project-visual .pv-line,.project-visual .pv-detail{fill:none;stroke:var(--pv-line)}.project-visual .pv-detail{stroke-width:.9px;opacity:.7}.project-visual .pv-tint{fill:color-mix(in srgb, var(--pv-accent) 5%, var(--pv-surface));stroke:var(--pv-line);stroke-width:.9px}.project-visual .pv-accent-line,.project-visual .pv-accent-border{stroke:var(--pv-accent);opacity:.8}.project-visual .pv-accent-line{fill:none;stroke-width:1.2px}.project-visual .pv-dot{fill:var(--pv-line);stroke:none;opacity:.7}.project-visual .pv-status{fill:var(--pv-accent);stroke:none;animation:3.6s ease-in-out infinite pv-status}.project-visual .pv-wire{fill:none;stroke:var(--pv-line);stroke-width:1px;opacity:.55}.project-visual .pv-signal{fill:none;stroke:var(--pv-accent);stroke-width:1.6px;stroke-dasharray:4 32;animation:5s linear infinite pv-signal}.project-visual .pv-route-underlay{stroke:var(--pv-surface);stroke-width:7px}.project-visual .pv-route{stroke:var(--pv-accent);stroke-width:1.3px;opacity:.45}.project-visual .pv-float{animation:6s ease-in-out infinite pv-float}.project-visual .pv-node{animation:5s ease-in-out infinite pv-node}.project-visual .pv-delay-one{animation-delay:-2s}.project-visual .pv-delay-two{animation-delay:-4s}.project-visual[data-active=false] *,.project-visual[data-active=false] :before,.project-visual[data-active=false] :after{animation-play-state:paused}@keyframes pv-float{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes pv-node{0%,30%,to{opacity:1}50%{opacity:.65}}@keyframes pv-status{0%,to{opacity:.45}50%{opacity:1}}@keyframes pv-signal{to{stroke-dashoffset:-72px}}@media (prefers-reduced-motion:reduce){.project-visual-scene{transition:none;transform:none}.project-visual *{animation:none!important}}
.FloatingDock-module__T-fTtW__positioner{z-index:50;left:50%;bottom:max(26px, env(safe-area-inset-bottom));position:fixed;transform:translate(-50%)}.FloatingDock-module__T-fTtW__dock{--glass-x:50%;--glass-y:0%;border-radius:999px;align-items:flex-end;gap:8px;padding:10px 12px;display:flex;position:relative;overflow:visible}.FloatingDock-module__T-fTtW__optics,.FloatingDock-module__T-fTtW__reflections,.FloatingDock-module__T-fTtW__rim{border-radius:inherit;pointer-events:none;position:absolute;inset:0}.FloatingDock-module__T-fTtW__optics{-webkit-backdrop-filter:blur(18px)saturate(1.45);background:linear-gradient(160deg,#ffffff70 0%,#ffffff24 44%,#ffffff0a 75%,#ffffff45 100%);box-shadow:0 14px 36px #1a26301c,0 3px 8px #1a26300a,inset 0 1.5px 1px #ffffffd9,inset 0 -1px 1px #ffffffa6,inset 1px 0 1px #ffffffa6,inset -1px 0 1px #fff6}.FloatingDock-module__T-fTtW__reflections{background:radial-gradient(ellipse 42% 105% at var(--glass-x) var(--glass-y), #fff6, #ffffff12 58%, transparent 80%);overflow:hidden}.FloatingDock-module__T-fTtW__reflections:before{content:"";border-radius:inherit;background:linear-gradient(108deg,#0000 0 20%,#ffffff24 33%,#0000 44% 65%,#ffffff21 78%,#0000 89%);position:absolute;inset:2px;box-shadow:inset 0 3px 6px #ffffff24,inset 0 -4px 8px #c4d2e51a}.FloatingDock-module__T-fTtW__reflections:after{content:"";background:linear-gradient(90deg,#0000,#ffffffed,#0000);height:1px;position:absolute;top:2px;left:18%;right:18%;box-shadow:0 1px 5px #ffffff80}.FloatingDock-module__T-fTtW__rim{-webkit-mask-composite:xor;background:conic-gradient(from 145deg,#fff6,#ffffff26 16%,#ffffffdf 32%,#ffffff9e 45%,#ffffff21 62%,#fffb 80%,#fff6);padding:1.2px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.FloatingDock-module__T-fTtW__item{z-index:1;color:#272b30;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:50%;flex:none;margin:0;padding:0;text-decoration:none;display:block;position:relative}.FloatingDock-module__T-fTtW__well,.FloatingDock-module__T-fTtW__placeholder{-webkit-user-select:none;user-select:none;background:linear-gradient(145deg,#ffffff70,#ffffff12 65%,#ffffff2e);border:1px solid #ffffff75;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;transition:background .18s,box-shadow .18s,border-color .18s;display:flex;position:relative;box-shadow:inset 0 1px 1px #ffffffab,inset 0 -1px 1px #a4b4ca26,0 2px 4px #18222f0a}.FloatingDock-module__T-fTtW__item:hover .FloatingDock-module__T-fTtW__well,.FloatingDock-module__T-fTtW__item:focus-visible .FloatingDock-module__T-fTtW__well{background:linear-gradient(145deg,#ffffffc2,#ffffff45 70%,#ffffff80);border-color:#ffffffc2;box-shadow:inset 0 1px 2px #ffffffed,inset 0 -1px 1px #a4b4ca2e,0 5px 12px #18222f12}.FloatingDock-module__T-fTtW__item:focus-visible{outline:none!important}.FloatingDock-module__T-fTtW__item:focus-visible .FloatingDock-module__T-fTtW__well{outline-offset:4px;outline:2px solid}.FloatingDock-module__T-fTtW__glyph,.FloatingDock-module__T-fTtW__moon,.FloatingDock-module__T-fTtW__sun{justify-content:center;align-items:center;display:flex}.FloatingDock-module__T-fTtW__glyph svg{stroke-width:1.75px;width:20px;height:20px}.FloatingDock-module__T-fTtW__sun{color:#b7770b}.FloatingDock-module__T-fTtW__moon{color:#b5a5ff;filter:drop-shadow(0 0 5px #b5a5ff42)}.FloatingDock-module__T-fTtW__divider{background:linear-gradient(#0000,#64748b4d,#0000);align-self:center;width:1px;height:24px;margin:0 4px;position:relative;box-shadow:1px 0 #ffffff75}.FloatingDock-module__T-fTtW__tooltip{visibility:hidden;opacity:0;color:#fff;white-space:nowrap;pointer-events:none;background:#24282eea;border:1px solid #ffffff40;border-radius:8px;padding:7px 11px;font:11px/1.4 ui-monospace,monospace;transition:opacity .14s,transform .14s,visibility .14s;position:absolute;bottom:calc(100% + 19px);left:50%;transform:translate(-50%)translateY(3px);box-shadow:0 4px 16px #0000001a}.FloatingDock-module__T-fTtW__item:hover .FloatingDock-module__T-fTtW__tooltip,.FloatingDock-module__T-fTtW__item:focus-visible .FloatingDock-module__T-fTtW__tooltip{opacity:1;visibility:visible;transform:translate(-50%)translateY(0)}.dark .FloatingDock-module__T-fTtW__optics{background:linear-gradient(160deg,#ffffff1c 0%,#ffffff08 48%,#10141c0a 72%,#ffffff0d 100%);box-shadow:0 16px 40px #0000004d,0 3px 8px #0003,inset 0 1.5px 1px #ffffff80,inset 0 -1px 1px #ffffff3b,inset 1px 0 1px #ffffff52,inset -1px 0 1px #ffffff26}.dark .FloatingDock-module__T-fTtW__reflections{background:radial-gradient(ellipse 42% 105% at var(--glass-x) var(--glass-y), #ffffff26, #ffffff05 58%, transparent 80%)}.dark .FloatingDock-module__T-fTtW__reflections:before{background:linear-gradient(108deg,#0000 0 20%,#ffffff0d 33%,#0000 44% 65%,#c7d9ff0d 78%,#0000 89%);box-shadow:inset 0 3px 6px #ffffff0f,inset 0 -4px 8px #c4d2e50a}.dark .FloatingDock-module__T-fTtW__reflections:after{opacity:.65}.dark .FloatingDock-module__T-fTtW__rim{opacity:.66}.dark .FloatingDock-module__T-fTtW__item{color:#f0f3f7}:is(.dark .FloatingDock-module__T-fTtW__well,.dark .FloatingDock-module__T-fTtW__placeholder){background:linear-gradient(145deg,#ffffff12,#ffffff02 65%,#ffffff08);border-color:#ffffff21;box-shadow:inset 0 1px 1px #ffffff24,inset 0 -1px 1px #0000000f,0 2px 4px #0000000a}:is(.dark .FloatingDock-module__T-fTtW__item:hover .FloatingDock-module__T-fTtW__well,.dark .FloatingDock-module__T-fTtW__item:focus-visible .FloatingDock-module__T-fTtW__well){background:linear-gradient(145deg,#ffffff29,#ffffff0d 70%,#ffffff17);border-color:#ffffff5c;box-shadow:inset 0 1px 2px #ffffff61,inset 0 -1px 1px #ffffff1a,0 5px 15px #00000024}.dark .FloatingDock-module__T-fTtW__divider{background:linear-gradient(#0000,#fff3,#0000);box-shadow:1px 0 #00000024}.dark .FloatingDock-module__T-fTtW__tooltip{color:#24282e;background:#eef1f5f2;border-color:#ffffff8c}@media (max-width:639px){.FloatingDock-module__T-fTtW__positioner{bottom:max(16px, env(safe-area-inset-bottom))}.FloatingDock-module__T-fTtW__dock{gap:clamp(2px,1.1vw,4px);padding:8px}.FloatingDock-module__T-fTtW__well,.FloatingDock-module__T-fTtW__placeholder{width:clamp(30px,10vw,34px)!important;height:clamp(30px,10vw,34px)!important}.FloatingDock-module__T-fTtW__glyph svg{width:17px;height:17px}.FloatingDock-module__T-fTtW__divider{height:21px;margin:0 2px}.FloatingDock-module__T-fTtW__tooltip[data-edge=start]{left:0}.FloatingDock-module__T-fTtW__tooltip[data-edge=end]{left:auto;right:0}.FloatingDock-module__T-fTtW__tooltip[data-edge]{transform:translateY(3px)}.FloatingDock-module__T-fTtW__item:hover .FloatingDock-module__T-fTtW__tooltip[data-edge],.FloatingDock-module__T-fTtW__item:focus-visible .FloatingDock-module__T-fTtW__tooltip[data-edge]{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.FloatingDock-module__T-fTtW__well{width:44px;height:44px;transform:none!important}.FloatingDock-module__T-fTtW__glyph{transform:none!important}.FloatingDock-module__T-fTtW__well,.FloatingDock-module__T-fTtW__tooltip{transition:none}}
