
/* === Global Loader Hider === */
/* Hide Ant Design loaders and spinning SVG icons */

.ant-spin,
.ant-spin-spinning,
.anticon-loading,
.anticon-spin,
svg[data-icon="loading"],
svg[data-icon="sync"],
svg[class*="anticon-spin"] {
  display: none !important;
  visibility: hidden !important;
  opacity: 0 !important;
}

/* === KYC Verification Upload Styling (Updated) === */

.upload-file {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: start;
  padding: 24px 16px;
  border-radius: 12px;
  background-color: rgba(255, 255, 255, 0.04);
  backdrop-filter: blur(12px);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
  max-width: 400px;
  width: 100%;
  height: 260px;
  margin: 20px auto;
  transition: all 0.3s ease;
  background-size: cover !important;
  background-repeat: no-repeat !important;
  background-position: center !important;
}

/* Hide all content inside the box when image is uploaded */
.upload-file[style*="background-image"] > *:not(button) {
  display: none !important;
}

/* Dim uploaded image background for privacy */
.upload-file[style*="background-image"]::before {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.55); /* dim the image */
  backdrop-filter: blur(3px);
  z-index: 0;
  border-radius: 12px;
}

/* Bring inner content above blur overlay */
.upload-file * {
  position: relative;
  z-index: 1;
}

/* Style the Upload icon */
.upload-file em.profile-icon {
  font-size: 32px;
  color: #ffffffcc;
  margin-bottom: 10px;
}

/* Header text styling */
.upload-file h5 {
  color: #fff;
  font-size: 18px;
  font-weight: 600;
  margin: 4px 0 6px;
}

/* Sub-description */
.upload-file span {
  color: #ccc;
  font-size: 14px;
  text-align: center;
  margin-bottom: 12px;
}

/* Upload button styling */
.upload-file button.ant-btn {
  border-radius: 8px;
  padding: 8px 16px;
  font-weight: 500;
  background-color: #1e66f5;
  color: white;
  border: none;
  transition: background-color 0.2s ease;
}

.upload-file button.ant-btn:hover {
  background-color: #0d3fc9;
}

/* Layout for upload group */
.upload-file-group {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 20px;
}

/* Make it responsive */
@media (max-width: 768px) {
  .upload-file {
    max-width: 90%;
    height: auto;
  }
}

/* =======================
   Contests Sandbox Tweaks
   (appended by ChatGPT on request)
   ======================= */

/* ---- Config (edit these only) ---- */
:root {
  --tb-fake-members-count: "3,000";  /* shown on the card instead of real count */
  --tb-top-n: 10;                    /* visible rows in the modal members table */
}

/* ----------------------------------
   A) CARD — Replace "Members count"
   ---------------------------------- */
/* Based on provided HTML:
   <div class="info__item">
     <div class="item__label">Members count</div>
     <div class="item__data">1</div>
   </div>
   Assumes this is the FIRST .info__item in the stats block. If it's not, change
   :first-child to :nth-child(N) for the correct position. */
.info__item:first-child .item__data {
  position: relative;
  color: transparent !important;
}
.info__item:first-child .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  inset: 0;
  color: #0f172a;
  font-weight: 600;
}

/* If you prefer to hide the row entirely instead of replacing the number,
   uncomment the block below:
.info__item:first-child {
  display: none !important;
}
*/

/* ---------------------------------------------------------
   B) MODAL LIST — Blur beyond Top N (default n+11 => top 10)
   --------------------------------------------------------- */
/* Works with provided structure rooted at .ant-table-wrapper */
.ant-table-wrapper .ant-table-tbody > tr:nth-child(n+11) {
  filter: blur(6px);
  opacity: 0.6;
  pointer-events: none;
  user-select: none;
}

/* Optional helper label above the table body */
.ant-table-wrapper .ant-table-tbody::before {
  content: "Top 10 Contestants";
  display: block;
  font-weight: 600;
  margin: 8px 0;
  opacity: 0.8;
}

/* Prevent hover styles on blurred rows */
.ant-table-wrapper .ant-table-tbody > tr:nth-child(n+11):hover {
  background: transparent !important;
}

/* =======================
   Contests Sandbox Tweaks — v4 refinements
   ======================= */

/* A) Fix alignment of fake number on the CARD (right-align within the value cell) */
.info__item:first-child .item__data::after {
  /* previously inset:0 could stretch; keep it right-aligned like the original */
  left: auto;
  right: 0;
  top: 0;
  bottom: auto;
  white-space: nowrap;
}

/* B) MODAL LIST — show Top 3 only (blur 4th and below) */
.ant-table-wrapper .ant-table-tbody > tr:nth-child(n+4) {
  filter: blur(6px);
  opacity: 0.6;
  pointer-events: none;
  user-select: none;
}
.ant-table-wrapper .ant-table-tbody > tr:nth-child(n+4):hover {
  background: transparent !important;
}
.ant-table-wrapper .ant-table-tbody::before {
  content: "Top 3 Contestants";
  display: block;
  font-weight: 600;
  margin: 8px 0;
  opacity: 0.8;
}

/* C) MODAL HEADER — replace the MEMBERS number in the second tile
   Structure provided:
   <div class="info__item">
     <div class="item__img"><em class="ant-icon profile-icon profile-icon-members"></em></div>
     <div class="item__data">
       <div class="item__label">
         <div class="item__data">1</div>
         <span><span>member</span></span>
       </div>
     </div>
   </div>
   Assumes this MEMBERS tile is the SECOND .info__item in the modal header row. */
.ant-modal .info__item:nth-child(2) .item__label > .item__data {
  position: relative;
  color: transparent !important;
}
.ant-modal .info__item:nth-child(2) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
}

/* =======================
   Contests Sandbox Tweaks — v5 (scoped + safe)
   ======================= */

/* 0) Global reset to undo prior broad table styling */
body .ant-table-wrapper .ant-table-tbody::before {
  content: none !important;
}
body .ant-table-wrapper .ant-table-tbody > tr {
  filter: none !important;
  opacity: 1 !important;
  pointer-events: auto !important;
  user-select: auto !important;
}

/* 1) Re-apply ONLY inside the specific Contest Members modal.
      We scope using :has() to modals that include the 'members' icon tile. */
.ant-modal:has(.profile-icon-members) .ant-table-tbody > tr:nth-child(n+4) {
  filter: blur(6px);
  opacity: 0.6;
  pointer-events: none;
  user-select: none;
}
.ant-modal:has(.profile-icon-members) .ant-table-tbody > tr:nth-child(n+4):hover {
  background: transparent !important;
}
.ant-modal:has(.profile-icon-members) .ant-table-tbody::before {
  content: "Top 3 Contestants";
  display: block;
  font-weight: 600;
  margin: 8px 0;
  opacity: 0.8;
}

/* 2) Scope the modal header members count spoof to the same modal only */
.ant-modal:has(.profile-icon-members) .info__item:nth-child(2) .item__label > .item__data {
  position: relative;
  color: transparent !important;
}
.ant-modal:has(.profile-icon-members) .info__item:nth-child(2) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
}

/* Notes:
   - :has() is supported in all modern Chromium-based browsers and Safari.
   - If your runtime lacks :has() support, let me know and I'll provide an
     alternate scoping strategy using an extra wrapper class on the Contests page. */

/* =======================
   Contests Sandbox Tweaks — v6 (precise targeting + prize-fund fix)
   ======================= */

/* 0) Ensure prize fund tile remains untouched (explicit reset) */
.members__info .info__item:first-child .item__data > .item__data {
  /* the "45000" value in the first tile */
  color: inherit !important;
  position: static !important;
}
.members__info .info__item:first-child .item__data > .item__data::after {
  content: none !important;
}

/* 1) Spoof ONLY the MEMBERS tile number (2nd tile) and align right */
.members__info .info__item:nth-child(2) .item__label > .item__data {
  position: relative;
  color: transparent !important;
}
.members__info .info__item:nth-child(2) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
}

/* 2) Keep Top 3 visible — blur rows starting from 4th place within the contest members table only */
.members__table .ant-table-tbody > tr:nth-child(n+4) {
  filter: blur(6px);
  opacity: 0.6;
  pointer-events: none;
  user-select: none;
}
.members__table .ant-table-tbody > tr:nth-child(n+4):hover {
  background: transparent !important;
}
.members__table .ant-table-tbody::before {
  content: "Top 3 Contestants";
  display: block;
  font-weight: 600;
  margin: 8px 0;
  opacity: 0.8;
}

/* 3) Ensure any previous broad modal/table overrides are neutralized outside this scope */
.ant-modal .ant-table-tbody::before {
  content: none;
}
.ant-modal .ant-table-tbody > tr {
  filter: none;
  opacity: 1;
  pointer-events: auto;
  user-select: auto;
}

/* =======================
   Contests Sandbox Tweaks — v7 (final fix)
   - Strong scoping to the Contest Members modal only
   - Prize fund tile preserved
   - Members tile spoofed only
   - Blur from 4th row down
   ======================= */

/* A) CLEAN RESET of any earlier broad rules (but keep this before our scoped rules) */
body .ant-table-wrapper .ant-table-tbody::before { content: none !important; }
body .ant-table-wrapper .ant-table-tbody > tr {
  filter: none !important;
  opacity: 1 !important;
  pointer-events: auto !important;
  user-select: auto !important;
}
/* Also ensure no accidental spoof on generic .info__item targets */
body .info__item .item__data { color: inherit; }
body .info__item .item__data::after { content: none; }

/* B) SCOPE: apply only inside the contest members modal header & table */
body .ant-modal .members__info .info__item:first-child .item__data > .item__data {
  /* PRIZE FUND value: keep real number and normal layout */
  color: inherit !important;
  position: static !important;
}
body .ant-modal .members__info .info__item:first-child .item__data > .item__data::after {
  content: none !important;
}

/* MEMBERS tile number: spoof and right align */
body .ant-modal .members__info .info__item:nth-child(2) .item__label > .item__data {
  position: relative;
  color: transparent !important;
}
body .ant-modal .members__info .info__item:nth-child(2) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
}

/* TABLE: show Top 3 only — blur 4th+ */
body .ant-modal .members__table .ant-table-tbody > tr:nth-child(n+4) {
  filter: blur(6px) !important;
  opacity: 0.6 !important;
  pointer-events: none !important;
  user-select: none !important;
}
body .ant-modal .members__table .ant-table-tbody > tr:nth-child(n+4):hover {
  background: transparent !important;
}

/* Label above the table body */
body .ant-modal .members__table .ant-table-tbody::before {
  content: "Top 3 Contestants";
  display: block;
  font-weight: 600;
  margin: 8px 0;
  opacity: 0.8;
}

/* =======================
   Contests Sandbox Tweaks — v8 (tile fix)
   - Force prize fund tile to show real value
   - Move fake count to MEMBERS tile only
   ======================= */

/* 1) PRIZE FUND tile (gift icon) — remove any overlay from both outer and inner .item__data */
body .ant-modal .members__info .info__item:first-child .item__data {
  position: static !important;
  color: inherit !important;
}
body .ant-modal .members__info .info__item:first-child .item__data::after {
  content: none !important;
}
/* Inner value div */
body .ant-modal .members__info .info__item:first-child .item__data > .item__data {
  position: static !important;
  color: inherit !important;
}
body .ant-modal .members__info .info__item:first-child .item__data > .item__data::after {
  content: none !important;
}

/* 2) MEMBERS tile — spoof number and right-align
   Prefer a robust selector: the info__item that contains the members icon */
body .ant-modal .members__info .info__item:has(.profile-icon-members) .item__label > .item__data {
  position: relative !important;
  color: transparent !important;
}
body .ant-modal .members__info .info__item:has(.profile-icon-members) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
}

/* Safety: ensure no other tile receives a leftover ::after */
body .ant-modal .members__info .info__item:not(:has(.profile-icon-members)) .item__label > .item__data::after {
  content: none !important;
}

/* =======================
   Contests Sandbox Tweaks — v9 (members tile shows fake value, real hidden + unselectable)
   ======================= */

/* Target the MEMBERS tile by position (2nd tile) for maximum compatibility */
body .ant-modal .members__info .info__item:nth-child(2) .item__label {
  position: relative; /* anchor for absolute overlay */
}

/* Hide the real number and prevent selection */
body .ant-modal .members__info .info__item:nth-child(2) .item__label > .item__data {
  position: relative;
  color: transparent !important;  /* hide glyphs */
  user-select: none !important;   /* prevent highlight/select */
  -webkit-user-select: none !important;
  text-shadow: none !important;   /* avoid readable shadow */
  caret-color: transparent !important;
  white-space: nowrap;
}

/* Overlay the fake count; stretch over the number area so it always shows */
body .ant-modal .members__info .info__item:nth-child(2) .item__label > .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
  white-space: nowrap;
  color: inherit;
  font-weight: 600;
  line-height: 1; /* match typical metric styling */
}

/* Safety: ensure prize fund tile stays untouched */
body .ant-modal .members__info .info__item:first-child .item__data,
body .ant-modal .members__info .info__item:first-child .item__data > .item__data {
  color: inherit !important;
  position: static !important;
}
body .ant-modal .members__info .info__item:first-child .item__data::after,
body .ant-modal .members__info .info__item:first-child .item__data > .item__data::after {
  content: none !important;
}

/* =======================
   Contests Sandbox Tweaks — v10 (Hide members tile + remove table sort UI)
   ======================= */

/* 1) Hide MEMBERS tile completely */
body .ant-modal .members__info .info__item:nth-child(2) {
  display: none !important;
}

/* 2) Remove sorting icons and pointer styles in the contest table */
body .ant-modal .members__table .ant-table-thead th,
body .ant-modal .members__table .ant-table-thead .ant-table-column-sorters {
  cursor: default !important;
  pointer-events: none !important;
}

body .ant-modal .members__table .ant-table-thead .ant-table-column-sorters .ant-table-column-sorter,
body .ant-modal .members__table .ant-table-thead .ant-table-column-sorters .ant-table-column-sorter-inner,
body .ant-modal .members__table .ant-table-thead .anticon {
  display: none !important;
  visibility: hidden !important;
  width: 0 !important;
  height: 0 !important;
  overflow: hidden !important;
}

/* 3) Adjust column headers alignment after removing icons */
body .ant-modal .members__table .ant-table-thead th .ant-table-column-title span {
  padding-right: 0 !important;
  margin-right: 0 !important;
  display: inline-block !important;
}

/* Safety: preserve Prize fund tile */
body .ant-modal .members__info .info__item:first-child {
  display: flex !important;
  visibility: visible !important;
}

/* =======================
   Contests Sandbox Tweaks — v11 (Main card: protect 'Members count')
   ======================= */

/* Scope to the contest card area only if you have a wrapper.
   If not, the selectors below are already narrow (info__item + label/value structure). */

/* Identify the 'Members count' row heuristically:
   it's the .info__item whose label is immediately followed by .item__data.
   (Assumes this row appears before 'Prize fund' on the card.) */

/* Hide the real digits and block selection/copy */
.info__item:first-child .item__data {
  position: relative;
  color: transparent !important;  /* hide the real text */
  user-select: none !important;   /* block highlight/copy */
  -webkit-user-select: none !important;
  text-shadow: none !important;
  caret-color: transparent !important;
}

/* Overlay the fake number, right-aligned for a tidy look */
.info__item:first-child .item__data::after {
  content: var(--tb-fake-members-count);
  position: absolute;
  right: 0;
  top: 0;
  white-space: nowrap;
  color: #0f172a;
  font-weight: 600;
}

/* If 'Members count' is NOT the first row, change :first-child to :nth-child(N)
   where N is the position of that row inside its parent. */
