@sitharaj08/gamify 1.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.
- package/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/index.cjs +8 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.js +677 -0
- package/dist/index.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +80 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sitharaj Seenivasan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Gamify
|
|
2
|
+
|
|
3
|
+
A comprehensive React UI component library for gaming applications with cyberpunk-inspired aesthetics.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@sitharaj08/gamify)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## 🎮 Demo
|
|
9
|
+
|
|
10
|
+
**[Live Demo →](https://sitharaj08.github.io/gamify/)**
|
|
11
|
+
|
|
12
|
+
## ✨ Features
|
|
13
|
+
|
|
14
|
+
- 🎨 **Dual Themes** - Cyberpunk Dark & Holographic Light modes
|
|
15
|
+
- ⚔️ **Game Components** - Health bars, inventory slots, quest logs
|
|
16
|
+
- 🏆 **Rarity System** - Common to Mythic color schemes
|
|
17
|
+
- 📱 **Responsive** - Mobile-first design approach
|
|
18
|
+
- ♿ **Accessible** - ARIA labels & keyboard navigation
|
|
19
|
+
- ⚡ **Performant** - Tree-shakeable & optimized builds
|
|
20
|
+
|
|
21
|
+
## 📦 Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @sitharaj08/gamify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 🚀 Quick Start
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { GamifyThemeProvider, GamifyButton, GamifyCard, GamifyBadge } from '@sitharaj08/gamify';
|
|
31
|
+
import '@sitharaj08/gamify/style.css';
|
|
32
|
+
|
|
33
|
+
function App() {
|
|
34
|
+
return (
|
|
35
|
+
<GamifyThemeProvider>
|
|
36
|
+
<GamifyCard variant="cyber">
|
|
37
|
+
<h2>Welcome to Gamify!</h2>
|
|
38
|
+
<GamifyBadge variant="legendary">PRO</GamifyBadge>
|
|
39
|
+
<GamifyButton variant="primary">Get Started</GamifyButton>
|
|
40
|
+
</GamifyCard>
|
|
41
|
+
</GamifyThemeProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 🧩 Components
|
|
47
|
+
|
|
48
|
+
### Core UI
|
|
49
|
+
- `GamifyButton` - Primary, outline, ghost, legendary, danger variants
|
|
50
|
+
- `GamifyCard` - Glass morphism cards with cyber/neon variants
|
|
51
|
+
- `GamifyBadge` - Rarity-colored badges
|
|
52
|
+
- `GamifyAvatar` - Avatars with rank borders and status indicators
|
|
53
|
+
- `GamifyTabs` - Tabbed navigation
|
|
54
|
+
- `GamifyInput` - Styled text inputs
|
|
55
|
+
- `GamifySwitch` - Toggle switches
|
|
56
|
+
- `GamifySlider` - Range sliders
|
|
57
|
+
- `GamifyTooltip` - Rarity-aware tooltips
|
|
58
|
+
- `GamifyToast` - Notification toasts
|
|
59
|
+
- `GamifyModal` - Modal dialogs
|
|
60
|
+
- `GamifySpinner` - Loading spinners
|
|
61
|
+
|
|
62
|
+
### Game-Specific
|
|
63
|
+
- `HealthBar` - HP/Mana/XP bars with animations
|
|
64
|
+
- `InventorySlot` - Rarity-bordered item slots
|
|
65
|
+
- `QuestLog` - Quest list with status indicators
|
|
66
|
+
- `GamifyLeaderboard` - Player rankings
|
|
67
|
+
|
|
68
|
+
### Theme
|
|
69
|
+
- `GamifyThemeProvider` - Theme context provider
|
|
70
|
+
- `GamifyThemeToggle` - Sun/moon toggle button
|
|
71
|
+
|
|
72
|
+
## 🎨 Theming
|
|
73
|
+
|
|
74
|
+
Gamify UI supports two themes out of the box:
|
|
75
|
+
|
|
76
|
+
- **Cyberpunk Dark** (default) - Deep purples, neon cyan/pink accents
|
|
77
|
+
- **Holographic Light** - Mint/cyan bases, deep indigo text
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
import { GamifyThemeProvider, GamifyThemeToggle } from '@sitharaj08/gamify';
|
|
81
|
+
|
|
82
|
+
function App() {
|
|
83
|
+
return (
|
|
84
|
+
<GamifyThemeProvider>
|
|
85
|
+
<GamifyThemeToggle />
|
|
86
|
+
{/* Your app content */}
|
|
87
|
+
</GamifyThemeProvider>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 🏆 Rarity System
|
|
93
|
+
|
|
94
|
+
All components support the rarity color system:
|
|
95
|
+
|
|
96
|
+
| Rarity | Color |
|
|
97
|
+
|--------|-------|
|
|
98
|
+
| Common | Gray |
|
|
99
|
+
| Uncommon | Green |
|
|
100
|
+
| Rare | Blue |
|
|
101
|
+
| Epic | Purple |
|
|
102
|
+
| Legendary | Orange (with glow) |
|
|
103
|
+
| Mythic | Red (with animation) |
|
|
104
|
+
|
|
105
|
+
## 📄 License
|
|
106
|
+
|
|
107
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
108
|
+
|
|
109
|
+
## 👨💻 Author
|
|
110
|
+
|
|
111
|
+
**Sitharaj Seenivasan**
|
|
112
|
+
|
|
113
|
+
- GitHub: [@sitharaj08](https://github.com/sitharaj08)
|
|
114
|
+
|
|
115
|
+
## 🤝 Contributing
|
|
116
|
+
|
|
117
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react");var N={exports:{}},p={};var F;function me(){if(F)return p;F=1;var r=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function s(n,i,l){var c=null;if(l!==void 0&&(c=""+l),i.key!==void 0&&(c=""+i.key),"key"in i){l={};for(var h in i)h!=="key"&&(l[h]=i[h])}else l=i;return i=l.ref,{$$typeof:r,type:n,key:c,ref:i!==void 0?i:null,props:l}}return p.Fragment=t,p.jsx=s,p.jsxs=s,p}var b={};var D;function fe(){return D||(D=1,process.env.NODE_ENV!=="production"&&(function(){function r(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===oe?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case R:return"Fragment";case K:return"Profiler";case Z:return"StrictMode";case te:return"Suspense";case se:return"SuspenseList";case ie:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case Q:return"Portal";case ae:return e.displayName||"Context";case ee:return(e._context.displayName||"Context")+".Consumer";case re:var o=e.render;return e=e.displayName,e||(e=o.displayName||o.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ne:return o=e.displayName||null,o!==null?o:r(e.type)||"Memo";case w:o=e._payload,e=e._init;try{return r(e(o))}catch{}}return null}function t(e){return""+e}function s(e){try{t(e);var o=!1}catch{o=!0}if(o){o=console;var m=o.error,f=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return m.call(o,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",f),t(e)}}function n(e){if(e===R)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===w)return"<...>";try{var o=r(e);return o?"<"+o+">":"<...>"}catch{return"<...>"}}function i(){var e=S.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function c(e){if($.call(e,"key")){var o=Object.getOwnPropertyDescriptor(e,"key").get;if(o&&o.isReactWarning)return!1}return e.key!==void 0}function h(e,o){function m(){I||(I=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",o))}m.isReactWarning=!0,Object.defineProperty(e,"key",{get:m,configurable:!0})}function g(){var e=r(this.type);return L[e]||(L[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function x(e,o,m,f,E,P){var u=m.ref;return e={$$typeof:O,type:e,key:o,props:m,_owner:f},(u!==void 0?u:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:g}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:E}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function v(e,o,m,f,E,P){var u=o.children;if(u!==void 0)if(f)if(le(u)){for(f=0;f<u.length;f++)j(u[f]);Object.freeze&&Object.freeze(u)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else j(u);if($.call(o,"key")){u=r(e);var _=Object.keys(o).filter(function(ce){return ce!=="key"});f=0<_.length?"{key: someKey, "+_.join(": ..., ")+": ...}":"{key: someKey}",Y[u+f]||(_=0<_.length?"{"+_.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
|
+
let props = %s;
|
|
3
|
+
<%s {...props} />
|
|
4
|
+
React keys must be passed directly to JSX without using spread:
|
|
5
|
+
let props = %s;
|
|
6
|
+
<%s key={someKey} {...props} />`,f,u,_,u),Y[u+f]=!0)}if(u=null,m!==void 0&&(s(m),u=""+m),c(o)&&(s(o.key),u=""+o.key),"key"in o){m={};for(var C in o)C!=="key"&&(m[C]=o[C])}else m=o;return u&&h(m,typeof e=="function"?e.displayName||e.name||"Unknown":e),x(e,u,m,i(),E,P)}function j(e){G(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===w&&(e._payload.status==="fulfilled"?G(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function G(e){return typeof e=="object"&&e!==null&&e.$$typeof===O}var T=y,O=Symbol.for("react.transitional.element"),Q=Symbol.for("react.portal"),R=Symbol.for("react.fragment"),Z=Symbol.for("react.strict_mode"),K=Symbol.for("react.profiler"),ee=Symbol.for("react.consumer"),ae=Symbol.for("react.context"),re=Symbol.for("react.forward_ref"),te=Symbol.for("react.suspense"),se=Symbol.for("react.suspense_list"),ne=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),ie=Symbol.for("react.activity"),oe=Symbol.for("react.client.reference"),S=T.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,$=Object.prototype.hasOwnProperty,le=Array.isArray,A=console.createTask?console.createTask:function(){return null};T={react_stack_bottom_frame:function(e){return e()}};var I,L={},M=T.react_stack_bottom_frame.bind(T,l)(),z=A(n(l)),Y={};b.Fragment=R,b.jsx=function(e,o,m){var f=1e4>S.recentlyCreatedOwnerStacks++;return v(e,o,m,!1,f?Error("react-stack-top-frame"):M,f?A(n(e)):z)},b.jsxs=function(e,o,m){var f=1e4>S.recentlyCreatedOwnerStacks++;return v(e,o,m,!0,f?Error("react-stack-top-frame"):M,f?A(n(e)):z)}})()),b}var B;function ue(){return B||(B=1,process.env.NODE_ENV==="production"?N.exports=me():N.exports=fe()),N.exports}var a=ue();function U(r){var t,s,n="";if(typeof r=="string"||typeof r=="number")n+=r;else if(typeof r=="object")if(Array.isArray(r)){var i=r.length;for(t=0;t<i;t++)r[t]&&(s=U(r[t]))&&(n&&(n+=" "),n+=s)}else for(s in r)r[s]&&(n&&(n+=" "),n+=s);return n}function d(){for(var r,t,s=0,n="",i=arguments.length;s<i;s++)(r=arguments[s])&&(t=U(r))&&(n&&(n+=" "),n+=t);return n}const W=({src:r,alt:t,size:s="md",rank:n="common",status:i,className:l,...c})=>a.jsxs("div",{className:d("gamify-avatar",`gamify-avatar--${s}`,`gamify-avatar--${n}`,l),...c,children:[a.jsx("img",{src:r,alt:t,className:"gamify-avatar__img"}),i&&a.jsx("span",{className:d("gamify-avatar__status",`gamify-avatar__status--${i}`)})]}),k=({variant:r="common",className:t,children:s,...n})=>a.jsx("span",{className:d("gamify-badge",`gamify-badge--${r}`,t),...n,children:s}),V=({variant:r="primary",size:t="md",className:s,children:n,...i})=>a.jsx("button",{className:d("gamify-btn",`gamify-btn--${r}`,`gamify-btn--${t}`,s),...i,children:n}),de=({variant:r="default",className:t,children:s,...n})=>a.jsx("div",{className:d("gamify-card",`gamify-card--${r}`,t),...n,children:s}),he=({label:r,error:t,className:s,...n})=>a.jsxs("div",{className:"gamify-input-wrapper",children:[r&&a.jsx("label",{className:"gamify-label",children:r}),a.jsx("input",{className:d("gamify-input",{"gamify-input--error":t},s),...n}),t&&a.jsx("span",{className:"gamify-error-message",children:t})]}),ye=({data:r,className:t,...s})=>a.jsxs("table",{className:d("gamify-leaderboard",t),...s,children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{children:"Rank"}),a.jsx("th",{children:"Player"}),a.jsx("th",{style:{textAlign:"right"},children:"Score"})]})}),a.jsx("tbody",{children:r.map((n,i)=>a.jsxs("tr",{className:`gamify-leaderboard-row--${i+1}`,children:[a.jsxs("td",{className:"gamify-leaderboard__rank",children:["#",i+1]}),a.jsx("td",{children:a.jsxs("div",{className:"gamify-leaderboard__player",children:[a.jsx(W,{src:n.avatar,alt:n.name,size:"sm"}),n.name]})}),a.jsx("td",{className:"gamify-leaderboard__score",children:n.score.toLocaleString()})]},n.id))})]}),ge=({isOpen:r,onClose:t,title:s,children:n,variant:i="default",footer:l})=>(y.useEffect(()=>{const c=h=>{h.key==="Escape"&&t()};return r&&window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[r,t]),r?a.jsx("div",{className:"gamify-modal-overlay",onClick:t,children:a.jsxs("div",{className:d("gamify-modal",`gamify-modal--${i}`),onClick:c=>c.stopPropagation(),children:[a.jsxs("div",{className:"gamify-modal__header",children:[a.jsx("h3",{className:"gamify-modal__title",children:s}),a.jsx("button",{className:"gamify-modal__close",onClick:t,children:"×"})]}),a.jsx("div",{className:"gamify-modal__content",children:n}),a.jsx("div",{className:"gamify-modal__footer",children:l||a.jsx(V,{size:"sm",variant:"ghost",onClick:t,children:"Close"})})]})}):null),ve=({label:r,value:t,showValue:s=!0,className:n,...i})=>a.jsxs("div",{className:d("gamify-slider-container",n),children:[(r||s)&&a.jsxs("div",{className:"gamify-slider-label",children:[r&&a.jsx("span",{children:r}),s&&a.jsx("span",{className:"gamify-slider-value",children:t})]}),a.jsx("input",{type:"range",className:"gamify-slider",value:t,...i})]}),xe=({size:r="md",className:t})=>a.jsxs("div",{className:d("gamify-spinner",`gamify-spinner--${r}`,t),children:[a.jsx("div",{className:"gamify-spinner__ring"}),a.jsx("div",{className:"gamify-spinner__ring"}),a.jsx("div",{className:"gamify-spinner__ring"}),a.jsx("div",{className:"gamify-spinner__ring"})]}),_e=({label:r,className:t,checked:s,...n})=>a.jsxs("label",{className:d("gamify-switch-label",t),children:[a.jsxs("div",{className:"gamify-switch",children:[a.jsx("input",{type:"checkbox",checked:s,...n}),a.jsx("span",{className:"gamify-switch__slider"})]}),r&&a.jsx("span",{children:r})]}),pe=({tabs:r,activeTabId:t,onTabChange:s,className:n})=>{const i=y.useRef(null),l=(c,h)=>{if(s(c),i.current){const g=i.current,v=g.querySelectorAll(".gamify-tab")[h];if(v){const j=v.offsetLeft-16;g.scrollTo({left:j,behavior:"smooth"})}}};return a.jsx("div",{className:d("gamify-tabs",n),ref:i,children:r.map((c,h)=>a.jsx("button",{className:d("gamify-tab",t===c.id&&"gamify-tab--active"),onClick:()=>l(c.id,h),children:c.label},c.id))})},q=y.createContext(void 0),be=({children:r})=>{const[t,s]=y.useState(()=>{const l=localStorage.getItem("gamify-theme");return l==="light"||l==="dark"?l:"dark"});y.useEffect(()=>{document.documentElement.setAttribute("data-theme",t),localStorage.setItem("gamify-theme",t)},[t]);const n=()=>{s(l=>l==="light"?"dark":"light")},i=l=>{s(l)};return a.jsx(q.Provider,{value:{theme:t,toggleTheme:n,setTheme:i},children:r})},J=()=>{const r=y.useContext(q);if(!r)throw new Error("useThemeContext must be used within GamifyThemeProvider");return r},je=()=>{const{theme:r,toggleTheme:t,setTheme:s}=J();return{theme:r,toggleTheme:t,setTheme:s}},Te=({className:r})=>{const{theme:t,toggleTheme:s}=je();return a.jsx("button",{className:d("gamify-theme-toggle",r),onClick:s,"aria-label":"Toggle Theme",title:`Switch to ${t==="dark"?"light":"dark"} mode`,children:t==="dark"?a.jsx("svg",{viewBox:"0 0 24 24",children:a.jsx("path",{d:"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z"})}):a.jsx("svg",{viewBox:"0 0 24 24",children:a.jsx("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"})})})},H=y.createContext(void 0),Ee=({children:r})=>{const[t,s]=y.useState([]),n=y.useRef(0),i=y.useCallback((l,c,h=3e3)=>{const g=`toast-${n.current++}`;s(x=>[...x,{id:g,title:l,message:c,duration:h}]),setTimeout(()=>{s(x=>x.filter(v=>v.id!==g))},h)},[]);return a.jsxs(H.Provider,{value:{addToast:i},children:[r,a.jsx("div",{className:"gamify-toast-container",children:t.map(l=>a.jsxs("div",{className:"gamify-toast",style:{"--duration":`${l.duration}ms`},children:[a.jsx("div",{className:"gamify-toast__icon",children:"🏆"}),a.jsxs("div",{className:"gamify-toast__content",children:[a.jsx("div",{className:"gamify-toast__title",children:l.title}),a.jsx("div",{className:"gamify-toast__message",children:l.message})]})]},l.id))})]})},X=()=>{const r=y.useContext(H);if(!r)throw new Error("useToast must be used within a GamifyToastProvider");return r},Ne=({content:r,children:t,rarity:s="common"})=>a.jsxs("div",{className:"gamify-tooltip-wrapper",children:[t,a.jsx("div",{className:d("gamify-tooltip",`gamify-tooltip--${s}`),children:r})]}),ke=({value:r,max:t,variant:s="hp",showLabel:n=!0,className:i,...l})=>{const c=Math.min(100,Math.max(0,r/t*100));return a.jsxs("div",{className:d("gamify-health-bar",`gamify-health-bar--${s}`,i),...l,children:[a.jsx("div",{className:"gamify-health-bar__fill",style:{width:`${c}%`}}),n&&a.jsxs("span",{className:"gamify-health-bar__text",children:[r," / ",t]})]})},Re=({itemSrc:r,count:t,rarity:s,isActive:n,size:i="md",className:l,...c})=>a.jsxs("div",{className:d("gamify-inventory-slot",`gamify-inventory-slot--${i}`,s&&`gamify-inventory-slot--${s}`,n&&"gamify-inventory-slot--active",l),...c,children:[r&&a.jsx("img",{src:r,alt:"Item",className:"gamify-inventory-slot__img"}),t&&t>1&&a.jsx("span",{className:"gamify-inventory-slot__count",children:t})]}),we=({quests:r,onQuestClick:t,className:s,...n})=>a.jsx("div",{className:d("gamify-quest-log",s),...n,children:r.map(i=>a.jsxs("div",{className:d("gamify-quest-item",`gamify-quest-item--${i.status}`),onClick:()=>t?.(i),children:[a.jsxs("div",{className:"gamify-quest-item__title",children:[i.title,i.status==="completed"&&a.jsx(k,{variant:"uncommon",children:"DONE"}),i.status==="active"&&a.jsx(k,{variant:"legendary",children:"ACTIVE"}),i.status==="failed"&&a.jsx(k,{variant:"mythic",children:"FAILED"})]}),a.jsx("div",{className:"gamify-quest-item__desc",children:i.description})]},i.id))}),Se=()=>{const{addToast:r}=X(),t=async()=>{const s={title:"Gamify - Cyberpunk React UI Library",text:"Check out Gamify! 🎮 The ultimate cyberpunk React component library for gaming apps. ⚡️",url:window.location.href};if(navigator.share)try{await navigator.share(s)}catch{}else try{await navigator.clipboard.writeText(`${s.text}
|
|
7
|
+
${s.url}`),r("Link Copied!","Share this with your friends! 🚀",3e3)}catch{r("Error","Could not access clipboard.",2e3)}};return a.jsx("button",{className:"gamify-share-fab",onClick:t,"aria-label":"Share Loot UI",title:"Share this page",children:a.jsx("svg",{className:"gamify-share-fab__icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:a.jsx("path",{d:"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"})})})};exports.GamifyAvatar=W;exports.GamifyBadge=k;exports.GamifyButton=V;exports.GamifyCard=de;exports.GamifyInput=he;exports.GamifyLeaderboard=ye;exports.GamifyModal=ge;exports.GamifyShareFab=Se;exports.GamifySlider=ve;exports.GamifySpinner=xe;exports.GamifySwitch=_e;exports.GamifyTabs=pe;exports.GamifyThemeProvider=be;exports.GamifyThemeToggle=Te;exports.GamifyToastProvider=Ee;exports.GamifyTooltip=Ne;exports.HealthBar=ke;exports.InventorySlot=Re;exports.QuestLog=we;exports.useThemeContext=J;exports.useToast=X;
|
|
8
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../node_modules/clsx/dist/clsx.mjs","../src/components/GamifyAvatar/GamifyAvatar.tsx","../src/components/GamifyBadge/GamifyBadge.tsx","../src/components/GamifyButton/GamifyButton.tsx","../src/components/GamifyCard/GamifyCard.tsx","../src/components/GamifyInput/GamifyInput.tsx","../src/components/GamifyLeaderboard/GamifyLeaderboard.tsx","../src/components/GamifyModal/GamifyModal.tsx","../src/components/GamifySlider/GamifySlider.tsx","../src/components/GamifySpinner/GamifySpinner.tsx","../src/components/GamifySwitch/GamifySwitch.tsx","../src/components/GamifyTabs/GamifyTabs.tsx","../src/theme/GamifyThemeContext.tsx","../src/hooks/useTheme.ts","../src/components/GamifyThemeToggle/GamifyThemeToggle.tsx","../src/components/GamifyToast/GamifyToast.tsx","../src/components/GamifyTooltip/GamifyTooltip.tsx","../src/components/Game/HealthBar.tsx","../src/components/Game/InventorySlot.tsx","../src/components/QuestLog/QuestLog.tsx","../src/components/GamifyShareFab/GamifyShareFab.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyAvatar.css';\n\nexport interface GamifyAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src: string;\n alt: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n rank?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary' | 'mythic';\n status?: 'online' | 'offline' | 'busy';\n}\n\nexport const GamifyAvatar: React.FC<GamifyAvatarProps> = ({\n src,\n alt,\n size = 'md',\n rank = 'common',\n status,\n className,\n ...props\n}) => {\n return (\n <div\n className={clsx(\n 'gamify-avatar',\n `gamify-avatar--${size}`,\n `gamify-avatar--${rank}`,\n className\n )}\n {...props}\n >\n <img src={src} alt={alt} className='gamify-avatar__img' />\n {status && (\n <span\n className={clsx(\n 'gamify-avatar__status',\n `gamify-avatar__status--${status}`\n )}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyBadge.css';\n\nexport interface GamifyBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary' | 'mythic';\n children: React.ReactNode;\n}\n\nexport const GamifyBadge: React.FC<GamifyBadgeProps> = ({\n variant = 'common',\n className,\n children,\n ...props\n}) => {\n return (\n <span\n className={clsx('gamify-badge', `gamify-badge--${variant}`, className)}\n {...props}\n >\n {children}\n </span>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyButton.css';\n\nexport interface GamifyButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'danger' | 'outline' | 'ghost' | 'legendary';\n size?: 'sm' | 'md' | 'lg';\n children: React.ReactNode;\n}\n\nexport const GamifyButton: React.FC<GamifyButtonProps> = ({\n variant = 'primary',\n size = 'md',\n className,\n children,\n ...props\n}) => {\n return (\n <button\n className={clsx(\n 'gamify-btn',\n `gamify-btn--${variant}`,\n `gamify-btn--${size}`,\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyCard.css';\n\nexport interface GamifyCardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'cyber' | 'neon';\n children: React.ReactNode;\n}\n\nexport const GamifyCard: React.FC<GamifyCardProps> = ({\n variant = 'default',\n className,\n children,\n ...props\n}) => {\n return (\n <div\n className={clsx('gamify-card', `gamify-card--${variant}`, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyInput.css';\n\nexport interface GamifyInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nexport const GamifyInput: React.FC<GamifyInputProps> = ({\n label,\n error,\n className,\n ...props\n}) => {\n return (\n <div className='gamify-input-wrapper'>\n {label && <label className='gamify-label'>{label}</label>}\n <input\n className={clsx(\n 'gamify-input',\n { 'gamify-input--error': error },\n className\n )}\n {...props}\n />\n {error && <span className='gamify-error-message'>{error}</span>}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport { GamifyAvatar } from '../GamifyAvatar/GamifyAvatar';\nimport './GamifyLeaderboard.css';\n\nexport interface LeaderboardEntry {\n id: string;\n name: string;\n avatar: string;\n score: number;\n}\n\nexport interface GamifyLeaderboardProps extends React.HTMLAttributes<HTMLTableElement> {\n data: LeaderboardEntry[];\n}\n\nexport const GamifyLeaderboard: React.FC<GamifyLeaderboardProps> = ({\n data,\n className,\n ...props\n}) => {\n return (\n <table className={clsx('gamify-leaderboard', className)} {...props}>\n <thead>\n <tr>\n <th>Rank</th>\n <th>Player</th>\n <th style={{ textAlign: 'right' }}>Score</th>\n </tr>\n </thead>\n <tbody>\n {data.map((entry, index) => (\n <tr key={entry.id} className={`gamify-leaderboard-row--${index + 1}`}>\n <td className='gamify-leaderboard__rank'>#{index + 1}</td>\n <td>\n <div className='gamify-leaderboard__player'>\n <GamifyAvatar src={entry.avatar} alt={entry.name} size='sm' />\n {entry.name}\n </div>\n </td>\n <td className='gamify-leaderboard__score'>{entry.score.toLocaleString()}</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n","import React, { useEffect } from 'react';\nimport clsx from 'clsx';\nimport { GamifyButton } from '../GamifyButton/GamifyButton';\nimport './GamifyModal.css';\n\nexport interface GamifyModalProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n variant?: 'default' | 'alert';\n footer?: React.ReactNode;\n}\n\nexport const GamifyModal: React.FC<GamifyModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n variant = 'default',\n footer,\n}) => {\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n if (isOpen) window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div className='gamify-modal-overlay' onClick={onClose}>\n <div\n className={clsx('gamify-modal', `gamify-modal--${variant}`)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className='gamify-modal__header'>\n <h3 className='gamify-modal__title'>{title}</h3>\n <button className='gamify-modal__close' onClick={onClose}>×</button>\n </div>\n <div className='gamify-modal__content'>\n {children}\n </div>\n <div className='gamify-modal__footer'>\n {footer ? footer : (\n <GamifyButton size='sm' variant='ghost' onClick={onClose}>Close</GamifyButton>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifySlider.css';\n\nexport interface GamifySliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n showValue?: boolean;\n}\n\nexport const GamifySlider: React.FC<GamifySliderProps> = ({\n label,\n value,\n showValue = true,\n className,\n ...props\n}) => {\n return (\n <div className={clsx('gamify-slider-container', className)}>\n {(label || showValue) && (\n <div className='gamify-slider-label'>\n {label && <span>{label}</span>}\n {showValue && <span className='gamify-slider-value'>{value}</span>}\n </div>\n )}\n <input\n type='range'\n className='gamify-slider'\n value={value}\n {...props}\n />\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifySpinner.css';\n\nexport interface GamifySpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport const GamifySpinner: React.FC<GamifySpinnerProps> = ({\n size = 'md',\n className,\n}) => {\n return (\n <div className={clsx('gamify-spinner', `gamify-spinner--${size}`, className)}>\n <div className='gamify-spinner__ring'></div>\n <div className='gamify-spinner__ring'></div>\n <div className='gamify-spinner__ring'></div>\n <div className='gamify-spinner__ring'></div>\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifySwitch.css';\n\nexport interface GamifySwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n}\n\nexport const GamifySwitch: React.FC<GamifySwitchProps> = ({\n label,\n className,\n checked,\n ...props\n}) => {\n return (\n <label className={clsx('gamify-switch-label', className)}>\n <div className='gamify-switch'>\n <input type='checkbox' checked={checked} {...props} />\n <span className='gamify-switch__slider'></span>\n </div>\n {label && <span>{label}</span>}\n </label>\n );\n};\n","import React, { useRef } from 'react';\nimport clsx from 'clsx';\nimport './GamifyTabs.css';\n\nexport interface TabItem {\n id: string;\n label: string;\n}\n\nexport interface GamifyTabsProps {\n tabs: TabItem[];\n activeTabId: string;\n onTabChange: (id: string) => void;\n className?: string;\n}\n\nexport const GamifyTabs: React.FC<GamifyTabsProps> = ({\n tabs,\n activeTabId,\n onTabChange,\n className,\n}) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n\n const handleTabClick = (tabId: string, index: number) => {\n onTabChange(tabId);\n\n // Auto-scroll to show next tab if clicking near the edge\n if (tabsRef.current) {\n const container = tabsRef.current;\n const buttons = container.querySelectorAll('.gamify-tab');\n const clickedButton = buttons[index] as HTMLElement;\n\n if (clickedButton) {\n // Scroll so the clicked tab is visible with some of the next tab showing\n const scrollOffset = clickedButton.offsetLeft - 16; // Small left padding\n container.scrollTo({\n left: scrollOffset,\n behavior: 'smooth'\n });\n }\n }\n };\n\n return (\n <div className={clsx('gamify-tabs', className)} ref={tabsRef}>\n {tabs.map((tab, index) => (\n <button\n key={tab.id}\n className={clsx(\n 'gamify-tab',\n activeTabId === tab.id && 'gamify-tab--active'\n )}\n onClick={() => handleTabClick(tab.id, index)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n};\n","import React, { createContext, useContext, useEffect, useState } from 'react';\n\ntype Theme = 'light' | 'dark';\n\ninterface GamifyThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n setTheme: (theme: Theme) => void;\n}\n\nconst GamifyThemeContext = createContext<GamifyThemeContextType | undefined>(undefined);\n\nexport const GamifyThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [theme, setThemeState] = useState<Theme>(() => {\n // Check local storage or system preference\n const saved = localStorage.getItem('gamify-theme');\n if (saved === 'light' || saved === 'dark') return saved;\n return 'dark';\n });\n\n useEffect(() => {\n const root = document.documentElement;\n root.setAttribute('data-theme', theme);\n localStorage.setItem('gamify-theme', theme);\n }, [theme]);\n\n const toggleTheme = () => {\n setThemeState((prev) => (prev === 'light' ? 'dark' : 'light'));\n };\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n };\n\n return (\n <GamifyThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </GamifyThemeContext.Provider>\n );\n};\n\nexport const useThemeContext = () => { // Internal use, prefers the hook below\n const context = useContext(GamifyThemeContext);\n if (!context) throw new Error('useThemeContext must be used within GamifyThemeProvider');\n return context;\n};\n","import { useThemeContext } from '../theme/GamifyThemeContext';\n\nexport const useTheme = () => {\n const { theme, toggleTheme, setTheme } = useThemeContext();\n return { theme, toggleTheme, setTheme };\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useTheme } from '../../hooks/useTheme';\nimport './GamifyThemeToggle.css';\n\nexport const GamifyThemeToggle: React.FC<{ className?: string }> = ({ className }) => {\n const { theme, toggleTheme } = useTheme();\n\n return (\n <button\n className={clsx('gamify-theme-toggle', className)}\n onClick={toggleTheme}\n aria-label=\"Toggle Theme\"\n title={`Switch to ${theme === 'dark' ? 'light' : 'dark'} mode`}\n >\n {theme === 'dark' ? (\n <svg viewBox=\"0 0 24 24\">\n {/* Sun Icon */}\n <path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 24 24\">\n {/* Moon Icon */}\n <path d=\"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z\" />\n </svg>\n )}\n </button>\n );\n};\n","import React, { createContext, useContext, useState, useCallback, useRef } from 'react';\nimport './GamifyToast.css';\n\ninterface Toast {\n id: string;\n title: string;\n message: string;\n duration?: number;\n}\n\ninterface ToastContextType {\n addToast: (title: string, message: string, duration?: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\n\nexport const GamifyToastProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const idCounter = useRef(0);\n\n const addToast = useCallback((title: string, message: string, duration = 3000) => {\n const id = `toast-${idCounter.current++}`;\n setToasts((prev) => [...prev, { id, title, message, duration }]);\n\n setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, duration);\n }, []);\n\n return (\n <ToastContext.Provider value={{ addToast }}>\n {children}\n <div className='gamify-toast-container'>\n {toasts.map((toast) => (\n <div key={toast.id} className='gamify-toast' style={{ '--duration': `${toast.duration}ms` } as React.CSSProperties}>\n <div className='gamify-toast__icon'>🏆</div>\n <div className='gamify-toast__content'>\n <div className='gamify-toast__title'>{toast.title}</div>\n <div className='gamify-toast__message'>{toast.message}</div>\n </div>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n};\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a GamifyToastProvider');\n }\n return context;\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GamifyTooltip.css';\n\nexport interface GamifyTooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n rarity?: 'common' | 'rare' | 'epic' | 'legendary';\n}\n\nexport const GamifyTooltip: React.FC<GamifyTooltipProps> = ({\n content,\n children,\n rarity = 'common',\n}) => {\n return (\n <div className='gamify-tooltip-wrapper'>\n {children}\n <div className={clsx('gamify-tooltip', `gamify-tooltip--${rarity}`)}>\n {content}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './HealthBar.css';\n\nexport interface HealthBarProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n max: number;\n variant?: 'hp' | 'mana' | 'xp';\n showLabel?: boolean;\n}\n\nexport const HealthBar: React.FC<HealthBarProps> = ({\n value,\n max,\n variant = 'hp',\n showLabel = true,\n className,\n ...props\n}) => {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <div\n className={clsx('gamify-health-bar', `gamify-health-bar--${variant}`, className)}\n {...props}\n >\n <div\n className='gamify-health-bar__fill'\n style={{ width: `${percentage}%` }}\n />\n {showLabel && (\n <span className='gamify-health-bar__text'>\n {value} / {max}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './InventorySlot.css';\n\nexport interface InventorySlotProps extends React.HTMLAttributes<HTMLDivElement> {\n itemSrc?: string;\n count?: number;\n rarity?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary' | 'mythic';\n isActive?: boolean;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const InventorySlot: React.FC<InventorySlotProps> = ({\n itemSrc,\n count,\n rarity,\n isActive,\n size = 'md',\n className,\n ...props\n}) => {\n return (\n <div\n className={clsx(\n 'gamify-inventory-slot',\n `gamify-inventory-slot--${size}`,\n rarity && `gamify-inventory-slot--${rarity}`,\n isActive && 'gamify-inventory-slot--active',\n className\n )}\n {...props}\n >\n {itemSrc && <img src={itemSrc} alt=\"Item\" className='gamify-inventory-slot__img' />}\n {count && count > 1 && <span className='gamify-inventory-slot__count'>{count}</span>}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './QuestLog.css';\nimport { GamifyBadge } from '../GamifyBadge/GamifyBadge';\n\nexport interface Quest {\n id: string;\n title: string;\n description: string;\n status: 'active' | 'completed' | 'failed';\n rewards?: string[];\n}\n\nexport interface QuestLogProps extends React.HTMLAttributes<HTMLDivElement> {\n quests: Quest[];\n onQuestClick?: (quest: Quest) => void;\n}\n\nexport const QuestLog: React.FC<QuestLogProps> = ({\n quests,\n onQuestClick,\n className,\n ...props\n}) => {\n return (\n <div className={clsx('gamify-quest-log', className)} {...props}>\n {quests.map((quest) => (\n <div\n key={quest.id}\n className={clsx(\n 'gamify-quest-item',\n `gamify-quest-item--${quest.status}`\n )}\n onClick={() => onQuestClick?.(quest)}\n >\n <div className='gamify-quest-item__title'>\n {quest.title}\n {quest.status === 'completed' && <GamifyBadge variant='uncommon'>DONE</GamifyBadge>}\n {quest.status === 'active' && <GamifyBadge variant='legendary'>ACTIVE</GamifyBadge>}\n {quest.status === 'failed' && <GamifyBadge variant='mythic'>FAILED</GamifyBadge>}\n </div>\n <div className='gamify-quest-item__desc'>{quest.description}</div>\n </div>\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport './GamifyShareFab.css';\nimport { useToast } from '../GamifyToast/GamifyToast';\n\nexport const GamifyShareFab: React.FC = () => {\n const { addToast } = useToast();\n\n const handleShare = async () => {\n const shareData = {\n title: 'Gamify - Cyberpunk React UI Library',\n text: 'Check out Gamify! 🎮 The ultimate cyberpunk React component library for gaming apps. ⚡️',\n url: window.location.href\n };\n\n if (navigator.share) {\n try {\n await navigator.share(shareData);\n // On mobile share, success might not be returned immediately or reliably, but harmless to toast\n // addToast('Shared!', 'Thanks for spreading the word.', 2000); \n } catch (err) {\n // User cancelled or error, ignore\n }\n } else {\n // Fallback for desktop/unsupported browsers\n try {\n await navigator.clipboard.writeText(`${shareData.text}\\n${shareData.url}`);\n addToast('Link Copied!', 'Share this with your friends! 🚀', 3000);\n } catch (err) {\n addToast('Error', 'Could not access clipboard.', 2000);\n }\n }\n };\n\n return (\n <button\n className=\"gamify-share-fab\"\n onClick={handleShare}\n aria-label=\"Share Loot UI\"\n title=\"Share this page\"\n >\n <svg className=\"gamify-share-fab__icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\" />\n </svg>\n </button>\n );\n};\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","r","e","f","o","clsx","GamifyAvatar","src","alt","size","rank","status","className","jsxs","jsx","GamifyBadge","variant","GamifyButton","GamifyCard","GamifyInput","label","error","GamifyLeaderboard","data","entry","index","GamifyModal","isOpen","onClose","title","footer","useEffect","handleEsc","GamifySlider","showValue","GamifySpinner","GamifySwitch","checked","GamifyTabs","tabs","activeTabId","onTabChange","tabsRef","useRef","handleTabClick","tabId","container","clickedButton","scrollOffset","tab","GamifyThemeContext","createContext","GamifyThemeProvider","theme","setThemeState","useState","saved","toggleTheme","prev","setTheme","newTheme","useThemeContext","context","useContext","useTheme","GamifyThemeToggle","ToastContext","GamifyToastProvider","toasts","setToasts","idCounter","addToast","useCallback","message","duration","id","t","toast","useToast","GamifyTooltip","content","rarity","HealthBar","max","showLabel","percentage","InventorySlot","itemSrc","count","isActive","QuestLog","quests","onQuestClick","quest","GamifyShareFab","handleShare","shareData"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.gamify-avatar{position:relative;display:inline-block;border-radius:50%;padding:2px;background:transparent}.gamify-avatar__img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}.gamify-avatar--sm{width:32px;height:32px}.gamify-avatar--md{width:48px;height:48px}.gamify-avatar--lg{width:64px;height:64px}.gamify-avatar--xl{width:96px;height:96px}.gamify-avatar--common{background:var(--gamify-rank-common)}.gamify-avatar--uncommon{background:var(--gamify-rank-uncommon)}.gamify-avatar--rare{background:linear-gradient(135deg,var(--gamify-rank-rare),#00d2ff)}.gamify-avatar--epic{background:linear-gradient(135deg,var(--gamify-rank-epic),#ff00ea)}.gamify-avatar--legendary{background:linear-gradient(135deg,var(--gamify-rank-legendary),#ffdd00);box-shadow:0 0 10px var(--gamify-rank-legendary)}.gamify-avatar--mythic{background:linear-gradient(135deg,var(--gamify-rank-mythic),#ff0000);box-shadow:0 0 15px var(--gamify-rank-mythic);animation:pulseMythic 2s infinite}@keyframes pulseMythic{0%{box-shadow:0 0 15px var(--gamify-rank-mythic)}50%{box-shadow:0 0 25px var(--gamify-rank-mythic),inset 0 0 10px var(--gamify-rank-mythic)}to{box-shadow:0 0 15px var(--gamify-rank-mythic)}}.gamify-avatar__status{position:absolute;bottom:0;right:0;width:25%;height:25%;border-radius:50%;border:2px solid var(--gamify-bg-dark)}.gamify-avatar__status--online{background-color:var(--gamify-neon-green);box-shadow:0 0 5px var(--gamify-neon-green)}.gamify-avatar__status--offline{background-color:var(--gamify-text-muted)}.gamify-avatar__status--start{background-color:var(--gamify-neon-yellow);box-shadow:0 0 5px var(--gamify-neon-yellow)}@media(max-width:768px){.gamify-avatar--sm{width:28px;height:28px}.gamify-avatar--md{width:40px;height:40px}.gamify-avatar--lg{width:52px;height:52px}.gamify-avatar--xl{width:72px;height:72px}}@media(max-width:480px){.gamify-avatar--sm{width:24px;height:24px}.gamify-avatar--md{width:36px;height:36px}.gamify-avatar--lg{width:44px;height:44px}.gamify-avatar--xl{width:60px;height:60px}}.gamify-badge{display:inline-flex;align-items:center;justify-content:center;padding:.25rem .75rem;border-radius:4px;font-family:var(--gamify-font-body);font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;line-height:1;border:1px solid transparent;width:fit-content}.gamify-badge--common{border-color:var(--gamify-rank-common);color:var(--gamify-rank-common);background:#b0b0b01a}.gamify-badge--uncommon{border-color:var(--gamify-rank-uncommon);color:var(--gamify-rank-uncommon);background:#1eff001a}.gamify-badge--rare{border-color:var(--gamify-rank-rare);color:var(--gamify-rank-rare);background:#0070dd1a}.gamify-badge--epic{border-color:var(--gamify-rank-epic);color:var(--gamify-rank-epic);background:#a335ee1a;box-shadow:0 0 5px #a335ee33}.gamify-badge--legendary{border-color:var(--gamify-rank-legendary);color:var(--gamify-rank-legendary);background:#ff80001a;box-shadow:0 0 8px #ff80004d}.gamify-badge--mythic{border-color:var(--gamify-rank-mythic);color:var(--gamify-rank-mythic);background:#ff00001a;animation:mythicPulse 2s infinite}@keyframes mythicPulse{0%{box-shadow:0 0 5px #f003}50%{box-shadow:0 0 15px #ff000080}to{box-shadow:0 0 5px #f003}}@media(max-width:768px){.gamify-badge{padding:.2rem .5rem;font-size:.65rem;letter-spacing:.5px}}@media(max-width:480px){.gamify-badge{padding:.15rem .4rem;font-size:.6rem}}.gamify-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:var(--gamify-font-heading);font-weight:700;text-transform:uppercase;letter-spacing:1.5px;border:none;cursor:pointer;transition:var(--gamify-transition);padding:.8rem 2rem;font-size:1rem;clip-path:polygon(10% 0,100% 0,100% 70%,90% 100%,0 100%,0 30%);background-color:transparent;color:var(--gamify-text-primary);overflow:hidden;-webkit-user-select:none;user-select:none}.gamify-btn--primary{background-color:var(--gamify-neon-cyan);color:var(--gamify-text-on-primary)}.gamify-btn--primary:hover{box-shadow:var(--gamify-glow-primary);transform:translateY(-2px)}[data-theme=light] .gamify-btn--primary:hover{filter:brightness(1.1)}.gamify-btn--danger{background-color:var(--gamify-neon-pink);color:#fff}.gamify-btn--danger:hover{box-shadow:var(--gamify-glow-danger);transform:translateY(-2px)}.gamify-btn--outline{background-color:transparent;border:2px solid var(--gamify-neon-cyan);color:var(--gamify-neon-cyan);box-shadow:inset 0 0 10px #00f3ff33}[data-theme=light] .gamify-btn--outline{box-shadow:none;border-width:2px}.gamify-btn--outline:hover{background-color:#00f3ff1a;box-shadow:0 0 15px var(--gamify-neon-cyan)}[data-theme=light] .gamify-btn--outline:hover{background-color:#0891b21a;box-shadow:0 0 10px #0891b24d}.gamify-btn--ghost{background-color:#7f7f7f1a;color:var(--gamify-text-secondary)}[data-theme=light] .gamify-btn--ghost{background-color:#6366f11a}.gamify-btn--ghost:hover{background-color:#7f7f7f33;color:var(--gamify-text-primary)}[data-theme=light] .gamify-btn--ghost:hover{background-color:#6366f133}.gamify-btn--legendary{background:linear-gradient(135deg,var(--gamify-rank-legendary),#ffcc00);color:#000;box-shadow:0 0 15px var(--gamify-rank-legendary)}[data-theme=light] .gamify-btn--legendary{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.3)}.gamify-btn--legendary:hover{box-shadow:0 0 25px var(--gamify-rank-legendary);filter:brightness(1.2)}.gamify-btn--sm{padding:.5rem 1.2rem;font-size:.8rem}.gamify-btn--lg{padding:1rem 3rem;font-size:1.2rem}.gamify-btn:active{transform:translateY(1px) scale(.98)}.gamify-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:.5s}.gamify-btn:hover:before{left:100%}@media(max-width:768px){.gamify-btn{padding:.6rem 1.25rem;font-size:.85rem;letter-spacing:1px}.gamify-btn--sm{padding:.4rem .9rem;font-size:.7rem}.gamify-btn--lg{padding:.8rem 2rem;font-size:1rem}}@media(max-width:480px){.gamify-btn{padding:.5rem 1rem;font-size:.75rem;letter-spacing:.5px}.gamify-btn--lg{padding:.7rem 1.5rem;font-size:.9rem}}.gamify-card{position:relative;background:var(--gamify-bg-glass);-webkit-backdrop-filter:var(--gamify-glass-backdrop);backdrop-filter:var(--gamify-glass-backdrop);border:var(--gamify-glass-border);border-radius:12px;padding:1.5rem;transition:var(--gamify-transition);overflow:hidden;color:var(--gamify-text-secondary)}.gamify-card:before{content:"";position:absolute;inset:0;border-radius:12px;padding:1px;background:linear-gradient(145deg,#ffffff1a,#ffffff0d);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}[data-theme=light] .gamify-card:before{background:linear-gradient(145deg,#6366f114,#a21caf0a)}.gamify-card:hover{transform:translateY(-5px);box-shadow:0 10px 30px -10px #00000080,0 0 15px #00f3ff1a;border-color:#00f3ff4d}[data-theme=light] .gamify-card:hover{box-shadow:0 20px 40px -15px #6366f140,0 0 20px #6366f11a;border-color:#6366f166}.gamify-card--cyber{clip-path:polygon(20px 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%,0 20px);border-radius:0;border:1px solid var(--gamify-neon-cyan);background:var(--gamify-bg-cyber)}[data-theme=light] .gamify-card--cyber{border:2px solid #0891b2;background:linear-gradient(135deg,#f0fdfa,#ecfeff)}.gamify-card--cyber:after{content:"";position:absolute;bottom:5px;right:5px;width:10px;height:10px;background-color:var(--gamify-neon-cyan)}.gamify-card--neon{border:1px solid var(--gamify-neon-pink);box-shadow:0 0 10px #bc13fe1a}[data-theme=light] .gamify-card--neon{border:2px solid #a21caf;background:linear-gradient(135deg,#fdf4ff,#fae8ff)}.gamify-card--neon:hover{box-shadow:0 0 20px #bc13fe4d}.gamify-card__header{font-family:var(--gamify-font-heading);color:var(--gamify-text-primary);font-size:1.25rem;margin-bottom:1rem;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:.5rem}[data-theme=light] .gamify-card__header{border-bottom:1px solid rgba(99,102,241,.2)}.gamify-card__content{font-size:1rem;line-height:1.6}.gamify-card__footer{margin-top:1.5rem;display:flex;justify-content:flex-end;gap:.5rem;flex-wrap:wrap}@media(max-width:768px){.gamify-card{padding:1rem;border-radius:8px}.gamify-card:hover{transform:translateY(-2px)}.gamify-card__header{font-size:1rem;margin-bottom:.75rem}.gamify-card__content{font-size:.9rem}.gamify-card__footer{margin-top:1rem;gap:.5rem}}@media(max-width:480px){.gamify-card{padding:.75rem}.gamify-card__header{font-size:.9rem}.gamify-card__content{font-size:.85rem;line-height:1.5}}.gamify-input-wrapper{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.gamify-label{font-family:var(--gamify-font-body);color:var(--gamify-text-secondary);font-size:.9rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.gamify-input{width:100%;padding:.8rem 1rem;font-family:var(--gamify-font-body);font-size:1rem;color:var(--gamify-text-primary);background:var(--gamify-bg-input);border:var(--gamify-glass-border);border-radius:4px;outline:none;transition:var(--gamify-transition);clip-path:polygon(0 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%)}.gamify-input::placeholder{color:var(--gamify-text-muted)}.gamify-input:focus{border-color:var(--gamify-neon-cyan);background:#00f3ff0d;box-shadow:0 0 10px #00f3ff1a}.gamify-input:disabled{opacity:.6;cursor:not-allowed}.gamify-input--error{border-color:var(--gamify-neon-pink)}.gamify-input--error:focus{box-shadow:0 0 10px #bc13fe1a}.gamify-error-message{color:var(--gamify-neon-pink);font-size:.8rem;margin-top:.2rem}@media(max-width:768px){.gamify-input{padding:.6rem .8rem;font-size:.9rem}.gamify-label{font-size:.8rem}}@media(max-width:480px){.gamify-input{padding:.5rem .7rem;font-size:.85rem}.gamify-label{font-size:.75rem}.gamify-error-message{font-size:.7rem}}.gamify-leaderboard{width:100%;border-collapse:collapse;font-family:var(--gamify-font-body)}.gamify-leaderboard th,.gamify-leaderboard td{padding:1rem;text-align:left;border-bottom:1px solid rgba(255,255,255,.1)}.gamify-leaderboard th{font-family:var(--gamify-font-heading);color:var(--gamify-text-secondary);text-transform:uppercase;font-size:.9rem}.gamify-leaderboard tbody tr{transition:var(--gamify-transition)}.gamify-leaderboard tbody tr:hover{background-color:#ffffff0d}.gamify-leaderboard__rank{font-weight:700;width:50px;text-align:center}.gamify-leaderboard-row--1 .gamify-leaderboard__rank{color:gold;text-shadow:0 0 10px rgba(255,215,0,.5);font-size:1.2rem}.gamify-leaderboard-row--2 .gamify-leaderboard__rank{color:silver;text-shadow:0 0 10px rgba(192,192,192,.5);font-size:1.1rem}.gamify-leaderboard-row--3 .gamify-leaderboard__rank{color:#cd7f32;text-shadow:0 0 10px rgba(205,127,50,.5);font-size:1.1rem}.gamify-leaderboard-row--1{background:#ffd7000d}.gamify-leaderboard__player{display:flex;align-items:center;gap:.8rem;color:#fff;font-weight:700}.gamify-leaderboard__score{text-align:right;font-family:var(--gamify-font-heading);color:var(--gamify-neon-cyan)}@media(max-width:768px){.gamify-leaderboard th,.gamify-leaderboard td{padding:.6rem .5rem;font-size:.85rem}.gamify-leaderboard th{font-size:.7rem}.gamify-leaderboard__rank{width:35px}.gamify-leaderboard__player{gap:.5rem}.gamify-leaderboard__score{font-size:.9rem}}@media(max-width:480px){.gamify-leaderboard th,.gamify-leaderboard td{padding:.5rem .4rem;font-size:.75rem}.gamify-leaderboard__rank{width:30px;font-size:.9rem}.gamify-leaderboard-row--1 .gamify-leaderboard__rank,.gamify-leaderboard-row--2 .gamify-leaderboard__rank,.gamify-leaderboard-row--3 .gamify-leaderboard__rank{font-size:.95rem}}.gamify-modal-overlay{position:fixed;inset:0;background-color:#000000b3;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease-out}.gamify-modal{background:var(--gamify-bg-panel);border:1px solid var(--gamify-neon-cyan);box-shadow:0 0 20px #00f3ff33;min-width:400px;max-width:90%;position:relative;overflow:hidden;animation:scaleIn .3s cubic-bezier(.175,.885,.32,1.275)}.gamify-modal--alert{border-color:var(--gamify-neon-pink);box-shadow:0 0 20px #bc13fe33}.gamify-modal:before{content:"";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,transparent,currentColor,transparent)}.gamify-modal--default{color:var(--gamify-neon-cyan)}.gamify-modal--alert{color:var(--gamify-neon-pink)}.gamify-modal__header{padding:1rem 1.5rem;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid rgba(255,255,255,.1);background:#0003}.gamify-modal__title{font-family:var(--gamify-font-heading);font-size:1.25rem;color:#fff;text-transform:uppercase}.gamify-modal__close{background:none;border:none;color:var(--gamify-text-muted);font-size:1.5rem;cursor:pointer;transition:color .2s;line-height:1}.gamify-modal__close:hover{color:#fff}.gamify-modal__content{padding:1.5rem;color:var(--gamify-text-secondary);font-family:var(--gamify-font-body);font-size:1rem}.gamify-modal__footer{padding:1rem 1.5rem;display:flex;justify-content:flex-end;gap:1rem;border-top:1px solid rgba(255,255,255,.1);background:#0003}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@media(max-width:768px){.gamify-modal{min-width:auto;width:90%;max-width:400px;margin:1rem}.gamify-modal__header{padding:.75rem 1rem}.gamify-modal__title{font-size:1.1rem}.gamify-modal__content{padding:1rem;font-size:.9rem}.gamify-modal__footer{padding:.75rem 1rem;gap:.75rem;flex-wrap:wrap}}@media(max-width:480px){.gamify-modal{width:95%;margin:.5rem}.gamify-modal__header{padding:.6rem .75rem}.gamify-modal__title{font-size:1rem}.gamify-modal__content{padding:.75rem;font-size:.85rem}.gamify-modal__footer{padding:.6rem .75rem;flex-direction:column}.gamify-modal__close{font-size:1.25rem}}.gamify-slider-container{display:flex;flex-direction:column;gap:.5rem;width:100%}.gamify-slider-label{display:flex;justify-content:space-between;color:var(--gamify-text-secondary);font-family:var(--gamify-font-body);font-size:.9rem}.gamify-slider-value{color:var(--gamify-neon-cyan);font-family:var(--gamify-font-heading)}[data-theme=light] .gamify-slider-value{color:#4338ca}.gamify-slider{-webkit-appearance:none;appearance:none;width:100%;height:8px;background:#ffffff26;border-radius:4px;outline:none;transition:all .3s;border:1px solid rgba(255,255,255,.1)}[data-theme=light] .gamify-slider{background:#6366f133;border:1px solid rgba(99,102,241,.3)}.gamify-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;background:linear-gradient(135deg,var(--gamify-neon-cyan),#0ea5e9);border:2px solid #fff;border-radius:50%;cursor:pointer;box-shadow:0 0 10px var(--gamify-neon-cyan),0 2px 6px #0000004d;transition:transform .2s}[data-theme=light] .gamify-slider::-webkit-slider-thumb{background:linear-gradient(135deg,#4338ca,#7c3aed);border:2px solid #fff;box-shadow:0 2px 8px #4338ca66}.gamify-slider::-webkit-slider-thumb:hover{transform:scale(1.15)}.gamify-slider:active::-webkit-slider-thumb{transform:scale(1.1);box-shadow:0 0 20px var(--gamify-neon-cyan)}.gamify-slider::-moz-range-thumb{width:20px;height:20px;background:linear-gradient(135deg,var(--gamify-neon-cyan),#0ea5e9);border:2px solid #fff;border-radius:50%;cursor:pointer;box-shadow:0 0 10px var(--gamify-neon-cyan),0 2px 6px #0000004d;transition:transform .2s}[data-theme=light] .gamify-slider::-moz-range-thumb{background:linear-gradient(135deg,#4338ca,#7c3aed);border:2px solid #fff;box-shadow:0 2px 8px #4338ca66}.gamify-slider::-moz-range-track{width:100%;height:8px;background:#ffffff26;border-radius:4px;border:1px solid rgba(255,255,255,.1)}[data-theme=light] .gamify-slider::-moz-range-track{background:#6366f133;border:1px solid rgba(99,102,241,.3)}@media(max-width:768px){.gamify-slider-label{font-size:.8rem}.gamify-slider::-webkit-slider-thumb{width:18px;height:18px}.gamify-slider::-moz-range-thumb{width:18px;height:18px}}@media(max-width:480px){.gamify-slider-label{font-size:.75rem}.gamify-slider{height:5px}.gamify-slider::-webkit-slider-thumb{width:16px;height:16px}.gamify-slider::-moz-range-thumb{width:16px;height:16px}}.gamify-spinner{display:inline-block;position:relative;width:40px;height:40px}.gamify-spinner__ring{box-sizing:border-box;display:block;position:absolute;width:32px;height:32px;margin:4px;border:4px solid var(--gamify-neon-cyan);border-radius:50%;animation:gamify-spinner 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--gamify-neon-cyan) transparent transparent transparent;box-shadow:0 0 10px #00f3ff80}.gamify-spinner__ring:nth-child(1){animation-delay:-.45s}.gamify-spinner__ring:nth-child(2){animation-delay:-.3s}.gamify-spinner__ring:nth-child(3){animation-delay:-.15s}@keyframes gamify-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.gamify-spinner--sm{transform:scale(.6)}.gamify-spinner--lg{transform:scale(1.5)}.gamify-switch{position:relative;display:inline-block;width:50px;height:26px}.gamify-switch input{opacity:0;width:0;height:0}.gamify-switch__slider{position:absolute;cursor:pointer;inset:0;background-color:var(--gamify-bg-panel);transition:.4s;border:1px solid var(--gamify-rank-common);border-radius:34px}.gamify-switch__slider:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:var(--gamify-text-muted);transition:.4s;border-radius:50%}.gamify-switch input:checked+.gamify-switch__slider{background-color:#00f3ff33;border-color:var(--gamify-neon-cyan);box-shadow:0 0 10px #00f3ff4d}.gamify-switch input:checked+.gamify-switch__slider:before{transform:translate(24px);background-color:var(--gamify-neon-cyan);box-shadow:0 0 10px var(--gamify-neon-cyan)}.gamify-switch-label{display:flex;align-items:center;gap:.8rem;color:var(--gamify-text-secondary);font-family:var(--gamify-font-body);font-size:1rem;cursor:pointer}.gamify-tabs{display:flex;gap:1rem;border-bottom:2px solid rgba(255,255,255,.1);margin-bottom:1.5rem;position:relative}[data-theme=light] .gamify-tabs{border-bottom:2px solid rgba(99,102,241,.2)}.gamify-tab{padding:.8rem 1.5rem;background:none;border:none;color:var(--gamify-text-secondary);font-family:var(--gamify-font-heading);font-size:1rem;cursor:pointer;position:relative;transition:all .3s;text-transform:uppercase;letter-spacing:1px}.gamify-tab:hover{color:#fff;text-shadow:0 0 5px rgba(255,255,255,.5)}[data-theme=light] .gamify-tab:hover{color:var(--gamify-text-primary);text-shadow:none;background-color:#6366f11a;border-radius:6px}.gamify-tab--active{color:var(--gamify-neon-cyan);text-shadow:0 0 10px var(--gamify-neon-cyan)}[data-theme=light] .gamify-tab--active{color:#4338ca;text-shadow:none;font-weight:700}.gamify-tab--active:after{content:"";position:absolute;bottom:-2px;left:0;width:100%;height:2px;background:var(--gamify-neon-cyan);box-shadow:0 0 10px var(--gamify-neon-cyan);animation:glowExpand .3s ease-out}[data-theme=light] .gamify-tab--active:after{background:linear-gradient(90deg,#4338ca,#a21caf);box-shadow:0 0 8px #4338ca80;height:3px;bottom:-3px}@keyframes glowExpand{0%{width:0%;left:50%}to{width:100%;left:0}}@media(max-width:768px){.gamify-tabs{gap:.5rem;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;padding-bottom:4px;margin-bottom:1rem;flex-wrap:nowrap}.gamify-tabs::-webkit-scrollbar{display:none}.gamify-tab{padding:.7rem 1rem;font-size:.85rem;white-space:nowrap;flex-shrink:0;letter-spacing:.5px}}@media(max-width:480px){.gamify-tabs{gap:.25rem}.gamify-tab{padding:.6rem .9rem;font-size:.8rem;letter-spacing:.3px}}.gamify-theme-toggle{background:none;border:none;cursor:pointer;padding:.5rem;color:var(--gamify-text-secondary);transition:color .3s;display:flex;align-items:center;justify-content:center}.gamify-theme-toggle:hover{color:var(--gamify-neon-yellow);filter:drop-shadow(0 0 5px var(--gamify-neon-yellow))}.gamify-theme-toggle svg{width:24px;height:24px;fill:currentColor;transition:transform .5s cubic-bezier(.68,-.55,.27,1.55)}.gamify-theme-toggle:active svg{transform:rotate(90deg) scale(.8)}.gamify-toast-container{position:fixed;bottom:2rem;right:2rem;display:flex;flex-direction:column;gap:1rem;z-index:2000;pointer-events:none}.gamify-toast{pointer-events:auto;min-width:300px;background:var(--gamify-bg-panel);border-left:4px solid var(--gamify-neon-yellow);box-shadow:0 5px 15px #00000080;padding:1rem;position:relative;overflow:hidden;animation:slideInRight .3s cubic-bezier(.175,.885,.32,1.275);display:flex;align-items:center;gap:1rem}.gamify-toast:after{content:"";position:absolute;bottom:0;left:0;height:2px;background:var(--gamify-neon-yellow);width:100%;animation:progress linear forwards}.gamify-toast__icon{font-size:2rem;filter:drop-shadow(0 0 5px var(--gamify-neon-yellow))}.gamify-toast__content{flex:1}.gamify-toast__title{font-family:var(--gamify-font-heading);font-size:1rem;color:var(--gamify-neon-yellow);margin-bottom:.2rem;text-transform:uppercase}.gamify-toast__message{font-family:var(--gamify-font-body);font-size:.9rem;color:#fff}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes progress{0%{width:100%}to{width:0%}}.gamify-tooltip-wrapper{position:relative;display:inline-block}.gamify-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:.5rem;padding:.8rem;background:#0a0a14f2;border:1px solid var(--gamify-rank-common);border-radius:4px;color:#fff;font-family:var(--gamify-font-body);font-size:.9rem;white-space:nowrap;z-index:100;box-shadow:0 4px 15px #00000080;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;min-width:150px}.gamify-tooltip-wrapper:hover .gamify-tooltip{opacity:1;visibility:visible}.gamify-tooltip:after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:var(--gamify-rank-common) transparent transparent transparent}.gamify-tooltip--common{border-color:var(--gamify-rank-common)}.gamify-tooltip--common:after{border-top-color:var(--gamify-rank-common)}.gamify-tooltip--rare{border-color:var(--gamify-rank-rare);box-shadow:0 0 10px #0070dd4d}.gamify-tooltip--rare:after{border-top-color:var(--gamify-rank-rare)}.gamify-tooltip--epic{border-color:var(--gamify-rank-epic);box-shadow:0 0 10px #a335ee4d}.gamify-tooltip--epic:after{border-top-color:var(--gamify-rank-epic)}.gamify-tooltip--legendary{border-color:var(--gamify-rank-legendary);box-shadow:0 0 15px #ff80004d}.gamify-tooltip--legendary:after{border-top-color:var(--gamify-rank-legendary)}.gamify-tooltip__title{font-weight:700;text-transform:uppercase;margin-bottom:.3rem;border-bottom:1px solid rgba(255,255,255,.2);padding-bottom:.2rem;display:block}.gamify-tooltip__stat{display:flex;justify-content:space-between;font-size:.8rem;color:var(--gamify-text-secondary);margin-top:.2rem}@media(max-width:768px){.gamify-tooltip{bottom:auto;top:100%;margin-bottom:0;margin-top:.5rem;font-size:.8rem;padding:.6rem;min-width:120px;left:0;transform:none}.gamify-tooltip:after{top:auto;bottom:100%;border-color:transparent transparent var(--gamify-rank-common) transparent}.gamify-tooltip--rare:after{border-bottom-color:var(--gamify-rank-rare);border-top-color:transparent}.gamify-tooltip--epic:after{border-bottom-color:var(--gamify-rank-epic);border-top-color:transparent}.gamify-tooltip--legendary:after{border-bottom-color:var(--gamify-rank-legendary);border-top-color:transparent}.gamify-tooltip__title{font-size:.85rem}.gamify-tooltip__stat{font-size:.7rem}}@media(max-width:480px){.gamify-tooltip{font-size:.75rem;padding:.5rem;min-width:100px;white-space:normal;max-width:180px}}.gamify-health-bar{width:100%;height:24px;background-color:#00000080;border:var(--gamify-glass-border);border-radius:12px;overflow:hidden;position:relative;box-shadow:inset 0 0 10px #000c}[data-theme=light] .gamify-health-bar{background-color:#1e1b4b26;border:2px solid rgba(99,102,241,.3);box-shadow:inset 0 2px 4px #0000001a}.gamify-health-bar__fill{height:100%;background:linear-gradient(90deg,red,#ff5e00);transition:width .3s cubic-bezier(.4,0,.2,1);position:relative;border-radius:12px 0 0 12px}.gamify-health-bar__fill:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.2) 50%,transparent 100%);background-size:200% 100%;animation:shimmer 2s infinite linear}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.gamify-health-bar__text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-family:var(--gamify-font-body);font-size:.75rem;font-weight:700;text-shadow:0 0 2px black;z-index:1}.gamify-health-bar--mana .gamify-health-bar__fill{background:linear-gradient(90deg,#0040ff,#00d2ff)}.gamify-health-bar--xp .gamify-health-bar__fill{background:linear-gradient(90deg,#90f,#ff00ea)}@media(max-width:768px){.gamify-health-bar{height:20px}.gamify-health-bar__text{font-size:.65rem}}@media(max-width:480px){.gamify-health-bar{height:16px;border-radius:8px}.gamify-health-bar__fill{border-radius:8px 0 0 8px}.gamify-health-bar__text{font-size:.6rem}}.gamify-inventory-slot{width:64px;height:64px;background:#ffffff0d;border:var(--gamify-glass-border);border-radius:8px;display:flex;align-items:center;justify-content:center;position:relative;transition:all .3s;cursor:pointer}[data-theme=light] .gamify-inventory-slot{background:#6366f10d;border:2px solid rgba(99,102,241,.2)}.gamify-inventory-slot--sm{width:48px;height:48px}.gamify-inventory-slot--md{width:64px;height:64px}.gamify-inventory-slot--lg{width:96px;height:96px}.gamify-inventory-slot:hover{background:#ffffff1a;transform:translateY(-2px);box-shadow:0 5px 15px #0000004d}[data-theme=light] .gamify-inventory-slot:hover{background:#6366f11a;box-shadow:0 8px 20px #6366f126;border-color:#6366f166}.gamify-inventory-slot__img{width:70%;height:70%;object-fit:contain;filter:drop-shadow(0 0 5px rgba(0,0,0,.5))}.gamify-inventory-slot__count{position:absolute;bottom:2px;right:4px;font-family:var(--gamify-font-body);font-size:.8rem;font-weight:700;color:#fff;text-shadow:0 0 2px black}.gamify-inventory-slot--common{border-color:var(--gamify-rank-common)}.gamify-inventory-slot--uncommon{border-color:var(--gamify-rank-uncommon);box-shadow:0 0 5px var(--gamify-rank-uncommon)}.gamify-inventory-slot--rare{border-color:var(--gamify-rank-rare);box-shadow:0 0 8px var(--gamify-rank-rare)}.gamify-inventory-slot--epic{border-color:var(--gamify-rank-epic);box-shadow:0 0 10px var(--gamify-rank-epic)}.gamify-inventory-slot--legendary{border-color:var(--gamify-rank-legendary);box-shadow:0 0 12px var(--gamify-rank-legendary);animation:pulseLegendary 2s infinite}.gamify-inventory-slot--mythic{border-color:var(--gamify-rank-mythic);box-shadow:0 0 15px var(--gamify-rank-mythic);animation:pulseLegendary 2s infinite}@keyframes pulseLegendary{0%{box-shadow:0 0 12px var(--gamify-rank-legendary)}50%{box-shadow:0 0 20px var(--gamify-rank-legendary),inset 0 0 10px var(--gamify-rank-legendary)}to{box-shadow:0 0 12px var(--gamify-rank-legendary)}}.gamify-inventory-slot--active{background:#00f3ff1a;border-color:var(--gamify-neon-cyan);box-shadow:0 0 15px var(--gamify-neon-cyan)}@media(max-width:768px){.gamify-inventory-slot{width:52px;height:52px}.gamify-inventory-slot--sm{width:40px;height:40px}.gamify-inventory-slot--lg{width:72px;height:72px}.gamify-inventory-slot__count{font-size:.7rem}}@media(max-width:480px){.gamify-inventory-slot{width:44px;height:44px;border-radius:6px}.gamify-inventory-slot--sm{width:36px;height:36px}.gamify-inventory-slot--lg{width:56px;height:56px}.gamify-inventory-slot__count{font-size:.6rem}}.gamify-quest-log{display:flex;flex-direction:column;gap:.8rem}.gamify-quest-item{background:#0006;border-left:3px solid var(--gamify-text-muted);padding:.8rem;transition:var(--gamify-transition);cursor:pointer}.gamify-quest-item:hover{background:#ffffff0d}.gamify-quest-item--completed{border-left-color:var(--gamify-neon-green);opacity:.7}.gamify-quest-item--active{border-left-color:var(--gamify-neon-yellow);background:linear-gradient(90deg,rgba(250,255,0,.1),transparent)}.gamify-quest-item--failed{border-left-color:var(--gamify-neon-pink)}.gamify-quest-item__title{font-family:var(--gamify-font-body);font-weight:700;font-size:1.1rem;color:var(--gamify-text-primary);display:flex;justify-content:space-between;align-items:center}.gamify-quest-item__desc{font-family:var(--gamify-font-body);font-size:.9rem;color:var(--gamify-text-secondary);margin-top:.25rem}.gamify-quest-item__rewards{margin-top:.5rem;display:flex;gap:.5rem;flex-wrap:wrap}@media(max-width:768px){.gamify-quest-log{gap:.6rem}.gamify-quest-item{padding:.6rem}.gamify-quest-item__title{font-size:.95rem}.gamify-quest-item__desc{font-size:.8rem}}@media(max-width:480px){.gamify-quest-item{padding:.5rem}.gamify-quest-item__title{font-size:.85rem;flex-direction:column;align-items:flex-start;gap:.25rem}.gamify-quest-item__desc{font-size:.75rem}.gamify-quest-item__rewards{gap:.3rem}}.gamify-share-fab{position:fixed;bottom:2rem;right:2rem;width:56px;height:56px;border-radius:50%;background:var(--gamify-bg-popover);border:2px solid var(--gamify-neon-cyan);color:var(--gamify-neon-cyan);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:1000;box-shadow:0 0 15px #06b6d466,inset 0 0 10px #06b6d41a;transition:all .3s cubic-bezier(.175,.885,.32,1.275);overflow:hidden}.gamify-share-fab:hover{transform:scale(1.1) rotate(5deg);box-shadow:0 0 25px #06b6d499,inset 0 0 15px #06b6d433;background:#06b6d41a}.gamify-share-fab:active{transform:scale(.95)}.gamify-share-fab__icon{width:24px;height:24px;fill:currentColor;transition:transform .3s ease}@keyframes pulse-glow{0%{box-shadow:0 0 #06b6d466}70%{box-shadow:0 0 0 15px #06b6d400}to{box-shadow:0 0 #06b6d400}}.gamify-share-fab{animation:pulse-glow 3s infinite}@media(max-width:480px){.gamify-share-fab{bottom:1.5rem;right:1.5rem;width:48px;height:48px}}
|