@truelab/truelogic 4.3.2-0 → 4.3.3

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.
@@ -1,9 +1,17 @@
1
+ import { PointerEventHandler } from 'react';
1
2
  type TProps = {
2
3
  onClick: (event: React.MouseEvent) => void;
3
4
  cashPrice: number;
4
5
  disabled: boolean;
5
6
  /** Bonus mode is selected: the spin becomes the confirm control and shows the price chip */
6
7
  isActive?: boolean;
8
+ /**
9
+ * The control is held — a pointer on it or Space down; the panel owns the hold (useHold), as it
10
+ * does for the spin this control stands in for. Not `:active`: Blink sets that for a touch too
11
+ * late for a quick tap to show it, and a hotkey never sets it at all (GTT-2754)
12
+ */
13
+ isPressed?: boolean;
14
+ onPointerDown?: PointerEventHandler<HTMLButtonElement>;
7
15
  };
8
- export declare const BonusConfirmButtonBase: ({ onClick, cashPrice, disabled, isActive }: TProps) => import("react/jsx-runtime").JSX.Element;
16
+ export declare const BonusConfirmButtonBase: ({ onClick, onPointerDown, cashPrice, disabled, isActive, isPressed, }: TProps) => import("react/jsx-runtime").JSX.Element;
9
17
  export {};
@@ -1,10 +1,12 @@
1
1
  declare const meta: {
2
2
  title: string;
3
- component: ({ onClick, cashPrice, disabled, isActive }: {
3
+ component: ({ onClick, onPointerDown, cashPrice, disabled, isActive, isPressed, }: {
4
4
  onClick: (event: React.MouseEvent) => void;
5
5
  cashPrice: number;
6
6
  disabled: boolean;
7
7
  isActive?: boolean;
8
+ isPressed?: boolean;
9
+ onPointerDown?: import("react").PointerEventHandler<HTMLButtonElement>;
8
10
  }) => import("react/jsx-runtime").JSX.Element;
9
11
  decorators: import("@storybook/react-webpack5").Decorator[];
10
12
  parameters: {};
@@ -20,8 +22,12 @@ export declare const Variants: import("storybook/internal/csf").StoryAnnotations
20
22
  cashPrice: number;
21
23
  disabled: boolean;
22
24
  isActive?: boolean;
25
+ isPressed?: boolean;
26
+ onPointerDown?: import("react").PointerEventHandler<HTMLButtonElement>;
23
27
  }, {
24
28
  isActive?: boolean;
29
+ isPressed?: boolean;
30
+ onPointerDown?: import("react").PointerEventHandler<HTMLButtonElement>;
25
31
  onClick?: (event: React.MouseEvent) => void;
26
32
  cashPrice?: number;
27
33
  disabled?: boolean;
@@ -1,8 +1,5 @@
1
- type TAnalyticsParameterValue = boolean | number | string | TAnalyticsCustomParams;
2
- /** Event parameters; nested objects are allowed — GTM reads them with dot paths (`metrics.init_ms`) */
3
- export type TAnalyticsCustomParams = {
4
- [name: string]: TAnalyticsParameterValue | undefined;
5
- };
1
+ type TAnalyticsParameterValue = boolean | number | string;
2
+ export type TAnalyticsCustomParams = Record<string, TAnalyticsParameterValue | undefined>;
6
3
  export declare enum EAnalyticsEvents {
7
4
  modeReal = "mode_real",
8
5
  modeDemo = "mode_demo",
@@ -41,24 +38,14 @@ export declare enum EAnalyticsEvents {
41
38
  spinHold = "spin_hold",
42
39
  bonusPurchase = "bonus_purchase",
43
40
  bonusBetActivate = "bonus_bet_activate",
44
- timeToBuyBonus = "time_to_buy_bonus",
45
- gameLoadCdn = "game_load_cdn",
46
- gameLoadInit = "game_load_init",
47
- gameLoadPreload = "game_load_preload",
48
- gameLoadLoading = "game_load_loading",
49
- gameLoadGameCode = "game_load_game_code",
50
- gameLoadTime = "game_load_time",
51
- gameLoadFailed = "game_load_failed",
52
- gameLoadAbandoned = "game_load_abandoned",
53
- gameLoadEnv = "game_load_env"
41
+ timeToBuyBonus = "time_to_buy_bonus"
54
42
  }
55
43
  export declare enum EAnalyticsCategories {
56
44
  settings = "settings_changes",
57
45
  ui = "ui_interaction",
58
46
  gameplay = "gameplay_events",
59
47
  mode = "game_mode",
60
- config = "session_config",
61
- performance = "performance"
48
+ config = "session_config"
62
49
  }
63
50
  export type TEventOptions = {
64
51
  value?: number;
@@ -5,8 +5,6 @@ export declare abstract class Emitter<TEvents extends Record<keyof TEvents, TVoi
5
5
  protected listenersOneTime: Map<keyof TEvents, TVoidFunc[]>;
6
6
  on<K extends keyof TEvents>(event: K, listener: TEvents[K]): this;
7
7
  once<K extends keyof TEvents>(event: K, listener: TEvents[K]): this;
8
- /** Removes a listener added with `on` or `once`; unknown listeners are ignored */
9
- off<K extends keyof TEvents>(event: K, listener: TEvents[K]): this;
10
8
  emit<K extends keyof TEvents>(event: K, ...args: Parameters<TEvents[K]>): void;
11
9
  abstract log(event: unknown, ...args: unknown[]): void;
12
10
  }
@@ -7,7 +7,6 @@ export { formatCount } from './formatCount';
7
7
  export { formatDate } from './formatDate';
8
8
  export { formatTime } from './formatTime';
9
9
  export { getBase64Image } from './getBase64Image';
10
- export { getLoadEnvironment } from './getLoadEnvironment';
11
10
  export { getSafeLocale } from './getSafeLocale';
12
11
  export { getUrlParam } from './getUrlParam';
13
12
  export { isE2E } from './isE2E';
@@ -3,11 +3,16 @@ export type THoldSource = 'pointer' | 'key';
3
3
  type THoldOptions = {
4
4
  /** The control is held while one of these keys is down (`KeyboardEvent.code`) */
5
5
  keys?: readonly string[];
6
- /** How long the control must stay held for `onHold` to fire */
7
- holdDelay: number;
6
+ /** How long the control must stay held for `onHold` to fire; a control with no hold action omits it */
7
+ holdDelay?: number;
8
8
  onPress?: (source: THoldSource) => void;
9
9
  onHold?: (source: THoldSource) => void;
10
- onRelease?: (source: THoldSource) => void;
10
+ /**
11
+ * `isCancelled` — the hold ended without the player letting go: a pointercancel, a window blur,
12
+ * another press taking over, the hook getting disabled or unmounted. An action that lands on the
13
+ * release (like a click does) must skip those
14
+ */
15
+ onRelease?: (source: THoldSource, isCancelled: boolean) => void;
11
16
  /** Turning it off releases a hold in progress: a lock (a modal) must not leave the action stuck on */
12
17
  isEnabled?: boolean;
13
18
  };
@@ -1,6 +1,5 @@
1
1
  import { TSessionMode } from '../../../shared/api/config';
2
2
  import { TAnalyticsCustomParams } from '../../../shared/lib/classes/analyticsService';
3
- import { TGameLoadPhase } from '../../../shared/lib/classes/gameLoadTracker';
4
3
  import { Emitter } from '../classes';
5
4
  import { TOrientation } from '../types/viewPort';
6
5
  type TEventOptions = {
@@ -100,11 +99,6 @@ export type TAnalyticsEvents = {
100
99
  ['walletConvertSuccess:continuePlayingClicked']: (params: TAnalyticsCustomParams) => void;
101
100
  ['bonus:purchase']: (options: TEventOptions) => void;
102
101
  ['bonus:betActivate']: (options: TEventOptions) => void;
103
- ['gameLoad.phase:completed']: (phase: TGameLoadPhase, params: TAnalyticsCustomParams) => void;
104
- ['gameLoad:completed']: (params: TAnalyticsCustomParams) => void;
105
- ['gameLoad:failed']: (params: TAnalyticsCustomParams) => void;
106
- ['gameLoad:abandoned']: (params: TAnalyticsCustomParams) => void;
107
- ['gameLoad:finished']: (params: TAnalyticsCustomParams) => void;
108
102
  };
109
103
  export declare class AnalyticsEmitter extends Emitter<TAnalyticsEvents> {
110
104
  log(event: string, ...args: unknown[]): void;
@@ -4,7 +4,6 @@ export { api } from './api';
4
4
  export { cashService } from './cashService';
5
5
  export type { TStakeResponse } from './gameEmitter';
6
6
  export { gameEmitter } from './gameEmitter';
7
- export { gameLoadTracker } from './gameLoadTracker';
8
7
  export { logger } from './logger';
9
8
  export { moduleEmitter } from './moduleEmitter';
10
9
  export { utilsService } from './utilsService';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truelab/truelogic",
3
- "version": "4.3.2-0",
3
+ "version": "4.3.3",
4
4
  "description": "",
5
5
  "main": "./dist/truelogic.min.js",
6
6
  "types": "./dist/types/src/index.d.ts",
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties;@layer theme, base, components, utilities;@layer theme{:host,:root{--spacing:1px;--font-weight-normal:400;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.\!top-6{top:calc(var(--spacing)*6)!important}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-5{top:calc(var(--spacing)*-5)}.-top-6{top:calc(var(--spacing)*-6)}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-7{top:calc(var(--spacing)*7)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-12{top:calc(var(--spacing)*12)}.top-16{top:calc(var(--spacing)*16)}.top-28{top:calc(var(--spacing)*28)}.top-40{top:calc(var(--spacing)*40)}.top-\[100\%\],.top-\[calc\(100\%\)\]{top:100%}.top-\[calc\(100\%-1px\)\]{top:calc(100% - 1px)}.top-auto{top:auto}.\!right-6{right:calc(var(--spacing)*6)!important}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.-right-3{right:calc(var(--spacing)*-3)}.-right-6{right:calc(var(--spacing)*-6)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing)*2)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-10{right:calc(var(--spacing)*10)}.right-14{right:calc(var(--spacing)*14)}.right-16{right:calc(var(--spacing)*16)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-10{bottom:calc(var(--spacing)*-10)}.bottom-0{bottom:0}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-39{bottom:calc(var(--spacing)*39)}.bottom-40{bottom:calc(var(--spacing)*40)}.-left-1{left:calc(var(--spacing)*-1)}.-left-2{left:calc(var(--spacing)*-2)}.left-0{left:0}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing)*4)}.left-8{left:calc(var(--spacing)*8)}.left-10{left:calc(var(--spacing)*10)}.left-\[100\%\],.left-\[calc\(100\%\)\]{left:100%}.left-\[calc\(100\%-1px\)\]{left:calc(100% - 1px)}.isolate{isolation:isolate}.z-1{z-index:1}.z-2{z-index:2}.z-10{z-index:10}.z-30{z-index:30}.z-\[-1\]{z-index:-1}.z-\[71\]{z-index:71}.container{width:100%;@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.m-0{margin:0}.mx-15{margin-inline:calc(var(--spacing)*15)}.mx-16{margin-inline:calc(var(--spacing)*16)}.mx-auto{margin-inline:auto}.my-30{margin-block:calc(var(--spacing)*30)}.\!mt-0{margin-top:0!important}.\!mt-5{margin-top:calc(var(--spacing)*5)!important}.\!mt-15{margin-top:calc(var(--spacing)*15)!important}.\!mt-16{margin-top:calc(var(--spacing)*16)!important}.-mt-3{margin-top:calc(var(--spacing)*-3)}.mt-0{margin-top:0}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-18{margin-top:calc(var(--spacing)*18)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-25{margin-top:calc(var(--spacing)*25)}.mr-6{margin-right:calc(var(--spacing)*6)}.\!mb-20{margin-bottom:calc(var(--spacing)*20)!important}.-mb-3{margin-bottom:calc(var(--spacing)*-3)}.-mb-10{margin-bottom:calc(var(--spacing)*-10)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-13{margin-bottom:calc(var(--spacing)*13)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-19{margin-bottom:calc(var(--spacing)*19)}.ml-8{margin-left:calc(var(--spacing)*8)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.list-item{display:list-item}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.size-52{height:calc(var(--spacing)*52);width:calc(var(--spacing)*52)}.size-1000{height:calc(var(--spacing)*1000);width:calc(var(--spacing)*1000)}.\!h-17{height:calc(var(--spacing)*17)!important}.\!h-44{height:calc(var(--spacing)*44)!important}.h-1{height:var(--spacing)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-21{height:calc(var(--spacing)*21)}.h-26{height:calc(var(--spacing)*26)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-34{height:calc(var(--spacing)*34)}.h-36{height:calc(var(--spacing)*36)}.h-38{height:calc(var(--spacing)*38)}.h-40{height:calc(var(--spacing)*40)}.h-44{height:calc(var(--spacing)*44)}.h-46{height:calc(var(--spacing)*46)}.h-48{height:calc(var(--spacing)*48)}.h-50{height:calc(var(--spacing)*50)}.h-52{height:calc(var(--spacing)*52)}.h-54{height:calc(var(--spacing)*54)}.h-56{height:calc(var(--spacing)*56)}.h-60{height:calc(var(--spacing)*60)}.h-66{height:calc(var(--spacing)*66)}.h-70{height:calc(var(--spacing)*70)}.h-74{height:calc(var(--spacing)*74)}.h-104{height:calc(var(--spacing)*104)}.h-130{height:calc(var(--spacing)*130)}.h-165{height:calc(var(--spacing)*165)}.h-170{height:calc(var(--spacing)*170)}.h-180{height:calc(var(--spacing)*180)}.h-200{height:calc(var(--spacing)*200)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-\[calc\(100\%-40px-20px\)\]{max-height:calc(100% - 60px)}.max-h-full{max-height:100%}.min-h-18{min-height:calc(var(--spacing)*18)}.min-h-22{min-height:calc(var(--spacing)*22)}.min-h-26{min-height:calc(var(--spacing)*26)}.min-h-28{min-height:calc(var(--spacing)*28)}.min-h-full{min-height:100%}.\!w-17{width:calc(var(--spacing)*17)!important}.\!w-fit{width:fit-content!important}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-22{width:calc(var(--spacing)*22)}.w-26{width:calc(var(--spacing)*26)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-34{width:calc(var(--spacing)*34)}.w-36{width:calc(var(--spacing)*36)}.w-46{width:calc(var(--spacing)*46)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-54{width:calc(var(--spacing)*54)}.w-62{width:calc(var(--spacing)*62)}.w-66{width:calc(var(--spacing)*66)}.w-70{width:calc(var(--spacing)*70)}.w-74{width:calc(var(--spacing)*74)}.w-100{width:calc(var(--spacing)*100)}.w-120{width:calc(var(--spacing)*120)}.w-140{width:calc(var(--spacing)*140)}.w-170{width:calc(var(--spacing)*170)}.w-190{width:calc(var(--spacing)*190)}.w-192{width:calc(var(--spacing)*192)}.w-200{width:calc(var(--spacing)*200)}.w-240{width:calc(var(--spacing)*240)}.w-260{width:calc(var(--spacing)*260)}.w-280{width:calc(var(--spacing)*280)}.w-350{width:calc(var(--spacing)*350)}.w-362{width:calc(var(--spacing)*362)}.w-384{width:calc(var(--spacing)*384)}.w-\[calc\(50\%-10px\)\]{width:calc(50% - 10px)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-100{max-width:calc(var(--spacing)*100)}.max-w-220{max-width:calc(var(--spacing)*220)}.max-w-230{max-width:calc(var(--spacing)*230)}.max-w-314{max-width:calc(var(--spacing)*314)}.max-w-354{max-width:calc(var(--spacing)*354)}.max-w-560{max-width:calc(var(--spacing)*560)}.max-w-604{max-width:calc(var(--spacing)*604)}.max-w-620{max-width:calc(var(--spacing)*620)}.max-w-\[50\%\]{max-width:50%}.max-w-full{max-width:100%}.\!min-w-0{min-width:0!important}.\!min-w-120{min-width:calc(var(--spacing)*120)!important}.\!min-w-167{min-width:calc(var(--spacing)*167)!important}.\!min-w-170{min-width:calc(var(--spacing)*170)!important}.min-w-0{min-width:0}.min-w-18{min-width:calc(var(--spacing)*18)}.min-w-22{min-width:calc(var(--spacing)*22)}.min-w-26{min-width:calc(var(--spacing)*26)}.min-w-28{min-width:calc(var(--spacing)*28)}.min-w-40{min-width:calc(var(--spacing)*40)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-82{min-width:calc(var(--spacing)*82)}.min-w-140{min-width:calc(var(--spacing)*140)}.min-w-180{min-width:calc(var(--spacing)*180)}.min-w-186{min-width:calc(var(--spacing)*186)}.min-w-200{min-width:calc(var(--spacing)*200)}.min-w-290{min-width:calc(var(--spacing)*290)}.min-w-1000{min-width:calc(var(--spacing)*1000)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-full{flex-basis:100%}.\!origin-top{transform-origin:top!important}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.translate-x-0{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0px}.translate-x-8{--tw-translate-x:calc(var(--spacing)*8)}.translate-x-20,.translate-x-8{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-20{--tw-translate-x:calc(var(--spacing)*20)}.translate-x-22{--tw-translate-x:calc(var(--spacing)*22)}.translate-x-22,.translate-x-\[-0\.5px\]{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[-0\.5px\]{--tw-translate-x:-0.5px}.translate-x-\[-100\%\]{--tw-translate-x:-100%}.-translate-y-1\/2,.translate-x-\[-100\%\]{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-y-1\/2{--tw-translate-y:50%}.translate-y-1\/2,.translate-y-\[-4\.1px\]{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-4\.1px\]{--tw-translate-y:-4.1px}.translate-y-\[-100\%\]{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform-gpu{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulseTransparent{animation:pulseTransparent 2.5s linear infinite}.\!cursor-default{cursor:default!important}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.grid-cols-\[1fr_80px\]{grid-template-columns:1fr 80px}.grid-cols-\[1fr_80px_80px\]{grid-template-columns:1fr 80px 80px}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0{gap:0}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-7{gap:calc(var(--spacing)*7)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-11{gap:calc(var(--spacing)*11)}.gap-12{gap:calc(var(--spacing)*12)}.gap-14{gap:calc(var(--spacing)*14)}.gap-16{gap:calc(var(--spacing)*16)}.gap-18{gap:calc(var(--spacing)*18)}.gap-20{gap:calc(var(--spacing)*20)}.gap-24{gap:calc(var(--spacing)*24)}.gap-x-12{column-gap:calc(var(--spacing)*12)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.rounded-3{border-radius:3px}.rounded-5{border-radius:5px}.rounded-6{border-radius:6px}.rounded-8{border-radius:8px}.rounded-10{border-radius:10px}.rounded-12{border-radius:12px}.rounded-14{border-radius:14px}.rounded-16{border-radius:16px}.rounded-20{border-radius:20px}.rounded-30{border-radius:30px}.rounded-full{border-radius:9999px}.rounded-t-10{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-20{border-top-left-radius:20px;border-top-right-radius:20px}.rounded-tl-16{border-top-left-radius:16px}.rounded-tr-16{border-top-right-radius:16px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[3px\]{border-style:var(--tw-border-style);border-width:3px}.border-y-2{border-block-style:var(--tw-border-style);border-block-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.\!border-transparent{border-color:#0000!important}.border-\[\#DA2929\]{border-color:#da2929}.border-transparent{border-color:#0000}.border-white{border-color:var(--colors-white)}.border-white-6{border-color:var(--colors-white-6)}.border-white-10{border-color:var(--colors-white-10)}.border-white-20{border-color:var(--colors-white-20)}.border-white-30{border-color:var(--colors-white-30)}.border-y-white-20{border-block-color:var(--colors-white-20)}.\!bg-brand-black{background-color:var(--colors-brand-black)!important}.bg-\[rgba\(255\,71\,102\,0\.2\)\]{background-color:#ff476633}.bg-\[rgba\(255\,96\,71\,0\.2\)\]{background-color:#ff604733}.bg-additional-2-70{background-color:var(--colors-additional-2-70)}.bg-black-20{background-color:var(--colors-black-20)}.bg-brand-black{background-color:var(--colors-brand-black)}.bg-main-ui{background-color:var(--colors-main-ui)}.bg-neon-rouge{background-color:var(--colors-neon-rouge)}.bg-transparent{background-color:initial}.bg-white{background-color:var(--colors-white)}.bg-white-6{background-color:var(--colors-white-6)}.bg-white-10{background-color:var(--colors-white-10)}.bg-white-20{background-color:var(--colors-white-20)}.bg-linear-to-b\/srgb{--tw-gradient-position:to bottom;@supports (background-image:linear-gradient(in lab,red,red)){--tw-gradient-position:to bottom in srgb}background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-l\/srgb{--tw-gradient-position:to left;@supports (background-image:linear-gradient(in lab,red,red)){--tw-gradient-position:to left in srgb}background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r\/srgb{--tw-gradient-position:to right;@supports (background-image:linear-gradient(in lab,red,red)){--tw-gradient-position:to right in srgb}background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-t\/srgb{--tw-gradient-position:to top;@supports (background-image:linear-gradient(in lab,red,red)){--tw-gradient-position:to top in srgb}background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-\[144deg\]{--tw-gradient-position:144deg}.bg-gradient-\[144deg\],.bg-gradient-\[270deg\]{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-\[270deg\]{--tw-gradient-position:270deg}.text-prize-drop{background-clip:text;background-image:var(--colors-gold);font-family:Roboto,Helvetica,sans-serif;font-size:18px;--tw-leading:21px;line-height:21px;--tw-font-weight:var(--font-weight-bold);color:#0000;font-weight:var(--font-weight-bold)}.bg-\[linear-gradient\(66deg\,\#D1003F_0\%\,\#D1003F_50\%\,\#FF844F_100\%\)\]{background-image:linear-gradient(66deg,#d1003f,#d1003f 50%,#ff844f)}.bg-add-gradient{background-image:var(--colors-add-gradient)}.bg-add-violet{background-image:var(--colors-add-violet)}.bg-green{background-image:var(--colors-green)}.bg-white-6-gradient{background-image:var(--colors-white-6-gradient)}.from-\[\#FFFFFF00\]{--tw-gradient-from:#fff0;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-main-ui{--tw-gradient-from:var(--colors-main-ui);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-main-ui-bleached-06{--tw-gradient-from:var(--colors-main-ui-bleached-06);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-white-6{--tw-gradient-from:var(--colors-white-6);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-\[\#FFFFFF33\]{--tw-gradient-via:#fff3;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-via) var(--tw-gradient-via-position),var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-\[53\.13\%\]{--tw-gradient-via-position:53.13%}.to-\[\#FFFFFF00\]{--tw-gradient-to:#fff0;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:#0000;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.fill-white{fill:var(--colors-white)}.object-contain{object-fit:contain}.\!p-2{padding:calc(var(--spacing)*2)!important}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-14{padding:calc(var(--spacing)*14)}.p-16{padding:calc(var(--spacing)*16)}.p-17{padding:calc(var(--spacing)*17)}.p-20{padding:calc(var(--spacing)*20)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-14{padding-inline:calc(var(--spacing)*14)}.px-15{padding-inline:calc(var(--spacing)*15)}.px-16{padding-inline:calc(var(--spacing)*16)}.px-20{padding-inline:calc(var(--spacing)*20)}.px-50{padding-inline:calc(var(--spacing)*50)}.px-60{padding-inline:calc(var(--spacing)*60)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-14{padding-block:calc(var(--spacing)*14)}.py-18{padding-block:calc(var(--spacing)*18)}.py-30{padding-block:calc(var(--spacing)*30)}.pt-7{padding-top:calc(var(--spacing)*7)}.pt-9{padding-top:calc(var(--spacing)*9)}.pt-14{padding-top:calc(var(--spacing)*14)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-25{padding-top:calc(var(--spacing)*25)}.pt-30{padding-top:calc(var(--spacing)*30)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-14{padding-right:calc(var(--spacing)*14)}.pr-15{padding-right:calc(var(--spacing)*15)}.\!pb-30{padding-bottom:calc(var(--spacing)*30)!important}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-7{padding-bottom:calc(var(--spacing)*7)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-14{padding-bottom:calc(var(--spacing)*14)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-18{padding-bottom:calc(var(--spacing)*18)}.pb-20{padding-bottom:calc(var(--spacing)*20)}.pb-22{padding-bottom:calc(var(--spacing)*22)}.pb-30{padding-bottom:calc(var(--spacing)*30)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-12{padding-left:calc(var(--spacing)*12)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-super-xs-reg{font-size:10px;--tw-leading:12px;line-height:12px;--tw-font-weight:var(--font-weight-normal)}.text-super-xs-reg,.text-xs-reg{color:var(--colors-white);font-family:Roboto,Helvetica,sans-serif;font-weight:var(--font-weight-normal)}.text-xs-reg{font-size:11px;--tw-leading:17px;line-height:17px;--tw-font-weight:var(--font-weight-normal)}.font-roboto{font-family:Roboto,Helvetica,sans-serif}.text-20{font-size:20px}.text-24{font-size:24px}.leading-\[1\.15\]{--tw-leading:1.15;line-height:1.15}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-\[25px\]{--tw-leading:25px;line-height:25px}.leading-\[38px\]{--tw-leading:38px;line-height:38px}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.tracking-\[0\.4px\]{--tw-tracking:0.4px;letter-spacing:.4px}.tracking-\[0\.96px\]{--tw-tracking:0.96px;letter-spacing:.96px}.text-wrap{text-wrap:wrap}.whitespace-nowrap{white-space:nowrap}.text-\[\#77DA29\]{color:#77da29}.text-\[\#DA2929\]{color:#da2929}.text-white{color:var(--colors-white)}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-15{opacity:15%}.opacity-20{opacity:20%}.opacity-40{opacity:40%}.opacity-50{opacity:50%}.opacity-60{opacity:60%}.opacity-70{opacity:70%}.opacity-80{opacity:80%}.opacity-90{opacity:90%}.opacity-100{opacity:100%}.shadow-notify-modals{--tw-shadow:0 15px 30px var(--tw-shadow-color,#0000004d)}.ring-1,.shadow-notify-modals{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-white{--tw-ring-color:var(--colors-white)}.outline-hidden{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline:2px solid #0000;outline-offset:2px}}.blur-\[9px\]{--tw-blur:blur(9px)}.blur-\[17px\],.blur-\[9px\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[17px\]{--tw-blur:blur(17px)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0px 1px 3px var(--tw-drop-shadow-color,#00000080));--tw-drop-shadow:drop-shadow(0px 1px 3px #00000080)}.drop-shadow,.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.2\)\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.2\)\]{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0003));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-panel-button-icon{--tw-drop-shadow-size:drop-shadow(0px 1px 1px var(--tw-drop-shadow-color,#00000040));--tw-drop-shadow:drop-shadow(0px 1px 1px #00000040)}.drop-shadow-panel-button-icon,.grayscale{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px)}.backdrop-blur-\[10px\],.backdrop-blur-\[4px\]{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[10px\]{--tw-backdrop-blur:blur(10px)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[color\,opacity\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-none{transition-property:none}.duration-200{--tw-duration:200ms;transition-duration:.2s}.duration-300{--tw-duration:300ms;transition-duration:.3s}.duration-1000{--tw-duration:1000ms;transition-duration:1s}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.will-change-\[opacity\]{will-change:opacity}.will-change-transform{will-change:transform}.text-stroke-tap-anywhere{-webkit-text-stroke:2px var(--colors-main-ui-bleached-20);text-shadow:0 1px 3px #00000080;-webkit-text-fill-color:#fff;paint-order:stroke fill}.select-text{-webkit-user-select:text;user-select:text}.\[clip-path\:polygon\(0_calc\(100\%-1px\)\,_0_1px\,_calc\(100\%-1px\)_50\%\)\]{clip-path:polygon(0 calc(100% - 1px),0 1px,calc(100% - 1px) 50%)}.\[clip-path\:polygon\(50\%_calc\(100\%-1px\)\,_1px_0\,_calc\(100\%-1px\)_0\)\]{clip-path:polygon(50% calc(100% - 1px),1px 0,calc(100% - 1px) 0)}.mask-cut-br-large{mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34.57 34.57'%3E%3Cpath d='M34.57 0v4h-4a8 8 0 0 1-2.343 5.657l-18.57 18.57A8 8 0 0 1 4 30.57v4H0V0Z'/%3E%3C/svg%3E") right -4px bottom -4px /34.57px 34.57px no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px top -4px /calc(100% + 8px) calc(100% - 24.07px) no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px bottom -4px /calc(100% - 24.07px) 34.57px no-repeat}.mask-cut-br-middle{mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27.42 27.42'%3E%3Cpath d='M27.42 0v4h-4a8 8 0 0 1-2.343 5.657l-11.42 11.42A8 8 0 0 1 4 23.42v4H0V0Z'/%3E%3C/svg%3E") right -4px bottom -4px /27.42px 27.42px no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px top -4px /calc(100% + 8px) calc(100% - 16.92px) no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px bottom -4px /calc(100% - 16.92px) 27.42px no-repeat}.mask-cut-br-small{mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 25.96 25.96'%3E%3Cpath d='M25.96 0v4h-4a8 8 0 0 1-2.343 5.657l-9.96 9.96A8 8 0 0 1 4 21.96v4H0V0Z'/%3E%3C/svg%3E") right -4px bottom -4px /25.96px 25.96px no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px top -4px /calc(100% + 8px) calc(100% - 15.46px) no-repeat,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25'/%3E%3C/svg%3E") left -4px bottom -4px /calc(100% - 15.46px) 25.96px no-repeat}.text-shadow{text-shadow:0 1px 2px #0000001a,0 1px 1px #0000000f}.group-last\:rounded-br-10:is(:where(.group):last-child *){border-bottom-right-radius:10px}.group-last\:rounded-bl-10:is(:where(.group):last-child *){border-bottom-left-radius:10px}@media (hover:hover){.group-hover\:opacity-80:is(:where(.group):hover *){opacity:80%}.group-hover\:transition-opacity:is(:where(.group):hover *){transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}}.group-active\:opacity-80:is(:where(.group):active *){opacity:80%}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:0}.after\:z-0:after{content:var(--tw-content);z-index:0}.after\:rounded-6:after{border-radius:6px;content:var(--tw-content)}.after\:rounded-8:after{border-radius:8px;content:var(--tw-content)}.after\:rounded-10:after{border-radius:10px;content:var(--tw-content)}.after\:transition-colors:after{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.after\:content-\[\"\"\]:after{--tw-content:"";content:var(--tw-content)}.first\:pt-0:first-child{padding-top:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}.first-of-type\:rounded-l-12:first-of-type{border-bottom-left-radius:12px;border-top-left-radius:12px}.first-of-type\:border-l-2:first-of-type{border-left-style:var(--tw-border-style);border-left-width:2px}.first-of-type\:border-l-white-20:first-of-type{border-left-color:var(--colors-white-20)}.last-of-type\:rounded-r-12:last-of-type{border-bottom-right-radius:12px;border-top-right-radius:12px}.last-of-type\:border-r-2:last-of-type{border-right-style:var(--tw-border-style);border-right-width:2px}.last-of-type\:border-r-white-20:last-of-type{border-right-color:var(--colors-white-20)}@media (hover:hover){.hover\:bg-white-20:hover{background-color:var(--colors-white-20)}.hover\:bg-white-30:hover{background-color:var(--colors-white-30)}.hover\:opacity-80:hover{opacity:80%}.hover\:opacity-100:hover{opacity:100%}.hover\:after\:bg-white-10:hover:after{background-color:var(--colors-white-10);content:var(--tw-content)}}.focus\:placeholder-transparent:focus::placeholder{color:#0000}.active\:bg-white-6:active{background-color:var(--colors-white-6)}.active\:bg-white-20:active{background-color:var(--colors-white-20)}.active\:opacity-80:active{opacity:80%}.active\:opacity-90:active{opacity:90%}.disabled\:cursor-default:disabled{cursor:default}.disabled\:bg-white-10:disabled{background-color:var(--colors-white-10)}.disabled\:opacity-15:disabled{opacity:15%}.disabled\:opacity-40:disabled{opacity:40%}@media (hover:hover){.disabled\:hover\:after\:bg-transparent:disabled:hover:after{background-color:initial;content:var(--tw-content)}}.disabled\:active\:opacity-40:disabled:active{opacity:40%}@media (width >= 48rem){.md\:right-11{right:calc(var(--spacing)*11)}}._mobile._portrait .mp\:bottom-88{bottom:calc(var(--spacing)*88)}._mobile._portrait .mp\:bottom-110{bottom:calc(var(--spacing)*110)}._mobile._portrait .mp\:left-\[calc\(50\%-149px\)\]{left:calc(50% - 149px)}._mobile._portrait .mp\:left-\[calc\(50\%-191px\)\]{left:calc(50% - 191px)}._mobile._portrait .mp\:block{display:block}._mobile._portrait .mp\:hidden{display:none}._mobile._portrait .mp\:max-w-530{max-width:calc(var(--spacing)*530)}._mobile._portrait .mp\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}._mobile._portrait .mp\:gap-20{gap:calc(var(--spacing)*20)}._mobile._portrait .mp\:gap-x-10{column-gap:calc(var(--spacing)*10)}._mobile._landscape .ml\:\!top-1{top:var(--spacing)!important}._mobile._landscape .ml\:top-20{top:calc(var(--spacing)*20)}._mobile._landscape .ml\:top-\[calc\(50\%\+114px\)\]{top:calc(50% + 114px)}._mobile._landscape .ml\:top-auto{top:auto}._mobile._landscape .ml\:\!right-8{right:calc(var(--spacing)*8)!important}._mobile._landscape .ml\:bottom-78{bottom:calc(var(--spacing)*78)}._mobile._landscape .ml\:left-16{left:calc(var(--spacing)*16)}._mobile._landscape .ml\:mx-auto{margin-inline:auto}._mobile._landscape .ml\:mt-5{margin-top:calc(var(--spacing)*5)}._mobile._landscape .ml\:block{display:block}._mobile._landscape .ml\:hidden{display:none}._mobile._landscape .ml\:h-42{height:calc(var(--spacing)*42)}._mobile._landscape .ml\:h-50{height:calc(var(--spacing)*50)}._mobile._landscape .ml\:h-54{height:calc(var(--spacing)*54)}._mobile._landscape .ml\:h-64{height:calc(var(--spacing)*64)}._mobile._landscape .ml\:w-54{width:calc(var(--spacing)*54)}._mobile._landscape .ml\:w-64{width:calc(var(--spacing)*64)}._mobile._landscape .ml\:w-121{width:calc(var(--spacing)*121)}._mobile._landscape .ml\:w-180{width:calc(var(--spacing)*180)}._mobile._landscape .ml\:w-300{width:calc(var(--spacing)*300)}._mobile._landscape .ml\:w-\[calc\(50\%-6px\)\]{width:calc(50% - 6px)}._mobile._landscape .ml\:max-w-180{max-width:calc(var(--spacing)*180)}._mobile._landscape .ml\:max-w-448{max-width:calc(var(--spacing)*448)}._mobile._landscape .ml\:max-w-560{max-width:calc(var(--spacing)*560)}._mobile._landscape .ml\:min-w-180{min-width:calc(var(--spacing)*180)}._mobile._landscape .ml\:translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}._mobile._landscape .ml\:flex-col{flex-direction:column}._mobile._landscape .ml\:items-start{align-items:flex-start}._mobile._landscape .ml\:gap-3{gap:calc(var(--spacing)*3)}._mobile._landscape .ml\:gap-8{gap:calc(var(--spacing)*8)}._mobile._landscape .ml\:gap-10{gap:calc(var(--spacing)*10)}._mobile._landscape .ml\:gap-12{gap:calc(var(--spacing)*12)}._mobile._landscape .ml\:gap-x-20{column-gap:calc(var(--spacing)*20)}._mobile._landscape .ml\:p-0{padding:0}._mobile._landscape .ml\:px-0{padding-inline:0}._mobile._landscape .ml\:py-20{padding-block:calc(var(--spacing)*20)}._mobile._landscape .ml\:pt-14{padding-top:calc(var(--spacing)*14)}._mobile._landscape .ml\:pt-19{padding-top:calc(var(--spacing)*19)}._mobile._landscape .ml\:pt-25{padding-top:calc(var(--spacing)*25)}._mobile._landscape .ml\:\!pb-10{padding-bottom:calc(var(--spacing)*10)!important}._mobile._landscape .ml\:pb-6{padding-bottom:calc(var(--spacing)*6)}._mobile._landscape .ml\:pb-16{padding-bottom:calc(var(--spacing)*16)}._mobile._landscape .ml\:pb-18{padding-bottom:calc(var(--spacing)*18)}._mobile._landscape .ml\:pb-20{padding-bottom:calc(var(--spacing)*20)}._mobile._landscape .ml\:pb-31{padding-bottom:calc(var(--spacing)*31)}._mobile._landscape .ml\:text-center{text-align:center}.\[\&_h3\]\:mt-19 h3{margin-top:calc(var(--spacing)*19)}.\[\&_h3\:first-child\]\:mt-0 h3:first-child{margin-top:0}.\[\&_li\]\:relative li{position:relative}.\[\&_li\]\:pl-22 li{padding-left:calc(var(--spacing)*22)}.\[\&_li\]\:opacity-80 li{opacity:80%}.\[\&_li\]\:before\:absolute li:before{content:var(--tw-content);position:absolute}.\[\&_li\]\:before\:top-7 li:before{content:var(--tw-content);top:calc(var(--spacing)*7)}.\[\&_li\]\:before\:left-10 li:before{content:var(--tw-content);left:calc(var(--spacing)*10)}.\[\&_li\]\:before\:h-4 li:before{content:var(--tw-content);height:calc(var(--spacing)*4)}.\[\&_li\]\:before\:w-4 li:before{content:var(--tw-content);width:calc(var(--spacing)*4)}.\[\&_li\]\:before\:rounded-full li:before{border-radius:9999px;content:var(--tw-content)}.\[\&_p\]\:mt-4 p{margin-top:calc(var(--spacing)*4)}.\[\&_p\]\:opacity-80 p{opacity:80%}._mobile._landscape :is(.\[\&_p\]\:ml\:mt-5 p){margin-top:calc(var(--spacing)*5)}.\[\&_table\]\:mt-4 table{margin-top:calc(var(--spacing)*4)}.\[\&_table\]\:w-full table{width:100%}.\[\&_tbody\>tr\:last-child\>td\:first-child\]\:before\:rounded-bl-10 tbody>tr:last-child>td:first-child:before{border-bottom-left-radius:10px;content:var(--tw-content)}.\[\&_tbody\>tr\:last-child\>td\:last-child\]\:before\:rounded-br-10 tbody>tr:last-child>td:last-child:before{border-bottom-right-radius:10px;content:var(--tw-content)}.\[\&_tbody\>tr\>td\]\:relative tbody>tr>td{position:relative}.\[\&_tbody\>tr\>td\]\:h-30 tbody>tr>td{height:calc(var(--spacing)*30)}.\[\&_tbody\>tr\>td\]\:pl-12 tbody>tr>td{padding-left:calc(var(--spacing)*12)}.\[\&_tbody\>tr\>td\]\:before\:absolute tbody>tr>td:before{content:var(--tw-content);position:absolute}.\[\&_tbody\>tr\>td\]\:before\:top-0 tbody>tr>td:before{content:var(--tw-content);top:0}.\[\&_tbody\>tr\>td\]\:before\:left-0 tbody>tr>td:before{content:var(--tw-content);left:0}.\[\&_tbody\>tr\>td\]\:before\:h-full tbody>tr>td:before{content:var(--tw-content);height:100%}.\[\&_tbody\>tr\>td\]\:before\:w-full tbody>tr>td:before{content:var(--tw-content);width:100%}.\[\&_tbody\>tr\>td\]\:before\:border-b tbody>tr>td:before{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;content:var(--tw-content)}.\[\&_tbody\>tr\>td\]\:before\:border-l tbody>tr>td:before{border-left-style:var(--tw-border-style);border-left-width:1px;content:var(--tw-content)}.\[\&_tbody\>tr\>td\]\:before\:border-solid tbody>tr>td:before{content:var(--tw-content);--tw-border-style:solid;border-style:solid}.\[\&_tbody\>tr\>td\]\:before\:border-white-10 tbody>tr>td:before{border-color:var(--colors-white-10);content:var(--tw-content)}.\[\&_tbody\>tr\>td\:last-child\]\:before\:border-r tbody>tr>td:last-child:before{border-right-style:var(--tw-border-style);border-right-width:1px;content:var(--tw-content)}.\[\&_thead\>tr\>th\]\:h-30 thead>tr>th{height:calc(var(--spacing)*30)}.\[\&_thead\>tr\>th\]\:w-1\/2 thead>tr>th{width:50%}.\[\&_thead\>tr\>th\]\:bg-white-10 thead>tr>th{background-color:var(--colors-white-10)}.\[\&_thead\>tr\>th\]\:pl-12 thead>tr>th{padding-left:calc(var(--spacing)*12)}.\[\&_thead\>tr\>th\]\:text-left thead>tr>th{text-align:left}.\[\&_thead\>tr\>th\:first-child\]\:rounded-tl-10 thead>tr>th:first-child{border-top-left-radius:10px}.\[\&_thead\>tr\>th\:last-child\]\:rounded-tr-10 thead>tr>th:last-child{border-top-right-radius:10px}.\[\&_ul\]\:mt-4 ul{margin-top:calc(var(--spacing)*4)}.\[\&_ul\]\:flex ul{display:flex}.\[\&_ul\]\:flex-col ul{flex-direction:column}.\[\&_ul\]\:gap-3 ul{gap:calc(var(--spacing)*3)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";initial-value:"";inherits:false}@keyframes pulseTransparent{0%,to{opacity:.1}50%{opacity:1}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}:root{--colors-add-violet:linear-gradient(90deg,#b983ff,#5da9ff);--colors-add-gradient:linear-gradient(315deg,#ff7100,#f05);--colors-add-gold:linear-gradient(0deg,#ffcf55 0.79%,#ffae11 32.86%,#fff7b2 80.76%);--colors-add-green:linear-gradient(90deg,#00d651,#00a5d6);--colors-gold-gradient-light:#e3c28e;--colors-gold-gradient-mid:#cb9a68;--colors-gold-gradient-dark:#b37f42;--colors-gold-promo:radial-gradient(219.22% 153.54% at 0.04% 0%,var(--colors-gold-gradient-light) 20.23%,var(--colors-gold-gradient-mid) 46.16%,var(--colors-gold-gradient-dark) 72.08%);--colors-brand-black-95:#0d0d0d}.promo-lobby-menu-tab{display:flex;flex:1 1 auto;flex-direction:column}.loader{display:flex;gap:2px;height:2px}.loader span{animation:wave 1s ease-in-out infinite;background:#fff;border-radius:50%;height:4px;opacity:.6;width:4px}.loader span:nth-child(2){animation-delay:.15s}.loader span:nth-child(3){animation-delay:.3s}@keyframes wave{0%{opacity:.6;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}60%{opacity:.6;transform:translateY(0)}to{opacity:.6;transform:translateY(0)}}
@@ -1,11 +0,0 @@
1
- /**
2
- * Game load telemetry (GTT-2800). Marks the load timeline on the tracker and reports it to analytics:
3
- * a `gameLoad.phase:completed` event the moment each phase is over (CDN, init, preload, loading, game
4
- * code), then one terminal event per load — `gameLoad:completed` when the game calls `setGameReady()`,
5
- * `gameLoad:failed` on the failed screen, `gameLoad:abandoned` when the page is hidden before the
6
- * main screen — and `gameLoad:finished` once the main screen is reached.
7
- *
8
- * Every payload carries `metrics` and the `environment` the tracker reads once on mount, so each
9
- * event is self-contained. `init` marks are set in `truelogic.init()` itself: the hook mounts inside it.
10
- */
11
- export declare const useGameLoadAnalytics: () => void;
@@ -1 +0,0 @@
1
- export {};
@@ -1,67 +0,0 @@
1
- import { TAnalyticsCustomParams } from './analyticsService';
2
- /**
3
- * Points on the game load timeline, from the bundle evaluation to the main screen.
4
- * `*:called` marks are the host game calling a public method, the rest are TrueLogic reaching a state.
5
- */
6
- export type TGameLoadMark = 'init:called' | 'init:resolved' | 'session:started' | 'session:ended' | 'configure:called' | 'configure:succeed' | 'preload.images:ended' | 'preload.nonCritical:ended' | 'startLoading:called' | 'endLoading:called' | 'loading:ended' | 'ready:called' | 'welcome:shown' | 'main:shown';
7
- /** The furthest point a load reached — the `stage` of `game_load_failed` and `game_load_abandoned` */
8
- export type TGameLoadStage = 'script' | 'init' | 'configure' | 'loading' | 'loading_tail' | 'ready_wait' | 'welcome' | 'main';
9
- /** Load phases reported as separate events the moment they complete — one dashboard row each */
10
- export type TGameLoadPhase = 'cdn' | 'init' | 'preload' | 'loading' | 'game_code';
11
- export type TGameLoadError = {
12
- name?: string;
13
- message?: string;
14
- code?: number;
15
- };
16
- export type TGameLoadMarkListener = (mark: TGameLoadMark) => void;
17
- /** Marks left by the inline preloader loader (`src/app/templates/preloader-loader.ts`) around the CDN fetch */
18
- export declare const GAME_LOAD_LOADER_MARK_START = "truelogic:loader:start";
19
- export declare const GAME_LOAD_LOADER_MARK_END = "truelogic:loader:end";
20
- /**
21
- * Collects the game load timeline (GTT-2800). All times are `performance.now()` values, so they
22
- * count from the page open (`performance.timeOrigin`), the same origin as the loader marks.
23
- *
24
- * Every payload groups the measured values under `metrics` and carries the same `environment`
25
- * (what the browser reports about the network, the device and the embedding), read once per load.
26
- * Phases (`completePhase`) go out as soon as they are over. Every load also ends in exactly one
27
- * terminal payload: `complete()` when the game calls `setGameReady()`, `fail()` on the failed screen
28
- * or `abandon()` when the page is hidden earlier. The welcome screen comes after `complete()`, so a
29
- * load can still be abandoned there; `finish()` closes it on the main screen.
30
- */
31
- export declare class GameLoadTracker {
32
- private marks;
33
- private listeners;
34
- private sentPhases;
35
- private environment;
36
- private scriptStartMs;
37
- private progressTicks;
38
- private tabHidden;
39
- private isCompleted;
40
- private isClosed;
41
- constructor();
42
- /** Records the first occurrence of a mark and notifies the subscribers; later calls are ignored */
43
- mark(name: TGameLoadMark): void;
44
- has(name: TGameLoadMark): boolean;
45
- /** Called on every new mark; returns the unsubscribe function */
46
- subscribe(listener: TGameLoadMarkListener): () => void;
47
- /** One `setLoadingProgress()` call of the game */
48
- tickProgress(): void;
49
- /** Reads the browser environment once per load; call it early so no event waits for the probes */
50
- collectEnvironment(): TAnalyticsCustomParams;
51
- getStage(): TGameLoadStage;
52
- /** Every measured value known so far; a duration is left out while one of its marks is missing */
53
- getMetrics(): TAnalyticsCustomParams;
54
- /** A phase is over: its `game_load_<phase>` payload, once per load and never after the load is closed */
55
- completePhase(phase: TGameLoadPhase): TAnalyticsCustomParams | null;
56
- /** The game called `setGameReady()`: the `game_load_time` payload, once per load */
57
- complete(): TAnalyticsCustomParams | null;
58
- /** The failed screen before the game was ready: the `game_load_failed` payload, once per load */
59
- fail(error?: TGameLoadError | null): TAnalyticsCustomParams | null;
60
- /** The page is hidden before the main screen: the `game_load_abandoned` payload, once per load */
61
- abandon(): TAnalyticsCustomParams | null;
62
- /** The main screen is shown: closes the load and returns the welcome screen dwell, once per load */
63
- finish(): TAnalyticsCustomParams | null;
64
- /** Test helper: a fresh load on the same instance (subscribers stay) */
65
- reset(): void;
66
- private diff;
67
- }
@@ -1,12 +0,0 @@
1
- export type TLoadEnvironment = Record<string, boolean | number | string | undefined>;
2
- /**
3
- * What the browser reports about the conditions of this game load (GTT-2800): network, HTML and bundle
4
- * delivery, device capabilities, embedding. Read once per load by `GameLoadTracker` and attached as
5
- * the `environment` object to every `game_load_*` event.
6
- *
7
- * Every field is optional: a browser without the API, or an API that cannot tell, leaves the field
8
- * out — nothing is reported as `0`, `null` or a guess. See the field docs on the helpers above for
9
- * units, ranges and browser support; the dashboard-side description lives in
10
- * `docs/docs/development/analytics.md` → "environment fields".
11
- */
12
- export declare const getLoadEnvironment: () => TLoadEnvironment;
@@ -1,2 +0,0 @@
1
- import { GameLoadTracker } from '../classes/gameLoadTracker';
2
- export declare const gameLoadTracker: GameLoadTracker;