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.