PageSourceSearch

https://hanzoai.ai/assets/hanzo-Dcyh5Dmo.js

js hanzoai.ai collected 2026-10-05 14:06:37 UTC 29,741 bytes, 181 lines download raw bytes

1import{r as I,j as t,h as ze}from"./index-DGD9lk24.js";import{S as ye,F as we,P as ve,W as Me,B as le,a as ce,b as xe,A as $,c as fe,V as m,d as Se,M as Q,e as ee,L as Ne,f as je,g as Ee,D as ne,T as me,C as ke,h as Ae,G as Re}from"./three.module-BgrgADX_.js";const J="#cc2200",g="#ffaa00",Ie="#000000",Pe=[{label:"XAUUSD",base:2374.5,dec:2},{label:"NAS100",base:18420,dec:1},{label:"DXY",base:104.32,dec:3},{label:"EURUSD",base:1.0842,dec:4},{label:"USDJPY",base:156.42,dec:2}],Ce=[{pair:"XAUUSD",bias:"BULLISH"},{pair:"EURUSD",bias:"BEARISH"},{pair:"NAS100",bias:"BULLISH"},{pair:"DXY",bias:"NEUTRAL"},{pair:"GBPUSD",bias:"BEARISH"},{pair:"US30",bias:"BULLISH"},{pair:"USDJPY",bias:"BULLISH"}],Te=[{name:"Sydney",open:21,close:6},{name:"Tokyo",open:0,close:9},{name:"London",open:7,close:16},{name:"New York",open:12,close:21}];function ge(l,e){const d=new Date().getUTCHours();return l<e?d>=l&&d<e:d>=l||d<e}function Oe(l){return l==="BULLISH"?"#00ff88":l==="BEARISH"?"#ff3355":"#ffaa00"}const Ge=`
2@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Rajdhani:wght@300;400;600;700&display=swap');
3@keyframes hnz-blink { 0%,100%{opacity:1;} 50%{opacity:.35;} }
4@keyframes hnz-float { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-18px);} }
5@keyframes hnz-scan  { 0%{top:-2px;} 100%{top:calc(100% + 2px);} }
6@keyframes hnz-glow-pulse { 0%,100%{opacity:.7;} 50%{opacity:1;} }
7@keyframes hnz-orb { 0%,100%{transform:scale(1) translate(0,0);} 50%{transform:scale(1.12) translate(8px,-6px);} }
8* { box-sizing: border-box; }
9body { margin: 0; }
10.hnz-root {
11  width: 100vw; height: 100vh;
12  background: ${Ie};
13  display: flex; flex-direction: column;
14  overflow: hidden;
15  font-family: 'Orbitron', monospace;
16  color: #fff;
17  position: relative;
18}
19.hnz-root::before {
20  content: '';
21  position: absolute; inset: 0;
22  background: radial-gradient(ellipse 60% 40% at 50% 30%, rgba(204,34,0,0.08) 0%, transparent 70%);
23  pointer-events: none; z-index: 0;
24}
25/* Scanline */
26.hnz-scan-line {
27  position: absolute; left: 0; right: 0; height: 1px;
28  background: linear-gradient(90deg, transparent, rgba(255,170,0,0.18), rgba(204,34,0,0.12), transparent);
29  animation: hnz-scan 6s linear infinite;
30  pointer-events: none; z-index: 10;
31}
32/* HUD corners */
33.hnz-corner {
34  position: absolute; width: 22px; height: 22px; z-index: 20; pointer-events: none;
35}
36.hnz-corner--tl { top: 8px; left: 8px; border-top: 1.5px solid ${g}; border-left: 1.5px solid ${g}; }
37.hnz-corner--tr { top: 8px; right: 8px; border-top: 1.5px solid ${g}; border-right: 1.5px solid ${g}; }
38.hnz-corner--bl { bottom: 8px; left: 8px; border-bottom: 1.5px solid ${g}; border-left: 1.5px solid ${g}; }
39.hnz-corner--br { bottom: 8px; right: 8px; border-bottom: 1.5px solid ${g}; border-right: 1.5px solid ${g}; }
40
41/* Topbar */
42.hnz-top {
43  height: 48px; flex-shrink: 0;
44  background: rgba(3,0,0,0.94);
45  border-bottom: 1px solid rgba(204,34,0,0.2);
46  display: flex; align-items: center;
47  padding: 0 20px; gap: 20px;
48  position: relative; z-index: 5;
49  backdrop-filter: blur(8px);
50}
51.hnz-logo-r { font-size: 18px; font-weight: 900; letter-spacing: 7px; color: ${J}; text-shadow: 0 0 22px ${J}, 0 0 44px rgba(204,34,0,0.5); }
52.hnz-logo-g { font-size: 18px; font-weight: 900; letter-spacing: 5px; color: ${g}; text-shadow: 0 0 22px ${g}, 0 0 44px rgba(255,170,0,0.5); }
53.hnz-live { display: flex; align-items: center; gap: 5px; }
54.hnz-live-dot { width: 7px; height: 7px; border-radius: 50%; background: ${g}; box-shadow: 0 0 10px ${g}; animation: hnz-blink 1.2s infinite; }
55.hnz-live-txt { font-size: 8px; color: ${g}; letter-spacing: 3px; }
56.hnz-tickers { flex: 1; display: flex; gap: 28px; margin-left: 12px; }
57.hnz-tick { display: flex; gap: 6px; align-items: baseline; }
58.hnz-tick-label { font-size: 8px; color: #553300; letter-spacing: 1px; font-family: 'Rajdhani', sans-serif; }
59.hnz-tick-price { font-size: 13px; font-weight: 700; font-family: 'Rajdhani', sans-serif; }
60.hnz-tick-dir { font-size: 9px; }
61.hnz-nav-tag { font-size: 8px; color: #221100; letter-spacing: 2px; }
62
63/* Main layout */
64.hnz-main { flex: 1; display: grid; grid-template-columns: 220px 1fr 220px; overflow: hidden; position: relative; z-index: 2; }
65
66/* Panels */
67.hnz-panel {
68  background: rgba(4,1,0,0.9);
69  padding: 16px;
70  display: flex; flex-direction: column; gap: 12px;
71  overflow-y: auto; overflow-x: hidden;
72}
73.hnz-panel::-webkit-scrollbar { width: 3px; }
74.hnz-panel::-webkit-scrollbar-track { background: transparent; }
75.hnz-panel::-webkit-scrollbar-thumb { background: rgba(204,34,0,0.3); border-radius: 2px; }
76.hnz-panel-l { border-right: 1px solid rgba(204,34,0,0.14); }
77.hnz-panel-r { border-left: 1px solid rgba(204,34,0,0.14); }
78.hnz-sec-label { font-size: 8px; color: #663300; letter-spacing: 3px; margin-bottom: 2px; }
79.hnz-sec-label-gold { font-size: 8px; color: #886600; letter-spacing: 3px; margin-bottom: 2px; }
80.hnz-divider { height: 1px; background: rgba(204,34,0,0.1); margin: 4px 0; }
81
82/* Bias rows */
83.hnz-bias-row { display: flex; justify-content: space-between; padding: 5px 0; border-bottom: 1px solid rgba(204,34,0,0.07); }
84.hnz-bias-pair { font-size: 11px; font-family: 'Rajdhani', sans-serif; color: #ccbbaa; }
85.hnz-bias-tag { font-size: 8px; letter-spacing: 1px; }
86
87/* Signal box */
88.hnz-signal { background: rgba(255,170,0,0.04); border: 1px solid rgba(255,170,0,0.14); border-radius: 3px; padding: 11px; }
89.hnz-signal-row { display: flex; justify-content: space-between; margin-bottom: 6px; }
90.hnz-signal-k { font-size: 8px; color: #442200; letter-spacing: 1px; }
91.hnz-signal-v { font-size: 12px; font-family: 'Rajdhani', sans-serif; font-weight: 600; }
92
93/* Stats */
94.hnz-stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
95.hnz-stat { background: rgba(204,34,0,0.04); border: 1px solid rgba(204,34,0,0.1); border-radius: 3px; padding: 9px; text-align: center; }
96.hnz-stat-k { font-size: 7px; color: #442200; letter-spacing: 1px; margin-bottom: 3px; }
97.hnz-stat-v { font-size: 14px; font-family: 'Rajdhani', sans-serif; font-weight: 700; color: #ffaa44; }
98
99/* Sessions */
100.hnz-sess-row { display: flex; justify-content: space-between; padding: 5px 0; border-bottom: 1px solid rgba(204,34,0,0.07); }
101.hnz-sess-name { font-size: 11px; font-family: 'Rajdhani', sans-serif; color: #ccbbaa; }
102.hnz-sess-status { font-size: 8px; letter-spacing: 1px; }
103
104/* Event */
105.hnz-event { background: rgba(255,170,0,0.05); border: 1px solid rgba(255,170,0,0.15); border-radius: 3px; padding: 10px; }
106.hnz-event-label { font-size: 8px; color: #886600; letter-spacing: 2px; margin-bottom: 3px; }
107.hnz-event-name { font-size: 12px; font-family: 'Rajdhani', sans-serif; font-weight: 600; color: #ffcc44; }
108.hnz-event-time { font-size: 9px; color: #553311; margin-top: 3px; }
109
110/* Feature cards */
111.hnz-feat { background: rgba(255,170,0,0.03); border: 1px solid rgba(255,170,0,0.1); border-radius: 3px; padding: 9px; }
112.hnz-feat-title { font-size: 9px; color: #886600; letter-spacing: 2px; margin-bottom: 4px; }
113.hnz-feat-desc { font-size: 10px; font-family: 'Rajdhani', sans-serif; color: #886644; line-height: 1.5; }
114
115/* Center stage */
116.hnz-stage { position: relative; overflow: hidden; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; }
117.hnz-canvas-wrap { position: absolute; inset: 0; }
118.hnz-canvas-wrap canvas { width: 100% !important; height: 100% !important; display: block; }
119.hnz-avatar-label { position: relative; z-index: 3; text-align: center; padding-bottom: 16px; pointer-events: none; }
120.hnz-avatar-name { font-size: 32px; font-weight: 900; letter-spacing: 12px; line-height: 1; }
121.hnz-avatar-name span:first-child { color: ${J}; text-shadow: 0 0 30px ${J}, 0 0 60px rgba(204,34,0,0.6); }
122.hnz-avatar-name span:last-child  { color: ${g};    text-shadow: 0 0 30px ${g},    0 0 60px rgba(255,170,0,0.6); }
123.hnz-avatar-sub { font-size: 9px; letter-spacing: 6px; color: #664400; margin-top: 5px; }
124.hnz-avatar-status { font-size: 8px; color: #886600; letter-spacing: 2px; margin-top: 3px; animation: hnz-glow-pulse 2s infinite; }
125
126/* Chat */
127.hnz-chat {
128  height: 160px; flex-shrink: 0;
129  background: rgba(2,0,0,0.96);
130  border-top: 1px solid rgba(204,34,0,0.2);
131  display: flex; position: relative; z-index: 5;
132  backdrop-filter: blur(8px);
133}
134.hnz-chat-msgs {
135  flex: 1; padding: 12px 18px;
136  overflow-y: auto; display: flex; flex-direction: column; gap: 7px;
137}
138.hnz-chat-msgs::-webkit-scrollbar { width: 3px; }
139.hnz-chat-msgs::-webkit-scrollbar-thumb { background: rgba(204,34,0,0.25); border-radius: 2px; }
140.hnz-msg { display: flex; gap: 10px; }
141.hnz-msg-tag { font-size: 8px; letter-spacing: 1px; flex-shrink: 0; margin-top: 3px; }
142.hnz-msg-tag--hnz { color: ${J}; text-shadow: 0 0 8px ${J}; }
143.hnz-msg-tag--you { color: #332200; }
144.hnz-msg-text { font-size: 12px; font-family: 'Rajdhani', sans-serif; line-height: 1.55; }
145.hnz-msg-text--hnz { color: #ccaa88; }
146.hnz-msg-text--you { color: #554433; }
147.hnz-thinking { font-size: 11px; font-family: 'Rajdhani', sans-serif; color: ${g}; letter-spacing: 2px; animation: hnz-blink 1s infinite; }
148.hnz-chat-input-wrap {
149  width: 300px; padding: 14px; display: flex; flex-direction: column; gap: 8px;
150  border-left: 1px solid rgba(204,34,0,0.14);
151  justify-content: center;
152}
153.hnz-chat-controls { display: flex; gap: 8px; align-items: center; }
154.hnz-input {
155  flex: 1; background: rgba(255,170,0,0.04);
156  border: 1px solid rgba(255,170,0,0.18);
157  border-radius: 3px; padding: 8px 12px;
158  color: #ccaa88; font-size: 11px; font-family: 'Rajdhani', sans-serif;
159  outline: none; transition: border-color .2s;
160}
161.hnz-input:focus { border-color: rgba(255,170,0,0.4); }
162.hnz-input::placeholder { color: #442200; }
163.hnz-btn-exec {
164  background: linear-gradient(135deg, ${J}, #881800);
165  border: none; border-radius: 3px;
166  padding: 8px 16px; color: ${g};
167  font-size: 9px; font-weight: 700; letter-spacing: 2px;
168  cursor: pointer; font-family: 'Orbitron', monospace;
169  transition: opacity .2s; white-space: nowrap;
170}
171.hnz-btn-exec:hover { opacity: .85; }
172.hnz-btn-exec:disabled { opacity: .4; cursor: not-allowed; }
173.hnz-tts-btn {
174  background: transparent; border: 1px solid rgba(255,170,0,0.2);
175  border-radius: 3px; padding: 7px 10px;
176  color: #886600; font-size: 10px; cursor: pointer;
177  font-family: 'Orbitron', monospace; transition: all .2s;
178}
179.hnz-tts-btn:hover { border-color: rgba(255,170,0,0.5); color: ${g}; }
180.hnz-tts-btn.active { border-color: ${g}; color: ${g}; }
181`;function He(){try{const l=document.createElement("canvas");return!!(l.getContext("webgl")||l.getContext("experimental-webgl"))}catch{return!1}}function be(l){const e=l.getContext("2d");let d=l.clientWidth,o=l.clientHeight;l.width=d*Math.min(devicePixelRatio,2),l.height=o*Math.min(devicePixelRatio,2),e.scale(Math.min(devicePixelRatio,2),Math.min(devicePixelRatio,2));function i(r,p){const z=d*.5,y=o*.5;return[z+r*o*.15,y+p*o*.15]}const R=[i(0,-2.8),i(0,-2.2),i(0,-1.4),i(0,-.7),i(0,.1),i(-.7,-1.9),i(.7,-1.9),i(-1,-.9),i(1,-.9),i(-1.1,.2),i(1.1,.2),i(-.35,.15),i(.35,.15),i(-.42,1.2),i(.42,1.2),i(-.45,2.25),i(.45,2.25)],v=[[0,1],[1,2],[2,3],[3,4],[2,5],[2,6],[5,7],[6,8],[7,9],[8,10],[4,11],[4,12],[11,13],[12,14],[13,15],[14,16]],E=new Set([0,5,6,9,10,15,16]),P=Array.from({length:800},()=>{const r=Math.floor(Math.random()*v.length),[p,z]=v[r],y=Math.random(),[k,C]=R[p],[K,D]=R[z],X=o*.15*.06,Z=Math.random()*Math.PI*2,U=E.has(p)||E.has(z);return{x:k+(K-k)*y+Math.cos(Z)*X*(.4+Math.random()*.6),y:C+(D-C)*y+Math.sin(Z)*X*(.4+Math.random()*.6),phase:Math.random()*Math.PI*2,speed:.8+Math.random()*1.2,gold:U||r===0&&Math.random()<.8,size:1.2+Math.random()*2}}),Y=[{rx:o*.17,ry:o*.045,angle:.3,speed:.008,color:"rgba(204,34,0,"},{rx:o*.21,ry:o*.055,angle:.8,speed:-.005,color:"rgba(255,170,0,"},{rx:o*.13,ry:o*.035,angle:1.2,speed:.013,color:"rgba(204,34,0,"}];let M=0,N=!1,W=0,S=0,u=0;function F(){d=l.clientWidth,o=l.clientHeight,l.width=d*Math.min(devicePixelRatio,2),l.height=o*Math.min(devicePixelRatio,2),e.scale(Math.min(devicePixelRatio,2),Math.min(devicePixelRatio,2))}window.addEventListener("resize",F);function a(){S=requestAnimationFrame(a),M+=.016,W+=.016,u=Math.sin(M*1.4)*(o*.018),W>9&&Math.random()<.018&&(N=!0,W=0,setTimeout(()=>{N=!1},200)),e.clearRect(0,0,d,o);const r=d*.5,p=o*.48,z=e.createRadialGradient(r,p,0,r,p,o*.5);z.addColorStop(0,"rgba(40,5,0,0.25)"),z.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=z,e.fillRect(0,0,d,o);const y=e.createRadialGradient(r,p+o*.42+u,0,r,p+o*.42+u,d*.22);y.addColorStop(0,"rgba(255,120,0,0.22)"),y.addColorStop(.5,"rgba(204,34,0,0.10)"),y.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=y,e.fillRect(0,0,d,o);const k=r,C=p+o*.35+u,K=p+o*.48,D=e.createLinearGradient(k,C,k,K);D.addColorStop(0,"rgba(255,100,0,0.0)"),D.addColorStop(1,`rgba(255,100,0,${.18+.08*Math.sin(M*2.2)})`),e.fillStyle=D,e.beginPath(),e.moveTo(k-d*.006,C),e.lineTo(k-d*.07,K),e.lineTo(k+d*.07,K),e.lineTo(k+d*.006,C),e.closePath(),e.fill(),Y.forEach(c=>{c.angle+=c.speed,e.save(),e.translate(r,p+u),e.rotate(c.angle*.3),e.scale(1,.28),e.beginPath(),e.ellipse(0,0,c.rx,c.ry/.28,0,0,Math.PI*2),e.strokeStyle=c.color+(.55+.15*Math.sin(M*2))+")",e.lineWidth=1.5,e.stroke(),e.restore()}),v.forEach(([c,b])=>{const[j,H]=R[c],[L,G]=R[b],T=E.has(c)||E.has(b);e.beginPath(),e.moveTo(j+(N?(Math.random()-.5)*8:0),H+u+(N?(Math.random()-.5)*4:0)),e.lineTo(L+(N?(Math.random()-.5)*8:0),G+u+(N?(Math.random()-.5)*4:0)),e.strokeStyle=T?"rgba(255,170,0,0.2)":"rgba(204,34,0,0.18)",e.lineWidth=1,e.stroke()}),P.forEach(c=>{const b=.5+.5*Math.sin(M*c.speed+c.phase),j=c.x+(N?(Math.random()-.5)*12:0),H=c.y+u+(N?(Math.random()-.5)*6:0);c.gold?e.fillStyle=`rgba(255,${Math.floor(140+b*80)},0,${.5+b*.5})`:e.fillStyle=`rgba(${Math.floor(180+b*75)},${Math.floor(b*20)},${Math.floor(b*12)},${.5+b*.45})`,e.beginPath(),e.arc(j,H,c.size*(.7+b*.6),0,Math.PI*2),e.fill()}),R.forEach(([c,b],j)=>{const H=E.has(j),L=.6+.4*Math.sin(M*2.8+j),G=e.createRadialGradient(c,b+u,0,c,b+u,9);H?(G.addColorStop(0,`rgba(255,170,0,${L*.9})`),G.addColorStop(1,"rgba(255,170,0,0)")):(G.addColorStop(0,`rgba(255,30,0,${L*.85})`),G.addColorStop(1,"rgba(255,30,0,0)")),e.fillStyle=G,e.beginPath(),e.arc(c,b+u,9,0,Math.PI*2),e.fill(),e.fillStyle=H?`rgba(255,220,80,${L})`:`rgba(255,80,40,${L})`,e.beginPath(),e.arc(c,b+u,2.5,0,Math.PI*2),e.fill()});const[X,Z]=R[0],U=Z+u+o*.007,te=.7+.3*Math.sin(M*5);[-o*.022,o*.022].forEach(c=>{e.fillStyle=`rgba(255,210,0,${te})`,e.fillRect(X+c-o*.012,U-o*.003,o*.024,o*.006)});const V=p+o*.38+u;e.save(),e.globalCompositeOperation="lighter",e.font=`900 ${Math.round(o*.055)}
181px Orbitron, monospace`,e.textAlign="center",e.shadowColor="#cc2200",e.shadowBlur=28,e.fillStyle="#cc2200",e.fillText("HAN",r-o*.09,V),e.shadowColor="#ffaa00",e.shadowBlur=28,e.fillStyle="#ffaa00",e.fillText("ZO",r+o*.09,V),e.restore()}return a(),()=>{cancelAnimationFrame(S),window.removeEventListener("resize",F)}}function Le(l){const e=new ye;e.fog=new we(196608,.028);const d=new ve(58,l.clientWidth/l.clientHeight,.1,100);d.position.set(0,1.3,5);const o=new Me({canvas:l,antialias:!0,alpha:!1});o.setPixelRatio(Math.min(window.devicePixelRatio,2)),o.setSize(l.clientWidth,l.clientHeight,!1),o.setClearColor(0,1);const i={head:new m(0,3.1,0),neck:new m(0,2.7,0),chest:new m(0,2.1,0),belly:new m(0,1.6,0),hips:new m(0,1.1,0),lShoulder:new m(-.65,2.5,0),rShoulder:new m(.65,2.5,0),lElbow:new m(-.85,1.7,0),rElbow:new m(.85,1.7,0),lWrist:new m(-.9,.9,0),rWrist:new m(.9,.9,0),lHip:new m(-.32,1.05,0),rHip:new m(.32,1.05,0),lKnee:new m(-.36,.3,0),rKnee:new m(.36,.3,0),lAnkle:new m(-.38,-.65,0),rAnkle:new m(.38,-.65,0)},R=[["head","neck"],["neck","chest"],["chest","belly"],["belly","hips"],["chest","lShoulder"],["chest","rShoulder"],["lShoulder","lElbow"],["rShoulder","rElbow"],["lElbow","lWrist"],["rElbow","rWrist"],["hips","lHip"],["hips","rHip"],["lHip","lKnee"],["rHip","rKnee"],["lKnee","lAnkle"],["rKnee","rAnkle"]];function v(n,s,w,h=.15){const x=[];for(let O=0;O<w;O++){const A=Math.random()*Math.PI*2,B=Math.acos(2*Math.random()-1),_=s*(.45+Math.random()*.55);x.push(n.x+_*Math.sin(B)*Math.cos(A)+(Math.random()-.5)*h,n.y+_*Math.sin(B)*Math.sin(A)+(Math.random()-.5)*h,n.z+_*Math.cos(B)+(Math.random()-.5)*h*.5)}return x}function E(n,s,w,h){const x=[],O=new m().subVectors(s,n),A=new m(0,1,0).clone().cross(O).normalize();A.lengthSq()<.001&&A.set(1,0,0);const B=new m().crossVectors(O.clone().normalize(),A);for(let _=0;_<w;_++){const ue=Math.random(),ie=h*(.3+Math.random()*.7),q=Math.random()*Math.PI*2,re=new m().lerpVectors(n,s,ue);x.push(re.x+ie*(Math.cos(q)*A.x+Math.sin(q)*B.x)+(Math.random()-.5)*.05,re.y+ie*(Math.cos(q)*A.y+Math.sin(q)*B.y)+(Math.random()-.5)*.05,re.z+ie*(Math.cos(q)*A.z+Math.sin(q)*B.z))}return x}const f=[];f.push(...v(i.head,.28,600,.1)),f.push(...v(i.neck,.12,100,.06));for(let n=0;n<100;n++)f.push((Math.random()-.5)*.2,1.8+Math.random()*.5,(Math.random()-.5)*.2);for(let n=0;n<850;n++)f.push((Math.random()-.5)*1.28,1.15+Math.random()*1.38,(Math.random()-.5)*.56);for(let n=0;n<280;n++)f.push((Math.random()-.5)*.74,.88+Math.random()*.28,(Math.random()-.5)*.4);f.push(...v(i.lShoulder,.1,150,.07)),f.push(...v(i.rShoulder,.1,150,.07));const P=f.length/3;[["lShoulder","lElbow"],["rShoulder","rElbow"],["lElbow","lWrist"],["rElbow","rWrist"]].forEach(([n,s])=>f.push(...E(i[n],i[s],200,.12))),f.push(...v(i.lWrist,.13,120,.07)),f.push(...v(i.rWrist,.13,120,.07));const Y=f.length/3;[["lHip","lKnee"],["rHip","rKnee"],["lKnee","lAnkle"],["rKnee","rAnkle"]].forEach(([n,s],w)=>f.push(...E(i[n],i[s],w<2?300:240,.14))),f.push(...v(i.lAnkle,.14,100,.07)),f.push(...v(i.rAnkle,.14,100,.07));const M=f.length/3-200,N=f.length/3,W=new Float32Array(f),S=new Float32Array(N*3),u=new Float32Array(N),F=600,a=700,r=800;for(let n=0;n<N;n++){const s=.5+Math.random()*.5,w=n<F,h=n>=1930&&n<P,x=n>=P+800&&n<Y,O=n>=M,A=n>=a&&n<r;w||h||x||O?(S[n*3]=s*.92,S[n*3+1]=s*.58,S[n*3+2]=0):A?(S[n*3]=s*.9,S[n*3+1]=s*.88,S[n*3+2]=s*.82):(S[n*3]=s*.93,S[n*3+1]=s*.05,S[n*3+2]=s*.03),u[n]=Math.random()*Math.PI*2}const p=new le,z=new ce(W.slice(),3);p.setAttribute("position",z),p.setAttribute("color",new ce(S,3));const y=new xe({size:.048,vertexColors:!0,transparent:!0,opacity:.93,blending:$,depthWrite:!1,sizeAttenuation:!0}),k=new fe(p,y);k.position.y=-1.1,e.add(k);const C=p.attributes.color,K=new Set(["head","lShoulder","rShoulder","lWrist","rWrist","lAnkle","rAnkle"]),D=[];Object.entries(i).forEach(([n,s])=>{const w=new Se(.052,8,8),h=new Q({color:K.has(n)?16755200:16716032,transparent:!0,opacity:.9,blending:$,depthWrite:!1}),x=new ee(w,h);x.position.copy(s),x.position.y-=1.1,e.add(x),D.push({mesh:x,baseY:x.position.y})}),R.forEach(([n,s])=>{const w=n==="head"||s==="head",h=[i[n].clone(),i[s].clone()];h[0].y-=1.1,h[1].y-=1.1;const x=new le().setFromPoints(h),O=new Ne({color:w?16755200:13373696,transparent:!0,opacity:.2,blending:$,depthWrite:!1});e.add(new je(x,O))});const X=[];[-.14,.14].forEach(n=>{const s=new Ee(.15,.04),w=new Q({color:16763904,transparent:!0,opacity:.95,blending:$,side:ne,depthWrite:!1}),h=new ee(s,w);h.position.set(n,i.head.y-.12-1.1,.27),e.add(h),X.push(h)});const Z=[];[{r:1.24,t:.008,c:16716032,tx:.28,tz:.08,sp:.55,y:.45}
181,{r:1.6,t:.006,c:16755200,tx:.84,tz:.44,sp:-.36,y:.18},{r:.94,t:.007,c:16724736,tx:1.28,tz:.64,sp:1,y:.84}].forEach(n=>{const s=new me(n.r,n.t,3,128),w=new Q({color:n.c,transparent:!0,opacity:.72,blending:$,side:ne,depthWrite:!1}),h=new ee(s,w);h.rotation.x=n.tx,h.rotation.z=n.tz,h.position.y=n.y,e.add(h),Z.push({mesh:h,speed:n.sp})});const U=new ee(new me(2.4,.85,8,64),new Q({color:3342336,transparent:!0,opacity:.18,blending:$,side:ne,depthWrite:!1}));U.rotation.x=-Math.PI/2,U.position.y=-1.5,e.add(U);const te=new ee(new ke(.08,.44,2.5,16,1,!0),new Q({color:16737792,transparent:!0,opacity:.2,blending:$,side:ne,depthWrite:!1}));te.position.set(0,-1.4,0),e.add(te);const V=new ee(new Ae(1.05,64),new Q({color:16746496,transparent:!0,opacity:.3,blending:$,side:ne,depthWrite:!1}));V.rotation.x=-Math.PI/2,V.position.y=-1.66,e.add(V);const c=new Re(18,28,3344384,2098176);c.material.transparent=!0,c.material.opacity=.55,c.material.depthWrite=!1,c.position.y=-1.68,e.add(c);const b=130,j=new Float32Array(b*3),H=new Float32Array(b);for(let n=0;n<b;n++)j[n*3]=(Math.random()-.5)*5,j[n*3+1]=-1.6+Math.random()*6,j[n*3+2]=(Math.random()-.5)*2.5,H[n]=.003+Math.random()*.009;const L=new le,G=new ce(j,3);L.setAttribute("position",G),e.add(new fe(L,new xe({color:16737792,size:.038,transparent:!0,opacity:.32,blending:$,depthWrite:!1})));let T=0,se=0,ae=!1;const oe=W.slice();let de=0;function he(){const n=l.clientWidth,s=l.clientHeight;d.aspect=n/s,d.updateProjectionMatrix(),o.setSize(n,s,!1)}window.addEventListener("resize",he);function pe(){de=requestAnimationFrame(pe),T+=.016,se+=.016;const n=Math.sin(T*1.4)*.21;k.position.y=-1.1+n,D.forEach(({mesh:s,baseY:w},h)=>{s.position.y=w+n,s.material.opacity=(.6+.4*Math.sin(T*2.8+h))*.9}),X.forEach(s=>{s.position.y=i.head.y-.12-1.1+n,s.material.opacity=.75+.25*Math.sin(T*5)}),d.position.x=Math.sin(T*.26)*.4,d.position.z=5+Math.sin(T*.18)*.14,d.lookAt(0,.5,0),se>10&&Math.random()<.018&&(ae=!0,se=0,setTimeout(()=>{ae=!1},220));for(let s=0;s<N;s++){const w=ae?(Math.random()-.5)*.32:0,h=ae?(Math.random()-.5)*.14:0;z.setXYZ(s,oe[s*3]+w,oe[s*3+1]+h,oe[s*3+2]);const x=.52+.48*Math.sin(T*4+u[s]),O=s<F||s>=1930&&s<P||s>=P+800&&s<Y||s>=M,A=s>=a&&s<r;O?C.setXYZ(s,x*.92,x*(.55+Math.random()*.08),0):A?C.setXYZ(s,x*.9,x*.88,x*.82):C.setXYZ(s,x*(.85+Math.random()*.15),x*.05,x*.03)}z.needsUpdate=!0,C.needsUpdate=!0,Z.forEach(s=>{s.mesh.rotation.y+=s.speed*.016}),U.rotation.z+=.003,te.material.opacity=.14+.08*Math.sin(T*2.2),V.material.opacity=.2+.12*Math.sin(T*1.8);for(let s=0;s<b;s++)j[s*3+1]+=H[s],j[s*3+1]>4&&(j[s*3]=(Math.random()-.5)*5,j[s*3+1]=-1.6);G.needsUpdate=!0,o.render(e,d)}return pe(),()=>{cancelAnimationFrame(de),window.removeEventListener("resize",he),o.dispose(),p.dispose(),y.dispose()}}function De(){const l=I.useRef(null),e=I.useRef(null),d=I.useRef(null),[o,i]=I.useState(Pe.map(a=>({...a,price:a.base,dir:0}))),[R,v]=I.useState([{role:"assistant",content:"HANZO ONLINE. Blood Moon protocol engaged. I know every feature of this platform and every tool at your disposal. Ask me anything, Operator."}]),[E,f]=I.useState(""),[P,Y]=I.useState(!1),[M,N]=I.useState(!1);I.useEffect(()=>{if(!l.current)return;let a;if(He())try{a=Le(l.current)}catch{a=be(l.current)}else a=be(l.current);return a},[]),I.useEffect(()=>{const a=setInterval(()=>{i(r=>r.map(p=>{const z=(Math.random()-.49)*p.base*7e-4;return{...p,price:p.price+z,dir:z>=0?1:-1}}))},2e3);return()=>clearInterval(a)},[]),I.useEffect(()=>{e.current?.scrollTo({top:9999,behavior:"smooth"})},[R,P]);const W=I.useCallback(a=>
181{if(!M||!window.speechSynthesis)return;window.speechSynthesis.cancel();const r=new SpeechSynthesisUtterance(a);r.rate=.95,r.pitch=.85,r.volume=1;const z=window.speechSynthesis.getVoices().find(y=>y.name.toLowerCase().includes("daniel")||y.name.toLowerCase().includes("google uk")||y.lang==="en-GB");z&&(r.voice=z),d.current=r,window.speechSynthesis.speak(r)},[M]);async function S(){if(!E.trim()||P)return;const a=E.trim();f("");const r=[...R,{role:"user",content:a}];v(r),Y(!0);try{const y=(await(await fetch("/api/hanzo/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({messages:r})})).json()).reply||"Systems nominal. Please repeat your query.";v([...r,{role:"assistant",content:y}]),W(y)}catch{v([...r,{role:"assistant",content:"Neural link disrupted. Reconnecting... Please retry, Operator."}])}finally{Y(!1)}}function u(a){a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),S())}function F(){M&&window.speechSynthesis?.cancel(),N(a=>!a)}return t.jsxs(t.Fragment,{children:[t.jsx("style",{children:Ge}),t.jsxs("div",{className:"hnz-root",children:[t.jsx("div",{className:"hnz-scan-line"}),t.jsx("div",{className:"hnz-corner hnz-corner--tl"}),t.jsx("div",{className:"hnz-corner hnz-corner--tr"}),t.jsx("div",{className:"hnz-corner hnz-corner--bl"}),t.jsx("div",{className:"hnz-corner hnz-corner--br"}),t.jsxs("div",{className:"hnz-top",children:[t.jsx("span",{className:"hnz-logo-r",children:"HAN"}),t.jsx("span",{className:"hnz-logo-g",children:"ZO"}),t.jsxs("div",{className:"hnz-live",children:[t.jsx("div",{className:"hnz-live-dot"}),t.jsx("span",{className:"hnz-live-txt",children:"SIMULATED"})]}),t.jsx("div",{className:"hnz-tickers",children:o.map(a=>t.jsxs("div",{className:"hnz-tick",children:[t.jsx("span",{className:"hnz-tick-label",children:a.label}),t.jsx("span",{className:"hnz-tick-price",style:{color:a.dir>=0?"#00ff88":"#ff3355"},children:a.price.toFixed(a.dec)}),t.jsx("span",{className:"hnz-tick-dir",style:{color:a.dir>=0?"#00ff88":"#ff3355"},children:a.dir>=0?"▲":"▼"})]},a.label))}),t.jsx("span",{className:"hnz-nav-tag",children:"AI LIVING GUIDE"})]}),t.jsxs("div",{className:"hnz-main",children:[t.jsxs("div",{className:"hnz-panel hnz-panel-l",children:[t.jsx("div",{className:"hnz-sec-label",children:"MARKET CONTEXT"}),Ce.map(a=>t.jsxs("div",{className:"hnz-bias-row",children:[t.jsx("span",{className:"hnz-bias-pair",children:a.pair}),t.jsx("span",{className:"hnz-bias-tag",style:{color:Oe(a.bias)},children:a.bias})]},a.pair)),t.jsx("div",{className:"hnz-divider"}),t.jsxs("div",{className:"hnz-signal",children:[t.jsx("div",{className:"hnz-sec-label-gold",style:{marginBottom:8},children:"ANALYTICAL SNAPSHOT"}),[["PAIR","XAUUSD"],["REFERENCE","2,374.50"],["RANGE LOW","2,361.00"],["RANGE HIGH","2,392.00"],["ALT RANGE","2,415.00"],["R:R EXAMPLE","1:2.8"],["SCORE","Illustrative"]].map(([a,r])=>t.jsxs("div",{className:"hnz-signal-row",children:[t.jsx("span",{className:"hnz-signal-k",children:a}),t.jsx("span",{className:"hnz-signal-v",style:{color:a==="CONF"?"#00ff88":a==="PAIR"?g:"#ffaa44"},children:r})]},a))]}),t.jsx(ze,{}),t.jsxs("div",{className:"hnz-feat",children:[t.jsx("div",{className:"hnz-feat-title",children:"WYCKOFF STATUS"}),t.jsx("div",{className:"hnz-feat-desc",children:"Phase D — Markup example. Composite Man narrative and LPS terminology are shown for educational review."})]})]}),t.jsxs("div",{className:"hnz-stage",children:[t.jsx("div",{className:"hnz-canvas-wrap",children:t.jsx("canvas",{ref:l})}),t.jsxs("div",{className:"hnz-avatar-label",children:[t.jsxs("div",{className:"hnz-avatar-name",children:[t.jsx("span",{children:"HAN"}),t.jsx("span",{children:"ZO"})]}),t.jsx("div",{className:"hnz-avatar-sub",children:"AI TRADING INTELLIGENCE"}),t.jsx("div",{className:"hnz-avatar-status",children:"● SYSTEMS NOMINAL"})]})]}),t.jsxs("div",{className:"hnz-panel hnz-panel-r",children:[t.jsx("div",{className:"hnz-sec-label",children:"STUDY METRICS"}),t.jsx("div",{className:"hnz-stat-grid",children:[["HISTORICAL SAMPLE","Review"],["AVG R:R EXAMPLE","1:2.1"],["SCENARIOS","Illustrative"],["OUTCOME","Varies"]].map(([a,r])=>t.jsxs("div",{className:"hnz-stat",children:[t.jsx("div",{className:"hnz-stat-k",children:a}),t.jsx("div",{className:"hnz-stat-v",style:{color:a==="MONTHLY"?"#00ff88":"#ffaa44"}
181,children:r})]},a))}),t.jsx("div",{className:"hnz-divider"}),t.jsx("div",{className:"hnz-sec-label",children:"MARKET SESSIONS"}),Te.map(a=>t.jsxs("div",{className:"hnz-sess-row",children:[t.jsx("span",{className:"hnz-sess-name",children:a.name}),t.jsx("span",{className:"hnz-sess-status",style:{color:ge(a.open,a.close)?"#00ff88":"#221100"},children:ge(a.open,a.close)?"● OPEN":"○ CLOSED"})]},a.name)),t.jsx("div",{className:"hnz-divider"}),t.jsxs("div",{className:"hnz-event",children:[t.jsx("div",{className:"hnz-event-label",children:"NEXT HIGH IMPACT"}),t.jsx("div",{className:"hnz-event-name",children:"US CPI Data Release"}),t.jsx("div",{className:"hnz-event-time",children:"08:30 EST · HIGH IMPACT"})]}),t.jsxs("div",{className:"hnz-feat",children:[t.jsx("div",{className:"hnz-feat-title",children:"SESSION CONTEXT"}),t.jsx("div",{className:"hnz-feat-desc",children:(()=>{const a=new Date().getUTCHours();return a>=2&&a<5?"Tokyo session context. Review JPY pair behavior in historical examples.":a>=7&&a<10?"London session context. Review liquidity and volatility observations.":a>=12&&a<15?"New York session context. Compare the illustrative display with historical samples.":"Inter-session context. Use the period for observation and documentation."})()})]}),t.jsxs("div",{className:"hnz-feat",children:[t.jsx("div",{className:"hnz-feat-title",children:"PLATFORM ACCESS"}),t.jsx("div",{className:"hnz-feat-desc",children:"Ask HANZO about any feature — Intelligence Engine, Wyckoff Gate, Operator Agent, Pattern Engine, Phantom Desk."})]})]})]}),t.jsxs("div",{className:"hnz-chat",children:[t.jsxs("div",{className:"hnz-chat-msgs",ref:e,children:[R.map((a,r)=>t.jsxs("div",{className:"hnz-msg",children:[t.jsx("span",{className:`hnz-msg-tag hnz-msg-tag--${a.role==="assistant"?"hnz":"you"}`,children:a.role==="assistant"?"HNZ":"YOU"}),t.jsx("span",{className:`hnz-msg-text hnz-msg-text--${a.role==="assistant"?"hnz":"you"}`,children:a.content})]},r)),P&&t.jsxs("div",{className:"hnz-msg",children:[t.jsx("span",{className:"hnz-msg-tag hnz-msg-tag--hnz",children:"HNZ"}),t.jsx("span",{className:"hnz-thinking",children:"REVIEWING MARKET DATA…"})]})]}),t.jsxs("div",{className:"hnz-chat-input-wrap",children:[t.jsxs("div",{className:"hnz-chat-controls",children:[t.jsx("input",{className:"hnz-input",value:E,onChange:a=>f(a.target.value),onKeyDown:u,placeholder:"Ask HANZO anything…","data-testid":"input-hanzo-chat"}),t.jsx("button",{className:"hnz-tts-btn",onClick:F,title:M?"Mute HANZO voice":"Enable HANZO voice",children:M?"🔊":"🔇"})]}),t.jsx("button",{className:"hnz-btn-exec",onClick:S,disabled:P||!E.trim(),"data-testid":"button-hanzo-execute",children:"SEND QUERY"})]})]})]})]})}export{De as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.