1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8624],{10362:(e,t,n)=>{n.d(t,{$H:()=>l,$O:()=>o,Wr:()=>r});var a=n(54568);n(7620);var i=n(67016);function r(e){let{width:t=120,height:n=26}=e;return(0,a.jsx)("div",{className:"symbol-badge-spark-skeleton skeleton-shape","aria-hidden":!0,style:{width:"100%",height:"100%",backgroundColor:"transparent"},children:(0,a.jsx)("svg",{width:"100%",height:"100%",viewBox:"0 0 ".concat(t," ").concat(n),preserveAspectRatio:"none",style:{display:"block",opacity:.72},children:(0,a.jsx)("path",{d:"M 2 ".concat(.65*n," L ").concat(.22*t," ").concat(.5*n," L ").concat(.45*t," ").concat(.56*n," L ").concat(.68*t," ").concat(.32*n," L ").concat(t-2," ").concat(.38*n),fill:"none",stroke:"var(--color-bg-skeleton)",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})})})}function o(e){let{kind:t="price",style:n}=e;if("price"===t)return(0,a.jsxs)("span",{"aria-hidden":!0,style:{display:"inline-flex",alignItems:"baseline",gap:3,flexShrink:0,...n},children:[(0,a.jsx)(i.SkeletonShape,{style:{width:34,height:11}}),(0,a.jsx)(i.SkeletonShape,{style:{width:20,height:9,opacity:.8}})]});let{sign:r,body:o}={change:{sign:7,body:{w:30,h:11}},"change-compact":{sign:6,body:{w:24,h:9}},"change-meta":{sign:5,body:{w:18,h:8}}}[t];return(0,a.jsxs)("span",{"aria-hidden":!0,style:{display:"inline-flex",alignItems:"baseline",gap:2,flexShrink:0,...n},children:[(0,a.jsx)(i.SkeletonShape,{style:{width:r,height:o.h-1,opacity:.7}}),(0,a.jsx)(i.SkeletonShape,{style:{width:o.w,height:o.h}})]})}function l(){return(0,a.jsxs)("div",{"aria-hidden":!0,className:"symbol-badge symbol-badge--card symbol-badge--card-full symbol-badge--static",style:{display:"inline-flex",flexDirection:"row",alignItems:"center",gap:"var(--space-3)",width:"100%",boxSizing:"border-box",padding:"".concat(14,"px var(--space-3)"),borderRadius:"var(--radius-md)",background:"transparent",minHeight:56},children:[(0,a.jsx)(i.SkeletonShape,{radius:"full",style:{width:28,height:28,flexShrink:0}}),(0,a.jsxs)("span",{style:{display:"flex",flexDirection:"column",gap:4,minWidth:0,flex:"0 1 auto"},children:[(0,a.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)"},children:[(0,a.jsx)(i.SkeletonShape,{style:{width:44,height:14}}),(0,a.jsx)(i.SkeletonShape,{style:{width:96,height:14}})]}),(0,a.jsx)(o,{kind:"change"})]}),(0,a.jsx)("span",{style:{flex:"0 0 auto",alignSelf:"center",minWidth:96,width:"min(280px, 50%)",marginLeft:"auto",height:32},children:(0,a.jsx)(r,{width:120,height:32})})]})}},21065:(e,t,n)=>{n.d(t,{_:()=>a});function a(e){let t=Date.now()-new Date(e).getTime();if(!Number.isFinite(t)||t<0)return"1M";let n=t/864e5;return n<=1.5?"1D":n<=10?"5D":n<=35?"1M":n<=100?"3M":n<=365?"1Y":"5Y"}},73057:(e,t,n)=>{n.d(t,{BW:()=>g,FW:()=>c,Fy:()=>b,JD:()=>s,vz:()=>u,xg:()=>l});var a=n(65107),i=n(15194),r=n(29459);let o=i.Gr,l=120,s=96,c=32;function d(e,t){let n=Date.now()-new Date(e).getTime(),a=Math.max(12,Math.round(t/4));if(!Number.isFinite(n)||n<0)return Math.min(28,a);let i=n/36e5,r=n/864e5;return i<=6?Math.max(18,Math.min(64,a)):i<=24?Math.max(16,Math.min(56,a)):r<=3?Math.min(48,a):r<=10?Math.min(44,a):r<=35?Math.min(40,a):r<=200?Math.min(34,a):Math.min(28,a)}function h(e){let t=new Date(e.publishDate).getTime();if(!Number.isFinite(t))return[];let n=null!=e.untilMs&&Number.isFinite(e.untilMs)?e.untilMs:Date.now(),a=e.points.filter(e=>e.time>=t&&e.time<=n).sort((e,t)=>e.time-t.time);if(a.length<2)return a;a.length>e.budget&&(a=function(e,t){if(e.length<=t||t<2)return e;let n=[],a=(e.length-1)/(t-1);for(let i=0;i<t;i+=1){let t=Math.min(e.length-1,Math.round(i*a)),r=e[t],o=n[n.length-1];o&&o.time===r.time||n.push(r)}return n.length>=2?n:[e[0],e[e.length-1]]}(a,e.budget));let i=function(e){let t=Date.now()-new Date(e).getTime();if(!Number.isFinite(t)||t<0)return 10;let n=t/36e5;return n<=6?16:n<=24?14:t/864e5<=3?10:8}(e.publishDate),o=Math.min(e.budget,Math.max(i,a.length));if(a.length<o&&a.length<=6){let e=a[0].time,t=a[a.length-1].time;a=function(e,t,n,a){if(e.length<2||a<2)return e;let i=Math.max(1,n-t),o=[];for(let n=0;n<a;n+=1){let l=t+i*n/(a-1),s=(0,r.d4)(e,l);null!=s&&o.push({time:l,close:s})}return o.length>=2?o:e}(a,e,t,o)}return a}function u(e){if(!e||!e.performancePath)return null;let t="postResolutionPath"in e&&e.postResolutionPath?e.postResolutionPath:null;return{linePathD:e.performancePath,areaPathD:e.performanceArea||null,tailPathD:t,referenceY:e.referenceY}}function m(e,t,n,a){if(n>=a||a<=0)return"";let i=a-n;if(1===i)return"M ".concat(e[n].toFixed(2)," ").concat(t[n].toFixed(2));if(2===i){let a=e[n],i=t[n],r=e[n+1],o=t[n+1];return"M ".concat(a.toFixed(2)," ").concat(i.toFixed(2)," L ").concat(r.toFixed(2)," ").concat(o.toFixed(2))}let r=e.slice(n,a),o=t.slice(n,a),l=r.length,s=[],c=[],d=[];for(let e=0;e<l-1;e+=1){let t=r[e+1]-r[e],n=o[e+1]-o[e];s.push(t),c.push(n),d.push(1e-6>Math.abs(t)?0:n/t)}let h=Array(l);h[0]=d[0],h[l-1]=d[l-2];for(let e=1;e<l-1;e+=1)h[e]=d[e-1]*d[e]<=0?0:(d[e-1]+d[e])/2;for(let e=0;e<l-1;e+=1)if(1e-6>Math.abs(d[e]))h[e]=0,h[e+1]=0;else{let t=h[e]/d[e],n=h[e+1]/d[e],a=Math.hypot(t,n);if(a>3){let i=3/a;h[e]=i*t*d[e],h[e+1]=i*n*d[e]}}let u="M ".concat(r[0].toFixed(2)," ").concat(o[0].toFixed(2));for(let e=0;e<l-1;e+=1){let t=r[e],n=o[e],a=r[e+1],i=o[e+1],l=s[e]/3,c=t+l,d=n+h[e]*l,m=a-l,p=i-h[e+1]*l;u+=" C ".concat(c.toFixed(2)," ").concat(d.toFixed(2),", ").concat(m.toFixed(2)," ").concat(p.toFixed(2),", ").concat(a.toFixed(2)," ").concat(i.toFixed(2))}return u}function p(e,t,n,a){let r=e[0].time,o=e[e.length-1].time;return function(e,t,n,a,r,o){if(e.length<2)return null;let l=e.map(e=>e.close),s=null!=o&&Number.isFinite(o)?[...l,o]:l,{lo:c,hi:d}=(0,i.fz)(s),h=d-c||1,u=i.lb.x,m=i.lb.y,p=t-2*u,g=n-2*m,b=Math.max(1,r-a),f=[],y=[];
1for(let t of e)f.push(u+(t.time-a)/b*p),y.push(m+g-(t.close-c)/h*g);let x=null!=o&&Number.isFinite(o)?m+g-(o-c)/h*g:null;return{xs:f,ys:y,baseY:m+g,lo:c,hi:d,referenceY:x}}(e,t,n,r,o,a)}function g(e){if(!Number.isFinite(new Date(e.publishDate).getTime()))return null;let t=d(e.publishDate,e.width),n=null!=e.untilMs&&Number.isFinite(e.untilMs)?e.untilMs:Date.now(),a=h({points:e.points,publishDate:e.publishDate,untilMs:n,budget:t});if(a.length<2)return null;let i=p(a,e.width,e.height,e.reference);if(!i)return null;let{xs:r,ys:o,baseY:l,referenceY:s}=i,c=m(r,o,0,r.length);return c?{performancePath:c,performanceArea:function(e,t,n,a,i){let r=m(e,t,0,a);return r?"".concat(r," L ").concat(e[a-1].toFixed(2)," ").concat(i.toFixed(2)," L ").concat(e[0].toFixed(2)," ").concat(i.toFixed(2)," Z"):""}(r,o,0,r.length,l),width:e.width,height:e.height,performanceStroke:e.performanceStroke,referenceY:s}:null}function b(e){let t=new Date(e.publishDate).getTime(),n=(0,a.$z)(e.resolvedAt);if(!Number.isFinite(t)||!Number.isFinite(n)||n<=t)return null;let l=d(e.publishDate,e.width),s=h({points:e.points,publishDate:e.publishDate,untilMs:null,budget:l});if(s.length<2)return null;let c=p(s,e.width,e.height,e.reference);if(!c)return null;let{xs:u,ys:g,baseY:b,lo:f,hi:y,referenceY:x}=c,v=0,k=1/0;for(let e=0;e<s.length;e+=1){let n=Math.abs(s[e].time-t);n<k&&(k=n,v=e)}let w=(0,r.d4)(s,n);if(null==w)return null;let S=s[0].time,F=Math.max(1,s[s.length-1].time-S),M=i.lb.x,_=i.lb.y,D=e.width-2*M,T=e.height-2*_,W=M+(n-S)/F*D,j=_+T-(w-f)/(y-f||1)*T,C=(0,r.h3)(s,n),N=Math.min(u.length,Math.max(v+1,C+1)),L=m(u,g,v,N);if(!L)return null;let z="".concat(L," L ").concat(W.toFixed(2)," ").concat(j.toFixed(2)),E="".concat(z," L ").concat(W.toFixed(2)," ").concat(b.toFixed(2)," L ").concat(u[v].toFixed(2)," ").concat(b.toFixed(2)," Z"),I=C+1;return{performancePath:z,performanceArea:E,postResolutionPath:I<u.length?m([W,...u.slice(I)],[j,...g.slice(I)],0,u.length-I+1):"",markerXPct:W/e.width*100,markerYPct:j/e.height*100,width:e.width,height:e.height,performanceStroke:e.performanceStroke,referenceY:x,greyStroke:o}}},82670:(e,t,n)=>{n.d(t,{Ez:()=>v,HF:()=>y,K6:()=>m,KC:()=>W,Ko:()=>_,Lz:()=>f,NH:()=>F,Q$:()=>d,QW:()=>N,Rl:()=>g,TO:()=>w,VT:()=>D,X4:()=>b,YL:()=>S,__:()=>l,a3:()=>c,e4:()=>p,f0:()=>M,lZ:()=>h,nk:()=>T,u3:()=>s,uJ:()=>x,uV:()=>L,vk:()=>j,vn:()=>u,yz:()=>C,zg:()=>k});var a=n(73057),i=n(72522),r=n(87090),o=n(39371);let l=a.xg,s=a.JD,c=a.FW,d="\n .symbol-badge--card {\n display: inline-flex;\n text-decoration: none;\n transition: background 0.15s ease;\n }\n .symbol-badge--card.symbol-badge--interactive {\n cursor: pointer;\n }\n /* The rest fill is the shell's own typed style since 2026-09-06 (Wave 14,\n Track ME); the two hover rules bind the value they change rather than\n declaring the property, so the pair is intact and only the pointer state\n is a rule. The flush card's hover is its rest fill, which is what \"does\n not light up\" means and is why it must still be stated. */\n .symbol-badge--card.symbol-badge--interactive:hover {\n --symbol-badge-card-bg: var(--color-bg-card-hover);\n }\n .symbol-badge--card-flush.symbol-badge--interactive:hover {\n --symbol-badge-card-bg: var(--color-bg-primary);\n }\n /* The full card's spark column is symbolBadgeCardSparkColFullStyle since\n Track LZ, and the three widths joined it on 2026-09-06 (Wave 14, Track\n ME): the phone tier binds --symbol-badge-card-spark-width at the foot of\n this block and the two typed styles read it, base and full, each with its\n own fallback. It grew to fill the space beside the text (Twitter parity)\n until 2026-09-25, when the founder pinned it right at one width. */\n .symbol-badge__card-avatar {\n display: inline-flex;\n }\n .symbol-badge__card-avatar--locked {\n filter: blur(2.25px);\n user-select: none;\n }\n /* The company name's truncation is symbolBadgeCardNameStyle's since\n 2026-09-25, when the name took the Standouts company style, which carries\n it; this rule restated both declarations. */\n .symbol-badge__card-name--locked {\n filter: blur(2.25px);\n user-select: none;\n }\n .symbol-badge__card-ticker--locked {\n filter: blur(2.25px);\n user-select: none;\n }\n .symbol-badge__card-price {\n font-variant-numeric: tabular-nums;\n }\n /* font-variant-numeric has no React Native counterpart, so it is the one\n declaration of the card's change chip that stays a rule. Everything else\n the four rules used to carry is symbolBadgeCardChange*Style below. */\n .symbol-badge--card .symbol-badge__change {\n font-variant-numeric: tabular-nums;\n }\n .symbol-badge__locked-performance {\n display: inline-flex;\n }\n .symbol-badge__card-resolution-marker {\n display: inline-flex;\n }\n .symbol-badge__card-resolution-marker--pop {\n animation: symbol-badge-card-resolution-pop 520ms cubic-bezier(0.34, 1.4, 0.64, 1) 640ms forwards;\n }\n @keyframes symbol-badge-card-resolution-pop {\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n .symbol-badge__card-metric-pop {\n animation: symbol-badge-card-metric-pop 460ms cubic-bezier(0.34, 1.35, 0.64, 1) 220ms forwards;\n }\n\n .symbol-badge__card-metric-pop--delay {\n animation-delay: 360ms;\n }\n\n @keyframes symbol-badge-card-metric-pop {\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .symbol-badge__card-metric-pop {\n animation: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n .symbol-badge__card-resolution-marker--pop {\n animation: none !important;\n opacity: 1 !important;\n transform: translate(-50%, -50%) scale(1) !important;\n }\n }\n\n /* The 480px tier folded onto the phone tier, 2026-09-06 (Track JL):\n WAVE13-OCEAN.md section 2 rules that width not admitted. The name's\n measure and the spark column's cap became symbolBadgeCardNameMaxWidth and\n symbolBadgeCardSparkMaxWidth in LAYOUT_TOKENS, read by the base rules; the\n price and change sizes restated the base rule exactly and were dead. The\n two remaining sizes are type roles rather than layout numbers, and the\n spark column's width switches from auto to a fixed box, which is a\n mechanism rather than a tier.\n\n THE TWO SIZES LEFT ON 2026-09-06 (Track JV). \"Type roles rather than\n layout numbers\" was the reason they stayed, and a LAYOUT_TOKENS tier holds\n a reference to another registry token since that day, so each is one base\n rule reading symbolBadgeCardNameSize / symbolBadgeCardTickerSize and the\n two role tokens stay the single definition of their own numbers.\n 2026-09-25: both tokens are gone. The identity line reads the Standout
1s\n ticker and company styles, one size at every width, so the badge has no\n type step of its own left to tier. */\n @media ".concat(i.oR," {\n .symbol-badge--card-full .symbol-badge__card-spark-col {\n --symbol-badge-card-spark-width: 100px;\n }\n }\n"),h={background:"var(--symbol-badge-card-bg, var(--color-bg-secondary))",flexDirection:"row",alignItems:"center",gap:"var(--space-3)",minHeight:0,padding:"14px var(--space-3)",border:"none",borderRadius:"var(--radius-md)",boxShadow:"none",color:"var(--color-text-primary)"},u={borderRadius:0,background:"var(--symbol-badge-card-bg, var(--color-bg-primary))"},m={paddingRight:"var(--space-4)"},p={lineHeight:0,flexShrink:0,alignItems:"center",justifyContent:"center"},g={display:"flex",flex:"0 1 auto",flexDirection:"column",alignItems:"flex-start",justifyContent:"center",gap:4,minWidth:0,minHeight:0},b={display:"flex",alignItems:"baseline",flexWrap:"nowrap",gap:6,minWidth:0,maxWidth:"100%"},f={display:"flex",flexWrap:"nowrap",alignItems:"baseline",gap:"var(--space-2)",minWidth:0,maxWidth:"100%",overflow:"hidden"},y={...r.w5,lineHeight:"var(--leading-none)"},x={...r.rt,lineHeight:"var(--leading-none)"},v={fontSize:"var(--type-caption-size)",fontFamily:"var(--font-mono)",fontWeight:"var(--font-semibold)",color:"var(--color-text-primary)",flexShrink:0,lineHeight:"var(--leading-none)"},k={fontSize:"var(--type-caption-size)",fontFamily:"var(--font-primary)",fontStyle:"italic",fontWeight:"var(--font-normal)",color:"var(--color-text-secondary)",lineHeight:"var(--leading-none)",whiteSpace:"nowrap",flexShrink:0},w={flexShrink:0,alignItems:"center",lineHeight:"var(--leading-none)",color:"var(--color-text-tertiary)"},S={position:"relative",height:c,flex:"0 0 auto",alignSelf:"center",marginLeft:"auto",width:"var(--symbol-badge-card-spark-width, ".concat(l,"px)")},F={minWidth:"var(--symbol-badge-card-spark-min-width, ".concat(s,"px)"),width:"var(--symbol-badge-card-spark-width, min(".concat((0,o.U)("symbolBadgeCardSparkMaxWidth"),", 50%))"),maxWidth:"var(--symbol-badge-card-spark-max-width, ".concat((0,o.U)("symbolBadgeCardSparkMaxWidth"),")")};function M(e){let t="compact"===e?"min(100%, 112px)":"full"===e?"min(100%, 220px)":"min(100%, ".concat((0,o.U)("symbolBadgeCardNameMaxWidth"),")");return"var(--symbol-badge-card-name-max-width, ".concat(t,")")}let _={width:"100%",position:"relative",zIndex:1,height:c,display:"flex",alignItems:"center",justifyContent:"center"},D={position:"absolute",zIndex:2,lineHeight:0,alignItems:"center",justifyContent:"center",padding:1,borderRadius:999,background:"var(--color-bg-secondary)",transform:"translate(-50%, -50%)",pointerEvents:"none"},T={fontSize:"var(--type-caption-size)",fontWeight:"var(--font-semibold)",flexShrink:0,lineHeight:"var(--leading-none)",fontFamily:"var(--font-mono)"},W={color:"var(--color-success)"},j={color:"var(--color-error)"},C={fontWeight:"var(--font-medium)",color:"var(--color-text-secondary)"},N={opacity:0,transform:"translateY(3px) scale(0.94)"},L={opacity:0,transform:"translate(-50%, -50%) scale(0.52)"}},91140:(e,t,n)=>{n.d(t,{LE:()=>p,K6:()=>m});var a=n(54568),i=n(7620),r=n(27736),o=n(73057),l=n(51183),s=n(91327),c=n(9419),d=n(69513),h=n(10362),u=n(82670);function m(e){var t;let{symbol:n,anchorDate:a,period:c,enabled:d,prefetched:h,width:m,stroke:p,reference:g,claimResolution:b,fallbackFrom:f,fallbackTo:y}=e,x=void 0!==h,{data:v,isLoading:k}=(0,r.useQuery)({...{queryKey:(0,s.pY)(n,c),queryFn:async()=>{var e;if(!n)return null;let t=new URLSearchParams({symbol:n,period:c}),a=await fetch("/api/tickers/price-history?".concat(t.toString()));if(!a.ok)throw Error("Failed to fetch price history");let i=await a.json();return i.success&&(null==(e=i.data)?void 0:e.points)?{points:i.data.points}:i.points?{points:i.points}:null},staleTime:l.l.symbolBadgeCardSparkline,gcTime:(0,l.XT)("symbolBadgeCardSparkline",2.5),retry:1},enabled:!x&&d}),w=x?h.points?{points:h.points}:null:v,S=x?!!(h.isLoading&&!(null==(t=h.points)?void 0:t.length)):k,F=(0,i.useMemo)(()=>{var e;if(!d||!a||!b)return null;let t=null!=(e=null==w?void 0:w.points)?e:[];return t.length<2?null:(0,o.Fy)({points:t,publishDate:a,resolvedAt:b.resolvedAt,width:m,height:u.a3,performanceStroke:p,reference:g})},[null==w?void 0:w.points,p,g,b,d,a,m]),M=(0,i.useMemo)(()=>{var e;
1if(!d||!a||b)return null;let t=null!=(e=null==w?void 0:w.points)?e:[];return t.length<2?null:(0,o.BW)({points:t,publishDate:a,width:m,height:u.a3,performanceStroke:p,reference:g})},[null==w?void 0:w.points,p,g,b,d,a,m]),_=(0,i.useMemo)(()=>!d||!a||b||M?[]:"number"==typeof f&&Number.isFinite(f)&&"number"==typeof y&&Number.isFinite(y)?f===y?[f,1.001*y]:[f,y]:[],[M,b,d,a,f,y]);return{resolvedClaimSpark:F,cardSpark:M,fallbackValues:_,isLoading:S}}let p=(0,i.forwardRef)(function(e,t){let{spark:n,width:i,stroke:r,reference:l,claimResolution:s,showResolutionMarker:m,animateIn:p=!1,drawKey:g,ariaLabel:b,fillContainer:f=!0,style:y}=e,{resolvedClaimSpark:x,cardSpark:v,fallbackValues:k,isLoading:w}=n,S=null!=n.resolvedClaimSpark||null!=n.cardSpark||n.fallbackValues.length>=2;return(0,a.jsx)("div",{ref:t,className:"symbol-badge__card-spark",style:{...u.Ko,...y},"aria-hidden":!S,children:w&&!S?(0,a.jsx)(h.Wr,{width:i,height:u.a3}):S?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.OW,{drawing:(0,o.vz)(null!=x?x:v),values:x||v?void 0:k,width:i,height:u.a3,autoColor:!1,strokeColor:r,tailColor:null==x?void 0:x.greyStroke,referenceValue:l,surfaceColor:"var(--color-bg-secondary)",showEndDot:!1,animateIn:p,fillContainer:f,ariaLabel:b},p?"spark-reveal-".concat(g):"spark-".concat(g)),m&&s&&x?(0,a.jsx)("span",{className:["symbol-badge__card-resolution-marker",p?"symbol-badge__card-resolution-marker--pop":""].filter(Boolean).join(" "),style:{...u.VT,...p?u.uV:null,left:"".concat(x.markerXPct,"%"),top:"".concat(x.markerYPct,"%")},"aria-hidden":!0,children:(0,a.jsx)(d.F,{result:s.result,size:14})}):null]}):null})})}}]);
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.