PageSourceSearch

https://everaftergames.com/assets/screens1.de9f6474.js

js everaftergames.com collected 2026-10-04 01:54:10 UTC 22,968 bytes, 794 lines download raw bytes

1(function () {
2const {
3  useState,
4  useEffect,
5  useRef
6} = React;
7function TopBar({
8  go,
9  cartCount = 0
10}) {
11  return React.createElement("div", {
12    className: "top-actions-float"
13  }, React.createElement("button", {
14    className: "icon-btn",
15    "aria-label": "Search",
16    onClick: () => go("search")
17  }, React.createElement(Icon.search, null)), React.createElement("button", {
18    className: "icon-btn",
19    "aria-label": "Notifications",
20    style: {
21      position: "relative"
22    },
23    onClick: () => go("notifications")
24  }, React.createElement(Icon.bell, null), React.createElement("span", {
25    style: {
26      position: "absolute",
27      top: 7,
28      right: 8,
29      width: 7,
30      height: 7,
31      borderRadius: "50%",
32      background: "var(--crimson-hi)",
33      boxShadow: "0 0 6px var(--crimson-glow)"
34    }
35  })), React.createElement("button", {
36    className: "icon-btn",
37    "aria-label": "Cart",
38    onClick: () => go("cart"),
39    style: {
40      position: "relative"
41    }
42  }, React.createElement(Icon.cart, null), cartCount > 0 && React.createElement("span", {
43    style: {
44      position: "absolute",
45      top: -2,
46      right: -2,
47      minWidth: 16,
48      height: 16,
49      padding: "0 4px",
50      borderRadius: 8,
51      background: "var(--crimson)",
52      color: "#fff",
53      fontSize: 9,
54      fontWeight: 700,
55      display: "inline-flex",
56      alignItems: "center",
57      justifyContent: "center",
58      border: "2px solid var(--bg-1)"
59    }
60  }, cartCount)));
61}
62function GameBuyPanel({
63  game,
64  platform
65}) {
66  const g = game;
67  const wallet = window.EAGWallet;
68  const [, bump] = useState(0);
69  const [busy, setBusy] = useState("");
70  const [err, setErr] = useState("");
71  const [ready, setReady] = useState(false);
72  const signedIn = !!(window.EAGAuth && window.EAGAuth.current && window.EAGAuth.current());
73  useEffect(() => {
74    let live = true;
75    if (wallet && signedIn) {
76      wallet.load(true).then(() => {
77        if (live) {
78          setReady(true);
79          bump(v => v + 1);
80        }
81      });
82    } else {
83      setReady(true);
84    }
85    const onChange = () => {
86      if (live) bump(v => v + 1);
87    };
88    window.addEventListener("eag-wallet-changed", onChange);
89    return () => {
90      live = false;
91      window.removeEventListener("eag-wallet-changed", onChange);
92    };
93  }, [g && g.id, signedIn]);
94  const priceLC = Number(g && g.priceLC) || 0;
95  const isPaid = priceLC > 0;
96  const owned = !!(wallet && g && g.id && wallet.owns(g.id));
97  const balance = wallet ? wallet.balance() : 0;
98  const adFree = !!(wallet && wallet.adFree());
99  const playLabel = platform === "browser" ? "PLAY NOW" : "INSTALL";
100  async function doBuy() {
101    setErr("");
102    setBusy("buy");
103    try {
104      await wallet.buyGame(g.id);
105      if (window.EAGToast) window.EAGToast(g.title + " unlocked");
106      window.dispatchEvent(new Event("eag-wallet-changed"));
107    } catch (e) {
108      setErr(e && e.message || "Purchase failed.");
109    } finally {
110      setBusy("");
111    }
112  }
113  async function doAdFree() {
114    setErr("");
115    setBusy("adfree");
116    try {
117      await wallet.removeAds();
118      if (window.EAGToast) window.EAGToast("Ads removed across Ever After Games");
119      window.dispatchEvent(new Event("eag-wallet-changed"));
120    } catch (e) {
121      setErr(e && e.message || "Could not remove ads.");
122    } finally {
123      setBusy("");
124    }
125  }
126  const balanceChip = signedIn ? React.createElement("span", {
127    className: "chip",
128    style: {
129      fontSize: 10,
130      padding: "5px 10px",
131      color: "var(--gold)"
132    }
133  }, ready ? balance.toLocaleString() : "…", " LC") : null;
134  const isTester = !!(window.eagIsBetaTester && window.eagIsBetaTester());
135  if (g && g.beta && !isTester) {
136    return React.createElement("div", null, React.createElement("button", {
137      className: "btn btn-primary",
138      style: {
139        width: "100%",
140        padding: "16px 18px",
141        fontSize: 13
142      },
143      onClick: () => window.playGame(g)
144    }, React.createElement(Icon.play, {
145      style: {
146        width: 12,
147        height: 12,
148        fill: "#fff"
149      }
150    }), "JOIN THE BETA"), React.createElement("div", {
151      className: "meta",
152      style: {
153        fontSize: 11,
154        marginTop: 8,
155        textAlign: "center"
156      }
157    }, "In testing with a small group. Pop your email in to be first to play."));
158  }
159  if (isPaid && !owned && signedIn) {
160    const canAfford = balance >= priceLC;
161    return React.createElement("div", null, React.createElement("div", {
162      className: "row",
163      style: {
164        gap: 8
165      }
166    }, React.createElement("button", {
167      className: "btn btn-primary",
168      disabled: busy === "buy" || !canAfford,
169      style: {
170        flex: 1,
171        padding: "16px 18px",
172        fontSize: 13,
173        opacity: busy === "buy" || !canAfford ? 0.7 : 1
174      },
175      onClick: doBuy
176    }, busy === "buy" ? "PROCESSING…" : `BUY WITH LITCOIN · ${priceLC} LC`), React.createElement("button", {
177      className: "btn btn-ghost",
178      style: {
179        padding: "16px 14px"
180      },
181      onClick: () => window.EAGToast && window.EAGToast("Saved to your list")
182    }, React.createElement(Icon.bookmark, {
183      style: {
184        width: 14,
185        height: 14
186      }
187    }))), React.createElement("div", {
188      className: "row",
189      style: {
190        gap: 8,
191        marginTop: 8,
192        justifyContent: "space-between"
193      }
194    }, React.createElement("span", {
195      className: "meta",
196      style: {
197        fontSize: 11
198      }
199    }, "Your balance ", balanceChip), React.createElement("a", {
200      href: "https://buylitcoins.com",
201      target: "_blank",
202      rel: "noopener noreferrer",
203      style: {
204        fontSize: 11,
205        color: "var(--gold)",
206        fontWeight: 700,
207        textDecoration: "none"
208      }
209    }, "Top up")), !canAfford && React.createElement("div", {
210      className: "meta",
211      style: {
212        fontSize: 11,
213        marginTop: 6,
214        color: "var(--away)"
215      }
216    }, "You need ", priceLC - balance, " more LC. ", React.createElement("a", {
217      href: "https://buylitcoins.com",
218      target: "_blank",
219      rel: "noopener noreferrer",
220      style: {
221        color: "var(--gold)"
222      }
223    }, "Buy LitCoins"), "."), err && React.createElement("div", {
224      style: {
225        marginTop: 8,
226        fontSize: 11.5,
227        color: "var(--crimson-hi)"
228      }
229    }, err));
230  }
231  if (isPaid && !owned && !signedIn) {
232    return React.createElement("div", null, React.createElement("button", {
233      className: "btn btn-primary",
234      style: {
235        width: "100%",
236        padding: "16px 18px",
237        fontSize: 13
238      },
239      onClick: () => {
240        if (window.EAGShowBetaGate) {}
241        window.playGame(g);
242      }
243    }, `BUY WITH LITCOIN · ${priceLC} LC`), React.createElement("div", {
244      className: "meta",
245      style: {
246        fontSize: 11,
247        marginTop: 8,
248        textAlign: "center"
249      }
250    }, "Sign in to buy with your Ever After LitCoin wallet."));
251  }
252  return React.createElement("div", null, React.createElement("div", {
253    className: "row",
254    style: {
255      gap: 8
256    }
257  }, React.createElement("button", {
258    className: "btn btn-primary",
259    style: {
260      flex: 1,
261      padding: "16px 18px",
262      fontSize: 13
263    },
264    onClick: () => window.playGame(g)
265  }, React.createElement(Icon.play, {
266    style: {
267      width: 12,
268      height: 12,
269      fill: "#fff"
270    }
271  }), owned ? "PLAY · OWNED" : playLabel), React.createElement("button", {
272    className: "btn btn-ghost",
273    style: {
274      padding: "16px 14px"
275    },
276    onClick: () => window.EAGToast && window.EAGToast("Saved to your list")
277  }, React.createElement(Icon.bookmark, {
278    style: {
279      width: 14,
280      height: 14
281    }
282  }))), !isPaid && signedIn && !adFree && React.createElement("div", {
283    className: "row",
284    style: {
285      gap: 8,
286      marginTop: 8,
287      justifyContent: "space-between",
288      alignItems: "center"
289    }
290  }, React.createElement("span", {
291    className: "meta",
292    style: {
293      fontSize: 11
294    }
295  }, "Free to play, with ads ", balanceChip), React.createElement("button", {
296    className: "btn btn-outline",
297    disabled: busy === "adfree",
298    style: {
299      padding: "8px 12px",
300      fontSize: 10,
301      opacity: busy === "adfree" ? 0.7 : 1
302    },
303    onClick: doAdFree
304  }, busy === "adfree" ? "…" : "REMOVE ADS · 199 LC")), !isPaid && signedIn && adFree && React.createElement("div", {
305    className: "meta",
306    style: {
307      fontSize: 11,
308      marginTop: 8,
309      color: "var(--online)"
310    }
311  }, "Ad-free across Ever After Games."), err && React.createElement("div", {
312    style: {
313      marginTop: 8,
314      fontSize: 11.5,
315      color: "var(--crimson-hi)"
316    }
317  }, err));
318}
319function GameDetailScreen({
320  go,
321  params,
322  cartCount
323}) {
324  const g = getGame(params.id) || GAMES[0];
325  const platform = g.platforms[0];
326  const willowAccess = window.useWillowAccess ? window.useWillowAccess(!!g.willowBeta) : null;
327  const willowLocked = !!g.willowBeta && !(willowAccess && willowAccess.beta);
328  return React.createElement("div", {
329    className: "screen-in",
330    "data-screen-label": "Game Detail"
331  }, React.createElement("div", {
332    className: "sub-header"
333  }, React.createElement("button", {
334    className: "icon-btn",
335    onClick: () => go("back")
336  }, React.createElement(Icon.back, null)), React.createElement("div", {
337    className: "row",
338    style: {
339      gap: 8
340    }
341  }, React.createElement("button", {
342    className: "icon-btn",
343    onClick: () => window.EAGToast && window.EAGToast("Saved to your list")
344  }, React.createElement(Icon.bookmark, null)), React.createElement("button", {
345    className: "icon-btn",
346    onClick: () => window.eagShare(g.title)
347  }, React.createElement(Icon.share, null)))), React.createElement("div", {
348    className: `detail-hero${g.cover ? " detail-hero-cover" : ""}`
349  }, React.createElement(KeyArt, {
350    variant: g.art,
351    img: g.cover
352  }), g.cover && React.createElement("span", {
353    style: {
354      position: "absolute",
355      width: 1,
356      height: 1,
357      padding: 0,
358      margin: -1,
359      overflow: "hidden",
360      clip: "rect(0, 0, 0, 0)",
361      whiteSpace: "nowrap",
362      border: 0
363    }
364  }, g.title.toUpperCase()), !g.cover && React.createElement(React.Fragment, null, React.createElement("div", {
365    className: "top-grad"
366  }), React.createElement("div", {
367    className: "grad"
368  }), React.createElement("div", {
369    style: {
370      position: "absolute",
371      inset: 0,
372      padding: "18px 20px 24px",
373      display: "flex",
374      flexDirection: "column",
375      justifyContent: "flex-end",
376      zIndex: 3
377    }
378  }, g.original && React.createElement("span", {
379    className: "badge badge-gold",
380    style: {
381      alignSelf: "flex-start",
382      marginBottom: 6
383    }
384  }, "EAG \xB7 ORIGINAL"), React.createElement("div", {
385    className: "h-display",
386    style: {
387      fontSize: 28,
388      lineHeight: 1.0,
389      letterSpacing: "0.04em",
390      maxWidth: 300
391    }
392  }, g.title.toUpperCase()), React.createElement("div", {
393    style: {
394      color: "var(--ink-2)",
395      fontSize: 13,
396      marginTop: 6,
397      fontStyle: "italic",
398      fontFamily: "var(--f-display)"
399    }
400  }, "\"", g.tagline, "\""), React.createElement("div", {
401    className: "row",
402    style: {
403      marginTop: 12,
404      gap: 10,
405      flexWrap: "wrap"
406    }
407  }, React.createElement("span", {
408    style: {
409      fontSize: 11,
410      color: "var(--ink-3)"
411    }
412  }, g.genre), g.age && React.createElement(React.Fragment, null, React.createElement("span", {
413    className: "meta",
414    style: {
415      opacity: 0.5
416    }
417  }, "\xB7"), React.createElement("span", {
418    style: {
419      fontSize: 11,
420      color: "var(--ink-3)"
421    }
422  }, "Ages ", g.age)))))), React.createElement("div", {
423    style: {
424      padding: "14px 20px 6px"
425    }
426  }, g.willowBeta && window.WillowBetaPanel ? React.createElement(WillowBetaPanel, {
427    game: g,
428    go: go
429  }) : React.createElement(GameBuyPanel, {
430    game: g,
431    platform: platform
432  }), React.createElement("div", {
433    className: "row",
434    style: {
435      gap: 6,
436      marginTop: 10
437    }
438  }, g.platforms.map(p => React.createElement("span", {
439    key: p,
440    className: "chip",
441    style: {
442      fontSize: 10,
443      padding: "5px 10px"
444    }
445  }, p === "browser" ? "BROWSER" : p === "desktop" ? "WINDOWS" : "MOBILE")), React.createElement("span", {
446    className: "chip",
447    style: {
448      fontSize: 10,
449      padding: "5px 10px"
450    }
451  }, g.genre), g.size && React.createElement("span", {
452    className: "chip",
453    style: {
454      fontSize: 10,
455      padding: "5px 10px"
456    }
457  }, g.size))), willowLocked && React.createElement("div", {
458    className: "meta",
459    style: {
460      padding: "16px 20px 24px",
461      fontSize: 12,
462      lineHeight: 1.6
463    }
464  }, "Willow is in closed beta. The full page, story details and downloads unlock for approved testers."), !willowLocked && React.createElement(React.Fragment, null, React.createElement("div", {
465    className: "row",
466    style: {
467      padding: "14px 20px",
468      gap: 10,
469      borderBottom: "1px solid var(--line-1)",
470      marginTop: 10
471    }
472  }, React.createElement("div", {
473    style: {
474      width: 36,
475      height: 36,
476      borderRadius: 6,
477      background: "linear-gradient(135deg, var(--bg-3), var(--bg-4))",
478      border: "1px solid var(--line-2)",
479      display: "flex",
480      alignItems: "center",
481      justifyContent: "center"
482    }
483  }, React.createElement(BrandMark, {
484    size: 18
485  })), React.createElement("div", {
486    className: "col",
487    style: {
488      flex: 1
489    }
490  }, React.createElement("div", {
491    style: {
492      fontSize: 12,
493      color: "var(--ink-1)",
494      fontWeight: 600
495    }
496  }, g.studio), React.createElement("div", {
497    className: "meta",
498    style: {
499      fontSize: 10
500    }
501  }, g.original ? "Made by Ever After Games" : "Third-party studio"))), g.fromLitFic && React.createElement("div", {
502    style: {
503      padding: "16px 20px 0"
504    }
505  }, React.createElement("div", {
506    style: {
507      padding: 16,
508      borderRadius: 10,
509      background: "var(--bg-2)",
510      border: "1px solid var(--gold-dim)"
511    }
512  }, React.createElement("div", {
513    className: "h-section",
514    style: {
515      marginBottom: 8,
516      color: "var(--gold)"
517    }
518  }, React.createElement("span", {
519    className: "ornament",
520    style: {
521      background: "linear-gradient(90deg, transparent, var(--gold))"
522    }
523  }), "From LitFic"), React.createElement("div", {
524    className: "body-text",
525    style: {
526      textWrap: "pretty"
527    }
528  }, "This game is an adaptation of \u201C", g.fromLitFic.story, "\u201D, a short story from ", g.fromLitFic.series, " on LitFic, our webnovel site. Read the story it came from, then play it."), React.createElement("a", {
529    className: "btn btn-gold",
530    href: g.fromLitFic.url,
531    target: "_blank",
532    rel: "noopener noreferrer",
533    style: {
534      marginTop: 12,
535      display: "inline-flex"
536    }
537  }, "Read the original story on LitFic"))), React.createElement("div", {
538    style: {
539      padding: "16px 20px"
540    }
541  }, React.createElement("div", {
542    className: "h-section",
543    style: {
544      marginBottom: 8
545    }
546  }, React.createElement("span", {
547    className: "ornament"
548  }), "About"), React.createElement("div", {
549    className: "body-text",
550    style: {
551      textWrap: "pretty"
552    }
553  }, g.desc), React.createElement("div", {
554    className: "row",
555    style: {
556      flexWrap: "wrap",
557      gap: 6,
558      marginTop: 12
559    }
560  }, g.tags.map(t => React.createElement("span", {
561    key: t,
562    style: {
563      padding: "4px 8px",
564      fontSize: 10,
565      color: "var(--ink-3)",
566      border: "1px solid var(--line-1)",
567      borderRadius: 3,
568      letterSpacing: "0.06em"
569    }
570  }, t)))), g.id === "dock-nine" && React.createElement("div", {
571    style: {
572      padding: "6px 20px 22px"
573    }
574  }, React.createElement("a", {
575    className: "btn btn-outline",
576    href: "/dock-nine-radio/",
577    style: {
578      width: "100%",
579      justifyContent: "center",
580      gap: 10,
581      padding: "15px 18px",
582      borderColor: "var(--gold-dim)",
583      background: "linear-gradient(135deg, rgba(71,236,226,0.10), rgba(194,56,74,0.10))",
584      color: "var(--ink-1)"
585    }
586  }, React.createElement("span", {
587    style: {
588      color: "var(--gold)",
589      fontSize: 10,
590      letterSpacing: "0.14em"
591    }
592  }, "D9 09.9"), React.createElement("span", null, "LISTEN TO DOCK NINE RADIO"))), (() => {
593    const ach = window.GAME_ACHIEVEMENTS && window.GAME_ACHIEVEMENTS[g.id] || [];
594    if (!ach.length) return null;
595    const unlocked = window.unlockedAchievements ? window.unlockedAchievements(g.id) : {};
596    const got = ach.filter(a => unlocked[a.id]).length;
597    return React.createElement(React.Fragment, null, React.createElement("div", {
598      className: "section-head"
599    }, React.createElement("div", {
600      className: "h-section"
601    }, React.createElement("span", {
602      className: "ornament"
603    }), "Achievements"), React.createElement("span", {
604      className: "right"
605    }, got, " / ", ach.length)), React.createElement("div", {
606      style: {
607        padding: "0 20px",
608        display: "flex",
609        flexDirection: "column",
610        gap: 8
611      }
612    }, ach.map(a => {
613      const isUnlocked = !!unlocked[a.id];
614      return React.createElement("div", {
615        key: a.id,
616        className: "row",
617        style: {
618          gap: 12,
619          padding: 12,
620          background: "var(--bg-2)",
621          border: "1px solid var(--line-1)",
622          borderRadius: 8,
623          opacity: isUnlocked ? 1 : 0.6
624        }
625      }, React.createElement("div", {
626        style: {
627          width: 40,
628          height: 40,
629          borderRadius: 6,
630          flexShrink: 0,
631          background: isUnlocked ? `linear-gradient(135deg, ${window.rarityColor(a.rarity)}40, ${window.rarityColor(a.rarity)}15)` : "var(--bg-3)",
632          border: `1px solid ${isUnlocked ? window.rarityColor(a.rarity) : "var(--line-2)"}`,
633          display: "flex",
634          alignItems: "center",
635          justifyContent: "center",
636          color: window.rarityColor(a.rarity)
637        }
638      }, isUnlocked ? React.createElement(Icon.trophy, {
639        style: {
640          width: 18,
641          height: 18
642        }
643      }) : React.createElement(Icon.lock, {
644        style: {
645          width: 14,
646          height: 14,
647          color: "var(--ink-4)"
648        }
649      })), React.createElement("div", {
650        className: "col",
651        style: {
652          flex: 1
653        }
654      }, React.createElement("div", {
655        className: "row",
656        style: {
657          gap: 6
658        }
659      }, React.createElement("div", {
660        style: {
661          fontFamily: "var(--f-display)",
662          fontSize: 12,
663          color: "var(--ink-1)",
664          letterSpacing: "0.04em",
665          textTransform: "uppercase"
666        }
667      }, a.title), React.createElement("span", {
668        style: {
669          fontSize: 8,
670          letterSpacing: "0.16em",
671          fontWeight: 700,
672          textTransform: "uppercase",
673          color: window.rarityColor(a.rarity)
674        }
675      }, a.rarity)), React.createElement("div", {
676        className: "meta",
677        style: {
678          fontSize: 11,
679          marginTop: 2
680        }
681      }, a.desc)), React.createElement("div", {
682        className: "meta",
683        style: {
684          fontSize: 10,
685          textAlign: "right",
686          color: isUnlocked ? window.rarityColor(a.rarity) : "var(--ink-4)"
687        }
688      }, isUnlocked ? "Unlocked" : "Locked"));
689    }
689)));
690  })(), window.GAME_TIE_INS[g.id] && window.GAME_TIE_INS[g.id].length > 0 && React.createElement(React.Fragment, null, React.createElement("div", {
691    className: "section-head"
692  }, React.createElement("div", {
693    className: "h-section",
694    style: {
695      color: "var(--gold)"
696    }
697  }, React.createElement("span", {
698    className: "ornament",
699    style: {
700      background: "linear-gradient(90deg, transparent, var(--gold))"
701    }
702  }), "From the World of ", g.title.split(" ").slice(-2).join(" "))), React.createElement("div", {
703    className: "meta",
704    style: {
705      padding: "0 20px 8px",
706      fontSize: 11
707    }
708  }, "Tabletop editions, novels, art books and lore from the same realm."), React.createElement("div", {
709    className: "h-scroll",
710    style: {
711      paddingBottom: 24
712    }
713  }, window.GAME_TIE_INS[g.id].map(pid => {
714    const tp = window.getProduct(pid);
715    if (!tp) return null;
716    const isBook = tp.kind === "book";
717    const isBoardGame = tp.category === "Board Games";
718    const kindLabel = isBook ? tp.title.toLowerCase().includes("novel") || tp.title.toLowerCase().includes("ashfall") || tp.title.toLowerCase().includes("bloodmoon") ? "NOVEL" : tp.title.toLowerCase().includes("art of") ? "ART BOOK" : "LORE BOOK" : isBoardGame ? "TABLETOP EDITION" : "MERCH";
719    return React.createElement("div", {
720      key: pid,
721      className: "tap",
722      style: {
723        flex: "0 0 160px"
724      },
725      onClick: () => go("product", {
726        id: pid
727      })
728    }, React.createElement("div", {
729      style: {
730        height: 200,
731        borderRadius: 8,
732        overflow: "hidden",
733        border: "1px solid var(--line-1)",
734        position: "relative"
735      }
736    }, React.createElement(KeyArt, {
737      variant: tp.art,
738      img: tp.image
739    }), React.createElement("div", {
740      style: {
741        position: "absolute",
742        top: 8,
743        left: 8
744      }
745    }, React.createElement("span", {
746      className: "badge",
747      style: {
748        fontSize: 8,
749        color: isBoardGame ? "var(--crimson-hi)" : "var(--gold)",
750        background: isBoardGame ? "rgba(194,56,74,0.18)" : "rgba(200,162,75,0.14)",
751        border: `1px solid ${isBoardGame ? "var(--crimson-dim)" : "var(--gold-dim)"}`
752      }
753    }, kindLabel))), React.createElement("div", {
754      style: {
755        fontFamily: "var(--f-display)",
756        fontSize: 11,
757        color: "var(--ink-1)",
758        marginTop: 8,
759        letterSpacing: "0.04em",
760        textTransform: "uppercase",
761        lineHeight: 1.25,
762        display: "-webkit-box",
763        WebkitLineClamp: 2,
764        WebkitBoxOrient: "vertical",
765        overflow: "hidden",
766        minHeight: 28
767      }
768    }, tp.title), React.createElement("div", {
769      className: "row",
770      style: {
771        marginTop: 4,
772        justifyContent: "space-between"
773      }
774    }, React.createElement("span", {
775      style: {
776        fontFamily: "var(--f-display)",
777        fontSize: 13,
778        color: "var(--ink-0)"
779      }
780    }, "\xA3", tp.price.toFixed(2)), React.createElement("span", {
781      style: {
782        fontSize: 9,
783        color: tp.stock === "in" ? "var(--online)" : "var(--away)",
784        fontWeight: 700,
785        letterSpacing: "0.1em"
786      }
787    }, tp.stock === "in" ? "IN STOCK" : "LOW")));
788  })))));
789}
790Object.assign(window, {
791  GameDetailScreen,
792  TopBar
793});
794})();

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.