/* Admin_web – app.css
   Stile moderno ispirato a Sellpass: gradienti, pannelli glass, micro-animazioni e sfondi responsive con fallback JPG. */

/* 1) Font + reset tipografico */
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300..800&display=swap");

:root{
  --aw-radius:16px;
  --aw-blur:14px;
  --aw-card-bg: rgba(255,255,255,.6);
  --aw-card-border: rgba(255,255,255,.35);
  --aw-card-shadow: 0 15px 40px rgba(0,0,0,.12);
  --aw-grid-color: rgba(0,0,0,.06);
  --aw-accent: var(--bs-primary);
}

@media (prefers-color-scheme: dark){
  :root{
    --aw-card-bg: rgba(20,20,24,.45);
    --aw-card-border: rgba(255,255,255,.08);
    --aw-card-shadow: 0 20px 50px rgba(0,0,0,.5);
    --aw-grid-color: rgba(255,255,255,.06);
  }
}

html, body{ font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; text-rendering: optimizeLegibility; }

/* 2) Sfondo scenico per le pagine di autenticazione (login/register/forgot)
      - Fallback JPG per massima compatibilità mobile
      - AVIF 1x/2x se supportato via image-set
      - Niente background-attachment: fixed su mobile (bug iOS) */
body.aw-auth{
  min-height: 100vh;
  overflow-x: hidden;
  position: relative;

  /* Fallback JPG (mobile) */
  background-image:
    radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
    radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
    url('/static/img/login/bg-mobile.jpg');
  background-size: auto, auto, cover;
  background-position: center, center, 50% 50%;
  background-repeat: no-repeat;
  background-attachment: scroll, scroll, scroll; /* mobile: evita bug iOS */
  background-color: var(--bs-body-bg);
}

/* AVIF (mobile) – Safari/WebKit */
@supports (background: -webkit-image-set(url('x') 1x)){
  body.aw-auth{
    background-image:
      radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
      radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
      -webkit-image-set(
        url('/static/img/login/bg-mobile.avif') 1x,
        url('/static/img/login/bg-mobile@2x.avif') 2x
      );
  }
}
/* AVIF (mobile) – standard */
@supports (background: image-set(url('x') 1x)){
  body.aw-auth{
    background-image:
      radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
      radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
      image-set(
        url('/static/img/login/bg-mobile.avif') 1x,
        url('/static/img/login/bg-mobile@2x.avif') 2x
      );
  }
}

/* Desktop: JPG fallback + background-attachment: fixed */
@media (min-width: 992px){
  body.aw-auth{
    background-image:
      radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
      radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
      url('/static/img/login/bg-desktop.jpg');
    background-attachment: fixed, fixed, fixed; /* desktop ok */
  }
  /* Desktop AVIF – Safari/WebKit */
  @supports (background: -webkit-image-set(url('x') 1x)){
    body.aw-auth{
      background-image:
        radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
        radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
        -webkit-image-set(
          url('/static/img/login/bg-desktop.avif') 1x,
          url('/static/img/login/bg-desktop@2x.avif') 2x
        );
    }
  }
  /* Desktop AVIF – standard */
  @supports (background: image-set(url('x') 1x)){
    body.aw-auth{
      background-image:
        radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
        radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%),
        image-set(
          url('/static/img/login/bg-desktop.avif') 1x,
          url('/static/img/login/bg-desktop@2x.avif') 2x
        );
    }
  }
}

/* --- TOGGLE GLOBALE: disattiva la foto di sfondo quando il <body> ha la classe `no-img` --- */
.no-img .aw-auth-bg{ display:none !important; }
.no-img.aw-auth{
  background-image:
    radial-gradient(1200px 800px at -10% -20%, color-mix(in oklab, var(--aw-accent) 30%, transparent), transparent 70%),
    radial-gradient(1000px 700px at 110% 120%, color-mix(in oklab, var(--aw-accent) 40%, transparent), transparent 70%) !important;
  background-size: auto, auto !important;
  background-position: center, center !important;
  background-repeat: no-repeat !important;
  background-attachment: scroll, scroll !important;
}

/* Reticolo soft */
body.aw-auth::before{
  content:""; position: fixed; inset: -10%; pointer-events:none; z-index: -1;
  background:
    linear-gradient(transparent 95%, var(--aw-grid-color) 95%),
    linear-gradient(90deg, transparent 95%, var(--aw-grid-color) 95%);
  background-size: 30px 30px, 30px 30px;
  mask-image: radial-gradient(1000px 1000px at 50% 50%, black, transparent 75%);
}

/* Overlay leggibilità + noise */
body.aw-auth::after{
  content:""; position: fixed; inset: -10%; pointer-events:none; z-index: -1;
  background-image:
    linear-gradient(rgba(0,0,0,.04), rgba(0,0,0,.08)),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E");
  background-size: auto, 600px 600px; opacity:.9;
}
@media (prefers-color-scheme: dark){
  body.aw-auth::after{ background-image:
    linear-gradient(rgba(0,0,0,.25), rgba(0,0,0,.35)),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E"); }
}

/* 3) Pannelli "glass" riusabili */
.aw-panel{ background: var(--aw-card-bg); border: 1px solid var(--aw-card-border); border-radius: var(--aw-radius); backdrop-filter: blur(var(--aw-blur)) saturate(1.15); -webkit-backdrop-filter: blur(var(--aw-blur)) saturate(1.15); box-shadow: var(--aw-card-shadow); }
.aw-panel.hover{ transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease; }
.aw-panel.hover:hover{ transform: translateY(-3px); box-shadow: 0 25px 60px rgba(0,0,0,.18); border-color: color-mix(in oklab, var(--aw-accent) 35%, var(--aw-card-border)); }

/* 4) Bottoni pieni e "pill" */
.btn-pill{ border-radius: 999px; }
.btn-gradient{ --g1: color-mix(in oklab, var(--aw-accent) 85%, white 10%); --g2: color-mix(in oklab, var(--aw-accent) 65%, black 10%); background-image: linear-gradient(135deg, var(--g1), var(--g2)); color: #fff; border: none; box-shadow: 0 8px 25px rgba(0,0,0,.18); }
.btn-gradient:hover{ filter: brightness(1.03); }
.btn-gradient:active{ transform: translateY(1px); }

/* 4b) Bottoni ghost (trasparenti) */
.btn-ghost{ background: transparent; color: inherit; border: 1px solid rgba(0,0,0,.12); border-radius: 12px; }
@media (prefers-color-scheme: dark){ .btn-ghost{ border-color: rgba(255,255,255,.18); } }
.btn-ghost:hover{ background: color-mix(in oklab, var(--aw-accent) 12%, transparent); border-color: color-mix(in oklab, var(--aw-accent) 35%, transparent); }
.btn-ghost:focus{ box-shadow: 0 0 0 .2rem color-mix(in oklab, var(--aw-accent) 25%, transparent); }
.btn-ghost:active{ transform: translateY(1px); }

/* 4c) Bottoni icon-only riutilizzabili */
.btn-icon{ width: 2.5rem; height: 2.5rem; padding: .5rem; display: inline-flex; align-items: center; justify-content: center; line-height: 1; }
.btn-icon svg{ display:block; }

/* Rifiniture per il gruppo password */
.input-password-group .form-control{ border-top-right-radius: 0; border-bottom-right-radius: 0; }
.input-password-group .form-control + .btn-ghost{ border-top-left-radius: 0; border-bottom-left-radius: 0; border-left: 0; }

/* 5) Input */
.form-control, .form-select{ border-radius: 12px; border-color: rgba(0,0,0,.08); }
.form-control:focus, .form-select:focus{ border-color: color-mix(in oklab, var(--aw-accent) 60%, #000 0%); box-shadow: 0 0 0 .25rem color-mix(in oklab, var(--aw-accent) 25%, transparent); }

/* 6) Badge soft */
.badge-soft{ background: color-mix(in oklab, var(--aw-accent) 15%, transparent); color: var(--aw-accent); border: 1px solid color-mix(in oklab, var(--aw-accent) 25%, transparent); border-radius: 999px; }

/* 7) Utilità */
.shadow-xxl{ box-shadow: 0 40px 100px rgba(0,0,0,.25)!important; }
.text-gradient{ background: linear-gradient(90deg, color-mix(in oklab, var(--aw-accent) 90%, white 0%), color-mix(in oklab, var(--aw-accent) 50%, black 10%)); -webkit-background-clip:text; background-clip:text; color: transparent; }

/* 8) Layout Auth split */
.auth-wrap{ min-height: calc(100vh - 32px); display: grid; grid-template-columns: 1fr; gap: 24px; padding: clamp(16px, 5vw, 28px); }
@media (min-width: 992px){ .auth-wrap{ grid-template-columns: 1.1fr .9fr; align-items: center; } }
.auth-visual{ position: relative; padding: clamp(20px, 5vw, 40px); }
.auth-visual .orb{ position: absolute; filter: blur(30px); opacity: .8; transform: translateZ(0); }
.auth-visual .orb.one{ width: 260px; height: 260px; top: 6%; left: 6%; background: radial-gradient(circle at 30% 30%, color-mix(in oklab, var(--aw-accent) 80%, white 10%), transparent 60%); }
.auth-visual .orb.two{ width: 340px; height: 340px; bottom: -5%; right: 0; background: radial-gradient(circle at 60% 60%, color-mix(in oklab, var(--aw-accent) 60%, black 5%), transparent 60%); }
.auth-visual .frame{ position: relative; border-radius: 24px; aspect-ratio: 16/11; overflow: hidden; border: 1px solid var(--aw-card-border); background:
  radial-gradient(400px 160px at 20% 10%, color-mix(in oklab, var(--aw-accent) 25%, transparent), transparent 70%),
  radial-gradient(500px 220px at 90% 90%, color-mix(in oklab, var(--aw-accent) 25%, transparent), transparent 70%),
  linear-gradient(180deg, rgba(255,255,255,.35), rgba(255,255,255,0)); }
@media (prefers-color-scheme: dark){ .auth-visual .frame{ background:
  radial-gradient(400px 160px at 20% 10%, color-mix(in oklab, var(--aw-accent) 35%, transparent), transparent 70%),
  radial-gradient(500px 220px at 90% 90%, color-mix(in oklab, var(--aw-accent) 35%, transparent), transparent 70%),
  linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,0)); } }
.auth-visual .frame::after{ content:""; position:absolute; inset:0; background-image:
  linear-gradient(transparent 0, transparent 96%, rgba(255,255,255,.25) 96%),
  linear-gradient(90deg, transparent 0, transparent 96%, rgba(255,255,255,.25) 96%);
  background-size: 28px 28px, 28px 28px; mix-blend-mode: overlay; opacity:.35; }

/* 9) Piccoli ritocchi navbar/sidebar quando in aw-auth */
body.aw-auth .navbar, body.aw-auth .sidebar{ background: transparent !important; border-color: transparent !important; box-shadow: none !important; }

/* --- Mobile & viewport adjustments per login --- */
@media (max-width: 991.98px){ .auth-wrap{ grid-template-columns: 1fr; align-content: center; } .auth-visual{ padding: 8px 0 0; } .auth-visual .frame{ aspect-ratio: 16/9; margin: 0 0 12px 0; } .auth-visual .orb{ display: none; } .aw-panel[style*="max-width: 520px"]{ max-width: 560px !important; } }
@media (max-width: 575.98px){ .auth-wrap{ padding: 16px; } }

/* --- Varianti layout login (swap pannelli) – FIX via 'order' --- */
/* Disattiva l'uso delle aree (che può confliggere) */
.auth-wrap,
.auth-wrap.auth-wrap--swap { grid-template-areas: none !important; }
.auth-visual, .auth-form { grid-area: auto !important; }

/* Ordine di default: visual a sinistra (o sopra su mobile), form a destra (o sotto) */
.auth-visual { order: 0; }
.auth-form   { order: 1; }

/* Con la classe swap inverti l'ordine */
.auth-wrap.auth-wrap--swap .auth-visual { order: 1; }
.auth-wrap.auth-wrap--swap .auth-form   { order: 0; }

/* --- Auth layout: variabili per colonne e offset --- */
.auth-wrap{
  /* default: pannello sinistro più largo */
  --cols-L: 1.30fr;
  --cols-R: 0.70fr;
  --visual-x: 0px; --visual-y: 0px;
  --form-x:   0px; --form-y:   0px;
  overflow: visible;
}
@media (min-width: 992px){
  .auth-wrap{ grid-template-columns: var(--cols-L) var(--cols-R); }
}
.auth-visual{ transform: translate(var(--visual-x), var(--visual-y)); will-change: transform; }
.auth-form  { transform: translate(var(--form-x),   var(--form-y));   will-change: transform; }

/* Evita offset su mobile */
@media (max-width: 991.98px){
  .auth-wrap{ --visual-x: 0; --visual-y: 0; --form-x: 0; --form-y: 0; }
}

/* --- Ridimensionamento colonne con divisore --- */
.auth-wrap{ }
.auth-resizer{ display: none; }

@media (min-width: 992px){
  /* 3 colonne: sinistra | resizer | destra */
  .auth-wrap{ --resizer-w: 12px; grid-template-columns: var(--cols-L) var(--resizer-w) var(--cols-R); }
  .auth-visual{ grid-column: 1; }
  .auth-form  { grid-column: 3; }
  .auth-wrap.auth-wrap--swap .auth-visual{ grid-column: 3; }
  .auth-wrap.auth-wrap--swap .auth-form  { grid-column: 1; }

  .auth-resizer{
    display: block;
    grid-column: 2;
    cursor: col-resize;
    position: relative;
    user-select: none;
    touch-action: none;
  }
  .auth-resizer::before{
    content:"";
    position: absolute; left: 50%; top: 18%; bottom: 18%;
    width: 2px; transform: translateX(-50%);
    background: var(--bs-border-color);
    opacity: .6;
  }
  .auth-resizer::after{
    content:"";
    position: absolute; left: calc(50% - 6px); top: 50%;
    width: 12px; height: 28px; transform: translateY(-50%);
    border-radius: 6px;
    background: color-mix(in oklab, var(--aw-accent) 20%, transparent);
    opacity: .5;
  }

  /* Applica max-width variabile al pannello form */
  .auth-form > .aw-panel[style*="max-width"]{ max-width: var(--form-max) !important; }
}

/* --- Debug --- */
/* body.aw-auth{ outline: 2px dashed red; } */
.auth-wrap{
  --visual-h: 480px;
  --form-h: auto;
}
@media (min-width: 992px){
  .auth-visual .frame{
    height: var(--visual-h);
    max-height: var(--visual-h);
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .auth-form > .aw-panel[style*="max-width"]{
    min-height: var(--form-h);
  }
}
@media (max-width: 991.98px){
  /* Ignora altezze personalizzate su mobile */
  .auth-visual .frame{ height:auto !important; max-height:none !important; }
  .auth-form > .aw-panel{ min-height: auto !important; }
}

/* === HANDLE RESIZE LAYOUT MODE === */
.layout-mode .resize-h,
.layout-mode .resize-w,
.layout-mode #authResizer{ display:block; }

.resize-h{
  position:absolute;
  left:50%;
  bottom:-6px;
  width:64px;
  height:12px;
  transform:translateX(-50%);
  cursor:ns-resize;
  border-radius:6px;
  background:linear-gradient(135deg,rgba(0,0,0,.25),rgba(0,0,0,.05));
  backdrop-filter:blur(4px);
  box-shadow:0 2px 6px rgba(0,0,0,.25);
  opacity:.65;
  z-index:30;
}
.resize-h:hover{ opacity:1; }

.resize-w{
  position:absolute;
  top:0;
  width:10px;
  height:100%;
  cursor:col-resize;
  z-index:40;
  opacity:0;
  transition:opacity .15s;
}
.layout-mode .resize-w:hover{ opacity:1; }

.resize-w--visual{ right:-5px; }
.resize-w--form{ left:-5px; }

#authResizer{
  cursor:col-resize;
  width:12px;
  background:transparent;
  position:relative;
  z-index:25;
}
@media (min-width:992px){
  }

/* Altezza applicata ai pannelli quando settata */
@media (min-width:992px){
  .auth-visual .frame{
    height:var(--visual-h,480px);
    max-height:var(--visual-h,480px);
  }
  .auth-form > .aw-panel[style*="max-width"]{
    min-height:var(--form-h,auto);
  }
}

/* === Fix layout login desktop: disattiva le areas e forza 3 colonne reali === */
@media (min-width: 992px){
  /* Disattiva le grid-areas a 2 colonne */
  .auth-wrap{ grid-template-areas: none !important; }

  /* Crea davvero 3 colonne: sinistra | resizer | destra (con minimi) */
  .auth-wrap{
    --resizer-w: 12px;
    grid-template-columns:
      minmax(520px, var(--cols-L))   /* sinistra: almeno 520px */
      var(--resizer-w)               /* maniglia */
      minmax(560px, var(--cols-R))   /* destra: almeno 560px */
      !important;
  }
  /* Posizioni */
  .auth-visual{ grid-column: 1 !important; }
  .auth-form  { grid-column: 3 !important; }

  /* Pannello form: piena colonna ma con max variabile */
  .auth-form > .aw-panel{
    width: 100%;
    max-width: var(--form-max, 640px);
  }
}

/* === Layout editor: mostra altezza reale del riquadro visuale === */
.layout-mode .auth-visual .frame{ aspect-ratio:auto; }

/* Login layout fisso */
@media (min-width:992px){
  #authWrap{
    --cols-L:1.1fr;
    --cols-R:0.9fr;
    --visual-x:-469px; --visual-y:-216px;
    --form-x:-12px;   --form-y:-204px;
    --form-max:640px;
    --visual-h:480px;
    --form-h:520px;
  }
}

/* Nascondi SEMPRE le maniglie e il resizer.. */
.resize-h, .resize-w, #authResizer { display: none; }

/* ..e mostralI SOLO nell'editor /login?layout=1 */
.layout-mode .resize-h,
.layout-mode .resize-w,
.layout-mode #authResizer { display: block; }

/* Piccola protezione contro overflow verticali dovuti a layer fixed/gradienti */
@media (min-width: 992px){
  body.aw-auth::before,
  body.aw-auth::after{ position: fixed; } /* se usi pseudo-layers sul body */
  .aw-auth-bg{ position: fixed; inset: 0; } /* ribadito per sicurezza */
  html, body{ overflow-x: clip; } /* niente scroll orizzontale accidentale */
}

/* === FIX overflow viewport su /login: la griglia include il padding nell'altezza === */
.auth-wrap{
  box-sizing: border-box;     /* include padding nel calcolo dell’altezza */
  min-height: 100vh !important;
}
@supports (height: 100dvh){
  .auth-wrap{
    min-height: 100dvh !important;
  }
}