@oddsmith/ui 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.eleventy.cjs +14 -0
  2. package/LICENSE +28 -0
  3. package/README.md +118 -0
  4. package/custom-elements.json +1539 -0
  5. package/docs/_README/index.html +4 -0
  6. package/docs/api/index.html +2100 -0
  7. package/docs/components.bundle.js +1669 -0
  8. package/docs/components.bundle.js.map +1 -0
  9. package/docs/docs.css +162 -0
  10. package/docs/examples/index.html +56 -0
  11. package/docs/index.html +53 -0
  12. package/docs/install/index.html +45 -0
  13. package/docs/prism-okaidia.css +123 -0
  14. package/docs-src/.nojekyll +0 -0
  15. package/docs-src/_README.md +7 -0
  16. package/docs-src/_data/api.11tydata.js +8 -0
  17. package/docs-src/_includes/example.11ty.js +35 -0
  18. package/docs-src/_includes/footer.11ty.js +6 -0
  19. package/docs-src/_includes/header.11ty.js +7 -0
  20. package/docs-src/_includes/nav.11ty.js +11 -0
  21. package/docs-src/_includes/page.11ty.js +32 -0
  22. package/docs-src/_includes/relative-path.cjs +9 -0
  23. package/docs-src/api.11ty.js +85 -0
  24. package/docs-src/bundle.ts +9 -0
  25. package/docs-src/docs.css +162 -0
  26. package/docs-src/examples/index.md +15 -0
  27. package/docs-src/index.md +39 -0
  28. package/docs-src/install.md +28 -0
  29. package/docs-src/package.json +3 -0
  30. package/index.html +19 -0
  31. package/karma.conf.cjs +24 -0
  32. package/main.css +210 -0
  33. package/main.ts +124 -0
  34. package/package.json +86 -0
  35. package/previews/casino.ts +12 -0
  36. package/previews/catalog.ts +94 -0
  37. package/previews/leaderboard-v1.ts +12 -0
  38. package/previews/leaderboard-v2.ts +17 -0
  39. package/previews/sample-data.ts +101 -0
  40. package/previews/sf-leaderboard.ts +100 -0
  41. package/previews/sf-live-feed.ts +15 -0
  42. package/previews/streaks.ts +40 -0
  43. package/previews/types.ts +18 -0
  44. package/src/components/README.md +16 -0
  45. package/src/components/casino-leaderboard/casino-leaderboard.html +80 -0
  46. package/src/components/casino-leaderboard/casino-leaderboard.scss +585 -0
  47. package/src/components/casino-leaderboard/casino-leaderboard.ts +136 -0
  48. package/src/components/casino-leaderboard/data.ts +111 -0
  49. package/src/components/casino-leaderboard/index.ts +5 -0
  50. package/src/components/casino-leaderboard/todo.txt +2 -0
  51. package/src/components/casino-leaderboard/types.ts +19 -0
  52. package/src/components/leaderboard/components/leaderboard.ts +373 -0
  53. package/src/components/leaderboard/components/player-card.ts +342 -0
  54. package/src/components/leaderboard/components/ui.ts +452 -0
  55. package/src/components/leaderboard/data.ts +152 -0
  56. package/src/components/leaderboard/index.ts +2 -0
  57. package/src/components/leaderboard/main.ts +42 -0
  58. package/src/components/leaderboard/styles.ts +67 -0
  59. package/src/components/leaderboard/types.ts +28 -0
  60. package/src/components/leaderboard-v2/components/sf-leaderboard-player.ts +451 -0
  61. package/src/components/leaderboard-v2/components/sf-leaderboard-ui.ts +512 -0
  62. package/src/components/leaderboard-v2/components/sf-leaderboard.ts +205 -0
  63. package/src/components/leaderboard-v2/constants.ts +16 -0
  64. package/src/components/leaderboard-v2/demo/sample-data.ts +152 -0
  65. package/src/components/leaderboard-v2/events.ts +13 -0
  66. package/src/components/leaderboard-v2/icons.ts +22 -0
  67. package/src/components/leaderboard-v2/index.ts +23 -0
  68. package/src/components/leaderboard-v2/sf-leaderboard.html +1 -0
  69. package/src/components/leaderboard-v2/sf-leaderboard.scss +382 -0
  70. package/src/components/leaderboard-v2/tokens.ts +35 -0
  71. package/src/components/leaderboard-v2/types.ts +30 -0
  72. package/src/components/sf-leaderboard/index.ts +77 -0
  73. package/src/components/sf-leaderboard/sections/footer-section/footer-section.host.ts +3 -0
  74. package/src/components/sf-leaderboard/sections/footer-section/footer-section.html +3 -0
  75. package/src/components/sf-leaderboard/sections/footer-section/footer-section.scss +18 -0
  76. package/src/components/sf-leaderboard/sections/footer-section/footer-section.ts +22 -0
  77. package/src/components/sf-leaderboard/sections/header-section/header-section.host.ts +14 -0
  78. package/src/components/sf-leaderboard/sections/header-section/header-section.html +27 -0
  79. package/src/components/sf-leaderboard/sections/header-section/header-section.scss +189 -0
  80. package/src/components/sf-leaderboard/sections/header-section/header-section.ts +70 -0
  81. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.host.ts +22 -0
  82. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.html +38 -0
  83. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.scss +99 -0
  84. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.ts +121 -0
  85. package/src/components/sf-leaderboard/sections/stats-section/stats-section.host.ts +8 -0
  86. package/src/components/sf-leaderboard/sections/stats-section/stats-section.html +6 -0
  87. package/src/components/sf-leaderboard/sections/stats-section/stats-section.scss +44 -0
  88. package/src/components/sf-leaderboard/sections/stats-section/stats-section.ts +41 -0
  89. package/src/components/sf-leaderboard/sections/table-section/table-section.host.ts +17 -0
  90. package/src/components/sf-leaderboard/sections/table-section/table-section.html +19 -0
  91. package/src/components/sf-leaderboard/sections/table-section/table-section.scss +37 -0
  92. package/src/components/sf-leaderboard/sections/table-section/table-section.ts +108 -0
  93. package/src/components/sf-leaderboard/services/index.ts +22 -0
  94. package/src/components/sf-leaderboard/services/sf-leaderboard-data.service.ts +54 -0
  95. package/src/components/sf-leaderboard/services/sf-leaderboard.state.ts +160 -0
  96. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.host.ts +7 -0
  97. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.html +10 -0
  98. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.scss +180 -0
  99. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.ts +88 -0
  100. package/src/components/sf-leaderboard/shared/components/filters/filters.host.ts +12 -0
  101. package/src/components/sf-leaderboard/shared/components/filters/filters.html +22 -0
  102. package/src/components/sf-leaderboard/shared/components/filters/filters.scss +122 -0
  103. package/src/components/sf-leaderboard/shared/components/filters/filters.ts +75 -0
  104. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.host.ts +9 -0
  105. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.html +5 -0
  106. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.scss +81 -0
  107. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.ts +34 -0
  108. package/src/components/sf-leaderboard/shared/components/podium/map-players.ts +24 -0
  109. package/src/components/sf-leaderboard/shared/components/podium/podium.host.ts +10 -0
  110. package/src/components/sf-leaderboard/shared/components/podium/podium.html +53 -0
  111. package/src/components/sf-leaderboard/shared/components/podium/podium.scss +580 -0
  112. package/src/components/sf-leaderboard/shared/components/podium/podium.ts +49 -0
  113. package/src/components/sf-leaderboard/shared/components/podium/podium.types.ts +9 -0
  114. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.host.ts +11 -0
  115. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.html +9 -0
  116. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.scss +98 -0
  117. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.ts +63 -0
  118. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.host.ts +9 -0
  119. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.html +15 -0
  120. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.scss +210 -0
  121. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.ts +36 -0
  122. package/src/components/sf-leaderboard/shared/components/table/table.host.ts +5 -0
  123. package/src/components/sf-leaderboard/shared/components/table/table.html +11 -0
  124. package/src/components/sf-leaderboard/shared/components/table/table.scss +212 -0
  125. package/src/components/sf-leaderboard/shared/components/table/table.ts +111 -0
  126. package/src/components/sf-leaderboard/shared/constants/defaults.ts +7 -0
  127. package/src/components/sf-leaderboard/shared/constants/filters.ts +16 -0
  128. package/src/components/sf-leaderboard/shared/constants/index.ts +5 -0
  129. package/src/components/sf-leaderboard/shared/constants/player-stats.ts +3 -0
  130. package/src/components/sf-leaderboard/shared/constants/stats-overview.ts +38 -0
  131. package/src/components/sf-leaderboard/shared/constants/tags.ts +16 -0
  132. package/src/components/sf-leaderboard/shared/styles/_section.scss +35 -0
  133. package/src/components/sf-leaderboard/shared/types/data.ts +29 -0
  134. package/src/components/sf-leaderboard/shared/types/events.ts +30 -0
  135. package/src/components/sf-leaderboard/shared/types/player-stats.ts +3 -0
  136. package/src/components/sf-leaderboard/shared/types/sections.ts +100 -0
  137. package/src/components/sf-leaderboard/shared/utils/utils.ts +17 -0
  138. package/src/components/sf-leaderboard/theme/THEMING.md +54 -0
  139. package/src/components/sf-leaderboard/theme/context.ts +16 -0
  140. package/src/components/sf-leaderboard/theme/default-theme.ts +4 -0
  141. package/src/components/sf-leaderboard/theme/hex-to-rgb.ts +25 -0
  142. package/src/components/sf-leaderboard/theme/index.ts +18 -0
  143. package/src/components/sf-leaderboard/theme/inject-theme.ts +39 -0
  144. package/src/components/sf-leaderboard/theme/load-theme.ts +26 -0
  145. package/src/components/sf-leaderboard/theme/merge-theme.ts +59 -0
  146. package/src/components/sf-leaderboard/theme/scss/_colors.scss +101 -0
  147. package/src/components/sf-leaderboard/theme/scss/shared.scss +123 -0
  148. package/src/components/sf-leaderboard/theme/styles.ts +6 -0
  149. package/src/components/sf-leaderboard/theme/theme-to-css-vars.ts +99 -0
  150. package/src/components/sf-leaderboard/theme/themes/fallback.json +62 -0
  151. package/src/components/sf-leaderboard/theme/themes/red.json +62 -0
  152. package/src/components/sf-leaderboard/theme/types.ts +71 -0
  153. package/src/components/sf-live-feed/components/avatar/avatar.host.ts +5 -0
  154. package/src/components/sf-live-feed/components/avatar/avatar.html +3 -0
  155. package/src/components/sf-live-feed/components/avatar/avatar.scss +24 -0
  156. package/src/components/sf-live-feed/components/avatar/avatar.ts +27 -0
  157. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.host.ts +8 -0
  158. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.html +10 -0
  159. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.scss +177 -0
  160. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.ts +65 -0
  161. package/src/components/sf-live-feed/constants.ts +4 -0
  162. package/src/components/sf-live-feed/demo/sample-data.ts +34 -0
  163. package/src/components/sf-live-feed/index.ts +19 -0
  164. package/src/components/sf-live-feed/styles/theme.scss +19 -0
  165. package/src/components/sf-live-feed/styles/theme.ts +5 -0
  166. package/src/components/sf-live-feed/types.ts +19 -0
  167. package/src/components/sf-live-feed/utils.ts +17 -0
  168. package/src/components/streaks/constants.ts +17 -0
  169. package/src/components/streaks/demo/sample-steps.ts +10 -0
  170. package/src/components/streaks/events.ts +8 -0
  171. package/src/components/streaks/index.ts +16 -0
  172. package/src/components/streaks/sf-streaks.html +26 -0
  173. package/src/components/streaks/sf-streaks.scss +351 -0
  174. package/src/components/streaks/sf-streaks.ts +235 -0
  175. package/src/components/streaks/types.ts +7 -0
  176. package/src/lib/lit/component.ts +10 -0
  177. package/src/lib/lit/safe-custom-element.ts +12 -0
  178. package/src/lib/lit/scss.ts +6 -0
  179. package/src/vite-env.d.ts +18 -0
  180. package/styles/global.css +125 -0
  181. package/todo.txt +54 -0
  182. package/tsconfig.json +31 -0
  183. package/vite.config.ts +56 -0
  184. package/vite.docs.config.ts +33 -0
  185. package/vite.lit-html-plugin.ts +43 -0
@@ -0,0 +1,1669 @@
1
+ const We = "sf-leaderboard-default", Ye = { base: { 1: "#161a26", 2: "#12151f", 3: "#0a0c14", 4: "#060810" }, primary: { 1: "#00d4ff", 2: "#00e5ff", 3: "linear-gradient(135deg, #00d4ff 0%, #00e5ff 100%)" }, semantic: { success: "#00d26a", warning: "#ffa502", error: "#ff4757", informative: "#2388fb" }, neutral: "#f0f0f5", surface: { divider: "rgba(42, 47, 66, 0.55)", muted: "#808090", successBright: "#15bf81" } }, Ge = { primary: "'Inter', system-ui, -apple-system, sans-serif", secondary: "'Inter', system-ui, -apple-system, sans-serif", mono: "'JetBrains Mono', monospace" }, qe = { first: { tableIcon: "#ffd700", podiumSlot: "#ffd700", podiumNumber: "#ffd700" }, second: { tableIcon: "#c0c0c0", podiumSlot: "#c0c0c0", podiumNumber: "#c0c0c0" }, third: { tableIcon: "#cd7f32", podiumSlot: "#cd7f32", podiumNumber: "#cd7f32" } }, Ke = { columns: { rank: { enabled: !1 }, player: { enabled: !1 }, games: { enabled: !1 }, winRate: { enabled: !1 }, streak: { enabled: !1 }, winnings: { enabled: !1 } } }, Qe = {
2
+ id: We,
3
+ palette: Ye,
4
+ typography: Ge,
5
+ placement: qe,
6
+ table: Ke
7
+ }, Je = Qe;
8
+ function Ze(t) {
9
+ const e = t.trim().replace(/^#/, "");
10
+ if (!/^[0-9a-fA-F]{3,8}$/.test(e))
11
+ return null;
12
+ let r, i, a;
13
+ if (e.length === 3)
14
+ r = parseInt(e[0] + e[0], 16), i = parseInt(e[1] + e[1], 16), a = parseInt(e[2] + e[2], 16);
15
+ else if (e.length === 6)
16
+ r = parseInt(e.slice(0, 2), 16), i = parseInt(e.slice(2, 4), 16), a = parseInt(e.slice(4, 6), 16);
17
+ else
18
+ return null;
19
+ return `${r}, ${i}, ${a}`;
20
+ }
21
+ const Xe = [
22
+ "rank",
23
+ "player",
24
+ "games",
25
+ "winRate",
26
+ "streak",
27
+ "winnings"
28
+ ];
29
+ function N(t, e, r) {
30
+ if (!r || r.includes("gradient"))
31
+ return;
32
+ const i = Ze(r);
33
+ i && (t[`${e}-rgb`] = i);
34
+ }
35
+ function et(t) {
36
+ const { palette: e, typography: r, placement: i, table: a } = t, n = {};
37
+ for (const c of ["1", "2", "3", "4"])
38
+ n[`--color-base-${c}`] = e.base[c];
39
+ for (const c of ["1", "2", "3"])
40
+ n[`--color-primary-${c}`] = e.primary[c];
41
+ n["--color-success"] = e.semantic.success, n["--color-warning"] = e.semantic.warning, n["--color-error"] = e.semantic.error, e.semantic.informative && (n["--color-informative"] = e.semantic.informative), n["--color-neutral"] = e.neutral, n["--color-surface-divider"] = e.surface.divider, n["--color-surface-muted"] = e.surface.muted, e.surface.successBright && (n["--color-surface-success-bright"] = e.surface.successBright), n["--font-primary"] = r.primary, n["--font-secondary"] = r.secondary, r.mono && (n["--font-mono"] = r.mono);
42
+ const s = [
43
+ ["first", i.first],
44
+ ["second", i.second],
45
+ ["third", i.third]
46
+ ];
47
+ for (const [c, l] of s)
48
+ n[`--place-${c}-table-icon`] = l.tableIcon, n[`--place-${c}-podium-slot`] = l.podiumSlot, n[`--place-${c}-podium-number`] = l.podiumNumber, N(n, `--place-${c}-table-icon`, l.tableIcon);
49
+ N(n, "--color-primary-1", e.primary[1]), N(n, "--color-success", e.semantic.success), N(n, "--color-warning", e.semantic.warning), N(n, "--color-error", e.semantic.error);
50
+ for (const c of Xe) {
51
+ const l = a.columns[c];
52
+ if (!l?.enabled)
53
+ continue;
54
+ const h = c.replace(/[A-Z]/g, (g) => `-${g.toLowerCase()}`);
55
+ l.color && (n[`--table-col-${h}-color`] = l.color), l.fontSize && (n[`--table-col-${h}-font-size`] = l.fontSize);
56
+ }
57
+ return n;
58
+ }
59
+ const tt = "data-sf-theme";
60
+ function rt(t, e = document.documentElement) {
61
+ const r = et(t);
62
+ e.setAttribute(tt, t.id);
63
+ for (const [i, a] of Object.entries(r))
64
+ e.style.setProperty(i, a);
65
+ }
66
+ const X = globalThis, pe = X.ShadowRoot && (X.ShadyCSS === void 0 || X.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, Oe = /* @__PURE__ */ Symbol(), ye = /* @__PURE__ */ new WeakMap();
67
+ let at = class {
68
+ constructor(e, r, i) {
69
+ if (this._$cssResult$ = !0, i !== Oe) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
70
+ this.cssText = e, this.t = r;
71
+ }
72
+ get styleSheet() {
73
+ let e = this.o;
74
+ const r = this.t;
75
+ if (pe && e === void 0) {
76
+ const i = r !== void 0 && r.length === 1;
77
+ i && (e = ye.get(r)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), i && ye.set(r, e));
78
+ }
79
+ return e;
80
+ }
81
+ toString() {
82
+ return this.cssText;
83
+ }
84
+ };
85
+ const Te = (t) => new at(typeof t == "string" ? t : t + "", void 0, Oe), it = (t, e) => {
86
+ if (pe) t.adoptedStyleSheets = e.map((r) => r instanceof CSSStyleSheet ? r : r.styleSheet);
87
+ else for (const r of e) {
88
+ const i = document.createElement("style"), a = X.litNonce;
89
+ a !== void 0 && i.setAttribute("nonce", a), i.textContent = r.cssText, t.appendChild(i);
90
+ }
91
+ }, $e = pe ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((e) => {
92
+ let r = "";
93
+ for (const i of e.cssRules) r += i.cssText;
94
+ return Te(r);
95
+ })(t) : t;
96
+ const { is: nt, defineProperty: st, getOwnPropertyDescriptor: ot, getOwnPropertyNames: lt, getOwnPropertySymbols: ct, getPrototypeOf: dt } = Object, k = globalThis, _e = k.trustedTypes, pt = _e ? _e.emptyScript : "", mt = k.reactiveElementPolyfillSupport, I = (t, e) => t, ee = { toAttribute(t, e) {
97
+ switch (e) {
98
+ case Boolean:
99
+ t = t ? pt : null;
100
+ break;
101
+ case Object:
102
+ case Array:
103
+ t = t == null ? t : JSON.stringify(t);
104
+ }
105
+ return t;
106
+ }, fromAttribute(t, e) {
107
+ let r = t;
108
+ switch (e) {
109
+ case Boolean:
110
+ r = t !== null;
111
+ break;
112
+ case Number:
113
+ r = t === null ? null : Number(t);
114
+ break;
115
+ case Object:
116
+ case Array:
117
+ try {
118
+ r = JSON.parse(t);
119
+ } catch {
120
+ r = null;
121
+ }
122
+ }
123
+ return r;
124
+ } }, me = (t, e) => !nt(t, e), ke = { attribute: !0, type: String, converter: ee, reflect: !1, useDefault: !1, hasChanged: me };
125
+ Symbol.metadata ?? (Symbol.metadata = /* @__PURE__ */ Symbol("metadata")), k.litPropertyMetadata ?? (k.litPropertyMetadata = /* @__PURE__ */ new WeakMap());
126
+ let O = class extends HTMLElement {
127
+ static addInitializer(e) {
128
+ this._$Ei(), (this.l ?? (this.l = [])).push(e);
129
+ }
130
+ static get observedAttributes() {
131
+ return this.finalize(), this._$Eh && [...this._$Eh.keys()];
132
+ }
133
+ static createProperty(e, r = ke) {
134
+ if (r.state && (r.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(e) && ((r = Object.create(r)).wrapped = !0), this.elementProperties.set(e, r), !r.noAccessor) {
135
+ const i = /* @__PURE__ */ Symbol(), a = this.getPropertyDescriptor(e, i, r);
136
+ a !== void 0 && st(this.prototype, e, a);
137
+ }
138
+ }
139
+ static getPropertyDescriptor(e, r, i) {
140
+ const { get: a, set: n } = ot(this.prototype, e) ?? { get() {
141
+ return this[r];
142
+ }, set(s) {
143
+ this[r] = s;
144
+ } };
145
+ return { get: a, set(s) {
146
+ const c = a?.call(this);
147
+ n?.call(this, s), this.requestUpdate(e, c, i);
148
+ }, configurable: !0, enumerable: !0 };
149
+ }
150
+ static getPropertyOptions(e) {
151
+ return this.elementProperties.get(e) ?? ke;
152
+ }
153
+ static _$Ei() {
154
+ if (this.hasOwnProperty(I("elementProperties"))) return;
155
+ const e = dt(this);
156
+ e.finalize(), e.l !== void 0 && (this.l = [...e.l]), this.elementProperties = new Map(e.elementProperties);
157
+ }
158
+ static finalize() {
159
+ if (this.hasOwnProperty(I("finalized"))) return;
160
+ if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(I("properties"))) {
161
+ const r = this.properties, i = [...lt(r), ...ct(r)];
162
+ for (const a of i) this.createProperty(a, r[a]);
163
+ }
164
+ const e = this[Symbol.metadata];
165
+ if (e !== null) {
166
+ const r = litPropertyMetadata.get(e);
167
+ if (r !== void 0) for (const [i, a] of r) this.elementProperties.set(i, a);
168
+ }
169
+ this._$Eh = /* @__PURE__ */ new Map();
170
+ for (const [r, i] of this.elementProperties) {
171
+ const a = this._$Eu(r, i);
172
+ a !== void 0 && this._$Eh.set(a, r);
173
+ }
174
+ this.elementStyles = this.finalizeStyles(this.styles);
175
+ }
176
+ static finalizeStyles(e) {
177
+ const r = [];
178
+ if (Array.isArray(e)) {
179
+ const i = new Set(e.flat(1 / 0).reverse());
180
+ for (const a of i) r.unshift($e(a));
181
+ } else e !== void 0 && r.push($e(e));
182
+ return r;
183
+ }
184
+ static _$Eu(e, r) {
185
+ const i = r.attribute;
186
+ return i === !1 ? void 0 : typeof i == "string" ? i : typeof e == "string" ? e.toLowerCase() : void 0;
187
+ }
188
+ constructor() {
189
+ super(), this._$Ep = void 0, this.isUpdatePending = !1, this.hasUpdated = !1, this._$Em = null, this._$Ev();
190
+ }
191
+ _$Ev() {
192
+ this._$ES = new Promise((e) => this.enableUpdating = e), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach((e) => e(this));
193
+ }
194
+ addController(e) {
195
+ (this._$EO ?? (this._$EO = /* @__PURE__ */ new Set())).add(e), this.renderRoot !== void 0 && this.isConnected && e.hostConnected?.();
196
+ }
197
+ removeController(e) {
198
+ this._$EO?.delete(e);
199
+ }
200
+ _$E_() {
201
+ const e = /* @__PURE__ */ new Map(), r = this.constructor.elementProperties;
202
+ for (const i of r.keys()) this.hasOwnProperty(i) && (e.set(i, this[i]), delete this[i]);
203
+ e.size > 0 && (this._$Ep = e);
204
+ }
205
+ createRenderRoot() {
206
+ const e = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);
207
+ return it(e, this.constructor.elementStyles), e;
208
+ }
209
+ connectedCallback() {
210
+ this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this.enableUpdating(!0), this._$EO?.forEach((e) => e.hostConnected?.());
211
+ }
212
+ enableUpdating(e) {
213
+ }
214
+ disconnectedCallback() {
215
+ this._$EO?.forEach((e) => e.hostDisconnected?.());
216
+ }
217
+ attributeChangedCallback(e, r, i) {
218
+ this._$AK(e, i);
219
+ }
220
+ _$ET(e, r) {
221
+ const i = this.constructor.elementProperties.get(e), a = this.constructor._$Eu(e, i);
222
+ if (a !== void 0 && i.reflect === !0) {
223
+ const n = (i.converter?.toAttribute !== void 0 ? i.converter : ee).toAttribute(r, i.type);
224
+ this._$Em = e, n == null ? this.removeAttribute(a) : this.setAttribute(a, n), this._$Em = null;
225
+ }
226
+ }
227
+ _$AK(e, r) {
228
+ const i = this.constructor, a = i._$Eh.get(e);
229
+ if (a !== void 0 && this._$Em !== a) {
230
+ const n = i.getPropertyOptions(a), s = typeof n.converter == "function" ? { fromAttribute: n.converter } : n.converter?.fromAttribute !== void 0 ? n.converter : ee;
231
+ this._$Em = a;
232
+ const c = s.fromAttribute(r, n.type);
233
+ this[a] = c ?? this._$Ej?.get(a) ?? c, this._$Em = null;
234
+ }
235
+ }
236
+ requestUpdate(e, r, i, a = !1, n) {
237
+ if (e !== void 0) {
238
+ const s = this.constructor;
239
+ if (a === !1 && (n = this[e]), i ?? (i = s.getPropertyOptions(e)), !((i.hasChanged ?? me)(n, r) || i.useDefault && i.reflect && n === this._$Ej?.get(e) && !this.hasAttribute(s._$Eu(e, i)))) return;
240
+ this.C(e, r, i);
241
+ }
242
+ this.isUpdatePending === !1 && (this._$ES = this._$EP());
243
+ }
244
+ C(e, r, { useDefault: i, reflect: a, wrapped: n }, s) {
245
+ i && !(this._$Ej ?? (this._$Ej = /* @__PURE__ */ new Map())).has(e) && (this._$Ej.set(e, s ?? r ?? this[e]), n !== !0 || s !== void 0) || (this._$AL.has(e) || (this.hasUpdated || i || (r = void 0), this._$AL.set(e, r)), a === !0 && this._$Em !== e && (this._$Eq ?? (this._$Eq = /* @__PURE__ */ new Set())).add(e));
246
+ }
247
+ async _$EP() {
248
+ this.isUpdatePending = !0;
249
+ try {
250
+ await this._$ES;
251
+ } catch (r) {
252
+ Promise.reject(r);
253
+ }
254
+ const e = this.scheduleUpdate();
255
+ return e != null && await e, !this.isUpdatePending;
256
+ }
257
+ scheduleUpdate() {
258
+ return this.performUpdate();
259
+ }
260
+ performUpdate() {
261
+ if (!this.isUpdatePending) return;
262
+ if (!this.hasUpdated) {
263
+ if (this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this._$Ep) {
264
+ for (const [a, n] of this._$Ep) this[a] = n;
265
+ this._$Ep = void 0;
266
+ }
267
+ const i = this.constructor.elementProperties;
268
+ if (i.size > 0) for (const [a, n] of i) {
269
+ const { wrapped: s } = n, c = this[a];
270
+ s !== !0 || this._$AL.has(a) || c === void 0 || this.C(a, void 0, n, c);
271
+ }
272
+ }
273
+ let e = !1;
274
+ const r = this._$AL;
275
+ try {
276
+ e = this.shouldUpdate(r), e ? (this.willUpdate(r), this._$EO?.forEach((i) => i.hostUpdate?.()), this.update(r)) : this._$EM();
277
+ } catch (i) {
278
+ throw e = !1, this._$EM(), i;
279
+ }
280
+ e && this._$AE(r);
281
+ }
282
+ willUpdate(e) {
283
+ }
284
+ _$AE(e) {
285
+ this._$EO?.forEach((r) => r.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(e)), this.updated(e);
286
+ }
287
+ _$EM() {
288
+ this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = !1;
289
+ }
290
+ get updateComplete() {
291
+ return this.getUpdateComplete();
292
+ }
293
+ getUpdateComplete() {
294
+ return this._$ES;
295
+ }
296
+ shouldUpdate(e) {
297
+ return !0;
298
+ }
299
+ update(e) {
300
+ this._$Eq && (this._$Eq = this._$Eq.forEach((r) => this._$ET(r, this[r]))), this._$EM();
301
+ }
302
+ updated(e) {
303
+ }
304
+ firstUpdated(e) {
305
+ }
306
+ };
307
+ O.elementStyles = [], O.shadowRootOptions = { mode: "open" }, O[I("elementProperties")] = /* @__PURE__ */ new Map(), O[I("finalized")] = /* @__PURE__ */ new Map(), mt?.({ ReactiveElement: O }), (k.reactiveElementVersions ?? (k.reactiveElementVersions = [])).push("2.1.2");
308
+ const M = globalThis, Ae = (t) => t, te = M.trustedTypes, Ee = te ? te.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, De = "$lit$", _ = `lit$${Math.random().toFixed(9).slice(2)}$`, Le = "?" + _, ht = `<${Le}>`, z = document, H = () => z.createComment(""), V = (t) => t === null || typeof t != "object" && typeof t != "function", he = Array.isArray, gt = (t) => he(t) || typeof t?.[Symbol.iterator] == "function", de = `[
309
+ \f\r]`, U = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Se = /-->/g, Pe = />/g, S = RegExp(`>|${de}(?:([^\\s"'>=/]+)(${de}*=${de}*(?:[^
310
+ \f\r"'\`<>=]|("|')|))|$)`, "g"), ze = /'/g, Ce = /"/g, je = /^(?:script|style|textarea|title)$/i, ut = (t) => (e, ...r) => ({ _$litType$: t, strings: e, values: r }), o = ut(1), T = /* @__PURE__ */ Symbol.for("lit-noChange"), d = /* @__PURE__ */ Symbol.for("lit-nothing"), Re = /* @__PURE__ */ new WeakMap(), P = z.createTreeWalker(z, 129);
311
+ function Be(t, e) {
312
+ if (!he(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array");
313
+ return Ee !== void 0 ? Ee.createHTML(e) : e;
314
+ }
315
+ const ft = (t, e) => {
316
+ const r = t.length - 1, i = [];
317
+ let a, n = e === 2 ? "<svg>" : e === 3 ? "<math>" : "", s = U;
318
+ for (let c = 0; c < r; c++) {
319
+ const l = t[c];
320
+ let h, g, m = -1, w = 0;
321
+ for (; w < l.length && (s.lastIndex = w, g = s.exec(l), g !== null); ) w = s.lastIndex, s === U ? g[1] === "!--" ? s = Se : g[1] !== void 0 ? s = Pe : g[2] !== void 0 ? (je.test(g[2]) && (a = RegExp("</" + g[2], "g")), s = S) : g[3] !== void 0 && (s = S) : s === S ? g[0] === ">" ? (s = a ?? U, m = -1) : g[1] === void 0 ? m = -2 : (m = s.lastIndex - g[2].length, h = g[1], s = g[3] === void 0 ? S : g[3] === '"' ? Ce : ze) : s === Ce || s === ze ? s = S : s === Se || s === Pe ? s = U : (s = S, a = void 0);
322
+ const $ = s === S && t[c + 1].startsWith("/>") ? " " : "";
323
+ n += s === U ? l + ht : m >= 0 ? (i.push(h), l.slice(0, m) + De + l.slice(m) + _ + $) : l + _ + (m === -2 ? c : $);
324
+ }
325
+ return [Be(t, n + (t[r] || "<?>") + (e === 2 ? "</svg>" : e === 3 ? "</math>" : "")), i];
326
+ };
327
+ class W {
328
+ constructor({ strings: e, _$litType$: r }, i) {
329
+ let a;
330
+ this.parts = [];
331
+ let n = 0, s = 0;
332
+ const c = e.length - 1, l = this.parts, [h, g] = ft(e, r);
333
+ if (this.el = W.createElement(h, i), P.currentNode = this.el.content, r === 2 || r === 3) {
334
+ const m = this.el.content.firstChild;
335
+ m.replaceWith(...m.childNodes);
336
+ }
337
+ for (; (a = P.nextNode()) !== null && l.length < c; ) {
338
+ if (a.nodeType === 1) {
339
+ if (a.hasAttributes()) for (const m of a.getAttributeNames()) if (m.endsWith(De)) {
340
+ const w = g[s++], $ = a.getAttribute(m).split(_), Z = /([.?@])?(.*)/.exec(w);
341
+ l.push({ type: 1, index: n, name: Z[2], strings: $, ctor: Z[1] === "." ? bt : Z[1] === "?" ? xt : Z[1] === "@" ? wt : le }), a.removeAttribute(m);
342
+ } else m.startsWith(_) && (l.push({ type: 6, index: n }), a.removeAttribute(m));
343
+ if (je.test(a.tagName)) {
344
+ const m = a.textContent.split(_), w = m.length - 1;
345
+ if (w > 0) {
346
+ a.textContent = te ? te.emptyScript : "";
347
+ for (let $ = 0; $ < w; $++) a.append(m[$], H()), P.nextNode(), l.push({ type: 2, index: ++n });
348
+ a.append(m[w], H());
349
+ }
350
+ }
351
+ } else if (a.nodeType === 8) if (a.data === Le) l.push({ type: 2, index: n });
352
+ else {
353
+ let m = -1;
354
+ for (; (m = a.data.indexOf(_, m + 1)) !== -1; ) l.push({ type: 7, index: n }), m += _.length - 1;
355
+ }
356
+ n++;
357
+ }
358
+ }
359
+ static createElement(e, r) {
360
+ const i = z.createElement("template");
361
+ return i.innerHTML = e, i;
362
+ }
363
+ }
364
+ function D(t, e, r = t, i) {
365
+ if (e === T) return e;
366
+ let a = i !== void 0 ? r._$Co?.[i] : r._$Cl;
367
+ const n = V(e) ? void 0 : e._$litDirective$;
368
+ return a?.constructor !== n && (a?._$AO?.(!1), n === void 0 ? a = void 0 : (a = new n(t), a._$AT(t, r, i)), i !== void 0 ? (r._$Co ?? (r._$Co = []))[i] = a : r._$Cl = a), a !== void 0 && (e = D(t, a._$AS(t, e.values), a, i)), e;
369
+ }
370
+ class vt {
371
+ constructor(e, r) {
372
+ this._$AV = [], this._$AN = void 0, this._$AD = e, this._$AM = r;
373
+ }
374
+ get parentNode() {
375
+ return this._$AM.parentNode;
376
+ }
377
+ get _$AU() {
378
+ return this._$AM._$AU;
379
+ }
380
+ u(e) {
381
+ const { el: { content: r }, parts: i } = this._$AD, a = (e?.creationScope ?? z).importNode(r, !0);
382
+ P.currentNode = a;
383
+ let n = P.nextNode(), s = 0, c = 0, l = i[0];
384
+ for (; l !== void 0; ) {
385
+ if (s === l.index) {
386
+ let h;
387
+ l.type === 2 ? h = new q(n, n.nextSibling, this, e) : l.type === 1 ? h = new l.ctor(n, l.name, l.strings, this, e) : l.type === 6 && (h = new yt(n, this, e)), this._$AV.push(h), l = i[++c];
388
+ }
389
+ s !== l?.index && (n = P.nextNode(), s++);
390
+ }
391
+ return P.currentNode = z, a;
392
+ }
393
+ p(e) {
394
+ let r = 0;
395
+ for (const i of this._$AV) i !== void 0 && (i.strings !== void 0 ? (i._$AI(e, i, r), r += i.strings.length - 2) : i._$AI(e[r])), r++;
396
+ }
397
+ }
398
+ class q {
399
+ get _$AU() {
400
+ return this._$AM?._$AU ?? this._$Cv;
401
+ }
402
+ constructor(e, r, i, a) {
403
+ this.type = 2, this._$AH = d, this._$AN = void 0, this._$AA = e, this._$AB = r, this._$AM = i, this.options = a, this._$Cv = a?.isConnected ?? !0;
404
+ }
405
+ get parentNode() {
406
+ let e = this._$AA.parentNode;
407
+ const r = this._$AM;
408
+ return r !== void 0 && e?.nodeType === 11 && (e = r.parentNode), e;
409
+ }
410
+ get startNode() {
411
+ return this._$AA;
412
+ }
413
+ get endNode() {
414
+ return this._$AB;
415
+ }
416
+ _$AI(e, r = this) {
417
+ e = D(this, e, r), V(e) ? e === d || e == null || e === "" ? (this._$AH !== d && this._$AR(), this._$AH = d) : e !== this._$AH && e !== T && this._(e) : e._$litType$ !== void 0 ? this.$(e) : e.nodeType !== void 0 ? this.T(e) : gt(e) ? this.k(e) : this._(e);
418
+ }
419
+ O(e) {
420
+ return this._$AA.parentNode.insertBefore(e, this._$AB);
421
+ }
422
+ T(e) {
423
+ this._$AH !== e && (this._$AR(), this._$AH = this.O(e));
424
+ }
425
+ _(e) {
426
+ this._$AH !== d && V(this._$AH) ? this._$AA.nextSibling.data = e : this.T(z.createTextNode(e)), this._$AH = e;
427
+ }
428
+ $(e) {
429
+ const { values: r, _$litType$: i } = e, a = typeof i == "number" ? this._$AC(e) : (i.el === void 0 && (i.el = W.createElement(Be(i.h, i.h[0]), this.options)), i);
430
+ if (this._$AH?._$AD === a) this._$AH.p(r);
431
+ else {
432
+ const n = new vt(a, this), s = n.u(this.options);
433
+ n.p(r), this.T(s), this._$AH = n;
434
+ }
435
+ }
436
+ _$AC(e) {
437
+ let r = Re.get(e.strings);
438
+ return r === void 0 && Re.set(e.strings, r = new W(e)), r;
439
+ }
440
+ k(e) {
441
+ he(this._$AH) || (this._$AH = [], this._$AR());
442
+ const r = this._$AH;
443
+ let i, a = 0;
444
+ for (const n of e) a === r.length ? r.push(i = new q(this.O(H()), this.O(H()), this, this.options)) : i = r[a], i._$AI(n), a++;
445
+ a < r.length && (this._$AR(i && i._$AB.nextSibling, a), r.length = a);
446
+ }
447
+ _$AR(e = this._$AA.nextSibling, r) {
448
+ for (this._$AP?.(!1, !0, r); e !== this._$AB; ) {
449
+ const i = Ae(e).nextSibling;
450
+ Ae(e).remove(), e = i;
451
+ }
452
+ }
453
+ setConnected(e) {
454
+ this._$AM === void 0 && (this._$Cv = e, this._$AP?.(e));
455
+ }
456
+ }
457
+ class le {
458
+ get tagName() {
459
+ return this.element.tagName;
460
+ }
461
+ get _$AU() {
462
+ return this._$AM._$AU;
463
+ }
464
+ constructor(e, r, i, a, n) {
465
+ this.type = 1, this._$AH = d, this._$AN = void 0, this.element = e, this.name = r, this._$AM = a, this.options = n, i.length > 2 || i[0] !== "" || i[1] !== "" ? (this._$AH = Array(i.length - 1).fill(new String()), this.strings = i) : this._$AH = d;
466
+ }
467
+ _$AI(e, r = this, i, a) {
468
+ const n = this.strings;
469
+ let s = !1;
470
+ if (n === void 0) e = D(this, e, r, 0), s = !V(e) || e !== this._$AH && e !== T, s && (this._$AH = e);
471
+ else {
472
+ const c = e;
473
+ let l, h;
474
+ for (e = n[0], l = 0; l < n.length - 1; l++) h = D(this, c[i + l], r, l), h === T && (h = this._$AH[l]), s || (s = !V(h) || h !== this._$AH[l]), h === d ? e = d : e !== d && (e += (h ?? "") + n[l + 1]), this._$AH[l] = h;
475
+ }
476
+ s && !a && this.j(e);
477
+ }
478
+ j(e) {
479
+ e === d ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, e ?? "");
480
+ }
481
+ }
482
+ class bt extends le {
483
+ constructor() {
484
+ super(...arguments), this.type = 3;
485
+ }
486
+ j(e) {
487
+ this.element[this.name] = e === d ? void 0 : e;
488
+ }
489
+ }
490
+ class xt extends le {
491
+ constructor() {
492
+ super(...arguments), this.type = 4;
493
+ }
494
+ j(e) {
495
+ this.element.toggleAttribute(this.name, !!e && e !== d);
496
+ }
497
+ }
498
+ class wt extends le {
499
+ constructor(e, r, i, a, n) {
500
+ super(e, r, i, a, n), this.type = 5;
501
+ }
502
+ _$AI(e, r = this) {
503
+ if ((e = D(this, e, r, 0) ?? d) === T) return;
504
+ const i = this._$AH, a = e === d && i !== d || e.capture !== i.capture || e.once !== i.once || e.passive !== i.passive, n = e !== d && (i === d || a);
505
+ a && this.element.removeEventListener(this.name, this, i), n && this.element.addEventListener(this.name, this, e), this._$AH = e;
506
+ }
507
+ handleEvent(e) {
508
+ typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, e) : this._$AH.handleEvent(e);
509
+ }
510
+ }
511
+ class yt {
512
+ constructor(e, r, i) {
513
+ this.element = e, this.type = 6, this._$AN = void 0, this._$AM = r, this.options = i;
514
+ }
515
+ get _$AU() {
516
+ return this._$AM._$AU;
517
+ }
518
+ _$AI(e) {
519
+ D(this, e);
520
+ }
521
+ }
522
+ const $t = M.litHtmlPolyfillSupport;
523
+ $t?.(W, q), (M.litHtmlVersions ?? (M.litHtmlVersions = [])).push("3.3.3");
524
+ const _t = (t, e, r) => {
525
+ const i = r?.renderBefore ?? e;
526
+ let a = i._$litPart$;
527
+ if (a === void 0) {
528
+ const n = r?.renderBefore ?? null;
529
+ i._$litPart$ = a = new q(e.insertBefore(H(), n), n, void 0, r ?? {});
530
+ }
531
+ return a._$AI(t), a;
532
+ };
533
+ const F = globalThis;
534
+ class u extends O {
535
+ constructor() {
536
+ super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
537
+ }
538
+ createRenderRoot() {
539
+ var r;
540
+ const e = super.createRenderRoot();
541
+ return (r = this.renderOptions).renderBefore ?? (r.renderBefore = e.firstChild), e;
542
+ }
543
+ update(e) {
544
+ const r = this.render();
545
+ this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = _t(r, this.renderRoot, this.renderOptions);
546
+ }
547
+ connectedCallback() {
548
+ super.connectedCallback(), this._$Do?.setConnected(!0);
549
+ }
550
+ disconnectedCallback() {
551
+ super.disconnectedCallback(), this._$Do?.setConnected(!1);
552
+ }
553
+ render() {
554
+ return T;
555
+ }
556
+ }
557
+ u._$litElement$ = !0, u.finalized = !0, F.litElementHydrateSupport?.({ LitElement: u });
558
+ const kt = F.litElementPolyfillSupport;
559
+ kt?.({ LitElement: u });
560
+ (F.litElementVersions ?? (F.litElementVersions = [])).push("4.2.2");
561
+ const At = { attribute: !0, type: String, converter: ee, reflect: !1, hasChanged: me }, Et = (t = At, e, r) => {
562
+ const { kind: i, metadata: a } = r;
563
+ let n = globalThis.litPropertyMetadata.get(a);
564
+ if (n === void 0 && globalThis.litPropertyMetadata.set(a, n = /* @__PURE__ */ new Map()), i === "setter" && ((t = Object.create(t)).wrapped = !0), n.set(r.name, t), i === "accessor") {
565
+ const { name: s } = r;
566
+ return { set(c) {
567
+ const l = e.get.call(this);
568
+ e.set.call(this, c), this.requestUpdate(s, l, t, !0, c);
569
+ }, init(c) {
570
+ return c !== void 0 && this.C(s, void 0, t, c), c;
571
+ } };
572
+ }
573
+ if (i === "setter") {
574
+ const { name: s } = r;
575
+ return function(c) {
576
+ const l = this[s];
577
+ e.call(this, c), this.requestUpdate(s, l, t, !0, c);
578
+ };
579
+ }
580
+ throw Error("Unsupported decorator location: " + i);
581
+ };
582
+ function p(t) {
583
+ return (e, r) => typeof r == "object" ? Et(t, e, r) : ((i, a, n) => {
584
+ const s = a.hasOwnProperty(n);
585
+ return a.constructor.createProperty(n, i), s ? Object.getOwnPropertyDescriptor(a, n) : void 0;
586
+ })(t, e, r);
587
+ }
588
+ function v(t) {
589
+ return (e) => (customElements.get(t) || customElements.define(t, e), e);
590
+ }
591
+ function f(t) {
592
+ return Te(t);
593
+ }
594
+ const St = "sf-leaderboard", Pt = "sf-leaderboard-stat-card", zt = "sf-leaderboard-filters", Ct = "sf-leaderboard-table", Rt = "sf-leaderboard-podium", Ot = "sf-leaderboard-rank-badge", Tt = "sf-leaderboard-player-avatar", Dt = "sf-leaderboard-player-stats-card", Lt = "sf-leaderboard-header-section", jt = "sf-leaderboard-stats-section", Bt = "sf-leaderboard-ranking-section", Nt = "sf-leaderboard-table-section", Ut = "sf-leaderboard-footer-section", It = "Leaderboard", Mt = "Real-time rankings", K = "week", Q = "all", Ft = "Your Position", Ht = "You're in the top 5% of players!", Vt = 42, Wt = [
595
+ { label: "Today", value: "today" },
596
+ { label: "This Week", value: "week" },
597
+ { label: "This Month", value: "month" },
598
+ { label: "All Time", value: "all" }
599
+ ], Yt = [
600
+ { label: "All Games", value: "all" },
601
+ { label: "Poker", value: "poker" },
602
+ { label: "Blackjack", value: "blackjack" },
603
+ { label: "Roulette", value: "roulette" },
604
+ { label: "Slots", value: "slots" }
605
+ ], Gt = [
606
+ {
607
+ label: "Total Players",
608
+ value: "12,847",
609
+ icon: "👥",
610
+ trendValue: 12.5,
611
+ trendPositive: !0
612
+ },
613
+ {
614
+ label: "Total Wagered",
615
+ value: "$84.2M",
616
+ icon: "💰",
617
+ trendValue: 8.3,
618
+ trendPositive: !0
619
+ },
620
+ {
621
+ label: "Active Games",
622
+ value: "1,247",
623
+ icon: "🎮",
624
+ trendValue: 3.2,
625
+ trendPositive: !0
626
+ },
627
+ {
628
+ label: "Biggest Win",
629
+ value: "$125K",
630
+ icon: "⚡",
631
+ trendValue: 45.8,
632
+ trendPositive: !0
633
+ }
634
+ ], R = {
635
+ header: {
636
+ title: It,
637
+ subtitle: Mt,
638
+ icon: "🏆",
639
+ showLive: !0,
640
+ backButton: { label: "Back" },
641
+ isRefreshing: !1
642
+ },
643
+ stats: { items: Gt },
644
+ ranking: {
645
+ podium: { title: "Top Champions", badge: "Elite", players: [] },
646
+ playerStats: {
647
+ title: Ft,
648
+ rank: Vt,
649
+ message: Ht
650
+ }
651
+ },
652
+ table: {
653
+ title: "All Rankings",
654
+ subtitle: "Showing 0 players",
655
+ players: [],
656
+ filters: {
657
+ searchQuery: "",
658
+ timeframe: K,
659
+ category: Q
660
+ }
661
+ },
662
+ footer: {
663
+ text: "Rankings update every 30 seconds • Last updated: Just now"
664
+ }
665
+ };
666
+ function qt(t = {}) {
667
+ return {
668
+ ...R,
669
+ ...t,
670
+ header: "header" in t ? t.header : R.header,
671
+ stats: t.stats ?? R.stats,
672
+ ranking: t.ranking ?? R.ranking,
673
+ table: t.table ?? R.table,
674
+ footer: t.footer ?? R.footer
675
+ };
676
+ }
677
+ function Kt(t) {
678
+ return !!(t?.podium ?? t?.playerStats);
679
+ }
680
+ const ge = "timeframe-change", ue = "category-change", fe = "search-change", ve = "player-select", Qt = "refresh", Jt = '@charset "UTF-8";:host{--background: var(--color-base-1, #0a0c14);--foreground: var(--color-neutral, #f0f0f5);--card: var(--color-base-2, #00114f);--card-foreground: var(--color-neutral, #f0f0f5);--primary: var(--color-primary-1, #00d4ff);--primary-rgb: var(--color-primary-1-rgb, 0, 212, 255);--primary-foreground: var(--color-base-3, #000c35);--secondary: var(--color-base-2, #00114f);--secondary-foreground: var(--color-neutral, #f0f0f5);--muted: var(--color-base-2, #00114f);--muted-foreground: var(--color-surface-muted, #808090);--accent: var(--color-primary-2, #00e5ff);--accent-foreground: var(--color-base-3, #000c35);--destructive: var(--color-error, #ff4757);--destructive-rgb: var(--color-error-rgb, 255, 71, 87);--border: var(--color-base-2, #00114f);--border-subtle: var(--color-surface-divider, rgba(42, 47, 66, .55));--success: var(--color-success, #00d26a);--success-rgb: var(--color-success-rgb, 0, 210, 106);--warning: var(--color-warning, #ffa502);--warning-rgb: var(--color-warning-rgb, 255, 165, 2);--informative: var(--color-informative, #2388fb);--gold: var(--place-first-table-icon, #ffd700);--gold-rgb: var(--place-first-table-icon-rgb, 255, 215, 0);--silver: var(--place-second-table-icon, #c0c0c0);--silver-rgb: var(--place-second-table-icon-rgb, 192, 192, 192);--bronze: var(--place-third-table-icon, #cd7f32);--bronze-rgb: var(--place-third-table-icon-rgb, 205, 127, 50);--radius: 12px;--radius-sm: 8px;--radius-lg: 16px;--font-sans: var(--font-primary, "Inter", system-ui, sans-serif);--transition-fast: .2s ease;--transition-base: .3s ease;--surface-gradient: linear-gradient(145deg, var(--color-base-2, #00114f) 0%, var(--color-base-1, #0a0c14) 100%);--surface-border-color: color-mix(in srgb, var(--color-primary-1, #00d4ff) 18%, transparent);--surface-border-hover: color-mix(in srgb, var(--color-primary-1, #00d4ff) 35%, transparent);--surface-radius: var(--radius-lg);--surface-padding: clamp(12px, 2vw, 18px);--surface-shadow: 0 4px 24px rgba(0, 0, 0, .25);--surface-shadow-hover: 0 0 24px color-mix(in srgb, var(--color-primary-1, #00d4ff) 12%, transparent);--inset-bg: color-mix(in srgb, var(--color-neutral, #f0f0f5) 3%, transparent);--inset-border: color-mix(in srgb, var(--color-neutral, #f0f0f5) 8%, transparent);--inset-radius: var(--radius-sm);--inset-hover-bg: color-mix(in srgb, var(--color-primary-1, #00d4ff) 6%, transparent);--inset-hover-border: color-mix(in srgb, var(--color-primary-1, #00d4ff) 22%, transparent);--accent-soft: color-mix(in srgb, var(--color-primary-1, #00d4ff) 10%, transparent);--accent-soft-strong: color-mix(in srgb, var(--color-primary-1, #00d4ff) 18%, transparent);--accent-border: color-mix(in srgb, var(--color-primary-1, #00d4ff) 28%, transparent);--accent-glow: color-mix(in srgb, var(--color-primary-1, #00d4ff) 45%, transparent);--accent-gradient: var(--color-primary-3, linear-gradient(256deg, #ffeec2 0%, #ffc431 100%));--accent-text-glow: 0 0 16px color-mix(in srgb, var(--color-primary-1, #00d4ff) 55%, transparent), 0 0 32px color-mix(in srgb, var(--color-primary-1, #00d4ff) 28%, transparent);--medal-gold-bg: color-mix(in srgb, var(--place-first-table-icon, #ffd700) 22%, transparent);--medal-gold-border: color-mix(in srgb, var(--place-first-table-icon, #ffd700) 50%, transparent);--medal-silver-bg: color-mix(in srgb, var(--place-second-table-icon, #c0c0c0) 18%, transparent);--medal-silver-border: color-mix(in srgb, var(--place-second-table-icon, #c0c0c0) 40%, transparent);--medal-bronze-bg: color-mix(in srgb, var(--place-third-table-icon, #cd7f32) 18%, transparent);--medal-bronze-border: color-mix(in srgb, var(--place-third-table-icon, #cd7f32) 40%, transparent);--medal-gold-gradient: linear-gradient(135deg, var(--place-first-table-icon, #ffd700) 0%, var(--color-primary-1, #00d4ff) 100%);--medal-silver-gradient: linear-gradient(135deg, var(--place-second-table-icon, #c0c0c0) 0%, var(--color-base-2, #00114f) 100%);--medal-bronze-gradient: linear-gradient(135deg, var(--place-third-table-icon, #cd7f32) 0%, var(--color-base-3, #000c35) 100%);--medal-avatar-fg: var(--color-base-3, #000c35);--medal-gold-glow: color-mix(in srgb, var(--place-first-table-icon, #ffd700) 60%, transparent);--medal-silver-glow: color-mix(in srgb, var(--place-second-table-icon, #c0c0c0) 50%, transparent);--medal-bronze-glow: color-mix(in srgb, var(--place-third-table-icon, #cd7f32) 50%, transparent);--badge-success-bg: color-mix(in srgb, var(--color-success, #00d26a) 20%, transparent);--badge-success-border: color-mix(in srgb, var(--color-success, #00d26a) 35%, transparent);--badge-warning-bg: color-mix(in srgb, var(--color-warning, #ffa502) 20%, transparent);--badge-warning-border: color-mix(in srgb, var(--color-warning, #ffa502) 35%, transparent);--badge-accent-bg: var(--accent-soft);--badge-accent-border: var(--accent-border);font-family:var(--font-sans);color:var(--foreground)}*{box-sizing:border-box}.card{position:relative;overflow:hidden;box-sizing:border-box;background:var(--surface-gradient);border:1px solid var(--surface-border-color);border-radius:var(--surface-radius);box-shadow:var(--surface-shadow);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.card:hover{border-color:var(--surface-border-hover);box-shadow:var(--surface-shadow-hover)}.stat-item,.avatar-section,.percentile-badge{background:var(--inset-bg);border:1px solid var(--inset-border);border-radius:var(--inset-radius)}.stat-item:hover{background:var(--inset-hover-bg);border-color:var(--inset-hover-border)}', b = f(Jt);
681
+ function Zt(t) {
682
+ return o`<div class="app">
683
+ ${t.renderHeader()}
684
+ <main class="main">
685
+ ${t.renderStats()}
686
+ ${t.renderRanking()}
687
+ ${t.renderTable()}
688
+ ${t.renderFooter()}
689
+ </main>
690
+ </div>
691
+ `;
692
+ }
693
+ const Xt = ":host{display:block;width:100%;min-height:100vh;background:var(--background)}.app{width:100%;min-height:100vh;min-height:100dvh;padding:clamp(12px,3vw,16px) clamp(12px,4vw,40px) clamp(16px,4vw,40px);box-sizing:border-box;background-image:linear-gradient(var(--border-subtle) 1px,transparent 1px),linear-gradient(90deg,var(--border-subtle) 1px,transparent 1px);background-size:50px 50px;animation:grid-move 20s linear infinite}@keyframes grid-move{0%{background-position:0 0}to{background-position:50px 50px}}.main{width:100%;box-sizing:border-box;margin-top:clamp(1.25rem,4vw,2.5rem)}", er = ':host{display:block;width:100%}.header{position:sticky;top:0;z-index:50;backdrop-filter:blur(16px);background:color-mix(in srgb,var(--background) 82%,transparent);padding:12px 0;border-bottom:1px solid var(--border)}.header-content{width:100%;display:flex;align-items:center;justify-content:space-between}.logo-section{display:flex;align-items:center;gap:.75rem}.logo-icon{width:40px;height:40px;border-radius:var(--radius);background:var(--accent-soft);border:1px solid var(--surface-border-color);display:flex;align-items:center;justify-content:center;font-size:1.25rem;box-shadow:var(--surface-shadow-hover)}.logo-text h1{font-size:1.25rem;font-weight:700;margin:0;text-shadow:var(--accent-text-glow)}.logo-text p{font-size:.75rem;color:var(--muted-foreground);margin:0}.header-actions{display:flex;align-items:center;gap:.75rem}.live-badge{display:flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border-radius:9999px;border:1px solid rgba(var(--success-rgb),.35);background:rgba(var(--success-rgb),.08);font-size:.75rem;font-weight:500;color:var(--success)}.live-dot{position:relative;width:8px;height:8px;background:var(--success);border-radius:50%}.live-dot:before{content:"";position:absolute;inset:0;border-radius:50%;background:var(--success);animation:ping 1.5s ease-out infinite}@keyframes ping{0%{transform:scale(1);opacity:1}to{transform:scale(2.5);opacity:0}}.back-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:var(--radius-sm);border:1px solid var(--surface-border-color);background:var(--surface-gradient);color:var(--foreground);font-size:.875rem;font-family:inherit;cursor:pointer;box-shadow:var(--surface-shadow);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.back-btn:hover{border-color:var(--surface-border-hover);box-shadow:var(--surface-shadow-hover)}.back-btn .icon{transition:transform .3s ease}.back-btn.refreshing .icon{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(max-width:639px){.header-content{flex-wrap:wrap;gap:.75rem}.logo-section{flex:1 1 100%;justify-content:center;align-items:center;gap:.5rem}.logo-icon{width:clamp(32px,9vw,40px);height:clamp(32px,9vw,40px);font-size:clamp(1rem,4vw,1.25rem)}.logo-text{text-align:center}.logo-text h1{text-align:center;font-size:clamp(1rem,4.5vw,1.25rem)}.logo-text p{display:none}.header-actions{width:100%;justify-content:space-between}.back-btn{padding:.5rem .75rem;font-size:.8125rem}}@media(max-width:380px){.live-badge{font-size:.6875rem;padding:.3rem .6rem}}';
694
+ var tr = Object.defineProperty, rr = Object.getOwnPropertyDescriptor, be = (t, e, r, i) => {
695
+ for (var a = i > 1 ? void 0 : i ? rr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
696
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
697
+ return i && a && tr(e, r, a), a;
698
+ };
699
+ let Y = class extends u {
700
+ onBackClick() {
701
+ const t = this.refreshContext;
702
+ this.dispatchEvent(
703
+ new CustomEvent(Qt, {
704
+ detail: {
705
+ timeframe: t?.timeframe ?? K,
706
+ category: t?.category ?? Q
707
+ },
708
+ bubbles: !0,
709
+ composed: !0
710
+ })
711
+ );
712
+ }
713
+ render() {
714
+ if (!this.section) return d;
715
+ const t = this.section.backButton != null, e = this.section.backButton?.label ?? "Back";
716
+ return o`
717
+ <header class="header">
718
+ <div class="header-content">
719
+ <div class="logo-section">
720
+ ${this.section.icon ? o`<div class="logo-icon">${this.section.icon}</div>` : d}
721
+ <div class="logo-text">
722
+ <h1>${this.section.title}</h1>
723
+ ${this.section.subtitle ? o`<p>${this.section.subtitle}</p>` : d}
724
+ </div>
725
+ </div>
726
+
727
+ <div class="header-actions">
728
+ ${this.section.showLive ? o`
729
+ <div class="live-badge">
730
+ <span class="live-dot"></span>
731
+ Live
732
+ </div>
733
+ ` : d}
734
+ ${t ? o`
735
+ <button
736
+ type="button"
737
+ class="back-btn ${this.section.isRefreshing ? "refreshing" : ""}"
738
+ @click=${this.onBackClick}
739
+ >
740
+ <span class="icon" aria-hidden="true">←</span>
741
+ ${e}
742
+ </button>
743
+ ` : d}
744
+ </div>
745
+ </div>
746
+ </header>
747
+ `;
748
+ }
749
+ };
750
+ Y.styles = [b, f(er)];
751
+ be([
752
+ p({ attribute: !1 })
753
+ ], Y.prototype, "section", 2);
754
+ be([
755
+ p({ attribute: !1 })
756
+ ], Y.prototype, "refreshContext", 2);
757
+ Y = be([
758
+ v(Lt)
759
+ ], Y);
760
+ function ar(t) {
761
+ return o`<div class="card">
762
+ <div class="glow"></div>
763
+ <div class="content">
764
+ <div class="header">
765
+ <span class="label">${t.label}</span>
766
+ <div class="icon-wrapper">${t.icon}</div>
767
+ </div>
768
+ <div class="body">
769
+ <p class="value">${t.value}</p>
770
+ ${t.renderTrend()}
771
+ </div>
772
+ </div>
773
+ </div>
774
+ `;
775
+ }
776
+ const ir = '@charset "UTF-8";:host{display:block;min-width:0;max-width:100%}.card{padding:clamp(.75rem,2.5vw,1rem);min-width:0;max-width:100%}.glow{position:absolute;top:0;right:0;width:96px;height:96px;background:radial-gradient(circle,var(--accent-soft) 0%,transparent 70%);transform:translate(50%,-50%);pointer-events:none}.content{position:relative}.header{display:flex;align-items:center;justify-content:space-between}.label{font-size:.875rem;color:var(--muted-foreground)}.icon-wrapper{width:32px;height:32px;border-radius:var(--inset-radius);background:var(--accent-soft);display:flex;align-items:center;justify-content:center;font-size:1rem}.body{margin-top:.5rem}.value{font-size:1.5rem;font-weight:700;font-family:var(--font-mono)}.trend{font-size:.75rem;font-weight:500;margin-top:.25rem}.trend.positive{color:var(--success)}.trend.negative{color:var(--destructive)}@media(max-width:639px){:host{display:flex;height:100%;min-height:0}.card{display:flex;flex:1;width:100%;min-height:100%;align-items:center;justify-content:center;padding:clamp(.45rem,2.8vw,.65rem)}.glow{width:clamp(40px,22vw,64px);height:clamp(40px,22vw,64px)}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;gap:clamp(.2rem,1.2vw,.35rem)}.header{flex-direction:column;align-items:center;justify-content:center;gap:.25rem;text-align:center}.label{font-size:clamp(.6rem,2.6vw,.7rem);line-height:1.2}.icon-wrapper{width:clamp(22px,7.5vw,28px);height:clamp(22px,7.5vw,28px);font-size:clamp(.7rem,3.2vw,.85rem);flex-shrink:0}.body{margin-top:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;gap:.1rem}.value{margin:0;font-size:clamp(.9rem,5.5vw,1.15rem);line-height:1.15;word-break:break-word}.trend{font-size:clamp(.58rem,2.4vw,.65rem);margin-top:0;margin-bottom:0}}@media(max-width:576px){.card{padding:clamp(.65rem,3.2vw,.85rem);min-height:clamp(5.5rem,26vw,6.75rem)}.glow{width:clamp(48px,20vw,72px);height:clamp(48px,20vw,72px)}.content{gap:clamp(.35rem,2vw,.5rem)}.header{gap:clamp(.3rem,1.6vw,.4rem)}.icon-wrapper{order:-1;width:clamp(30px,8.5vw,36px);height:clamp(30px,8.5vw,36px);font-size:clamp(.95rem,4vw,1.1rem)}.label{order:0;font-size:clamp(.65rem,2.8vw,.75rem);line-height:1.25;letter-spacing:.02em;max-width:100%}.body{gap:clamp(.15rem,1.2vw,.25rem)}.value{font-size:clamp(1rem,5.2vw,1.2rem);line-height:1.2}.trend{font-size:clamp(.625rem,2.6vw,.7rem);line-height:1.3}}@media(max-width:380px){.card{padding:clamp(.55rem,2.8vw,.7rem);min-height:5rem}.value{font-size:clamp(.9rem,4.8vw,1.05rem)}}';
777
+ var nr = Object.defineProperty, sr = Object.getOwnPropertyDescriptor, j = (t, e, r, i) => {
778
+ for (var a = i > 1 ? void 0 : i ? sr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
779
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
780
+ return i && a && nr(e, r, a), a;
781
+ };
782
+ let A = class extends u {
783
+ constructor() {
784
+ super(...arguments), this.label = "", this.value = "", this.icon = "", this.trendPositive = !0;
785
+ }
786
+ renderTrend() {
787
+ return this.trendValue === void 0 ? o`` : o`
788
+ <p class="trend ${this.trendPositive ? "positive" : "negative"}">
789
+ ${this.trendPositive ? "+" : ""}${this.trendValue}% from last week
790
+ </p>
791
+ `;
792
+ }
793
+ render() {
794
+ return ar(this);
795
+ }
796
+ };
797
+ A.styles = [b, f(ir)];
798
+ j([
799
+ p({ type: String })
800
+ ], A.prototype, "label", 2);
801
+ j([
802
+ p({ type: String })
803
+ ], A.prototype, "value", 2);
804
+ j([
805
+ p({ type: String })
806
+ ], A.prototype, "icon", 2);
807
+ j([
808
+ p({ type: Number })
809
+ ], A.prototype, "trendValue", 2);
810
+ j([
811
+ p({ type: Boolean })
812
+ ], A.prototype, "trendPositive", 2);
813
+ A = j([
814
+ v(Pt)
815
+ ], A);
816
+ const or = ".section{margin-bottom:clamp(1.5rem,5vw,3rem);min-width:0}.section-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.section-title{font-size:1.125rem;font-weight:700;margin:0}.elite-badge{font-size:.65rem;padding:.2rem .5rem;border-radius:var(--radius-sm);background:var(--medal-gold-bg);border:1px solid var(--medal-gold-border);color:var(--gold);font-weight:600;letter-spacing:.04em;text-transform:uppercase}@media(max-width:639px){.section-title{font-size:1rem}}:host{display:block;width:100%}.stats-section .stats-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(.625rem,2vw,1rem);width:100%;min-width:0;align-items:stretch}@media(min-width:640px)and (max-width:1079px){.stats-section .stats-grid{gap:.875rem;grid-auto-rows:1fr}}@media(min-width:1080px){.stats-section .stats-grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:auto;gap:1rem}}@media(max-width:639px){.stats-section .stats-grid{gap:clamp(.35rem,2.5vw,.5rem);grid-auto-rows:1fr;grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:576px){.stats-section .stats-grid{gap:clamp(.5rem,2.8vw,.75rem)}}";
817
+ var lr = Object.defineProperty, cr = Object.getOwnPropertyDescriptor, Ne = (t, e, r, i) => {
818
+ for (var a = i > 1 ? void 0 : i ? cr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
819
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
820
+ return i && a && lr(e, r, a), a;
821
+ };
822
+ let re = class extends u {
823
+ render() {
824
+ return this.section?.items?.length ? o`
825
+ <section class="section stats-section">
826
+ ${this.section.title ? o`
827
+ <div class="section-header">
828
+ <h2 class="section-title">${this.section.title}</h2>
829
+ </div>
830
+ ` : d}
831
+ <div class="stats-grid">
832
+ ${this.section.items.map(
833
+ (t) => o`
834
+ <sf-leaderboard-stat-card
835
+ label=${t.label}
836
+ value=${t.value}
837
+ icon=${t.icon}
838
+ .trendValue=${t.trendValue}
839
+ ?trendPositive=${t.trendPositive ?? !0}
840
+ ></sf-leaderboard-stat-card>
841
+ `
842
+ )}
843
+ </div>
844
+ </section>
845
+ ` : d;
846
+ }
847
+ };
848
+ re.styles = [b, f(or)];
849
+ Ne([
850
+ p({ attribute: !1 })
851
+ ], re.prototype, "section", 2);
852
+ re = Ne([
853
+ v(jt)
854
+ ], re);
855
+ function xe(t) {
856
+ return t >= 1e6 ? `$${(t / 1e6).toFixed(2)}M` : t >= 1e3 ? `$${(t / 1e3).toFixed(1)}K` : `$${t.toFixed(2)}`;
857
+ }
858
+ function Ue(t) {
859
+ return t.slice(0, 2).toUpperCase();
860
+ }
861
+ function dr(t) {
862
+ return t.streak >= 5 ? "🔥" : t.rank === 1 ? "👑" : "✌️";
863
+ }
864
+ function pr(t) {
865
+ return {
866
+ rank: t.rank,
867
+ initials: Ue(t.username),
868
+ username: t.username,
869
+ earnings: xe(t.totalWinnings),
870
+ winRate: `${t.winRate}% WR`,
871
+ badgeEmoji: dr(t)
872
+ };
873
+ }
874
+ function mr(t) {
875
+ return t.map(pr);
876
+ }
877
+ function hr(t) {
878
+ return o`<div class="card">
879
+ <div class="ambient-glow glow-gold"></div>
880
+ <div class="card-content">
881
+ <div class="podium-container">
882
+ <div class="player-column second">
883
+ <div class="avatar-wrapper">
884
+ <div class="avatar-ring silver"></div>
885
+ <div class="avatar silver">${t.second.initials}</div>
886
+ <span class="badge-emoji">${t.second.badgeEmoji}</span>
887
+ </div>
888
+ <div class="player-name">${t.second.username}</div>
889
+ <div class="player-earnings silver">${t.second.earnings}</div>
890
+ <div class="player-winrate">${t.second.winRate}</div>
891
+ <div class="podium-block second">
892
+ <span class="podium-number silver">2</span>
893
+ </div>
894
+ </div>
895
+
896
+ <div class="player-column first">
897
+ <div class="sparkles">
898
+ <span class="sparkle">✦</span>
899
+ <span class="sparkle">✦</span>
900
+ <span class="sparkle">✦</span>
901
+ </div>
902
+ <div class="avatar-wrapper">
903
+ <div class="avatar-ring gold"></div>
904
+ <div class="avatar gold">${t.first.initials}</div>
905
+ <span class="badge-emoji fire">${t.first.badgeEmoji}</span>
906
+ </div>
907
+ <div class="player-name">${t.first.username}</div>
908
+ <div class="player-earnings gold">${t.first.earnings}</div>
909
+ <div class="player-winrate">${t.first.winRate}</div>
910
+ <div class="podium-block first">
911
+ <span class="podium-number gold">1</span>
912
+ </div>
913
+ </div>
914
+
915
+ <div class="player-column third">
916
+ <div class="avatar-wrapper">
917
+ <div class="avatar-ring bronze"></div>
918
+ <div class="avatar bronze">${t.third.initials}</div>
919
+ <span class="badge-emoji">${t.third.badgeEmoji}</span>
920
+ </div>
921
+ <div class="player-name">${t.third.username}</div>
922
+ <div class="player-earnings bronze">${t.third.earnings}</div>
923
+ <div class="player-winrate">${t.third.winRate}</div>
924
+ <div class="podium-block third">
925
+ <span class="podium-number bronze">3</span>
926
+ </div>
927
+ </div>
928
+ </div>
929
+ </div>
930
+ </div>
931
+ `;
932
+ }
933
+ const gr = ':host{display:flex;width:100%;height:100%;min-height:0}.card{padding:var(--surface-padding) clamp(14px,2vw,24px) var(--surface-padding);width:100%;max-width:100%;min-width:0;height:100%;flex:1;display:flex;flex-direction:column}.card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:conic-gradient(from 0deg,transparent,rgba(var(--primary-rgb),.04),transparent,rgba(var(--gold-rgb),.04),transparent);animation:rotate 12s linear infinite}@keyframes rotate{to{transform:rotate(360deg)}}.card-content{position:relative;z-index:1;flex:1;min-height:0;display:flex;flex-direction:column;padding-top:clamp(28px,12%,52px)}.podium-container{flex:1;min-height:0;display:flex;align-items:stretch;justify-content:center;gap:clamp(6px,1.5vw,14px)}.player-column{flex:1;max-width:clamp(88px,14vw,160px);min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-height:0}.player-column.first{order:2;max-width:clamp(96px,16vw,180px)}.player-column.second{order:1}.player-column.third{order:3}.avatar-wrapper,.player-name,.player-earnings,.player-winrate,.sparkles{flex-shrink:0}.sparkles{position:relative;height:clamp(14px,3vh,22px);width:clamp(40px,8vw,56px);margin-bottom:clamp(2px,.5vh,4px);flex-shrink:0}.sparkle{position:absolute;font-size:clamp(10px,1.8vw,14px);animation:sparkle 1.5s ease-in-out infinite}.sparkle:nth-child(1){left:10px;top:5px;animation-delay:0s}.sparkle:nth-child(2){left:25px;top:0;animation-delay:.3s}.sparkle:nth-child(3){left:40px;top:8px;animation-delay:.6s}@keyframes sparkle{0%,to{opacity:1;transform:scale(1) rotate(0)}50%{opacity:.4;transform:scale(1.3) rotate(180deg)}}.avatar-wrapper{position:relative;margin-bottom:clamp(4px,.8vh,8px)}.avatar{width:clamp(40px,7vw,56px);height:clamp(40px,7vw,56px);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:clamp(14px,2.5vw,18px);font-weight:700;position:relative;z-index:2;transition:transform .3s ease}.player-column.first .avatar{width:clamp(44px,8vw,64px);height:clamp(44px,8vw,64px);font-size:clamp(15px,2.8vw,22px)}.avatar:hover{transform:scale(1.08)}.avatar.gold{background:var(--medal-gold-gradient);color:var(--medal-avatar-fg);box-shadow:0 0 30px var(--medal-gold-glow)}.avatar.silver{background:var(--medal-silver-gradient);color:var(--medal-avatar-fg);box-shadow:0 0 20px var(--medal-silver-glow)}.avatar.bronze{background:var(--medal-bronze-gradient);color:var(--medal-avatar-fg);box-shadow:0 0 20px var(--medal-bronze-glow)}.avatar-ring{position:absolute;inset:-5px;border-radius:50%;border:2px solid;animation:ring-pulse 2.5s ease-in-out infinite}.avatar-ring.gold{border-color:var(--medal-gold-border)}.avatar-ring.silver{border-color:var(--medal-silver-border)}.avatar-ring.bronze{border-color:var(--medal-bronze-border)}@keyframes ring-pulse{0%,to{transform:scale(1);opacity:.6}50%{transform:scale(1.15);opacity:.2}}.badge-emoji{position:absolute;bottom:-3px;right:-3px;font-size:clamp(12px,2vw,16px);z-index:3;animation:badge-bounce 2s ease-in-out infinite}.badge-emoji.fire{animation:fire-pulse .6s ease-in-out infinite alternate}@keyframes badge-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes fire-pulse{0%{transform:scale(1)}to{transform:scale(1.2)}}.player-name{font-size:clamp(10px,1.6vw,13px);font-weight:700;color:var(--foreground);margin-bottom:2px;text-align:center;line-height:1.2;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-earnings{font-size:clamp(11px,1.8vw,15px);font-weight:700;margin-bottom:2px;text-align:center;line-height:1.2}.player-earnings.gold{color:var(--gold);text-shadow:0 0 15px rgba(var(--gold-rgb),.5)}.player-earnings.silver{color:var(--silver)}.player-earnings.bronze{color:var(--bronze)}.player-winrate{font-size:clamp(9px,1.4vw,11px);color:var(--muted-foreground);margin-bottom:clamp(4px,.8vh,8px);text-align:center;line-height:1.2}.podium-block{flex:0 0 auto;width:100%;display:flex;align-items:center;justify-content:center;border-radius:12px 12px 0 0;position:relative;overflow:hidden;transition:transform .3s ease}.podium-block.first{height:50%;min-height:clamp(80px,12vh,190px)}.podium-block.second{height:36%;min-height:clamp(58px,9vh,140px)}.podium-block.third{height:26%;min-height:clamp(42px,7vh,105px)}.podium-block:hover{transform:translateY(-3px)}.podium-block:before{content:"";position:absolute;inset:0;opacity:.1;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 100%)}.podium-block.first{background:var(--place-first-podium-slot, #ffd700);border:2px solid color-mix(in srgb,var(--place-first-podium-slot, #ffd700) 55%,transparent);border-bottom:none;box-shadow:0 0 32px color-mix(in srgb,var(--place-first-podium-slot, #ffd700) 15%,transparent)}.podium-block.second{background:var(--place-second-podium-slot, #c0c0c0);border:2px solid color-mix(in srgb,var(--place-second-podium-slot, #c0c0c0) 45%,transparent);border-bottom:none;box-shadow:0 0 24px color-mix(in srgb,var(--place-second-podium-slot, #c0c0c0) 12%,transparent)}.podium-block.third{background:var(--place-third-podium-slot, #cd7f32);border:2px solid color-mix(in srgb,var(--place-third-podium-slot, #cd7f32) 45%,transparent);border-bottom:none;box-shadow:0 0 24px color-mix(in srgb,var(--place-third-podium-slot, #cd7f32) 12%,transparent)}.podium-number{font-size:clamp(28px,6vw,48px);font-weight:800;opacity:.4;letter-spacing:-2px;line-height:1}.player-column.first .podium-number{font-size:clamp(32px,7vw,56px)}.podium-number.gold{color:var(--place-first-podium-number, #ffd700)}.podium-number.silver{color:var(--place-second-podium-number, #c0c0c0)}.podium-number.bronze{color:var(--place-third-podium-number, #cd7f32)}.ambient-glow{position:absolute;width:clamp(120px,40%,200px);height:clamp(120px,40%,200px);border-radius:50%;filter:blur(60px);opacity:.15;pointer-events:none;z-index:0}.glow-gold{background:var(--gold);top:8%;left:50%;transform:translate(-50%);animation:glow-pulse 4s ease-in-out infinite}@keyframes glow-pulse{0%,to{opacity:.15}50%{opacity:.25}}@media(min-width:1024px){.card-content{padding-top:clamp(32px,14%,56px)}.podium-block.first{height:54%;min-height:clamp(92px,13vh,210px)}.podium-block.second{height:38%;min-height:clamp(66px,10vh,155px)}.podium-block.third{height:28%;min-height:clamp(48px,8vh,118px)}.podium-number{font-size:clamp(36px,5vw,52px)}.player-column.first .podium-number{font-size:clamp(42px,6vw,64px)}}@media(min-width:1280px){.podium-container{gap:clamp(10px,1.5vw,20px)}.player-column{max-width:clamp(100px,12vw,180px)}.player-column.first{max-width:clamp(110px,14vw,200px)}.podium-block.first{height:56%;min-height:clamp(100px,14vh,230px)}.podium-block.second{height:40%;min-height:clamp(72px,11vh,168px)}.podium-block.third{height:30%;min-height:clamp(52px,8vh,128px)}.podium-number{font-size:clamp(40px,4.5vw,60px)}.player-column.first .podium-number{font-size:clamp(48px,5.5vw,72px)}}@media(max-width:1023px){.podium-block.first{min-height:clamp(64px,10vh,120px)}.podium-block.second{min-height:clamp(48px,8vh,95px)}.podium-block.third{min-height:clamp(36px,6vh,75px)}.player-column{max-width:clamp(72px,22vw,120px)}.player-column.first{max-width:clamp(80px,24vw,140px)}}@media(max-width:639px){.card{border-radius:18px;padding:clamp(8px,2vw,12px) clamp(10px,3vw,16px)}.card-content{padding-top:clamp(18px,8%,32px)}.podium-container{gap:clamp(4px,1.5vw,8px)}.player-column{max-width:clamp(64px,28vw,100px)}.player-column.first{max-width:clamp(72px,30vw,110px)}.podium-block.first{height:48%;min-height:clamp(56px,12dvh,100px)}.podium-block.second{height:34%;min-height:clamp(42px,9dvh,80px)}.podium-block.third{height:24%;min-height:clamp(32px,7dvh,65px)}.podium-number{font-size:clamp(22px,6vw,36px)}.player-column.first .podium-number{font-size:clamp(26px,7vw,42px)}.avatar{width:clamp(34px,9vw,44px);height:clamp(34px,9vw,44px);font-size:clamp(12px,3vw,14px)}.player-column.first .avatar{width:clamp(38px,10vw,48px);height:clamp(38px,10vw,48px)}.player-name{font-size:clamp(9px,2.4vw,11px)}.player-earnings{font-size:clamp(10px,2.6vw,12px)}}@media(max-width:380px){.player-column{max-width:30vw}.player-column.first{max-width:34vw}.sparkle:nth-child(2){left:18px}.sparkle:nth-child(3){left:30px}}';
934
+ var ur = Object.defineProperty, fr = Object.getOwnPropertyDescriptor, Ie = (t, e, r, i) => {
935
+ for (var a = i > 1 ? void 0 : i ? fr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
936
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
937
+ return i && a && ur(e, r, a), a;
938
+ };
939
+ let ae = class extends u {
940
+ constructor() {
941
+ super(...arguments), this.players = [];
942
+ }
943
+ entryByRank(t) {
944
+ return mr(this.players).find((e) => e.rank === t);
945
+ }
946
+ get first() {
947
+ return this.entryByRank(1);
948
+ }
949
+ get second() {
950
+ return this.entryByRank(2);
951
+ }
952
+ get third() {
953
+ return this.entryByRank(3);
954
+ }
955
+ get hasPodium() {
956
+ return this.players.length >= 3 && this.entryByRank(1) !== void 0 && this.entryByRank(2) !== void 0 && this.entryByRank(3) !== void 0;
957
+ }
958
+ render() {
959
+ return this.hasPodium ? hr(this) : o``;
960
+ }
961
+ };
962
+ ae.styles = [b, f(gr)];
963
+ Ie([
964
+ p({ type: Array })
965
+ ], ae.prototype, "players", 2);
966
+ ae = Ie([
967
+ v(Rt)
968
+ ], ae);
969
+ function vr(t) {
970
+ return o`<div class="card">
971
+ <div class="card-content">
972
+ <div class="card-top">
973
+ <div class="rank-section">
974
+ <div class="rank-container">
975
+ <div class="rank-glow"></div>
976
+ <div class="rank-ring"></div>
977
+ <div class="rank-ring rank-ring-2"></div>
978
+ <span class="rank-number">#${t.rank}</span>
979
+ </div>
980
+ <p class="percentile-badge">
981
+ <span class="percentile-icon" aria-hidden="true">🏆</span>
982
+ <span class="percentile-text"
983
+ >Top ${t.percentile}% of players</span
984
+ >
985
+ </p>
986
+ </div>
987
+
988
+ <div class="avatar-section">
989
+ <div class="avatar">${t.initials}</div>
990
+ <div class="avatar-info">
991
+ <div class="avatar-name">${t.username}</div>
992
+ <div class="avatar-earnings">${t.earnings}</div>
993
+ </div>
994
+ <div class="level-badge">LVL ${t.level}</div>
995
+ </div>
996
+ </div>
997
+
998
+ <div class="stats-grid">
999
+ <div class="stat-item">
1000
+ <div class="stat-main">
1001
+ <span class="stat-value highlight">${t.winRate}%</span>
1002
+ <span class="stat-label">Win Rate</span>
1003
+ </div>
1004
+ </div>
1005
+ <div class="stat-item">
1006
+ <div class="stat-main">
1007
+ <span class="stat-value">${t.gamesPlayed.toLocaleString()}</span>
1008
+ <span class="stat-label">Games Played</span>
1009
+ </div>
1010
+ </div>
1011
+ <div class="stat-item">
1012
+ <div class="stat-main">
1013
+ <span class="stat-value streak">
1014
+ <span class="fire-icon">🔥</span> ${t.winStreak}
1015
+ </span>
1016
+ <span class="stat-label">Win Streak</span>
1017
+ </div>
1018
+ </div>
1019
+ <div class="stat-item">
1020
+ <div class="stat-main">
1021
+ <span class="stat-value">⭐ 4.8</span>
1022
+ <span class="stat-label">Rating</span>
1023
+ </div>
1024
+ </div>
1025
+ </div>
1026
+ </div>
1027
+ </div>
1028
+ `;
1029
+ }
1030
+ const br = '@charset "UTF-8";:host{display:flex;width:100%;height:100%;min-height:0}.card{padding:var(--surface-padding);width:100%;max-width:100%;height:100%;flex:1;display:flex;flex-direction:column}.card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:conic-gradient(from 0deg,transparent,rgba(var(--primary-rgb),.04),transparent,rgba(var(--primary-rgb),.03),transparent);animation:rotate 8s linear infinite}@keyframes rotate{to{transform:rotate(360deg)}}.card-content{position:relative;z-index:1;flex:1;min-height:0;height:100%;display:flex;flex-direction:column;gap:clamp(6px,1.1vh,10px);overflow:hidden}.card-top{display:flex;flex-direction:column;gap:clamp(6px,1.1vh,10px);flex-shrink:0}.rank-section{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:clamp(8px,1.5vw,12px);flex-shrink:0;width:100%}.rank-container{position:relative;display:flex;align-items:center;justify-content:center;grid-row:1/-1;width:clamp(60px,11vw,76px);height:clamp(60px,11vw,76px);flex-shrink:0}.rank-glow{position:absolute;width:100%;height:100%;background:radial-gradient(circle,var(--accent-glow) 0%,transparent 70%);border-radius:50%;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(1);opacity:.6}50%{transform:scale(1.15);opacity:1}}.rank-ring{position:absolute;width:86%;height:86%;border:2px solid var(--accent-border);border-radius:50%;animation:ring-pulse 3s ease-in-out infinite}.rank-ring-2{width:72%;height:72%;animation-delay:.5s}@keyframes ring-pulse{0%,to{transform:scale(1);opacity:.3}50%{transform:scale(1.1);opacity:.6}}.rank-number{font-size:clamp(24px,4.8vw,34px);font-weight:800;color:var(--primary);text-shadow:var(--accent-text-glow);z-index:2;line-height:1;animation:glow 2s ease-in-out infinite alternate}@keyframes glow{0%{text-shadow:var(--accent-text-glow)}to{text-shadow:0 0 24px rgba(var(--primary-rgb),.9),0 0 40px rgba(var(--primary-rgb),.45)}}.percentile-badge{margin:0;padding:clamp(6px,1vh,8px) clamp(8px,1.5vw,10px);background:linear-gradient(135deg,var(--accent-soft-strong) 0%,var(--accent-soft) 100%);border-color:var(--accent-border);color:var(--primary);font-size:clamp(10px,1.5vw,11px);font-weight:600;letter-spacing:.2px;line-height:1.25;display:flex;align-items:flex-start;gap:6px;min-width:0}.percentile-icon{flex-shrink:0;line-height:1.25}.percentile-text{min-width:0}.stats-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:clamp(8px,1.4vw,10px);flex:1;min-height:0}.stat-main{display:contents}.stat-item{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:clamp(8px,1.4vw,12px) clamp(8px,1.2vw,10px);text-align:center;transition:all var(--transition-base);min-width:0;min-height:0}.stat-value{font-size:clamp(15px,2.8vw,20px);font-weight:700;color:var(--foreground);margin-bottom:4px;line-height:1.2}.stat-value.highlight{color:var(--gold);text-shadow:0 0 10px rgba(var(--gold-rgb),.45)}.stat-value.streak{color:var(--destructive);display:flex;align-items:center;justify-content:center;gap:4px}.stat-label{font-size:clamp(10px,1.6vw,11px);color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.6px}.fire-icon{display:inline-block;animation:fire .5s ease-in-out infinite alternate}@keyframes fire{0%{transform:scale(1)}to{transform:scale(1.15)}}.avatar-section{display:flex;align-items:center;gap:clamp(8px,1.5vw,10px);padding:clamp(8px,1.5vw,10px);flex-shrink:0}.avatar{width:clamp(36px,7vw,44px);height:clamp(36px,7vw,44px);font-size:clamp(12px,2.2vw,14px);background:var(--accent-gradient);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--primary-foreground);position:relative;flex-shrink:0}.avatar:after{content:"";position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--accent-border);animation:avatar-pulse 2s ease-in-out infinite}@keyframes avatar-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.08);opacity:.5}}.avatar-info{flex:1;min-width:0}.avatar-name{font-size:clamp(12px,2.2vw,14px);font-weight:700;color:var(--foreground);margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar-earnings{font-size:clamp(11px,2vw,13px);color:var(--primary);font-weight:600}.level-badge{background:linear-gradient(135deg,var(--gold) 0%,var(--bronze) 100%);color:var(--primary-foreground);padding:3px 8px;border-radius:20px;font-size:clamp(9px,1.6vw,10px);font-weight:700;flex-shrink:0}@media(min-width:1080px)and (max-width:1399px){:host{height:auto;min-height:0;align-self:stretch}.card{height:auto;min-height:100%}.card-content{height:auto;flex:0 1 auto}.stats-grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:auto;flex:0 0 auto;gap:clamp(4px,1vw,6px)}.stat-item{flex-direction:column;align-items:stretch;justify-content:center;padding:clamp(5px,1.2vw,8px) clamp(3px,.8vw,5px);border-radius:var(--inset-radius)}.stat-main{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:2px 4px;line-height:1.2}.stat-value{margin-bottom:0;font-size:clamp(10px,2.2vw,12px);white-space:nowrap}.stat-value.streak{gap:2px}.stat-label{font-size:clamp(8px,1.6vw,9px);text-transform:none;letter-spacing:0;color:var(--muted-foreground);white-space:nowrap}.fire-icon{font-size:10px}}@media(min-width:677px)and (max-width:1079px){:host{height:auto;min-height:0;align-self:stretch}.card{height:auto;min-height:100%;overflow:hidden}.card-content{height:auto;min-height:0;flex:1 1 auto;overflow:visible}.card-top{flex-shrink:0}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,auto);flex:0 0 auto;min-height:0;gap:clamp(8px,1.2vw,12px);align-content:start}.stat-main{display:contents}.stat-item{flex-direction:column;align-items:center;justify-content:center;min-height:80px;height:auto;padding:clamp(10px,1.5vw,14px) clamp(10px,1.2vw,12px);border-radius:var(--inset-radius)}.stat-value{margin-bottom:4px;font-size:clamp(15px,2.6vw,20px);white-space:normal}.stat-label{font-size:clamp(10px,1.5vw,11px);text-transform:uppercase;letter-spacing:.6px;color:var(--muted-foreground);white-space:normal}.stat-item{min-height:88px}}@media(min-width:1400px){:host{height:auto;min-height:0;align-self:stretch}.card{height:auto;min-height:100%;overflow:hidden}.card-content{height:auto;min-height:0;flex:1 1 auto;overflow:visible}.card-top{flex-shrink:0}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,auto);flex:0 0 auto;min-height:0;gap:clamp(8px,1.2vw,12px);align-content:start}.stat-main{display:contents}.stat-item{flex-direction:column;align-items:center;justify-content:center;min-height:80px;height:auto;padding:clamp(10px,1.5vw,14px) clamp(10px,1.2vw,12px);border-radius:var(--inset-radius)}.stat-value{margin-bottom:4px;font-size:clamp(15px,2.6vw,20px);white-space:normal}.stat-label{font-size:clamp(10px,1.5vw,11px);text-transform:uppercase;letter-spacing:.6px;color:var(--muted-foreground);white-space:normal}}@media(max-width:676px){:host{height:auto;min-height:0;align-self:stretch}.card{height:auto;min-height:0;padding:clamp(14px,4vw,18px);border-radius:var(--surface-radius)}.card-content{height:auto;min-height:0;flex:0 1 auto;gap:clamp(12px,3vw,16px);overflow:visible}.card-top{gap:clamp(14px,3.4vw,18px)}.rank-section{display:flex;flex-direction:column;align-items:center;gap:clamp(12px,3vw,14px);width:100%}.rank-container{width:clamp(84px,22vw,100px);height:clamp(84px,22vw,100px)}.rank-number{font-size:clamp(30px,8vw,38px)}.percentile-badge{width:100%;max-width:100%;justify-content:center;align-items:center;text-align:center;padding:clamp(10px,2.6vw,12px) clamp(14px,3.6vw,18px);font-size:clamp(12px,3.2vw,13px);border-radius:var(--radius-sm);line-height:1.35}.percentile-icon{font-size:clamp(14px,3.6vw,16px)}.percentile-text{text-align:center}.avatar-section{width:100%;padding:clamp(12px,3.2vw,14px);gap:clamp(12px,3vw,14px);border-radius:var(--inset-radius)}.avatar{width:clamp(44px,12vw,52px);height:clamp(44px,12vw,52px);font-size:clamp(14px,3.6vw,16px)}.avatar-name{font-size:clamp(15px,4vw,17px);white-space:normal;line-height:1.25}.avatar-earnings{font-size:clamp(13px,3.6vw,15px)}.level-badge{padding:clamp(5px,1.4vw,7px) clamp(10px,2.4vw,12px);font-size:clamp(10px,2.6vw,11px)}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,auto);flex:0 0 auto;gap:clamp(8px,2.2vw,10px);width:100%}.stat-main{display:contents}.stat-item{flex-direction:column;align-items:center;justify-content:center;min-height:clamp(68px,18vw,80px);padding:clamp(10px,2.8vw,12px) clamp(8px,2vw,10px);border-radius:var(--inset-radius)}.stat-value{margin-bottom:clamp(4px,1vw,6px);font-size:clamp(16px,4.2vw,20px);line-height:1.15;white-space:normal}.stat-label{font-size:clamp(9px,2.4vw,10px);text-transform:uppercase;letter-spacing:.05em;line-height:1.25;text-align:center}}@media(max-width:380px){.card{padding:12px}.rank-container{width:76px;height:76px}.rank-number{font-size:26px}.avatar{width:42px;height:42px}.stat-item{min-height:62px;padding:8px 6px}.stat-value{font-size:15px}}@media(min-width:1024px){.card{border-radius:20px}}';
1031
+ var xr = Object.defineProperty, wr = Object.getOwnPropertyDescriptor, y = (t, e, r, i) => {
1032
+ for (var a = i > 1 ? void 0 : i ? wr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1033
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1034
+ return i && a && xr(e, r, a), a;
1035
+ };
1036
+ let x = class extends u {
1037
+ constructor() {
1038
+ super(...arguments), this.rank = 42, this.percentile = 5, this.username = "CyberNinja", this.earnings = "$847.2K", this.winRate = 71, this.gamesPlayed = 1284, this.winStreak = 7, this.level = 47;
1039
+ }
1040
+ get initials() {
1041
+ return this.username.slice(0, 2).toUpperCase();
1042
+ }
1043
+ render() {
1044
+ return vr(this);
1045
+ }
1046
+ };
1047
+ x.styles = [b, f(br)];
1048
+ y([
1049
+ p({ type: Number })
1050
+ ], x.prototype, "rank", 2);
1051
+ y([
1052
+ p({ type: Number })
1053
+ ], x.prototype, "percentile", 2);
1054
+ y([
1055
+ p({ type: String })
1056
+ ], x.prototype, "username", 2);
1057
+ y([
1058
+ p({ type: String })
1059
+ ], x.prototype, "earnings", 2);
1060
+ y([
1061
+ p({ type: Number })
1062
+ ], x.prototype, "winRate", 2);
1063
+ y([
1064
+ p({ type: Number })
1065
+ ], x.prototype, "gamesPlayed", 2);
1066
+ y([
1067
+ p({ type: Number })
1068
+ ], x.prototype, "winStreak", 2);
1069
+ y([
1070
+ p({ type: Number })
1071
+ ], x.prototype, "level", 2);
1072
+ x = y([
1073
+ v(Dt)
1074
+ ], x);
1075
+ const yr = ".section{margin-bottom:clamp(1.5rem,5vw,3rem);min-width:0}.section-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.section-title{font-size:1.125rem;font-weight:700;margin:0}.elite-badge{font-size:.65rem;padding:.2rem .5rem;border-radius:var(--radius-sm);background:var(--medal-gold-bg);border:1px solid var(--medal-gold-border);color:var(--gold);font-weight:600;letter-spacing:.04em;text-transform:uppercase}@media(max-width:639px){.section-title{font-size:1rem}}:host{display:block;width:100%}.ranking-section{--ranking-podium-min-h: clamp(300px, min(36vh, 36dvh), 420px);--ranking-player-stats-min-h: clamp(300px, min(36vh, 36dvh), 420px)}.ranking-grid{display:grid;grid-template-columns:1fr;gap:clamp(.75rem,2vw,1rem);width:100%;align-items:stretch}@media(min-width:1080px){.ranking-grid.has-pair{grid-template-columns:minmax(0,1.38fr) minmax(0,.82fr);min-height:var(--ranking-podium-min-h)}}.ranking-column{display:flex;flex-direction:column;min-width:0;min-height:0}.ranking-column--player-stats{min-height:var(--ranking-player-stats-min-h)}.ranking-column--player-stats sf-leaderboard-player-stats-card{flex:1 1 auto;width:100%;min-height:0}.podium-slot{display:flex;flex:1 1 auto;min-width:0;min-height:var(--ranking-podium-min-h);overflow:hidden}.podium-slot>sf-leaderboard-podium{flex:1 1 auto;width:100%;height:100%;min-height:100%}@media(max-width:1079px){.ranking-section{--ranking-podium-min-h: clamp(280px, min(38vh, 38dvh), 400px);--ranking-player-stats-min-h: clamp(280px, min(34vh, 34dvh), 360px)}}@media(min-width:677px)and (max-width:1079px){.ranking-section{--ranking-player-stats-min-h: clamp(360px, min(42vh, 42dvh), 440px)}}@media(max-width:676px){.ranking-column--player-stats{min-height:0;height:auto}}@media(min-width:1280px){.ranking-section{--ranking-podium-min-h: clamp(340px, min(38vh, 38dvh), 460px);--ranking-player-stats-min-h: clamp(340px, min(38vh, 38dvh), 460px)}}@media(max-width:639px){.ranking-section{--ranking-podium-min-h: clamp(280px, min(44dvh, 46vh), 360px);--ranking-player-stats-min-h: clamp(240px, min(34dvh, 36vh), 288px)}}@media(max-width:380px){.ranking-section{--ranking-podium-min-h: clamp(268px, 48dvh, 340px);--ranking-player-stats-min-h: clamp(248px, 44dvh, 300px)}}";
1076
+ var $r = Object.defineProperty, _r = Object.getOwnPropertyDescriptor, we = (t, e, r, i) => {
1077
+ for (var a = i > 1 ? void 0 : i ? _r(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1078
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1079
+ return i && a && $r(e, r, a), a;
1080
+ };
1081
+ let G = class extends u {
1082
+ constructor() {
1083
+ super(...arguments), this.lookupPlayers = [];
1084
+ }
1085
+ get hasPair() {
1086
+ return this.ranking?.podium != null && this.ranking?.playerStats != null;
1087
+ }
1088
+ resolvePlayer(t) {
1089
+ return this.lookupPlayers.find((e) => e.rank === t.rank);
1090
+ }
1091
+ renderPlayerStatsCard(t) {
1092
+ const e = this.resolvePlayer(t), r = t.message?.match(/(\d+)\s*%/), i = t.percentile ?? (r ? Number(r[1]) : 5);
1093
+ return o`
1094
+ <sf-leaderboard-player-stats-card
1095
+ rank="${t.rank}"
1096
+ percentile="${i}"
1097
+ username="${t.username ?? e?.username ?? "You"}"
1098
+ earnings="${t.earnings ?? (e ? xe(e.totalWinnings) : "$0")}"
1099
+ winRate="${t.winRate ?? e?.winRate ?? 0}"
1100
+ gamesPlayed="${t.gamesPlayed ?? e?.gamesPlayed ?? 0}"
1101
+ winStreak="${t.winStreak ?? e?.streak ?? 0}"
1102
+ level="${t.level ?? e?.level ?? 0}"
1103
+ ></sf-leaderboard-player-stats-card>
1104
+ `;
1105
+ }
1106
+ render() {
1107
+ if (!Kt(this.ranking)) return d;
1108
+ const { podium: t, playerStats: e } = this.ranking;
1109
+ return o`
1110
+ <section class="section ranking-section">
1111
+ <div class="ranking-grid ${this.hasPair ? "has-pair" : "single"}">
1112
+ ${t ? o`
1113
+ <div class="ranking-column ranking-column--podium">
1114
+ <div class="section-header">
1115
+ <h2 class="section-title">
1116
+ ${t.title ?? "Top Champions"}
1117
+ </h2>
1118
+ ${t.badge ? o`<span class="elite-badge">${t.badge}</span>` : d}
1119
+ </div>
1120
+ <div class="podium-slot">
1121
+ <sf-leaderboard-podium
1122
+ .players=${t.players}
1123
+ ></sf-leaderboard-podium>
1124
+ </div>
1125
+ </div>
1126
+ ` : d}
1127
+ ${e ? o`
1128
+ <div class="ranking-column ranking-column--player-stats">
1129
+ <div class="section-header">
1130
+ <h2 class="section-title">
1131
+ ${e.title ?? "Your Position"}
1132
+ </h2>
1133
+ </div>
1134
+ ${this.renderPlayerStatsCard(e)}
1135
+ </div>
1136
+ ` : d}
1137
+ </div>
1138
+ </section>
1139
+ `;
1140
+ }
1141
+ };
1142
+ G.styles = [b, f(yr)];
1143
+ we([
1144
+ p({ attribute: !1 })
1145
+ ], G.prototype, "ranking", 2);
1146
+ we([
1147
+ p({ attribute: !1 })
1148
+ ], G.prototype, "lookupPlayers", 2);
1149
+ G = we([
1150
+ v(Bt)
1151
+ ], G);
1152
+ function kr(t) {
1153
+ return o`<div class="filters">
1154
+ <div class="search-wrapper">
1155
+ <span class="search-icon">🔍</span>
1156
+ <input
1157
+ type="text"
1158
+ class="search-input"
1159
+ placeholder="Search players..."
1160
+ .value="${t.searchQuery}"
1161
+ @input="${t.handleSearchInput}"
1162
+ />
1163
+ </div>
1164
+
1165
+ <div class="timeframe-tabs">${t.renderTimeframeTabs()}</div>
1166
+
1167
+ <select
1168
+ class="category-select"
1169
+ .value="${t.activeCategory}"
1170
+ @change="${t.handleCategoryChange}"
1171
+ >
1172
+ ${t.renderCategoryOptions()}
1173
+ </select>
1174
+ </div>
1175
+ `;
1176
+ }
1177
+ const Ar = ":host{display:block}.filters{display:flex;flex-direction:column;gap:.75rem;width:100%;min-width:0}@media(min-width:640px){.filters{flex-direction:row;flex-wrap:wrap;align-items:center;gap:1rem}}.search-wrapper{position:relative;flex:1}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted-foreground);font-size:.875rem}.search-input{width:100%;padding:.625rem 1rem .625rem 2.5rem;border-radius:var(--radius-sm);border:1px solid var(--surface-border-color);background:var(--inset-bg);color:var(--foreground);font-size:.875rem;font-family:inherit;outline:none;transition:border-color .2s ease}.search-input::placeholder{color:var(--muted-foreground)}.search-input:focus{border-color:var(--primary)}.timeframe-tabs{display:flex;align-items:center;gap:4px;padding:4px;background:var(--inset-bg);border:1px solid var(--inset-border);border-radius:var(--radius-sm);width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}@media(min-width:640px){.timeframe-tabs{width:auto;overflow-x:visible}}.tab-btn{padding:.375rem .75rem;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--muted-foreground);font-size:.75rem;font-weight:500;font-family:inherit;cursor:pointer;transition:all .2s ease}.tab-btn:hover{color:var(--foreground)}.tab-btn.active{background:var(--accent-gradient);color:var(--primary-foreground);box-shadow:var(--surface-shadow)}.category-select{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:var(--radius-sm);border:1px solid var(--surface-border-color);background:var(--surface-gradient);color:var(--foreground);font-size:.875rem;font-family:inherit;cursor:pointer;outline:none;width:100%;min-width:0;max-width:100%}@media(min-width:640px){.category-select{width:auto;min-width:140px}}.category-select:focus{border-color:var(--primary)}";
1178
+ var Er = Object.defineProperty, Sr = Object.getOwnPropertyDescriptor, ce = (t, e, r, i) => {
1179
+ for (var a = i > 1 ? void 0 : i ? Sr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1180
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1181
+ return i && a && Er(e, r, a), a;
1182
+ };
1183
+ let L = class extends u {
1184
+ constructor() {
1185
+ super(...arguments), this.activeTimeframe = K, this.activeCategory = Q, this.searchQuery = "";
1186
+ }
1187
+ emit(t, e) {
1188
+ this.dispatchEvent(
1189
+ new CustomEvent(t, { detail: e, bubbles: !0, composed: !0 })
1190
+ );
1191
+ }
1192
+ handleSearchInput(t) {
1193
+ const e = t.target;
1194
+ this.emit(fe, e.value);
1195
+ }
1196
+ handleTimeframeClick(t) {
1197
+ this.emit(ge, t);
1198
+ }
1199
+ handleCategoryChange(t) {
1200
+ const e = t.target;
1201
+ this.emit(ue, e.value);
1202
+ }
1203
+ renderTimeframeTabs() {
1204
+ return o`${Wt.map(
1205
+ (t) => o`
1206
+ <button
1207
+ class="tab-btn ${this.activeTimeframe === t.value ? "active" : ""}"
1208
+ @click="${() => this.handleTimeframeClick(t.value)}"
1209
+ >
1210
+ ${t.label}
1211
+ </button>
1212
+ `
1213
+ )}`;
1214
+ }
1215
+ renderCategoryOptions() {
1216
+ return o`${Yt.map(
1217
+ (t) => o`<option value="${t.value}">${t.label}</option>`
1218
+ )}`;
1219
+ }
1220
+ render() {
1221
+ return kr(this);
1222
+ }
1223
+ };
1224
+ L.styles = [b, f(Ar)];
1225
+ ce([
1226
+ p({ type: String })
1227
+ ], L.prototype, "activeTimeframe", 2);
1228
+ ce([
1229
+ p({ type: String })
1230
+ ], L.prototype, "activeCategory", 2);
1231
+ ce([
1232
+ p({ type: String })
1233
+ ], L.prototype, "searchQuery", 2);
1234
+ L = ce([
1235
+ v(zt)
1236
+ ], L);
1237
+ function Pr(t) {
1238
+ return o`<div class="badge ${t.size} ${t.rankClass}">
1239
+ ${t.renderRankContent()}
1240
+ </div>
1241
+ ${t.renderTrend()}
1242
+ `;
1243
+ }
1244
+ const zr = ":host{display:inline-flex;align-items:center;gap:.5rem}.badge{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--inset-radius);border:2px solid;font-family:var(--font-mono);font-weight:700;transition:all .3s ease}.badge.sm{width:32px;height:32px;font-size:.75rem}.badge.md{width:48px;height:48px;font-size:1rem}.badge.lg{width:64px;height:64px;font-size:1.25rem}.badge.rank-1{background:color-mix(in srgb,var(--place-first-table-icon, #ffd700) 22%,transparent);border-color:var(--place-first-table-icon, #ffd700);color:var(--place-first-table-icon, #ffd700);box-shadow:0 0 20px color-mix(in srgb,var(--place-first-table-icon, #ffd700) 35%,transparent)}.badge.rank-2{background:color-mix(in srgb,var(--place-second-table-icon, #c0c0c0) 18%,transparent);border-color:var(--place-second-table-icon, #c0c0c0);color:var(--place-second-table-icon, #c0c0c0);box-shadow:0 0 20px color-mix(in srgb,var(--place-second-table-icon, #c0c0c0) 30%,transparent)}.badge.rank-3{background:color-mix(in srgb,var(--place-third-table-icon, #cd7f32) 18%,transparent);border-color:var(--place-third-table-icon, #cd7f32);color:var(--place-third-table-icon, #cd7f32);box-shadow:0 0 20px color-mix(in srgb,var(--place-third-table-icon, #cd7f32) 30%,transparent)}.badge.rank-other{background:var(--color-base-2, #00114f);border-color:var(--color-base-2, #00114f);color:var(--color-surface-muted, #808090)}.icon{font-size:1em;line-height:1}.rank-number{font-size:.65em;margin-top:2px}.trend{display:flex;align-items:center;gap:2px;font-size:.75rem;font-weight:500}.trend.up{color:var(--color-success, #00d26a)}.trend.down{color:var(--color-error, #ff4757)}.trend.same{color:var(--color-surface-muted, #808090)}.trend-icon{font-size:.75rem}";
1245
+ var Cr = Object.defineProperty, Rr = Object.getOwnPropertyDescriptor, J = (t, e, r, i) => {
1246
+ for (var a = i > 1 ? void 0 : i ? Rr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1247
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1248
+ return i && a && Cr(e, r, a), a;
1249
+ };
1250
+ let C = class extends u {
1251
+ constructor() {
1252
+ super(...arguments), this.rank = 1, this.size = "md", this.showTrend = !0;
1253
+ }
1254
+ get rankClass() {
1255
+ return this.rank <= 3 ? `rank-${this.rank}` : "rank-other";
1256
+ }
1257
+ getIcon() {
1258
+ return this.rank === 1 ? "👑" : this.rank === 2 ? "🥈" : this.rank === 3 ? "🥉" : "";
1259
+ }
1260
+ getTrend() {
1261
+ if (!this.previousRank || !this.showTrend) return null;
1262
+ const t = this.previousRank - this.rank;
1263
+ return t > 0 ? { icon: "↑", class: "up", diff: `+${t}` } : t < 0 ? { icon: "↓", class: "down", diff: `${t}` } : { icon: "–", class: "same", diff: "0" };
1264
+ }
1265
+ renderRankContent() {
1266
+ return this.rank <= 3 ? o`
1267
+ <span class="icon">${this.getIcon()}</span>
1268
+ <span class="rank-number">${this.rank}</span>
1269
+ ` : o`<span>#${this.rank}</span>`;
1270
+ }
1271
+ renderTrend() {
1272
+ const t = this.getTrend();
1273
+ return t ? o`
1274
+ <div class="trend ${t.class}">
1275
+ <span class="trend-icon">${t.icon}</span>
1276
+ <span>${t.diff}</span>
1277
+ </div>
1278
+ ` : o``;
1279
+ }
1280
+ render() {
1281
+ return Pr(this);
1282
+ }
1283
+ };
1284
+ C.styles = [b, f(zr)];
1285
+ J([
1286
+ p({ type: Number })
1287
+ ], C.prototype, "rank", 2);
1288
+ J([
1289
+ p({ type: Number })
1290
+ ], C.prototype, "previousRank", 2);
1291
+ J([
1292
+ p({ type: String })
1293
+ ], C.prototype, "size", 2);
1294
+ J([
1295
+ p({ type: Boolean })
1296
+ ], C.prototype, "showTrend", 2);
1297
+ C = J([
1298
+ v(Ot)
1299
+ ], C);
1300
+ function Or(t) {
1301
+ return o`<div class="avatar ${t.size} ${t.highlight ? "highlight" : ""}">
1302
+ ${t.renderAvatarContent()}
1303
+ </div>
1304
+ ${t.renderOnlineIndicator()}
1305
+ `;
1306
+ }
1307
+ const Tr = ':host{display:inline-block;position:relative}.avatar{display:flex;align-items:center;justify-content:center;border-radius:50%;border:2px solid var(--border);background:var(--secondary);color:var(--foreground);font-weight:700;overflow:hidden}.avatar.sm{width:32px;height:32px;font-size:.7rem}.avatar.md{width:48px;height:48px;font-size:.875rem}.avatar.lg{width:64px;height:64px;font-size:1.25rem}.avatar.xl{width:80px;height:80px;font-size:1.5rem}.avatar.highlight{border-color:var(--primary)}.avatar img{width:100%;height:100%;object-fit:cover}.online-indicator{position:absolute;bottom:-2px;right:-2px;width:12px;height:12px;background:var(--success);border-radius:50%;border:2px solid var(--surface-border-color)}.online-indicator:before{content:"";position:absolute;inset:0;border-radius:50%;background:var(--success);animation:pulse-ring 1.5s ease-out infinite}@keyframes pulse-ring{0%{transform:scale(.8);opacity:1}to{transform:scale(2);opacity:0}}';
1308
+ var Dr = Object.defineProperty, Lr = Object.getOwnPropertyDescriptor, B = (t, e, r, i) => {
1309
+ for (var a = i > 1 ? void 0 : i ? Lr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1310
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1311
+ return i && a && Dr(e, r, a), a;
1312
+ };
1313
+ let E = class extends u {
1314
+ constructor() {
1315
+ super(...arguments), this.username = "", this.avatar = "", this.size = "md", this.isOnline = !1, this.highlight = !1;
1316
+ }
1317
+ renderAvatarContent() {
1318
+ return this.avatar ? o`<img src="${this.avatar}" alt="${this.username}" />` : o`<span>${Ue(this.username)}</span>`;
1319
+ }
1320
+ renderOnlineIndicator() {
1321
+ return this.isOnline ? o`<span class="online-indicator"></span>` : o``;
1322
+ }
1323
+ render() {
1324
+ return Or(this);
1325
+ }
1326
+ };
1327
+ E.styles = [b, f(Tr)];
1328
+ B([
1329
+ p({ type: String })
1330
+ ], E.prototype, "username", 2);
1331
+ B([
1332
+ p({ type: String })
1333
+ ], E.prototype, "avatar", 2);
1334
+ B([
1335
+ p({ type: String })
1336
+ ], E.prototype, "size", 2);
1337
+ B([
1338
+ p({ type: Boolean })
1339
+ ], E.prototype, "isOnline", 2);
1340
+ B([
1341
+ p({ type: Boolean })
1342
+ ], E.prototype, "highlight", 2);
1343
+ E = B([
1344
+ v(Tt)
1345
+ ], E);
1346
+ function jr(t) {
1347
+ return o`<div class="table-container">
1348
+ <div class="table-header">
1349
+ <div class="col-rank">Rank</div>
1350
+ <div class="col-player">Player</div>
1351
+ <div class="col-games text-center hide-mobile">Games</div>
1352
+ <div class="col-win-rate text-center hide-mobile">Win Rate</div>
1353
+ <div class="col-streak text-center hide-mobile">Streak</div>
1354
+ <div class="col-winnings text-right">Winnings</div>
1355
+ </div>
1356
+ <div class="table-body">${t.renderRows()}</div>
1357
+ </div>
1358
+ `;
1359
+ }
1360
+ const Br = ":host{display:block;width:100%}.col-rank{color:var(--table-col-rank-color, inherit);font-size:var(--table-col-rank-font-size, inherit)}.col-player{color:var(--table-col-player-color, inherit);font-size:var(--table-col-player-font-size, inherit)}.col-games{color:var(--table-col-games-color, inherit);font-size:var(--table-col-games-font-size, inherit)}.col-win-rate{color:var(--table-col-win-rate-color, inherit);font-size:var(--table-col-win-rate-font-size, inherit)}.col-streak{color:var(--table-col-streak-color, inherit);font-size:var(--table-col-streak-font-size, inherit)}.col-winnings{color:var(--table-col-winnings-color, inherit);font-size:var(--table-col-winnings-font-size, inherit)}.table-container{width:100%;max-width:100%;border-radius:var(--surface-radius);border:1px solid var(--surface-border-color);background:var(--surface-gradient);box-shadow:var(--surface-shadow);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.table-header{display:grid;grid-template-columns:80px 1fr 100px 100px 100px 120px;gap:1rem;padding:.75rem 1rem;background:var(--muted);border-bottom:1px solid var(--border);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground)}@media(max-width:768px){.table-header{grid-template-columns:52px minmax(120px,1fr) minmax(72px,88px);gap:.5rem;padding:.625rem .75rem;font-size:.625rem}.table-header .hide-mobile{display:none}}@media(max-width:380px){.table-header{grid-template-columns:44px minmax(100px,1fr) 72px;padding:.5rem}}.table-body{display:flex;flex-direction:column}.table-row{display:grid;grid-template-columns:80px 1fr 100px 100px 100px 120px;gap:1rem;padding:.75rem 1rem;align-items:center;border-bottom:1px solid var(--border-subtle);cursor:pointer;transition:background .2s ease;animation:fade-in .3s ease-out forwards;opacity:0}@media(max-width:768px){.table-row{grid-template-columns:52px minmax(120px,1fr) minmax(72px,88px);gap:.5rem;padding:.625rem .75rem}.table-row .hide-mobile{display:none}}@media(max-width:380px){.table-row{grid-template-columns:44px minmax(100px,1fr) 72px;padding:.5rem}}.table-row:hover{background:var(--inset-hover-bg)}.table-row:hover .chevron{opacity:1}.table-row:last-child{border-bottom:none}.table-row.top-3{background:var(--accent-soft)}@keyframes fade-in{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.player-cell{display:flex;align-items:center;gap:.75rem;min-width:0}.player-details{min-width:0}.player-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-name.highlight{color:var(--primary)}.player-level{display:inline-block;font-size:.6rem;padding:2px 6px;border-radius:4px;border:1px solid var(--border);color:var(--muted-foreground);margin-top:2px}.stat-cell{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.875rem;color:var(--muted-foreground)}.stat-cell .icon{font-size:.875rem;opacity:.5}.stat-cell.win-rate .icon,.stat-cell.win-rate.high{color:var(--success)}.stat-cell.streak{color:var(--gold)}.winnings-cell{display:flex;align-items:center;justify-content:flex-end;gap:.5rem}.winnings{font-family:var(--font-mono);font-weight:700}.winnings.highlight{color:var(--primary)}.chevron{color:var(--muted-foreground);opacity:0;transition:opacity .2s ease}.text-right{text-align:right}.text-center{text-align:center}";
1361
+ var Nr = Object.defineProperty, Ur = Object.getOwnPropertyDescriptor, Me = (t, e, r, i) => {
1362
+ for (var a = i > 1 ? void 0 : i ? Ur(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1363
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1364
+ return i && a && Nr(e, r, a), a;
1365
+ };
1366
+ let ie = class extends u {
1367
+ constructor() {
1368
+ super(...arguments), this.players = [];
1369
+ }
1370
+ handlePlayerClick(t) {
1371
+ this.dispatchEvent(
1372
+ new CustomEvent(ve, {
1373
+ detail: t,
1374
+ bubbles: !0,
1375
+ composed: !0
1376
+ })
1377
+ );
1378
+ }
1379
+ renderStreak(t) {
1380
+ return t.streak > 0 ? o`<span class="icon">🔥</span>${t.streak}` : o`<span>-</span>`;
1381
+ }
1382
+ renderRows() {
1383
+ return o`${this.players.map(
1384
+ (t, e) => o`
1385
+ <div
1386
+ class="table-row ${t.rank <= 3 ? "top-3" : ""}"
1387
+ style="animation-delay: ${e * 50}ms"
1388
+ @click="${() => this.handlePlayerClick(t)}"
1389
+ >
1390
+ <div class="col-rank">
1391
+ <sf-leaderboard-rank-badge
1392
+ rank="${t.rank}"
1393
+ previousRank="${t.previousRank || t.rank}"
1394
+ size="sm"
1395
+ ></sf-leaderboard-rank-badge>
1396
+ </div>
1397
+ <div class="col-player player-cell">
1398
+ <sf-leaderboard-player-avatar
1399
+ username="${t.username}"
1400
+ avatar="${t.avatar || ""}"
1401
+ size="sm"
1402
+ ?isOnline="${t.isOnline}"
1403
+ ?highlight="${t.rank <= 3}"
1404
+ ></sf-leaderboard-player-avatar>
1405
+ <div class="player-details">
1406
+ <div class="player-name ${t.rank <= 3 ? "highlight" : ""}">
1407
+ ${t.username}
1408
+ </div>
1409
+ <span class="player-level">LVL ${t.level}</span>
1410
+ </div>
1411
+ </div>
1412
+ <div class="col-games stat-cell hide-mobile">
1413
+ <span class="icon">🏆</span>
1414
+ ${t.gamesPlayed.toLocaleString()}
1415
+ </div>
1416
+ <div
1417
+ class="col-win-rate stat-cell win-rate ${t.winRate >= 60 ? "high" : ""} hide-mobile"
1418
+ >
1419
+ <span class="icon">🎯</span>
1420
+ ${t.winRate}%
1421
+ </div>
1422
+ <div class="col-streak stat-cell streak hide-mobile">
1423
+ ${this.renderStreak(t)}
1424
+ </div>
1425
+ <div class="col-winnings winnings-cell">
1426
+ <span class="winnings ${t.rank <= 3 ? "highlight" : ""}">
1427
+ ${xe(t.totalWinnings)}
1428
+ </span>
1429
+ <span class="chevron">→</span>
1430
+ </div>
1431
+ </div>
1432
+ `
1433
+ )}`;
1434
+ }
1435
+ render() {
1436
+ return jr(this);
1437
+ }
1438
+ };
1439
+ ie.styles = [b, f(Br)];
1440
+ Me([
1441
+ p({ type: Array })
1442
+ ], ie.prototype, "players", 2);
1443
+ ie = Me([
1444
+ v(Ct)
1445
+ ], ie);
1446
+ const Ir = ".section{margin-bottom:clamp(1.5rem,5vw,3rem);min-width:0}.section-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.section-title{font-size:1.125rem;font-weight:700;margin:0}.elite-badge{font-size:.65rem;padding:.2rem .5rem;border-radius:var(--radius-sm);background:var(--medal-gold-bg);border:1px solid var(--medal-gold-border);color:var(--gold);font-weight:600;letter-spacing:.04em;text-transform:uppercase}@media(max-width:639px){.section-title{font-size:1rem}}:host{display:block;width:100%}.table-section{display:flex;flex-direction:column;gap:1rem;min-width:0}.table-section-header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.5rem}.table-subtitle{font-size:.875rem;color:var(--muted-foreground)}.table-section sf-leaderboard-table{width:100%}@media(max-width:639px){.table-section-header{flex-direction:column;align-items:flex-start}}";
1447
+ var Mr = Object.defineProperty, Fr = Object.getOwnPropertyDescriptor, Fe = (t, e, r, i) => {
1448
+ for (var a = i > 1 ? void 0 : i ? Fr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1449
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1450
+ return i && a && Mr(e, r, a), a;
1451
+ };
1452
+ let ne = class extends u {
1453
+ get timeframe() {
1454
+ return this.section.filters?.timeframe ?? K;
1455
+ }
1456
+ get category() {
1457
+ return this.section.filters?.category ?? Q;
1458
+ }
1459
+ get searchQuery() {
1460
+ return this.section.filters?.searchQuery ?? "";
1461
+ }
1462
+ onTimeframeChange(t) {
1463
+ t.stopPropagation(), this.dispatchEvent(
1464
+ new CustomEvent(ge, {
1465
+ detail: t.detail,
1466
+ bubbles: !0,
1467
+ composed: !0
1468
+ })
1469
+ );
1470
+ }
1471
+ onCategoryChange(t) {
1472
+ t.stopPropagation(), this.dispatchEvent(
1473
+ new CustomEvent(ue, {
1474
+ detail: t.detail,
1475
+ bubbles: !0,
1476
+ composed: !0
1477
+ })
1478
+ );
1479
+ }
1480
+ onSearchChange(t) {
1481
+ t.stopPropagation(), this.dispatchEvent(
1482
+ new CustomEvent(fe, {
1483
+ detail: t.detail,
1484
+ bubbles: !0,
1485
+ composed: !0
1486
+ })
1487
+ );
1488
+ }
1489
+ onPlayerSelect(t) {
1490
+ t.stopPropagation(), this.dispatchEvent(
1491
+ new CustomEvent(ve, {
1492
+ detail: t.detail,
1493
+ bubbles: !0,
1494
+ composed: !0
1495
+ })
1496
+ );
1497
+ }
1498
+ render() {
1499
+ return this.section ? o`
1500
+ <section class="section table-section">
1501
+ ${this.section.title || this.section.subtitle ? o`
1502
+ <div class="table-section-header">
1503
+ ${this.section.title ? o`<h2 class="section-title">${this.section.title}</h2>` : d}
1504
+ ${this.section.subtitle ? o`<span class="table-subtitle">${this.section.subtitle}</span>` : d}
1505
+ </div>
1506
+ ` : d}
1507
+ ${this.section.filters ? o`
1508
+ <sf-leaderboard-filters
1509
+ activeTimeframe=${this.timeframe}
1510
+ activeCategory=${this.category}
1511
+ searchQuery=${this.searchQuery}
1512
+ @timeframe-change=${this.onTimeframeChange}
1513
+ @category-change=${this.onCategoryChange}
1514
+ @search-change=${this.onSearchChange}
1515
+ ></sf-leaderboard-filters>
1516
+ ` : d}
1517
+ <sf-leaderboard-table
1518
+ .players=${this.section.players}
1519
+ @player-select=${this.onPlayerSelect}
1520
+ ></sf-leaderboard-table>
1521
+ </section>
1522
+ ` : d;
1523
+ }
1524
+ };
1525
+ ne.styles = [b, f(Ir)];
1526
+ Fe([
1527
+ p({ attribute: !1 })
1528
+ ], ne.prototype, "section", 2);
1529
+ ne = Fe([
1530
+ v(Nt)
1531
+ ], ne);
1532
+ const Hr = ":host{display:block;width:100%}.page-footer{border-top:1px solid var(--border);margin-top:clamp(1.5rem,4vw,3rem);padding-top:1rem;width:100%}.page-footer p{margin:0;text-align:center;font-size:.875rem;color:var(--muted-foreground)}";
1533
+ var Vr = Object.defineProperty, Wr = Object.getOwnPropertyDescriptor, He = (t, e, r, i) => {
1534
+ for (var a = i > 1 ? void 0 : i ? Wr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1535
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1536
+ return i && a && Vr(e, r, a), a;
1537
+ };
1538
+ let se = class extends u {
1539
+ constructor() {
1540
+ super(...arguments), this.text = "";
1541
+ }
1542
+ render() {
1543
+ return this.text ? o`
1544
+ <footer class="page-footer">
1545
+ <p>${this.text}</p>
1546
+ </footer>
1547
+ ` : d;
1548
+ }
1549
+ };
1550
+ se.styles = [b, f(Hr)];
1551
+ He([
1552
+ p({ type: String })
1553
+ ], se.prototype, "text", 2);
1554
+ se = He([
1555
+ v(Ut)
1556
+ ], se);
1557
+ var Yr = Object.defineProperty, Gr = Object.getOwnPropertyDescriptor, Ve = (t, e, r, i) => {
1558
+ for (var a = i > 1 ? void 0 : i ? Gr(e, r) : e, n = t.length - 1, s; n >= 0; n--)
1559
+ (s = t[n]) && (a = (i ? s(e, r, a) : s(a)) || a);
1560
+ return i && a && Yr(e, r, a), a;
1561
+ };
1562
+ let oe = class extends u {
1563
+ constructor() {
1564
+ super(...arguments), this.data = qt();
1565
+ }
1566
+ get refreshContext() {
1567
+ const t = this.data.table?.filters;
1568
+ return {
1569
+ timeframe: t?.timeframe ?? K,
1570
+ category: t?.category ?? Q
1571
+ };
1572
+ }
1573
+ get footerText() {
1574
+ return this.data.footer?.text ?? this.data.table?.footer?.text ?? "";
1575
+ }
1576
+ get rankingLookupPlayers() {
1577
+ const t = this.data.table?.players ?? [], e = this.data.ranking?.podium?.players ?? [];
1578
+ return [...t, ...e];
1579
+ }
1580
+ renderHeader() {
1581
+ return this.data.header ? o`
1582
+ <sf-leaderboard-header-section
1583
+ .section=${this.data.header}
1584
+ .refreshContext=${this.refreshContext}
1585
+ ></sf-leaderboard-header-section>
1586
+ ` : d;
1587
+ }
1588
+ renderStats() {
1589
+ return this.data.stats?.items?.length ? o`
1590
+ <sf-leaderboard-stats-section
1591
+ .section=${this.data.stats}
1592
+ ></sf-leaderboard-stats-section>
1593
+ ` : d;
1594
+ }
1595
+ renderRanking() {
1596
+ return this.data.ranking ? o`
1597
+ <sf-leaderboard-ranking-section
1598
+ .ranking=${this.data.ranking}
1599
+ .lookupPlayers=${this.rankingLookupPlayers}
1600
+ ></sf-leaderboard-ranking-section>
1601
+ ` : d;
1602
+ }
1603
+ renderTable() {
1604
+ return this.data.table ? o`
1605
+ <sf-leaderboard-table-section
1606
+ .section=${this.data.table}
1607
+ @timeframe-change=${this.onTimeframeChange}
1608
+ @category-change=${this.onCategoryChange}
1609
+ @search-change=${this.onSearchChange}
1610
+ @player-select=${this.onPlayerSelect}
1611
+ ></sf-leaderboard-table-section>
1612
+ ` : d;
1613
+ }
1614
+ renderFooter() {
1615
+ return this.footerText ? o`
1616
+ <sf-leaderboard-footer-section
1617
+ text=${this.footerText}
1618
+ ></sf-leaderboard-footer-section>
1619
+ ` : d;
1620
+ }
1621
+ onTimeframeChange(t) {
1622
+ t.stopPropagation(), this.dispatchEvent(
1623
+ new CustomEvent(ge, {
1624
+ detail: { timeframe: t.detail },
1625
+ bubbles: !0,
1626
+ composed: !0
1627
+ })
1628
+ );
1629
+ }
1630
+ onCategoryChange(t) {
1631
+ t.stopPropagation(), this.dispatchEvent(
1632
+ new CustomEvent(ue, {
1633
+ detail: { category: t.detail },
1634
+ bubbles: !0,
1635
+ composed: !0
1636
+ })
1637
+ );
1638
+ }
1639
+ onSearchChange(t) {
1640
+ t.stopPropagation(), this.dispatchEvent(
1641
+ new CustomEvent(fe, {
1642
+ detail: { query: t.detail },
1643
+ bubbles: !0,
1644
+ composed: !0
1645
+ })
1646
+ );
1647
+ }
1648
+ onPlayerSelect(t) {
1649
+ t.stopPropagation(), this.dispatchEvent(
1650
+ new CustomEvent(ve, {
1651
+ detail: { player: t.detail },
1652
+ bubbles: !0,
1653
+ composed: !0
1654
+ })
1655
+ );
1656
+ }
1657
+ render() {
1658
+ return Zt(this);
1659
+ }
1660
+ };
1661
+ oe.styles = [b, f(Xt)];
1662
+ Ve([
1663
+ p({ attribute: !1 })
1664
+ ], oe.prototype, "data", 2);
1665
+ oe = Ve([
1666
+ v(St)
1667
+ ], oe);
1668
+ rt(Je);
1669
+ //# sourceMappingURL=components.bundle.js.map