/* Restored ContextLattice hero field; scoped to the homepage asset. */ .signal-lattice.hero-art { display: grid; place-items: center; contain: layout paint; filter: saturate(1.08) contrast(1.05); opacity: 0.94; } .hero-lattice { display: block; width: 100%; height: 100%; } .hero-lattice .hl-frame-main, .hero-lattice .hl-frame-ghost { fill: rgba(255, 255, 255, 0.012); stroke-width: 1.15; } .hero-lattice .hl-frame-main { stroke: rgba(228, 236, 250, 0.42); } .hero-lattice .hl-frame-ghost { stroke: rgba(228, 236, 250, 0.24); } .hero-lattice .hl-grid { stroke: rgba(233, 240, 255, 0.09); stroke-width: 0.95; } .hero-lattice .hl-lane { fill: none; stroke: rgba(216, 225, 239, 0.64); stroke-width: 1.35; stroke-linecap: round; stroke-linejoin: round; shape-rendering: geometricPrecision; vector-effect: non-scaling-stroke; transform-box: fill-box; transform-origin: center; backface-visibility: hidden; } .hero-lattice .hl-lanes-flow { mix-blend-mode: screen; animation: fxLaneBreath 14.8s cubic-bezier(0.3, 0, 0.15, 1) infinite; transform: translateZ(0); will-change: transform, opacity; } .hero-lattice .hl-lane-field { opacity: 0.74; animation: fxLaneFieldSwell 12.4s cubic-bezier(0.3, 0, 0.2, 1) infinite; } .hero-lattice .hl-lane-weave { opacity: 0.7; stroke-width: 1.22; stroke-dasharray: 1.95 6.8; animation: fxLaneFlowWide 9.4s linear infinite, fxLaneGlint 8.8s ease-in-out infinite; } .hero-lattice .hl-lane-serpentine { stroke-linecap: round; stroke-dasharray: 0.85 3.1 1.3 4.2 0.95 5.6; animation: fxLaneSnakeDash 4.8s linear infinite, fxLaneSnakeUndulate 7.2s cubic-bezier(0.37, 0, 0.25, 1) infinite, fxLaneSlitherDrift 8.6s ease-in-out infinite, fxLaneGlint 9.6s ease-in-out infinite; shape-rendering: geometricPrecision; vector-effect: non-scaling-stroke; will-change: stroke-dashoffset, opacity, stroke-width, transform; filter: drop-shadow(0 0 2px rgba(160, 220, 255, 0.12)); } .hero-lattice .hl-lane-serpentine-fast { stroke-dasharray: 0.7 2.4 1.05 3.2 0.9 4.1; animation: fxLaneSnakeDashFast 3.2s linear infinite, fxLaneSnakeUndulateFast 4.8s cubic-bezier(0.37, 0, 0.25, 1) infinite, fxLaneSlitherDriftFast 5.6s ease-in-out infinite, fxLaneGlint 7.2s ease-in-out infinite; } .hero-lattice .hl-lane-serpentine.snake-a { animation-delay: -0.2s, -1.3s, -0.5s; } .hero-lattice .hl-lane-serpentine.snake-b { animation-delay: -1.1s, -2.4s, -1.2s; } .hero-lattice .hl-lane-serpentine.snake-c { animation-delay: -0.7s, -0.8s, -1.9s; } .hero-lattice .hl-lane-serpentine.snake-d { animation-delay: -1.6s, -3.1s, -0.1s; } .hero-lattice .hl-lane-serpentine.snake-e { animation-delay: -2.3s, -1.6s, -2.2s; } .hero-lattice .hl-lane-serpentine.snake-f { animation-delay: -0.95s, -2.9s, -1.5s; } .hero-lattice .hl-lane-serpentine-fast.snake-g { animation-delay: -0.45s, -1.2s, -0.8s; } .hero-lattice .hl-lane-serpentine-fast.snake-h { animation-delay: -1.05s, -0.4s, -1.7s; } .hero-lattice .hl-lane-motion { stroke-dasharray: 2.6 7.4; animation: fxLaneGlint 8.2s ease-in-out infinite, fxLaneFlow 3.8s linear infinite; } .hero-lattice .hl-lane-surge { stroke-dasharray: 1.4 5.2; stroke-width: 1.92; opacity: 0.88; animation: fxLaneFlowTight 2.8s linear infinite, fxLaneGlint 6.8s ease-in-out infinite; } .hero-lattice .hl-lane.cool { stroke: url(#hl-lane-cool); stroke-width: 1.78; animation: fxLaneGlint 5.6s ease-in-out infinite; } .hero-lattice .hl-lane.warm { stroke: url(#hl-lane-warm); stroke-width: 1.82; animation: fxLaneGlint 5.6s ease-in-out infinite 1.4s; } .hero-lattice .hl-progress-panel { opacity: 0.92; } .hero-lattice .hl-progress-back { fill: rgba(8, 12, 20, 0.72); stroke: rgba(228, 236, 250, 0.32); stroke-width: 0.8; } .hero-lattice .hl-progress-fill { fill: rgba(121, 220, 252, 0.78); filter: drop-shadow(0 0 4px rgba(121, 220, 252, 0.38)); } .hero-lattice .hl-progress-pulse { fill: rgba(255, 241, 194, 0.96); filter: drop-shadow(0 0 4px rgba(255, 214, 134, 0.42)); } .hero-lattice .hl-progress-label { font: 600 6px "IBM Plex Mono", monospace; letter-spacing: 0; fill: rgba(238, 242, 250, 0.78); } .hero-lattice .hl-progress-label.warm { fill: rgba(251, 218, 151, 0.8); } .hero-lattice .hl-progress-label.steering { fill: rgba(245, 248, 255, 0.86); } .hero-lattice .hl-steering-link { fill: none; stroke: rgba(255, 230, 168, 0.72); stroke-width: 1; stroke-dasharray: 2 3; animation: fxLaneFlow 3.6s linear infinite; } .hero-lattice .hl-steering-chip { fill: rgba(17, 22, 34, 0.78); stroke: rgba(255, 230, 168, 0.52); stroke-width: 0.8; } .hero-lattice .hl-node { fill: rgba(222, 228, 236, 0.86); stroke: rgba(5, 8, 14, 0.95); stroke-width: 1; } .hero-lattice .hl-node-square { fill: rgba(212, 220, 236, 0.86); } .hero-lattice .hl-node-diamond { fill: rgba(223, 186, 124, 0.88); } .hero-lattice .hl-node-tri { fill: rgba(250, 171, 97, 0.88); } .hero-lattice .hl-node.cool { fill: rgba(100, 207, 247, 0.96); } .hero-lattice .hl-node.warm { fill: rgba(216, 169, 90, 0.94); } .hero-lattice .hl-source-aura { fill: url(#hl-source-aura); filter: url(#hl-soft-bloom); animation: fxSourceBloom 6.8s cubic-bezier(0.37, 0, 0.21, 1) infinite; } .hero-lattice .hl-source-ring { fill: none; stroke: rgba(239, 247, 255, 0.78); stroke-width: 1.28; opacity: 0.72; } .hero-lattice .hl-source-ring.r1 { animation: fxRingPulse 3.8s ease-out infinite; } .hero-lattice .hl-source-ring.r2 { animation: fxRingPulse 3.8s ease-out infinite 1.2s; } .hero-lattice .hl-source-ring.r3 { animation: fxRingPulse 3.8s ease-out infinite 2.4s; } .hero-lattice .hl-capture-sink { fill: rgba(255, 246, 220, 0.68); mix-blend-mode: screen; filter: blur(0.24px); animation: fxSinkCatch 2.4s cubic-bezier(0.5, 0, 0.24, 1) infinite; } .hero-lattice .hl-source-core { fill: url(#hl-source-core-blend); stroke: rgba(255, 242, 211, 0.2); stroke-width: 0.3; filter: blur(0.14px); animation: fxCorePulse 5.4s cubic-bezier(0.41, 0, 0.24, 1) infinite; } .hero-lattice .hl-source-orbit { fill: none; stroke: rgba(255, 221, 162, 0.32); stroke-width: 0.95; stroke-dasharray: 2.4 3.6; opacity: 0.8; animation: fxOrbitRotate 10.4s linear infinite; } .hero-lattice .hl-source-orbit.o2 { stroke: rgba(255, 145, 171, 0.28); animation-duration: 7.2s; animation-direction: reverse; } .hero-lattice .hl-source-orb { mix-blend-mode: screen; filter: drop-shadow(0 0 7px rgba(255, 241, 194, 0.48)); } .hero-lattice .hl-source-orb.orb-a { fill: url(#hl-source-orb-a); } .hero-lattice .hl-source-orb.orb-b { fill: url(#hl-source-orb-b); } .hero-lattice .hl-source-orb.orb-c { fill: rgba(255, 231, 184, 0.88); } .hero-lattice .hl-source-orb.orb-d { fill: rgba(255, 168, 196, 0.78); } .hero-lattice .hl-source { animation: fxSourceDrift 8.6s cubic-bezier(0.38, 0, 0.22, 1) infinite; } .hero-lattice .hl-stream-particles { opacity: 0.94; mix-blend-mode: screen; filter: drop-shadow(0 0 5px rgba(255, 225, 168, 0.35)); } .hero-lattice .hl-stream-dot { fill: rgba(244, 208, 138, 0.9); } .hero-lattice .hl-stream-dot.s2, .hero-lattice .hl-stream-dot.s5 { fill: rgba(131, 223, 255, 0.85); } .hero-lattice .hl-stream-dot.s8 { fill: rgba(255, 220, 150, 0.92); } .hero-lattice .hl-stream-dot.s9 { fill: rgba(136, 226, 255, 0.9); } .hero-lattice .hl-stream-square { fill: rgba(230, 238, 255, 0.84); } .hero-lattice .hl-stream-square.s10 { fill: rgba(228, 241, 255, 0.92); } .hero-lattice .hl-stream-tri { fill: rgba(251, 150, 120, 0.86); } .hero-lattice .hl-stream-tri.s11 { fill: rgba(249, 196, 116, 0.88); } .hero-lattice .hl-stream-hex { fill: rgba(228, 237, 255, 0.88); } .hero-lattice .hl-anomaly-signals { opacity: 0.98; mix-blend-mode: screen; pointer-events: none; } .hero-lattice .hl-anomaly-signal { fill: rgba(255, 80, 56, 0.98); stroke: rgba(255, 186, 168, 0.54); stroke-width: 0.42; vector-effect: non-scaling-stroke; filter: drop-shadow(0 0 8px rgba(255, 56, 24, 0.85)) drop-shadow(0 0 16px rgba(255, 96, 64, 0.42)); } @keyframes fxLaneBreath { 0%, 100% { opacity: 0.92; transform: translateX(0); } 40% { opacity: 1; transform: translateX(0.6px); } 72% { opacity: 0.95; transform: translateX(-0.45px); } } @keyframes fxLaneGlint { 0%, 100% { opacity: 0.62; } 45% { opacity: 1; } 75% { opacity: 0.7; } } @keyframes fxLaneFieldSwell { 0%, 100% { opacity: 0.58; stroke-width: 1.2; } 33% { opacity: 0.78; stroke-width: 1.42; } 67% { opacity: 0.64; stroke-width: 1.28; } } @keyframes fxLaneFlow { 0% { stroke-dashoffset: 26; } 100% { stroke-dashoffset: 0; } } @keyframes fxLaneFlowWide { 0% { stroke-dashoffset: 22; } 100% { stroke-dashoffset: 0; } } @keyframes fxLaneFlowTight { 0% { stroke-dashoffset: 14; } 100% { stroke-dashoffset: 0; } } @keyframes fxLaneSnakeDash { 0% { stroke-dashoffset: 24; stroke-dasharray: 0.72 2.9 1.34 4.6 0.86 5.8; } 24% { stroke-dashoffset: 17.4; stroke-dasharray: 0.86 3.12 1.18 4.25 0.92 5.18; } 50% { stroke-dashoffset: 12; stroke-dasharray: 1.03 3.4 1.08 3.82 1.12 4.82; } 76% { stroke-dashoffset: 5.4; stroke-dasharray: 0.89 3.08 1.2 4.18 0.95 5.06; } 100% { stroke-dashoffset: 0; stroke-dasharray: 0.72 2.9 1.34 4.6 0.86 5.8; } } @keyframes fxLaneSnakeDashFast { 0% { stroke-dashoffset: 16; stroke-dasharray: 0.62 2.1 0.98 3.2 0.82 4.2; } 22% { stroke-dashoffset: 12.4; stroke-dasharray: 0.74 2.28 0.9 3.02 0.86 3.94; } 50% { stroke-dashoffset: 8; stroke-dasharray: 0.92 2.72 0.84 2.82 0.98 3.72; } 78% { stroke-dashoffset: 3.2; stroke-dasharray: 0.79 2.4 0.9 2.96 0.92 3.86; } 100% { stroke-dashoffset: 0; stroke-dasharray: 0.62 2.1 0.98 3.2 0.82 4.2; } } @keyframes fxLaneSnakeUndulate { 0%, 100% { opacity: 0.72; stroke-width: 1.16; } 18% { opacity: 0.79; stroke-width: 1.24; } 38% { opacity: 0.89; stroke-width: 1.37; } 58% { opacity: 0.82; stroke-width: 1.28; } 78% { opacity: 0.75; stroke-width: 1.2; } } @keyframes fxLaneSnakeUndulateFast { 0%, 100% { opacity: 0.86; stroke-width: 1.8; } 17% { opacity: 0.93; stroke-width: 1.92; } 36% { opacity: 1; stroke-width: 2.06; } 58% { opacity: 0.95; stroke-width: 1.98; } 80% { opacity: 0.9; stroke-width: 1.86; } } @keyframes fxLaneSlitherDrift { 0%, 100% { transform: translate(0, 0); } 25% { transform: translate(0.34px, -0.42px); } 50% { transform: translate(-0.22px, 0.34px); } 75% { transform: translate(0.28px, 0.18px); } } @keyframes fxLaneSlitherDriftFast { 0%, 100% { transform: translate(0, 0); } 20% { transform: translate(0.44px, -0.56px); } 47% { transform: translate(-0.34px, 0.44px); } 73% { transform: translate(0.36px, 0.22px); } } @keyframes fxSourceBloom { 0%, 100% { opacity: 0.72; transform: translate(0px, 0px) scale(0.99); } 18% { opacity: 0.87; transform: translate(-2.8px, 1.8px) scale(1.01); } 41% { opacity: 0.98; transform: translate(1.6px, -1px) scale(1.045); } 67% { opacity: 0.84; transform: translate(-1.4px, -2.3px) scale(1.02); } } @keyframes fxRingPulse { 0% { opacity: 0.68; stroke-width: 1.2; transform: translate(0px, 0px); } 25% { opacity: 0.48; stroke-width: 1.1; transform: translate(-1.65px, 1.1px); } 50% { opacity: 0.32; stroke-width: 1.03; transform: translate(0px, 0px); } 74% { opacity: 0.2; stroke-width: 0.95; transform: translate(1.65px, -1.1px); } 100% { opacity: 0.04; stroke-width: 0.8; transform: translate(0px, 0px); } } @keyframes fxSinkCatch { 0%, 100% { opacity: 0.34; transform: scale(0.76); } 45% { opacity: 0.78; transform: scale(1.12); } 72% { opacity: 0.22; transform: scale(0.5); } } @keyframes fxCorePulse { 0%, 100% { opacity: 0.74; transform: translate(0px, 0px) scale(0.94); } 22% { opacity: 0.88; transform: translate(-1.8px, 1.2px) scale(0.99); } 47% { opacity: 0.95; transform: translate(1.6px, -1.2px) scale(1.06); } 73% { opacity: 0.82; transform: translate(-0.9px, -2.2px) scale(1); } } @keyframes fxOrbitRotate { 0% { transform-origin: 292px 62px; transform: rotate(0deg); } 100% { transform-origin: 292px 62px; transform: rotate(360deg); } } @keyframes fxSourceDrift { 0%, 100% { transform: translate(0px, 0px); } 31% { transform: translate(-2.1px, 1.4px); } 58% { transform: translate(1.6px, -1.25px); } 82% { transform: translate(-1.3px, -1.7px); } } @media (prefers-reduced-motion: reduce) { .hero-lattice *, .hero-lattice .hl-lanes-flow { animation: none !important; will-change: auto; } .hero-lattice animate, .hero-lattice animateMotion, .hero-lattice animateTransform { display: none; } }