/* Soradiscounts Modern Theme – mobile-first, smooth UI, CSP-friendly */
:root {
  --sd-radius: 14px;
  --sd-radius-sm: 10px;
  --sd-shadow: 0 10px 30px rgba(0,0,0,.15);
  --sd-shadow-soft: 0 6px 20px rgba(0,0,0,.10);
  --sd-gradient: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 55%, #ec4899 100%);
  --sd-accent: #7c3aed;
  --sd-bg: #0b1220;
  --sd-card: rgba(255,255,255,.04);
  --sd-card-border: rgba(255,255,255,.08);
  --sd-text-weak: rgba(255,255,255,.7);
}

@media (prefers-color-scheme: light) {
  :root {
    --sd-bg: #f6f7fb;
    --sd-card: rgba(255,255,255,.9);
    --sd-card-border: rgba(17,24,39,.06);
    --sd-text-weak: rgba(17,24,39,.7);
  }
}

/* App background */
body {
  background: radial-gradient(1200px 600px at 10% -10%, rgba(59,130,246,.10), transparent 60%),
              radial-gradient(1000px 500px at 110% 10%, rgba(236,72,153,.08), transparent 50%),
              var(--sd-bg);
  background-attachment: fixed;
}

/* Navbar with subtle blur */
.navbar.navbar-expand, .navbar.navbar-expand-lg, .navbar.navbar-expand-md, .navbar {
  backdrop-filter: saturate(180%) blur(10px);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  background-color: rgba(17, 24, 39, .6);
  border-bottom: 1px solid rgba(255,255,255,.06);
}

/* Cards - glass style */
.card {
  border-radius: var(--sd-radius);
  border: 1px solid var(--sd-card-border);
  background: var(--sd-card);
  box-shadow: var(--sd-shadow-soft);
  overflow: hidden;
}
.card .card-header {
  border-bottom: 1px solid var(--sd-card-border);
  background: transparent;
  font-weight: 600;
  letter-spacing: .2px;
}

/* Buttons */
.btn {
  border-radius: calc(var(--sd-radius-sm));
  transition: transform .06s ease, box-shadow .2s ease;
}
.btn:active { transform: translateY(1px) scale(.99); }
.btn-primary {
  background-image: var(--sd-gradient);
  border: none;
  box-shadow: 0 6px 20px rgba(124, 58, 237, .35);
}
.btn-outline-primary {
  border-color: var(--sd-accent);
  color: var(--sd-accent);
}
.btn-outline-primary:hover { background-color: rgba(124,58,237,.08); }
.btn-soft {
  background-color: rgba(124,58,237,.12);
  color: #fff;
}

/* Form fields */
.form-control, .form-select {
  border-radius: var(--sd-radius-sm);
  border: 1px solid var(--sd-card-border);
  background-color: rgba(255,255,255,.06);
  color: inherit;
}
.form-control:focus, .form-select:focus {
  border-color: rgba(124,58,237,.45);
  box-shadow: 0 0 0 .25rem rgba(124,58,237,.20);
}

/* Tables */
.table {
  --tbl-row-hover: rgba(124,58,237,.08);
}
.table thead th {
  text-transform: uppercase;
  font-size: .75rem;
  letter-spacing: .04em;
  border-bottom: 1px solid var(--sd-card-border);
}
.table-hover tbody tr:hover {
  background-color: var(--tbl-row-hover);
}
.table td, .table th { vertical-align: middle; }
.table-responsive { border-radius: var(--sd-radius); }

/* Badges (soft variants) */
.badge-soft {
  background-color: rgba(124,58,237,.16);
  color: #fff;
}
.badge-soft.success { background-color: rgba(16,185,129,.18); }
.badge-soft.warning { background-color: rgba(245,158,11,.2); }
.badge-soft.danger { background-color: rgba(239,68,68,.22); }

/* Hero */
.hero-gradient {
  border-radius: var(--sd-radius);
  background-image: var(--sd-gradient);
  color: #fff;
  padding: 1.25rem;
  box-shadow: var(--sd-shadow);
}
@media (min-width: 768px) {
  .hero-gradient { padding: 2rem; }
}

/* Back to top */
#backToTop {
  position: fixed;
  right: 16px;
  bottom: 20px;
  z-index: 1030;
  display: none;
  border: 0;
  padding: .65rem .8rem;
  border-radius: 999px;
  box-shadow: var(--sd-shadow);
  background-image: var(--sd-gradient);
  color: #fff;
}

/* Focus accessibility */
:focus-visible {
  outline: 2px dashed rgba(124,58,237,.8);
  outline-offset: 2px;
}

/* Reduce motion */
@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

/* Ripple element */
.ripple {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ripple .45s linear;
  background-color: rgba(255,255,255,.35);
  pointer-events: none;
}
@keyframes ripple { to { transform: scale(2.5); opacity: 0; } }
[data-ripple] { position: relative; overflow: hidden; }


/* === Buttons – comprehensive gradient & icon color fix (2025-10-07) =======
   - Forza gradiente su TUTTI gli stati .btn-primary (anche in gruppi/tabelle)
   - Uniforma .btn-outline-primary (hover/active → gradient)
   - Rende bianchi testi e icone dentro i bottoni primari (override text-*)
   - Resetta variabili Bootstrap che reimpostano il blu su hover/active
   ----------------------------------------------------------------------- */

:root{
  --sd-gradient: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 55%, #ec4899 100%);
  --sd-accent: #7c3aed;
}

/* Primary: tutti gli stati, con specificità alta e !important */
.btn.btn-primary,
a.btn.btn-primary,
button.btn.btn-primary,
.table .btn.btn-primary,
.btn-group .btn.btn-primary,
.card .btn.btn-primary {
  background: var(--sd-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 6px 20px rgba(124, 58, 237, .35) !important;
}
.btn.btn-primary:hover,
.btn.btn-primary:focus,
.btn.btn-primary:active,
.btn.btn-primary:disabled,
.btn.btn-primary:active:focus,
.btn-check:checked + .btn.btn-primary,
.btn.btn-primary.show,
.show > .btn.btn-primary.dropdown-toggle,
.table .btn.btn-primary:hover,
.btn-group .btn.btn-primary:hover,
.card .btn.btn-primary:hover {
  background: var(--sd-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 6px 20px rgba(124, 58, 237, .35) !important;
}

/* Normalizza le CSS vars di Bootstrap */
.btn.btn-primary {
  --bs-btn-bg: transparent !important;
  --bs-btn-border-color: transparent !important;
  --bs-btn-hover-bg: transparent !important;
  --bs-btn-hover-border-color: transparent !important;
  --bs-btn-active-bg: transparent !important;
  --bs-btn-active-border-color: transparent !important;
  --bs-btn-disabled-bg: transparent !important;
  --bs-btn-disabled-border-color: transparent !important;
}

/* Outline primary: coerente */
.btn.btn-outline-primary { border-color: var(--sd-accent) !important; color: var(--sd-accent) !important; }
.btn.btn-outline-primary:hover,
.btn.btn-outline-primary:focus,
.btn.btn-outline-primary:active,
.btn-check:checked + .btn.btn-outline-primary {
  background: var(--sd-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 6px 20px rgba(124, 58, 237, .35) !important;
}

/* Icone e testi interni ai bottoni: ereditano bianco */
.btn .bi,
.btn .fa,
.btn [class^="fa-"],
.btn [class*=" fa-"],
.btn svg { color: currentColor !important; fill: currentColor !important; }

/* Se nel markup c'è text-primary (o simili) dentro un bottone, non farlo blu */
.btn.btn-primary .text-primary,
.btn.btn-primary .text-info,
.btn.btn-primary .text-success,
.btn.btn-primary .text-warning,
.btn.btn-primary .text-danger,
.btn.btn-primary .text-secondary,
.btn.btn-primary .text-dark,
.btn.btn-primary .text-muted {
  color: inherit !important;
}

/* Copertura eventuale di .bg-primary applicata al bottone */
.bg-primary.btn, .btn.bg-primary {
  background: var(--sd-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
}

/* === Buttons – enforce gradient for dashboard .btn-large (2025-10-07) === */
/* Tutti i bottoni con .btn-large prendono il gradiente del tema. */
.btn.btn-large,
.btn.btn-large:hover,
.btn.btn-large:focus,
.btn.btn-large:active{
  background: var(--sd-gradient) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 6px 20px rgba(124, 58, 237, .35) !important;
}

/* Icone dentro .btn-large ereditano il colore del testo */
.btn-large .bi,
.btn-large .fa,
.btn-large [class^="fa-"],
.btn-large [class*=" fa-"],
.btn-large svg{ color: currentColor !important; fill: currentColor !important; }
