:root{
  --bg:#0b0e12;
  --panel:#12161c;
  --text:#e9eef5;
  --muted:#8aa0b3;

  --accent:#0dcaf0;
  --accent-2:#6ceeff;
  --accent-3:#16c1d4;
  --accent-soft:rgba(13,202,240,.12);
  --stroke:#1d2430;

  /* ── Premium Glass Tokens ── */
  --glass-bg:
    linear-gradient(160deg, rgba(255,255,255,.09) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(180deg, rgba(18,22,28,.84), rgba(18,22,28,.64));
  --glass-border:rgba(255,255,255,.12);
  --glass-shadow:0 18px 55px rgba(0,0,0,.55), 0 0 28px rgba(0,200,255,.14);
  --glass-blur:blur(14px) saturate(150%);
  --radius-card:20px;
  --radius-modal:22px;
}

/* ── CYAN SCROLLBAR ── */
/* Force dark color-scheme so browser doesn't inject white native scrollbar */
:root{
  color-scheme: dark;
}
html{
  scrollbar-width:thin;
  scrollbar-color: rgba(13,202,240,.35) rgba(255,255,255,.04);
}
body{
  scrollbar-width:thin;
  scrollbar-color: rgba(13,202,240,.35) rgba(255,255,255,.04);
}
*{
  scrollbar-width:thin;
  scrollbar-color: rgba(13,202,240,.35) rgba(255,255,255,.04);
}

/* Webkit — all elements including html/body */
::-webkit-scrollbar{
  width:4px !important;
  height:4px !important;
}
::-webkit-scrollbar-track{
  background:rgba(255,255,255,.04) !important;
  border-radius:999px;
}
::-webkit-scrollbar-thumb{
  background:rgba(13,202,240,.35) !important;
  border-radius:999px !important;
  border:none !important;
}
::-webkit-scrollbar-thumb:hover{
  background:rgba(13,202,240,.60) !important;
  box-shadow:0 0 8px rgba(13,202,240,.4);
}
::-webkit-scrollbar-corner{
  background:transparent !important;
}

/* pool float body — thumb un peu plus visible */
.pool-float-body::-webkit-scrollbar-thumb{
  background:rgba(13,202,240,.48) !important;
}
.pool-float-body::-webkit-scrollbar-thumb:hover{
  background:rgba(13,202,240,.75) !important;
  box-shadow:0 0 10px rgba(13,202,240,.45);
}
.pool-float-body{
  scrollbar-color: rgba(13,202,240,.48) rgba(255,255,255,.04);
}

/* RESET & BASE */
*{ box-sizing:border-box }
body{
  margin:0;
  font-family:Inter,system-ui,Segoe UI,Roboto,Arial;
  background: radial-gradient(circle at 50% -10%, #0d1117 0%, var(--bg) 48%, #070a0f 100%);
  color:var(--text);
  min-height:100svh;
}

/* HEADER */
.header{
  padding:18px 20px;
  border-bottom:1px solid var(--stroke);
  display:flex; align-items:center; gap:12px;
  backdrop-filter: blur(6px) saturate(120%);
  background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,0)) ;
  position: sticky; top:0; z-index: 40;
  box-shadow: 0 10px 30px rgba(0,0,0,.25);
}

.logo{
  display:flex; align-items:center; justify-content:center;
  height:32px; width:32px;
  border-radius:8px; overflow:hidden;
  background: linear-gradient(135deg, rgba(13,202,240,.18), rgba(13,202,240,0));
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.08), 0 0 18px rgba(13,202,240,.22);
}

.h1{ font-size:18px; font-weight:800; letter-spacing:.35px }

/* LAYOUT */
.wrap{ max-width:980px; margin:28px auto; padding:0 16px; position: relative; z-index: 1; }
.grid{ display:grid; gap:16px }
@media (min-width:900px){ .grid{ grid-template-columns:1fr 1fr }}

/* GLASS CARD */
.card{
  background: linear-gradient(180deg, rgba(18,22,28,.78), rgba(18,22,28,.62));
  border:1px solid rgba(255,255,255,.10);
  border-radius:14px;
  padding:16px;
  backdrop-filter: blur(8px) saturate(130%);
  box-shadow:
    0 10px 30px rgba(0,0,0,.45),
    0 0 18px rgba(0,200,255,.10);
  position: relative;
}

/* Login glass panel – plus transparent */
.login-card{
  background: linear-gradient(180deg, rgba(18,22,28,.52), rgba(18,22,28,.38)) !important;
  border: 1px solid rgba(255,255,255,.10) !important;
  backdrop-filter: blur(10px) saturate(130%) !important;
  box-shadow:
     0 12px 40px rgba(0,0,0,.55),
     0 0 24px rgba(13,202,240,.16) !important;
}

/* Inputs + password plus translucides sur la page login */
.login-card .input{
  background: linear-gradient(180deg, rgba(10,14,20,.58), rgba(10,14,20,.46)) !important;
  border: 1px solid rgba(255,255,255,.10) !important;
  box-shadow:
    inset 0 1px 2px rgba(255,255,255,.04),
    0 4px 18px rgba(13,202,240,.06);
}
.login-card .input::placeholder{ color: rgba(202,220,235,.65) }
.login-card .input:focus{
  background: linear-gradient(180deg, rgba(10,14,20,.66), rgba(10,14,20,.54)) !important;
  border-color: rgba(13,202,240,.75) !important;
  box-shadow:
    0 0 0 3px rgba(13,202,240,.22),
    0 0 24px rgba(13,202,240,.14);
  outline: none;
}

/* Bouton un peu plus “neon” pour contraster sur le fond transparent */
.login-card .btn{
  box-shadow:
    0 0 0 1px rgba(255,255,255,.18) inset,
    0 4px 14px rgba(13,202,240,.45),
    0 0 22px rgba(13,202,240,.18);
}

.card::before{
  /* hairline top highlight */
  content:"";
  position:absolute; inset:0 0 auto 0; height:1px; border-radius:14px 14px 0 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.12), transparent);
  pointer-events:none;
}

/* BUTTONS */
.btn{
  --btn-fg:#062128;
  background: linear-gradient(180deg, rgba(255,255,255,.15), rgba(255,255,255,0)), var(--accent);
  border:none; color:var(--btn-fg);
  padding:10px 14px; border-radius:10px; font-weight:800; letter-spacing:.2px;
  cursor:pointer; position:relative; isolation:isolate;
  box-shadow: 0 2px 6px rgba(0,200,255,.5), inset 0 1px 2px rgba(255,255,255,.4);
  transition: transform .12s ease, box-shadow .2s ease, filter .2s ease;
}
.btn:hover{ transform: translateY(-1px); filter: brightness(1.04); }
.btn:active{ transform: translateY(0); filter: brightness(.98); }
.btn.muted{
  background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,0)), #1b222d;
  color:var(--muted);
  box-shadow: inset 0 1px 2px rgba(255,255,255,.06);
}

/* INPUTS */
.input,.select,.file{
  width:100%;
  background: linear-gradient(180deg, rgba(14,18,24,.85), rgba(14,18,24,.75));
  border:1px solid rgba(255,255,255,.10);
  color:var(--text);
  padding:10px 12px; border-radius:10px;
  backdrop-filter: blur(6px) saturate(120%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.04);
  transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
.input::placeholder{ color: #6f8196 }
.input:focus,.select:focus,.file:focus{
  outline:none;
  border-color: rgba(13,202,240,.75);
  box-shadow: 0 0 0 3px rgba(13,202,240,.20), 0 0 20px rgba(13,202,240,.12);
  background: linear-gradient(180deg, rgba(14,18,24,.92), rgba(14,18,24,.82));
}

/* KEY/VALUE rows */
.kv{
  display:flex; justify-content:space-between;
  padding:8px 0; border-bottom:1px dashed rgba(255,255,255,.10);
}
#sysCard .kv > div:last-child{
  display:flex; flex-direction:column; align-items:flex-end;
}

/* BADGES */
.badge{
  padding:4px 8px; border-radius:999px;
  background: rgba(14,18,24,.8);
  border:1px solid rgba(255,255,255,.14);
  color:#9fb4c8; font-size:12px;
  backdrop-filter: blur(4px);
}
.badge--ok     { background: rgba(  0,200,150,.18); border-color: rgba(  0,200,150,.35); color:#bff3e6 }
.badge--warn   { background: rgba(255,165,  0,.18); border-color: rgba(255,165,  0,.42); color:#ffd7a1 }
.badge--error  { background: rgba(255, 60, 60,.18); border-color: rgba(255, 60, 60,.42); color:#ffb3b3 }
.badge--muted  { background: rgba(180,180,180,.12); border-color: rgba(255,255,255,.18); color:#cbd5e1 }

/* LINKS */
.link{ color:var(--accent); text-decoration:none }
.link:hover{ text-decoration:underline; text-decoration-color: rgba(13,202,240,.65) }

/* FOOTER */
.foot{ margin-top:24px; color:#6f8196; font-size:12px }

/* LOGO CENTER (login) */
.logo-center{
  display:flex; justify-content:center; align-items:center; height:100svh;
}
.logo-center img{
  width:200px; height:200px; object-fit:contain;
  filter: drop-shadow(0 0 18px rgba(13,202,240,.25));
}

/* =========================
   RXCLOUD — PROGRESS METER
   ========================= */

.meter{
  width:220px;
  height:8px;
  border-radius:999px;
  position:relative;
  overflow:hidden;

  background: linear-gradient(
    90deg,
    rgba(0,200,255,.05),
    rgba(255,255,255,.05)
  );

  border:1px solid rgba(0,200,255,.15);

  box-shadow:
    inset 0 1px 2px rgba(255,255,255,.06),
    inset 0 0 12px rgba(0,200,255,.08);

  margin-top:6px;
}

/* léger “bloom” sous la barre (glow global) */
.meter::after{
  content:"";
  position:absolute; inset:-10px;
  background: radial-gradient(circle at 20% 50%, rgba(0,200,255,.18), transparent 55%);
  opacity:.55;
  filter: blur(10px);
  pointer-events:none;
}

.meter__fill{
  height:100%;
  width:0%;
  border-radius:999px;
  position:relative;

  background: linear-gradient(
    90deg,
    rgba(39,224,255,.9) 0%,
    rgba(13,202,240,1) 50%,
    rgba(0,140,255,.9) 100%
  );

  /* glow interne doux */
  box-shadow:
    inset 0 0 8px rgba(255,255,255,.25),
    inset 0 0 18px rgba(0,200,255,.35);

  transition: width .35s ease;
}

/* shine/reflet qui traverse */
.meter__fill::before{
  content:"";
  position:absolute;
  inset:0;
  background: linear-gradient(90deg,
    transparent,
    rgba(255,255,255,.35),
    transparent
  );
  transform: translateX(-60%);
  animation: rx-meter-shine 2.6s ease-in-out infinite;
  opacity:.45;
}

/* petit grain “cyber” (optionnel mais joli) */
.meter__fill::after{
  content:"";
  position:absolute; inset:0;
  background-image: repeating-linear-gradient(
    90deg,
    rgba(0,0,0,.10) 0px,
    rgba(0,0,0,.10) 2px,
    rgba(0,0,0,0) 6px,
    rgba(0,0,0,0) 10px
  );
  opacity:.18;
  mix-blend-mode: overlay;
  pointer-events:none;
}

.meter__fill::after{
  content:"";
  position:absolute;
  right:0;
  top:0;
  height:100%;
  width:14px;

  background: linear-gradient(
    90deg,
    rgba(0,200,255,0),
    rgba(0,200,255,.5)
  );

  pointer-events:none;
}

@keyframes rx-meter-flow{
  0%   { background-position: 0% 50%; }
  100% { background-position: 200% 50%; }
}

@keyframes rx-meter-pulse{
  0%,100% { filter: saturate(1) brightness(1); }
  50%     { filter: saturate(1.15) brightness(1.08); }
}

@keyframes rx-meter-shine{
  0%   { transform: translateX(-70%); opacity:.0; }
  15%  { opacity:.35; }
  45%  { opacity:.15; }
  100% { transform: translateX(70%); opacity:0; }
}

/* Respect accessibilité */
@media (prefers-reduced-motion: reduce){
  .meter__fill{
    transition:none;
    animation:none;
  }
  .meter__fill::before{ animation:none; }
}

/* GLOBAL WATERMARK */
body::before{
  content:"";
  position:fixed; inset:0; pointer-events:none; z-index:0;
  background: url('img/rxcloud_logo.png') no-repeat center 15%;
  background-size: 380px auto;
  opacity:.035; filter: grayscale(1);
}

/* === Floating VM panel – draggable === */
#poolFloat{
  position:fixed; right:16px; top:76px; z-index:38;
  width:340px; max-width:calc(100vw - 32px);
  display:none;
  border-radius:var(--radius-card);
  transition:box-shadow .2s ease;
  max-height:calc(100vh - 88px);
  overflow:hidden;
}
#poolFloat.is-dragging{
  box-shadow:0 28px 80px rgba(0,0,0,.65), 0 0 50px rgba(13,202,240,.28);
  transition:none;
  user-select:none;
}
.pool-float-card{
  background:
    radial-gradient(100% 60% at 50% 0%, rgba(13,202,240,.08), transparent 65%),
    linear-gradient(180deg, rgba(18,22,28,.88), rgba(18,22,28,.72)) !important;
  border:1px solid rgba(255,255,255,.14) !important;
  backdrop-filter:blur(18px) saturate(160%) !important;
  -webkit-backdrop-filter:blur(18px) saturate(160%) !important;
  box-shadow:
    0 18px 55px rgba(0,0,0,.55),
    0 0 0 1px rgba(255,255,255,.05) inset,
    0 0 30px rgba(13,202,240,.16);
  position:relative;
  overflow:hidden;
}
.pool-float-head{
  display:flex; align-items:center; gap:8px;
  padding:12px 14px;
  border-bottom:1px solid rgba(255,255,255,.10);
  font-weight:800; letter-spacing:.3px;
  position:relative; z-index:1;
  background:linear-gradient(180deg, rgba(13,202,240,.05), transparent);
  cursor:grab;
  user-select:none;
}
.pool-float-head:active{ cursor:grabbing; }
/* drag handle icon */
.pool-float-head::before{
  content:"⠿";
  font-size:16px;
  opacity:.35;
  margin-right:2px;
  letter-spacing:0;
}
.pool-float-body{ padding:10px 12px; max-height:calc(100vh - 200px); overflow-y:auto; }
.pool-float-foot{
  padding:10px 12px; border-top:1px solid rgba(255,255,255,.08);
  color:#6f8196; font-size:12px;
}
.pool-close{
  margin-left:auto;
  background:linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.18);
  color:var(--text); border-radius:10px; padding:5px 10px; cursor:pointer;
  font-size:14px; font-weight:700;
  transition:background .15s ease, box-shadow .15s ease, transform .1s ease;
}
.pool-close:hover{
  background:rgba(255,255,255,.12);
  box-shadow:0 0 14px rgba(13,202,240,.2);
  transform:scale(1.08);
}

/* FAB (toggle) */
#poolFab{
  position:fixed; right:16px; top:76px; z-index:39;
  padding:8px 12px; border-radius:9999px;
  border:1px solid rgba(255,255,255,.2);
  background: linear-gradient(180deg, rgba(255,255,255,.15), rgba(255,255,255,0)), #0dcaf0;
  box-shadow: 0 2px 6px rgba(0,200,255,.5), inset 0 1px 2px rgba(255,255,255,.4);
  color:#06141a; font-weight:800; cursor:pointer;
  transition: opacity .15s ease, transform .15s ease, filter .2s ease;
}
#poolFab:hover{ filter: brightness(1.05) }
#poolFab.is-hidden{ opacity:0; transform:scale(.95); pointer-events:none }

/* mini liste VMs */
#poolFloat .vm-row{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; margin:6px 0;
  background:
    linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.09);
  border-radius:14px;
  position:relative;
  overflow:hidden;
  transition:border-color .2s ease, box-shadow .2s ease, transform .15s ease;
}
#poolFloat .vm-row:hover{
  transform:translateX(2px);
  border-color:rgba(13,202,240,.2);
  box-shadow:0 4px 14px rgba(0,0,0,.2), 0 0 14px rgba(13,202,240,.08);
}
#poolFloat .state-maintenance .dot{
  background:#f59e0b;
  box-shadow: 0 0 0 3px rgba(245,158,11,.35);
}
#poolFloat .state-down .dot{
  background:#ff5050;
  box-shadow: 0 0 0 3px rgba(255,80,80,.35);
}

#poolFloat .state-down{
  background:rgba(255,80,80,.14);
  border-color:rgba(255,80,80,.35);
  color:#ffd1d1;
}
@keyframes rxPulseDown {
  0%   { transform: scale(1);   opacity: 1; }
  50%  { transform: scale(1.35); opacity: .55; }
  100% { transform: scale(1);   opacity: 1; }
}

#poolFloat .state-down .dot{
  animation: rxPulseDown 0.9s infinite ease-in-out;
}
#poolFloat .state-maintenance{
  background:rgba(245,158,11,.14);
  border-color:rgba(245,158,11,.35);
  color:#fff0d6;
}
#poolFloat .vm-name{ font-weight:700; font-size:13.5px }
#poolFloat .vm-kind{ font-size:12px; opacity:.85 }
#poolFloat .vm-spacer{ flex:1 1 auto }
#poolFloat .badge-dot{
  display:inline-flex; align-items:center; gap:8px; padding:4px 10px;
  border-radius:999px; font-size:12px; border:1px solid rgba(255,255,255,.12)
}
#poolFloat .dot{ width:8px; height:8px; border-radius:999px; background:#888 }
#poolFloat .state-free .dot{ background:#10b981 }
#poolFloat .state-allocating .dot{ background:#f59e0b }
#poolFloat .state-occupied .dot{ background:#ef4444 }
#poolFloat .state-free{ background:rgba(16,185,129,.14); border-color:rgba(16,185,129,.35) }
#poolFloat .state-allocating{ background:rgba(245,158,11,.14); border-color:rgba(245,158,11,.35) }
#poolFloat .state-occupied{ background:rgba(239,68,68,.14); border-color:rgba(239,68,68,.35) }

@media (max-width:700px){
  #poolFab{ bottom:16px; top:auto }
  #poolFloat{ bottom:70px; top:auto; width:min(360px, calc(100vw - 32px)) }
}

/* === Meters (sysCard) alignment === */
#sysCard .meter{ width:260px; margin-top:6px }

/* === Subtle animated glow utility (apply on .card, .header if tu veux) === */
@keyframes rx-pulseGlow {
  0%,100%{
    box-shadow:
      0 12px 38px rgba(0,0,0,.50),
      0 0 16px rgba(0,200,255,.12),
      0 0 0 1px rgba(255,255,255,.05) inset;
  }
  50%{
    box-shadow:
      0 14px 44px rgba(0,0,0,.52),
      0 0 32px rgba(0,200,255,.24),
      0 0 0 1px rgba(255,255,255,.08) inset;
  }
}
.glow{ animation: rx-pulseGlow 4.5s ease-in-out infinite }

/* === Background aura / core-pulse (option login) === */
.aura-bg{
  position: fixed; inset:auto; top:50%; left:50%;
  width: 200vmax; height: 200vmax; transform: translate(-50%,-50%);
  border-radius: 50%;
  background: radial-gradient(circle,
      rgba(13,202,240,.10) 0%,
      rgba(13,202,240,.04) 65%,
      transparent 75%);
  filter: blur(60px);
  z-index: 0; pointer-events:none;
  animation: auraSpin 36s linear infinite;
}
@keyframes auraSpin { to { transform: translate(-50%,-50%) rotate(360deg) } }

.core-pulse{
  position: fixed; top:50%; left:50%; transform: translate(-50%,-50%);
  width: 560px; height:560px; border-radius:50%;
  background: radial-gradient(circle, rgba(13,202,240,.35) 0%, rgba(13,202,240,.08) 60%, transparent 80%);
  filter: blur(100px);
  z-index: 0; pointer-events:none;
  animation: coreBeat 6s ease-in-out infinite;
}
@keyframes coreBeat{
  0%,100%{ transform: translate(-50%,-50%) scale(1); opacity:.65 }
  25%    { transform: translate(-50%,-50%) scale(1.16); opacity:.95 }
  50%    { transform: translate(-50%,-50%) scale(.94); opacity:.75 }
  75%    { transform: translate(-50%,-50%) scale(1.24); opacity:1 }
}

/* ACCESSIBILITY */
:focus-visible{
  outline: 3px solid rgba(13,202,240,.5);
  outline-offset: 2px;
  border-radius:10px;
}

@media (prefers-reduced-motion: reduce){
  .glow, .aura-bg, .core-pulse, .card, .header, .btn { animation: none !important }
  .core-pulse, .aura-bg { display:none }
}

/* === Dashboard cards: un peu plus transparent === */
.card{
  /* avant: rgba(18,22,28,.78) -> .56 | .62 -> .40 */
  background: linear-gradient(180deg, rgba(18,22,28,.56), rgba(18,22,28,.40)) !important;
  border: 1px solid rgba(255,255,255,.12) !important;
  backdrop-filter: blur(10px) saturate(130%) !important;
  box-shadow:
    0 12px 36px rgba(0,0,0,.50),
    0 0 22px rgba(13,202,240,.14) !important;
}

/* filets internes un peu plus visibles sur fond plus clair */
.card .kv{ border-bottom-color: rgba(255,255,255,.12) }

/* boutons “View”, “Upload”, etc. gardent du contraste sur le glass */
.card .btn{ box-shadow: 0 2px 10px rgba(13,202,240,.35), inset 0 1px 2px rgba(255,255,255,.45) }

/* Panneau flottant (VMs) aligné au nouveau glass */
.pool-float-card{
  background: linear-gradient(180deg, rgba(18,22,28,.50), rgba(18,22,28,.36)) !important;
  border: 1px solid rgba(255,255,255,.12) !important;
  backdrop-filter: blur(10px) saturate(130%) !important;
}

/* Badges un peu moins opaques pour matcher le reste */
.badge{ background: rgba(14,18,24,.68); border-color: rgba(255,255,255,.16) }


/* --- THEME SELECT (uniforme avec .btn/.file) --- */
.select{
  -webkit-appearance:none; -moz-appearance:none; appearance:none;
  width:100%;
  height:42px;
  padding:0 40px 0 12px;             /* espace pour la flèche */
  border-radius:12px;
  border:1px solid rgba(255,255,255,.12);
  background:
    linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,0)) ,
    rgba(255,255,255,.04);
  color:#eaf7ff;
  font-weight:600;
  outline:0;
  transition:border-color .15s ease, box-shadow .15s ease, background .15s ease, filter .15s ease;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.08);
  cursor:pointer;
  text-overflow:ellipsis;
}

/* flèche intégrée (pas besoin de wrapper) */
.select{
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23aeeaff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat:no-repeat;
  background-position:right 12px center;
  background-size:18px;
}

.select:hover{
  background:
    linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,0)),
    rgba(255,255,255,.06);
}

.select:focus{
  border-color:rgba(13,202,240,.65);
  box-shadow:
    0 0 0 3px rgba(13,202,240,.25),
    0 6px 18px rgba(13,202,240,.12),
    inset 0 1px 0 rgba(255,255,255,.12);
}

/* état disabled cohérent */
.select:disabled{
  filter:grayscale(.35) opacity(.7);
  cursor:not-allowed;
}

/* option disabled (si tu disables "Pentest Lab") */
select.select option[disabled]{
  color:#9aa6b2;
}


/* badges de statut */
.badge{ display:inline-flex; align-items:center; gap:8px;
  height:26px; padding:0 10px; border-radius:999px;
  font-size:12px; font-weight:700; letter-spacing:.2px;
  border:1px solid rgba(255,255,255,.18);
  background:rgba(255,255,255,.06); color:#eaf7ff;
}

.badge--ok{
  background:rgba(0,200,150,.22) !important;
  border-color:rgba(0,200,150,.45) !important;
  color:#cfffee !important;
  box-shadow:0 0 12px rgba(0,200,150,.12) inset;
}
.badge--warn{
  background:rgba(255,165,0,.20);
  border-color:rgba(255,165,0,.40);
  color:#fff0d6;
}
.badge--error{
  background:rgba(255,60,60,.22);
  border-color:rgba(255,60,60,.45);
  color:#ffe2e2;
}
.badge--muted{
  background:rgba(180,180,180,.12);
  border-color:rgba(255,255,255,.15);
  color:#d9e2ea;
}


/* ===== RxCloud custom select (habillage du <select>) ===== */
.rxsel { position:relative; }
.rxsel__btn{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  width:100%; height:42px; padding:0 12px; border-radius:12px; cursor:pointer;
  background:linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,0)), rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.12); color:#eaf7ff; font-weight:600;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.08); transition:.15s;
}
.rxsel__btn:hover{ background:linear-gradient(180deg, rgba(255,255,255,.12), transparent), rgba(255,255,255,.06); }
.rxsel__btn:focus{ outline:none; border-color:rgba(13,202,240,.65); box-shadow:0 0 0 3px rgba(13,202,240,.25), 0 6px 18px rgba(13,202,240,.12), inset 0 1px 0 rgba(255,255,255,.12)}
.rxsel__chev{ width:18px; height:18px; flex:0 0 auto; opacity:.9 }
.rxsel__list{
  position:absolute; inset:auto 0  auto 0; top: calc(100% + 6px);
  background:linear-gradient(180deg, rgba(18,22,28,.95), rgba(18,22,28,.88));
  border:1px solid rgba(255,255,255,.12); border-radius:12px; overflow:auto; max-height:240px; z-index:50;
  box-shadow:0 12px 36px rgba(0,0,0,.5), 0 0 22px rgba(13,202,240,.14);
  display:none;
}
.rxsel.open .rxsel__list{ display:block; }
.rxsel__opt{
  padding:10px 12px; cursor:pointer; display:flex; align-items:center; justify-content:space-between;
  border-bottom:1px solid rgba(255,255,255,.06);
}
.rxsel__opt:last-child{ border-bottom:none }
.rxsel__opt[aria-selected="true"]{ background:rgba(13,202,240,.10) }
.rxsel__opt.is-focus{ outline:2px solid rgba(13,202,240,.35); outline-offset:-2px; }
.rxsel__opt[aria-disabled="true"]{ opacity:.45; cursor:not-allowed }
.select.is-hidden-native{ position:absolute !important; inset:auto auto auto auto; width:1px; height:1px; opacity:0; pointer-events:none; }


/* ===== Profile modal ===== */
.rxmodal{
  position:fixed; inset:0; z-index:10010;
  display:flex; align-items:center; justify-content:center;
  background:rgba(0,0,0,.6); backdrop-filter:blur(2px);
}
.rxmodal__card{
  width:min(860px,92vw); max-height:88vh; overflow:auto;
  position:relative;
  background:
    radial-gradient(120% 80% at 8% 0%, rgba(13,202,240,.08) 0%, transparent 55%),
    radial-gradient(100% 80% at 92% 100%, rgba(0,160,255,.06) 0%, transparent 50%),
    linear-gradient(180deg, rgba(18,22,28,.88), rgba(18,22,28,.72));
  border:1px solid rgba(255,255,255,.14);
  border-radius:var(--radius-modal);
  backdrop-filter:blur(18px) saturate(160%);
  -webkit-backdrop-filter:blur(18px) saturate(160%);
  box-shadow:
    0 28px 80px rgba(0,0,0,.60),
    0 0 0 1px rgba(255,255,255,.06) inset,
    0 0 40px rgba(13,202,240,.18);
}

.rxmodal__head{
  display:flex; align-items:center; gap:10px;
  padding:14px 16px;
  border-bottom:1px solid rgba(255,255,255,.10);
  position:relative; z-index:2;
  background:linear-gradient(180deg, rgba(255,255,255,.04), transparent);
}
.rxmodal__close{
  margin-left:auto;
  background:linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.02));
  color:var(--text);
  border:1px solid rgba(255,255,255,.18);
  border-radius:10px; padding:5px 10px; cursor:pointer;
  font-size:14px; font-weight:700;
  transition:background .15s ease, box-shadow .15s ease, transform .1s ease;
}
.rxmodal__close:hover{
  background:rgba(255,255,255,.12);
  box-shadow:0 0 14px rgba(13,202,240,.2);
  transform:scale(1.08);
}
.rxmodal__body{ padding:16px 18px; position:relative; z-index:2; }
.rxlabel{ display:block; margin:0 0 6px; font-size:12px; color:#9fb4c8 }
.rxsep{
  margin:14px 0; height:1px; border:0;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.12), transparent);
}
.is-hidden-native{ position:absolute; inset:auto auto auto -9999px; }

/* Toast util (réutilisable) */
.rxtoast{
  position:fixed; right:16px; bottom:16px; z-index:10020;
  display:flex; align-items:center; gap:10px;
  max-width:520px; padding:12px 14px; border-radius:14px;
  color:#fff; border:1px solid rgba(255,255,255,.18);
  box-shadow:0 10px 30px rgba(0,0,0,.45), 0 0 18px rgba(0,200,255,.25);
  backdrop-filter: blur(6px) saturate(120%);
  font:14px/1.4 system-ui, Segoe UI, Roboto, sans-serif;
}
.rxtoast--ok   { background:linear-gradient(135deg, rgba(0,200,150,.96), rgba(0,150,110,.96)); }
.rxtoast--err  { background:linear-gradient(135deg, rgba(255,80,80,.96), rgba(200,40,40,.96)); }
.rxtoast--warn { background:linear-gradient(135deg, rgba(255,165, 0,.96), rgba(220,120, 0,.96)); }

/* ——— Pills unifiées (VMs status / Profile / Logout / Changelog) ——— */
.btn.btn-pill{
  border-radius:9999px;
  padding:10px 16px;
  border:1px solid rgba(255,255,255,.18);
  background:linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,0)) #0dcaf0;
  color:#06141a; font-weight:600;
  box-shadow:0 10px 28px rgba(13,202,240,.18), 0 0 0 1px rgba(255,255,255,.04) inset;
  transition:transform .12s ease, box-shadow .12s ease, filter .12s ease;
  -webkit-appearance:none; appearance:none;
}
.btn.btn-pill:hover{ transform:translateY(-1px); box-shadow:0 12px 34px rgba(13,202,240,.25), 0 0 0 1px rgba(255,255,255,.06) inset; }
.btn.btn-pill:active{ transform:none; filter:saturate(.95); }
.btn.btn-aqua{ background:linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,0)) #0dcaf0; }

/* ——— Panneau Changelog ancré à droite sous la barre ——— */
#chlogFloat.rxfloat{ 
  position:fixed; top:64px; right:12px; z-index:1200; display:none;
  max-height:calc(100vh - 96px); overflow:auto;
}
#chlogFloat .rxfloat__card{
  width:min(520px, 46vw);
  background:rgba(11,15,18,.82);
  border:1px solid rgba(255,255,255,.10);
  border-radius:14px;
  box-shadow:0 18px 60px rgba(0,0,0,.55), 0 0 22px rgba(13,202,240,.14);
  backdrop-filter: blur(8px) saturate(125%);
}

/* évite que le panneau masque les cards à gauche sur petits écrans */
@media (max-width: 900px){
  #chlogFloat .rxfloat__card{ width:min(520px, 92vw); }
}
/* Positionnement du panneau changelog (même place que le pool) */
#chlogFloat {
  position: fixed;
  right: 16px;
  bottom: 84px; /* au-dessus du footer/boutons */
  z-index: 9998;
}

/* État BUSY = rouge */
#poolFloat .state-busy {
  background: rgba(239,68,68,.14);
  border-color: rgba(239,68,68,.35);
  color: #ffd5d5;
}

#poolFloat .state-busy .dot {
  background: #ef4444;
  box-shadow: 0 0 0 3px rgba(239,68,68,.35);
}

.file-wrap{
  display:flex;
  align-items:center;
  gap:10px;
  min-width:0;
}

.file-input{
  position:absolute;
  left:-9999px;
  width:1px;
  height:1px;
  opacity:0;
}

.file-btn{
  white-space:nowrap;
  padding:9px 16px;
  border-radius:12px;

  border:1px solid rgba(0,200,255,.45);

  background: linear-gradient(
    180deg,
    rgba(39,224,255,1),
    rgba(13,202,240,1)
  );

  color:#062028;
  font-weight:600;

  box-shadow:
    0 6px 18px rgba(0,200,255,.35),
    inset 0 1px 0 rgba(255,255,255,.4);

  cursor:pointer;
  user-select:none;

  transition:
    transform .12s ease,
    filter .12s ease,
    box-shadow .12s ease;
}

.file-btn:hover{
  filter: brightness(1.08);
  box-shadow:
    0 10px 26px rgba(0,200,255,.55),
    inset 0 1px 0 rgba(255,255,255,.5);
}

.file-btn:active{
  transform: translateY(1px);
  box-shadow:
    0 4px 12px rgba(0,200,255,.35),
    inset 0 2px 4px rgba(0,0,0,.2);
}

.file-pill{
  flex:1;
  min-width:0;
  padding:9px 12px;
  border-radius:12px;
  border:1px solid rgba(255,255,255,.10);
  background: rgba(4,10,16,.65);
  color:#9fb2c3;
  font-size:13px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
/* ===== RxBot (guided tour) ===== */
.rxbot{
  position:fixed;
  z-index:10050;
  width:min(420px, calc(100vw - 24px));
  border-radius:14px;
  border:1px solid rgba(255,255,255,.14);
  background: linear-gradient(180deg, rgba(18,22,28,.62), rgba(18,22,28,.44));
  box-shadow: 0 18px 60px rgba(0,0,0,.55), 0 0 22px rgba(13,202,240,.16);
  backdrop-filter: blur(10px) saturate(130%);
  overflow:hidden;
}

.rxbot__head{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px;
  border-bottom:1px solid rgba(255,255,255,.08);
}
.rxbot__title{ font-weight:800; letter-spacing:.2px; display:flex; align-items:center; gap:10px; }
.rxbot__dot{
  width:10px; height:10px; border-radius:999px;
  background: #0dcaf0;
  box-shadow:0 0 0 3px rgba(13,202,240,.18), 0 0 14px rgba(13,202,240,.35);
}
.rxbot__x{
  margin-left:auto;
  background:#2b2f35; color:var(--text);
  border:1px solid rgba(255,255,255,.15);
  border-radius:10px; padding:4px 10px; cursor:pointer;
}
.rxbot__body{ padding:12px 12px 8px; }
.rxbot__msg{
  font: 14px/1.45 system-ui, Segoe UI, Roboto, sans-serif;
  color:#eaf7ff;
}
.rxbot__hint{
  margin-top:10px;
  font-size:12px;
  color:#9fb4c8;
  padding:8px 10px;
  border-radius:12px;
  border:1px dashed rgba(255,255,255,.14);
  background: rgba(255,255,255,.03);
}
.rxbot__foot{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:10px 12px;
  border-top:1px solid rgba(255,255,255,.08);
}
.rxbot__step{
  font-size:12px;
  padding:4px 10px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.15);
  background: rgba(180,180,180,.12);
  color:#d9e2ea;
}
.rxbot__right{ display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; }
.rxbot__btn{ padding:8px 12px; border-radius:999px; }

/* spotlight around target */
.rxbot-spotlight{
  position:fixed; inset:0;
  z-index:10040;
  pointer-events:none;
  background: rgba(0,0,0,.55);
  backdrop-filter: blur(1px);
  -webkit-mask: radial-gradient(circle at 50% 50%, transparent 0 120px, #000 140px);
          mask: radial-gradient(circle at 50% 50%, transparent 0 120px, #000 140px);
}

/* we also outline target */
.rxbot-target{
  position:relative;
  outline: 2px solid rgba(13,202,240,.65);
  box-shadow: 0 0 0 4px rgba(13,202,240,.15), 0 0 26px rgba(13,202,240,.18);
  border-radius:14px;
  transition: outline .12s ease, box-shadow .12s ease;
}

/* small arrow pointing */
.rxbot-arrow{
  position:fixed;
  z-index:10045;
  width:14px; height:14px;
  transform: rotate(45deg);
  background: rgba(13,202,240,.95);
  box-shadow: 0 10px 30px rgba(0,0,0,.35), 0 0 20px rgba(13,202,240,.22);
  border-radius:3px;
}

/* mobile: keep bot bottom */
@media (max-width: 820px){
  .rxbot{ left:12px !important; right:12px !important; bottom:12px !important; top:auto !important; }
}
@media (max-width: 820px){
  #rxbotFab{ left:12px; right:auto; bottom:12px; }
  .rxbotBubble{ left:12px; right:auto; bottom:66px; }
}
/* ===== RxBot Floating Assistant ===== */
#rxbotFab{
   position:fixed;
  left:16px;              /* <- au lieu de right:16px */
  right:auto;             /* <- important pour écraser l'ancien */
  bottom:16px;
  z-index:10030;
  display:flex; align-items:center; gap:10px;
  padding:10px 14px; border-radius:9999px;
  border:1px solid rgba(255,255,255,.18);
  background: linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,0)) #0dcaf0;
  box-shadow: 0 10px 28px rgba(13,202,240,.18), 0 0 0 1px rgba(255,255,255,.04) inset;
  color:#06141a; font-weight:800; cursor:pointer;
  transition:transform .12s ease, filter .12s ease, opacity .12s ease;
}
#rxbotFab:hover{ transform: translateY(-1px); filter: brightness(1.05); }
#rxbotFab:active{ transform:none; filter: brightness(.98); }
#rxbotFab .rxbotFab__icon{ font-size:16px; line-height:1; }
#rxbotFab .rxbotFab__txt{ font-size:13px; letter-spacing:.2px; }

.rxbotBubble{
  position:fixed;
  left:16px;              /* <- au lieu de right:16px */
  right:auto;             /* <- important */
  bottom:70px;
  z-index:10031;
  width:min(420px, calc(100vw - 32px));
  background: linear-gradient(180deg, rgba(18,22,28,.56), rgba(18,22,28,.40));
  border:1px solid rgba(255,255,255,.12);
  border-radius:14px;
  box-shadow:0 20px 60px rgba(0,0,0,.55), 0 0 22px rgba(13,202,240,.14);
  backdrop-filter: blur(10px) saturate(130%);
  overflow:hidden;
}
.rxbotBubble__head{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px;
  border-bottom:1px solid rgba(255,255,255,.08);
}
.rxbotBubble__title{ font-weight:800; letter-spacing:.2px; }
.rxbotBubble__close{
  margin-left:auto; background:#2b2f35;
  border:1px solid rgba(255,255,255,.15);
  color:var(--text); border-radius:8px; padding:4px 8px; cursor:pointer;
}
.rxbotBubble__body{
  padding:12px;
  color:#d9e2ea;
  font: 13px/1.45 system-ui, Segoe UI, Roboto, sans-serif;
}
.rxbotBubble__body .rxline{ margin:6px 0; }
.rxbotBubble__body .rxprompt{ color:#aeeaff; font-weight:700; }
.rxbotBubble__body .rxmuted{ opacity:.82; }
.rxbotBubble__body .rxwarn{ color:#ffd28a; font-weight:800; }
.rxbotBubble__body .rxok{ color:#58e6b7; font-weight:800; }
.rxbotBubble__foot{
  padding:10px 12px;
  border-top:1px solid rgba(255,255,255,.08);
  display:flex; justify-content:flex-end;
}
.rxbotBubble__dot{
  width:10px;
  height:10px;
  border-radius:50%;
  background:#0dcaf0;
  box-shadow:
    0 0 0 0 rgba(13,202,240,.6),
    0 0 12px rgba(13,202,240,.9);
  animation: rxbotPulse 1.6s infinite ease-out;
  flex:0 0 auto;
}

/* animation douce */
@keyframes rxbotPulse{
  0%{
    box-shadow:
      0 0 0 0 rgba(13,202,240,.55),
      0 0 12px rgba(13,202,240,.9);
  }
  70%{
    box-shadow:
      0 0 0 10px rgba(13,202,240,0),
      0 0 16px rgba(13,202,240,.6);
  }
  100%{
    box-shadow:
      0 0 0 0 rgba(13,202,240,0),
      0 0 12px rgba(13,202,240,.8);
  }
}
.rx-maint{
  max-width:980px;
  margin:12px auto 0;
  padding:0 16px;
  position:relative;
  z-index:2;
}
.rx-maint__inner{
  display:flex; align-items:center; gap:12px;
  padding:12px 14px;
  border-radius:14px;
  border:1px solid rgba(245,158,11,.28);
  background: linear-gradient(135deg, rgba(245,158,11,.18), rgba(18,22,28,.35));
  box-shadow: 0 12px 36px rgba(0,0,0,.45), 0 0 22px rgba(245,158,11,.10);
  backdrop-filter: blur(10px) saturate(130%);
}
.rx-maint__dot{
  width:12px; height:12px; border-radius:50%;
  background:#f59e0b;
  box-shadow: 0 0 0 4px rgba(245,158,11,.18), 0 0 18px rgba(245,158,11,.35);
  animation: rxmaintPulse 1.6s infinite ease-out;
  flex:0 0 auto;
}
.rx-maint__title{ font-weight:900; letter-spacing:.2px; color:#fff0d6; }
.rx-maint__sub{ font-size:12px; color:#ffd28a; opacity:.9; margin-top:2px; }

@keyframes rxmaintPulse{
  0%{ transform:scale(1); opacity:.95 }
  70%{ transform:scale(1.25); opacity:.65 }
  100%{ transform:scale(1); opacity:.95 }
}
/* ===== BADGES UI ===== */

.rx-lastbadge{
  margin-left:10px;
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:4px 10px;
  border-radius:999px;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.10);
  box-shadow:0 0 16px rgba(0,200,255,.10);
}
.rx-lastbadge__txt{
  font-weight:600;
  font-size:12px;
}

/* badge button wrapper */
.rx-badgebtn{
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:10px 12px;
  border-radius:16px;
  background:
    linear-gradient(160deg, rgba(255,255,255,.08) 0%, rgba(255,255,255,0) 55%),
    rgba(13,202,240,.04);
  border:1px solid rgba(255,255,255,.12);
  cursor:pointer;
  color:inherit;
  position:relative;
  overflow:hidden;
  transition:transform .15s ease, box-shadow .15s ease, border-color .15s ease;
}
.rx-badgebtn::before{
  content:"";
  position:absolute; inset:0;
  background:radial-gradient(circle at var(--mx,50%) var(--my,50%), rgba(13,202,240,.14), transparent 70%);
  opacity:0;
  transition:opacity .3s ease;
}
.rx-badgebtn:hover{
  transform:translateY(-2px) scale(1.02);
  border-color:rgba(13,202,240,.32);
  box-shadow:
    0 10px 24px rgba(0,0,0,.30),
    0 0 22px rgba(0,200,255,.16);
}
.rx-badgebtn:hover::before{ opacity:1; }
.rx-badgebtn:active{ transform:translateY(0px) scale(1); }

.rx-badgebtn--mini{
  padding:6px 8px;
  border-radius:999px;
}

/* image: NEVER STRETCH */
.rx-badgeimg{
  width:32px;
  height:32px;
  object-fit:contain;
  object-position:center;
  display:block;
  border-radius:10px;
  box-shadow:0 0 14px rgba(0,200,255,.25), 0 2px 8px rgba(0,0,0,.3);
  transition:filter .2s ease, transform .2s ease;
}
.rx-badgebtn:hover .rx-badgeimg{
  filter:drop-shadow(0 0 8px rgba(13,202,240,.7));
  transform:scale(1.08);
}
.rx-badgeimg--mini{
  width:22px;
  height:22px;
  border-radius:8px;
}

/* label beside badge */
.rx-badgelabel{
  font-size:12px;
  font-weight:700;
  opacity:.92;
  white-space:nowrap;
}

/* big zoom in modal */
.rx-badgezoom{
  width:160px;
  height:160px;
  margin:14px auto 0;
  border-radius:28px;
  background:
    radial-gradient(circle at 30% 20%, rgba(13,202,240,.12), transparent 60%),
    rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.16);
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow:
    0 20px 55px rgba(0,0,0,.45),
    0 0 40px rgba(0,200,255,.22),
    0 0 0 1px rgba(255,255,255,.06) inset;
  animation:badgeZoomFloat 3.8s ease-in-out infinite;
}
@keyframes badgeZoomFloat{
  0%,100%{ transform:translateY(0) scale(1); box-shadow:0 20px 55px rgba(0,0,0,.45), 0 0 40px rgba(0,200,255,.22), 0 0 0 1px rgba(255,255,255,.06) inset; }
  50%{ transform:translateY(-5px) scale(1.012); box-shadow:0 28px 70px rgba(0,0,0,.50), 0 0 55px rgba(0,200,255,.34), 0 0 0 1px rgba(255,255,255,.10) inset; }
}
#badgeModalImg{
  width:110px;
  height:110px;
  object-fit:contain;
  display:block;
}

/* Base overlay */
.rxmodal{
  position: fixed;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 10000;
  background: rgba(0,0,0,.65);
  backdrop-filter: blur(6px) saturate(120%);
}

/* Profile modal layer */
#profileModal{
  z-index: 10000;
}

/* Badge modal MUST be above profile */
#badgeModal{
  z-index: 11000;
}

/* card itself */
.rxmodal__card{
  position: relative;
  z-index: 1;
}

/* ===== PoolFloat dots: glow + pulse (NO layout changes) ===== */

#poolFloat .dot{
  /* taille FIXE, aucun impact layout */
  width:8px;
  height:8px;
  flex:0 0 8px;
  border-radius:999px;

  position:relative;
  isolation:isolate; /* pour que le halo soit clean */
  --dot-rgb: 136,136,136; /* fallback */
  box-shadow:
    0 0 0 2px rgba(var(--dot-rgb), .22),
    0 0 10px rgba(var(--dot-rgb), .35);
  animation: poolDotGlow 1.2s ease-in-out infinite;
  will-change: box-shadow, filter;
}

#poolFloat .dot::after{
  content:"";
  position:absolute;
  inset:-7px;                 /* halo externe */
  border-radius:999px;
  background: radial-gradient(circle,
    rgba(var(--dot-rgb), .35) 0%,
    rgba(var(--dot-rgb), 0) 62%);
  filter: blur(1px);
  opacity:.08;
  transform: scale(1);        /* scale UNIQUEMENT du halo */
  animation: poolDotRing 1.2s ease-in-out infinite;
  pointer-events:none;
  z-index:-1;
}

/* Assigne juste la couleur (via variable) par état */
#poolFloat .state-free .dot{ --dot-rgb: 16,185,129; }
#poolFloat .state-allocating .dot{ --dot-rgb: 245,158,11; }
#poolFloat .state-occupied .dot{ --dot-rgb: 239,68,68; }
#poolFloat .state-busy .dot{ --dot-rgb: 239,68,68; }        /* ton BUSY */
#poolFloat .state-maintenance .dot{ --dot-rgb: 245,158,11; }/* ton maintenance */
#poolFloat .state-down .dot{ --dot-rgb: 255,80,80; }        /* ton down */

/* pulse doux: pas de transform sur le dot */
@keyframes poolDotGlow{
  0%,100%{
    filter: brightness(1);
    box-shadow:
      0 0 0 2px rgba(var(--dot-rgb), .22),
      0 0 10px rgba(var(--dot-rgb), .35);
  }
  50%{
    filter: brightness(1.25);
    box-shadow:
      0 0 0 3px rgba(var(--dot-rgb), .28),
      0 0 16px rgba(var(--dot-rgb), .55),
      0 0 26px rgba(var(--dot-rgb), .18);
  }
}

@keyframes poolDotRing{
  0%,100%{ opacity:.08; transform:scale(1); }
  50%{ opacity:.24; transform:scale(1.45); }
}

/* accessibilité */
@media (prefers-reduced-motion: reduce){
  #poolFloat .dot, #poolFloat .dot::after{ animation:none !important; }
}

.badge--ending{
  background:rgba(255,165,0,.2);
  border:1px solid rgba(255,165,0,.5);
  box-shadow:0 0 8px rgba(255,165,0,.4);
}
/* Layout stable */
.session-grid {
  display: grid;
  grid-template-columns: 1fr 170px;
  align-items: center;
  gap: 20px;
}

/* Boutons colonne */
.session-actions {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

/* Base bouton */
.session-actions .btn {
  height: 42px;
  border-radius: 12px;
  font-weight: 700;
  letter-spacing: .4px;
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  transition: all .25s ease;
}

/* ===== JOIN CYAN BOOSTED ===== */
/* ===== JOIN CYAN FULL ===== */
.btn-join {
  background: linear-gradient(135deg, #31d7ff, #10bfe6);
  color: #04161d;
  border: 1px solid rgba(49,215,255,.8);

  box-shadow:
    0 0 12px rgba(49,215,255,.6),
    0 6px 18px rgba(0,0,0,.4);

  font-weight: 700;
  transition: all .2s ease;
}

.btn-join:hover {
  background: linear-gradient(135deg, #3be0ff, #18d0ff);
  box-shadow:
    0 0 22px rgba(49,215,255,.95),
    0 0 40px rgba(49,215,255,.5);
  transform: translateY(-1px);
}

/* ===== END RED FULL ===== */
/* ===== END RED REFINED ===== */
.btn-end {
  background: linear-gradient(135deg, #b3122f, #8f0f25);
  color: #ffe9ee;
  border: 1px solid rgba(255,60,90,.45);

  box-shadow:
    0 0 10px rgba(255,40,70,.35),
    0 6px 18px rgba(0,0,0,.45);

  font-weight: 700;
  transition: all .2s ease;
}

.btn-end:hover {
  background: linear-gradient(135deg, #c01636, #a3122c);
  box-shadow:
    0 0 18px rgba(255,40,70,.6),
    0 0 30px rgba(255,0,60,.25);
  transform: translateY(-1px);
}
/* Empêche l'ISO date de casser en 2 lignes */
#sessionBox .kv .badge{
  white-space: nowrap;
}
/* Ligne key/value */
#sessionBox .kv {
  display: grid;
  grid-template-columns: 60px auto;
  align-items: center;
  column-gap: 12px;   /* ← espace horizontal propre */
  margin-bottom: 10px;
}

/* =========================
   GLOBAL LIQUID GLASS UPGRADE
   ========================= */

/* fond plus “premium” + profondeur cyan */
body{
  background:
    radial-gradient(900px 520px at 18% 12%, rgba(0,220,255,.16), transparent 60%),
    radial-gradient(820px 520px at 82% 18%, rgba(0,160,255,.10), transparent 60%),
    radial-gradient(1100px 720px at 55% 105%, rgba(0,220,255,.10), transparent 60%),
    radial-gradient(circle at 50% -10%, #0d1117 0%, var(--bg) 48%, #070a0f 100%);
}

/* ── CYBER AMBIENT BACKGROUND ── */
.rx-grid-bg{
  position:fixed;inset:0;pointer-events:none;z-index:0;
  overflow:hidden;
}
.rx-grid-bg::before,
.rx-grid-bg::after{
  content:'';position:absolute;border-radius:50%;
  filter:blur(120px);
  animation:rxOrbDrift 24s ease-in-out infinite alternate;
}
.rx-grid-bg::before{
  width:800px;height:800px;
  top:-15%;left:-8%;
  background:radial-gradient(circle,rgba(13,202,240,.13) 0%,transparent 65%);
}
.rx-grid-bg::after{
  width:700px;height:700px;
  bottom:-12%;right:-8%;
  background:radial-gradient(circle,rgba(0,160,255,.10) 0%,transparent 65%);
  animation-delay:-12s;
  animation-direction:alternate-reverse;
}
@keyframes rxOrbDrift{
  0%{transform:translate(0,0) scale(1)}
  33%{transform:translate(80px,50px) scale(1.12)}
  66%{transform:translate(-40px,80px) scale(.93)}
  100%{transform:translate(50px,-30px) scale(1.06)}
}

/* scanlines disabled — clean premium look */
.rx-scanlines{
  display:none;
}

/* ── HEADER GLOW LINE ── */
.header::after{
  content:\'\';position:absolute;bottom:-1px;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(13,202,240,.4),rgba(13,202,240,.15),rgba(13,202,240,.4),transparent);
  pointer-events:none;
}

/* ── CARD ACCENT BAR (section titles) ── */
.rx-accent-bar{
  display:inline-block;width:3px;height:18px;border-radius:2px;
  background:linear-gradient(180deg,#0dcaf0,rgba(13,202,240,.3));
  box-shadow:0 0 8px rgba(13,202,240,.4);
  flex-shrink:0;
}

/* ── RADIAL GAUGE (CPU / RAM) ── */
.rx-gauge{position:relative;width:80px;height:80px;flex-shrink:0;overflow:visible}
.rx-gauge svg{width:100%;height:100%;transform:rotate(-90deg);overflow:visible}
.rx-gauge-track{fill:none;stroke:rgba(255,255,255,.06);stroke-width:7}
.rx-gauge-fill{fill:none;stroke:var(--accent);stroke-width:7;stroke-linecap:round;transition:stroke-dashoffset .8s ease}
.rx-gauge-val{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size:15px;font-weight:700;color:#c8f6ff;
}
.rx-gauge-row{display:flex;align-items:center;gap:16px;margin-bottom:14px}
.rx-gauge-label{font-size:12px;color:#8aa0b3;margin-bottom:2px}
.rx-gauge-detail{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:#6f8196}

/* ── TERMINAL SESSION EMPTY ── */
.rx-session-empty{
  text-align:center;padding:20px 0;
  font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size:13px;color:#4a5568;
}
.rx-session-empty .rx-cursor-blink{
  display:inline-block;width:8px;height:16px;
  background:#0dcaf0;margin-left:4px;vertical-align:middle;
  animation:rxCursorBlink 1s step-end infinite;
}
@keyframes rxCursorBlink{0%,100%{opacity:1}50%{opacity:0}}

/* ── REPORT ROW enhanced hover ── */
.rx-report-link{
  display:flex;align-items:center;gap:12px;
  padding:10px 12px;margin:8px 0;
  background:rgba(255,255,255,0.03);
  border:1px solid rgba(255,255,255,0.06);
  border-radius:12px;text-decoration:none;color:inherit;
  transition:transform .12s ease, background .12s ease, box-shadow .12s ease, border-color .2s ease;
}
.rx-report-link:hover{
  box-shadow:0 6px 14px rgba(13,202,240,0.12);
  background:rgba(255,255,255,0.05);
  border-color:rgba(13,202,240,.15);
  transform:translateX(3px);
}

/* cartes plus “verre liquide” */
.card{
  border-radius:18px;
  background:
    radial-gradient(140% 140% at 10% 0%, rgba(255,255,255,.10), rgba(255,255,255,0) 55%),
    linear-gradient(180deg, rgba(18,22,28,.78), rgba(18,22,28,.58));
  border:1px solid rgba(255,255,255,.10);
  box-shadow:
    0 18px 55px rgba(0,0,0,.55),
    0 0 26px rgba(0,200,255,.12);
}

/* reflet glass “edge” */
.card::after{
  content:"";
  position:absolute;
  inset:0;
  border-radius:18px;
  pointer-events:none;
  background:
    linear-gradient(135deg, rgba(255,255,255,.10), rgba(255,255,255,0) 42%),
    linear-gradient(315deg, rgba(0,200,255,.10), rgba(0,200,255,0) 45%);
  opacity:.55;
  mix-blend-mode: screen;
}

/* hover premium (très subtil) */
@media (hover:hover){
  .card:hover{
    transform: translateY(-1px);
    box-shadow:
      0 22px 70px rgba(0,0,0,.58),
      0 0 34px rgba(0,200,255,.14);
    transition: transform .14s ease, box-shadow .2s ease;
  }
}

/* titres plus clean */
.card h3{
  font-weight:850;
  letter-spacing:.2px;
}

/* séparateurs plus doux */
.rxsep{
  border:0;
  height:1px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.10), transparent);
  margin:14px 0;
}
/* VM status cards fix */
.vm-card,
.vm-status-card,
.vm-box,
.pool-float-card{
    border-radius:18px !important;
    overflow:hidden;
}

/* container du panneau */
.vm-status-panel{
    border-radius:22px !important;
    overflow:hidden;
}

/* badge Free */
.vm-status-badge{
    border-radius:999px;
}

/* ── DRAGGABLE POOL PANEL ── */
/* (handled by JS injected in dashboard.php — CSS-only hint: grab cursor) */
#poolFloat[data-draggable="true"] .pool-float-head{ cursor:grab }
#poolFloat[data-draggable="true"] .pool-float-head:active{ cursor:grabbing }

/* ── DIRECTIONAL GLOW ON CARDS ── */
.card[data-glow]::after{
  background:radial-gradient(
    350px circle at var(--mx,50%) var(--my,50%),
    rgba(13,202,240,.12),
    transparent 70%
  );
  opacity:1;
  transition:opacity .25s ease;
  mix-blend-mode:normal;
}

/* ── PREMIUM LOGIN / AUTH PAGES ── */
.login-card,
.fp-card,
.verify-card{
  background:
    radial-gradient(120% 80% at 8% 0%, rgba(13,202,240,.10) 0%, transparent 55%),
    linear-gradient(180deg, rgba(18,22,28,.88), rgba(18,22,28,.70)) !important;
  border:1px solid rgba(255,255,255,.14) !important;
  backdrop-filter:blur(18px) saturate(160%) !important;
  -webkit-backdrop-filter:blur(18px) saturate(160%) !important;
  box-shadow:
    0 28px 80px rgba(0,0,0,.60),
    0 0 0 1px rgba(255,255,255,.06) inset,
    0 0 40px rgba(13,202,240,.18) !important;
}

/* ── HEADER premium glass ── */
.header{
  background:
    linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,0));
  backdrop-filter:blur(14px) saturate(150%);
  -webkit-backdrop-filter:blur(14px) saturate(150%);
  border-bottom:1px solid rgba(255,255,255,.09);
  box-shadow:0 12px 40px rgba(0,0,0,.28), 0 0 20px rgba(13,202,240,.06);
}

/* ── TOAST upgrade ── */
.rxtoast{
  border-radius:16px;
  backdrop-filter:blur(14px) saturate(150%);
  box-shadow:0 14px 40px rgba(0,0,0,.50), 0 0 22px rgba(0,200,255,.28);
}

/* ── INPUT focus glow premium ── */
.input:focus,.select:focus,.file:focus{
  box-shadow:
    0 0 0 3px rgba(13,202,240,.22),
    0 0 24px rgba(13,202,240,.16),
    inset 0 0 0 1px rgba(13,202,240,.18);
}

/* ── RxBot bubble upgrade ── */
.rxbotBubble,.rxbot{
  background:
    radial-gradient(100% 60% at 50% 0%, rgba(13,202,240,.07), transparent 60%),
    linear-gradient(180deg, rgba(18,22,28,.92), rgba(18,22,28,.76)) !important;
  backdrop-filter:blur(16px) saturate(150%);
  box-shadow:0 22px 65px rgba(0,0,0,.58), 0 0 32px rgba(13,202,240,.18) !important;
}

/* modal entry animation */
.rxmodal[style*="flex"] .rxmodal__card{
  animation:modalSlideIn .28s cubic-bezier(.22,1,.36,1) forwards;
}
@keyframes modalSlideIn{
  0%{ opacity:0; transform:translateY(14px) scale(.97); }
  100%{ opacity:1; transform:none; }
}

/* pool float entry */
#poolFloat[style*="block"]{
  animation:panelSlideIn .28s cubic-bezier(.22,1,.36,1) forwards;
}
@keyframes panelSlideIn{
  0%{ opacity:0; transform:translateX(12px) scale(.97); }
  100%{ opacity:1; transform:none; }
}

/* ── Accessibility ── */
@media (prefers-reduced-motion:reduce){
  .rxmodal__card, #poolFloat, .rx-badgezoom{ animation:none !important; }
  .rx-badgezoom{ animation:none !important; }
}

/* ── CUSTOM CURSOR ── */
*{ cursor:none !important }
#rx-cursor{ position:fixed; pointer-events:none; z-index:99999; top:0; left:0; will-change:transform; }
#rx-cursor-dot{
  position:absolute; width:8px; height:8px;
  background:#6ceeff; border-radius:50%;
  top:-4px; left:-4px;
  box-shadow:0 0 10px #6ceeff, 0 0 20px rgba(13,202,240,.8);
  transition:transform .1s ease, background .2s ease;
}
#rx-cursor-ring{
  position:absolute; width:32px; height:32px;
  border:1.5px solid rgba(108,238,255,.55); border-radius:50%;
  top:-16px; left:-16px;
  box-shadow:0 0 12px rgba(13,202,240,.25);
  transition:width .2s ease, height .2s ease, top .2s ease, left .2s ease,
             border-color .2s ease, opacity .2s ease;
}
body:has(a:hover) #rx-cursor-ring,
body:has(button:hover) #rx-cursor-ring,
body:has([role=button]:hover) #rx-cursor-ring{
  width:44px; height:44px; top:-22px; left:-22px;
  border-color:rgba(108,238,255,.9);
  box-shadow:0 0 22px rgba(13,202,240,.55);
}
body:has(a:hover) #rx-cursor-dot,
body:has(button:hover) #rx-cursor-dot,
body:has([role=button]:hover) #rx-cursor-dot{
  transform:scale(1.6); background:#fff;
}
.rx-cursor-trail{
  position:fixed; pointer-events:none; z-index:99998;
  width:4px; height:4px; border-radius:50%;
  background:rgba(13,202,240,.55);
  box-shadow:0 0 6px rgba(13,202,240,.75);
  top:0; left:0; will-change:transform, opacity;
}
@keyframes rxClickRipple{
  0%{ width:0; height:0; opacity:.8; }
  100%{ width:70px; height:70px; opacity:0; }
}
@media (pointer:coarse){ #rx-cursor, .rx-cursor-trail{ display:none } *{ cursor:auto !important } }