/*
 * Nocturne — invitație pentru aniversări și evenimente.
 * Culoarea de accent vine din `culoare-accent`, fonturile din presetul ales
 * (_head_assets.html.twig). Textul mic pe fundal deschis folosește un accent
 * întunecat, pentru contrast de cel puțin 4.5:1.
 */
:root {
    --ink: #0E0C0B;
    --ink-2: #1A1715;
    --ivory: #F4EFE6;
    --ivory-2: #E8E0D2;
    --accent: #C9A96E;
    --on-accent: #0E0C0B;
    --muted: #9B8F80;
    --text-light: #4A443D;
    --font-display: 'Cormorant', Georgia, serif;
    --font-body: 'Montserrat', Arial, sans-serif;
    --font-accent: 'Cormorant', Georgia, serif;
    --font-name: 'Cormorant', Georgia, serif;
    --accent-style: italic;
    --gutter: clamp(22px, 5vw, 60px);
    --section-y: clamp(72px, 12vw, 128px);
}

/* Baza pe care a fost desenată pagina. Venea din Bootstrap (reboot); fără
   ea, de exemplu, un câmp cu padding iese mai lat decât lățimea lui. Doar
   regulile care contează aici, fără culorile Bootstrap. */
*, *::before, *::after { box-sizing: border-box; }
h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: .5rem; font-weight: 500; line-height: 1.2; }
p { margin-top: 0; margin-bottom: 1rem; }
ol, ul { padding-left: 2rem; }
ol, ul, dl { margin-top: 0; margin-bottom: 1rem; }
dt { font-weight: 700; }
dd { margin-bottom: .5rem; margin-left: 0; }
b, strong { font-weight: bolder; }
figure { margin: 0 0 1rem; }
img, svg { vertical-align: middle; }
label { display: inline-block; }
button { border-radius: 0; }
button, input, optgroup, select, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; }
button, select { text-transform: none; }
textarea { resize: vertical; }
[hidden] { display: none !important; }

html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body.nx { margin: 0; background: var(--ink); color: var(--ivory); font-family: var(--font-body); font-weight: 300; font-size: 16px; line-height: 1.7; -webkit-font-smoothing: antialiased; }
body.nx-locked { overflow: hidden; position: fixed; left: 0; right: 0; width: 100%; }
.nx img { max-width: 100%; display: block; }
.nx a { color: inherit; }
.nx section[id] { scroll-margin-top: 64px; }

.nx-container { max-width: 1120px; margin: 0 auto; padding: 0 var(--gutter); }
.nx-kicker { margin: 0; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: .32em; text-transform: uppercase; }
.nx-num { margin: 0; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: .24em; text-transform: uppercase; color: var(--accent); }
.nx-title { margin: 14px 0 0; font-family: var(--font-display); font-weight: 500; font-size: clamp(34px, 5vw, 52px); line-height: 1.08; }
.nx-lead { margin: 18px 0 0; max-width: 560px; }
.nx-signature { margin: 28px 0 0; font-family: var(--font-accent); font-style: var(--accent-style); font-size: 30px; color: var(--accent); }
.nx-rule { display: block; width: 48px; height: 1px; margin: 26px 0; background: var(--accent); }

/* butoane */
.nx-btn { display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 14px 26px; border: 1px solid var(--accent); font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; text-decoration: none; cursor: pointer; transition: background-color .2s, color .2s, opacity .2s; }
.nx-btn-solid { background: var(--accent); color: var(--on-accent) !important; }
.nx-btn-solid:hover { opacity: .88; }
.nx-btn-line { background: transparent; color: var(--ivory) !important; }
.nx-btn-line:hover { background: var(--accent); color: var(--on-accent) !important; }
.nx a:focus-visible, .nx button:focus-visible, .nx input:focus-visible, .nx select:focus-visible, .nx textarea:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.nx-actions { display: flex; flex-wrap: wrap; gap: 12px; }

/* bara de sus și meniul */
.nx-bar { position: fixed; top: 0; left: 0; right: 0; z-index: 50; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: calc(14px + env(safe-area-inset-top)) var(--gutter) 14px; background: linear-gradient(rgba(14,12,11,.7), rgba(14,12,11,0)); transition: background-color .3s; }
.nx-bar.is-solid { background: rgba(14,12,11,.94); }
.nx-mono { font-family: var(--font-accent); font-style: var(--accent-style); font-size: 26px; line-height: 1; text-decoration: none; color: var(--ivory); }
/* Aceeași înălțime ca butonul „Meniu” (min-height 44px), ca bara să fie aliniată. */
.nx-mono-logo { display: block; height: 44px; width: auto; max-width: 140px; object-fit: contain; }
.nx-nav ul { display: flex; gap: 32px; margin: 0; padding: 0; list-style: none; }
.nx-nav a { padding-bottom: 6px; border-bottom: 1px solid transparent; font-weight: 500; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; text-decoration: none; color: var(--ivory-2); }
.nx-nav a:hover, .nx-nav a.is-current { color: var(--accent); border-color: var(--accent); }
.nx-nav a.is-cta { color: var(--accent); }
.nx-menu-btn, .nx-menu-close { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 10px 14px; background: rgba(14,12,11,.35); border: 1px solid rgba(244,239,230,.45); color: var(--ivory); font: 500 12px var(--font-body); letter-spacing: .28em; text-transform: uppercase; cursor: pointer; }
.nx-menu-btn { display: none; }
.nx-burger { display: block; width: 16px; height: 1px; background: currentColor; box-shadow: 0 5px 0 currentColor; transform: translateY(-2.5px); }
.nx-menu { position: fixed; inset: 0; z-index: 60; display: flex; flex-direction: column; padding: calc(20px + env(safe-area-inset-top)) var(--gutter) 32px; overflow-y: auto; background: rgba(14,12,11,.97); }
.nx-menu[hidden] { display: none; }
.nx-menu-close { align-self: flex-end; }
.nx-menu-list { margin: 56px 0 0; padding: 0; list-style: none; }
.nx-menu-list a { display: flex; align-items: baseline; gap: 18px; padding: 16px 0; border-bottom: 1px solid #2A2622; font-family: var(--font-display); font-size: 32px; text-decoration: none; }
.nx-menu-list a span { min-width: 22px; font: 500 12px var(--font-body); letter-spacing: .2em; color: var(--accent); }
.nx-menu-list a.is-current { color: var(--accent); font-style: italic; }
.nx-menu-date { margin-top: auto; padding-top: 32px; font-size: 12px; letter-spacing: .3em; color: var(--muted); }
@media (max-width: 991.98px) {
    .nx-nav { display: none; }
    .nx-menu-btn { display: inline-flex; }
}

/* fundaluri */
.nx-has-bg { position: relative; background-color: var(--ink-2); background-size: cover; background-position: center; }
.nx-shade { position: absolute; inset: 0; pointer-events: none; }
.nx-has-bg > .nx-container { position: relative; z-index: 1; }

/* hero */
.nx-hero { display: flex; align-items: flex-end; min-height: 100vh; min-height: 100svh; }
/* Voalul e puternic doar sub text; restul pozei rămâne aproape neatins. */
.nx-hero .nx-shade { background: linear-gradient(180deg, rgba(14,12,11,0) 0%, rgba(14,12,11,.12) 40%, rgba(14,12,11,.82) 100%); }
.nx-hero-inner { width: 100%; padding-top: 120px; padding-bottom: clamp(48px, 10vh, 96px); }
.nx-hero .nx-kicker { color: var(--ivory-2); }
.nx-hero-name { margin: 16px 0 0; font-family: var(--font-name); font-weight: 500; font-size: clamp(48px, 11vw, 108px); line-height: .95; overflow-wrap: anywhere; }
.nx-hero-number { font-family: var(--font-accent); font-style: var(--accent-style); font-weight: 400; color: var(--accent); white-space: nowrap; }
.nx-hero-date { margin: 0 0 32px; font-weight: 500; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; color: var(--ivory-2); }
@media (min-width: 992px) {
    .nx-hero .nx-shade { background: linear-gradient(90deg, rgba(14,12,11,.82) 0%, rgba(14,12,11,.42) 42%, rgba(14,12,11,0) 72%), linear-gradient(0deg, rgba(14,12,11,.45), rgba(14,12,11,0) 35%); }
}

/* countdown */
.nx-countdown { background: var(--ink); border-bottom: 1px solid #221E1B; }
.nx-countdown[hidden] { display: none; }
.nx-countdown-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 20px 40px; padding-top: 36px; padding-bottom: 36px; }
.nx-countdown .nx-kicker { color: var(--accent); }
.nx-countdown-sub { margin: 6px 0 0; font-family: var(--font-accent); font-style: var(--accent-style); font-size: 22px; color: var(--ivory-2); }
.nx-countdown-units { display: flex; flex: 1 1 320px; justify-content: space-between; max-width: 560px; }
.nx-countdown-units > div { flex: 1; text-align: center; border-left: 1px solid #2E2A26; }
.nx-countdown-units > div:first-child { border-left: 0; }
.nx-countdown-units b { display: block; font-family: var(--font-display); font-weight: 500; font-size: clamp(32px, 6vw, 56px); line-height: 1; font-variant-numeric: tabular-nums; }
.nx-countdown-units span { font-weight: 500; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }

/* secțiuni */
.nx-section { padding: var(--section-y) 0; }
.nx-light { background: var(--ivory); color: #1D1A17; }
.nx-light .nx-lead, .nx-light .nx-guest-desc { color: var(--text-light); }
.nx-light .nx-num, .nx-light .nx-guest-role, .nx-light .nx-signature { color: #7A5F2F; color: color-mix(in srgb, var(--accent) 55%, #000); }
.nx-dark { background: var(--ink); }
.nx-dark .nx-lead { color: #BDB3A5; }
.nx-split { display: grid; gap: 28px 80px; }
@media (min-width: 992px) { .nx-split { grid-template-columns: 5fr 7fr; align-items: start; } }

/* program */
.nx-timeline { position: relative; margin: 0; padding: 0; list-style: none; }
.nx-timeline::before { content: ''; position: absolute; left: 84px; top: 10px; bottom: 10px; width: 1px; background: #3A342E; }
.nx-timeline-item { position: relative; display: grid; grid-template-columns: 84px 1fr; column-gap: 32px; padding-bottom: 30px; }
.nx-timeline-item:last-child { padding-bottom: 0; }
.nx-timeline-item::after { content: ''; position: absolute; left: 80px; top: 12px; width: 9px; height: 9px; border-radius: 50%; background: var(--ink); border: 1px solid var(--accent); }
.nx-timeline-time { padding-right: 22px; text-align: right; font-family: var(--font-accent); font-style: var(--accent-style); font-size: 24px; line-height: 1.15; color: var(--accent); overflow-wrap: anywhere; }
.nx-timeline-title { margin: 0; font-family: var(--font-display); font-size: 26px; line-height: 1.2; }
.nx-timeline-note { margin: 4px 0 0; font-size: 14px; color: #A89E90; }
@media (max-width: 575.98px) {
    .nx-timeline::before { left: 64px; }
    .nx-timeline-item { grid-template-columns: 64px 1fr; column-gap: 24px; }
    .nx-timeline-item::after { left: 60px; }
    .nx-timeline-time { padding-right: 16px; font-size: 20px; }
    .nx-timeline-title { font-size: 22px; }
}

/* invitați speciali */
.nx-head-row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 16px 48px; }
.nx-head-row .nx-lead { max-width: 380px; margin: 0; }
.nx-guests { display: grid; grid-auto-flow: column; grid-auto-columns: 78%; gap: 16px; margin: 48px calc(var(--gutter) * -1) 0; padding: 0 var(--gutter); list-style: none; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.nx-guests::-webkit-scrollbar { display: none; }
.nx-guest { scroll-snap-align: start; }
.nx-guest-photo { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; margin-bottom: 20px; }
.nx-guest-role { margin: 0; font-weight: 500; font-size: 12px; letter-spacing: .28em; text-transform: uppercase; }
.nx-guest-name { margin: 6px 0 0; font-family: var(--font-display); font-weight: 500; font-size: 30px; line-height: 1.1; }
.nx-guest-desc { margin: 8px 0 0; font-size: 14px; }
.nx-dots { display: flex; gap: 6px; margin-top: 20px; }
.nx-dots i { width: 18px; height: 2px; background: #CBBFAE; }
.nx-dots i.is-on { background: #1D1A17; }
@media (min-width: 768px) {
    .nx-guests { grid-auto-flow: row; grid-template-columns: repeat(3, 1fr); gap: 40px 32px; margin: 56px 0 0; padding: 0; overflow: visible; }
    .nx-dots { display: none; }
}

/* locații */
.nx-locations .nx-shade { background: rgba(14,12,11,.6); }
@media (min-width: 992px) { .nx-locations .nx-shade { background: linear-gradient(90deg, rgba(14,12,11,.8) 0%, rgba(14,12,11,.5) 55%, rgba(14,12,11,.2) 100%); } }
.nx-locations-body { display: grid; gap: 0 80px; margin-top: 36px; }
.nx-locations-grid { display: grid; gap: 16px; }
.nx-location { display: flex; flex-direction: column; padding: 26px 24px; border: 1px solid rgba(244,239,230,.18); background: rgba(14,12,11,.5); }
.nx-location.is-primary { border-color: rgba(201,169,110,.55); border-color: color-mix(in srgb, var(--accent) 60%, transparent); }
.is-single .nx-location { padding: 0; border: 0; background: none; }
.nx-location-label { margin: 0; font-weight: 500; font-size: 12px; letter-spacing: .3em; text-transform: uppercase; color: var(--accent); }
.nx-location-name { margin: 8px 0 0; font-family: var(--font-display); font-weight: 500; font-size: clamp(28px, 4vw, 40px); line-height: 1.1; }
.nx-location-when { margin: 6px 0 0; font-family: var(--font-accent); font-style: var(--accent-style); font-size: 21px; color: var(--accent); }
.nx-location-address { flex: 1; margin: 12px 0 22px; font-style: normal; color: #D9D1C4; }
.nx-details { margin-top: 40px; }
.nx-details-title { margin: 0 0 6px; font-weight: 500; font-size: 12px; letter-spacing: .3em; text-transform: uppercase; color: var(--muted); }
.nx-details dl { margin: 0; border-top: 1px solid rgba(244,239,230,.18); }
.nx-detail { display: grid; grid-template-columns: 110px 1fr; gap: 16px; padding: 16px 0; border-bottom: 1px solid rgba(244,239,230,.18); }
.nx-detail dt { padding-top: 3px; font-weight: 500; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; color: var(--accent); }
.nx-detail dd { margin: 0; color: #E0D8CB; }
@media (min-width: 768px) {
    .is-multi .nx-locations-grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
    .is-multi .nx-details dl { display: grid; grid-template-columns: repeat(3, 1fr); column-gap: 40px; }
}
@media (min-width: 992px) {
    .is-single .nx-locations-body { grid-template-columns: 6fr 5fr; align-items: start; }
    .is-single .nx-details { margin-top: 0; }
}

/* confirmare */
.nx-rsvp .nx-shade { background: rgba(26,23,21,.74); }
@media (min-width: 992px) { .nx-rsvp .nx-shade { background: linear-gradient(90deg, rgba(26,23,21,.5) 0%, rgba(26,23,21,.82) 55%); } }
.nx-rsvp .nx-lead { color: var(--muted); }
.nx-form label { display: block; margin-bottom: 8px; font-weight: 500; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; color: var(--muted); }
.nx-form .nx-field, .nx-form .personName, .nx-form .partnerName, .nx-form .guestEmail, .nx-form .rsvp-advanced-section { margin-top: 22px; }
.nx-form input[type=text], .nx-form input[type=email], .nx-form select, .nx-form textarea { width: 100%; min-height: 48px; padding: 11px 14px; border: 1px solid rgba(244,239,230,.32); border-radius: 2px; background: rgba(244,239,230,.07); color: var(--ivory); font: 300 16px var(--font-body); transition: border-color .2s, box-shadow .2s, background-color .2s; }
.nx-form select { -webkit-appearance: none; appearance: none; padding-right: 40px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23F4EFE6' stroke-width='1.5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 15px center; }
.nx-form input::placeholder, .nx-form textarea::placeholder { color: rgba(244,239,230,.45); }
.nx-form input:disabled, .nx-form select:disabled, .nx-form textarea:disabled { opacity: .6; cursor: not-allowed; }
.nx-form select option { color: #1D1A17; }
.nx-form textarea { min-height: 88px; resize: vertical; }
.nx-form input:focus, .nx-form select:focus, .nx-form textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); background-color: rgba(244,239,230,.1); }
.nx-form .alert { margin-top: 8px; padding: 8px 12px; border: 1px solid rgba(220,38,38,.4); background: rgba(220,38,38,.12); color: #F5C2C2; font-size: 13px; }
.nx-form-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 32px; }
.nx-form-actions .nx-btn { flex: 1 1 180px; }
.nx-form .d-none { display: none !important; }
.nx-privacy { display: block; margin-top: 8px; font-size: 13px; color: var(--muted); }
.nx-done { margin: 28px 0 0; font-family: var(--font-display); font-size: 26px; color: var(--accent); }

/* subsol */
.nx-footer { padding: 72px var(--gutter) calc(96px + env(safe-area-inset-bottom)); text-align: center; background: var(--ink); color: var(--muted); }
.nx-footer-signature { margin: 10px 0 0; font-family: var(--font-accent); font-style: var(--accent-style); font-size: 34px; color: var(--ivory); }

/* muzică: butonul comun din invitation_base are stiluri inline, deci !important */
#im-music-btn { width: 44px !important; height: 44px !important; bottom: calc(20px + env(safe-area-inset-bottom)) !important; background: rgba(14,12,11,.85) !important; border: 1px solid var(--accent); color: var(--accent) !important; box-shadow: none !important; }

/* apariție la scroll — fără JS sau cu mișcare redusă, totul e vizibil */
.nx-js .nx-reveal { opacity: 0; transform: translateY(12px); transition: opacity .35s ease-out, transform .35s ease-out; }
.nx-js .nx-reveal.is-in { opacity: 1; transform: none; }

/* ===========================================================================
 * Varianta „Luminos" (câmpul `varianta-culori`, clasă pe <body>).
 * Varianta întunecată de mai sus rămâne neatinsă; aici doar se suprascriu
 * culorile. Peste pozele clientului, în loc de stratul închis, un văl ivory
 * puternic doar unde stă textul. Textul mic în culoarea de accent folosește
 * accentul închis, ca să rămână lizibil pe alb.
 * =========================================================================== */
.nx-theme-luminos {
    --accent-text: #7A5F2F;
    --accent-text: color-mix(in srgb, var(--accent) 55%, #000);
    --muted: #6E655A;
}
body.nx.nx-theme-luminos { background: #FFFFFF; color: #1D1A17; }
.nx-theme-luminos .nx-has-bg { background-color: #EFE9DF; color: #1D1A17; }
.nx-theme-luminos .nx-num { color: var(--accent-text); }
.nx-theme-luminos .nx-btn-line { color: #1D1A17 !important; }
.nx-theme-luminos .nx-btn-line:hover { color: var(--on-accent) !important; }

/* bara de sus și meniul */
.nx-theme-luminos .nx-bar { background: rgba(255,255,255,.92); box-shadow: 0 1px 0 #E8E0D2; }
.nx-theme-luminos .nx-bar.is-solid { background: rgba(255,255,255,.97); }
.nx-theme-luminos .nx-mono { color: #1D1A17; }
.nx-theme-luminos .nx-nav a { color: #4A443D; }
.nx-theme-luminos .nx-nav a:hover, .nx-theme-luminos .nx-nav a.is-current { color: var(--accent-text); border-color: var(--accent-text); }
/* Confirmare e evidențiat doar prin culoare; sublinierea arată secțiunea curentă. */
.nx-theme-luminos .nx-nav a.is-cta { color: var(--accent-text); }
.nx-theme-luminos .nx-menu-btn, .nx-theme-luminos .nx-menu-close { background: #FFFFFF; border-color: #D9D0C2; color: #1D1A17; }
.nx-theme-luminos .nx-menu { background: rgba(255,255,255,.98); color: #1D1A17; }
.nx-theme-luminos .nx-menu-list a { border-bottom-color: #E8E0D2; }
.nx-theme-luminos .nx-menu-list a span, .nx-theme-luminos .nx-menu-list a.is-current { color: var(--accent-text); }

/* hero */
.nx-theme-luminos .nx-hero .nx-shade { background: linear-gradient(180deg, rgba(250,247,242,0) 0%, rgba(250,247,242,.15) 40%, rgba(250,247,242,.88) 100%); }
.nx-theme-luminos .nx-hero .nx-kicker, .nx-theme-luminos .nx-hero-date { color: #4A443D; }
.nx-theme-luminos .nx-hero-number { color: var(--accent-text); }
@media (min-width: 992px) {
    .nx-theme-luminos .nx-hero .nx-shade { background: linear-gradient(90deg, rgba(250,247,242,.9) 0%, rgba(250,247,242,.6) 42%, rgba(250,247,242,0) 72%), linear-gradient(0deg, rgba(250,247,242,.4), rgba(250,247,242,0) 35%); }
}

/* countdown */
.nx-theme-luminos .nx-countdown { background: #FFFFFF; border-bottom-color: #E8E0D2; }
.nx-theme-luminos .nx-countdown .nx-kicker { color: var(--accent-text); }
.nx-theme-luminos .nx-countdown-sub { color: #4A443D; }
.nx-theme-luminos .nx-countdown-units > div { border-left-color: #E3DACB; }
.nx-theme-luminos .nx-countdown-units > div:first-child { border-left: 0; }

/* secțiunile pline: cele ivory rămân ivory, cele închise devin albe */
.nx-theme-luminos .nx-dark { background: #FFFFFF; }
.nx-theme-luminos .nx-dark .nx-lead { color: #5C544A; }
.nx-theme-luminos .nx-timeline::before { background: #D9D0C2; }
.nx-theme-luminos .nx-timeline-item::after { background: #FFFFFF; }
.nx-theme-luminos .nx-timeline-time { color: var(--accent-text); }
.nx-theme-luminos .nx-timeline-note { color: #6E655A; }

/* locații */
.nx-theme-luminos .nx-locations .nx-shade { background: rgba(250,247,242,.7); }
@media (min-width: 992px) { .nx-theme-luminos .nx-locations .nx-shade { background: linear-gradient(90deg, rgba(250,247,242,.88) 0%, rgba(250,247,242,.62) 55%, rgba(250,247,242,.3) 100%); } }
.nx-theme-luminos .nx-location { border-color: #E3DACB; background: rgba(255,255,255,.82); }
.nx-theme-luminos .is-single .nx-location { border: 0; background: none; }
.nx-theme-luminos .nx-location-label, .nx-theme-luminos .nx-location-when, .nx-theme-luminos .nx-detail dt { color: var(--accent-text); }
.nx-theme-luminos .nx-location-address, .nx-theme-luminos .nx-detail dd { color: #4A443D; }
.nx-theme-luminos .nx-details dl, .nx-theme-luminos .nx-detail { border-color: #E3DACB; }

/* confirmare */
.nx-theme-luminos .nx-rsvp .nx-shade { background: rgba(250,247,242,.78); }
@media (min-width: 992px) { .nx-theme-luminos .nx-rsvp .nx-shade { background: linear-gradient(90deg, rgba(250,247,242,.62) 0%, rgba(250,247,242,.88) 55%); } }
.nx-theme-luminos .nx-form input[type=text], .nx-theme-luminos .nx-form input[type=email], .nx-theme-luminos .nx-form select, .nx-theme-luminos .nx-form textarea { border-color: #BDB2A1; background-color: #FFFFFF; color: #1D1A17; }
.nx-theme-luminos .nx-form select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%231D1A17' stroke-width='1.5'/%3E%3C/svg%3E"); }
.nx-theme-luminos .nx-form input::placeholder, .nx-theme-luminos .nx-form textarea::placeholder { color: #8A8073; }
.nx-theme-luminos .nx-form input:focus, .nx-theme-luminos .nx-form select:focus, .nx-theme-luminos .nx-form textarea:focus { border-color: var(--accent-text); box-shadow: 0 0 0 1px var(--accent-text); background-color: #FFFFFF; }
.nx-theme-luminos .nx-form .alert { border-color: rgba(185,28,28,.35); background: rgba(185,28,28,.06); color: #991B1B; }
.nx-theme-luminos .nx-done { color: var(--accent-text); }

/* subsol și muzică */
.nx-theme-luminos .nx-footer { background: #F4EFE6; }
.nx-theme-luminos .nx-footer-signature { color: #1D1A17; }
.nx-theme-luminos #im-music-btn { background: #FFFFFF !important; color: var(--accent-text) !important; }

/* Cu voalul mai ușor, textul mare de peste poze primește o umbră discretă,
   ca să rămână lizibil și pe o fotografie aglomerată. */
.nx-has-bg .nx-hero-name, .nx-has-bg .nx-title, .nx-has-bg .nx-hero-date, .nx-has-bg .nx-kicker, .nx-has-bg .nx-location-name { text-shadow: 0 1px 16px rgba(14,12,11,.4); }
.nx-theme-luminos .nx-has-bg .nx-hero-name, .nx-theme-luminos .nx-has-bg .nx-title, .nx-theme-luminos .nx-has-bg .nx-hero-date, .nx-theme-luminos .nx-has-bg .nx-kicker, .nx-theme-luminos .nx-has-bg .nx-location-name { text-shadow: 0 1px 16px rgba(250,247,242,.85); }

/* Luminos: la locații și confirmare textul închis peste o poză doar ușor
   deschisă (mai ales una întunecată) rămânea pe gri și nu se mai citea.
   Textul stă acum pe un panou ivory; poza se vede în jurul lui, nu sub text. */
.nx-theme-luminos .nx-locations > .nx-container,
.nx-theme-luminos .nx-rsvp > .nx-container {
    background: rgba(250,247,242,.92);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    padding-top: clamp(28px, 5vw, 48px);
    padding-bottom: clamp(28px, 5vw, 48px);
    box-shadow: 0 10px 40px rgba(14,12,11,.08);
}
.nx-theme-luminos .nx-locations .nx-title, .nx-theme-luminos .nx-rsvp .nx-title,
.nx-theme-luminos .nx-locations .nx-location-name { text-shadow: none; }
.nx-theme-luminos .nx-rsvp .nx-lead, .nx-theme-luminos .nx-form label, .nx-theme-luminos .nx-privacy, .nx-theme-luminos .nx-details-title { color: #5C544A; }

/* Tranziția Locație → Confirmare. Sunt singurele secțiuni cu poză puse una
   după alta: două poze diferite se loveau pe aceeași linie. Poza locației se
   estompează în culoarea paginii, urmează o bandă scurtă cu o linie aurie, iar
   poza confirmării răsare din aceeași culoare. Straturile stau sub conținut
   (containerul are z-index 1). `::after`, nu `::before`: un fundal video
   inserat în secțiune ar acoperi un `::before`. */
.nx-locations::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 140px; pointer-events: none;
    background: linear-gradient(180deg, rgba(14,12,11,0) 0%, #0E0C0B 100%);
}
.nx-locations + .nx-rsvp::after {
    content: ''; position: absolute; left: 0; right: 0; top: 0; height: 190px; pointer-events: none;
    background:
        linear-gradient(var(--accent), var(--accent)) 50% 22px / 36px 1px no-repeat,
        linear-gradient(180deg, #0E0C0B 0, #0E0C0B 44px, rgba(14,12,11,0) 100%);
}
.nx-theme-luminos .nx-locations::after { background: linear-gradient(180deg, rgba(255,255,255,0) 0%, #FFFFFF 100%); }
.nx-theme-luminos .nx-locations + .nx-rsvp::after {
    background:
        linear-gradient(var(--accent-text), var(--accent-text)) 50% 22px / 36px 1px no-repeat,
        linear-gradient(180deg, #FFFFFF 0, #FFFFFF 44px, rgba(255,255,255,0) 100%);
}

/* Program cu poză de fundal (opțională). Voal uniform: pe desktop programul
   stă în dreapta, deci un voal care se luminează spre dreapta l-ar lăsa necitit. */
.nx-program-photo .nx-shade { background: rgba(14,12,11,.62); }
.nx-theme-luminos .nx-program-photo .nx-shade { background: rgba(250,247,242,.55); }
.nx-theme-luminos .nx-program-photo > .nx-container {
    background: rgba(250,247,242,.92);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    padding-top: clamp(28px, 5vw, 48px);
    padding-bottom: clamp(28px, 5vw, 48px);
    box-shadow: 0 10px 40px rgba(14,12,11,.08);
}
.nx-program-photo .nx-timeline-item::after { background: var(--ink); }
.nx-theme-luminos .nx-program-photo .nx-timeline-item::after { background: #FFFFFF; }

/* Program cu poză urmat direct de Locație (Invitați speciali oprit): aceeași
   tranziție ca între Locație și Confirmare. Estomparea de sus a locației stă
   în voalul ei, ca să rămână peste un eventual fundal video. */
.nx-program-photo:has(+ .nx-locations)::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 140px; pointer-events: none;
    background: linear-gradient(180deg, rgba(14,12,11,0) 0%, #0E0C0B 100%);
}
.nx-program-photo + .nx-locations .nx-shade::before {
    content: ''; position: absolute; left: 0; right: 0; top: 0; height: 190px; pointer-events: none;
    background:
        linear-gradient(var(--accent), var(--accent)) 50% 22px / 36px 1px no-repeat,
        linear-gradient(180deg, #0E0C0B 0, #0E0C0B 44px, rgba(14,12,11,0) 100%);
}
.nx-theme-luminos .nx-program-photo:has(+ .nx-locations)::after { background: linear-gradient(180deg, rgba(255,255,255,0) 0%, #FFFFFF 100%); }
.nx-theme-luminos .nx-program-photo + .nx-locations .nx-shade::before {
    background:
        linear-gradient(var(--accent-text), var(--accent-text)) 50% 22px / 36px 1px no-repeat,
        linear-gradient(180deg, #FFFFFF 0, #FFFFFF 44px, rgba(255,255,255,0) 100%);
}

/* ===========================================================================
 * Culoare de fundal aleasă de client (secțiunile fără poză). Fundalul vine
 * inline (`background-color`, plus `--tone-bg` pentru elementele care trebuie
 * să-l repete). Tonul textului e ales pe server după contrast și bate ambele
 * variante: `.nx-tone-dark` = fundal închis, text deschis; `.nx-tone-light` =
 * fundal deschis, text închis.
 * =========================================================================== */
.nx .nx-tone { --accent-dark: #7A5F2F; --accent-dark: color-mix(in srgb, var(--accent) 55%, #000); }

/* fundal închis → text deschis */
.nx .nx-tone-dark { color: #F4EFE6; }
.nx .nx-tone-dark .nx-lead, .nx .nx-tone-dark .nx-guest-desc { color: #D9D1C4; }
.nx .nx-tone-dark .nx-num, .nx .nx-tone-dark .nx-signature, .nx .nx-tone-dark .nx-guest-role,
.nx .nx-tone-dark .nx-timeline-time, .nx .nx-tone-dark .nx-kicker { color: var(--accent); }
.nx .nx-tone-dark .nx-timeline::before { background: rgba(244,239,230,.25); }
.nx .nx-tone-dark .nx-timeline-item::after { background: var(--tone-bg); }
.nx .nx-tone-dark .nx-timeline-note { color: rgba(244,239,230,.72); }
.nx .nx-tone-dark .nx-dots i { background: rgba(244,239,230,.3); }
.nx .nx-tone-dark .nx-dots i.is-on { background: #F4EFE6; }
.nx .nx-tone-dark .nx-countdown-sub { color: #E8E0D2; }
.nx .nx-tone-dark .nx-countdown-units span { color: rgba(244,239,230,.72); }
.nx .nx-tone-dark .nx-countdown-units > div { border-left-color: rgba(244,239,230,.2); }
.nx .nx-tone-dark .nx-countdown-units > div:first-child { border-left: 0; }
.nx .nx-tone-dark.nx-countdown { border-bottom-color: rgba(244,239,230,.12); }
.nx .nx-tone-dark.nx-footer { color: rgba(244,239,230,.72); }
.nx .nx-tone-dark .nx-footer-signature { color: #F4EFE6; }

/* fundal deschis → text închis */
.nx .nx-tone-light { color: #1D1A17; }
.nx .nx-tone-light .nx-lead, .nx .nx-tone-light .nx-guest-desc { color: #4A443D; }
.nx .nx-tone-light .nx-num, .nx .nx-tone-light .nx-signature, .nx .nx-tone-light .nx-guest-role,
.nx .nx-tone-light .nx-timeline-time, .nx .nx-tone-light .nx-kicker { color: var(--accent-dark); }
.nx .nx-tone-light .nx-timeline::before { background: rgba(29,26,23,.2); }
.nx .nx-tone-light .nx-timeline-item::after { background: var(--tone-bg); border-color: var(--accent-dark); }
.nx .nx-tone-light .nx-timeline-note { color: #6E655A; }
.nx .nx-tone-light .nx-dots i { background: rgba(29,26,23,.25); }
.nx .nx-tone-light .nx-dots i.is-on { background: #1D1A17; }
.nx .nx-tone-light .nx-countdown-sub { color: #4A443D; }
.nx .nx-tone-light .nx-countdown-units span { color: #6E655A; }
.nx .nx-tone-light .nx-countdown-units > div { border-left-color: rgba(29,26,23,.15); }
.nx .nx-tone-light .nx-countdown-units > div:first-child { border-left: 0; }
.nx .nx-tone-light.nx-countdown { border-bottom-color: rgba(29,26,23,.1); }
.nx .nx-tone-light.nx-footer { color: #6E655A; }
.nx .nx-tone-light .nx-footer-signature { color: #1D1A17; }

/* Meniul de pe telefon cu imagine de fundal: un voal peste poză (închis sau
   ivory, după variantă), conținutul deasupra lui. */
.nx-menu.nx-menu-photo { background-size: cover; background-position: center; }
.nx-menu-shade { position: absolute; inset: 0; pointer-events: none; background: rgba(14,12,11,.74); }
.nx-theme-luminos .nx-menu-shade { background: rgba(250,247,242,.86); }
.nx-menu > :not(.nx-menu-shade) { position: relative; z-index: 1; }

/* Meniul cu culoare aleasă: tonul textului vine de pe server, ca la secțiuni. */
.nx .nx-menu.nx-tone-dark .nx-menu-list a { border-bottom-color: rgba(244,239,230,.18); }
.nx .nx-menu.nx-tone-dark .nx-menu-list a span, .nx .nx-menu.nx-tone-dark .nx-menu-list a.is-current { color: var(--accent); }
.nx .nx-menu.nx-tone-dark .nx-menu-close { background: transparent; border-color: rgba(244,239,230,.45); color: #F4EFE6; }
.nx .nx-menu.nx-tone-dark .nx-menu-date { color: rgba(244,239,230,.72); }
.nx .nx-menu.nx-tone-light .nx-menu-list a { border-bottom-color: rgba(29,26,23,.15); }
.nx .nx-menu.nx-tone-light .nx-menu-list a span, .nx .nx-menu.nx-tone-light .nx-menu-list a.is-current { color: var(--accent-dark); }
.nx .nx-menu.nx-tone-light .nx-menu-close { background: transparent; border-color: rgba(29,26,23,.35); color: #1D1A17; }
.nx .nx-menu.nx-tone-light .nx-menu-date { color: #6E655A; }

/* Unitățile countdown-ului pe ecrane înguste: fără spațiere între litere, ca
   „SECONDES" să încapă în patru coloane și la 320px. */
@media (max-width: 374px) { .nx-countdown-units span { letter-spacing: 0; } }

/* Nocturne nu încarcă Bootstrap. rsvp-advanced.js generează câteva clase
   utilitare de-ale lui; aici sunt doar acelea, limitate la formular. */
.nx-form .row { display: block; }
.nx-form .col-md-12 { width: 100%; }
.nx-form .mt-1 { margin-top: .25rem; }
.nx-form .mt-2 { margin-top: .5rem; }
.nx-form .mt-3 { margin-top: 1rem; }
.nx-form .mb-3 { margin-bottom: 1rem; }
.nx-form .text-danger { color: #F5C2C2; }
.nx-theme-luminos .nx-form .text-danger { color: #991B1B; }

/* Formularul de confirmare stă într-un panou propriu, ca să se vadă de departe
   peste poză, iar câmpurile au contur complet: clientul vede unde se scrie. */
.nx-form {
    padding: clamp(22px, 4vw, 40px);
    border: 1px solid rgba(201,169,110,.35);
    background: rgba(14,12,11,.58);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    box-shadow: 0 18px 50px rgba(0,0,0,.28);
}
.nx-form > :first-child { margin-top: 0; }
.nx-form .rsvp-person-card { border-color: rgba(244,239,230,.16); border-radius: 2px; background: rgba(244,239,230,.04); }
.nx-form .rsvp-person-card-title { border-bottom-color: rgba(244,239,230,.14); color: var(--accent); letter-spacing: .2em; }
/* Opțiunile bifabile sunt răspunsuri, nu etichete: fără majuscule și spațiere. */
.nx-form .rsvp-checkbox-label { margin: 0; font-size: 15px; font-weight: 300; letter-spacing: 0; text-transform: none; color: var(--ivory); }
.nx-form input[type=checkbox] { accent-color: var(--accent); }

.nx-theme-luminos .nx-form {
    border-color: #E1D7C6;
    background: rgba(255,255,255,.72);
    box-shadow: 0 10px 30px rgba(14,12,11,.06);
}
.nx-theme-luminos .nx-form .rsvp-person-card { border-color: #E1D7C6; background: #FAF7F2; }
.nx-theme-luminos .nx-form .rsvp-person-card-title { border-bottom-color: #E1D7C6; color: var(--accent-text); }
.nx-theme-luminos .nx-form .rsvp-checkbox-label { color: #1D1A17; }
.nx-theme-luminos .nx-form input[type=checkbox] { accent-color: var(--accent-text); }
