/* ════════════════════════════════════════
   NEWSLETTER
════════════════════════════════════════ */
#newsletter {
  background: var(--nl-bg);
  position: relative; overflow: hidden;
}
#newsletter::before {
  content: ''; position: absolute; inset: 0;
  background:
    radial-gradient(ellipse 70% 100% at 50% 110%, rgba(254,193,8,.07) 0%, transparent 65%),
    repeating-linear-gradient(45deg, transparent 0, transparent 24px, rgba(0,0,0,.04) 24px, rgba(0,0,0,.04) 25px);
}
.nl-inner   { position: relative; z-index: 1; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(2rem, 6vw, 5rem); align-items: center; }
.nl-perks   { display: flex; gap: 1.5rem; flex-wrap: wrap; margin-top: 1rem; }
.nl-perk    { display: flex; align-items: center; gap: .4rem; font-size: .76rem; color: rgba(244,237,227,.65); }
.nl-perk::before { content: '✦'; color: var(--gold); font-size: .55rem; }
.nl-input   { width: 100%; background: rgba(0,0,0,.22); border: 1px solid rgba(255,255,255,.18); border-radius: var(--r-pill); padding: .9rem 1.5rem; color: #f4ede3; font-family: var(--font-b); font-size: .9rem; outline: none; transition: border-color 200ms; margin-bottom: .75rem; }
.nl-input::placeholder { color: rgba(244,237,227,.38); }
.nl-input:focus        { border-color: rgba(254,193,8,.45); }
.nl-note    { font-size: .7rem; color: rgba(244,237,227,.38); text-align: center; margin-top: .5rem; }

.nl-input.nl-input-err { border-color: #e05252; }
.nl-err { display: none; font-size: .75rem; color: #e05252; margin-top: -.5rem; margin-bottom: .5rem; padding-left: .25rem; }

/* Submit spinner */
#nlSubmit { position: relative; }
.nl-btn-spinner {
  display: none; width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid rgba(0,0,0,.25); border-top-color: #000;
  animation: nlSpin .7s linear infinite;
  position: absolute; right: 1.1rem; top: 50%; transform: translateY(-50%);
}
.nl-loading .nl-btn-label { opacity: 0; }
.nl-loading .nl-btn-spinner { display: block; }
@keyframes nlSpin { to { transform: translateY(-50%) rotate(360deg); } }

/* Status banner */
.nl-status { display: none; margin-top: 1rem; padding: .75rem 1rem; border-radius: var(--r-md); font-size: .85rem; line-height: 1.5; }
.nl-status-ok  { display: block; background: rgba(46,160,67,.15);  border: 1px solid rgba(46,160,67,.35);  color: #4caf50; }
.nl-status-err { display: block; background: rgba(224,82,82,.1);   border: 1px solid rgba(224,82,82,.25);  color: #e05252; }
