/* ============================================================
   SOLON.H — Unified Color Tokens (Single Source of Truth)
   Version: 1.0
   Scope: Hotel module + Login. Restaurant/Housekeeping/Spa = phase 2.
   Load order: BEFORE solon-buttons.css, general.css, page-specific CSS.
   ============================================================ */

:root {
    /* Brand */
    --solon-primary:        #2563EB;   /* blue-600 */
    --solon-primary-light:  #3B82F6;   /* blue-500 (hover/focus) */
    --solon-primary-dark:   #1D4ED8;   /* blue-700 (active/pressed) */
    --solon-primary-tint:   #DBEAFE;   /* blue-100 (selected rows, badge bg) */

    /* Semantic */
    --solon-success:        #10B981;   /* emerald-500 */
    --solon-success-dark:   #059669;
    --solon-success-tint:   #D1FAE5;
    --solon-warning:        #F59E0B;   /* amber-500 */
    --solon-warning-dark:   #D97706;
    --solon-warning-tint:   #FEF3C7;
    --solon-danger:         #EF4444;   /* red-500 */
    --solon-danger-dark:    #DC2626;
    --solon-danger-tint:    #FEE2E2;
    --solon-info:           #0891B2;   /* cyan-600 (= Spa accent) */
    --solon-info-tint:      #CFFAFE;

    /* Neutrals - Tailwind slate scale */
    --solon-bg-page:        #F8FAFC;
    --solon-bg:             #FFFFFF;
    --solon-bg-subtle:      #F1F5F9;
    --solon-border:         #E2E8F0;
    --solon-border-strong:  #CBD5E1;
    --solon-text:           #0F172A;
    --solon-text-secondary: #475569;
    --solon-text-muted:     #94A3B8;

    /* Status rezervare Hotel (paleta deja semantic-OK; doar mutata in tokens) */
    --solon-status-cazat:        #3B82F6;
    --solon-status-confirmat:    #22C55E;
    --solon-status-neconfirmat:  #F59E0B;
    --solon-status-plecat:       #9CA3AF;
    --solon-status-anulat:       #D1D5DB;
    --solon-status-blocat:       #EF4444;

    /* Status plati unificat (AH2 style aplicat si pe FCV2) */
    --solon-pay-numerar:    #059669;   /* emerald-600 */
    --solon-pay-virament:   #2563EB;   /* primary */
    --solon-pay-online:     #7C3AED;   /* violet-600 */
    --solon-pay-card:       #0891B2;   /* cyan-600 */
    --solon-pay-voucher:    #D97706;   /* amber-600 */
    --solon-pay-other:      #64748B;   /* slate-500 */

    /* Status link de plata (Link4Pay) - o singura paleta, folosita de TOATE ecranele:
       fisa de cazare, fisa de banquet si lista de link-uri. Inainte fiecare ecran isi avea
       propria harta status -> culoare, iar cea din fisa de cazare referea clase care nu
       existau nicaieri, deci statusul ramanea necolorat. */
    --solon-l4p-inregistrat: #64748B;   /* slate-500  - link inregistrat */
    --solon-l4p-asteptare:   #D97706;   /* amber-600  - plata in asteptare */
    --solon-l4p-succes:      #059669;   /* emerald-600 - plata reusita */
    --solon-l4p-esuat:       #DC2626;   /* red-600    - plata esuata */
    --solon-l4p-anulat:      #94A3B8;   /* slate-400  - plata anulata */
    --solon-l4p-expirat:     #A855F7;   /* purple-500 - link expirat */

    /* Module identity (Login + sidebar - pastram cele 4) */
    --solon-mod-hotel:        #0F172A;
    --solon-mod-restaurant:   #059669;
    --solon-mod-housekeeping: #475569;
    --solon-mod-spa:          #0891B2;

    /* Shadows (folositi token-uri uniforme pe paginile V2/V3) */
    --solon-shadow-sm:  0 1px 2px rgba(0, 0, 0, 0.04);
    --solon-shadow-md:  0 4px 12px rgba(0, 0, 0, 0.08);
    --solon-shadow-lg:  0 10px 24px rgba(0, 0, 0, 0.12);
}

/* Dark mode reasignari - aplicate cand body are clasa msf-dark */
body.msf-dark {
    --solon-bg-page:        #0F172A;
    --solon-bg:             #1A1A2E;
    --solon-bg-subtle:      #16213E;
    --solon-border:         #2A2A4A;
    --solon-border-strong:  #334155;
    --solon-text:           #E0E0E0;
    --solon-text-secondary: #94A3B8;
    --solon-text-muted:     #64748B;

    /* Brand: primary mai luminos pe dark pt contrast */
    --solon-primary:        #60A5FA;   /* blue-400 */
    --solon-primary-light:  #93C5FD;   /* blue-300 */
    --solon-primary-dark:   #3B82F6;
    --solon-primary-tint:   #1E3A8A;

    /* Semantic tints adaptate pentru dark (mai saturate) */
    --solon-success:        #34D399;
    --solon-success-tint:   #064E3B;
    --solon-warning:        #FBBF24;
    --solon-warning-tint:   #5C3A0E;
    --solon-danger:         #F87171;
    --solon-danger-tint:    #5B1B1B;
    --solon-info:           #22D3EE;
    --solon-info-tint:      #164E5C;

    /* Status plati - variante mai luminoase pe dark */
    --solon-pay-numerar:    #34D399;
    --solon-pay-virament:   #60A5FA;
    --solon-pay-online:     #A78BFA;
    --solon-pay-card:       #22D3EE;
    --solon-pay-voucher:    #FBBF24;
    --solon-pay-other:      #94A3B8;

    /* Status Link4Pay - variante mai luminoase pe dark */
    --solon-l4p-inregistrat: #94A3B8;
    --solon-l4p-asteptare:   #FBBF24;
    --solon-l4p-succes:      #34D399;
    --solon-l4p-esuat:       #F87171;
    --solon-l4p-anulat:      #94A3B8;
    --solon-l4p-expirat:     #C084FC;

    /* === Aliasing tokens locale (pagina-specifice) catre paleta dark canonica ===
       Asta acopera modal-urile Bootstrap care sunt rendered direct pe <body>
       (Servicii Camera, Istoric rezervari, etc.) si paginile fara wrapper
       dedicat (FormServiciiCV, FormFacturareServicii etc.) care folosesc body.msf-dark.
       Reduce duplicarea selectorilor `.xxx-dark` cu `body.msf-dark` peste tot. */
    --fcv2-bg:             var(--solon-bg);
    --fcv2-bg-subtle:      var(--solon-bg-subtle);
    --fcv2-bg-page:        var(--solon-bg-page);
    --fcv2-border:         var(--solon-border);
    --fcv2-text:           var(--solon-text);
    --fcv2-text-secondary: var(--solon-text-secondary);
    --fcv2-text-muted:     var(--solon-text-muted);
    --fcv2-primary:        var(--solon-primary);
    --fcv2-success:        var(--solon-success);
    --fcv2-warning:        var(--solon-warning);
    --fcv2-danger:         var(--solon-danger);
    --fcv2-gray:           var(--solon-text-muted);

    --dhv2-bg:             var(--solon-bg);
    --dhv2-bg-subtle:      var(--solon-bg-subtle);
    --dhv2-border:         var(--solon-border);
    --dhv2-text:           var(--solon-text);
    --dhv2-text-secondary: var(--solon-text-secondary);
    --dhv2-primary:        var(--solon-primary);
    --dhv2-success:        var(--solon-success);
    --dhv2-warning:        var(--solon-warning);
    --dhv2-danger:         var(--solon-danger);
    --dhv2-gray:           var(--solon-text-muted);

    --fbv2-bg:             var(--solon-bg);
    --fbv2-bg-subtle:      var(--solon-bg-subtle);
    --fbv2-border:         var(--solon-border);
    --fbv2-text:           var(--solon-text);
    --fbv2-text-secondary: var(--solon-text-secondary);
    --fbv2-primary:        var(--solon-primary);
    --fbv2-success:        var(--solon-success);
    --fbv2-warning:        var(--solon-warning);
    --fbv2-danger:         var(--solon-danger);
    --fbv2-gray:           var(--solon-text-muted);

    --dbv2-bg:             var(--solon-bg);
    --dbv2-bg-subtle:      var(--solon-bg-subtle);
    --dbv2-border:         var(--solon-border);
    --dbv2-text:           var(--solon-text);
    --dbv2-text-secondary: var(--solon-text-secondary);
    --dbv2-primary:        var(--solon-primary);
    --dbv2-success:        var(--solon-success);
    --dbv2-warning:        var(--solon-warning);
    --dbv2-danger:         var(--solon-danger);
    --dbv2-gray:           var(--solon-text-muted);

    --fcv3-bg:             var(--solon-bg);
    --fcv3-bg-subtle:      var(--solon-bg-subtle);
    --fcv3-bg-page:        var(--solon-bg-page);
    --fcv3-border:         var(--solon-border);
    --fcv3-text:           var(--solon-text);
    --fcv3-text-secondary: var(--solon-text-secondary);
    --fcv3-text-muted:     var(--solon-text-muted);
    --fcv3-primary:        var(--solon-primary);
    --fcv3-primary-dark:   var(--solon-primary-dark);
    --fcv3-success:        var(--solon-success);
    --fcv3-warning:        var(--solon-warning);
    --fcv3-danger:         var(--solon-danger);
}

/* Aliasing pentru contexte ne-body dark (clasa pe wrapper, nu pe body):
   .fcv2-dark, .dhv2-dark, .fbv2-dark, .dbv2-dark, .fcv3-dark.
   Reaplica aceleasi tokens dark astfel incat orice component din interior
   sa primeasca paleta dark indiferent daca msf-dark e pe body sau nu. */
.fcv2-dark,
.dhv2-dark,
.fbv2-dark,
.dbv2-dark,
.fcv3-dark {
    --solon-bg-page:        #0F172A;
    --solon-bg:             #1A1A2E;
    --solon-bg-subtle:      #16213E;
    --solon-border:         #2A2A4A;
    --solon-border-strong:  #334155;
    --solon-text:           #E0E0E0;
    --solon-text-secondary: #94A3B8;
    --solon-text-muted:     #64748B;
    --solon-primary:        #60A5FA;
    --solon-primary-light:  #93C5FD;
    --solon-primary-dark:   #3B82F6;
    --solon-primary-tint:   #1E3A8A;
    --solon-success:        #34D399;
    --solon-success-tint:   #064E3B;
    --solon-warning:        #FBBF24;
    --solon-warning-tint:   #5C3A0E;
    --solon-danger:         #F87171;
    --solon-danger-tint:    #5B1B1B;
    --solon-info:           #22D3EE;
    --solon-info-tint:      #164E5C;
    --solon-pay-numerar:    #34D399;
    --solon-pay-virament:   #60A5FA;
    --solon-pay-online:     #A78BFA;
    --solon-pay-card:       #22D3EE;
    --solon-pay-voucher:    #FBBF24;
    --solon-pay-other:      #94A3B8;

    /* Status Link4Pay - variante mai luminoase pe dark */
    --solon-l4p-inregistrat: #94A3B8;
    --solon-l4p-asteptare:   #FBBF24;
    --solon-l4p-succes:      #34D399;
    --solon-l4p-esuat:       #F87171;
    --solon-l4p-anulat:      #94A3B8;
    --solon-l4p-expirat:     #C084FC;
}

/* === PSV2 modal (Postare servicii) - dark coverage GLOBAL ===
   PSV2 e copiat in multe pagini cu hex hardcoded (#fff, #e5e7eb, #f3f4f6 etc.).
   Aici aplicam dark uniform indiferent unde e folosit (FCV2, FCV21, FormServiciiCV,
   FormFacturareServicii, FormProforme, FormAvansuri etc.). */
body.msf-dark .psv2-categ-btn {
    background: var(--solon-bg-subtle) !important;
    border-color: var(--solon-border) !important;
}
body.msf-dark .psv2-categ-btn:hover,
body.msf-dark .psv2-categ-btn.active {
    background: var(--solon-primary-tint) !important;
    border-color: var(--solon-primary) !important;
}
body.msf-dark .psv2-categ-btn-name { color: var(--solon-text); }
body.msf-dark .psv2-search input {
    background: var(--solon-bg-subtle) !important;
    border-color: var(--solon-border) !important;
    color: var(--solon-text);
}
body.msf-dark .psv2-search input::placeholder { color: var(--solon-text-muted); }
body.msf-dark .psv2-service-list-header { color: var(--solon-text); border-bottom-color: var(--solon-border); }
body.msf-dark .psv2-item { border-color: var(--solon-border); }
body.msf-dark .psv2-item:hover { background: var(--solon-primary-tint); }
body.msf-dark .psv2-item-name { color: var(--solon-text); }
body.msf-dark .psv2-item-price { color: var(--solon-text-secondary); }
body.msf-dark .psv2-serv-btn { color: var(--solon-text) !important; }
body.msf-dark .psv2-serv-btn-daily { color: var(--solon-text-muted); }
body.msf-dark .psv2-toggle { background: var(--solon-bg-subtle); }
body.msf-dark .psv2-toggle-btn { color: var(--solon-text-secondary); }
body.msf-dark .psv2-toggle-btn.active { background: var(--solon-bg); color: var(--solon-primary); }
body.msf-dark .psv2-btn-cancel { background: var(--solon-bg-subtle); color: var(--solon-text-secondary); }
body.msf-dark .psv2-detail-grid label { color: var(--solon-text-secondary); }
body.msf-dark .psv2-detail-close { background: var(--solon-border); color: var(--solon-text-secondary); }

/* === Bootstrap table striped rows pe dark ===
   tabelele cu .table-striped au tbody tr:nth-child(odd/even) hardcoded #fff/#f9f9f9.
   Override pe dark. */
body.msf-dark .table-striped tbody tr:nth-of-type(odd),
body.msf-dark .table-striped tbody tr:nth-of-type(even),
body.msf-dark .table tbody tr {
    background-color: transparent;
    color: var(--solon-text);
}
body.msf-dark .table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255,255,255,0.02); }
body.msf-dark .table-bordered,
body.msf-dark .table-bordered td,
body.msf-dark .table-bordered th { border-color: var(--solon-border) !important; }
body.msf-dark .table thead th { border-bottom-color: var(--solon-border); color: var(--solon-text-secondary); }


/* === Status link de plata (Link4Pay) — clase comune celor trei ecrane ===
   Puse aici, nu in fiecare pagina: maparea status -> culoare era scrisa de trei ori, cu trei
   mecanisme diferite (clase inexistente in fisa de cazare, literali hex in lista, clase locale
   in fisa de banquet). Numele claselor sunt neutre, ca sa poata fi folosite din orice ecran. */
.l4p-status-inregistrat { color: var(--solon-l4p-inregistrat); font-weight: 600; }
.l4p-status-asteptare   { color: var(--solon-l4p-asteptare);   font-weight: 600; }
.l4p-status-succes      { color: var(--solon-l4p-succes);      font-weight: 700; }
.l4p-status-esuat       { color: var(--solon-l4p-esuat);       font-weight: 600; }
.l4p-status-anulat      { color: var(--solon-l4p-anulat);      font-weight: 600; text-decoration: line-through; }
.l4p-status-expirat     { color: var(--solon-l4p-expirat);     font-weight: 600; }
/* === Link4Pay — dialogul de creare link (.l4p-cl) ===
   Pus aici, nu in CSS-ul unei pagini: acelasi dialog exista in fisa de cazare SI in cea de banquet.
   Scopul refacerii: operatorul sa vada dintr-o privire CINE plateste, CE intra pe link si CAT —
   inainte se vedeau doua butoane fara eticheta, un total fara context si niciun platitor. */
.l4p-cl-payer {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 12px; margin-bottom: 14px;
    background: var(--solon-primary-tint); border: 1px solid var(--solon-border); border-radius: 6px;
}
.l4p-cl-payer > i { font-size: 22px; color: var(--solon-primary); flex: 0 0 auto; }
.l4p-cl-payer-lbl { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--solon-text-secondary); }
.l4p-cl-payer strong { font-size: 15px; word-break: break-word; color: var(--solon-text); }
/* De ce platitorul nu e turistul fisei (ex. preluat de la un storno de avans). Apare DOAR cand chiar
   s-a schimbat — altfel destinatarul linkului s-ar modifica in tacere la o simpla bifare. */
.l4p-cl-payer-why { display: block; margin-top: 2px; font-size: 12px; line-height: 1.35; color: var(--solon-text-secondary); }
.l4p-cl-payer.is-changed { background: var(--solon-warning-tint); border-color: var(--solon-warning); }
.l4p-cl-payer.is-changed > i { color: var(--solon-warning); }

/* Expirare + total: doua coloane pe desktop, una sub alta pe mobil. */
.l4p-cl-grid { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-end; margin-bottom: 14px; }
.l4p-cl-exp { flex: 1 1 260px; margin-bottom: 0; }
.l4p-cl-exp input { text-align: right; }
.l4p-cl-total {
    flex: 0 1 220px; text-align: right; padding: 6px 12px;
    border-left: 3px solid var(--solon-primary); background: var(--solon-bg-subtle); border-radius: 0 6px 6px 0;
}
.l4p-cl-total-lbl { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--solon-text-secondary); }
.l4p-cl-total-val { font-size: 22px; font-weight: 700; color: var(--solon-text); line-height: 1.2; }
.l4p-cl-total-val small { font-size: 12px; font-weight: 600; color: var(--solon-text-secondary); }
/* Total nul sau negativ: linkul NU se poate crea, deci se vede imediat, nu abia la apasarea butonului. */
.l4p-cl-total.is-invalid { border-left-color: var(--solon-danger); background: var(--solon-danger-tint); }
.l4p-cl-total.is-invalid .l4p-cl-total-val { color: var(--solon-danger); }

.l4p-cl-srv-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; margin-bottom: 6px; font-weight: 600; color: var(--solon-text); }
.l4p-cl-srv-actions { display: flex; gap: 6px; }
/* Lista face scroll pe verticala, antetul ramane vizibil. */
.l4p-cl-srv-wrap { max-height: 260px; overflow: auto; border: 1px solid var(--solon-border); border-radius: 6px; }
.l4p-cl-srv-table { width: 100%; border-collapse: collapse; }
.l4p-cl-srv-table th, .l4p-cl-srv-table td { padding: 7px 10px; border-bottom: 1px solid var(--solon-border); font-size: 13px; color: var(--solon-text); }
.l4p-cl-srv-table thead th { position: sticky; top: 0; z-index: 1; background: var(--solon-bg-subtle); text-align: left; }
.l4p-cl-srv-table tbody tr:last-child td { border-bottom: none; }
.l4p-cl-srv-table .l4p-cl-c-sel { width: 42px; text-align: center; }
.l4p-cl-srv-table .l4p-cl-c-val { width: 130px; text-align: right; white-space: nowrap; }
.l4p-cl-srv-table td.l4p-cl-c-val { font-variant-numeric: tabular-nums; }
/* Liniile de storno scad din total — se vad ca atare, nu ca o suma oarecare. */
.l4p-cl-srv-table td.l4p-cl-neg { color: var(--solon-danger); font-weight: 600; }

.l4p-cl-alert { margin-top: 12px; padding: 9px 12px; border-radius: 6px; font-weight: 600; font-size: 13px; }
.l4p-cl-alert-warn { background: var(--solon-warning-tint); border: 1px solid var(--solon-warning); color: var(--solon-text); }
.l4p-cl-alert-stop { background: var(--solon-danger-tint); border: 1px solid var(--solon-danger); color: var(--solon-text); }

/* Mobil: totalul trece pe toata latimea, butoanele din footer se aseaza pe randuri intregi. */
@media (max-width: 575.98px) {
    .l4p-cl-total { flex: 1 1 100%; text-align: left; border-left: none; border-top: 3px solid var(--solon-primary); border-radius: 0 0 6px 6px; }
    .l4p-cl-total.is-invalid { border-top-color: var(--solon-danger); }
    .l4p-cl-srv-head { justify-content: flex-start; }
    .l4p-cl-srv-wrap { max-height: 220px; }
    .l4p-cl-srv-table th, .l4p-cl-srv-table td { padding: 6px 8px; font-size: 12.5px; }
    .l4p-cl-srv-table .l4p-cl-c-val { width: 96px; }
    #l4pclModal .modal-footer,
    #fbv2-modal-createlink .modal-footer { flex-wrap: wrap; gap: 8px; }
    #l4pclModal .modal-footer > *,
    #fbv2-modal-createlink .modal-footer > * { flex: 1 1 100%; }
    #l4pclModal .modal-footer .btn-sh,
    #fbv2-modal-createlink .modal-footer .btn-sh { width: 100%; }
}

/* Canalele de notificare din footer-ul dialogului de creare link. Erau in CSS-ul fisei de cazare,
   pe id-urile ei; dialogul fiind acum unul singur, regulile stau langa restul stilurilor lui. */
#l4pclCanale { align-items: center; flex-wrap: wrap; gap: 4px 12px; }
#l4pclCanale .l4p-notif-option { display: inline-flex; align-items: center; gap: 5px; margin: 0; cursor: pointer; font-weight: 500; }
#l4pclCanale .l4p-notif-option input[type="checkbox"] { margin: 0; }
#l4pclCanale .l4p-notif-option input[type="checkbox"]:disabled { cursor: not-allowed; }
#l4pclBtnCreaza:disabled,
#l4pclBtnCreazaNotif:disabled { opacity: 0.5; cursor: not-allowed; }
/* === Link4Pay — dialogul UNIC de detalii link (.l4p-d) ===
   Acelasi formular in fisa de cazare, fisa de banquet si lista de link-uri, deci o singura
   definitie vizuala. Sub-taburile au clasa proprie (.l4p-d-tab), ca sa nu fie prinse de
   handlerele de taburi ale paginilor-gazda. */
.l4p-d-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--solon-border); margin: 12px 0 10px; }
.l4p-d-tab {
    background: none; border: none; padding: 8px 14px;
    font-size: 13px; font-weight: 600; color: var(--solon-text-secondary);
    border-bottom: 2px solid transparent; cursor: pointer;
}
.l4p-d-tab.active { color: var(--solon-primary); border-bottom-color: var(--solon-primary); }
.l4p-d-tab .badge {
    display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
    background: var(--solon-bg-subtle); color: var(--solon-text-secondary);
    font-size: 11px; font-weight: 700;
}
.l4p-d-pane { display: none; }
.l4p-d-pane.active { display: block; }
.l4p-d-scroll { max-height: 260px; overflow: auto; border: 1px solid var(--solon-border); border-radius: 6px; }
.l4p-d-table { width: 100%; border-collapse: collapse; }
.l4p-d-table th, .l4p-d-table td { padding: 6px 10px; border-bottom: 1px solid var(--solon-border); font-size: 13px; color: var(--solon-text); }
.l4p-d-table thead th { position: sticky; top: 0; z-index: 1; background: var(--solon-bg-subtle); text-align: left; }
.l4p-d-table tbody tr:last-child td { border-bottom: none; }
/* Randul de "nu sunt inregistrari" — text secundar, centrat, ca sa nu para o linie de date. */
.l4p-d-gol {
    text-align: center; padding: 18px 10px !important;
    color: var(--solon-text-secondary); font-style: italic;
}

/* Mobil: campurile trec pe toata latimea, butoanele din footer pe randuri intregi. */
@media (max-width: 575.98px) {
    .l4p-d-scroll { max-height: 220px; }
    .l4p-d-table th, .l4p-d-table td { padding: 5px 8px; font-size: 12.5px; }
    #l4pdModal .modal-footer { flex-wrap: wrap; gap: 8px; }
    #l4pdModal .modal-footer > * { flex: 1 1 100%; }
    #l4pdModal .modal-footer .btn-sh { width: 100%; }
}

/* === Avertisment "serviciu cu link de plata" in formularul de plata (PFM) ===
   Banda sta in formular, sub antet, cat completeaza operatorul — nu ca dialog de confirmare care
   se inchide si se uita. Randurile vinovate se marcheaza in tabel, ca sa se vada CARE servicii.
   Tokenii au deja variante de dark, deci banda nu are nevoie de reguli separate. */
.pfm-avertisment-l4p {
    display: flex; align-items: flex-start; gap: 2px;
    margin: 0 0 12px 0; padding: 10px 12px;
    border: 1px solid var(--solon-warning); border-left-width: 4px; border-radius: 6px;
    background: var(--solon-warning-tint); color: #7C2D12;
    font-size: 13px; line-height: 1.45;
}
.pfm-avertisment-l4p i { color: var(--solon-warning-dark); margin-top: 2px; }
/* Pe intuneric tinta deschisa ar orbi: se pastreaza doar accentul, pe fundal transparent. */
:root:not([data-theme="light"]) .pfm-avertisment-l4p,
[data-theme="dark"] .pfm-avertisment-l4p {
    background: transparent; color: var(--solon-text);
}
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .pfm-avertisment-l4p { background: transparent; color: var(--solon-text); }
}

/* Randul unui serviciu cu link activ: fundal + bara pe marginea din stanga. Iconita din prima
   celula ramane semnul care nu depinde de culoare. */
tr.pfm-rand-l4p > td { background: var(--solon-warning-tint); }
tr.pfm-rand-l4p > td:first-child { box-shadow: inset 3px 0 0 0 var(--solon-warning-dark); }
.pfm-semn-l4p { color: var(--solon-warning-dark); }

/* Dialogul nu depaseste NICIODATA ecranul: continutul scrolleaza in interiorul lui, nu impinge
   pagina. Cu jurnalul plin, dialogul crestea peste inaltimea ferestrei si aparea scrollbar pe
   fereastra, iar antetul si butoanele ieseau din cadru.
   UN SINGUR scrollbar, cel din tabel: corpul dialogului NU scrolleaza. Campurile si taburile
   raman fixe, iar zona de tabel primeste exact inaltimea ramasa si scrolleaza in ea. Cu corpul
   scrollabil aveai doua bare una langa alta, si tot trebuia sa derulezi ca sa ajungi la tabel. */
#l4pdModal .modal-content { max-height: calc(100vh - 3.5rem); }
#l4pdModal .modal-header,
#l4pdModal .modal-footer { flex-shrink: 0; }
#l4pdModal .modal-body { display: flex; flex-direction: column; overflow: hidden; }
#l4pdModal .modal-body > .row,
#l4pdModal .modal-body > .l4p-d-tabs { flex: 0 0 auto; }
/* min-height:0 e obligatoriu: fara el, un element flex nu scade sub inaltimea continutului si
   scroll-ul interior nu se declanseaza niciodata. */
#l4pdModal .l4p-d-pane.active { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
#l4pdModal .l4p-d-scroll { flex: 1 1 auto; min-height: 120px; max-height: none; }

/* Cat tine o actiune (incarcare, verificare de status, anulare) antetul se coloreaza si titlul
   spune ce se intampla. Inlocuieste loaderul de dinainte, care acoperea datele fara sa spuna
   nimic — iar cand ramanea aprins parea aplicatia moarta.
   !important nu e cosmetic aici: .modal-header-sh (solon-buttons.css) isi pune fundalul si
   culoarea tot cu !important, deci fara el antetul ramanea albastru inchis. */
#l4pdHeader.l4p-d-header-lucru {
    position: relative; overflow: hidden;
    background: var(--solon-l4p-asteptare) !important;
    border-bottom-color: var(--solon-l4p-asteptare);
}
#l4pdHeader.l4p-d-header-lucru #l4pdTitlu { color: #FFFFFF !important; }
#l4pdHeader.l4p-d-header-lucru .close,
#l4pdHeader.l4p-d-header-lucru .close span { color: #FFFFFF; opacity: 0.9; text-shadow: none; }
/* Bara nedeterminata: nu stim cat dureaza raspunsul, doar ca se lucreaza. */
#l4pdHeader.l4p-d-header-lucru::after {
    content: ''; position: absolute; bottom: 0; height: 3px; width: 30%;
    background: #FFFFFF; opacity: 0.85;
    animation: l4pdBaraLucru 1.1s ease-in-out infinite;
}
@keyframes l4pdBaraLucru { from { left: -30%; } to { left: 100%; } }

/* Butoanele blocate trebuie sa se VADA blocate — altfel operatorul apasa in gol. */
#l4pdModal .btn-sh:disabled,
#l4pdModal .btn-sh[disabled] { opacity: 0.5; cursor: not-allowed; }

/* Grupul de actiuni din footer-ul dialogului de detalii. */
.l4p-d-actiuni { display: flex; flex-wrap: wrap; gap: 6px; }
@media (max-width: 575.98px) {
    /* Pe mobil actiunile ocupa toata latimea, cate una pe rand. */
    .l4p-d-actiuni { width: 100%; }
    .l4p-d-actiuni .btn-sh { flex: 1 1 100%; }
}
