:root{
  /* ============================================================
     SYSTEM WINDOW — he thiet ke lay cam hung tu bang trang thai
     "He Thong" cua Sung Jin-Woo (Solo Leveling): nen den-xanh navy
     sau, vien/glow xanh cyan neon, diem nhan tim "Monarch".
     Toan bo ten bien CU giu nguyen 100%, chi doi gia tri mau.
     ============================================================ */
  /* TỐI ƯU HIỆU NĂNG: toàn bộ backdrop-filter:blur(...) trong file này
     đều dùng chung biến --blur-amt (thay vì số cứng 18px từng chỗ) để
     có thể HẠ độ blur trên điện thoại/máy yếu (xem @media max-width:760px
     ở cuối file) — backdrop-filter là 1 trong những hiệu ứng CSS tốn GPU
     nhất, nhất là khi có nhiều lớp chồng nhau (nav, header, card, popup)
     cùng lúc hiển thị trên màn hình nhỏ. */
  --blur-amt: 18px;
  --c-red:      #FF4D6D;   --c-red-rgb:      255,77,109;
  --c-orange:   #FF8A4D;   --c-orange-rgb:   255,138,77;
  --c-yellow:   #FFB84D;   --c-yellow-rgb:   255,184,77;
  --c-green:    #2EE6A6;   --c-green-rgb:    46,230,166;
  --c-blue:     #4DA8FF;   --c-blue-rgb:     77,168,255;
  --c-indigo:   #6C7CFF;   --c-indigo-rgb:   108,124,255;
  --c-violet:   #7B5CFF;   --c-violet-rgb:   123,92,255;

  --rgb-gradient: linear-gradient(90deg, #37D6FF, #7B5CFF);
  --rgb-gradient-diag: linear-gradient(135deg, #37D6FF, #7B5CFF);
  --rgb-gradient-2: linear-gradient(120deg, #37D6FF, #7B5CFF);
  --premium-gradient: linear-gradient(135deg, #37D6FF 0%, #7B5CFF 100%);
  --premium-gradient-soft: linear-gradient(135deg, rgba(55,214,255,.10), rgba(123,92,255,.05));

  /* ===== Nen he thong (System Background) ===== */
  --bg-0: #05070C;
  --bg-1: #080C16;
  --bg-2: #0B0F1C;
  --bg-3: #131A2E;
  --bg-line: rgba(55,214,255,.16);

  /* ===== Be mat kinh he thong (System Glass) ===== */
  --glass: rgba(55,214,255,.05);
  --glass-strong: rgba(55,214,255,.09);
  --glass-border: rgba(55,214,255,.22);
  --glass-blur: 18px;

  /* ===== Glow neon he thong ===== */
  --glow-red:    0 0 24px rgba(255,77,109,.35);
  --glow-orange: 0 0 24px rgba(255,138,77,.35);
  --glow-yellow: 0 0 24px rgba(255,184,77,.35);
  --glow-green:  0 0 24px rgba(46,230,166,.35);
  --glow-blue:   0 0 24px rgba(77,168,255,.35);
  --glow-indigo: 0 0 24px rgba(108,124,255,.35);
  --glow-violet: 0 0 24px rgba(123,92,255,.35);
  --glow-soft:   0 0 36px rgba(55,214,255,.22);

  /* ===== He bong do (van giu den thuan de tao chieu sau) ===== */
  --shadow-sm: 0 1px 2px rgba(0,0,0,.30), 0 3px 10px rgba(0,0,0,.25);
  --shadow-md: 0 2px 5px rgba(0,0,0,.32), 0 12px 26px -10px rgba(0,0,0,.45);
  --shadow-lg: 0 4px 10px rgba(0,0,0,.36), 0 26px 48px -20px rgba(0,0,0,.55);
  --shadow-xl: 0 6px 18px rgba(0,0,0,.40), 0 38px 68px -26px rgba(0,0,0,.6);
  --shadow-glow: 0 10px 26px -8px rgba(55,214,255,.35);

  --border-gradient: linear-gradient(135deg,#37D6FF,#7B5CFF);
  --border-gradient-soft: linear-gradient(135deg, rgba(55,214,255,.4), rgba(123,92,255,.4));

  --ease: cubic-bezier(.22,1,.36,1);
  --ease-spring: cubic-bezier(.34,1.56,.64,1);

  /* ===== ALIAS — anh xa bien cu sang he System Window ===== */
  --ink: #050A14;
  --ink-2: #0B0F1C;
  --crate: #0C1120;
  --crate-line: rgba(55,214,255,.16);
  --kraft: #0A0E18;
  --kraft-dark: #1B2540;
  --amber: #37D6FF;
  --amber-soft: #1F8FD1;
  --stamp: #37D6FF;
  --violet: #7B5CFF;
  --text-dark: #04101A;
  --text-light: #D9F3FF;
  --muted: #6F89AD;
  --glow-gold: rgba(55,214,255,.30);

  /* ===== PRODUCT CARD TOKENS ===== */
  --card-surface: linear-gradient(165deg, #0D1424, #070A13);
  --card-border: rgba(55,214,255,.18);
  --card-border-hover: rgba(55,214,255,.75);
  --card-text: #D9F3FF;
  --card-text-dim: #7D93B5;

  /* ===== DEDUP COLORS ===== */
  --white: #EAF7FF;
  --black: #05070C;
  --violet-deep: #201040;
  --text-muted-brown: #7D93B5;
  --pink-danger: #FF4D6D;
  --amber-deep: #0D84B8;
  --mint-success: #2EE6A6;
  --text-faint-brown: #7D93B5;
  --coral-danger: #FF4D6D;
  --gold-warning: #FFB84D;
  --tan-border: #1B2540;
  --panel-dark: #0B0F1C;
  --violet-light: #3D2F77;
  --kraft-light: #131A2E;
  --green-success: #2EE6A6;
  --void-bg: #05070C;
  --void-bg-2: #080C16;
  --panel-darker: #070A13;
  --pink-accent: #B565FF;

  /* ===== SYSTEM EFFECTS (circuit border, decrypt, iris, boot...) =====
     Bien rieng cho bo hieu ung "System Window" moi (xem cuoi file, muc
     "===== SYSTEM EFFECTS SHOWCASE INTEGRATION ====="). Dat ten theo dung
     quy uoc --c-*/--glow-* dang dung trong file, KHONG doi bien cu. */
  --c-cyan: #37D6FF;
  --c-cyan-rgb: 55,214,255;
  --c-violet-rgb: 123,92,255;
}
*{box-sizing:border-box;}
::selection{background:var(--amber);color:var(--text-dark);}
html{scroll-behavior:smooth;}
html,body{overflow-x:hidden;}

/* ============================================================
   PREMIUM BACKGROUND — aurora nhiều lớp (blur, glow, di chuyển rất
   chậm) + noise texture tinh tế, thay cho nền phẳng trước đây.
   Toàn bộ nằm ở body::before/::after -> không cần sửa HTML.
   ============================================================ */
body{
  position:relative;
  margin:0;
  background: var(--bg-0);
  color:var(--text-light);
  font-family:'Plus Jakarta Sans',sans-serif;
  min-height:100vh;
  min-height:100dvh;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
}
body::before{
  content:'';position:fixed;inset:0;z-index:-2;pointer-events:none;
  background:
    radial-gradient(560px 380px at 18% 22%, rgba(55,214,255,.10), transparent 68%),
    radial-gradient(620px 420px at 84% 16%, rgba(55,214,255,.08), transparent 70%),
    radial-gradient(560px 460px at 70% 88%, rgba(55,214,255,.07), transparent 70%);
  filter:blur(30px);
  animation:auroraDrift 30s ease-in-out infinite alternate;
}
body::after{
  /* Noise cực nhẹ để nền có "chất liệu" thay vì phẳng lì, kiểu Stripe/Linear */
  content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.035;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
a{color:inherit;}
.label{
  font-family:'JetBrains Mono',monospace;
  letter-spacing:.16em;
  text-transform:uppercase;
  font-size:11px;
  color:var(--amber);
  font-weight:700;
}
h1,h2,h3{
  font-family:'Plus Jakarta Sans',sans-serif;
  font-weight:650;
  margin:0;
  letter-spacing:-.015em;
  line-height:1.12;
  text-wrap:balance;
}
p{color:var(--text-light);}
button{font-family:inherit;}
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible{
  outline:2px solid var(--amber);outline-offset:2px;
  box-shadow:0 0 0 5px rgba(var(--c-yellow-rgb),.18);
  border-radius:6px;
}

/* ---------- CUSTOM SCROLLBAR — bo góc, gradient tinh tế ---------- */
*{scrollbar-width:thin;scrollbar-color:rgba(var(--c-indigo-rgb),.55) transparent;}
::-webkit-scrollbar{width:9px;height:9px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{
  background:linear-gradient(180deg, rgba(var(--c-indigo-rgb),.7), rgba(var(--c-violet-rgb),.55));
  border-radius:20px;border:2px solid transparent;background-clip:padding-box;
}
::-webkit-scrollbar-thumb:hover{
  background:linear-gradient(180deg, rgba(var(--c-indigo-rgb),.95), rgba(var(--c-violet-rgb),.8));
  background-clip:padding-box;
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;scroll-behavior:auto !important;}
  /* Đĩa nhạc xoay là hiệu ứng trang trí chính, không phải hiệu ứng gây khó chịu
     cần tắt vì lý do trợ năng -> loại trừ riêng để nó luôn quay bình thường,
     kể cả khi trình duyệt/hệ điều hành đang bật "giảm chuyển động". */
  .player-disc{animation-duration:3.2s !important;animation-iteration-count:infinite !important;}
}

/* ---------- HEADER ---------- */
header{
  position:sticky;top:0;z-index:30;
  padding:20px 32px;
  background:rgba(5,7,12,.68);
  backdrop-filter:blur(var(--blur-amt)) saturate(140%);
  -webkit-backdrop-filter:blur(var(--blur-amt)) saturate(140%);
  border-bottom:1px solid var(--glass-border);
  box-shadow:0 1px 0 rgba(55,214,255,.08), 0 20px 50px -30px rgba(55,214,255,.25);
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:16px;
}
.brand-title{
  font-family:'Noto Serif Display',serif;
  font-size:clamp(20px,3vw,28px);
  font-weight:600;
  font-style:italic;
  letter-spacing:-.01em;
  color:var(--text-light);
  display:flex;align-items:center;gap:11px;
  animation:inkRise 1.4s var(--ease) both;
}
.brand-title span{
  color:var(--amber);
  text-shadow:0 0 20px rgba(55,214,255,.5);
}
.brand-logo{
  width:30px;height:30px;border-radius:50%;object-fit:cover;flex:0 0 auto;
  border:2px solid var(--amber);box-shadow:0 0 0 3px rgba(55,214,255,.14);
}
@keyframes signOn{
  0%{opacity:0;filter:blur(18px);}
  8%{opacity:1;filter:blur(0);}
  16%{opacity:.3;}
  22%{opacity:1;}
  100%{opacity:1;}
}
.header-right{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
nav{display:flex;flex-wrap:wrap;gap:3px;background:rgba(55,214,255,.035);backdrop-filter:blur(var(--blur-amt));padding:5px;border-radius:14px;border:1px solid var(--glass-border);}
nav button{
  font-family:'JetBrains Mono',monospace;
  font-size:11.5px;
  letter-spacing:.06em;
  text-transform:uppercase;
  background:none;
  border:none;
  color:var(--muted);
  padding:9px 17px;
  cursor:pointer;
  border-radius:10px;
  transition:color .2s var(--ease), background .2s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease);
}
nav button.active{
  background:linear-gradient(135deg,var(--amber),var(--amber-soft));
  color:var(--text-dark);
  font-weight:700;
  box-shadow:0 0 22px -4px rgba(55,214,255,.75), inset 0 1px 0 rgba(55,214,255,.45);
  transform:translateY(-1px);
}
nav button:not(.active):hover{
  color:var(--text-light);
  background:rgba(55,214,255,.08);
  transform:translateY(-1px);
}
nav button:not(.active):active{transform:translateY(0) scale(.97);}
.user-auth-box{display:flex;align-items:center;gap:8px;}
.user-auth-btn{
  font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.14);border:1px solid rgba(55,214,255,.4);color:var(--violet);
  padding:9px 16px;border-radius:10px;cursor:pointer;transition:.18s var(--ease);
}
.user-auth-btn:hover{background:var(--violet);color:var(--white);}
.user-badge{
  display:flex;align-items:center;gap:8px;
  background:rgba(55,214,255,.05);border:1px solid rgba(55,214,255,.1);
  padding:6px 8px 6px 12px;border-radius:50px;
}
.user-badge-name{font-size:12.5px;font-weight:600;color:var(--text-light);white-space:nowrap;}
.user-badge-logout{
  font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;
  background:rgba(55,214,255,.08);border:none;color:var(--muted);
  padding:6px 10px;border-radius:50px;cursor:pointer;transition:.15s;
}
.user-badge-logout:hover{background:var(--stamp);color:var(--white);}
main{max-width:1140px;margin:0 auto;padding:44px 32px 100px;}
.view{display:none;}
.view.active{display:block;animation:fadein .45s var(--ease);}
@keyframes fadein{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
@keyframes popin{from{opacity:0;transform:translateY(16px) scale(.98);}to{opacity:1;transform:translateY(0) scale(1);}}

/* ---------- DESKTOP: THANH ĐIỀU HƯỚNG DỌC KIỂU "BOUTIQUE GALLERY" ----------
   Trên desktop, toàn bộ <header> (vốn chỉ là 1 thanh ngang) được biến thành
   1 sidebar dọc cố định bên trái. Vì các nút menu, ví, chat, đăng nhập đều là
   con/cháu trực tiếp của header nên chỉ cần đổi flex-direction là chúng tự
   xếp thành cột — không cần đổi HTML/JS. */
@media (min-width:901px){
  body{--sidebar-w:252px;}
  header.sys-circuit-border{
    position:fixed;left:0;top:0;bottom:0;height:100dvh;width:var(--sidebar-w);
    padding:30px 22px 26px;
    display:flex;flex-direction:column;align-items:flex-start;
    gap:30px;
    /* Không dùng backdrop-filter ở đây: sidebar cố định, luôn hiển thị và
       phủ toàn bộ chiều cao màn hình -> trình duyệt phải tính lại lớp kính
       mờ này mỗi khung hình khi nội dung bên phải cuộn qua, đây là nguyên
       nhân chính gây giật/lag khi cuộn trên PC (đã đo bằng Chrome trace:
       chiếm ~60% chi phí dựng hình lúc cuộn). Thay bằng nền gradient đặc
       hơn (không cần blur) để vẫn tối/đồng bộ màu mà không tốn GPU liên tục. */
    background:linear-gradient(180deg, rgba(6,8,13,.97), rgba(5,7,12,.99));
    border-bottom:none;
    border-right:1px solid var(--glass-border);
    box-shadow:none;
    overflow-y:auto;
    z-index:30;
  }
  header::after{
    content:'';position:absolute;top:0;right:-1px;bottom:0;width:1px;
    background:linear-gradient(180deg, transparent, rgba(55,214,255,.5) 30%, rgba(55,214,255,.4) 70%, transparent);
  }
  .brand-title{font-size:21px;line-height:1.2;}
  .header-right{
    display:flex;flex-direction:column;align-items:stretch;
    width:100%;flex:1;min-height:0;gap:20px;
  }
  .wallet-badge-group{order:0;width:100%;justify-content:space-between;}
  .wallet-dropdown-wrap{flex:1;min-width:0;}
  .wallet-toggle-btn{width:100%;justify-content:space-between;}
  .mobile-menu-toggle{display:none !important;}
  nav#mainNav{
    order:1;
    display:flex;flex-direction:column;align-items:stretch;
    width:100%;gap:2px;
    background:none;border:none;padding:0;
    flex:1;min-height:0;
    overflow-y:auto;
  }
  nav#mainNav button{
    width:100%;justify-content:flex-start;text-align:left;
    padding:12px 14px;border-radius:11px;
    position:relative;
  }
  nav#mainNav button.active{
    background:rgba(55,214,255,.1);
    color:var(--amber-soft);
    box-shadow:none;
    padding-left:20px;
  }
  nav#mainNav button.active::before{
    content:'';position:absolute;left:2px;top:9px;bottom:9px;width:3px;border-radius:3px;
    background:linear-gradient(180deg,var(--amber-soft),var(--amber));
    box-shadow:0 0 10px 1px rgba(55,214,255,.7);
  }
  nav#mainNav .social-fab-list{
    order:2;margin:auto 0 14px;padding-top:14px;
    border-top:1px solid var(--glass-border);
    justify-content:center;width:100%;
  }
  .admin-lock-btn{order:3;width:100%;margin-top:0;justify-content:center;max-width:none;}
  /* Đẩy khoảng chừa cho sidebar ra body, để main được tự do margin:0 auto
     và canh giữa đúng trong phần không gian còn lại (thay vì dính sát trái
     với max-width cố định + không có margin-right:auto, gây trống mảng lớn
     bên phải trên màn hình rộng). max-width cũng tăng lên để đỡ chật trên
     màn hình to. */
  body{padding-left:var(--sidebar-w);}
  main{margin-left:0;margin-right:0;margin-inline:auto;max-width:1400px;padding:52px 48px 100px;}
}

/* ---------- HOME / TOOLBAR ---------- */
.home-top{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:32px;flex-wrap:wrap;gap:14px;
}
.home-top .label{font-size:12px;color:var(--muted);}
.home-top .label b{color:var(--amber);font-style:normal;}
.add-btn{
  position:relative;overflow:hidden;isolation:isolate;
  font-family:'JetBrains Mono',monospace;
  font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  background:linear-gradient(135deg,var(--stamp),#0F6FA3);
  color:var(--white);border:none;
  padding:13px 22px;border-radius:12px;cursor:pointer;
  box-shadow:0 8px 20px -6px rgba(55,214,255,.55);
  transition:transform .28s var(--ease-spring), box-shadow .28s var(--ease);
}
.add-btn::before{
  content:'';position:absolute;inset:0;z-index:-1;
  background:linear-gradient(115deg,transparent 35%,rgba(55,214,255,.5) 48%,transparent 62%);
  transform:translateX(-130%);transition:transform .6s var(--ease);
}
.add-btn:hover{transform:translateY(-2px) scale(1.04);box-shadow:0 16px 34px -8px rgba(55,214,255,.75);}
.add-btn:hover::before{transform:translateX(130%);}
.add-btn:active{transform:translateY(0) scale(.96);}

/* ---------- SEARCH + COLLECTION CHIPS ---------- */
.search-row{margin-bottom:18px;}
.search-wrap{
  position:relative;
  display:flex;align-items:center;
  background:rgba(55,214,255,.045);
  border:1.5px solid var(--crate-line);
  border-radius:15px;
  padding:0 14px;
  transition:border-color .22s var(--ease), box-shadow .22s var(--ease), background .22s var(--ease);
}
.search-wrap.focused{
  border-color:var(--amber);
  background:rgba(55,214,255,.075);
  box-shadow:0 0 0 4px rgba(55,214,255,.16), 0 0 26px -6px rgba(55,214,255,.5), 0 14px 30px -16px rgba(0,0,0,.5);
}
.search-icon{flex:0 0 auto;color:var(--muted);transition:color .2s var(--ease);}
.search-wrap.focused .search-icon{color:var(--amber);}
.search-input{
  flex:1;min-width:0;
  background:none;border:none;outline:none;
  color:var(--text-light);
  padding:14px 10px;
  font-family:'Plus Jakarta Sans',sans-serif;font-size:14.5px;
}
.search-input::placeholder{color:var(--muted);}
.search-clear-btn{
  flex:0 0 auto;
  width:24px;height:24px;border-radius:50%;
  background:rgba(55,214,255,.08);border:none;color:var(--muted);
  display:none;align-items:center;justify-content:center;
  cursor:pointer;font-size:11px;line-height:1;
  transition:.15s;margin-right:6px;
}
.search-clear-btn:hover{background:var(--stamp);color:var(--white);}
.search-shortcut-hint{
  flex:0 0 auto;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;color:var(--muted);
  background:rgba(55,214,255,.06);border:1px solid rgba(55,214,255,.12);
  padding:3px 8px;border-radius:6px;
}
.search-wrap.focused .search-shortcut-hint{display:none;}
.search-suggestions{
  position:absolute;top:calc(100% + 10px);left:0;right:0;
  background:var(--kraft);color:var(--text-light);
  border-radius:16px;
  box-shadow:0 24px 50px -16px rgba(0,0,0,.55);
  max-height:0;opacity:0;pointer-events:none;
  transform:translateY(-6px);
  overflow:hidden;
  transition:max-height .28s var(--ease), opacity .2s var(--ease), transform .24s var(--ease);
  z-index:20;
}
.search-suggestions.open{
  max-height:420px;opacity:1;pointer-events:auto;transform:translateY(0);
  overflow-y:auto;
}
.search-suggestion-item{
  display:flex;align-items:center;gap:12px;
  padding:11px 14px;cursor:pointer;
  border-bottom:1px solid rgba(0,0,0,.06);
  transition:background .15s;
}
.search-suggestion-item:last-child{border-bottom:none;}
.search-suggestion-item:hover{background:rgba(55,214,255,.14);}
.search-suggestion-thumb{
  width:40px;height:40px;border-radius:9px;flex:0 0 40px;
  overflow:hidden;background:linear-gradient(135deg,var(--kraft-dark),var(--kraft-light));
}
.search-suggestion-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.search-suggestion-info{flex:1;min-width:0;}
.search-suggestion-title{
  font-size:13.5px;font-weight:600;color:var(--text-light);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.search-suggestion-tag{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--stamp);margin-top:2px;
}
.search-suggestion-arrow{flex:0 0 auto;color:#6F89AD;font-size:14px;}
.search-suggestion-empty{padding:20px 16px;text-align:center;color:var(--text-faint-brown);font-size:13px;}
.collection-chips{
  display:flex;flex-wrap:wrap;gap:9px;margin-bottom:28px;
}
.chip{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.045);border:1.5px solid rgba(55,214,255,.1);color:var(--muted);
  padding:9px 16px;border-radius:50px;cursor:pointer;
  display:flex;align-items:center;gap:8px;
  transition:.18s var(--ease);
}
.chip:hover{color:var(--text-light);border-color:rgba(55,214,255,.3);background:rgba(55,214,255,.08);transform:translateY(-1px);}
.chip.active{background:var(--amber);color:var(--text-dark);border-color:var(--amber);box-shadow:0 4px 18px -3px rgba(55,214,255,.65);transform:translateY(-1px);}
.chip:active{transform:translateY(0) scale(.96);}
.chip-count{opacity:.7;font-weight:400;}
.chip-remove{
  opacity:.5;font-size:12px;line-height:1;padding:2px 4px;border-radius:50%;
  transition:.15s;
}
.chip-remove:hover{opacity:1;background:rgba(0,0,0,.18);}
.chip-add{
  border-style:dashed;color:var(--amber-soft);background:none;
}
.chip-add:hover{border-color:var(--amber);color:var(--amber);background:rgba(55,214,255,.06);}
.type-toggle-row{display:flex;gap:6px;background:rgba(0,0,0,.22);padding:5px;border-radius:12px;margin:2px 0 14px;width:max-content;border:1px solid rgba(55,214,255,.06);}
.type-toggle-btn{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.04em;font-weight:700;background:none;border:none;color:var(--muted);padding:9px 22px;border-radius:9px;cursor:pointer;transition:.18s;}
.type-toggle-btn:hover{color:var(--text-light);}
.type-toggle-btn.active{background:var(--amber);color:var(--text-dark);box-shadow:0 2px 10px -2px rgba(55,214,255,.55);}
.type-radio-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.type-radio-pill{display:flex;align-items:center;gap:6px;padding:8px 14px;border-radius:10px;border:1px solid var(--kraft-dark);cursor:pointer;font-size:13.5px;font-weight:500;}
.type-radio-pill input{width:auto;margin:0;}
.modal-keytypes-section .task-claim-btn{margin:0 6px 6px 0;}

.grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));
  align-items:stretch;
  gap:24px;
}
.empty-state{
  text-align:center;padding:70px 20px;color:var(--muted);
  border:1.5px dashed rgba(55,214,255,.14);border-radius:16px;
  background:rgba(55,214,255,.02);
}

/* ---------- PRODUCT CARD — "GALLERY PIECE" (thẻ trưng bày dọc) ---------- */
.parcel{
  background:linear-gradient(160deg,var(--kraft),var(--kraft-dark));
  color:var(--text-light);
  border-radius:22px;
  position:relative;
  border:1px solid rgba(55,214,255,.5);
  box-shadow:0 1px 2px rgba(0,0,0,.2), 0 16px 34px -16px rgba(0,0,0,.55);
  display:flex;flex-direction:column;
  overflow:hidden;
  transition:transform .32s var(--ease), box-shadow .32s var(--ease), border-color .32s var(--ease);
  animation:popin .45s var(--ease) both;
}
.parcel:hover{
  transform:translateY(-6px);
  border-color:rgba(55,214,255,.6);
  box-shadow:0 1px 2px rgba(0,0,0,.2), 0 28px 48px -18px rgba(0,0,0,.65), 0 0 0 5px rgba(55,214,255,.12), 0 0 38px -4px rgba(55,214,255,.5);
}
/* Goc bracket hologram 4 goc mau cyan — chi hien khi hover. NANG CAP tu 2
   goc (::before/::after) thanh du 4 goc bang ky thuat multi-background tren
   cung 2 pseudo-element (moi pseudo ve 2 goc doi dien bang 2 lop
   linear-gradient), khong can them phan tu HTML nao. Mau doi tu
   var(--amber) sang var(--c-cyan). Sweep anh (.parcel-img-wrap::after)
   giu nguyen, khong dong cham. */
.parcel::before{
  content:'';position:absolute;inset:0;z-index:3;pointer-events:none;
  opacity:0;transition:opacity .3s var(--ease);
  background-repeat:no-repeat;
  background-image:
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan)),
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan));
  background-size:2px 20px, 20px 2px, 2px 20px, 20px 2px;
  background-position:
    10px 10px, 10px 10px,
    calc(100% - 12px) 10px, calc(100% - 30px) 10px;
}
.parcel::after{
  content:'';position:absolute;inset:0;z-index:3;pointer-events:none;
  opacity:0;transition:opacity .3s var(--ease);
  background-repeat:no-repeat;
  background-image:
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan)),
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan));
  background-size:2px 20px, 20px 2px, 2px 20px, 20px 2px;
  background-position:
    10px calc(100% - 30px), 10px calc(100% - 12px),
    calc(100% - 12px) calc(100% - 30px), calc(100% - 30px) calc(100% - 12px);
}
.parcel:hover::before, .parcel:hover::after{opacity:1;filter:drop-shadow(0 0 4px rgba(var(--c-cyan-rgb),.7));}
.parcel-img-wrap{width:100%;flex:none;aspect-ratio:5/4;overflow:hidden;background:linear-gradient(135deg,var(--kraft-dark),var(--kraft-light));position:relative;}
.parcel-img-wrap::before{
  content:'';position:absolute;inset:auto 0 0 0;height:60%;z-index:1;pointer-events:none;
  background:linear-gradient(to top, rgba(5,7,12,.62), transparent);
}
.parcel-img{
  width:100%;height:100%;object-fit:cover;
  transition:transform .5s var(--ease);
  display:block;
}
.parcel:hover .parcel-img{transform:scale(1.06);}
.parcel-img-wrap::after{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:2;
  background:linear-gradient(115deg,transparent 40%,rgba(55,214,255,.55) 50%,transparent 60%);
  transform:translateX(-120%);
}
.parcel:hover .parcel-img-wrap::after{transform:translateX(120%);transition:transform .85s var(--ease);}
.parcel-tape{
  position:absolute;left:14px;bottom:14px;top:auto;z-index:2;
  background:rgba(5,7,12,.55);backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  color:var(--amber-soft);
  font-family:'JetBrains Mono',monospace;
  font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:700;
  padding:5px 14px;
  border:1px solid rgba(55,214,255,.4);
  border-radius:50px;
  transform:none;
  max-width:calc(100% - 28px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.parcel-body{padding:18px 20px 20px;display:flex;flex-direction:column;gap:6px;flex:1;min-width:0;justify-content:flex-start;}
.parcel-body h3{font-size:17px;color:var(--text-dark);line-height:1.25;font-weight:600;}
.parcel-desc{font-size:13px;color:var(--text-muted-brown);line-height:1.45;flex:none;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.parcel-desc a, .product-modal-desc a{
  color:var(--stamp);text-decoration:underline;font-weight:600;
  word-break:break-all;
}
.parcel-desc a:hover, .product-modal-desc a:hover{color:var(--pink-danger);}
.stamp-btn{
  margin-top:10px;
  align-self:stretch;justify-content:center;
  font-family:'JetBrains Mono',monospace;
  font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  background:var(--ink);color:var(--text-light);
  border:none;
  padding:12px 20px;border-radius:11px;
  cursor:pointer;
  display:flex;align-items:center;gap:8px;
  transition:background .22s var(--ease), color .22s var(--ease), transform .22s var(--ease-spring), box-shadow .22s var(--ease);
}
.stamp-btn::after{content:'→';transition:transform .18s var(--ease);}
.stamp-btn:hover{background:var(--stamp);color:var(--white);box-shadow:0 12px 28px -6px rgba(55,214,255,.7);transform:translateY(-1px) scale(1.02);}
.stamp-btn:hover::after{transform:translateX(3px);}
.stamp-btn:active{transform:scale(.96);}
.card-admin-row{display:none;gap:8px;margin-top:10px;opacity:1;transition:opacity .2s;flex-wrap:wrap;}
@media (hover:hover) and (pointer:fine){
  .card-admin-row{opacity:.55;}
  .parcel:hover .card-admin-row{opacity:1;}
}
.admin-only{display:none !important;}
body.admin-mode .admin-only{display:revert !important;}
/* Form thêm/sửa sản phẩm Cày thuê: phải ẩn được kể cả khi đang ở admin-mode.
   LƯU Ý: rule hiện admin-only là "body.admin-mode .admin-only" (1 phần tử + 2
   class) -> muốn thắng được rule đó thì rule ẩn cũng phải có ĐỦ "body.admin-mode"
   ở trước, không thể chỉ thêm class suông như ".admin-only.combo-form-hidden"
   (2 class, thiếu phần tử "body" nên độ ưu tiên vẫn THẤP hơn, đây chính là lý do
   form cứ hiện sẵn dù đã gắn class combo-form-hidden). */
body.admin-mode .admin-only.combo-form-hidden{display:none !important;}
.admin-only.combo-form-hidden{display:none !important;}
body.admin-mode .card-admin-row{display:flex;}
.user-only{display:none !important;}
body.user-mode .user-only{display:revert !important;}
/* filemgr-mode: dành riêng cho quyền quản lý sản phẩm (thêm/sửa/xoá/ghim),
   áp dụng cho cả Admin thật lẫn user thường được cấp quyền canManageFiles.
   Chỉ mở .filemgr-only và .card-admin-row, KHÔNG mở toàn bộ .admin-only
   (dashboard, playlist, showcase... vẫn chỉ dành riêng cho Admin thật). */
.filemgr-only{display:none !important;}
body.filemgr-mode .filemgr-only{display:revert !important;}
body.filemgr-mode .card-admin-row{display:flex;}

/* ---------- VÍ TRÊN HEADER: NÚT "SỐ DƯ" + PANEL XỔ XUỐNG NGAY TẠI CHỖ ---------- */
/* Cụm Ví: nút dropdown "Số dư" + nút "+" nạp nhanh. align-items:flex-start để
   nút "+" không bị kéo lệch giữa khi panel bên dưới xổ ra làm cụm cao lên. */
.wallet-badge-group{display:flex;align-items:flex-start;gap:6px;}
.wallet-badge-add{
  width:30px;height:30px;flex:none;
  border-radius:50%;
  background:var(--amber);
  color:var(--text-dark);
  border:none;
  font-weight:900;font-size:16px;line-height:1;
  cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:.2s var(--ease);
  box-shadow:0 2px 8px rgba(55,214,255,.35);
}
.wallet-badge-add:hover{transform:scale(1.14) rotate(90deg);box-shadow:0 4px 14px rgba(55,214,255,.55);}
.wallet-badge-add:active{transform:scale(.94) rotate(90deg);}

/* Nút trigger "🪙 Số dư ⌄" — bấm để xổ ra panel nhỏ NGAY BÊN DƯỚI nó (không
   còn nổi đè lên nội dung khác nữa — trước đây dùng position:absolute nên
   trên sidebar desktop (có overflow-y:auto) bị khung sidebar cắt mất 1 phần,
   trông như lỗi vỡ giao diện). Giờ panel nằm trong luồng bình thường (đẩy các
   phần tử phía dưới xuống khi mở), y hệt kiểu "accordion" nên không bao giờ bị
   cắt hình dù ở sidebar desktop hay thanh ngang mobile. */
.wallet-dropdown-wrap{width:100%;min-width:0;}
.wallet-toggle-btn{
  appearance:none;-webkit-appearance:none;width:100%;
  font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;letter-spacing:.03em;
  background:rgba(55,214,255,.14);border:1px solid rgba(55,214,255,.4);color:var(--amber-soft);
  padding:7px 12px;border-radius:50px;display:flex;align-items:center;gap:6px;
  cursor:pointer;transition:.18s var(--ease);
}
.wallet-toggle-btn:hover{background:rgba(55,214,255,.22);}
.wallet-toggle-icon{font-size:12px;line-height:1;display:inline-block;animation:floatY 2.6s ease-in-out infinite;}
.wallet-toggle-arrow{display:inline-flex;transition:transform .2s var(--ease);font-size:13px;line-height:1;margin-left:auto;}
.wallet-toggle-btn[aria-expanded="true"] .wallet-toggle-arrow{transform:rotate(180deg);}

/* Panel: mặc định cao 0 + ẩn nội dung tràn (overflow:hidden), khi có class
   "open" thì xổ xuống bằng cách tăng max-height — không dùng position:absolute
   nên không thể bị cắt hình hay đè lên chỗ khác, chỉ đơn giản đẩy các nút bên
   dưới (Chat, avatar...) xuống thấp hơn 1 chút. */
.wallet-dropdown-panel{
  overflow:hidden;max-height:0;opacity:0;
  background:linear-gradient(160deg, rgba(55,214,255,.06), rgba(55,214,255,.015)), var(--crate);
  border:1px solid transparent;border-radius:14px;
  transition:max-height .25s var(--ease), opacity .2s var(--ease), margin-top .25s var(--ease), border-color .2s var(--ease);
}
.wallet-dropdown-panel.open{
  max-height:280px;opacity:1;margin-top:8px;
  border-color:rgba(55,214,255,.1);
  box-shadow:0 14px 32px -18px rgba(0,0,0,.6);
}
.wallet-dropdown-title{
  font-family:'JetBrains Mono',monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);font-weight:700;padding:10px 12px 4px;
}
.wallet-dropdown-row{display:flex;align-items:center;gap:9px;padding:5px 12px;border-radius:10px;}
.wallet-dropdown-icon{
  width:28px;height:28px;flex:none;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:13px;
  box-shadow:0 4px 10px -4px rgba(0,0,0,.5);
  color:var(--white);
}
.wallet-dropdown-icon-vcoin{background:linear-gradient(135deg,#0A3550,#37D6FF);}
.wallet-dropdown-icon-vipcoin{background:linear-gradient(135deg,#B78CFF,var(--violet-deep));}
.wallet-dropdown-info{min-width:0;}
.wallet-dropdown-label{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.06em;color:var(--muted);font-weight:700;text-transform:uppercase;}
.wallet-dropdown-num{
  font-family:'JetBrains Mono',monospace;font-size:15px;font-weight:700;color:var(--text-light);
  margin-top:1px;line-height:1.1;letter-spacing:.01em;word-break:break-all;
}
.wallet-dropdown-divider{height:1px;background:rgba(55,214,255,.08);margin:4px 12px;}
.wallet-dropdown-topup-btn{
  display:block;margin:10px 12px 12px;width:calc(100% - 24px);
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;letter-spacing:.03em;
  background:linear-gradient(155deg,var(--amber-soft),var(--amber) 60%,var(--amber-deep));
  color:var(--text-dark);border:none;padding:8px 12px;border-radius:10px;cursor:pointer;
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
  box-shadow:0 8px 18px -10px rgba(55,214,255,.7);
}
.wallet-dropdown-topup-btn:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 16px 30px -10px rgba(55,214,255,.95);}
.wallet-dropdown-topup-btn:active{transform:translateY(0) scale(.97);}

/* Nút hamburger cho mobile — ẩn mặc định trên desktop */
.mobile-menu-toggle{
  display:none;
  flex-direction:column;
  justify-content:center;
  align-items:center;
  gap:4px;
  width:36px;height:36px;flex:none;
  background:rgba(55,214,255,.04);
  border:1px solid rgba(55,214,255,.08);
  border-radius:9px;
  cursor:pointer;
  padding:0;
}
.mobile-menu-toggle span{
  display:block;width:16px;height:2px;
  background:var(--text-light);
  border-radius:2px;
  transition:.2s var(--ease);
}
.mobile-menu-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(6px) rotate(45deg);}
.mobile-menu-toggle[aria-expanded="true"] span:nth-child(2){opacity:0;}
.mobile-menu-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-6px) rotate(-45deg);}
.vcoin-card{
  background:linear-gradient(135deg,rgba(55,214,255,.12),rgba(55,214,255,.08));
  border:1px solid rgba(55,214,255,.3);border-radius:22px;padding:28px 32px;
  max-width:640px;margin:0 auto 24px;text-align:center;
  box-shadow:var(--shadow-lg);
  transition:box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.vcoin-card:hover{box-shadow:var(--shadow-lg), 0 0 40px -12px rgba(55,214,255,.5);border-color:rgba(55,214,255,.5);}
.vcoin-card h3{font-size:17px;margin-bottom:6px;}
.vcoin-balance-num{
  font-family:'JetBrains Mono',monospace;font-size:40px;font-weight:700;color:var(--amber);line-height:1;
  text-shadow:0 0 30px rgba(55,214,255,.35);
}
.wallet-profile-row{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:10px;}
.wallet-profile-col{flex:1 1 140px;}

/* ---------- TÀI KHOẢN CỦA TÔI (thẻ hiện avatar + coin + đăng xuất, đầu trang Hồ sơ) ---------- */
.account-card{
  background:linear-gradient(160deg, rgba(55,214,255,.055), rgba(55,214,255,.02)), var(--crate);
  border:1px solid var(--glass-border);
  border-radius:24px;padding:32px;max-width:640px;margin:0 auto 24px;
  backdrop-filter:blur(var(--blur-amt));
  box-shadow:var(--shadow-xl), inset 0 1px 0 rgba(55,214,255,.05);
  transition:box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.account-card:hover{border-color:rgba(var(--c-indigo-rgb),.35);}
.account-card-top{display:flex;align-items:center;gap:18px;flex-wrap:wrap;}
.account-avatar-wrap{position:relative;flex:0 0 auto;width:76px;height:76px;}
.account-avatar{
  width:76px;height:76px;border-radius:50%;object-fit:cover;display:block;
  border:3px solid var(--amber);background:var(--crate-line);
  box-shadow:0 0 0 5px rgba(55,214,255,.14), 0 0 30px -6px rgba(55,214,255,.35);
}
.account-avatar-edit{
  position:absolute;right:-2px;bottom:-2px;width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--amber-soft),var(--amber));color:var(--text-dark);
  border:2px solid var(--crate);cursor:pointer;transition:transform .18s var(--ease);
}
.account-avatar-edit:hover{transform:scale(1.1);}
.account-info{min-width:0;flex:1 1 auto;}
.account-name{font-size:20px;font-weight:600;color:var(--text-light);word-break:break-word;}
.account-role-tag{
  display:inline-block;margin-top:6px;font-family:'JetBrains Mono',monospace;font-size:10px;
  letter-spacing:.1em;text-transform:uppercase;font-weight:700;color:var(--white);
  background:linear-gradient(135deg,var(--violet),var(--violet-deep));padding:4px 10px;border-radius:8px;
}
.account-coin-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px;}
.account-coin-item{
  flex:1 1 140px;display:flex;align-items:center;gap:10px;
  background:rgba(55,214,255,.04);border:1px solid var(--glass-border);
  border-radius:14px;padding:12px 14px;
}
.account-coin-icon{font-size:20px;line-height:1;}
.account-coin-label{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;color:var(--muted);}
.account-coin-num{font-family:'JetBrains Mono',monospace;font-size:19px;font-weight:700;color:var(--amber);}
body.admin-mode .account-coin-row{display:none;}
.account-logout-btn{
  display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:22px;
  background:rgba(55,214,255,.03);border:1.5px solid var(--glass-border);color:var(--muted);
  font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:12px;letter-spacing:.05em;font-weight:700;
  padding:12px 18px;border-radius:12px;cursor:pointer;transition:.18s;
}
.account-logout-btn:hover{border-color:var(--coral-danger);color:var(--coral-danger);background:rgba(55,214,255,.08);}

.price-badge{
  display:inline-flex;align-items:center;gap:5px;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.04em;
  background:linear-gradient(155deg,var(--amber-soft),var(--amber) 60%,var(--amber-deep));
  color:var(--text-dark);
  padding:4px 11px;border-radius:50px;margin-top:6px;align-self:flex-start;
  box-shadow:inset 0 1px 0 rgba(55,214,255,.6), inset 0 -2px 3px rgba(0,0,0,.18), 0 3px 8px -3px rgba(55,214,255,.6);
}

.admin-lock-btn{
  --lock-accent: var(--muted);
  font-family:'Plus Jakarta Sans',sans-serif;font-size:12.5px;font-weight:600;
  display:inline-flex;align-items:center;gap:9px;
  background:rgba(55,214,255,.04);border:1px solid var(--glass-border);color:var(--muted);
  padding:5px 14px 5px 5px;border-radius:50px;cursor:pointer;
  white-space:nowrap;max-width:190px;
  transition:border-color .25s var(--ease), background .25s var(--ease), box-shadow .25s var(--ease), transform .18s var(--ease);
}
.admin-lock-btn:hover{
  transform:translateY(-1px);
  border-color:rgba(55,214,255,.5);
  background:rgba(55,214,255,.07);
  box-shadow:0 8px 20px -10px rgba(0,0,0,.5);
}
.admin-lock-btn:active{transform:translateY(0) scale(.97);}
.lock-avatar{
  flex:0 0 auto;width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;overflow:hidden;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;
  background:rgba(55,214,255,.08);color:var(--muted);
  box-shadow:inset 0 0 0 1px rgba(55,214,255,.08);
  transition:background .25s var(--ease), box-shadow .3s var(--ease), color .25s var(--ease);
}
.lock-avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%;}
.lock-info{display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-width:0;}
.lock-label{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;
  transition:color .2s var(--ease);
}
.lock-coin{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:600;color:var(--amber-soft);
}
/* Trạng thái khách (chưa đăng nhập): icon khoá, nhịp thở nhẹ mời gọi bấm */
.admin-lock-btn.is-guest .lock-avatar{
  background:rgba(55,214,255,.14);color:var(--amber-soft);
  animation:lockBreathe 2.8s ease-in-out infinite;
}
@keyframes lockBreathe{
  0%,100%{box-shadow:inset 0 0 0 1px rgba(55,214,255,.25), 0 0 0 0 rgba(55,214,255,.35);}
  50%{box-shadow:inset 0 0 0 1px rgba(55,214,255,.5), 0 0 0 5px rgba(55,214,255,0);}
}
/* Trạng thái khách hàng đã đăng nhập: avatar chữ cái đầu, gradient vàng */
.admin-lock-btn.is-user{border-color:rgba(55,214,255,.3);}
.admin-lock-btn.is-user .lock-avatar{
  background:linear-gradient(135deg,var(--amber-soft),var(--amber));
  color:var(--text-dark);
  box-shadow:0 0 0 2px rgba(55,214,255,.18);
}
.admin-lock-btn.is-user:hover{box-shadow:0 8px 22px -10px rgba(55,214,255,.5);}
/* Trạng thái Admin: avatar gradient tím-vàng + viền phát sáng xoay nhẹ, cảm giác "quyền lực" */
.admin-lock-btn.is-admin{
  border-color:rgba(55,214,255,.4);
  background:linear-gradient(135deg, rgba(55,214,255,.12), rgba(55,214,255,.08));
}
.admin-lock-btn.is-admin .lock-avatar{
  background:conic-gradient(from 0deg, var(--violet), var(--amber), var(--violet));
  color:var(--white);
  animation:lockSpin 5s linear infinite;
  box-shadow:0 0 0 2px rgba(55,214,255,.22), 0 0 14px -2px rgba(55,214,255,.6);
}
.admin-lock-btn.is-admin .lock-label{color:var(--text-light);}
@keyframes lockSpin{from{filter:hue-rotate(0deg);}to{filter:hue-rotate(360deg);}}
.admin-lock-btn.is-admin:hover{box-shadow:0 8px 24px -10px rgba(55,214,255,.6);}
.mini-btn{
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;
  background:rgba(55,214,255,.05);border:1.5px solid var(--glass-border);color:var(--text-light);
  padding:6px 12px;border-radius:8px;cursor:pointer;transition:.15s;
}
.mini-btn:hover{background:rgba(55,214,255,.16);border-color:rgba(55,214,255,.5);color:var(--amber-soft);transform:translateY(-1px);}
.mini-btn:active{transform:translateY(0) scale(.96);}

/* ---------- FORM (add/edit product) ---------- */
.form-card{
  background:linear-gradient(160deg, rgba(55,214,255,.055), rgba(55,214,255,.02)), var(--crate);
  border:1px solid var(--glass-border);
  border-radius:22px;
  padding:32px;
  max-width:540px;
  margin:0 auto;
  backdrop-filter:blur(var(--blur-amt));
  box-shadow:var(--shadow-xl), inset 0 1px 0 rgba(55,214,255,.05);
  animation:cardEnter .45s var(--ease) both;
}
.form-card h2{font-size:23px;}
#advancedSettingsDetails summary{list-style:none;display:flex;align-items:center;justify-content:space-between;}
#advancedSettingsDetails summary::-webkit-details-marker{display:none;}
#advancedSettingsDetails summary::after{content:'▾';transition:transform .18s var(--ease);color:var(--amber);}
#advancedSettingsDetails[open] summary::after{transform:rotate(180deg);}
#advancedSettingsDetails h3, #advancedSettingsDetails h4{color:var(--text-light);}
.form-card label{
  display:block;font-family:'JetBrains Mono',monospace;font-size:11px;
  text-transform:uppercase;letter-spacing:.1em;color:var(--amber);font-weight:700;
  margin:18px 0 7px;
}
.form-card input[type=text], .form-card input[type=url], .form-card input[type=password], .form-card textarea, .form-card select{
  width:100%;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:11px 14px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:14px;
  transition:border-color .22s var(--ease), box-shadow .22s var(--ease), background .22s var(--ease);
}
.form-card select{cursor:pointer;}
.form-card select option{background:var(--crate);color:var(--text-light);}
.form-card input::placeholder, .form-card textarea::placeholder{color:var(--card-text-dim);opacity:.75;}
.form-card input:focus, .form-card textarea:focus, .form-card select:focus{
  outline:none;border-color:var(--amber);background:rgba(0,0,0,.32);
  box-shadow:0 0 0 4px rgba(55,214,255,.14), 0 0 22px -6px rgba(55,214,255,.5);
}
.form-card textarea{min-height:78px;resize:vertical;}
.file-drop{
  border:1.5px dashed var(--crate-line);border-radius:14px;
  padding:22px;text-align:center;cursor:pointer;color:var(--muted);
  font-size:13px;transition:.18s;
}
.file-drop:hover{border-color:var(--amber);color:var(--amber-soft);background:rgba(55,214,255,.05);}
.file-drop img{max-height:130px;border-radius:10px;margin-top:8px;display:block;margin-left:auto;margin-right:auto;}
.form-actions{display:flex;gap:10px;margin-top:26px;}
.primary-btn{
  position:relative;overflow:hidden;isolation:isolate;
  background:linear-gradient(135deg,var(--amber-soft),var(--amber) 55%,var(--amber-deep));color:var(--text-dark);border:none;
  font-family:'JetBrains Mono',monospace;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  padding:12px 22px;border-radius:12px;cursor:pointer;font-size:13px;
  box-shadow:0 10px 26px -8px rgba(55,214,255,.65), inset 0 1px 0 rgba(55,214,255,.35);
  transition:transform .28s var(--ease-spring), box-shadow .28s var(--ease);
}
.primary-btn::before{
  content:'';position:absolute;inset:0;z-index:-1;
  background:linear-gradient(115deg,transparent 35%,rgba(55,214,255,.55) 48%,transparent 62%);
  transform:translateX(-130%);transition:transform .6s var(--ease);
}
.primary-btn:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 18px 38px -8px rgba(55,214,255,.85), inset 0 1px 0 rgba(55,214,255,.35);}
.primary-btn:hover::before{transform:translateX(130%);}
.primary-btn:active{transform:translateY(0) scale(.96);}
.primary-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;}
.ghost-btn{
  background:rgba(55,214,255,.03);border:1.5px solid var(--glass-border);color:var(--muted);
  font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:12.5px;letter-spacing:.05em;font-weight:700;
  padding:12px 22px;border-radius:12px;cursor:pointer;
  transition:border-color .22s var(--ease), color .22s var(--ease), background .22s var(--ease), transform .22s var(--ease), box-shadow .22s var(--ease);
}
.ghost-btn:hover{
  border-color:var(--amber);color:var(--text-light);background:rgba(55,214,255,.09);
  transform:translateY(-1px);box-shadow:0 10px 24px -12px rgba(55,214,255,.5);
}
.ghost-btn:active{transform:translateY(0) scale(.97);}

/* ---------- PROFILE ---------- */
.profile-card{
  background:linear-gradient(160deg, rgba(55,214,255,.055), rgba(55,214,255,.02)), var(--crate);
  border:1px solid var(--glass-border);
  border-radius:24px;padding:40px;max-width:640px;margin:0 auto;
  position:relative;backdrop-filter:blur(var(--blur-amt));
  box-shadow:var(--shadow-xl), inset 0 1px 0 rgba(55,214,255,.05);
}
.id-tag{
  position:absolute;top:-13px;right:28px;
  background:linear-gradient(135deg,var(--violet),var(--violet-deep));color:var(--white);font-family:'JetBrains Mono',monospace;
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:700;padding:6px 14px;border-radius:8px;
  box-shadow:0 6px 18px -4px var(--glow-violet);
}
.profile-top{display:flex;gap:22px;align-items:center;flex-wrap:wrap;}
.avatar{
  width:92px;height:92px;border-radius:50%;object-fit:cover;
  border:3px solid var(--amber);background:var(--crate-line);
  box-shadow:0 0 0 5px rgba(55,214,255,.14), 0 0 30px -6px rgba(55,214,255,.35);
}
.profile-name{font-size:27px;font-weight:600;}
.profile-bio{margin-top:18px;color:var(--muted);line-height:1.65;font-size:14.5px;white-space:pre-wrap;}
.social-list{margin-top:20px;display:flex;flex-direction:column;gap:2px;}
.social-list a{
  color:var(--text-light);text-decoration:none;font-size:14px;font-weight:500;
  border-bottom:1px solid rgba(55,214,255,.08);padding:12px 4px;
  display:flex;justify-content:space-between;align-items:center;
  transition:.15s;
}
.social-list a span{opacity:.4;transition:.15s;}
.social-list a:hover{color:var(--amber);padding-left:8px;}
.social-list a:hover span{opacity:1;transform:translateX(2px);}
.edit-profile-btn{margin-top:26px;}

/* ---------- WELCOME MODAL ---------- */
.overlay{
  position:fixed;inset:0;background:rgba(5,7,12,.75);
  backdrop-filter:blur(var(--blur-amt)) saturate(140%);-webkit-backdrop-filter:blur(var(--blur-amt)) saturate(140%);
  display:flex;align-items:center;justify-content:center;z-index:50;
  animation:fadein .35s var(--ease);
}
.welcome-box{
  background:linear-gradient(160deg,var(--kraft),var(--kraft-dark));
  color:var(--text-light);
  padding:40px 36px;border-radius:26px;max-width:390px;text-align:center;
  box-shadow:0 50px 110px -20px rgba(0,0,0,.7), 0 0 90px -16px rgba(55,214,255,.4);
  border:1px solid rgba(55,214,255,.6);
  position:relative;
  animation:modalPop .5s var(--ease-spring);
}
.welcome-box::before, .confirm-box::before{
  content:'';
  position:absolute;top:0;left:26px;right:26px;height:1px;
  background-image:radial-gradient(circle,rgba(5,7,12,.22) 1.4px,transparent 1.6px);
  background-size:10px 1px;background-repeat:repeat-x;background-position:top;
}
.welcome-box h2{font-size:28px;margin-bottom:12px;}
.welcome-box p{font-size:14.5px;color:var(--text-muted-brown);line-height:1.6;}
.welcome-close{
  margin-top:22px;background:var(--ink);color:var(--text-light);border:none;
  font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:12px;letter-spacing:.06em;font-weight:700;
  padding:12px 26px;border-radius:50px;cursor:pointer;transition:.18s var(--ease);
}
.welcome-close:hover{background:var(--stamp);color:var(--text-dark);transform:translateY(-2px) scale(1.04);box-shadow:0 14px 28px -8px rgba(55,214,255,.55);}
.welcome-close:active{transform:translateY(0) scale(.96);}

/* ---------- NẠP V-COIN (SEPAY VIETQR) ---------- */
.topup-box{max-width:400px;position:relative;text-align:center;}
.topup-close-x{
  position:absolute;top:14px;right:14px;background:none;border:none;cursor:pointer;
  font-size:16px;color:var(--text-faint-brown);line-height:1;padding:4px;
}
.topup-close-x:hover{color:var(--stamp);}
.topup-amount-grid{
  display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:16px;
}
.topup-amount-chip{
  background:rgba(0,0,0,.05);border:1.5px solid var(--kraft-dark);color:var(--text-light);
  font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;
  padding:10px 4px;border-radius:10px;cursor:pointer;transition:.15s;
}
.topup-amount-chip:hover{border-color:var(--stamp);}
.topup-amount-chip.active{background:var(--stamp);border-color:var(--stamp);color:var(--white);}
.topup-qr-img{
  width:220px;height:220px;object-fit:contain;background:var(--white);border-radius:14px;
  margin:14px auto 4px;display:block;border:1px solid var(--kraft-dark);padding:8px;
}
.topup-info-row{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  font-size:13px;color:var(--text-muted-brown);padding:7px 2px;border-bottom:1px solid rgba(0,0,0,.08);text-align:left;
}
.topup-info-row b{color:var(--text-light);font-family:'JetBrains Mono',monospace;font-size:12.5px;text-align:right;word-break:break-all;}
.topup-note{font-size:12px;color:var(--text-faint-brown);margin-top:10px;line-height:1.5;text-align:left;}
.topup-status{
  margin-top:14px;font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:700;
  color:var(--text-muted-brown);display:flex;align-items:center;justify-content:center;gap:8px;
}
.topup-status-dot{
  width:9px;height:9px;border-radius:50%;background:var(--amber);
  animation:topupPulse 1.1s ease-in-out infinite;
}
.topup-status.paid .topup-status-dot{background:var(--green-success);animation:none;}
.topup-status.paid{color:#2EE6A6;font-weight:700;}
@keyframes topupPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.4;transform:scale(.7);}}
.topup-success-icon{
  width:64px;height:64px;border-radius:50%;background:var(--green-success);color:var(--white);
  font-size:32px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;
}

/* ---------- TRANG "NẠP COIN" (tab riêng, thay cho modal cũ) ---------- */
.topup-page-balance{
  display:flex;align-items:center;gap:16px;
  background:linear-gradient(135deg,rgba(55,214,255,.14),rgba(55,214,255,.08));
  border:1px solid rgba(55,214,255,.3);border-radius:18px;padding:20px 26px;
  max-width:920px;margin:0 auto 22px;
}
.topup-page-balance-icon{font-size:34px;line-height:1;}
.topup-page-balance-label{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);font-weight:700;
}
.topup-page-balance-num{
  font-family:'JetBrains Mono',monospace;font-size:32px;font-weight:700;color:var(--amber);line-height:1.25;
}
.topup-page-grid{
  display:grid;grid-template-columns:400px 1fr;gap:22px;
  max-width:920px;margin:0 auto;align-items:start;
}
.topup-page-card{margin:0;max-width:none;} /* huỷ max-width/canh giữa mặc định của .welcome-box vì giờ nằm trong grid, không phải modal nổi giữa màn hình */

.topup-history-card{
  background:rgba(55,214,255,.03);border:1px solid rgba(55,214,255,.08);
  border-radius:20px;padding:22px 24px;
}
.topup-history-card h3{font-size:16px;margin-bottom:14px;}
.topup-history-list{display:flex;flex-direction:column;gap:10px;max-height:560px;overflow-y:auto;}
.topup-history-empty{color:var(--muted);font-size:13px;text-align:center;padding:34px 10px;}
.topup-history-item{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:12px 14px;border-radius:12px;background:rgba(55,214,255,.03);border:1px solid rgba(55,214,255,.06);
}
.topup-history-item-left{display:flex;flex-direction:column;gap:3px;}
.topup-history-code{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--muted);}
.topup-history-amount{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:700;color:var(--text-light);}
.topup-history-date{font-size:11.5px;color:var(--muted);}
.topup-history-badge{
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;padding:4px 10px;
  border-radius:50px;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap;flex:0 0 auto;
}
.topup-history-badge.success{background:rgba(55,214,255,.18);color:var(--mint-success);}
.topup-history-badge.pending{background:rgba(55,214,255,.18);color:var(--amber-soft);}
.topup-history-badge.underpaid{background:rgba(55,214,255,.18);color:var(--gold-warning);}
.topup-history-badge.expired{background:rgba(55,214,255,.08);color:var(--muted);}
/* Badge phân biệt nguồn đơn trong khối "Lịch sử mua hàng" hợp nhất ở trang Hồ sơ */
.topup-history-badge.src-carethue{background:rgba(55,214,255,.18);color:#D9F3FF;}
.topup-history-badge.src-premium{background:rgba(55,214,255,.18);color:var(--amber-soft);}
.topup-history-badge.src-product{background:rgba(55,214,255,.18);color:var(--mint-success);}
.topup-history-badge.src-claim{background:rgba(55,214,255,.18);color:var(--gold-warning);}

/* Nút "Mở Form" trong lịch sử mua Cày thuê dùng thẻ <a> (không phải <button>)
   nên cần ép lại display/text-decoration để trông giống .ghost-btn bình thường. */
#carethueHistoryList a.ghost-btn{display:inline-block;text-decoration:none;padding:8px 14px;font-size:11px;}

@media (max-width:760px){
  .topup-page-grid{grid-template-columns:1fr;}
  .topup-page-card{max-width:none;}
}

/* ---------- NHIỆM VỤ (VƯỢT LINK NHẬN V-COIN) ---------- */
.tasks-balance-card{
  display:flex;align-items:center;gap:16px;
  background:linear-gradient(135deg,rgba(55,214,255,.14),rgba(55,214,255,.08));
  border:1px solid rgba(55,214,255,.3);border-radius:18px;padding:20px 26px;
  max-width:920px;margin:0 auto 22px;
}
.tasks-balance-icon{font-size:34px;line-height:1;}
.tasks-balance-label{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);font-weight:700;
}
.tasks-balance-num{
  font-family:'JetBrains Mono',monospace;font-size:32px;font-weight:700;color:var(--amber);line-height:1.25;
}

.tasks-intro-row{
  display:flex;align-items:flex-start;justify-content:space-between;gap:18px;
  max-width:920px;margin:0 auto 26px;
}
.tasks-intro-text{font-size:13.5px;color:var(--muted);line-height:1.6;max-width:600px;margin:0;}
.tasks-refresh-btn{
  display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;padding:10px 18px;
}
.tasks-refresh-btn svg{transition:transform .4s var(--ease);}
.tasks-refresh-btn.spinning svg{animation:spin .7s linear infinite;}

.tasks-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px;
  max-width:920px;margin:0 auto;
}
.tasks-empty{
  grid-column:1/-1;text-align:center;color:var(--muted);font-size:13.5px;
  padding:50px 20px;border:1.5px dashed var(--crate-line);border-radius:18px;
}

/* Thẻ nhiệm vụ — lấy ý tưởng bố cục từ các trang "vượt link" tham khảo
   (tiêu đề đậm + logo góc, pill hiển thị trạng thái, nút CTA to full-width),
   nhưng phối màu theo đúng theme tối/kraft sẵn có của web (amber/violet)
   thay vì bê nguyên nền trắng/hồng của trang tham khảo, để không bị lạc tông
   với phần còn lại của giao diện. */
.task-card{
  position:relative;
  background:var(--card-surface);border:1px solid var(--card-border);
  border-radius:18px;padding:22px;
  box-shadow:var(--shadow-md);
  transition:transform .35s var(--ease), border-color .35s var(--ease), box-shadow .35s var(--ease), opacity .7s var(--ease), filter .7s var(--ease);
  display:flex;flex-direction:column;gap:14px;
}
.task-card:hover{transform:translateY(-6px);border-color:var(--card-border-hover);box-shadow:var(--shadow-lg), 0 0 32px -10px rgba(var(--c-indigo-rgb),.4);}
.task-card.is-done{opacity:.6;}
.task-card.is-done:hover{transform:none;}

.task-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.task-card-title{
  font-family:'JetBrains Mono',monospace;font-size:16.5px;font-weight:700;color:var(--text-light);
  text-transform:uppercase;letter-spacing:.02em;line-height:1.3;
}
.task-provider-icon{
  width:40px;height:40px;border-radius:12px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;font-size:19px;
  background:rgba(55,214,255,.16);border:1px solid rgba(55,214,255,.3);
}

/* Huy hiệu thưởng V-coin — pill đặc màu amber, gọn dưới tiêu đề, tương ứng
   với pill "HCOIN" hồng ở ảnh tham khảo nhưng theo tông màu của web. */
.task-reward-badge{
  align-self:flex-start;display:inline-flex;align-items:center;gap:5px;
  font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:700;
  color:var(--text-dark);background:linear-gradient(135deg,var(--amber-soft),var(--amber));
  padding:6px 13px;border-radius:50px;
  box-shadow:0 6px 14px -6px rgba(55,214,255,.55);
}

/* ---------- GIÁ ĐÃ GIẢM (voucher, xem routes/codes.js) ----------
   Dùng ở modal sản phẩm, mua key, và nút thanh toán Cày thuê (xem hàm
   priceHtmlWithDiscount() trong app.js). Giá gốc gạch ngang mờ đi, giá đã
   giảm giữ màu nổi bật như bình thường, kèm nhãn hồng "-X%". */
.price-discount-wrap{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;}
.price-old{
  text-decoration:line-through;opacity:.55;font-weight:500;
  font-family:'JetBrains Mono',monospace;font-size:.92em;
}
.price-off-badge{
  display:inline-flex;align-items:center;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:800;
  letter-spacing:.02em;color:#fff;
  background:linear-gradient(135deg,var(--pink-danger),#ff6b9d);
  padding:2px 7px;border-radius:50px;line-height:1.5;
}

.task-card-desc{font-size:13px;color:var(--muted);line-height:1.55;margin:0;}

/* Thanh trạng thái/lượt — tương ứng với pill xám "0/2 lượt" ở ảnh tham khảo */
.task-info-bar{
  display:flex;align-items:center;gap:7px;
  background:rgba(55,214,255,.045);border:1px solid rgba(55,214,255,.08);
  border-radius:11px;padding:9px 13px;
  font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:700;letter-spacing:.02em;
  color:var(--muted);
}
.task-info-bar svg{flex:0 0 auto;opacity:.85;}
.task-info-bar.ready{color:var(--mint-success);}
.task-info-bar.cooldown{color:var(--amber-soft);}
.task-info-bar.guest{color:var(--gold-warning);}

/* Nút CTA to, full-width, bo tròn — như nút hồng "Lấy link vượt" ở ảnh tham khảo */
.task-claim-btn{
  width:100%;background:linear-gradient(135deg,var(--violet),var(--violet-deep));color:var(--white);border:none;
  font-family:'JetBrains Mono',monospace;font-weight:700;font-size:13px;letter-spacing:.04em;
  padding:13px 18px;border-radius:50px;cursor:pointer;transition:.18s var(--ease);
  box-shadow:0 10px 22px -10px rgba(55,214,255,.6);
  position:relative;
}
.task-claim-btn:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 16px 32px -10px rgba(55,214,255,.8);}
.task-claim-btn:active{transform:translateY(0) scale(.96);}
.task-claim-btn:disabled{
  background:rgba(55,214,255,.07);color:var(--muted);cursor:not-allowed;transform:none;box-shadow:none;
}
.task-claim-btn.loading{color:transparent;}
.task-claim-btn.loading::after{
  content:'';position:absolute;inset:0;margin:auto;width:16px;height:16px;
  border:2px solid rgba(55,214,255,.4);border-top-color:var(--white);border-radius:50%;
  animation:spin .7s linear infinite;
}

/* Nút Sửa/Xoá ngay trên card khách xem (chỉ Admin thấy) — dùng .ghost-btn làm nền
   vì task-card có nền tối, .mini-btn (chữ tối trên nền sáng) sẽ gần như vô hình ở đây. */
.task-admin-actions{display:flex;gap:8px;}
.task-admin-actions .ghost-btn{flex:1;padding:8px 10px;font-size:11px;border-radius:8px;}
.task-admin-delete-btn{border-color:rgba(55,214,255,.4) !important;color:var(--stamp) !important;}
.task-admin-delete-btn:hover{background:var(--stamp) !important;color:var(--white) !important;border-color:var(--stamp) !important;}
.task-inactive-badge{
  display:inline-block;margin-left:8px;vertical-align:middle;
  font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;
  color:var(--stamp);background:rgba(55,214,255,.14);border:1px solid rgba(55,214,255,.35);
  padding:2px 9px;border-radius:50px;
}

@media (max-width:640px){
  .tasks-intro-row{flex-direction:column;}
  .tasks-refresh-btn{align-self:flex-start;}
}

/* ---------- BẢNG XẾP HẠNG (TOP NẠP / TOP VƯỢT LINK) — Solo Leveling Status Window ---------- */
@keyframes lbGlowPulse{
  0%,100%{opacity:.55;}
  50%{opacity:1;}
}
@keyframes lbScan{
  0%{transform:translateY(-100%);}
  100%{transform:translateY(2200%);}
}
@keyframes lbRise{
  from{opacity:0;transform:translateY(10px);}
  to{opacity:1;transform:translateY(0);}
}

.lb-board{
  display:grid;grid-template-columns:1fr auto 1fr;gap:0;
  max-width:980px;margin:0 auto;align-items:start;
}
.lb-col-divider{
  display:flex;align-items:center;justify-content:center;
  position:relative;width:46px;align-self:stretch;
}
.lb-col-divider::before{
  content:'';position:absolute;top:6px;bottom:6px;left:50%;width:1px;
  background:linear-gradient(180deg,transparent,var(--card-border-hover),transparent);
}
.lb-col-divider span{
  position:relative;z-index:1;background:var(--ink);color:var(--amber);
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:800;letter-spacing:.08em;
  width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--card-border-hover);
  box-shadow:0 0 14px -2px rgba(55,214,255,.7), inset 0 0 8px rgba(55,214,255,.25);
  animation:lbGlowPulse 2.4s ease-in-out infinite;
}

.lb-col{
  position:relative;min-width:0;
  background:
    linear-gradient(165deg, rgba(13,20,36,.96), rgba(5,8,17,.98));
  border:1px solid var(--card-border);
  clip-path:polygon(0 14px,14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%);
  padding:2px;
  box-shadow:0 0 0 1px rgba(55,214,255,.06), var(--shadow-md);
}
.lb-col::before{
  /* thin inner frame like a system/status window */
  content:'';position:absolute;inset:6px;pointer-events:none;
  border:1px solid rgba(55,214,255,.14);
  clip-path:polygon(0 11px,11px 0,100% 0,100% calc(100% - 11px),calc(100% - 11px) 100%,0 100%);
}

.lb-col-head{
  position:relative;display:flex;align-items:center;gap:12px;
  padding:16px 18px 14px;
  border-bottom:1px solid var(--card-border);
  background:linear-gradient(90deg, rgba(55,214,255,.1), rgba(55,214,255,0) 70%);
}
.lb-col-head-glyph{
  flex:0 0 auto;width:38px;height:38px;display:flex;align-items:center;justify-content:center;
  font-size:18px;background:rgba(55,214,255,.08);
  border:1px solid var(--card-border-hover);
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
  box-shadow:0 0 12px -2px rgba(55,214,255,.55);
}
.lb-col-title{
  font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:800;
  letter-spacing:.05em;text-transform:uppercase;color:var(--amber);
  text-shadow:0 0 12px rgba(55,214,255,.55);
}
.lb-col-sub{font-size:10.5px;color:var(--muted);letter-spacing:.03em;margin-top:2px;font-style:italic;}

.lb-list{
  display:flex;flex-direction:column;gap:8px;padding:14px;position:relative;z-index:1;
  min-height:120px;
}
.lb-empty{
  text-align:center;color:var(--muted);font-size:13px;
  padding:44px 16px;border:1.5px dashed var(--crate-line);
  clip-path:polygon(0 10px,10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%);
}

.lb-row{
  position:relative;display:flex;align-items:center;gap:12px;
  background:linear-gradient(90deg, rgba(55,214,255,.05), rgba(255,255,255,.015));
  border:1px solid var(--card-border);
  clip-path:polygon(0 8px,8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%);
  padding:10px 12px;overflow:hidden;
  transition:transform .25s var(--ease), border-color .25s var(--ease), box-shadow .25s var(--ease);
  animation:lbRise .4s var(--ease) both;
}
.lb-row::after{
  /* faint vertical scan-line sweep, Solo Leveling "system window" flavor */
  content:'';position:absolute;left:0;right:0;top:0;height:40%;
  background:linear-gradient(180deg, rgba(55,214,255,.14), transparent);
  opacity:0;transition:opacity .25s var(--ease);pointer-events:none;
}
.lb-row:hover{transform:translateX(3px);border-color:var(--card-border-hover);box-shadow:var(--shadow-md), 0 0 16px -6px rgba(55,214,255,.6);}
.lb-row:hover::after{opacity:1;}

.lb-row.top1{
  border-color:rgba(55,214,255,.85);
  background:linear-gradient(90deg, rgba(55,214,255,.16), rgba(55,214,255,.02));
  box-shadow:0 0 26px -8px rgba(55,214,255,.75), inset 0 0 0 1px rgba(55,214,255,.15);
}
.lb-row.top2{border-color:rgba(55,214,255,.55);box-shadow:0 0 16px -8px rgba(55,214,255,.5);}
.lb-row.top3{border-color:rgba(55,214,255,.38);}

.lb-rank{
  flex:0 0 auto;width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:800;color:var(--muted);
  border:1px solid var(--card-border);
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
}
/* rank badges styled like Hunter Association letter ranks (S/A/B) */
.lb-rank.medal{
  font-size:13px;font-weight:900;letter-spacing:.02em;
}
.lb-row.top1 .lb-rank{
  color:#08131f;background:linear-gradient(160deg,#37D6FF,#0D84B8);
  border-color:rgba(55,214,255,.9);box-shadow:0 0 14px -2px rgba(55,214,255,.9);
}
.lb-row.top2 .lb-rank{color:var(--text-light);background:rgba(55,214,255,.22);border-color:rgba(55,214,255,.6);}
.lb-row.top3 .lb-rank{color:var(--text-light);background:rgba(55,214,255,.12);border-color:rgba(55,214,255,.4);}

.lb-avatar{
  flex:0 0 auto;width:38px;height:38px;overflow:hidden;background:var(--bg-2);
  border:1.5px solid var(--card-border);
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
}
.lb-row.top1 .lb-avatar{border-color:rgba(55,214,255,.85);box-shadow:0 0 12px -2px rgba(55,214,255,.7);}
.lb-avatar img{width:100%;height:100%;object-fit:cover;display:block;}

.lb-info{flex:1;min-width:0;}
.lb-name{
  font-size:13.5px;font-weight:700;color:var(--text-light);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.lb-sub{font-size:10.5px;color:var(--muted);margin-top:1px;font-family:'JetBrains Mono',monospace;}

.lb-value{
  flex:0 0 auto;text-align:right;
  font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:800;color:var(--amber);
  text-shadow:0 0 8px rgba(55,214,255,.35);
}
.lb-value small{display:block;font-family:'Plus Jakarta Sans',sans-serif;font-size:9.5px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;text-shadow:none;}

@media (max-width:820px){
  .lb-board{grid-template-columns:1fr;gap:22px;}
  .lb-col-divider{
    width:auto;height:24px;align-self:center;
  }
  .lb-col-divider::before{top:50%;bottom:auto;left:6px;right:6px;width:auto;height:1px;
    background:linear-gradient(90deg,transparent,var(--card-border-hover),transparent);}
}
@media (max-width:640px){
  .lb-row{padding:8px 10px;gap:9px;}
  .lb-avatar{width:32px;height:32px;}
  .lb-name{font-size:12.5px;}
  .lb-col-head{padding:13px 14px 11px;}
}

/* ---------- USER AUTH MODAL ---------- */
.auth-tabs{display:flex;gap:6px;background:rgba(0,0,0,.06);padding:5px;border-radius:12px;margin-bottom:18px;}
.auth-tab-btn{
  flex:1;font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  background:none;border:none;color:var(--text-faint-brown);padding:10px 8px;border-radius:9px;cursor:pointer;transition:.18s var(--ease);
}
.auth-tab-btn.active{background:var(--ink);color:var(--text-light);}
.auth-form{display:none;text-align:left;}
.auth-form.active{display:block;}
.auth-form input{
  width:100%;padding:11px 14px;border-radius:10px;border:1.5px solid var(--tan-border);background:rgba(55,214,255,.06);color:var(--text-light);
  font-size:14px;box-sizing:border-box;margin-bottom:10px;font-family:'Plus Jakarta Sans',sans-serif;
}
.auth-form label{
  display:block;font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;
  color:#D9F3FF;font-weight:700;margin-bottom:5px;
}
.auth-error-msg{display:none;color:var(--pink-danger);font-size:12.5px;margin-top:2px;margin-bottom:8px;font-weight:600;}

/* ---------- MUSIC PLAYER (mini player) ---------- */
.player-bar{
  position:fixed;bottom:calc(26px + env(safe-area-inset-bottom));right:calc(26px + env(safe-area-inset-right));z-index:40;
  width:320px;max-width:calc(100vw - 32px);
  background:linear-gradient(160deg, rgba(5,7,12,.9), rgba(5,7,12,.9));
  backdrop-filter:blur(var(--blur-amt)) saturate(160%);
  -webkit-backdrop-filter:blur(var(--blur-amt)) saturate(160%);
  border:1px solid var(--card-border);
  border-radius:20px;
  padding:16px 16px 12px 16px;
  box-shadow:var(--shadow-lg), 0 0 40px -18px rgba(var(--c-indigo-rgb),.4);
  color:var(--text-light);
  transition:opacity .3s var(--ease), transform .3s var(--ease),
    width .35s var(--ease), height .35s var(--ease), padding .35s var(--ease),
    border-radius .35s var(--ease), background .35s var(--ease), box-shadow .35s var(--ease);
}
.player-bar.hidden{display:none;}
.player-bar.collapsed{
  width:74px;height:74px;padding:0;border-radius:50%;
  background:transparent;box-shadow:none;border-color:transparent;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
}
.player-bar.collapsed .player-disc-wrap{margin:0;}
.player-bar.collapsed .player-info,
.player-bar.collapsed .player-controls,
.player-bar.collapsed .player-delete-btn,
.player-bar.collapsed .player-extra-row{display:none;}
.player-delete-btn{
  position:absolute;top:8px;right:10px;
  width:22px;height:22px;border-radius:50%;
  background:rgba(55,214,255,.07);border:none;color:var(--muted);
  display:none;align-items:center;justify-content:center;cursor:pointer;
  font-size:12px;line-height:1;transition:.15s;
}
.player-delete-btn:hover{background:var(--stamp);color:var(--white);}
body.admin-mode .player-delete-btn{display:flex;}
body.admin-mode .player-bar.collapsed .player-delete-btn{display:none;}
.player-disc-wrap{
  width:74px;height:74px;border-radius:50%;
  background:var(--ink);padding:3px;
  box-shadow:0 10px 24px -8px rgba(0,0,0,.5), 0 0 0 2px rgba(55,214,255,.4);
  margin:-46px auto 10px;
  cursor:pointer;
}
.player-disc{
  width:100%;height:100%;border-radius:50%;
  overflow:hidden;position:relative;
  background:
    repeating-radial-gradient(circle at 50% 50%,
      var(--void-bg) 0px, var(--void-bg) 3px,
      var(--void-bg-2) 4px, var(--void-bg-2) 5px);
  animation:spin 3.2s linear infinite;
  display:flex;align-items:center;justify-content:center;
}
.player-disc.paused{animation-play-state:paused;}
.player-disc img{
  width:100%;height:100%;object-fit:cover;border-radius:50%;
}
.player-disc:not(.has-art)::after{
  content:'';
  width:38%;height:38%;border-radius:50%;
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  background:radial-gradient(circle at 35% 35%, var(--amber-soft), var(--amber) 70%);
  box-shadow:0 0 0 2px rgba(0,0,0,.5);
}
@keyframes spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}
.player-info{min-width:0;text-align:center;}
.player-title{
  font-family:'JetBrains Mono',monospace;
  font-size:12.5px;font-weight:700;letter-spacing:.02em;color:var(--text-light);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.player-artist{
  font-family:'JetBrains Mono',monospace;
  font-size:11px;letter-spacing:.03em;color:var(--muted);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.player-progress-row{
  display:flex;align-items:center;gap:8px;margin-top:9px;width:100%;
}
.player-time{
  font-family:'JetBrains Mono',monospace;font-size:9.5px;color:var(--muted);flex:0 0 auto;
}
.player-seek{
  flex:1;-webkit-appearance:none;appearance:none;
  height:4px;border-radius:2px;background:var(--crate-line);
  outline:none;cursor:pointer;accent-color:var(--amber);
}
.player-seek::-webkit-slider-thumb{
  -webkit-appearance:none;width:11px;height:11px;border-radius:50%;
  background:var(--amber);cursor:pointer;
  box-shadow:0 1px 3px rgba(0,0,0,.5);
}
.player-controls{
  display:flex;align-items:center;justify-content:center;gap:18px;
  margin-top:10px;padding-top:10px;
  border-top:1px solid rgba(55,214,255,.08);
}
.player-btn{
  background:none;border:none;color:var(--text-light);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  padding:4px;opacity:.7;transition:.15s;
  position:relative;
}
.player-btn:hover{opacity:1;}
.player-btn.play-btn{
  width:34px;height:34px;border-radius:50%;
  background:var(--amber);color:var(--text-dark);opacity:1;
}
.player-btn.play-btn:hover{background:var(--stamp);color:var(--white);}
.player-btn.toggled{opacity:1;color:var(--amber);}
.player-btn.toggled::after{
  content:'';position:absolute;bottom:-3px;left:50%;transform:translateX(-50%);
  width:4px;height:4px;border-radius:50%;background:var(--amber);
}
.player-empty-hint{font-size:11.5px;color:var(--muted);text-align:center;padding:6px 0;}
.player-extra-row{
  display:flex;align-items:center;justify-content:center;gap:14px;
  margin-top:8px;padding-top:8px;
  border-top:1px solid rgba(55,214,255,.06);
}
.player-volume-wrap{
  display:flex;align-items:center;gap:6px;flex:1;
}
.player-volume-wrap .player-btn{padding:2px;}
.player-volume{
  flex:1;-webkit-appearance:none;appearance:none;
  height:3px;border-radius:2px;background:var(--crate-line);
  outline:none;cursor:pointer;accent-color:var(--amber-soft);
}
.player-volume::-webkit-slider-thumb{
  -webkit-appearance:none;width:9px;height:9px;border-radius:50%;
  background:var(--amber-soft);cursor:pointer;
}

/* ---------- QUEUE MODAL ---------- */
.queue-overlay{
  position:fixed;inset:0;z-index:65;
  background:rgba(5,7,12,.6);
  backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  display:none;align-items:flex-end;justify-content:flex-end;
  padding:26px;
}
.queue-overlay.open{display:flex;}
.queue-box{
  background:var(--crate);border:1px solid rgba(55,214,255,.1);
  border-radius:18px;width:320px;max-width:calc(100vw - 52px);
  max-height:60vh;overflow-y:auto;padding:16px;
  box-shadow:0 24px 60px -20px rgba(0,0,0,.6);
  animation:popin .3s var(--ease);
  margin-bottom:112px;
}
.queue-box h4{font-family:'JetBrains Mono',monospace;font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--amber);margin-bottom:10px;}
.queue-item{
  display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:10px;cursor:pointer;transition:.15s;
}
.queue-item:hover{background:rgba(55,214,255,.06);}
.queue-item.active{background:rgba(55,214,255,.14);}
.queue-item-cover{width:36px;height:36px;border-radius:8px;flex:0 0 36px;object-fit:cover;background:var(--crate-line);}
.queue-item-info{flex:1;min-width:0;}
.queue-item-title{font-size:12.5px;font-weight:600;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.queue-item-artist{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* ---------- PLAYLIST MANAGER (trang hồ sơ) ---------- */
.playlist-card{
  background:var(--crate);border:1px solid rgba(55,214,255,.08);
  border-radius:22px;padding:28px 30px;max-width:640px;margin:20px auto 0;
  box-shadow:0 24px 60px -24px rgba(0,0,0,.6);
}
.playlist-card h3{font-size:18px;margin-bottom:4px;}
.playlist-card .label{display:block;margin-bottom:14px;}
.playlist-row{
  display:flex;align-items:center;gap:12px;
  padding:10px 8px;border-radius:12px;
  transition:background .15s;
}
.playlist-row:hover{background:rgba(55,214,255,.04);}
.playlist-row + .playlist-row{border-top:1px solid rgba(55,214,255,.06);}
.playlist-row-cover{
  width:42px;height:42px;border-radius:10px;flex:0 0 42px;
  object-fit:cover;background:var(--crate-line);
}
.playlist-row-info{flex:1;min-width:0;}
.playlist-row-title{font-size:13.5px;font-weight:600;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.playlist-row-artist{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.playlist-row-actions{display:none;gap:6px;flex:0 0 auto;}
body.admin-mode .playlist-row-actions{display:flex;}
.playlist-add-btn{margin-top:16px;}

/* ---------- PRODUCT DETAIL MODAL — dark glass, đồng bộ với .pcard ---------- */
.product-modal-overlay{
  position:fixed;inset:0;z-index:55;
  background:rgba(5,7,12,.78);
  backdrop-filter:blur(var(--blur-amt)) saturate(140%);-webkit-backdrop-filter:blur(var(--blur-amt)) saturate(140%);
  display:none;align-items:center;justify-content:center;
  padding:24px;
  animation:fadein .3s var(--ease);
}
.product-modal-overlay.open{display:flex;}
.product-modal{
  background:var(--card-surface);color:var(--card-text);
  border-radius:24px;
  width:100%;max-width:980px;max-height:88vh;
  display:flex;flex-direction:row;overflow:hidden;
  border:1px solid var(--card-border);
  box-shadow:var(--shadow-xl), 0 0 60px -20px rgba(var(--c-indigo-rgb),.35);
  animation:modalPop .38s var(--ease-spring);
  position:relative;
}
@keyframes modalPop{
  from{opacity:0;transform:scale(.9) translateY(10px);}
  to{opacity:1;transform:scale(1) translateY(0);}
}
.product-modal-img-wrap{
  width:50%;flex:0 0 50%;
  background:linear-gradient(135deg,var(--panel-dark),var(--panel-darker));
  overflow:hidden;position:relative;
  display:flex;align-items:center;justify-content:center;
}
/* object-fit:contain (thay vì cover) để ảnh luôn hiện TRỌN VẸN, không bị cắt
   dù ảnh dọc hay ngang -- phần thừa (nếu có) sẽ là nền gradient phía sau,
   trông như 1 khung trưng bày thay vì crop mất nội dung. */
.product-modal-img-wrap img{width:100%;height:100%;object-fit:contain;display:block;transition:transform .6s var(--ease);}
.product-modal-img-wrap:hover img{transform:scale(1.03);}
.product-modal-body{
  flex:1;min-width:0;padding:34px 32px;
  display:flex;flex-direction:column;overflow-y:auto;
}
.modal-collection-tag{
  display:none;align-self:flex-start;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.14);color:#D9F3FF;border:1px solid rgba(55,214,255,.3);padding:6px 14px;border-radius:50px;margin-bottom:12px;
}
.modal-stats-row{
  display:flex;gap:14px;margin-bottom:10px;flex-wrap:wrap;
}
.modal-stat{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--card-text-dim);
  display:flex;align-items:center;gap:5px;
}
.product-modal-body h2{font-size:26px;line-height:1.2;margin-bottom:14px;color:var(--card-text);}
.product-modal-desc{
  font-size:14.5px;color:var(--card-text-dim);line-height:1.65;
  white-space:pre-wrap;flex:1;
}
.product-modal-actions{display:flex;gap:10px;margin-top:24px;flex-wrap:wrap;}
.product-modal-close{
  position:absolute;top:16px;right:16px;z-index:2;
  width:36px;height:36px;border-radius:50%;
  background:rgba(55,214,255,.08);backdrop-filter:blur(var(--blur-amt));border:1px solid var(--card-border);color:var(--card-text);
  font-size:18px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:background .2s var(--ease), transform .2s var(--ease-spring), border-color .2s var(--ease);
}
.product-modal-close:hover{background:rgba(55,214,255,.2);border-color:rgba(55,214,255,.5);transform:rotate(90deg);}

.icon-btn{
  background:rgba(55,214,255,.06);border:1px solid var(--card-border);color:var(--card-text);
  width:44px;height:44px;border-radius:11px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:.22s var(--ease-spring);
  flex:0 0 auto;
}
.icon-btn:hover{background:rgba(var(--c-indigo-rgb),.18);border-color:var(--card-border-hover);transform:translateY(-2px) scale(1.06);}
.icon-btn:active{transform:translateY(0) scale(.94);}
.icon-btn.active{background:var(--stamp);border-color:var(--stamp);color:var(--white);}
.related-products-block{margin-top:26px;padding-top:20px;border-top:1px solid var(--card-border);}
.related-products-block h4{
  font-family:'JetBrains Mono',monospace;font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--card-text-dim);margin-bottom:12px;
}
.related-products-grid{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;}
.related-product-card{
  flex:0 0 130px;cursor:pointer;border-radius:12px;overflow:hidden;
  background:rgba(55,214,255,.05);border:1px solid var(--card-border);
  transition:transform .25s var(--ease), border-color .25s var(--ease), box-shadow .25s var(--ease);
}
.related-product-card:hover{transform:translateY(-4px);border-color:var(--card-border-hover);box-shadow:0 14px 26px -10px rgba(var(--c-indigo-rgb),.5);}
.related-product-card img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:var(--panel-dark);}
.related-product-card .rp-title{
  font-size:11.5px;font-weight:600;padding:7px 8px;color:var(--card-text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* ---------- TABLET (≤768px) ---------- */
@media (max-width:768px){
  header{padding:18px 22px;position:relative;}
  .mobile-menu-toggle{display:flex;}
  nav#mainNav{
    display:none;
    position:absolute;
    top:calc(100% + 8px);
    right:22px;
    left:22px;
    flex-direction:column;
    align-items:stretch;
    gap:6px;
    background:var(--crate);
    padding:10px;
    border-radius:12px;
    border:1px solid var(--crate-line);
    box-shadow:0 16px 36px rgba(0,0,0,.55);
    z-index:60;
  }
  nav#mainNav.mobile-open{display:flex;}
  nav#mainNav button{width:100%;display:flex;justify-content:flex-start;text-align:left;}
  main{padding:36px 22px 96px;}
  .grid{gap:16px;}
  .showcase-carousel{aspect-ratio:16/10;max-height:400px;}
  .dashboard-stats-row{gap:10px;}
  .profile-card,.form-card,.playlist-card,.dashboard-card,.vcoin-card,.filemgr-perm-card{max-width:100%;}
  .bulk-bar{top:74px;}
  /* Chống iOS tự zoom vào ô nhập liệu khi font-size < 16px */
  .search-input,
  .form-card input[type=text], .form-card input[type=url], .form-card input[type=password], .form-card textarea, .form-card select,
  .auth-form input, .confirm-box input[type=text],
  .chat-input-row input,
  .sort-row select, .bulk-bar select{
    font-size:16px;
  }
}

@media (max-width:560px){
  .product-modal{flex-direction:column;max-height:92vh;}
  /* Bỏ aspect-ratio:16/10 cố định (kiểu ngang) vì ảnh sản phẩm thường là
     ảnh dọc (screenshot nhân vật/game) -> ép khung ngang sẽ cắt mất phần
     lớn ảnh. Thay bằng chiều cao giới hạn theo % màn hình + object-fit:contain
     (đã set ở rule chung phía trên) để ảnh luôn hiện trọn, không bị crop. */
  .product-modal-img-wrap{width:100%;flex:0 0 auto;height:42vh;max-height:340px;}
  .product-modal-body{padding:24px 22px;}
}

/* ---------- HOT / FEATURED BADGE ---------- */
.hot-badge{
  position:absolute;top:14px;right:14px;z-index:2;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;letter-spacing:.04em;
  background:linear-gradient(135deg,var(--stamp),#0F6FA3);color:var(--white);
  padding:5px 11px;border-radius:50px;
  box-shadow:0 4px 12px -2px rgba(55,214,255,.6);
  display:flex;align-items:center;gap:4px;
  animation:glowPulse 2.4s ease-in-out infinite;
}
.new-badge{
  position:absolute;top:14px;right:14px;z-index:2;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;letter-spacing:.04em;
  background:linear-gradient(135deg,var(--violet),var(--violet-light));color:var(--white);
  padding:5px 11px;border-radius:50px;
  box-shadow:0 4px 12px -2px rgba(55,214,255,.6);
  display:flex;align-items:center;gap:4px;
}
.parcel.has-hot .new-badge{top:48px;}
.pin-btn{
  background:rgba(55,214,255,.08);border:none;color:var(--text-light);
  padding:5px 10px;border-radius:6px;cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:11px;
  transition:.15s;
}
.pin-btn:hover{background:rgba(0,0,0,.12);}
.pin-btn.pinned{background:var(--stamp);color:var(--white);}

/* ---------- FAVORITES ---------- */
.fav-btn-card{
  position:absolute;top:14px;right:14px;z-index:3;
  width:34px;height:34px;border-radius:50%;
  background:rgba(55,214,255,.85);border:none;color:var(--pink-danger);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 4px 10px -2px rgba(0,0,0,.3);
  transition:.18s var(--ease);
}
.fav-btn-card:hover{transform:scale(1.1);}
.fav-btn-card.active svg{fill:var(--pink-danger);}
.parcel.has-hot .fav-btn-card{top:48px;}
.parcel.has-hot.has-new .fav-btn-card{top:82px;}
/* Reticle hoi tu (mau #18) — 4 vach ngon nhau hoi tu vao nut yeu thich khi hover. */
.fav-btn-card::before{
  content:'';position:absolute;inset:-10px;pointer-events:none;z-index:-1;
  opacity:0;transition:opacity .25s var(--ease), transform .25s var(--ease);
  background-repeat:no-repeat;
  background-image:linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan));
  background-size:2px 8px, 2px 8px;
  background-position:calc(50% - 1px) 0, calc(50% - 1px) 100%;
  transform:scaleY(.35);
  filter:drop-shadow(0 0 4px var(--c-cyan));
}
.fav-btn-card::after{
  content:'';position:absolute;inset:-10px;pointer-events:none;z-index:-1;
  opacity:0;transition:opacity .25s var(--ease), transform .25s var(--ease);
  background-repeat:no-repeat;
  background-image:linear-gradient(90deg,var(--c-cyan),var(--c-cyan)), linear-gradient(90deg,var(--c-cyan),var(--c-cyan));
  background-size:8px 2px, 8px 2px;
  background-position:0 calc(50% - 1px), 100% calc(50% - 1px);
  transform:scaleX(.35);
  filter:drop-shadow(0 0 4px var(--c-cyan));
}
.fav-btn-card:hover::before, .fav-btn-card:hover::after{opacity:1;transform:none;}

/* ---------- SORT BAR ---------- */
.sort-row{
  display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap;
}
.sort-row select{
  background:rgba(55,214,255,.045);border:1.5px solid var(--crate-line);color:var(--text-light);
  font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;
  padding:9px 14px;border-radius:10px;cursor:pointer;
}
.sort-row select option{background:var(--crate);color:var(--text-light);}
.fav-filter-btn{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.045);border:1.5px solid rgba(55,214,255,.1);color:var(--muted);
  padding:9px 16px;border-radius:50px;cursor:pointer;transition:.18s var(--ease);
  display:flex;align-items:center;gap:6px;
}
.fav-filter-btn:hover{color:var(--text-light);border-color:rgba(55,214,255,.25);}
.fav-filter-btn.active{background:var(--stamp);color:var(--white);border-color:var(--stamp);}

/* ---------- BULK ACTIONS BAR ---------- */
.bulk-toggle-btn{
  font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.045);border:1.5px solid rgba(55,214,255,.12);color:var(--muted);
  padding:9px 16px;border-radius:10px;cursor:pointer;transition:.18s;
}
.bulk-toggle-btn:hover{color:var(--text-light);}
.bulk-toggle-btn.active{background:var(--violet);color:var(--white);border-color:var(--violet);}
.bulk-bar{
  display:none;
  position:sticky;top:78px;z-index:22;
  background:var(--crate);border:1.5px solid var(--violet);
  border-radius:14px;padding:12px 16px;margin-bottom:18px;
  align-items:center;gap:12px;flex-wrap:wrap;
  box-shadow:0 14px 30px -14px rgba(0,0,0,.5);
  animation:popin .3s var(--ease);
}
.bulk-bar.show{display:flex;}
.bulk-bar .label{color:var(--text-light);font-weight:400;letter-spacing:0;text-transform:none;font-size:13px;flex:1;}
.bulk-bar .label b{color:var(--violet);}
.bulk-bar select{
  background:rgba(55,214,255,.06);border:1.5px solid var(--crate-line);color:var(--text-light);
  font-family:'JetBrains Mono',monospace;font-size:11.5px;padding:8px 12px;border-radius:9px;cursor:pointer;
}
.bulk-bar select option{background:var(--crate);color:var(--text-light);}
.bulk-bar-btn{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;
  padding:9px 14px;border-radius:9px;cursor:pointer;border:none;
}
.bulk-apply-btn{background:var(--violet);color:var(--white);}
.bulk-delete-btn{background:var(--stamp);color:var(--white);}
.bulk-cancel-btn{background:rgba(55,214,255,.08);color:var(--muted);}
.card-select-box{
  display:none;position:absolute;top:14px;left:14px;z-index:4;
  width:26px;height:26px;border-radius:8px;
  background:rgba(55,214,255,.9);border:2px solid var(--text-dark);
  align-items:center;justify-content:center;cursor:pointer;
}
body.bulk-mode .card-select-box{display:flex;}
body.bulk-mode .parcel{cursor:pointer;}
.card-select-box.checked{background:var(--violet);border-color:var(--violet);color:var(--white);}
.parcel.selected{outline:3px solid var(--violet);outline-offset:2px;}

/* ---------- SKELETON LOADING ---------- */
/* Khớp đúng bố cục thật của .pcard (ảnh 4:3 full-width phía trên + 1 dòng
   tên bên dưới) để không bị "giật" đổi hình dạng card khi data tải xong. */
.skeleton-pcard{
  background:var(--card-surface);
  border:1px solid var(--card-border);
  border-radius:20px;
  overflow:hidden;
  display:flex;flex-direction:column;
  box-shadow:var(--shadow-sm);
}
.skeleton-pcard-img{
  width:100%;aspect-ratio:4/3;flex:none;
  background:linear-gradient(100deg,rgba(55,214,255,.04) 30%,rgba(55,214,255,.09) 50%,rgba(55,214,255,.04) 70%);
  background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite;
}
.skeleton-pcard-name{
  height:14px;border-radius:6px;width:65%;
  margin:14px 16px 16px;
  background:linear-gradient(100deg,rgba(55,214,255,.04) 30%,rgba(55,214,255,.09) 50%,rgba(55,214,255,.04) 70%);
  background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite;
}
@keyframes shimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}

/* ---------- CONFIRM / PROMPT MODAL ---------- */
.confirm-overlay{
  position:fixed;inset:0;z-index:70;
  background:rgba(5,7,12,.72);
  backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  display:none;align-items:center;justify-content:center;padding:20px;
  animation:fadein .25s var(--ease);
}
.confirm-overlay.open{display:flex;}
.confirm-box{
  background:linear-gradient(160deg,var(--kraft),var(--kraft-dark));
  color:var(--text-light);
  padding:32px 30px;border-radius:20px;max-width:380px;width:100%;
  box-shadow:0 50px 100px -20px rgba(0,0,0,.65), 0 0 70px -20px rgba(55,214,255,.3);
  animation:modalPop .4s var(--ease-spring);
  position:relative;
}
.confirm-box h3{font-size:19px;margin-bottom:10px;}
.confirm-box p{font-size:13.5px;color:var(--text-muted-brown);line-height:1.55;margin:0 0 6px;}
.confirm-box input[type=text]{
  width:100%;padding:11px 14px;border-radius:10px;border:1.5px solid var(--tan-border);background:rgba(55,214,255,.06);color:var(--text-light);
  font-size:14px;box-sizing:border-box;margin-top:10px;font-family:'Plus Jakarta Sans',sans-serif;
}
.confirm-actions{display:flex;gap:10px;margin-top:20px;justify-content:flex-end;}
.confirm-btn-ok{
  background:var(--ink);color:var(--text-light);border:none;
  font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:12px;letter-spacing:.06em;font-weight:700;
  padding:11px 22px;border-radius:50px;cursor:pointer;transition:transform .2s var(--ease-spring), background .2s var(--ease), color .2s var(--ease), box-shadow .2s var(--ease);
}
.confirm-btn-ok:hover{background:var(--stamp);color:var(--text-dark);transform:translateY(-1px) scale(1.03);box-shadow:0 10px 22px -8px rgba(55,214,255,.5);}
.confirm-btn-ok:active{transform:translateY(0) scale(.96);}
.confirm-btn-ok.danger{background:var(--stamp);color:var(--text-dark);}
.confirm-btn-ok.danger:hover{background:var(--pink-danger);color:var(--white);}
.confirm-btn-cancel{
  background:none;border:1.5px solid var(--tan-border);color:var(--text-muted-brown);
  font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:12px;letter-spacing:.06em;font-weight:700;
  padding:11px 22px;border-radius:50px;cursor:pointer;transition:border-color .2s var(--ease), background .2s var(--ease), transform .2s var(--ease);
}
.confirm-btn-cancel:hover{border-color:#37D6FF;background:rgba(255,255,255,.05);transform:translateY(-1px);}

/* ---------- TOAST ---------- */
.toast{
  position:fixed;bottom:calc(26px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%) translateY(10px);
  max-width:calc(100vw - 32px);
  background:var(--text-light);color:var(--text-dark);
  font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.04em;font-weight:700;
  padding:12px 22px;border-radius:50px;z-index:60;
  box-shadow:0 16px 36px -10px rgba(0,0,0,.5);
  opacity:0;pointer-events:none;transition:opacity .25s var(--ease), transform .25s var(--ease);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ---------- KEY REVEAL PANEL (hiện khi mua/nhận key ở Sản phẩm & Cày thuê) ---------- */
.key-reveal-overlay{
  position:fixed;inset:0;z-index:70;
  background:rgba(5,7,12,.72);
  backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  display:none;align-items:center;justify-content:center;
  padding:24px;
  animation:fadein .3s var(--ease);
}
.key-reveal-overlay.open{display:flex;}
.key-reveal-panel{
  background:var(--kraft);color:var(--text-light);
  border-radius:22px;
  width:100%;max-width:400px;
  padding:30px 26px 26px;
  text-align:center;
  box-shadow:0 40px 100px -20px rgba(0,0,0,.7), 0 0 0 1px rgba(55,214,255,.5);
  animation:modalPop .38s var(--ease);
}
.key-reveal-icon{font-size:34px;line-height:1;margin-bottom:10px;}
.key-reveal-title{font-size:17px;font-weight:800;margin-bottom:16px;}
.key-reveal-value{
  font-family:'JetBrains Mono',monospace;font-size:13.5px;font-weight:700;
  word-break:break-all;
  background:rgba(0,0,0,.06);border:1px dashed var(--amber);
  border-radius:12px;padding:14px 16px;margin-bottom:10px;
  user-select:all;
}
.key-reveal-hint{font-size:11.5px;color:#7D93B5;margin-bottom:20px;line-height:1.5;}
.key-reveal-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;}
.key-reveal-actions .primary-btn,.key-reveal-actions .ghost-btn{flex:1;min-width:130px;}

/* ---------- DASHBOARD (admin) ---------- */
.dashboard-card{
  background:var(--crate);border:1px solid rgba(55,214,255,.08);
  border-radius:22px;padding:28px 30px;max-width:640px;margin:0 auto 20px;
  box-shadow:0 24px 60px -24px rgba(0,0,0,.6);
}
.dashboard-card h3{font-size:18px;margin-bottom:16px;}
.dashboard-stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px;}
.dashboard-stat-box{
  background:rgba(55,214,255,.04);border:1px solid rgba(55,214,255,.07);
  border-radius:14px;padding:16px 14px;text-align:center;
}
.dashboard-stat-num{font-family:'JetBrains Mono',monospace;font-size:26px;font-weight:700;color:var(--amber);}
.dashboard-stat-label{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-top:4px;}
.dashboard-top-list{display:flex;flex-direction:column;gap:2px;}
.dashboard-top-row{
  display:flex;align-items:center;gap:10px;padding:9px 4px;
  border-bottom:1px solid rgba(55,214,255,.06);
}
.dashboard-top-row:last-child{border-bottom:none;}
.dashboard-top-rank{
  font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;color:var(--amber-soft);
  width:20px;flex:0 0 20px;text-align:center;
}
.dashboard-top-cover{width:34px;height:34px;border-radius:8px;flex:0 0 34px;object-fit:cover;background:var(--crate-line);}
.dashboard-top-name{flex:1;min-width:0;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dashboard-top-views{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);}
.dashboard-actions-row{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap;}

/* ---------- CẤP QUYỀN QUẢN LÝ FILE (admin) ---------- */
.filemgr-perm-card{
  background:var(--crate);border:1px solid rgba(55,214,255,.08);
  border-radius:22px;padding:28px 30px;max-width:640px;margin:0 auto 20px;
  box-shadow:0 24px 60px -24px rgba(0,0,0,.6);
}
.filemgr-perm-card h3{font-size:18px;margin-bottom:8px;}
.filemgr-perm-desc{color:var(--muted);font-size:13px;line-height:1.6;margin-bottom:18px;}
.filemgr-perm-search-row{display:flex;gap:10px;}
.filemgr-perm-search-row input[type=text]{
  flex:1;min-width:0;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:11px 14px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:14px;
  transition:border-color .15s, box-shadow .15s;
}
.filemgr-perm-search-row input[type=text]:focus{
  outline:none;border-color:var(--violet);box-shadow:0 0 0 3px rgba(55,214,255,.18);
}
.filemgr-perm-search-row .ghost-btn{flex:0 0 auto;}
.filemgr-perm-search-row input[type=password]{
  flex:1;min-width:0;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:11px 14px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:14px;
  transition:border-color .15s, box-shadow .15s;
}
.account-edit-label{
  display:block;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);margin-bottom:8px;
}
.account-edit-input{
  width:100%;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:11px 14px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:14px;
  transition:border-color .15s, box-shadow .15s;
}
.account-edit-input:focus{
  outline:none;border-color:var(--violet);box-shadow:0 0 0 3px rgba(55,214,255,.18);
}
.filemgr-perm-result{
  margin-top:16px;background:rgba(55,214,255,.04);border:1px solid rgba(55,214,255,.07);
  border-radius:14px;padding:16px 18px;
}
.filemgr-perm-result-row{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;}
.filemgr-perm-result-name{font-weight:600;font-size:14.5px;}
.filemgr-perm-result-username{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--muted);margin-top:2px;}
.filemgr-perm-status{
  display:inline-flex;align-items:center;gap:6px;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;
  padding:5px 12px;border-radius:50px;margin-top:8px;
}
.filemgr-perm-status.granted{background:rgba(55,214,255,.15);color:var(--mint-success);}
.filemgr-perm-status.revoked{background:rgba(55,214,255,.06);color:var(--muted);}
.filemgr-perm-error{color:var(--stamp);font-size:13px;}
.filemgr-perm-grant-btn{background:var(--violet);border-color:var(--violet);color:var(--white);}
.filemgr-perm-grant-btn:hover{background:var(--violet-deep);border-color:var(--violet-deep);color:var(--white);}
.filemgr-perm-revoke-btn{background:rgba(55,214,255,.14);border-color:rgba(55,214,255,.4);color:var(--stamp);}
.filemgr-perm-revoke-btn:hover{background:var(--stamp);border-color:var(--stamp);color:var(--white);}

/* ---------- CỘNG / CHỈNH COIN (admin) ---------- */
.coinmgr-balance-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
.coinmgr-balance-chip{
  font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;
  background:rgba(55,214,255,.06);border:1px solid rgba(55,214,255,.08);
  padding:5px 12px;border-radius:50px;color:var(--text-light);
}
.coinmgr-action-block{margin-top:18px;padding-top:16px;border-top:1px solid rgba(55,214,255,.07);}
.coinmgr-action-title{font-size:13.5px;font-weight:600;margin-bottom:10px;}
.coinmgr-action-row{display:flex;gap:10px;flex-wrap:wrap;}
.coinmgr-action-row input[type=number]{
  flex:1;min-width:120px;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:10px 12px;border-radius:10px;font-family:'JetBrains Mono',monospace;font-size:13.5px;
  transition:border-color .15s, box-shadow .15s;
}
.coinmgr-action-row input[type=number]:focus{
  outline:none;border-color:var(--violet);box-shadow:0 0 0 3px rgba(55,214,255,.18);
}
.coinmgr-action-row .ghost-btn{flex:0 0 auto;}
.coinmgr-hint{color:var(--muted);font-size:11.5px;margin-top:8px;line-height:1.5;}

/* ---------- TẠO / QUẢN LÝ MÃ CODE (admin) ---------- */
.codemgr-form{display:flex;flex-direction:column;gap:12px;}
.codemgr-type-row{display:flex;gap:10px;flex-wrap:wrap;}
.codemgr-type-row select{
  flex:0 0 auto;min-width:170px;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:10px 12px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:13.5px;cursor:pointer;
}
.codemgr-type-row select:focus{outline:none;border-color:var(--violet);box-shadow:0 0 0 3px rgba(55,214,255,.18);}
.codemgr-form-row{display:flex;gap:10px;flex-wrap:wrap;}
.codemgr-form-row > *{flex:1;min-width:150px;}
.codemgr-type-row input[type=text], .codemgr-form-row input[type=text], .codemgr-form-row input[type=number]{
  background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:10px 12px;border-radius:10px;font-family:'JetBrains Mono',monospace;font-size:13.5px;
  transition:border-color .15s, box-shadow .15s;
}
.codemgr-type-row input[type=text]{flex:1;min-width:160px;}
.codemgr-form-row input[type=text]:focus, .codemgr-form-row input[type=number]:focus, .codemgr-type-row input[type=text]:focus{
  outline:none;border-color:var(--violet);box-shadow:0 0 0 3px rgba(55,214,255,.18);
}
.codemgr-hint{color:var(--muted);font-size:11.5px;margin:-4px 0 0;line-height:1.5;}
.codemgr-create-btn{align-self:flex-start;}
.codemgr-list{margin-top:18px;padding-top:16px;border-top:1px solid rgba(55,214,255,.07);display:flex;flex-direction:column;gap:10px;}
.codemgr-empty{color:var(--muted);font-size:13px;}
.codemgr-item{
  background:rgba(55,214,255,.04);border:1px solid rgba(55,214,255,.07);border-radius:14px;
  padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
}
.codemgr-item-main{min-width:0;}
.codemgr-item-code{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:700;letter-spacing:.03em;}
.codemgr-item-meta{font-size:12px;color:var(--muted);margin-top:4px;line-height:1.6;}
.codemgr-badge{
  display:inline-flex;align-items:center;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.04em;
  text-transform:uppercase;font-weight:700;padding:3px 9px;border-radius:50px;margin-right:6px;
}
.codemgr-badge.vcoin{background:rgba(55,214,255,.15);color:var(--mint-success);}
.codemgr-badge.discount{background:rgba(55,214,255,.15);color:var(--violet-light);}
.codemgr-badge.active{background:rgba(55,214,255,.15);color:var(--mint-success);}
.codemgr-badge.inactive{background:rgba(55,214,255,.06);color:var(--muted);}
.codemgr-item-actions{display:flex;gap:8px;flex:0 0 auto;}
.codemgr-item-actions .mini-btn{white-space:nowrap;}

.form-actions-owner-block{
  background:rgba(55,214,255,.04);border:1px solid rgba(55,214,255,.07);border-radius:14px;
  padding:14px 16px;margin-bottom:14px;
}

/* ---------- SCHEDULE FIELDS ---------- */
.schedule-row{display:flex;gap:10px;}
.schedule-row > div{flex:1;}
.schedule-badge{
  display:inline-flex;align-items:center;gap:5px;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;
  background:rgba(55,214,255,.15);color:var(--violet);
  padding:4px 10px;border-radius:50px;margin-top:6px;
}

/* ---------- SHOWCASE CAROUSEL (ảnh/video giới thiệu) ---------- */
.showcase-section{margin-bottom:30px;}
.showcase-section.showcase-hidden{display:none;}
.showcase-row{display:flex;gap:18px;align-items:stretch;}
.showcase-row .showcase-carousel{flex:1 1 100%;min-width:0;}
.showcase-carousel{
  position:relative;
  background:var(--crate);
  border:1px solid var(--glass-border);
  border-radius:26px;
  overflow:hidden;
  box-shadow:0 30px 70px -28px rgba(0,0,0,.65), 0 0 0 1px rgba(55,214,255,.08);
  aspect-ratio:21/8;
  max-height:460px;
}
.showcase-carousel::before{
  content:'';position:absolute;top:0;left:0;right:0;height:100px;
  background:linear-gradient(180deg, rgba(5,7,12,.6), transparent);
  z-index:3;pointer-events:none;
}
.showcase-track{
  display:flex;
  height:100%;
  transition:transform .45s var(--ease);
}
.showcase-slide{
  flex:0 0 100%;
  width:100%;height:100%;
  position:relative;
  background:var(--black);
  overflow:hidden;
}
/* Ảnh nền mờ lấp đầy khung + ảnh gốc hiển thị trọn vẹn không bị cắt (contain) */
.showcase-img-bg{
  position:absolute;inset:0;
  background-size:cover;background-position:center;
  filter:blur(18px) brightness(.55) saturate(1.25);
  transform:scale(1.15);
}
.showcase-slide img{
  position:relative;z-index:1;
  width:100%;height:100%;object-fit:contain;display:block;
}
.showcase-slide video{
  position:relative;z-index:1;
  width:100%;height:100%;object-fit:contain;background:var(--black);display:block;
}
.showcase-slide-empty{
  display:flex;align-items:center;justify-content:center;
  width:100%;height:100%;color:var(--muted);font-size:13.5px;line-height:1.6;
  text-align:center;padding:20px;
  flex-direction:column;gap:8px;
}
.showcase-slide-remove{
  position:absolute;top:12px;right:12px;z-index:3;
  width:30px;height:30px;border-radius:50%;
  background:rgba(5,7,12,.7);border:1px solid rgba(55,214,255,.15);
  color:var(--white);cursor:pointer;font-size:14px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  transition:.15s;
}
.showcase-slide-remove:hover{background:var(--stamp);border-color:var(--stamp);}
.showcase-nav{
  position:absolute;top:50%;transform:translateY(-50%);
  width:38px;height:38px;border-radius:50%;
  background:rgba(5,7,12,.55);border:1px solid rgba(55,214,255,.14);
  color:var(--white);font-size:20px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(var(--blur-amt));
  transition:.18s var(--ease);
  z-index:3;
}
.showcase-nav:hover{background:var(--amber);color:var(--text-dark);border-color:var(--amber);}
.showcase-nav.prev{left:14px;}
.showcase-nav.next{right:14px;}
.showcase-counter{
  position:absolute;bottom:14px;left:14px;z-index:3;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.03em;
  background:rgba(5,7,12,.6);color:var(--white);border:1px solid rgba(55,214,255,.15);
  padding:5px 11px;border-radius:50px;backdrop-filter:blur(var(--blur-amt));
}
.showcase-dots{
  position:absolute;bottom:14px;left:0;right:0;
  display:flex;justify-content:center;gap:7px;z-index:3;
}
.showcase-dot{
  width:8px;height:8px;border-radius:50%;
  background:rgba(55,214,255,.35);border:none;cursor:pointer;padding:0;
  transition:.18s var(--ease);
}
.showcase-dot.active{background:var(--amber);width:22px;border-radius:5px;}
/* Nút Admin (+ Ảnh / + Video) đặt góc trên-TRÁI để không đè lên nút xoá (góc trên-phải) */
.showcase-admin-overlay{
  position:absolute;top:14px;left:14px;z-index:4;
  gap:8px;
}
body.admin-mode .showcase-admin-overlay{display:flex !important;}
.showcase-admin-btn{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:700;letter-spacing:.04em;
  background:rgba(5,7,12,.72);border:1px solid rgba(55,214,255,.5);color:var(--amber-soft);
  padding:8px 14px;border-radius:50px;cursor:pointer;backdrop-filter:blur(var(--blur-amt));
  transition:.18s var(--ease);
}
.showcase-admin-btn:hover{background:var(--amber);color:var(--text-dark);border-color:var(--amber);}

/* ---------- CHAT TAB (feedback + nhắn tin) ----------
   NÂNG CẤP: không còn là khung nổi góc màn hình (position:fixed) nữa — giờ
   là nội dung bình thường bên trong 1 <section class="view">, xếp hàng cùng
   Sản phẩm/Nhiệm vụ/Bảng xếp hạng... Vẫn giữ layout dạng khung chat cố định
   chiều cao (header/danh sách tin/khung nhập cùng 1 khối), chỉ bỏ phần
   position:fixed + hiệu ứng mở/đóng/resize kiểu popup trước đây. */
.chat-page{
  display:flex;flex-direction:column;
  width:100%;
  height:min(74vh,720px);
  min-height:440px;
  background:linear-gradient(165deg, rgba(55,214,255,.06), rgba(55,214,255,.01)), var(--crate);
  border:1px solid var(--card-border);
  border-radius:20px;
  overflow:hidden;
  box-shadow:var(--shadow-xl);
}
.chat-page-head{
  padding:16px 20px;
  border-bottom:1px solid rgba(55,214,255,.07);
  flex:0 0 auto;
  display:flex;align-items:center;gap:10px;
}
.chat-header-avatar{
  width:34px;height:34px;flex:0 0 auto;border-radius:50%;
  background:linear-gradient(135deg,var(--violet),var(--violet-deep));
  display:flex;align-items:center;justify-content:center;font-size:16px;
  color:var(--white);
}
.chat-header-text{display:flex;flex-direction:column;min-width:0;}
.chat-header-title{
  font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;letter-spacing:.04em;
  color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.chat-header-status{
  display:flex;align-items:center;gap:5px;
  font-size:11px;color:var(--muted);margin-top:2px;
}
.chat-header-status i{
  width:7px;height:7px;border-radius:50%;background:var(--mint-success);
  box-shadow:0 0 0 2px rgba(55,214,255,.2);
}

/* ==========================================================================
   CHAT NỔI — nút bật/tắt (FAB) nằm ngay trong header của tab Chat (không còn
   nổi đè lên sidebar ở góc màn hình nữa), bấm để biến khung chat thành cửa
   sổ NỔI (kéo di chuyển, kéo giãn kích thước).
   ========================================================================== */

/* --- Nút vuông tròn nhỏ trong .chat-page-head, đứng trước nút đóng (✕) --- */
.chat-fab{
  flex:0 0 auto;margin-left:auto;position:relative;
  width:28px;height:28px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.06);border:1px solid var(--crate-line);
  color:var(--muted);cursor:pointer;
  transition:transform .18s var(--ease), background .15s var(--ease), color .15s var(--ease), border-color .15s var(--ease);
}
.chat-fab:hover{background:var(--stamp);border-color:var(--stamp);color:var(--white);}
.chat-fab.active{
  background:linear-gradient(135deg,var(--amber),var(--amber-deep));
  border-color:transparent;color:var(--text-dark);
}
.chat-fab-badge{
  position:absolute;top:-5px;right:-5px;
  min-width:16px;height:16px;padding:0 4px;border-radius:999px;
  background:var(--stamp);color:var(--white);
  font-size:9px;font-weight:800;line-height:1;
  display:flex;align-items:center;justify-content:center;
  border:2px solid var(--bg-0);
}

/* --- Khung Chat khi ở chế độ NỔI: thoát khỏi layout tab bình thường, ghim
   cố định trên màn hình bất kể đang đứng ở tab nào (JS set left/top/width/
   height qua inline style để kéo-thả/kéo-giãn được — xem app.js). --- */
#view-chat.chat-floating{
  display:block !important; /* override .view{display:none} khi không phải tab đang active */
  position:fixed;
  inset:auto auto auto auto;
  z-index:45;
  width:auto;max-width:none;padding:0;margin:0;
  animation:none;
  pointer-events:none; /* chỉ .chat-page bên trong mới nhận sự kiện, phần nền trống xuyên qua được */
}
#view-chat.chat-floating .chat-page{
  pointer-events:auto;
  position:fixed; /* vị trí/kích thước thật do JS set trực tiếp qua style.left/top/width/height */
  box-shadow:var(--shadow-xl), 0 0 60px -20px rgba(0,0,0,.6);
  min-height:280px;min-width:280px;
  z-index:45;
}
#view-chat.chat-floating .chat-page-head{cursor:move;user-select:none;}

.chat-float-close{
  display:none; /* JS bật display:flex khi vào chế độ nổi */
  flex:0 0 auto;
  width:26px;height:26px;border-radius:8px;
  align-items:center;justify-content:center;
  background:rgba(255,255,255,.06);border:1px solid var(--crate-line);
  color:var(--muted);cursor:pointer;font-size:12px;line-height:1;
  transition:.15s var(--ease);
}
.chat-float-close:hover{background:var(--stamp);border-color:var(--stamp);color:var(--white);}

.chat-float-resize{
  display:none; /* JS bật khi vào chế độ nổi */
  position:absolute;right:4px;bottom:4px;
  width:20px;height:20px;border-radius:6px;
  align-items:center;justify-content:center;
  color:var(--muted);cursor:nwse-resize;
  touch-action:none;
}
.chat-float-resize:hover{color:var(--amber-soft);}


/* --- Switch "Chat chung" / "Nhắn tin Admin" --- */
.chat-mode-switch{
  flex:0 0 auto;
  display:flex;gap:6px;
  padding:10px 14px 0;
}
.chat-mode-btn{
  flex:1;
  display:flex;align-items:center;justify-content:center;gap:6px;
  background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--muted);
  font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:700;letter-spacing:.03em;
  padding:8px 10px;border-radius:10px 10px 0 0;
  cursor:pointer;transition:.18s var(--ease);
  position:relative;
}
.chat-mode-btn:hover{color:var(--text-light);}
.chat-mode-btn.active{
  color:var(--text-dark);
  background:linear-gradient(135deg,var(--amber),var(--amber-deep));
  border-color:transparent;
}
.chat-mode-badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:16px;height:16px;padding:0 4px;
  border-radius:999px;background:var(--stamp);color:var(--white);
  font-size:9.5px;font-weight:800;line-height:1;
}

/* --- Danh sách hội thoại riêng (chỉ Admin thấy) --- */
.chat-conv-list{
  flex:1 1 auto;
  overflow-y:auto;
  padding:8px 10px;
  display:flex;flex-direction:column;gap:6px;
  min-height:0;
}
.chat-conv-item{
  display:flex;align-items:center;gap:10px;
  padding:9px 10px;
  border-radius:12px;
  background:rgba(55,214,255,.04);
  border:1px solid rgba(55,214,255,.06);
  cursor:pointer;transition:.15s var(--ease);
  text-align:left;
}
.chat-conv-item:hover{background:rgba(55,214,255,.09);}
.chat-conv-item.has-unread{border-color:rgba(255,90,90,.35);background:rgba(255,90,90,.05);}
.chat-conv-avatar{
  width:34px;height:34px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(135deg,var(--violet),var(--violet-deep));
  display:flex;align-items:center;justify-content:center;
  color:var(--white);font-size:13px;font-weight:700;text-transform:uppercase;
  overflow:hidden;
}
.chat-conv-avatar img{width:100%;height:100%;object-fit:cover;}
.chat-conv-body{flex:1;min-width:0;}
.chat-conv-name-row{display:flex;align-items:center;justify-content:space-between;gap:6px;}
.chat-conv-name{font-size:12.5px;font-weight:700;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.chat-conv-time{font-size:10px;color:var(--muted);font-family:'JetBrains Mono',monospace;flex:0 0 auto;}
.chat-conv-last{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px;}
.chat-conv-item.has-unread .chat-conv-last{color:var(--text-light);}
.chat-conv-unread-dot{
  flex:0 0 auto;min-width:17px;height:17px;padding:0 4px;border-radius:999px;
  background:var(--stamp);color:var(--white);font-size:9.5px;font-weight:800;
  display:flex;align-items:center;justify-content:center;
}
.chat-conv-empty{color:var(--muted);font-size:12.5px;text-align:center;padding:24px 0;}

/* --- Thanh "Quay lại danh sách" khi Admin đang xem 1 hội thoại --- */
.chat-conv-back-bar{
  flex:0 0 auto;
  display:flex;align-items:center;gap:8px;
  padding:9px 14px;
  border-bottom:1px solid rgba(55,214,255,.07);
}
.chat-conv-back-btn{
  display:flex;align-items:center;gap:4px;
  background:none;border:none;color:var(--amber-soft);
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;
  cursor:pointer;padding:4px 6px 4px 2px;
}
.chat-conv-back-btn:hover{opacity:.8;}
.chat-conv-back-name{font-size:12px;color:var(--text-light);font-weight:600;}

.chat-messages{
  flex:1 1 auto;
  overflow-y:auto;
  padding:14px 16px;
  display:flex;flex-direction:column;gap:10px;
  min-height:0;
}
.chat-messages:empty::before{
  content:'Chưa có tin nhắn nào. Hãy là người đầu tiên!';
  color:var(--muted);font-size:12.5px;
}
.chat-msg{
  background:rgba(55,214,255,.05);
  border:1px solid rgba(55,214,255,.06);
  border-radius:12px;
  padding:8px 11px;
  animation:fadeInUp .3s var(--ease) both;
  max-width:80%;
  align-self:flex-start;
}
.chat-msg.chat-msg-own{
  align-self:flex-end;
  background:var(--violet);
}
.chat-msg.chat-msg-own .chat-msg-name,
.chat-msg.chat-msg-own .chat-msg-time{color:rgba(5,7,12,.75);}
.chat-msg.chat-msg-own .chat-msg-text{color:var(--white);}
.chat-msg.chat-msg-own .chat-msg-head{flex-direction:row-reverse;}
.chat-msg.chat-msg-own .chat-msg-del{float:left;padding:0 6px 0 0;}
.chat-msg.chat-msg-admin{
  background:rgba(55,214,255,.14);border:1px solid rgba(55,214,255,.3);
}
.chat-msg.chat-msg-admin.chat-msg-own{
  background:var(--violet);border-color:var(--violet);
}
.chat-msg-head{display:flex;align-items:baseline;gap:6px;margin-bottom:3px;flex-wrap:wrap;}
.chat-msg-name{font-size:12px;font-weight:700;color:var(--amber-soft);}
.chat-msg.chat-msg-admin .chat-msg-name{color:var(--violet);}
.chat-msg-time{font-size:10px;color:var(--muted);font-family:'JetBrains Mono',monospace;}
.chat-msg-text{font-size:13.5px;color:var(--text-light);line-height:1.5;word-break:break-word;white-space:pre-wrap;}
.chat-msg-reply{
  display:flex;align-items:baseline;gap:6px;
  margin:2px 0 4px;padding:4px 8px;
  border-left:2px solid var(--amber-soft);
  background:rgba(55,214,255,0.06);
  border-radius:4px;
  font-size:11.5px;
  overflow:hidden;
}
.chat-msg-reply-name{font-weight:700;color:var(--amber-soft);flex-shrink:0;}
.chat-msg-reply-text{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.chat-msg.chat-msg-own .chat-msg-reply-text{color:rgba(55,214,255,.7);}
.chat-mention{color:var(--amber-soft);font-weight:600;}
.chat-msg.chat-msg-own .chat-mention{color:var(--white);text-decoration:underline;}
.chat-link{color:var(--amber-soft);text-decoration:underline;word-break:break-all;}
.chat-msg.chat-msg-own .chat-link{color:var(--white);}
.chat-link:hover{opacity:.85;}
.chat-msg-del{
  float:right;background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;padding:0 0 0 6px;
}
.chat-msg-del:hover{color:var(--stamp);}

/* --- Ảnh gửi kèm trong tin nhắn (tính năng mới) --- */
.chat-msg-image{
  display:block;max-width:100%;max-height:260px;width:auto;height:auto;
  border-radius:9px;cursor:zoom-in;object-fit:cover;
  transition:opacity .15s var(--ease);
}
.chat-msg-image:hover{opacity:.9;}
.chat-msg.chat-msg-has-image{padding:6px;}
.chat-msg.chat-msg-has-image .chat-msg-head{padding:2px 5px 0;}
.chat-msg.chat-msg-has-image .chat-msg-text{padding:6px 5px 2px;}

.chat-input-row{
  flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 14px;border-top:1px solid rgba(55,214,255,.07);
}
.chat-attach-btn{
  flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  width:36px;height:36px;border-radius:10px;
  background:rgba(55,214,255,.08);border:1.5px solid var(--crate-line);
  color:var(--muted);cursor:pointer;transition:.18s var(--ease);
}
.chat-attach-btn:hover{color:var(--amber-soft);border-color:var(--amber-soft);background:rgba(55,214,255,.14);}
.chat-input-row input[type="text"]{
  flex:1;min-width:0;background:rgba(0,0,0,.22);border:1.5px solid var(--crate-line);
  color:var(--text-light);padding:9px 12px;border-radius:10px;font-family:'Plus Jakarta Sans',sans-serif;font-size:13.5px;
}
.chat-input-row input[type="text"]:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(55,214,255,.18);}
.chat-send-btn{
  flex:0 0 auto;
  background:linear-gradient(135deg,var(--amber),var(--amber-deep));color:var(--text-dark);border:none;
  font-family:'JetBrains Mono',monospace;font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;
  padding:0 16px;height:36px;border-radius:10px;cursor:pointer;transition:transform .18s var(--ease);
}
.chat-send-btn:hover{transform:translateY(-1px);}
.chat-send-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;}
.chat-login-hint{
  flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:12px 14px;border-top:1px solid rgba(55,214,255,.07);
  font-size:12.5px;color:var(--muted);
}

/* --- Xem trước ảnh trước khi gửi --- */
.chat-image-preview{
  flex:0 0 auto;display:flex;align-items:center;gap:10px;
  padding:10px 14px;border-top:1px solid rgba(55,214,255,.07);
  background:rgba(55,214,255,.04);
}
.chat-image-preview img{
  width:52px;height:52px;border-radius:8px;object-fit:cover;
  border:1px solid var(--crate-line);
}
.chat-image-preview-remove{
  width:24px;height:24px;flex:0 0 auto;border-radius:50%;
  background:rgba(0,0,0,.3);border:1px solid var(--crate-line);color:var(--text-light);
  cursor:pointer;font-size:11px;line-height:1;transition:.15s;
}
.chat-image-preview-remove:hover{background:var(--stamp);border-color:var(--stamp);color:var(--white);}

/* --- Lightbox xem ảnh chat full-size --- */
.chat-lightbox{
  position:fixed;inset:0;z-index:200;
  display:flex;align-items:center;justify-content:center;
  padding:30px;
  background:rgba(4,6,10,.92);
  backdrop-filter:blur(6px);
  opacity:0;visibility:hidden;
  transition:opacity .2s var(--ease), visibility .2s;
}
.chat-lightbox.open{opacity:1;visibility:visible;}
.chat-lightbox img{
  max-width:100%;max-height:100%;border-radius:10px;
  box-shadow:var(--shadow-xl);
  animation:popin .25s var(--ease) both;
}
.chat-lightbox-close{
  position:absolute;top:20px;right:calc(20px + env(safe-area-inset-right));
  width:38px;height:38px;border-radius:50%;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);
  color:var(--white);font-size:16px;cursor:pointer;transition:.15s;
}
.chat-lightbox-close:hover{background:var(--stamp);border-color:var(--stamp);}

@media (max-width:520px){
  header{padding:16px 20px;}
  main{padding:32px 18px 90px;}
  .header-right{gap:8px;}
  .admin-lock-btn{font-size:11px;padding:4px 12px 4px 4px;max-width:120px;gap:7px;}
  .lock-avatar{width:22px;height:22px;font-size:10px;}
  .wallet-toggle-btn{font-size:11px;padding:6px 10px;gap:6px;}
  .profile-top{flex-direction:column;text-align:center;}
  .id-tag{position:static;display:inline-block;margin-bottom:12px;}
  .profile-card, .form-card, .playlist-card, .dashboard-card{padding:26px;border-radius:18px;}
  .player-bar{left:calc(16px + env(safe-area-inset-left));right:calc(16px + env(safe-area-inset-right));width:auto;bottom:calc(16px + env(safe-area-inset-bottom));}
  /* FIX: bản thu gọn (quả cầu tròn 74px) không được kế thừa cả left LẪN right
     ở trên — khi cả 2 cùng có giá trị, trình duyệt ưu tiên "left" và đẩy quả
     cầu sang GÓC TRÁI thay vì góc phải như thiết kế ban đầu, đè lên đúng vị
     trí nhiều nút bấm quan trọng của trang (VD nút "+ Thêm loại key"). Reset
     lại left:auto để nó luôn đứng yên ở góc phải, không che nội dung khác. */
  .player-bar.collapsed{left:auto;right:calc(16px + env(safe-area-inset-right));}
  .bulk-bar{top:70px;}
  .dashboard-stats-row{grid-template-columns:repeat(3,1fr);gap:8px;}
  .showcase-carousel{aspect-ratio:4/5;max-height:420px;}
  .showcase-nav{width:32px;height:32px;font-size:17px;}
  .showcase-row{flex-direction:column;}
  .showcase-row .showcase-carousel{flex:none;}
  .chat-page{
    height:min(78vh,620px);
    border-radius:16px;
  }
  .queue-overlay{padding:14px;}
  .queue-box{width:100%;margin-bottom:100px;}
}

/* ---------- SMALL PHONE (≤400px) ---------- */
@media (max-width:400px){
  .brand-title{font-size:20px;}
  nav{gap:2px;padding:4px;}
  nav button{padding:8px 12px;font-size:11px;}
  .header-right{gap:6px;}
  /* Xếp ảnh lên trên, nội dung xuống dưới cho dễ đọc trên màn hình rất nhỏ */
  .parcel{flex-direction:column;}
  .parcel-img-wrap{width:100%;flex:0 0 auto;aspect-ratio:16/10;}
  .parcel-tape{top:10px;left:-13px;font-size:9px;padding:3px 22px;}
  .parcel-body{padding:14px 16px;}
  .dashboard-stats-row{gap:6px;}
  .dashboard-stat-box{padding:12px 8px;}
  .dashboard-stat-num{font-size:20px;}
  .dashboard-stat-label{font-size:9px;}
  .home-top{gap:10px;}
  .form-card,.profile-card,.playlist-card,.dashboard-card{padding:20px;}
  .schedule-row{flex-direction:column;}
}
/* =====================================================================
   PRODUCT CARD V3 — PREMIUM DARK GLASS
   Thiết kế lại hoàn toàn phần hiển thị (giữ nguyên 100% class/id/data-*
   để không đụng tới app.js): kính tối nhiều lớp, viền gradient phát sáng
   khi hover, ảnh zoom mượt, badge/chip glow, nút CTA gradient + sweep.
   ===================================================================== */
.pcard{
  position:relative;
  display:flex;flex-direction:column;
  background:var(--card-surface);
  border-radius:20px;
  overflow:hidden;
  border:1px solid var(--card-border);
  box-shadow:var(--shadow-md);
  transition:transform .38s var(--ease), box-shadow .38s var(--ease), border-color .38s var(--ease);
  animation:cardEnter .5s var(--ease) both;
  cursor:pointer;
  isolation:isolate;
}
/* Viền gradient phát sáng — 1px viền conic quay rất chậm, chỉ hiện rõ khi hover */
.pcard::before{
  content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;padding:1px;
  background:conic-gradient(from 0deg, var(--c-indigo), var(--c-violet), var(--c-blue), var(--c-indigo));
  -webkit-mask:linear-gradient(var(--white) 0 0) content-box, linear-gradient(var(--white) 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  opacity:0;transition:opacity .4s var(--ease);
  animation:cardBorderSpin 6s linear infinite;
}
.pcard:hover{
  transform:translateY(-8px);
  border-color:var(--card-border-hover);
  box-shadow:var(--shadow-xl), 0 0 46px -10px rgba(var(--c-indigo-rgb),.45);
}
.pcard:hover::before{opacity:1;}
body.bulk-mode .pcard{cursor:pointer;}
.pcard.is-selected{outline:3px solid var(--violet);outline-offset:2px;}

.pcard-select{
  display:none;position:absolute;top:12px;left:12px;z-index:4;
  width:26px;height:26px;border-radius:8px;
  background:rgba(55,214,255,.92);border:2px solid var(--text-dark);
  align-items:center;justify-content:center;cursor:pointer;font-size:14px;font-weight:700;
}
body.bulk-mode .pcard-select{display:flex;}
.pcard-select.checked{background:var(--violet);border-color:var(--violet);color:var(--white);}

.pcard-media{
  position:relative;width:100%;aspect-ratio:4/3;overflow:hidden;flex:none;
  background:linear-gradient(135deg,var(--panel-dark),var(--panel-darker));
}
/* Gradient tối ở đáy ảnh giúp badge/nút nổi bật hơn trên mọi loại ảnh */
.pcard-media::after{
  content:'';position:absolute;inset:auto 0 0 0;height:55%;z-index:1;pointer-events:none;
  background:linear-gradient(to top, rgba(5,7,12,.55), transparent);
}
.pcard-img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s var(--ease);}
.pcard:hover .pcard-img{transform:scale(1.08);}
.pcard-img-placeholder{
  width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:34px;opacity:.5;
  background:linear-gradient(100deg, transparent 30%, rgba(55,214,255,.06) 50%, transparent 70%);
  background-size:200% 100%;animation:shimmer 2.2s linear infinite;
}

.pcard-tags{
  position:absolute;top:10px;left:10px;right:52px;z-index:2;
  display:flex;flex-wrap:wrap;gap:6px;
}
.pcard-tag{
  display:inline-flex;align-items:center;gap:4px;
  font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.03em;
  color:var(--white);padding:5px 10px;border-radius:50px;
  box-shadow:0 3px 12px -2px rgba(0,0,0,.5), inset 0 1px 0 rgba(55,214,255,.2);
  white-space:nowrap;
  transition:transform .2s var(--ease);
}
.pcard:hover .pcard-tag{transform:translateY(-1px);}
.pcard-tag-vip{background:linear-gradient(135deg,#7B5CFF,#B78CFF);}
.pcard-tag-hot{background:linear-gradient(135deg,var(--c-orange),var(--c-red));}
.pcard-tag-new{background:linear-gradient(135deg,var(--c-green),#159A78);}

.pcard-fav{
  position:absolute;top:10px;right:10px;z-index:3;
  width:32px;height:32px;border-radius:50%;
  background:rgba(5,7,12,.65);backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  border:1px solid rgba(55,214,255,.14);color:var(--pink-accent);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 4px 12px -2px rgba(0,0,0,.4);
  transition:transform .25s var(--ease-spring), background .2s var(--ease), box-shadow .2s var(--ease);
}
.pcard-fav:hover{transform:scale(1.15);background:rgba(55,214,255,.16);box-shadow:0 6px 16px -2px rgba(55,214,255,.4);}
.pcard-fav:active{transform:scale(.92);}
.pcard-fav.active svg{fill:var(--pink-accent);}

/* Nút "Xem thêm" — thay cho khối tên/mô tả/giá dài dòng cũ, đặt ở góc phải
   DƯỚI của ảnh (không trùng vị trí trái tim yêu thích ở góc phải TRÊN).
   Bấm vào sẽ mở modal chi tiết sản phẩm (openProductDetail) — nơi vẫn hiện
   đầy đủ tên, mô tả, giá, nút Nhận sản phẩm như trước, chỉ là không phơi hết
   ra ngay trên thẻ nữa để danh sách gọn hơn. */
.pcard-more{
  position:absolute;bottom:10px;right:10px;z-index:3;
  display:inline-flex;align-items:center;gap:5px;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.02em;
  padding:7px 12px;border-radius:50px;
  background:rgba(5,7,12,.75);backdrop-filter:blur(var(--blur-amt));-webkit-backdrop-filter:blur(var(--blur-amt));
  border:1px solid rgba(55,214,255,.14);color:var(--card-text);cursor:pointer;
  box-shadow:0 4px 12px -2px rgba(0,0,0,.4);
  transition:transform .2s var(--ease-spring), background .2s var(--ease), box-shadow .2s var(--ease);
}
.pcard-more-arrow{transition:transform .18s var(--ease);}
.pcard-more:hover{transform:translateY(-1px) scale(1.04);background:rgba(55,214,255,.16);box-shadow:0 6px 16px -2px rgba(55,214,255,.4);}
.pcard-more:hover .pcard-more-arrow{transform:translateX(2px);}
.pcard-more:active{transform:scale(.96);}
@media (max-width:640px){
  .pcard-more{font-size:10.5px;padding:6px 10px;}
}

.pcard-name{
  padding:12px 16px 4px;
  font-size:14.5px;line-height:1.3;font-weight:700;letter-spacing:-.01em;
  color:var(--card-text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.pcard-name:last-child{padding-bottom:14px;}
@media (max-width:640px){
  .pcard-name{padding:10px 14px 2px;font-size:13.5px;}
  .pcard-name:last-child{padding-bottom:12px;}
}

.pcard-body{padding:17px 18px 18px;display:flex;flex-direction:column;gap:6px;color:var(--card-text);}
.pcard-cat{
  font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--c-blue);
}
.pcard-title{font-size:16.5px;line-height:1.3;font-weight:700;margin:0;color:var(--card-text);letter-spacing:-.01em;}
.pcard-desc{
  font-size:13px;line-height:1.5;color:var(--card-text-dim);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.pcard-meta-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px;}
.pcard-chip{
  display:inline-flex;align-items:center;gap:4px;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;
  padding:4px 10px;border-radius:50px;
}
.pcard-chip-price{
  background:linear-gradient(155deg,var(--amber-soft),var(--amber) 60%,var(--amber-deep));
  color:var(--text-dark);
  box-shadow:inset 0 1px 0 rgba(55,214,255,.6), 0 3px 10px -4px rgba(55,214,255,.6);
}
.pcard-chip-schedule{background:rgba(55,214,255,.18);color:#D9F3FF;text-transform:uppercase;letter-spacing:.04em;font-size:10px;}

.pcard-cta{
  position:relative;overflow:hidden;isolation:isolate;
  margin-top:11px;
  display:flex;align-items:center;justify-content:center;gap:8px;
  font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;
  background:var(--premium-gradient);color:var(--white);
  border:none;padding:12px 18px;border-radius:11px;cursor:pointer;
  box-shadow:0 10px 24px -10px rgba(var(--c-indigo-rgb),.7);
  transition:transform .25s var(--ease-spring), box-shadow .25s var(--ease), background .25s var(--ease);
}
.pcard-cta::before{
  content:'';position:absolute;inset:0;z-index:-1;
  background:linear-gradient(115deg,transparent 35%,rgba(55,214,255,.4) 48%,transparent 62%);
  transform:translateX(-130%);transition:transform .6s var(--ease);
}
.pcard-cta:hover{background:linear-gradient(135deg,var(--c-red),var(--c-violet));box-shadow:0 14px 30px -8px rgba(var(--c-violet-rgb),.75);transform:translateY(-1px) scale(1.02);}
.pcard-cta:hover::before{transform:translateX(130%);}
.pcard-cta-arrow{transition:transform .18s var(--ease);}
.pcard-cta:hover .pcard-cta-arrow{transform:translateX(3px);}
.pcard-cta:active{transform:scale(.96);}

/* Thanh QUAN TRI - tach han khoi than card bang vien + nen khac mau.
   Chi ton tai trong DOM khi isAdminUnlocked() === true (xu ly o app.js),
   nen khong can an/hien bang CSS toggle nua. */
.pcard-admin{
  background:rgba(55,214,255,.08);
  border-top:1px dashed rgba(55,214,255,.35);
  padding:10px 14px 12px;
  display:flex;flex-direction:column;gap:6px;
}
.pcard-admin-label{
  font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--violet);
}
.pcard-admin-btns{display:flex;gap:6px;flex-wrap:wrap;}
.pcard-admin-btn{
  flex:1 1 auto;min-width:64px;
  display:inline-flex;align-items:center;justify-content:center;gap:5px;
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;
  background:rgba(55,214,255,.06);border:1px solid rgba(55,214,255,.3);color:var(--card-text);
  padding:7px 8px;border-radius:8px;cursor:pointer;
  transition:background .18s var(--ease), border-color .18s var(--ease), transform .18s var(--ease);
}
.pcard-admin-btn:hover{background:rgba(55,214,255,.18);border-color:var(--violet);transform:translateY(-1px);}
.pcard-admin-btn.is-danger{border-color:rgba(55,214,255,.4);color:var(--c-red);}
.pcard-admin-btn.is-danger:hover{background:rgba(55,214,255,.18);border-color:var(--coral-danger);}
.pcard-admin-btn.is-pin.is-active{background:var(--stamp);border-color:var(--stamp);color:var(--white);}

@media (max-width:640px){
  .pcard-body{padding:14px 15px 16px;}
  .pcard-title{font-size:15.5px;}
  .pcard-admin-btn{font-size:10.5px;padding:7px 6px;}
}

/* =====================================================================
   MODAL MUA KEY — chon "Thoi han/Loai key" dang tab roi chon thanh toan
   V-coin/VIP-coin, giong kieu nap the/nap kim cuong quen thuoc. Dung lai
   dung ngon ngu thiet ke voi .type-toggle-row/.type-toggle-btn (khung FREE/
   VIP o form them san pham) de dong bo, chi doi ten class cho ro ngu canh.
   ===================================================================== */
.keytype-tabs-label,.keytype-currency-label{
  font-family:'JetBrains Mono',monospace;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--amber-soft);margin:10px 0 6px;
}
.keytype-tabs,.keytype-currency-row{
  display:flex;flex-wrap:wrap;gap:6px;background:rgba(0,0,0,.22);padding:5px;border-radius:12px;border:1px solid rgba(55,214,255,.06);
}
.keytype-tab,.keytype-currency-btn{
  font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.03em;font-weight:700;
  background:none;border:none;color:var(--muted);padding:9px 16px;border-radius:9px;cursor:pointer;transition:.2s var(--ease);flex:1 1 auto;
  white-space:nowrap;
}
.keytype-tab:hover,.keytype-currency-btn:hover{color:var(--white);background:rgba(55,214,255,.06);}
.keytype-tab.active,.keytype-currency-btn.active{background:var(--amber);color:var(--text-dark);box-shadow:0 4px 16px -2px rgba(55,214,255,.6);transform:translateY(-1px);}
.keytype-tab.is-outofstock{opacity:.5;}
.keytype-tab-oos{color:var(--stamp);font-size:10px;}

/* =====================================================================
   ANIMATION — PREMIUM MOTION SYSTEM
   Toàn bộ keyframes MỚI dùng trong bản redesign cao cấp được gom về
   cuối file theo đúng yêu cầu. Ưu tiên transform + opacity (GPU-friendly,
   mượt 60FPS), easing dùng chung var(--ease)/var(--ease-spring).
   Các keyframes cũ (popin, fadein, spin, shimmer, lockSpin, lockBreathe,
   topupPulse, modalPop, signOn) vẫn giữ nguyên phía trên, không đụng tới.
   ===================================================================== */

/* Aurora nền trôi rất chậm — dùng cho body::before */
@keyframes auroraDrift{
  0%{transform:translate3d(0,0,0) scale(1);}
  50%{transform:translate3d(-2%,1.5%,0) scale(1.04);}
  100%{transform:translate3d(2%,-1%,0) scale(1.02);}
}

/* Card xuất hiện: fade + trượt lên + blur nhẹ tan dần (thay cho popin phẳng) */
@keyframes cardEnter{
  from{opacity:0;transform:translateY(18px) scale(.97);filter:blur(18px);}
  to{opacity:1;transform:translateY(0) scale(1);filter:blur(0);}
}

/* Viền gradient quay quanh thẻ sản phẩm khi hover */
@keyframes cardBorderSpin{
  from{filter:hue-rotate(0deg);}
  to{filter:hue-rotate(360deg);}
}

/* Glow nhịp thở — dùng cho badge/chip/nút muốn nhấn mạnh sự chú ý */
@keyframes glowPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(var(--c-indigo-rgb),.45);}
  50%{box-shadow:0 0 0 8px rgba(var(--c-indigo-rgb),0);}
}

/* Trôi nổi nhẹ nhàng — dùng cho icon/huy hiệu trang trí */
@keyframes floatY{
  0%,100%{transform:translateY(0);}
  50%{transform:translateY(-6px);}
}

/* Trượt vào kèm mờ dần — dùng cho danh sách xuất hiện tuần tự */
@keyframes fadeInUp{
  from{opacity:0;transform:translateY(14px);}
  to{opacity:1;transform:translateY(0);}
}
/* ============================================================
   DRAGON PET (hiệu ứng con rồng bám theo chuột) — tuỳ chọn TẮT/BẬT
   trong trang Hồ sơ, mặc định TẮT. Bản thân là 1 <svg>
   position:fixed di chuyển bằng transform (không đụng layout),
   pointer-events:none để không chặn click, và chỉ được thêm vào
   DOM khi tính năng đang bật (xem app.js) để tránh hao hiệu năng
   lúc tắt.
   ============================================================ */
.dragon-pet-switch-row{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  cursor:pointer;padding:4px 0;
}
.dragon-pet-switch-label{font-size:14.5px;font-weight:600;color:var(--text-light);}
.switch{position:relative;display:inline-flex;flex:0 0 auto;}
.switch input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;}
.switch-track{
  display:block;width:46px;height:26px;border-radius:50px;
  background:rgba(55,214,255,.14);border:1.5px solid var(--crate-line);
  transition:background .2s ease, border-color .2s ease;position:relative;
}
.switch-thumb{
  position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;
  background:var(--text-light);box-shadow:0 2px 6px rgba(0,0,0,.4);
  transition:transform .2s cubic-bezier(.4,0,.2,1);
}
.switch input:checked + .switch-track{background:var(--violet);border-color:var(--violet);}
.switch input:checked + .switch-track .switch-thumb{transform:translateX(20px);}
.switch input:focus-visible + .switch-track{box-shadow:0 0 0 3px rgba(55,214,255,.35);}

/* SVG full màn hình, vẽ 1 con rồng nhiều đốt thân (đầu + vây + xương sống)
   bám theo chuột — xem app.js. pointer-events:none để không chặn click
   vào các nút phía dưới. */
.dragon-pet{
  position:fixed;top:0;left:0;width:100vw;height:100vh;
  pointer-events:none;z-index:9999;
  overflow:visible;
}
/* ============================================================
   SITE SOCIAL FAB (Facebook / TikTok / Discord) — vòng tròn icon cố
   định bên phải màn hình, luôn thấy được dù cuộn trang, có tooltip
   tên nền tảng hiện ra khi hover. Link lấy từ hồ sơ Admin (mục "Link
   mạng xã hội / liên hệ"), xem renderSiteSocialFab() trong app.js.
   Icon nào Admin chưa đặt link tương ứng thì tự ẩn (không render).
   ============================================================ */
.social-fab-list{
  position:relative;
  z-index:39;
  list-style:none;
  margin:16px 0 20px;
  padding:0;
  display:flex;
  flex-direction:row;
  gap:10px;
  justify-content:center;
  flex-wrap:wrap;
}
.social-fab-list:empty{display:none;}
nav#mainNav .social-fab-list{margin-left:4px;margin-right:4px;gap:8px;}
.social-fab-list .icon{
  position:relative;
  width:40px;
  height:40px;
  border-radius:50%;
  background:rgba(55,214,255,.96);
  box-shadow:0 4px 14px rgba(0,0,0,.22);
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background .2s ease, transform .2s cubic-bezier(.68,-.55,.265,1.55);
}
.social-fab-list .icon:hover{transform:scale(1.13);}
.social-fab-list .icon a{
  display:flex;
  align-items:center;
  justify-content:center;
  width:100%;
  height:100%;
  color:var(--text-dark);
  transition:color .2s ease;
}
.social-fab-list .icon svg{width:18px;height:18px;fill:currentColor;}
.social-fab-list .tooltip{
  position:absolute;
  bottom:100%;
  left:50%;
  transform:translateX(-50%);
  background:#111;
  color:#fff;
  font-size:11px;
  font-weight:600;
  white-space:nowrap;
  padding:5px 8px;
  border-radius:5px;
  box-shadow:0 4px 12px rgba(0,0,0,.3);
  opacity:0;
  pointer-events:none;
  transition:all .3s cubic-bezier(.68,-.55,.265,1.55);
  margin-bottom:6px;
}
.social-fab-list .tooltip::before{
  content:'';
  position:absolute;
  bottom:-3px;
  left:50%;
  width:5px;
  height:5px;
  background:#111;
  transform:translateX(-50%) rotate(45deg);
}
.social-fab-list .icon:hover .tooltip{
  opacity:1;
  bottom:calc(100% + 4px);
}
.social-fab-list .icon.facebook:hover{background:#1877f2;}
.social-fab-list .icon.facebook:hover a{color:#fff;}
.social-fab-list .icon.tiktok:hover{background:#010101;}
.social-fab-list .icon.tiktok:hover a{color:#fff;}
.social-fab-list .icon.discord:hover{background:#5865f2;}
.social-fab-list .icon.discord:hover a{color:#fff;}

@media (max-width:640px){
  .social-fab-list{gap:9px;margin:14px 0 16px;}
  .social-fab-list .icon{width:36px;height:36px;}
  .social-fab-list .icon svg{width:16px;height:16px;}
  .social-fab-list .tooltip{font-size:10px;padding:4px 7px;}
}
/* ============================================================
   HIEU UNG "GIOT MUC LAN" khi bam nut — thuan CSS, khong can
   sua app.js. Ap dung cho cac nut chinh trong giao dien.
   ============================================================ */
.primary-btn, .add-btn, .ghost-btn, .brush-btn, nav button, .stamp-pill, .icon-pill{
  position:relative;
}
.primary-btn::after, .add-btn::after, .ghost-btn::after{
  content:'';position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;
  background:rgba(55,214,255,.28);
  transform:translate(-50%,-50%) scale(0);
  opacity:0;pointer-events:none;z-index:-1;
  transition:transform .55s var(--ease), opacity .6s var(--ease);
}
.ghost-btn::after{background:rgba(55,214,255,.14);}
.primary-btn:active::after, .add-btn:active::after, .ghost-btn:active::after{
  transform:translate(-50%,-50%) scale(48);
  opacity:1;
  transition:transform .05s linear, opacity .05s linear;
}

/* ============================================================
   HIEU UNG SUONG MUC / MUC LOANG (bo sung) — lay cam hung tu tranh
   thuy mac dong. Chi dung sac do den/xam trong suot rgba(55,214,255,a),
   KHONG them mau moi. Canvas duoc app.js tu tao bang JS nen khong can
   sua cau truc HTML co san. Chia theo dung 4 hieu ung da yeu cau.
   ============================================================ */

/* 1) Suong mu troi nen toan trang — canvas #mistCanvas, JS tu chen vao
   dau <body>, nam sau toan bo noi dung (z-index thap nhat, cung lop voi
   aurora/noise hien co). */
#mistCanvas{position:fixed;inset:0;z-index:-1;pointer-events:none;}

/* Bản "nhẹ" thay cho canvas JS trên điện thoại / máy yếu (xem app.js,
   isLowPower()) — chỉ 1 lớp gradient tĩnh + hiệu ứng opacity mờ dần rất nhẹ,
   chạy hoàn toàn trên compositor (không tốn CPU/JS mỗi khung hình như canvas). */
.mist-lite::before{
  content:'';
  position:fixed; inset:-10%;
  z-index:-1; pointer-events:none;
  background:
    radial-gradient(480px 480px at 12% 18%, rgba(55,214,255,.14), rgba(55,214,255,0) 70%),
    radial-gradient(560px 560px at 88% 82%, rgba(55,214,255,.12), rgba(55,214,255,0) 70%);
  animation: mistLiteFade 16s ease-in-out infinite alternate;
  will-change: opacity;
}
@keyframes mistLiteFade{
  0%{opacity:.6;}
  100%{opacity:1;}
}
@media (prefers-reduced-motion:reduce){
  .mist-lite::before{animation:none;}
}

/* TỐI ƯU HIỆU NĂNG MOBILE: backdrop-filter (kính mờ) rất tốn GPU khi nhiều
   lớp (nav, header, popup, card...) cùng hiển thị/cuộn cùng lúc, đặc biệt
   trên điện thoại tầm trung/thấp (Android WebView xử lý backdrop-filter
   khá chậm). Hạ độ blur xuống một nửa trên màn hình nhỏ — vẫn giữ hiệu ứng
   kính mờ về mặt thị giác nhưng nhẹ tải hơn nhiều so với 18px gốc. */
@media (max-width:760px){
  :root{ --blur-amt: 7px; }
}

/* 2) Chu tieu de "loang muc" — xem @keyframes inkRise va .brand-title
   o phia tren (chi doi ten/animation cua .brand-title, giu nguyen
   @keyframes signOn cu de khong dung vao cac cho khac dang dung no). */
@keyframes inkRise{
  0%{opacity:0;filter:blur(10px);transform:translateY(14px) scale(1.04);}
  60%{opacity:1;}
  100%{opacity:1;filter:blur(0);transform:translateY(0) scale(1);}
}

/* 3) Suong boc len khi hover the san pham (.pcard) — app.js tu them
   <canvas class="pcard-smoke"> vao moi .pcard khi thẻ được render,
   khong can sua template renderProducts(). */
.pcard-smoke{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:0;transition:opacity .4s var(--ease);}
.pcard:hover .pcard-smoke{opacity:1;}
@media (max-width:640px){
  .pcard-smoke{display:none;}
}

/* 4) Noi dung "tan trong suong" khi cuon toi — dung cho .task-card
   (dung chung cho Nhiem vu / Cay thue / Premium). app.js tu gan/go
   class nay bang IntersectionObserver; mac dinh (khong co JS) the van
   hien binh thuong vi class chi duoc them bang dong. */
.task-card.mist-hidden{opacity:0;filter:blur(6px);transform:translateY(20px);}

/* ============================================================
   ===== SYSTEM EFFECTS SHOWCASE INTEGRATION =====
   Tich hop 12 hieu ung tu system-effects-showcase.html. Bien dung:
   --c-cyan/--c-cyan-rgb/--violet/--violet-rgb (dinh nghia o :root dau
   file). Tat ca animation lien tuc deu bi tat/giam boi
   @media(prefers-reduced-motion:reduce) o cuoi muc nay, va giam do
   phuc tap tren mobile trong @media(max-width:760px), dung chung quy
   uoc voi --blur-amt.
   ============================================================ */

/* --- 1. Circuit border header (mau #8, thay SVG bang ky thuat
   conic-gradient + mask de co gian theo chieu rong header) --- */
.sys-circuit-border{ position:relative; }
.sys-circuit-border::before{
  content:''; position:absolute; inset:0; z-index:0; pointer-events:none;
  padding:1.5px; border-radius:inherit;
  background:conic-gradient(from var(--circuit-angle,0deg),
    transparent 0%, var(--c-cyan) 6%, transparent 14%,
    transparent 50%, var(--violet) 56%, transparent 64%, transparent 100%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor; mask-composite:exclude;
  animation:circuitRotate 4.5s linear infinite;
}
@keyframes circuitRotate{ to{ --circuit-angle:360deg; } }
.sys-circuit-border::after{
  content:''; position:absolute; inset:0; z-index:0; pointer-events:none;
  background-repeat:no-repeat; background-size:6px 6px;
  background-image:
    radial-gradient(circle, var(--violet) 0 2px, transparent 3px),
    radial-gradient(circle, var(--violet) 0 2px, transparent 3px),
    radial-gradient(circle, var(--violet) 0 2px, transparent 3px),
    radial-gradient(circle, var(--violet) 0 2px, transparent 3px);
  background-position:0 0, 100% 0, 0 100%, 100% 100%;
  animation:circuitNodePulse 1.8s ease-in-out infinite;
}
@keyframes circuitNodePulse{0%,100%{opacity:.35;}50%{opacity:1;}}
.sys-circuit-border > *{ position:relative; z-index:1; }
@media(max-width:760px){
  .sys-circuit-border::before{ animation-duration:8s; }
}

/* --- 2. Decrypt number (mau #10) — so du vi giai ma khi doi --- */
.decrypt-num-active{
  color:var(--c-cyan) !important;
  text-shadow:0 0 10px rgba(var(--c-cyan-rgb),.55);
}

/* --- 4/topup. Hex ripple button (mau #6) --- */
.hex-ripple-host{ position:relative; overflow:hidden; }
.hex-ripple-span{
  position:absolute; width:14px; height:14px; left:0; top:0;
  clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);
  background:rgba(var(--c-cyan-rgb),.55);
  transform:translate(-50%,-50%) scale(0); opacity:0;
  pointer-events:none; z-index:5;
}
.hex-ripple-span.play{ animation:hexRipplePop .6s ease-out forwards; }
@keyframes hexRipplePop{
  0%{ transform:translate(-50%,-50%) scale(0); opacity:.9; }
  100%{ transform:translate(-50%,-50%) scale(9); opacity:0; }
}

/* --- 5. Iris modal open (mau #20) — thay hieu ung mo modal --- */
.product-modal-overlay .iris-ring{
  position:absolute; top:50%; left:50%; width:10px; height:10px;
  transform:translate(-50%,-50%); border-radius:50%;
  border:2px solid var(--c-cyan);
  box-shadow:0 0 20px rgba(var(--c-cyan-rgb),.6);
  opacity:0; pointer-events:none; z-index:2;
}
.product-modal-overlay.iris-anim .iris-ring{ animation:irisGrow .5s ease forwards; }
@keyframes irisGrow{
  0%{ width:10px; height:10px; opacity:1; border-radius:50%; transform:translate(-50%,-50%); }
  100%{ width:min(640px,90vw); height:min(420px,80vh); opacity:0; border-radius:24px; transform:translate(-50%,-50%); }
}
.product-modal-overlay.iris-anim .product-modal{
  opacity:0; transform:scale(.92);
  animation:irisContentIn .4s var(--ease-spring) .28s forwards;
}
@keyframes irisContentIn{ to{ opacity:1; transform:scale(1); } }

/* --- 6a. System notification window (mau #1) — khung toast --- */
.toast{
  position:fixed; bottom:calc(26px + env(safe-area-inset-bottom)); left:50%;
  transform:translateX(-50%) translateY(10px);
  width:calc(100vw - 32px); max-width:340px;
  background:rgba(8,12,22,.92); color:var(--text-light);
  border:1px solid var(--c-cyan); border-radius:8px;
  box-shadow:0 0 30px -6px rgba(var(--c-cyan-rgb),.5);
  clip-path:polygon(0 10px,10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%);
  z-index:60; opacity:0; pointer-events:none;
  transition:opacity .25s var(--ease);
  padding:0;
}
.toast.show{ opacity:1; pointer-events:auto; }
.toast-titlebar{
  display:flex; align-items:center; gap:8px; padding:7px 12px;
  border-bottom:1px solid rgba(var(--c-cyan-rgb),.3);
  font-family:'JetBrains Mono',monospace; font-size:10.5px; color:var(--c-cyan);
  letter-spacing:.08em;
}
.toast-dot{ width:6px; height:6px; border-radius:50%; background:var(--c-cyan); box-shadow:0 0 8px var(--c-cyan); animation:toastBlink 1.2s infinite; }
@keyframes toastBlink{ 50%{ opacity:.25; } }
.toast-body{ padding:10px 14px 12px; font-size:13px; line-height:1.55; min-height:20px; font-weight:600; }
.toast-cursor{ display:inline-block; width:6px; height:12px; background:var(--c-cyan); margin-left:2px; animation:toastBlink .8s infinite; vertical-align:-1px; }
@media(prefers-reduced-motion:reduce){
  .toast{ transform:translateX(-50%) translateY(0); }
}

/* --- 6b. Achievement banner (mau #19) — moc lon (chuoi nhiem vu, lan dau
   dang nhap, hang VIP moi) --- */
.ach-banner{
  position:fixed; top:calc(18px + env(safe-area-inset-top)); left:50%;
  transform:translate(-50%,-24px);
  display:flex; align-items:center; gap:12px;
  width:calc(100vw - 32px); max-width:360px;
  background:linear-gradient(135deg,var(--bg-3),var(--bg-1));
  border:1px solid var(--c-cyan); border-radius:10px; padding:12px 16px;
  z-index:65; overflow:hidden; pointer-events:none;
  box-shadow:0 0 26px -4px rgba(var(--c-cyan-rgb),.5);
  opacity:0;
}
.ach-banner.play{ animation:achIn .5s cubic-bezier(.2,1.3,.4,1) forwards, achOut .5s ease 3.4s forwards; }
@keyframes achIn{ to{ opacity:1; transform:translate(-50%,0); } }
@keyframes achOut{ to{ opacity:0; transform:translate(-50%,-16px); } }
.ach-icon{
  width:36px; height:36px; border-radius:50%; background:rgba(var(--c-cyan-rgb),.15);
  border:1px solid var(--c-cyan); color:var(--c-cyan); display:flex; align-items:center; justify-content:center;
  font-size:16px; flex-shrink:0; transform:scale(0);
}
.ach-banner.play .ach-icon{ animation:achIconPop .4s ease .25s forwards; }
@keyframes achIconPop{ to{ transform:scale(1); } }
.ach-title{ font-size:13.5px; font-weight:700; color:#fff; }
.ach-sub{ font-size:11.5px; color:var(--muted); margin-top:2px; }
.ach-sweep{ position:absolute; inset:0; background:linear-gradient(120deg,transparent 40%,rgba(255,255,255,.15) 50%,transparent 60%); transform:translateX(-120%); }
.ach-banner.play .ach-sweep{ animation:achSweep .8s ease .55s; }
@keyframes achSweep{ to{ transform:translateX(120%); } }
@media(prefers-reduced-motion:reduce){
  .ach-banner{ transition:opacity .3s; }
  .ach-banner.play{ animation:none; opacity:1; transform:translate(-50%,0); }
}

/* --- 7. Scan border khi go tim kiem (mau #24) --- */
.search-wrap.scanning{
  border-color:var(--c-cyan) !important;
  box-shadow:0 0 0 1px var(--c-cyan), 0 0 16px rgba(var(--c-cyan-rgb),.4) !important;
  transition:box-shadow .2s, border-color .2s;
}

/* --- 8. Segmented progress bar + burst hoan thanh nhiem vu (mau #23, #3) --- */
.task-segbar{ display:flex; gap:2px; width:100%; margin:6px 0 2px; }
.task-segbar i{
  flex:1; height:5px; border-radius:2px; background:rgba(255,255,255,.08);
  transform:scaleY(.5); opacity:.45; transition:.2s;
}
.task-segbar i.filled{
  background:linear-gradient(180deg,var(--c-cyan),var(--violet));
  box-shadow:0 0 6px rgba(var(--c-cyan-rgb),.5);
  transform:scaleY(1); opacity:1;
}
.task-card{ position:relative; overflow:visible; }
.task-burst-particle{
  position:absolute; width:3px; height:3px; border-radius:50%;
  background:var(--c-cyan); bottom:50%; left:50%; opacity:0; pointer-events:none; z-index:4;
}
.task-burst-particle.play{ animation:taskBurstRise .9s ease-out forwards; }
@keyframes taskBurstRise{
  0%{ opacity:1; transform:translate(0,0); }
  100%{ opacity:0; transform:translate(var(--dx),-60px); }
}
.task-burst-text{
  position:absolute; top:8px; left:50%; transform:translateX(-50%) scale(.4);
  font-family:'JetBrains Mono',monospace; font-weight:700; font-size:13px;
  color:var(--c-cyan); text-shadow:0 0 14px rgba(var(--c-cyan-rgb),.7);
  opacity:0; pointer-events:none; z-index:5; white-space:nowrap;
}
.task-burst-text.play{ animation:taskBurstText 1s cubic-bezier(.2,1.4,.4,1) forwards; }
@keyframes taskBurstText{
  0%{ opacity:0; transform:translateX(-50%) scale(.3); }
  35%{ opacity:1; transform:translateX(-50%) scale(1.1); }
  100%{ opacity:0; transform:translateX(-50%) scale(1) translateY(-14px); }
}

/* --- 9. Glitch loi dang nhap/dang ky (mau #17) --- */
.auth-error-msg.glitch-play{
  position:relative; color:#fff !important; animation:authGShake .35s steps(2,end) 3;
}
.auth-error-msg.glitch-play::before, .auth-error-msg.glitch-play::after{
  content:attr(data-glitch-text); position:absolute; left:0; top:0; width:100%;
  background:inherit; padding:inherit;
}
.auth-error-msg.glitch-play::before{ color:#FF4D6D; animation:authGSplitA .35s steps(2,end) 3; mix-blend-mode:screen; }
.auth-error-msg.glitch-play::after{ color:var(--c-cyan); animation:authGSplitB .35s steps(2,end) 3; mix-blend-mode:screen; }
@keyframes authGShake{0%,100%{transform:translate(0);}25%{transform:translate(-2px,1px);}75%{transform:translate(2px,-1px);}}
@keyframes authGSplitA{0%,100%{transform:translate(0);}50%{transform:translate(-3px,0);}}
@keyframes authGSplitB{0%,100%{transform:translate(0);}50%{transform:translate(3px,0);}}

/* --- 10. Bui rune troi noi toan trang (mau #7), mat do thap --- */
.ambient-dust-stage{
  position:fixed; inset:0; z-index:-1; pointer-events:none; overflow:hidden;
}
.ambient-dust{
  position:absolute; bottom:-6px; width:3px; height:3px; border-radius:50%;
  background:var(--c-cyan); opacity:0;
  box-shadow:0 0 6px rgba(var(--c-cyan-rgb),.8);
}
.ambient-dust.play{ animation:ambientDustFloat linear forwards; }
@keyframes ambientDustFloat{
  0%{ opacity:0; transform:translateY(0); }
  10%{ opacity:.7; }
  90%{ opacity:.35; }
  100%{ opacity:0; transform:translateY(-140px); }
}
@media(max-width:760px){
  .ambient-dust-stage{ display:none; } /* tat han tren mobile de do tai GPU/JS */
}

/* --- 11. HUD dong ho goc man hinh (mau #12, gan Date() that) --- */
.hud-clock{
  position:fixed; right:16px; bottom:calc(16px + env(safe-area-inset-bottom));
  z-index:20; font-family:'JetBrains Mono',monospace; font-size:10.5px;
  line-height:1.8; color:rgba(var(--c-cyan-rgb),.55); white-space:pre;
  pointer-events:none; text-align:right;
  text-shadow:0 0 6px rgba(var(--c-cyan-rgb),.3);
}
@media(max-width:760px){
  .hud-clock{ display:none; }
}

/* --- 12. Boot sequence (mau #13), chi chay 1 lan/phien --- */
.boot-overlay{
  position:fixed; inset:0; z-index:999; background:#000;
  display:none; align-items:center; justify-content:center; overflow:hidden;
}
.boot-overlay.show{ display:flex; }
.boot-inner{ width:100%; max-width:420px; padding:0 24px; position:relative; z-index:1; }
.boot-log{ font-family:'JetBrains Mono',monospace; font-size:12px; color:rgba(var(--c-cyan-rgb),.8); line-height:2; min-height:96px; }
.boot-log .ok{ color:var(--c-cyan); }
.boot-bar-track{ height:5px; border-radius:4px; background:rgba(255,255,255,.08); overflow:hidden; margin-top:10px; }
.boot-bar-fill{ height:100%; width:0%; background:var(--c-cyan); box-shadow:0 0 10px var(--c-cyan); }
.boot-gate{ position:absolute; top:0; bottom:0; width:50%; background:var(--bg-0); z-index:3; }
.boot-gate.left{ left:0; border-right:1px solid rgba(var(--c-cyan-rgb),.4); }
.boot-gate.right{ right:0; border-left:1px solid rgba(var(--c-cyan-rgb),.4); }
.boot-gate.open.left{ animation:bootGateL .8s ease forwards; }
.boot-gate.open.right{ animation:bootGateR .8s ease forwards; }
@keyframes bootGateL{ to{ transform:translateX(-100%); } }
@keyframes bootGateR{ to{ transform:translateX(100%); } }
@media(max-width:760px){
  .boot-log{ font-size:11px; min-height:80px; }
}

/* ============================================================
   NÂNG CẤP HIỆU ỨNG "VIP PRO — HỆ THỐNG CÔNG NGHỆ" cho PRODUCT CARD
   (.pcard) và các nút bấm chính (.pcard-cta, .add-btn, .primary-btn,
   .ghost-btn, .type-toggle-btn[vip]). Toàn bộ dùng class/id CÓ SẴN,
   không thêm HTML/JS mới -> tương thích 100% với app.js hiện tại.
   Cảm hứng: bảng mạch phát sáng + vòng quét HUD (ảnh mẫu người dùng).
   ============================================================ */

/* ---------- 1) TEXTURE BẢNG MẠCH mờ trên nền card ---------- */
.pcard{
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150' viewBox='0 0 150 150'%3E%3Cg fill='none' stroke='%2337D6FF' stroke-width='1' stroke-opacity='.16'%3E%3Cpath d='M0 24H40V0'/%3E%3Cpath d='M150 40H110V70H80'/%3E%3Cpath d='M0 100H30V150'/%3E%3Cpath d='M150 120H120V95H95'/%3E%3Cpath d='M60 0V35H100V60'/%3E%3Cpath d='M40 150V115H10V90'/%3E%3C/g%3E%3Cg fill='%2337D6FF' fill-opacity='.22'%3E%3Ccircle cx='40' cy='24' r='2.2'/%3E%3Ccircle cx='80' cy='70' r='2.2'/%3E%3Ccircle cx='30' cy='100' r='2.2'/%3E%3Ccircle cx='95' cy='95' r='2.2'/%3E%3Ccircle cx='100' cy='60' r='2.2'/%3E%3Ccircle cx='10' cy='90' r='2.2'/%3E%3C/g%3E%3C/svg%3E"),
    var(--card-surface);
  background-repeat:repeat, no-repeat;
  background-size:150px 150px, auto;
}
/* Viền quét conic vốn có: cho hiện mờ SẴN (hệ thống "standby") thay vì
   chỉ hiện khi hover, quay nhanh + rực hơn khi hover ("charging"). */
.pcard::before{ opacity:.28; }
.pcard:hover::before{ opacity:1; animation-duration:2.6s; }

/* ---------- 2) KHUNG HUD 4 GÓC — luôn hiện mờ, rực khi hover ---------- */
.pcard::after{
  content:'';position:absolute;inset:0;z-index:5;pointer-events:none;
  border-radius:inherit;
  opacity:.32;transition:opacity .3s var(--ease);
  background-repeat:no-repeat;
  background-image:
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan)),
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan)),
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan)),
    linear-gradient(var(--c-cyan),var(--c-cyan)), linear-gradient(var(--c-cyan),var(--c-cyan));
  background-size:2px 16px, 16px 2px, 2px 16px, 16px 2px, 2px 16px, 16px 2px, 2px 16px, 16px 2px;
  background-position:
    9px 9px, 9px 9px,
    calc(100% - 11px) 9px, calc(100% - 23px) 9px,
    9px calc(100% - 23px), 9px calc(100% - 11px),
    calc(100% - 11px) calc(100% - 23px), calc(100% - 23px) calc(100% - 11px);
  filter:drop-shadow(0 0 3px rgba(var(--c-cyan-rgb),.65));
}
.pcard:hover::after{ opacity:1; filter:drop-shadow(0 0 7px rgba(var(--c-cyan-rgb),.9)); }

/* ---------- 3) TIA QUÉT (scanline) chạy liên tục trên ảnh sản phẩm ---------- */
.pcard-media::before{
  content:'';position:absolute;left:4%;right:4%;height:2px;z-index:1;pointer-events:none;
  top:-10%;
  background:linear-gradient(90deg,transparent,rgba(var(--c-cyan-rgb),.95),transparent);
  box-shadow:0 0 10px 1px rgba(var(--c-cyan-rgb),.75);
  opacity:.4;
  animation:pcardScanline 3.4s linear infinite;
}
.pcard:hover .pcard-media::before{ opacity:.9; animation-duration:1.3s; }
@keyframes pcardScanline{
  0%{ top:-6%; }
  100%{ top:106%; }
}

/* ---------- 4) BADGE VIP dạng hologram lấp lánh ---------- */
.pcard-tag-vip{
  background:linear-gradient(120deg,#7B5CFF,#37D6FF,#B78CFF,#7B5CFF);
  background-size:300% 100%;
  animation:pcardHoloShimmer 3.2s linear infinite;
}
@keyframes pcardHoloShimmer{
  0%{ background-position:0% 50%; }
  100%{ background-position:300% 50%; }
}

/* ---------- 5) Chip giá nhấp nháy nhẹ như đèn hệ thống ---------- */
.pcard-chip-price{
  animation:pcardPricePulse 2.6s ease-in-out infinite;
}
@keyframes pcardPricePulse{
  0%,100%{ box-shadow:inset 0 1px 0 rgba(55,214,255,.6), 0 3px 10px -4px rgba(55,214,255,.6); }
  50%{ box-shadow:inset 0 1px 0 rgba(55,214,255,.95), 0 3px 18px -2px rgba(55,214,255,1); }
}

/* ---------- 6) NÚT BẤM — bo góc vát kiểu HUD + nhịp thở phát sáng ---------- */
.pcard-cta, .add-btn, .primary-btn, .ghost-btn{
  clip-path:polygon(11px 0,100% 0,100% calc(100% - 11px),calc(100% - 11px) 100%,0 100%,0 11px);
}
.pcard-cta, .add-btn{
  animation:pcardCtaBreathe 2.6s ease-in-out infinite;
}
.pcard-cta:hover, .add-btn:hover{ animation-play-state:paused; }
@keyframes pcardCtaBreathe{
  0%,100%{ box-shadow:0 10px 24px -10px rgba(var(--c-indigo-rgb),.7); }
  50%{ box-shadow:0 10px 30px -6px rgba(var(--c-indigo-rgb),1); }
}
/* ---------- 7) Toggle VIP (Free/VIP) khi active mang phong cách hologram ---------- */
.type-toggle-btn[data-ptype="vip"].active{
  background:linear-gradient(120deg,#7B5CFF,#37D6FF,#B78CFF,#7B5CFF);
  background-size:300% 100%;
  animation:pcardHoloShimmer 3.2s linear infinite;
  color:var(--text-dark);
}

/* --- Reduced motion: tat/giam toan bo animation lien tuc cua bo hieu ung
   moi, giu nguyen trang thai cuoi (hien noi dung, khong chan UI) --- */
@media(prefers-reduced-motion:reduce){
  .sys-circuit-border::before, .sys-circuit-border::after{ animation:none; opacity:.5; }
  .ambient-dust-stage{ display:none; }
  .boot-overlay{ display:none !important; }
  .hex-ripple-span.play, .task-burst-particle.play, .task-burst-text.play,
  .product-modal-overlay.iris-anim .iris-ring{ animation:none !important; display:none; }
  .product-modal-overlay.iris-anim .product-modal{ opacity:1; transform:none; animation:none; }
  .auth-error-msg.glitch-play{ animation:none; }
  .auth-error-msg.glitch-play::before, .auth-error-msg.glitch-play::after{ display:none; }
  .pcard::before, .pcard::after, .pcard-media::before, .pcard-tag-vip,
  .pcard-chip-price, .pcard-cta, .add-btn, .type-toggle-btn[data-ptype="vip"].active{
    animation:none !important;
  }
  .pcard::before{ opacity:.5; }
  .pcard::after{ opacity:.6; }
  .pcard-media::before{ opacity:0; }
}
/* --- 13. Vệt quét theo con trỏ chuột (mau #25) — ánh sáng cyan mờ đi
   theo chuột trên toàn trang, tạo cảm giác "hệ thống đang quét/theo dõi".
   Tự tắt trên thiết bị cảm ứng (không có hover) để đỡ tốn hiệu năng. --- */
@media (hover:hover) and (pointer:fine){
  #cursorGlow{
    content:'';position:fixed;top:0;left:0;z-index:-4;pointer-events:none;
    width:420px;height:420px;margin:-210px 0 0 -210px;
    background:radial-gradient(closest-side, rgba(55,214,255,.10), transparent 75%);
    transform:translate3d(50vw, 40vh, 0);
    will-change:transform;
  }
}

/* ============================================================
   14. LÀM MỚI THEO YÊU CẦU RIÊNG — chỉ áp dụng cho 2 overlay:
   #welcomeOverlay (trôi từ trên xuống + tiêu đề glitch giải mã)
   và #userAuthOverlay (thiết kế lại hoàn toàn kiểu "Terminal
   Hệ Thống", khác hẳn khung welcome-box dùng chung mặc định).
   ============================================================ */

/* ---- A) Xin chào: trôi từ trên xuống thay vì pop-in từ giữa ---- */
@keyframes dropFromTop{
  0%{opacity:0;transform:translateY(-90px) scale(.94);}
  55%{opacity:1;}
  100%{opacity:1;transform:translateY(0) scale(1);}
}
#welcomeOverlay .welcome-box{animation:dropFromTop .65s var(--ease-spring);}

/* Chữ "giải mã" kiểu glitch — dùng chung với glitchTypeReveal() trong app.js */
.glitch-decrypt{
  color:var(--c-cyan) !important;
  animation:decryptFlicker .1s steps(2) infinite;
}
@keyframes decryptFlicker{
  0%{text-shadow:1.5px 0 rgba(255,77,109,.75),-1.5px 0 rgba(55,214,255,.75);}
  50%{text-shadow:-1.5px 0 rgba(255,77,109,.75),1.5px 0 rgba(55,214,255,.75);}
  100%{text-shadow:1.5px 0 rgba(255,77,109,.5),-1.5px 0 rgba(55,214,255,.5);}
}

/* ---- B) Đăng nhập: thiết kế lại hoàn toàn kiểu "Terminal Hệ Thống" ---- */
#userAuthOverlay .welcome-box{
  background:linear-gradient(165deg, rgba(13,18,32,.95), rgba(5,7,12,.98));
  border:1px solid rgba(55,214,255,.35);
  box-shadow:0 60px 130px -24px rgba(0,0,0,.8), inset 0 0 0 1px rgba(55,214,255,.08), 0 0 70px -10px rgba(55,214,255,.3);
  overflow:hidden;padding-top:34px;
}
#userAuthOverlay .welcome-box::before{display:none;}
#userAuthOverlay .welcome-box::after{
  content:'';position:absolute;left:0;right:0;height:2px;top:-2px;z-index:2;
  background:linear-gradient(90deg,transparent,var(--c-cyan),transparent);
  box-shadow:0 0 14px 2px rgba(55,214,255,.8);
  animation:authScan 2.8s linear infinite;
}
@keyframes authScan{0%{top:-2px;}100%{top:100%;}}

#userAuthOverlay .welcome-box h2{
  font-family:'JetBrains Mono',monospace;font-size:20px;letter-spacing:.02em;
  text-transform:uppercase;color:var(--c-cyan);text-shadow:0 0 16px rgba(55,214,255,.55);
}
#userAuthOverlay .welcome-box h2::before{
  content:'// ACCESS TERMINAL';display:block;font-size:10px;letter-spacing:.22em;
  color:rgba(55,214,255,.55);margin-bottom:8px;font-weight:700;
}
#userAuthOverlay .welcome-box h2::after{
  content:'_';margin-left:2px;animation:toastBlink 1s step-start infinite;color:var(--c-cyan);
}

#userAuthOverlay .auth-tabs{
  background:none;padding:0;border-bottom:1px solid rgba(55,214,255,.18);
  border-radius:0;gap:0;margin-bottom:22px;
}
#userAuthOverlay .auth-tab-btn{color:var(--muted);padding:10px 4px;border-radius:0;position:relative;}
#userAuthOverlay .auth-tab-btn.active{background:none;color:var(--c-cyan);text-shadow:0 0 10px rgba(55,214,255,.5);}
#userAuthOverlay .auth-tab-btn.active::after{
  content:'';position:absolute;left:6px;right:6px;bottom:-1px;height:2px;
  background:var(--c-cyan);box-shadow:0 0 8px rgba(55,214,255,.9);
}

#userAuthOverlay .auth-form input{
  background:rgba(55,214,255,.04);border:none;border-bottom:1.5px solid rgba(55,214,255,.28);
  border-radius:4px 4px 0 0;color:var(--c-cyan);
  transition:border-color .2s var(--ease), background .2s var(--ease);
}
#userAuthOverlay .auth-form input::placeholder{color:rgba(111,137,173,.65);}
#userAuthOverlay .auth-form input:focus{
  outline:none;border-color:var(--c-cyan);background:rgba(55,214,255,.09);
  box-shadow:0 4px 14px -6px rgba(55,214,255,.6);
}
#userAuthOverlay .auth-form label{color:rgba(217,243,255,.7);}

#userAuthOverlay .welcome-close:not([style*="background:none"]){
  background:linear-gradient(120deg,#1F8FD1,#37D6FF,#7B5CFF,#37D6FF) !important;
  background-size:300% 100%;animation:pcardHoloShimmer 3s linear infinite;
  color:#04101A !important;box-shadow:0 10px 30px -10px rgba(55,214,255,.6);
}

/* ---- C) Xin chào: đổi hẳn sang khung "THÔNG BÁO HỆ THỐNG" (cùng ngôn
   ngữ thị giác với .toast — góc vát, viền cyan, thanh tiêu đề có chấm
   nhấp nháy) thay vì hộp bo tròn thông thường như trước. ---- */
#welcomeOverlay .welcome-box{
  background:rgba(8,12,22,.96);
  border:1px solid var(--c-cyan);
  border-radius:6px;
  clip-path:polygon(0 18px,18px 0,100% 0,100% calc(100% - 18px),calc(100% - 18px) 100%,0 100%);
  box-shadow:0 0 46px -8px rgba(var(--c-cyan-rgb),.5), 0 50px 110px -20px rgba(0,0,0,.75);
  padding:0 0 30px;
}
#welcomeOverlay .welcome-box::before{display:none;}
#welcomeOverlay .welcome-box h2{
  position:relative;margin:0 0 20px;padding:14px 34px 14px 40px;
  border-bottom:1px solid rgba(55,214,255,.3);
  font-size:21px;text-align:left;
}
#welcomeOverlay .welcome-box h2::before{
  content:'';position:absolute;left:18px;top:50%;transform:translateY(-50%);
  width:7px;height:7px;border-radius:50%;background:var(--c-cyan);
  box-shadow:0 0 8px var(--c-cyan);animation:toastBlink 1.2s infinite;
}
#welcomeOverlay .welcome-box p{padding:0 34px;}
#welcomeOverlay .welcome-close{margin-left:34px;margin-right:34px;}