PageSourceSearch

https://7dscalc.com/_next/static/chunks/8901fe801a6e69da.js

js 7dscalc.com collected 2026-10-04 15:06:28 UTC 50,117 bytes, 2 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,33525,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"warnOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},98183,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={assign:function(){return l},searchParamsToUrlQuery:function(){return s},urlQueryToSearchParams:function(){return o}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});function s(e){let t={};for(let[a,r]of e.entries()){let e=t[a];void 0===e?t[a]=r:Array.isArray(e)?e.push(r):t[a]=[e,r]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;for(let[a,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.append(a,i(e));else t.set(a,i(r));return t}function l(e,...t){for(let a of t){for(let t of a.keys())e.delete(t);for(let[t,r]of a.entries())e.append(t,r)}return e}},95057,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={formatUrl:function(){return o},formatWithValidation:function(){return c},urlObjectKeys:function(){return l}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let s=e.r(90809)._(e.r(98183)),i=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:a}=e,r=e.protocol||"",n=e.pathname||"",o=e.hash||"",l=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:a&&(c=t+(~a.indexOf(":")?`[${a}]`:a),e.port&&(c+=":"+e.port)),l&&"object"==typeof l&&(l=String(s.urlQueryToSearchParams(l)));let d=e.search||l&&`?${l}`||"";return r&&!r.endsWith(":")&&(r+=":"),e.slashes||(!r||i.test(r))&&!1!==c?(c="//"+(c||""),n&&"/"!==n[0]&&(n="/"+n)):c||(c=""),o&&"#"!==o[0]&&(o="#"+o),d&&"?"!==d[0]&&(d="?"+d),n=n.replace(/[?#]/g,encodeURIComponent),d=d.replace("#","%23"),`${r}${c}${n}${d}${o}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return o(e)}},18581,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"useMergedRef",{enumerable:!0,get:function(){return n}});let r=e.r(71645);function n(e,t){let a=(0,r.useRef)(null),n=(0,r.useRef)(null);return(0,r.useCallback)(r=>{if(null===r){let e=a.current;e&&(a.current=null,e());let t=n.current;t&&(n.current=null,t())}else e&&(a.current=s(e,r)),t&&(n.current=s(t,r))},[e,t])}function s(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let a=e(t);return"function"==typeof a?a:()=>e(null)}}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},18967,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={DecodeError:function(){return b},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return w},NormalizeError:function(){return y},PageNotFoundError:function(){return x},SP:function(){return g},ST:function(){return h},WEB_VITALS:function(){return s},execOnce:function(){return i},getDisplayName:function(){return u},getLocationOrigin:function(){return c},getURL:function(){return d},isAbsoluteUrl:function(){return l},isResSent:function(){return m},loadGetInitialProps:function(){return f},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return D}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let s=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,a=!1;return(...r)=>(a||(a=!0,t=e(...r)),t)}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>o.test(e);function c(){let{protocol:e,hostname:t,port:a}=window.location;return`${e}//${t}${a?":"+a:""}`}function d(){let{href:e}=window.location,t=c();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function m(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function f(e,t){let a=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(a&&m(a))return r;if(!r)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${r}
1" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return r}let g="u">typeof performance,h=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class b extends Error{}class y extends Error{}class x extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class w extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function D(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"isLocalURL",{enumerable:!0,get:function(){return s}});let r=e.r(18967),n=e.r(52817);function s(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),a=new URL(e,t);return a.origin===t&&(0,n.hasBasePath)(a.pathname)}catch(e){return!1}}},84508,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"errorOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},22016,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={default:function(){return b},useLinkStatus:function(){return x}};for(var n in r)Object.defineProperty(a,n,{enumerable:!0,get:r[n]});let s=e.r(90809),i=e.r(43476),o=s._(e.r(71645)),l=e.r(95057),c=e.r(8372),d=e.r(18581),u=e.r(18967),m=e.r(5550);e.r(33525);let p=e.r(91949),f=e.r(73668),g=e.r(9396);function h(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function b(t){var a;let r,n,s,[l,b]=(0,o.useOptimistic)(p.IDLE_LINK_STATUS),x=(0,o.useRef)(null),{href:w,as:S,children:D,prefetch:v=null,passHref:k,replace:T,shallow:C,scroll:j,onClick:P,onMouseEnter:N,onTouchStart:L,legacyBehavior:E=!1,onNavigate:F,ref:A,unstable_dynamicOnHover:B,...R}=t;r=D,E&&("string"==typeof r||"number"==typeof r)&&(r=(0,i.jsx)("a",{children:r}));let M=o.default.useContext(c.AppRouterContext),G=!1!==v,_=!1!==v?null===(a=v)||"auto"===a?g.FetchStrategy.PPR:g.FetchStrategy.Full:g.FetchStrategy.PPR,{href:I,as:O}=o.default.useMemo(()=>{let e=h(w);return{href:e,as:S?h(S):e}},[w,S]);if(E){if(r?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});n=o.default.Children.only(r)}let W=E?n&&"object"==typeof n&&n.ref:A,H=o.default.useCallback(e=>(null!==M&&(x.current=(0,p.mountLinkInstance)(e,I,M,_,G,b)),()=>{x.current&&((0,p.unmountLinkForCurrentNavigation)(x.current),x.current=null),(0,p.unmountPrefetchableInstance)(e)}),[G,I,M,_,b]),U={ref:(0,d.useMergedRef)(H,W),onClick(t){E||"function"!=typeof P||P(t),E&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(t),!M||t.defaultPrevented||function(t,a,r,n,s,i,l){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,f.isLocalURL)(a)){s&&(t.preventDefault(),location.replace(a));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(99781);o.default.startTransition(()=>{u(r||a,s?"replace":"push",i??!0,n.current)})}}(t,I,O,x,T,j,F)},onMouseEnter(e){E||"function"!=typeof N||N(e),E&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),M&&G&&(0,p.onNavigationIntent)(e.currentTarget,!0===B)},onTouchStart:function(e){E||"function"!=typeof L||L(e),E&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),M&&G&&(0,p.onNavigationIntent)(e.currentTarget,!0===B)}};return(0,u.isAbsoluteUrl)(O)?U.href=O:E&&!k&&("a"!==n.type||"href"in n.props)||(U.href=(0,m.addBasePath)(O)),s=E?o.default.cloneElement(n,U):(0,i.jsx)("a",{...R,...U,children:r}),(0,i.jsx)(y.Provider,{value:l,children:s})}e.r(84508);let y=(0,o.createContext)(p.IDLE_LINK_STATUS),x=()=>(0,o.useContext)(y);("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esMo
1dule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},18566,(e,t,a)=>{t.exports=e.r(76562)},9616,e=>{"use strict";var t=e.i(43476),a=e.i(22016),r=e.i(18566);let n=[{href:"/",label:"Pity"},{href:"/team-builder",label:"Teams"},{href:"/weapon-optimizer",label:"Weapons"},{href:"/damage-calculator",label:"Damage"},{href:"/banner-planner",label:"Planner"},{href:"/guides",label:"Decisions"},{href:"/tier-list",label:"Tier List"},{href:"/reroll-guide",label:"Reroll"},{href:"/banners",label:"Banners"}];function s(){let e=(0,r.usePathname)();return(0,t.jsxs)("header",{className:"border-b border-[#2a2a4a] bg-[#0f0f1a]/80 backdrop-blur-sm sticky top-0 z-50",children:[(0,t.jsxs)("div",{className:"max-w-5xl mx-auto px-4 py-4 flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(a.default,{href:"/",className:"block",children:(0,t.jsxs)("span",{className:"text-xl sm:text-2xl font-bold",children:[(0,t.jsx)("span",{className:"text-[#FFD700]",children:"7DS Origin"})," ",(0,t.jsx)("span",{className:"text-white",children:"Calculator"})]})}),(0,t.jsx)("p",{className:"text-gray-500 text-xs sm:text-sm mt-0.5",children:"Seven Deadly Sins: Origin — Pity Calculator, Team Builder & Tools"})]}),(0,t.jsx)("div",{className:"hidden sm:block bg-[#22C55E]/10 border border-[#22C55E]/30 rounded-lg px-3 py-1.5",children:(0,t.jsx)("p",{className:"text-[#22C55E] text-xs font-medium",children:"Tool Suite"})})]}),(0,t.jsx)("nav",{className:"max-w-5xl mx-auto px-4 pb-3 flex gap-1 overflow-x-auto",children:n.map(r=>{let n=e===r.href||"/guides"===r.href&&e.startsWith("/guides/");return(0,t.jsx)(a.default,{href:r.href,className:`px-3 py-1.5 rounded-lg text-sm font-medium whitespace-nowrap transition-colors ${n?"bg-[#FFD700]/15 text-[#FFD700]":"text-gray-400 hover:text-white hover:bg-[#1a1a2e]"}`,children:r.label},r.href)})})]})}e.s(["default",()=>s])},58249,92074,e=>{"use strict";let t={reviewedAt:"2026-08-06",version:{id:"v1.8",name:"Version 1.8",startsAt:"2026-08-05T08:00:00Z",verifiedUntil:"2026-08-26T00:00:00Z",windowLabel:"After the August 5 maintenance (scheduled 02:00–08:00 UTC) through the August 26 maintenance",boundaryNote:"The official notice names the August 26 maintenance but does not publish its exact time. This site conservatively downgrades at 00:00 UTC until that schedule is verified."},banner:{id:"derieri-pick-up",name:"Explosive “Combo Star”",featuredUnit:"Derieri",type:"character",startsAt:"2026-08-05T08:00:00Z",endsAt:"2026-08-26T00:00:00Z",windowLabel:"After the August 5 maintenance until the August 26 maintenance (UTC)",ticketName:"Hero Pick Up Draw Ticket",status:"OFFICIAL"},hero:{id:"derieri",name:"Derieri",rarity:"SSR",routes:[{weapon:"Gauntlets",element:"Darkness",role:"Attacker"},{weapon:"Greatsword",element:"Fire",role:"Support"},{weapon:"Axe",element:"Darkness",role:"Support"}]},currentBoss:{id:"corrupted-guardian-golem",name:"“Corrupted” Guardian Golem",activity:"Ranking Season 3 Boss Challenge (Abyss)",startsAt:"2026-08-05T08:00:00Z",endsAt:"2026-08-26T00:00:00Z",status:"OFFICIAL",boundary:"The official notice confirms the activity and difficulty, but not the boss DEF, elemental resistance, or an optimal team."},upcomingActivity:{id:"kalbash-hunting-event",name:"Chaos That Devours the Desert",boss:"Sandsea Predator Kalbash",startsAt:"2026-08-12T00:00:00Z",endsAt:"2026-08-26T00:00:00Z",status:"OFFICIAL",boundary:"Starts after the August 12 temporary maintenance. It is upcoming, not live, as of the August 6 review."},roster:{count:25,status:"PARTIAL",note:"The prior 24-character baseline plus officially announced SSR Derieri. Current comparative rankings remain unverified."},source:{label:"Publisher announcement: Version 1.8 Update Details",url:"https://steamcommunity.com/games/3679080/announcements/detail/1839676055897030",status:"OFFICIAL"}},a={baseRate:.02,softPityStart:65,hardPity:80,guaranteedRateUp:120,absoluteWorstCase:160,featuredRate:.5,guaranteedAfterLoss:!0,currencyPerPull:300,currencyName:"Star Memory",ticketName:"Hero Draw Ticket",multiPullCount:10,softPityIncrement:.04,launchFreePulls:300,dataStatus:"NEEDS_REVIEW",ruleStatus:"PLANNING_BASELINE",lastUpdated:t.reviewedAt,version:t.version.id,notes:"80/120/160, 50/50, soft-pity, carry-over, currency cost, and Potential-copy mapping are planning assumptions until verified on the active in-game banner."},r=[{id:"guardian-golem-v18-model",label:"v1.8 Guardian Golem comparison",bossName:t.currentBoss.name,enemyDef:500,enemyLevel:60,enemyEleRes:15,status:"PLANNING_BASELINE",note:"Comparison inputs only: DEF 500, level 60, resistance 15%. These are not official Guardian Golem stats; replace them with values from your own repeatable test."}];e.s(["BOSS_DAMAGE_PRESETS",0,r,"GAME_CONFIG",0,a,"LIVE_GAME_CONTENT",0,t],92074);let n=new Set;function s(e,a,r=`${a.tool_name}:${e}`){if(n.has(r))return!1;n.add(r);let i={...a,version:t.version.id};return"function"==typeof window.gtag?window.gtag("event",e,i):(window.dataLayer=window.dataLayer??[],window.dataLayer.push({event:e,...i})),"1"===new URLSearchParams(window.location.search).get("ga_debug")&&console.info("[7DS GA4]",e,JSON.stringify(i)),!0}function i(e){let a={...e,version:t.version.id};return"function"==typeof window.gtag?window.gtag("event","decision_path_click",a):(window.dataLayer=window.dataLayer??[],window.dataLayer.push({event:"decision_path_click",...a})),"1"===new URLSearchParams(window.location.search).get("ga_debug")&&console.info("[7DS GA4]","decision_path_click",JSON.stringify(a)),!0}e.s(["trackDecisionPath",()=>i,"trackToolEvent",()=>s],58249)},71962,40159,e=>{"use strict";var t=e.i(43476),a=e.i(71645);function r({label:e="Share result",onShare:r,getShareData:n}){let[s,i]=(0,a.useState)(!1),o=async e=>{if(navigator.clipboard?.writeText)return void await navigator.clipboard.writeText(e);let t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();let a=document.execCommand("copy");if(t.remove(),!a)throw Error("Clipboard copy is unavailable")},l=async()=>{r();let e=n?.()??{},t=e.url??window.location.href,a=e.text?`${e.text}
2${t}`:t;try{await o(a),i(!0)}catch{i(!1)}};return(0,t.jsx)("button",{type:"button",onClick:l,"data-tool-action":"share",className:"text-xs px-3 py-2 rounded-lg bg-[#6366f1]/15 text-[#a5b4fc] hover:bg-[#6366f1]/25 hover:text-white transition-colors",children:s?n?"Summary copied":"Link copied":e})}e.s(["default",()=>r],71962);var n=e.i(58249);function s(e,t){let r=(0,a.useRef)(!1),s=(0,a.useCallback)(()=>{r.current=!0,(0,n.trackToolEvent)("tool_start",{tool_name:e,content_type:t,result_count:0})},[t,e]);return{markInteraction:s,markResult:(0,a.useCallback)(a=>{a<1||((0,n.trackToolEvent)("result_viewed",{tool_name:e,content_type:t,result_count:a}),r.current&&(0,n.trackToolEvent)("tool_complete",{tool_name:e,content_type:t,result_count:a}))},[t,e]),markShare:(0,a.useCallback)(a=>{(0,n.trackToolEvent)("share_click",{tool_name:e,content_type:t,result_count:a})},[t,e])}}e.s(["useToolAnalytics",()=>s],40159)},1892,e=>{"use strict";e.s(["CHARACTERS",0,[{id:"meliodas",name:"Meliodas",rarity:6,elements:["Dark"],role:"DPS",weaponTypes:["Longsword","Axe","Dual Swords"],tier:"SS",tags:["burst","dps","dark"],note:"Top-tier burst damage across all three weapon loadouts. Darkness Burst mechanic stacks Demon Energy for devastating combos."},{id:"king",name:"King",rarity:5,elements:["Holy","Physics","Earth"],role:"Healer / Support",weaponTypes:["Book","Wand","Staff"],tier:"SS",tags:["heal","shield","support"],note:"One of the safest healers. Fairy King passive triggers emergency shields and healing below 30% HP. Ultimate gives 50% max HP shield + regen to entire party."},{id:"jericho",name:"Jericho",rarity:5,elements:["Ice"],role:"DPS / Crowd Control",weaponTypes:["Dual Swords","Lance","Rapier"],tier:"S",tags:["burst","dps","cc","ice"],note:"Highest single-target burst. Frozen Saber gives +30% crit rate with teleport. Ultimate Ice Needle hits 262% ATK with crit buff. Brings Freeze 
2CC."},{id:"diane",name:"Diane",rarity:5,elements:["Earth"],role:"Tank / AoE DPS",weaponTypes:["Gauntlets","Axe","Cudgel"],tier:"S",tags:["aoe","tank","dps","earth"],note:"Strong AoE damage. Giant Girl passive gives free 30% max HP shield. Breaker stuns for 4s then boosts follow-up damage 30-100%. Brings Petrify."},{id:"elaine",name:"Elaine",rarity:5,elements:["Wind","Holy","Earth"],role:"Support / Crowd Control",weaponTypes:["Book","Wand","Staff"],tier:"S",tags:["cc","support","shield","wind"],note:"Top-tier support. Guardian's Blossom gives 300% DEF shields. Ultimate Dust Seal: 268% DMG + 3s Bind into 6s Petrify. During Petrify, team gets +100% DMG."},{id:"drake",name:"Drake",rarity:5,elements:["Thunder"],role:"DPS / Utility",weaponTypes:["Greatsword","Staff","Longsword"],tier:"S",tags:["dps","explore","thunder"],note:"Strong thunder DPS with Dragon King passive. Reveals treasure chests on the map, making exploration significantly more efficient."},{id:"manny",name:"Manny",rarity:5,elements:["Holy","Ice"],role:"Support / Sub-DPS",weaponTypes:["Staff","Dual Swords","Longsword"],tier:"S",tags:["debuff","support","explore"],note:"Flash Explosion applies Stigmata: -20% all elemental DEF on enemies. Reveals Star Dust Fragment locations. High-value pull for team damage and exploration."},{id:"tristan",name:"Tristan",rarity:5,elements:["Fire","Wind"],role:"DPS / Hybrid",weaponTypes:["Dual Swords","Longsword","Greatsword"],tier:"A",tags:["dps","fire","wind"],note:"Versatile with Fire burst (Dual Swords) and Wind support (Longsword). Greatsword gives crit stacking with 243% Punisher finisher. Decent all-rounder."},{id:"gilthunder",name:"Gilthunder",rarity:5,elements:["Thunder"],role:"DPS / Support Hybrid",weaponTypes:["Longsword","Shield","Lance"],tier:"A",tags:["dps","support","thunder"],note:"Solid thunder DPS. Lightning Sword (176% + Shock). Charge Electricity reduces cooldowns. Outclassed by Drake in damage but brings more defensive utility."},{id:"tioreh",name:"Tioreh",rarity:5,elements:["Fire","Wind"],role:"Sub-DPS / Support",weaponTypes:["Book","Wand","Staff"],tier:"A",tags:["debuff","fire","support"],free:"Pre-registration",note:"Free from pre-reg. Combustion debuff is useful for Fire teams. Dragon Breath hits 273% DMG. Competent Fire option everyone starts with."},{id:"guila",name:"Guila",rarity:5,elements:["Fire"],role:"DPS / Shielder",weaponTypes:["Lance","Shield","Rapier"],tier:"A",tags:["dps","fire","shield"],free:"Launch event",note:"Previously available from launch-period rewards. Demon Form transformation buffs for 20s. Blazing Burst reduces enemy fire DEF by 20%. Check current availability before pulling."},{id:"slader",name:"Slader",rarity:5,elements:["Fire","Physics"],role:"DPS",weaponTypes:["Greatsword","Axe","Cudgel"],tier:"A",tags:["dps","fire"],free:"Tutorial",note:"Free from tutorial. Straightforward physical/fire DPS with 252-356% ultimate. Cudgel gives +40% mark damage. Usable early but gets outscaled."},{id:"howzer",name:"Howzer",rarity:5,elements:["Wind"],role:"AoE DPS",weaponTypes:["Lance","Gauntlets","Cudgel"],tier:"B",tags:["aoe","wind","dps"],note:"Triple wind element makes him core for wind teams. Tempest magic and Eye of the Storm provide consistent AoE. His ceiling depends on current wind synergy partners."},{id:"bug",name:"Bug",rarity:5,elements:["Dark"],role:"DPS / Debuffer",weaponTypes:["Dual Swords","Axe","Book"],tier:"B",tags:["debuff","dps","dark"],note:"Backstab: +50% DMG from behind. Applies Curse (+20% team DMG) and Dark vulnerability (+30%). Requires specific positioning to maximize."},{id:"hendrickson",name:"Hendrickson",rarity:5,elements:["Holy","Physics","Dark"],role:"Hybrid Support",weaponTypes:["Dual Swords","Longsword","Lance"],tier:"B",tags:["heal","debuff","support"],note:"Jack-of-all-trades with healing, cursing, and damage. Ultimate heals allies (268% ATK) or curses enemies. Doesn't excel at any one thing."},{id:"griamore",name:"Griamore",rarity:5,elements:["Physics"],role:"Tank",weaponTypes:["Shield","Cudgel","Gauntlets"],tier:"B",tags:["tank","shield"],note:"Pure tank. Wall Master: team +20% burst efficiency with shields active. Shield Stance gives +25% DEF. Gauntlets can stun 8s. Most early content doesn't need a dedicated tank."},{id:"daisy",name:"Daisy",rarity:5,elements:["Earth","Thunder","Wind"],role:"Support",weaponTypes:["Shield","Book","Wand"],tier:"B",tags:["support"],note:"Offbeat Girl: +50% magic charge efficiency for faster ultimates. Domby mount summon. Low damage contribution, mostly utility."},{id:"dreyfus",name:"Dreyfus",rarity:5,elements:["Physics","Earth","Holy"],role:"DoT / Control",weaponTypes:["Rapier","Longsword","Lance"],tier:"C",tags:["dot","cc"],note:"DoT specialist. Grandmaster's Honor: +15% DoT DMG, halved DoT intervals against stunned/paralyzed targets. Requires specific setups."},{id:"dreydrin",name:"Dreydrin",rarity:5,elements:["Earth","Physics","Holy"],role:"Tank / Support",weaponTypes:["Shield","Axe","Rapier"],tier:"C",tags:["tank","
2shield","support"],note:"Emergency shielder below 30% HP. Rapier ultimate buffs team Holy and Fire ATK. Overlaps with King who does everything better."},{id:"escanor",name:"Escanor",rarity:5,elements:["TBD"],role:"DPS (Time-gated)",weaponTypes:["Axe","Greatsword","Shield"],tier:"C",tags:["dps"],note:"Sunshine mechanic: stronger during daytime, weaker at night, peak at noon. Creates inconsistency. Full skill data not yet disclosed."},{id:"derieri",name:"Derieri",rarity:5,elements:["Dark","Fire"],role:"Attacker / Element Support",weaponTypes:["Gauntlets","Greatsword","Axe"],tier:"?",tags:["dps","dark","fire","support"],note:"v1.8 official routes: Gauntlets is a Darkness Attacker, Greatsword is Fire Support, and Axe is Darkness Support. Comparative tier placement remains unverified."},{id:"gowther",name:"Gowther",rarity:5,elements:["Thunder","Physics"],role:"Burst / Support",weaponTypes:["Wand","Grimoire","Staff"],tier:"?",tags:["burst","support","thunder","physical"],note:"Released in v1.7. Wand is Lightning Burst, Grimoire is Physical Support, and Staff is Lightning Support. Gowther's pickup ended at the August 5 maintenance and is not current."},{id:"elizabeth",name:"Elizabeth",rarity:5,elements:["TBD"],role:"Healer (Expected)",weaponTypes:["Book","Wand","Staff"],tier:"C",tags:[],note:"Skills undisclosed. Likely a healer/support based on the source material. Can't rank properly until full kit is revealed."},{id:"ban",name:"Ban",rarity:6,elements:["TBD"],role:"TBD",weaponTypes:["Cudgel","Greatsword","Gauntlets"],tier:"?",tags:[],note:"6-star rarity. Immortality mechanic confirmed. Skills and element not disclosed. Likely future banner character."},{id:"merlin",name:"Merlin",rarity:6,elements:["TBD"],role:"TBD",weaponTypes:["Book","Wand","Staff"],tier:"?",tags:[],note:"6-star rarity. No skill data. Traditionally one of the most powerful in the series. Almost certainly top-tier once released."}],"ELEMENT_COLORS",0,{Dark:"bg-[#9333ea]/20 text-[#c084fc]",Fire:"bg-[#ef4444]/20 text-[#fca5a5]",Wind:"bg-[#22c55e]/20 text-[#86efac]",Ice:"bg-[#06b6d4]/20 text-[#67e8f9]",Thunder:"bg-[#eab308]/20 text-[#fde047]",Holy:"bg-[#f59e0b]/20 text-[#fcd34d]",Earth:"bg-[#a16207]/20 text-[#d97706]",Physics:"bg-[#6b7280]/20 text-[#d1d5db]",TBD:"bg-[#374151]/20 text-[#6b7280]"},"TIER_COLORS",0,{SS:{text:"text-[#FF4444]",bg:"bg-[#FF4444]/15",border:"border-[#FF4444]/30"},S:{text:"text-[#FF8C00]",bg:"bg-[#FF8C00]/15",border:"border-[#FF8C00]/30"},A:{text:"text-[#FFD700]",bg:"bg-[#FFD700]/15",border:"border-[#FFD700]/30"},B:{text:"text-[#4FC3F7]",bg:"bg-[#4FC3F7]/15",border:"border-[#4FC3F7]/30"},C:{text:"text-[#9E9E9E]",bg:"bg-[#9E9E9E]/15",border:"border-[#9E9E9E]/30"},"?":{text:"text-[#7C4DFF]",bg:"bg-[#7C4DFF]/15",border:"border-[#7C4DFF]/30"}}])},88206,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(22016),n=e.i(1892);let s=[{type:"Dual Swords",label:"Dual Swords",category:"Melee",description:"High crit rate and burst damage. Best for aggressive DPS.",playstyle:"Burst DPS",baseStats:{attack:120,critChance:8,critDamage:30,efficiency:3,elementalDamage:5,burstDamage:10},growthPerLevel:{attack:18,critChance:.12,critDamage:.4,efficiency:.04,elementalDamage:.06,burstDamage:.15}},{type:"Longsword",label:"Longsword",category:"Melee",description:"Balanced offense and defense. Versatile option for most content.",playstyle:"Balanced",baseStats:{attack:110,critChance:5,critDamage:20,efficiency:5,elementalDamage:5,burstDamage:5},growthPerLevel:{attack:16,critChance:.08,critDamage:.3,efficiency:.06,elementalDamage:.06,burstDamage:.06}},{type:"Axe",label:"Axe",category:"Heavy",description:"Raw attack power. Lower crit but consistent high damage.",playstyle:"Raw DPS",baseStats:{attack:140,critChance:3,critDamage:25,efficiency:2,elementalDamage:3,burstDamage:8},growthPerLevel:{attack:21,critChance:.05,critDamage:.35,efficiency:.03,elementalDamage:.04,burstDamage:.12}},{type:"Greatsword",label:"Greatsword",category:"Heavy",description:"Highest base attack. Slow but devastating hits.",playstyle:"Power DPS",baseStats:{attack:150,critChance:4,critDamage:35,efficiency:2,elementalDamage:3,burstDamage:6},growthPerLevel:{attack:22,critChance:.06,critDamage:.5,efficiency:.02,elementalDamage:.04,burstDamage:.08}},{type:"Lance",label:"Lance",category:"Melee",description:"Good reach with crit damage focus. Strong in PvE.",playstyle:"Crit DPS",baseStats:{attack:115,critChance:6,critDamage:35,efficiency:4,elementalDamage:4,burstDamage:6},growthPerLevel:{attack:17,critChance:.1,critDamage:.5,efficiency:.05,elementalDamage:.05,burstDamage:.08}},{type:"Rapier",label:"Rapier",category:"Melee",description:"Fast attacks with high crit chance. Lower base damage.",playstyle:"Speed DPS",baseStats:{attack:100,critChance:10,critDamage:25,efficiency:5,elementalDamage:5,burstDamage:5}
2,growthPerLevel:{attack:15,critChance:.15,critDamage:.35,efficiency:.06,elementalDamage:.06,burstDamage:.06}},{type:"Gauntlets",label:"Gauntlets",category:"Melee",description:"Close-range brawler. Balanced ATK and burst damage.",playstyle:"Brawler",baseStats:{attack:125,critChance:5,critDamage:20,efficiency:4,elementalDamage:4,burstDamage:12},growthPerLevel:{attack:19,critChance:.08,critDamage:.3,efficiency:.05,elementalDamage:.05,burstDamage:.18}},{type:"Cudgel",label:"Cudgel",category:"Heavy",description:"Stun-oriented heavy weapon. Good burst and CC potential.",playstyle:"CC / Burst",baseStats:{attack:130,critChance:3,critDamage:20,efficiency:3,elementalDamage:3,burstDamage:15},growthPerLevel:{attack:20,critChance:.05,critDamage:.25,efficiency:.04,elementalDamage:.04,burstDamage:.22}},{type:"Staff",label:"Staff",category:"Magic",description:"Support-focused. High efficiency for faster skill rotations.",playstyle:"Support",baseStats:{attack:85,critChance:3,critDamage:15,efficiency:10,elementalDamage:8,burstDamage:4},growthPerLevel:{attack:12,critChance:.04,critDamage:.2,efficiency:.12,elementalDamage:.1,burstDamage:.05}},{type:"Book",label:"Book",category:"Magic",description:"Elemental damage specialist. Best for element-focused builds.",playstyle:"Elemental DPS",baseStats:{attack:90,critChance:4,critDamage:18,efficiency:8,elementalDamage:12,burstDamage:3},growthPerLevel:{attack:13,critChance:.06,critDamage:.25,efficiency:.1,elementalDamage:.15,burstDamage:.04}},{type:"Wand",label:"Wand",category:"Magic",description:"Balanced magic weapon. Decent efficiency and elemental damage.",playstyle:"Balanced Magic",baseStats:{attack:88,critChance:5,critDamage:20,efficiency:8,elementalDamage:10,burstDamage:4},growthPerLevel:{attack:13,critChance:.07,critDamage:.28,efficiency:.1,elementalDamage:.12,burstDamage:.05}},{type:"Shield",label:"Shield",category:"Defense",description:"Defensive option. Low offense but provides survivability.",playstyle:"Tank",baseStats:{attack:70,critChance:2,critDamage:10,efficiency:6,elementalDamage:2,burstDamage:3},growthPerLevel:{attack:10,critChance:.03,critDamage:.15,efficiency:.08,elementalDamage:.03,burstDamage:.04}}],i=[{characterId:"meliodas",weaponTypes:["Longsword","Axe","Dual Swords"],recommended:[{name:"Burst DPS",description:"Maximum burst damage with Darkness Burst combos",main:"Dual Swords",sub1:"Axe",sub2:"Longsword",tags:["dps","burst","boss"]},{name:"Sustained DPS",description:"More consistent damage with better survivability",main:"Longsword",sub1:"Dual Swords",sub2:"Axe",tags:["dps","pve"]}]},{characterId:"king",weaponTypes:["Book","Wand","Staff"],recommended:[{name:"Pure Healer",description:"Maximize healing output and skill uptime",main:"Staff",sub1:"Wand",sub2:"Book",tags:["heal","support"]},{name:"Elemental Support",description:"More elemental damage while still healing",main:"Book",sub1:"Staff",sub2:"Wand",tags:["support","elemental"]}]},{characterId:"jericho",weaponTypes:["Dual Swords","Lance","Rapier"],recommended:[{name:"Crit Burst",description:"Frozen Saber + maximum crit for Ice Needle burst",main:"Dual Swords",sub1:"Rapier",sub2:"Lance",tags:["dps","crit","burst"]},{name:"Sustained Crit",description:"Higher crit consistency with Lance main",main:"Lance",sub1:"Dual Swords",sub2:"Rapier",tags:["dps","crit"]}]},{characterId:"diane",weaponTypes:["Gauntlets","Axe","Cudgel"],recommended:[{name:"AoE Breaker",description:"Breaker stun combos with burst follow-up",main:"Gauntlets",sub1:"Cudgel",sub2:"Axe",tags:["aoe","cc","dps"]},{name:"Raw Power",description:"Maximum attack for Breaker damage bonus",main:"Axe",sub1:"Gauntlets",sub2:"Cudgel",tags:["dps","power"]}]},{characterId:"elaine",weaponTypes:["Book","Wand","Staff"],recommended:[{name:"CC Support",description:"Fast skill rotations for Petrify uptime",main:"Staff",sub1:"Wand",sub2:"Book",tags:["cc","support"]},{name:"Damage Amp",description:"Higher personal damage while still providing CC",main:"Book",sub1:"Staff",sub2:"Wand",tags:["support","elemental"]}]},{characterId:"drake",weaponTypes:["Greatsword","Staff","Longsword"],recommended:[{name:"Thunder DPS",description:"Maximum damage output for Dragon King passive",main:"Greatsword",sub1:"Longsword",sub2:"Staff",tags:["dps","thunder"]},{name:"Balanced Explorer",description:"Good damage with faster skill cycling",main:"Longsword",sub1:"Greatsword",sub2:"Staff",tags:["explore","balanced"]}]},{characterId:"manny",weaponTypes:["Staff","Dual Swords","Longsword"],recommended:[{name:"Pure Support",description:"Maximize Stigmata uptime and skill efficiency",main:"Staff",sub1:"Longsword",sub2:"Dual Swords",tags:["support","debuff"]},{name:"Sub-DPS",description:"More personal damage while still applying Stigmata",main:"Dual Swords",sub1:"Staff",sub2:"Longsword",tags:["dps","
2support"]}]},{characterId:"tristan",weaponTypes:["Dual Swords","Longsword","Greatsword"],recommended:[{name:"Fire Burst",description:"Fire element burst with Dual Swords",main:"Dual Swords",sub1:"Greatsword",sub2:"Longsword",tags:["fire","burst","dps"]},{name:"Crit Punisher",description:"Greatsword crit stacking into 243% Punisher",main:"Greatsword",sub1:"Dual Swords",sub2:"Longsword",tags:["crit","dps"]}]},{characterId:"gilthunder",weaponTypes:["Longsword","Shield","Lance"],recommended:[{name:"Thunder DPS",description:"Lightning Sword spam with cooldown reduction",main:"Longsword",sub1:"Lance",sub2:"Shield",tags:["thunder","dps"]},{name:"Defensive",description:"More survivability for harder content",main:"Shield",sub1:"Longsword",sub2:"Lance",tags:["tank","support"]}]},{characterId:"tioreh",weaponTypes:["Book","Wand","Staff"],recommended:[{name:"Fire Debuffer",description:"Maximize Combustion uptime for fire team",main:"Book",sub1:"Staff",sub2:"Wand",tags:["fire","debuff"]},{name:"Support Focus",description:"Faster skill rotation for more debuff applications",main:"Staff",sub1:"Book",sub2:"Wand",tags:["support"]}]},{characterId:"guila",weaponTypes:["Lance","Shield","Rapier"],recommended:[{name:"DPS Demon Form",description:"Maximize damage during 20s Demon Form window",main:"Lance",sub1:"Rapier",sub2:"Shield",tags:["dps","fire","burst"]},{name:"Tanky DPS",description:"More survivability with Shield sub-weapon",main:"Lance",sub1:"Shield",sub2:"Rapier",tags:["dps","tank"]}]},{characterId:"slader",weaponTypes:["Greatsword","Axe","Cudgel"],recommended:[{name:"Raw Power",description:"Maximum ATK for brute force damage",main:"Greatsword",sub1:"Axe",sub2:"Cudgel",tags:["dps","power"]},{name:"Mark Exploiter",description:"Cudgel +40% mark damage for team combos",main:"Cudgel",sub1:"Greatsword",sub2:"Axe",tags:["dps","burst"]}]},{characterId:"howzer",weaponTypes:["Lance","Gauntlets","Cudgel"],recommended:[{name:"Wind AoE",description:"Lance for crit damage on Tempest AoE",main:"Lance",sub1:"Gauntlets",sub2:"Cudgel",tags:["aoe","wind","dps"]},{name:"Burst AoE",description:"Cudgel burst damage for Eye of the Storm",main:"Cudgel",sub1:"Lance",sub2:"Gauntlets",tags:["aoe","burst"]}]},{characterId:"bug",weaponTypes:["Dual Swords","Axe","Book"],recommended:[{name:"Backstab DPS",description:"Maximum crit for Backstab +50% damage",main:"Dual Swords",sub1:"Axe",sub2:"Book",tags:["dps","dark","crit"]},{name:"Debuff Focus",description:"Faster Curse and Dark Vulnerability application",main:"Book",sub1:"Dual Swords",sub2:"Axe",tags:["debuff","support"]}]},{characterId:"hendrickson",weaponTypes:["Dual Swords","Longsword","Lance"],recommended:[{name:"Hybrid Damage",description:"Balanced offense for healing and cursing",main:"Longsword",sub1:"Dual Swords",sub2:"Lance",tags:["hybrid","support"]}]},{characterId:"griamore",weaponTypes:["Shield","Cudgel","Gauntlets"],recommended:[{name:"Pure Tank",description:"Maximum survivability for Wall Master passive",main:"Shield",sub1:"Gauntlets",sub2:"Cudgel",tags:["tank"]},{name:"Stun Tank",description:"Gauntlets 8s stun with tank stats",main:"Gauntlets",sub1:"Shield",sub2:"Cudgel",tags:["tank","cc"]}]},{characterId:"daisy",weaponTypes:["Shield","Book","Wand"],recommended:[{name:"Charge Support",description:"Maximize Offbeat Girl +50% charge efficiency",main:"Book",sub1:"Wand",sub2:"Shield",tags:["support","elemental"]}]},{characterId:"dreyfus",weaponTypes:["Rapier","Longsword","Lance"],recommended:[{name:"DoT Specialist",description:"Fast attacks for DoT application and halved intervals",main:"Rapier",sub1:"Lance",sub2:"Longsword",tags:["dot","dps"]}]},{characterId:"dreydrin",weaponTypes:["Shield","Axe","Rapier"],recommended:[{name:"Emergency Tank",description:"Shield main for maximum protection",main:"Shield",sub1:"Axe",sub2:"Rapier",tags:["tank","support"]}]}];function o(e){return s.find(t=>t.type===e)}function l(e){return i.find(t=>t.characterId===e)}function c(e){let t=o(e.weaponType);if(!t)return{attack:0,critChance:0,critDamage:0,efficiency:0,elementalDamage:0,burstDamage:0};let a=Math.max(1,Math.min(e.level,60)),r=Math.max(0,Math.min(e.enhancement,15)),n=a-1,s=1+.03*r;return{attack:Math.round((t.baseStats.attack+t.growthPerLevel.attack*n)*s),critChance:u((t.baseStats.critChance+t.growthPerLevel.critChance*n)*s),critDamage:u((t.baseStats.critDamage+t.growthPerLevel.critDamage*n)*s),efficiency:u((t.baseStats.efficiency+t.growthPerLevel.efficie
2ncy*n)*s),elementalDamage:u((t.baseStats.elementalDamage+t.growthPerLevel.elementalDamage*n)*s),burstDamage:u((t.baseStats.burstDamage+t.growthPerLevel.burstDamage*n)*s)}}function d(e){let t=c(e.main),a=c(e.sub1),r=c(e.sub2);return{attack:Math.round(+t.attack+.3*a.attack+.3*r.attack),critChance:u(+t.critChance+.3*a.critChance+.3*r.critChance),critDamage:u(+t.critDamage+.3*a.critDamage+.3*r.critDamage),efficiency:u(+t.efficiency+.3*a.efficiency+.3*r.efficiency),elementalDamage:u(+t.elementalDamage+.3*a.elementalDamage+.3*r.elementalDamage),burstDamage:u(+t.burstDamage+.3*a.burstDamage+.3*r.burstDamage)}}function u(e){return Math.round(100*e)/100}var m=e.i(71962),p=e.i(40159);let f="7ds-weapon-optimizer",g=[{key:"attack",label:"ATK",suffix:"",color:"#EF4444",maxRef:3e3},{key:"critChance",label:"Crit Rate",suffix:"%",color:"#FFD700",maxRef:40},{key:"critDamage",label:"Crit DMG",suffix:"%",color:"#FF8C00",maxRef:200},{key:"efficiency",label:"Efficiency",suffix:"%",color:"#22C55E",maxRef:30},{key:"elementalDamage",label:"Ele DMG",suffix:"%",color:"#6366f1",maxRef:30},{key:"burstDamage",label:"Burst DMG",suffix:"%",color:"#c084fc",maxRef:40}];function h({label:e,contribution:a,availableTypes:r,config:n,onChange:s,stats:i}){let l=o(n.weaponType);return(0,t.jsxs)("div",{className:"bg-[#0f0f1a] rounded-xl p-4 border border-[#2a2a4a]/50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-white",children:e}),(0,t.jsxs)("p",{className:"text-[10px] text-gray-500",children:[a," stats"]})]}),l&&(0,t.jsx)("span",{className:"text-[10px] px-2 py-0.5 rounded-md bg-[#1a1a2e] text-gray-400",children:l.playstyle})]}),(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsx)("label",{className:"block text-[10px] text-gray-500 mb-1",children:"Weapon Type"}),(0,t.jsx)("select",{value:n.weaponType,onChange:e=>s({...n,weaponType:e.target.value}),className:"w-full bg-[#1a1a2e] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white focus:border-[#6366f1] focus:outline-none appearance-none cursor-pointer",children:r.map(e=>{let a=o(e);return(0,t.jsxs)("option",{value:e,children:[e," ",a?`— ${a.playstyle}`:""]},e)})})]}),(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,t.jsx)("label",{className:"text-[10px] text-gray-500",children:"Level"}),(0,t.jsx)("span",{className:"text-xs text-white font-mono",children:n.level})]}),(0,t.jsx)("input",{type:"range",min:1,max:60,value:n.level,onChange:e=>s({...n,level:Number(e.target.value)}),className:"w-full"}),(0,t.jsxs)("div",{className:"flex justify-between text-[10px] text-gray-600",children:[(0,t.jsx)("span",{children:"1"}),(0,t.jsx)("span",{children:60})]})]}),(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,t.jsx)("label",{className:"text-[10px] text-gray-500",children:"Enhancement"}),(0,t.jsxs)("span",{className:"text-xs text-[#FFD700] font-mono",children:["+",n.enhancement]})]}),(0,t.jsx)("input",{type:"range",min:0,max:15,value:n.enhancement,onChange:e=>s({...n,enhancement:Number(e.target.value)}),className:"w-full"}),(0,t.jsxs)("div",{className:"flex justify-between text-[10px] text-gray-600",children:[(0,t.jsx)("span",{children:"+0"}),(0,t.jsxs)("span",{children:["+",15]})]})]}),(0,t.jsxs)("div",{className:"bg-[#1a1a2e]/50 rounded-lg p-2.5",children:[(0,t.jsx)("p",{className:"text-[10px] text-gray-500 mb-1.5",children:"Slot Stats"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-x-3 gap-y-1",children:[(0,t.jsx)(b,{label:"ATK",value:i.attack}),(0,t.jsx)(b,{label:"Crit%",value:i.critChance,suffix:"%"}),(0,t.jsx)(b,{label:"CritD",value:i.critDamage,suffix:"%"}),(0,t.jsx)(b,{label:"Eff",value:i.efficiency,suffix:"%"}),(0,t.jsx)(b,{label:"Ele",value:i.elementalDamage,suffix:"%"}),(0,t.jsx)(b,{label:"Burst",value:i.burstDamage,suffix:"%"})]})]})]})}function b({label:e,value:a,suffix:r=""}){return(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[10px] text-gray-500",children:e}),(0,t.jsxs)("span",{className:"text-[10px] text-gray-300 font-mono",children:["number"==typeof a&&a%1!=0?a.toFixed(1):a,r]})]})}function y({label:e,value:a,suffix:r,color:n,maxRef:s}){let i=Math.min(100,a/s*100),o=a%1!=0?a.toFixed(1):a;return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,t.jsx)("span",{className:"text-xs text-gray-400",children:e}),(0,t.jsxs)("span",{className:"text-sm font-bold text-white font-mono",children:[o,r]})]}),(0,t.jsx)("div",{className:"h-2 bg-[#0f0f1a] rounded-full overflow-hidden",children:(0,t.jsx)("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${i}%`,backgroundColor:n}})})]})}function x(){let e=(0,a.useMemo)(()=>n.CHARACTERS.filter(e=>"?"!==e.tier&&!e.elements.includes("TBD")).map(e=>{let t=l(e.id);return{id:e.id,name:e.name,weaponTypes:t?.weaponTypes??e.weaponTypes}}),[]),[s,i]=(0,a.useState)(e[0]?.id??""),[o,u]=(0,a.useState)({weaponType:"Dual Swords",level:40,enhancement:5}),[b,x]=(0,a.useState)({weaponType:"Axe",level:30,enhancement:3}),[w,S]=(0,a.useState)({weaponType:"Longsword",level:30,enhancement:3}),{markInteraction:D,markResult:v,markShare:k}=(0,p.useToolAnalytics)("weapon_optimizer","weapon_comparison");(0,a.useEffect)(()=>{let e=0;try{let t=localStorage.getItem(f);if(t){let a=JSON.parse(t);e=requestAnimationFrame(()=>{a.selectedCharId&&i(a.selectedCharId),a.main&&u(a.main),a.sub1&&x(a.sub1),a.sub2&&S(a.sub2)})}}catch{}return()=>cancelAnimationFrame(e)},[]),(0,a.useEffect)(()=>{try{localStorage.setItem(f,JSON.stringify({selectedCharId:s,main:o,sub1:b,sub2:w}))}catch{}},[s,o,b,w]);let T=n.CHARACTERS.find(e=>e.id===s),C=l(s),j=C?.weaponTypes??[],P=(0,a.useMemo)(()=>c(o),[o]),N=(0,a.useMemo)(()=>c(b),[b]),L=(0,a.useMemo)(()=>c(w),[w]),E=(0,a.useMemo)(()=>d({characterId:s,main:o,sub1:b,sub2:w}),[s,o,b,w]);(0,a.useEffect)(()=>{v(1)},[v,E]);let F=(0,a.useMemo)(()=>C?C.recommended.map(e=>{var t,a;return{rec:e,stats:(t=o.level,a=o.enhancement,d({characterId:s,main:{weaponType:e.main,level:t,enhancement:a},sub1:{weaponType:e.sub1,level:t,enhancement:a},sub2:{weaponType:e.sub2,level:t,enhancement:a}}))}}):[],[C,s,o.level,o.enhancement]);return(0,t.jsxs)("div",{className:"space-y-6",onClickCapture:D,onChangeCapture:D,onInputCapture:D,children:[(0,t.jsxs)("section",{className:"bg-[#1a1a2e] rounded-2xl p-5 sm:p-6 border border-[#2a2a4a]",children:[(0,t.jsx)("h2",{className:"text-xl font-bold text-[#FFD700] mb-4",children:"Select Character"}),(0,t.jsx)("select",{value:s,onChange:e=>(e=>{i(e);let t=l(e);if(t&&t.recommended.length>0){let e=t.recommended[0];u(t=>({...t,weaponType:e.main})),x(t=>({...t,weaponType:e.sub1})),S(t=>({...t,weaponType:e.sub2}))}else t&&(u(e=>({...e,weaponType:t.weaponTypes[0]})),x(e=>({...e,weaponType:t.weaponTypes[1]??t.weaponTypes[0]})),S(e=>({...e,weaponType:t.weaponTypes[2]??t.weaponTypes[0]})))})(e.target.value),className:"w-full bg-[#0f0f1a] border border-[#2a2a4a] rounded-lg px-4 py-3 text-white focus:border-[#FFD700] focu
2s:outline-none appearance-none cursor-pointer text-sm",children:e.map(e=>{let a=n.CHARACTERS.find(t=>t.id===e.id);return(0,t.jsxs)("option",{value:e.id,children:[e.name," (",a?.tier," Tier) — ",e.weaponTypes.join(" / ")]},e.id)})}),T&&(0,t.jsxs)("div",{className:"mt-3 flex items-center gap-2 flex-wrap",children:[(0,t.jsxs)("span",{className:`text-sm font-bold ${n.TIER_COLORS[T.tier].text}`,children:[T.tier," Tier"]}),T.elements.map(e=>(0,t.jsx)("span",{className:`text-[10px] px-1.5 py-0.5 rounded-md font-medium ${n.ELEMENT_COLORS[e]??n.ELEMENT_COLORS.TBD}`,children:e},e)),(0,t.jsx)("span",{className:"text-xs text-gray-500",children:T.role})]})]}),(0,t.jsxs)("section",{className:"bg-[#1a1a2e] rounded-2xl p-5 sm:p-6 border border-[#2a2a4a]",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Quick Level Presets"}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)("span",{className:"text-xs text-gray-500 self-center mr-1",children:"All Levels:"}),[1,20,30,40,50,60].map(e=>(0,t.jsxs)("button",{onClick:()=>{u(t=>({...t,level:e})),x(t=>({...t,level:e})),S(t=>({...t,level:e}))},className:"text-xs px-3 py-1.5 rounded-lg bg-[#0f0f1a] text-gray-400 hover:text-white hover:bg-[#2a2a4a] transition-colors border border-[#2a2a4a]/50",children:["Lv.",e]},e)),(0,t.jsx)("span",{className:"text-xs text-gray-500 self-center ml-3 mr-1",children:"All Enhance:"}),[0,5,10,15].map(e=>(0,t.jsxs)("button",{onClick:()=>{u(t=>({...t,enhancement:e})),x(t=>({...t,enhancement:e})),S(t=>({...t,enhancement:e}))},className:"text-xs px-3 py-1.5 rounded-lg bg-[#0f0f1a] text-gray-400 hover:text-white hover:bg-[#2a2a4a] transition-colors border border-[#2a2a4a]/50",children:["+",e]},e))]})]}),(0,t.jsxs)("section",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[(0,t.jsx)(h,{label:"Main Weapon",contribution:"100%",availableTypes:j,config:o,onChange:u,stats:P}),(0,t.jsx)(h,{label:"Sub Weapon 1",contribution:"30%",availableTypes:j,config:b,onChange:x,stats:N}),(0,t.jsx)(h,{label:"Sub Weapon 2",contribution:"30%",availableTypes:j,config:w,onChange:S,stats:L})]}),(0,t.jsxs)("section",{className:"bg-[#1a1a2e] rounded-2xl p-5 sm:p-6 border border-[#2a2a4a]",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-xl font-bold text-[#FFD700]",children:"Total Weapon Stats"}),(0,t.jsx)("span",{className:"text-[10px] text-gray-500 bg-[#0f0f1a] px-2.5 py-1 rounded-lg",children:"Main 100% + Sub 30% + Sub 30%"})]}),(0,t.jsx)("div",{className:"space-y-3",children:g.map(e=>(0,t.jsx)(y,{label:e.label,value:E[e.key],suffix:e.suffix,color:e.color,maxRef:e.maxRef},e.key))})]}),F.length>0&&(0,t.jsxs)("section",{className:"bg-[#1a1a2e] rounded-2xl p-5 sm:p-6 border border-[#2a2a4a]",children:[(0,t.jsxs)("h2",{className:"text-lg font-bold text-white mb-1",children:["Recommended Setups for ",T?.name]}),(0,t.jsxs)("p",{className:"text-xs text-gray-500 mb-4",children:["Click to apply. Stats shown at your current level (Lv.",o.level,", +",o.enhancement,")."]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:F.map(({rec:e,stats:a})=>{let r=o.weaponType===e.main&&b.weaponType===e.sub1&&w.weaponType===e.sub2;return(0,t.jsxs)("button",{onClick:()=>{u(t=>({...t,weaponType:e.main})),x(t=>({...t,weaponType:e.sub1})),S(t=>({...t,weaponType:e.sub2}))},className:`text-left rounded-xl p-4 border transition-all ${r?"bg-[#6366f1]/15 border-[#6366f1]/50 ring-1 ring-[#6366f1]/30":"bg-[#0f0f1a] border-[#2a2a4a] hover:border-[#3a3a5a]"}`,children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-white",children:e.name}),r&&(0,t.jsx)("span",{className:"text-[10px] text-[#6366f1] font-medium",children:"Active"})]}),(0,t.jsx)("p",{className:"text-xs text-gray-400 mb-2",children:e.description}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 mb-2",children:[(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-[#EF4444]/15 text-[#fca5a5]",children:e.main}),(0,t.jsx)("span",{className:"text-[10px] text-gray-600",children:"+"}),(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-[#1a1a2e] text-gray-400",children:e.sub1}),(0,t.jsx)("span",{className:"text-[10px] text-gray-600",children:"+"}),(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-[#1a1a2e] text-gray-400",children:e.sub2})]}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-2 text-center",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] text-gray-500",children:"ATK"}),(0,t.jsx)("p",{className:"text-xs font-mono text-white",children:a.attack})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] text-gray-500",children:"Crit%"}),(0,t.jsxs)("p",{className:"text-xs font-mono text-white",children:[a.critChance.toFixed(1),"%"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] text-gray-500",children:"CritD%"}),(0,t.jsxs)("p",{className:"text-xs font-mono text-white",children:[a.critDamage.toFixed(1),"%"]})]})]}),(0,t.jsx)("div",{className:"flex gap-1 mt-2 flex-wrap",children:e.tags.map(e=>(0,t.jsx)("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-[#2a2a4a] text-gray-500",children:e},e))})]},e.name)})})]}),(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(m.default,{onShare:()=>k(1)})}),(0,t.jsx)("section",{className:"bg-[#FF8C00]/5 border border-[#FF8C00]/20 rounded-xl p-4",children:(0,t.jsxs)("p",{className:"text-xs text-[#FF8C00]",children:[(0,t.jsx)("strong",{children:"Data Status: Community Estimated"})," — Weapon base stats and growth values are estimated from community gameplay data. Actual in-game values may differ slightly. We'll update with confirmed data as it becomes available."]})}),(0,t.jsxs)("section",{className:"bg-[#2a2a4a] rounded-2xl p-6 text-center",children:[(0,t.jsx)("p",{className:"text-gray-300 text-sm mb-1",children:"Found the best weapon setup?"}),(0,t.jsx)("p",{className:"text-gray-500 text-xs mb-3",children:"Build a team around your character, or check which characters are worth pulling."}),(0,t.jsxs)("div",{className:"flex justify-center gap-3",children:[(0,t.jsx)(r.default,{href:"/team-builder",className:"inline-block bg-[#FFD700] text-[#0a0a14] font-bold px-5 py-2 rounded-lg hover:bg-[#FFE44D] transition-colors text-sm",children:"Team Builder"}),(0,t.jsx)(r.default,{href:"/tier-list",className:"inline-block bg-[#1a1a2e] text-gray-300 font-bold px-5 py-2 rounded-lg hover:bg-[#2a2a4a] transition-colors text-sm border border-[#2a2a4a]",children:"Tier List"})]})]})]})}e.s(["default",()=>x],88206)}]);

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.