:root{
  --fg:#eaf0ff; --muted:#9fb0d6;
  --edge:rgba(255,255,255,.12); --edge2:rgba(255,255,255,.10);
  --glass:rgba(18,20,28,.62);
  --panel:rgba(12,14,22,.55);
  --btnGlass:rgba(18,20,28,.62);
  --danger:#ff8fb1;
  --good:#7df0b0;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; color:var(--fg);
  font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Inter,Roboto,"Noto Sans Thai",sans-serif;
  background:#090a0f; overflow-y:scroll;
}

/* Background */
.bg{position:fixed; inset:-22vh -22vw; z-index:-10; background:
  radial-gradient(90vw 80vh at 12% 8%, rgba(255,105,180,.22), transparent 62%),
  radial-gradient(90vw 80vh at 86% 12%, rgba(72,209,204,.20), transparent 65%),
  radial-gradient(120vw 100vh at 50% 102%, rgba(98,160,234,.20), transparent 70%),
  radial-gradient(120vw 100vh at 24% 102%, rgba(255,215,128,.22), transparent 72%),
  linear-gradient(180deg,#07080c,#0b0c12);
}
.bg-aurora{position:fixed; inset:-28% -28%; z-index:-9; pointer-events:none; filter:blur(140px) saturate(185%) brightness(110%); opacity:.42;
  animation:floaty 16s ease-in-out infinite alternate}
.bg-aurora::before{
  content:""; position:absolute; inset:0;
  background:conic-gradient(from 0deg,
    rgba(255,105,180,.85), rgba(72,209,204,.82), rgba(98,160,234,.82),
    rgba(255,215,128,.85), rgba(202,165,255,.85), rgba(255,105,180,.85));
  animation:spin 70s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes floaty{0%{transform:translate3d(0,0,0)}50%{transform:translate3d(2%,-2%,0)}100%{transform:translate3d(0,0,0)}}

.wrap{max-width:1200px; margin:34px auto; padding:0 16px}
.wrap-narrow{max-width:520px; margin:34px auto; padding:0 16px}

/* Brand strip */
.topbar{display:flex; align-items:center; gap:16px; margin-bottom:16px; flex-wrap:wrap;}
.brand{display:flex; align-items:center; gap:14px; min-width:0; flex:0 1 auto}
.logoOrb{
  /* flex:none keeps the orb perfectly circular even when the brand text wraps to multiple lines.
     Without it, flex-shrink:1 lets the orb compress horizontally as the sibling text grows. */
  flex:none;
  width:56px; height:56px; border-radius:50%;
  background:radial-gradient(120% 120% at 30% 30%, rgba(255,255,255,.22), rgba(255,255,255,.06) 46%, rgba(0,0,0,.0) 60%),
             radial-gradient(120% 120% at 70% 70%, rgba(255,255,255,.07), rgba(0,0,0,.0) 60%),
             rgba(18,20,28,.55);
  border:1px solid rgba(255,255,255,.22);
  position:relative; overflow:hidden;
  backdrop-filter:blur(18px) saturate(170%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.10),0 20px 50px rgba(0,0,0,.5),0 0 30px rgba(140,255,208,.18);
}
.logoOrb::after{
  content:""; position:absolute; inset:-30%;
  background:conic-gradient(from 0deg,#6ab7ff,#8cffd0,#ff7bd7,#ffe08a,#caa5ff,#6ab7ff);
  filter:blur(26px) saturate(160%); opacity:.75; animation:spin 18s linear infinite;
}
.logoOrb img{position:relative; z-index:1; width:58%; height:58%; object-fit:contain; display:block; margin:21% auto 0;
  filter:drop-shadow(0 2px 8px rgba(0,0,0,.6)) brightness(1.05);}
.brandText{line-height:1.05}
.title{
  font-weight:1000; font-size:22px; letter-spacing:.2px;
  background:linear-gradient(90deg,#e6f0ff 0%,#d2fff0 30%,#ffd6f1 55%,#ffe9ba 80%,#e6f0ff 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 0 18px rgba(106,183,255,.25), 0 0 28px rgba(255,160,220,.18);
  position:relative; display:inline-block; padding-bottom:6px;
}
.title::after{
  content:""; position:absolute; left:0; right:0; bottom:0; height:3px; border-radius:999px;
  background:linear-gradient(90deg,#6ab7ff,#8cffd0,#ff7bd7,#ffe08a);
  filter:blur(1.2px); opacity:.9;
  box-shadow:0 0 14px rgba(106,183,255,.55), 0 0 20px rgba(255,160,220,.35);
}
.tagline{color:var(--muted); font-size:12px; margin-top:4px}
.gtext{
  font-weight:800;
  background:linear-gradient(90deg,#a6c8ff,#a7ffe6,#ffc3ec,#ffe6a6,#d9b8ff,#a6c8ff);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 0 16px rgba(106,183,255,.25), 0 0 28px rgba(255,160,220,.18);
}
.grow{flex:1 1 auto}

/* Panel */
.panel{
  background:var(--glass); border:1px solid var(--edge); border-radius:18px;
  backdrop-filter:blur(22px) saturate(165%); overflow:hidden;
  box-shadow:0 30px 80px rgba(0,0,0,.55)
}
.panel .panel-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 16px;background:rgba(255,255,255,.06);border-bottom:1px solid var(--edge2);
}
.panel .panel-body{padding:18px}

/* Buttons */
.btn{--mx:50%;--my:50%;
  height:38px; padding:0 16px; border-radius:999px;
  background:var(--btnGlass); color:#eaf0ff;
  border:1px solid rgba(255,255,255,.18);
  display:inline-flex; align-items:center; gap:10px; text-decoration:none; cursor:pointer;
  position:relative; overflow:hidden;
  transition:transform .15s, box-shadow .22s, background .15s, border-color .15s;
  font-weight:800; font-size:13px; white-space:nowrap;
  backdrop-filter:blur(16px) saturate(150%); box-shadow:0 10px 28px rgba(0,0,0,.45)
}
.btn::before{content:"";position:absolute;inset:-1px;border-radius:inherit;z-index:-1;background:
  radial-gradient(220px 220px at var(--mx) var(--my), rgba(255,255,255,.85), rgba(255,255,255,.18) 36%, transparent 60%);mix-blend-mode:screen;opacity:.2;transition:opacity .2s}
.btn::after{content:"";position:absolute;inset:-18px;border-radius:inherit;z-index:-2;background:
  radial-gradient(260px 260px at var(--mx) var(--my),
    #6ab7ff 0%, #8cffd0 35%, #ff7bd7 55%, #ffe08a 75%, transparent 80%);
  filter:blur(22px); opacity:.0; transition:opacity .18s}
.btn:hover{transform:translateY(-2px);border-color:rgba(255,255,255,.35);background:rgba(18,20,28,.78);
  box-shadow:0 0 18px rgba(106,183,255,.38), 0 0 34px rgba(255,160,220,.28), inset 0 0 0 1px rgba(255,255,255,.85)}
.btn:hover::before{opacity:.8; animation:glowPulse 2.2s ease-in-out infinite}
.btn:hover::after{opacity:.98; animation:glowPulse 2.8s ease-in-out infinite, hueCycle 14s linear infinite}
.btn-primary{background:linear-gradient(135deg,rgba(106,183,255,.28),rgba(140,255,208,.22))}
.btn-danger{background:linear-gradient(135deg,rgba(255,140,180,.22),rgba(255,180,140,.20))}
.btn-sm{height:30px; padding:0 12px; font-size:12px}
@keyframes glowPulse{0%{opacity:.35; transform:scale(1)}50%{opacity:1; transform:scale(1.06)}100%{opacity:.35; transform:scale(1)}}
@keyframes hueCycle{0%{filter:blur(22px) hue-rotate(0deg)}100%{filter:blur(22px) hue-rotate(360deg)}}

/* Forms */
.field{display:flex; flex-direction:column; gap:6px; margin-bottom:14px}
.field label{font-size:12px; font-weight:800; letter-spacing:.3px; color:var(--muted); text-transform:uppercase}
.field input[type=text],
.field input[type=email],
.field input[type=password],
.field input[type=file],
.field textarea,
.field select{
  height:42px; border-radius:12px; border:1px solid var(--edge);
  background:rgba(255,255,255,.04); color:var(--fg); padding:0 12px;
  font-size:14px; font-family:inherit; outline:none;
  transition:border-color .15s, background .15s, box-shadow .15s;
}
.field input[type=file]{padding:6px 12px; line-height:30px; cursor:pointer; font-size:13px}
.field textarea{height:auto; min-height:72px; padding:10px 12px; resize:vertical}
.field input:focus, .field textarea:focus, .field select:focus{
  border-color:rgba(140,255,208,.55);
  background:rgba(255,255,255,.07);
  box-shadow:0 0 0 3px rgba(140,255,208,.10);
}
.field .hint{color:var(--muted); font-size:11px}
.field-row{display:flex; gap:14px; align-items:center}
.field-row > .field{flex:1}

/* ---- Native file picker (the "Choose File" pill) ---- */
.field input[type=file]::file-selector-button,
.field input[type=file]::-webkit-file-upload-button{
  margin-right:14px;
  height:30px; padding:0 16px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.20);
  background:linear-gradient(135deg, rgba(106,183,255,.30), rgba(140,255,208,.26));
  color:var(--fg);
  font-weight:800; font-size:12px; letter-spacing:.3px;
  cursor:pointer;
  transition:filter .15s, transform .1s, box-shadow .15s;
  box-shadow:0 4px 12px rgba(0,0,0,.35);
}
.field input[type=file]::file-selector-button:hover,
.field input[type=file]::-webkit-file-upload-button:hover{
  filter:brightness(1.15);
  box-shadow:0 6px 18px rgba(106,183,255,.35), 0 0 12px rgba(140,255,208,.25);
}
.field input[type=file]::file-selector-button:active,
.field input[type=file]::-webkit-file-upload-button:active{ transform:translateY(1px) }

/* ---- Native <select> with custom chevron ---- */
.field select{
  appearance:none; -webkit-appearance:none; -moz-appearance:none;
  cursor:pointer;
  padding-right:38px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='rgb(159,176,214)' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat:no-repeat;
  background-position:right 14px center;
}
.field select:hover{ border-color:rgba(140,255,208,.35); background-color:rgba(255,255,255,.06) }
.field select option{
  background:#0c0e16;
  color:var(--fg);
  padding:8px;
}

/* ---- Fancy drop-zone wrapper (for prominent file inputs like the dashboard upload) ---- */
.file-drop{
  position:relative;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
  min-height:140px; padding:24px 16px;
  border:2px dashed rgba(255,255,255,.20);
  border-radius:14px;
  background:rgba(255,255,255,.02);
  text-align:center;
  cursor:pointer;
  transition:border-color .2s, background .2s, transform .15s;
}
.file-drop:hover{
  border-color:rgba(140,255,208,.50);
  background:rgba(140,255,208,.04);
}
.file-drop.drag{
  border-color:#8cffd0;
  background:rgba(140,255,208,.10);
  transform:scale(1.005);
}
.file-drop input[type=file]{
  position:absolute; inset:0; width:100%; height:100%;
  opacity:0; cursor:pointer;
}
.file-drop .icon{
  width:44px; height:44px; opacity:.85;
  background:linear-gradient(135deg,#6ab7ff,#8cffd0,#ff7bd7,#ffe08a);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><path d='M12 15V3'/><path d='m7 8 5-5 5 5'/><path d='M5 21h14a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2Z'/></svg>") center/contain no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><path d='M12 15V3'/><path d='m7 8 5-5 5 5'/><path d='M5 21h14a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2Z'/></svg>") center/contain no-repeat;
}
.file-drop .title{font-weight:800; font-size:14px}
.file-drop .meta{font-size:12px; color:var(--muted)}
.file-drop .meta.selected{color:#8cffd0; font-weight:700}

.checkfield{display:flex; align-items:center; gap:10px; padding:10px 12px; border:1px solid var(--edge); border-radius:12px; background:rgba(255,255,255,.04); cursor:pointer}
.checkfield input{width:18px; height:18px; accent-color:#8cffd0}
.checkfield .label{font-weight:700; font-size:13px}
.checkfield .desc{font-size:11px; color:var(--muted)}

.form-msg{margin-bottom:12px; min-height:20px; font-weight:700;
  word-break:break-word; overflow-wrap:break-word; max-width:100%}
.form-msg.error{color:var(--danger)}
.form-msg.ok{color:var(--good)}

.actions{display:flex; gap:10px; flex-wrap:wrap}
.actions-end{justify-content:flex-end}

a.link{color:#8cffd0; text-decoration:none; font-weight:700}
a.link:hover{text-decoration:underline}

/* Nav */
.nav{display:flex; gap:10px; flex-wrap:wrap; align-items:center}
.nav .username{padding:0 14px; height:38px; display:inline-flex; align-items:center;
  border-radius:999px; border:1px solid var(--edge); background:var(--btnGlass); font-weight:800; font-size:13px;
  backdrop-filter:blur(16px) saturate(150%);}
.nav .username .badge{background:linear-gradient(135deg,#6ab7ff,#8cffd0); color:#061022; font-size:10px; padding:2px 8px; border-radius:999px; margin-left:8px; font-weight:900}

/* ================= Mobile responsive ================= */
@media (max-width: 700px){
  .wrap{margin:18px auto}
  .wrap-narrow{margin:18px auto}
  .topbar{gap:10px}
  .topbar .brand{min-width:0; flex:1 1 auto}
  .topbar .title{font-size:18px}
  .topbar .logoOrb{width:44px; height:44px}
}
@media (max-width: 600px){
  .field-row{flex-direction:column; align-items:stretch; gap:10px}
  .field-row > .field{flex:1 1 auto; min-width:0}
  .nav{width:100%; gap:8px}
  .nav .btn{height:34px; padding:0 12px; font-size:12px}
  .nav .username{height:34px; padding:0 12px; font-size:12px}
  .panel .panel-head{padding:12px 14px}
  .panel .panel-body{padding:14px}
  .actions{gap:8px}
  .btn{height:36px; padding:0 14px; font-size:12px}
  .btn-sm{height:30px; padding:0 10px}
  /* Drop zone tightens up so it doesn't dominate the viewport */
  .file-drop{min-height:120px; padding:18px 12px}
  .file-drop .icon{width:36px; height:36px}
  .file-drop .title{font-size:13px}
}
@media (max-width: 380px){
  .topbar{margin-bottom:12px}
  .topbar .title{font-size:16px}
  .topbar .tagline{display:none}
  .topbar .logoOrb{width:38px; height:38px}
}

/* ================= Inline media viewer (download.ashx ShowViewerPage) ================= */
.viewer-area{
  height:80vh; min-height:320px;
  display:flex; align-items:center; justify-content:center;
  overflow:auto;
  background:var(--panel);
}
.viewer-area > *{ max-width:100%; max-height:100%; display:block; margin:auto }
.viewer-area iframe{ border:0; width:100%; height:100%; flex:1 1 auto }
.viewer-area img{ object-fit:contain; background:transparent }
.viewer-area audio{ width:100%; max-width:720px; margin:auto }
.viewer-area video{ max-height:100%; background:transparent; margin:auto }
@media (max-width:700px){ .viewer-area{ height:65vh; min-height:280px } }
@media (max-width:560px){ .viewer-area{ height:55vh; min-height:240px } }
@media (max-width:380px){ .viewer-area{ height:50vh; min-height:200px } }

/* ================= Custom modal (uiAlert / uiConfirm / uiPrompt) ================= */
.ui-modal{
  position:fixed; inset:0; z-index:2000;
  display:none; align-items:center; justify-content:center;
  padding:18px;
  background:rgba(2,4,10,.55);
  backdrop-filter:blur(6px) saturate(120%);
  opacity:0; transition:opacity .18s;
}
.ui-modal.show{display:flex; opacity:1}
.ui-modal-card{
  width:min(460px, calc(100vw - 36px));
  max-height:calc(100vh - 36px);
  display:flex; flex-direction:column;
  border-radius:18px; border:1px solid var(--edge);
  background:var(--glass);
  backdrop-filter:blur(22px) saturate(165%);
  box-shadow:0 30px 80px rgba(0,0,0,.6);
  transform:translateY(8px) scale(.98); opacity:0;
  transition:transform .22s cubic-bezier(.2,.7,.2,1), opacity .18s;
  overflow:hidden;
}
.ui-modal.show .ui-modal-card{ transform:translateY(0) scale(1); opacity:1 }
.ui-modal-head{
  padding:14px 18px; border-bottom:1px solid var(--edge2);
  background:rgba(255,255,255,.05);
}
.ui-modal-title{
  font-weight:900; font-size:16px;
  background:linear-gradient(90deg,#a6c8ff,#a7ffe6,#ffc3ec,#ffe6a6,#d9b8ff,#a6c8ff);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 0 16px rgba(106,183,255,.25), 0 0 28px rgba(255,160,220,.18);
}
.ui-modal-body{ padding:16px 18px; overflow:auto }
.ui-modal-msg{ color:var(--fg); font-size:14px; line-height:1.5; margin-bottom:12px;
  white-space:pre-wrap; word-break:break-word; overflow-wrap:break-word; max-width:100% }
.ui-modal-input{
  width:100%; height:42px; border-radius:12px;
  border:1px solid var(--edge);
  background:rgba(255,255,255,.04); color:var(--fg);
  padding:0 12px; font-size:14px; font-family:inherit; outline:none;
  transition:border-color .15s, background .15s, box-shadow .15s;
}
.ui-modal-input:focus{
  border-color:rgba(140,255,208,.55);
  background:rgba(255,255,255,.07);
  box-shadow:0 0 0 3px rgba(140,255,208,.10);
}
.ui-modal-foot{
  display:flex; gap:8px; justify-content:flex-end; flex-wrap:wrap;
  padding:12px 18px;
  border-top:1px solid var(--edge2);
  background:rgba(0,0,0,.18);
}
@media (max-width:480px){
  .ui-modal-card{ width:100% }
  .ui-modal-foot{ justify-content:stretch }
  .ui-modal-foot .btn{ flex:1 }
}

/* ================= Pre-upload queue (selected but not yet uploaded) ================= */
.queue-list{display:flex; flex-direction:column; gap:6px; margin:10px 0}
.queue-list:empty{display:none}
.queue-row{
  display:flex; align-items:center; gap:10px;
  padding:8px 12px; border:1px solid var(--edge); border-radius:10px;
  background:rgba(255,255,255,.03); font-size:13px;
}
.queue-row .qname{flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-weight:700}
.queue-row .qsize{color:var(--muted); font-size:12px; white-space:nowrap}
.queue-row .qremove{
  width:28px; height:28px; border-radius:50%; flex:none;
  border:1px solid var(--edge); background:rgba(255,255,255,.05);
  color:var(--muted); font-size:16px; cursor:pointer; padding:0;
  display:inline-flex; align-items:center; justify-content:center;
  transition:color .15s, border-color .15s, background .15s;
}
.queue-row .qremove:hover{ color:var(--danger); border-color:var(--danger); background:rgba(255,143,177,.08) }
.queue-summary{display:flex; align-items:center; justify-content:space-between; gap:10px; font-size:12px; color:var(--muted); margin-top:6px}
.queue-summary .clearall{
  background:transparent; border:1px solid var(--edge); border-radius:999px;
  padding:4px 12px; color:var(--muted); font-weight:700; font-size:12px; cursor:pointer;
  transition:color .15s, border-color .15s;
}
.queue-summary .clearall:hover{ color:var(--danger); border-color:var(--danger) }

/* ================= Upload-in-progress banner ================= */
.upload-warning{
  display:flex; align-items:center; gap:10px;
  padding:10px 14px; margin-top:10px;
  background:linear-gradient(135deg, rgba(255,180,140,.12), rgba(255,140,180,.10));
  border:1px solid rgba(255,180,140,.40);
  border-radius:12px;
  color:#ffd29e; font-size:13px; font-weight:700;
  animation:warnPulse 2.5s ease-in-out infinite;
}
.upload-warning .warn-icon{
  width:22px; height:22px; flex:none;
  background:#ffd29e;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'><path d='M12 2L1 21h22L12 2zm0 4.94L19.53 19H4.47L12 6.94zM11 10v5h2v-5h-2zm0 6v2h2v-2h-2z'/></svg>") center/contain no-repeat;
          mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'><path d='M12 2L1 21h22L12 2zm0 4.94L19.53 19H4.47L12 6.94zM11 10v5h2v-5h-2zm0 6v2h2v-2h-2z'/></svg>") center/contain no-repeat;
}
@keyframes warnPulse{
  0%, 100%{ box-shadow:0 0 0 0 rgba(255,180,140,.30) }
  50%{ box-shadow:0 0 0 6px rgba(255,180,140,0) }
}

/* ================= Row checkboxes + bulk action bar ================= */
.row-check, .row-check-all{
  width:18px; height:18px; flex:none; cursor:pointer;
  accent-color:#8cffd0;
  border-radius:4px;
}
@media (pointer:coarse){
  /* Bigger touch targets on mobile */
  .row-check, .row-check-all{ width:22px; height:22px }
}
.fname > .row-check{ margin-right:2px }
/* Make the filename area a click target for toggling the row's checkbox
   (the JS listener does the actual toggling — these styles just hint it's tappable). */
.fname{ cursor:pointer; touch-action:manipulation; user-select:none }
.fhead .fname, .fhead > div:first-child{ cursor:default; user-select:auto }

.bulk-bar{
  position:sticky; bottom:14px; z-index:30;
  display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap;
  padding:12px 16px; margin:14px 16px 4px;
  background:rgba(18,20,28,.88);
  backdrop-filter:blur(22px) saturate(165%);
  border:1px solid rgba(140,255,208,.35);
  border-radius:14px;
  box-shadow:0 12px 36px rgba(0,0,0,.55), 0 0 18px rgba(140,255,208,.15);
  transform:translateY(8px); opacity:0;
  transition:transform .22s cubic-bezier(.2,.7,.2,1), opacity .18s;
  pointer-events:none;
}
.bulk-bar.show{ transform:translateY(0); opacity:1; pointer-events:auto }
.bulk-bar .bulk-info{display:flex; align-items:center; gap:10px}
.bulk-bar .bulk-count{
  font-weight:900; font-size:14px;
  background:linear-gradient(135deg,#6ab7ff,#8cffd0); color:#061022;
  padding:4px 12px; border-radius:999px;
}
.bulk-bar .bulk-clear{
  background:transparent; border:1px solid var(--edge); border-radius:999px;
  color:var(--muted); font-size:12px; font-weight:700;
  padding:4px 12px; cursor:pointer;
  transition:color .15s, border-color .15s;
}
.bulk-bar .bulk-clear:hover{ color:var(--fg); border-color:rgba(255,255,255,.40) }
.bulk-bar .bulk-actions{ display:flex; gap:8px; flex-wrap:wrap }

@media (max-width:560px){
  .bulk-bar{ margin:14px 8px 4px; padding:10px 12px; bottom:8px }
  .bulk-bar .bulk-actions .btn{ height:32px; padding:0 12px; font-size:12px }
}

/* ================= Upload progress list (dashboard) ================= */
.upload-list{display:flex; flex-direction:column; gap:8px; margin-top:10px}
.upload-list:empty{display:none}
.upload-row{
  display:grid;
  grid-template-columns: minmax(0,1fr) auto;
  gap:6px 12px;
  padding:10px 14px;
  border:1px solid var(--edge); border-radius:12px;
  background:rgba(255,255,255,.03);
  font-size:13px;
}
.upload-row.done{ border-color:rgba(125,240,176,.45); background:rgba(125,240,176,.06) }
.upload-row.error{ border-color:rgba(255,143,177,.5); background:rgba(255,143,177,.06) }
.upload-row .name{ font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0 }
.upload-row .meta{ font-size:11px; color:var(--muted); text-align:right; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; max-width:55%; min-width:0 }
.upload-row .bar{ grid-column:1 / -1; height:6px; background:rgba(255,255,255,.06); border-radius:999px; overflow:hidden; border:1px solid var(--edge) }
.upload-row .bar > span{ display:block; height:100%; width:0%; background:linear-gradient(90deg,#6ab7ff,#8cffd0,#ff7bd7,#ffe08a); transition:width .25s }
.upload-row.done .bar > span{ width:100% !important; background:linear-gradient(90deg,#7df0b0,#8cffd0) }
.upload-row.error .bar > span{ background:linear-gradient(90deg,#ff8fb1,#ff5577) }
.upload-row .status{ font-size:11px; font-weight:800 }
.upload-row.done .status{ color:#7df0b0 }
.upload-row.error .status{ color:#ff8fb1 }
