1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,808306,e=>{"use strict";let a=(0,e.i(456420).default)("gamepad-2",[["line",{x1:"6",x2:"10",y1:"11",y2:"11",key:"1gktln"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13",key:"qnk9ow"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12",key:"krot7o"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10",key:"1lcuu1"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z",key:"mfqc10"}]]);e.s(["Gamepad2",0,a],808306)},309642,e=>{"use strict";let a=(0,e.i(456420).default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);e.s(["LayoutGrid",0,a],309642)},758379,e=>{"use strict";let a=(0,e.i(456420).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["default",0,a])},632781,e=>{"use strict";var a=e.i(758379);e.s(["Loader2",()=>a.default])},950786,e=>{"use strict";let a=(0,e.i(456420).default)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]);e.s(["Palette",0,a],950786)},566595,e=>{"use strict";let a=(0,e.i(456420).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",0,a],566595)},328623,e=>{"use strict";let a=(0,e.i(456420).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}
1],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);e.s(["Sparkles",0,a],328623)},786563,e=>{"use strict";let a=(0,e.i(456420).default)("star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);e.s(["Star",0,a],786563)},60661,e=>{"use strict";var a=e.i(843476),t=e.i(716327),r=e.i(808306),n=e.i(309642),s=e.i(950786),o=e.i(328623),i=e.i(786563);let l=(0,e.i(456420).default)("type",[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]]);var d=e.i(720565),c=e.i(271645),m=e.i(269426),p=e.i(55374),u=e.i(93363),h=e.i(914721),g=e.i(43714),f=e.i(139267);let I=["genre_clarity","title_readability","contrast_color","composition"],x={genre_clarity:r.Gamepad2,title_readability:l,contrast_color:s.Palette,uniqueness_polish:o.Sparkles,brand_consistency:i.Star,composition:n.LayoutGrid},y={genre_clarity:"Genre clarity",title_readability:"Title clarity",contrast_color:"Contrast & color",uniqueness_polish:"Uniqueness & polish",brand_consistency:"Brand fit",composition:"Composition"},b=["Scoring genre clarityâ¦","Checking contrast & readabilityâ¦","Comparing against top performersâ¦"];e.s(["MiniCapsuleAnalyzer",0,function({location:e,standalone:r=!1}){let n,s,o,i,l=(0,d.usePostHog)(),[S,w]=(0,c.useState)(null),[v,k]=(0,c.useState)("idle"),[C,j]=(0,c.useState)(null),[N,R]=(0,c.useState)(b[0]),[T,M]=(0,c.useState)(null),[P,E]=(0,c.useState)(null),[D,L]=(0,c.useState)(!1),[_,A]=(0,c.useState)(null),B=(0,c.useRef)(0);async function O(a){let t=++B.current;l?.capture("guide_capsule_scan_started",{location:e,app_id:a.appId}),k("scanning"),M(null),E(null);let r=0;R(b[0]);let n=setInterval(()=>{r=Math.min(r+1,b.length-1),R(b[r])},700);try{let[e]=await Promise.all([fetch("/api/steam/capsule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({appId:a.appId,name:a.name,headerImage:a.headerImage,genres:a.genres,shortDescription:a.shortDescription,screenshots:a.screenshots})}),new Promise(e=>setTimeout(e,2500))]);if(t!==B.current)return;if(!e.ok){M(429===e.status?"Rate limited â try again in a minute.":"Couldn't score this capsule right now."),k("error");return}let r=await e.json();j(r),k("done")}catch{if(t!==B.current)return;M("Couldn't reach the analyzer â try again."),k("error")}finally{clearInterval(n)}}async function G(e){L(!0),A(null);try{let a=await fetch("/api/steam/scrape",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e})});if(!a.ok)return void A(429===a.status?"Too many requests â wait a moment and try again.":"Couldn't find that game â check the URL and try again.");let t=await a.json();w(t),(0,m.emitGameLoaded)(t),O(t)}catch{A("Couldn't reach Steam â check the URL and try again.")}finally{L(!1)}}(0,c.useEffect)(()=>(0,m.onGameLoaded)(e=>{w(e),j(null),O(e)}),[]);let F=C?Math.round(u.DIMENSION_KEYS.reduce((e,a)=>e+C.dimensions[a].score,0)/u.DIMENSION_KEYS.length*10):null,H=null!=F?(0,u.getScoreColor)(F/10):null;return(0,a.jsxs)(f.MiniToolShell,{tool:"capsule",location:e,title:"done"===v?void 0:"Analyse your game's capsule art",children:["idle"===v&&(0,a.jsx)(h.CapsuleCarousel,{}),"done"!==v&&"idle"!==v&&S&&(0,a.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,a.jsxs)("div",{className:"relative rounded-lg overflow-hidden w-full max-w-[320px] bg-steam-card",children:[(0,a.jsx)("img",{src:S.headerImage,alt:`${S.name} capsule`,className:"w-full h-auto block"}),"scanning"===v&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"absolute inset-0 bg-steam-blue/10 animate-scan-glow"}),(0,a.jsx)("div",{className:"absolute left-0 right-0 animate-scan-line h-[3px]",children:(0,a.jsx)("div",{className:"h-full bg-steam-blue shadow-[0_0_15px_3px_rgba(102,192,244,0.6)]"})})]})]}),"scanning"===v&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-xs text-steam-text",children:[(0,a.jsx)("span",{className:"w-3 h-3 rounded-full border-2 border-steam-blue border-t-transparent animate-spin"}),N]}),"error"===v&&(0,a.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,a.jsx)("div",{className:"text-xs text-red-300",children:T}),(0,a.jsx)("button",{type:"button",onClick:()=>O(S),className:"rounded-md bg-steam-blue px-3 py-1.5 text-xs font-semibold text-white hover:bg-steam-blue/80 transition-colors",children:"Try again"})]})]}),"done"===v&&S&&C&&null!=F&&H&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-[96px_1fr_200px] gap-3 items-stretch",children:[(0,a.jsxs)("div",{className:"rounded-xl flex flex-col items-center justify-center gap-0.5 py-3",style:{backgroundColor:`${H}14`,border:`1px solid ${H}40`},children:[(0,a.jsx)("span",{className:"text-4xl font-bold leading-none",style:{color:H},children:F}),(0,a.jsx)("span",{className:"text-xs font-semibold mt-1.5",style:{color:H},children:(0,u.getScoreLabel)(F)})]}),(0,a.jsx)("div",{className:"relative rounded-lg overflow-hidden self-center",children:(0,a.jsx)("img",{src:S.headerImage,alt:`${S.name} capsule`,className:"w-full h-auto block"})}),(0,a.jsx)("div",{className:"min-w-0 flex flex-col justify-between divide-y divide-white/6",children:I.map(e=>{let r=C.dimensions[e],n=x[e],s=(0,u.getDimensionScoreColor)(r.score),o=u.DIMENSION_META[e].color,i=P===e;return(0,a.jsxs)("button",{type:"button","aria-expanded":i,onClick:()=>E(i?null:e),className:`flex items-center gap-2 py-2 px-1.5 -mx-1.5 rounded-lg first:pt-0 last:pb-0 w-full text-left cursor-pointer transition-colors hover:bg-white/5 ${i?"":"animate-swap-hint-pulse"}`,style:{"--pulse-color":o},children:[(0,a.jsx)("span",{className:"shrink-0 w-7 h-7 rounded-full bg-white/8 flex items-center justify-center text-white/70",children:(0,a.jsx)(n,{className:"w-3.5 h-3.5"})}),(0,a.jsx)("div",{className:"min-w-0 flex-1 text-sm font-semibold text-white leading-snug truncate",children:y[e]}),(0,a.jsx)("span",{className:"shrink-0 text-xl font-bold w-6 text-right",style:{color:s},children:r.score}),(0,a.jsx)(t.ChevronDown,{className:"shrink-0 w-4 h-4 transition-transform",style:{color:o,transform:i?"rotate(180deg)":"none"}})]},e)})})]}),P&&(n=C.dimensions[P],s=x[P],o=u.DIMENSION_META[P].color,i=C.priority_fixes.find(e=>e.startsWith(`[${P}]`)),(0,a.jsxs)("div",{className:"mt-3 rounded-xl border p-3",style:{backgroundColor:`${o}0f`,borderColor:`${o}66`},children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,a.jsx)("span",{className:"shrink-0 w-7 h-7 rounded-lg border flex items-center justify-center",style:{borderColor:`${o}66`,color:o},children:(0,a.jsx)(s,{className:"w-3.5 h-3.5"})}),(0,a.jsxs)("span",{className:"text-[13px] font-bold",style:{color:o},children:[y[P]," â ",n.score,"/10"]})]}),(0,a.jsx)("div",{className:"text-[11px] text-white/60 leading-snug",children:n.detail}),i&&(0,a.jsxs)("div",{className:"mt-2 text-[11px] text-white/50 leading-snug",children:[(0,a.jsx)("b",{className:"text-white/80",children:"Suggested fix: "}),i.replace(/^\[\w+\]\s*/,"")]}),(0,a.jsx)("div",{className:"mt-3",children:(0,a.jsx)(g.MiniToolCta,{href:`/resources/free-steam-tools/steam-capsule-analyzer/analyse/${S.appId}?utm_source=guide-capsule-scanner`,label:"Get the full capsule breakdown â",event:"guide_capsule_scanner_link_clicked",location:e,appId:S.appId})})]}))]}),(r||"idle"===v)&&(0,a.jsxs)("div",{className:"mt-3",children:[(0,a.jsx)("div",{className:"text-[11px] text-steam-text-muted mb-1.5",children:S?"Analysing another game?":"Paste your Steam URL to score your own capsule:"}),(0,a.jsx)(p.UrlInput,{onSubmit:G,isLoading:D,autoFocus:!1,compact:!0}),_&&(0,a.jsx)("div",{className:"mt-2 text-xs text-red-300",children:_})]})]})}],60661)},914721,e=>{"use strict";var a=e.i(843476),t=e.i(271645),r=e.i(326102);let n=(()=>{let e=Object.values(r.topCapsulesByGenre),a=Math.max(...e.map(e=>e.length)),t=new Set,n=[];for(let r=0;r<a&&n.length<24;r++)for(let a of e){if(n.length>=24)break;let e=a[r];!e||t.has(e.headerImage)||(t.add(e.headerImage),n.push(e))}return n})(),s={maskImage:"linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%)",WebkitMaskImage:"linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%)"};function o({children:e,durationSec:r}){let n=function(){let[e,a]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=window.matchMedia("(prefers-reduced-motion: reduce)");a(e.matches);let t=()=>a(e.matches);return e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),e}();return(0,a.jsx)("div",{className:"relative overflow-hidden rounded-lg",style:s,children:(0,a.jsx)("div",{className:`flex w-max items-center gap-3 pr-3 ${n?"":"carousel-track carousel-no-pause"}`,style:n?void 0:{animationDuration:`${r}s`},children:e})})}e.s(["CapsuleCarousel",0,function(){return(0,a.jsx)(o,{durationSec:162*n.length/32,children:[0,1].map(e=>n.map(t=>(0,a.jsx)("div",{className:"shrink-0 w-[150px] rounded-md overflow-hidden bg-steam-card",children:(0,a.jsx)("img",{src:t.headerImage,alt:"",className:"w-full h-auto block",loading:"lazy"})},`${e}-${t.appId}`)))})},"TagCarousel",0,function({tags:e}){let t=[...new Set(e)];return(0,a.jsx)(o,{durationSec:90*t.length/32,children:[0,1].map(e=>t.map(t=>(0,a.jsx)("span",{className:"shrink-0 rounded-md bg-white/8 px-2.5 py-1.5 text-xs text-steam-text whitespace-nowrap",children:t},`${e}-${t}`)))})}])},43714,e=>{"use strict";var a=e.i(843476),t=e.i(522016),r=e.i(720565);e.s(["MiniToolCta",0,function({href:e,label:n,event:s,location:o,appId:i,className:l="",internal:d=!1,size:c="sm"}){let m=(0,r.usePostHog)(),p=()=>m?.capture(s,{location:o,app_id:i}),u=`inline-flex items-center justify-center gap-1.5 rounded-[8px] bg-[#ecc968] hover:bg-[#f2d885] text-black transition-colors ${"md"===c?"px-4 py-2.5 text-sm font-bold":"px-3.5 py-2 text-xs font-semibold"} ${l}`;return d?(0,a.jsx)(t.default,{href:e,onClick:p,className:u,style:{textDecoration:"none"},children:n}):(0,a.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",onClick:p,className:u,style:{textDecoration:"none"},children:n})}])},139267,e=>{"use strict";var a=e.i(843476),t=e.i(720565),r=e.i(271645);e.s(["MiniToolShell",0,function({tool:e,location:n,title:s,anchorId:o,prominentTitle:i=!1,children:l}){let d=(0,t.usePostHog)(),c=(0,r.useRef)(null),m=(0,r.useRef)(!1);return(0,r.useEffect)(()=>{let a=c.current;if(!a)return;let t=new IntersectionObserver(a=>{for(let r of a){if(m.current||!r.isIntersecting)continue;let a=r.rootBounds?.height??window.innerHeight;(r.intersectionRatio>=.5||r.intersectionRect.height>=.5*a)&&(m.current=!0,d?.capture("guide_tool_impression",{tool:e,location:n}),t.disconnect())}},{threshold:[0,.25,.5,.75,1]});return t.observe(a),()=>t.disconnect()}
1,[d,e,n]),(0,a.jsxs)("div",{ref:c,id:o,className:"not-italic scroll-mt-24 rounded-xl border border-white/8 bg-[#0d1117] px-4 py-3.5 md:px-5 md:py-4 my-6",children:[s&&(0,a.jsx)("div",{className:`mb-3 text-center text-white font-semibold leading-snug ${i?"text-lg md:text-2xl":"text-sm md:text-base"}`,children:s}),l]})}])},691886,e=>{"use strict";var a=e.i(843476),t=e.i(716327),r=e.i(786563),n=e.i(720565),s=e.i(271645),o=e.i(269426),i=e.i(55374),l=e.i(435020),d=e.i(465746),c=e.i(914721),m=e.i(43714),p=e.i(139267);let u=d.SCORE_ORDER.length,h=[.25,.5,.75,1],g=[{r:100,color:"#3fb950"},{r:83,color:"#8bc34a"},{r:66,color:"#ecc968"},{r:50,color:"#f0a742"},{r:33,color:"#e8743c"},{r:16,color:"#f85149"}];function f(e){return 2*Math.PI*e/u-Math.PI/2}function I(e,a){let t=f(e),r=Math.max(0,Math.min(100,a))/100*96;return[150+r*Math.cos(t),150+r*Math.sin(t)]}function x({dims:e}){let t=d.SCORE_ORDER.map(a=>Math.round(10*Math.max(0,Math.min(10,e[a])))),r=t.map((e,a)=>I(a,e)),n=r.map(([e,a])=>`${e},${a}`).join(" ");return(0,a.jsxs)("svg",{viewBox:"0 0 300 300",className:"w-full max-w-[210px] mx-auto",role:"img","aria-label":"Tag score radar chart",children:[h.map(e=>(0,a.jsx)("circle",{cx:150,cy:150,r:96*e,fill:"none",stroke:"rgba(255,255,255,0.12)",strokeWidth:1},e)),d.SCORE_ORDER.map((e,t)=>{let[r,n]=I(t,100);return(0,a.jsx)("line",{x1:150,y1:150,x2:r,y2:n,stroke:"rgba(255,255,255,0.12)",strokeWidth:1},t)}),g.map(e=>{let r=t.map((a,t)=>I(t,Math.min(a,e.r))).map(([e,a])=>`${e},${a}`).join(" ");return(0,a.jsx)("polygon",{points:r,fill:e.color,stroke:"#0d1117",strokeWidth:1},e.r)}),(0,a.jsx)("polygon",{points:n,fill:"none",stroke:"rgba(236,201,104,0.65)",strokeWidth:1.5}),r.map(([e,r],n)=>(0,a.jsx)("circle",{cx:e,cy:r,r:4,fill:(0,d.scoreColor)(t[n]),stroke:"#0d1117",strokeWidth:1.5},n)),d.SCORE_ORDER.map((e,t)=>{let r,[n,s]=(r=f(t),[150+122*Math.cos(r),150+122*Math.sin(r)]);return(0,a.jsx)("text",{x:n,y:s,textAnchor:"middle",dominantBaseline:"middle",fontSize:12,fill:"#8f98a0",children:d.SCORE_LABELS[e]},e)})]})}let y={"top-seller":{dot:"#66c0f4",label:"Strong performer"},solid:{dot:"#8f98a0",label:"Solid"},swap:{dot:"#ecc968",label:""}}
1,b=["Souls-like","Roguelike Deckbuilder","Cozy","Metroidvania","Survival","Base Building","Automation","Deckbuilder","Turn-Based Strategy","Crafting","Simulation","City Builder","Bullet Hell","Farming Sim","Colony Sim","Tactical RPG","Roguelite","Open World Survival Craft","Precision Platformer","Card Game","Sandbox","Dungeon Crawler","Life Sim","Immersive Sim"];e.s(["TagScorePanel",0,function({location:e,standalone:u=!1}){let h,g,f,I=(0,n.usePostHog)(),[S,w]=(0,s.useState)(null),[v,k]=(0,s.useState)("idle"),[C,j]=(0,s.useState)(null),[N,R]=(0,s.useState)(null),[T,M]=(0,s.useState)(!1),[P,E]=(0,s.useState)(null),D=(0,s.useRef)(0);async function L(a){if(!a.tags?.length)return void k("error");let t=++D.current;I?.capture("guide_tag_scan_started",{location:e,app_id:a.appId}),k("scanning"),R(null);try{let[e]=await Promise.all([(0,d.computeTagScore)(a.appId,a.tags),new Promise(e=>setTimeout(e,900))]);if(t!==D.current)return;j(e),k("done")}catch{if(t!==D.current)return;k("error")}}async function _(e){M(!0),E(null);try{let a=await fetch("/api/steam/scrape",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e})});if(!a.ok)return void E(429===a.status?"Too many requests â wait a moment and try again.":"Couldn't find that game â check the URL and try again.");let t=await a.json();w(t),(0,o.emitGameLoaded)(t),L(t)}catch{E("Couldn't reach Steam â check the URL and try again.")}finally{M(!1)}}return(0,s.useEffect)(()=>(0,o.onGameLoaded)(e=>{w(e),j(null),L(e)}),[]),(0,a.jsxs)(p.MiniToolShell,{tool:"tags",location:e,title:"done"===v?void 0:"Analyse your game's Steam tags",children:["idle"===v&&(0,a.jsx)(c.TagCarousel,{tags:b}),"done"!==v&&"idle"!==v&&S&&(0,a.jsxs)("div",{children:["scanning"===v&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-xs text-steam-text",children:[(0,a.jsx)("span",{className:"w-3 h-3 rounded-full border-2 border-steam-blue border-t-transparent animate-spin"}),"Comparing against similar gamesâ¦"]}),"error"===v&&(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"text-xs text-red-300",children:S.tags?.length?"Couldn't score these tags.":`No tags found for ${S.name}.`}),!!S.tags?.length&&(0,a.jsx)("button",{type:"button",onClick:()=>L(S),className:"rounded-md bg-steam-blue px-3 py-1.5 text-xs font-semibold text-white hover:bg-steam-blue/80 transition-colors",children:"Try again"})]})]}),"done"===v&&S&&C&&(h=(0,l.buildSwapAccentMap)(C.top5.filter(e=>"swap"===e.status).map(e=>e.tag)),f=(g=C.top5.find(e=>e.tag===N))?h.get(g.tag):null,(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-[100px_1fr_220px] gap-3 items-stretch",children:[(0,a.jsxs)("div",{className:"rounded-xl flex flex-col items-center justify-center gap-0.5 py-3",style:{backgroundColor:`${(0,d.scoreColor)(C.score)}14`,border:`1px solid ${(0,d.scoreColor)(C.score)}40`},children:[(0,a.jsx)("span",{className:"text-4xl font-bold leading-none",style:{color:(0,d.scoreColor)(C.score)},children:C.score}),(0,a.jsx)("span",{className:"text-xs font-semibold text-white mt-1.5",children:"Tag score"}),(0,a.jsx)("span",{className:"text-[10px] text-white/40",children:"out of 100"})]}),(0,a.jsx)(x,{dims:C.dims}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5",children:[(0,a.jsx)(r.Star,{className:"w-3.5 h-3.5 text-steam-gold",fill:"currentColor"}),(0,a.jsx)("h4",{className:"text-xs font-semibold text-white",children:"Top 5 priority order"})]}),(0,a.jsx)("div",{className:"space-y-1",children:C.top5.map((e,r)=>{let n=y[e.status],s="swap"===e.status,o=s?h.get(e.tag):void 0,i=N===e.tag;return(0,a.jsxs)("button",{type:"button",disabled:!s,"aria-expanded":s?i:void 0,onClick:()=>s&&R(i?null:e.tag),className:`flex items-center gap-2.5 w-full rounded-lg px-2.5 py-1 border text-left ${s?`cursor-pointer transition-colors hover:brightness-125 ${i?"":"animate-swap-hint-pulse"}`:"bg-white/5 border-white/8"}`,style:s?{backgroundColor:`${o}18`,borderColor:`${o}88`,"--pulse-color":o}:void 0,children:[(0,a.jsx)("span",{className:"shrink-0 w-5 h-5 rounded-md text-xs font-bold flex items-center justify-center",style:s?{backgroundColor:o,color:"#0d1117"}:{backgroundColor:"rgba(255,255,255,0.08)",color:"rgba(255,255,255,0.6)"},children:r+1}),(0,a.jsx)("span",{className:"text-xs text-white font-medium truncate min-w-0 flex-1",children:e.tag}),(0,a.jsx)("span",{className:"w-1.5 h-1.5 rounded-full shrink-0",style:{backgroundColor:s?o:n.dot}}),(0,a.jsx)("span",{className:"text-[11px] truncate shrink-0 max-w-[42%]",style:{color:s?o:"#8f98a0"},children:s?"Swap up":n.label}),s&&(0,a.jsx)(t.ChevronDown,{className:"shrink-0 w-4 h-4 transition-transform",style:{color:o,transform:i?"rotate(180deg)":"none"}})]},e.tag)})})]})]}),g&&f&&(0,a.jsxs)("div",{className:"mt-3 rounded-xl border p-3",style:{backgroundColor:`${f}0f`,borderColor:`${f}66`},children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)("span",{className:"shrink-0 w-8 h-8 rounded-lg border flex items-center justify-center text-base",style:{borderColor:`${f}66`,color:f},children:"â"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"text-[13px] font-bold mb-1",style:{color:f},children:[g.swapTarget," should move up"]}),(0,a.jsxs)("div",{className:"text-[11px] text-white/60 leading-snug",children:[(0,a.jsx)("b",{className:"text-white",children:g.tag})," is"," ",g.fullReason,"."," ",(0,a.jsx)("b",{className:"text-white",children:g.swapTarget}
1)," ","is more specific, and takes over position #",g.position,";"," ",(0,a.jsx)("b",{className:"text-white",children:g.tag})," moves to #",g.demotedTo,", not off your page."]})]}),(0,a.jsxs)("div",{className:"hidden sm:flex shrink-0 flex-col gap-1 pl-3 border-l text-[11px] text-white/50",style:{borderColor:`${f}40`},children:[(0,a.jsxs)("span",{children:["Potential impact:"," ",(0,a.jsx)("b",{style:{color:f},children:"High"})]}),(0,a.jsxs)("span",{children:["Recommended move:"," ",(0,a.jsxs)("b",{style:{color:f},children:["#",g.demotedTo," â #",g.position]})]})]})]}),(0,a.jsx)("div",{className:"mt-3",children:(0,a.jsx)(m.MiniToolCta,{href:"/resources/free-steam-tools/steam-tag-analyzer?utm_source=guide-tag-scanner",label:"Run the full tag analysis â",event:"guide_tag_scanner_link_clicked",location:e,appId:S.appId})})]})]})),(u||"idle"===v)&&(0,a.jsxs)("div",{className:"mt-3",children:[(0,a.jsx)("div",{className:"text-[11px] text-steam-text-muted mb-1.5",children:S?"Analysing another game?":"Paste your Steam URL to score your own tags:"}),(0,a.jsx)(i.UrlInput,{onSubmit:_,isLoading:T,autoFocus:!1,compact:!0}),P&&(0,a.jsx)("div",{className:"mt-2 text-xs text-red-300",children:P})]})]})}],691886)},55374,22551,e=>{"use strict";var a=e.i(843476),t=e.i(768877),r=e.i(632781),n=e.i(566595),s=e.i(604570),o=e.i(271645);function i(e){let a=e.match(/store\.steampowered\.com\/app\/(\d+)/);return a?a[1]:null}function l(e){return null!==i(e)}function d(e){return e.replace(/[â¢Â®]/g,"").normalize("NFKC").trim().replace(/\s+/g," ").toLowerCase()}function c(e,a){let t=d(a);return t?e.toSorted((e,a)=>Number(d(a.name)===t)-Number(d(e.name)===t)):[...e]}e.s(["extractSteamAppId",0,i,"isValidSteamUrl",0,l],22551);let m=["Schedule I","R.E.P.O.","Dispatch","Clair Obscur: Expedition 33","DELTARUNE","PEAK","Split Fiction","Bongo Cat","Hades II","Kingdom Come: Deliverance II","Black Myth: Wukong","Satisfactory","Balatro","MiSide","Palworld","WEBFISHING","Buckshot Roulette","Content Warning","Blade and Sorcery","The Planet Crafter","Baldur's Gate 3","Lethal Company","Resident Evil 4","DAVE THE DIVER","Pizza Tower","Brotato","Vampire Survivors","ELDEN RING","Stray","God of War","Persona 5 Royal","Raft","Marvel's Spider-Man Remastered","Teardown","Cult of the Lamb","PowerWash Simulator","Valheim","It Takes Two","Inscryption","Dyson Sphere Program","Cookie Clicker"];e.s(["UrlInput",0,function({onSubmit:e,isLoading:i,autoFocus:d=!0,compact:p=!1,placeholder:u="Search for a game or paste a Steam URL...",animatedPlaceholder:h=!1,theme:g="dark",ariaLabel:f,accent:I="blue"}){let x="gold"===I,y="light"===g,[b,S]=(0,o.useState)(""),[w,v]=(0,o.useState)([]),[k,C]=(0,o.useState)(!1),[j,N]=(0,o.useState)(!1),[R,T]=(0,o.useState)(-1),[M,P]=(0,o.useState)(null),E=(0,o.useRef)(null),D=(0,o.useRef)(null),L=(0,o.useRef)(null),_=(0,o.useRef)(null),A=(0,o.useRef)(0),[B,O]=(0,o.useState)(d),G=function(e){let[a,t]=(0,o.useState)(""),r=(0,o.useRef)(0),n=(0,o.useRef)(0),s=(0,o.useRef)("typing");return(0,o.useEffect)(()=>{let a;if(!e)return;let o=setInterval(()=>{let e=m[r.current],o=s.current;"typing"===o?(n.current++,t(e.slice(0,n.current)),n.current>=e.length&&(s.current="pause",a=setTimeout(()=>{s.current="deleting"},1500))):"deleting"===o&&(n.current--,t(e.slice(0,n.current)),n.current<=0&&(s.current="typing",r.current=(r.current+1)%m.length))},80);return()=>{clearInterval(o),clearTimeout(a)}},[e]),a}(h),F=h&&!b?`Try: ${G}...`:u;(0,o.useEffect)(()=>{function e(e){if("f"!==e.key&&"F"!==e.key||e.metaKey||e.ctrlKey||e.altKey)return;let a=e.target.tagName;"INPUT"!==a&&"TEXTAREA"!==a&&"SELECT"!==a&&(e.preventDefault(),L.current?.focus())}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[]);let H=l(b),$=(0,o.useCallback)(async e=>{if(e.length<2){v([]),N(!1);return}let a=++A.current;C(!0);try{let t=await fetch(`/api/steam/search?q=${encodeURIComponent(e)}`),r=await t.json();if(a!==A.current)return;let n=c(r.items||[],e);v(n),N(n.length>0),T(-1)}catch{if(a!==A.current)return;v([]),N(!1)}finally{a===A.current&&C(!1)}},[]);function z(a){A.current++,_.current&&clearTimeout(_.current),C(!1),D.current=a.name;
1let t=`https://store.steampowered.com/app/${a.appId}`;S(a.name),N(!1),v([]),T(-1),P(null),e(t)}async function W(a){if(a.preventDefault(),j&&R>=0&&w[R])return void z(w[R]);if(!b.trim())return void P("Enter a game name or Steam URL");if(H){A.current++,_.current&&clearTimeout(_.current),C(!1),P(null),e(b.trim());return}if(w.length>0)return void z(w[0]);if(b.trim().length>=2){_.current&&clearTimeout(_.current);let e=++A.current,a=b.trim();C(!0);try{let t=await fetch(`/api/steam/search?q=${encodeURIComponent(a)}`),r=await t.json();if(e!==A.current)return;let n=c(r.items||[],a);if(n.length>0)return void z(n[0])}catch{if(e!==A.current)return}finally{e===A.current&&C(!1)}}P("No results found. Try a different name.")}return(0,o.useEffect)(()=>{if(_.current&&clearTimeout(_.current),"clear"===function({query:e,isUrl:a,selectedName:t}){return a||null!==t&&e===t||e.trim().length<2?"clear":"search"}({query:b,isUrl:H,selectedName:D.current})){v([]),N(!1),T(-1);return}return _.current=setTimeout(()=>{$(b.trim())},300),()=>{_.current&&clearTimeout(_.current)}},[b,H,$]),(0,o.useEffect)(()=>{function e(e){E.current&&!E.current.contains(e.target)&&N(!1)}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,a.jsxs)("div",{ref:E,className:`w-full relative ${p||y||x?"":"max-w-2xl mx-auto"}`,children:[(0,a.jsxs)("form",{onSubmit:W,children:[(0,a.jsxs)("div",{className:y?"flex h-14 items-center gap-3 rounded-[8px] border border-black/10 bg-white pl-4 pr-2 transition-colors hover:border-black/20 focus-within:border-gold-deep focus-within:ring-2 focus-within:ring-gold-deep/20":p?"flex items-center gap-2 rounded-xl border border-white/10 bg-white/[0.04] pl-4 pr-1 py-0.5 focus-within:border-steam-blue/50 transition-colors":x?"flex items-center gap-3 pl-5 pr-3 py-3 rounded-2xl backdrop-blur-2xl border border-[#ecc968]/40 focus-within:border-[#ecc968]/80 focus-within:ring-1 focus-within:ring-[#ecc968]/40 transition-colors shadow-2xl":"flex items-center gap-3 pl-5 pr-3 py-3 rounded-2xl backdrop-blur-2xl border border-white/10 focus-within:border-steam-blue/60 focus-within:ring-1 focus-within:ring-steam-blue/40 transition-colors shadow-2xl",style:p||y?void 0:{background:"rgba(255, 255, 255, 0.04)",boxShadow:"inset 0 1px 0 rgba(255,255,255,0.06), 0 20px 60px -20px rgba(0,0,0,0.5)"},children:[!p&&(i||k?(0,a.jsx)(r.Loader2,{className:`w-5 h-5 shrink-0 animate-spin ${y?"text-text-muted":"text-white/50"}`}):(0,a.jsx)(n.Search,{className:`w-5 h-5 shrink-0 ${y?"text-text-muted":"text-white/50"}`})),!B&&!b&&(0,a.jsx)("span",{"aria-hidden":!0,className:`search-caret shrink-0 rounded-full bg-white/70 ${p?"h-4 w-px":"h-5 w-px"}`,style:{marginRight:p?-6:-10}}),(0,a.jsx)("input",{ref:L,autoFocus:d,type:"text","aria-label":f,value:b,onChange:e=>{D.current=null,A.current++,_.current&&clearTimeout(_.current),v([]),N(!1),T(-1),C(!1),S(e.target.value),M&&P(null)},onFocus:()=>{O(!0),w.length>0&&!H&&N(!0)},onBlur:()=>O(!1),onKeyDown:function(e){j&&0!==w.length&&("ArrowDown"===e.key?(e.preventDefault(),T(e=>e<w.length-1?e+1:0)):"ArrowUp"===e.key?(e.preventDefault(),T(e=>e>0?e-1:w.length-1)):"Escape"===e.key&&(N(!1),T(-1)))},onClick:e=>{if(3!==e.detail)return;let a=e.currentTarget;s.default.capture("capsule_search_input_multiclick",{click_count:e.detail,had_selection:a.selectionStart!==a.selectionEnd,value_length:a.value.length,variant:p?"rescan":"hero"})},placeholder:F,className:`flex-1 bg-transparent focus:outline-none min-w-0 ${y?"text-text-primary placeholder:text-text-muted":"text-steam-text placeholder:text-white/35"} ${p?"text-sm py-2":"text-base py-2"}`,disabled:i,autoComplete:"off"}),!B&&!b&&(0,a.jsx)("kbd",{title:"Press F to jump to this search field","aria-label":"Shortcut: press F to focus this field",className:y?"hidden sm:flex items-center justify-center w-6 h-6 shrink-0 mr-1 rounded-[6px] border border-black/[0.08] bg-[#fafafa] font-sans text-[11px] font-medium text-text-muted":"hidden sm:flex items-center justify-center w-6 h-6 rounded text-[11px] font-semibold text-white/30 shrink-0 mr-1",style:y?void 0:{backgroundColor:"rgba(255,255,255,0.07)",border:"1px solid rgba(255,255,255,0.12)"},children:"F"}),p?(0,a.jsx)("button",{type:"submit",disabled:i,"aria-label":"Analyse",className:"shrink-0 flex h-8 w-8 items-center justify-center rounded-lg text-white/50 transition-colors hover:text-white disabled:opacity-50",children:i||k?(0,a.jsx)(r.Loa
1der2,{className:"w-4 h-4 animate-spin"}):(0,a.jsx)(n.Search,{className:"w-4 h-4"})}):(0,a.jsx)("button",{type:"submit",disabled:i,"aria-label":"Analyse",className:`shrink-0 w-10 h-10 rounded-xl disabled:opacity-50 flex items-center justify-center transition-colors ${y?"bg-[#1e232b] text-white hover:bg-[#2b3038] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gold-deep":x?"bg-[#ecc968] text-[#1e232b] hover:bg-[#f2d582]":"bg-steam-blue text-white hover:bg-steam-blue/90"}`,children:(0,a.jsx)(t.ArrowRight,{className:"w-5 h-5"})})]}),M&&(0,a.jsx)("p",{className:`mt-2 text-sm pl-1 ${y?"text-red-700":"text-red-400"} ${p?"absolute left-0 top-full":""}`,children:M})]}),j&&w.length>0&&(0,a.jsx)("div",{className:y?"absolute z-50 w-full mt-2 max-h-80 overflow-y-auto overscroll-contain rounded-[8px] border border-black/[0.08] bg-white shadow-[0_1px_2px_rgba(40,47,58,0.04),0_16px_38px_-22px_rgba(40,47,58,0.22)]":"absolute z-50 w-full mt-2 max-h-80 overflow-y-auto overscroll-contain rounded-xl bg-steam-card shadow-2xl",children:w.map((e,t)=>(0,a.jsxs)("button",{type:"button",onClick:()=>z(e),onMouseEnter:()=>T(t),className:`w-full flex items-center gap-3 px-3 py-2.5 text-left transition-colors ${y?t===R?"bg-[#fffaf0]":"hover:bg-[#fffdf8]":t===R?"bg-steam-card-hover":"hover:bg-steam-card-hover/50"}`,children:[(0,a.jsx)("img",{src:e.image,alt:e.name,width:460,height:215,loading:"lazy",decoding:"async",className:"w-[120px] h-[45px] object-cover rounded shrink-0"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:`text-sm font-medium truncate ${y?"text-text-primary":"text-steam-text"}`,children:e.name}),(0,a.jsx)("p",{className:`text-xs ${y?"text-text-muted":"text-steam-text-muted"}`,children:[function(e){switch(e.type?.toLowerCase()){case"dlc":return"DLC";case"music":case"soundtrack":return"Soundtrack";case"demo":return"Demo";case"game":return"Game"}return/\s(?:original\s+)?soundtrack$/i.test(e.name.trim())?"Soundtrack":/\sDLC$/i.test(e.name.trim())?"DLC":null}(e),e.price].filter(Boolean).join(" · ")})]})]},e.appId))})]})}],55374)},326102,e=>{"use strict";function a(e){return`https://cdn.akamai.steamstatic.com/steam/apps/${e}/header.jpg`}let t={"City Builder":[{appId:"1363080",name:"Manor Lords",headerImage:a("1363080")},{appId:"949230",name:"Cities: Skylines II",headerImage:a("949230")},{appId:"1601580",name:"Frostpunk 2",headerImage:a("1601580")},{appId:"2185060",name:"Two Point Museum",headerImage:a("2185060")},{appId:"2134770",name:"SteamWorld Build",headerImage:a("2134770")},{appId:"2155180",name:"Pioneers of Pagonia",headerImage:a("2155180")},{appId:"1857090",name:"Norland",headerImage:a("1857090")},{appId:"1651560",name:"Fabledom",headerImage:a("1651560")},{appId:"1465460",name:"Infection Free Zone",headerImage:a("1465460")},{appId:"2144640",name:"Endzone 2",headerImage:a("2144640")}],Simulation:[{appId:"1190970",name:"House Flipper 2",headerImage:a("1190970")},{appId:"2670630",name:"Supermarket Simulator",headerImage:a("2670630")},{appId:"1351240",name:"Taxi Life: A City Driving Simulator",headerImage:a("1351240")},{appId:"756800",name:"Contraband Police",headerImage:a("756800")},{appId:"1457320",name:"Techtonica",headerImage:a("1457320")},{appId:"3070070",name:"TCG Card Shop Simulator",headerImage:a("3070070")},{appId:"1708850",name:"Drug Dealer Simulator 2",headerImage:a("1708850")},{appId:"2195120",name:"Go-Go Town!",headerImage:a("2195120")},{appId:"1677110",name:"Lightyear Frontier",headerImage:a("1677110")},{appId:"1040200",name:"Crime Scene Cleaner",headerImage:a("1040200")}],Action:[{appId:"553850",name:"HELLDIVERS 2",headerImage:a("553850")},{appId:"2358720",name:"Black Myth: Wukong",headerImage:a("2358720")},{appId:"1888160",name:"Armored Core VI: Fires of Rubicon",headerImage:a("1888160")},{appId:"1627720",name:"Lies of P",headerImage:a("1627720")},{appId:"2050650",name:"Resident Evil 4",headerImage:a("2050650")},{appId:"2215430",name:"Ghost of Tsushima DIRECTOR'S CUT",headerImage:a("2215430")},{appId:"2322010",name:"God of War Ragnarök",headerImage:a("2322010")},{appId:"2183900",name:"Warhammer 40,000: Space Marine 2",headerImage:a("21839
100")},{appId:"1774580",name:"Star Wars Jedi: Survivor",headerImage:a("1774580")},{appId:"2461850",name:"Senua's Saga: Hellblade II",headerImage:a("2461850")}],Adventure:[{appId:"1562430",name:"DREDGE",headerImage:a("1562430")},{appId:"1977170",name:"Jusant",headerImage:a("1977170")},{appId:"1458140",name:"Pacific Drive",headerImage:a("1458140")},{appId:"1931770",name:"Chants of Sennaar",headerImage:a("1931770")},{appId:"731040",name:"The Invincible",headerImage:a("731040")},{appId:"1382070",name:"Viewfinder",headerImage:a("1382070")},{appId:"1497440",name:"COCOON",headerImage:a("1497440")},{appId:"1989270",name:"Slay the Princess",headerImage:a("1989270")},{appId:"924750",name:"Harold Halibut",headerImage:a("924750")},{appId:"1491670",name:"Venba",headerImage:a("1491670")}],RPG:[{appId:"1086940",name:"Baldur's Gate 3",headerImage:a("1086940")},{appId:"1716740",name:"Starfield",headerImage:a("1716740")},{appId:"2344520",name:"Diablo IV",headerImage:a("2344520")},{appId:"2054970",name:"Dragon's Dogma 2",headerImage:a("2054970")},{appId:"2072450",name:"Like a Dragon: Infinite Wealth",headerImage:a("2072450")},{appId:"2186680",name:"Warhammer 40,000: Rogue Trader",headerImage:a("2186680")},{appId:"1244090",name:"Sea of Stars",headerImage:a("1244090")},{appId:"2161700",name:"Persona 3 Reload",headerImage:a("2161700")},{appId:"2679460",name:"Metaphor: ReFantazio",headerImage:a("2679460")},{appId:"1658280",name:"Eiyuden Chronicle: Hundred Heroes",headerImage:a("1658280")}],Strategy:[{appId:"1363080",name:"Manor Lords",headerImage:a("1363080")},{appId:"1601580",name:"Frostpunk 2",headerImage:a("1601580")},{appId:"1669000",name:"Age of Wonders 4",headerImage:a("1669000")},{appId:"1084160",name:"Jagged Alliance 3",headerImage:a("1084160")},{appId:"1937780",name:"Total War: PHARAOH",headerImage:a("1937780")},{appId:"1840080",name:"Homeworld 3",headerImage:a("1840080")},{appId:"1268590",name:"Millennia",headerImage:a("1268590")},{appId:"1575940",name:"Sins of a Solar Empire II",headerImage:a("1575940")},{appId:"1545560",name:"Shadow Gambit: The Cursed Crew",headerImage:a("1545560")},{appId:"1128860",name:"Men of War II",headerImage:a("1128860")}],Indie:[{appId:"2379780",name:"Balatro",headerImage:a("2379780")},{appId:"1966720",name:"Lethal Company",headerImage:a("1966720")},{appId:"1868140",name:"DAVE THE DIVER",headerImage:a("1868140")},{appId:"1562430",name:"DREDGE",headerImage:a("1562430")},{appId:"1145350",name:"Hades II",headerImage:a("1145350")},{appId:"813230",name:"ANIMAL WELL",headerImage:a("813230")},{appId:"1244090",name:"Sea of Stars",headerImage:a("1244090")},{appId:"1931770",name:"Chants of Sennaar",headerImage:a("1931770")},{appId:"2835570",name:"Buckshot Roulette",headerImage:a("2835570")},{appId:"2881650",name:"Content Warning",headerImage:a("2881650")}],Casual:[{appId:"2379780",name:"Balatro",headerImage:a("2379780")},{appId:"2678990",name:"Minami Lane",headerImage:a("2678990")},{appId:"2303350",name:"Sticky Business",headerImage:a("2303350")},{appId:"1658150",name:"Moonstone Island",headerImage:a("1658150")},{appId:"2707930",name:"Palia",headerImage:a("2707930")},{appId:"2198150",name:"Tiny Glade",headerImage:a("2198150")},{appId:"2533960",name:"SUMMERHOUSE",headerImage:a("2533960")},{appId:"1177980",name:"Little Kitty, Big City",headerImage:a("1177980")},{appId:"1808680",name:"Snufkin: Melody of Moominvalley",headerImage:a("1808680")},{appId:"2195120",name:"Go-Go Town!",headerImage:a("2195120")}],Horror:[{appId:"1966720",name:"Lethal Company",headerImage:a("1966720")},{appId:"1304930",name:"The Outlast Trials",headerImage:a("1304930")},{appId:"1944430",name:"Amnesia: The Bunker",headerImage:a("1944430")},{appId:"1433140",name:"The Texas Chain Saw Massacre",headerImage:a("1433140")},{appId:"1622910",name:"Still Wakes the Deep",headerImage:a("1622910")},{appId:"1996010",name:"Crow Country",headerImage:a("1996010")},{appId:"2881650",name:"Content Warning",headerImage:a("2881650")},{appId:"2835570",name:"Buckshot Roulette",headerImage:a("2835570")},{appId:"2050650",name:"Resident Evil 4",headerImage:a("2050650")},{appId:"1903620",name:"Killer Frequency",headerImage:a("1903620")}
1],Racing:[{appId:"2440510",name:"Forza Motorsport",headerImage:a("2440510")},{appId:"2108330",name:"EA SPORTS F1 23",headerImage:a("2108330")},{appId:"2488620",name:"EA SPORTS F1 24",headerImage:a("2488620")},{appId:"1849250",name:"EA SPORTS WRC",headerImage:a("1849250")},{appId:"2399420",name:"Le Mans Ultimate",headerImage:a("2399420")},{appId:"2051120",name:"HOT WHEELS UNLEASHED 2: Turbocharged",headerImage:a("2051120")},{appId:"2100160",name:"MotoGP 23",headerImage:a("2100160")},{appId:"2581700",name:"MotoGP 24",headerImage:a("2581700")},{appId:"1650010",name:"RIDE 5",headerImage:a("1650010")},{appId:"1537830",name:"Disney Speedstorm",headerImage:a("1537830")}],Sports:[{appId:"2195250",name:"EA SPORTS FC 24",headerImage:a("2195250")},{appId:"2669320",name:"EA SPORTS FC 25",headerImage:a("2669320")},{appId:"2338770",name:"NBA 2K24",headerImage:a("2338770")},{appId:"2878980",name:"NBA 2K25",headerImage:a("2878980")},{appId:"1785650",name:"TopSpin 2K25",headerImage:a("1785650")},{appId:"2315690",name:"WWE 2K24",headerImage:a("2315690")},{appId:"2140330",name:"Madden NFL 24",headerImage:a("2140330")},{appId:"2582560",name:"Madden NFL 25",headerImage:a("2582560")},{appId:"1677350",name:"EA SPORTS PGA TOUR",headerImage:a("1677350")},{appId:"2252570",name:"Football Manager 2024",headerImage:a("2252570")}],Roguelike:[{appId:"1145350",name:"Hades II",headerImage:a("1145350")},{appId:"2379780",name:"Balatro",headerImage:a("2379780")},{appId:"2321470",name:"Deep Rock Galactic: Survivor",headerImage:a("2321470")},{appId:"1940340",name:"Darkest Dungeon II",headerImage:a("1940340")},{appId:"1337520",name:"Risk of Rain Returns",headerImage:a("1337520")},{appId:"1970580",name:"Backpack Hero",headerImage:a("1970580")},{appId:"2179850",name:"Cobalt Core",headerImage:a("2179850")},{appId:"2218750",name:"Halls of Torment",headerImage:a("2218750")},{appId:"2071280",name:"Ravenswatch",headerImage:a("2071280")},{appId:"1150530",name:"Wizard with a Gun",headerImage:a("1150530")}],Platformer:[{appId:"2114740",name:"Blasphemous 2",headerImage:a("2114740")},{appId:"1293170",name:"BZZZT",headerImage:a("1293170")},{appId:"1274600",name:"The Last Faith",headerImage:a("1274600")},{appId:"1809540",name:"Nine Sols",headerImage:a("1809540")},{appId:"813230",name:"ANIMAL WELL",headerImage:a("813230")},{appId:"1955230",name:"Penny's Big Breakaway",headerImage:a("1955230")},{appId:"2076580",name:"Pepper Grinder",headerImage:a("2076580")},{appId:"2386310",name:"Ultros",headerImage:a("2386310")},{appId:"1733250",name:"Turbo Kid",headerImage:a("1733250")},{appId:"2717880",name:"The Rogue Prince of Persia",headerImage:a("2717880")}],Puzzle:[{appId:"835960",name:"The Talos Principle 2",headerImage:a("835960")},{appId:"1497440",name:"COCOON",headerImage:a("1497440")},{appId:"1382070",name:"Viewfinder",headerImage:a("1382070")},{appId:"1931770",name:"Chants of Sennaar",headerImage:a("1931770")},{appId:"1581480",name:"Humanity",headerImage:a("1581480")},{appId:"2008920",name:"Lorelei and the Laser Eyes",headerImage:a("2008920")},{appId:"2071500",name:"Islands of Insight",headerImage:a("2071500")},{appId:"1771980",name:"The Operator",headerImage:a("1771980")},{appId:"2637990",name:"Duck Detective: The Secret Salami",headerImage:a("2637990")},{appId:"1233070",name:"Isles of Sea and Sky",headerImage:a("1233070")}],Shooter:[{appId:"553850",name:"HELLDIVERS 2",headerImage:a("553850")},{appId:"730",name:"Counter-Strike 2",headerImage:a("730")},{appId:"2073850",name:"THE FINALS",headerImage:a("2073850")},{appId:"1282100",name:"Remnant II",headerImage:a("1282100")},{appId:"2183900",name:"Warhammer 40,000: Space Marine 2",headerImage:a("2183900")},{appId:"1681430",name:"RoboCop: Rogue City",headerImage:a("1681430")},{appId:"2005010",name:"Warhammer 40,000: Boltgun",headerImage:a("2005010")},{appId:"1272080",name:"PAYDAY 3",headerImage:a("1272080")},{appId:"2074920",name:"The First Descendant",headerImage:a("2074920")},{appId:"671860",name:"BattleBit Remastered",headerImage:a("671860")}],Survival:[{appId:"1623730",name:"Palworld",headerImage:a("1623730")},{appId:"1203620",name:"Enshrouded",headerImage:a("1203620")},{appId:"1928980",name:"Nightingale",headerImage:a("1928980")},{appId:"2139460",name:"Once Human",headerImage:a("2139460")},{appId:"427410",name:"Abiotic Factor",headerImage:a("427410")},{appId:"768200",name:"Smalland: Survive the Wilds",headerImage:a("768200")},{appId:"2285150",name:"The Front",headerImage:a("2285150")},{appId:"1967630",name:"Survival: Fountain of Youth",headerImage:a("1967630")},{appId:"2646460",name:"Soulmask",headerImage:a("2646460")},{appId:"1677110",name:"Lightyear Frontier",headerImage:a("1677110")}],Sandbox:[{appId:"949230",name:"Cities: Skylines II",headerImage:a("949230")},{appId:"1190970",name:"House Flipper 2",headerImage:a("1190970")},{appId:"2198150",name:"Tiny Glade",headerImage:a("2198150")},{appId:"2707930",name:"Palia",headerImage:a("2707930")},{appId:"1457320",name:"Techtonica",headerImage:a("1457320")},{appId:"1677110",name:"Lightyear Frontier",headerImage:a("1677110")},{appId:"1623730",name:"Palworld",headerImage:a("1623730")},{appId:"1203620",name:"Enshrouded",headerImage:a("1203620")},{appId:"1363080",name:"Manor Lords",headerImage:a("1363080")},{appId:"2195120",name:"Go-Go Town!",headerImage:a("2195120")}
1],Fighting:[{appId:"1364780",name:"Street Fighter 6",headerImage:a("1364780")},{appId:"1778820",name:"TEKKEN 8",headerImage:a("1778820")},{appId:"1971870",name:"Mortal Kombat 1",headerImage:a("1971870")},{appId:"2157560",name:"Granblue Fantasy Versus: Rising",headerImage:a("2157560")},{appId:"2076010",name:"Under Night In-Birth II Sys:Celes",headerImage:a("2076010")},{appId:"1790600",name:"DRAGON BALL: Sparking! ZERO",headerImage:a("1790600")},{appId:"1020790",name:"Naruto x Boruto: Ultimate Ninja Storm Connections",headerImage:a("1020790")},{appId:"1555150",name:"Pocket Bravery",headerImage:a("1555150")},{appId:"1877020",name:"Jujutsu Kaisen Cursed Clash",headerImage:a("1877020")},{appId:"1742020",name:"Idol Showdown",headerImage:a("1742020")}],JRPG:[{appId:"2161700",name:"Persona 3 Reload",headerImage:a("2161700")},{appId:"2072450",name:"Like a Dragon: Infinite Wealth",headerImage:a("2072450")},{appId:"2679460",name:"Metaphor: ReFantazio",headerImage:a("2679460")},{appId:"881020",name:"Granblue Fantasy: Relink",headerImage:a("881020")},{appId:"2138610",name:"The Legend of Heroes: Trails through Daybreak",headerImage:a("2138610")},{appId:"2375550",name:"Like a Dragon Gaiden: The Man Who Erased His Name",headerImage:a("2375550")},{appId:"1875830",name:"Shin Megami Tensei V: Vengeance",headerImage:a("1875830")},{appId:"1658280",name:"Eiyuden Chronicle: Hundred Heroes",headerImage:a("1658280")},{appId:"2085000",name:"SaGa Emerald Beyond",headerImage:a("2085000")},{appId:"2254740",name:"Persona 5 Tactica",headerImage:a("2254740")}]};e.s(["getBestGenreLabel",0,function(e,a=[]){for(let e of a)if(t[e])return e;for(let a of e)if(t[a])return a;return e[0]||"Games"},"getGenreCapsules",0,function(e,a=[]){let r=new Set,n=[];for(let s of[...a,...e]){let e=t[s];if(e)for(let a of e)r.has(a.appId)||(r.add(a.appId),n.push(a))}return n},"topCapsulesByGenre",0,t])},93363,e=>{"use strict";e.s(["DIMENSION_BEST_PRACTICES",0,{genre_clarity:["Make the game's promise instantly obvious. Show the world and the main action at a glance.","Use 1â2 genre signals players already recognise (camera angle, characters, props, UI cues), then add one unique twist so it's not generic.","Avoid mixed messages. Don't blend tone, era, or art cues from different genres unless that mashup is the product."],title_readability:["Design for the smallest size first. If it's not readable at tiny capsule size, redo it.","Give the title a clean zone: flat area, vignette, blur, or controlled negative space behind the text.","Use thick letterforms and strong separation. High value contrast plus stroke or shadow. Keep words short."],contrast_color:["Prioritise value contrast over saturation. Check it in grayscale to confirm subject and title still pop.","Separate layers. Brighten the subject, darken or simplify the background, add rim light or outline if needed.","Limit the palette. One dominant scheme, one accent colour, one neutral so the image reads cleanly."],uniqueness_polish:["Include one instantly identifiable hook that's hard to confuse with other games: character silhouette, creature, tool, world element, or logo treatment.","Remove visual noise. Fewer elements, cleaner shapes, higher signal per pixel.","Ship-level finish. Crisp edges, consistent lighting, consistent materials, no muddy compression, no accidental tangents."],brand_consistency:["Standardise a kit: same font family, stroke/shadow style, colour accents, and logo placement rules across all capsules.","Keep the same mood language. Similar lighting, contrast style, and framing so your game is recognisable in a grid.","Repeat your signature motif. A character, icon, pattern, or framing device that becomes your visual fingerprint."],composition:["Make one clear focal point. Big subject first, then secondary support, then background.","Use simple shape structure. Foreground, subject, background. Strong silhouette beats detail.","Respect crops and overlays. Leave safe margins, avoid putting critical detail near edges, and keep the reading path clean."]},"DIMENSION_KEYS",0,["genre_clarity","title_readability","contrast_color","uniqueness_polish","brand_consistency","composition"],"DIMENSION_META",0,{genre_clarity:{displayName:"Genre Clarity",color:"#66c0f4",tooltip:"
1Can a player name the genre at tiny size (120Ã45)? Rewards theme-specific cues, familiar iconography, and clear gameplay signals. Penalises mixed or misleading messaging."},title_readability:{displayName:"Title Readability",color:"#8b5cf6",tooltip:"Judges letterforms, spacing, contrast, and legibility at both full and tiny sizes. Rewards titles placed on a clean background zone. Penalises decorative fonts that collapse small."},contrast_color:{displayName:"Contrast & Color",color:"#f59e0b",tooltip:"Does the capsule pop against Steam's dark #1b2838 background in a quick scroll? Focuses on value separation and silhouette clarity, checked in grayscale. Penalises muddy mid-tones."},uniqueness_polish:{displayName:"Uniqueness & Polish",color:"#ec4899",tooltip:"How premium and distinct does it feel vs. other genre capsules? Rewards a clear visual hook, clean craft, and intentional design. Penalises generic or template-looking art."},brand_consistency:{displayName:"Brand Consistency",color:"#10b981",tooltip:"Scored on internal cohesion only: consistent style, palette, and recognisable identity cues. Rewards a signature motif or character that could be recognised across a game's library."},composition:{displayName:"Composition",color:"#6366f1",tooltip:"Checks focal point, hierarchy, balance, and crop resilience across all sizes. One clear primary subject at small size. Penalises clutter, edge-hugging titles, and awkward empty space."}},"getDimensionScoreColor",0,function(e){return e>=8?"#34d399":e>=7?"#3b82f6":e>=6?"#60a5fa":e>=5?"#93c5fd":"#94a3b8"},"getScoreColor",0,function(e){return e>=9?"#ecc968":e>=8?"#34d399":e>=7?"#3b82f6":e>=6?"#60a5fa":e>=5?"#93c5fd":"#94a3b8"},"getScoreLabel",0,function(e){return e>=90?"Exceptional":e>=85?"Standout":e>=80?"Very Strong":e>=70?"Strong":e>=65?"Solid":e>=50?"Average":"Weak"}])},435020,465746,e=>{"use strict";let a,t,r=["#ecc968","#bc8cff","#39c5cf","#f0883e","#ff9bce"];e.s(["buildSwapAccentMap",0,function(e){return new Map(e.map((e,a)=>[e,r[a%r.length]]))}],435020);let n={slots:.15,top5:.25,distinct:.15,position:.15,balance:.15,alignment:.15},s=["slots","top5","distinct","position","balance","alignment"],o=(a={},(t=(e,t)=>{for(let r of t)a[r]=e})("genre",["Action","RPG","Strategy","Action RPG","Action-Adventure","Adventure","Base Building","Battle Royale","Beat 'em up","Bullet Hell","Card Game","Card Battler","City Builder","Colony Sim","Deckbuilding","Dungeon Crawler","Farming Sim","Fighting","FPS","Grand Strategy","Hack and Slash","Hero Shooter","Horror","Interactive Fiction","JRPG","Management","Metroidvania","MMORPG","MOBA","Mystery","Narrative","Platformer","Psychological Horror","Puzzle","Racing","Rhythm","Roguelike","Roguelite","Roguelike Deckbuilder","RTS","Sandbox","Shooter","Simulation","Souls-like","Sports","Stealth","Survival","Survival Horror","Tactical RPG","Tower Defense","Turn-Based Strategy","Visual Novel","Walking Simulator","2D Platformer","3D Platformer","4X","Auto Battler","Board Game","Choose Your Own Adventure","Clicker","Combat Racing","Dating Sim","God Game","Hidden Object","Idler","Match 3","Naval Combat","Otome","Party Game","Party","Precision Platformer","Puzzle Platformer","Runner","Shoot 'Em Up","Social Deduction","Space Sim","Strategy RPG","Third-Person Shooter","Top-Down Shooter","Traditional Roguelike","Twin Stick Shooter","Wargame","Automobile Sim","Flight","Life Sim","Open World Survival Craft","Indie","Casual","Immersive Sim","Point & Click","Tactical","Beat em up","Life Simulation","Puzzle-Platformer"]),t("visual",["Pixel Graphics","2D","3D","2.5D","Isometric","Side Scroller","Top-Down","First-Person","Third Person","Anime","Realistic","Stylized","Minimalist","Hand-drawn","Voxel","Cartoony","Cartoon","Retro","Low-poly","Colorful","Cinematic","VR","Text-Based","Comic Book","Cute"]),t("mood",["Atmospheric","Cozy","Dark","Dark Fantasy","Relaxing","Funny","Comedy","Emotional","Difficult","Cyberpunk","Fantasy","Historical","Lovecraftian","Medieval","Noir","Post-apocalyptic","Sci-fi","Space","Steampunk","Story Rich","Western","Zombies","Mystery Dungeon","Psychological","Horror Themed","Beautiful","Great Soundtrack","Satire","Surreal","Romance","Family Friendly","Gore","Violent","Nudity","Sexual Content"]),t("feature",["Crafting","Co-op","Exploration","Open World","Procedural Generation","Physics","Resource Management","Choices Matter","Trading","Mining","Sailing","Hacking","Building","Automation","Character Customization","Multiple Endings","Moddable","Level Editor","Turn-Based","Turn-Based Combat","Real Time Tactics","Perma Death","Time Manipulation","Agriculture","Fishing","Cooking","Replay Value","Combat","Class-Based","Loot","Inventory Management","Stat Building","Character Progression","Dialogue System","Puzzle Solving","Stealth Mechanics","Destruction","Sandbox Mode"]),t("support",["Singleplayer","Multiplayer","Online Co-Op","Local Co-Op","Local Multiplayer","Split Screen","PvP","PvE","MMO","Massively Multiplayer","Cross-Platform Multiplayer","Team-Based","4 Player Local","Online PvP","Co-op Campaign","Asynchronous Multiplayer","Competitive","Controller","Mouse Only","Full controller support"]),a),i={genre:"genre and sub-genre",visual:"visual
1s and viewpoint",mood:"themes and mood",feature:"features and mechanics",support:"player support"},l=new Set(["Action","Adventure","Indie","Casual","RPG","Strategy","Simulation","Early Access","Free to Play","Great Soundtrack","Replay Value","Controller","Mouse Only","2D","3D"]),d=new Set(Object.keys(o).filter(e=>"support"===o[e]));function c(e){return o[e]??null}let m=null,p=null,u=null,h=0,g=null;async function f(){m&&p||(g||(g=(async()=>{let[e,a]=await Promise.all([fetch("/steam-genre-map/steam-genres.json"),fetch("/steam-genre-map/steam-tag-profiles.json")]),t=await e.json(),r=await a.json();for(let e of(m=t.tags.filter(e=>(e.kind??"market")==="market"),p=r.games??{},u=new Map,h=0,Object.values(p??{})))if(e.tags?.length)for(let a of(h++,new Set(e.tags)))u.set(a,(u.get(a)??0)+1)})()),await g)}function I(e){if(!u||!h)return null;let a=u.get(e)??0;return a?1-a/h:null}function x(e){return m?.find(a=>a.tag===e)??null}function y(e){if(l.has(e))return"a broad label thousands of games share";if(d.has(e))return"a player-support tag, more useful lower down than in your top five";let a=I(e);return null!==a&&a<.55?`used by ${Math.round((1-a)*100)}% of comparable successful games, so it barely differentiates`:null}function b(e){if(!e.length)return 0;let a=[...e].sort((e,a)=>e-a),t=Math.floor(a.length/2);return a.length%2?a[t]:(a[t-1]+a[t])/2}let S="Low Comp, High Return",w="High Comp, High Return";async function v(e,a){await f();let t=a.slice(0,5),r=function(e,a){let t=String(e||""),r=[];for(let e of a){let a=x(e);a&&t&&a.topGames.some(e=>String(e.steamId)===t)&&r.push(e)}return{topSellerTags:r,isTopPerformer:r.length>0}}(e,a),o=new Set(r.topSellerTags),h=function(e,a){if(!p)return[];let t=new Set(e),r=[];for(let[e,n]of Object.entries(p)){if(String(e)===String(a)||!n.tags?.length)continue;let s=new Set(n.tags),o=0;for(let e of t)s.has(e)&&o++;if(!o)continue;let i=o/(t.size+s.size-o);i<.15||r.push({appid:e,name:n.name,tags:n.tags,similarity:i})}return r.sort((e,a)=>a.similarity-e.similarity),r.slice(0,8)}(a,e),g=function(e){let a=new Map;for(let t of e)for(let e of new Set(t.tags.slice(0,10)))a.set(e,(a.get(e)??0)+1);return a}(h),v=function(e,a){let t=e.slice(0,5),r=e.slice(5),n=t.map((e,a)=>({tag:e,pos:a,reason:y(e)})).filter(e=>e.reason&&!a.has(e.tag)),s=r.map((e,a)=>({tag:e,pos:a+5,rarity:I(e)})).filter(e=>!l.has(e.tag)&&!d.has(e.tag)&&null!==e.rarity&&e.rarity>=.6).sort((e,a)=>(a.rarity??0)-(e.rarity??0)),o=Math.min(n.length,s.length),i=[];for(let e=0;e<o;e++){let a=n[e],t=s[e];i.push({position:a.pos+1,demotedTo:t.pos+1,before:a.tag,after:t.tag,reason:a.reason??""})}return i}(a,o),k=Math.min(10,a.length/20*10),C=10;for(let e of t)!o.has(e)&&y(e)&&(C-=2);C-=2*v.length,C=Math.max(0,C);let j=a.map(I).filter(e=>null!==e),N=Math.max(0,Math.min(10,10*(j.length?j.reduce((e,a)=>e+a,0)/j.length:.5)-5*(a.length?a.filter(e=>l.has(e)).length/a.length:0))),R=a.map(e=>x(e)).filter(e=>null!==e),T=5;if(R.length){let e=R.map(e=>{let a,t,r,n,s,o,i,l,d=(a=m??[],t=e=>Math.max(e.avgCopiesTop20||0,.001),r=a.map(e=>Math.log10(t(e))),n=a.map(e=>Math.log10(e.total)),s=b(r),o=b(n),i=Math.log10(t(e))>=s,l=Math.log10(e.total)>=o,i&&!l?S:i&&l||i?w:"other");return d===S?1:.5*(d===w)});T=e.reduce((e,a)=>e+a,0)/e.length*10}let M=Object.keys(i).length,P=new Set(t.map(c).filter(e=>null!==e)),E=new Set(a.map(c).filter(e=>null!==e)),D=Math.min(10,P.size/M*6+E.size/M*4),L=10,_=h.length;_>=3&&(L=Math.max(0,10-2*[...g.entries()].filter(([e,t])=>!a.includes(e)&&t/_>=.5).length-a.filter(e=>!g.has(e)&&!u?.get(e)).length));let A={slots:k,top5:C,distinct:N,position:T,balance:D,alignment:L},B=0;for(let e of s)B+=A[e]*n[e];let O=Math.max(0,Math.min(100,Math.round(10*B)));r.isTopPerformer&&(O=Math.max(O,80));let G=new Map(v.map(e=>[e.position-1,e]));return{score:O,dims:A,top5:t.map((e,a)=>{let t=G.get(a);return o.has(e)?{tag:e,status:"top-seller",swapTarget:null,fullReason:null,position:a+1,demotedTo:null}:t?{tag:e,status:"swap",swapTarget:t.after,fullReason:t.reason,position:a+1,demotedTo:t.demotedTo}:{tag:e,status:"solid",swapTarget:null,fullReason:null,position:a+1,demotedTo:null}})}}e.s(["SCORE_LABELS",0,{slots:"Slots",top5:"Top 5",distinct:"Distinct",position:"Position",balance:"Balance",alignment:"Alignment"},"SCORE_ORDER",0,s,"computeTagScore",0,v,"scoreColor",0,function(e){return e<50?"#f85149":e<75?"#ecc968":"#3fb950"}],465746)}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.