.rvsel{position:relative}
  /* il select vero resta nel modulo ma non si vede e non riceve il tabulatore */
  .rvsel>select.rvsel-native{position:absolute;left:0;bottom:0;width:100%;height:1px;
    opacity:0;pointer-events:none;border:0;padding:0;margin:0;background:none;
    -webkit-appearance:none;appearance:none;clip-path:inset(50%)}

  .rvsel-btn{display:flex;align-items:center;justify-content:space-between;gap:12px;
    width:100%;text-align:left;cursor:pointer;font-family:inherit;
    background:var(--card,#191919);border:1px solid rgba(140,140,140,.25);border-radius:12px;
    padding:.8rem 1.1rem;font-size:.87rem;color:inherit;
    transition:border-color .16s ease,box-shadow .16s ease,background .16s ease;
    touch-action:manipulation;-webkit-tap-highlight-color:transparent}
  .rvsel-val{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .rvsel-chev{flex:none;display:flex;transition:transform .2s cubic-bezier(.16,.84,.26,1)}
  .rvsel[data-open="true"] .rvsel-chev{transform:rotate(180deg)}

  .rvsel-list{position:absolute;z-index:140;left:0;right:0;top:calc(100% + 6px);
    margin:0;padding:6px;list-style:none;
    max-height:min(280px,46vh);overflow-y:auto;overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    opacity:0;visibility:hidden;transform:translateY(-7px);transform-origin:top center;
    transition:opacity .14s ease,transform .19s cubic-bezier(.16,.84,.26,1),visibility .19s;
    background:#151515;border:1px solid rgba(140,140,140,.25);border-radius:14px;
    box-shadow:0 18px 44px rgba(0,0,0,.5)}
  .rvsel[data-open="true"] .rvsel-list{opacity:1;visibility:visible;transform:none;
    will-change:transform,opacity}
  /* se sotto non c'è spazio, scende verso l'alto */
  .rvsel.rvsel-up .rvsel-list{top:auto;bottom:calc(100% + 6px);
    transform:translateY(7px);transform-origin:bottom center}
  .rvsel.rvsel-up[data-open="true"] .rvsel-list{transform:none}

  .rvsel-opt{padding:10px 12px;border-radius:9px;cursor:pointer;font-size:.86rem;line-height:1.35;
    color:rgba(255,255,255,.82);transition:background .12s ease,color .12s ease;
    touch-action:manipulation;-webkit-tap-highlight-color:transparent}
  .rvsel-opt:hover,.rvsel-opt.rvsel-cur{background:rgba(232,86,10,.14);color:#fff}
  .rvsel-opt[aria-selected="true"]{color:var(--or,#E8560A)}

  /* ── moduli scuri: contatti, viaggi studio, business travel ── */
  .form-field .rvsel-btn{background:var(--card);border:1px solid rgba(255,255,255,.1);
    border-radius:20px;padding:.85rem 1.3rem;font-size:.87rem;color:var(--wh)}
  .form-field .rvsel-btn:hover,
  .form-field .rvsel[data-open="true"] .rvsel-btn{border-color:rgba(232,86,10,.45)}
  .form-field .rvsel-btn[data-empty="true"] .rvsel-val{color:var(--mu)}
  .form-field .rvsel-list{border-radius:18px;border-color:rgba(232,86,10,.2)}
  .form-field .rvsel-chev{color:var(--or)}

  /* ── modulo delle nozze: carta e oro ── */
  #nozzePage .nzx-f .rvsel-btn{min-height:50px;padding:13px 16px;border-radius:12px;
    border:1px solid rgba(30,27,23,.16);background:var(--paper);font:inherit;font-size:16px;color:var(--ink)}
  #nozzePage .nzx-f .rvsel[data-open="true"] .rvsel-btn{border-color:var(--gold);
    box-shadow:0 0 0 3px rgba(176,138,74,.2)}
  #nozzePage .nzx-f .rvsel-btn[data-empty="true"] .rvsel-val{color:var(--stone)}
  #nozzePage .nzx-f .rvsel-list{background:#fff;border:1px solid rgba(30,27,23,.12);
    border-radius:12px;box-shadow:0 18px 40px rgba(30,27,23,.18);padding:6px}
  #nozzePage .nzx-f .rvsel-opt{color:var(--ink);font-size:15px}
  #nozzePage .nzx-f .rvsel-opt:hover,
  #nozzePage .nzx-f .rvsel-opt.rvsel-cur{background:rgba(176,138,74,.16);color:var(--ink)}
  #nozzePage .nzx-f .rvsel-opt[aria-selected="true"]{color:#7C5E28;font-weight:600}
  #nozzePage .nzx-f .rvsel-chev{color:#7C5E28}

  @media(prefers-reduced-motion:reduce){
    .rvsel-list,.rvsel-chev{transition:none}
  }

  /* ── NIENTE SCATTO ALLA PRIMA APERTURA ──
     Misurato: la prima apertura di ogni tendina perdeva un fotogramma, le
     successive no. È il browser che costruisce il livello su cui animare —
     con dentro l'ombra da quarantaquattro pixel — mentre l'animazione è già
     partita. Il codice avvisa un attimo prima, quando il puntatore arriva sul
     campo o il campo prende il fuoco, e a tendina chiusa lascia andare il
     livello: tenerne undici accesi costa memoria e non serve.
     contain dice al browser che quello che succede dentro l'elenco non può
     cambiare il resto della pagina: così non ricalcola nulla fuori. */
  .rvsel-list{contain:layout paint}
  .rvsel-pronta .rvsel-list{will-change:transform,opacity}
