From 7c0f0704900a7b477542512b48b92d9e22725bea Mon Sep 17 00:00:00 2001 From: xziino Date: Thu, 21 May 2026 13:03:56 +0200 Subject: [PATCH] Add static statusId map for all mitigation abilities, drop supplementary buff query All MITIGATION_ABILITIES entries now carry a statusId field (FFLogs status ID = XIVAPI row_id + 1,000,000). The mitigIdMap is seeded from these static IDs as fallback for abilities absent from masterData (e.g. pre-pull shields). Removes the need for separate applybuff/removebuff API calls for name resolution. Also adds shield buffType with tooltip on absorbed value, expanded icon set, and unmitigatedAmount/mitigated passthrough. Co-Authored-By: Claude Sonnet 4.6 --- api/analysis.php | 114 +++++++++++++----- assets/icons/mitigation/bloodwhetting.png | Bin 0 -> 4932 bytes assets/icons/mitigation/divine-benison.png | Bin 0 -> 5180 bytes assets/icons/mitigation/divine-caress.png | Bin 0 -> 4974 bytes .../icons/mitigation/eukrasian-diagnosis.png | Bin 0 -> 4469 bytes .../mitigation/eukrasian-prognosis-ii.png | Bin 0 -> 4613 bytes .../icons/mitigation/eukrasian-prognosis.png | Bin 0 -> 4530 bytes assets/icons/mitigation/galvanize.png | Bin 0 -> 3962 bytes assets/icons/mitigation/guardian.png | Bin 0 -> 4884 bytes assets/icons/mitigation/haima.png | Bin 0 -> 3911 bytes assets/icons/mitigation/improvised-finish.png | Bin 0 -> 4929 bytes assets/icons/mitigation/intersection.png | Bin 0 -> 4300 bytes assets/icons/mitigation/neutral-sect.png | Bin 0 -> 4936 bytes assets/icons/mitigation/radiant-aegis.png | Bin 0 -> 4948 bytes assets/icons/mitigation/seraphic-veil.png | Bin 0 -> 4361 bytes assets/icons/mitigation/tempera-coat.png | Bin 0 -> 4702 bytes assets/icons/mitigation/tempera-grassa.png | Bin 0 -> 5167 bytes assets/icons/mitigation/the-spire.png | Bin 0 -> 4798 bytes js/analysis.js | 61 ++++++++-- js/app.js | 6 + templates/report-form.php | 2 +- 21 files changed, 139 insertions(+), 44 deletions(-) create mode 100644 assets/icons/mitigation/bloodwhetting.png create mode 100644 assets/icons/mitigation/divine-benison.png create mode 100644 assets/icons/mitigation/divine-caress.png create mode 100644 assets/icons/mitigation/eukrasian-diagnosis.png create mode 100644 assets/icons/mitigation/eukrasian-prognosis-ii.png create mode 100644 assets/icons/mitigation/eukrasian-prognosis.png create mode 100644 assets/icons/mitigation/galvanize.png create mode 100644 assets/icons/mitigation/guardian.png create mode 100644 assets/icons/mitigation/haima.png create mode 100644 assets/icons/mitigation/improvised-finish.png create mode 100644 assets/icons/mitigation/intersection.png create mode 100644 assets/icons/mitigation/neutral-sect.png create mode 100644 assets/icons/mitigation/radiant-aegis.png create mode 100644 assets/icons/mitigation/seraphic-veil.png create mode 100644 assets/icons/mitigation/tempera-coat.png create mode 100644 assets/icons/mitigation/tempera-grassa.png create mode 100644 assets/icons/mitigation/the-spire.png diff --git a/api/analysis.php b/api/analysis.php index 7ce143e..4b6da17 100644 --- a/api/analysis.php +++ b/api/analysis.php @@ -56,29 +56,63 @@ function fflogs_gql(string $query): array { return json_decode($body, true) ?? ['_parse_error' => true]; } -// ── Party-wide mitigation + boss debuffs to track ───────────────────────── -// Barriers (dr = 0) are shown without a percentage. +// ── Party-wide mitigation, shields + boss debuffs to track ───────────────── +// buffType 'buff' = damage reduction, shown as icons per player +// buffType 'shield' = barrier, shown only as tooltip on absorbed value +// buffType 'debuff' = boss debuff, shown in event header const MITIGATION_ABILITIES = [ - 'Passage of Arms' => ['dr' => 15, 'buffType' => 'buff'], - 'Divine Veil' => ['dr' => 0, 'buffType' => 'buff'], - 'Shake It Off' => ['dr' => 0, 'buffType' => 'buff'], - 'Dark Missionary' => ['dr' => 10, 'buffType' => 'buff'], - 'Heart of Light' => ['dr' => 10, 'buffType' => 'buff'], - 'Temperance' => ['dr' => 10, 'buffType' => 'buff'], - 'Sacred Soil' => ['dr' => 10, 'buffType' => 'buff'], - 'Expedient' => ['dr' => 10, 'buffType' => 'buff'], - 'Fey Illumination' => ['dr' => 5, 'buffType' => 'buff'], - 'Collective Unconscious' => ['dr' => 10, 'buffType' => 'buff'], - 'Holos' => ['dr' => 10, 'buffType' => 'buff'], - 'Kerachole' => ['dr' => 10, 'buffType' => 'buff'], - 'Panhaima' => ['dr' => 0, 'buffType' => 'buff'], - 'Troubadour' => ['dr' => 15, 'buffType' => 'buff'], - 'Tactician' => ['dr' => 15, 'buffType' => 'buff'], - 'Shield Samba' => ['dr' => 15, 'buffType' => 'buff'], - 'Magick Barrier' => ['dr' => 10, 'buffType' => 'buff'], - 'Reprisal' => ['dr' => 10, 'buffType' => 'debuff'], - 'Feint' => ['dr' => 10, 'buffType' => 'debuff'], - 'Addle' => ['dr' => 10, 'buffType' => 'debuff'], + // ── Damage reduction buffs ────────────────────────────────────────────── + 'Passage of Arms' => ['dr' => 15, 'buffType' => 'buff', 'statusId' => 1001175], + 'Dark Missionary' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1001894], + 'Heart of Light' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1001839], + 'Temperance' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1001873], + 'Sacred Soil' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1001944], + 'Expedient' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1002711], // FFLogs: "Desperate Measures" + 'Fey Illumination' => ['dr' => 5, 'buffType' => 'buff', 'statusId' => 1000317], + 'Collective Unconscious' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1000849], + 'Holos' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1003003], + 'Kerachole' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1002618], + 'Troubadour' => ['dr' => 15, 'buffType' => 'buff', 'statusId' => 1001934], + 'Tactician' => ['dr' => 15, 'buffType' => 'buff', 'statusId' => 1001951], + 'Shield Samba' => ['dr' => 15, 'buffType' => 'buff', 'statusId' => 1001826], + 'Magick Barrier' => ['dr' => 10, 'buffType' => 'buff', 'statusId' => 1002707], + // ── Shields ───────────────────────────────────────────────────────────── + // PLD + 'Divine Veil' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001362], + 'Guardian' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003830], // FFLogs: "Guardian's Will" + // WAR + 'Shake It Off' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001457], + 'Bloodwhetting' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002678], + // WHM + 'Divine Benison' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001218], + 'Divine Caress' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003903], + // AST + 'Intersection' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001889], + 'Neutral Sect' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001921], + 'the Spire' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003892], // FFLogs: "The Spire" + // SGE + 'Panhaima' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002613], + 'Holosakos' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003365], + 'Eukrasian Prognosis' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002609], + 'Eukrasian Prognosis II' => ['dr' => 0, 'buffType' => 'shield'], // TODO + 'Eukrasian Diagnosis' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002607], + 'Differential Diagnosis' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002608], + 'Haima' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002612], + // SCH + 'Galvanize' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1000297], + 'Seraphic Veil' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001917], + 'Catalyze' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1001918], + // SMN + 'Radiant Aegis' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002702], + // PCT + 'Tempera Coat' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003686], + 'Tempera Grassa' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1003687], + // DNC + 'Improvised Finish' => ['dr' => 0, 'buffType' => 'shield', 'statusId' => 1002697], + // ── Boss debuffs ──────────────────────────────────────────────────────── + 'Reprisal' => ['dr' => 10, 'buffType' => 'debuff', 'statusId' => 1001193], + 'Feint' => ['dr' => 10, 'buffType' => 'debuff', 'statusId' => 1001195], + 'Addle' => ['dr' => 10, 'buffType' => 'debuff', 'statusId' => 1001203], ]; function resolveMitigations(string $buffStr, array $mitigIdMap): array { @@ -127,13 +161,20 @@ foreach ($pdResult['data']['reportData']['report']['masterData']['abilities'] ?? $abilityNames[(int)$ab['gameID']] = $ab['name']; } -// gameID → mitigation meta (only for abilities present in this report) +// gameID → mitigation meta: primary from masterData, statusId fallback for +// abilities whose status ID isn't in masterData (add 'statusId' to the entry +// in MITIGATION_ABILITIES when discovered via the Event Explorer). $mitigIdMap = []; foreach ($abilityNames as $gameId => $name) { if (isset(MITIGATION_ABILITIES[$name])) { $mitigIdMap[$gameId] = array_merge(['name' => $name], MITIGATION_ABILITIES[$name]); } } +foreach (MITIGATION_ABILITIES as $name => $meta) { + if (isset($meta['statusId']) && !isset($mitigIdMap[$meta['statusId']])) { + $mitigIdMap[$meta['statusId']] = array_merge(['name' => $name], $meta); + } +} // player actorID → player data $pdRaw = $pdResult['data']['reportData']['report']['playerDetails'] ?? null; @@ -153,6 +194,7 @@ foreach ($roleMap as $group => $role) { } } + // ── 2. Damage-taken events (paginated) ───────────────────────────────────── $allEvents = []; $nextPage = $startTime; @@ -203,9 +245,11 @@ foreach ($allEvents as $ev) { $byAbility[$abId][] = [ 'ts' => (float)($ev['timestamp'] ?? 0), 'tgtId' => $tgtId, - 'amount' => (int)($ev['amount'] ?? 0), - 'absorbed' => (int)($ev['absorbed'] ?? 0), - 'overkill' => (int)($ev['overkill'] ?? 0), + 'amount' => (int)($ev['amount'] ?? 0), + 'absorbed' => (int)($ev['absorbed'] ?? 0), + 'overkill' => (int)($ev['overkill'] ?? 0), + 'unmitigatedAmount' => (int)($ev['unmitigatedAmount'] ?? 0), + 'mitigated' => (int)($ev['mitigated'] ?? 0), 'hp' => (int)($ev['targetResources']['hitPoints'] ?? 0), 'maxHp' => (int)($ev['targetResources']['maxHitPoints'] ?? 0), 'buffs' => $ev['buffs'] ?? '', @@ -237,16 +281,20 @@ foreach ($byAbility as $abId => $events) { if (!isset($current['targets'][$tgtId])) { $current['targets'][$tgtId] = [ 'id' => $tgtId, - 'amount' => 0, - 'absorbed' => 0, + 'amount' => 0, + 'absorbed' => 0, + 'unmitigatedAmount' => 0, + 'mitigated' => 0, 'overkill' => 0, 'hp' => $ev['hp'], 'maxHp' => $ev['maxHp'], 'buffs' => $ev['buffs'], ]; } - $current['targets'][$tgtId]['amount'] += $ev['amount']; - $current['targets'][$tgtId]['absorbed'] += $ev['absorbed']; + $current['targets'][$tgtId]['amount'] += $ev['amount']; + $current['targets'][$tgtId]['absorbed'] += $ev['absorbed']; + $current['targets'][$tgtId]['unmitigatedAmount'] += $ev['unmitigatedAmount']; + $current['targets'][$tgtId]['mitigated'] += $ev['mitigated']; $current['targets'][$tgtId]['overkill'] += $ev['overkill']; } if ($current !== null) $clusters[] = $current; @@ -264,8 +312,10 @@ foreach ($clusters as $group) { 'name' => $p['name'] ?? '?', 'type' => $p['type'] ?? '', 'role' => $p['role'] ?? 'dps', - 'amount' => $tgt['amount'], - 'absorbed' => $tgt['absorbed'], + 'amount' => $tgt['amount'], + 'absorbed' => $tgt['absorbed'], + 'unmitigatedAmount' => $tgt['unmitigatedAmount'], + 'mitigated' => $tgt['mitigated'], 'overkill' => $tgt['overkill'], 'hp' => $tgt['hp'], 'maxHp' => $tgt['maxHp'], diff --git a/assets/icons/mitigation/bloodwhetting.png b/assets/icons/mitigation/bloodwhetting.png new file mode 100644 index 0000000000000000000000000000000000000000..d946f1473b7eb70a82f429ea058e7b51efd5247e GIT binary patch literal 4932 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 literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/divine-benison.png b/assets/icons/mitigation/divine-benison.png new file mode 100644 index 0000000000000000000000000000000000000000..9eecaa1f71d3dcd8ca1088f6b8de2cacb577d6a9 GIT binary patch literal 5180 zcmXX~e^8otnm2KCT-*k3#^bV0Q08`SYPavLnqL*7z}-!E+}&K)?Y0FCQPgfiV>Y6B zt7sr#VpC_$uKdw;MJ3P~$J#C`wys4*eIx&5r;;X`oFE96X_GVQ6 zP~Z3aJkRI({P_O<*S{)0mT@8@EiLWXFMj^kZ@}m42jBnr58&q?$nooGY5$!5i?{ys zy{1E(v+1AxTiKrCJai~&}RmV_|UR-38zL46X8a3S!O73Ik$g#ZSx-9-T zi6S3H>$2RiBct}NQSm|3POHCH*<@j;9fFbPcb)A4+9!DZc+eoZER7v4N-VkRiOFKv zkxBMAUuLTvhko#DsZ`2Vcp9`!p1mf<=R@i#v>P9CiVK!Gxm1AP>+%;rd zL*X^qk1J#C!btZV2bzhG28k`nTp{x2)b@qBf>i!s=_yJjb+B~v0TE}kPBuvUC>H=%x_FJSvaxTD4x+Mt(vJ; zWHEFGmV#i#iu^|h8+B=LZtoefn);?CYM& zzhvg0^4@8c@fpZf`#of@!5y`l7#b5DrP#X9ywly{tg)PZ`%i%ZQF8PU-xU0euYQ9P zbDKXJv6yQw$9_U#Y-G1hTKYr^`-@)G4Nq-9l1#7q+z;QSe)9!JSEgK=Jwv8L-pT4oH8sdhFtR(~h+nBGH2k{*Z;$Nes@y^qNWPK#beV>Ud%tB5`^ zK43j0q@#JOFIeO^2=aAva(hPU5Iow$`I)=TInnvF2P`pdk8Oax2r2eAMZY`8o>uznhM00&=z>R01^OdDZ#okGGahHmuvU16%JOQ6`%xD;z_ zgm_{iqLRqhCet0fz1-K9y4i(8hVk&2zaRAeskb6(;mK(uhZ{j_BmOR=*+NrBHO?VO zJ;(G;Rx9N82G`<5@M$?Z8|G}eN}jDv7BhqWBD}wB2pt@+=JM=>+4`l)xRMU#3J*cU z0q{FkUh*+SCJcUqQr6{hwhM1d6XkRU zc-)zV%#|j)hLRo|nWUhua;wO|C-y|%c}~nW5nh5T5=&M*lrx)2p5Vtewq44pAA)&1 zH69Ng@Cnr62oifGsdIy2|D-^XZ)M6g8E|ePw=I-yqad+{sh#@xT8<50mufMW(cb(5 zAlny!xp7m(uTtIw8+g+$Rc>kW6yott_Eu%7XFiYTKRRMs?HAC{ekSp_DA5_Tl|>g~ zvx3w)VztkW_rb~;h1Hw`!tq@A%+H1ysj9P;X z<%+dzD4yb&6LvWa!Jk=$$dlAGn>DofPa zIw6)?WXkR1m<5@xj>RGDTVB$&v68Ubn)6H2xce%49*Q-SogqQ;ZR|%%JuQA)4 zxg*sx=k4KeJB4@C9;NVpgu-DwR9;Q42h!XLD^$_U4W9QI1kgA|kuXZ}fU`Y9qQbId zv^`+7R~@k$S|enDo|eaH1E&$8T}oWFoD54)utd|iKaZ@PiT5gh)WW7+A$|0X2N#&$ zwSMN*syXi%hUc1Mv*B2(>lDXCEjOqw2d#op14qmiePz1ikv09&6|Ue-M%j| z3Nsk*GX%`8EHRbX%NVEdtyK-01-_w3+~CM%crQ0F!e!=@pl|iVpb-C6D$Qo05S}1Fs;uZ|Z!4&G!X``E5vQe;{AHx+Y33$q6A+prmRF$J?BL z*?w$QVSd;9)a(j;qe}cit=ONcjlgZOCeXl9Y${cu7U`BzlM zr9ua-fE~F?K$BD3t$=h+Z~?pGo3gOKGnL3Do5mKzfHrEzRy$KSEqRd#nH>&1jCX(1w84VFIMgpW9u%( z2Q%>@Zx2oDC|eBLCRPE_Sx$~Flz1l>3R1i6f|>C74iUwb1&H#PX|VJVqwSf;bGadu ztEU&K1D9eS0wZZF`|6@+u14A=&@zLqL2KEeNOA$OT}y3CutgKZJvqJ$1W#m@ruH%q z@Kp>H)|Ca!V?&o{romF2jvRAm5T^xGr(B?O0b*we>M%62!Db&=KLZ#&u#LJog7sa% zDwu8eICCLBLu_fl=vL;`9g4^b#JR8e1>R6}=%Ci$DdKI)lYE$ro2}hQREDif6(2Nu zye0<8<}hifPGmjP~=Z-7h;dGkeYX52G=5} z`CtG*OI4|!1$4HZjM>Kb!UL$Y$&yLNvn%$;RG0;bO&W1(Yf(fj11?FO zH6(q&PRs3?d}w$-zywl}eD22Pfz9p|b%*#$TQt-Glm@KyPAgl%P~axXT@iU@xR4uM z!q^hxTg28U+Be{69(ko=e=^jx1I#oC0rPpFnZV7fU{5qKdmz3V`kKW{dU!JG?-p|^ zh|kkMAEFD3)JDb5y?2ei-c(%G95E_yk%^-vRU{f&TtLWsSRyZ3`AwK@6~VLnx|Ov) zgRGef4s{P9u0EUWz#Ay?1cbb4B)P<%L0M=>)itdhSF)by5mw0;)`{INrH)DZBj^r< z6d4qW*J?P6-c<5c7lMZ34v$ z0g$kOjcvcImw})K6O#d8bdl4TtP!u$&H`t14c0*1M8BwqM*4NA3BmjDb(%slvpzmii@712al_hm!G1~y0rrf#*_dFSSe&n0ahFR)x)tGR3 zI`|WfVrKzcqA45fhme`)Yuc+_ZLXhIkZWFbmvVQWsl>Xl7?J`JD2Vj7J`qlB-$PF4 zDG76t-$&i~*g4F!X(Z&D2tC-5ssjTYt>@yO9x%vuPI{f=C0`*s4*1I!gez`xDL!K= z(KZn@C||8enB_Ycly3?K)8c>Qfo;SGQa!~?9cE@G7pL}!^NL=&F+5y4)Cg9#UBD$j zOykFhH+jiL=Au9u%Z!I)zNHB9l!!`G`S5?}o%508vd#wFuHXzp<>J$#-V)MB`y{l| zLqCXqA~1^3c&$Rit1xqB`+{)xqJ|D!;%?V+dAXG^ANbaE5F)>R&as2%=fIvmQMW@8 za$Gqc-*o1}zJ8Fr+@mrY+;L!UPdr;QDDivvMufZyjxMG#m{HkF2ELm z7L~HcLB4dLAkB7d?-|N@`#~iUY~Cy&f6F54NO_D;655ZYwZDDT#jhVRPbQ5mWA&IGghLTfWlLEe<4_Lz!KL}3*Rm%**M(dVY{*@!|8me(xMRyH&^DPc)gEh0+utQ!{MI<3Q*Hk-Z;?_xKsdS zrhd8A&>Fa84QFWU9J!Fs472PSw(F~EOQv>f!3`6}FZDuYZwPhO%ei818+(?4>gjr1 z17^lI)p-~oQyPaGZ_{b$`AW-6t+08kew;cEY-(CZI!!wl4i61BO6~^o7Hh_;rAJ&q zYP&%Ilr;)AhWQL#(_8RCD3n-S|Nj-G=dMDn_@Joe~X|es#EG)O7I_Z)TMR z@dwjN>uDyF@j(V(Pmg_nq)`Ah3QT{0{IQMGl+wjz&;8K_O$e=HJS*QkEe6ww^`2=9 zSiuDWs4CW*4)bT**-*#mYFvH(yUwpj91B&zrC2OpF(NN{s9cMdUW04;* znM`gtl$V}QDfNI-atA@*=p(CfMs|@7)|8`z>d|U01x@=WxRTq3%fb6#9}7YOPmV6g zL6XeHz&+E(gO^8V87(|=&44}y_eY>`V9G!VdS}K#6Rmi_OIG=^Q6RjA+BKHRwtN>{ zO^A;i(5-->V~XwVY?Dm@f!C$e(ZfX)Fj+dp2OZLhD1(4bs;DsEw!9W6mPQiS75hdV zNEh{uK}d};01S>OiSMDN2huajot!h`<9t&-kE*ASRC7T%$gZ?U11?}<()Hz)RNMRA z;B&F8djUM$Ot1u?z8``=y@O}4K!#J=hDusO9qA@uyxS?I<_2h7d>mXoh)}bN{4HR_ z!Ny1xHD5Oh%!`W~vr|sgG;fe7?96tKJCiof_T{QE3fhy}XzNQD zL6_{pw7~tJ!a4lSrgjfAJshegNM8y7&K^m%#HksfjO0q?}{Fc=x9t zwPmc&Wc}e^Dt`ZcEG>$B{XdRd7f*jO^2HC|{`Gg^H>%(NQm=aF$UjB!R%3m~&7M;Y z9{oGgqgvGrVO4*wveQukim~ZEZ05){n`FN|12P#d`8~aC!yHY}#ddV#5(>uN)pi91 zt=)bCh~%iqFw|0Jdf7}=%eT~0&WY#{#&*cZ#KZ&ekRc!^VR48p{fciJF+LqO!G% zN}RCLLk}E!Q(w3`adJfbj4g+wy=CwPmgQxtg|bjJYC3xuX>{dBFN^yGOaY9`^+DA^ z^E<{=Oy|QcA2gUubG=olplz#VqRvvgI~818%+jJWy>&ms$kMx$pSy^73u-SrXYchC zGb0tw_UJIfG0emJm*YZ5nPI9YfbA%c5SXQ;3Nt8ZC1~y!T*Xok&D6 zG5LxQS;?62ky0UzDzBBd*aM|&XZjD4Ow_=o zGPS@h3uzmN#>5>iYyH)%x5?Nc*B90gZxgAbA*0(`5Ez}+NvG$A(WN?xUk%aKZ<`*yJAEL+?h;ep-c`zQdNtu$-sXv2!@SPg@LO&1VP=1}<`C+*LmOa( zR5~&i(j0;lKgkKDQhC)c4j4Dl0?X;n^`LKbd((&QG9goFU~J{r*I5gh3*UfXf3NQR zuxj)q*lPZJSQ$EHl%D4#{L9;550FU^VR1rTU){O)KK09Mjh9YZC&f!YDeby*M){KK zV^)ga79Fm!>?e=k`{<4)=xDeyRV%X0Zfx9Z;x6Z%N#pFrf-g01^*QpK72<{tVmMiQuB+AbTL9aGD)`e8=JqA-6w9cu|v0+ z{7XTv)y8|{+df#QzMM$s~b#p*i5hw138gJ-x?7u`8scRpx1KR(ri@ZKl3^P?eA zbVnI{u+f==bVlBysP4|ypR`NPjtb2moMA|}-HZM!RU@CIp6i_@(n52rAkE6TUaN9QC@Ze*Sh#~Y+O)}wV( zksIyXBChL}J~b3b$4O_&P$%*{&9ciH)UJshL zic6QSNyQ4J+F1iDfvVnUe`e&kK;=Hrwx-{JOy^pZRjq>pC0o$v?xy*$eG?)5@&V)( z4I7BLArmr~GRqIE^<6X*bAX}FGMu#n71vJmv$;txv-(AU)2daU{7lsxZh4!^ah>LN z%nE@vFg9F|uiIkbK7qf15t=Id63omprjBdNM{5;(K!J1Z6^FT;IzXsqK$K7+LIKk~ zxk5A4DrijT$M0xZF#4paQ%U9-=VIYJXKy&Z%t(Eriq07~ADN<01D1X-91Kr{9>{Oz zNw-?^rl)#%sc==}b(@5;wrIgK^mF>Dn$B9xNR=cM zqXzc3JQo5z4ovqT)z+QRYFtWOXdmSM9V-8l%zdMEBcpXW z-m)-Fj!cqUCwqQmOD5!CyrNG&q<#uZ03&A!t00ef=#4o8#AkWQrzO}TLqg>e&JD+j zbd-V31(J4iET?hRN`)^xk9qQqk$X9S)!vLBGsJA&n53a3!GKM|2~Ck1q5eRE<;?}= zpe@=mvCZ-&yZ{!jl*WTJZEMBoTrUXuY_AbsCu1&ZssVnXNDtvcZ_Fi!8y4{gdPh!U zXC`SQ>0&tEL^e-=gd#@^lGY|?q%?ip&M=>zZlsv(a+{b(28pkyXmBN)36+*x=_tvu z99Mei;H;FHV@yy7Y$BEe6)o$R=aK5sv%2yYss_(4x7P0$3}i`(%i^|mFZ>0t3=jt& z<_;F5o|dBBkfuu2>@JSlrOwj`CdPh1I&*(Dq@3DQC)?ZOpLZ|J`>`Qw*7^u@$=-jEz#4NpYo zEAdrc3NT@qJ0yZPc2R{ieyjanq}X@AcLTnsD_ZVJ4~6^wy=oLlWoi5wf~x$qg5-TF zIvx@%CaeNzhR2Pwz;Ox}1Nbmon}AmVK8VjzkAaOk%d{l4kY|;+Xd1RjLj$%?Z7WT0 z^00Y5@x5gCp!7I5`2*r4OQYnmv(`6}Si{)Mk|=}QErt_%HXP2!6sqA9splIzI^)QM z@K{~yX?W>@*GjMM;DoNr-R-O4z9VY=K$e~D;$=yv#Z)9|HxWC$K-Nrl+ZK~&uS0f* zGvaGJII}b!77t`;JiXz(&fF&Ap}itQPdo+bpNZl0E>MzhB0H6sS4#XK!Ri&F)EeVc zi)rN~1U$-r0eea#feo6P!^P+9G_KjSVyuYq`>^k+@cFz>f<&Nx!ot; z(NjJ6upD#hlYC3uN<}q{8eCaEa?NaFxla}Smw=*QbMZOL(A;E3C{*)^s0Y29r5}@|bT4ZD*6z^pVED2Rr zHEy-HZ=L22sZ*}=jS6qcCPPN)HLfL;M~dLV0BY3}d{wh# z_IbY?n|I*7~)68jbhXuIak z)7WQA2Q=(m@fM)PG=tznRJgF|)wNWNfjPNJn{UIIPRQ}kA+4&J$|&YiOvcUmjiglz z?KX$=i5(&j+V$C#w2r7qIyPB1t8=hnzib&S;!j`^`ApQ&z77cL?q*Y8vb^{$chC*I z019)Hey*b+z0-s_14-u$y}ZRA1N^K^4>hG$^r$`^m*dNU)Oiv*Q;^;&u)T>KFD>`m zhRX~u`=(4QR<9FBD@Ax1vGn`Jk>z+K|J;cZYU&x|xXI)jGu6WW(|htk-4OzNiatG zm`^~(@ZK;gU~z6mT}`RSg12t!uC+xQkmGX8g{ugBFPFe`jd#DfTbc1TM*Dm{FY3jr z&Uk~8EfaFe>p2ve+@^;pF6;bjj?k}|f6ms>=m-TOo44OYj&ajruKV>YuEd?Q+kddx9}BlV z3kpDmDcNO?ZZX>ICr;)$X-Lu&aFhUi*oGOeFqeSDEUQ!J7vtl+q0-b+DXKwUT*GT1 z-T9*%igx2roq1uUngu?tcyEI`cR@;8$g5DVmj|AtD)EDKt0d5?y zoL$sL@j8Knwkg@h5s28?8$vW0d0@vQxX`>qSffvahD+f-o?QnHw0WliImRRAK=R!o zgP2<2q<2*T*#wKYq_)&4#F0r_SI}EL;1@TZw@mfm5?A(Z5|h6Nrd|Exs@$GE)kr=x z@5mSqYI-{-9`xi>IWWB(bY>ZaJl#Ye4HLHxa^qHDV0eQEwT)NU!1gG;@VW^7E%M?j zj^f3{4kK`17P8}EzzP9L1^OFzy#kNq3m`fYd0^gTB1fgk%b+g`H;rYM>uwt|0ZS^Z z^$OsRfm`S^ZHdvC8h#36BdTM6%xhw%Iz$Q(2q27G-%FEz4o8hW z#g!sUghl<-l{0|(cV~F|rM#s$y)VlIZUNNTWVh zxw1y&Do96P$1ay}hYA*x4SgH;gaZD4V-u|5ELwo4YCu6&0rYlz+k0Yo5?dE2Xw=UmlICqdlG8|>iOuFH;ejlH%CK@bI5VujmSrL~Bl%3Ir~}T`AaEv2#aZk`5DtZItc#mb^!pATdQ^1A57c@C^(oUvv zajbSc6BsBl%j?*AXtJ*HLC#_R_U?P4Ht8Md^L+5J}rr z3P;7K^~Aj1!ANg0Ft3KUGd$Txv$to08rW}|p~qJN(hZp-r#K;5dtqsOos0HJ6UIrQ zkP5<(uzC-x1&?(gWno^xR)_4K!n~yuv;oY@NX{1lFAKMA?*oPhong8|AZki61WpJ| r4(hnju#(s3=2hyGV0LciRqj9J{B&gKf5AN(=@&mg^X|yc_?P}4A@@XJ literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/eukrasian-diagnosis.png b/assets/icons/mitigation/eukrasian-diagnosis.png new file mode 100644 index 0000000000000000000000000000000000000000..33c4f65a60707aa3ec5365431c150752a35b6fe6 GIT binary patch literal 4469 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 ar~kSA#^BOh@O28~!=In}VEBD`_x}R2L)|<8 literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/eukrasian-prognosis-ii.png b/assets/icons/mitigation/eukrasian-prognosis-ii.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9350055e7527782f8467822fd376b8a929a700 GIT binary patch literal 4613 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 literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/eukrasian-prognosis.png b/assets/icons/mitigation/eukrasian-prognosis.png new file mode 100644 index 0000000000000000000000000000000000000000..f17814fbdbe503442885188fc33f17259e030b1d GIT binary patch literal 4530 zcmXX~YfxKfdKTEM8oEZ)VH9t(0(Cl_I$h0xZ17mJb(yx=p())s)AfprEKAtMa$v*7 zr;@-T5(a0P&_w#tVG*_>ZO7v{t*)3MGRPnag4H#;jGYMC1aYy3b8G|$w1ViuLG(SI z4!0kC=X~GyywCHz&#TWq{GjGo@jJy73gy`Q|McF!!rynvpFjHv{Qf-u@M8+)FS_4< z@9!^k6>NEr{NZmJe*ZXmsKUSa-@yIrwO8yP|M1QKe}DA3>G%KaFrBLUYdouTwcPk> z;9P6O5n>Y8On)Sf-#Nm%^j8H(>kNlKVO@In$WfW;BY`<3{G3Ix8mh32B08#0*sLO! z;Yi>n-P(0i5H1VhMpqD9QqncW^&g zV3;+|qbV*TgZJ`8ED`UAmhryGAU)iwAvjTf&bO5Er`gyDO8KzPLLUxd7t^Z=!(q}G z_hSJ)6PrxfU%8*TLkmdIeFWv)dv z9E(Xr7KzC1wklOGVzK75NkXpgXCBB*J5g=0MOCypQ)~!7t@R|&?fdkaYQ5(5Fgh;X zf67}kNeoQ6z&uu{R5gt^j;h0hYJ6hg&5MtVoQ<~UQjkWU>rP+`;wIH`lx=1XL@HP!xXMTvW1FkwA!4#-wq-bi7wf_| z>6`e2#;rmGFs=(U*pv+gY&jsr@+4bR3){p3vD+@ZnXs$bQGSL))9iHG&k62pcFt)} zxzkItNkI3@mHjWW@$LLo<@Ur-WTX7jzHP-2;k!4l)2t|)iXv!WjT6B9BY>chtJiFu zK}~9tmw)~t_4#@xnW&ez=JC?}JH6RtoU(~87ke4?qw_84a%DR|gyXfTsE~+RMQ$&Y z)Dh40Gk-OOIkdL{P$PAA<6hJBWr4ZMEcGjB8n#QYRxUe^Iu~QjZ_2EIec@6~r{(!q zXReO-!5jLi4!}?Z#l6^Rj7RzJpiXt7)KE3R4Ode|456mXk0G+-qBO1S4vYo_Iw&C`8!uMuEiXm{?endl%8 zIPeh)N^usV(UbB}j|Tpm=-OooZ^zVlQ+h!n11__WSdt#VC`+kZ!mDZ12?~&mA`8(i zbdpl$*&cyhL-;PHUq#VOk~+3HH53yc8gfszi3l*Mv}>ndUj-zgv!y3J_*vBNxB|-= z9-Ncnf|zO$!biKRfpZEoXD?;%=~K^W(>mewUOA=S2U?*c2IK|K*Tc>dV8B33-3EG5 z1Ix>mDpkX1U)C6DDWV`U1eH+*Xc2+q|6XU->x- zL@|%K`(pIX<*}D0ar^px;FZ+msJE>ytmLoMZ#`(V8GuWQ%7Z5X3=z4Oi&OD{!>ywN zXOWl!(T!amchB2g%dB}j9{d1oXd=Pj?3qpw)fRf7`y=#GH89)9%iUuJ zYdt@sCoH02i_%vwpo_HqG7U&}D~1h5kJU!0QllqfT zc3gT`tv#6Uh}8;jLuE4xz`Q24$RyzP8DreqwR=~3+cS;1Zqk7%Y>VXGQn6Wr`MZ;K z8pU$fCcX1rW&Wk{jxKe}qb=4Rrq8d2wb?XRmH4$xq04r19>%vPu zmMfg|#N@!(xS}j&OBgm7Uo(UU9Xj*$XORtxNadWw{_bBabW2SAaL;jg`#!N}MsO3t z%gsrRcP{1bb??l3suh|tmteg-6w5`w2kt#esy%163154#IJ4HCZ_a0iwLcT3JHV6- zVT=OQWL1$irDf|iaVofw8?@{{`3pWqY%?b(sqaSOfete@` zCp|L|A@zKd>zv2=Y3HP3E?Fb>_mudVJUK|gv@7R3&)o5pPeZn3G?vNxd4@ zRG-hpPdFDPoeAmTNrp#9b)Z%e2$!xU=Cy%R&HmZt+?UKCRl8U7YrSXpZWeFPf2>1T zh;A0=!=4lPko4yUBrH8V4O}R2TiXs=O*^;5-G$NQV>9u`0Q5t=d*?3MV?c=@9v^f) zQF`e~%QzgCgb18%cEi!WJ}%9kZQ~0Dvi;oY{byv00!ur_s^_nPCuxH?aaNPNzc#*- zyZ7HK2eY1IOHYzi=n+lhiy$lUn*I>*Oc+2S>Vy=2O6y0#il|8JF7sH5>jxPOYZ9v8 zf#~>d3dz4&2A++3u8ub*SL;krIkGEvCYXmO!ClnQE*gSszIGyHZJQcUn|6+(7InR? z?NfS3&m3;k2F`0!w(r%N%)nY^Fl&pB?yrJ@#F{~0EgBlM-=T>;mln*Zjr7}oX?6%e zUsit(v#w@tuvZxFk7g5Vs%n_H4PLM zYjXqLJFT87aB}^`9^mzWZdGpI%-Yx<-C3|$ma<91K%pSM%3w!}DuuCJ=^P_^-mA{6+kR<)!63|-9yJq+d z?Q3f4N&7*FIEg6DJ4f+sLWoWdYnlN+z(fRKCSqLwj4sALtpTkOU<%{Vw=Cj@(U(sh2akCfpMOG;zjkT=3+7L~(v`9K;)htd;mGC; z*-aFPvLX4y`ChfjIo~1};9fj45cjr}_<@#WtkDwRd4fr*@Ew#5lm@bbc|LvgCzjOD z6gCZ$d{MR^e7r$Sz9C>BnUIb5soSQ8NFzP{5DVpYWO=>lvLt_0mA@I~KO*Wo1 zA4ze^02C9~S?&FB2%YdoN#KRVC*8JlLdNKHTWA9!7qm#4WUJJF^o1B!AS#H%<1EDLgD zvB;}H$ZSP$80J}ga9-p_L~s(hhEe`W8Lvx#nIgr#WOT%K9&aC9Ln}Wib88QdK93ba zfU4WX@dxU#Er7ALJGG?_V$t6a#5QsJLu^3}w#I_^3CZill;U`A4WurHvaX}71HzjE z>3R(!mQn*v`BiR;I?FJG*Ek)}m{mm4A#^k`=a0xZkxUPNWQ za{4zqVQ#K_eR%q_MERq+*D-N+&5_p>``dGyCy1wG*Z53HJzBO_$7@|-9{lk&ylg?j=FDUCusTWZA%4^cS-9;PU z7Id(Ez6z(J)X&Vn#;9fwl<#MG4iegcOS^X-!FA`p27jcxiDdiXN!Rk^d@Xc^ z?kxa6OZA*`*;hFf1VuO{B%7(1y1`W$ctZh8R$`%V7FuO0a3*mlRDO_t{<)-JXEl!C z4Zh-s_|s@-EXkz_N-Sz+Lo9bRe?w8GC2oPgC=0$$ae-srL2%P`m$rL&CI4DtcjFw$ zIePS-bRWDm$%Qr0hg#-rZa1$97+q2M3CvJl9MUk?d6}FV=z$R=(J}`V!yfG>xqfU% zCey@>F}1RLrnGJS{$WmpPsoRg+QctY%z;%ndxY#L}(0gu8t7-lBMaTb>IV49ML`t{+4lfdg}K{N;l0E1E0 zkwcNGBT)(0>EiQf@VF6?G86bG-BqA(#^o1`7I8IM2zaC#k&=J`2{l z-EQK?_QTV}9-o(a8cn`}N+fjQ33<_*yOX2LTBauiqfkC)qO;IPKPnK^%UroZg8=Wk z9=4^u6#>UNm?!vFQ5x<>zSvdh2($tW*)3_l6*loD6QE>qgH6=4EB92jA3SY8mWo^P z7wZqexmZfoc2oK-ZP2DAqQqXM@TOQ*_eNb1NtP!69LgxkXBOxP%FARJ29U|%31ZI% zzNHP2=9Ep+9R~}Q!Jd-MztQiwBuWqjw_JJ zA+5d~f$$+%dyCjr9iDRGGt$GI^JA0PTi?gT+B*>VmU4b=khU^;88S)F+@QP>Qaw2Y zL)?W>`%~*f%weVkCa??;48kzo`7)#MHxvZcG6ZLH2FAFdxStuo@xd4by7oghneUy2 zaDj%={aYT?0Vd^6!;@cIBE|TNPqTwCv>=UJ`1LS94dX8~u$o!Cg46>{pEeQPq2dk< zmbzJ(@28*@?!ndE9bp^t#^r6UQ{>2uS>M!;g`c59;hdKh39zr;v+@cr#j0%R1Th4_ znDOfg8=y)?1v0qLFl2K*C6-7<01MQ4iL>=Ei&I5uFO2in`Yn8>Wez@ZfO&GS7JQWF%|#rp8KMW9ajY=A+wSgQyk-4P2te9Bx!m6dqOOu8uXwSc2T(qW0b z#Ul5`Z~7puQF`et3QQ8CjaxH46}{S{sqOKwjj~I` literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/galvanize.png b/assets/icons/mitigation/galvanize.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4d0c0efe580921343b4f2c9ab11b29ccb97b65 GIT binary patch literal 3962 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 literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/guardian.png b/assets/icons/mitigation/guardian.png new file mode 100644 index 0000000000000000000000000000000000000000..b1acdfe255d6dd67abb08d19fccefa89cae2925d GIT binary patch literal 4884 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 R0a^6HPtLtR^AF^;{{?}h6Bhsg literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/improvised-finish.png b/assets/icons/mitigation/improvised-finish.png new file mode 100644 index 0000000000000000000000000000000000000000..22fcec9b77abf7c624b19c1e6385798b0b30abad GIT binary patch literal 4929 zcmXX~eNbBWn)Y*P>|WRzhwV;FWOipK-dkp(`REn=fZpBSb-PJwx@p107|@LI#-nXIOc@{1RqQV&mIynN9FJ-iRpUT>At>SjNAxxopsix1yP^6ER->EhzOR-JyNv+PcOMZbC zULR`-cJ!nNFXb*jU}3L1A}_I7h)I}=!_~zEabwAGzq7UcPFlGmeYK5a^5yd^HOQF4 z+MjN!;;Ihts5ob4^N`TU;zilQm|kT%Bn&?qwrU^NNMN$MWV=yhutG9$h-xZ=Zj@NIPT5s;i;q zcSdAXr2LL+NEkiXGh2TpHx?>c-U`ld@YXgsw@ZRRz%~Rr87aPfmKXVsH zr|Fv5e2=%sH-182foNU- z75kMc@&)GYNf0?AL#cd=h0kl^qLs+wN|fkKyzQN1hzuRV=)=)&-hd;wIJJ#VJ2-6d z&B-h>F5Ld}myxD!9#P2Gh4WPpIy6O=bJ$i#B+x*f3xroonLf2}M-N?kWWRrK97=hw zcY}2O|8>n0L2>kGi@NG?{2GE+=| zOG8&yvc+t2m4kDZCv*$3Y4^;lb3BE=d99b3MEHVs(a*jC4a1-y&4x=iF=V47p!t$Glm zv-ru+<&N^#S0-GOPC}pjvk&$7TijYSAB#PB9V!d-p&qz9LeGmovWK3PGCNDL{l(`k z0k~PEDK`s>nLlxm6tB^@9KBTOr2!reF@4i+WBl)f$qe@942g|6JGS zh;(Vmzm(!Ds@RXC_b6?2T`~l%e1~7IkFiaH@c}Co-Hp3v@I$--=B%&hxSBt+$r2hH z5}WGvyVYEZVgeZN{wnfZZRG+FGe#AV*nEi`Yga>{PmI!S0m^2^0(sVr1i5<|F{a{K z;br7~hkAw_;SH$WhLjY4GaZL1{Kt>6$`(Ut}%->_gy1$qBj!QK+ok|a5Uu< ztMF%TBu6H*boh|5A}T!10KIb~Y>P6&=uStx3=sZ^(n-22mK>F-!DppH3P_j8&^4dM zraI$Ko#qfATS)0ax0-Tds~l4*-=yiF@LE7tUL8VWy{fsrJ!iP`v(3^pz#+{$?eCtL z7WetRz(tv*W`v&KS=naG^5zT8RkPKz?Q~GokQ?b1QnX~K1Sr^*JS?zxJ*V@0Y=~(J zxmkRjZuvn83@xPqh30u8MR*3Ps0@JI^pGz~VgBfr(`5xl>F3?ZZh34WJpQDzNtR4b z$q84O;bU&r&)2P0lhxc#Th~I4%+b`1ZNXt4KhQS??i8O4KjW0$tEFl!-t&WMx{+DzV6Gk{Rrg85`if| zntd!UYwxvmL_}Ritb0Mu^2|k8n1x@eYzb1Z{YK3-#9tD;WMfV|sr>l+u@Th;CH-*r zaKr7S;BscSMGB^mhz%_bM6udJ#VuWS8G#qExu1SyUE7-3 zU;EK@fp;-u?snR-nt?rharJxpy4#~KeyAHDc81qCy$!J^%Udqm8F7qSUlPu!kMFb+ zexW?eS6}kAMZhXg)s635stj;ut5Jp*_p>cGq`}zLeuP1sLy2K*z)5;4q(QMU^1OjO zO-6|(?+D%4W90zaYArGg9p{YLx;W!56cHIh?(rv?3dCB%BBQ(HNxmsT7+BhstZ;Ev zpQA!B+Wbu#5V_Ub)#_z6gDM7YNT#~o`NBK8ou{DFpcE_TX=Q}JwPj0eggX!!6}NQ( zg1QgXQcV{*g7wX`(N#S-40|dTd#e2c25@pBg+~KbVHl{~s<-(0l=9zPxB6hh^gGi* z?-3d3QKX|E7mcOQMn~k};aoy55o0I+=U{YO*Vv7(=cV`L_i13fz)@w6^2gH@*5fY& zchf+?`@-Zifmfqyq=Ei)^I8mfFtQ-A^_A)B$u~g@Q(nZ_#l*B<0oO{_h!W#crM`nX zv#=LIcVK{pU=A~Zo$02j&$zzh{P6+sZEDeEJ3WQPpUV<)|LPL^a+jwU$`Zlsa`kG5 zb7$xx9k(@kS)!z`0I&IXG%l)i>yYkbRud=GKi{wI6Ozw!gO3|xj+xLo-at|-p&c;Z zk~y>`2^Pp|7O(*GO)JD7gaehUU_gybnUaESiD8<6lLft}C4xc#rA~$yB=%{^?XChe zScE?@I{zU_*OUJy#S7%mt=v;<4>cE*2#z$$3=f1CuGr-sd#CM#8pBg;X952zSLq%s zYVNnP#J4|bJMmri(Oi*B^xnSD%~j_tSwB}EDfaC0-FrTyacdGJm5gdOE=oQ3c~Orv zZkOkm5j#k1+o^Id?+!lFoQ$|z$$_F~3FltzxBGp|`VVR*T|@^w3O$g=E>%ch+PM~G z-x-5g7A(c~0b)S393CRXVTqE7&(#^~xSjN537$ASlfs=L>DD_!W5_v(KgBMvz>JhZ z`AeY)Gk7U)0FLM@A%=w4Xy}I1t4Tz21{?h)%M;U`wk(BJx(B#Xt_DcbyjPj=-{qKY zO!>5HT6uJM%J&$c3X@uZz7%-j`Vl%nr`k}L$r3?r-zraq_qS$ut|b(R9>Brc8) zX--QrO>2<)r1WJ0dTw>-A_okHaSH4SJPt0k-Ql2*iY9gK^q=UBz@~0yXKw6Omxg@l zJOk~jn{?@Ev)yInU+mti&gf88QhPE%rRu1NXtLUHz`XVt9B?3yggH1OycU75Y+bF* zYuW^{YbIHT*dPUW2;=tRwZ}Z~APiw1w-#kIC(aw{-YQrB?8q$tn7W6%;}J&ppgVTe zTwWroRu*Zi2l#VJh>b_$aFwgZX5E>)MAbWX^U3ok<}iwhL5mO#;NF}#y#k^H~H1NW!$d& z>il{CghWDX!L{hYicbcEmnu)i3}yJkjl^a#u{JCXbqb9Fd3&v=ZCwiN|#{d8V=_dS*TmAuT`xbJiL#t4L2SSe3ati2=O94XL{T z%@@WEa#P)8J7=_c>a)oc`YhO|nPxGKYY7Cp`q1b8djUe}&yj%xd0CM(|L2m{xh^wl zH&%A;3*Y7^Nj-V!J2APG-56c7?~{kzhmC@n=z`Gr4n}rJw;q%MyW<(&>|$a_tKjzv zNzd@nb2Vv-JzsBbJ4uVl*Q-i+FrV5PH9$;qwy~@s^e8VO;zk#R*RGw4{7T8KvqzS)BYJHW1e)4G*&d5+^_Yq%>oVK(vYX&OOF%?M1VdA8Q{eqGk7QsmL8q# zRW0a0ETuP?7nJ_7B3L6~G6h#Du+;dy46NQ#qGJIaT9dq=@(t3#)>cotj&~zUTitKJ zvG7_8*{cN5akBb^x?H{I=Gku_&+7v}1oRo=YCrM!6%42+NxgNFf6nu`$P)5_6pvK4 zL zyEwhJgZixIVfu*egMMl=Z}@R^iL#iwcyQm5{39oSt={u)uPyLHi7wl|+vz$u46BYj z>yyEu$Mb5*`lcU~QFw_(Nuza&-a!6H^FH9kY|>CEvvy!l5`6kURi9$P_bJ2OsjRdBAZLNWOr74LwGOWM+$6qh(U4^g4 QQa=3cM<0y+i>Uqo0AGC+eE^Ewzo&r5YVjQMmGj? zt`Gw`XzbRlz0p5*a|J`8cQZ-vy?~N1#t)JJdM!Hpd2O!FcG%IMVA@ggH&jYB)Nt-v z=ibKPz@3--#rnByv?jH38b2K{IO_7<4f&Q}SFmA%CC?Y2KEt?i618v{7OpRcIC`_% zV-%naYa0?OFvp+t;yay**>Q^MigpJK0dlz?wW9DQ+c0U8RwOODs^ZLi^xyyg01_j- zwQQa_fK+s*ctjk*`tFYb$Q@OnJe=`y(R zG225(FJOoth$CLoUOm;$jR%b>?L^n>T7>Z9s@0KBS2iO4lIyG5ZqB1`C&|I)lQG0z zH+Uh%>vuN!p}L5#(yjHUlg5q_0vSnL_S3 z7n8Awndwyl4se&AJWgF2rSIL7*5$=YG`Z#h_t@X3y6$+e=+pJQn4FmFgp}E9N zcZH{zfa%`y>OG)h^5gy*3hcO7NK9Hj_toFBYp|FM8aEs8@U1NS8TF$=U z*-Ehx6RV2+zEFChZAr7vsht zCE|(iOvb_puk&2gHk2zg2Xclf59dUM?qs)24R4T*vjA9@@HU1}jPnTZO!$1RB`j4{ z3aBAK5H%X%iRl}$L$`M>Q)dEOO>VmV@Vj1rpqwZ2<7os z+0fZ@od4X7FEMp5q2X$EZ#XQyNeHe5MF&1xNNEW5*+;Ge3`m@p=V@$OTzxE`qBbrpnxnZdsN>D8PP@hs#+lQP&r0? z=lVi%;3@Jjtob914QY2SnxIV7!o4269^#zRZGQ1f@Uqa$ zPs^J!QSpg{NmG`660xEQyCy0spQP);zz6_2we`{M^+Nhr@5rUpvpuK<@$xhGAEvZy zcPwR$cu7EQRd|#JdZN5N+OH8R3wSaQRfM6w9)4%A3xUD|QlVMUL8u>Me-*N-+EdNM z@(w63%mbnfh=$H+6NTO4lz1x(ve zd$lL+v5ztzEsaL7ZoZfe`~YQlI_;W(%|3bw=pz>GKb|m2o6e7kW*ryk%)A2{q0{Mv zu6Cx3TxFCh;ye!54^}tBGb`$5=^f6utms4fQU*u$$`~bkjb9%rWJSp zcCUDfzxk4nr9D_-=6(<1af^V3V!#aaXkx?E9@Xja5)>Q;p>}YxB{Vg2ThUtsQ{l*E zpv#Z30-E7O342|>phz<&axxw=p*r=U_u|Gd9KoXJtG0rP+H;|Y z*!*-@`Ygs2ze|KXFwrdxp6+RsAs>9p!gcC0-dTrpl6qFwgOACu@D;wV(G}kopPb7~ z98Ek45u;4k4rRgNWW;$LMQ0==^|lP8r>#x&96`(Nkp5`I zxlHvBD}edjUC5CU>Yf`oL(6s!jR6>Xi5r^iyQtHO3TW;MQeFF2sWa(Ivda-~PyENZ zOz_r=_g%YvrAS~OCEEEpYMW#l$sDP>}Acu6Xh769yWV)=!G*E_zn+dv4 zvw6N+^~AF>s60{royPS1jqFCxX5T*7T1V@1ZNB?ia=&Ag+%g;gf(G%(x=D(^8qoDc z;s{I-WGYh^IGsvkP3u|*->1cSD~~t4CRyUXG9YtkqFaa8r)yFX7oLj|&~}U#o)$PZ zJsK^`&PSAiB5$R0`Iy?s&k}r4gnGZj#vq>0?{n=O$V?AR#iGaFqh{(8J)3%3_-4-q ziiRlaOjP77PmV@zy%4x|=+a)-RC60ro=h4;_(}*!tmeZ3ZF=6ZntbJg7QX745tYr) zQh%A-%xwK5xrJ-otL7w@3zhZ@8n&txriyp- z&}X1vPXqYaXQr_N_3ZcvCZJ|SkV6jB$>dq*<%>5?mNsuBo1gvKz-H@-8er|R^XI;1 zx?)jB%f>w*eBI@f#|$6H)e}JOr2m`agL}N@&6fjlQkO{_@QskOT^bcfV*3CD!*nKU zoBeILqjhb+Yv>lCUnrm-O;di$*Bzf<{dDGB^5D_Le25I_vYm!&TiT+9nMI>B!lT`l$Aet!;ChD+ zVZtc@0>)eJFOwYP9XRqQ>ot(iJP=I%ya~Yhp?dZoKf_E4#)CK++v>2%#$FKoK4m}tlsb|O9lc#_wV5?A_Bch@8; z(B}ckf=XeMsam#BF_=r!R~$J!Oct7+f8iobHLJDxK6Py=dBdE2Hb6{=@KcXBuF5Wh zM*83~ReQ0Idz<`PP9N#Hoa^iU%ts;b0}z4~U( zAkHq$y$KGek~Y6GkR3<0r_r^xf1H0MdcL`{9>ftM3P)10T=4@mLZ_Flpb$vi#i5e)R6?`hq0{YeL0-w0b*A^6K zo-i>jZscNew$D()BpBASH<6!VCNlyWW#j_M8EM7q=9?W(jlf6VO4PVY4iB#v;v1KB zdT73Y?vQmD>}QY#M3N%-+1g_%Pbl_;mUOUDBv$yFd@DnrXRkXX%@HyQc8tgZKxiQoJ-W+0p1#WWy-ypA>>DPq6U&r; z1~8v*zko1chiK<6jXv0YUUl`;#-*;i^$(2IIfSpVzOnJ^)NkF>Pb1~&(a!iH=T7(D zXI=d4%T-0`!2=(CBmc9|29KPUKKY*yY_+n{bZm7K`Pa{nWv^{r+g4VHbe3t>PdGjtegC|45u1=fZXgMWDb zgeiWnZJ&6Z+zHt*FqPXF<*_?Q>nP^=m80 zE(EGf`v*A>}M{Jhx* z<*ISTYvR+ORO$7tO-s`n6|Ild3|KymYDNm%2msTbE1v-PGl)2sac-p-ZybP30_`w2 zux4sO4GYN8h!?C(Gpv*Jma8z7z?yldJ9=zm&*Rj^xjq^S+SqPgsX6W8`)XV-1o6A{ znQMG;JE$ViqG~2A%>lv_z!o;RI0F`zApz#ovbnHWwITG>vw$ceHEE6$CXL!{4piCZ zlUhH;D!i@X2;{JxATYhIZViarkXgymrN7Y79|5~)&xI(kKgywJ?J#h#**t_z+B^;H zv-f?%dbW+*Ym+q3G)w?JkB3ES_mr^Tp*;8Og!I}%`HA2W_ zpyfaEpqDh>k#tP9c>~rDo2)cyy9tp}y8a3lccVb~pIzb?K1U7V!>5_&Kt>%7dzRKmG>(OTqZ$SBF0C J|9km`{{^eQTjl@& literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/neutral-sect.png b/assets/icons/mitigation/neutral-sect.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4aa0c5270b79b49f23e6e68e301342f2500c4d GIT binary patch literal 4936 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 Py#I@H?+yJ2?|1(Xvd0tp literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/radiant-aegis.png b/assets/icons/mitigation/radiant-aegis.png new file mode 100644 index 0000000000000000000000000000000000000000..81c3071c2cac84a942314114076bb4f72f70931e GIT binary patch literal 4948 zcmXX~dr(?=nk5>WF+D9?>s|4=ai9Ke{$XX^_h<+u0H+h|35DO-tdQiv>1MN{I4R(E^BMg z7yYNNtXVu-WOyxNK2JT4UNvY%EYxsO%pOD;x|47=i~EzBB6OG^`f{ye^3%0ePixV* zpKBZEn!3)uj{Mp$uzx@%JG+$8X3xOdK+DK+_O=C2^(mMo%kNne>KD`p-iw|LQE4nh z38y7E7beat{f7vfNn(2yiF{embvC}<&V15UFTj%4_T5w4G*d+eQGyIkp7PXCuGvsA zYXfVoD~0ZnWsOIMQ|j@iH&H**r`^rs7K}N?W4423_BP$xOG(>8 zh}X8zqVuaIrmp%9O^McU9Kp)El(YK=u61kf?agI|)`us?P`|?29qWVW*!&iXH;kl~ zOcH^F+AK7& za63d0t-mP~XFti(+UCW#UrjXJFSwS}uhm!!e%bwnh#G^8HJF}_q)tt!WAM&m>)s7G zCQ>74N)GYeQadRix8deUq{6z@!>OAINxGufPr`|9jb{3_G&dTwK2SKd?e@SQ`{v(c6eK9GcsJhi3*U66LFhultWWA z&PABVMpve3lxxh~;NM)+2gifwl}wc|vt55_`nz3Qj@EYXvXNmS7UU2^TA5Rt+ZRq1 zh*N-_P*CWu&+Q49TZ>$x>_g!{-A3)f^VD`&73)(bUn7e{`TVun@2$kNEWN6sgt-su zX7+hq^)}PQ80n*!_s?6O-I68mb|>OtdRvEm%&W#Lsr2`?cxAiBFChKa>@jO(YZ;=Q zRQoG924vWteQhT!(b@iTQ+8AbAj9apfng=~pq+d&u2#KJw_RL3cmEW2)VB~9ENeb0 zlIO=068c2-zzoQhMt2qh>FMsE4?7XaJi%S1Z43SWwVHWSYX2Euvw z-6w>9I>W~=FQ)Fw-o4hC9hGkER&g#(r=M2u7`VuSnq#RB>`rU#Cj!i4i<_NG)RE4* znSLL(TZ@MK0;6jRw9D8b-~tQ5Z1P)_3IU$EA?<#l!z!bU$Kq1v_V}c)PE|l{PCbf; zd9DE+G1cB%K$*7J)!69TOCGP+-;h$echiUO*Plsu?HM9+^P!?BBN}GPGYOu zUYBZ7W=@1dNaIO8+iP?j@$%h_#po#QQYOFGX62G`HtDu*J!DpW|2&A$yGWXT!6u*U zCYb$FgTqXf#WsvtVzZ}B7u;W}-W@!xiYc_jEm`_?GK1tk#!^oESRXpn6O(r-t#rEY zp*0XsS8J}U+_CaX9ESrbzh*CxtFhU9of>MjqwRP0Tt*h6@a#QNQyux8CG+(rI{D~C ze_tV;k>>Qi{FL1QTqS{jg66R5VXNmTp7H%>@Z>_a1xc;c{VGJop5obqTg;oG-0dfW z_Do1`2>kJ>J@xeXu}~UMj?ISFr5pe4JbT;L=RX~3#!6=POClToUGF_vpSk7cDXh)lF?$e+UFJ((hIb!VSxc|5O><<5)XJ<;5$&By=&z#Zj zLl!9f>^@Xdh*MN)nGyB(?W{|c&Ek+bK;P{KEPZLSJ*v+o>Peqfd>sJ*0^i0VrJ(O< z3+7k2wBF{$PuB**U7^jnwH znj5XP{~%btqea7-6+X(bxXQA$B^g#r<`YMd;qb)ij}{_xB2ZrVXwN*>5|&)5n28IK z>wa1G>P(~xS?IZJh&@H#v2HDM1@e-z7HW=t98W09@R-8UX_%brS4#wh>+JmtN{ZK& zqj_`~xtY|fvnh$Z2)gb<=-b_iJF-!JHXOa_=OVq~0Seo#Cx-YLIjCvz=9KM`revRv zLl|m#2?vXHVyS!hm>Ogx`BIp@u$b(}M}m~&3PMkJ?^+iJbyy;=N^j!#L~3lBy%zkq zoq3A5YB<=5YIO9#O7`9?z3L-Fl?$LtQ9uLu)BGXJ{E?9;~ z>xo-|)O2!}pKWeRn*+m#SK4!NC2Egm+nWB}RyQ+LYu~Rup8NhJVM9`Pu8YXELlW>f z2P)aa-m_+cRh?SpT*_{>yN=jNDe0CmZsv?Qb;mxEWL8Zx7sU9-U>lHO{2LjNAL^Id zKj1TdzWXqqs73W6mQ&=>i*QZYe9!?VY3-1FrEItmimkn=#6A|MrjU`KZ{Y;OxRG}R zhUHR#kf9?Cu4G+(O`5kktZl%qeQ~IKvxj469^r1ZVM&&Y%gA+p=9~FF4t`7%uO+`0 zW*%0n-VdFcDBK1(Ta%GM_VQxdk{g{XAV`r-a7{!e^~o~gyt9wrdvv@GYmX$stZW&X zZ|13T{5XpgnIw*vmgF;G_7ax7ha92*g9T<%GOlLLv?y1k_I<%JvkHZATKd97W#BVV z6&~}r-E~Ln?cPo5`HKpjcX8kPMqQD`{bG>(zS#)f`5w4Vn8ip9SiwO)Qj&Lrs)R!5 zE{${-XtD6gn?A#o+FSD~GI5RT)Ot5E!7%+A!3y|pF3#MLg1b_yLMO3{EJMs^eQ-xM z7KEvFh4R)G?&#!YK%gJA>eeC^?HXoPlMv>Be#-16a*zIv_6t6bL?%?RJKCw9g3TUp zh3_ch8GvIAc4985C02b4KO0{g@CWnJc@$-A!qjm8oIAN2&0dXcWImZV4fuq)ZOY@| za8-#WR-UV@rt{`eQP$!a;Mz8qYbcW{rtv7qAoGJ6ck=_}!KTz)SoJ#GH0p0`IFP?G z(yD_(>Vl-m6=LFMs?z9fE^%u4A)aJ@uaECy=EB>wqRfc=gh1sh;H>sX%|Lq@}c z-i;z?MZOz?iu9{G?8>*Ftwjd7&>ZeKm)U>GYrD8ofo6Ls2~WeE8k8xI`i|NMfx;_L z*b+3JNMs;&LuzygEEB=Id`2EQYgUEX_79>O{}u9y&Bp9S26P6QvlJ>^-AwTan}9_) zwNvMo@)}-_Cyo?Oo-?by;tGhotvF%KJh8js(4bR$+~~c|1>dNL|B*qUZGA0N5fI-C zAWkj$jv2kP3gw5lkYW9Izlg2fxn+ znf)4@D67z#B z@UTL#MFS|6%9YZ{M$unNK)1`8Jr21Q$Sj*0;`zdqO3(v~nl&-T4;7C$0%T@}xY{@Nf{SEe zDM-Mcw+iKVTDJ;K@}kZ#%pJK_VY3Oc&|eJ&L?~mvYj+)n3b8aXFa}acnZ+b(s1AG3 z8QN@zmAH&RhrP{WHc|aZ;S8}{p_mW$l2CrGo6;~ql`%h_IXGc!^MDebGIV$=>SkJW zB1hQ;G2+Rz-G=>;49>?D=)~A^c`jbcQbpM^XY1mHlK&$J;46n-Ksd^VQQ%#4rBu=Z z%`-{RL2u{{tRR8yq`nLu zAj5ft*CRWU#q_!qoPIE0CIZb9K&eCkg&Hn&j=)@q#6}dfZ7!(~y5Q%+j&SQrpVm9# z-B}_FL0`gZ%!r3hLE_DgYPH zFM%7!x$}E)u?o{CAwwlZ%z{didIGIT2i0A(Ek$U)d-{`$kt#TWCdxMtks=FF{TzUL9I%isQy)fu$QTdX0}E41=}ODO%U1mEQqRJga`A9Sfd-e zI#__zTgmAI^efOLWU)o3gB$9;_3z#T2|u8EEz4ekMDpN%H6dZ*utEd(CgLJtufJ2i z0txcK-8l{ckx9)BX375~p&MPw5p?BHmDmX01zaKo_r{jp;%kn=yXml>YwrzLfHa7} z|ACSWu)!!k0drO{srFXjz1|AWZ~PjMFo1F>lcdb(?GCc@g9<*?_Us-U2OiF(`hu%- zhtQX;)6Yci=4o(l5+E#QuQal=?uR)C5sAW63+41P0~cnpQ&Ykbi`m<>#si~M1$3l& zf3kpZC`b{@qVabQ7CJ-dn};pMHfBFkfyzAtE%0ceNWl6thai{WtAVBnQzUss?tuqD z@)Acpsn6F6e0V3X7dZJ4Mz5<`suw|YFsTkmnbbh=F7f7K5%XL7r5W<(s6d- zWI;pcMn!!dXwQQv_`RvOP1o4okSkOf8jvdMS$TB;>dmT@E3oUp{DEK`V-GKb`~dfy nGs~x+S-{LH7+_QUpgT3u|DM+UBY0ZI`o)JI{e0r@<)8j966jd- literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/seraphic-veil.png b/assets/icons/mitigation/seraphic-veil.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e757edaefba4de29de6c5f8feca7eba5541bc8 GIT binary patch literal 4361 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 K1OFoY{Qm&shk+ab literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/tempera-grassa.png b/assets/icons/mitigation/tempera-grassa.png new file mode 100644 index 0000000000000000000000000000000000000000..29ab8e6904cc78168ddf56edf22dcbdb22ca35b2 GIT binary patch literal 5167 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 literal 0 HcmV?d00001 diff --git a/assets/icons/mitigation/the-spire.png b/assets/icons/mitigation/the-spire.png new file mode 100644 index 0000000000000000000000000000000000000000..569542c5c603a495a4d07445ba586aa58c1eb453 GIT binary patch literal 4798 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%0Ac&wxu6PMgS$;U0O3tt^+OMBZ#gi~JYO=P5 zsvdSWZsn4C!U8^;(y3-(xQvVZz zB0?#`PQXO;EF-@8g*X3=#kzC7Y-y4%fw=>X6Sk?#qjXK)@7O7M54!zruZ*+N@H3 zF~g;M2{qxz<@c?+%&X$*psQ@TM0Gf)M&Abhnm%!CX~BVA?b!vBTr8=8GJ91kZnuAp z4R}^2LHEE3#tGq3I1 z@0Y*#q#(Nky!^)3O(g#Q7Q{+)XoQMurRpBvG0%gKod;F*WI5T`hpo=Pefzz->0m$5 z=5?8hSH#433tRKSe7x}fWbTau#+A7n(y!_09{+rar_C{xdL|LcFnRW%J~x2LLaX)u z0KWdTkkDOU0fvTqp5&vuF=nPhckgL?wx3Xqx0<#N(NXp=krjCcMkrQ#RTfY-uK-m7 zZnkl9pqY(Rv#p0U{djOqLlP&A-29Wg%b1275FN}p`6R8}*-B$s3Rm2h`_Qra>=?Ci zU^6;PPrnw3;j`B`Ba&1B5@u~jUmSB%98`NwfDc9*aLWVkfUJ0c=pHaT { const hpBar = (t.maxHp > 0) ? (() => { - const afterPct = t.hp / t.maxHp * 100; - const damagePct = t.amount / t.maxHp * 100; - const hpColor = afterPct > 50 ? 'var(--green)' : afterPct > 25 ? '#e8a020' : 'var(--red)'; - return `
+ const afterPct = t.hp / t.maxHp * 100; + const damagePct = t.amount / t.maxHp * 100; + const hpColor = afterPct > 50 ? 'var(--green)' : afterPct > 25 ? '#e8a020' : 'var(--red)'; + const missingBefore = Math.max(0, t.maxHp - t.hp - t.amount); + const fmt = n => n.toLocaleString(); + const hpPct = (t.hp / t.maxHp * 100).toFixed(1); + const missingPct = (missingBefore / t.maxHp * 100).toFixed(1); + const tooltip = `MaxHP: ${fmt(t.maxHp)}\nCurrentHP: ${fmt(t.hp)}\nHP-%: ${hpPct}%\nMissingBefore: ${fmt(missingBefore)}\nMissing-%: ${missingPct}%`; + return `
`; @@ -351,10 +378,11 @@ const currentMitigNames = new Set((t.mitigations ?? []).map(m => m.name)); const refTarget = refEv?.targets?.find(rt => rt.name === t.name); const missingMitigs = refTarget - ? (refTarget.mitigations ?? []).filter(m => m.buffType !== 'debuff' && !currentMitigNames.has(m.name)) + ? (refTarget.mitigations ?? []).filter(m => m.buffType === 'buff' && !currentMitigNames.has(m.name)) : []; - const mitigIcons = (t.mitigations ?? []).filter(m => m.buffType !== 'debuff').map(m => { + // DR buff icons (shown below player box) + const mitigIcons = (t.mitigations ?? []).filter(m => m.buffType === 'buff').map(m => { const iconSrc = MITIG_ICONS[m.name]; if (!iconSrc) return ''; const dr = m.dr > 0 ? ` −${m.dr}%` : ''; @@ -367,6 +395,17 @@ return `${m.name}`; }).join(''); + // Shield tooltip on absorbed value + const activeShields = (t.mitigations ?? []).filter(m => m.buffType === 'shield'); + const missingShields = refTarget + ? (refTarget.mitigations ?? []).filter(m => m.buffType === 'shield' && !currentMitigNames.has(m.name)) + : []; + const shieldLines = [ + ...activeShields.map(s => s.name), + ...missingShields.map(s => `[fehlt: ${s.name}]`), + ]; + const shieldTitle = shieldLines.length ? shieldLines.join('\n') : null; + const dead = t.hp === 0 && t.maxHp > 0; return ` @@ -379,7 +418,7 @@
${t.name} - ${fmtDmg(t.amount)}${t.absorbed > 0 ? ` +${fmtDmg(t.absorbed)}` : ''} + ${fmtDmg(t.amount)}${t.absorbed > 0 ? ` +${fmtDmg(t.absorbed)}` : ''}
${hpBar}
@@ -418,7 +457,7 @@ ? `${diff > 0 ? '+' : '-'}${fmtDmg(Math.abs(diff))}` : ''; - const refMitigIcons = (t.mitigations ?? []).filter(m => m.buffType !== 'debuff').map(m => { + const refMitigIcons = (t.mitigations ?? []).filter(m => m.buffType === 'buff').map(m => { const iconSrc = MITIG_ICONS[m.name]; if (!iconSrc) return ''; const dr = m.dr > 0 ? ` −${m.dr}%` : ''; diff --git a/js/app.js b/js/app.js index 56963ad..5dde654 100644 --- a/js/app.js +++ b/js/app.js @@ -14,6 +14,12 @@ document.addEventListener('DOMContentLoaded', () => { let allFights = []; + const codeInput = form.elements['report_code']; + codeInput.addEventListener('input', () => { + const match = codeInput.value.match(/fflogs\.com\/reports\/([A-Za-z0-9]+)/); + if (match) codeInput.value = match[1]; + }); + function formatDuration(ms) { const min = Math.floor(ms / 60000); const sec = String(Math.floor((ms % 60000) / 1000)).padStart(2, '0'); diff --git a/templates/report-form.php b/templates/report-form.php index e6a9711..abb662c 100644 --- a/templates/report-form.php +++ b/templates/report-form.php @@ -7,7 +7,7 @@