0}}const we={green:{border:"#34d399",bg:"rgba(52,211,153,0.18)",text:"#6ee7b7"},red:{border:"#f87171",bg:"rgba(248,113,113,0.18)",text:"#fca5a5"},yellow:{border:"#fbbf24",bg:"rgba(251,191,36,0.18)",text:"#fde68a"},blue:{border:"#60a5fa",bg:"rgba(96,165,250,0.18)",text:"#93c5fd"},purple:{border:"#c084fc",bg:"rgba(192,132,252,0.18)",text:"#d8b4fe"}},je={border:"#475569",bg:"rgba(30,41,59,0.7)",text:"#cbd5e1"},Le={green:"#34d399",red:"#f87171",yellow:"#fbbf24",blue:"#60a5fa",purple:"#c084fc"},C=60,N=48,W=40,F=C+W,B=6,G=N+78;function ke({step:g}){return g?g.lru?i.jsx(Se,{step:g}):i.jsx(Ne,{step:g}):null}function Ne({step:g}){const{nodes:t,pointers:c,highlights:x,cycleTo:e}=g,r=new Map(x.map(h=>[h.index,h.color])),n=new Map;for(const h of c){const m=n.get(h.index)??[];m.push(h),n.set(h.index,m)}if(t.length===0)return i.jsx("div",{className:"flex h-full min-h-[260px] w-full items-center justify-center",children:i.jsx("div",{className:"flex h-16 w-48 items-center justify-center rounded-lg border-2 border-dashed border-slate-700 text-xs text-slate-600",children:"Empty list — null"})});const l=Math.ceil(t.length/B),s=Math.min(t.length,B)*F+W,p=l*G+20,o=28,a=h=>{const m=Math.floor(h/B);return{x:h%B*F+W,y:m*G+o}};return i.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-4 overflow-auto px-2",children:[i.jsxs("svg",{viewBox:`0 0 ${s+20} ${p}`,width:"100%",style:{maxWidth:`${s+20}px`,overflow:"visible"},children:[t.map((h,m)=>{const v=m===t.length-1,{x:y,y:$}=a(m),f=m%B!==B-1;if(v)return null;if(f)return i.jsxs("g",{children:[i.jsx("line",{x1:y+C,y1:$+N/2,x2:y+F,y2:$+N/2,stroke:"#475569",strokeWidth:1.6}),i.jsx("polygon",{points:`${y+F},${$+N/2} ${y+F-7},${$+N/2-4} ${y+F-7},${$+N/2+4}`,fill:"#475569"})]},`edge-${h.id}`);const b=a(m+1);return i.jsx("path",{d:`M ${y+C} ${$+N/2} L ${y+C+14} ${$+N/2} L ${y+C+14} ${$+N+28} L ${b.x-14} ${b.y+N/2} L ${b.x} ${b.y+N/2}`,fill:"none",stroke:"#475569",strokeWidth:1.6,markerEnd:""},`wrap-${h.id}`)}),e==null&&t.length>0&&(()=>{const h=t.length-1,{x:m,y:v}=a(h);return i.jsx("text",{x:m+C+22,y:v+N/2+4,textAnchor:"middle",fontSize:"10",fill:"#64748b",fontFamily:"monospace",children:"null"},"null")})(),e!=null&&t.length>0&&(()=>{const h=a(t.length-1),m=a(e),v=h.x+C/2,y=h.y+N,$=m.x+C/2,f=m.y+N,b=Math.max(y,f)+46;return i.jsxs("g",{children:[i.jsx("path",{d:`M ${v} ${y} C ${v} ${b}, ${$} ${b}, ${$} ${f}`,fill:"none",stroke:"#f59e0b",strokeWidth:1.8,strokeDasharray:"5 4"}),i.jsx("polygon",{points:`${$},${f} ${$-4},${f+8} ${$+4},${f+8}`,fill:"#f59e0b"}),i.jsxs("text",{x:(v+$)/2,y:b+12,textAnchor:"middle",fontSize:"9",fill:"#fbbf24",fontFamily:"monospace",children:["cycle → index ",e]})]})})(),t.map((h,m)=>{const{x:v,y}=a(m),$=r.get(m),f=$?we[$]:je,b=n.get(m)??[];return i.jsxs("g",{children:[m===0&&i.jsx("text",{x:v+C/2,y:y-16,textAnchor:"middle",fontSize:"9",fill:"#818cf8",fontFamily:"monospace",children:"head"}),b.map((R,L)=>i.jsx("g",{children:i.jsxs("text",{x:v+C/2,y:y-6-L*11,textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:Le[R.color??"blue"],fontFamily:"monospace",children:[R.name,"↓"]})},R.name)),i.jsx("rect",{x:v,y,width:C,height:N,rx:8,fill:f.bg,stroke:f.border,strokeWidth:$?2.2:1.5}),i.jsx("text",{x:v+C/2,y:y+N/2+5,textAnchor:"middle",fontSize:"15",fontWeight:"bold",fill:f.text,fontFamily:"sans-serif",children:h.value}),i.jsxs("text",{x:v+C/2,y:y+N+12,textAnchor:"middle",fontSize:"8",fill:"#475569",fontFamily:"monospace",children:["[",m,"]"]})]},h.id)})]}),g.description&&i.jsx("div",{className:"w-full max-w-xl rounded-lg bg-slate-800/60 px-4 py-2 text-center text-xs leading-relaxed text-indigo-300",children:g.description}),g.meta&&g.meta.length>0&&i.jsx("div",{className:"flex flex-wrap justify-center gap-1.5",children:g.meta.map(h=>i.jsx("span",{className:"rounded-full bg-slate-800/80 px-2.5 py-0.5 text-[10px] font-mono text-slate-300 ring-1 ring-slate-700/50",children:h},h))})]})}function Se({step:g}){const t=g.lru,c=Array.from({length:t.capacity});return i.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-5 overflow-auto px-2",children:[i.jsxs("div",{className:"flex w-full max-w-2xl items-center justify-between text-[10px] uppercase tracking-wider text-slate-500",children:[i.jsx("span",{className:"text-emerald-400",children:"← Most recently used"}),i.jsx("span",{className:"text-rose-400",children:"Least recently used →"})]}),i.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3",children:c.map((x,e)=>{const r=t.entries[e];if(!r)return i.jsx("div",{className:"flex h-20 w-24 flex-col items-center justify-center rounded-xl border-2 border-dashed border-slate-700 text-[10px] text-slate-600",children:"empty"},`empty-${e}`);const n=t.hitKey===r.key,d=t.evictKey===r.key?"border-rose-400 bg-rose-500/15":n?"border-emerald-400 bg-emerald-500/15":"border-slate-600 bg-slate-800/70";return i.jsxs("div",{className:`flex h-20 w-24 flex-col items-center justify-center rounded-xl border-2 ${d} transition-all`,children:[i.jsxs("span",{className:"text-[9px] font-mono uppercase tracking-wide text-slate-400",children:["key ",r.key]}),i.jsx("span",{className:"mt-0.5 text-xl font-bold text-white",children:r.value}),e===0&&i.jsx("span",{className:"mt-0.5 text-[8px] font-mono text-emerald-400",children:"MRU"}),e===t.entries.length-1&&t.entries.length===t.capacity&&e!==0&&i.jsx("span",{className:"mt-0.5 text-[8px] font-mono text-rose-400",children:"LRU"})]},r.key)})}),t.missKey!=null&&i.jsxs("div",{className:"rounded-lg bg-rose-500/10 px-3 py-1 text-xs font-mono text-rose-300 ring-1 ring-rose-500/30",children:["MISS · key ",t.missKey," not present"]}),g.description&&i.jsx("div",{className:"w-full max-w-xl rounded-lg bg-slate-800/60 px-4 py-2 text-center text-xs leading-relaxed text-indigo-300",children:g.description}),g.meta&&g.meta.length>0&&i.jsx("div",{className:"flex flex-wrap justify-center gap-1.5",children:g.meta.map(x=>i.jsx("span",{className:"rounded-full bg-slate-800/80 px-2.5 py-0.5 text-[10px] font-mono text-slate-300 ring-1 ring-slate-700/50",children:x},x))})]})}const P=(g,t)=>Math.floor(Math.random()*(t-g+1))+g;function T(g,t=1,c=99){return Array.from({length:g},()=>P(t,c))}function Re(g){switch(g){case"find-middle":return T(P(5,9)).join(",");case"palindrome":{const t=T(P(2,3));if(Math.random()<.6){const c=Math.random()<.5?[P(1,9)]:[];return[...t,...c,...[...t].reverse()].join(",")}return T(P(4,7)).join(",")}case"lru-cache":{const t=P(2,3),c=[1,2,3,4,5],x=[];for(let e=0;e{const w=Re(t);e(w),m(w)};return i.jsxs("aside",{className:"w-full space-y-4 xl:w-80 xl:shrink-0",children:[i.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[i.jsx("h3",{className:"mb-2 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Input"}),i.jsx("label",{className:"text-[11px] text-slate-500",children:c.inputLabel}),i.jsx("textarea",{value:x,onChange:w=>e(w.target.value),rows:3,className:"mt-1 w-full resize-none rounded-xl bg-slate-950/70 px-3 py-2 text-xs font-mono text-slate-200 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50"}),i.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:c.helper}),i.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[i.jsx("button",{onClick:()=>m(),className:"rounded-xl bg-indigo-500/20 px-3 py-2 text-xs font-semibold text-indigo-300 ring-1 ring-indigo-500/40 hover:bg-indigo-500/30",children:"Build Steps"}),i.jsxs("button",{onClick:L,className:"inline-flex items-center justify-center gap-1 rounded-xl bg-slate-800/70 px-3 py-2 text-xs font-semibold text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70",children:[i.jsx(ne,{size:13})," Random"]})]})]}),i.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[i.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[i.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Playback"}),i.jsxs("span",{className:"font-mono text-xs text-indigo-300",children:[Math.min(n+1,r.length)," / ",r.length]})]}),i.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-slate-800",children:i.jsx("div",{className:"h-full rounded-full bg-indigo-400 transition-all",style:{width:`${d}%`}})}),i.jsxs("div",{className:"mt-3 rounded-xl border border-slate-700/40 bg-slate-950/40 p-3",children:[i.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[i.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Animation Speed"}),i.jsxs("span",{className:"font-mono text-[10px] text-indigo-300",children:[(p/1e3).toFixed(2),"s"]})]}),i.jsx("input",{type:"range",min:120,max:3e3,step:20,value:3120-p,onChange:w=>o(3120-Number(w.target.value)),className:"w-full accent-indigo-400","aria-label":"Animation speed"}),i.jsxs("div",{className:"mt-1 flex justify-between text-[9px] uppercase tracking-wide text-slate-600",children:[i.jsx("span",{children:"Slow"}),i.jsx("span",{children:"Fast"})]})]}),i.jsxs("div",{className:"mt-3 grid grid-cols-3 gap-2",children:[i.jsxs("button",{onClick:$,disabled:!R,className:"inline-flex items-center justify-center gap-1 rounded-xl bg-slate-800/70 px-2 py-2 text-xs text-slate-300 ring-1 ring-slate-700/50 disabled:opacity-30",children:[i.jsx(se,{size:13})," Back"]}),i.jsx("button",{onClick:v,className:`inline-flex items-center justify-center gap-1 rounded-xl px-2 py-2 text-xs font-semibold ring-1 ${s?"bg-amber-500/15 text-amber-300 ring-amber-500/30":"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30"}`,children:s?i.jsxs(i.Fragment,{children:[i.jsx(ie,{size:13})," Pause"]}):i.jsxs(i.Fragment,{children:[i.jsx(re,{size:13})," Play"]})}),i.jsxs("button",{onClick:y,disabled:!b,className:"inline-flex items-center justify-center gap-1 rounded-xl bg-slate-800/70 px-2 py-2 text-xs text-slate-300 ring-1 ring-slate-700/50 disabled:opacity-30",children:["Next ",i.jsx(oe,{size:13})]})]}),i.jsxs("button",{onClick:f,className:"mt-2 inline-flex w-full items-center justify-center gap-1 rounded-xl bg-slate-800/70 px-3 py-2 text-xs text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70",children:[i.jsx(le,{size:13})," Reset"]}),i.jsx("p",{className:"mt-3 min-h-10 text-xs leading-relaxed text-slate-300",children:l?.description})]}),i.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[i.jsxs("button",{onClick:()=>h(!a),className:`inline-flex w-full items-center justify-center gap-2 rounded-xl px-3 py-2 text-xs font-semibold ring-1 ${a?"bg-indigo-500/15 text-indigo-300 ring-indigo-500/30":"bg-slate-800/70 text-slate-400 ring-slate-700/40"}`,children:[a?i.jsx(ae,{size:14}):i.jsx(de,{size:14}),a?"Sound On":"Sound Off"]}),i.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:c.tags.map(w=>i.jsx("span",{className:"rounded-full bg-violet-500/10 px-2 py-0.5 text-[10px] font-medium text-violet-300 ring-1 ring-violet-500/20",children:w},w))}),i.jsx("p",{className:"mt-2 text-[10px] font-mono text-slate-500",children:c.complexity})]})]})}function Ke({problem:g}){const t=be(g),{info:c}=t;return i.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-auto p-4 md:p-6 xl:flex-row",children:[i.jsxs("main",{className:"order-last flex min-h-[520px] flex-1 flex-col gap-4 xl:order-first",children:[i.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-5 backdrop-blur-sm",children:[i.jsxs(Q,{to:"/algorithms/linked-list",className:"mb-3 inline-flex items-center gap-1.5 text-xs font-medium text-slate-400 transition-colors hover:text-indigo-300",children:[i.jsx(ce,{size:13})," Linked List Algorithms"]}),i.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-indigo-300",children:"Linked List Algorithms"}),i.jsx("h2",{className:"mt-1 text-xl font-bold text-white",children:c.title}),i.jsx("p",{className:"mt-1 text-sm text-slate-400",children:c.subtitle})]}),i.jsx("section",{className:"flex flex-1 items-center justify-center rounded-2xl border border-slate-700/50 bg-slate-900/40 p-4 backdrop-blur-sm",children:i.jsx(ke,{step:t.currentStep})}),i.jsx(te,{pseudocode:c.pseudocode,activeLine:t.currentStep?.codeLine??null})]}),i.jsx(Ae,{hook:t,problem:g})]})}export{Ke as default};
diff --git a/docs/assets/LinkedListAlgorithmsPage-Bf0XShdT.js b/docs/assets/LinkedListAlgorithmsPage-rBTSWR3w.js
similarity index 95%
rename from docs/assets/LinkedListAlgorithmsPage-Bf0XShdT.js
rename to docs/assets/LinkedListAlgorithmsPage-rBTSWR3w.js
index a5809c6..ac2159b 100644
--- a/docs/assets/LinkedListAlgorithmsPage-Bf0XShdT.js
+++ b/docs/assets/LinkedListAlgorithmsPage-rBTSWR3w.js
@@ -1 +1 @@
-import{c as a,j as e,L as r,N as c,G as d,a as x,S as m,b as h,A as p}from"./index-lLadk08S.js";import{P as g}from"./linkedListAlgo-0_WYfSZm.js";import{A as f}from"./arrow-left-C4-GmPRq.js";import{R as u}from"./rotate-ccw-DMjSdzg2.js";const k=[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]],w=a("repeat",k);const y=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],b=a("scissors",y);const j=[["path",{d:"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z",key:"15892j"}],["path",{d:"M3 20V4",key:"1ptbpl"}]],N=a("skip-back",j);const v=[["circle",{cx:"19",cy:"5",r:"2",key:"mhkx31"}],["circle",{cx:"5",cy:"19",r:"2",key:"v8kfzx"}],["path",{d:"M5 17A12 12 0 0 1 17 5",key:"1okkup"}]],L=a("spline",v),C={"find-middle":{gradient:"from-sky-500 to-cyan-500",shadowColor:"shadow-sky-500/20",icon:h},"reverse-list":{gradient:"from-rose-500 to-pink-500",shadowColor:"shadow-rose-500/20",icon:u},"add-two-numbers":{gradient:"from-blue-500 to-indigo-500",shadowColor:"shadow-blue-500/20",icon:m},"reverse-k-group":{gradient:"from-purple-500 to-fuchsia-500",shadowColor:"shadow-purple-500/20",icon:N},palindrome:{gradient:"from-fuchsia-500 to-pink-500",shadowColor:"shadow-fuchsia-500/20",icon:L},"lru-cache":{gradient:"from-emerald-500 to-teal-500",shadowColor:"shadow-emerald-500/20",icon:x},segregate:{gradient:"from-lime-500 to-green-500",shadowColor:"shadow-lime-500/20",icon:b},"detect-cycle":{gradient:"from-amber-500 to-orange-500",shadowColor:"shadow-amber-500/20",icon:w},"sort-list":{gradient:"from-indigo-500 to-violet-500",shadowColor:"shadow-indigo-500/20",icon:d}},R=["find-middle","reverse-list","add-two-numbers","reverse-k-group","palindrome","lru-cache","segregate","detect-cycle","sort-list"];function z(){return e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[e.jsxs("section",{className:"flex flex-col items-center justify-center px-6 pt-12 pb-8 text-center",children:[e.jsxs(r,{to:"/algorithms",className:"mb-4 inline-flex items-center gap-1.5 rounded-full bg-slate-800/60 px-3 py-1.5 text-xs font-medium text-slate-400 ring-1 ring-slate-700/50 transition-colors hover:text-indigo-300",children:[e.jsx(f,{size:13})," Back to Algorithms"]}),e.jsxs("div",{className:"mb-4 inline-flex items-center gap-2 rounded-full bg-indigo-500/10 px-4 py-1.5 ring-1 ring-indigo-500/20",children:[e.jsx(c,{size:14,className:"text-indigo-400"}),e.jsx("span",{className:"text-xs font-medium text-indigo-300",children:"Linked List Algorithms"})]}),e.jsxs("h2",{className:"text-3xl font-extrabold tracking-tight text-white",children:["Linked ",e.jsx("span",{className:"bg-gradient-to-r from-indigo-400 to-fuchsia-400 bg-clip-text text-transparent",children:"List"})]}),e.jsx("p",{className:"mt-3 max-w-2xl mx-auto text-sm text-slate-400 leading-relaxed",children:"Two-pointer tricks, Floyd's cycle detection, merge sort, and an LRU cache — each with step playback, a speed slider, and audio feedback."})]}),e.jsx("section",{className:"px-6 pb-12",children:e.jsx("div",{className:"mx-auto grid max-w-6xl grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3",children:R.map(t=>{const s=g[t],{gradient:l,shadowColor:o,icon:n}=C[t];return e.jsxs(r,{to:`/algorithms/linked-list/${t}`,className:`group relative flex flex-col rounded-2xl border border-slate-700/40 bg-slate-900/50 p-6 shadow-lg backdrop-blur-sm transition-all duration-300 hover:scale-[1.01] hover:border-slate-600/60 hover:bg-slate-900/70 ${o}`,children:[e.jsx("div",{className:`mb-3 flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br ${l} shadow-lg ${o}`,children:e.jsx(n,{size:20,className:"text-white"})}),e.jsx("h4",{className:"text-base font-bold text-white",children:s.title}),e.jsx("p",{className:"text-[10px] text-slate-500 italic",children:s.subtitle}),e.jsx("p",{className:"mt-2 flex-1 text-xs leading-relaxed text-slate-400",children:s.helper}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:s.tags.map(i=>e.jsx("span",{className:"rounded-full bg-slate-800/60 px-2 py-0.5 text-[10px] font-medium text-slate-400",children:i},i))}),e.jsxs("div",{className:"mt-3 flex items-center gap-1 text-xs font-medium text-indigo-400 opacity-0 transition-opacity group-hover:opacity-100",children:["Explore ",e.jsx(p,{size:12})]})]},t)})})})]})}export{z as default};
+import{c as a,j as e,L as r,N as c,G as d,a as x,S as m,b as h,A as p}from"./index-CB1-0H6I.js";import{P as g}from"./linkedListAlgo-0_WYfSZm.js";import{A as f}from"./arrow-left-eH0A06ps.js";import{R as u}from"./rotate-ccw-CDlWXRsI.js";const k=[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]],w=a("repeat",k);const y=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],b=a("scissors",y);const j=[["path",{d:"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z",key:"15892j"}],["path",{d:"M3 20V4",key:"1ptbpl"}]],N=a("skip-back",j);const v=[["circle",{cx:"19",cy:"5",r:"2",key:"mhkx31"}],["circle",{cx:"5",cy:"19",r:"2",key:"v8kfzx"}],["path",{d:"M5 17A12 12 0 0 1 17 5",key:"1okkup"}]],L=a("spline",v),C={"find-middle":{gradient:"from-sky-500 to-cyan-500",shadowColor:"shadow-sky-500/20",icon:h},"reverse-list":{gradient:"from-rose-500 to-pink-500",shadowColor:"shadow-rose-500/20",icon:u},"add-two-numbers":{gradient:"from-blue-500 to-indigo-500",shadowColor:"shadow-blue-500/20",icon:m},"reverse-k-group":{gradient:"from-purple-500 to-fuchsia-500",shadowColor:"shadow-purple-500/20",icon:N},palindrome:{gradient:"from-fuchsia-500 to-pink-500",shadowColor:"shadow-fuchsia-500/20",icon:L},"lru-cache":{gradient:"from-emerald-500 to-teal-500",shadowColor:"shadow-emerald-500/20",icon:x},segregate:{gradient:"from-lime-500 to-green-500",shadowColor:"shadow-lime-500/20",icon:b},"detect-cycle":{gradient:"from-amber-500 to-orange-500",shadowColor:"shadow-amber-500/20",icon:w},"sort-list":{gradient:"from-indigo-500 to-violet-500",shadowColor:"shadow-indigo-500/20",icon:d}},R=["find-middle","reverse-list","add-two-numbers","reverse-k-group","palindrome","lru-cache","segregate","detect-cycle","sort-list"];function z(){return e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[e.jsxs("section",{className:"flex flex-col items-center justify-center px-6 pt-12 pb-8 text-center",children:[e.jsxs(r,{to:"/algorithms",className:"mb-4 inline-flex items-center gap-1.5 rounded-full bg-slate-800/60 px-3 py-1.5 text-xs font-medium text-slate-400 ring-1 ring-slate-700/50 transition-colors hover:text-indigo-300",children:[e.jsx(f,{size:13})," Back to Algorithms"]}),e.jsxs("div",{className:"mb-4 inline-flex items-center gap-2 rounded-full bg-indigo-500/10 px-4 py-1.5 ring-1 ring-indigo-500/20",children:[e.jsx(c,{size:14,className:"text-indigo-400"}),e.jsx("span",{className:"text-xs font-medium text-indigo-300",children:"Linked List Algorithms"})]}),e.jsxs("h2",{className:"text-3xl font-extrabold tracking-tight text-white",children:["Linked ",e.jsx("span",{className:"bg-gradient-to-r from-indigo-400 to-fuchsia-400 bg-clip-text text-transparent",children:"List"})]}),e.jsx("p",{className:"mt-3 max-w-2xl mx-auto text-sm text-slate-400 leading-relaxed",children:"Two-pointer tricks, Floyd's cycle detection, merge sort, and an LRU cache — each with step playback, a speed slider, and audio feedback."})]}),e.jsx("section",{className:"px-6 pb-12",children:e.jsx("div",{className:"mx-auto grid max-w-6xl grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3",children:R.map(t=>{const s=g[t],{gradient:l,shadowColor:o,icon:n}=C[t];return e.jsxs(r,{to:`/algorithms/linked-list/${t}`,className:`group relative flex flex-col rounded-2xl border border-slate-700/40 bg-slate-900/50 p-6 shadow-lg backdrop-blur-sm transition-all duration-300 hover:scale-[1.01] hover:border-slate-600/60 hover:bg-slate-900/70 ${o}`,children:[e.jsx("div",{className:`mb-3 flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br ${l} shadow-lg ${o}`,children:e.jsx(n,{size:20,className:"text-white"})}),e.jsx("h4",{className:"text-base font-bold text-white",children:s.title}),e.jsx("p",{className:"text-[10px] text-slate-500 italic",children:s.subtitle}),e.jsx("p",{className:"mt-2 flex-1 text-xs leading-relaxed text-slate-400",children:s.helper}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:s.tags.map(i=>e.jsx("span",{className:"rounded-full bg-slate-800/60 px-2 py-0.5 text-[10px] font-medium text-slate-400",children:i},i))}),e.jsxs("div",{className:"mt-3 flex items-center gap-1 text-xs font-medium text-indigo-400 opacity-0 transition-opacity group-hover:opacity-100",children:["Explore ",e.jsx(p,{size:12})]})]},t)})})})]})}export{z as default};
diff --git a/docs/assets/LinkedListPage-CUYUVQCV.js b/docs/assets/LinkedListPage-CsPqMWtn.js
similarity index 97%
rename from docs/assets/LinkedListPage-CUYUVQCV.js
rename to docs/assets/LinkedListPage-CsPqMWtn.js
index aa09cca..d6b443f 100644
--- a/docs/assets/LinkedListPage-CUYUVQCV.js
+++ b/docs/assets/LinkedListPage-CsPqMWtn.js
@@ -1 +1 @@
-import{r as a,j as e,e as de}from"./index-lLadk08S.js";import{u as ce}from"./useDSSound-CPhif-bj.js";import{P as K}from"./plus-NICMDkhr.js";import{T as xe}from"./trash-2-veeiSg5V.js";import{R as ue}from"./rotate-ccw-DMjSdzg2.js";import{S as he}from"./shuffle-ADbBlETg.js";import{V as ge,a as pe}from"./volume-x-CjLNPeax.js";import{C as me,a as fe}from"./chevron-right-Cp_zyb7b.js";import"./audioContext-NbgqvQGz.js";let U=1;const be=[3,7,1,9].map(p=>({id:U++,value:p}));function je(){const[p,m]=a.useState(be),[c,H]=a.useState("singly"),[h,y]=a.useState([]),[x,r]=a.useState(-1),[S,M]=a.useState(""),[V,X]=a.useState(""),[G,P]=a.useState([]),[j,A]=a.useState(400),[n,C]=a.useState(!1),$=a.useRef(null),R=a.useRef(j),v=a.useRef(!1),{soundEnabled:o,toggleSound:F,playInsert:N,playDelete:I,playTraverse:k,playFound:T,playNotFound:D}=ce(),B=a.useRef(N),Y=a.useRef(I),q=a.useRef(k);a.useEffect(()=>{B.current=N},[N]),a.useEffect(()=>{Y.current=I},[I]),a.useEffect(()=>{q.current=k},[k]),a.useEffect(()=>{R.current=j},[j]),a.useEffect(()=>{if(!v.current||h.length===0)return;v.current=!1,$.current&&clearTimeout($.current),C(!0);let t=0;const s=()=>{if(t>=h.length-1){C(!1);return}t++,r(t);const i=h[t];i&&(i.highlightColor==="green"?B.current():i.highlightColor==="red"?Y.current():i.highlightColor==="yellow"&&q.current(t,h.length)),$.current=setTimeout(s,R.current)};$.current=setTimeout(s,R.current)},[h]);const J=x>=0&&h[x]?h[x].nodes:p,l=x>=0?h[x]:null,E=c==="singly"?"singly linked list":c==="doubly"?"doubly linked list":"circular linked list",O=t=>P(s=>[t,...s].slice(0,20)),Q=a.useCallback(t=>{H(t),y([]),r(-1),C(!1),P(s=>[`Switch to ${t}`,...s].slice(0,20))},[]),w=(t,s,i=[],d=null,u=null)=>({description:t,nodes:s,highlightIds:new Set(i),highlightColor:d,newNodeId:u}),Z=a.useCallback(t=>{const s={id:U++,value:t};m(i=>{const d=[s,...i],u=[w(`Prepend ${t}: creating new node at head in the ${E}...`,i,[],null,s.id),w(`${t} inserted at position 0. Updating ${c==="doubly"?"prev/next pointers":c==="circular"?"tail.next back to head":"head pointer"}.`,d,[s.id],"green",s.id)];return y(u),r(0),v.current=!0,N(),O(`Prepend ${t}`),d})},[N,c,E]),ee=a.useCallback(t=>{const s={id:U++,value:t};m(i=>{const d=[...i,s],u=[];for(let f=0;f{const i={id:U++,value:t};m(d=>{if(s<0||s>d.length)return d;const u=[...d.slice(0,s),i,...d.slice(s)],f=[];for(let W=0;W{m(s=>{if(t<0||t>=s.length)return s;const i=s[t],d=[];for(let f=0;f<=t;f++)d.push(w(`Traversing to index ${t}: at node ${s[f].value}...`,s,[s[f].id],"yellow"));d.push(w(`Deleting node ${i.value} at index ${t}: re-linking ${c==="doubly"?"prev and next pointers":c==="circular"?"cycle pointers":"next pointer"}.`,s,[i.id],"red"));const u=s.filter((f,W)=>W!==t);return d.push(w(`Node ${i.value} removed. List size: ${u.length}`,u,[],null)),y(d),r(0),v.current=!0,I(),O(`Delete [${t}] → ${i.value}`),u})},[I,c]),le=a.useCallback(t=>{m(s=>{const i=[];let d=-1;for(let u=0;u{m([]),y([]),r(-1),O("Clear list")},[]),ae=a.useCallback(()=>{const t=Math.floor(Math.random()*4)+4,s=Array.from({length:t},()=>({id:U++,value:Math.floor(Math.random()*90)+1}));m(s),y([]),r(-1),O("Random list")},[]),ie=a.useCallback(()=>{r(t=>Math.min(t+1,h.length-1))},[h.length]),re=a.useCallback(()=>{r(t=>Math.max(t-1,0))},[]),oe=a.useCallback(()=>{if(n){C(!1),$.current&&clearTimeout($.current);return}if(x>=h.length-1)return;C(!0);let t=x;const s=()=>{if(t>=h.length-1){C(!1);return}t++,r(t),$.current=setTimeout(s,j)};$.current=setTimeout(s,j)},[n,x,h.length,j]);return{nodes:p,variant:c,changeVariant:Q,displayNodes:J,steps:h,stepIndex:x,currentStep:l,inputValue:S,setInputValue:M,indexValue:V,setIndexValue:X,history:G,speed:j,setSpeed:A,isPlaying:n,prepend:Z,append:ee,insertAt:te,deleteAt:se,search:le,clear:ne,generateRandom:ae,nextStep:ie,prevStep:re,autoPlay:oe,canGoNext:x0,soundEnabled:o,toggleSound:F}}const ye={green:{border:"#34d399",bg:"rgba(52,211,153,0.15)",text:"#6ee7b7"},red:{border:"#f87171",bg:"rgba(248,113,113,0.15)",text:"#fca5a5"},yellow:{border:"#fbbf24",bg:"rgba(251,191,36,0.15)",text:"#fde68a"},blue:{border:"#60a5fa",bg:"rgba(96,165,250,0.15)",text:"#93c5fd"}},Ne={border:"#475569",bg:"rgba(30,41,59,0.7)",text:"#cbd5e1"},b=64,g=48,L=36,z=b+L,_=5;function ve({nodes:p,currentStep:m,variant:c}){const H=m?.highlightIds??new Set,h=m?.highlightColor??null,y=[];for(let j=0;j{const n=A*r+20,C=A===y.length-1,$=A*_;return e.jsx("g",{children:j.map((R,v)=>{const o=v*z+L/2,F=H.has(R.id),N=F&&h?ye[h]:Ne,I=$+v,k=I===0,T=I===p.length-1,D=v===j.length-1;return e.jsxs("g",{children:[k&&e.jsx("text",{x:o+b/2,y:n-8,textAnchor:"middle",fontSize:"10",fill:"#818cf8",fontFamily:"monospace",children:"head"}),e.jsx("rect",{x:o,y:n,width:b,height:g,rx:8,fill:N.bg,stroke:N.border,strokeWidth:F?2:1.5}),e.jsx("text",{x:o+b*.38,y:n+g/2+5,textAnchor:"middle",fontSize:"15",fontWeight:"bold",fill:N.text,fontFamily:"sans-serif",children:R.value}),e.jsx("line",{x1:o+b*.62,y1:n+4,x2:o+b*.62,y2:n+g-4,stroke:N.border,strokeWidth:1,opacity:.5}),e.jsx("text",{x:o+b*.82,y:n+g/2+4,textAnchor:"middle",fontSize:"9",fill:"#64748b",fontFamily:"monospace",children:T?c==="circular"?"↺":"null":"→"}),c==="doubly"&&e.jsx("text",{x:o+b*.2,y:n+g-7,textAnchor:"middle",fontSize:"8",fill:"#93c5fd",fontFamily:"monospace",children:k?"null":"←"}),!T&&!D&&e.jsxs("g",{children:[e.jsx("line",{x1:o+b,y1:n+g/2,x2:o+z,y2:n+g/2,stroke:"#475569",strokeWidth:1.5}),e.jsx("polygon",{points:`${o+z},${n+g/2} ${o+z-6},${n+g/2-4} ${o+z-6},${n+g/2+4}`,fill:"#475569"})]}),c==="doubly"&&!T&&!D&&e.jsxs("g",{opacity:.75,children:[e.jsx("line",{x1:o+z,y1:n+g/2+12,x2:o+b,y2:n+g/2+12,stroke:"#60a5fa",strokeWidth:1.2}),e.jsx("polygon",{points:`${o+b},${n+g/2+12} ${o+b+6},${n+g/2+8} ${o+b+6},${n+g/2+16}`,fill:"#60a5fa"})]}),D&&!C&&e.jsxs("g",{children:[e.jsx("path",{d:`M ${o+b} ${n+g/2} L ${o+b+14} ${n+g/2} L ${o+b+14} ${n+g+20} L ${L/2} ${n+g+20} L ${L/2} ${n+r}`,fill:"none",stroke:"#475569",strokeWidth:1.5}),e.jsx("polygon",{points:`${L/2},${n+r} ${L/2-4},${n+r-6} ${L/2+4},${n+r-6}`,fill:"#475569"})]})]},R.id)})},A)}),c==="circular"&&y.length>0&&p.length>1&&e.jsxs("g",{children:[e.jsx("path",{d:`M ${G+b} ${P+g/2} C ${x+40} ${S+16}, -20 ${S+16}, ${L/2+b/2} 78`,fill:"none",stroke:"#f59e0b",strokeDasharray:"5 5",strokeWidth:1.5}),e.jsx("text",{x:x/2,y:S-4,textAnchor:"middle",fontSize:"10",fill:"#fbbf24",fontFamily:"monospace",children:"tail.next → head"})]})]}),m?.description&&e.jsx("div",{className:"w-full max-w-sm rounded-lg bg-slate-800/60 px-4 py-2 text-center text-xs text-indigo-300 leading-relaxed",children:m.description}),e.jsxs("div",{className:"text-xs text-slate-500 font-mono",children:[c," list · length = ",p.length]})]})}const $e=[{label:"Slow",value:700},{label:"Med",value:350},{label:"Fast",value:120}];function ke({hook:p}){const{nodes:m,variant:c,changeVariant:H,steps:h,stepIndex:y,inputValue:x,setInputValue:r,indexValue:S,setIndexValue:M,history:V,speed:X,setSpeed:G,isPlaying:P,prepend:j,append:A,insertAt:n,deleteAt:C,search:$,clear:R,generateRandom:v,nextStep:o,prevStep:F,canGoNext:N,canGoPrev:I,soundEnabled:k,toggleSound:T}=p,D=()=>{const l=parseInt(x);isNaN(l)||(j(l),r(""))},B=()=>{const l=parseInt(x);isNaN(l)||(A(l),r(""))},Y=()=>{const l=parseInt(x),E=parseInt(S);!isNaN(l)&&!isNaN(E)&&(n(l,E),r(""))},q=()=>{const l=parseInt(S);isNaN(l)||C(l)},J=()=>{const l=parseInt(x);isNaN(l)||$(l)};return e.jsxs("div",{className:"flex flex-col gap-4 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-sm font-bold text-indigo-300 mb-1",children:"Linked List"}),e.jsxs("p",{className:"text-xs text-slate-400 leading-relaxed",children:["A chain of ",e.jsx("strong",{className:"text-slate-300",children:"nodes"}),". Switch between singly, doubly, and circular pointer layouts while keeping the same operations."]}),e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:["Prepend O(1)","Append O(n)","Insert O(n)","Delete O(n)","Search O(n)"].map(l=>e.jsx("span",{className:"rounded-full bg-violet-500/10 px-2 py-0.5 text-[10px] font-medium text-violet-400 ring-1 ring-violet-500/20",children:l},l))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"List Type"}),e.jsx("div",{className:"grid grid-cols-3 gap-1",children:["singly","doubly","circular"].map(l=>e.jsx("button",{onClick:()=>H(l),className:`rounded-lg px-2 py-2 text-[10px] font-semibold capitalize transition-all ${c===l?"bg-indigo-500/20 text-indigo-300 ring-1 ring-indigo-500/40":"bg-slate-800/60 text-slate-400 hover:bg-slate-700/60"}`,children:l},l))}),e.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Doubly lists show backward pointers; circular lists connect the tail back to the head."})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Operations"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 mb-3",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-[10px] text-slate-500 uppercase tracking-wider",children:"Value"}),e.jsx("input",{type:"number",value:x,onChange:l=>r(l.target.value),placeholder:"e.g. 42",className:"w-full rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-slate-200 placeholder-slate-600 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50 transition-all"})]}),e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-[10px] text-slate-500 uppercase tracking-wider",children:"Index"}),e.jsx("input",{type:"number",value:S,onChange:l=>M(l.target.value),placeholder:"e.g. 0",min:"0",className:"w-full rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-slate-200 placeholder-slate-600 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50 transition-all"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("button",{onClick:D,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-gradient-to-r from-emerald-500/80 to-green-500/80 px-3 py-2 text-xs font-semibold text-white shadow-lg shadow-emerald-500/15 transition-all hover:brightness-110 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Prepend"]}),e.jsxs("button",{onClick:B,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-indigo-500/20 px-3 py-2 text-xs font-semibold text-indigo-300 ring-1 ring-indigo-500/30 transition-all hover:bg-indigo-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Append"]}),e.jsxs("button",{onClick:Y,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-violet-500/20 px-3 py-2 text-xs font-semibold text-violet-300 ring-1 ring-violet-500/30 transition-all hover:bg-violet-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Insert at"]}),e.jsxs("button",{onClick:q,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-gradient-to-r from-rose-500/80 to-pink-500/80 px-3 py-2 text-xs font-semibold text-white shadow-lg shadow-rose-500/15 transition-all hover:brightness-110 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(xe,{size:13})," Delete at"]}),e.jsxs("button",{onClick:J,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-amber-500/20 px-3 py-2 text-xs font-semibold text-amber-300 ring-1 ring-amber-500/30 transition-all hover:bg-amber-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(de,{size:13})," Search"]}),e.jsxs("button",{onClick:R,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(ue,{size:13})," Clear"]})]}),e.jsxs("button",{onClick:v,className:"mt-2 w-full flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300",children:[e.jsx(he,{size:12})," Random List"]}),e.jsxs("button",{onClick:()=>T(!k),className:`mt-2 w-full flex items-center justify-center gap-1.5 rounded-lg px-3 py-2 text-xs font-medium transition-all ${k?"bg-indigo-500/15 text-indigo-300 ring-1 ring-indigo-500/30":"bg-slate-800/60 text-slate-400 hover:bg-slate-700/60"}`,children:[k?e.jsx(ge,{size:12}):e.jsx(pe,{size:12}),k?"Sound On":"Sound Off"]})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Animation Speed"}),e.jsx("div",{className:"flex gap-1",children:$e.map(l=>e.jsx("button",{onClick:()=>G(l.value),className:`flex-1 rounded-lg px-2 py-1.5 text-xs font-medium transition-all duration-200 ${X===l.value?"bg-violet-500/20 text-violet-300 ring-1 ring-violet-500/40":"bg-slate-800/50 text-slate-400 hover:bg-slate-700/50 hover:text-slate-300"}`,children:l.label},l.value))})]}),h.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Step Through"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:F,disabled:!I||P,className:"flex-1 flex items-center justify-center gap-1 rounded-lg bg-slate-800/60 px-3 py-2.5 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:[e.jsx(me,{size:16})," Prev"]}),e.jsxs("button",{onClick:o,disabled:!N||P,className:"flex-1 flex items-center justify-center gap-1 rounded-lg bg-slate-800/60 px-3 py-2.5 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:["Next ",e.jsx(fe,{size:16})]})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-slate-500",children:"Step"}),e.jsxs("span",{className:"text-sm font-mono font-semibold text-indigo-400",children:[Math.max(0,y+1)," / ",h.length]})]})]}),V.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"History"}),e.jsx("div",{className:"max-h-36 overflow-y-auto space-y-1",children:V.map((l,E)=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"font-mono text-slate-600 w-4 text-right",children:E+1}),e.jsx("span",{className:l.startsWith("Prepend")||l.startsWith("Append")||l.startsWith("Insert")?"text-emerald-400":l.startsWith("Delete")?"text-rose-400":l.startsWith("Search")?"text-amber-400":"text-slate-400",children:l})]},E))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Legend"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-emerald-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Insert / found"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-rose-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Delete"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-amber-400"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Traversal / search"})]})]})]})]})}function Ee(){const p=je();return e.jsxs("div",{className:"flex flex-1 flex-col md:flex-row gap-4 md:gap-6 overflow-auto p-4 md:p-6",children:[e.jsx("div",{className:"order-last md:order-first flex md:flex-1 flex-col items-center justify-center gap-3 min-h-[40vh] md:min-h-0 max-h-[55vh] md:max-h-none overflow-auto",children:e.jsx(ve,{nodes:p.displayNodes,currentStep:p.currentStep,variant:p.variant})}),e.jsx(ke,{hook:p})]})}export{Ee as default};
+import{r as a,j as e,e as de}from"./index-CB1-0H6I.js";import{u as ce}from"./useDSSound-BJYLYD0f.js";import{P as K}from"./plus-B3nnW8Th.js";import{T as xe}from"./trash-2-C4vvSjjZ.js";import{R as ue}from"./rotate-ccw-CDlWXRsI.js";import{S as he}from"./shuffle-DZnyoAGL.js";import{V as ge,a as pe}from"./volume-x-CKT6TOtL.js";import{C as me,a as fe}from"./chevron-right-ChVmoNtO.js";import"./audioContext-NbgqvQGz.js";let U=1;const be=[3,7,1,9].map(p=>({id:U++,value:p}));function je(){const[p,m]=a.useState(be),[c,H]=a.useState("singly"),[h,y]=a.useState([]),[x,r]=a.useState(-1),[S,M]=a.useState(""),[V,X]=a.useState(""),[G,P]=a.useState([]),[j,A]=a.useState(400),[n,C]=a.useState(!1),$=a.useRef(null),R=a.useRef(j),v=a.useRef(!1),{soundEnabled:o,toggleSound:F,playInsert:N,playDelete:I,playTraverse:k,playFound:T,playNotFound:D}=ce(),B=a.useRef(N),Y=a.useRef(I),q=a.useRef(k);a.useEffect(()=>{B.current=N},[N]),a.useEffect(()=>{Y.current=I},[I]),a.useEffect(()=>{q.current=k},[k]),a.useEffect(()=>{R.current=j},[j]),a.useEffect(()=>{if(!v.current||h.length===0)return;v.current=!1,$.current&&clearTimeout($.current),C(!0);let t=0;const s=()=>{if(t>=h.length-1){C(!1);return}t++,r(t);const i=h[t];i&&(i.highlightColor==="green"?B.current():i.highlightColor==="red"?Y.current():i.highlightColor==="yellow"&&q.current(t,h.length)),$.current=setTimeout(s,R.current)};$.current=setTimeout(s,R.current)},[h]);const J=x>=0&&h[x]?h[x].nodes:p,l=x>=0?h[x]:null,E=c==="singly"?"singly linked list":c==="doubly"?"doubly linked list":"circular linked list",O=t=>P(s=>[t,...s].slice(0,20)),Q=a.useCallback(t=>{H(t),y([]),r(-1),C(!1),P(s=>[`Switch to ${t}`,...s].slice(0,20))},[]),w=(t,s,i=[],d=null,u=null)=>({description:t,nodes:s,highlightIds:new Set(i),highlightColor:d,newNodeId:u}),Z=a.useCallback(t=>{const s={id:U++,value:t};m(i=>{const d=[s,...i],u=[w(`Prepend ${t}: creating new node at head in the ${E}...`,i,[],null,s.id),w(`${t} inserted at position 0. Updating ${c==="doubly"?"prev/next pointers":c==="circular"?"tail.next back to head":"head pointer"}.`,d,[s.id],"green",s.id)];return y(u),r(0),v.current=!0,N(),O(`Prepend ${t}`),d})},[N,c,E]),ee=a.useCallback(t=>{const s={id:U++,value:t};m(i=>{const d=[...i,s],u=[];for(let f=0;f{const i={id:U++,value:t};m(d=>{if(s<0||s>d.length)return d;const u=[...d.slice(0,s),i,...d.slice(s)],f=[];for(let W=0;W{m(s=>{if(t<0||t>=s.length)return s;const i=s[t],d=[];for(let f=0;f<=t;f++)d.push(w(`Traversing to index ${t}: at node ${s[f].value}...`,s,[s[f].id],"yellow"));d.push(w(`Deleting node ${i.value} at index ${t}: re-linking ${c==="doubly"?"prev and next pointers":c==="circular"?"cycle pointers":"next pointer"}.`,s,[i.id],"red"));const u=s.filter((f,W)=>W!==t);return d.push(w(`Node ${i.value} removed. List size: ${u.length}`,u,[],null)),y(d),r(0),v.current=!0,I(),O(`Delete [${t}] → ${i.value}`),u})},[I,c]),le=a.useCallback(t=>{m(s=>{const i=[];let d=-1;for(let u=0;u{m([]),y([]),r(-1),O("Clear list")},[]),ae=a.useCallback(()=>{const t=Math.floor(Math.random()*4)+4,s=Array.from({length:t},()=>({id:U++,value:Math.floor(Math.random()*90)+1}));m(s),y([]),r(-1),O("Random list")},[]),ie=a.useCallback(()=>{r(t=>Math.min(t+1,h.length-1))},[h.length]),re=a.useCallback(()=>{r(t=>Math.max(t-1,0))},[]),oe=a.useCallback(()=>{if(n){C(!1),$.current&&clearTimeout($.current);return}if(x>=h.length-1)return;C(!0);let t=x;const s=()=>{if(t>=h.length-1){C(!1);return}t++,r(t),$.current=setTimeout(s,j)};$.current=setTimeout(s,j)},[n,x,h.length,j]);return{nodes:p,variant:c,changeVariant:Q,displayNodes:J,steps:h,stepIndex:x,currentStep:l,inputValue:S,setInputValue:M,indexValue:V,setIndexValue:X,history:G,speed:j,setSpeed:A,isPlaying:n,prepend:Z,append:ee,insertAt:te,deleteAt:se,search:le,clear:ne,generateRandom:ae,nextStep:ie,prevStep:re,autoPlay:oe,canGoNext:x0,soundEnabled:o,toggleSound:F}}const ye={green:{border:"#34d399",bg:"rgba(52,211,153,0.15)",text:"#6ee7b7"},red:{border:"#f87171",bg:"rgba(248,113,113,0.15)",text:"#fca5a5"},yellow:{border:"#fbbf24",bg:"rgba(251,191,36,0.15)",text:"#fde68a"},blue:{border:"#60a5fa",bg:"rgba(96,165,250,0.15)",text:"#93c5fd"}},Ne={border:"#475569",bg:"rgba(30,41,59,0.7)",text:"#cbd5e1"},b=64,g=48,L=36,z=b+L,_=5;function ve({nodes:p,currentStep:m,variant:c}){const H=m?.highlightIds??new Set,h=m?.highlightColor??null,y=[];for(let j=0;j{const n=A*r+20,C=A===y.length-1,$=A*_;return e.jsx("g",{children:j.map((R,v)=>{const o=v*z+L/2,F=H.has(R.id),N=F&&h?ye[h]:Ne,I=$+v,k=I===0,T=I===p.length-1,D=v===j.length-1;return e.jsxs("g",{children:[k&&e.jsx("text",{x:o+b/2,y:n-8,textAnchor:"middle",fontSize:"10",fill:"#818cf8",fontFamily:"monospace",children:"head"}),e.jsx("rect",{x:o,y:n,width:b,height:g,rx:8,fill:N.bg,stroke:N.border,strokeWidth:F?2:1.5}),e.jsx("text",{x:o+b*.38,y:n+g/2+5,textAnchor:"middle",fontSize:"15",fontWeight:"bold",fill:N.text,fontFamily:"sans-serif",children:R.value}),e.jsx("line",{x1:o+b*.62,y1:n+4,x2:o+b*.62,y2:n+g-4,stroke:N.border,strokeWidth:1,opacity:.5}),e.jsx("text",{x:o+b*.82,y:n+g/2+4,textAnchor:"middle",fontSize:"9",fill:"#64748b",fontFamily:"monospace",children:T?c==="circular"?"↺":"null":"→"}),c==="doubly"&&e.jsx("text",{x:o+b*.2,y:n+g-7,textAnchor:"middle",fontSize:"8",fill:"#93c5fd",fontFamily:"monospace",children:k?"null":"←"}),!T&&!D&&e.jsxs("g",{children:[e.jsx("line",{x1:o+b,y1:n+g/2,x2:o+z,y2:n+g/2,stroke:"#475569",strokeWidth:1.5}),e.jsx("polygon",{points:`${o+z},${n+g/2} ${o+z-6},${n+g/2-4} ${o+z-6},${n+g/2+4}`,fill:"#475569"})]}),c==="doubly"&&!T&&!D&&e.jsxs("g",{opacity:.75,children:[e.jsx("line",{x1:o+z,y1:n+g/2+12,x2:o+b,y2:n+g/2+12,stroke:"#60a5fa",strokeWidth:1.2}),e.jsx("polygon",{points:`${o+b},${n+g/2+12} ${o+b+6},${n+g/2+8} ${o+b+6},${n+g/2+16}`,fill:"#60a5fa"})]}),D&&!C&&e.jsxs("g",{children:[e.jsx("path",{d:`M ${o+b} ${n+g/2} L ${o+b+14} ${n+g/2} L ${o+b+14} ${n+g+20} L ${L/2} ${n+g+20} L ${L/2} ${n+r}`,fill:"none",stroke:"#475569",strokeWidth:1.5}),e.jsx("polygon",{points:`${L/2},${n+r} ${L/2-4},${n+r-6} ${L/2+4},${n+r-6}`,fill:"#475569"})]})]},R.id)})},A)}),c==="circular"&&y.length>0&&p.length>1&&e.jsxs("g",{children:[e.jsx("path",{d:`M ${G+b} ${P+g/2} C ${x+40} ${S+16}, -20 ${S+16}, ${L/2+b/2} 78`,fill:"none",stroke:"#f59e0b",strokeDasharray:"5 5",strokeWidth:1.5}),e.jsx("text",{x:x/2,y:S-4,textAnchor:"middle",fontSize:"10",fill:"#fbbf24",fontFamily:"monospace",children:"tail.next → head"})]})]}),m?.description&&e.jsx("div",{className:"w-full max-w-sm rounded-lg bg-slate-800/60 px-4 py-2 text-center text-xs text-indigo-300 leading-relaxed",children:m.description}),e.jsxs("div",{className:"text-xs text-slate-500 font-mono",children:[c," list · length = ",p.length]})]})}const $e=[{label:"Slow",value:700},{label:"Med",value:350},{label:"Fast",value:120}];function ke({hook:p}){const{nodes:m,variant:c,changeVariant:H,steps:h,stepIndex:y,inputValue:x,setInputValue:r,indexValue:S,setIndexValue:M,history:V,speed:X,setSpeed:G,isPlaying:P,prepend:j,append:A,insertAt:n,deleteAt:C,search:$,clear:R,generateRandom:v,nextStep:o,prevStep:F,canGoNext:N,canGoPrev:I,soundEnabled:k,toggleSound:T}=p,D=()=>{const l=parseInt(x);isNaN(l)||(j(l),r(""))},B=()=>{const l=parseInt(x);isNaN(l)||(A(l),r(""))},Y=()=>{const l=parseInt(x),E=parseInt(S);!isNaN(l)&&!isNaN(E)&&(n(l,E),r(""))},q=()=>{const l=parseInt(S);isNaN(l)||C(l)},J=()=>{const l=parseInt(x);isNaN(l)||$(l)};return e.jsxs("div",{className:"flex flex-col gap-4 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-sm font-bold text-indigo-300 mb-1",children:"Linked List"}),e.jsxs("p",{className:"text-xs text-slate-400 leading-relaxed",children:["A chain of ",e.jsx("strong",{className:"text-slate-300",children:"nodes"}),". Switch between singly, doubly, and circular pointer layouts while keeping the same operations."]}),e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:["Prepend O(1)","Append O(n)","Insert O(n)","Delete O(n)","Search O(n)"].map(l=>e.jsx("span",{className:"rounded-full bg-violet-500/10 px-2 py-0.5 text-[10px] font-medium text-violet-400 ring-1 ring-violet-500/20",children:l},l))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"List Type"}),e.jsx("div",{className:"grid grid-cols-3 gap-1",children:["singly","doubly","circular"].map(l=>e.jsx("button",{onClick:()=>H(l),className:`rounded-lg px-2 py-2 text-[10px] font-semibold capitalize transition-all ${c===l?"bg-indigo-500/20 text-indigo-300 ring-1 ring-indigo-500/40":"bg-slate-800/60 text-slate-400 hover:bg-slate-700/60"}`,children:l},l))}),e.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Doubly lists show backward pointers; circular lists connect the tail back to the head."})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Operations"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 mb-3",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-[10px] text-slate-500 uppercase tracking-wider",children:"Value"}),e.jsx("input",{type:"number",value:x,onChange:l=>r(l.target.value),placeholder:"e.g. 42",className:"w-full rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-slate-200 placeholder-slate-600 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50 transition-all"})]}),e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-[10px] text-slate-500 uppercase tracking-wider",children:"Index"}),e.jsx("input",{type:"number",value:S,onChange:l=>M(l.target.value),placeholder:"e.g. 0",min:"0",className:"w-full rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-slate-200 placeholder-slate-600 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50 transition-all"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("button",{onClick:D,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-gradient-to-r from-emerald-500/80 to-green-500/80 px-3 py-2 text-xs font-semibold text-white shadow-lg shadow-emerald-500/15 transition-all hover:brightness-110 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Prepend"]}),e.jsxs("button",{onClick:B,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-indigo-500/20 px-3 py-2 text-xs font-semibold text-indigo-300 ring-1 ring-indigo-500/30 transition-all hover:bg-indigo-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Append"]}),e.jsxs("button",{onClick:Y,disabled:m.length>=12,className:"flex items-center justify-center gap-1.5 rounded-lg bg-violet-500/20 px-3 py-2 text-xs font-semibold text-violet-300 ring-1 ring-violet-500/30 transition-all hover:bg-violet-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(K,{size:13})," Insert at"]}),e.jsxs("button",{onClick:q,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-gradient-to-r from-rose-500/80 to-pink-500/80 px-3 py-2 text-xs font-semibold text-white shadow-lg shadow-rose-500/15 transition-all hover:brightness-110 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(xe,{size:13})," Delete at"]}),e.jsxs("button",{onClick:J,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-amber-500/20 px-3 py-2 text-xs font-semibold text-amber-300 ring-1 ring-amber-500/30 transition-all hover:bg-amber-500/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(de,{size:13})," Search"]}),e.jsxs("button",{onClick:R,disabled:m.length===0,className:"flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 disabled:opacity-40 disabled:cursor-not-allowed",children:[e.jsx(ue,{size:13})," Clear"]})]}),e.jsxs("button",{onClick:v,className:"mt-2 w-full flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300",children:[e.jsx(he,{size:12})," Random List"]}),e.jsxs("button",{onClick:()=>T(!k),className:`mt-2 w-full flex items-center justify-center gap-1.5 rounded-lg px-3 py-2 text-xs font-medium transition-all ${k?"bg-indigo-500/15 text-indigo-300 ring-1 ring-indigo-500/30":"bg-slate-800/60 text-slate-400 hover:bg-slate-700/60"}`,children:[k?e.jsx(ge,{size:12}):e.jsx(pe,{size:12}),k?"Sound On":"Sound Off"]})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Animation Speed"}),e.jsx("div",{className:"flex gap-1",children:$e.map(l=>e.jsx("button",{onClick:()=>G(l.value),className:`flex-1 rounded-lg px-2 py-1.5 text-xs font-medium transition-all duration-200 ${X===l.value?"bg-violet-500/20 text-violet-300 ring-1 ring-violet-500/40":"bg-slate-800/50 text-slate-400 hover:bg-slate-700/50 hover:text-slate-300"}`,children:l.label},l.value))})]}),h.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Step Through"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:F,disabled:!I||P,className:"flex-1 flex items-center justify-center gap-1 rounded-lg bg-slate-800/60 px-3 py-2.5 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:[e.jsx(me,{size:16})," Prev"]}),e.jsxs("button",{onClick:o,disabled:!N||P,className:"flex-1 flex items-center justify-center gap-1 rounded-lg bg-slate-800/60 px-3 py-2.5 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:["Next ",e.jsx(fe,{size:16})]})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-slate-500",children:"Step"}),e.jsxs("span",{className:"text-sm font-mono font-semibold text-indigo-400",children:[Math.max(0,y+1)," / ",h.length]})]})]}),V.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"History"}),e.jsx("div",{className:"max-h-36 overflow-y-auto space-y-1",children:V.map((l,E)=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"font-mono text-slate-600 w-4 text-right",children:E+1}),e.jsx("span",{className:l.startsWith("Prepend")||l.startsWith("Append")||l.startsWith("Insert")?"text-emerald-400":l.startsWith("Delete")?"text-rose-400":l.startsWith("Search")?"text-amber-400":"text-slate-400",children:l})]},E))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Legend"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-emerald-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Insert / found"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-rose-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Delete"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-5 rounded-sm bg-amber-400"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Traversal / search"})]})]})]})]})}function Ee(){const p=je();return e.jsxs("div",{className:"flex flex-1 flex-col md:flex-row gap-4 md:gap-6 overflow-auto p-4 md:p-6",children:[e.jsx("div",{className:"order-last md:order-first flex md:flex-1 flex-col items-center justify-center gap-3 min-h-[40vh] md:min-h-0 max-h-[55vh] md:max-h-none overflow-auto",children:e.jsx(ve,{nodes:p.displayNodes,currentStep:p.currentStep,variant:p.variant})}),e.jsx(ke,{hook:p})]})}export{Ee as default};
diff --git a/docs/assets/MahjongGamePage-CweJKrxc.js b/docs/assets/MahjongGamePage-Bdpv27zp.js
similarity index 99%
rename from docs/assets/MahjongGamePage-CweJKrxc.js
rename to docs/assets/MahjongGamePage-Bdpv27zp.js
index c070a85..cd79ad6 100644
--- a/docs/assets/MahjongGamePage-CweJKrxc.js
+++ b/docs/assets/MahjongGamePage-Bdpv27zp.js
@@ -1,4 +1,4 @@
-import{c as U,j as e,d as ve,e as ke,E as we,r as c,A as de}from"./index-lLadk08S.js";import{S as Te}from"./shuffle-ADbBlETg.js";import{R as K}from"./rotate-ccw-DMjSdzg2.js";import{V as Q,a as ee}from"./volume-x-CjLNPeax.js";import{E as Ce}from"./eye-off-Pd9-Vzxg.js";import{C as Se,a as $e}from"./chevron-right-Cp_zyb7b.js";import{P as We}from"./pause-CU46RSeo.js";import{P as Pe}from"./play-b2ZiatJ3.js";import{T as Y}from"./trophy-BeLgwZ5q.js";import{g as _e}from"./audioContext-NbgqvQGz.js";import{L as Me,F as Ae}from"./lightbulb-CbLvQr23.js";import{S as Re,B as ze}from"./skip-forward-S_F054t1.js";import{T as He}from"./timer-Baa2rAz8.js";import{Z as Ee}from"./zap-Y8cI0o9G.js";const Be=[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]],Ie=U("arrow-left-right",Be);const Oe=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],V=U("circle-check-big",Oe);const Fe=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],re=U("circle-x",Fe);const Ge=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],pe=U("users",Ge);const Ve=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Le=U("wrench",Ve),he={B:"Bamboo",C:"Characters",D:"Dots"},Z={B:"#4ade80",C:"#f87171",D:"#60a5fa"},De={sandbox:{label:"Sandbox",description:"Build any hand and check it freely"},guided:{label:"Guided",description:"Learn to spot pairs & melds step-by-step"},challenge:{label:"Challenge",description:"Speed rounds — Win or Not Win?"},"two-player":{label:"2 Player",description:"Take turns building hands"}},P=14,E=4,O=[1,2,3,4,5,6,7,8,9],B=["B","C","D"],J={title:"Mahjong Hand Solver",subtitle:"Backtracking-based winning hand validator",what:"Build a 14-tile Mahjong hand and check if it forms a valid winning combination — 4 melds (pongs or chows) plus 1 pair. Watch the backtracking solver try every possibility step-by-step.",skills:["Backtracking","Constraint Validation","Combinatorics","Pattern Matching"]},xe={sm:"w-9 h-12 sm:w-10 sm:h-14",md:"w-11 h-14 sm:w-12 sm:h-16 md:w-14 md:h-[4.35rem]",lg:"w-12 h-16 sm:w-14 sm:h-[4.6rem] md:w-16 md:h-20"};function I({code:t,index:s,count:n,size:a="md",selected:l=!1,disabled:r=!1,faded:m=!1,interactive:k=!1,removable:p=!1,placeholder:T=!1,onClick:i}){if(T||!t)return e.jsx("div",{className:`${xe[a]} relative rounded-xl border border-dashed border-emerald-900/30 bg-emerald-950/20 shadow-inner`,children:e.jsx("div",{className:"absolute inset-1 rounded-lg border border-emerald-900/20"})});const o=t[0],x=Number(t[1]),u=Z[o],g=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"absolute inset-0 rounded-xl bg-gradient-to-br from-stone-50 via-amber-50 to-stone-200"}),e.jsx("div",{className:"absolute inset-x-1 top-1 h-1 rounded-full bg-white/80"}),e.jsx("div",{className:"absolute inset-1 rounded-lg border border-amber-950/10 bg-[radial-gradient(circle_at_30%_15%,rgba(255,255,255,0.8),transparent_38%),linear-gradient(135deg,rgba(255,255,255,0.35),transparent)]"}),e.jsx("div",{className:"absolute inset-y-1 right-0.5 w-1 rounded-r-lg bg-emerald-900/25"}),e.jsx("div",{className:"relative z-10 flex h-full flex-col items-center justify-center px-1 text-center",children:e.jsx(Ue,{suit:o,value:x,color:u,size:a})}),e.jsx("div",{className:"absolute left-1 top-1 text-[8px] font-black leading-none text-slate-900/35",children:x}),e.jsx("div",{className:"absolute bottom-1 right-1 rotate-180 text-[8px] font-black leading-none text-slate-900/35",children:x}),typeof s=="number"&&s>=0&&e.jsx("span",{className:"absolute -bottom-1 left-1/2 z-20 -translate-x-1/2 rounded-full bg-slate-950/80 px-1 text-[7px] font-mono text-slate-400 ring-1 ring-slate-700/50",children:s+1}),typeof n=="number"&&n>0&&e.jsx("span",{className:"absolute -right-1.5 -top-1.5 z-20 flex h-5 w-5 items-center justify-center rounded-full bg-emerald-950 text-[10px] font-bold text-emerald-200 ring-1 ring-emerald-500/50",children:n}),p&&e.jsx("span",{className:"absolute inset-0 z-30 flex items-center justify-center rounded-xl bg-red-950/70 text-sm font-black text-white opacity-0 transition-opacity group-hover:opacity-100",children:"x"})]}),b=`
+import{c as U,j as e,d as ve,e as ke,E as we,r as c,A as de}from"./index-CB1-0H6I.js";import{S as Te}from"./shuffle-DZnyoAGL.js";import{R as K}from"./rotate-ccw-CDlWXRsI.js";import{V as Q,a as ee}from"./volume-x-CKT6TOtL.js";import{E as Ce}from"./eye-off-DMbwz3T2.js";import{C as Se,a as $e}from"./chevron-right-ChVmoNtO.js";import{P as We}from"./pause-DgUWKqjY.js";import{P as Pe}from"./play-SZ6Nqtz8.js";import{T as Y}from"./trophy-DE-EF49m.js";import{g as _e}from"./audioContext-NbgqvQGz.js";import{L as Me,F as Ae}from"./lightbulb-Bmtk7V6i.js";import{S as Re,B as ze}from"./skip-forward-DWTiDap8.js";import{T as He}from"./timer-rgbBx2U0.js";import{Z as Ee}from"./zap-C3nU9HZ_.js";const Be=[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]],Ie=U("arrow-left-right",Be);const Oe=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],V=U("circle-check-big",Oe);const Fe=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],re=U("circle-x",Fe);const Ge=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],pe=U("users",Ge);const Ve=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Le=U("wrench",Ve),he={B:"Bamboo",C:"Characters",D:"Dots"},Z={B:"#4ade80",C:"#f87171",D:"#60a5fa"},De={sandbox:{label:"Sandbox",description:"Build any hand and check it freely"},guided:{label:"Guided",description:"Learn to spot pairs & melds step-by-step"},challenge:{label:"Challenge",description:"Speed rounds — Win or Not Win?"},"two-player":{label:"2 Player",description:"Take turns building hands"}},P=14,E=4,O=[1,2,3,4,5,6,7,8,9],B=["B","C","D"],J={title:"Mahjong Hand Solver",subtitle:"Backtracking-based winning hand validator",what:"Build a 14-tile Mahjong hand and check if it forms a valid winning combination — 4 melds (pongs or chows) plus 1 pair. Watch the backtracking solver try every possibility step-by-step.",skills:["Backtracking","Constraint Validation","Combinatorics","Pattern Matching"]},xe={sm:"w-9 h-12 sm:w-10 sm:h-14",md:"w-11 h-14 sm:w-12 sm:h-16 md:w-14 md:h-[4.35rem]",lg:"w-12 h-16 sm:w-14 sm:h-[4.6rem] md:w-16 md:h-20"};function I({code:t,index:s,count:n,size:a="md",selected:l=!1,disabled:r=!1,faded:m=!1,interactive:k=!1,removable:p=!1,placeholder:T=!1,onClick:i}){if(T||!t)return e.jsx("div",{className:`${xe[a]} relative rounded-xl border border-dashed border-emerald-900/30 bg-emerald-950/20 shadow-inner`,children:e.jsx("div",{className:"absolute inset-1 rounded-lg border border-emerald-900/20"})});const o=t[0],x=Number(t[1]),u=Z[o],g=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"absolute inset-0 rounded-xl bg-gradient-to-br from-stone-50 via-amber-50 to-stone-200"}),e.jsx("div",{className:"absolute inset-x-1 top-1 h-1 rounded-full bg-white/80"}),e.jsx("div",{className:"absolute inset-1 rounded-lg border border-amber-950/10 bg-[radial-gradient(circle_at_30%_15%,rgba(255,255,255,0.8),transparent_38%),linear-gradient(135deg,rgba(255,255,255,0.35),transparent)]"}),e.jsx("div",{className:"absolute inset-y-1 right-0.5 w-1 rounded-r-lg bg-emerald-900/25"}),e.jsx("div",{className:"relative z-10 flex h-full flex-col items-center justify-center px-1 text-center",children:e.jsx(Ue,{suit:o,value:x,color:u,size:a})}),e.jsx("div",{className:"absolute left-1 top-1 text-[8px] font-black leading-none text-slate-900/35",children:x}),e.jsx("div",{className:"absolute bottom-1 right-1 rotate-180 text-[8px] font-black leading-none text-slate-900/35",children:x}),typeof s=="number"&&s>=0&&e.jsx("span",{className:"absolute -bottom-1 left-1/2 z-20 -translate-x-1/2 rounded-full bg-slate-950/80 px-1 text-[7px] font-mono text-slate-400 ring-1 ring-slate-700/50",children:s+1}),typeof n=="number"&&n>0&&e.jsx("span",{className:"absolute -right-1.5 -top-1.5 z-20 flex h-5 w-5 items-center justify-center rounded-full bg-emerald-950 text-[10px] font-bold text-emerald-200 ring-1 ring-emerald-500/50",children:n}),p&&e.jsx("span",{className:"absolute inset-0 z-30 flex items-center justify-center rounded-xl bg-red-950/70 text-sm font-black text-white opacity-0 transition-opacity group-hover:opacity-100",children:"x"})]}),b=`
group relative ${xe[a]} shrink-0 overflow-visible rounded-xl border transition-all duration-200
shadow-[0_10px_18px_rgba(0,0,0,0.35),inset_0_-3px_0_rgba(0,0,0,0.18)]
${l?"z-10 -translate-y-2 rotate-[-1deg] border-amber-300 ring-2 ring-amber-300/50":"border-amber-950/25"}
diff --git a/docs/assets/QueuePage-DUKmQFK6.js b/docs/assets/QueuePage-CBnrjsK1.js
similarity index 97%
rename from docs/assets/QueuePage-DUKmQFK6.js
rename to docs/assets/QueuePage-CBnrjsK1.js
index 80ae522..bd73810 100644
--- a/docs/assets/QueuePage-DUKmQFK6.js
+++ b/docs/assets/QueuePage-CBnrjsK1.js
@@ -1,4 +1,4 @@
-import{r as l,j as e,E as W}from"./index-lLadk08S.js";import{u as _}from"./useDSSound-CPhif-bj.js";import{P as K}from"./plus-NICMDkhr.js";import{T as U}from"./trash-2-veeiSg5V.js";import{R as X}from"./rotate-ccw-DMjSdzg2.js";import{S as B}from"./shuffle-ADbBlETg.js";import{V as J,a as Y}from"./volume-x-CjLNPeax.js";import{C as Z,a as ee}from"./chevron-right-Cp_zyb7b.js";import"./audioContext-NbgqvQGz.js";let I=1;const te=[{id:I++,value:5},{id:I++,value:12},{id:I++,value:8}];function se(){const[r,d]=l.useState(te),[n,m]=l.useState([]),[i,o]=l.useState(-1),[x,y]=l.useState(""),[p,b]=l.useState([]),[h,P]=l.useState(400),[w,j]=l.useState(!1),u=l.useRef(null),k=l.useRef(h),v=l.useRef(!1),{soundEnabled:$,toggleSound:z,playInsert:g,playDelete:N,playAccess:C,playTraverse:q}=_(),a=l.useRef(()=>{});l.useEffect(()=>{k.current=h},[h]),l.useEffect(()=>{if(!v.current||n.length===0)return;v.current=!1,u.current&&clearTimeout(u.current),j(!0);let t=0;const s=()=>{if(t>=n.length-1){j(!1);return}t++,o(t),a.current(t,n),u.current=setTimeout(s,k.current)};u.current=setTimeout(s,k.current)},[n]);const f=l.useCallback((t,s)=>{const c=s[t];c&&(c.highlightColor==="green"?g():c.highlightColor==="red"?N():c.highlightColor==="yellow"&&q(t,s.length))},[g,N,q]);l.useEffect(()=>{a.current=f},[f]);const Q=i>=0&&n[i]?n[i].queue:r,F=i>=0?n[i]:null,S=t=>b(s=>[t,...s].slice(0,20)),T=l.useCallback(t=>{const s={id:I++,value:t};d(c=>{const E=[...c,s],L=[{description:`Enqueuing ${t} at the rear of the queue...`,queue:c,highlightIndex:null,highlightColor:null},{description:`${t} added to the rear. Queue size: ${E.length}`,queue:E,highlightIndex:E.length-1,highlightColor:"green"}];return m(L),o(0),v.current=!0,g(),S(`Enqueue ${t}`),E})},[g]),O=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[0],c=[{description:`Dequeue: checking front element ${s.value}...`,queue:t,highlightIndex:0,highlightColor:"yellow"},{description:`Removing ${s.value} from the front.`,queue:t,highlightIndex:0,highlightColor:"red"},{description:`${s.value} removed. Queue size: ${t.length-1}`,queue:t.slice(1),highlightIndex:null,highlightColor:null}];return m(c),o(0),v.current=!0,N(),S(`Dequeue → ${s.value}`),t.slice(1)})},[N]),D=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[0],c=[{description:"Peek front: reading without removing.",queue:t,highlightIndex:0,highlightColor:"yellow"},{description:`Front element is ${s.value}.`,queue:t,highlightIndex:0,highlightColor:"yellow"}];return m(c),o(0),v.current=!0,C(),S(`Peek → ${s.value}`),t})},[C]),M=l.useCallback(()=>{d([]),m([]),o(-1),S("Clear queue")},[]),V=l.useCallback(()=>{const t=Math.floor(Math.random()*4)+3,s=Array.from({length:t},()=>({id:I++,value:Math.floor(Math.random()*90)+1}));d(s),m([]),o(-1),S("Random queue")},[]),H=l.useCallback(()=>{o(t=>{const s=Math.min(t+1,n.length-1);return f(s,n),s})},[n,f]),A=l.useCallback(()=>{o(t=>Math.max(t-1,0))},[]),G=l.useCallback(()=>{if(w){j(!1),u.current&&clearTimeout(u.current);return}j(!0);let t=i;const s=()=>{if(t>=n.length-1){j(!1);return}t++,o(t),f(t,n),u.current=setTimeout(s,h)};u.current=setTimeout(s,h)},[w,i,n,h,f]);return{queue:r,displayQueue:Q,steps:n,stepIndex:i,currentStep:F,inputValue:x,setInputValue:y,history:p,speed:h,setSpeed:P,isPlaying:w,enqueue:T,dequeue:O,peekFront:D,clear:M,generateRandom:V,nextStep:H,prevStep:A,autoPlay:G,soundEnabled:$,toggleSound:z,canGoNext:i0}}const le={green:"border-emerald-400 bg-emerald-500/20 text-emerald-300",red:"border-rose-400 bg-rose-500/20 text-rose-300",yellow:"border-amber-400 bg-amber-500/20 text-amber-300"},R=8;function ae({queue:r,currentStep:d}){const n=r.slice(0,R),m=d?.highlightIndex??null,i=d?.highlightColor??null;return e.jsxs("div",{className:"flex flex-col items-center justify-center w-full h-full min-h-[300px] gap-6 px-4",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3 w-full",children:[e.jsx("div",{className:"flex items-center gap-1.5 w-full justify-center",children:r.length>0&&e.jsxs("div",{className:"flex items-end gap-1.5 flex-wrap justify-center",children:[n.map((o,x)=>{const y=x===m,p=x===0,b=x===r.length-1&&x{});l.useEffect(()=>{k.current=h},[h]),l.useEffect(()=>{if(!v.current||n.length===0)return;v.current=!1,u.current&&clearTimeout(u.current),j(!0);let t=0;const s=()=>{if(t>=n.length-1){j(!1);return}t++,o(t),a.current(t,n),u.current=setTimeout(s,k.current)};u.current=setTimeout(s,k.current)},[n]);const f=l.useCallback((t,s)=>{const c=s[t];c&&(c.highlightColor==="green"?g():c.highlightColor==="red"?N():c.highlightColor==="yellow"&&q(t,s.length))},[g,N,q]);l.useEffect(()=>{a.current=f},[f]);const Q=i>=0&&n[i]?n[i].queue:r,F=i>=0?n[i]:null,S=t=>b(s=>[t,...s].slice(0,20)),T=l.useCallback(t=>{const s={id:I++,value:t};d(c=>{const E=[...c,s],L=[{description:`Enqueuing ${t} at the rear of the queue...`,queue:c,highlightIndex:null,highlightColor:null},{description:`${t} added to the rear. Queue size: ${E.length}`,queue:E,highlightIndex:E.length-1,highlightColor:"green"}];return m(L),o(0),v.current=!0,g(),S(`Enqueue ${t}`),E})},[g]),O=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[0],c=[{description:`Dequeue: checking front element ${s.value}...`,queue:t,highlightIndex:0,highlightColor:"yellow"},{description:`Removing ${s.value} from the front.`,queue:t,highlightIndex:0,highlightColor:"red"},{description:`${s.value} removed. Queue size: ${t.length-1}`,queue:t.slice(1),highlightIndex:null,highlightColor:null}];return m(c),o(0),v.current=!0,N(),S(`Dequeue → ${s.value}`),t.slice(1)})},[N]),D=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[0],c=[{description:"Peek front: reading without removing.",queue:t,highlightIndex:0,highlightColor:"yellow"},{description:`Front element is ${s.value}.`,queue:t,highlightIndex:0,highlightColor:"yellow"}];return m(c),o(0),v.current=!0,C(),S(`Peek → ${s.value}`),t})},[C]),M=l.useCallback(()=>{d([]),m([]),o(-1),S("Clear queue")},[]),V=l.useCallback(()=>{const t=Math.floor(Math.random()*4)+3,s=Array.from({length:t},()=>({id:I++,value:Math.floor(Math.random()*90)+1}));d(s),m([]),o(-1),S("Random queue")},[]),H=l.useCallback(()=>{o(t=>{const s=Math.min(t+1,n.length-1);return f(s,n),s})},[n,f]),A=l.useCallback(()=>{o(t=>Math.max(t-1,0))},[]),G=l.useCallback(()=>{if(w){j(!1),u.current&&clearTimeout(u.current);return}j(!0);let t=i;const s=()=>{if(t>=n.length-1){j(!1);return}t++,o(t),f(t,n),u.current=setTimeout(s,h)};u.current=setTimeout(s,h)},[w,i,n,h,f]);return{queue:r,displayQueue:Q,steps:n,stepIndex:i,currentStep:F,inputValue:x,setInputValue:y,history:p,speed:h,setSpeed:P,isPlaying:w,enqueue:T,dequeue:O,peekFront:D,clear:M,generateRandom:V,nextStep:H,prevStep:A,autoPlay:G,soundEnabled:$,toggleSound:z,canGoNext:i0}}const le={green:"border-emerald-400 bg-emerald-500/20 text-emerald-300",red:"border-rose-400 bg-rose-500/20 text-rose-300",yellow:"border-amber-400 bg-amber-500/20 text-amber-300"},R=8;function ae({queue:r,currentStep:d}){const n=r.slice(0,R),m=d?.highlightIndex??null,i=d?.highlightColor??null;return e.jsxs("div",{className:"flex flex-col items-center justify-center w-full h-full min-h-[300px] gap-6 px-4",children:[e.jsxs("div",{className:"flex flex-col items-center gap-3 w-full",children:[e.jsx("div",{className:"flex items-center gap-1.5 w-full justify-center",children:r.length>0&&e.jsxs("div",{className:"flex items-end gap-1.5 flex-wrap justify-center",children:[n.map((o,x)=>{const y=x===m,p=x===0,b=x===r.length-1&&x{r(h=>({x:he(h.x+i),y:h.y+C}))},[]),x=o.useCallback(()=>{r(be)},[]),f=o.useCallback(i=>{i.currentTarget.setPointerCapture(i.pointerId),S({pointerId:i.pointerId,startX:i.clientX,startY:i.clientY,rotation:l})},[l]),v=o.useCallback(i=>{if(!c||c.pointerId!==i.pointerId)return;const C=i.clientX-c.startX,h=i.clientY-c.startY;r({x:he(c.rotation.x-h*.35),y:c.rotation.y+C*.35})},[c]),p=o.useCallback(i=>{!c||c.pointerId!==i.pointerId||(i.currentTarget.hasPointerCapture(i.pointerId)&&i.currentTarget.releasePointerCapture(i.pointerId),S(null))},[c]);return e.jsxs("div",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 md:p-5 backdrop-blur-sm",children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-bold text-white",children:"Cube State"}),e.jsx("p",{className:"text-[11px] text-slate-500",children:"Drag the 3D cube to rotate the view"})]}),e.jsx("span",{className:`rounded-full px-2.5 py-1 text-[10px] font-semibold ring-1 ${s?"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30":"bg-amber-500/15 text-amber-300 ring-amber-500/30"}`,children:s?"Solved":"Scrambled"})]}),e.jsx("div",{className:"flex min-h-[290px] touch-none cursor-grab items-center justify-center overflow-hidden rounded-xl bg-slate-950/40 ring-1 ring-slate-800/60 active:cursor-grabbing",role:"img","aria-label":"Interactive 3D Rubik's Cube view. Drag to rotate the cube.",onPointerDown:f,onPointerMove:v,onPointerUp:p,onPointerCancel:p,children:e.jsxs("div",{className:"relative h-56 w-56",style:{perspective:"900px"},children:[e.jsx("div",{className:`absolute left-1/2 top-1/2 h-36 w-36 ${c?"":"transition-transform duration-500"}`,style:{transformStyle:"preserve-3d",transform:`translate(-50%, -50%) rotateX(${l.x}deg) rotateY(${l.y}deg) rotateZ(0deg)`},children:Qe.map(i=>e.jsxs("div",{className:"absolute left-0 top-0 grid h-36 w-36 grid-cols-3 gap-1 rounded-xl border border-slate-950/70 bg-slate-950/90 p-1.5 shadow-2xl",style:{transform:Ke[i],backfaceVisibility:"hidden"},"aria-label":`${Ze[i]} face`,children:[t[i].map((C,h)=>e.jsx("div",{className:"rounded-md border border-slate-950/50 shadow-inner transition-colors duration-300",style:{backgroundColor:He[C]}},`${i}-${h}`)),e.jsx("span",{className:"pointer-events-none absolute left-2 top-1 text-[10px] font-black text-slate-950/50",children:i})]},i))}),e.jsx("div",{className:"absolute bottom-2 left-1/2 h-8 w-40 -translate-x-1/2 rounded-full bg-black/30 blur-xl"})]})}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-[10px] text-slate-500",children:["View angle: X ",Math.round(l.x),"deg / Y ",Math.round(l.y),"deg"]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(W,{label:"Up",onClick:()=>d(-ee,0)}),e.jsx(W,{label:"Down",onClick:()=>d(ee,0)}),e.jsx(W,{label:"Left",onClick:()=>d(0,-ee)}),e.jsx(W,{label:"Right",onClick:()=>d(0,ee)}),e.jsx(W,{label:"Reset View",onClick:x})]})]}),e.jsxs("div",{className:"mt-5",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Quick Turns"}),e.jsx("span",{className:"text-[10px] text-slate-600",children:"Clockwise / inverse / double"})]}),e.jsx("div",{className:"grid grid-cols-6 gap-1.5 sm:grid-cols-9",children:ce.map(i=>e.jsx("button",{onClick:()=>a(i),className:"rounded-lg bg-slate-800/70 px-2 py-1.5 text-[11px] font-semibold text-slate-300 ring-1 ring-slate-700/40 transition-all hover:bg-indigo-500/15 hover:text-indigo-300 hover:ring-indigo-500/30",children:i},i))})]})]})}function he(t){return Math.max(-75,Math.min(75,t))}function W({label:t,onClick:s}){return e.jsx("button",{onClick:s,className:"rounded-md bg-slate-800/70 px-2 py-1 text-[10px] font-semibold text-slate-400 ring-1 ring-slate-700/40 transition-all hover:bg-indigo-500/15 hover:text-indigo-300 hover:ring-indigo-500/30",children:t})}const et=o.memo(Je),tt={U:"white",D:"yellow",F:"green",B:"blue",L:"orange",R:"red"},de=["U","D","F","B","L","R"],st={U:[["F",[0,1,2]],["R",[0,1,2]],["B",[0,1,2]],["L",[0,1,2]]],D:[["F",[6,7,8]],["L",[6,7,8]],["B",[6,7,8]],["R",[6,7,8]]],F:[["U",[6,7,8]],["R",[0,3,6]],["D",[2,1,0]],["L",[8,5,2]]],B:[["U",[2,1,0]],["L",[0,3,6]],["D",[6,7,8]],["R",[8,5,2]]],L:[["U",[0,3,6]],["F",[0,3,6]],["D",[0,3,6]],["B",[8,5,2]]],R:[["U",[8,5,2]],["B",[0,3,6]],["D",[8,5,2]],["F",[8,5,2]]]};function U(){return de.reduce((t,s)=>(t[s]=Array(9).fill(tt[s]),t),{})}function ke(t){return de.reduce((s,a)=>(s[a]=[...t[a]],s),{})}function te(t){return de.every(s=>t[s].every(a=>a===t[s][4]))}function Z(t,s){return s.reduce((a,l)=>se(a,l),t)}function se(t,s){const a=s[0],l=s.endsWith("2")?2:s.endsWith("'")?3:1;let r=ke(t);for(let c=0;c{const r=ct(l,s.length);return{move:a,phase:r,description:`${r}: apply ${a} as part of the inverse solve sequence.`}})}function at(t,s){const a=ke(t);a[s]=ot(t[s]);const l=st[s],r=l.map(([c,S])=>S.map(d=>t[c][d]));return l.forEach(([c,S],d)=>{const x=r[(d+l.length-1)%l.length];S.forEach((f,v)=>{a[c][f]=x[v]})}),a}function ot(t){return[t[6],t[3],t[0],t[7],t[4],t[1],t[8],t[5],t[2]]}function rt(t){const s=[];for(const a of t){const l=s[s.length-1];if(!l||l[0]!==a[0]){s.push(a);continue}const r=(ve(l)+ve(a))%4;s.pop(),r!==0&&s.push(it(a[0],r))}return s}function ve(t){return t.endsWith("2")?2:t.endsWith("'")?3:1}function it(t,s){return s===2?`${t}2`:s===3?`${t}'`:t}function ct(t,s){if(s<=4)return["Cross","F2L","2-Look OLL","2-Look PLL"][t%4];const a=t/s;return a<.25?"Cross":a<.62?"F2L":a<.82?"2-Look OLL":"2-Look PLL"}const dt=["U","D","F","B","L","R"],fe=[{id:"starter-cross",title:"Starter Scramble",description:"A short scramble for practicing move notation and inverse solving.",scramble:["R","U","R'","U'"],targetMoves:4},{id:"six-move",title:"Six Move Sprint",description:"Solve a slightly longer scramble with clean inverse turns.",scramble:["F","R","U","R'","U'","F'"],targetMoves:6},{id:"middle-layer",title:"Middle Layer Drill",description:"A medium scramble that touches side faces and top-layer turns.",scramble:["L","U2","F","R'","D","B2","L'"],targetMoves:7},{id:"full-cube",title:"Full Cube Challenge",description:"A longer scramble that rewards using the solver and reading move notation.",scramble:["R","U","F2","L'","D","B","R2","U'","F","D'"],targetMoves:10}];function Ne(t){const s=[];let a="";for(;s.length0?t.join(" "):"None"}function we(t){const s=t.trim().toUpperCase().replace("’","'").replace(/I$/,"'");if(!s)return null;const a=s[0],l=s.slice(1);return!dt.includes(a)||l!==""&&l!=="'"&&l!=="2"?null:`${a}${l}`}function ut(t){const s=t.split(/[\s,]+/).map(l=>l.trim()).filter(Boolean);if(s.length===0)return null;const a=s.map(we);return a.some(l=>l===null)?null:a}function mt(t,s=25){const a=Math.max(1,Math.min(t,100)),l=Array.from({length:a},()=>{const d=Ne(s);return{scramble:d,solutionLength:le(d).length}}),r=l.reduce((d,x)=>x.solutionLengthx.solutionLength>d.solutionLength?x:d,l[0]),S=l.reduce((d,x)=>d+x.solutionLength,0)/l.length;return{runs:a,best:r,worst:c,averageLength:S}}function xt({mode:t,message:s,moveHistory:a,scrambleMoves:l,solution:r,solutionIndex:c,solutionDone:S,solverPlaybackMode:d,solverSpeed:x,manualMove:f,customScramble:v,simulationRuns:p,simulationResult:i,guidedStep:C,guidedScript:h,challenges:w,selectedChallenge:k,challengeStarted:ne,challengeMoves:H,challengeSolved:N,soundEnabled:V,onManualMoveChange:g,onCustomScrambleChange:ae,onSimulationRunsChange:j,onApplyManualMove:K,onScramble:Q,onApplyCustomScramble:$,onSimulateSolves:G,onGenerateSolution:_,onStepSolution:J,onAutoSolve:D,onSolverSpeedChange:A,onUndo:oe,onReset:L,onNextGuidedStep:X,onSelectChallenge:F,onStartChallenge:M,onToggleSound:Y}){const u=Math.max(0,z.findIndex(b=>b.id===x)),re=z[u]??z[1];return e.jsxs("aside",{className:"w-full space-y-4 md:w-80 md:shrink-0",children:[e.jsxs(B,{title:"Status",children:[e.jsx("p",{className:"text-xs leading-relaxed text-slate-300",children:s}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[e.jsx(O,{label:"Moves",value:a.length}),e.jsx(O,{label:"Solution",value:r.length>0?`${c}/${r.length}`:"-"})]})]}),t==="guided"&&e.jsxs(B,{title:"Guided Mode",children:[e.jsx("p",{className:"text-[11px] leading-relaxed text-slate-400",children:"Learn notation, scrambling, and CFOP-inspired phase labels step by step."}),e.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Reference style: Cross → F2L → 2-Look OLL → 2-Look PLL."}),e.jsxs("div",{className:"mt-3 rounded-xl border border-amber-500/20 bg-amber-500/5 p-3",children:[e.jsxs("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-amber-300",children:["Step ",C+1," / ",h.length]}),e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-300",children:h[C]})]}),e.jsx("button",{onClick:X,className:"mt-3 w-full rounded-lg bg-amber-500/20 px-3 py-2 text-xs font-semibold text-amber-300 ring-1 ring-amber-500/40 hover:bg-amber-500/30",children:"Continue Guided Step"})]}),t==="freeplay"&&e.jsxs(B,{title:"Freeplay Mode",children:[e.jsx(je,{value:f,onChange:g,onApply:K}),e.jsxs("div",{className:"mt-3",children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Custom scramble"}),e.jsx("textarea",{value:v,onChange:b=>ae(b.target.value),rows:2,placeholder:"R U R' U' or Ri U R U2",className:"mt-1 w-full resize-none rounded-lg bg-slate-950/70 px-3 py-2 text-xs font-mono text-slate-200 ring-1 ring-slate-700/50 outline-none focus:ring-cyan-500/50"}),e.jsx("button",{onClick:$,className:"mt-2 w-full rounded-lg bg-violet-500/20 px-3 py-2 text-xs font-semibold text-violet-300 ring-1 ring-violet-500/40 hover:bg-violet-500/30",children:"Apply Custom Scramble"})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[e.jsx(T,{onClick:()=>Q(12),icon:e.jsx(xe,{size:13}),label:"12-Move Scramble"}),e.jsx(T,{onClick:()=>Q(25),icon:e.jsx(xe,{size:13}),label:"25-Move Scramble"}),e.jsx(T,{onClick:_,icon:e.jsx(ge,{size:13}),label:"Find Solution"}),e.jsx(T,{onClick:D,icon:e.jsx(pe,{size:13}),label:"Auto Run"}),e.jsx(T,{onClick:oe,label:"Undo"}),e.jsx(T,{onClick:L,icon:e.jsx(_e,{size:13}),label:"Reset"})]}),e.jsxs("div",{className:"mt-3 rounded-xl border border-slate-700/40 bg-slate-950/40 p-3",children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Simulation runs"}),e.jsxs("div",{className:"mt-1 flex gap-2",children:[e.jsx("input",{type:"number",min:1,max:100,value:p,onChange:b=>j(Number(b.target.value)||1),className:"min-w-0 flex-1 rounded-lg bg-slate-950/70 px-3 py-2 text-sm font-mono text-slate-200 ring-1 ring-slate-700/50"}),e.jsx("button",{onClick:G,className:"rounded-lg bg-slate-800/70 px-3 py-2 text-xs font-semibold text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70",children:"Run"})]})]})]}),t==="challenge"&&e.jsxs(B,{title:"Challenge Mode",children:[e.jsx("div",{className:"space-y-2",children:w.map(b=>e.jsxs("button",{onClick:()=>F(b),className:`w-full rounded-lg px-3 py-2 text-left ring-1 transition-all ${k.id===b.id?"bg-rose-500/15 text-rose-200 ring-rose-500/40":"bg-slate-800/50 text-slate-400 ring-slate-700/40 hover:bg-slate-700/50"}`,children:[e.jsx("div",{className:"text-xs font-semibold",children:b.title}),e.jsx("div",{className:"mt-0.5 text-[10px] text-slate-500",children:b.description})]},b.id))}),e.jsx("button",{onClick:()=>M(k),className:"mt-3 w-full rounded-lg bg-rose-500/20 px-3 py-2 text-xs font-semibold text-rose-300 ring-1 ring-rose-500/40 hover:bg-rose-500/30",children:"Start Challenge"}),ne&&e.jsxs("div",{className:"mt-3 space-y-3",children:[e.jsx(je,{value:f,onChange:g,onApply:K}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(O,{label:"Your Moves",value:H}),e.jsx(O,{label:"Target",value:k.targetMoves})]}),N&&e.jsxs("div",{className:"rounded-lg bg-emerald-500/10 px-3 py-2 text-xs text-emerald-300 ring-1 ring-emerald-500/30",children:["Solved in ",H," moves."]})]})]}),e.jsxs(B,{title:"Solver",children:[e.jsxs("div",{className:"space-y-2 text-[11px] text-slate-400",children:[e.jsxs("p",{children:[e.jsx("span",{className:"text-slate-500",children:"Scramble:"})," ",R(l)]}),e.jsxs("p",{children:[e.jsx("span",{className:"text-slate-500",children:"History:"})," ",R(a.slice(-12))]})]}),e.jsxs("div",{className:"mt-3 rounded-xl border border-slate-700/40 bg-slate-950/40 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Playback"}),e.jsx("span",{className:"text-[10px] text-slate-500",children:re.label})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(Se,{label:"Manual Step",active:d==="manual",disabled:S||r.length===0,onClick:J}),e.jsx(Se,{label:"Auto",active:d==="auto",disabled:S||r.length===0&&a.length===0,onClick:D})]}),e.jsx("input",{type:"range",min:0,max:z.length-1,step:1,value:u,onChange:b=>{const m=z[Number(b.target.value)]?.id;m&&A(m)},className:"mt-3 w-full accent-indigo-400","aria-label":"Solver auto playback speed"}),e.jsx("div",{className:"mt-1 flex justify-between",children:z.map(b=>e.jsx("span",{className:`text-[9px] uppercase tracking-wide ${b.id===x?"text-indigo-300":"text-slate-600"}`,children:b.label},b.id))})]}),r.length>0&&e.jsx("div",{className:"mt-3 max-h-28 overflow-y-auto rounded-lg bg-slate-950/50 p-2",children:r.map((b,m)=>e.jsxs("div",{className:`flex items-center gap-2 rounded px-2 py-1 text-[11px] ${mY(!V),className:`inline-flex w-full items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-semibold ring-1 ${V?"bg-indigo-500/15 text-indigo-300 ring-indigo-500/30":"bg-slate-800/70 text-slate-400 ring-slate-700/40"}`,children:[V?e.jsx(Ge,{size:14}):e.jsx(Xe,{size:14}),V?"Sound On":"Sound Off"]})})]})}function B({title:t,children:s}){return e.jsxs("section",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wider text-slate-400",children:t}),s]})}function O({label:t,value:s}){return e.jsxs("div",{className:"rounded-lg bg-slate-800/50 px-2.5 py-2 ring-1 ring-slate-700/40",children:[e.jsx("div",{className:"text-[10px] text-slate-500",children:t}),e.jsx("div",{className:"text-sm font-mono text-slate-100",children:s})]})}function T({label:t,icon:s,disabled:a,onClick:l}){return e.jsxs("button",{onClick:l,disabled:a,className:"inline-flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/70 px-3 py-2 text-[11px] font-semibold text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70 disabled:cursor-not-allowed disabled:opacity-40",children:[s,t]})}function Se({label:t,active:s,disabled:a,onClick:l}){return e.jsx("button",{onClick:l,disabled:a,className:`rounded-lg px-3 py-2 text-[11px] font-semibold ring-1 transition-all disabled:cursor-not-allowed disabled:opacity-40 ${s?"bg-indigo-500/20 text-indigo-300 ring-indigo-500/40":"bg-slate-800/70 text-slate-300 ring-slate-700/50 hover:bg-slate-700/70"}`,children:t})}function je({value:t,onChange:s,onApply:a}){return e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Move notation"}),e.jsxs("div",{className:"mt-1 flex gap-2",children:[e.jsx("input",{value:t,onChange:l=>s(l.target.value),onKeyDown:l=>{l.key==="Enter"&&a()},placeholder:"R, U', F2",className:"min-w-0 flex-1 rounded-lg bg-slate-950/70 px-3 py-2 text-sm font-mono text-slate-200 ring-1 ring-slate-700/50 outline-none focus:ring-cyan-500/50"}),e.jsx("button",{onClick:a,className:"rounded-lg bg-cyan-500/20 px-3 py-2 text-xs font-semibold text-cyan-300 ring-1 ring-cyan-500/40 hover:bg-cyan-500/30",children:"Apply"})]})]})}const pt=o.memo(xt);function gt(){const t=o.useRef(!0),[s,a]=o.useState(!0),l=o.useCallback(()=>Ye(),[]),r=o.useCallback((v,p,i="sine",C=.045)=>{if(!t.current)return;const h=l();if(!h)return;const w=h.createOscillator(),k=h.createGain();w.type=i,w.frequency.setValueAtTime(v,h.currentTime),k.gain.setValueAtTime(C,h.currentTime),k.gain.exponentialRampToValueAtTime(.001,h.currentTime+p),w.connect(k),k.connect(h.destination),w.start(h.currentTime),w.stop(h.currentTime+p)},[l]),c=o.useCallback(v=>{const p=[261.63,293.66,329.63,392,440,523.25];r(p[v%p.length],.08,"triangle",.035)},[r]),S=o.useCallback(()=>{r(196,.12,"sawtooth",.03),setTimeout(()=>r(246.94,.12,"sawtooth",.03),80)},[r]),d=o.useCallback(()=>{[392,493.88,587.33,783.99].forEach((v,p)=>{setTimeout(()=>r(v,.12,"sine",.05),p*75)})},[r]),x=o.useCallback(()=>{r(164.81,.18,"sawtooth",.035)},[r]),f=o.useCallback(v=>{t.current=v,a(v)},[]);return{soundEnabled:s,toggleSound:f,playMove:c,playScramble:S,playSolved:d,playError:x}}const ye=["Start from a solved cube and watch what a single R turn does.","Scramble the cube with a short sequence.","Ask the solver for the inverse sequence.","Step through solution moves and watch the cube return to solved state."];function Ce(t){return z.find(s=>s.id===t)?.delayMs??450}function bt(){const[t,s]=o.useState("guided"),[a,l]=o.useState(U),[r,c]=o.useState([]),[S,d]=o.useState([]),[x,f]=o.useState([]),[v,p]=o.useState(0),[i,C]=o.useState("R"),[h,w]=o.useState("R U R' U'"),[k,ne]=o.useState(10),[H,N]=o.useState(null),[V,g]=o.useState("Choose a mode and start turning the cube."),[ae,j]=o.useState("manual"),[K,Q]=o.useState("normal"),[$,G]=o.useState(0),[_,J]=o.useState(fe[0]),[D,A]=o.useState(!1),[oe,L]=o.useState(0),[X,F]=o.useState(!1),M=o.useRef(null),Y=o.useRef("normal"),u=gt(),re=o.useMemo(()=>te(a),[a]),b=x.length>0&&v>=x.length,m=o.useCallback(()=>{M.current&&(window.clearInterval(M.current),M.current=null)},[]);o.useEffect(()=>m,[m]);const Me=o.useCallback(n=>{Y.current=n,Q(n)},[]),Re=o.useCallback(()=>{m(),l(U()),c([]),d([]),f([]),p(0),N(null),j("manual"),G(0),A(!1),L(0),F(!1),g("Cube reset to solved state.")},[m]),Le=o.useCallback(n=>{s(n),m(),l(U()),c([]),d([]),f([]),p(0),N(null),j("manual"),G(0),A(!1),L(0),F(!1),g(n==="guided"?"Guided mode: follow the walkthrough to understand cube moves and solving.":n==="freeplay"?"Freeplay mode: scramble, turn, and solve however you like.":"Challenge mode: solve the scramble in as few moves as possible.")},[m]),q=o.useCallback((n,y=!0)=>{m(),j("manual"),l(E=>{const I=se(E,n);return y&&(c(P=>[...P,n]),t==="challenge"&&D&&!X&&(L(P=>P+1),te(I)&&(F(!0),g("Challenge solved! Compare your move count with the target."),u.playSolved()))),I}),f([]),p(0),N(null),u.playMove(n.charCodeAt(0))},[X,D,m,t,u]),Fe=o.useCallback((n=12)=>{m();const y=Ne(n);l(Z(U(),y)),c(y),d(y),f([]),p(0),j("manual"),A(!1),L(0),F(!1),g(`Scrambled with: ${R(y)}`),u.playScramble()},[m,u]),Ue=o.useCallback(()=>{m();const n=ut(h);if(!n){g("Invalid scramble. Use moves like: R U R' U' or Ri U R U2."),u.playError();return}l(Z(U(),n)),c(n),d(n),f([]),p(0),N(null),j("manual"),A(!1),L(0),F(!1),g(`Custom scramble applied: ${R(n)}`),u.playScramble()},[m,h,u]),Te=o.useCallback((n=_)=>{m(),J(n),l(Z(U(),n.scramble)),c(n.scramble),d(n.scramble),f([]),p(0),N(null),j("manual"),A(!0),L(0),F(!1),g(`Challenge started. Scramble: ${R(n.scramble)}`),u.playScramble()},[m,_,u]),$e=o.useCallback(()=>{m();const n=le(r);f(n),p(0),N(null),j("manual"),g(n.length>0?`Solver found ${n.length} inverse move${n.length===1?"":"s"}.`:"Cube is already solved."),n.length===0&&u.playSolved()},[m,r,u]),ie=o.useCallback(()=>{m(),j("manual");const n=x[v];n&&(l(y=>{const E=se(y,n.move);return te(E)?(g("Solved! The inverse sequence returned the cube to its original state."),u.playSolved()):g(n.description),E}),p(y=>y+1),u.playMove(v))},[m,x,v,u]),De=o.useCallback(()=>{m();const n=x.length>0?x:le(r),y=x.length>0?v:0;if(n.length===0){f([]),p(0),j("manual"),g("Cube is already solved."),u.playSolved();return}if(y>=n.length){j("manual"),g("Solution playback is already complete.");return}x.length===0&&(f(n),p(0)),N(null),j("auto"),g(`Auto-solving ${n.length-y} remaining move${n.length-y===1?"":"s"}.`);const E=()=>{p(I=>{const P=n[I];if(!P)return M.current=null,j("manual"),I;l(Be=>{const me=se(Be,P.move);return te(me)?(g("Auto-solve complete."),u.playSolved()):(g(P.description),u.playMove(I)),me});const ue=I+1;return ue{const n=we(i);if(!n){g("Invalid move. Use notation like R, U', F2, or L'."),u.playError();return}q(n),g(`Applied ${n}.`)},[q,i,u]),Ee=o.useCallback(()=>{const n=mt(k);N(n),g(`Ran ${n.runs} simulated solves. Best: ${n.best.solutionLength} moves, worst: ${n.worst.solutionLength} moves.`)},[k]),Ie=o.useCallback(()=>{const n=r.slice(0,-1);c(n),l(Z(U(),n)),f([]),p(0),j("manual"),g("Undid the last recorded move.")},[r]),Pe=o.useCallback(()=>{if($===0)q("R"),g("R turns the right face clockwise. Notice the side stickers move too.");else if($===1){const n=["R","U","R'","U'"];l(Z(U(),n)),c(n),d(n),g(`Short scramble applied: ${R(n)}`),u.playScramble()}else if($===2){const n=le(r);f(n),p(0),g(`The solver reverses the scramble: ${R(n.map(y=>y.move))}`)}else ie();G(n=>Math.min(n+1,ye.length-1))},[$,q,r,u,ie]);return{mode:t,cube:a,solved:re,moveHistory:r,scrambleMoves:S,solution:x,solutionIndex:v,solutionDone:b,solverPlaybackMode:ae,solverSpeed:K,setSolverSpeed:Me,manualMove:i,setManualMove:C,customScramble:h,setCustomScramble:w,simulationRuns:k,setSimulationRuns:ne,simulationResult:H,message:V,guidedStep:$,guidedScript:ye,selectedChallenge:_,setSelectedChallenge:J,challenges:fe,challengeStarted:D,challengeMoves:oe,challengeSolved:X,soundEnabled:u.soundEnabled,toggleSound:u.toggleSound,switchMode:Le,resetCube:Re,makeMove:q,runScramble:Fe,runCustomScramble:Ue,generateSolution:$e,stepSolution:ie,autoSolve:De,applyManualMove:Ae,undoLastMove:Ie,startChallenge:Te,nextGuidedStep:Pe,simulateSolves:Ee}}const ht=[{id:"guided",label:"Guided Mode",icon:e.jsx(Ve,{size:14})},{id:"freeplay",label:"Freeplay Mode",icon:e.jsx(ze,{size:14})},{id:"challenge",label:"Challenge Mode",icon:e.jsx(qe,{size:14})}];function Nt(){const t=bt();return e.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"shrink-0 border-b border-slate-700/50 bg-slate-900/40 px-4 pt-3 backdrop-blur-sm md:px-6",children:e.jsx("div",{className:"flex gap-1 overflow-x-auto",children:ht.map(s=>e.jsxs("button",{onClick:()=>t.switchMode(s.id),className:`flex items-center gap-1.5 whitespace-nowrap rounded-t-lg px-4 py-2.5 text-xs font-medium transition-all md:text-sm ${t.mode===s.id?"bg-slate-800/80 text-indigo-300 border border-b-0 border-slate-700/50 -mb-px":"text-slate-500 hover:bg-slate-800/30 hover:text-slate-300"}`,children:[s.icon,s.label]},s.id))})}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4 md:p-6",children:e.jsxs("div",{className:"mx-auto flex max-w-6xl flex-col gap-4 md:flex-row md:gap-6",children:[e.jsxs("main",{className:"order-last flex min-w-0 flex-1 flex-col gap-4 md:order-first",children:[e.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm md:p-5",children:[e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold text-white md:text-xl",children:"Rubik's Cube Solver"}),e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-400",children:"Manipulate a 3D Rubik's Cube, generate or enter scrambles, and watch a CFOP-inspired solve sequence step by step."})]}),e.jsx("div",{className:"rounded-full bg-violet-500/10 px-3 py-1 text-[10px] font-semibold text-violet-300 ring-1 ring-violet-500/30",children:"3D Cube"})]}),e.jsx("div",{className:"mt-3 rounded-xl bg-indigo-500/5 px-3 py-2 ring-1 ring-indigo-500/15",children:e.jsxs("p",{className:"text-[11px] leading-relaxed text-slate-300",children:["Move notation: ",e.jsx("span",{className:"font-mono text-cyan-300",children:"R"})," turns a face clockwise,",e.jsx("span",{className:"font-mono text-cyan-300",children:" R'"})," turns it counter-clockwise, and",e.jsx("span",{className:"font-mono text-cyan-300",children:" R2"})," turns it twice. The inverse shorthand",e.jsx("span",{className:"font-mono text-cyan-300",children:" Ri"})," is also accepted."]})})]}),e.jsx(et,{cube:t.cube,solved:t.solved,onMove:t.makeMove})]}),e.jsx(pt,{mode:t.mode,message:t.message,moveHistory:t.moveHistory,scrambleMoves:t.scrambleMoves,solution:t.solution,solutionIndex:t.solutionIndex,solutionDone:t.solutionDone,solverPlaybackMode:t.solverPlaybackMode,solverSpeed:t.solverSpeed,manualMove:t.manualMove,customScramble:t.customScramble,simulationRuns:t.simulationRuns,simulationResult:t.simulationResult,guidedStep:t.guidedStep,guidedScript:t.guidedScript,challenges:t.challenges,selectedChallenge:t.selectedChallenge,challengeStarted:t.challengeStarted,challengeMoves:t.challengeMoves,challengeSolved:t.challengeSolved,soundEnabled:t.soundEnabled,onManualMoveChange:t.setManualMove,onCustomScrambleChange:t.setCustomScramble,onSimulationRunsChange:t.setSimulationRuns,onApplyManualMove:t.applyManualMove,onScramble:t.runScramble,onApplyCustomScramble:t.runCustomScramble,onSimulateSolves:t.simulateSolves,onGenerateSolution:t.generateSolution,onStepSolution:t.stepSolution,onAutoSolve:t.autoSolve,onSolverSpeedChange:t.setSolverSpeed,onUndo:t.undoLastMove,onReset:t.resetCube,onNextGuidedStep:t.nextGuidedStep,onSelectChallenge:t.setSelectedChallenge,onStartChallenge:t.startChallenge,onToggleSound:t.toggleSound})]})})]})}export{Nt as default};
+import{c as Oe,r as o,j as e,h as ze}from"./index-CB1-0H6I.js";import{S as xe}from"./shuffle-DZnyoAGL.js";import{S as pe,B as Ve}from"./skip-forward-DWTiDap8.js";import{R as _e}from"./rotate-ccw-CDlWXRsI.js";import{V as Ge,a as Xe}from"./volume-x-CKT6TOtL.js";import{g as Ye}from"./audioContext-NbgqvQGz.js";import{T as qe}from"./trophy-DE-EF49m.js";const We=[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]],ge=Oe("wand-sparkles",We),z=[{id:"slow",label:"Slow",delayMs:900},{id:"normal",label:"Normal",delayMs:450},{id:"fast",label:"Fast",delayMs:160}],Ze={U:"Up",D:"Down",F:"Front",B:"Back",L:"Left",R:"Right"},He={white:"#f8fafc",yellow:"#facc15",green:"#22c55e",blue:"#3b82f6",orange:"#f97316",red:"#ef4444"},ce=["U","U'","U2","D","D'","D2","F","F'","F2","B","B'","B2","L","L'","L2","R","R'","R2"],Ke={F:"translateZ(72px)",B:"rotateY(180deg) translateZ(72px)",R:"rotateY(90deg) translateZ(72px)",L:"rotateY(-90deg) translateZ(72px)",U:"rotateX(90deg) translateZ(72px)",D:"rotateX(-90deg) translateZ(72px)"},Qe=["F","R","U","L","D","B"],be={x:-24,y:38},ee=18;function Je({cube:t,solved:s,onMove:a}){const[l,r]=o.useState(be),[c,S]=o.useState(null),d=o.useCallback((i,C)=>{r(h=>({x:he(h.x+i),y:h.y+C}))},[]),x=o.useCallback(()=>{r(be)},[]),f=o.useCallback(i=>{i.currentTarget.setPointerCapture(i.pointerId),S({pointerId:i.pointerId,startX:i.clientX,startY:i.clientY,rotation:l})},[l]),v=o.useCallback(i=>{if(!c||c.pointerId!==i.pointerId)return;const C=i.clientX-c.startX,h=i.clientY-c.startY;r({x:he(c.rotation.x-h*.35),y:c.rotation.y+C*.35})},[c]),p=o.useCallback(i=>{!c||c.pointerId!==i.pointerId||(i.currentTarget.hasPointerCapture(i.pointerId)&&i.currentTarget.releasePointerCapture(i.pointerId),S(null))},[c]);return e.jsxs("div",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 md:p-5 backdrop-blur-sm",children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-bold text-white",children:"Cube State"}),e.jsx("p",{className:"text-[11px] text-slate-500",children:"Drag the 3D cube to rotate the view"})]}),e.jsx("span",{className:`rounded-full px-2.5 py-1 text-[10px] font-semibold ring-1 ${s?"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30":"bg-amber-500/15 text-amber-300 ring-amber-500/30"}`,children:s?"Solved":"Scrambled"})]}),e.jsx("div",{className:"flex min-h-[290px] touch-none cursor-grab items-center justify-center overflow-hidden rounded-xl bg-slate-950/40 ring-1 ring-slate-800/60 active:cursor-grabbing",role:"img","aria-label":"Interactive 3D Rubik's Cube view. Drag to rotate the cube.",onPointerDown:f,onPointerMove:v,onPointerUp:p,onPointerCancel:p,children:e.jsxs("div",{className:"relative h-56 w-56",style:{perspective:"900px"},children:[e.jsx("div",{className:`absolute left-1/2 top-1/2 h-36 w-36 ${c?"":"transition-transform duration-500"}`,style:{transformStyle:"preserve-3d",transform:`translate(-50%, -50%) rotateX(${l.x}deg) rotateY(${l.y}deg) rotateZ(0deg)`},children:Qe.map(i=>e.jsxs("div",{className:"absolute left-0 top-0 grid h-36 w-36 grid-cols-3 gap-1 rounded-xl border border-slate-950/70 bg-slate-950/90 p-1.5 shadow-2xl",style:{transform:Ke[i],backfaceVisibility:"hidden"},"aria-label":`${Ze[i]} face`,children:[t[i].map((C,h)=>e.jsx("div",{className:"rounded-md border border-slate-950/50 shadow-inner transition-colors duration-300",style:{backgroundColor:He[C]}},`${i}-${h}`)),e.jsx("span",{className:"pointer-events-none absolute left-2 top-1 text-[10px] font-black text-slate-950/50",children:i})]},i))}),e.jsx("div",{className:"absolute bottom-2 left-1/2 h-8 w-40 -translate-x-1/2 rounded-full bg-black/30 blur-xl"})]})}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-[10px] text-slate-500",children:["View angle: X ",Math.round(l.x),"deg / Y ",Math.round(l.y),"deg"]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(W,{label:"Up",onClick:()=>d(-ee,0)}),e.jsx(W,{label:"Down",onClick:()=>d(ee,0)}),e.jsx(W,{label:"Left",onClick:()=>d(0,-ee)}),e.jsx(W,{label:"Right",onClick:()=>d(0,ee)}),e.jsx(W,{label:"Reset View",onClick:x})]})]}),e.jsxs("div",{className:"mt-5",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Quick Turns"}),e.jsx("span",{className:"text-[10px] text-slate-600",children:"Clockwise / inverse / double"})]}),e.jsx("div",{className:"grid grid-cols-6 gap-1.5 sm:grid-cols-9",children:ce.map(i=>e.jsx("button",{onClick:()=>a(i),className:"rounded-lg bg-slate-800/70 px-2 py-1.5 text-[11px] font-semibold text-slate-300 ring-1 ring-slate-700/40 transition-all hover:bg-indigo-500/15 hover:text-indigo-300 hover:ring-indigo-500/30",children:i},i))})]})]})}function he(t){return Math.max(-75,Math.min(75,t))}function W({label:t,onClick:s}){return e.jsx("button",{onClick:s,className:"rounded-md bg-slate-800/70 px-2 py-1 text-[10px] font-semibold text-slate-400 ring-1 ring-slate-700/40 transition-all hover:bg-indigo-500/15 hover:text-indigo-300 hover:ring-indigo-500/30",children:t})}const et=o.memo(Je),tt={U:"white",D:"yellow",F:"green",B:"blue",L:"orange",R:"red"},de=["U","D","F","B","L","R"],st={U:[["F",[0,1,2]],["R",[0,1,2]],["B",[0,1,2]],["L",[0,1,2]]],D:[["F",[6,7,8]],["L",[6,7,8]],["B",[6,7,8]],["R",[6,7,8]]],F:[["U",[6,7,8]],["R",[0,3,6]],["D",[2,1,0]],["L",[8,5,2]]],B:[["U",[2,1,0]],["L",[0,3,6]],["D",[6,7,8]],["R",[8,5,2]]],L:[["U",[0,3,6]],["F",[0,3,6]],["D",[0,3,6]],["B",[8,5,2]]],R:[["U",[8,5,2]],["B",[0,3,6]],["D",[8,5,2]],["F",[8,5,2]]]};function U(){return de.reduce((t,s)=>(t[s]=Array(9).fill(tt[s]),t),{})}function ke(t){return de.reduce((s,a)=>(s[a]=[...t[a]],s),{})}function te(t){return de.every(s=>t[s].every(a=>a===t[s][4]))}function Z(t,s){return s.reduce((a,l)=>se(a,l),t)}function se(t,s){const a=s[0],l=s.endsWith("2")?2:s.endsWith("'")?3:1;let r=ke(t);for(let c=0;c{const r=ct(l,s.length);return{move:a,phase:r,description:`${r}: apply ${a} as part of the inverse solve sequence.`}})}function at(t,s){const a=ke(t);a[s]=ot(t[s]);const l=st[s],r=l.map(([c,S])=>S.map(d=>t[c][d]));return l.forEach(([c,S],d)=>{const x=r[(d+l.length-1)%l.length];S.forEach((f,v)=>{a[c][f]=x[v]})}),a}function ot(t){return[t[6],t[3],t[0],t[7],t[4],t[1],t[8],t[5],t[2]]}function rt(t){const s=[];for(const a of t){const l=s[s.length-1];if(!l||l[0]!==a[0]){s.push(a);continue}const r=(ve(l)+ve(a))%4;s.pop(),r!==0&&s.push(it(a[0],r))}return s}function ve(t){return t.endsWith("2")?2:t.endsWith("'")?3:1}function it(t,s){return s===2?`${t}2`:s===3?`${t}'`:t}function ct(t,s){if(s<=4)return["Cross","F2L","2-Look OLL","2-Look PLL"][t%4];const a=t/s;return a<.25?"Cross":a<.62?"F2L":a<.82?"2-Look OLL":"2-Look PLL"}const dt=["U","D","F","B","L","R"],fe=[{id:"starter-cross",title:"Starter Scramble",description:"A short scramble for practicing move notation and inverse solving.",scramble:["R","U","R'","U'"],targetMoves:4},{id:"six-move",title:"Six Move Sprint",description:"Solve a slightly longer scramble with clean inverse turns.",scramble:["F","R","U","R'","U'","F'"],targetMoves:6},{id:"middle-layer",title:"Middle Layer Drill",description:"A medium scramble that touches side faces and top-layer turns.",scramble:["L","U2","F","R'","D","B2","L'"],targetMoves:7},{id:"full-cube",title:"Full Cube Challenge",description:"A longer scramble that rewards using the solver and reading move notation.",scramble:["R","U","F2","L'","D","B","R2","U'","F","D'"],targetMoves:10}];function Ne(t){const s=[];let a="";for(;s.length0?t.join(" "):"None"}function we(t){const s=t.trim().toUpperCase().replace("’","'").replace(/I$/,"'");if(!s)return null;const a=s[0],l=s.slice(1);return!dt.includes(a)||l!==""&&l!=="'"&&l!=="2"?null:`${a}${l}`}function ut(t){const s=t.split(/[\s,]+/).map(l=>l.trim()).filter(Boolean);if(s.length===0)return null;const a=s.map(we);return a.some(l=>l===null)?null:a}function mt(t,s=25){const a=Math.max(1,Math.min(t,100)),l=Array.from({length:a},()=>{const d=Ne(s);return{scramble:d,solutionLength:le(d).length}}),r=l.reduce((d,x)=>x.solutionLengthx.solutionLength>d.solutionLength?x:d,l[0]),S=l.reduce((d,x)=>d+x.solutionLength,0)/l.length;return{runs:a,best:r,worst:c,averageLength:S}}function xt({mode:t,message:s,moveHistory:a,scrambleMoves:l,solution:r,solutionIndex:c,solutionDone:S,solverPlaybackMode:d,solverSpeed:x,manualMove:f,customScramble:v,simulationRuns:p,simulationResult:i,guidedStep:C,guidedScript:h,challenges:w,selectedChallenge:k,challengeStarted:ne,challengeMoves:H,challengeSolved:N,soundEnabled:V,onManualMoveChange:g,onCustomScrambleChange:ae,onSimulationRunsChange:j,onApplyManualMove:K,onScramble:Q,onApplyCustomScramble:$,onSimulateSolves:G,onGenerateSolution:_,onStepSolution:J,onAutoSolve:D,onSolverSpeedChange:A,onUndo:oe,onReset:L,onNextGuidedStep:X,onSelectChallenge:F,onStartChallenge:M,onToggleSound:Y}){const u=Math.max(0,z.findIndex(b=>b.id===x)),re=z[u]??z[1];return e.jsxs("aside",{className:"w-full space-y-4 md:w-80 md:shrink-0",children:[e.jsxs(B,{title:"Status",children:[e.jsx("p",{className:"text-xs leading-relaxed text-slate-300",children:s}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[e.jsx(O,{label:"Moves",value:a.length}),e.jsx(O,{label:"Solution",value:r.length>0?`${c}/${r.length}`:"-"})]})]}),t==="guided"&&e.jsxs(B,{title:"Guided Mode",children:[e.jsx("p",{className:"text-[11px] leading-relaxed text-slate-400",children:"Learn notation, scrambling, and CFOP-inspired phase labels step by step."}),e.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Reference style: Cross → F2L → 2-Look OLL → 2-Look PLL."}),e.jsxs("div",{className:"mt-3 rounded-xl border border-amber-500/20 bg-amber-500/5 p-3",children:[e.jsxs("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-amber-300",children:["Step ",C+1," / ",h.length]}),e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-300",children:h[C]})]}),e.jsx("button",{onClick:X,className:"mt-3 w-full rounded-lg bg-amber-500/20 px-3 py-2 text-xs font-semibold text-amber-300 ring-1 ring-amber-500/40 hover:bg-amber-500/30",children:"Continue Guided Step"})]}),t==="freeplay"&&e.jsxs(B,{title:"Freeplay Mode",children:[e.jsx(je,{value:f,onChange:g,onApply:K}),e.jsxs("div",{className:"mt-3",children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Custom scramble"}),e.jsx("textarea",{value:v,onChange:b=>ae(b.target.value),rows:2,placeholder:"R U R' U' or Ri U R U2",className:"mt-1 w-full resize-none rounded-lg bg-slate-950/70 px-3 py-2 text-xs font-mono text-slate-200 ring-1 ring-slate-700/50 outline-none focus:ring-cyan-500/50"}),e.jsx("button",{onClick:$,className:"mt-2 w-full rounded-lg bg-violet-500/20 px-3 py-2 text-xs font-semibold text-violet-300 ring-1 ring-violet-500/40 hover:bg-violet-500/30",children:"Apply Custom Scramble"})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[e.jsx(T,{onClick:()=>Q(12),icon:e.jsx(xe,{size:13}),label:"12-Move Scramble"}),e.jsx(T,{onClick:()=>Q(25),icon:e.jsx(xe,{size:13}),label:"25-Move Scramble"}),e.jsx(T,{onClick:_,icon:e.jsx(ge,{size:13}),label:"Find Solution"}),e.jsx(T,{onClick:D,icon:e.jsx(pe,{size:13}),label:"Auto Run"}),e.jsx(T,{onClick:oe,label:"Undo"}),e.jsx(T,{onClick:L,icon:e.jsx(_e,{size:13}),label:"Reset"})]}),e.jsxs("div",{className:"mt-3 rounded-xl border border-slate-700/40 bg-slate-950/40 p-3",children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Simulation runs"}),e.jsxs("div",{className:"mt-1 flex gap-2",children:[e.jsx("input",{type:"number",min:1,max:100,value:p,onChange:b=>j(Number(b.target.value)||1),className:"min-w-0 flex-1 rounded-lg bg-slate-950/70 px-3 py-2 text-sm font-mono text-slate-200 ring-1 ring-slate-700/50"}),e.jsx("button",{onClick:G,className:"rounded-lg bg-slate-800/70 px-3 py-2 text-xs font-semibold text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70",children:"Run"})]})]})]}),t==="challenge"&&e.jsxs(B,{title:"Challenge Mode",children:[e.jsx("div",{className:"space-y-2",children:w.map(b=>e.jsxs("button",{onClick:()=>F(b),className:`w-full rounded-lg px-3 py-2 text-left ring-1 transition-all ${k.id===b.id?"bg-rose-500/15 text-rose-200 ring-rose-500/40":"bg-slate-800/50 text-slate-400 ring-slate-700/40 hover:bg-slate-700/50"}`,children:[e.jsx("div",{className:"text-xs font-semibold",children:b.title}),e.jsx("div",{className:"mt-0.5 text-[10px] text-slate-500",children:b.description})]},b.id))}),e.jsx("button",{onClick:()=>M(k),className:"mt-3 w-full rounded-lg bg-rose-500/20 px-3 py-2 text-xs font-semibold text-rose-300 ring-1 ring-rose-500/40 hover:bg-rose-500/30",children:"Start Challenge"}),ne&&e.jsxs("div",{className:"mt-3 space-y-3",children:[e.jsx(je,{value:f,onChange:g,onApply:K}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(O,{label:"Your Moves",value:H}),e.jsx(O,{label:"Target",value:k.targetMoves})]}),N&&e.jsxs("div",{className:"rounded-lg bg-emerald-500/10 px-3 py-2 text-xs text-emerald-300 ring-1 ring-emerald-500/30",children:["Solved in ",H," moves."]})]})]}),e.jsxs(B,{title:"Solver",children:[e.jsxs("div",{className:"space-y-2 text-[11px] text-slate-400",children:[e.jsxs("p",{children:[e.jsx("span",{className:"text-slate-500",children:"Scramble:"})," ",R(l)]}),e.jsxs("p",{children:[e.jsx("span",{className:"text-slate-500",children:"History:"})," ",R(a.slice(-12))]})]}),e.jsxs("div",{className:"mt-3 rounded-xl border border-slate-700/40 bg-slate-950/40 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Playback"}),e.jsx("span",{className:"text-[10px] text-slate-500",children:re.label})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(Se,{label:"Manual Step",active:d==="manual",disabled:S||r.length===0,onClick:J}),e.jsx(Se,{label:"Auto",active:d==="auto",disabled:S||r.length===0&&a.length===0,onClick:D})]}),e.jsx("input",{type:"range",min:0,max:z.length-1,step:1,value:u,onChange:b=>{const m=z[Number(b.target.value)]?.id;m&&A(m)},className:"mt-3 w-full accent-indigo-400","aria-label":"Solver auto playback speed"}),e.jsx("div",{className:"mt-1 flex justify-between",children:z.map(b=>e.jsx("span",{className:`text-[9px] uppercase tracking-wide ${b.id===x?"text-indigo-300":"text-slate-600"}`,children:b.label},b.id))})]}),r.length>0&&e.jsx("div",{className:"mt-3 max-h-28 overflow-y-auto rounded-lg bg-slate-950/50 p-2",children:r.map((b,m)=>e.jsxs("div",{className:`flex items-center gap-2 rounded px-2 py-1 text-[11px] ${mY(!V),className:`inline-flex w-full items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-semibold ring-1 ${V?"bg-indigo-500/15 text-indigo-300 ring-indigo-500/30":"bg-slate-800/70 text-slate-400 ring-slate-700/40"}`,children:[V?e.jsx(Ge,{size:14}):e.jsx(Xe,{size:14}),V?"Sound On":"Sound Off"]})})]})}function B({title:t,children:s}){return e.jsxs("section",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wider text-slate-400",children:t}),s]})}function O({label:t,value:s}){return e.jsxs("div",{className:"rounded-lg bg-slate-800/50 px-2.5 py-2 ring-1 ring-slate-700/40",children:[e.jsx("div",{className:"text-[10px] text-slate-500",children:t}),e.jsx("div",{className:"text-sm font-mono text-slate-100",children:s})]})}function T({label:t,icon:s,disabled:a,onClick:l}){return e.jsxs("button",{onClick:l,disabled:a,className:"inline-flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/70 px-3 py-2 text-[11px] font-semibold text-slate-300 ring-1 ring-slate-700/50 hover:bg-slate-700/70 disabled:cursor-not-allowed disabled:opacity-40",children:[s,t]})}function Se({label:t,active:s,disabled:a,onClick:l}){return e.jsx("button",{onClick:l,disabled:a,className:`rounded-lg px-3 py-2 text-[11px] font-semibold ring-1 transition-all disabled:cursor-not-allowed disabled:opacity-40 ${s?"bg-indigo-500/20 text-indigo-300 ring-indigo-500/40":"bg-slate-800/70 text-slate-300 ring-slate-700/50 hover:bg-slate-700/70"}`,children:t})}function je({value:t,onChange:s,onApply:a}){return e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-slate-400",children:"Move notation"}),e.jsxs("div",{className:"mt-1 flex gap-2",children:[e.jsx("input",{value:t,onChange:l=>s(l.target.value),onKeyDown:l=>{l.key==="Enter"&&a()},placeholder:"R, U', F2",className:"min-w-0 flex-1 rounded-lg bg-slate-950/70 px-3 py-2 text-sm font-mono text-slate-200 ring-1 ring-slate-700/50 outline-none focus:ring-cyan-500/50"}),e.jsx("button",{onClick:a,className:"rounded-lg bg-cyan-500/20 px-3 py-2 text-xs font-semibold text-cyan-300 ring-1 ring-cyan-500/40 hover:bg-cyan-500/30",children:"Apply"})]})]})}const pt=o.memo(xt);function gt(){const t=o.useRef(!0),[s,a]=o.useState(!0),l=o.useCallback(()=>Ye(),[]),r=o.useCallback((v,p,i="sine",C=.045)=>{if(!t.current)return;const h=l();if(!h)return;const w=h.createOscillator(),k=h.createGain();w.type=i,w.frequency.setValueAtTime(v,h.currentTime),k.gain.setValueAtTime(C,h.currentTime),k.gain.exponentialRampToValueAtTime(.001,h.currentTime+p),w.connect(k),k.connect(h.destination),w.start(h.currentTime),w.stop(h.currentTime+p)},[l]),c=o.useCallback(v=>{const p=[261.63,293.66,329.63,392,440,523.25];r(p[v%p.length],.08,"triangle",.035)},[r]),S=o.useCallback(()=>{r(196,.12,"sawtooth",.03),setTimeout(()=>r(246.94,.12,"sawtooth",.03),80)},[r]),d=o.useCallback(()=>{[392,493.88,587.33,783.99].forEach((v,p)=>{setTimeout(()=>r(v,.12,"sine",.05),p*75)})},[r]),x=o.useCallback(()=>{r(164.81,.18,"sawtooth",.035)},[r]),f=o.useCallback(v=>{t.current=v,a(v)},[]);return{soundEnabled:s,toggleSound:f,playMove:c,playScramble:S,playSolved:d,playError:x}}const ye=["Start from a solved cube and watch what a single R turn does.","Scramble the cube with a short sequence.","Ask the solver for the inverse sequence.","Step through solution moves and watch the cube return to solved state."];function Ce(t){return z.find(s=>s.id===t)?.delayMs??450}function bt(){const[t,s]=o.useState("guided"),[a,l]=o.useState(U),[r,c]=o.useState([]),[S,d]=o.useState([]),[x,f]=o.useState([]),[v,p]=o.useState(0),[i,C]=o.useState("R"),[h,w]=o.useState("R U R' U'"),[k,ne]=o.useState(10),[H,N]=o.useState(null),[V,g]=o.useState("Choose a mode and start turning the cube."),[ae,j]=o.useState("manual"),[K,Q]=o.useState("normal"),[$,G]=o.useState(0),[_,J]=o.useState(fe[0]),[D,A]=o.useState(!1),[oe,L]=o.useState(0),[X,F]=o.useState(!1),M=o.useRef(null),Y=o.useRef("normal"),u=gt(),re=o.useMemo(()=>te(a),[a]),b=x.length>0&&v>=x.length,m=o.useCallback(()=>{M.current&&(window.clearInterval(M.current),M.current=null)},[]);o.useEffect(()=>m,[m]);const Me=o.useCallback(n=>{Y.current=n,Q(n)},[]),Re=o.useCallback(()=>{m(),l(U()),c([]),d([]),f([]),p(0),N(null),j("manual"),G(0),A(!1),L(0),F(!1),g("Cube reset to solved state.")},[m]),Le=o.useCallback(n=>{s(n),m(),l(U()),c([]),d([]),f([]),p(0),N(null),j("manual"),G(0),A(!1),L(0),F(!1),g(n==="guided"?"Guided mode: follow the walkthrough to understand cube moves and solving.":n==="freeplay"?"Freeplay mode: scramble, turn, and solve however you like.":"Challenge mode: solve the scramble in as few moves as possible.")},[m]),q=o.useCallback((n,y=!0)=>{m(),j("manual"),l(E=>{const I=se(E,n);return y&&(c(P=>[...P,n]),t==="challenge"&&D&&!X&&(L(P=>P+1),te(I)&&(F(!0),g("Challenge solved! Compare your move count with the target."),u.playSolved()))),I}),f([]),p(0),N(null),u.playMove(n.charCodeAt(0))},[X,D,m,t,u]),Fe=o.useCallback((n=12)=>{m();const y=Ne(n);l(Z(U(),y)),c(y),d(y),f([]),p(0),j("manual"),A(!1),L(0),F(!1),g(`Scrambled with: ${R(y)}`),u.playScramble()},[m,u]),Ue=o.useCallback(()=>{m();const n=ut(h);if(!n){g("Invalid scramble. Use moves like: R U R' U' or Ri U R U2."),u.playError();return}l(Z(U(),n)),c(n),d(n),f([]),p(0),N(null),j("manual"),A(!1),L(0),F(!1),g(`Custom scramble applied: ${R(n)}`),u.playScramble()},[m,h,u]),Te=o.useCallback((n=_)=>{m(),J(n),l(Z(U(),n.scramble)),c(n.scramble),d(n.scramble),f([]),p(0),N(null),j("manual"),A(!0),L(0),F(!1),g(`Challenge started. Scramble: ${R(n.scramble)}`),u.playScramble()},[m,_,u]),$e=o.useCallback(()=>{m();const n=le(r);f(n),p(0),N(null),j("manual"),g(n.length>0?`Solver found ${n.length} inverse move${n.length===1?"":"s"}.`:"Cube is already solved."),n.length===0&&u.playSolved()},[m,r,u]),ie=o.useCallback(()=>{m(),j("manual");const n=x[v];n&&(l(y=>{const E=se(y,n.move);return te(E)?(g("Solved! The inverse sequence returned the cube to its original state."),u.playSolved()):g(n.description),E}),p(y=>y+1),u.playMove(v))},[m,x,v,u]),De=o.useCallback(()=>{m();const n=x.length>0?x:le(r),y=x.length>0?v:0;if(n.length===0){f([]),p(0),j("manual"),g("Cube is already solved."),u.playSolved();return}if(y>=n.length){j("manual"),g("Solution playback is already complete.");return}x.length===0&&(f(n),p(0)),N(null),j("auto"),g(`Auto-solving ${n.length-y} remaining move${n.length-y===1?"":"s"}.`);const E=()=>{p(I=>{const P=n[I];if(!P)return M.current=null,j("manual"),I;l(Be=>{const me=se(Be,P.move);return te(me)?(g("Auto-solve complete."),u.playSolved()):(g(P.description),u.playMove(I)),me});const ue=I+1;return ue{const n=we(i);if(!n){g("Invalid move. Use notation like R, U', F2, or L'."),u.playError();return}q(n),g(`Applied ${n}.`)},[q,i,u]),Ee=o.useCallback(()=>{const n=mt(k);N(n),g(`Ran ${n.runs} simulated solves. Best: ${n.best.solutionLength} moves, worst: ${n.worst.solutionLength} moves.`)},[k]),Ie=o.useCallback(()=>{const n=r.slice(0,-1);c(n),l(Z(U(),n)),f([]),p(0),j("manual"),g("Undid the last recorded move.")},[r]),Pe=o.useCallback(()=>{if($===0)q("R"),g("R turns the right face clockwise. Notice the side stickers move too.");else if($===1){const n=["R","U","R'","U'"];l(Z(U(),n)),c(n),d(n),g(`Short scramble applied: ${R(n)}`),u.playScramble()}else if($===2){const n=le(r);f(n),p(0),g(`The solver reverses the scramble: ${R(n.map(y=>y.move))}`)}else ie();G(n=>Math.min(n+1,ye.length-1))},[$,q,r,u,ie]);return{mode:t,cube:a,solved:re,moveHistory:r,scrambleMoves:S,solution:x,solutionIndex:v,solutionDone:b,solverPlaybackMode:ae,solverSpeed:K,setSolverSpeed:Me,manualMove:i,setManualMove:C,customScramble:h,setCustomScramble:w,simulationRuns:k,setSimulationRuns:ne,simulationResult:H,message:V,guidedStep:$,guidedScript:ye,selectedChallenge:_,setSelectedChallenge:J,challenges:fe,challengeStarted:D,challengeMoves:oe,challengeSolved:X,soundEnabled:u.soundEnabled,toggleSound:u.toggleSound,switchMode:Le,resetCube:Re,makeMove:q,runScramble:Fe,runCustomScramble:Ue,generateSolution:$e,stepSolution:ie,autoSolve:De,applyManualMove:Ae,undoLastMove:Ie,startChallenge:Te,nextGuidedStep:Pe,simulateSolves:Ee}}const ht=[{id:"guided",label:"Guided Mode",icon:e.jsx(Ve,{size:14})},{id:"freeplay",label:"Freeplay Mode",icon:e.jsx(ze,{size:14})},{id:"challenge",label:"Challenge Mode",icon:e.jsx(qe,{size:14})}];function Nt(){const t=bt();return e.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"shrink-0 border-b border-slate-700/50 bg-slate-900/40 px-4 pt-3 backdrop-blur-sm md:px-6",children:e.jsx("div",{className:"flex gap-1 overflow-x-auto",children:ht.map(s=>e.jsxs("button",{onClick:()=>t.switchMode(s.id),className:`flex items-center gap-1.5 whitespace-nowrap rounded-t-lg px-4 py-2.5 text-xs font-medium transition-all md:text-sm ${t.mode===s.id?"bg-slate-800/80 text-indigo-300 border border-b-0 border-slate-700/50 -mb-px":"text-slate-500 hover:bg-slate-800/30 hover:text-slate-300"}`,children:[s.icon,s.label]},s.id))})}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4 md:p-6",children:e.jsxs("div",{className:"mx-auto flex max-w-6xl flex-col gap-4 md:flex-row md:gap-6",children:[e.jsxs("main",{className:"order-last flex min-w-0 flex-1 flex-col gap-4 md:order-first",children:[e.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm md:p-5",children:[e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold text-white md:text-xl",children:"Rubik's Cube Solver"}),e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-400",children:"Manipulate a 3D Rubik's Cube, generate or enter scrambles, and watch a CFOP-inspired solve sequence step by step."})]}),e.jsx("div",{className:"rounded-full bg-violet-500/10 px-3 py-1 text-[10px] font-semibold text-violet-300 ring-1 ring-violet-500/30",children:"3D Cube"})]}),e.jsx("div",{className:"mt-3 rounded-xl bg-indigo-500/5 px-3 py-2 ring-1 ring-indigo-500/15",children:e.jsxs("p",{className:"text-[11px] leading-relaxed text-slate-300",children:["Move notation: ",e.jsx("span",{className:"font-mono text-cyan-300",children:"R"})," turns a face clockwise,",e.jsx("span",{className:"font-mono text-cyan-300",children:" R'"})," turns it counter-clockwise, and",e.jsx("span",{className:"font-mono text-cyan-300",children:" R2"})," turns it twice. The inverse shorthand",e.jsx("span",{className:"font-mono text-cyan-300",children:" Ri"})," is also accepted."]})})]}),e.jsx(et,{cube:t.cube,solved:t.solved,onMove:t.makeMove})]}),e.jsx(pt,{mode:t.mode,message:t.message,moveHistory:t.moveHistory,scrambleMoves:t.scrambleMoves,solution:t.solution,solutionIndex:t.solutionIndex,solutionDone:t.solutionDone,solverPlaybackMode:t.solverPlaybackMode,solverSpeed:t.solverSpeed,manualMove:t.manualMove,customScramble:t.customScramble,simulationRuns:t.simulationRuns,simulationResult:t.simulationResult,guidedStep:t.guidedStep,guidedScript:t.guidedScript,challenges:t.challenges,selectedChallenge:t.selectedChallenge,challengeStarted:t.challengeStarted,challengeMoves:t.challengeMoves,challengeSolved:t.challengeSolved,soundEnabled:t.soundEnabled,onManualMoveChange:t.setManualMove,onCustomScrambleChange:t.setCustomScramble,onSimulationRunsChange:t.setSimulationRuns,onApplyManualMove:t.applyManualMove,onScramble:t.runScramble,onApplyCustomScramble:t.runCustomScramble,onSimulateSolves:t.simulateSolves,onGenerateSolution:t.generateSolution,onStepSolution:t.stepSolution,onAutoSolve:t.autoSolve,onSolverSpeedChange:t.setSolverSpeed,onUndo:t.undoLastMove,onReset:t.resetCube,onNextGuidedStep:t.nextGuidedStep,onSelectChallenge:t.setSelectedChallenge,onStartChallenge:t.startChallenge,onToggleSound:t.toggleSound})]})})]})}export{Nt as default};
diff --git a/docs/assets/SortingPage-DY4J_cuF.js b/docs/assets/SortingPage-BJLOOKGn.js
similarity index 98%
rename from docs/assets/SortingPage-DY4J_cuF.js
rename to docs/assets/SortingPage-BJLOOKGn.js
index 258dc22..55a5d9b 100644
--- a/docs/assets/SortingPage-DY4J_cuF.js
+++ b/docs/assets/SortingPage-BJLOOKGn.js
@@ -1,4 +1,4 @@
-import{r as n,j as e,d as _}from"./index-lLadk08S.js";import{V as H,a as L}from"./volume-x-CjLNPeax.js";import{S as Q}from"./square-QnQTkqqU.js";import{S as W}from"./shuffle-ADbBlETg.js";import{r as X}from"./index-iw_6MvvU.js";import{g as J}from"./audioContext-NbgqvQGz.js";function K(s,d,o,y){return o&&(s===o[0]||s===o[1])?"bg-rose-500 shadow-lg shadow-rose-500/30":d&&(s===d[0]||s===d[1])?"bg-amber-400 shadow-lg shadow-amber-400/20":y.includes(s)?"bg-emerald-500":"bg-indigo-400/80"}function Y({array:s,comparing:d,swapping:o,sortedIndices:y}){const g=Math.max(...s,1),x=Math.max(2,Math.min(20,Math.floor(900/s.length)-1));return e.jsx("div",{className:"flex h-[500px] items-end justify-center gap-[1px] rounded-xl border border-slate-700/50 bg-slate-950/80 p-6 backdrop-blur-sm shadow-2xl",children:s.map((a,r)=>{const h=a/g*100,t=K(r,d,o,y);return e.jsx("div",{className:`transition-all duration-75 rounded-t-sm ${t}`,style:{height:`${h}%`,width:`${x}px`}},r)})})}const Z=n.memo(Y),ee={slow:100,medium:30,fast:8,instant:0},R={bubble:{name:"Bubble Sort",description:"Repeatedly swaps adjacent elements if they are in the wrong order. Simple but inefficient for large datasets.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!0},selection:{name:"Selection Sort",description:"Finds the minimum element and places it at the beginning. Performs well on small arrays.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!1},insertion:{name:"Insertion Sort",description:"Builds the sorted array one element at a time by inserting each into its correct position.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!0},quick:{name:"Quick Sort",description:"Divides the array using a pivot and recursively sorts the partitions. Very efficient in practice.",timeComplexity:"O(n log n)",spaceComplexity:"O(log n)",stable:!1},heap:{name:"Heap Sort",description:"Builds a max-heap then repeatedly extracts the maximum to build the sorted array.",timeComplexity:"O(n log n)",spaceComplexity:"O(1)",stable:!1},merge:{name:"Merge Sort",description:"Divides the array in half, recursively sorts, then merges. Guarantees consistent performance.",timeComplexity:"O(n log n)",spaceComplexity:"O(n)",stable:!0}},te=["bubble","selection","insertion","quick","heap","merge"],se=["slow","medium","fast","instant"];function ae({algorithm:s,setAlgorithm:d,speed:o,setSpeed:y,arraySize:g,changeArraySize:x,isRunning:a,isFinished:r,currentStep:h,totalSteps:t,soundEnabled:u,onToggleSound:i,onVisualize:f,onStop:c,onGenerateNewArray:S}){const p=R[s];return e.jsxs("div",{className:"flex flex-col gap-5 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Algorithm"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:te.map(l=>e.jsx("button",{onClick:()=>!a&&d(l),disabled:a,className:`
+import{r as n,j as e,d as _}from"./index-CB1-0H6I.js";import{V as H,a as L}from"./volume-x-CKT6TOtL.js";import{S as Q}from"./square-B4KY3il9.js";import{S as W}from"./shuffle-DZnyoAGL.js";import{r as X}from"./index-iw_6MvvU.js";import{g as J}from"./audioContext-NbgqvQGz.js";function K(s,d,o,y){return o&&(s===o[0]||s===o[1])?"bg-rose-500 shadow-lg shadow-rose-500/30":d&&(s===d[0]||s===d[1])?"bg-amber-400 shadow-lg shadow-amber-400/20":y.includes(s)?"bg-emerald-500":"bg-indigo-400/80"}function Y({array:s,comparing:d,swapping:o,sortedIndices:y}){const g=Math.max(...s,1),x=Math.max(2,Math.min(20,Math.floor(900/s.length)-1));return e.jsx("div",{className:"flex h-[500px] items-end justify-center gap-[1px] rounded-xl border border-slate-700/50 bg-slate-950/80 p-6 backdrop-blur-sm shadow-2xl",children:s.map((a,r)=>{const h=a/g*100,t=K(r,d,o,y);return e.jsx("div",{className:`transition-all duration-75 rounded-t-sm ${t}`,style:{height:`${h}%`,width:`${x}px`}},r)})})}const Z=n.memo(Y),ee={slow:100,medium:30,fast:8,instant:0},R={bubble:{name:"Bubble Sort",description:"Repeatedly swaps adjacent elements if they are in the wrong order. Simple but inefficient for large datasets.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!0},selection:{name:"Selection Sort",description:"Finds the minimum element and places it at the beginning. Performs well on small arrays.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!1},insertion:{name:"Insertion Sort",description:"Builds the sorted array one element at a time by inserting each into its correct position.",timeComplexity:"O(n²)",spaceComplexity:"O(1)",stable:!0},quick:{name:"Quick Sort",description:"Divides the array using a pivot and recursively sorts the partitions. Very efficient in practice.",timeComplexity:"O(n log n)",spaceComplexity:"O(log n)",stable:!1},heap:{name:"Heap Sort",description:"Builds a max-heap then repeatedly extracts the maximum to build the sorted array.",timeComplexity:"O(n log n)",spaceComplexity:"O(1)",stable:!1},merge:{name:"Merge Sort",description:"Divides the array in half, recursively sorts, then merges. Guarantees consistent performance.",timeComplexity:"O(n log n)",spaceComplexity:"O(n)",stable:!0}},te=["bubble","selection","insertion","quick","heap","merge"],se=["slow","medium","fast","instant"];function ae({algorithm:s,setAlgorithm:d,speed:o,setSpeed:y,arraySize:g,changeArraySize:x,isRunning:a,isFinished:r,currentStep:h,totalSteps:t,soundEnabled:u,onToggleSound:i,onVisualize:f,onStop:c,onGenerateNewArray:S}){const p=R[s];return e.jsxs("div",{className:"flex flex-col gap-5 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Algorithm"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:te.map(l=>e.jsx("button",{onClick:()=>!a&&d(l),disabled:a,className:`
rounded-lg px-3 py-2 text-sm font-medium transition-all duration-200
${s===l?"bg-indigo-500/20 text-indigo-300 ring-1 ring-indigo-500/40 shadow-lg shadow-indigo-500/10":"bg-slate-800/50 text-slate-400 hover:bg-slate-700/50 hover:text-slate-300"}
disabled:opacity-50 disabled:cursor-not-allowed
diff --git a/docs/assets/StackPage-B2mxdyxa.js b/docs/assets/StackPage-CCdc4dwi.js
similarity index 97%
rename from docs/assets/StackPage-B2mxdyxa.js
rename to docs/assets/StackPage-CCdc4dwi.js
index 237d3ba..41f0d7d 100644
--- a/docs/assets/StackPage-B2mxdyxa.js
+++ b/docs/assets/StackPage-CCdc4dwi.js
@@ -1,4 +1,4 @@
-import{r as l,j as e,E as W}from"./index-lLadk08S.js";import{u as _}from"./useDSSound-CPhif-bj.js";import{P as X}from"./plus-NICMDkhr.js";import{T as q}from"./trash-2-veeiSg5V.js";import{R as B}from"./rotate-ccw-DMjSdzg2.js";import{S as J}from"./shuffle-ADbBlETg.js";import{V as Q,a as U}from"./volume-x-CjLNPeax.js";import{C as Y,a as Z}from"./chevron-right-Cp_zyb7b.js";import"./audioContext-NbgqvQGz.js";let P=1;const ee=[{id:P++,value:3},{id:P++,value:7},{id:P++,value:1}];function te(){const[i,d]=l.useState(ee),[n,u]=l.useState([]),[r,o]=l.useState(-1),[b,j]=l.useState(""),[k,v]=l.useState([]),[h,T]=l.useState(400),[y,p]=l.useState(!1),x=l.useRef(null),w=l.useRef(h),f=l.useRef(!1),{soundEnabled:$,toggleSound:z,playInsert:m,playDelete:N,playAccess:S,playTraverse:I}=_(),a=l.useRef(()=>{});l.useEffect(()=>{w.current=h},[h]),l.useEffect(()=>{if(!f.current||n.length===0)return;f.current=!1,x.current&&clearTimeout(x.current),p(!0);let t=0;const s=()=>{if(t>=n.length-1){p(!1);return}t++,o(t),a.current(t,n),x.current=setTimeout(s,w.current)};x.current=setTimeout(s,w.current)},[n]);const g=l.useCallback((t,s)=>{const c=s[t];c&&(c.highlightColor==="green"?m():c.highlightColor==="red"?N():c.highlightColor==="yellow"&&I(t,s.length))},[m,N,I]);l.useEffect(()=>{a.current=g},[g]);const O=r>=0&&n[r]?n[r].stack:i,L=r>=0?n[r]:null,C=t=>v(s=>[t,...s].slice(0,20)),M=l.useCallback(t=>{const s={id:P++,value:t},c=[];d(E=>{c.push({description:`Pushing ${t} onto the stack...`,stack:E,highlightIndex:null,highlightColor:null});const R=[...E,s];return c.push({description:`${t} placed on top of the stack. Stack size: ${R.length}`,stack:R,highlightIndex:R.length-1,highlightColor:"green"}),u(c),o(0),f.current=!0,m(),C(`Push ${t}`),R})},[m]),H=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[t.length-1],c=[{description:`Peeking at top element: ${s.value}`,stack:t,highlightIndex:t.length-1,highlightColor:"yellow"},{description:`Popping ${s.value} from the top of the stack.`,stack:t,highlightIndex:t.length-1,highlightColor:"red"},{description:`${s.value} removed. Stack size: ${t.length-1}`,stack:t.slice(0,-1),highlightIndex:null,highlightColor:null}];return u(c),o(0),f.current=!0,N(),C(`Pop → ${s.value}`),t.slice(0,-1)})},[N]),V=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[t.length-1],c=[{description:"Peek: reading the top element without removing it.",stack:t,highlightIndex:t.length-1,highlightColor:"yellow"},{description:`Top element is ${s.value}.`,stack:t,highlightIndex:t.length-1,highlightColor:"yellow"}];return u(c),o(0),f.current=!0,S(),C(`Peek → ${s.value}`),t})},[S]),A=l.useCallback(()=>{d([]),u([]),o(-1),C("Clear stack")},[]),G=l.useCallback(()=>{const t=Math.floor(Math.random()*5)+3,s=Array.from({length:t},()=>({id:P++,value:Math.floor(Math.random()*90)+1}));d(s),u([]),o(-1),C("Random stack")},[]),D=l.useCallback(()=>{o(t=>{const s=Math.min(t+1,n.length-1);return g(s,n),s})},[n,g]),F=l.useCallback(()=>{o(t=>Math.max(t-1,0))},[]),K=l.useCallback(()=>{if(y){p(!1),x.current&&clearTimeout(x.current);return}p(!0);let t=r;const s=()=>{if(t>=n.length-1){p(!1);return}t++,o(t),g(t,n),x.current=setTimeout(s,h)};x.current=setTimeout(s,h)},[y,r,n,h,g]);return{stack:i,displayStack:O,steps:n,stepIndex:r,currentStep:L,inputValue:b,setInputValue:j,history:k,speed:h,setSpeed:T,isPlaying:y,push:M,pop:H,peek:V,clear:A,generateRandom:G,nextStep:D,prevStep:F,autoPlay:K,soundEnabled:$,toggleSound:z,canGoNext:r0}}const se={green:"border-emerald-400 bg-emerald-500/20 text-emerald-300",red:"border-rose-400 bg-rose-500/20 text-rose-300",yellow:"border-amber-400 bg-amber-500/20 text-amber-300"};function le({stack:i,currentStep:d}){const n=i.slice(-12),u=d?.highlightIndex??null,r=d?.highlightColor??null;return e.jsxs("div",{className:"flex flex-col items-center justify-end w-full h-full min-h-[300px] md:min-h-[400px] gap-1 pb-6",children:[i.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 text-slate-600",children:[e.jsx("div",{className:"w-32 h-24 border-2 border-dashed border-slate-700 rounded-lg flex items-center justify-center",children:e.jsx("span",{className:"text-xs",children:"Empty Stack"})}),e.jsx("div",{className:"w-32 border-b-2 border-slate-600"})]}),e.jsx("div",{className:"flex flex-col-reverse items-center gap-1.5 w-full max-w-[200px]",children:n.map((o,b)=>{const j=i.length-n.length+b,k=j===u,v=j===i.length-1;return e.jsxs("div",{className:"relative flex items-center gap-2 w-full",children:[v&&e.jsx("span",{className:"absolute -right-14 text-xs font-mono text-indigo-400 whitespace-nowrap",children:"← top"}),e.jsx("div",{className:`
+import{r as l,j as e,E as W}from"./index-CB1-0H6I.js";import{u as _}from"./useDSSound-BJYLYD0f.js";import{P as X}from"./plus-B3nnW8Th.js";import{T as q}from"./trash-2-C4vvSjjZ.js";import{R as B}from"./rotate-ccw-CDlWXRsI.js";import{S as J}from"./shuffle-DZnyoAGL.js";import{V as Q,a as U}from"./volume-x-CKT6TOtL.js";import{C as Y,a as Z}from"./chevron-right-ChVmoNtO.js";import"./audioContext-NbgqvQGz.js";let P=1;const ee=[{id:P++,value:3},{id:P++,value:7},{id:P++,value:1}];function te(){const[i,d]=l.useState(ee),[n,u]=l.useState([]),[r,o]=l.useState(-1),[b,j]=l.useState(""),[k,v]=l.useState([]),[h,T]=l.useState(400),[y,p]=l.useState(!1),x=l.useRef(null),w=l.useRef(h),f=l.useRef(!1),{soundEnabled:$,toggleSound:z,playInsert:m,playDelete:N,playAccess:S,playTraverse:I}=_(),a=l.useRef(()=>{});l.useEffect(()=>{w.current=h},[h]),l.useEffect(()=>{if(!f.current||n.length===0)return;f.current=!1,x.current&&clearTimeout(x.current),p(!0);let t=0;const s=()=>{if(t>=n.length-1){p(!1);return}t++,o(t),a.current(t,n),x.current=setTimeout(s,w.current)};x.current=setTimeout(s,w.current)},[n]);const g=l.useCallback((t,s)=>{const c=s[t];c&&(c.highlightColor==="green"?m():c.highlightColor==="red"?N():c.highlightColor==="yellow"&&I(t,s.length))},[m,N,I]);l.useEffect(()=>{a.current=g},[g]);const O=r>=0&&n[r]?n[r].stack:i,L=r>=0?n[r]:null,C=t=>v(s=>[t,...s].slice(0,20)),M=l.useCallback(t=>{const s={id:P++,value:t},c=[];d(E=>{c.push({description:`Pushing ${t} onto the stack...`,stack:E,highlightIndex:null,highlightColor:null});const R=[...E,s];return c.push({description:`${t} placed on top of the stack. Stack size: ${R.length}`,stack:R,highlightIndex:R.length-1,highlightColor:"green"}),u(c),o(0),f.current=!0,m(),C(`Push ${t}`),R})},[m]),H=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[t.length-1],c=[{description:`Peeking at top element: ${s.value}`,stack:t,highlightIndex:t.length-1,highlightColor:"yellow"},{description:`Popping ${s.value} from the top of the stack.`,stack:t,highlightIndex:t.length-1,highlightColor:"red"},{description:`${s.value} removed. Stack size: ${t.length-1}`,stack:t.slice(0,-1),highlightIndex:null,highlightColor:null}];return u(c),o(0),f.current=!0,N(),C(`Pop → ${s.value}`),t.slice(0,-1)})},[N]),V=l.useCallback(()=>{d(t=>{if(t.length===0)return t;const s=t[t.length-1],c=[{description:"Peek: reading the top element without removing it.",stack:t,highlightIndex:t.length-1,highlightColor:"yellow"},{description:`Top element is ${s.value}.`,stack:t,highlightIndex:t.length-1,highlightColor:"yellow"}];return u(c),o(0),f.current=!0,S(),C(`Peek → ${s.value}`),t})},[S]),A=l.useCallback(()=>{d([]),u([]),o(-1),C("Clear stack")},[]),G=l.useCallback(()=>{const t=Math.floor(Math.random()*5)+3,s=Array.from({length:t},()=>({id:P++,value:Math.floor(Math.random()*90)+1}));d(s),u([]),o(-1),C("Random stack")},[]),D=l.useCallback(()=>{o(t=>{const s=Math.min(t+1,n.length-1);return g(s,n),s})},[n,g]),F=l.useCallback(()=>{o(t=>Math.max(t-1,0))},[]),K=l.useCallback(()=>{if(y){p(!1),x.current&&clearTimeout(x.current);return}p(!0);let t=r;const s=()=>{if(t>=n.length-1){p(!1);return}t++,o(t),g(t,n),x.current=setTimeout(s,h)};x.current=setTimeout(s,h)},[y,r,n,h,g]);return{stack:i,displayStack:O,steps:n,stepIndex:r,currentStep:L,inputValue:b,setInputValue:j,history:k,speed:h,setSpeed:T,isPlaying:y,push:M,pop:H,peek:V,clear:A,generateRandom:G,nextStep:D,prevStep:F,autoPlay:K,soundEnabled:$,toggleSound:z,canGoNext:r0}}const se={green:"border-emerald-400 bg-emerald-500/20 text-emerald-300",red:"border-rose-400 bg-rose-500/20 text-rose-300",yellow:"border-amber-400 bg-amber-500/20 text-amber-300"};function le({stack:i,currentStep:d}){const n=i.slice(-12),u=d?.highlightIndex??null,r=d?.highlightColor??null;return e.jsxs("div",{className:"flex flex-col items-center justify-end w-full h-full min-h-[300px] md:min-h-[400px] gap-1 pb-6",children:[i.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 text-slate-600",children:[e.jsx("div",{className:"w-32 h-24 border-2 border-dashed border-slate-700 rounded-lg flex items-center justify-center",children:e.jsx("span",{className:"text-xs",children:"Empty Stack"})}),e.jsx("div",{className:"w-32 border-b-2 border-slate-600"})]}),e.jsx("div",{className:"flex flex-col-reverse items-center gap-1.5 w-full max-w-[200px]",children:n.map((o,b)=>{const j=i.length-n.length+b,k=j===u,v=j===i.length-1;return e.jsxs("div",{className:"relative flex items-center gap-2 w-full",children:[v&&e.jsx("span",{className:"absolute -right-14 text-xs font-mono text-indigo-400 whitespace-nowrap",children:"← top"}),e.jsx("div",{className:`
flex-1 flex items-center justify-center rounded-lg border-2 h-12 font-bold text-lg
transition-all duration-300
${k&&r?se[r]:"border-slate-600 bg-slate-800/60 text-slate-200"}
diff --git a/docs/assets/SudokuPage-D621aJ2E.js b/docs/assets/SudokuPage-Twa08t7Q.js
similarity index 98%
rename from docs/assets/SudokuPage-D621aJ2E.js
rename to docs/assets/SudokuPage-Twa08t7Q.js
index fa1dca8..5f24a2e 100644
--- a/docs/assets/SudokuPage-D621aJ2E.js
+++ b/docs/assets/SudokuPage-Twa08t7Q.js
@@ -1,4 +1,4 @@
-import{c as R,r as m,j as e}from"./index-lLadk08S.js";import{C as Y,a as ee}from"./chevron-right-Cp_zyb7b.js";import{Z as te}from"./zap-Y8cI0o9G.js";import{S as se}from"./shuffle-ADbBlETg.js";import{R as re}from"./rotate-ccw-DMjSdzg2.js";const le=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],ne=R("circle-check",le);const oe=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],ae=R("loader-circle",oe);const ie=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],ce=R("lock",ie);const de=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],ue=R("pen-line",de);const xe=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],me=R("pencil",xe),I={4:{label:"4×4",boxRows:2,boxCols:2,difficulty:"Easy"},9:{label:"9×9",boxRows:3,boxCols:3,difficulty:"Standard"},16:{label:"16×16",boxRows:4,boxCols:4,difficulty:"Hard"}};function E(s){return I[s]}function fe(s){return s===4?"w-16 h-16 text-2xl":s===9?"w-12 h-12 text-lg":"w-8 h-8 text-[11px]"}function pe(s,t){return s===null?"":t<=9?String(s):s.toString(16).toUpperCase()}function be({grid:s,gridSize:t,isEditing:n,selectedCell:r,onCellClick:l,onCellValueChange:o}){const{boxRows:i,boxCols:a}=E(t),d=fe(t),c=m.useRef(null),h=m.useCallback(b=>{if(!n||!r)return;const{row:p,col:f}=r;if(b.key==="Backspace"||b.key==="Delete"||b.key==="0"){o(p,f,null);return}if(b.key==="ArrowUp"&&p>0){l(p-1,f);return}if(b.key==="ArrowDown"&&p0){l(p,f-1);return}if(b.key==="ArrowRight"&&f=1&&x<=t&&o(p,f,x)}else{const x=parseInt(b.key,16);!isNaN(x)&&x>=1&&x<=t&&o(p,f,x)}},[n,r,t,l,o]);m.useEffect(()=>(window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)),[h]),m.useEffect(()=>{n&&r&&c.current&&c.current.focus()},[n,r]);const g=m.useCallback(b=>{if(!n||!r)return;const p=b.currentTarget.value;if(b.currentTarget.value="",!p)return;const f=p.slice(-1);if(f==="0"){o(r.row,r.col,null);return}if(t<=9){const x=parseInt(f);!isNaN(x)&&x>=1&&x<=t&&o(r.row,r.col,x)}else{const x=parseInt(f,16);!isNaN(x)&&x>=1&&x<=t&&o(r.row,r.col,x)}},[n,r,t,o]),S=m.useCallback((b,p)=>{n&&(l(b,p),setTimeout(()=>c.current?.focus(),0))},[n,l]);return e.jsxs("div",{className:"relative",children:[n&&e.jsx("input",{ref:c,type:"text",inputMode:"numeric",autoComplete:"off",className:"absolute opacity-0 w-0 h-0 pointer-events-none",onInput:g,"aria-label":"Sudoku cell input"}),e.jsx("div",{className:"inline-grid rounded-xl border-2 border-slate-500/60 bg-slate-950/80 backdrop-blur-sm shadow-2xl overflow-hidden",style:{gridTemplateColumns:`repeat(${t}, 1fr)`},children:s.map((b,p)=>b.map((f,x)=>{const N=(x+1)%a===0&&xS(p,x),className:`
+import{c as R,r as m,j as e}from"./index-CB1-0H6I.js";import{C as Y,a as ee}from"./chevron-right-ChVmoNtO.js";import{Z as te}from"./zap-C3nU9HZ_.js";import{S as se}from"./shuffle-DZnyoAGL.js";import{R as re}from"./rotate-ccw-CDlWXRsI.js";const le=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],ne=R("circle-check",le);const oe=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],ae=R("loader-circle",oe);const ie=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],ce=R("lock",ie);const de=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],ue=R("pen-line",de);const xe=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],me=R("pencil",xe),I={4:{label:"4×4",boxRows:2,boxCols:2,difficulty:"Easy"},9:{label:"9×9",boxRows:3,boxCols:3,difficulty:"Standard"},16:{label:"16×16",boxRows:4,boxCols:4,difficulty:"Hard"}};function E(s){return I[s]}function fe(s){return s===4?"w-16 h-16 text-2xl":s===9?"w-12 h-12 text-lg":"w-8 h-8 text-[11px]"}function pe(s,t){return s===null?"":t<=9?String(s):s.toString(16).toUpperCase()}function be({grid:s,gridSize:t,isEditing:n,selectedCell:r,onCellClick:l,onCellValueChange:o}){const{boxRows:i,boxCols:a}=E(t),d=fe(t),c=m.useRef(null),h=m.useCallback(b=>{if(!n||!r)return;const{row:p,col:f}=r;if(b.key==="Backspace"||b.key==="Delete"||b.key==="0"){o(p,f,null);return}if(b.key==="ArrowUp"&&p>0){l(p-1,f);return}if(b.key==="ArrowDown"&&p0){l(p,f-1);return}if(b.key==="ArrowRight"&&f=1&&x<=t&&o(p,f,x)}else{const x=parseInt(b.key,16);!isNaN(x)&&x>=1&&x<=t&&o(p,f,x)}},[n,r,t,l,o]);m.useEffect(()=>(window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)),[h]),m.useEffect(()=>{n&&r&&c.current&&c.current.focus()},[n,r]);const g=m.useCallback(b=>{if(!n||!r)return;const p=b.currentTarget.value;if(b.currentTarget.value="",!p)return;const f=p.slice(-1);if(f==="0"){o(r.row,r.col,null);return}if(t<=9){const x=parseInt(f);!isNaN(x)&&x>=1&&x<=t&&o(r.row,r.col,x)}else{const x=parseInt(f,16);!isNaN(x)&&x>=1&&x<=t&&o(r.row,r.col,x)}},[n,r,t,o]),S=m.useCallback((b,p)=>{n&&(l(b,p),setTimeout(()=>c.current?.focus(),0))},[n,l]);return e.jsxs("div",{className:"relative",children:[n&&e.jsx("input",{ref:c,type:"text",inputMode:"numeric",autoComplete:"off",className:"absolute opacity-0 w-0 h-0 pointer-events-none",onInput:g,"aria-label":"Sudoku cell input"}),e.jsx("div",{className:"inline-grid rounded-xl border-2 border-slate-500/60 bg-slate-950/80 backdrop-blur-sm shadow-2xl overflow-hidden",style:{gridTemplateColumns:`repeat(${t}, 1fr)`},children:s.map((b,p)=>b.map((f,x)=>{const N=(x+1)%a===0&&xS(p,x),className:`
${d} flex items-center justify-center
border border-slate-800/40
${N?"border-r-2 border-r-slate-500/60":""}
diff --git a/docs/assets/TreeTraversalPage-CXh2nfI3.js b/docs/assets/TreeTraversalPage-CzjDdla1.js
similarity index 97%
rename from docs/assets/TreeTraversalPage-CXh2nfI3.js
rename to docs/assets/TreeTraversalPage-CzjDdla1.js
index 0287097..5dd89c8 100644
--- a/docs/assets/TreeTraversalPage-CXh2nfI3.js
+++ b/docs/assets/TreeTraversalPage-CzjDdla1.js
@@ -1,4 +1,4 @@
-import{r as a,j as e}from"./index-lLadk08S.js";import{V as oe,a as ce}from"./volume-x-CjLNPeax.js";import{C as de,a as ue}from"./chevron-right-Cp_zyb7b.js";import{P as xe}from"./play-b2ZiatJ3.js";import{S as me}from"./square-QnQTkqqU.js";import{S as fe}from"./shuffle-ADbBlETg.js";import{R as pe}from"./rotate-ccw-DMjSdzg2.js";import{g as he}from"./audioContext-NbgqvQGz.js";let H=0;function J(t){return{id:H++,value:t,left:null,right:null,x:0,y:0}}function L(t,s){return t?(Math.random()<.5?t.left=L(t.left,s):t.right=L(t.right,s),t):J(s)}function _(t){if(H=0,t<=0)return null;const s=Array.from({length:t},(r,m)=>m+1);for(let r=s.length-1;r>0;r--){const m=Math.floor(Math.random()*(r+1));[s[r],s[m]]=[s[m],s[r]]}let n=null;for(const r of s)n?n=L(n,r):n=J(r);return n&&q(n,0,0,300),n}function q(t,s,n,r){t&&(t.x=n,t.y=s*70,q(t.left,s+1,n-r,r*.55),q(t.right,s+1,n+r,r*.55))}function K(t){const s=[];function n(r){r&&(s.push(r),n(r.left),n(r.right))}return n(t),s}function ge(t){const s=[];function n(r){r&&(r.left&&(s.push({from:r,to:r.left}),n(r.left)),r.right&&(s.push({from:r,to:r.right}),n(r.right)))}return n(t),s}function be({root:t,visitedIds:s,processedIds:n,currentId:r,processOrder:m}){const v=a.useMemo(()=>K(t),[t]),c=a.useMemo(()=>ge(t),[t]),x=Math.min(...v.map(l=>l.x),0)-40,i=Math.max(...v.map(l=>l.x),0)+40,f=Math.max(...v.map(l=>l.y),0)+40,d=i-x+80,u=f+80;return t?e.jsx("div",{className:"flex-1 w-full rounded-xl border border-slate-700/50 bg-slate-950/80 p-4 shadow-2xl backdrop-blur-sm overflow-auto",children:e.jsxs("svg",{viewBox:`${x-40} -20 ${d} ${u}`,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",children:[c.map((l,p)=>e.jsx("line",{x1:l.from.x,y1:l.from.y,x2:l.to.x,y2:l.to.y,stroke:n.has(l.from.id)&&n.has(l.to.id)?"#818cf8":s.has(l.from.id)&&s.has(l.to.id)?"#64748b":"#334155",strokeWidth:2,strokeOpacity:.6},p)),v.map(l=>{const p=l.id===r,S=n.has(l.id),y=s.has(l.id),k=m.indexOf(l.id);let j="#1e293b",N="#475569",w="#94a3b8";return p?(j="#fbbf24",N="#f59e0b",w="#1e293b"):S?(j="#6366f1",N="#818cf8",w="#ffffff"):y&&(j="#334155",N="#64748b",w="#cbd5e1"),e.jsxs("g",{children:[e.jsx("circle",{cx:l.x,cy:l.y,r:22,fill:j,stroke:N,strokeWidth:2.5,className:"transition-all duration-200"}),e.jsx("text",{x:l.x,y:l.y+1,textAnchor:"middle",dominantBaseline:"central",fill:w,fontSize:12,fontWeight:600,fontFamily:"ui-monospace, monospace",children:l.value}),k>=0&&e.jsx("text",{x:l.x+18,y:l.y-18,textAnchor:"middle",dominantBaseline:"central",fill:"#a5b4fc",fontSize:9,fontWeight:700,fontFamily:"ui-monospace, monospace",children:k+1})]},l.id)})]})}):e.jsx("div",{className:"flex flex-1 w-full h-full items-center justify-center rounded-xl border border-slate-700/50 bg-slate-950/80 text-slate-500",children:"No tree generated"})}const D={inorder:{name:"In-Order",description:"Visits left subtree, then root, then right subtree. Produces sorted output for BSTs.",order:"Left → Root → Right"},preorder:{name:"Pre-Order",description:"Visits root first, then left subtree, then right subtree. Useful for copying trees.",order:"Root → Left → Right"},postorder:{name:"Post-Order",description:"Visits left subtree, then right subtree, then root. Useful for deleting trees.",order:"Left → Right → Root"},levelorder:{name:"Level-Order",description:"Visits nodes level by level from top to bottom, left to right. Also known as BFS.",order:"Top → Bottom, Left → Right"}},ve=["inorder","preorder","postorder","levelorder"],je=[{label:"Slow",value:600},{label:"Medium",value:300},{label:"Fast",value:100}];function Ne({traversalType:t,setTraversalType:s,nodeCount:n,stepIndex:r,totalSteps:m,processOrder:v,isPlaying:c,isFinished:x,speed:i,setSpeed:f,soundEnabled:d,onToggleSound:u,canGoNext:l,canGoPrev:p,onGenerate:S,onNextStep:y,onPrevStep:k,onPlay:j,onStop:N,onReset:w}){const g=D[t];return e.jsxs("div",{className:"flex flex-col gap-5 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Traversal"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ve.map(h=>e.jsx("button",{onClick:()=>s(h),disabled:c,className:`
+import{r as a,j as e}from"./index-CB1-0H6I.js";import{V as oe,a as ce}from"./volume-x-CKT6TOtL.js";import{C as de,a as ue}from"./chevron-right-ChVmoNtO.js";import{P as xe}from"./play-SZ6Nqtz8.js";import{S as me}from"./square-B4KY3il9.js";import{S as fe}from"./shuffle-DZnyoAGL.js";import{R as pe}from"./rotate-ccw-CDlWXRsI.js";import{g as he}from"./audioContext-NbgqvQGz.js";let H=0;function J(t){return{id:H++,value:t,left:null,right:null,x:0,y:0}}function L(t,s){return t?(Math.random()<.5?t.left=L(t.left,s):t.right=L(t.right,s),t):J(s)}function _(t){if(H=0,t<=0)return null;const s=Array.from({length:t},(r,m)=>m+1);for(let r=s.length-1;r>0;r--){const m=Math.floor(Math.random()*(r+1));[s[r],s[m]]=[s[m],s[r]]}let n=null;for(const r of s)n?n=L(n,r):n=J(r);return n&&q(n,0,0,300),n}function q(t,s,n,r){t&&(t.x=n,t.y=s*70,q(t.left,s+1,n-r,r*.55),q(t.right,s+1,n+r,r*.55))}function K(t){const s=[];function n(r){r&&(s.push(r),n(r.left),n(r.right))}return n(t),s}function ge(t){const s=[];function n(r){r&&(r.left&&(s.push({from:r,to:r.left}),n(r.left)),r.right&&(s.push({from:r,to:r.right}),n(r.right)))}return n(t),s}function be({root:t,visitedIds:s,processedIds:n,currentId:r,processOrder:m}){const v=a.useMemo(()=>K(t),[t]),c=a.useMemo(()=>ge(t),[t]),x=Math.min(...v.map(l=>l.x),0)-40,i=Math.max(...v.map(l=>l.x),0)+40,f=Math.max(...v.map(l=>l.y),0)+40,d=i-x+80,u=f+80;return t?e.jsx("div",{className:"flex-1 w-full rounded-xl border border-slate-700/50 bg-slate-950/80 p-4 shadow-2xl backdrop-blur-sm overflow-auto",children:e.jsxs("svg",{viewBox:`${x-40} -20 ${d} ${u}`,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",children:[c.map((l,p)=>e.jsx("line",{x1:l.from.x,y1:l.from.y,x2:l.to.x,y2:l.to.y,stroke:n.has(l.from.id)&&n.has(l.to.id)?"#818cf8":s.has(l.from.id)&&s.has(l.to.id)?"#64748b":"#334155",strokeWidth:2,strokeOpacity:.6},p)),v.map(l=>{const p=l.id===r,S=n.has(l.id),y=s.has(l.id),k=m.indexOf(l.id);let j="#1e293b",N="#475569",w="#94a3b8";return p?(j="#fbbf24",N="#f59e0b",w="#1e293b"):S?(j="#6366f1",N="#818cf8",w="#ffffff"):y&&(j="#334155",N="#64748b",w="#cbd5e1"),e.jsxs("g",{children:[e.jsx("circle",{cx:l.x,cy:l.y,r:22,fill:j,stroke:N,strokeWidth:2.5,className:"transition-all duration-200"}),e.jsx("text",{x:l.x,y:l.y+1,textAnchor:"middle",dominantBaseline:"central",fill:w,fontSize:12,fontWeight:600,fontFamily:"ui-monospace, monospace",children:l.value}),k>=0&&e.jsx("text",{x:l.x+18,y:l.y-18,textAnchor:"middle",dominantBaseline:"central",fill:"#a5b4fc",fontSize:9,fontWeight:700,fontFamily:"ui-monospace, monospace",children:k+1})]},l.id)})]})}):e.jsx("div",{className:"flex flex-1 w-full h-full items-center justify-center rounded-xl border border-slate-700/50 bg-slate-950/80 text-slate-500",children:"No tree generated"})}const D={inorder:{name:"In-Order",description:"Visits left subtree, then root, then right subtree. Produces sorted output for BSTs.",order:"Left → Root → Right"},preorder:{name:"Pre-Order",description:"Visits root first, then left subtree, then right subtree. Useful for copying trees.",order:"Root → Left → Right"},postorder:{name:"Post-Order",description:"Visits left subtree, then right subtree, then root. Useful for deleting trees.",order:"Left → Right → Root"},levelorder:{name:"Level-Order",description:"Visits nodes level by level from top to bottom, left to right. Also known as BFS.",order:"Top → Bottom, Left → Right"}},ve=["inorder","preorder","postorder","levelorder"],je=[{label:"Slow",value:600},{label:"Medium",value:300},{label:"Fast",value:100}];function Ne({traversalType:t,setTraversalType:s,nodeCount:n,stepIndex:r,totalSteps:m,processOrder:v,isPlaying:c,isFinished:x,speed:i,setSpeed:f,soundEnabled:d,onToggleSound:u,canGoNext:l,canGoPrev:p,onGenerate:S,onNextStep:y,onPrevStep:k,onPlay:j,onStop:N,onReset:w}){const g=D[t];return e.jsxs("div",{className:"flex flex-col gap-5 w-full md:w-72 shrink-0 overflow-y-auto max-h-full pr-1",children:[e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Traversal"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ve.map(h=>e.jsx("button",{onClick:()=>s(h),disabled:c,className:`
rounded-lg px-3 py-2 text-sm font-medium transition-all duration-200
${t===h?"bg-indigo-500/20 text-indigo-300 ring-1 ring-indigo-500/40 shadow-lg shadow-indigo-500/10":"bg-slate-800/50 text-slate-400 hover:bg-slate-700/50 hover:text-slate-300"}
disabled:opacity-50 disabled:cursor-not-allowed
diff --git a/docs/assets/TriePage-C2SmMNzK.js b/docs/assets/TriePage-DRyr69yQ.js
similarity index 97%
rename from docs/assets/TriePage-C2SmMNzK.js
rename to docs/assets/TriePage-DRyr69yQ.js
index 90cbcdb..12106ba 100644
--- a/docs/assets/TriePage-C2SmMNzK.js
+++ b/docs/assets/TriePage-DRyr69yQ.js
@@ -1,4 +1,4 @@
-import{c as B,r as d,j as e,e as D,X as K}from"./index-lLadk08S.js";import{C as Q,a as H}from"./chevron-right-Cp_zyb7b.js";import{P as J}from"./play-b2ZiatJ3.js";import{S as U}from"./square-QnQTkqqU.js";import{R as Z}from"./rotate-ccw-DMjSdzg2.js";import{P as ee}from"./plus-NICMDkhr.js";import{V as te,a as se}from"./volume-x-CjLNPeax.js";import{g as ne}from"./audioContext-NbgqvQGz.js";const re=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],ae=B("refresh-cw",re);function ie({layout:a,matchedNodeIds:r,currentStepNodeId:o}){const{viewBox:u,edges:l}=d.useMemo(()=>{if(a.length===0)return{viewBox:"0 0 100 100",edges:[]};let s=1/0,n=-1/0,t=1/0,i=-1/0;for(const g of a)s=Math.min(s,g.x),n=Math.max(n,g.x),t=Math.min(t,g.y),i=Math.max(i,g.y);const h=40,x=`${s-h} ${t-h} ${n-s+h*2} ${i-t+h*2}`,c=new Map;for(const g of a)c.set(g.id,g);const m=[];for(const g of a)if(g.parentId&&c.has(g.parentId)){const y=c.get(g.parentId),S=r.has(g.id)&&r.has(y.id);m.push({x1:y.x,y1:y.y,x2:g.x,y2:g.y,highlighted:S})}return{viewBox:x,edges:m}},[a,r]);return a.length===0?e.jsx("div",{className:"flex flex-1 w-full min-h-[200px] items-center justify-center rounded-xl border border-slate-700/50 bg-slate-950/80 text-slate-500 text-sm",children:"Add words to build the trie"}):e.jsx("div",{className:"flex-1 w-full min-h-[200px] rounded-xl border border-slate-700/50 bg-slate-950/80 p-2 shadow-2xl backdrop-blur-sm overflow-hidden",children:e.jsxs("svg",{viewBox:u,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",children:[l.map((s,n)=>e.jsx("line",{x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,stroke:s.highlighted?"#818cf8":"#334155",strokeWidth:s.highlighted?2.5:1.5,strokeOpacity:s.highlighted?1:.5},n)),a.map(s=>{const n=r.has(s.id),t=o===s.id,i=s.depth===0;let h="#1e293b",x="#475569",c="#94a3b8";t?(h="#312e81",x="#818cf8",c="#e0e7ff"):n&&(h="#1e1b4b",x="#6366f1",c="#c7d2fe"),s.isEndOfWord&&!t&&(x=n?"#34d399":"#059669");const m=i?16:14;return e.jsxs("g",{children:[e.jsx("circle",{cx:s.x,cy:s.y,r:m,fill:h,stroke:x,strokeWidth:t?3:2}),t&&e.jsx("circle",{cx:s.x,cy:s.y,r:m+4,fill:"none",stroke:"#818cf8",strokeWidth:1.5,strokeOpacity:.4,className:"animate-pulse"}),e.jsx("text",{x:s.x,y:s.y,textAnchor:"middle",dominantBaseline:"central",fill:c,fontSize:i?10:12,fontWeight:700,fontFamily:"ui-monospace, monospace",children:i?"root":s.char}),s.isEndOfWord&&e.jsx("circle",{cx:s.x+m-2,cy:s.y-m+2,r:4,fill:"#34d399",stroke:"#064e3b",strokeWidth:1})]},s.id)})]})})}function oe({words:a,searchMode:r,setSearchMode:o,query:u,setQuery:l,steps:s,stepIndex:n,searchResults:t,isPlaying:i,canGoNext:h,canGoPrev:x,onSearch:c,onNextStep:m,onPrevStep:g,onPlay:y,onStop:S,onReset:W,newWord:v,setNewWord:M,onAddWord:T,onRemoveWord:N,onLoadSample:C,soundEnabled:k,onToggleSound:P}){const w=n>=0&&ne.jsx("button",{onClick:()=>o(p),className:`
+import{c as B,r as d,j as e,e as D,X as K}from"./index-CB1-0H6I.js";import{C as Q,a as H}from"./chevron-right-ChVmoNtO.js";import{P as J}from"./play-SZ6Nqtz8.js";import{S as U}from"./square-B4KY3il9.js";import{R as Z}from"./rotate-ccw-CDlWXRsI.js";import{P as ee}from"./plus-B3nnW8Th.js";import{V as te,a as se}from"./volume-x-CKT6TOtL.js";import{g as ne}from"./audioContext-NbgqvQGz.js";const re=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],ae=B("refresh-cw",re);function ie({layout:a,matchedNodeIds:r,currentStepNodeId:o}){const{viewBox:u,edges:l}=d.useMemo(()=>{if(a.length===0)return{viewBox:"0 0 100 100",edges:[]};let s=1/0,n=-1/0,t=1/0,i=-1/0;for(const g of a)s=Math.min(s,g.x),n=Math.max(n,g.x),t=Math.min(t,g.y),i=Math.max(i,g.y);const h=40,x=`${s-h} ${t-h} ${n-s+h*2} ${i-t+h*2}`,c=new Map;for(const g of a)c.set(g.id,g);const m=[];for(const g of a)if(g.parentId&&c.has(g.parentId)){const y=c.get(g.parentId),S=r.has(g.id)&&r.has(y.id);m.push({x1:y.x,y1:y.y,x2:g.x,y2:g.y,highlighted:S})}return{viewBox:x,edges:m}},[a,r]);return a.length===0?e.jsx("div",{className:"flex flex-1 w-full min-h-[200px] items-center justify-center rounded-xl border border-slate-700/50 bg-slate-950/80 text-slate-500 text-sm",children:"Add words to build the trie"}):e.jsx("div",{className:"flex-1 w-full min-h-[200px] rounded-xl border border-slate-700/50 bg-slate-950/80 p-2 shadow-2xl backdrop-blur-sm overflow-hidden",children:e.jsxs("svg",{viewBox:u,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",children:[l.map((s,n)=>e.jsx("line",{x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,stroke:s.highlighted?"#818cf8":"#334155",strokeWidth:s.highlighted?2.5:1.5,strokeOpacity:s.highlighted?1:.5},n)),a.map(s=>{const n=r.has(s.id),t=o===s.id,i=s.depth===0;let h="#1e293b",x="#475569",c="#94a3b8";t?(h="#312e81",x="#818cf8",c="#e0e7ff"):n&&(h="#1e1b4b",x="#6366f1",c="#c7d2fe"),s.isEndOfWord&&!t&&(x=n?"#34d399":"#059669");const m=i?16:14;return e.jsxs("g",{children:[e.jsx("circle",{cx:s.x,cy:s.y,r:m,fill:h,stroke:x,strokeWidth:t?3:2}),t&&e.jsx("circle",{cx:s.x,cy:s.y,r:m+4,fill:"none",stroke:"#818cf8",strokeWidth:1.5,strokeOpacity:.4,className:"animate-pulse"}),e.jsx("text",{x:s.x,y:s.y,textAnchor:"middle",dominantBaseline:"central",fill:c,fontSize:i?10:12,fontWeight:700,fontFamily:"ui-monospace, monospace",children:i?"root":s.char}),s.isEndOfWord&&e.jsx("circle",{cx:s.x+m-2,cy:s.y-m+2,r:4,fill:"#34d399",stroke:"#064e3b",strokeWidth:1})]},s.id)})]})})}function oe({words:a,searchMode:r,setSearchMode:o,query:u,setQuery:l,steps:s,stepIndex:n,searchResults:t,isPlaying:i,canGoNext:h,canGoPrev:x,onSearch:c,onNextStep:m,onPrevStep:g,onPlay:y,onStop:S,onReset:W,newWord:v,setNewWord:M,onAddWord:T,onRemoveWord:N,onLoadSample:C,soundEnabled:k,onToggleSound:P}){const w=n>=0&&ne.jsx("button",{onClick:()=>o(p),className:`
flex-1 rounded-lg px-3 py-2.5 text-sm font-medium transition-all duration-200
${r===p?"bg-indigo-500/20 text-indigo-300 ring-1 ring-indigo-500/40 shadow-lg shadow-indigo-500/10":"bg-slate-800/50 text-slate-400 hover:bg-slate-700/50 hover:text-slate-300"}
`,children:p==="prefix"?"Prefix":"Full Word"},p))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Search"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:u,onChange:p=>l(p.target.value),onKeyDown:p=>p.key==="Enter"&&c(),placeholder:r==="prefix"?"Type a prefix...":"Type a word...",className:"flex-1 rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-white placeholder-slate-500 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50"}),e.jsx("button",{onClick:c,disabled:!u.trim(),className:"flex items-center justify-center rounded-lg bg-indigo-500/20 px-3 py-2 text-indigo-300 ring-1 ring-indigo-500/40 transition-all hover:bg-indigo-500/30 disabled:opacity-40 disabled:cursor-not-allowed",children:e.jsx(D,{size:16})})]})]}),s.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Steps"}),e.jsxs("div",{className:"flex gap-2 mb-3",children:[e.jsxs("button",{onClick:g,disabled:!x||i,className:"flex-1 flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:[e.jsx(Q,{size:16})," Prev"]}),i?e.jsx("button",{onClick:S,className:"flex items-center justify-center rounded-lg bg-rose-500/15 px-3 py-2 text-rose-300 ring-1 ring-rose-500/30 transition-all hover:bg-rose-500/25",children:e.jsx(U,{size:14})}):e.jsx("button",{onClick:y,disabled:s.length===0,className:"flex items-center justify-center rounded-lg bg-emerald-500/15 px-3 py-2 text-emerald-300 ring-1 ring-emerald-500/30 transition-all hover:bg-emerald-500/25 disabled:opacity-30 disabled:cursor-not-allowed",children:e.jsx(J,{size:16})}),e.jsxs("button",{onClick:m,disabled:!h||i,className:"flex-1 flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-sm font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300 disabled:opacity-30 disabled:cursor-not-allowed",children:["Next ",e.jsx(H,{size:16})]})]}),e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-xs text-slate-500",children:"Step"}),e.jsxs("span",{className:"text-sm font-mono font-semibold text-indigo-400",children:[Math.max(0,n+1)," / ",s.length]})]}),w&&e.jsx("div",{className:`rounded-lg px-3 py-2 text-xs font-medium ${w.action==="match"||w.action==="prefix-match"?"bg-emerald-500/15 text-emerald-300 ring-1 ring-emerald-500/30":w.action==="not-found"?"bg-rose-500/15 text-rose-300 ring-1 ring-rose-500/30":"bg-slate-800/60 text-slate-300 ring-1 ring-slate-700/50"}`,children:w.description}),e.jsxs("button",{onClick:W,className:"mt-2 w-full flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300",children:[e.jsx(Z,{size:12})," Clear Search"]})]}),t.length>0&&e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:["Results (",t.length,")"]}),e.jsx("div",{className:"flex flex-wrap gap-1.5 max-h-32 overflow-y-auto",children:t.map(p=>e.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-[11px] font-medium text-emerald-300 ring-1 ring-emerald-500/20",children:p},p))})]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:["Words (",a.length,")"]}),e.jsxs("div",{className:"flex gap-2 mb-3",children:[e.jsx("input",{type:"text",value:v,onChange:p=>M(p.target.value),onKeyDown:p=>p.key==="Enter"&&T(),placeholder:"Add a word...",className:"flex-1 rounded-lg bg-slate-800/60 px-3 py-2 text-sm text-white placeholder-slate-500 outline-none ring-1 ring-slate-700/50 focus:ring-indigo-500/50"}),e.jsx("button",{onClick:T,disabled:!v.trim(),className:"flex items-center justify-center rounded-lg bg-emerald-500/15 px-3 py-2 text-emerald-300 ring-1 ring-emerald-500/30 transition-all hover:bg-emerald-500/25 disabled:opacity-40 disabled:cursor-not-allowed",children:e.jsx(ee,{size:16})})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5 max-h-40 overflow-y-auto",children:a.map(p=>e.jsxs("span",{className:"group inline-flex items-center gap-1 rounded-full bg-slate-800/60 px-2.5 py-0.5 text-[11px] font-medium text-slate-400 ring-1 ring-slate-700/40",children:[p,e.jsx("button",{onClick:()=>N(p),className:"opacity-0 group-hover:opacity-100 transition-opacity text-slate-500 hover:text-rose-400",children:e.jsx(K,{size:10})})]},p))}),e.jsxs("button",{onClick:C,className:"mt-3 w-full flex items-center justify-center gap-1.5 rounded-lg bg-slate-800/60 px-3 py-2 text-xs font-medium text-slate-400 transition-all hover:bg-slate-700/60 hover:text-slate-300",children:[e.jsx(ae,{size:12})," Load Sample Words"]})]}),e.jsxs("button",{onClick:P,className:`flex items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-medium transition-all ${k?"bg-indigo-500/15 text-indigo-300 ring-1 ring-indigo-500/30 hover:bg-indigo-500/25":"bg-slate-800/60 text-slate-500 ring-1 ring-slate-700/40 hover:bg-slate-700/60"}`,children:[k?e.jsx(te,{size:16}):e.jsx(se,{size:16}),k?"Sound On":"Sound Off"]}),e.jsxs("div",{className:"rounded-xl border border-slate-700/50 bg-slate-900/60 p-4 backdrop-blur-sm",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400 mb-3",children:"Legend"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-3 rounded-full bg-slate-700 ring-1 ring-slate-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Normal Node"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-3 rounded-full bg-indigo-900 ring-1 ring-indigo-500"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Matched Path"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-3 w-3 rounded-full bg-indigo-900 ring-2 ring-indigo-400"}),e.jsx("span",{className:"text-xs text-slate-400",children:"Current Step"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"relative h-3 w-3 rounded-full bg-slate-700 ring-1 ring-emerald-500",children:e.jsx("div",{className:"absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-emerald-400"})}),e.jsx("span",{className:"text-xs text-slate-400",children:"End of Word"})]})]})]})]})}let F=0;function X(a,r){return{id:`node-${F++}`,char:a,children:new Map,isEndOfWord:!1,depth:r}}function le(){F=0}function ce(a,r){let o=a;for(let u=0;uc[0].localeCompare(m[0]));for(const[,c]of h){const m=u;s(c,n.id),i.push((m+u-1)/2)}const x=i.reduce((c,m)=>c+m,0)/i.length;r.push({id:n.id,char:n.char,isEndOfWord:n.isEndOfWord,x:x*l,y:n.depth*70,parentId:t,depth:n.depth})}return s(a,null),r}const $=["apple","app","ape","apply","bat","ball","ban","cat","car","card","care","dog","do","dot"];function O(a){le();const r=X("",0);for(const o of a)ce(r,o);return r}function he(){const[a,r]=d.useState($),[o,u]=d.useState(()=>O($)),[l,s]=d.useState("prefix"),[n,t]=d.useState(""),[i,h]=d.useState([]),[x,c]=d.useState(-1),[m,g]=d.useState(new Set),[y,S]=d.useState([]),[W,v]=d.useState(!1),[M,T]=d.useState(500),[N,C]=d.useState(""),k=d.useMemo(()=>xe(o),[o]),P=x>=0&&x{if(!n.trim())return;const f=n.trim().toLowerCase(),{result:b,steps:q}=l==="word"?de(o,f):ue(o,f);h(q),c(-1),g(new Set(b.matchedPath)),S(b.matches),v(!1)},[n,l,o]),p=d.useCallback(()=>{c(f=>f{c(f=>f>0?f-1:f)},[]),E=d.useCallback(()=>{i.length!==0&&(v(!0),c(0))},[i]),R=d.useCallback(()=>{v(!1)},[]),j=d.useCallback(()=>{h([]),c(-1),g(new Set),S([]),v(!1)},[]),z=d.useCallback(()=>{const f=N.trim().toLowerCase();if(!f||a.includes(f))return;const b=[...a,f];r(b),u(O(b)),C(""),j()},[N,a,j]),A=d.useCallback(f=>{const b=a.filter(q=>q!==f);r(b),u(O(b)),j()},[a,j]),G=d.useCallback(()=>{r($),u(O($)),C(""),j()},[j]),V=x0;return{words:a,root:o,layout:k,searchMode:l,setSearchMode:s,query:n,setQuery:t,steps:i,stepIndex:x,currentStepNodeId:P,matchedNodeIds:m,searchResults:y,isPlaying:W,speed:M,setSpeed:T,canGoNext:V,canGoPrev:I,search:w,nextStep:p,prevStep:L,play:E,stopPlaying:R,resetSearch:j,newWord:N,setNewWord:C,addWord:z,removeWord:A,loadSampleWords:G}}const _=[261.63,293.66,329.63,392,440,523.25,587.33,659.25];function me(){const a=d.useRef(!0),r=d.useCallback(()=>ne(),[]),o=d.useCallback(t=>{a.current=t},[]),u=d.useCallback(()=>a.current,[]),l=d.useCallback(t=>{if(!a.current)return;const i=r();if(!i)return;const h=_[t%_.length],x=i.createOscillator(),c=i.createGain();x.type="sine",x.frequency.value=h,c.gain.setValueAtTime(.08,i.currentTime),c.gain.exponentialRampToValueAtTime(.001,i.currentTime+.15),x.connect(c),c.connect(i.destination),x.start(),x.stop(i.currentTime+.15)},[r]),s=d.useCallback(()=>{if(!a.current)return;const t=r();if(!t)return;[523.25,659.25,783.99].forEach((h,x)=>{const c=t.createOscillator(),m=t.createGain();c.type="sine",c.frequency.value=h,m.gain.setValueAtTime(.1,t.currentTime+x*.1),m.gain.exponentialRampToValueAtTime(.001,t.currentTime+x*.1+.15),c.connect(m),m.connect(t.destination),c.start(t.currentTime+x*.1),c.stop(t.currentTime+x*.1+.15)})},[r]),n=d.useCallback(()=>{if(!a.current)return;const t=r();if(!t)return;const i=t.createOscillator(),h=t.createGain();i.type="sine",i.frequency.value=350,i.frequency.setValueAtTime(350,t.currentTime),i.frequency.linearRampToValueAtTime(220,t.currentTime+.25),h.gain.setValueAtTime(.08,t.currentTime),h.gain.exponentialRampToValueAtTime(.001,t.currentTime+.3),i.connect(h),h.connect(t.destination),i.start(),i.stop(t.currentTime+.3)},[r]);return{playTraverseTone:l,playMatchTone:s,playNotFoundTone:n,setEnabled:o,isEnabled:u}}function we(){const{words:a,layout:r,searchMode:o,setSearchMode:u,query:l,setQuery:s,steps:n,stepIndex:t,currentStepNodeId:i,matchedNodeIds:h,searchResults:x,isPlaying:c,speed:m,setSpeed:g,canGoNext:y,canGoPrev:S,search:W,nextStep:v,prevStep:M,play:T,stopPlaying:N,resetSearch:C,newWord:k,setNewWord:P,addWord:w,removeWord:p,loadSampleWords:L}=he(),{playTraverseTone:E,playMatchTone:R,playNotFoundTone:j,setEnabled:z}=me(),[A,G]=d.useState(!0),V=()=>{const b=!A;G(b),z(b)},I=d.useRef(t);d.useEffect(()=>{if(t<0||t===I.current){I.current=t;return}I.current=t;const b=n[t];b&&(b.action==="visit"?E(b.char?b.char.charCodeAt(0)%8:0):b.action==="match"||b.action==="prefix-match"?R():b.action==="not-found"&&j())},[t,n,E,R,j]);const f=d.useRef(null);return d.useEffect(()=>{if(!c){f.current&&clearTimeout(f.current);return}if(!y){N();return}return f.current=setTimeout(()=>{v()},m),()=>{f.current&&clearTimeout(f.current)}},[c,t,y,m,v,N]),e.jsxs("div",{className:"flex flex-1 flex-col md:flex-row gap-4 md:gap-6 overflow-auto p-4 md:p-6",children:[e.jsx(oe,{words:a,searchMode:o,setSearchMode:u,query:l,setQuery:s,steps:n,stepIndex:t,searchResults:x,isPlaying:c,speed:m,setSpeed:g,canGoNext:y,canGoPrev:S,onSearch:W,onNextStep:v,onPrevStep:M,onPlay:T,onStop:N,onReset:C,newWord:k,setNewWord:P,onAddWord:w,onRemoveWord:p,onLoadSample:L,soundEnabled:A,onToggleSound:V}),e.jsx("div",{className:"order-last md:order-first flex md:flex-1 flex-col items-center justify-center gap-3 min-h-[40vh] md:min-h-0 max-h-[50vh] md:max-h-none overflow-auto",children:e.jsx(ie,{layout:r,matchedNodeIds:h,currentStepNodeId:i})})]})}export{we as default};
diff --git a/docs/assets/WorldMapGamePage-BfAD3dv0.js b/docs/assets/WorldMapGamePage-DMM-CLOk.js
similarity index 99%
rename from docs/assets/WorldMapGamePage-BfAD3dv0.js
rename to docs/assets/WorldMapGamePage-DMM-CLOk.js
index 92da186..f1bad42 100644
--- a/docs/assets/WorldMapGamePage-BfAD3dv0.js
+++ b/docs/assets/WorldMapGamePage-DMM-CLOk.js
@@ -1 +1 @@
-import{c as te,r as b,j as t,P as se}from"./index-lLadk08S.js";import{S as ae}from"./shuffle-ADbBlETg.js";import{C as oe,a as ne}from"./chevron-right-Cp_zyb7b.js";import{P as re}from"./play-b2ZiatJ3.js";import{R as ie}from"./route-DiDkH3-5.js";import{V as le,a as ce}from"./volume-x-CjLNPeax.js";import{g as de}from"./audioContext-NbgqvQGz.js";const ue=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],he=te("radar",ue),pe=[{name:"North America",path:"M45 82C82 46 145 49 196 75C229 59 287 72 331 102C366 126 369 165 337 188C312 207 287 210 264 235C232 268 178 250 149 222C118 192 78 187 56 150C38 119 28 99 45 82Z",fill:"#14532d"},{name:"Greenland",path:"M285 42C332 20 390 35 404 75C388 111 325 119 286 92C267 78 265 55 285 42Z",fill:"#475569"},{name:"Central America",path:"M246 230C277 232 307 242 329 263C307 276 273 267 246 249C232 240 232 231 246 230Z",fill:"#166534"},{name:"South America",path:"M308 264C352 270 383 315 372 374C364 424 334 474 296 483C281 443 259 405 264 359C269 314 281 281 308 264Z",fill:"#15803d"},{name:"Europe",path:"M438 122C470 96 535 91 575 117C602 137 593 166 558 176C522 186 489 177 454 165C427 156 416 139 438 122Z",fill:"#0f766e"},{name:"Africa",path:"M498 202C553 184 612 223 627 283C640 336 608 409 552 425C514 397 484 340 482 283C480 244 482 216 498 202Z",fill:"#166534"},{name:"Middle East",path:"M572 188C615 178 657 196 674 226C648 245 603 239 580 217C568 206 565 194 572 188Z",fill:"#3f6212"},{name:"Asia",path:"M600 111C683 52 842 83 927 168C910 223 836 246 775 229C728 216 703 257 655 244C611 232 566 159 600 111Z",fill:"#164e63"},{name:"Southeast Asia",path:"M728 252C772 247 824 281 833 322C800 335 755 317 728 287C714 271 714 258 728 252Z",fill:"#0f766e"},{name:"Australia",path:"M794 350C850 316 932 335 949 394C897 437 813 426 774 381C760 365 771 354 794 350Z",fill:"#15803d"},{name:"New Zealand",path:"M958 420C979 425 987 448 970 461C951 456 941 432 958 420Z",fill:"#15803d"}],xe=["M186 78C184 128 197 172 230 214","M126 172C171 164 216 173 260 190","M231 237C262 244 292 252 323 263","M303 280C329 305 342 335 335 374","M336 312C350 304 362 304 376 318","M451 140C482 132 515 134 548 149","M496 171C501 144 518 124 545 111","M529 196C540 236 540 277 530 321","M565 223C594 250 611 286 617 329","M591 190C613 203 639 212 671 221","M638 130C675 145 713 153 754 153","M690 184C729 192 768 201 808 216","M757 238C759 278 770 303 807 320","M835 153C841 191 832 219 808 236","M831 365C861 384 892 394 928 396"],me=[{text:"CANADA",x:160,y:118},{text:"UNITED STATES",x:190,y:178},{text:"MEXICO",x:250,y:222},{text:"BRAZIL",x:338,y:336},{text:"ARGENTINA",x:315,y:424},{text:"EUROPE",x:507,y:139},{text:"NORTH AFRICA",x:548,y:246},{text:"SOUTH AFRICA",x:560,y:390},{text:"MIDDLE EAST",x:632,y:210},{text:"INDIA",x:710,y:232},{text:"CHINA",x:779,y:173},{text:"JAPAN",x:890,y:161},{text:"SOUTHEAST ASIA",x:770,y:295},{text:"AUSTRALIA",x:860,y:390}];function ge({airports:s,routes:i,source:n,destination:l,currentStep:o,plan:u,flightProgress:c,onSelectSource:x,onSelectDestination:m}){const h=b.useMemo(()=>new Map(s.map(a=>[a.code,a])),[s]),j=new Set(o?.visited??[]),y=new Set((o?.frontier??[]).map(a=>a.code)),S=o?.route?.length?o.route:u.path,g=new Set(S.slice(0,-1).map((a,d)=>[a,S[d+1]].sort().join("-"))),p=o?.relaxedRoute?[o.relaxedRoute.from,o.relaxedRoute.to].sort().join("-"):null,k=b.useMemo(()=>{if(!c)return null;const a=h.get(c.from),d=h.get(c.to);if(!a||!d)return null;const f=Math.sin(c.progress*Math.PI)*-44;return{x:a.x+(d.x-a.x)*c.progress,y:a.y+(d.y-a.y)*c.progress+f,angle:Math.atan2(d.y-a.y,d.x-a.x)*(180/Math.PI)}},[h,c]);return t.jsxs("div",{className:"relative min-h-[620px] flex-1 overflow-hidden rounded-[1.75rem] border border-slate-700/50 bg-slate-950/90 shadow-2xl shadow-black/40",children:[t.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_18%_22%,rgba(14,165,233,0.16),transparent_28%),radial-gradient(circle_at_78%_72%,rgba(59,130,246,0.12),transparent_30%)]"}),t.jsxs("div",{className:"absolute left-5 top-5 z-20 rounded-2xl border border-slate-700/60 bg-slate-950/85 p-4 shadow-xl shadow-black/30 backdrop-blur-sm",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-sky-400",children:"Global Air Traffic Network"}),t.jsxs("div",{className:"mt-2 flex gap-4 text-xs text-slate-300",children:[t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:s.length})," airports"]}),t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:i.length})," routes"]}),t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:u.path.length||0})," hops"]})]})]}),o&&t.jsxs("div",{className:"absolute bottom-5 left-5 z-20 max-w-md rounded-2xl border border-slate-700/60 bg-slate-950/90 p-4 shadow-xl shadow-black/35 backdrop-blur-sm",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-indigo-300",children:"Algorithm Radar"}),t.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-300",children:o.description}),o.frontier.length>0&&t.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:o.frontier.slice(0,7).map(a=>t.jsxs("span",{className:"rounded-full bg-sky-500/10 px-2 py-1 text-[10px] font-mono font-semibold text-sky-300 ring-1 ring-sky-500/25",children:[a.code,": ",Number.isFinite(a.priority)?a.priority:"∞"]},`${a.code}-${a.priority}`))})]}),t.jsxs("svg",{viewBox:"0 0 1000 520",className:"relative z-10 h-full w-full",preserveAspectRatio:"xMidYMid meet",children:[t.jsxs("defs",{children:[t.jsxs("filter",{id:"world-glow",x:"-40%",y:"-40%",width:"180%",height:"180%",children:[t.jsx("feGaussianBlur",{stdDeviation:"4",result:"blur"}),t.jsxs("feMerge",{children:[t.jsx("feMergeNode",{in:"blur"}),t.jsx("feMergeNode",{in:"SourceGraphic"})]})]}),t.jsx("filter",{id:"world-shadow",x:"-60%",y:"-60%",width:"220%",height:"220%",children:t.jsx("feDropShadow",{dx:"0",dy:"8",stdDeviation:"6",floodColor:"#020617",floodOpacity:"0.7"})}),t.jsxs("linearGradient",{id:"ocean",x1:"0",x2:"1",y1:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:"#07111f"}),t.jsx("stop",{offset:"55%",stopColor:"#082f49"}),t.jsx("stop",{offset:"100%",stopColor:"#020617"})]})]}),t.jsx("rect",{width:"1000",height:"520",rx:"28",fill:"url(#ocean)"}),[130,260,390].map(a=>t.jsx("path",{d:`M0 ${a}H1000`,stroke:"#38bdf8",strokeOpacity:"0.1",strokeDasharray:"7 10"},`lat-${a}`)),[125,250,375,500,625,750,875].map(a=>t.jsx("path",{d:`M${a} 0V520`,stroke:"#38bdf8",strokeOpacity:"0.08",strokeDasharray:"7 10"},`lon-${a}`)),t.jsx("path",{d:"M0 260H1000",stroke:"#67e8f9",strokeOpacity:"0.2",strokeDasharray:"8 9"}),t.jsx("path",{d:"M500 0V520",stroke:"#67e8f9",strokeOpacity:"0.14",strokeDasharray:"8 9"}),t.jsx("g",{filter:"url(#world-shadow)",children:pe.map(a=>t.jsx("path",{d:a.path,fill:a.fill,fillOpacity:"0.78",stroke:"#a7f3d0",strokeOpacity:"0.42",strokeWidth:"1.8"},a.name))}),t.jsx("g",{children:xe.map(a=>t.jsx("path",{d:a,fill:"none",stroke:"#d1fae5",strokeOpacity:"0.22",strokeWidth:"1",strokeDasharray:"4 5"},a))}),t.jsx("g",{children:me.map(a=>t.jsx("text",{x:a.x,y:a.y,textAnchor:"middle",fontSize:"11",fontWeight:"800",letterSpacing:"1.4",fill:"#e2e8f0",fillOpacity:"0.28",children:a.text},a.text))}),i.map(a=>{const d=h.get(a.source),f=h.get(a.destination);if(!d||!f)return null;const M=[a.source,a.destination].sort().join("-"),N=g.has(M),L=M===p,D=L?"#facc15":N?"#22c55e":"#334155",R=Math.min(120,Math.abs(d.x-f.x)*.12+28),I=(d.x+f.x)/2,K=(d.y+f.y)/2-R;return t.jsx("g",{children:t.jsx("path",{d:`M${d.x},${d.y} Q${I},${K} ${f.x},${f.y}`,fill:"none",stroke:D,strokeWidth:N||L?3:1.2,strokeOpacity:N||L?.92:.24,strokeDasharray:N?void 0:"5 8",filter:N||L?"url(#world-glow)":void 0})},a.id)}),s.map(a=>{const d=a.code===n,f=a.code===l,M=j.has(a.code),N=y.has(a.code),L=o?.airportCode===a.code,D=d||f||L||N||M||a.hubScore>=92,R=d?"#fde047":f?"#fb923c":L?"#38bdf8":M?"#22c55e":N?"#a78bfa":"#94a3b8";return t.jsxs("g",{className:"cursor-pointer",children:[t.jsxs("title",{children:[a.code," - ",a.city,", ",a.country]}),t.jsx("circle",{cx:a.x,cy:a.y,r:d||f?12:8,fill:"#020617",stroke:"#0f172a",strokeWidth:7,filter:"url(#world-shadow)"}),t.jsx("circle",{cx:a.x,cy:a.y,r:d||f?9:6,fill:R,fillOpacity:d||f||M||N||L?.96:.58,stroke:R,strokeWidth:L?4:2,onClick:I=>{I.shiftKey?m(a.code):x(a.code)}}),D&&t.jsx("text",{x:a.x,y:a.y-14,textAnchor:"middle",fontSize:"10",fontWeight:"800",fontFamily:"ui-monospace, monospace",fill:R,children:a.code})]},a.code)}),k&&t.jsxs("g",{transform:`translate(${k.x} ${k.y}) rotate(${k.angle})`,filter:"url(#world-glow)",children:[t.jsx("path",{d:"M-14 -5L18 0L-14 5L-8 0Z",fill:"#f8fafc",stroke:"#38bdf8",strokeWidth:"1.2"}),t.jsx("path",{d:"M-5 -3L-12 -13L2 -4Z",fill:"#bae6fd",opacity:"0.9"}),t.jsx("path",{d:"M-5 3L-12 13L2 4Z",fill:"#bae6fd",opacity:"0.9"})]})]}),t.jsxs("div",{className:"absolute bottom-5 right-5 z-20 hidden rounded-2xl border border-slate-700/60 bg-slate-950/85 p-4 text-[10px] text-slate-400 shadow-xl shadow-black/30 backdrop-blur-sm sm:block",children:[t.jsx("div",{className:"mb-2 font-semibold uppercase tracking-[0.24em] text-slate-500",children:"Tip"}),"Click an airport to set origin. Shift-click to set destination."]})]})}const O={dijkstra:{label:"Dijkstra",description:"Finds the lowest total travel time by relaxing routes through a priority queue.",metric:"Shortest time"},astar:{label:"A* Search",description:"Uses distance-to-destination as a heuristic to guide the priority queue.",metric:"Guided shortest path"},bfs:{label:"BFS",description:"Ignores weights and searches by fewest airport connections.",metric:"Fewest stops"},greedy:{label:"Greedy",description:"Always flies toward the airport geographically closest to the destination.",metric:"Nearest-looking route"}},fe=["dijkstra","astar","bfs","greedy"];function be({airports:s,scenarios:i,source:n,destination:l,algorithm:o,plan:u,currentStep:c,stepIndex:x,totalSteps:m,phase:h,isPlaying:j,soundEnabled:y,onSourceChange:S,onDestinationChange:g,onAlgorithmChange:p,onLoadScenario:k,onPlanRoute:a,onStepBack:d,onStepForward:f,onPlay:M,onFly:N,onToggleSound:L}){return t.jsxs("aside",{className:"flex w-full shrink-0 flex-col gap-4 overflow-y-auto xl:w-88",children:[t.jsxs("section",{className:"rounded-2xl border border-sky-500/20 bg-slate-950/75 p-4 shadow-2xl shadow-black/30 backdrop-blur-sm",children:[t.jsxs("div",{className:"mb-3 flex items-center gap-3",children:[t.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-sky-500/15 text-sky-300 ring-1 ring-sky-500/30",children:t.jsx(se,{size:18})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-sm font-bold text-white",children:"World Flight Planner"}),t.jsx("p",{className:"text-[10px] text-slate-500",children:"Airport-code simulator inspired by public airport datasets."})]})]}),t.jsx("p",{className:"text-xs leading-relaxed text-slate-400",children:"Pick countries through their major airport codes, then compare how different algorithms choose routes across global hubs."})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Travel Request"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(X,{label:"Origin",value:n,airports:s,onChange:S}),t.jsx(X,{label:"Destination",value:l,airports:s,onChange:g})]}),t.jsxs("button",{onClick:a,className:"mt-3 flex w-full items-center justify-center gap-2 rounded-xl bg-sky-500/15 px-3 py-2 text-xs font-semibold text-sky-300 ring-1 ring-sky-500/30 transition hover:bg-sky-500/25",children:[t.jsx(he,{size:13})," Recalculate route"]})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Algorithms"}),t.jsx("div",{className:"grid gap-2",children:fe.map(D=>t.jsxs("button",{onClick:()=>p(D),className:`rounded-xl p-3 text-left transition ${o===D?"bg-indigo-500/15 text-indigo-200 ring-1 ring-indigo-500/35":"bg-slate-900/70 text-slate-400 ring-1 ring-slate-800/80 hover:bg-slate-800/80"}`,children:[t.jsxs("span",{className:"flex items-center justify-between text-xs font-bold",children:[O[D].label,t.jsx("span",{className:"text-[9px] uppercase tracking-wider opacity-60",children:O[D].metric})]}),t.jsx("span",{className:"mt-1 block text-[10px] leading-snug opacity-75",children:O[D].description})]},D))})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Preset Missions"}),t.jsx("div",{className:"grid gap-2",children:i.map(D=>t.jsxs("button",{onClick:()=>k(D.id),className:"rounded-xl bg-slate-900/70 p-3 text-left ring-1 ring-slate-800/80 transition hover:bg-slate-800/80",children:[t.jsxs("span",{className:"flex items-center gap-2 text-xs font-bold text-slate-200",children:[t.jsx(ae,{size:12})," ",D.title]}),t.jsx("span",{className:"mt-1 block text-[10px] leading-snug text-slate-500",children:D.description})]},D.id))})]}),t.jsxs("section",{className:"rounded-2xl border border-emerald-500/20 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[t.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Flight Plan"}),t.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2 py-0.5 text-[9px] font-bold uppercase tracking-wider text-emerald-300 ring-1 ring-emerald-500/25",children:h})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(H,{label:"Distance",value:`${u.totalDistanceKm.toLocaleString()} km`}),t.jsx(H,{label:"Duration",value:`${u.totalDurationHours}h`}),t.jsx(H,{label:"Stops",value:u.stops.toString()}),t.jsx(H,{label:"Est. Cost",value:`$${u.totalCostUsd.toLocaleString()}`})]}),t.jsxs("div",{className:"mt-3 rounded-xl bg-slate-900/70 p-3 ring-1 ring-slate-800/80",children:[t.jsx("p",{className:"mb-2 text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Route"}),t.jsx("div",{className:"flex flex-wrap gap-1",children:u.path.map((D,R)=>t.jsx("span",{className:"rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-mono font-semibold text-emerald-300 ring-1 ring-emerald-500/20",children:D},`${D}-${R}`))})]})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Simulation"}),t.jsxs("div",{className:"mb-3 flex items-center justify-between text-[10px] text-slate-500",children:[t.jsx("span",{children:"Step"}),t.jsxs("span",{className:"font-mono text-indigo-300",children:[Math.min(x+1,m)," / ",m]})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[t.jsxs("button",{onClick:d,disabled:x<=0,className:"flex items-center justify-center gap-1 rounded-xl bg-slate-900/70 px-2 py-2 text-xs text-slate-400 ring-1 ring-slate-800/80 disabled:opacity-30",children:[t.jsx(oe,{size:13})," Back"]}),t.jsxs("button",{onClick:M,className:"flex items-center justify-center gap-1 rounded-xl bg-indigo-500/15 px-2 py-2 text-xs font-semibold text-indigo-300 ring-1 ring-indigo-500/30",children:[t.jsx(re,{size:13})," ",j?"Pause":"Play"]}),t.jsxs("button",{onClick:f,disabled:x>=m-1,className:"flex items-center justify-center gap-1 rounded-xl bg-slate-900/70 px-2 py-2 text-xs text-slate-400 ring-1 ring-slate-800/80 disabled:opacity-30",children:["Next ",t.jsx(ne,{size:13})]})]}),t.jsxs("button",{onClick:N,className:"mt-2 flex w-full items-center justify-center gap-2 rounded-xl bg-emerald-500/15 px-3 py-2 text-xs font-semibold text-emerald-300 ring-1 ring-emerald-500/30 transition hover:bg-emerald-500/25",children:[t.jsx(ie,{size:13})," Animate airplane"]}),c&&t.jsx("p",{className:"mt-3 text-xs leading-relaxed text-slate-400",children:c.description})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Audio"}),t.jsxs("button",{onClick:()=>L(!y),className:`flex w-full items-center justify-center gap-2 rounded-xl px-3 py-2 text-xs font-semibold ring-1 transition ${y?"bg-sky-500/15 text-sky-300 ring-sky-500/30 hover:bg-sky-500/25":"bg-slate-900/70 text-slate-400 ring-slate-800/80 hover:bg-slate-800/80"}`,children:[y?t.jsx(le,{size:13}):t.jsx(ce,{size:13}),y?"Sound On":"Sound Off"]}),t.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Radar pings mark search steps, with takeoff, waypoint, and arrival tones during flight."})]})]})}function X({label:s,value:i,airports:n,onChange:l}){return t.jsxs("label",{className:"block",children:[t.jsx("span",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:s}),t.jsx("select",{value:i,onChange:o=>l(o.target.value),className:"w-full rounded-xl border border-slate-700 bg-slate-900 px-3 py-2 text-xs font-mono text-slate-200 outline-none ring-sky-500/20 focus:ring-2",children:n.map(o=>t.jsxs("option",{value:o.code,children:[o.code," - ",o.city]},o.code))})]})}function H({label:s,value:i}){return t.jsxs("div",{className:"rounded-xl bg-slate-900/70 p-3 ring-1 ring-slate-800/80",children:[t.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-slate-500",children:s}),t.jsx("div",{className:"mt-1 font-mono text-sm font-black text-white",children:i})]})}function Ae(s,i){return{x:(s+180)/360*1e3,y:(90-i)/180*520}}function r(s,i,n,l,o,u,c){return{code:s,city:i,country:n,region:l,lat:o,lon:u,hubScore:c,...Ae(u,o)}}const F=[r("ATL","Atlanta","United States","North America",33.6407,-84.4277,98),r("ORD","Chicago","United States","North America",41.9742,-87.9073,96),r("DFW","Dallas-Fort Worth","United States","North America",32.8998,-97.0403,94),r("JFK","New York","United States","North America",40.6413,-73.7781,96),r("LAX","Los Angeles","United States","North America",33.9416,-118.4085,94),r("MIA","Miami","United States","North America",25.7959,-80.287,88),r("SEA","Seattle","United States","North America",47.4502,-122.3088,84),r("SFO","San Francisco","United States","North America",37.6213,-122.379,90),r("YVR","Vancouver","Canada","North America",49.1967,-123.1815,76),r("YYZ","Toronto","Canada","North America",43.6777,-79.6248,78),r("MEX","Mexico City","Mexico","North America",19.4361,-99.0719,76),r("BOG","Bogota","Colombia","South America",4.7016,-74.1469,78),r("LIM","Lima","Peru","South America",-12.0219,-77.1143,76),r("EZE","Buenos Aires","Argentina","South America",-34.8222,-58.5358,74),r("GRU","Sao Paulo","Brazil","South America",-23.4356,-46.4731,84),r("SCL","Santiago","Chile","South America",-33.3928,-70.7858,72),r("AMS","Amsterdam","Netherlands","Europe",52.3105,4.7683,93),r("ARN","Stockholm","Sweden","Europe",59.6498,17.9238,70),r("ATH","Athens","Greece","Europe",37.9364,23.9445,72),r("BCN","Barcelona","Spain","Europe",41.2974,2.0833,76),r("BRU","Brussels","Belgium","Europe",50.9014,4.4844,74),r("CPH","Copenhagen","Denmark","Europe",55.618,12.6561,74),r("LHR","London","United Kingdom","Europe",51.47,-.4543,98),r("CDG","Paris","France","Europe",49.0097,2.5479,94),r("DUB","Dublin","Ireland","Europe",53.4264,-6.2499,70),r("FCO","Rome","Italy","Europe",41.8003,12.2389,78),r("FRA","Frankfurt","Germany","Europe",50.0379,8.5622,96),r("HEL","Helsinki","Finland","Europe",60.3172,24.9633,70),r("LIS","Lisbon","Portugal","Europe",38.7742,-9.1342,70),r("MAD","Madrid","Spain","Europe",40.4983,-3.5676,82),r("MUC","Munich","Germany","Europe",48.3538,11.7861,84),r("VIE","Vienna","Austria","Europe",48.1103,16.5697,76),r("WAW","Warsaw","Poland","Europe",52.1657,20.9671,70),r("ZRH","Zurich","Switzerland","Europe",47.4581,8.5555,82),r("IST","Istanbul","Turkey","Europe/Asia",41.2753,28.7519,92),r("ADD","Addis Ababa","Ethiopia","Africa",8.9779,38.7993,82),r("CMN","Casablanca","Morocco","Africa",33.3675,-7.58997,74),r("CAI","Cairo","Egypt","Africa",30.112,31.4003,70),r("CPT","Cape Town","South Africa","Africa",-33.9715,18.6021,70),r("LOS","Lagos","Nigeria","Africa",6.5774,3.3212,72),r("JNB","Johannesburg","South Africa","Africa",-26.1337,28.242,80),r("NBO","Nairobi","Kenya","Africa",-1.3192,36.9278,68),r("AUH","Abu Dhabi","United Arab Emirates","Middle East",24.433,54.6511,82),r("DXB","Dubai","United Arab Emirates","Middle East",25.2532,55.3657,99),r("DOH","Doha","Qatar","Middle East",25.2731,51.6081,88),r("JED","Jeddah","Saudi Arabia","Middle East",21.6796,39.1565,78),r("RUH","Riyadh","Saudi Arabia","Middle East",24.9576,46.6988,76),r("TLV","Tel Aviv","Israel","Middle East",32.0114,34.8867,74),r("BKK","Bangkok","Thailand","Asia",13.69,100.7501,88),r("BLR","Bengaluru","India","Asia",13.1986,77.7066,76),r("BOM","Mumbai","India","Asia",19.0896,72.8656,84),r("CAN","Guangzhou","China","Asia",23.3924,113.2988,86),r("CGK","Jakarta","Indonesia","Asia",-6.1256,106.6559,82),r("DEL","Delhi","India","Asia",28.5562,77.1,86),r("HKG","Hong Kong","China","Asia",22.308,113.9185,92),r("SIN","Singapore","Singapore","Asia",1.3644,103.9915,96),r("ICN","Seoul","South Korea","Asia",37.4602,126.4407,94),r("KUL","Kuala Lumpur","Malaysia","Asia",2.7456,101.7072,82),r("MNL","Manila","Philippines","Asia",14.5086,121.0194,78),r("PEK","Beijing","China","Asia",40.0799,116.6031,90),r("PVG","Shanghai","China","Asia",31.1443,121.8083,92),r("TPE","Taipei","Taiwan","Asia",25.0797,121.2342,82),r("HND","Tokyo","Japan","Asia",35.5494,139.7798,95),r("BNE","Brisbane","Australia","Oceania",-27.3842,153.1175,70),r("MEL","Melbourne","Australia","Oceania",-37.669,144.841,78),r("PER","Perth","Australia","Oceania",-31.9403,115.9672,72),r("SYD","Sydney","Australia","Oceania",-33.9399,151.1753,84),r("AKL","Auckland","New Zealand","Oceania",-37.0082,174.785,66)],V=new Map(F.map(s=>[s.code,s]));function ye(s,i){const l=h=>h*Math.PI/180,o=l(i.lat-s.lat),u=l(i.lon-s.lon),c=l(s.lat),x=l(i.lat),m=Math.sin(o/2)**2+Math.cos(c)*Math.cos(x)*Math.sin(u/2)**2;return Math.round(2*6371*Math.asin(Math.sqrt(m)))}function e(s,i){const n=V.get(s),l=V.get(i);if(!n||!l)throw new Error(`Unknown airport route: ${s}-${i}`);const o=ye(n,l);return{id:`${s}-${i}`,source:s,destination:i,distanceKm:o,durationHours:Math.round((o/870+.65)*10)/10,costUsd:Math.round(o*.11+140)}}const B=[e("ATL","DFW"),e("ATL","JFK"),e("ATL","LAX"),e("ATL","MIA"),e("ATL","ORD"),e("ATL","YYZ"),e("ORD","DFW"),e("ORD","JFK"),e("ORD","LAX"),e("ORD","SEA"),e("ORD","SFO"),e("ORD","YYZ"),e("DFW","LAX"),e("DFW","MEX"),e("DFW","MIA"),e("DFW","SFO"),e("JFK","LAX"),e("JFK","YYZ"),e("JFK","LHR"),e("JFK","CDG"),e("JFK","AMS"),e("JFK","FRA"),e("JFK","MEX"),e("JFK","MIA"),e("JFK","SFO"),e("JFK","MAD"),e("JFK","DUB"),e("JFK","GRU"),e("LAX","HND"),e("LAX","ICN"),e("LAX","PVG"),e("LAX","SIN"),e("LAX","SYD"),e("LAX","MEX"),e("LAX","SFO"),e("LAX","SEA"),e("LAX","YVR"),e("YYZ","LHR"),e("YYZ","AMS"),e("YYZ","FRA"),e("YYZ","YVR"),e("MIA","BOG"),e("MIA","GRU"),e("MIA","LIM"),e("MIA","MEX"),e("SEA","YVR"),e("SEA","HND"),e("SEA","ICN"),e("SFO","HKG"),e("SFO","HND"),e("SFO","ICN"),e("SFO","SIN"),e("YVR","HND"),e("YVR","ICN"),e("MEX","BOG"),e("MEX","GRU"),e("MEX","LIM"),e("MEX","SCL"),e("BOG","GRU"),e("BOG","LIM"),e("BOG","MAD"),e("LIM","EZE"),e("LIM","SCL"),e("LIM","GRU"),e("EZE","GRU"),e("EZE","MAD"),e("EZE","SCL"),e("GRU","SCL"),e("GRU","MAD"),e("GRU","LIS"),e("GRU","CDG"),e("GRU","JNB"),e("SCL","AKL"),e("AMS","BRU"),e("AMS","CPH"),e("AMS","DUB"),e("AMS","FRA"),e("AMS","LHR"),e("AMS","ZRH"),e("ARN","CPH"),e("ARN","HEL"),e("ARN","LHR"),e("ATH","FCO"),e("ATH","IST"),e("ATH","VIE"),e("BCN","FCO"),e("BCN","LHR"),e("BCN","MAD"),e("BRU","CDG"),e("BRU","FRA"),e("CPH","FRA"),e("CPH","HEL"),e("CPH","LHR"),e("LHR","CDG"),e("LHR","MAD"),e("LHR","FRA"),e("LHR","ZRH"),e("LHR","DUB"),e("LHR","FCO"),e("LHR","DXB"),e("LHR","DOH"),e("LHR","SIN"),e("CDG","MAD"),e("CDG","FRA"),e("CDG","FCO"),e("CDG","IST"),e("CDG","DXB"),e("DUB","LIS"),e("FCO","IST"),e("FCO","MAD"),e("FRA","IST"),e("FRA","MUC"),e("FRA","VIE"),e("FRA","ZRH"),e("FRA","DXB"),e("HEL","WAW"),e("LIS","MAD"),e("MAD","CMN"),e("MAD","CAI"),e("MAD","DOH"),e("MUC","VIE"),e("MUC","ZRH"),e("VIE","WAW"),e("VIE","IST"),e("WAW","IST"),e("ZRH","VIE"),e("IST","ADD"),e("IST","CAI"),e("IST","DXB"),e("IST","DOH"),e("IST","TLV"),e("ADD","CAI"),e("ADD","JNB"),e("ADD","NBO"),e("ADD","DXB"),e("CMN","CAI"),e("CMN","LIS"),e("CMN","LOS"),e("CAI","JNB"),e("CAI","NBO"),e("CAI","JED"),e("CAI","RUH"),e("CAI","TLV"),e("CPT","JNB"),e("CPT","ADD"),e("CPT","DXB"),e("LOS","ADD"),e("LOS","JNB"),e("JNB","NBO"),e("JNB","SYD"),e("JNB","DXB"),e("NBO","DXB"),e("NBO","DOH"),e("AUH","BOM"),e("AUH","DEL"),e("AUH","JED"),e("AUH","LHR"),e("AUH","SIN"),e("DXB","DOH"),e("DXB","AUH"),e("DXB","DEL"),e("DXB","BOM"),e("DXB","BKK"),e("DXB","SIN"),e("DXB","HKG"),e("DXB","SYD"),e("DOH","BOM"),e("DOH","DEL"),e("DOH","JED"),e("DOH","SIN"),e("DOH","SYD"),e("JED","RUH"),e("JED","DEL"),e("RUH","DXB"),e("TLV","ATH"),e("TLV","DXB"),e("BKK","DEL"),e("BKK","HKG"),e("BKK","KUL"),e("BKK","SIN"),e("BKK","TPE"),e("BLR","BOM"),e("BLR","DEL"),e("BLR","SIN"),e("BOM","DEL"),e("BOM","SIN"),e("BOM","LHR"),e("CAN","HKG"),e("CAN","PEK"),e("CAN","PVG"),e("CAN","SIN"),e("CGK","KUL"),e("CGK","SIN"),e("CGK","SYD"),e("DEL","SIN"),e("DEL","HND"),e("DEL","HKG"),e("DEL","ICN"),e("HKG","ICN"),e("HKG","MNL"),e("HKG","PVG"),e("HKG","SIN"),e("HKG","TPE"),e("ICN","HND"),e("ICN","PEK"),e("ICN","PVG"),e("SIN","HND"),e("SIN","KUL"),e("SIN","MNL"),e("SIN","SYD"),e("KUL","MNL"),e("KUL","PER"),e("MNL","HND"),e("PEK","HND"),e("PEK","PVG"),e("PEK","SFO"),e("PVG","HND"),e("PVG","TPE"),e("TPE","HND"),e("HND","SYD"),e("HND","BNE"),e("BNE","SYD"),e("BNE","MEL"),e("MEL","SYD"),e("MEL","AKL"),e("PER","MEL"),e("PER","SYD"),e("PER","SIN"),e("SYD","AKL")],Y=[{id:"trans-atlantic",title:"New York to Tokyo",description:"Compare westbound Pacific hops against eastbound European and Gulf hub routes.",source:"JFK",destination:"HND",algorithm:"dijkstra"},{id:"southern-cross",title:"London to Sydney",description:"Route across Europe, the Gulf, Asia, and Oceania using weighted flight times.",source:"LHR",destination:"SYD",algorithm:"astar"},{id:"africa-to-americas",title:"Johannesburg to Los Angeles",description:"Study how different algorithms connect Africa to the Americas through major hubs.",source:"JNB",destination:"LAX",algorithm:"greedy"},{id:"fewest-stops",title:"Toronto to Singapore",description:"Use BFS to minimize the number of airport connections, ignoring flight duration.",source:"YYZ",destination:"SIN",algorithm:"bfs"}];function W(s){return new Map(s.map(i=>[i.code,i]))}function G(s,i){return s.flatMap(n=>n.source===i?[{code:n.destination,route:n}]:n.destination===i?[{code:n.source,route:n}]:[])}function _(s,i,n){return s.find(l=>l.source===i&&l.destination===n||l.source===n&&l.destination===i)??null}function J(s,i,n,l,o){return o==="bfs"?Ne(s,i,n,l):o==="greedy"?Ce(s,i,n,l):Se(s,i,n,l,o)}function Se(s,i,n,l,o){const u=W(s),c={},x={},m=new Set,h=[{code:n,priority:0}],j=[];for(const g of s)c[g.code]=g.code===n?0:1/0,x[g.code]=null;for(j.push(E("init",n,`Start at ${n}. Set its travel time to 0 and every other airport to infinity.`,m,h,c,x));h.length>0;){h.sort((p,k)=>p.priority-k.priority);const g=h.shift();if(!m.has(g.code)){if(m.add(g.code),j.push(E("select",g.code,`Select ${g.code}, the airport with the best current priority.`,m,h,c,x)),g.code===l)break;for(const p of G(i,g.code)){if(m.has(p.code))continue;const k=c[g.code]+p.route.durationHours;if(k ${p.code} improves the route to ${c[p.code]}h.`,m,h,c,x,{from:g.code,to:p.code}))}else j.push(E("dead-end",p.code,`${g.code} -> ${p.code} is slower than the best known route.`,m,h,c,x,{from:g.code,to:p.code}))}}}const y=U(x,n,l),S=$(i,y);return j.push(E("done",l,`Route complete: ${y.join(" -> ")}`,m,h,c,x,void 0,y)),{steps:j,plan:S}}function Ne(s,i,n,l){const o=new Set([n]),u={},c={},x=[{code:n,priority:0}],m=[];for(const y of s)u[y.code]=null,c[y.code]=y.code===n?0:1/0;for(m.push(E("init",n,`Start BFS at ${n}. Each edge counts as one airport hop.`,o,x,c,u));x.length>0;){const y=x.shift();if(m.push(E("select",y.code,`Visit ${y.code} and enqueue all unseen connected airports.`,o,x,c,u)),y.code===l)break;for(const S of G(i,y.code))o.has(S.code)||(o.add(S.code),u[S.code]=y.code,c[S.code]=c[y.code]+1,x.push({code:S.code,priority:c[S.code]}),m.push(E("enqueue",S.code,`Add ${S.code} to the BFS queue at hop ${c[S.code]}.`,o,x,c,u,{from:y.code,to:S.code})))}const h=U(u,n,l),j=$(i,h);return m.push(E("done",l,`Fewest-stop route complete: ${h.join(" -> ")}`,o,x,c,u,void 0,h)),{steps:m,plan:j}}function Ce(s,i,n,l){const o=W(s),u=new Set,c={},x={},m=[];let h=n;for(const S of s)c[S.code]=null,x[S.code]=S.code===n?0:1/0;for(m.push(E("init",n,`Start greedy routing at ${n}. Always choose the neighbor closest to ${l}.`,u,[{code:n,priority:0}],x,c));h!==l;){u.add(h);const S=G(i,h).filter(p=>!u.has(p.code)).sort((p,k)=>T(o.get(p.code),o.get(l))-T(o.get(k.code),o.get(l)));if(m.push(E("select",h,`From ${h}, compare nearby hubs by straight-line distance to ${l}.`,u,S.map(p=>({code:p.code,priority:Math.round(T(o.get(p.code),o.get(l))*10)/10})),x,c)),S.length===0)break;const g=S[0];x[g.code]=Math.round((x[h]+g.route.durationHours)*10)/10,c[g.code]=h,m.push(E("relax",g.code,`Greedy picks ${g.code} as the closest-looking next airport.`,u,[],x,c,{from:h,to:g.code})),h=g.code}const j=U(c,n,l),y=$(i,j);return m.push(E("done",l,`Greedy route complete: ${j.join(" -> ")}`,u,[],x,c,void 0,j)),{steps:m,plan:y}}function E(s,i,n,l,o,u,c,x,m){return{type:s,airportCode:i,description:n,visited:Array.from(l),frontier:o.map(h=>({code:h.code,priority:h.priority})),distances:{...u},previous:{...c},relaxedRoute:x,route:m}}function U(s,i,n){const l=[];let o=n;for(;o&&(l.unshift(o),o!==i);)o=s[o];return l[0]===i?l:[]}function $(s,i){let n=0,l=0,o=0;for(let u=0;ude(),[]),o=b.useCallback((p,k,a="sine",d=.045)=>{if(!s.current)return;const f=l();if(!f)return;const M=f.createOscillator(),N=f.createGain();M.type=a,M.frequency.setValueAtTime(p,f.currentTime),N.gain.setValueAtTime(d,f.currentTime),N.gain.exponentialRampToValueAtTime(.001,f.currentTime+k),M.connect(N),N.connect(f.destination),M.start(f.currentTime),M.stop(f.currentTime+k)},[l]),u=b.useCallback((p,k,a,d=.04)=>{if(!s.current)return;const f=l();f&&p.forEach((M,N)=>{const L=f.createOscillator(),D=f.createGain(),R=f.currentTime+N*a*.75;L.type=k,L.frequency.setValueAtTime(M,R),D.gain.setValueAtTime(d,R),D.gain.exponentialRampToValueAtTime(.001,R+a),L.connect(D),D.connect(f.destination),L.start(R),L.stop(R+a)})},[l]),c=b.useCallback(()=>{o(523.25,.08,"triangle",.035)},[o]),x=b.useCallback(()=>{u([392,523.25,659.25],"sine",.1,.045)},[u]),m=b.useCallback(p=>{o(Z[p%Z.length],.055,"sine",.025)},[o]),h=b.useCallback(()=>{u([196,246.94,329.63,392],"triangle",.09,.04)},[u]),j=b.useCallback(p=>{o(p%2===0?587.33:659.25,.09,"triangle",.035)},[o]),y=b.useCallback(()=>{u([523.25,659.25,783.99,1046.5],"sine",.11,.05)},[u]),S=b.useCallback(()=>{o(220,.08,"sawtooth",.025)},[o]),g=b.useCallback(p=>{s.current=p,n(p)},[]);return{soundEnabled:i,toggleSound:g,playAirportSelect:c,playRoutePlanned:x,playScanStep:m,playFlightStart:h,playWaypoint:j,playArrive:y,playPause:S}}function De(){const[s,i]=b.useState("JFK"),[n,l]=b.useState("HND"),[o,u]=b.useState("dijkstra"),[c,x]=b.useState(()=>J(F,B,"JFK","HND","dijkstra")),[m,h]=b.useState(0),[j,y]=b.useState("idle"),[S,g]=b.useState(!1),[p,k]=b.useState(null),a=b.useRef(null),d=Me(),f=c.steps[m]??null,M=b.useCallback(()=>{a.current&&(window.clearInterval(a.current),a.current=null)},[]);b.useEffect(()=>M,[M]);const N=b.useCallback((A=s,C=n,w=o)=>{M();const ee=J(F,B,A,C,w);x(ee),h(0),y("planning"),g(!1),k(null),d.playRoutePlanned()},[o,M,n,d,s]),L=b.useCallback(A=>{A!==n&&(d.playAirportSelect(),i(A),N(A,n,o))},[o,n,N,d]),D=b.useCallback(A=>{A!==s&&(d.playAirportSelect(),l(A),N(s,A,o))},[o,N,d,s]),R=b.useCallback(A=>{d.playAirportSelect(),u(A),N(s,n,A)},[n,N,d,s]),I=b.useCallback(A=>{const C=Y.find(w=>w.id===A);C&&(d.playAirportSelect(),i(C.source),l(C.destination),u(C.algorithm),N(C.source,C.destination,C.algorithm))},[N,d]),K=b.useCallback(()=>{y("planning"),h(A=>{const C=Math.min(A+1,c.steps.length-1);return C!==A&&d.playScanStep(C),C})},[c.steps.length,d]),z=b.useCallback(()=>{y("planning"),h(A=>{const C=Math.max(A-1,0);return C!==A&&d.playScanStep(C),C})},[d]),P=b.useCallback(()=>{M();const A=c.plan.path;if(A.length<2)return;y("flying"),g(!0),d.playFlightStart();let C=0,w=0;k({from:A[0],to:A[1],progress:0}),a.current=window.setInterval(()=>{if(w+=.045,w>=1){if(C+=1,w=0,C>=A.length-1){M(),k(null),g(!1),y("complete"),d.playArrive();return}d.playWaypoint(C)}k({from:A[C],to:A[C+1],progress:w})},80)},[M,c.plan.path,d]),q=b.useCallback(()=>{if(S){M(),g(!1),d.playPause();return}y("planning"),g(!0),d.playScanStep(m),a.current=window.setInterval(()=>{h(A=>{if(A>=c.steps.length-1)return M(),g(!1),P(),A;const C=A+1;return d.playScanStep(C),C})},420)},[P,M,S,c.steps.length,d,m]),Q=b.useMemo(()=>{const A=f?.route??c.plan.path;return A.slice(0,-1).map((C,w)=>_(B,C,A[w+1])).filter(Boolean)},[f?.route,c.plan.path]);return{airports:F,routes:B,scenarios:Y,source:s,destination:n,algorithm:o,result:c,currentStep:f,stepIndex:m,phase:j,isPlaying:S,flightProgress:p,activeRoute:Q,soundEnabled:d.soundEnabled,toggleSound:d.toggleSound,changeSource:L,changeDestination:D,changeAlgorithm:R,loadScenario:I,planRoute:N,stepForward:K,stepBack:z,playPlanning:q,animateFlight:P}}function He(){const s=De();return t.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden bg-[radial-gradient(circle_at_top_left,rgba(14,165,233,0.16),transparent_30%),radial-gradient(circle_at_bottom_right,rgba(59,130,246,0.14),transparent_28%)]",children:[t.jsx("div",{className:"border-b border-slate-800/70 bg-slate-950/75 px-4 py-3 shadow-lg shadow-black/20 backdrop-blur-sm md:px-6",children:t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-sky-400",children:"Airport Network Algorithms"}),t.jsx("h2",{className:"text-lg font-bold text-white",children:"World Map Flight Simulator"})]}),t.jsxs("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[t.jsx(v,{label:"Algorithm",value:O[s.algorithm].label,tone:"indigo"}),t.jsx(v,{label:"Origin",value:s.source,tone:"sky"}),t.jsx(v,{label:"Destination",value:s.destination,tone:"emerald"}),t.jsx(v,{label:"Stops",value:s.result.plan.stops.toString(),tone:"amber"})]})]})}),t.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-auto p-4 md:p-6 xl:flex-row",children:[t.jsx(ge,{airports:s.airports,routes:s.routes,source:s.source,destination:s.destination,currentStep:s.currentStep,plan:s.result.plan,flightProgress:s.flightProgress,onSelectSource:s.changeSource,onSelectDestination:s.changeDestination}),t.jsx(be,{airports:s.airports,scenarios:s.scenarios,source:s.source,destination:s.destination,algorithm:s.algorithm,plan:s.result.plan,currentStep:s.currentStep,stepIndex:s.stepIndex,totalSteps:s.result.steps.length,phase:s.phase,isPlaying:s.isPlaying,soundEnabled:s.soundEnabled,onSourceChange:s.changeSource,onDestinationChange:s.changeDestination,onAlgorithmChange:s.changeAlgorithm,onLoadScenario:s.loadScenario,onPlanRoute:()=>s.planRoute(),onStepBack:s.stepBack,onStepForward:s.stepForward,onPlay:s.playPlanning,onFly:s.animateFlight,onToggleSound:s.toggleSound})]})]})}function v({label:s,value:i,tone:n}){const l={indigo:"bg-indigo-500/10 text-indigo-200 ring-indigo-500/25",sky:"bg-sky-500/10 text-sky-200 ring-sky-500/25",emerald:"bg-emerald-500/10 text-emerald-200 ring-emerald-500/25",amber:"bg-amber-500/10 text-amber-200 ring-amber-500/25"};return t.jsxs("div",{className:`rounded-full px-3 py-1.5 text-[10px] ring-1 ${l[n]}`,children:[t.jsx("span",{className:"mr-1 uppercase tracking-wider opacity-60",children:s}),t.jsx("span",{className:"font-mono font-bold",children:i})]})}export{He as default};
+import{c as te,r as b,j as t,P as se}from"./index-CB1-0H6I.js";import{S as ae}from"./shuffle-DZnyoAGL.js";import{C as oe,a as ne}from"./chevron-right-ChVmoNtO.js";import{P as re}from"./play-SZ6Nqtz8.js";import{R as ie}from"./route-BuoNUCzx.js";import{V as le,a as ce}from"./volume-x-CKT6TOtL.js";import{g as de}from"./audioContext-NbgqvQGz.js";const ue=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],he=te("radar",ue),pe=[{name:"North America",path:"M45 82C82 46 145 49 196 75C229 59 287 72 331 102C366 126 369 165 337 188C312 207 287 210 264 235C232 268 178 250 149 222C118 192 78 187 56 150C38 119 28 99 45 82Z",fill:"#14532d"},{name:"Greenland",path:"M285 42C332 20 390 35 404 75C388 111 325 119 286 92C267 78 265 55 285 42Z",fill:"#475569"},{name:"Central America",path:"M246 230C277 232 307 242 329 263C307 276 273 267 246 249C232 240 232 231 246 230Z",fill:"#166534"},{name:"South America",path:"M308 264C352 270 383 315 372 374C364 424 334 474 296 483C281 443 259 405 264 359C269 314 281 281 308 264Z",fill:"#15803d"},{name:"Europe",path:"M438 122C470 96 535 91 575 117C602 137 593 166 558 176C522 186 489 177 454 165C427 156 416 139 438 122Z",fill:"#0f766e"},{name:"Africa",path:"M498 202C553 184 612 223 627 283C640 336 608 409 552 425C514 397 484 340 482 283C480 244 482 216 498 202Z",fill:"#166534"},{name:"Middle East",path:"M572 188C615 178 657 196 674 226C648 245 603 239 580 217C568 206 565 194 572 188Z",fill:"#3f6212"},{name:"Asia",path:"M600 111C683 52 842 83 927 168C910 223 836 246 775 229C728 216 703 257 655 244C611 232 566 159 600 111Z",fill:"#164e63"},{name:"Southeast Asia",path:"M728 252C772 247 824 281 833 322C800 335 755 317 728 287C714 271 714 258 728 252Z",fill:"#0f766e"},{name:"Australia",path:"M794 350C850 316 932 335 949 394C897 437 813 426 774 381C760 365 771 354 794 350Z",fill:"#15803d"},{name:"New Zealand",path:"M958 420C979 425 987 448 970 461C951 456 941 432 958 420Z",fill:"#15803d"}],xe=["M186 78C184 128 197 172 230 214","M126 172C171 164 216 173 260 190","M231 237C262 244 292 252 323 263","M303 280C329 305 342 335 335 374","M336 312C350 304 362 304 376 318","M451 140C482 132 515 134 548 149","M496 171C501 144 518 124 545 111","M529 196C540 236 540 277 530 321","M565 223C594 250 611 286 617 329","M591 190C613 203 639 212 671 221","M638 130C675 145 713 153 754 153","M690 184C729 192 768 201 808 216","M757 238C759 278 770 303 807 320","M835 153C841 191 832 219 808 236","M831 365C861 384 892 394 928 396"],me=[{text:"CANADA",x:160,y:118},{text:"UNITED STATES",x:190,y:178},{text:"MEXICO",x:250,y:222},{text:"BRAZIL",x:338,y:336},{text:"ARGENTINA",x:315,y:424},{text:"EUROPE",x:507,y:139},{text:"NORTH AFRICA",x:548,y:246},{text:"SOUTH AFRICA",x:560,y:390},{text:"MIDDLE EAST",x:632,y:210},{text:"INDIA",x:710,y:232},{text:"CHINA",x:779,y:173},{text:"JAPAN",x:890,y:161},{text:"SOUTHEAST ASIA",x:770,y:295},{text:"AUSTRALIA",x:860,y:390}];function ge({airports:s,routes:i,source:n,destination:l,currentStep:o,plan:u,flightProgress:c,onSelectSource:x,onSelectDestination:m}){const h=b.useMemo(()=>new Map(s.map(a=>[a.code,a])),[s]),j=new Set(o?.visited??[]),y=new Set((o?.frontier??[]).map(a=>a.code)),S=o?.route?.length?o.route:u.path,g=new Set(S.slice(0,-1).map((a,d)=>[a,S[d+1]].sort().join("-"))),p=o?.relaxedRoute?[o.relaxedRoute.from,o.relaxedRoute.to].sort().join("-"):null,k=b.useMemo(()=>{if(!c)return null;const a=h.get(c.from),d=h.get(c.to);if(!a||!d)return null;const f=Math.sin(c.progress*Math.PI)*-44;return{x:a.x+(d.x-a.x)*c.progress,y:a.y+(d.y-a.y)*c.progress+f,angle:Math.atan2(d.y-a.y,d.x-a.x)*(180/Math.PI)}},[h,c]);return t.jsxs("div",{className:"relative min-h-[620px] flex-1 overflow-hidden rounded-[1.75rem] border border-slate-700/50 bg-slate-950/90 shadow-2xl shadow-black/40",children:[t.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_18%_22%,rgba(14,165,233,0.16),transparent_28%),radial-gradient(circle_at_78%_72%,rgba(59,130,246,0.12),transparent_30%)]"}),t.jsxs("div",{className:"absolute left-5 top-5 z-20 rounded-2xl border border-slate-700/60 bg-slate-950/85 p-4 shadow-xl shadow-black/30 backdrop-blur-sm",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-sky-400",children:"Global Air Traffic Network"}),t.jsxs("div",{className:"mt-2 flex gap-4 text-xs text-slate-300",children:[t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:s.length})," airports"]}),t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:i.length})," routes"]}),t.jsxs("span",{children:[t.jsx("strong",{className:"font-mono text-white",children:u.path.length||0})," hops"]})]})]}),o&&t.jsxs("div",{className:"absolute bottom-5 left-5 z-20 max-w-md rounded-2xl border border-slate-700/60 bg-slate-950/90 p-4 shadow-xl shadow-black/35 backdrop-blur-sm",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-indigo-300",children:"Algorithm Radar"}),t.jsx("p",{className:"mt-1 text-xs leading-relaxed text-slate-300",children:o.description}),o.frontier.length>0&&t.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:o.frontier.slice(0,7).map(a=>t.jsxs("span",{className:"rounded-full bg-sky-500/10 px-2 py-1 text-[10px] font-mono font-semibold text-sky-300 ring-1 ring-sky-500/25",children:[a.code,": ",Number.isFinite(a.priority)?a.priority:"∞"]},`${a.code}-${a.priority}`))})]}),t.jsxs("svg",{viewBox:"0 0 1000 520",className:"relative z-10 h-full w-full",preserveAspectRatio:"xMidYMid meet",children:[t.jsxs("defs",{children:[t.jsxs("filter",{id:"world-glow",x:"-40%",y:"-40%",width:"180%",height:"180%",children:[t.jsx("feGaussianBlur",{stdDeviation:"4",result:"blur"}),t.jsxs("feMerge",{children:[t.jsx("feMergeNode",{in:"blur"}),t.jsx("feMergeNode",{in:"SourceGraphic"})]})]}),t.jsx("filter",{id:"world-shadow",x:"-60%",y:"-60%",width:"220%",height:"220%",children:t.jsx("feDropShadow",{dx:"0",dy:"8",stdDeviation:"6",floodColor:"#020617",floodOpacity:"0.7"})}),t.jsxs("linearGradient",{id:"ocean",x1:"0",x2:"1",y1:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:"#07111f"}),t.jsx("stop",{offset:"55%",stopColor:"#082f49"}),t.jsx("stop",{offset:"100%",stopColor:"#020617"})]})]}),t.jsx("rect",{width:"1000",height:"520",rx:"28",fill:"url(#ocean)"}),[130,260,390].map(a=>t.jsx("path",{d:`M0 ${a}H1000`,stroke:"#38bdf8",strokeOpacity:"0.1",strokeDasharray:"7 10"},`lat-${a}`)),[125,250,375,500,625,750,875].map(a=>t.jsx("path",{d:`M${a} 0V520`,stroke:"#38bdf8",strokeOpacity:"0.08",strokeDasharray:"7 10"},`lon-${a}`)),t.jsx("path",{d:"M0 260H1000",stroke:"#67e8f9",strokeOpacity:"0.2",strokeDasharray:"8 9"}),t.jsx("path",{d:"M500 0V520",stroke:"#67e8f9",strokeOpacity:"0.14",strokeDasharray:"8 9"}),t.jsx("g",{filter:"url(#world-shadow)",children:pe.map(a=>t.jsx("path",{d:a.path,fill:a.fill,fillOpacity:"0.78",stroke:"#a7f3d0",strokeOpacity:"0.42",strokeWidth:"1.8"},a.name))}),t.jsx("g",{children:xe.map(a=>t.jsx("path",{d:a,fill:"none",stroke:"#d1fae5",strokeOpacity:"0.22",strokeWidth:"1",strokeDasharray:"4 5"},a))}),t.jsx("g",{children:me.map(a=>t.jsx("text",{x:a.x,y:a.y,textAnchor:"middle",fontSize:"11",fontWeight:"800",letterSpacing:"1.4",fill:"#e2e8f0",fillOpacity:"0.28",children:a.text},a.text))}),i.map(a=>{const d=h.get(a.source),f=h.get(a.destination);if(!d||!f)return null;const M=[a.source,a.destination].sort().join("-"),N=g.has(M),L=M===p,D=L?"#facc15":N?"#22c55e":"#334155",R=Math.min(120,Math.abs(d.x-f.x)*.12+28),I=(d.x+f.x)/2,K=(d.y+f.y)/2-R;return t.jsx("g",{children:t.jsx("path",{d:`M${d.x},${d.y} Q${I},${K} ${f.x},${f.y}`,fill:"none",stroke:D,strokeWidth:N||L?3:1.2,strokeOpacity:N||L?.92:.24,strokeDasharray:N?void 0:"5 8",filter:N||L?"url(#world-glow)":void 0})},a.id)}),s.map(a=>{const d=a.code===n,f=a.code===l,M=j.has(a.code),N=y.has(a.code),L=o?.airportCode===a.code,D=d||f||L||N||M||a.hubScore>=92,R=d?"#fde047":f?"#fb923c":L?"#38bdf8":M?"#22c55e":N?"#a78bfa":"#94a3b8";return t.jsxs("g",{className:"cursor-pointer",children:[t.jsxs("title",{children:[a.code," - ",a.city,", ",a.country]}),t.jsx("circle",{cx:a.x,cy:a.y,r:d||f?12:8,fill:"#020617",stroke:"#0f172a",strokeWidth:7,filter:"url(#world-shadow)"}),t.jsx("circle",{cx:a.x,cy:a.y,r:d||f?9:6,fill:R,fillOpacity:d||f||M||N||L?.96:.58,stroke:R,strokeWidth:L?4:2,onClick:I=>{I.shiftKey?m(a.code):x(a.code)}}),D&&t.jsx("text",{x:a.x,y:a.y-14,textAnchor:"middle",fontSize:"10",fontWeight:"800",fontFamily:"ui-monospace, monospace",fill:R,children:a.code})]},a.code)}),k&&t.jsxs("g",{transform:`translate(${k.x} ${k.y}) rotate(${k.angle})`,filter:"url(#world-glow)",children:[t.jsx("path",{d:"M-14 -5L18 0L-14 5L-8 0Z",fill:"#f8fafc",stroke:"#38bdf8",strokeWidth:"1.2"}),t.jsx("path",{d:"M-5 -3L-12 -13L2 -4Z",fill:"#bae6fd",opacity:"0.9"}),t.jsx("path",{d:"M-5 3L-12 13L2 4Z",fill:"#bae6fd",opacity:"0.9"})]})]}),t.jsxs("div",{className:"absolute bottom-5 right-5 z-20 hidden rounded-2xl border border-slate-700/60 bg-slate-950/85 p-4 text-[10px] text-slate-400 shadow-xl shadow-black/30 backdrop-blur-sm sm:block",children:[t.jsx("div",{className:"mb-2 font-semibold uppercase tracking-[0.24em] text-slate-500",children:"Tip"}),"Click an airport to set origin. Shift-click to set destination."]})]})}const O={dijkstra:{label:"Dijkstra",description:"Finds the lowest total travel time by relaxing routes through a priority queue.",metric:"Shortest time"},astar:{label:"A* Search",description:"Uses distance-to-destination as a heuristic to guide the priority queue.",metric:"Guided shortest path"},bfs:{label:"BFS",description:"Ignores weights and searches by fewest airport connections.",metric:"Fewest stops"},greedy:{label:"Greedy",description:"Always flies toward the airport geographically closest to the destination.",metric:"Nearest-looking route"}},fe=["dijkstra","astar","bfs","greedy"];function be({airports:s,scenarios:i,source:n,destination:l,algorithm:o,plan:u,currentStep:c,stepIndex:x,totalSteps:m,phase:h,isPlaying:j,soundEnabled:y,onSourceChange:S,onDestinationChange:g,onAlgorithmChange:p,onLoadScenario:k,onPlanRoute:a,onStepBack:d,onStepForward:f,onPlay:M,onFly:N,onToggleSound:L}){return t.jsxs("aside",{className:"flex w-full shrink-0 flex-col gap-4 overflow-y-auto xl:w-88",children:[t.jsxs("section",{className:"rounded-2xl border border-sky-500/20 bg-slate-950/75 p-4 shadow-2xl shadow-black/30 backdrop-blur-sm",children:[t.jsxs("div",{className:"mb-3 flex items-center gap-3",children:[t.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-sky-500/15 text-sky-300 ring-1 ring-sky-500/30",children:t.jsx(se,{size:18})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-sm font-bold text-white",children:"World Flight Planner"}),t.jsx("p",{className:"text-[10px] text-slate-500",children:"Airport-code simulator inspired by public airport datasets."})]})]}),t.jsx("p",{className:"text-xs leading-relaxed text-slate-400",children:"Pick countries through their major airport codes, then compare how different algorithms choose routes across global hubs."})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Travel Request"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(X,{label:"Origin",value:n,airports:s,onChange:S}),t.jsx(X,{label:"Destination",value:l,airports:s,onChange:g})]}),t.jsxs("button",{onClick:a,className:"mt-3 flex w-full items-center justify-center gap-2 rounded-xl bg-sky-500/15 px-3 py-2 text-xs font-semibold text-sky-300 ring-1 ring-sky-500/30 transition hover:bg-sky-500/25",children:[t.jsx(he,{size:13})," Recalculate route"]})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Algorithms"}),t.jsx("div",{className:"grid gap-2",children:fe.map(D=>t.jsxs("button",{onClick:()=>p(D),className:`rounded-xl p-3 text-left transition ${o===D?"bg-indigo-500/15 text-indigo-200 ring-1 ring-indigo-500/35":"bg-slate-900/70 text-slate-400 ring-1 ring-slate-800/80 hover:bg-slate-800/80"}`,children:[t.jsxs("span",{className:"flex items-center justify-between text-xs font-bold",children:[O[D].label,t.jsx("span",{className:"text-[9px] uppercase tracking-wider opacity-60",children:O[D].metric})]}),t.jsx("span",{className:"mt-1 block text-[10px] leading-snug opacity-75",children:O[D].description})]},D))})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Preset Missions"}),t.jsx("div",{className:"grid gap-2",children:i.map(D=>t.jsxs("button",{onClick:()=>k(D.id),className:"rounded-xl bg-slate-900/70 p-3 text-left ring-1 ring-slate-800/80 transition hover:bg-slate-800/80",children:[t.jsxs("span",{className:"flex items-center gap-2 text-xs font-bold text-slate-200",children:[t.jsx(ae,{size:12})," ",D.title]}),t.jsx("span",{className:"mt-1 block text-[10px] leading-snug text-slate-500",children:D.description})]},D.id))})]}),t.jsxs("section",{className:"rounded-2xl border border-emerald-500/20 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[t.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Flight Plan"}),t.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2 py-0.5 text-[9px] font-bold uppercase tracking-wider text-emerald-300 ring-1 ring-emerald-500/25",children:h})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(H,{label:"Distance",value:`${u.totalDistanceKm.toLocaleString()} km`}),t.jsx(H,{label:"Duration",value:`${u.totalDurationHours}h`}),t.jsx(H,{label:"Stops",value:u.stops.toString()}),t.jsx(H,{label:"Est. Cost",value:`$${u.totalCostUsd.toLocaleString()}`})]}),t.jsxs("div",{className:"mt-3 rounded-xl bg-slate-900/70 p-3 ring-1 ring-slate-800/80",children:[t.jsx("p",{className:"mb-2 text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Route"}),t.jsx("div",{className:"flex flex-wrap gap-1",children:u.path.map((D,R)=>t.jsx("span",{className:"rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-mono font-semibold text-emerald-300 ring-1 ring-emerald-500/20",children:D},`${D}-${R}`))})]})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Simulation"}),t.jsxs("div",{className:"mb-3 flex items-center justify-between text-[10px] text-slate-500",children:[t.jsx("span",{children:"Step"}),t.jsxs("span",{className:"font-mono text-indigo-300",children:[Math.min(x+1,m)," / ",m]})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[t.jsxs("button",{onClick:d,disabled:x<=0,className:"flex items-center justify-center gap-1 rounded-xl bg-slate-900/70 px-2 py-2 text-xs text-slate-400 ring-1 ring-slate-800/80 disabled:opacity-30",children:[t.jsx(oe,{size:13})," Back"]}),t.jsxs("button",{onClick:M,className:"flex items-center justify-center gap-1 rounded-xl bg-indigo-500/15 px-2 py-2 text-xs font-semibold text-indigo-300 ring-1 ring-indigo-500/30",children:[t.jsx(re,{size:13})," ",j?"Pause":"Play"]}),t.jsxs("button",{onClick:f,disabled:x>=m-1,className:"flex items-center justify-center gap-1 rounded-xl bg-slate-900/70 px-2 py-2 text-xs text-slate-400 ring-1 ring-slate-800/80 disabled:opacity-30",children:["Next ",t.jsx(ne,{size:13})]})]}),t.jsxs("button",{onClick:N,className:"mt-2 flex w-full items-center justify-center gap-2 rounded-xl bg-emerald-500/15 px-3 py-2 text-xs font-semibold text-emerald-300 ring-1 ring-emerald-500/30 transition hover:bg-emerald-500/25",children:[t.jsx(ie,{size:13})," Animate airplane"]}),c&&t.jsx("p",{className:"mt-3 text-xs leading-relaxed text-slate-400",children:c.description})]}),t.jsxs("section",{className:"rounded-2xl border border-slate-700/50 bg-slate-950/75 p-4 shadow-xl shadow-black/20 backdrop-blur-sm",children:[t.jsx("h3",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400",children:"Audio"}),t.jsxs("button",{onClick:()=>L(!y),className:`flex w-full items-center justify-center gap-2 rounded-xl px-3 py-2 text-xs font-semibold ring-1 transition ${y?"bg-sky-500/15 text-sky-300 ring-sky-500/30 hover:bg-sky-500/25":"bg-slate-900/70 text-slate-400 ring-slate-800/80 hover:bg-slate-800/80"}`,children:[y?t.jsx(le,{size:13}):t.jsx(ce,{size:13}),y?"Sound On":"Sound Off"]}),t.jsx("p",{className:"mt-2 text-[10px] leading-relaxed text-slate-500",children:"Radar pings mark search steps, with takeoff, waypoint, and arrival tones during flight."})]})]})}function X({label:s,value:i,airports:n,onChange:l}){return t.jsxs("label",{className:"block",children:[t.jsx("span",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:s}),t.jsx("select",{value:i,onChange:o=>l(o.target.value),className:"w-full rounded-xl border border-slate-700 bg-slate-900 px-3 py-2 text-xs font-mono text-slate-200 outline-none ring-sky-500/20 focus:ring-2",children:n.map(o=>t.jsxs("option",{value:o.code,children:[o.code," - ",o.city]},o.code))})]})}function H({label:s,value:i}){return t.jsxs("div",{className:"rounded-xl bg-slate-900/70 p-3 ring-1 ring-slate-800/80",children:[t.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-slate-500",children:s}),t.jsx("div",{className:"mt-1 font-mono text-sm font-black text-white",children:i})]})}function Ae(s,i){return{x:(s+180)/360*1e3,y:(90-i)/180*520}}function r(s,i,n,l,o,u,c){return{code:s,city:i,country:n,region:l,lat:o,lon:u,hubScore:c,...Ae(u,o)}}const F=[r("ATL","Atlanta","United States","North America",33.6407,-84.4277,98),r("ORD","Chicago","United States","North America",41.9742,-87.9073,96),r("DFW","Dallas-Fort Worth","United States","North America",32.8998,-97.0403,94),r("JFK","New York","United States","North America",40.6413,-73.7781,96),r("LAX","Los Angeles","United States","North America",33.9416,-118.4085,94),r("MIA","Miami","United States","North America",25.7959,-80.287,88),r("SEA","Seattle","United States","North America",47.4502,-122.3088,84),r("SFO","San Francisco","United States","North America",37.6213,-122.379,90),r("YVR","Vancouver","Canada","North America",49.1967,-123.1815,76),r("YYZ","Toronto","Canada","North America",43.6777,-79.6248,78),r("MEX","Mexico City","Mexico","North America",19.4361,-99.0719,76),r("BOG","Bogota","Colombia","South America",4.7016,-74.1469,78),r("LIM","Lima","Peru","South America",-12.0219,-77.1143,76),r("EZE","Buenos Aires","Argentina","South America",-34.8222,-58.5358,74),r("GRU","Sao Paulo","Brazil","South America",-23.4356,-46.4731,84),r("SCL","Santiago","Chile","South America",-33.3928,-70.7858,72),r("AMS","Amsterdam","Netherlands","Europe",52.3105,4.7683,93),r("ARN","Stockholm","Sweden","Europe",59.6498,17.9238,70),r("ATH","Athens","Greece","Europe",37.9364,23.9445,72),r("BCN","Barcelona","Spain","Europe",41.2974,2.0833,76),r("BRU","Brussels","Belgium","Europe",50.9014,4.4844,74),r("CPH","Copenhagen","Denmark","Europe",55.618,12.6561,74),r("LHR","London","United Kingdom","Europe",51.47,-.4543,98),r("CDG","Paris","France","Europe",49.0097,2.5479,94),r("DUB","Dublin","Ireland","Europe",53.4264,-6.2499,70),r("FCO","Rome","Italy","Europe",41.8003,12.2389,78),r("FRA","Frankfurt","Germany","Europe",50.0379,8.5622,96),r("HEL","Helsinki","Finland","Europe",60.3172,24.9633,70),r("LIS","Lisbon","Portugal","Europe",38.7742,-9.1342,70),r("MAD","Madrid","Spain","Europe",40.4983,-3.5676,82),r("MUC","Munich","Germany","Europe",48.3538,11.7861,84),r("VIE","Vienna","Austria","Europe",48.1103,16.5697,76),r("WAW","Warsaw","Poland","Europe",52.1657,20.9671,70),r("ZRH","Zurich","Switzerland","Europe",47.4581,8.5555,82),r("IST","Istanbul","Turkey","Europe/Asia",41.2753,28.7519,92),r("ADD","Addis Ababa","Ethiopia","Africa",8.9779,38.7993,82),r("CMN","Casablanca","Morocco","Africa",33.3675,-7.58997,74),r("CAI","Cairo","Egypt","Africa",30.112,31.4003,70),r("CPT","Cape Town","South Africa","Africa",-33.9715,18.6021,70),r("LOS","Lagos","Nigeria","Africa",6.5774,3.3212,72),r("JNB","Johannesburg","South Africa","Africa",-26.1337,28.242,80),r("NBO","Nairobi","Kenya","Africa",-1.3192,36.9278,68),r("AUH","Abu Dhabi","United Arab Emirates","Middle East",24.433,54.6511,82),r("DXB","Dubai","United Arab Emirates","Middle East",25.2532,55.3657,99),r("DOH","Doha","Qatar","Middle East",25.2731,51.6081,88),r("JED","Jeddah","Saudi Arabia","Middle East",21.6796,39.1565,78),r("RUH","Riyadh","Saudi Arabia","Middle East",24.9576,46.6988,76),r("TLV","Tel Aviv","Israel","Middle East",32.0114,34.8867,74),r("BKK","Bangkok","Thailand","Asia",13.69,100.7501,88),r("BLR","Bengaluru","India","Asia",13.1986,77.7066,76),r("BOM","Mumbai","India","Asia",19.0896,72.8656,84),r("CAN","Guangzhou","China","Asia",23.3924,113.2988,86),r("CGK","Jakarta","Indonesia","Asia",-6.1256,106.6559,82),r("DEL","Delhi","India","Asia",28.5562,77.1,86),r("HKG","Hong Kong","China","Asia",22.308,113.9185,92),r("SIN","Singapore","Singapore","Asia",1.3644,103.9915,96),r("ICN","Seoul","South Korea","Asia",37.4602,126.4407,94),r("KUL","Kuala Lumpur","Malaysia","Asia",2.7456,101.7072,82),r("MNL","Manila","Philippines","Asia",14.5086,121.0194,78),r("PEK","Beijing","China","Asia",40.0799,116.6031,90),r("PVG","Shanghai","China","Asia",31.1443,121.8083,92),r("TPE","Taipei","Taiwan","Asia",25.0797,121.2342,82),r("HND","Tokyo","Japan","Asia",35.5494,139.7798,95),r("BNE","Brisbane","Australia","Oceania",-27.3842,153.1175,70),r("MEL","Melbourne","Australia","Oceania",-37.669,144.841,78),r("PER","Perth","Australia","Oceania",-31.9403,115.9672,72),r("SYD","Sydney","Australia","Oceania",-33.9399,151.1753,84),r("AKL","Auckland","New Zealand","Oceania",-37.0082,174.785,66)],V=new Map(F.map(s=>[s.code,s]));function ye(s,i){const l=h=>h*Math.PI/180,o=l(i.lat-s.lat),u=l(i.lon-s.lon),c=l(s.lat),x=l(i.lat),m=Math.sin(o/2)**2+Math.cos(c)*Math.cos(x)*Math.sin(u/2)**2;return Math.round(2*6371*Math.asin(Math.sqrt(m)))}function e(s,i){const n=V.get(s),l=V.get(i);if(!n||!l)throw new Error(`Unknown airport route: ${s}-${i}`);const o=ye(n,l);return{id:`${s}-${i}`,source:s,destination:i,distanceKm:o,durationHours:Math.round((o/870+.65)*10)/10,costUsd:Math.round(o*.11+140)}}const B=[e("ATL","DFW"),e("ATL","JFK"),e("ATL","LAX"),e("ATL","MIA"),e("ATL","ORD"),e("ATL","YYZ"),e("ORD","DFW"),e("ORD","JFK"),e("ORD","LAX"),e("ORD","SEA"),e("ORD","SFO"),e("ORD","YYZ"),e("DFW","LAX"),e("DFW","MEX"),e("DFW","MIA"),e("DFW","SFO"),e("JFK","LAX"),e("JFK","YYZ"),e("JFK","LHR"),e("JFK","CDG"),e("JFK","AMS"),e("JFK","FRA"),e("JFK","MEX"),e("JFK","MIA"),e("JFK","SFO"),e("JFK","MAD"),e("JFK","DUB"),e("JFK","GRU"),e("LAX","HND"),e("LAX","ICN"),e("LAX","PVG"),e("LAX","SIN"),e("LAX","SYD"),e("LAX","MEX"),e("LAX","SFO"),e("LAX","SEA"),e("LAX","YVR"),e("YYZ","LHR"),e("YYZ","AMS"),e("YYZ","FRA"),e("YYZ","YVR"),e("MIA","BOG"),e("MIA","GRU"),e("MIA","LIM"),e("MIA","MEX"),e("SEA","YVR"),e("SEA","HND"),e("SEA","ICN"),e("SFO","HKG"),e("SFO","HND"),e("SFO","ICN"),e("SFO","SIN"),e("YVR","HND"),e("YVR","ICN"),e("MEX","BOG"),e("MEX","GRU"),e("MEX","LIM"),e("MEX","SCL"),e("BOG","GRU"),e("BOG","LIM"),e("BOG","MAD"),e("LIM","EZE"),e("LIM","SCL"),e("LIM","GRU"),e("EZE","GRU"),e("EZE","MAD"),e("EZE","SCL"),e("GRU","SCL"),e("GRU","MAD"),e("GRU","LIS"),e("GRU","CDG"),e("GRU","JNB"),e("SCL","AKL"),e("AMS","BRU"),e("AMS","CPH"),e("AMS","DUB"),e("AMS","FRA"),e("AMS","LHR"),e("AMS","ZRH"),e("ARN","CPH"),e("ARN","HEL"),e("ARN","LHR"),e("ATH","FCO"),e("ATH","IST"),e("ATH","VIE"),e("BCN","FCO"),e("BCN","LHR"),e("BCN","MAD"),e("BRU","CDG"),e("BRU","FRA"),e("CPH","FRA"),e("CPH","HEL"),e("CPH","LHR"),e("LHR","CDG"),e("LHR","MAD"),e("LHR","FRA"),e("LHR","ZRH"),e("LHR","DUB"),e("LHR","FCO"),e("LHR","DXB"),e("LHR","DOH"),e("LHR","SIN"),e("CDG","MAD"),e("CDG","FRA"),e("CDG","FCO"),e("CDG","IST"),e("CDG","DXB"),e("DUB","LIS"),e("FCO","IST"),e("FCO","MAD"),e("FRA","IST"),e("FRA","MUC"),e("FRA","VIE"),e("FRA","ZRH"),e("FRA","DXB"),e("HEL","WAW"),e("LIS","MAD"),e("MAD","CMN"),e("MAD","CAI"),e("MAD","DOH"),e("MUC","VIE"),e("MUC","ZRH"),e("VIE","WAW"),e("VIE","IST"),e("WAW","IST"),e("ZRH","VIE"),e("IST","ADD"),e("IST","CAI"),e("IST","DXB"),e("IST","DOH"),e("IST","TLV"),e("ADD","CAI"),e("ADD","JNB"),e("ADD","NBO"),e("ADD","DXB"),e("CMN","CAI"),e("CMN","LIS"),e("CMN","LOS"),e("CAI","JNB"),e("CAI","NBO"),e("CAI","JED"),e("CAI","RUH"),e("CAI","TLV"),e("CPT","JNB"),e("CPT","ADD"),e("CPT","DXB"),e("LOS","ADD"),e("LOS","JNB"),e("JNB","NBO"),e("JNB","SYD"),e("JNB","DXB"),e("NBO","DXB"),e("NBO","DOH"),e("AUH","BOM"),e("AUH","DEL"),e("AUH","JED"),e("AUH","LHR"),e("AUH","SIN"),e("DXB","DOH"),e("DXB","AUH"),e("DXB","DEL"),e("DXB","BOM"),e("DXB","BKK"),e("DXB","SIN"),e("DXB","HKG"),e("DXB","SYD"),e("DOH","BOM"),e("DOH","DEL"),e("DOH","JED"),e("DOH","SIN"),e("DOH","SYD"),e("JED","RUH"),e("JED","DEL"),e("RUH","DXB"),e("TLV","ATH"),e("TLV","DXB"),e("BKK","DEL"),e("BKK","HKG"),e("BKK","KUL"),e("BKK","SIN"),e("BKK","TPE"),e("BLR","BOM"),e("BLR","DEL"),e("BLR","SIN"),e("BOM","DEL"),e("BOM","SIN"),e("BOM","LHR"),e("CAN","HKG"),e("CAN","PEK"),e("CAN","PVG"),e("CAN","SIN"),e("CGK","KUL"),e("CGK","SIN"),e("CGK","SYD"),e("DEL","SIN"),e("DEL","HND"),e("DEL","HKG"),e("DEL","ICN"),e("HKG","ICN"),e("HKG","MNL"),e("HKG","PVG"),e("HKG","SIN"),e("HKG","TPE"),e("ICN","HND"),e("ICN","PEK"),e("ICN","PVG"),e("SIN","HND"),e("SIN","KUL"),e("SIN","MNL"),e("SIN","SYD"),e("KUL","MNL"),e("KUL","PER"),e("MNL","HND"),e("PEK","HND"),e("PEK","PVG"),e("PEK","SFO"),e("PVG","HND"),e("PVG","TPE"),e("TPE","HND"),e("HND","SYD"),e("HND","BNE"),e("BNE","SYD"),e("BNE","MEL"),e("MEL","SYD"),e("MEL","AKL"),e("PER","MEL"),e("PER","SYD"),e("PER","SIN"),e("SYD","AKL")],Y=[{id:"trans-atlantic",title:"New York to Tokyo",description:"Compare westbound Pacific hops against eastbound European and Gulf hub routes.",source:"JFK",destination:"HND",algorithm:"dijkstra"},{id:"southern-cross",title:"London to Sydney",description:"Route across Europe, the Gulf, Asia, and Oceania using weighted flight times.",source:"LHR",destination:"SYD",algorithm:"astar"},{id:"africa-to-americas",title:"Johannesburg to Los Angeles",description:"Study how different algorithms connect Africa to the Americas through major hubs.",source:"JNB",destination:"LAX",algorithm:"greedy"},{id:"fewest-stops",title:"Toronto to Singapore",description:"Use BFS to minimize the number of airport connections, ignoring flight duration.",source:"YYZ",destination:"SIN",algorithm:"bfs"}];function W(s){return new Map(s.map(i=>[i.code,i]))}function G(s,i){return s.flatMap(n=>n.source===i?[{code:n.destination,route:n}]:n.destination===i?[{code:n.source,route:n}]:[])}function _(s,i,n){return s.find(l=>l.source===i&&l.destination===n||l.source===n&&l.destination===i)??null}function J(s,i,n,l,o){return o==="bfs"?Ne(s,i,n,l):o==="greedy"?Ce(s,i,n,l):Se(s,i,n,l,o)}function Se(s,i,n,l,o){const u=W(s),c={},x={},m=new Set,h=[{code:n,priority:0}],j=[];for(const g of s)c[g.code]=g.code===n?0:1/0,x[g.code]=null;for(j.push(E("init",n,`Start at ${n}. Set its travel time to 0 and every other airport to infinity.`,m,h,c,x));h.length>0;){h.sort((p,k)=>p.priority-k.priority);const g=h.shift();if(!m.has(g.code)){if(m.add(g.code),j.push(E("select",g.code,`Select ${g.code}, the airport with the best current priority.`,m,h,c,x)),g.code===l)break;for(const p of G(i,g.code)){if(m.has(p.code))continue;const k=c[g.code]+p.route.durationHours;if(k ${p.code} improves the route to ${c[p.code]}h.`,m,h,c,x,{from:g.code,to:p.code}))}else j.push(E("dead-end",p.code,`${g.code} -> ${p.code} is slower than the best known route.`,m,h,c,x,{from:g.code,to:p.code}))}}}const y=U(x,n,l),S=$(i,y);return j.push(E("done",l,`Route complete: ${y.join(" -> ")}`,m,h,c,x,void 0,y)),{steps:j,plan:S}}function Ne(s,i,n,l){const o=new Set([n]),u={},c={},x=[{code:n,priority:0}],m=[];for(const y of s)u[y.code]=null,c[y.code]=y.code===n?0:1/0;for(m.push(E("init",n,`Start BFS at ${n}. Each edge counts as one airport hop.`,o,x,c,u));x.length>0;){const y=x.shift();if(m.push(E("select",y.code,`Visit ${y.code} and enqueue all unseen connected airports.`,o,x,c,u)),y.code===l)break;for(const S of G(i,y.code))o.has(S.code)||(o.add(S.code),u[S.code]=y.code,c[S.code]=c[y.code]+1,x.push({code:S.code,priority:c[S.code]}),m.push(E("enqueue",S.code,`Add ${S.code} to the BFS queue at hop ${c[S.code]}.`,o,x,c,u,{from:y.code,to:S.code})))}const h=U(u,n,l),j=$(i,h);return m.push(E("done",l,`Fewest-stop route complete: ${h.join(" -> ")}`,o,x,c,u,void 0,h)),{steps:m,plan:j}}function Ce(s,i,n,l){const o=W(s),u=new Set,c={},x={},m=[];let h=n;for(const S of s)c[S.code]=null,x[S.code]=S.code===n?0:1/0;for(m.push(E("init",n,`Start greedy routing at ${n}. Always choose the neighbor closest to ${l}.`,u,[{code:n,priority:0}],x,c));h!==l;){u.add(h);const S=G(i,h).filter(p=>!u.has(p.code)).sort((p,k)=>T(o.get(p.code),o.get(l))-T(o.get(k.code),o.get(l)));if(m.push(E("select",h,`From ${h}, compare nearby hubs by straight-line distance to ${l}.`,u,S.map(p=>({code:p.code,priority:Math.round(T(o.get(p.code),o.get(l))*10)/10})),x,c)),S.length===0)break;const g=S[0];x[g.code]=Math.round((x[h]+g.route.durationHours)*10)/10,c[g.code]=h,m.push(E("relax",g.code,`Greedy picks ${g.code} as the closest-looking next airport.`,u,[],x,c,{from:h,to:g.code})),h=g.code}const j=U(c,n,l),y=$(i,j);return m.push(E("done",l,`Greedy route complete: ${j.join(" -> ")}`,u,[],x,c,void 0,j)),{steps:m,plan:y}}function E(s,i,n,l,o,u,c,x,m){return{type:s,airportCode:i,description:n,visited:Array.from(l),frontier:o.map(h=>({code:h.code,priority:h.priority})),distances:{...u},previous:{...c},relaxedRoute:x,route:m}}function U(s,i,n){const l=[];let o=n;for(;o&&(l.unshift(o),o!==i);)o=s[o];return l[0]===i?l:[]}function $(s,i){let n=0,l=0,o=0;for(let u=0;ude(),[]),o=b.useCallback((p,k,a="sine",d=.045)=>{if(!s.current)return;const f=l();if(!f)return;const M=f.createOscillator(),N=f.createGain();M.type=a,M.frequency.setValueAtTime(p,f.currentTime),N.gain.setValueAtTime(d,f.currentTime),N.gain.exponentialRampToValueAtTime(.001,f.currentTime+k),M.connect(N),N.connect(f.destination),M.start(f.currentTime),M.stop(f.currentTime+k)},[l]),u=b.useCallback((p,k,a,d=.04)=>{if(!s.current)return;const f=l();f&&p.forEach((M,N)=>{const L=f.createOscillator(),D=f.createGain(),R=f.currentTime+N*a*.75;L.type=k,L.frequency.setValueAtTime(M,R),D.gain.setValueAtTime(d,R),D.gain.exponentialRampToValueAtTime(.001,R+a),L.connect(D),D.connect(f.destination),L.start(R),L.stop(R+a)})},[l]),c=b.useCallback(()=>{o(523.25,.08,"triangle",.035)},[o]),x=b.useCallback(()=>{u([392,523.25,659.25],"sine",.1,.045)},[u]),m=b.useCallback(p=>{o(Z[p%Z.length],.055,"sine",.025)},[o]),h=b.useCallback(()=>{u([196,246.94,329.63,392],"triangle",.09,.04)},[u]),j=b.useCallback(p=>{o(p%2===0?587.33:659.25,.09,"triangle",.035)},[o]),y=b.useCallback(()=>{u([523.25,659.25,783.99,1046.5],"sine",.11,.05)},[u]),S=b.useCallback(()=>{o(220,.08,"sawtooth",.025)},[o]),g=b.useCallback(p=>{s.current=p,n(p)},[]);return{soundEnabled:i,toggleSound:g,playAirportSelect:c,playRoutePlanned:x,playScanStep:m,playFlightStart:h,playWaypoint:j,playArrive:y,playPause:S}}function De(){const[s,i]=b.useState("JFK"),[n,l]=b.useState("HND"),[o,u]=b.useState("dijkstra"),[c,x]=b.useState(()=>J(F,B,"JFK","HND","dijkstra")),[m,h]=b.useState(0),[j,y]=b.useState("idle"),[S,g]=b.useState(!1),[p,k]=b.useState(null),a=b.useRef(null),d=Me(),f=c.steps[m]??null,M=b.useCallback(()=>{a.current&&(window.clearInterval(a.current),a.current=null)},[]);b.useEffect(()=>M,[M]);const N=b.useCallback((A=s,C=n,w=o)=>{M();const ee=J(F,B,A,C,w);x(ee),h(0),y("planning"),g(!1),k(null),d.playRoutePlanned()},[o,M,n,d,s]),L=b.useCallback(A=>{A!==n&&(d.playAirportSelect(),i(A),N(A,n,o))},[o,n,N,d]),D=b.useCallback(A=>{A!==s&&(d.playAirportSelect(),l(A),N(s,A,o))},[o,N,d,s]),R=b.useCallback(A=>{d.playAirportSelect(),u(A),N(s,n,A)},[n,N,d,s]),I=b.useCallback(A=>{const C=Y.find(w=>w.id===A);C&&(d.playAirportSelect(),i(C.source),l(C.destination),u(C.algorithm),N(C.source,C.destination,C.algorithm))},[N,d]),K=b.useCallback(()=>{y("planning"),h(A=>{const C=Math.min(A+1,c.steps.length-1);return C!==A&&d.playScanStep(C),C})},[c.steps.length,d]),z=b.useCallback(()=>{y("planning"),h(A=>{const C=Math.max(A-1,0);return C!==A&&d.playScanStep(C),C})},[d]),P=b.useCallback(()=>{M();const A=c.plan.path;if(A.length<2)return;y("flying"),g(!0),d.playFlightStart();let C=0,w=0;k({from:A[0],to:A[1],progress:0}),a.current=window.setInterval(()=>{if(w+=.045,w>=1){if(C+=1,w=0,C>=A.length-1){M(),k(null),g(!1),y("complete"),d.playArrive();return}d.playWaypoint(C)}k({from:A[C],to:A[C+1],progress:w})},80)},[M,c.plan.path,d]),q=b.useCallback(()=>{if(S){M(),g(!1),d.playPause();return}y("planning"),g(!0),d.playScanStep(m),a.current=window.setInterval(()=>{h(A=>{if(A>=c.steps.length-1)return M(),g(!1),P(),A;const C=A+1;return d.playScanStep(C),C})},420)},[P,M,S,c.steps.length,d,m]),Q=b.useMemo(()=>{const A=f?.route??c.plan.path;return A.slice(0,-1).map((C,w)=>_(B,C,A[w+1])).filter(Boolean)},[f?.route,c.plan.path]);return{airports:F,routes:B,scenarios:Y,source:s,destination:n,algorithm:o,result:c,currentStep:f,stepIndex:m,phase:j,isPlaying:S,flightProgress:p,activeRoute:Q,soundEnabled:d.soundEnabled,toggleSound:d.toggleSound,changeSource:L,changeDestination:D,changeAlgorithm:R,loadScenario:I,planRoute:N,stepForward:K,stepBack:z,playPlanning:q,animateFlight:P}}function He(){const s=De();return t.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden bg-[radial-gradient(circle_at_top_left,rgba(14,165,233,0.16),transparent_30%),radial-gradient(circle_at_bottom_right,rgba(59,130,246,0.14),transparent_28%)]",children:[t.jsx("div",{className:"border-b border-slate-800/70 bg-slate-950/75 px-4 py-3 shadow-lg shadow-black/20 backdrop-blur-sm md:px-6",children:t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.24em] text-sky-400",children:"Airport Network Algorithms"}),t.jsx("h2",{className:"text-lg font-bold text-white",children:"World Map Flight Simulator"})]}),t.jsxs("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[t.jsx(v,{label:"Algorithm",value:O[s.algorithm].label,tone:"indigo"}),t.jsx(v,{label:"Origin",value:s.source,tone:"sky"}),t.jsx(v,{label:"Destination",value:s.destination,tone:"emerald"}),t.jsx(v,{label:"Stops",value:s.result.plan.stops.toString(),tone:"amber"})]})]})}),t.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-auto p-4 md:p-6 xl:flex-row",children:[t.jsx(ge,{airports:s.airports,routes:s.routes,source:s.source,destination:s.destination,currentStep:s.currentStep,plan:s.result.plan,flightProgress:s.flightProgress,onSelectSource:s.changeSource,onSelectDestination:s.changeDestination}),t.jsx(be,{airports:s.airports,scenarios:s.scenarios,source:s.source,destination:s.destination,algorithm:s.algorithm,plan:s.result.plan,currentStep:s.currentStep,stepIndex:s.stepIndex,totalSteps:s.result.steps.length,phase:s.phase,isPlaying:s.isPlaying,soundEnabled:s.soundEnabled,onSourceChange:s.changeSource,onDestinationChange:s.changeDestination,onAlgorithmChange:s.changeAlgorithm,onLoadScenario:s.loadScenario,onPlanRoute:()=>s.planRoute(),onStepBack:s.stepBack,onStepForward:s.stepForward,onPlay:s.playPlanning,onFly:s.animateFlight,onToggleSound:s.toggleSound})]})]})}function v({label:s,value:i,tone:n}){const l={indigo:"bg-indigo-500/10 text-indigo-200 ring-indigo-500/25",sky:"bg-sky-500/10 text-sky-200 ring-sky-500/25",emerald:"bg-emerald-500/10 text-emerald-200 ring-emerald-500/25",amber:"bg-amber-500/10 text-amber-200 ring-amber-500/25"};return t.jsxs("div",{className:`rounded-full px-3 py-1.5 text-[10px] ring-1 ${l[n]}`,children:[t.jsx("span",{className:"mr-1 uppercase tracking-wider opacity-60",children:s}),t.jsx("span",{className:"font-mono font-bold",children:i})]})}export{He as default};
diff --git a/docs/assets/arrow-left-C4-GmPRq.js b/docs/assets/arrow-left-eH0A06ps.js
similarity index 61%
rename from docs/assets/arrow-left-C4-GmPRq.js
rename to docs/assets/arrow-left-eH0A06ps.js
index 01bebb1..6078ff0 100644
--- a/docs/assets/arrow-left-C4-GmPRq.js
+++ b/docs/assets/arrow-left-eH0A06ps.js
@@ -1 +1 @@
-import{c as o}from"./index-lLadk08S.js";const e=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],r=o("arrow-left",e);export{r as A};
+import{c as o}from"./index-CB1-0H6I.js";const e=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],r=o("arrow-left",e);export{r as A};
diff --git a/docs/assets/chevron-right-Cp_zyb7b.js b/docs/assets/chevron-right-ChVmoNtO.js
similarity index 69%
rename from docs/assets/chevron-right-Cp_zyb7b.js
rename to docs/assets/chevron-right-ChVmoNtO.js
index 31df73d..ca7bd25 100644
--- a/docs/assets/chevron-right-Cp_zyb7b.js
+++ b/docs/assets/chevron-right-ChVmoNtO.js
@@ -1 +1 @@
-import{c as o}from"./index-lLadk08S.js";const e=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],n=o("chevron-left",e);const t=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],h=o("chevron-right",t);export{n as C,h as a};
+import{c as o}from"./index-CB1-0H6I.js";const e=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],n=o("chevron-left",e);const t=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],h=o("chevron-right",t);export{n as C,h as a};
diff --git a/docs/assets/eye-off-Pd9-Vzxg.js b/docs/assets/eye-off-DMbwz3T2.js
similarity index 85%
rename from docs/assets/eye-off-Pd9-Vzxg.js
rename to docs/assets/eye-off-DMbwz3T2.js
index 6bc17a4..3e98988 100644
--- a/docs/assets/eye-off-Pd9-Vzxg.js
+++ b/docs/assets/eye-off-DMbwz3T2.js
@@ -1 +1 @@
-import{c as e}from"./index-lLadk08S.js";const a=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],t=e("eye-off",a);export{t as E};
+import{c as e}from"./index-CB1-0H6I.js";const a=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],t=e("eye-off",a);export{t as E};
diff --git a/docs/assets/index-BlMQg5Z1.css b/docs/assets/index-BlMQg5Z1.css
deleted file mode 100644
index 5c09d5c..0000000
--- a/docs/assets/index-BlMQg5Z1.css
+++ /dev/null
@@ -1 +0,0 @@
-@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-950:oklch(25.8% .092 26.042);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-500:oklch(79.5% .184 86.047);--color-lime-500:oklch(76.8% .233 130.85);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-500:oklch(62.7% .265 303.9);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-zinc-500:oklch(55.2% .016 285.938);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-200:oklch(92.3% .003 48.717);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--drop-shadow-sm:0 1px 2px #00000026;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-1{inset:calc(var(--spacing) * 1)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-x-1{inset-inline:calc(var(--spacing) * 1)}.inset-x-6{inset-inline:calc(var(--spacing) * 6)}.inset-y-1{inset-block:calc(var(--spacing) * 1)}.start{inset-inline-start:var(--spacing)}.start\!{inset-inline-start:var(--spacing)!important}.end{inset-inline-end:var(--spacing)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-5{top:calc(var(--spacing) * 5)}.top-16{top:calc(var(--spacing) * 16)}.-right-0\.5{right:calc(var(--spacing) * -.5)}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.-right-14{right:calc(var(--spacing) * -14)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1{right:calc(var(--spacing) * 1)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-5{right:calc(var(--spacing) * 5)}.right-6{right:calc(var(--spacing) * 6)}.-bottom-1{bottom:calc(var(--spacing) * -1)}.-bottom-5{bottom:calc(var(--spacing) * -5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-1{bottom:calc(var(--spacing) * 1)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-5{bottom:calc(var(--spacing) * 5)}.left-0{left:calc(var(--spacing) * 0)}.left-1{left:calc(var(--spacing) * 1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.left-5{left:calc(var(--spacing) * 5)}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.order-last{order:9999}.col-1{grid-column:1}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-px{margin-top:1px}.mr-1{margin-right:calc(var(--spacing) * 1)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-square{aspect-ratio:1}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-28{height:calc(var(--spacing) * 28)}.h-32{height:calc(var(--spacing) * 32)}.h-36{height:calc(var(--spacing) * 36)}.h-56{height:calc(var(--spacing) * 56)}.h-72{height:calc(var(--spacing) * 72)}.h-\[22px\]{height:22px}.h-\[500px\]{height:500px}.h-full{height:100%}.h-screen{height:100vh}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[55vh\]{max-height:55vh}.max-h-\[420px\]{max-height:420px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-\[5\.5rem\]{min-height:5.5rem}.min-h-\[5rem\]{min-height:5rem}.min-h-\[40vh\]{min-height:40vh}.min-h-\[56px\]{min-height:56px}.min-h-\[200px\]{min-height:200px}.min-h-\[240px\]{min-height:240px}.min-h-\[250px\]{min-height:250px}.min-h-\[260px\]{min-height:260px}.min-h-\[290px\]{min-height:290px}.min-h-\[300px\]{min-height:300px}.min-h-\[420px\]{min-height:420px}.min-h-\[520px\]{min-height:520px}.min-h-\[620px\]{min-height:620px}.w-0{width:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-\[22px\]{width:22px}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[200px\]{max-width:200px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-12{min-width:calc(var(--spacing) * 12)}.min-w-14{min-width:calc(var(--spacing) * 14)}.min-w-\[56px\]{min-width:56px}.min-w-\[560px\]{min-width:560px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.rotate-\[-1deg\]{rotate:-1deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[shake_0\.3s_ease-in-out_2\]{animation:.3s ease-in-out 2 shake}.animate-path{animation:.4s ease-out forwards path}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.animate-visited{animation:.4s ease-out forwards visited}.animate-wall{animation:.2s ease-out forwards wall}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[1px\],.gap-px{gap:1px}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-5{row-gap:calc(var(--spacing) * 5)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[1\.5rem\]{border-radius:1.5rem}.rounded-\[1\.15rem\]{border-radius:1.15rem}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-\[1px\]{border-radius:1px}.rounded-\[50\%\]{border-radius:50%}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-sm{border-top-left-radius:var(--radius-sm);border-top-right-radius:var(--radius-sm)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-400{border-color:var(--color-amber-400)}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-950\/10{border-color:#4619011a}@supports (color:color-mix(in lab,red,red)){.border-amber-950\/10{border-color:color-mix(in oklab,var(--color-amber-950) 10%,transparent)}}.border-amber-950\/25{border-color:#46190140}@supports (color:color-mix(in lab,red,red)){.border-amber-950\/25{border-color:color-mix(in oklab,var(--color-amber-950) 25%,transparent)}}.border-black\/15{border-color:#00000026}@supports (color:color-mix(in lab,red,red)){.border-black\/15{border-color:color-mix(in oklab,var(--color-black) 15%,transparent)}}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-950\/30{border-color:#1624564d}@supports (color:color-mix(in lab,red,red)){.border-blue-950\/30{border-color:color-mix(in oklab,var(--color-blue-950) 30%,transparent)}}.border-emerald-300\/50{border-color:#5ee9b580}@supports (color:color-mix(in lab,red,red)){.border-emerald-300\/50{border-color:color-mix(in oklab,var(--color-emerald-300) 50%,transparent)}}.border-emerald-400{border-color:var(--color-emerald-400)}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-700\/30{border-color:#0079564d}@supports (color:color-mix(in lab,red,red)){.border-emerald-700\/30{border-color:color-mix(in oklab,var(--color-emerald-700) 30%,transparent)}}.border-emerald-900\/20{border-color:#004e3b33}@supports (color:color-mix(in lab,red,red)){.border-emerald-900\/20{border-color:color-mix(in oklab,var(--color-emerald-900) 20%,transparent)}}.border-emerald-900\/30{border-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-900\/30{border-color:color-mix(in oklab,var(--color-emerald-900) 30%,transparent)}}.border-emerald-900\/40{border-color:#004e3b66}@supports (color:color-mix(in lab,red,red)){.border-emerald-900\/40{border-color:color-mix(in oklab,var(--color-emerald-900) 40%,transparent)}}.border-emerald-950\/20{border-color:#002c2233}@supports (color:color-mix(in lab,red,red)){.border-emerald-950\/20{border-color:color-mix(in oklab,var(--color-emerald-950) 20%,transparent)}}.border-emerald-950\/40{border-color:#002c2266}@supports (color:color-mix(in lab,red,red)){.border-emerald-950\/40{border-color:color-mix(in oklab,var(--color-emerald-950) 40%,transparent)}}.border-emerald-950\/50{border-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.border-emerald-950\/50{border-color:color-mix(in oklab,var(--color-emerald-950) 50%,transparent)}}.border-indigo-500\/20{border-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/20{border-color:color-mix(in oklab,var(--color-indigo-500) 20%,transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/30{border-color:color-mix(in oklab,var(--color-indigo-500) 30%,transparent)}}.border-orange-400{border-color:var(--color-orange-400)}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-rose-400{border-color:var(--color-rose-400)}.border-sky-500\/20{border-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/20{border-color:color-mix(in oklab,var(--color-sky-500) 20%,transparent)}}.border-slate-500{border-color:var(--color-slate-500)}.border-slate-500\/60{border-color:#62748e99}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/60{border-color:color-mix(in oklab,var(--color-slate-500) 60%,transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/40{border-color:#31415866}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/40{border-color:color-mix(in oklab,var(--color-slate-700) 40%,transparent)}}.border-slate-700\/50{border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/50{border-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.border-slate-700\/60{border-color:#31415899}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/60{border-color:color-mix(in oklab,var(--color-slate-700) 60%,transparent)}}.border-slate-800\/30{border-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/30{border-color:color-mix(in oklab,var(--color-slate-800) 30%,transparent)}}.border-slate-800\/40{border-color:#1d293d66}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/40{border-color:color-mix(in oklab,var(--color-slate-800) 40%,transparent)}}.border-slate-800\/50{border-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/50{border-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.border-slate-800\/60{border-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/60{border-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.border-slate-800\/70{border-color:#1d293db3}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/70{border-color:color-mix(in oklab,var(--color-slate-800) 70%,transparent)}}.border-slate-800\/80{border-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/80{border-color:color-mix(in oklab,var(--color-slate-800) 80%,transparent)}}.border-slate-950\/50{border-color:#02061880}@supports (color:color-mix(in lab,red,red)){.border-slate-950\/50{border-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.border-slate-950\/70{border-color:#020618b3}@supports (color:color-mix(in lab,red,red)){.border-slate-950\/70{border-color:color-mix(in oklab,var(--color-slate-950) 70%,transparent)}}.border-violet-500\/30{border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/30{border-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.border-r-slate-500\/60{border-right-color:#62748e99}@supports (color:color-mix(in lab,red,red)){.border-r-slate-500\/60{border-right-color:color-mix(in oklab,var(--color-slate-500) 60%,transparent)}}.border-b-slate-500\/60{border-bottom-color:#62748e99}@supports (color:color-mix(in lab,red,red)){.border-b-slate-500\/60{border-bottom-color:color-mix(in oklab,var(--color-slate-500) 60%,transparent)}}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(16\,185\,129\,0\.18\)\,transparent_36\%\)\,rgba\(16\,185\,129\,0\.05\)\]{background-color:radial-gradient(circle at top left,#10b9812e,transparent 36%),#10b9810d}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(249\,115\,22\,0\.18\)\,transparent_38\%\)\,rgba\(15\,23\,42\,0\.8\)\]{background-color:radial-gradient(circle at top left,#f973162e,transparent 38%),#0f172acc}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500) 15%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-cyan-300{background-color:var(--color-cyan-300)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/10{background-color:color-mix(in oklab,var(--color-cyan-500) 10%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500) 15%,transparent)}}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/20{background-color:color-mix(in oklab,var(--color-cyan-500) 20%,transparent)}}.bg-cyan-500\/40{background-color:#00b7d766}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/40{background-color:color-mix(in oklab,var(--color-cyan-500) 40%,transparent)}}.bg-cyan-500\/60{background-color:#00b7d799}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/60{background-color:color-mix(in oklab,var(--color-cyan-500) 60%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-400\/10{background-color:#00d2941a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/10{background-color:color-mix(in oklab,var(--color-emerald-400) 10%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.bg-emerald-500\/25{background-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/25{background-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.bg-emerald-500\/70{background-color:#00bb7fb3}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/70{background-color:color-mix(in oklab,var(--color-emerald-500) 70%,transparent)}}.bg-emerald-900\/25{background-color:#004e3b40}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/25{background-color:color-mix(in oklab,var(--color-emerald-900) 25%,transparent)}}.bg-emerald-950{background-color:var(--color-emerald-950)}.bg-emerald-950\/20{background-color:#002c2233}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/20{background-color:color-mix(in oklab,var(--color-emerald-950) 20%,transparent)}}.bg-emerald-950\/25{background-color:#002c2240}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/25{background-color:color-mix(in oklab,var(--color-emerald-950) 25%,transparent)}}.bg-green-500\/70{background-color:#00c758b3}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/70{background-color:color-mix(in oklab,var(--color-green-500) 70%,transparent)}}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-400\/40{background-color:#7d87ff66}@supports (color:color-mix(in lab,red,red)){.bg-indigo-400\/40{background-color:color-mix(in oklab,var(--color-indigo-400) 40%,transparent)}}.bg-indigo-400\/80{background-color:#7d87ffcc}@supports (color:color-mix(in lab,red,red)){.bg-indigo-400\/80{background-color:color-mix(in oklab,var(--color-indigo-400) 80%,transparent)}}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-500\/5{background-color:#625fff0d}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/5{background-color:color-mix(in oklab,var(--color-indigo-500) 5%,transparent)}}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-indigo-500\/20{background-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/20{background-color:color-mix(in oklab,var(--color-indigo-500) 20%,transparent)}}.bg-indigo-500\/25{background-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/25{background-color:color-mix(in oklab,var(--color-indigo-500) 25%,transparent)}}.bg-indigo-500\/70{background-color:#625fffb3}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/70{background-color:color-mix(in oklab,var(--color-indigo-500) 70%,transparent)}}.bg-indigo-900{background-color:var(--color-indigo-900)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-orange-500\/15{background-color:#fe6e0026}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/15{background-color:color-mix(in oklab,var(--color-orange-500) 15%,transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-red-500\/70{background-color:#fb2c36b3}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/70{background-color:color-mix(in oklab,var(--color-red-500) 70%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-950\/70{background-color:#460809b3}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/70{background-color:color-mix(in oklab,var(--color-red-950) 70%,transparent)}}.bg-rose-300{background-color:var(--color-rose-300)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/15{background-color:color-mix(in oklab,var(--color-rose-500) 15%,transparent)}}.bg-rose-500\/20{background-color:#ff235733}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/20{background-color:color-mix(in oklab,var(--color-rose-500) 20%,transparent)}}.bg-rose-500\/25{background-color:#ff235740}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/25{background-color:color-mix(in oklab,var(--color-rose-500) 25%,transparent)}}.bg-rose-500\/40{background-color:#ff235766}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/40{background-color:color-mix(in oklab,var(--color-rose-500) 40%,transparent)}}.bg-rose-500\/60{background-color:#ff235799}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/60{background-color:color-mix(in oklab,var(--color-rose-500) 60%,transparent)}}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-sky-500\/15{background-color:#00a5ef26}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/15{background-color:color-mix(in oklab,var(--color-sky-500) 15%,transparent)}}.bg-sky-500\/25{background-color:#00a5ef40}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/25{background-color:color-mix(in oklab,var(--color-sky-500) 25%,transparent)}}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500) 10%,transparent)}}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/30{background-color:color-mix(in oklab,var(--color-slate-800) 30%,transparent)}}.bg-slate-800\/40{background-color:#1d293d66}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/40{background-color:color-mix(in oklab,var(--color-slate-800) 40%,transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/50{background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.bg-slate-800\/60{background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/60{background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.bg-slate-800\/70{background-color:#1d293db3}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/70{background-color:color-mix(in oklab,var(--color-slate-800) 70%,transparent)}}.bg-slate-800\/80{background-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/80{background-color:color-mix(in oklab,var(--color-slate-800) 80%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}.bg-slate-900\/55{background-color:#0f172b8c}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/55{background-color:color-mix(in oklab,var(--color-slate-900) 55%,transparent)}}.bg-slate-900\/60{background-color:#0f172b99}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/60{background-color:color-mix(in oklab,var(--color-slate-900) 60%,transparent)}}.bg-slate-900\/70{background-color:#0f172bb3}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/70{background-color:color-mix(in oklab,var(--color-slate-900) 70%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900) 80%,transparent)}}.bg-slate-950\/25{background-color:#02061840}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/25{background-color:color-mix(in oklab,var(--color-slate-950) 25%,transparent)}}.bg-slate-950\/35{background-color:#02061859}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/35{background-color:color-mix(in oklab,var(--color-slate-950) 35%,transparent)}}.bg-slate-950\/40{background-color:#02061866}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.bg-slate-950\/45{background-color:#02061873}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/45{background-color:color-mix(in oklab,var(--color-slate-950) 45%,transparent)}}.bg-slate-950\/50{background-color:#02061880}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/50{background-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.bg-slate-950\/55{background-color:#0206188c}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/55{background-color:color-mix(in oklab,var(--color-slate-950) 55%,transparent)}}.bg-slate-950\/60{background-color:#02061899}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/60{background-color:color-mix(in oklab,var(--color-slate-950) 60%,transparent)}}.bg-slate-950\/70{background-color:#020618b3}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/70{background-color:color-mix(in oklab,var(--color-slate-950) 70%,transparent)}}.bg-slate-950\/75{background-color:#020618bf}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/75{background-color:color-mix(in oklab,var(--color-slate-950) 75%,transparent)}}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/80{background-color:color-mix(in oklab,var(--color-slate-950) 80%,transparent)}}.bg-slate-950\/85{background-color:#020618d9}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/85{background-color:color-mix(in oklab,var(--color-slate-950) 85%,transparent)}}.bg-slate-950\/90{background-color:#020618e6}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/90{background-color:color-mix(in oklab,var(--color-slate-950) 90%,transparent)}}.bg-slate-950\/95{background-color:#020618f2}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/95{background-color:color-mix(in oklab,var(--color-slate-950) 95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-500\/5{background-color:#8d54ff0d}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/5{background-color:color-mix(in oklab,var(--color-violet-500) 5%,transparent)}}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/10{background-color:color-mix(in oklab,var(--color-violet-500) 10%,transparent)}}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-violet-500\/20{background-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/20{background-color:color-mix(in oklab,var(--color-violet-500) 20%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/70{background-color:#edb200b3}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/70{background-color:color-mix(in oklab,var(--color-yellow-500) 70%,transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.9\)\,rgba\(6\,78\,59\,0\.34\)\)\]{background-image:linear-gradient(135deg,#0f172ae6,#064e3b57)}.bg-\[linear-gradient\(rgba\(148\,163\,184\,0\.03\)_1px\,transparent_1px\)\]{background-image:linear-gradient(#94a3b808 1px,#0000 1px)}.bg-\[radial-gradient\(circle_at_1px_1px\,rgba\(148\,163\,184\,0\.12\)_1px\,transparent_0\)\]{background-image:radial-gradient(circle at 1px 1px,#94a3b81f 1px,#0000 0)}.bg-\[radial-gradient\(circle_at_18\%_22\%\,rgba\(14\,165\,233\,0\.16\)\,transparent_28\%\)\,radial-gradient\(circle_at_78\%_72\%\,rgba\(59\,130\,246\,0\.12\)\,transparent_30\%\)\]{background-image:radial-gradient(circle at 18% 22%,#0ea5e929,#0000 28%),radial-gradient(circle at 78% 72%,#3b82f61f,#0000 30%)}.bg-\[radial-gradient\(circle_at_20\%_10\%\,rgba\(56\,189\,248\,0\.14\)\,transparent_28\%\)\,radial-gradient\(circle_at_80\%_80\%\,rgba\(34\,197\,94\,0\.1\)\,transparent_30\%\)\]{background-image:radial-gradient(circle at 20% 10%,#38bdf824,#0000 28%),radial-gradient(circle at 80% 80%,#22c55e1a,#0000 30%)}.bg-\[radial-gradient\(circle_at_30\%_15\%\,rgba\(255\,255\,255\,0\.8\)\,transparent_38\%\)\,linear-gradient\(135deg\,rgba\(255\,255\,255\,0\.35\)\,transparent\)\]{background-image:radial-gradient(circle at 30% 15%,#fffc,#0000 38%),linear-gradient(135deg,#ffffff59,#0000)}.bg-\[radial-gradient\(circle_at_top\,rgba\(16\,185\,129\,0\.08\)\,transparent_34\%\)\,linear-gradient\(180deg\,rgba\(15\,23\,42\,0\)\,rgba\(6\,78\,59\,0\.16\)\)\]{background-image:radial-gradient(circle at top,#10b98114,#0000 34%),linear-gradient(#0f172a00,#064e3b29)}.bg-\[radial-gradient\(circle_at_top\,rgba\(16\,185\,129\,0\.12\)\,transparent_34\%\)\,linear-gradient\(180deg\,rgba\(15\,23\,42\,0\)\,rgba\(6\,78\,59\,0\.16\)\)\]{background-image:radial-gradient(circle at top,#10b9811f,#0000 34%),linear-gradient(#0f172a00,#064e3b29)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(14\,165\,233\,0\.16\)\,transparent_30\%\)\,radial-gradient\(circle_at_bottom_right\,rgba\(34\,197\,94\,0\.12\)\,transparent_28\%\)\]{background-image:radial-gradient(circle at 0 0,#0ea5e929,#0000 30%),radial-gradient(circle at 100% 100%,#22c55e1f,#0000 28%)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(14\,165\,233\,0\.16\)\,transparent_30\%\)\,radial-gradient\(circle_at_bottom_right\,rgba\(59\,130\,246\,0\.14\)\,transparent_28\%\)\]{background-image:radial-gradient(circle at 0 0,#0ea5e929,#0000 30%),radial-gradient(circle at 100% 100%,#3b82f624,#0000 28%)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(16\,185\,129\,0\.12\)\,transparent_34\%\)\,linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.96\)\,rgba\(6\,78\,59\,0\.28\)\)\]{background-image:radial-gradient(circle at 0 0,#10b9811f,#0000 34%),linear-gradient(135deg,#0f172af5,#064e3b47)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(16\,185\,129\,0\.14\)\,transparent_34\%\)\,linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.96\)\,rgba\(6\,78\,59\,0\.32\)\)\]{background-image:radial-gradient(circle at 0 0,#10b98124,#0000 34%),linear-gradient(135deg,#0f172af5,#064e3b52)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(16\,185\,129\,0\.14\)\,transparent_34\%\)\,linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.96\)\,rgba\(6\,78\,59\,0\.36\)\)\]{background-image:radial-gradient(circle at 0 0,#10b98124,#0000 34%),linear-gradient(135deg,#0f172af5,#064e3b5c)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(16\,185\,129\,0\.18\)\,transparent_34\%\)\,linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.96\)\,rgba\(6\,78\,59\,0\.42\)\)\]{background-image:radial-gradient(circle at 0 0,#10b9812e,#0000 34%),linear-gradient(135deg,#0f172af5,#064e3b6b)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(34\,197\,94\,0\.18\)\,transparent_34\%\)\,linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.96\)\,rgba\(6\,78\,59\,0\.36\)\)\]{background-image:radial-gradient(circle at 0 0,#22c55e2e,#0000 34%),linear-gradient(135deg,#0f172af5,#064e3b5c)}.bg-\[radial-gradient\(circle_at_top_left\,rgba\(249\,115\,22\,0\.12\)\,transparent_28\%\)\,radial-gradient\(circle_at_bottom_right\,rgba\(99\,102\,241\,0\.12\)\,transparent_30\%\)\]{background-image:radial-gradient(circle at 0 0,#f973161f,#0000 28%),radial-gradient(circle at 100% 100%,#6366f11f,#0000 30%)}.bg-\[radial-gradient\(ellipse_at_center\,_var\(--tw-gradient-stops\)\)\]{background-image:radial-gradient(ellipse at center,var(--tw-gradient-stops))}.from-amber-500{--tw-gradient-from:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-black\/25{--tw-gradient-from:#00000040}@supports (color:color-mix(in lab,red,red)){.from-black\/25{--tw-gradient-from:color-mix(in oklab, var(--color-black) 25%, transparent)}}.from-black\/25{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-400{--tw-gradient-from:var(--color-cyan-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-500{--tw-gradient-from:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-300{--tw-gradient-from:var(--color-emerald-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-500{--tw-gradient-from:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-500\/80{--tw-gradient-from:#00bb7fcc}@supports (color:color-mix(in lab,red,red)){.from-emerald-500\/80{--tw-gradient-from:color-mix(in oklab, var(--color-emerald-500) 80%, transparent)}}.from-emerald-500\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-950\/50{--tw-gradient-from:#002c2280}@supports (color:color-mix(in lab,red,red)){.from-emerald-950\/50{--tw-gradient-from:color-mix(in oklab, var(--color-emerald-950) 50%, transparent)}}.from-emerald-950\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-fuchsia-500{--tw-gradient-from:var(--color-fuchsia-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-indigo-400{--tw-gradient-from:var(--color-indigo-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-indigo-500\/20{--tw-gradient-from:#625fff33}@supports (color:color-mix(in lab,red,red)){.from-indigo-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.from-indigo-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-indigo-900\/20{--tw-gradient-from:#312c8533}@supports (color:color-mix(in lab,red,red)){.from-indigo-900\/20{--tw-gradient-from:color-mix(in oklab, var(--color-indigo-900) 20%, transparent)}}.from-indigo-900\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-lime-500{--tw-gradient-from:var(--color-lime-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-orange-500{--tw-gradient-from:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-purple-500{--tw-gradient-from:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-red-500\/20{--tw-gradient-from:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.from-red-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.from-red-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-rose-400{--tw-gradient-from:var(--color-rose-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-rose-500{--tw-gradient-from:var(--color-rose-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-rose-500\/20{--tw-gradient-from:#ff235733}@supports (color:color-mix(in lab,red,red)){.from-rose-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.from-rose-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-rose-500\/80{--tw-gradient-from:#ff2357cc}@supports (color:color-mix(in lab,red,red)){.from-rose-500\/80{--tw-gradient-from:color-mix(in oklab, var(--color-rose-500) 80%, transparent)}}.from-rose-500\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-sky-500{--tw-gradient-from:var(--color-sky-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-500{--tw-gradient-from:var(--color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-stone-50{--tw-gradient-from:var(--color-stone-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-teal-500{--tw-gradient-from:var(--color-teal-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-violet-500{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-amber-50{--tw-gradient-via:var(--color-amber-50);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-violet-400{--tw-gradient-via:var(--color-violet-400);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-amber-400{--tw-gradient-to:var(--color-amber-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-400{--tw-gradient-to:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-500{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-300{--tw-gradient-to:var(--color-cyan-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-400{--tw-gradient-to:var(--color-cyan-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500\/20{--tw-gradient-to:#00b7d733}@supports (color:color-mix(in lab,red,red)){.to-cyan-500\/20{--tw-gradient-to:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.to-cyan-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-emerald-500{--tw-gradient-to:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-emerald-700{--tw-gradient-to:var(--color-emerald-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-fuchsia-400{--tw-gradient-to:var(--color-fuchsia-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-fuchsia-500{--tw-gradient-to:var(--color-fuchsia-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-500{--tw-gradient-to:var(--color-green-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-500\/80{--tw-gradient-to:#00c758cc}@supports (color:color-mix(in lab,red,red)){.to-green-500\/80{--tw-gradient-to:color-mix(in oklab, var(--color-green-500) 80%, transparent)}}.to-green-500\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-500{--tw-gradient-to:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-400{--tw-gradient-to:var(--color-orange-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-500{--tw-gradient-to:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-pink-400{--tw-gradient-to:var(--color-pink-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-pink-500{--tw-gradient-to:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-pink-500\/80{--tw-gradient-to:#f6339acc}@supports (color:color-mix(in lab,red,red)){.to-pink-500\/80{--tw-gradient-to:color-mix(in oklab, var(--color-pink-500) 80%, transparent)}}.to-pink-500\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-purple-500{--tw-gradient-to:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-red-500{--tw-gradient-to:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-rose-500\/20{--tw-gradient-to:#ff235733}@supports (color:color-mix(in lab,red,red)){.to-rose-500\/20{--tw-gradient-to:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.to-rose-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-sky-500{--tw-gradient-to:var(--color-sky-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-stone-200{--tw-gradient-to:var(--color-stone-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-teal-400{--tw-gradient-to:var(--color-teal-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-teal-500{--tw-gradient-to:var(--color-teal-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-violet-400{--tw-gradient-to:var(--color-violet-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-violet-500{--tw-gradient-to:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-violet-500\/20{--tw-gradient-to:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.to-violet-500\/20{--tw-gradient-to:color-mix(in oklab, var(--color-violet-500) 20%, transparent)}}.to-violet-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-zinc-500{--tw-gradient-to:var(--color-zinc-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-\[length\:24px_24px\]{background-size:24px 24px}.bg-\[length\:100\%_22px\]{background-size:100% 22px}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-200{color:var(--color-amber-200)}.text-amber-300{color:var(--color-amber-300)}.text-amber-300\/60{color:#ffd23699}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/60{color:color-mix(in oklab,var(--color-amber-300) 60%,transparent)}}.text-amber-300\/70{color:#ffd236b3}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/70{color:color-mix(in oklab,var(--color-amber-300) 70%,transparent)}}.text-amber-300\/80{color:#ffd236cc}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/80{color:color-mix(in oklab,var(--color-amber-300) 80%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400) 90%,transparent)}}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-50\/80{color:#ecfdf5cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-50\/80{color:color-mix(in oklab,var(--color-emerald-50) 80%,transparent)}}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-100\/45{color:#d0fae573}@supports (color:color-mix(in lab,red,red)){.text-emerald-100\/45{color:color-mix(in oklab,var(--color-emerald-100) 45%,transparent)}}.text-emerald-100\/50{color:#d0fae580}@supports (color:color-mix(in lab,red,red)){.text-emerald-100\/50{color:color-mix(in oklab,var(--color-emerald-100) 50%,transparent)}}.text-emerald-100\/65{color:#d0fae5a6}@supports (color:color-mix(in lab,red,red)){.text-emerald-100\/65{color:color-mix(in oklab,var(--color-emerald-100) 65%,transparent)}}.text-emerald-100\/70{color:#d0fae5b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-100\/70{color:color-mix(in oklab,var(--color-emerald-100) 70%,transparent)}}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/60{color:#00d29499}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/60{color:color-mix(in oklab,var(--color-emerald-400) 60%,transparent)}}.text-emerald-500{color:var(--color-emerald-500)}.text-indigo-100{color:var(--color-indigo-100)}.text-indigo-200{color:var(--color-indigo-200)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-orange-300{color:var(--color-orange-300)}.text-orange-400{color:var(--color-orange-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-200{color:var(--color-rose-200)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-sky-400{color:var(--color-sky-400)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900\/35{color:#0f172b59}@supports (color:color-mix(in lab,red,red)){.text-slate-900\/35{color:color-mix(in oklab,var(--color-slate-900) 35%,transparent)}}.text-slate-950\/50{color:#02061880}@supports (color:color-mix(in lab,red,red)){.text-slate-950\/50{color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.text-transparent{color:#0000}.text-violet-300{color:var(--color-violet-300)}.text-violet-400{color:var(--color-violet-400)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-slate-500::placeholder{color:var(--color-slate-500)}.placeholder-slate-600::placeholder{color:var(--color-slate-600)}.caret-emerald-400{caret-color:var(--color-emerald-400)}.accent-indigo-400{accent-color:var(--color-indigo-400)}.accent-indigo-500{accent-color:var(--color-indigo-500)}.accent-rose-400{accent-color:var(--color-rose-400)}.accent-rose-500{accent-color:var(--color-rose-500)}.accent-sky-500{accent-color:var(--color-sky-500)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_26px_rgba\(52\,211\,153\,0\.45\)\]{--tw-shadow:0 0 26px var(--tw-shadow-color,#34d39973);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_18px_rgba\(0\,0\,0\,0\.35\)\,inset_0_-3px_0_rgba\(0\,0\,0\,0\.18\)\]{--tw-shadow:0 10px 18px var(--tw-shadow-color,#00000059), inset 0 -3px 0 var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-400\/20{--tw-shadow-color:#fcbb0033}@supports (color:color-mix(in lab,red,red)){.shadow-amber-400\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-400) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-amber-400\/30{--tw-shadow-color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.shadow-amber-400\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-400) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-amber-500\/20{--tw-shadow-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.shadow-amber-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab,red,red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/35{--tw-shadow-color:#00000059}@supports (color:color-mix(in lab,red,red)){.shadow-black\/35{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 35%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab,red,red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-blue-500\/20{--tw-shadow-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.shadow-blue-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-blue-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-500\/20{--tw-shadow-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.shadow-cyan-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-500\/15{--tw-shadow-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-500\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-500) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-500\/20{--tw-shadow-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-500\/30{--tw-shadow-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-500\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-950\/20{--tw-shadow-color:#002c2233}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-950\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-950) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-fuchsia-500\/20{--tw-shadow-color:#e12afb33}@supports (color:color-mix(in lab,red,red)){.shadow-fuchsia-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-fuchsia-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-indigo-500\/10{--tw-shadow-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-indigo-500\/20{--tw-shadow-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-indigo-500\/25{--tw-shadow-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/25{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 25%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-lime-500\/20{--tw-shadow-color:#80cd0033}@supports (color:color-mix(in lab,red,red)){.shadow-lime-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-lime-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-orange-500\/20{--tw-shadow-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.shadow-orange-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-orange-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-purple-500\/20{--tw-shadow-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.shadow-purple-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-purple-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-red-500\/20{--tw-shadow-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.shadow-red-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-red-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-red-950\/20{--tw-shadow-color:#46080933}@supports (color:color-mix(in lab,red,red)){.shadow-red-950\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-red-950) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-500\/15{--tw-shadow-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.shadow-rose-500\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-500\/20{--tw-shadow-color:#ff235733}@supports (color:color-mix(in lab,red,red)){.shadow-rose-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-500\/25{--tw-shadow-color:#ff235740}@supports (color:color-mix(in lab,red,red)){.shadow-rose-500\/25{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 25%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-500\/30{--tw-shadow-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.shadow-rose-500\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-sky-500\/20{--tw-shadow-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.shadow-sky-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-sky-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-sky-950\/40{--tw-shadow-color:#052f4a66}@supports (color:color-mix(in lab,red,red)){.shadow-sky-950\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-sky-950) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-500\/20{--tw-shadow-color:#62748e33}@supports (color:color-mix(in lab,red,red)){.shadow-slate-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-teal-500\/20{--tw-shadow-color:#00baa733}@supports (color:color-mix(in lab,red,red)){.shadow-teal-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-teal-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-violet-500\/20{--tw-shadow-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.shadow-violet-500\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-violet-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-amber-300\/50{--tw-ring-color:#ffd23680}@supports (color:color-mix(in lab,red,red)){.ring-amber-300\/50{--tw-ring-color:color-mix(in oklab, var(--color-amber-300) 50%, transparent)}}.ring-amber-500\/20{--tw-ring-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.ring-amber-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.ring-amber-500\/25{--tw-ring-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.ring-amber-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-amber-500) 25%, transparent)}}.ring-amber-500\/30{--tw-ring-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.ring-amber-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.ring-amber-500\/40{--tw-ring-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.ring-amber-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-amber-500) 40%, transparent)}}.ring-blue-500\/30{--tw-ring-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.ring-blue-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.ring-cyan-300\/40{--tw-ring-color:#53eafd66}@supports (color:color-mix(in lab,red,red)){.ring-cyan-300\/40{--tw-ring-color:color-mix(in oklab, var(--color-cyan-300) 40%, transparent)}}.ring-cyan-500\/20{--tw-ring-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.ring-cyan-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.ring-cyan-500\/30{--tw-ring-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.ring-cyan-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.ring-cyan-500\/40{--tw-ring-color:#00b7d766}@supports (color:color-mix(in lab,red,red)){.ring-cyan-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-cyan-500) 40%, transparent)}}.ring-emerald-200{--tw-ring-color:var(--color-emerald-200)}.ring-emerald-400\/50{--tw-ring-color:#00d29480}@supports (color:color-mix(in lab,red,red)){.ring-emerald-400\/50{--tw-ring-color:color-mix(in oklab, var(--color-emerald-400) 50%, transparent)}}.ring-emerald-500{--tw-ring-color:var(--color-emerald-500)}.ring-emerald-500\/20{--tw-ring-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.ring-emerald-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.ring-emerald-500\/25{--tw-ring-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.ring-emerald-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 25%, transparent)}}.ring-emerald-500\/30{--tw-ring-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.ring-emerald-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.ring-emerald-500\/40{--tw-ring-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.ring-emerald-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 40%, transparent)}}.ring-emerald-500\/50{--tw-ring-color:#00bb7f80}@supports (color:color-mix(in lab,red,red)){.ring-emerald-500\/50{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 50%, transparent)}}.ring-indigo-300{--tw-ring-color:var(--color-indigo-300)}.ring-indigo-400{--tw-ring-color:var(--color-indigo-400)}.ring-indigo-400\/40{--tw-ring-color:#7d87ff66}@supports (color:color-mix(in lab,red,red)){.ring-indigo-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-indigo-400) 40%, transparent)}}.ring-indigo-400\/60{--tw-ring-color:#7d87ff99}@supports (color:color-mix(in lab,red,red)){.ring-indigo-400\/60{--tw-ring-color:color-mix(in oklab, var(--color-indigo-400) 60%, transparent)}}.ring-indigo-500{--tw-ring-color:var(--color-indigo-500)}.ring-indigo-500\/15{--tw-ring-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/15{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 15%, transparent)}}.ring-indigo-500\/20{--tw-ring-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.ring-indigo-500\/25{--tw-ring-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 25%, transparent)}}.ring-indigo-500\/30{--tw-ring-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.ring-indigo-500\/35{--tw-ring-color:#625fff59}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/35{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 35%, transparent)}}.ring-indigo-500\/40{--tw-ring-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.ring-indigo-500\/50{--tw-ring-color:#625fff80}@supports (color:color-mix(in lab,red,red)){.ring-indigo-500\/50{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 50%, transparent)}}.ring-orange-200{--tw-ring-color:var(--color-orange-200)}.ring-orange-500\/25{--tw-ring-color:#fe6e0040}@supports (color:color-mix(in lab,red,red)){.ring-orange-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-orange-500) 25%, transparent)}}.ring-orange-500\/30{--tw-ring-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.ring-orange-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-orange-500) 30%, transparent)}}.ring-red-500\/30{--tw-ring-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.ring-red-500\/60{--tw-ring-color:#fb2c3699}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/60{--tw-ring-color:color-mix(in oklab, var(--color-red-500) 60%, transparent)}}.ring-rose-400\/40{--tw-ring-color:#ff667f66}@supports (color:color-mix(in lab,red,red)){.ring-rose-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-rose-400) 40%, transparent)}}.ring-rose-500\/20{--tw-ring-color:#ff235733}@supports (color:color-mix(in lab,red,red)){.ring-rose-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.ring-rose-500\/25{--tw-ring-color:#ff235740}@supports (color:color-mix(in lab,red,red)){.ring-rose-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 25%, transparent)}}.ring-rose-500\/30{--tw-ring-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.ring-rose-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.ring-rose-500\/40{--tw-ring-color:#ff235766}@supports (color:color-mix(in lab,red,red)){.ring-rose-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.ring-rose-500\/50{--tw-ring-color:#ff235780}@supports (color:color-mix(in lab,red,red)){.ring-rose-500\/50{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 50%, transparent)}}.ring-sky-200{--tw-ring-color:var(--color-sky-200)}.ring-sky-500\/20{--tw-ring-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.ring-sky-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-sky-500) 20%, transparent)}}.ring-sky-500\/25{--tw-ring-color:#00a5ef40}@supports (color:color-mix(in lab,red,red)){.ring-sky-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-sky-500) 25%, transparent)}}.ring-sky-500\/30{--tw-ring-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.ring-sky-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.ring-sky-500\/40{--tw-ring-color:#00a5ef66}@supports (color:color-mix(in lab,red,red)){.ring-sky-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-sky-500) 40%, transparent)}}.ring-slate-500{--tw-ring-color:var(--color-slate-500)}.ring-slate-600{--tw-ring-color:var(--color-slate-600)}.ring-slate-700{--tw-ring-color:var(--color-slate-700)}.ring-slate-700\/30{--tw-ring-color:#3141584d}@supports (color:color-mix(in lab,red,red)){.ring-slate-700\/30{--tw-ring-color:color-mix(in oklab, var(--color-slate-700) 30%, transparent)}}.ring-slate-700\/40{--tw-ring-color:#31415866}@supports (color:color-mix(in lab,red,red)){.ring-slate-700\/40{--tw-ring-color:color-mix(in oklab, var(--color-slate-700) 40%, transparent)}}.ring-slate-700\/50{--tw-ring-color:#31415880}@supports (color:color-mix(in lab,red,red)){.ring-slate-700\/50{--tw-ring-color:color-mix(in oklab, var(--color-slate-700) 50%, transparent)}}.ring-slate-800{--tw-ring-color:var(--color-slate-800)}.ring-slate-800\/50{--tw-ring-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.ring-slate-800\/50{--tw-ring-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.ring-slate-800\/60{--tw-ring-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.ring-slate-800\/60{--tw-ring-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.ring-slate-800\/70{--tw-ring-color:#1d293db3}@supports (color:color-mix(in lab,red,red)){.ring-slate-800\/70{--tw-ring-color:color-mix(in oklab, var(--color-slate-800) 70%, transparent)}}.ring-slate-800\/80{--tw-ring-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.ring-slate-800\/80{--tw-ring-color:color-mix(in oklab, var(--color-slate-800) 80%, transparent)}}.ring-violet-400\/40{--tw-ring-color:#a685ff66}@supports (color:color-mix(in lab,red,red)){.ring-violet-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-violet-400) 40%, transparent)}}.ring-violet-500\/20{--tw-ring-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.ring-violet-500\/20{--tw-ring-color:color-mix(in oklab, var(--color-violet-500) 20%, transparent)}}.ring-violet-500\/30{--tw-ring-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.ring-violet-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-violet-500) 30%, transparent)}}.ring-violet-500\/40{--tw-ring-color:#8d54ff66}@supports (color:color-mix(in lab,red,red)){.ring-violet-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-violet-500) 40%, transparent)}}.ring-white\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.ring-white\/10{--tw-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.ring-white\/30{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.ring-white\/30{--tw-ring-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.ring-yellow-500\/25{--tw-ring-color:#edb20040}@supports (color:color-mix(in lab,red,red)){.ring-yellow-500\/25{--tw-ring-color:color-mix(in oklab, var(--color-yellow-500) 25%, transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-xl{--tw-blur:blur(var(--blur-xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[animation-delay\:120ms\]{animation-delay:.12s}.\[animation-delay\:240ms\]{animation-delay:.24s}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-2:hover{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.01\]:hover{scale:1.01}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:rotate-1:hover{rotate:1deg}.hover\:border-slate-600\/60:hover{border-color:#45556c99}@supports (color:color-mix(in lab,red,red)){.hover\:border-slate-600\/60:hover{border-color:color-mix(in oklab,var(--color-slate-600) 60%,transparent)}}.hover\:bg-amber-500\/25:hover{background-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/25:hover{background-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.hover\:bg-amber-500\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/30:hover{background-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.hover\:bg-blue-500\/30:hover{background-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-500\/30:hover{background-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.hover\:bg-cyan-500\/30:hover{background-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-cyan-500\/30:hover{background-color:color-mix(in oklab,var(--color-cyan-500) 30%,transparent)}}.hover\:bg-emerald-500\/25:hover{background-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/25:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.hover\:bg-indigo-500\/10:hover{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-500\/10:hover{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.hover\:bg-indigo-500\/15:hover{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-500\/15:hover{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.hover\:bg-indigo-500\/25:hover{background-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-500\/25:hover{background-color:color-mix(in oklab,var(--color-indigo-500) 25%,transparent)}}.hover\:bg-indigo-500\/30:hover{background-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-500\/30:hover{background-color:color-mix(in oklab,var(--color-indigo-500) 30%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-red-500\/25:hover{background-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/25:hover{background-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.hover\:bg-rose-500\/25:hover{background-color:#ff235740}@supports (color:color-mix(in lab,red,red)){.hover\:bg-rose-500\/25:hover{background-color:color-mix(in oklab,var(--color-rose-500) 25%,transparent)}}.hover\:bg-rose-500\/30:hover{background-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-rose-500\/30:hover{background-color:color-mix(in oklab,var(--color-rose-500) 30%,transparent)}}.hover\:bg-sky-500\/25:hover{background-color:#00a5ef40}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sky-500\/25:hover{background-color:color-mix(in oklab,var(--color-sky-500) 25%,transparent)}}.hover\:bg-slate-700\/50:hover{background-color:#31415880}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-700\/50:hover{background-color:color-mix(in oklab,var(--color-slate-700) 50%,transparent)}}.hover\:bg-slate-700\/60:hover{background-color:#31415899}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-700\/60:hover{background-color:color-mix(in oklab,var(--color-slate-700) 60%,transparent)}}.hover\:bg-slate-700\/70:hover{background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-700\/70:hover{background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.hover\:bg-slate-700\/80:hover{background-color:#314158cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-700\/80:hover{background-color:color-mix(in oklab,var(--color-slate-700) 80%,transparent)}}.hover\:bg-slate-800\/30:hover{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/30:hover{background-color:color-mix(in oklab,var(--color-slate-800) 30%,transparent)}}.hover\:bg-slate-800\/40:hover{background-color:#1d293d66}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/40:hover{background-color:color-mix(in oklab,var(--color-slate-800) 40%,transparent)}}.hover\:bg-slate-800\/50:hover{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/50:hover{background-color:color-mix(in oklab,var(--color-slate-800) 50%,transparent)}}.hover\:bg-slate-800\/60:hover{background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/60:hover{background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.hover\:bg-slate-800\/70:hover{background-color:#1d293db3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/70:hover{background-color:color-mix(in oklab,var(--color-slate-800) 70%,transparent)}}.hover\:bg-slate-800\/80:hover{background-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-800\/80:hover{background-color:color-mix(in oklab,var(--color-slate-800) 80%,transparent)}}.hover\:bg-slate-900\/70:hover{background-color:#0f172bb3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-900\/70:hover{background-color:color-mix(in oklab,var(--color-slate-900) 70%,transparent)}}.hover\:bg-slate-900\/80:hover{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-900\/80:hover{background-color:color-mix(in oklab,var(--color-slate-900) 80%,transparent)}}.hover\:bg-violet-500\/30:hover{background-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-violet-500\/30:hover{background-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.hover\:from-indigo-500\/30:hover{--tw-gradient-from:#625fff4d}@supports (color:color-mix(in lab,red,red)){.hover\:from-indigo-500\/30:hover{--tw-gradient-from:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.hover\:from-indigo-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:from-rose-500\/30:hover{--tw-gradient-from:#ff23574d}@supports (color:color-mix(in lab,red,red)){.hover\:from-rose-500\/30:hover{--tw-gradient-from:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.hover\:from-rose-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-cyan-500\/30:hover{--tw-gradient-to:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.hover\:to-cyan-500\/30:hover{--tw-gradient-to:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.hover\:to-cyan-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-violet-500\/30:hover{--tw-gradient-to:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.hover\:to-violet-500\/30:hover{--tw-gradient-to:color-mix(in oklab, var(--color-violet-500) 30%, transparent)}}.hover\:to-violet-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.hover\:text-rose-400:hover{color:var(--color-rose-400)}.hover\:text-slate-300:hover{color:var(--color-slate-300)}.hover\:text-slate-400:hover{color:var(--color-slate-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[0_18px_28px_rgba\(0\,0\,0\,0\.45\)\]:hover{--tw-shadow:0 18px 28px var(--tw-shadow-color,#00000073);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-1:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-indigo-500\/10:hover{--tw-shadow-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-indigo-500\/10:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-indigo-500\/30:hover{--tw-shadow-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-indigo-500\/30:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-indigo-500\/40:hover{--tw-shadow-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-indigo-500\/40:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-500) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:ring-indigo-400\/50:hover{--tw-ring-color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.hover\:ring-indigo-400\/50:hover{--tw-ring-color:color-mix(in oklab, var(--color-indigo-400) 50%, transparent)}}.hover\:ring-indigo-500\/20:hover{--tw-ring-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.hover\:ring-indigo-500\/20:hover{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.hover\:ring-indigo-500\/30:hover{--tw-ring-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.hover\:ring-indigo-500\/30:hover{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.hover\:ring-white\/20:hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:ring-white\/20:hover{--tw-ring-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-cyan-500\/50:focus{--tw-ring-color:#00b7d780}@supports (color:color-mix(in lab,red,red)){.focus\:ring-cyan-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-cyan-500) 50%, transparent)}}.focus\:ring-indigo-500\/50:focus{--tw-ring-color:#625fff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-indigo-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 50%, transparent)}}.focus\:ring-rose-500\/50:focus{--tw-ring-color:#ff235780}@supports (color:color-mix(in lab,red,red)){.focus\:ring-rose-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-rose-500) 50%, transparent)}}.active\:translate-y-0:active{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.98\]:active{scale:.98}.active\:scale-\[0\.99\]:active{scale:.99}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:hidden{display:none}.sm\:h-9{height:calc(var(--spacing) * 9)}.sm\:h-14{height:calc(var(--spacing) * 14)}.sm\:h-16{height:calc(var(--spacing) * 16)}.sm\:h-28{height:calc(var(--spacing) * 28)}.sm\:h-44{height:calc(var(--spacing) * 44)}.sm\:h-\[4\.6rem\]{height:4.6rem}.sm\:w-9{width:calc(var(--spacing) * 9)}.sm\:w-10{width:calc(var(--spacing) * 10)}.sm\:w-12{width:calc(var(--spacing) * 12)}.sm\:w-14{width:calc(var(--spacing) * 14)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:48rem){.md\:order-first{order:-9999}.md\:mb-4{margin-bottom:calc(var(--spacing) * 4)}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-14{height:calc(var(--spacing) * 14)}.md\:h-20{height:calc(var(--spacing) * 20)}.md\:h-52{height:calc(var(--spacing) * 52)}.md\:h-\[4\.35rem\]{height:4.35rem}.md\:max-h-full{max-height:100%}.md\:max-h-none{max-height:none}.md\:min-h-0{min-height:calc(var(--spacing) * 0)}.md\:min-h-\[400px\]{min-height:400px}.md\:w-14{width:calc(var(--spacing) * 14)}.md\:w-16{width:calc(var(--spacing) * 16)}.md\:w-72{width:calc(var(--spacing) * 72)}.md\:w-80{width:calc(var(--spacing) * 80)}.md\:max-w-sm{max-width:var(--container-sm)}.md\:flex-1{flex:1}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.md\:gap-2{gap:calc(var(--spacing) * 2)}.md\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:gap-6{gap:calc(var(--spacing) * 6)}:where(.md\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.md\:overflow-auto{overflow:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:p-5{padding:calc(var(--spacing) * 5)}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:w-64{width:calc(var(--spacing) * 64)}.lg\:shrink-0{flex-shrink:0}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media(min-width:80rem){.xl\:order-first{order:-9999}.xl\:min-h-0{min-height:calc(var(--spacing) * 0)}.xl\:w-80{width:calc(var(--spacing) * 80)}.xl\:w-88{width:calc(var(--spacing) * 88)}.xl\:w-\[410px\]{width:410px}.xl\:shrink-0{flex-shrink:0}.xl\:flex-row{flex-direction:row}.xl\:gap-4{gap:calc(var(--spacing) * 4)}}@media(min-width:96rem){.\32xl\:w-\[460px\]{width:460px}}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:linear-gradient(135deg,#0f172a,#1e1b4b,#0f172a);min-height:100vh;margin:0}@keyframes visited{0%{opacity:0;border-radius:50%;transform:scale(.3)}50%{opacity:.8;border-radius:30%;transform:scale(1.1)}to{opacity:1;border-radius:0;transform:scale(1)}}@keyframes path{0%{opacity:0;transform:scale(.5)}50%{opacity:1;transform:scale(1.3)}to{opacity:1;transform:scale(1)}}@keyframes wall{0%{transform:scale(.6)}50%{transform:scale(1.1)}to{transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}50%{transform:translate(6px)}75%{transform:translate(-4px)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
diff --git a/docs/assets/index-lLadk08S.js b/docs/assets/index-CB1-0H6I.js
similarity index 98%
rename from docs/assets/index-lLadk08S.js
rename to docs/assets/index-CB1-0H6I.js
index 78dff2d..28e184b 100644
--- a/docs/assets/index-lLadk08S.js
+++ b/docs/assets/index-CB1-0H6I.js
@@ -1,4 +1,4 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AlgorithmPlaygroundPage-BXRKH-KW.js","assets/AlgorithmCodePanel-8oFtkLXS.js","assets/audioContext-NbgqvQGz.js","assets/shuffle-ADbBlETg.js","assets/chevron-right-Cp_zyb7b.js","assets/play-b2ZiatJ3.js","assets/rotate-ccw-DMjSdzg2.js","assets/volume-x-CjLNPeax.js","assets/LinkedListAlgorithmsPage-Bf0XShdT.js","assets/linkedListAlgo-0_WYfSZm.js","assets/arrow-left-C4-GmPRq.js","assets/LinkedListAlgoPage-BYNl9xdF.js","assets/pause-CU46RSeo.js","assets/GraphTraversalPage-DIP79SzH.js","assets/index-Cj8HB9AY.js","assets/square-QnQTkqqU.js","assets/SortingPage-DY4J_cuF.js","assets/index-iw_6MvvU.js","assets/SudokuPage-D621aJ2E.js","assets/zap-Y8cI0o9G.js","assets/TreeTraversalPage-CXh2nfI3.js","assets/TriePage-C2SmMNzK.js","assets/plus-NICMDkhr.js","assets/BalancedTreePage-C8htDNti.js","assets/StackPage-B2mxdyxa.js","assets/useDSSound-CPhif-bj.js","assets/trash-2-veeiSg5V.js","assets/QueuePage-DUKmQFK6.js","assets/ArrayPage-DrT8Biad.js","assets/LinkedListPage-CUYUVQCV.js","assets/AdvancedStructurePage-DOo62Byj.js","assets/FibonacciGamePage-BpvILNCs.js","assets/trophy-BeLgwZ5q.js","assets/lightbulb-CbLvQr23.js","assets/timer-Baa2rAz8.js","assets/DijkstraGamePage-DHV7Q9c2.js","assets/map-C5ZomysO.js","assets/route-DiDkH3-5.js","assets/eye-off-Pd9-Vzxg.js","assets/BattlePage-BfxUg7Va.js","assets/MahjongGamePage-CweJKrxc.js","assets/skip-forward-S_F054t1.js","assets/EvolutionSimulatorPage-DGrLIA6R.js","assets/RubiksCubeGamePage-Dhk65GX9.js","assets/WorldMapGamePage-BfAD3dv0.js","assets/GitPage-BLlFYf7b.js"])))=>i.map(i=>d[i]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AlgorithmPlaygroundPage-NFfq4IMN.js","assets/AlgorithmCodePanel-B_cngBmY.js","assets/audioContext-NbgqvQGz.js","assets/shuffle-DZnyoAGL.js","assets/chevron-right-ChVmoNtO.js","assets/play-SZ6Nqtz8.js","assets/rotate-ccw-CDlWXRsI.js","assets/volume-x-CKT6TOtL.js","assets/LinkedListAlgorithmsPage-rBTSWR3w.js","assets/linkedListAlgo-0_WYfSZm.js","assets/arrow-left-eH0A06ps.js","assets/LinkedListAlgoPage-DLEBZwaB.js","assets/pause-DgUWKqjY.js","assets/GraphTraversalPage-Cz8zdw1I.js","assets/index-DrhCNtmA.js","assets/square-B4KY3il9.js","assets/SortingPage-BJLOOKGn.js","assets/index-iw_6MvvU.js","assets/SudokuPage-Twa08t7Q.js","assets/zap-C3nU9HZ_.js","assets/TreeTraversalPage-CzjDdla1.js","assets/TriePage-DRyr69yQ.js","assets/plus-B3nnW8Th.js","assets/BalancedTreePage-coFjRyUc.js","assets/StackPage-CCdc4dwi.js","assets/useDSSound-BJYLYD0f.js","assets/trash-2-C4vvSjjZ.js","assets/QueuePage-CBnrjsK1.js","assets/ArrayPage-BRkafP6e.js","assets/LinkedListPage-CsPqMWtn.js","assets/AdvancedStructurePage-BcFhvyhq.js","assets/FibonacciGamePage-ZpMjqDh9.js","assets/trophy-DE-EF49m.js","assets/lightbulb-Bmtk7V6i.js","assets/timer-rgbBx2U0.js","assets/DijkstraGamePage-aIRKpG_-.js","assets/map-Bnco4-k1.js","assets/route-BuoNUCzx.js","assets/eye-off-DMbwz3T2.js","assets/BattlePage-DY6YXR_B.js","assets/MahjongGamePage-Bdpv27zp.js","assets/skip-forward-DWTiDap8.js","assets/EvolutionSimulatorPage-CHVguTgo.js","assets/RubiksCubeGamePage-DLo6uYa2.js","assets/WorldMapGamePage-DMM-CLOk.js","assets/GitPage-BFm-nVBR.js"])))=>i.map(i=>d[i]);
(function(){const f=document.createElement("link").relList;if(f&&f.supports&&f.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))s(h);new MutationObserver(h=>{for(const m of h)if(m.type==="childList")for(const b of m.addedNodes)b.tagName==="LINK"&&b.rel==="modulepreload"&&s(b)}).observe(document,{childList:!0,subtree:!0});function o(h){const m={};return h.integrity&&(m.integrity=h.integrity),h.referrerPolicy&&(m.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?m.credentials="include":h.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function s(h){if(h.ep)return;h.ep=!0;const m=o(h);fetch(h.href,m)}})();var Us={exports:{}},wn={};var uh;function T1(){if(uh)return wn;uh=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function o(s,h,m){var b=null;if(m!==void 0&&(b=""+m),h.key!==void 0&&(b=""+h.key),"key"in h){m={};for(var j in h)j!=="key"&&(m[j]=h[j])}else m=h;return h=m.ref,{$$typeof:c,type:s,key:b,ref:h!==void 0?h:null,props:m}}return wn.Fragment=f,wn.jsx=o,wn.jsxs=o,wn}var ih;function A1(){return ih||(ih=1,Us.exports=T1()),Us.exports}var d=A1(),ws={exports:{}},I={};var ch;function j1(){if(ch)return I;ch=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),b=Symbol.for("react.context"),j=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),T=Symbol.for("react.activity"),w=Symbol.iterator;function X(v){return v===null||typeof v!="object"?null:(v=w&&v[w]||v["@@iterator"],typeof v=="function"?v:null)}var Q={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Y=Object.assign,H={};function K(v,U,q){this.props=v,this.context=U,this.refs=H,this.updater=q||Q}K.prototype.isReactComponent={},K.prototype.setState=function(v,U){if(typeof v!="object"&&typeof v!="function"&&v!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,v,U,"setState")},K.prototype.forceUpdate=function(v){this.updater.enqueueForceUpdate(this,v,"forceUpdate")};function et(){}et.prototype=K.prototype;function $(v,U,q){this.props=v,this.context=U,this.refs=H,this.updater=q||Q}var xt=$.prototype=new et;xt.constructor=$,Y(xt,K.prototype),xt.isPureReactComponent=!0;var St=Array.isArray;function jt(){}var F={H:null,A:null,T:null,S:null},Dt=Object.prototype.hasOwnProperty;function $t(v,U,q){var G=q.ref;return{$$typeof:c,type:v,key:U,ref:G!==void 0?G:null,props:q}}function Ue(v,U){return $t(v.type,U,v.props)}function ve(v){return typeof v=="object"&&v!==null&&v.$$typeof===c}function Wt(v){var U={"=":"=0",":":"=2"};return"$"+v.replace(/[=:]/g,function(q){return U[q]})}var we=/\/+/g;function be(v,U){return typeof v=="object"&&v!==null&&v.key!=null?Wt(""+v.key):U.toString(36)}function Ht(v){switch(v.status){case"fulfilled":return v.value;case"rejected":throw v.reason;default:switch(typeof v.status=="string"?v.then(jt,jt):(v.status="pending",v.then(function(U){v.status==="pending"&&(v.status="fulfilled",v.value=U)},function(U){v.status==="pending"&&(v.status="rejected",v.reason=U)})),v.status){case"fulfilled":return v.value;case"rejected":throw v.reason}}throw v}function O(v,U,q,G,P){var at=typeof v;(at==="undefined"||at==="boolean")&&(v=null);var ht=!1;if(v===null)ht=!0;else switch(at){case"bigint":case"string":case"number":ht=!0;break;case"object":switch(v.$$typeof){case c:case f:ht=!0;break;case N:return ht=v._init,O(ht(v._payload),U,q,G,P)}}if(ht)return P=P(v),ht=G===""?"."+be(v,0):G,St(P)?(q="",ht!=null&&(q=ht.replace(we,"$&/")+"/"),O(P,U,q,"",function(Ga){return Ga})):P!=null&&(ve(P)&&(P=Ue(P,q+(P.key==null||v&&v.key===P.key?"":(""+P.key).replace(we,"$&/")+"/")+ht)),U.push(P)),1;ht=0;var It=G===""?".":G+":";if(St(v))for(var Ct=0;Ct>>1,Et=O[gt];if(0>>1;gth(q,W))Gh(P,q)?(O[gt]=P,O[G]=W,gt=G):(O[gt]=q,O[U]=W,gt=U);else if(Gh(P,W))O[gt]=P,O[G]=W,gt=G;else break t}}return B}function h(O,B){var W=O.sortIndex-B.sortIndex;return W!==0?W:O.id-B.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;c.unstable_now=function(){return m.now()}}else{var b=Date,j=b.now();c.unstable_now=function(){return b.now()-j}}var S=[],g=[],N=1,T=null,w=3,X=!1,Q=!1,Y=!1,H=!1,K=typeof setTimeout=="function"?setTimeout:null,et=typeof clearTimeout=="function"?clearTimeout:null,$=typeof setImmediate<"u"?setImmediate:null;function xt(O){for(var B=o(g);B!==null;){if(B.callback===null)s(g);else if(B.startTime<=O)s(g),B.sortIndex=B.expirationTime,f(S,B);else break;B=o(g)}}function St(O){if(Y=!1,xt(O),!Q)if(o(S)!==null)Q=!0,jt||(jt=!0,Wt());else{var B=o(g);B!==null&&Ht(St,B.startTime-O)}}var jt=!1,F=-1,Dt=5,$t=-1;function Ue(){return H?!0:!(c.unstable_now()-$tO&&Ue());){var gt=T.callback;if(typeof gt=="function"){T.callback=null,w=T.priorityLevel;var Et=gt(T.expirationTime<=O);if(O=c.unstable_now(),typeof Et=="function"){T.callback=Et,xt(O),B=!0;break e}T===o(S)&&s(S),xt(O)}else s(S);T=o(S)}if(T!==null)B=!0;else{var v=o(g);v!==null&&Ht(St,v.startTime-O),B=!1}}break t}finally{T=null,w=W,X=!1}B=void 0}}finally{B?Wt():jt=!1}}}var Wt;if(typeof $=="function")Wt=function(){$(ve)};else if(typeof MessageChannel<"u"){var we=new MessageChannel,be=we.port2;we.port1.onmessage=ve,Wt=function(){be.postMessage(null)}}else Wt=function(){K(ve,0)};function Ht(O,B){F=K(function(){O(c.unstable_now())},B)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(O){O.callback=null},c.unstable_forceFrameRate=function(O){0>O||125gt?(O.sortIndex=W,f(g,O),o(S)===null&&O===o(g)&&(Y?(et(F),F=-1):Y=!0,Ht(St,W-gt))):(O.sortIndex=Et,f(S,O),Q||X||(Q=!0,jt||(jt=!0,Wt()))),O},c.unstable_shouldYield=Ue,c.unstable_wrapCallback=function(O){var B=w;return function(){var W=w;w=B;try{return O.apply(this,arguments)}finally{w=W}}}})(qs)),qs}var fh;function M1(){return fh||(fh=1,Bs.exports=R1()),Bs.exports}var Ls={exports:{}},Ft={};var oh;function O1(){if(oh)return Ft;oh=1;var c=Zs();function f(S){var g="https://react.dev/errors/"+S;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(f){console.error(f)}}return c(),Ls.exports=O1(),Ls.exports}var hh;function D1(){if(hh)return Hn;hh=1;var c=M1(),f=Zs(),o=N1();function s(t){var e="https://react.dev/errors/"+t;if(1Et||(t.current=gt[Et],gt[Et]=null,Et--)}function q(t,e){Et++,gt[Et]=t.current,t.current=e}var G=v(null),P=v(null),at=v(null),ht=v(null);function It(t,e){switch(q(at,e),q(P,t),q(G,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?Rd(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=Rd(e),t=Md(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}U(G),q(G,t)}function Ct(){U(G),U(P),U(at)}function Ga(t){t.memoizedState!==null&&q(ht,t);var e=G.current,l=Md(e,t.type);e!==l&&(q(P,t),q(G,l))}function Vn(t){P.current===t&&(U(G),U(P)),ht.current===t&&(U(ht),Nn._currentValue=W)}var gi,lr;function Hl(t){if(gi===void 0)try{throw Error()}catch(l){var e=l.stack.trim().match(/\n( *(at )?)/);gi=e&&e[1]||"",lr=-1)":-1 to