ConfigExporter 模型下拉改为可搜索的自定义 combobox, 新增 config.searchModel / config.noModelMatch i18n 键。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
19 KiB
JavaScript
63 lines
19 KiB
JavaScript
import{r as d,j as t,u as ee,a as te,f as se,l as re,L as E}from"./index-EC_zKUeV.js";import{T as oe,a as Z,V as T,R as ae,G as ne,P as ie,M as le}from"./Mesh-CwXV3WjE.js";import{m as ce}from"./proxy-CLxAIQiL.js";import{C as de}from"./CountUp-FAZKmwKP.js";import{u as me}from"./useTranslation-DATAnSaR.js";const ue=new Z,he=new T,xe=new T;class fe extends oe{constructor(e,{near:a=.1,far:i=100,fov:c=45,aspect:u=1,left:f,right:h,bottom:r,top:k,zoom:b=1}={}){super(),Object.assign(this,{near:a,far:i,fov:c,aspect:u,left:f,right:h,bottom:r,top:k,zoom:b}),this.projectionMatrix=new Z,this.viewMatrix=new Z,this.projectionViewMatrix=new Z,this.worldPosition=new T,this.type=f||h?"orthographic":"perspective",this.type==="orthographic"?this.orthographic():this.perspective()}perspective({near:e=this.near,far:a=this.far,fov:i=this.fov,aspect:c=this.aspect}={}){return Object.assign(this,{near:e,far:a,fov:i,aspect:c}),this.projectionMatrix.fromPerspective({fov:i*(Math.PI/180),aspect:c,near:e,far:a}),this.type="perspective",this}orthographic({near:e=this.near,far:a=this.far,left:i=this.left||-1,right:c=this.right||1,bottom:u=this.bottom||-1,top:f=this.top||1,zoom:h=this.zoom}={}){return Object.assign(this,{near:e,far:a,left:i,right:c,bottom:u,top:f,zoom:h}),i/=h,c/=h,u/=h,f/=h,this.projectionMatrix.fromOrthogonal({left:i,right:c,bottom:u,top:f,near:e,far:a}),this.type="orthographic",this}updateMatrixWorld(){return super.updateMatrixWorld(),this.viewMatrix.inverse(this.worldMatrix),this.worldMatrix.getTranslation(this.worldPosition),this.projectionViewMatrix.multiply(this.projectionMatrix,this.viewMatrix),this}updateProjectionMatrix(){return this.type==="perspective"?this.perspective():this.orthographic()}lookAt(e){return super.lookAt(e,!0),this}project(e){return e.applyMatrix4(this.viewMatrix),e.applyMatrix4(this.projectionMatrix),this}unproject(e){return e.applyMatrix4(ue.inverse(this.projectionMatrix)),e.applyMatrix4(this.worldMatrix),this}updateFrustum(){this.frustum||(this.frustum=[new T,new T,new T,new T,new T,new T]);const e=this.projectionViewMatrix;this.frustum[0].set(e[3]-e[0],e[7]-e[4],e[11]-e[8]).constant=e[15]-e[12],this.frustum[1].set(e[3]+e[0],e[7]+e[4],e[11]+e[8]).constant=e[15]+e[12],this.frustum[2].set(e[3]+e[1],e[7]+e[5],e[11]+e[9]).constant=e[15]+e[13],this.frustum[3].set(e[3]-e[1],e[7]-e[5],e[11]-e[9]).constant=e[15]-e[13],this.frustum[4].set(e[3]-e[2],e[7]-e[6],e[11]-e[10]).constant=e[15]-e[14],this.frustum[5].set(e[3]+e[2],e[7]+e[6],e[11]+e[10]).constant=e[15]+e[14];for(let a=0;a<6;a++){const i=1/this.frustum[a].distance();this.frustum[a].multiply(i),this.frustum[a].constant*=i}}frustumIntersectsMesh(e,a=e.worldMatrix){if(!e.geometry.attributes.position||((!e.geometry.bounds||e.geometry.bounds.radius===1/0)&&e.geometry.computeBoundingSphere(),!e.geometry.bounds))return!0;const i=he;i.copy(e.geometry.bounds.center),i.applyMatrix4(a);const c=e.geometry.bounds.radius*a.getMaxScaleOnAxis();return this.frustumIntersectsSphere(i,c)}frustumIntersectsSphere(e,a){const i=xe;for(let c=0;c<6;c++){const u=this.frustum[c];if(i.copy(u).dot(e)+u.constant<-a)return!1}return!0}}const pe=["#ffffff","#ffffff","#ffffff"],ge=s=>{s=s.replace(/^#/,""),s.length===3&&(s=s.split("").map(u=>u+u).join(""));const e=parseInt(s,16),a=(e>>16&255)/255,i=(e>>8&255)/255,c=(e&255)/255;return[a,i,c]},ve=`
|
|
attribute vec3 position;
|
|
attribute vec4 random;
|
|
attribute vec3 color;
|
|
|
|
uniform mat4 modelMatrix;
|
|
uniform mat4 viewMatrix;
|
|
uniform mat4 projectionMatrix;
|
|
uniform float uTime;
|
|
uniform float uSpread;
|
|
uniform float uBaseSize;
|
|
uniform float uSizeRandomness;
|
|
|
|
varying vec4 vRandom;
|
|
varying vec3 vColor;
|
|
|
|
void main() {
|
|
vRandom = random;
|
|
vColor = color;
|
|
|
|
vec3 pos = position * uSpread;
|
|
pos.z *= 10.0;
|
|
|
|
vec4 mPos = modelMatrix * vec4(pos, 1.0);
|
|
float t = uTime;
|
|
mPos.x += sin(t * random.z + 6.28 * random.w) * mix(0.1, 1.5, random.x);
|
|
mPos.y += sin(t * random.y + 6.28 * random.x) * mix(0.1, 1.5, random.w);
|
|
mPos.z += sin(t * random.w + 6.28 * random.y) * mix(0.1, 1.5, random.z);
|
|
|
|
vec4 mvPos = viewMatrix * mPos;
|
|
|
|
if (uSizeRandomness == 0.0) {
|
|
gl_PointSize = uBaseSize;
|
|
} else {
|
|
gl_PointSize = (uBaseSize * (1.0 + uSizeRandomness * (random.x - 0.5))) / length(mvPos.xyz);
|
|
}
|
|
|
|
gl_Position = projectionMatrix * mvPos;
|
|
}
|
|
`,be=`
|
|
precision highp float;
|
|
|
|
uniform float uTime;
|
|
uniform float uAlphaParticles;
|
|
varying vec4 vRandom;
|
|
varying vec3 vColor;
|
|
|
|
void main() {
|
|
vec2 uv = gl_PointCoord.xy;
|
|
float d = length(uv - vec2(0.5));
|
|
|
|
if(uAlphaParticles < 0.5) {
|
|
if(d > 0.5) {
|
|
discard;
|
|
}
|
|
gl_FragColor = vec4(vColor + 0.2 * sin(uv.yxx + uTime + vRandom.y * 6.28), 1.0);
|
|
} else {
|
|
float circle = smoothstep(0.5, 0.4, d) * 0.8;
|
|
gl_FragColor = vec4(vColor + 0.2 * sin(uv.yxx + uTime + vRandom.y * 6.28), circle);
|
|
}
|
|
}
|
|
`,we=({particleCount:s=200,particleSpread:e=10,speed:a=.1,particleColors:i,moveParticlesOnHover:c=!1,particleHoverFactor:u=1,alphaParticles:f=!1,particleBaseSize:h=100,sizeRandomness:r=1,cameraDistance:k=20,disableRotation:b=!1,pixelRatio:$=1,className:q})=>{const G=d.useRef(null),p=d.useRef({x:0,y:0});return d.useEffect(()=>{const w=G.current;if(!w)return;const M=new ae({dpr:$,depth:!1,alpha:!0}),N=M.gl;w.appendChild(N.canvas),N.clearColor(0,0,0,0);const S=new fe(N,{fov:15});S.position.set(0,0,k);const _=()=>{const g=w.clientWidth,x=w.clientHeight;M.setSize(g,x),S.perspective({aspect:N.canvas.width/N.canvas.height})};window.addEventListener("resize",_,!1),_();const J=g=>{const x=w.getBoundingClientRect(),L=(g.clientX-x.left)/x.width*2-1,D=-((g.clientY-x.top)/x.height*2-1);p.current={x:L,y:D}};c&&w.addEventListener("mousemove",J);const A=s,z=new Float32Array(A*3),R=new Float32Array(A*4),I=new Float32Array(A*3),H=i&&i.length>0?i:pe;for(let g=0;g<A;g++){let x,L,D,Y;do x=Math.random()*2-1,L=Math.random()*2-1,D=Math.random()*2-1,Y=x*x+L*L+D*D;while(Y>1||Y===0);const X=Math.cbrt(Math.random());z.set([x*X,L*X,D*X],g*3),R.set([Math.random(),Math.random(),Math.random(),Math.random()],g*4);const O=ge(H[Math.floor(Math.random()*H.length)]);I.set(O,g*3)}const B=new ne(N,{position:{size:3,data:z},random:{size:4,data:R},color:{size:3,data:I}}),F=new ie(N,{vertex:ve,fragment:be,uniforms:{uTime:{value:0},uSpread:{value:e},uBaseSize:{value:h*$},uSizeRandomness:{value:r},uAlphaParticles:{value:f?1:0}},transparent:!0,depthTest:!1}),C=new le(N,{mode:N.POINTS,geometry:B,program:F});let j,V=performance.now(),P=0;const U=g=>{j=requestAnimationFrame(U);const x=g-V;V=g,P+=x*a,F.uniforms.uTime.value=P*.001,c?(C.position.x=-p.current.x*u,C.position.y=-p.current.y*u):(C.position.x=0,C.position.y=0),b||(C.rotation.x=Math.sin(P*2e-4)*.1,C.rotation.y=Math.cos(P*5e-4)*.15,C.rotation.z+=.01*a),M.render({scene:C,camera:S})};return j=requestAnimationFrame(U),()=>{window.removeEventListener("resize",_),c&&w.removeEventListener("mousemove",J),cancelAnimationFrame(j),w.contains(N.canvas)&&w.removeChild(N.canvas)}},[s,e,a,c,u,f,h,r,k,b,$]),t.jsx("div",{ref:G,className:`relative w-full h-full ${q}`})};function je({text:s,speed:e=50,maxIterations:a=10,sequential:i=!1,revealDirection:c="start",useOriginalCharsOnly:u=!1,characters:f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+",className:h="",parentClassName:r="",encryptedClassName:k="",animateOn:b="hover",clickMode:$="once",...q}){const[G,p]=d.useState(s),[w,M]=d.useState(!1),[N,S]=d.useState(new Set),[_,J]=d.useState(!1),[A,z]=d.useState(b!=="click"),[R,I]=d.useState("forward"),H=d.useRef(null),B=d.useRef([]),F=d.useRef(0),C=d.useMemo(()=>u?Array.from(new Set(s.split(""))).filter(n=>n!==" "):f.split(""),[u,s,f]),j=d.useCallback((n,m)=>n.split("").map((v,o)=>v===" "?" ":m.has(o)?n[o]:C[Math.floor(Math.random()*C.length)]).join(""),[C]),V=d.useCallback(n=>{const m=[];if(n<=0)return m;if(c==="start"){for(let l=0;l<n;l++)m.push(l);return m}if(c==="end"){for(let l=n-1;l>=0;l--)m.push(l);return m}const v=Math.floor(n/2);let o=0;for(;m.length<n;){if(o%2===0){const l=v+o/2;l>=0&&l<n&&m.push(l)}else{const l=v-Math.ceil(o/2);l>=0&&l<n&&m.push(l)}o++}return m.slice(0,n)},[c]),P=d.useCallback(()=>{const n=new Set;for(let m=0;m<s.length;m++)n.add(m);return n},[s]),U=d.useCallback((n,m)=>{const v=Array.from(n);for(let o=0;o<m&&v.length>0;o++){const l=Math.floor(Math.random()*v.length);v.splice(l,1)}return new Set(v)},[]),g=d.useCallback(()=>{const n=new Set;S(n),p(j(s,n)),z(!1)},[s,j]),x=d.useCallback(()=>{i?(B.current=V(s.length),F.current=0,S(new Set)):S(new Set),I("forward"),M(!0)},[i,V,s.length]),L=d.useCallback(()=>{i?(B.current=V(s.length).slice().reverse(),F.current=0,S(P()),p(j(s,P()))):(S(P()),p(j(s,P()))),I("reverse"),M(!0)},[i,V,P,j,s]);d.useEffect(()=>{if(!w)return;let n,m=0;const v=o=>{const l=s.length;switch(c){case"start":return o.size;case"end":return l-1-o.size;case"center":{const y=Math.floor(l/2),W=Math.floor(o.size/2),K=o.size%2===0?y+W:y-W-1;if(K>=0&&K<l&&!o.has(K))return K;for(let Q=0;Q<l;Q++)if(!o.has(Q))return Q;return 0}default:return o.size}};return n=setInterval(()=>{S(o=>{if(i){if(R==="forward")if(o.size<s.length){const l=v(o),y=new Set(o);return y.add(l),p(j(s,y)),y}else return clearInterval(n),M(!1),z(!0),o;if(R==="reverse")if(F.current<B.current.length){const l=B.current[F.current++],y=new Set(o);return y.delete(l),p(j(s,y)),y.size===0&&(clearInterval(n),M(!1),z(!1)),y}else return clearInterval(n),M(!1),z(!1),o}else{if(R==="forward")return p(j(s,o)),m++,m>=a&&(clearInterval(n),M(!1),p(s),z(!0)),o;if(R==="reverse"){let l=o;l.size===0&&(l=P());const y=Math.max(1,Math.ceil(s.length/Math.max(1,a))),W=U(l,y);return p(j(s,W)),m++,W.size===0||m>=a?(clearInterval(n),M(!1),z(!1),p(j(s,new Set)),new Set):W}}return o})},e),()=>clearInterval(n)},[w,s,e,a,i,c,j,R,P,U,f,u]);const D=()=>{if(b==="click"){if($==="once"){if(A)return;I("forward"),x()}$==="toggle"&&(A?L():(I("forward"),x()))}},Y=d.useCallback(()=>{w||(S(new Set),z(!1),p(s),I("forward"),M(!0))},[w,s]),X=d.useCallback(()=>{M(!1),S(new Set),p(s),z(!0),I("forward")},[s]);d.useEffect(()=>{if(b!=="view"&&b!=="inViewHover")return;const n=l=>{l.forEach(y=>{y.isIntersecting&&!_&&(x(),J(!0))})},m={root:null,rootMargin:"0px",threshold:.1},v=new IntersectionObserver(n,m),o=H.current;return o&&v.observe(o),()=>{o&&v.unobserve(o)}},[b,_,x]),d.useEffect(()=>{b==="click"?g():(p(s),z(!0)),S(new Set),I("forward")},[b,s,g]);const O=b==="hover"||b==="inViewHover"?{onMouseEnter:Y,onMouseLeave:X}:b==="click"?{onClick:D}:{};return t.jsxs(ce.span,{ref:H,className:`inline-block whitespace-pre-wrap ${r}`,...O,...q,children:[t.jsx("span",{className:"sr-only",children:G}),t.jsx("span",{"aria-hidden":"true",children:G.split("").map((n,m)=>{const v=N.has(m)||!w&&A;return t.jsx("span",{className:v?h:k,children:n},m)})})]})}function ze(){const{t:s}=me(),{user:e}=ee(),{site:a}=te(),[i,c]=d.useState([]),[u,f]=d.useState([]);d.useEffect(()=>{se().then(r=>{r.data.success&&c(r.data.data||[])}).catch(()=>{}),re().then(r=>{r.data.success&&f(r.data.data||[])}).catch(()=>{})},[]);const h=i.filter(r=>r.enabled!==!1);return t.jsxs("div",{className:"relative",children:[t.jsx("div",{className:"absolute inset-0 h-[800px] overflow-hidden pointer-events-none",children:t.jsx(we,{particleColors:["#10b981","#06b6d4","#8b5cf6"],particleCount:60,particleSpread:15,speed:.2,particleBaseSize:80,moveParticlesOnHover:!0,alphaParticles:!1,disableRotation:!1})}),t.jsxs("section",{className:"relative max-w-7xl mx-auto px-6 pt-28 pb-24",children:[t.jsxs("div",{className:"text-center max-w-4xl mx-auto",children:[t.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-1.5 rounded-full border border-emerald-500/20 bg-emerald-500/5 mb-8",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-emerald-500 animate-pulse"}),t.jsx("span",{className:"text-xs font-mono text-emerald-400/80 uppercase tracking-wider",children:"System Online"})]}),t.jsx("h1",{className:"text-5xl md:text-7xl font-extrabold text-white leading-tight mb-6 tracking-tight",children:t.jsx(je,{text:(a==null?void 0:a.name)||s("home.defaultHeroTitle"),speed:60,maxIterations:10,revealDirection:"start",className:"text-white",encryptedClassName:"text-emerald-500/30"})}),t.jsxs("p",{className:"text-lg md:text-xl text-neutral-400 max-w-2xl mx-auto mb-10 leading-relaxed",children:[t.jsx("span",{className:"text-emerald-400/60 font-mono",children:"> "}),s("home.heroSubtitle")]}),t.jsx("div",{className:"flex items-center justify-center gap-4",children:e?t.jsx(E,{to:"/dashboard",className:"px-8 py-3.5 rounded-lg bg-emerald-500 text-black font-bold text-base hover:bg-emerald-400 transition-all font-mono shadow-lg shadow-emerald-500/20",children:s("home.goToDashboard")}):t.jsxs(t.Fragment,{children:[t.jsx(E,{to:"/register",className:"px-8 py-3.5 rounded-lg bg-emerald-500 text-black font-bold text-base hover:bg-emerald-400 transition-all font-mono shadow-lg shadow-emerald-500/20",children:s("home.getStarted")}),t.jsx(E,{to:"/pricing",className:"px-8 py-3.5 rounded-lg border border-emerald-500/20 text-emerald-400 font-medium text-base hover:bg-emerald-500/10 transition-all font-mono",children:s("home.viewPricing")})]})})]}),t.jsx("div",{className:"grid grid-cols-3 gap-4 max-w-2xl mx-auto mt-20",children:[{label:s("home.aiModels"),value:h.length||50,suffix:"+",color:"text-emerald-400",border:"border-emerald-500/15"},{label:s("home.uptime"),value:99.9,suffix:"%",color:"text-cyan-400",border:"border-cyan-500/15"},{label:s("home.latency"),value:50,suffix:"ms",prefix:"<",color:"text-violet-400",border:"border-violet-500/15"}].map((r,k)=>t.jsxs("div",{className:`text-center p-5 rounded-lg bg-[#030712]/60 border ${r.border} font-mono backdrop-blur-sm`,children:[t.jsxs("div",{className:`text-3xl font-bold ${r.color}`,children:[r.prefix,t.jsx(de,{from:0,to:r.value,duration:2}),r.suffix]}),t.jsx("p",{className:"text-xs text-neutral-500 mt-1.5 uppercase tracking-wider",children:r.label})]},k))})]}),t.jsxs("section",{className:"relative max-w-7xl mx-auto px-6 py-20",children:[t.jsxs("div",{className:"text-center mb-14",children:[t.jsx("h2",{className:"text-3xl font-bold text-white mb-3",children:s("home.whyChooseUs")}),t.jsx("p",{className:"text-neutral-500",children:s("home.whyChooseUsDesc")})]}),t.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:[{icon:t.jsx("svg",{className:"w-5 h-5 text-emerald-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:s("home.lightningFast"),desc:s("home.lightningFastDesc"),accent:"emerald"},{icon:t.jsx("svg",{className:"w-5 h-5 text-cyan-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"})}),title:s("home.securePrivate"),desc:s("home.securePrivateDesc"),accent:"cyan"},{icon:t.jsx("svg",{className:"w-5 h-5 text-violet-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),title:s("home.payAsYouGo"),desc:s("home.payAsYouGoDesc"),accent:"violet"}].map((r,k)=>t.jsxs("div",{className:`p-6 rounded-xl bg-[#030712]/60 border border-${r.accent}-500/10 hover:border-${r.accent}-500/25 transition-all group backdrop-blur-sm`,children:[t.jsx("div",{className:`w-10 h-10 rounded-lg bg-${r.accent}-500/10 flex items-center justify-center mb-4`,children:r.icon}),t.jsx("h3",{className:"text-lg font-semibold text-white mb-2",children:r.title}),t.jsx("p",{className:"text-sm text-neutral-400 leading-relaxed",children:r.desc}),t.jsx("div",{className:`h-px w-0 group-hover:w-full bg-gradient-to-r from-${r.accent}-500/50 to-transparent transition-all duration-500 mt-4`})]},k))})]}),h.length>0&&t.jsxs("section",{className:"relative max-w-7xl mx-auto px-6 py-20",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-bold text-white mb-3",children:s("home.availableModels")}),t.jsx("p",{className:"text-neutral-500",children:s("home.availableModelsDesc",{count:h.length})})]}),t.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2",children:h.slice(0,12).map((r,k)=>t.jsxs("div",{className:"px-4 py-3 rounded-lg bg-[#030712]/60 border border-emerald-500/[0.08] flex items-center gap-3 hover:border-emerald-500/20 transition-colors group font-mono backdrop-blur-sm",children:[t.jsx("span",{className:"text-emerald-500/60 text-xs",children:"$"}),t.jsx("span",{className:"text-sm text-neutral-400 group-hover:text-emerald-400 transition-colors truncate",children:r.display_name||r.model_name})]},r.id||k))}),h.length>12&&t.jsx("div",{className:"text-center mt-6",children:t.jsxs(E,{to:"/pricing",className:"text-sm text-emerald-400 hover:text-emerald-300 transition-colors font-mono",children:[s("home.viewAllModels",{count:h.length})," →"]})})]}),u.length>0&&t.jsxs("section",{className:"relative max-w-7xl mx-auto px-6 py-20",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-bold text-white mb-3",children:s("home.plansPackages")}),t.jsx("p",{className:"text-neutral-500",children:s("home.choosePlan")})]}),t.jsx("div",{className:"grid md:grid-cols-3 gap-6 max-w-4xl mx-auto",children:u.filter(r=>r.enabled).slice(0,3).map(r=>t.jsxs("div",{className:"rounded-xl p-6 flex flex-col bg-[#030712]/60 border border-emerald-500/[0.08] hover:border-emerald-500/20 transition-all backdrop-blur-sm",children:[t.jsx("h3",{className:"text-lg font-semibold text-white mb-1",children:r.name}),r.description&&t.jsx("p",{className:"text-sm text-neutral-400 mb-4",children:r.description}),t.jsxs("div",{className:"mt-auto pt-4",children:[t.jsxs("span",{className:"text-3xl font-bold text-emerald-400 font-mono",children:["$",r.price]}),r.original_price>r.price&&t.jsxs("span",{className:"text-sm text-neutral-600 line-through ml-2",children:["$",r.original_price]}),r.duration>0&&t.jsx("p",{className:"text-xs text-neutral-600 mt-1",children:s("home.days",{count:r.duration})})]}),t.jsx(E,{to:e?"/packages":"/register",className:"mt-4 py-2.5 rounded-lg bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 font-medium text-sm text-center hover:bg-emerald-500/15 transition-colors font-mono",children:s(e?"home.subscribe":"home.getStarted")})]},r.id))})]}),t.jsx("section",{className:"relative max-w-7xl mx-auto px-6 py-24",children:t.jsxs("div",{className:"rounded-xl p-12 text-center bg-[#030712]/60 border border-emerald-500/[0.08] relative overflow-hidden backdrop-blur-sm",children:[t.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-emerald-500/[0.03] via-transparent to-cyan-500/[0.03]"}),t.jsxs("div",{className:"relative z-10",children:[t.jsx("h2",{className:"text-3xl font-bold text-white mb-4",children:s("home.readyToStart")}),t.jsx("p",{className:"text-neutral-400 mb-8 max-w-md mx-auto",children:s("home.readyToStartDesc")}),t.jsx("div",{className:"flex items-center justify-center gap-4",children:e?t.jsx(E,{to:"/dashboard",className:"px-8 py-3 rounded-lg bg-emerald-500 text-black font-bold hover:bg-emerald-400 transition-all font-mono",children:s("home.goToDashboard")}):t.jsxs(t.Fragment,{children:[t.jsx(E,{to:"/register",className:"px-8 py-3 rounded-lg bg-emerald-500 text-black font-bold hover:bg-emerald-400 transition-all font-mono",children:s("home.createFreeAccount")}),t.jsx(E,{to:"/login",className:"px-8 py-3 rounded-lg border border-emerald-500/20 text-emerald-400 font-medium hover:bg-emerald-500/10 transition-all font-mono",children:s("home.signIn")})]})})]})]})})]})}export{ze as default};
|