/**
 * portal-theme.css — Redesign vizual portal B2B (tema crmconnect)
 * ------------------------------------------------------------------
 * Scop: strat vizual aditiv peste cele 9 CSS-uri existente ale temei
 * (style.css, newStyle.css, ui-refresh.css, dashboard-refresh.css,
 * footer-refresh.css, sidebar.css, ui-refactor-mui.css,
 * ui-mui-refactor.css, custom.css). NU le modifică, NU le înlocuiește —
 * câștigă cascada prin ordine de sursă (ultimul <link> din <head>,
 * vezi head.php) + specificitate de scope (prefix body.customers).
 *
 * Scoping: fiecare regulă e sub `body.customers` (sau într-un @media
 * al cărui conținut respectă regula). Excepții documentate:
 *   - @keyframes (nu se pot prefixa cu selector)
 *   - @media print (§ QUARANTINE și blocul C18, conținutul e tot
 *     scopat body.customers pe interior)
 *   - @page (reset margini pt print, global prin natura regulii)
 * Login/register/forgot_password NU sunt afectate: folosesc
 * head-auth.php, care nu include acest fișier (izolare structurală,
 * nu doar scoping CSS — vezi architecture.md F2).
 *
 * Tokeni: bloc `body.customers { --pp-*: ... }` mai jos. Sub acel
 * bloc (după marcajul C01), corpul fișierului foloseşte STRICT
 * var(--pp-*) / transparent / currentColor / inherit pentru culori.
 * Orice valoare literală (hex/rgb/rgba) e definită O SINGURĂ DATĂ în
 * blocul de tokeni (Stratul B — inclusiv near-black-ul de backdrop și
 * variantele "ink" ale culorilor semantice pt contrast pe pastile
 * soft) și referită mai jos exclusiv prin var(). Excepții
 * explicite rămase, toate în afara blocului de tokeni și toate
 * tehnice, nu stilistice:
 *   1. Tripletele --pp-*-rgb (linia ~75, definite tot în blocul de
 *      tokeni) sunt valori literale pt rgba(var(--pp-x-rgb), alpha) —
 *      nu există altă cale în CSS plain fără color-mix()/relative
 *      color syntax (interzise, Q4).
 *   2. `#fff` în @media print (C18) — reset explicit la alb pe
 *      fundalul documentului, independent de --pp-surface (care ar
 *      putea fi redefinit ulterior), cerinţă de fidelitate print.
 *   3. `#ddd` în @media print (C18) — border-ul tabelelor la print,
 *      valoare cerută explicit de spec (component_specs C18: "tabelele
 *      primesc border 1px solid #ddd") — mai vizibil pe hârtie decât
 *      --pp-border (#e9edf1, prea deschis pt imprimante alb-negru).
 *   4. Culori din legendă chart-uri inline (style="background:...")
 *      generate PHP dinamic per status (home.php) și pastela per-status
 *      a tichetelor (theme_hex_to_pastel_bg) — sunt valori runtime
 *      calculate din admin, nu apar deloc în acest fișier CSS.
 *
 * !important: maxim 15, toate în secţiunea QUARANTINE de la final.
 * Plain CSS. Fără @import, fără preprocesor, fără build step.
 */

/* ==========================================================================
   TOKENI — Strat A (mapare pe tokenii admin app/assets/css/style.min.css,
   extraşi cu grep -o -- '--[a-zA-Z0-9_-]*:[^;}]*' — vezi research.md §3)
   + Strat B (derivate, nu există în admin, definite literal)
   ========================================================================== */
body.customers {
    /* Strat A — var(--admin-token, fallback-literal-identic-cu-admin) */
    --pp-primary: var(--theme-default, #7366ff);
    --pp-secondary: var(--theme-secondary, #838383);
    --pp-success: var(--color-success, #54ba4a);
    --pp-warning: var(--color-warning, #ffa941);
    --pp-danger: var(--color-danger, #e54b4b);
    --pp-info: var(--color-info, #40b8f5);
    --pp-surface: var(--white, #fff);
    --pp-bg: var(--body-light-background, rgb(247, 249, 252));
    --pp-bg-muted: var(--light-bg, #eef1f6);
    --pp-bg-subtle: var(--light2, #f5f6f9);
    --pp-text: var(--body-font-color, #2f2f3b);
    --pp-text-muted: var(--lighter-gray, rgba(33, 37, 41, .75));
    --pp-text-faint: var(--f-lighter, #7f8183);
    --pp-border: var(--bs-border-color, #e9edf1);
    --pp-primary-soft: var(--light-shade-primary, #f5f4ff);
    --pp-table-stripe: var(--light-datatable-odd, #f5f6fa);
    --pp-shadow-sm: var(--shadow-sm, 0 1px 2px rgba(82, 82, 108, .06));
    --pp-shadow-card: var(--shadow-card, 0 1px 3px rgba(82, 82, 108, .08));
    --pp-radius-sm: var(--radius-sm, 6px);
    --pp-radius-md: var(--radius-md, 8px);
    --pp-radius-lg: var(--radius-lg, 10px);

    /* Strat B — derivate, literale (nu există în admin). Tripletele
       *-rgb se mențin manual sincronizate cu culorile hex de mai sus —
       vezi excepția #1 din comentariul de la începutul fișierului. */
    --pp-primary-rgb: 115, 102, 255;
    --pp-success-rgb: 84, 186, 74;
    --pp-warning-rgb: 255, 169, 65;
    --pp-danger-rgb: 229, 75, 75;
    --pp-info-rgb: 64, 184, 245;
    --pp-radius-xl: 16px;
    --pp-radius-pill: 999px;
    /* ADN-ul tabelului admin (style.min.css §TABLES) — valori copiate
       identic: separatoare dashed, wash-ul celulelor, gri-ul săgeților
       de sortare; --pp-primary-hover e color-mix(72% primary, black)
       precomputat (color-mix() interzis, Q4). */
    --pp-dash: rgba(82, 82, 108, .15);
    --pp-dash-soft: rgba(82, 82, 108, .1);
    --pp-cell-wash: rgba(248, 250, 252, .9);
    --pp-sort-idle: #ced4da;
    --pp-primary-hover: #5349b8;
    --pp-shadow-hover: 0 4px 12px rgba(82, 82, 108, .12);
    --pp-shadow-lg: 0 8px 24px rgba(82, 82, 108, .14);
    --pp-ring: 0 0 0 3px rgba(var(--pp-primary-rgb), .18);
    --pp-transition: 160ms cubic-bezier(.4, 0, .2, 1);
    --pp-transition-fast: 120ms cubic-bezier(.4, 0, .2, 1);
    --pp-space-1: 4px;
    --pp-space-2: 8px;
    --pp-space-3: 12px;
    --pp-space-4: 16px;
    --pp-space-5: 24px;
    --pp-space-6: 32px;
    --pp-font-ui: 'Fira Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    --pp-sidebar-width: 250px;
    /* Aproape-negru pt backdrop-ul de modal (nu există în harta de
       tokeni admin); sidebar-ul e pe suprafață deschisă (v. C08). */
    --pp-backdrop: #0b0f19;
    /* Variante „ink" (întunecate) ale culorilor semantice, pt text
       lizibil (WCAG AA ≥4.5:1) pe fundaluri soft rgba(--pp-*-rgb,.12).
       Nu există în harta de tokeni admin — admin nu are nevoie de ele
       (butoane pline, nu pastile soft) — derivate manual din aceleași
       nuanțe, literale ca orice alt token din Stratul B. */
    --pp-success-ink: #2f7a28;
    --pp-danger-ink: #b3241f;
    --pp-warning-ink: #8a5300;
    --pp-info-ink: #1a6f96;
}

/* Select-ul de salt la pagină dintre info și paginare — scos la
   cererea clientului (paginarea acoperă navigarea). */
body.customers .dataTables_wrapper .dt-page-jump {
    display: none;
}

/* Statusuri (label-*): rețeta EXACTĂ a adminului (style.min.css) —
   pastile soft cu text semantic pe wash 8-12% din aceeași culoare,
   radius 6, weight 500; .s-status păstrează uppercase + 6px 18px.
   Selectorii cu 5 clase egalează per-page-urile din dashboard-refresh
   (.dashboard-refresh.invoices-page .table-invoices .label.label-*)
   și câștigă prin poziția în cascadă. */
body.customers .label.label-success,
body.customers .dashboard-refresh .label.label-success.s-status {
    background: rgba(var(--pp-success-rgb), .1);
    border: 0;
    color: var(--pp-success);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.label-danger,
body.customers .dashboard-refresh .label.label-danger.s-status {
    background: rgba(var(--pp-danger-rgb), .08);
    border: 0;
    color: var(--pp-danger);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.label-warning,
body.customers .dashboard-refresh .label.label-warning.s-status {
    background: rgba(var(--pp-warning-rgb), .12);
    border: 0;
    color: var(--pp-warning);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.label-info,
body.customers .dashboard-refresh .label.label-info.s-status {
    background: rgba(var(--pp-info-rgb), .1);
    border: 0;
    color: var(--pp-info);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.label-primary,
body.customers .dashboard-refresh .label.label-primary.s-status {
    background: rgba(var(--pp-primary-rgb), .1);
    border: 0;
    color: var(--pp-primary);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.label-default,
body.customers .dashboard-refresh .label.label-default.s-status {
    background: var(--pp-bg-muted);
    border: 0;
    color: var(--pp-text);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .s-status,
body.customers .dashboard-refresh .label.s-status {
    display: inline-block;
    padding: 6px 18px;
    text-transform: uppercase;
}

/* Punte legacy: sidebar.css definește --dash-primary (#2563eb, albastru)
   iar dashboard-refresh.css îl consumă cu specificitate mare (paginare,
   hovers, accente). Îl redirecționăm spre violetul temei — un singur
   punct de adevăr pt accent, fără războaie de specificitate. */
body.customers .crm-sidebar-layout,
body.customers .dashboard-refresh {
    --dash-primary: var(--pp-primary);
}

/* Aceeași punte pt pagina publică de document (contract/<id>/<hash>):
   ui-mui-refactor.css definește pe .mui-document-page propriul
   --primary (albastru MUI #1976d2) din care curg tab-urile, linkurile
   și butoanele paginii. Redirecționat spre violetul temei; hover-ul e
   varianta precomputată. */
body.customers .mui-document-page {
    --primary: var(--pp-primary);
    --primary-hover: var(--pp-primary-hover);
}

/* Singurele albastruri literale rămase în ui-mui-refactor.css: două
   focus-ring-uri rgba(25,118,210,.2) — rescrise pe tripleta temei. */
body.customers .mui-document-page #reject_reason.form-control:focus,
body.customers .mui-document-page .contract-comment textarea.form-control:focus {
    box-shadow: 0 0 0 2px rgba(var(--pp-primary-rgb), .2);
}

/* Avatar cu inițiale pt comentariile clientului din Discuție — staff-ul
   are poza de profil (32px), clientul primește echivalentul modern:
   inițialele pe tenta soft a temei, aceleași dimensiuni, deci textul
   comentariilor începe la același x indiferent de autor. */
body.customers .mui-document-page .contract-comment-avatar {
    width: 32px;
    height: 32px;
    border-radius: var(--pp-radius-pill);
    background: rgba(var(--pp-primary-rgb), .12);
    color: var(--pp-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 12px;
    letter-spacing: .02em;
}

/* Pagina standalone de document (contract/<id>/<hash>) nu e o pagină de
   portal: .mui-document-page are propriul container centrat (1280px +
   24px gutter), deci gutter-ele de portal ale containerului exterior
   (39px aici, 48px din '#content .container' al dashboard-refresh) NU
   trebuie să se aplice peste el. Anulate țintit, cu #content în selector
   ca să batem specificitatea cu ID. */
body.customers #content .container.container-customers-wide:has(.mui-document-page),
body.customers .container.container-customers-wide:has(.mui-document-page) {
    padding-left: 0;
    padding-right: 0;
}

/* Rândul Bootstrap dintre container și pagina de document și-ar scoate
   marginea -15px în afara viewport-ului odată cu padding-ul 0. */
body.customers .container.container-customers-wide:has(.mui-document-page) > .row {
    margin-left: 0;
    margin-right: 0;
}

/* Butoanele din appbar-ul documentului (doar cele neutre, btn-default —
   Semnează/Respinge rămân pe verde/roșu semantic): pastile albe cu
   hairline, sentence case în loc de uppercase, iconițe cu culoare de
   tip de fișier; 'Înapoi la tabloul principal' e diferențiat ca
   navigație, pe tenta soft a temei. */
body.customers .mui-document-page .contract-toolbar-actions .action-button.btn-default {
    height: 40px;
    padding: 0 16px;
    border-radius: var(--pp-radius-md);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-text);
    font-weight: 600;
    font-size: 13px;
    text-transform: none;
    letter-spacing: 0;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    box-shadow: var(--pp-shadow-sm);
    transition: border-color var(--pp-transition-fast), color var(--pp-transition-fast), background-color var(--pp-transition-fast);
}

body.customers .mui-document-page .contract-toolbar-actions .action-button.btn-default:hover,
body.customers .mui-document-page .contract-toolbar-actions .action-button.btn-default:focus {
    border-color: var(--pp-primary);
    color: var(--pp-primary);
    background: var(--pp-surface);
    outline: none;
}

body.customers .mui-document-page .contract-toolbar-actions .action-button .fa-file-word {
    color: var(--pp-primary);
}

body.customers .mui-document-page .contract-toolbar-actions .action-button .fa-file-pdf {
    color: var(--pp-danger);
}

/* !important necesar: ui-mui-refactor.css forțează pe .go-to-portal
   background/culori cu !important (excepție documentată, în afara
   secțiunii QUARANTINE de print — total 4/15). */
body.customers .mui-document-page .contract-toolbar-actions .action-button.go-to-portal {
    background: rgba(var(--pp-primary-rgb), .10) !important; /* overrides: ui-mui-refactor .go-to-portal background:transparent!important */
    border-color: transparent !important; /* overrides: idem, border cu !important */
    color: var(--pp-primary) !important; /* overrides: idem, color cu !important */
    box-shadow: none;
}

body.customers .mui-document-page .contract-toolbar-actions .action-button.go-to-portal:hover,
body.customers .mui-document-page .contract-toolbar-actions .action-button.go-to-portal:focus {
    background: rgba(var(--pp-primary-rgb), .16) !important; /* overrides: idem, starea hover */
    border-color: transparent !important;
    color: var(--pp-primary) !important;
}

/* Padding dublu în cardul documentului: panel_s.mui-card pune 24px și
   panel-body încă 24px (48px de alb cumulat). Cardul cedează padding-ul
   corpului — un singur strat curat. */
body.customers .mui-document-page .contract-left .panel_s.mui-card {
    padding: 0;
}

/* Chip-ul 'Valoare contract': fundal albastru-deschis literal (#e3f2fd,
   MUI blue-50) → tenta soft a violetului temei. */
body.customers .mui-document-page .contract-value .bold.mbot30 {
    background: var(--pp-primary-soft);
    color: var(--pp-text);
}

/* === C01: Base & typography === */
/* ==========================================================================
   C01: Base & typography
   ========================================================================== */
body.customers {
    background: var(--pp-bg);
    color: var(--pp-text);
    font-family: var(--pp-font-ui);
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

body.customers #wrapper,
body.customers #content {
    background: transparent;
    color: inherit;
}

/* FĂRĂ max-width pe .container-customers-wide: dashboard-refresh.css:218
   îl face intenționat full-width (max-width:100%, padding-x 48px,
   margin 0). Un cap aici (fișierul e ultimul în cascadă) lăsa
   conținutul necentrat pe jumătate de ecran pe monitoare late. */

/* Un singur gutter vertical: titlul de secțiune și cardurile se
   aliniază la stânga EXACT cu 'Bine ați revenit' din topbar (24px net;
   39px aici compensează decalajul intern de 9px al straturilor
   Bootstrap — măsurat pe live). */
/* #content în selector: dashboard-refresh are '#content .container'
   (specificitate cu ID, 1,1,0) care bate orice combinație de clase. */
body.customers #content .container.container-customers-wide,
body.customers .container.container-customers-wide {
    padding-left: 39px;
    padding-right: 39px;
}

body.customers h1,
body.customers h2,
body.customers h3,
body.customers h4,
body.customers h5,
body.customers h6 {
    color: var(--pp-text);
    font-weight: 600;
}

body.customers a {
    color: var(--pp-primary);
    transition: color var(--pp-transition-fast);
}

body.customers a:hover,
body.customers a:focus {
    color: var(--pp-primary);
    text-decoration: none;
}

body.customers ::selection {
    background: var(--pp-primary-soft);
    color: var(--pp-text);
}

/* Click-ul pe linkuri nu lasă chenar: outline-ul default BS3/UA
   (5px auto) dispare la mouse; ringul temei apare DOAR la navigarea
   cu tastatura (:focus-visible) — accesibilitatea rămâne. */
body.customers a:focus {
    outline: none;
}

body.customers a:focus-visible {
    outline: none;
    box-shadow: var(--pp-ring);
    border-radius: var(--pp-radius-sm);
}

/* Real markup: header de pagină folosit pe listări (invoices.php,
   tickets.php, home.php, profile.php, statement.php etc.) */
body.customers .ui-dash-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pp-space-3);
    margin-bottom: var(--pp-space-5);
}

body.customers .ui-dash-greeting {
    font-size: 22px;
    font-weight: 600;
    color: var(--pp-text);
    margin: 0;
}

body.customers .ui-dash-section-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--pp-text);
    margin: var(--pp-space-6) 0 var(--pp-space-4);
    display: flex;
    align-items: center;
    gap: var(--pp-space-2);
}

body.customers .ui-dash-section-title i {
    color: var(--pp-primary);
}

/* === C02: Buttons === */
/* ==========================================================================
   C02: Buttons
   ========================================================================== */
body.customers .btn {
    border-radius: var(--pp-radius-md);
    padding: 8px 16px;
    font-weight: 500;
    border: 1px solid transparent;
    transition: background-color var(--pp-transition), box-shadow var(--pp-transition), transform var(--pp-transition-fast), border-color var(--pp-transition);
}

body.customers .btn.btn-sm,
body.customers .btn-group-sm > .btn {
    padding: 6px 12px;
    border-radius: var(--pp-radius-sm);
}

body.customers .btn.btn-xs,
body.customers .btn-group-xs > .btn {
    padding: 4px 10px;
    font-size: 12px;
    border-radius: var(--pp-radius-sm);
}

body.customers .btn.btn-block {
    width: 100%;
}

body.customers .btn:active {
    transform: translateY(1px);
}

body.customers .btn:focus-visible {
    outline: none;
    box-shadow: var(--pp-ring);
}

body.customers .btn.disabled,
body.customers .btn[disabled],
body.customers fieldset[disabled] .btn {
    opacity: .55;
    cursor: not-allowed;
    transform: none;
}

body.customers .btn-default,
body.customers .ui-dash-btn-secondary,
body.customers #dashboard-refresh {
    background: var(--pp-surface);
    border-color: var(--pp-border);
    color: var(--pp-text);
}

body.customers .btn-default:hover,
body.customers .ui-dash-btn-secondary:hover {
    background: var(--pp-bg-subtle);
    box-shadow: var(--pp-shadow-hover);
}

body.customers .btn-primary,
body.customers .btn-filter.active,
body.customers .ui-dash-filters__btn {
    background: var(--pp-primary);
    border-color: var(--pp-primary);
    color: var(--pp-surface);
}

body.customers .btn-primary:hover,
body.customers .btn-primary:focus,
body.customers .ui-dash-filters__btn:hover {
    background: var(--pp-primary);
    box-shadow: var(--pp-shadow-hover);
    filter: brightness(.92);
}

body.customers .btn-success {
    background: var(--pp-success);
    border-color: var(--pp-success);
    color: var(--pp-surface);
}

body.customers .btn-success:hover {
    filter: brightness(.92);
    box-shadow: var(--pp-shadow-hover);
}

body.customers .btn-danger {
    background: var(--pp-danger);
    border-color: var(--pp-danger);
    color: var(--pp-surface);
}

body.customers .btn-danger:hover {
    filter: brightness(.92);
    box-shadow: var(--pp-shadow-hover);
}

body.customers .btn-secondary {
    background: var(--pp-secondary);
    border-color: var(--pp-secondary);
    color: var(--pp-surface);
}

body.customers .btn-secondary:hover {
    filter: brightness(.92);
}

body.customers .btn-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
}

body.customers .btn-group .btn {
    border-radius: var(--pp-radius-md);
}

body.customers .btn-filter {
    background: var(--pp-surface);
    border-color: var(--pp-border);
    color: var(--pp-text-muted);
}

body.customers .btn-filter:hover {
    background: var(--pp-bg-subtle);
    color: var(--pp-text);
}

body.customers .action-button {
    border-radius: var(--pp-radius-md);
}

/* === C03: Cards & panels === */
/* ==========================================================================
   C03: Cards & panels
   Anchors spec: .card/.card-title/.card-value/.card-label/.card-icon/
   .card--area/.panel_s/.panel-body/.panel-heading
   Acoperire suplimentară — clasele REALE găsite în view-uri live
   (home.php, invoices.php, tickets.php, portal_dashboard_section.php,
   invoices_stats.php): .ui-dash-card, .ui-dash-card-title, .dash-card,
   .dash-kpi, .ui-stat-card, .ui-dash-snapshot-card, .ui-dash-chart-card,
   .ui-dash-widget — sunt aceeași componentă „card" din generații
   succesive de markup (decizie logată în decisions.md).
   ========================================================================== */
body.customers .card,
body.customers .panel_s,
body.customers .ui-dash-card,
body.customers .ui-dash-chart-card,
body.customers .ui-dash-widget,
body.customers .dash-card {
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    box-shadow: var(--pp-shadow-card);
    padding: var(--pp-space-5);
    margin-bottom: var(--pp-space-5);
}

body.customers .panel.panel-primary.dashboard-panel {
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    box-shadow: var(--pp-shadow-card);
    overflow: hidden;
}

body.customers .panel.panel-primary .panel-heading {
    background: var(--pp-bg-subtle);
    border-bottom: 1px solid var(--pp-border);
}

body.customers .panel.panel-primary .panel-title a {
    color: var(--pp-text);
    font-weight: 600;
}

body.customers a.card:hover,
body.customers a.ui-dash-card:hover,
body.customers a.dash-card:hover,
body.customers a.ui-dash-snapshot-card:hover {
    box-shadow: var(--pp-shadow-hover);
    border-color: var(--pp-border);
}

body.customers .card-title,
body.customers .ui-dash-card-title,
body.customers .kb-section-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--pp-text);
    margin: 0 0 var(--pp-space-4);
}

body.customers .card-value,
body.customers .dash-card-value .kpi-value,
body.customers .ui-stat-card__value {
    font-size: 28px;
    font-weight: 600;
    color: var(--pp-text);
}

body.customers .card-label,
body.customers .dash-card-label,
body.customers .ui-stat-card__label {
    color: var(--pp-text-muted);
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: .04em;
}

body.customers .card-icon,
body.customers .dash-card-icon {
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--pp-radius-md);
    background: rgba(var(--pp-primary-rgb), .10);
    color: var(--pp-primary);
    font-size: 16px;
}

/* Dashboard KPI snapshot — treatment ceva mai marcat decât un card
   simplu de listă (ierarhie: KPI-urile sunt punctul de intrare vizual
   al dashboard-ului, nu doar un wrapper de conținut). */
body.customers .ui-dash-snapshot-card {
    display: flex;
    align-items: flex-start;
    gap: var(--pp-space-3);
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    padding: var(--pp-space-4);
    box-shadow: var(--pp-shadow-card);
    transition: box-shadow var(--pp-transition), transform var(--pp-transition);
    color: var(--pp-text);
}

body.customers .ui-dash-snapshot-card:hover {
    box-shadow: var(--pp-shadow-hover);
    transform: translateY(-1px);
    color: var(--pp-text);
}

body.customers .ui-dash-snapshot-card__icon {
    width: 36px;
    height: 36px;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--pp-radius-md);
    background: rgba(var(--pp-primary-rgb), .10);
    color: var(--pp-primary);
}

body.customers .ui-dash-snapshot-card__value {
    font-size: 20px;
    font-weight: 600;
    color: var(--pp-text);
    display: block;
}

body.customers .ui-dash-snapshot-card__label {
    font-size: 12px;
    color: var(--pp-text-muted);
    display: block;
}

body.customers .ui-dash-snapshot-card__meta {
    font-size: 11px;
    color: var(--pp-text-faint);
    margin-top: var(--pp-space-1);
}

body.customers .ui-dash-snapshot-card__trend.positive {
    color: var(--pp-success);
}

body.customers .ui-dash-snapshot-card__trend.negative {
    color: var(--pp-danger);
}

body.customers .dash-kpi-warning .dash-card-icon {
    background: rgba(var(--pp-warning-rgb), .12);
    color: var(--pp-warning);
}

body.customers .dash-kpi-danger .dash-card-icon {
    background: rgba(var(--pp-danger-rgb), .12);
    color: var(--pp-danger);
}

/* invoices_stats.php — .ui-stat-card family */
body.customers .ui-stat-card {
    display: flex;
    align-items: center;
    gap: var(--pp-space-3);
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    padding: var(--pp-space-4);
    position: relative;
    overflow: hidden;
    color: var(--pp-text);
    transition: box-shadow var(--pp-transition);
}

body.customers .ui-stat-card:hover {
    box-shadow: var(--pp-shadow-hover);
    color: var(--pp-text);
}

body.customers .ui-stat-card__accent {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: var(--pp-secondary);
}

body.customers .ui-stat-card-paid .ui-stat-card__accent {
    background: var(--pp-success);
}

body.customers .ui-stat-card-overdue .ui-stat-card__accent {
    background: var(--pp-danger);
}

body.customers .ui-stat-card-unpaid .ui-stat-card__accent,
body.customers .ui-stat-card-partially .ui-stat-card__accent {
    background: var(--pp-warning);
}

body.customers .ui-stat-card__icon {
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--pp-radius-md);
    background: var(--pp-bg-subtle);
    color: var(--pp-text-muted);
}

body.customers .ui-stat-card__sub {
    font-size: 12px;
    color: var(--pp-text-faint);
}

body.customers .ui-stat-card__progress {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 3px;
    background: var(--pp-bg-muted);
}

body.customers .ui-stat-card__progress-fill {
    display: block;
    height: 100%;
    background: var(--pp-primary);
}

/* Snapshot / KPI grid spacing */
body.customers .ui-dash-snapshot,
body.customers .ui-dash-kpi-row,
body.customers .dashboard-kpi-row {
    margin-bottom: var(--pp-space-2);
}

body.customers .ui-dash-action-center {
    background: var(--pp-primary-soft);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    padding: var(--pp-space-4) var(--pp-space-5);
    margin-bottom: var(--pp-space-5);
}

body.customers .ui-dash-action-center__title {
    font-size: 14px;
    font-weight: 600;
    color: var(--pp-text);
    margin: 0 0 var(--pp-space-3);
}

body.customers .ui-dash-action-center__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--pp-space-1);
}

body.customers .ui-dash-action-center__link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-md);
    padding: var(--pp-space-3) var(--pp-space-4);
    color: var(--pp-text);
    transition: box-shadow var(--pp-transition), border-color var(--pp-transition);
}

body.customers .ui-dash-action-center__link:hover {
    box-shadow: var(--pp-shadow-sm);
    border-color: var(--pp-primary);
    color: var(--pp-text);
}

body.customers .ui-dash-action-center__meta {
    color: var(--pp-text-muted);
    font-size: 12px;
    margin-left: var(--pp-space-2);
}

body.customers .ui-dash-action-center__arrow {
    color: var(--pp-text-faint);
}

body.customers .ui-dash-widget__title {
    font-size: 14px;
    font-weight: 600;
    color: var(--pp-text);
    margin: 0 0 var(--pp-space-3);
}

body.customers .ui-dash-widget__list {
    list-style: none;
    margin: 0;
    padding: 0;
}

body.customers .ui-dash-widget__item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--pp-space-2) 0;
    border-bottom: 1px solid var(--pp-border);
    font-size: 13px;
}

body.customers .ui-dash-widget__item:last-child {
    border-bottom: none;
}

body.customers .ui-dash-widget__item span {
    color: var(--pp-text-faint);
    font-size: 12px;
}

/* === C04: Tables === */
/* ==========================================================================
   C04: Tables
   ========================================================================== */
/* .table-responsive NU se stilizează și NU primește overflow aici:
   1) overflow (hidden sau x:auto) taie dropdown-urile de acțiuni din
      rânduri (anulare abonament) — findings HIGH, adversarial cycles 1-2;
   2) DataTables poate înfășura .dt-table într-un .table-responsive
      propriu la runtime (common.js:1036; scrollResponsive e 0 implicit
      — common.js:1021 — dar forțat true pe paginile de proiecte,
      clients.js:333, cu workaround existent pt dropdown-uri) —
      stilizarea lui ar produce card-în-card acolo unde apare;
   3) wrapperele .table-responsive din documentele HTML (invoicehtml
      etc.) rămân neatinse — amendament A3.
   Wrapperele temei (.ui-dash-table-wrap/.table-wrap) NU primesc nici
   ele ramă proprie: stau deja în interiorul unui card (.ui-dash-card /
   .panel_s) și dubla încadrare a fost respinsă explicit de client. */
body.customers .ui-dash-table-wrap,
body.customers .table-wrap {
    border: 0;
    border-radius: 0;
    background: transparent;
    /* Scroll orizontal DOAR aici e sigur: view-urile cu aceste wrappere
       nu au dropdown-uri de acțiuni în rânduri (singurul care are —
       subscriptions.php — nu folosește wrapper, deci nu e tăiat).
       Tabelele late (assets: 10 coloane) derulează în card în loc să
       iasă din el. */
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    scrollbar-color: var(--pp-border) transparent;
}

body.customers .ui-dash-table-header,
body.customers .table-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--pp-space-4) var(--pp-space-5) 0;
}

/* Tabel în stilul ADMINULUI (style.min.css §TABLES, replicat 1:1 la
   cererea clientului): tabelul își poartă singur rama rotunjită,
   separatoarele sunt dashed, celulele au un wash fin, header-ul e
   13px fără uppercase, hover-ul e violet 6%. */
body.customers .table {
    width: 100%;
    margin-bottom: 0;
    color: var(--pp-text);
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-md);
    border-collapse: separate;
    border-spacing: 0;
}

body.customers .table > thead > tr > th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: .02em;
    border-top: none;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
    padding: 10px;
    vertical-align: middle;
}

body.customers .table > thead > tr > th:last-child {
    border-right: none;
}

body.customers .table > tbody > tr > td {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 14px;
    padding: 10px 10px 5px;
    border-top: none;
    border-bottom: 1px dashed var(--pp-dash);
    vertical-align: middle;
}

body.customers .table > tbody > tr:last-child > td {
    border-bottom: none;
}

body.customers .table > thead > tr:first-child > th:first-child {
    border-top-left-radius: var(--pp-radius-md);
}

body.customers .table > thead > tr:first-child > th:last-child {
    border-top-right-radius: var(--pp-radius-md);
}

body.customers .table > tbody > tr:last-child > td:first-child {
    border-bottom-left-radius: var(--pp-radius-md);
}

body.customers .table > tbody > tr:last-child > td:last-child {
    border-bottom-right-radius: var(--pp-radius-md);
}

body.customers table.dataTable tbody tr:hover td,
body.customers .table-hover > tbody > tr:hover > td {
    background: rgba(var(--pp-primary-rgb), .06);
}

/* Documentele standalone (invoice/estimate pe /id/hash —
   .mui-document-page) păstrează rețeta de tabel a portalului (wash +
   dashed + ramă rotunjită), cu corecții punctuale:
   1) tabelul de produse NU are <thead> — header-ul e <th> direct în
      <tbody>, deci nu era prins de rețeta de mai sus (rămânea alb) și
      moștenea border-top-ul Bootstrap („divider-ul" lipit de rama de
      sus). Îi dăm aceeași rețetă ca unui thead-th.
   2) tabelele fără <thead> își iau colțurile de sus rotunjite din
      primul rând (th la produse, td la totaluri).
   3) blocul de totaluri respiră față de tabelul de produse. */
body.customers .mui-document-page .table > tbody > tr > th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: .02em;
    padding: 10px;
    border-top: 0;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
    vertical-align: middle;
}

body.customers .mui-document-page .table > tbody > tr > th:last-child {
    border-right: 0;
}

body.customers .mui-document-page .table > tbody > tr:first-child > th:first-child,
body.customers .mui-document-page .table > tbody > tr:first-child > td:first-child {
    border-top-left-radius: var(--pp-radius-md);
}

body.customers .mui-document-page .table > tbody > tr:first-child > th:last-child,
body.customers .mui-document-page .table > tbody > tr:first-child > td:last-child {
    border-top-right-radius: var(--pp-radius-md);
}

body.customers .mui-document-page .table.text-right {
    margin-top: var(--pp-space-4);
}

/* ui-mui-refactor dă gutter de 12px doar coloanelor .col-md-12 din
   rândurile documentului; coloana totalurilor (col-md-6 offset-6)
   rămânea pe cei 15px Bootstrap și părea trasă spre centru cu 3px.
   Primește același gutter ca să se alinieze perfect cu tabelul. */
body.customers .mui-document-page .row > .col-md-6.col-md-offset-6 {
    padding-left: 12px;
    padding-right: 12px;
}

/* ===== Extras de cont (clients/statement) =====
   dashboard-refresh §12 vine cu albastru hardcodat (#eef6fa header,
   #1e3a5f text, #1976d2 linkuri) la specificitate 0,3,2 — îl aducem la
   tokenii temei cu selectori 0,3,3, în rețeta admin de tabel. */
body.customers .statement-page .table-statement thead th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
}

body.customers .statement-page .table-statement thead th:last-child {
    border-right: none;
}

body.customers .statement-page .table-statement tbody td {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 14px;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
}

/* Ultimul rând din tbody nu dublează linia cu border-top-ul tfoot-ului. */
body.customers .statement-page .table-statement tbody tr:last-child td {
    border-bottom: none;
}

body.customers .statement-page .table-statement tbody tr:hover {
    background: transparent;
}

body.customers .statement-page .table-statement tbody tr:hover td {
    background: rgba(var(--pp-primary-rgb), .06);
}

/* Totalul din tfoot preia washul și își asumă colțurile de jos ale
   ramei rotunjite (rețeta generică le dă doar pe tbody:last-child). */
body.customers .statement-page .table-statement .statement_tfoot td {
    background: var(--pp-cell-wash);
    border-top: 2px solid var(--pp-border);
    font-weight: 600;
}

body.customers .statement-page .table-statement .statement_tfoot tr:last-child td:first-child {
    border-bottom-left-radius: var(--pp-radius-md);
}

body.customers .statement-page .table-statement .statement_tfoot tr:last-child td:last-child {
    border-bottom-right-radius: var(--pp-radius-md);
}

body.customers .statement-page .table-statement .statement-link {
    color: var(--pp-primary);
    font-weight: 600;
}

body.customers .statement-page .table-statement .statement-link:hover {
    color: var(--pp-primary-hover);
}

/* Sumarul de cont din dreapta: separatoare pe același dashed ca tema. */
body.customers .statement-page .table-statement-summary td {
    border-bottom: 1px dashed var(--pp-dash);
}

/* Rândul „Sold Datorat" din tfoot intră și el în rețeta colorată
   (rețeta generică dă wash doar pe tbody) și preia colțurile de jos
   ale ramei rotunjite. */
body.customers .statement-page .table-statement-summary tfoot td {
    border-bottom: none;
    border-top: 1px dashed var(--pp-dash);
    background: var(--pp-cell-wash);
}

body.customers .statement-page .table-statement-summary tfoot tr:last-child td:first-child {
    border-bottom-left-radius: var(--pp-radius-md);
}

body.customers .statement-page .table-statement-summary tfoot tr:last-child td:last-child {
    border-bottom-right-radius: var(--pp-radius-md);
}

/* Sumarul respiră față de textul și tabelul de tranzacții de sub el. */
body.customers .statement-page .table-statement-summary {
    margin-bottom: var(--pp-space-5);
}

/* Tipărește / Vezi în format PDF: aceeași rețetă ca appbar-ul
   documentelor — pastile albe cu hairline, iconițe pe culoarea
   acțiunii, hover violet cu lift discret. */
body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary {
    height: 40px;
    padding: 0 18px;
    gap: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--pp-text);
    border-radius: var(--pp-radius-md);
    box-shadow: var(--pp-shadow-sm);
    transition: border-color var(--pp-transition-fast), color var(--pp-transition-fast), box-shadow var(--pp-transition-fast), transform var(--pp-transition-fast);
}

/* Iconițele au deja .mright5 din markup; gap-ul preia spațierea. */
body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary i {
    margin-right: 0;
}

body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary:hover,
body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary:focus {
    background: var(--pp-surface);
    border-color: var(--pp-primary);
    color: var(--pp-primary);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .12);
    transform: translateY(-1px);
    text-decoration: none;
}

body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary .fa-print {
    color: var(--pp-primary);
}

body.customers .statement-page .ui-dash-header .ui-dash-btn-secondary .fa-file-pdf {
    color: var(--pp-danger);
}

/* Coloana selectului de perioadă e col-lg-2/col-xl-1 — prea îngustă,
   trunchia „Toată perioada". Lățime minimă în loc de !important pe
   width-ul inline pus de bootstrap-select. */
body.customers .statement-page .ui-dash-card-statement-filters .col-md-3 {
    min-width: 260px;
}

/* ===== Selectpicker (bootstrap-select), corecții globale de tokeni:
   focusul/hoverul legacy din dashboard-refresh erau pe albastru
   hardcodat rgba(37,99,235,…) — trecute pe violetul temei, iar meniul
   intră în limbajul de card al portalului. */
body.customers .dashboard-refresh .bootstrap-select .btn.dropdown-toggle {
    min-height: 40px;
    padding: 8px 36px 8px 14px;
    font-size: 14px;
    border-radius: var(--pp-radius-sm);
}

/* !important necesar: style.min.css pune pe .bootstrap-select .btn-default
   `border: 1px solid #bfcbd9 !important`, iar pe .open `border cyan
   #03a9f4 !important` — excepții documentate, anulabile doar tot cu
   !important. Valabil pe tot portalul, nu doar în .dashboard-refresh. */
body.customers .bootstrap-select .btn.dropdown-toggle {
    border: 1px solid var(--pp-border) !important; /* overrides: style.min.css border #bfcbd9 !important */
    background: #fff !important; /* overrides: style.min.css background !important (identic, dar fixăm cascada) */
}

body.customers .bootstrap-select.open .btn.dropdown-toggle,
body.customers .bootstrap-select .btn.dropdown-toggle:focus {
    border-color: var(--pp-primary) !important; /* overrides: style.min.css .open border cyan !important */
    box-shadow: 0 0 0 3px rgba(var(--pp-primary-rgb), .15);
}

/* !important necesar: bootstrap-select.css pune pe :focus
   `outline: 5px auto -webkit-focus-ring-color !important` (inelul cyan
   de sistem) — excepție documentată, se poate anula doar tot cu
   !important. Inelul violet vine din box-shadow-ul de mai sus. */
body.customers .bootstrap-select .dropdown-toggle:focus {
    outline: none !important; /* overrides: bootstrap-select.css outline !important */
}

/* bootstrap-select copiază clasele selectului pe wrapper-ul său, deci un
   select cu .form-control produce un wrapper care primește și el ramă și
   padding de input: „chenar în chenar" în jurul toggle-ului (limbă la
   detalii precomandă, coloane la comenzi, categorie în catalog…).
   Wrapper-ul devine invizibil peste tot — rama o ține doar toggle-ul. */
body.customers .bootstrap-select.form-control {
    border: 0;
    padding: 0;
    background: transparent;
    height: auto;
    box-shadow: none;
}

/* !important necesar: newStyle.css pune pe .dropdown-menu > li > a
   `color: #6c757d !important` — opțiunile selectate (și bifa lor, care
   moștenește culoarea) rămâneau gri pe wash-ul violet. */
body.customers .bootstrap-select .dropdown-menu > .active > a,
body.customers .bootstrap-select .dropdown-menu > .selected > a {
    color: var(--pp-primary) !important; /* overrides: newStyle.css color !important */
}

body.customers .dashboard-refresh .bootstrap-select .dropdown-menu {
    border: 0;
    border-radius: var(--pp-radius-md);
    box-shadow: 0 8px 24px rgba(11, 15, 25, .12);
    padding: 6px;
}

body.customers .dashboard-refresh .bootstrap-select .dropdown-menu li a {
    font-size: 14px;
    padding: 8px 12px;
    border-radius: var(--pp-radius-sm);
}

/* Un respiro mic între opțiuni. */
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu li + li {
    margin-top: 2px;
}

body.customers .dashboard-refresh .bootstrap-select .dropdown-menu li a:hover {
    background: rgba(var(--pp-primary-rgb), .08);
    color: var(--pp-primary);
}

/* Opțiunea selectată: fără bara violet din stânga (newStyle.css pune
   border-left 3px + background white cu !important pe .active>a — de
   aici și singurul !important de mai jos, documentat), doar un wash
   primary discret. */
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .active > a,
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .selected > a,
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .active > a:hover,
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .selected > a:hover,
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .active > a:focus,
body.customers .dashboard-refresh .bootstrap-select .dropdown-menu > .selected > a:focus {
    border-left: 0;
    background: rgba(var(--pp-primary-rgb), .10) !important; /* overrides: newStyle.css .dropdown-menu>.active>a background:white!important */
    color: var(--pp-primary);
}

/* ===== XDSoft datetimepicker (input.datepicker, ex. „Data expirare" la
   precomenzi) — default-urile lui sunt albastru info #33aaff pe data
   selectată și hover portocaliu #ff8000 !important; totul trece pe
   violetul temei, iar popup-ul intră în limbajul de card al portalului. */
body.customers .xdsoft_datetimepicker {
    border: 0;
    border-radius: var(--pp-radius-md);
    box-shadow: 0 8px 24px rgba(11, 15, 25, .12);
    padding: 8px;
}

body.customers .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
body.customers .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
body.customers .xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_current {
    background: var(--pp-primary);
    box-shadow: none;
    color: #fff;
}

body.customers .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
    color: var(--pp-primary);
    font-weight: 700;
}

/* Azi + selectată în același timp (cazul tipic la deschidere): regula de
   „azi" de mai sus vine mai târziu decât cea de „selectată" și, la
   specificitate egală, i-ar face cifra violet pe fundal violet. */
body.customers .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today.xdsoft_current {
    color: #fff;
}

/* !important necesar: jquery.datetimepicker.css pune hoverul
   `background: #ff8000 !important; color: #fff !important`. */
body.customers .xdsoft_datetimepicker .xdsoft_calendar td:hover,
body.customers .xdsoft_datetimepicker .xdsoft_time_box > div > div:hover {
    background: rgba(var(--pp-primary-rgb), .12) !important; /* overrides: jquery.datetimepicker.css #ff8000 !important */
    color: var(--pp-text) !important; /* overrides: jquery.datetimepicker.css color #fff !important */
}

/* Data selectată rămâne lizibilă și sub hover: violet plin, text alb. */
body.customers .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current:hover,
body.customers .xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_current:hover {
    background: var(--pp-primary) !important; /* overrides: idem */
    color: #fff !important; /* overrides: idem */
}

/* ===== Livrări (warehouse_clients/shipments) =====
   dashboard-refresh §13 are aceleași albastre hardcodate ca §12
   (#eef6fa header, #1e3a5f text, #1976d2 linkuri) plus badge-uri de
   status cu culori proprii — totul adus la rețeta admin pe tokeni. */
body.customers .shipments-page .table-shipments thead th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
}

body.customers .shipments-page .table-shipments thead th:last-child {
    border-right: none;
}

body.customers .shipments-page .table-shipments tbody td {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 14px;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
}

body.customers .shipments-page .table-shipments tbody tr:last-child td {
    border-bottom: none;
}

body.customers .shipments-page .table-shipments tbody tr:hover {
    background: transparent;
}

body.customers .shipments-page .table-shipments tbody tr:hover td {
    background: rgba(var(--pp-primary-rgb), .06);
}

body.customers .shipments-page .table-shipments .shipment-number {
    color: var(--pp-primary);
    font-weight: 600;
}

body.customers .shipments-page .table-shipments .shipment-number:hover {
    color: var(--pp-primary-hover);
}

/* Textele de status sunt lungi (VERIFICARE COMANDĂ) și cu nowrap +
   cei 18px orizontali ai rețetei s-status ieșeau din celulă peste
   coloana Aviz — padding orizontal mai strâns doar aici. */
body.customers .shipments-page .table-shipments .label {
    padding: 6px 10px;
    white-space: nowrap;
}

/* Badge-urile de status din §13 (culori proprii hardcodate, 0,5,0)
   intră în rețeta admin de statusuri; selectorii au 0,5,1. */
body.customers .shipments-page .table-shipments .label.label-success {
    background: rgba(var(--pp-success-rgb), .1);
    color: var(--pp-success);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .shipments-page .table-shipments .label.label-danger {
    background: rgba(var(--pp-danger-rgb), .08);
    color: var(--pp-danger);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .shipments-page .table-shipments .label.label-warning {
    background: rgba(var(--pp-warning-rgb), .12);
    color: var(--pp-warning);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .shipments-page .table-shipments .label.label-info {
    background: rgba(var(--pp-info-rgb), .1);
    color: var(--pp-info);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .shipments-page .table-shipments .label.label-primary {
    background: rgba(var(--pp-primary-rgb), .1);
    color: var(--pp-primary);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .shipments-page .table-shipments .label.label-default {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

/* „Comandă confirmată" nu e o alertă: warehouse_helper o mapează pe
   label-danger (la fel și în admin), dar în portal o afișăm neutru
   (verdele e rezervat livrării) prin clasa de status specifică, fără
   să atingem helperul comun cu admin-ul. Vine după override-ul de
   label-danger, la aceeași specificitate, deci câștigă prin ordine. */
body.customers .shipments-page .table-shipments .label.invoice-status-confirmed_order {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
}

/* ===== Detaliu livrare (shipment_detail / shipment_detail_hash) =====
   dashboard-refresh §13b vine cu aceleași albastre hardcodate pe
   tabelul de avize și pe bara de status (selectori 0,4,2 / 0,3,1) —
   aduse la rețeta admin cu 0,4,3, respectiv prin ordine. */
body.customers .shipment-detail-page .shipment-tab-content .table thead th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
}

body.customers .shipment-detail-page .shipment-tab-content .table thead th:last-child {
    border-right: none;
}

body.customers .shipment-detail-page .shipment-tab-content .table tbody td {
    font-size: 14px;
    padding: 10px;
    border-bottom: 1px dashed var(--pp-dash);
}

body.customers .shipment-detail-page .shipment-tab-content .table tbody tr:hover {
    background: transparent;
}

body.customers .shipment-detail-page .shipment-tab-content .table tbody tr:hover td {
    background: rgba(var(--pp-primary-rgb), .06);
}

body.customers .shipment-detail-page .shipment-tab-content .table a {
    color: var(--pp-primary);
    font-weight: 600;
}

body.customers .shipment-detail-page .shipment-tab-content .table a:hover {
    color: var(--pp-primary-hover);
}

body.customers .shipment-detail-page .shipment-status-bar {
    background: var(--pp-bg-muted);
}

/* Statusurile de livrare emit clase diferite pentru ACELAȘI status în
   funcție de context: lista cade pe fallback-ul „info" din
   get_delivery_status_by_id (status nesetat), detaliul pe clasa reală
   „primary" din delivery_list_status — de aici cyan vs violet pentru
   „Gata de ambalat". Normalizăm după atributul task-status-table emis
   de helper: aceeași culoare oriunde apare statusul. Specificitate
   0,5,1, la egalitate cu override-urile din listă — câștigă ordinea. */
body.customers .dashboard-refresh .table .label[task-status-table="ready_for_packing"],
body.customers .dashboard-refresh .table .label[task-status-table=""],
body.customers .dashboard-refresh .table .label[task-status-table="0"] {
    background: rgba(var(--pp-primary-rgb), .1);
    color: var(--pp-primary);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .dashboard-refresh .table .label[task-status-table="ready_to_deliver"],
body.customers .dashboard-refresh .table .label[task-status-table="delivery_in_progress"] {
    background: rgba(var(--pp-info-rgb), .1);
    color: var(--pp-info);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .dashboard-refresh .table .label[task-status-table="delivered"] {
    background: rgba(var(--pp-success-rgb), .1);
    color: var(--pp-success);
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

/* ===== Rezervare flotă: statusurile pe rețeta admin — helperul emite
   fleet-status-<id> în portal (adminul rămâne pe culorile lui inline).
   Semantic: nou=info, aprobat=primary, procesare=warning,
   finalizat=success, respins=danger, anulat=neutru. */
body.customers .label[class*="fleet-status-"] {
    display: inline-block;
    padding: 6px 12px;
    border: 0;
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .label.fleet-status-new {
    background: rgba(var(--pp-info-rgb), .1);
    color: var(--pp-info);
}

body.customers .label.fleet-status-approved {
    background: rgba(var(--pp-primary-rgb), .1);
    color: var(--pp-primary);
}

body.customers .label.fleet-status-processing {
    background: rgba(var(--pp-warning-rgb), .12);
    color: var(--pp-warning);
}

body.customers .label.fleet-status-complete {
    background: rgba(var(--pp-success-rgb), .1);
    color: var(--pp-success);
}

body.customers .label.fleet-status-rejected {
    background: rgba(var(--pp-danger-rgb), .08);
    color: var(--pp-danger);
}

body.customers .label.fleet-status-cancelled {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
}

/* Rândul de Total din tfoot (rândurile de date au fost mutate în tbody,
   unde primesc rețeta generică). */
body.customers .fleet-bookings-page .table-booking tfoot td {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    border-top: 2px solid var(--pp-border);
    border-bottom: 0;
    font-weight: 600;
    font-size: 14px;
    padding: 10px;
}

body.customers .fleet-bookings-page .table-booking tfoot tr:last-child td:first-child {
    border-bottom-left-radius: var(--pp-radius-md);
}

body.customers .fleet-bookings-page .table-booking tfoot tr:last-child td:last-child {
    border-bottom-right-radius: var(--pp-radius-md);
}

/* ===== Proiecte: statusurile standard (1-5) pe rețeta admin de
   statusuri — view-ul emite project-status-<id> în loc de culorile
   inline din configurarea de admin (păstrate doar pt statusuri
   custom). 1=Neînceput, 2=În execuție, 3=În așteptare, 4=Anulat,
   5=Finalizat. */
body.customers .projects-page .label.project-status-label {
    display: inline-block;
    padding: 6px 12px;
    border: 0;
    border-radius: var(--pp-radius-sm);
    font-weight: 500;
    font-size: 12px;
}

body.customers .projects-page .label.project-status-1 {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
}

body.customers .projects-page .label.project-status-2 {
    background: rgba(var(--pp-info-rgb), .1);
    color: var(--pp-info);
}

body.customers .projects-page .label.project-status-3 {
    background: rgba(var(--pp-warning-rgb), .12);
    color: var(--pp-warning);
}

body.customers .projects-page .label.project-status-4 {
    background: rgba(var(--pp-danger-rgb), .08);
    color: var(--pp-danger);
}

body.customers .projects-page .label.project-status-5 {
    background: rgba(var(--pp-success-rgb), .1);
    color: var(--pp-success);
}

/* ===== Tichete + Rezervare flotă: butonul de acțiune din header pe
   aceeași rețetă ca Tipărește / Vezi în format PDF de pe Extras cont —
   pastilă albă cu hairline, icon violet, hover violet cu lift. */
body.customers .fleet-bookings-page .ui-dash-header .ui-dash-btn-secondary,
body.customers .tickets-page .ui-dash-header .ui-dash-btn-secondary {
    height: 40px;
    padding: 0 18px;
    gap: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--pp-text);
    border-radius: var(--pp-radius-md);
    box-shadow: var(--pp-shadow-sm);
    transition: border-color var(--pp-transition-fast), color var(--pp-transition-fast), box-shadow var(--pp-transition-fast), transform var(--pp-transition-fast);
}

body.customers .fleet-bookings-page .ui-dash-header .ui-dash-btn-secondary i,
body.customers .tickets-page .ui-dash-header .ui-dash-btn-secondary i {
    margin-right: 0;
    color: var(--pp-primary);
}

body.customers .fleet-bookings-page .ui-dash-header .ui-dash-btn-secondary:hover,
body.customers .fleet-bookings-page .ui-dash-header .ui-dash-btn-secondary:focus,
body.customers .tickets-page .ui-dash-header .ui-dash-btn-secondary:hover,
body.customers .tickets-page .ui-dash-header .ui-dash-btn-secondary:focus {
    background: var(--pp-surface);
    border-color: var(--pp-primary);
    color: var(--pp-primary);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .12);
    transform: translateY(-1px);
    text-decoration: none;
}

/* Card care conține direct un table-wrap nu mai are nevoie de padding
   dedesubt — table-wrap-ul e deja rotunjit și cu border propriu. */
body.customers .ui-dash-card-invoices-table,
body.customers .ui-dash-card-tickets-table,
body.customers .ui-dash-card-estimates-table,
body.customers .ui-dash-card-contracts-table,
body.customers .ui-dash-card-projects-table {
    padding-bottom: var(--pp-space-4);
}

/* DataTables — controale generate din JS (search, length, info) */
body.customers .dataTables_wrapper {
    color: var(--pp-text);
}

body.customers .dataTables_filter input,
body.customers .dataTables_length select {
    height: 38px;
    padding: 8px 14px;
    border-radius: var(--pp-radius-sm);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-text);
}

body.customers .dataTables_filter input:focus,
body.customers .dataTables_length select:focus {
    outline: none;
    border-color: var(--pp-primary);
    box-shadow: var(--pp-ring);
}

body.customers .dataTables_info {
    color: var(--pp-text-muted);
    font-size: 13px;
    padding: 0;
    margin: 0;
}

body.customers .dataTables_filter,
body.customers .dataTables_length {
    padding: 0;
}

/* Layout-ul wrapper-ului DataTables: search sus-dreapta, apoi tabelul
   full-width, iar footer-ul pe UN rând — items-per-page STÂNGA, info
   („Afișare de la...") pe MIJLOC, paginarea DREAPTA. Rândurile
   Bootstrap generate de DataTables devin transparente (display:
   contents) și zonele se ordonează cu flex + :has(); fără :has(),
   layout-ul rămâne cel din markup (degradare grațioasă). */
body.customers .dataTables_wrapper {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}

/* Aliniere verticală în footer: label-urile generate de DataTables
   (length/filter) moșteneau margin-bottom din regula globală de forms
   și împingeau selectul în sus față de info/paginare. */
body.customers .dataTables_wrapper label {
    margin: 0;
    display: inline-flex;
    align-items: center;
    gap: var(--pp-space-2);
    font-weight: 500;
}

body.customers .dataTables_wrapper > .row {
    display: contents;
}

body.customers .dataTables_wrapper > .row > div:empty {
    display: none;
}

body.customers .dataTables_wrapper > .row > div:has(.dataTables_filter),
body.customers .dataTables_wrapper > .dataTables_filter {
    order: 1;
    width: auto;
    margin-left: auto;
    float: none;
    padding: var(--pp-space-3) 0;
}

body.customers .dataTables_wrapper > .table-responsive,
body.customers .dataTables_wrapper > table.dataTable {
    order: 2;
    flex: 1 1 100%;
    max-width: 100%;
}

body.customers .dataTables_wrapper > .row > div:has(.dataTables_length),
body.customers .dataTables_wrapper > .dataTables_length {
    order: 3;
    flex: 1 1 0;
    min-width: max-content;
    width: auto;
    display: flex;
    justify-content: flex-start;
    float: none;
    padding: var(--pp-space-3) 0;
}

body.customers .dataTables_wrapper > .row > div:has(.dataTables_info),
body.customers .dataTables_wrapper > .dataTables_info {
    order: 4;
    flex: 2 1 0;
    width: auto;
    display: flex;
    justify-content: center;
    text-align: center;
    float: none;
    padding: var(--pp-space-3) var(--pp-space-2);
}

body.customers .dataTables_wrapper > .row > .dt-page-jump {
    order: 5;
    width: auto;
    min-width: max-content;
    padding: var(--pp-space-3) 0;
}

body.customers .dataTables_wrapper > .row > div:has(.dataTables_paginate),
body.customers .dataTables_wrapper > .dataTables_paginate,
body.customers .dataTables_wrapper > .row > .dataTables_paginate {
    order: 6;
    flex: 1 1 0;
    min-width: max-content;
    width: auto;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    text-align: right;
    float: none;
    padding: var(--pp-space-3) 0;
    /* anulează margin-top:-25px din CSS-ul legacy care trăgea
       paginarea în sus față de select și info */
    margin: 0;
}

/* Paginarea nu se frânge pe două rânduri (dashboard-refresh pune
   flex-wrap: wrap pe ul.pagination) și nu moștenește margin-ul
   Bootstrap 20px 0 — cutia centrată includea marginea și butoanele
   apăreau mai sus decât selectul și info-ul. */
body.customers .dataTables_wrapper .dataTables_paginate .pagination {
    flex-wrap: nowrap;
    white-space: nowrap;
    margin: 0;
}

/* Ultimul buton fără margine pe dreapta — flush cu muchia tabelului. */
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:last-child > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:last-child > span {
    margin-right: 0;
}

/* Responsive: sub 768px zonele cad una sub alta, centrate. */
@media (max-width: 767px) {
    body.customers .dataTables_wrapper > .row > div:has(.dataTables_filter),
    body.customers .dataTables_wrapper > .dataTables_filter,
    body.customers .dataTables_wrapper > .row > div:has(.dataTables_length),
    body.customers .dataTables_wrapper > .dataTables_length,
    body.customers .dataTables_wrapper > .row > div:has(.dataTables_info),
    body.customers .dataTables_wrapper > .dataTables_info,
    body.customers .dataTables_wrapper > .row > .dt-page-jump,
    body.customers .dataTables_wrapper > .row > div:has(.dataTables_paginate),
    body.customers .dataTables_wrapper > .dataTables_paginate,
    body.customers .dataTables_wrapper > .row > .dataTables_paginate {
        flex: 1 1 100%;
        justify-content: center;
        text-align: center;
        margin-left: 0;
        padding: var(--pp-space-2) var(--pp-space-3);
    }
}

/* Override-uri peste stilurile per-pagină din dashboard-refresh.css
   (.dashboard-refresh.invoices-page .table-invoices thead th etc. —
   0,3,2 cu bg #eef6fa, text #1e3a5f, td de 1.0625rem). Selectorii de
   mai jos au ≥ aceeași specificitate și vin ultimii în cascadă, deci
   toate tabelele DataTables intră în sistemul de tokeni. */
body.customers .dataTables_wrapper table.dataTable,
body.customers .table.dt-table {
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-md);
    border-collapse: separate;
    border-spacing: 0;
}

body.customers .dataTables_wrapper table.dataTable > thead > tr > th,
body.customers .table.dt-table > thead > tr > th {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
    font-size: 13px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: .02em;
    padding: 10px;
    border: 0;
    border-bottom: 1px dashed var(--pp-dash);
    border-right: 1px dashed var(--pp-dash-soft);
}

body.customers .dataTables_wrapper table.dataTable > thead > tr > th:last-child,
body.customers .table.dt-table > thead > tr > th:last-child {
    border-right: 0;
}

body.customers .dataTables_wrapper table.dataTable > tbody > tr > td,
body.customers .table.dt-table > tbody > tr > td {
    font-size: 14px;
    color: var(--pp-text);
    padding: 10px 10px 5px;
    border: 0;
    border-bottom: 1px dashed var(--pp-dash);
    background: var(--pp-cell-wash);
}

body.customers .dataTables_wrapper table.dataTable > tbody > tr:hover > td,
body.customers .table.dt-table > tbody > tr:hover > td {
    background: rgba(var(--pp-primary-rgb), .06);
}

body.customers .dataTables_wrapper table.dataTable > tbody > tr:last-child > td,
body.customers .table.dt-table > tbody > tr:last-child > td {
    border-bottom: 0;
}

/* Responsive: sub 992px tabelul își face singur scroll orizontal
   (display:block + overflow-x pe ELEMENTUL table, fără wrapper nou),
   iar celulele nu se mai frâng — derulezi în loc să strivești.
   Compromis asumat: dropdown-urile din rânduri se pot tăia pe mobil,
   ca peste tot în aplicație (BS3); pe desktop nu există clipping.
   Pe desktop header-ele se pot frânge pe două rânduri în loc să se
   suprapună peste coloana vecină. */
@media (max-width: 991px) {
    body.customers .dataTables_wrapper table.dataTable,
    body.customers .table.dt-table {
        display: block;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
        scrollbar-color: var(--pp-border) transparent;
    }

    body.customers .dataTables_wrapper table.dataTable > thead > tr > th,
    body.customers .table.dt-table > thead > tr > th,
    body.customers .dataTables_wrapper table.dataTable > tbody > tr > td,
    body.customers .table.dt-table > tbody > tr > td {
        white-space: nowrap;
    }
}

/* Linkurile din celule (nr. factură, subiect contract etc.):
   dashboard-refresh.css le colorează per-pagină cu literal #1976d2 —
   le readucem în sistemul de tokeni cu specificitate ≥ 0,4,0. */
body.customers .dataTables_wrapper table.dataTable.dt-table td a,
body.customers .table.dt-table > tbody > tr > td a {
    color: var(--pp-primary);
    font-weight: 600;
    text-decoration: none;
    transition: color var(--pp-transition-fast);
}

body.customers .dataTables_wrapper table.dataTable.dt-table td a:hover,
body.customers .table.dt-table > tbody > tr > td a:hover {
    color: var(--pp-primary-hover);
}

/* Sortare ca în admin: săgeți Glyphicons suprapuse în dreapta
   header-ului, direcția activă colorată cu violetul temei. */
body.customers table.dataTable thead .sorting,
body.customers table.dataTable thead .sorting_asc,
body.customers table.dataTable thead .sorting_desc {
    position: relative;
    padding-right: 26px;
}

body.customers table.dataTable thead .sorting:after,
body.customers table.dataTable thead .sorting_asc::after,
body.customers table.dataTable thead .sorting_desc::after {
    opacity: 1;
    content: "\e252" !important;
    font-family: "Glyphicons Halflings";
    color: var(--pp-sort-idle);
    position: absolute;
    z-index: 10;
    top: 16px !important;
    right: 8px !important;
}

body.customers table.dataTable thead .sorting:before,
body.customers table.dataTable thead .sorting_asc::before,
body.customers table.dataTable thead .sorting_desc::before {
    opacity: 1;
    content: "\e253" !important;
    font-family: "Glyphicons Halflings";
    color: var(--pp-sort-idle);
    position: absolute;
    z-index: 10;
    top: 9px !important;
    right: 8px !important;
}

body.customers table.dataTable thead .sorting_asc::after {
    color: var(--pp-primary);
}

body.customers table.dataTable thead .sorting_desc::before {
    color: var(--pp-primary);
}

body.customers .dataTables_wrapper table.dataTable > thead > tr > th.sorting_asc,
body.customers .dataTables_wrapper table.dataTable > thead > tr > th.sorting_desc {
    color: var(--pp-primary);
}

body.customers .dataTables_wrapper .dataTables_empty {
    color: var(--pp-text-faint);
    text-align: center;
    padding: var(--pp-space-6) var(--pp-space-4);
}

/* Paginare admin-style — selectorii lungi bat 0,4,2/0,5,2 din
   dashboard-refresh.css (radius 0 + albastru legacy). */
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li > span {
    border-radius: var(--pp-radius-sm);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-primary);
    font-size: 13px;
    font-weight: 500;
    margin-left: 4px;
    min-width: 34px;
    height: 32px;
    padding: 0 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:first-child > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:first-child > span,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:last-child > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li:last-child > span {
    border-radius: var(--pp-radius-sm);
}

body.customers .dataTables_wrapper .dataTables_paginate .pagination > li > a:hover {
    background: var(--pp-bg-subtle);
    border-color: var(--pp-border);
    color: var(--pp-primary);
}

body.customers .dataTables_wrapper .dataTables_paginate .pagination > li.active > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li.active > a:hover,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li.active > a:focus {
    background: var(--pp-primary);
    border-color: var(--pp-primary);
    color: var(--pp-surface);
    font-weight: 600;
}

body.customers .dataTables_wrapper .dataTables_paginate .pagination > li.disabled > a,
body.customers .dataTables_wrapper .dataTables_paginate .pagination > li.disabled > a:hover {
    background: var(--pp-surface);
    border-color: var(--pp-border);
    color: var(--pp-text-faint);
}

/* === C05: Forms === */
/* ==========================================================================
   C05: Forms
   ========================================================================== */
body.customers label {
    font-size: 13px;
    font-weight: 600;
    color: var(--pp-text);
    margin-bottom: 6px;
}

body.customers .form-control,
body.customers select.form-control,
body.customers textarea.form-control {
    height: 40px;
    padding: 9px 12px;
    border-radius: var(--pp-radius-md);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-text);
    box-shadow: none;
    transition: border-color var(--pp-transition), box-shadow var(--pp-transition);
}

body.customers textarea.form-control {
    height: auto;
}

body.customers .form-control:focus {
    border-color: var(--pp-primary);
    box-shadow: var(--pp-ring);
    outline: none;
}

body.customers .form-control::placeholder {
    color: var(--pp-text-faint);
}

body.customers .has-error .form-control {
    border-color: var(--pp-danger);
}

body.customers .has-error .form-control:focus {
    box-shadow: 0 0 0 3px rgba(var(--pp-danger-rgb), .18);
}

body.customers .help-block {
    font-size: 12px;
    color: var(--pp-text-muted);
}

body.customers .has-error .help-block {
    color: var(--pp-danger);
}

body.customers .checkbox input[type="checkbox"],
body.customers .radio input[type="radio"],
body.customers input[type="checkbox"],
body.customers input[type="radio"] {
    accent-color: var(--pp-primary);
}

body.customers .checkbox-info input[type="checkbox"],
body.customers .radio-success input[type="radio"] {
    accent-color: var(--pp-primary);
}

body.customers input[type="file"] {
    border-radius: var(--pp-radius-md);
}

body.customers .input-group-addon {
    background: var(--pp-bg-subtle);
    border: 1px solid var(--pp-border);
    color: var(--pp-text-muted);
    border-radius: var(--pp-radius-md);
}

/* Într-un grup, addon-ul se lipește de input: colțurile dinspre input
   dispar, la fel și border-ul dublu (cerință explicită: addon-ul cu
   lupa de la search-ul tabelelor fără border-top/bottom-right). */
body.customers .input-group .input-group-addon:first-child {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
    border-right: 0;
}

body.customers .input-group .input-group-addon:last-child {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
    border-left: 0;
}

body.customers .input-group .form-control:not(:first-child),
body.customers .input-group input:not(:first-child) {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

body.customers .input-group .form-control:not(:last-child),
body.customers .input-group input:not(:last-child) {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

/* Focus coerent pe tot grupul: addon-ul preia border-ul violet. */
body.customers .input-group:focus-within .input-group-addon {
    border-color: var(--pp-primary);
    color: var(--pp-primary);
}

/* bootstrap-select — aliniat vizual cu .form-control */
body.customers .bootstrap-select > .btn,
body.customers .bootstrap-select .dropdown-toggle {
    height: 40px;
    display: flex;
    align-items: center;
    border-radius: var(--pp-radius-md);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-text);
}

body.customers .bootstrap-select.open > .btn,
body.customers .bootstrap-select .dropdown-toggle:focus {
    border-color: var(--pp-primary);
    box-shadow: var(--pp-ring);
}

body.customers .bootstrap-select .dropdown-menu {
    border-radius: var(--pp-radius-lg);
    border: 1px solid var(--pp-border);
    box-shadow: var(--pp-shadow-lg);
}

body.customers .bootstrap-select .dropdown-menu li a {
    padding: 8px 12px;
    color: var(--pp-text);
}

body.customers .bootstrap-select .dropdown-menu li a:hover {
    background: var(--pp-primary-soft);
    color: var(--pp-primary);
}

body.customers .bootstrap-select .bs-searchbox .form-control {
    height: 34px;
}

body.customers .datetimepicker.dropdown-menu {
    border-radius: var(--pp-radius-lg);
    border: 1px solid var(--pp-border);
    box-shadow: var(--pp-shadow-lg);
}

body.customers .datetimepicker table td.active,
body.customers .datetimepicker table td.active:hover {
    background: var(--pp-primary);
    color: var(--pp-surface);
}

/* === C06: Badges & status pills === */
/* ==========================================================================
   C06: Badges & status pills
   ========================================================================== */
body.customers .badge,
body.customers .label,
body.customers .ui-dash-badge,
/* DOAR span-uri: atributul [class*=...] fără element prindea și
   <th class="th-invoice-status"> și-i strica display-ul de table-cell
   (header-ul coloanei Status se chircea la lățimea textului). */
body.customers span[class*="invoice-status"],
body.customers span[class*="contract-status-badge"] {
    border-radius: var(--pp-radius-pill);
    padding: 3px 10px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: var(--pp-bg-muted);
    color: var(--pp-text-muted);
}

body.customers .label-success,
body.customers .badge-success,
body.customers .ui-dash-badge--success {
    background: rgba(var(--pp-success-rgb), .12);
    color: var(--pp-success-ink);
}

body.customers .label-danger,
body.customers .badge-danger,
body.customers .ui-dash-badge--danger,
body.customers .contract-status-rejected {
    background: rgba(var(--pp-danger-rgb), .12);
    color: var(--pp-danger-ink);
}

body.customers .label-warning,
body.customers .badge-warning,
body.customers .ui-dash-badge--warning,
body.customers .contract-status-pending {
    background: rgba(var(--pp-warning-rgb), .16);
    color: var(--pp-warning-ink);
}

body.customers .label-info,
body.customers .badge-info,
body.customers .ui-dash-badge--info {
    background: rgba(var(--pp-info-rgb), .14);
    color: var(--pp-info-ink);
}

body.customers .label-default {
    background: var(--pp-bg-muted);
    color: var(--pp-text-muted);
}

body.customers .contract-status-signed {
    background: rgba(var(--pp-success-rgb), .12);
    color: var(--pp-success-ink);
}

/* Badge-uri cu culoare dinamică per-status (ticket-status-label,
   ticket-status-inline-label) primesc doar forma pill — culoarea
   vine din style="" inline, generată per-înregistrare din admin
   (theme_hex_to_pastel_bg), nu e un token static — nu se atinge. */
body.customers .label.ticket-status-label,
body.customers .label.ticket-status-inline-label {
    border-radius: var(--pp-radius-pill);
    padding: 3px 10px;
    font-weight: 600;
}

/* === C07: Alerts === */
/* ==========================================================================
   C07: Alerts
   ========================================================================== */
body.customers .alert {
    border-radius: var(--pp-radius-md);
    padding: 12px 16px;
    border: 1px solid transparent;
    color: var(--pp-text);
}

body.customers .alert-success {
    background: rgba(var(--pp-success-rgb), .08);
    border-color: rgba(var(--pp-success-rgb), .20);
    border-left: 3px solid var(--pp-success);
}

body.customers .alert-danger {
    background: rgba(var(--pp-danger-rgb), .08);
    border-color: rgba(var(--pp-danger-rgb), .20);
    border-left: 3px solid var(--pp-danger);
}

body.customers .alert-warning {
    background: rgba(var(--pp-warning-rgb), .08);
    border-color: rgba(var(--pp-warning-rgb), .20);
    border-left: 3px solid var(--pp-warning);
}

body.customers .alert-info {
    background: rgba(var(--pp-info-rgb), .08);
    border-color: rgba(var(--pp-info-rgb), .20);
    border-left: 3px solid var(--pp-info);
}

body.customers .alert .close {
    opacity: .5;
    transition: opacity var(--pp-transition-fast);
}

body.customers .alert .close:hover {
    opacity: 1;
}

/* Real markup: anunțuri client (template_parts/alerts.php) —
   .ui-dash-card-alert e card + accent, nu Bootstrap .alert */
body.customers .ui-dash-card-alert {
    border-left: 3px solid var(--pp-info);
    background: rgba(var(--pp-info-rgb), .06);
}

body.customers .alert-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pp-space-2);
}

body.customers .alert-badge {
    border-radius: var(--pp-radius-pill);
    padding: 2px 8px;
    font-size: 11px;
    font-weight: 600;
    background: rgba(var(--pp-info-rgb), .16);
    color: var(--pp-info-ink);
}

body.customers .alert-meta,
body.customers .alert-date {
    font-size: 12px;
    color: var(--pp-text-muted);
}

body.customers .alert-title {
    font-size: 15px;
    font-weight: 600;
    margin: var(--pp-space-2) 0 var(--pp-space-1);
}

body.customers .alert-dismiss {
    color: var(--pp-text-faint);
    font-size: 18px;
    line-height: 1;
    transition: color var(--pp-transition-fast);
}

body.customers .alert-dismiss:hover {
    color: var(--pp-text);
}

/* === C08: Sidebar + topbar (template_parts/sidebar.php) === */
/* ==========================================================================
   C08: Sidebar + topbar (template_parts/sidebar.php)
   ========================================================================== */
/* Panou plutitor pe canvas: sidebar-ul nu mai atinge marginile
   ecranului — margine 12px de jur împrejur, radius 16, hairline + umbră
   moale. Muchia dreaptă „linie pe toată înălțimea" dispare. */
body.customers .crm-sidebar-layout {
    background: var(--pp-bg);
}

body.customers .crm-sidebar {
    background: var(--pp-surface);
    width: var(--pp-sidebar-width);
    min-width: var(--pp-sidebar-width);
    margin: var(--pp-space-3) 0 var(--pp-space-3) var(--pp-space-3);
    height: calc(100vh - 24px);
    height: calc(100dvh - 24px);
    max-height: calc(100dvh - 24px);
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-xl);
    box-shadow: var(--pp-shadow-card);
}

/* Pe mobil sidebar-ul redevine drawer full-height (legacy îl scoate
   off-canvas cu translateX(-100%); marginea ar lăsa o fâșie vizibilă). */
@media (max-width: 991px) {
    body.customers .crm-sidebar {
        margin: 0;
        height: 100vh;
        height: 100dvh;
        max-height: 100dvh;
        border: 0;
        border-radius: 0 var(--pp-radius-xl) var(--pp-radius-xl) 0;
    }
}

/* Logo pe stânga, în axa iconițelor din meniu, cu divider pe toată
   lățimea (identic cu cel din footerul sidebar-ului). */
body.customers .crm-sidebar-header {
    height: auto;
    min-height: 72px;
    padding: 16px 20px 14px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    background: transparent;
    border-bottom: 1px solid var(--pp-border);
}

body.customers .crm-sidebar-header .navbar-brand {
    justify-content: flex-start;
}

body.customers .crm-sidebar-header .navbar-brand img {
    max-height: 42px;
    max-width: 170px;
    width: auto;
}

body.customers .crm-sidebar-nav {
    padding: var(--pp-space-2) var(--pp-space-3) var(--pp-space-4);
    scrollbar-width: thin;
    scrollbar-color: var(--pp-border) transparent;
}

body.customers .crm-sidebar-nav::-webkit-scrollbar {
    width: 6px;
}

body.customers .crm-sidebar-nav::-webkit-scrollbar-thumb {
    background: var(--pp-border);
    border-radius: var(--pp-radius-pill);
}

body.customers .crm-sidebar-nav::-webkit-scrollbar-track {
    background: transparent;
}

/* Un singur limbaj pt toate intrările de nav: linkurile temei
   (.crm-sidebar-link) și itemii injectați de module prin hook-urile
   customers_navigation_* ca .crm-sidebar-nav > li > a (omni_sales,
   loyalty, commission, fleet etc.). Iconițele stau în tile-uri 30px —
   pagina activă aprinde tile-ul, nu un blob pe tot rândul. */
body.customers .crm-sidebar-link,
body.customers .crm-sidebar .crm-sidebar-nav > li > a {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 8px;
    margin-bottom: 2px;
    border-radius: var(--pp-radius-lg);
    color: var(--pp-text-muted);
    font-size: 14px;
    font-weight: 500;
    transition: background-color var(--pp-transition-fast), color var(--pp-transition-fast);
}

body.customers .crm-sidebar-link i:first-child,
body.customers .crm-sidebar .crm-sidebar-nav > li > a i:first-child,
body.customers .crm-sidebar .crm-sidebar-nav > li > a .fa:first-child {
    width: 30px;
    height: 30px;
    min-width: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--pp-radius-md);
    font-size: 15px;
    color: var(--pp-text-faint);
    background: transparent;
    transition: background-color var(--pp-transition-fast), color var(--pp-transition-fast), box-shadow var(--pp-transition-fast);
}

body.customers .crm-sidebar-link:hover,
body.customers .crm-sidebar .crm-sidebar-nav > li > a:hover {
    background: var(--pp-bg-subtle);
    color: var(--pp-text);
}

body.customers .crm-sidebar-link:hover i:first-child,
body.customers .crm-sidebar .crm-sidebar-nav > li > a:hover i:first-child {
    color: var(--pp-text);
}

/* Pagina curentă: tile violet plin cu glow discret + label întărit. */
body.customers .crm-sidebar-link.active,
body.customers .crm-sidebar .crm-sidebar-nav > li > a.active {
    background: transparent;
    color: var(--pp-text);
    font-weight: 600;
    box-shadow: none;
}

body.customers .crm-sidebar-link.active i:first-child,
body.customers .crm-sidebar .crm-sidebar-nav > li > a.active i:first-child,
body.customers .crm-sidebar .crm-sidebar-nav > li > a.active .fa:first-child {
    background: var(--pp-primary);
    color: var(--pp-surface);
    box-shadow: 0 4px 10px rgba(var(--pp-primary-rgb), .35);
}

/* Trigger-ele de grup (Comercial, Suport): .active moștenit de la copil
   (sidebar-active.js) nu aprinde tile-ul plin — doar tentă soft pe
   iconiță + label întărit; violetul plin rămâne pe pagina curentă. */
body.customers .crm-sidebar-dropdown > .crm-sidebar-link.active {
    background: transparent;
    color: var(--pp-text);
    font-weight: 600;
    box-shadow: none;
}

body.customers .crm-sidebar-dropdown > .crm-sidebar-link.active i:first-child {
    background: rgba(var(--pp-primary-rgb), .12);
    color: var(--pp-primary);
    box-shadow: none;
}

body.customers .crm-sidebar-dropdown > .crm-sidebar-link.active:hover,
body.customers .crm-sidebar-dropdown.open > .crm-sidebar-link:hover {
    background: var(--pp-bg-subtle);
}

body.customers .crm-sidebar-dropdown.open > .crm-sidebar-link {
    color: var(--pp-text);
}

/* Click-ul nu lasă border: outline-ul default de focus (BS3/UA) dispare
   la mouse; ringul apare DOAR la navigare cu tastatura. */
body.customers .crm-sidebar a:focus,
body.customers .crm-sidebar button:focus {
    outline: none;
}

body.customers .crm-sidebar a:focus-visible,
body.customers .crm-sidebar button:focus-visible {
    outline: none;
    box-shadow: var(--pp-ring);
}

body.customers .crm-sidebar-chevron {
    margin-left: auto;
    font-size: 11px;
    color: var(--pp-text-faint);
    transition: transform var(--pp-transition);
}

body.customers .crm-sidebar-dropdown.open .crm-sidebar-chevron,
body.customers .crm-sidebar-dropdown .crm-sidebar-link[aria-expanded="true"] .crm-sidebar-chevron {
    transform: rotate(-180deg);
}

/* Submeniu: aliniat sub coloana de label-uri, copil activ = text violet
   + dot; fără linii verticale, fără pastile. */
body.customers .crm-sidebar-submenu {
    list-style: none;
    margin: 0 0 4px;
    padding: 2px 0 4px 44px;
    border-left: 0;
}

body.customers .crm-sidebar-submenu a {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--pp-space-2);
    padding: 7px 10px 7px 14px;
    margin-bottom: 1px;
    border-radius: var(--pp-radius-md);
    color: var(--pp-text-muted);
    font-size: 13px;
    transition: background-color var(--pp-transition-fast), color var(--pp-transition-fast);
}

body.customers .crm-sidebar-submenu a:hover {
    background: var(--pp-bg-subtle);
    color: var(--pp-text);
}

body.customers .crm-sidebar-submenu a.active {
    background: transparent;
    color: var(--pp-primary);
    font-weight: 600;
}

body.customers .crm-sidebar-submenu a.active::before {
    content: "";
    position: absolute;
    left: 2px;
    top: 50%;
    transform: translateY(-50%);
    width: 5px;
    height: 5px;
    border-radius: var(--pp-radius-pill);
    background: var(--pp-primary);
}

body.customers .crm-sidebar-submenu a.active i,
body.customers .crm-sidebar-submenu a.active .fa {
    color: var(--pp-primary);
}

/* Pastilele de count — pe violetul temei, nu pe albastrul legacy
   #2563eb rămas în sidebar.css. */
body.customers .crm-sidebar-submenu a .badge,
body.customers .crm-sidebar-submenu a .qty_total,
body.customers .crm-sidebar .crm-sidebar-nav > li > a .qty_total {
    background: var(--pp-primary);
    color: var(--pp-surface);
}

/* Profilul: card mic, cu hairline — ancora de jos a panoului. */
body.customers .crm-sidebar-footer {
    border-top: 1px solid var(--pp-border);
    padding: var(--pp-space-3);
}

body.customers .crm-sidebar-profile-toggle {
    border: 1px solid var(--pp-border);
    background: var(--pp-bg-subtle);
    border-radius: var(--pp-radius-lg);
    padding: 8px 10px;
    transition: background-color var(--pp-transition-fast), border-color var(--pp-transition-fast);
}

body.customers .crm-sidebar-profile-toggle:hover {
    background: var(--pp-bg-muted);
}

body.customers .crm-sidebar-avatar {
    width: 34px;
    height: 34px;
    border-radius: var(--pp-radius-pill);
    background: rgba(var(--pp-primary-rgb), .12);
    color: var(--pp-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 12px;
}

body.customers .crm-sidebar-avatar-img {
    width: 34px;
    height: 34px;
    border-radius: var(--pp-radius-pill);
    object-fit: cover;
}

body.customers .crm-sidebar-profile-name {
    color: var(--pp-text);
    font-weight: 600;
    font-size: 13px;
}

body.customers .crm-sidebar-profile-company {
    color: var(--pp-text-faint);
    font-size: 11px;
}

body.customers .crm-sidebar-profile-chevron,
body.customers .crm-sidebar-profile-toggle .fa-chevron-right {
    color: var(--pp-text-faint);
}

/* Cardul de profil (dropdown-ul mare din footer). */
body.customers .crm-sidebar-profile.crm-sidebar-profile-dropdown .dropdown-menu {
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-lg);
    box-shadow: var(--pp-shadow-lg);
}

body.customers .crm-sidebar-profile .li-header {
    border-radius: var(--pp-radius-sm);
    color: var(--pp-text-muted);
}

body.customers .crm-sidebar-profile .li-header:hover {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
}

body.customers .crm-sidebar-toggle,
body.customers .crm-sidebar-open-btn {
    border-radius: var(--pp-radius-md);
    transition: background-color var(--pp-transition-fast);
}

body.customers .crm-topbar {
    background: transparent;
    border-bottom: 0;
    min-height: 64px;
    padding: var(--pp-space-4) var(--pp-space-5) var(--pp-space-2) var(--pp-space-5);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pp-space-3);
}

@media (max-width: 767px) {
    body.customers .crm-topbar {
        padding-left: var(--pp-space-4);
        padding-right: var(--pp-space-4);
    }
}

/* Topbar-ul nu mai afișează titlul paginii (cerință client) — mesajul
   de bun venit e singurul text și preia rolul de linie principală. */
body.customers .crm-topbar-welcome {
    font-size: 17px;
    font-weight: 600;
    color: var(--pp-text);
    margin: 0;
}

body.customers .crm-topbar-search .search-box-inner {
    position: relative;
    display: flex;
    align-items: center;
}

body.customers .crm-topbar-search .search-field-input {
    height: 38px;
    border-radius: 8px; /* aliniat cu .crm-cart-trigger, nu pill */
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    box-shadow: var(--pp-shadow-sm);
    padding: 0 var(--pp-space-4) 0 36px;
    color: var(--pp-text);
    transition: border-color var(--pp-transition), background-color var(--pp-transition);
}

body.customers .crm-topbar-search .search-field-input:focus {
    outline: none;
    border-color: var(--pp-primary);
    background: var(--pp-surface);
    box-shadow: var(--pp-ring);
}

/* Coșul din topbar (hook customers_header_after_search) ocupă loc și
   când e gol — pe paginile fără shop împingea search-ul spre stânga
   față de muchia cardului. */
body.customers .crm-topbar-cart:not(:has(*)) {
    display: none;
}

body.customers .crm-search-icon {
    position: absolute;
    left: 12px;
    color: var(--pp-text-faint);
}

/* === C09: Submenu / tabs === */
/* ==========================================================================
   C09: Submenu / tabs
   ========================================================================== */
body.customers .submenu.customer-top-submenu {
    display: flex;
    gap: var(--pp-space-2);
    border-bottom: 1px solid var(--pp-border);
    margin-bottom: var(--pp-space-5);
    flex-wrap: wrap;
}

body.customers .nav-tabs,
body.customers .nav-tabs-flat,
body.customers .project-tabs-nav {
    border-bottom: 1px solid var(--pp-border);
    display: flex;
    flex-wrap: wrap;
    gap: var(--pp-space-2);
}

body.customers .nav-tabs > li > a,
body.customers .project-tab-link {
    border: none;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    color: var(--pp-text-muted);
    padding: 10px 4px;
    margin-right: var(--pp-space-4);
    background: transparent;
    transition: color var(--pp-transition), border-color var(--pp-transition);
}

body.customers .nav-tabs > li > a:hover,
body.customers .project-tab-link:hover {
    color: var(--pp-text);
    background: transparent;
    border-color: var(--pp-border);
}

body.customers .nav-tabs > li.active > a,
body.customers .nav-tabs > li.active > a:hover,
body.customers .project-tab-link.active {
    color: var(--pp-primary);
    border-color: var(--pp-primary);
    font-weight: 600;
    background: transparent;
}

body.customers .tab-content {
    padding-top: var(--pp-space-4);
}

/* === C10: Dropdowns === */
/* ==========================================================================
   C10: Dropdowns
   ========================================================================== */
body.customers .dropdown-menu {
    border-radius: var(--pp-radius-lg);
    border: 1px solid var(--pp-border);
    box-shadow: var(--pp-shadow-lg);
    padding: 6px;
    margin-top: 6px;
    min-width: 180px;
}

body.customers .dropdown-menu > li > a {
    border-radius: var(--pp-radius-sm);
    padding: 8px 12px;
    color: var(--pp-text);
}

body.customers .dropdown-menu > li > a:hover,
body.customers .dropdown-menu > li > a:focus {
    background: var(--pp-primary-soft);
    color: var(--pp-primary);
}

body.customers .dropdown-menu .divider {
    height: 1px;
    background: var(--pp-border);
    margin: 6px 0;
}

/* === C11: Modals === */
/* ==========================================================================
   C11: Modals
   ========================================================================== */
body.customers .modal-content {
    border-radius: var(--pp-radius-lg);
    border: none;
    box-shadow: var(--pp-shadow-lg);
}

body.customers .modal-header {
    border-bottom: 1px solid var(--pp-border);
    padding: var(--pp-space-5);
}

body.customers .modal-title {
    font-weight: 600;
    font-size: 16px;
    color: var(--pp-text);
}

body.customers .modal-body {
    padding: var(--pp-space-5);
}

body.customers .modal-footer {
    border-top: 1px solid var(--pp-border);
    padding: var(--pp-space-4) var(--pp-space-5);
}

body.customers .modal-footer .btn + .btn {
    margin-left: var(--pp-space-2);
}

body.customers .modal-backdrop {
    background: var(--pp-backdrop);
}

body.customers .modal-backdrop.in {
    opacity: .45;
}

/* === C12: Pagination === */
/* ==========================================================================
   C12: Pagination
   ========================================================================== */
body.customers .pagination {
    display: flex;
    gap: 4px;
}

/* Paginare ca în admin: pastile albe cu bordură, text violet, activă
   plină. min-width, nu width fix: textele localizate se pot lăți. */
/* .paginate_button doar când e ANCORA (varianta non-BS3 de markup);
   în markup-ul BS3 clasa stă pe <li> și ar produce bordură dublă. */
body.customers .pagination > li > a,
body.customers .pagination > li > span,
body.customers .dataTables_paginate a.paginate_button {
    min-width: 34px;
    height: 32px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--pp-radius-sm);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    color: var(--pp-primary);
    font-size: 13px;
    font-weight: 500;
    margin-left: 4px;
    padding: 0 10px;
    transition: background-color var(--pp-transition-fast), color var(--pp-transition-fast), border-color var(--pp-transition-fast);
}

body.customers .pagination > li > a:hover,
body.customers .dataTables_paginate a.paginate_button:hover {
    background: var(--pp-bg-subtle);
    border-color: var(--pp-border);
    color: var(--pp-primary);
}

body.customers .pagination > .active > a,
body.customers .pagination > .active > span,
body.customers .dataTables_paginate a.paginate_button.current {
    background: var(--pp-primary);
    border-color: var(--pp-primary);
    color: var(--pp-surface);
    font-weight: 600;
}

body.customers .pagination > .disabled > a,
body.customers .dataTables_paginate a.paginate_button.disabled {
    background: var(--pp-surface);
    border-color: var(--pp-border);
    color: var(--pp-text-faint);
    cursor: not-allowed;
}

/* Reset pe <li>-ul din markup-ul BS3: doar ancora poartă pastila. */
body.customers .dataTables_paginate li.paginate_button {
    border: 0;
    background: transparent;
    padding: 0;
    min-width: 0;
    height: auto;
    display: inline-flex;
    margin: 0;
}

body.customers .dataTables_paginate {
    padding: 0;
}

/* === C13: Footer === */
/* ==========================================================================
   C13: Footer
   ========================================================================== */
body.customers footer.ui-footer-refresh {
    color: var(--pp-text-muted);
    font-size: 12px;
    background: var(--pp-surface);
    border-top: 1px solid var(--pp-border);
}

body.customers footer.ui-footer-refresh .top-footer {
    padding: var(--pp-space-4) 0;
}

body.customers footer.ui-footer-refresh .bottom-footer {
    border-top: 1px solid var(--pp-border);
    padding: var(--pp-space-3) 0;
    color: var(--pp-text-faint);
}

body.customers .footer-info {
    color: var(--pp-text-muted);
}

body.customers .footer-info:hover {
    color: var(--pp-primary);
}

body.customers .footer-links-col a {
    color: var(--pp-text-faint);
}

body.customers .footer-links-col a:hover {
    color: var(--pp-primary);
}

/* === C14: Document pages chrome === */
/* ==========================================================================
   C14: Document pages chrome (invoicehtml, proformahtml, estimatehtml,
   contracthtml, credit_note_html, viewproposal, subscriptionhtml,
   mobil_pay_invoicehtml, cash_receipt) — DOAR bara de acțiuni + wrapper,
   NU corpul documentului fiscal (tabel produse, totaluri, adrese rămân
   nestilizate explicit — vezi decisions.md D3).
   ========================================================================== */
body.customers .mui-document-page {
    background: var(--pp-bg);
    padding-bottom: var(--pp-space-6);
}

body.customers .mui-appbar {
    background: var(--pp-surface);
    border-bottom: 1px solid var(--pp-border);
}

body.customers .mui-appbar[data-sticky],
body.customers .preview-top-wrapper {
    box-shadow: var(--pp-shadow-sm);
}

body.customers .mui-appbar-row {
    padding: var(--pp-space-3) var(--pp-space-5);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pp-space-3);
}

body.customers .invoice-html-logo img {
    max-height: 40px;
}

body.customers .contract-toolbar-actions {
    display: flex;
    align-items: center;
    gap: var(--pp-space-2);
    flex-wrap: wrap;
}

body.customers .mui-content-container {
    max-width: 960px;
    margin: var(--pp-space-6) auto 0;
    padding: 0 var(--pp-space-4);
}

body.customers .mui-content-row .panel_s.mui-card {
    box-shadow: var(--pp-shadow-card);
    border-radius: var(--pp-radius-lg);
    border: 1px solid var(--pp-border);
}

body.customers .mui-invoice-title {
    font-size: 20px;
    font-weight: 600;
    color: var(--pp-text);
}

body.customers .contract-status-badge {
    border-radius: var(--pp-radius-pill);
    padding: 4px 12px;
    font-size: 12px;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

body.customers .contract-status-badge.contract-status-signed {
    background: rgba(var(--pp-success-rgb), .12);
    color: var(--pp-success-ink);
}

body.customers .contract-status-badge.contract-status-rejected {
    background: rgba(var(--pp-danger-rgb), .12);
    color: var(--pp-danger-ink);
}

body.customers .contract-status-badge.contract-status-pending {
    background: rgba(var(--pp-warning-rgb), .16);
    color: var(--pp-warning-ink);
}

/* === C15: Knowledge base === */
/* ==========================================================================
   C15: Knowledge base
   ========================================================================== */
body.customers .kb-search-title {
    font-weight: 600;
    color: var(--pp-text);
}

body.customers .kb-search-hint,
body.customers .kb-page-intro {
    color: var(--pp-text-muted);
    font-size: 13px;
}

body.customers .kb-search-input {
    height: 48px;
    padding-left: 40px;
    border-radius: var(--pp-radius-md);
}

body.customers .kb-search-input-group {
    position: relative;
}

body.customers .kb-search-button {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
    height: 48px;
}

body.customers .kb-back-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: var(--pp-space-3);
    color: var(--pp-text-muted);
}

body.customers .kb-back-link:hover {
    color: var(--pp-primary);
}

body.customers .search_card {
    border-radius: var(--pp-radius-lg);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    padding: var(--pp-space-4);
    transition: box-shadow var(--pp-transition);
}

body.customers .search_card:hover {
    box-shadow: var(--pp-shadow-hover);
}

/* === C16: Project sub-views === */
/* ==========================================================================
   C16: Project sub-views — moștenire de tokeni prin C02-C06, fără
   restilizare de Frappe Gantt (are CSS propriu, frappe-gantt.css).
   ========================================================================== */
body.customers .gantt .bar {
    fill: var(--pp-primary);
}

body.customers .project-tabs-nav {
    margin-bottom: var(--pp-space-4);
}

/* === C17: Empty states & loaders === */
/* ==========================================================================
   C17: Empty states & loaders
   ========================================================================== */
body.customers .no-data,
body.customers .dataTables_empty,
body.customers .widget-empty,
body.customers .ui-dash-widget__empty,
body.customers .ad-search-no-results {
    text-align: center;
    padding: var(--pp-space-6) var(--pp-space-4);
    color: var(--pp-text-muted);
    font-size: 13px;
}

body.customers .no-data i,
body.customers .dataTables_empty i {
    font-size: 32px;
    color: var(--pp-text-faint);
    display: block;
    margin-bottom: var(--pp-space-3);
}

body.customers .progress {
    height: 6px;
    border-radius: var(--pp-radius-pill);
    background: var(--pp-bg-muted);
    box-shadow: none;
    overflow: hidden;
}

body.customers .progress-bar {
    background: var(--pp-primary);
}

body.customers .skeleton-card,
body.customers .skeleton-chart {
    background: var(--pp-bg-subtle);
    border-radius: var(--pp-radius-lg);
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */
@media (max-width: 991px) {
    body.customers .card,
    body.customers .panel_s,
    body.customers .ui-dash-card,
    body.customers .ui-dash-chart-card,
    body.customers .ui-dash-widget,
    body.customers .dash-card {
        padding: var(--pp-space-4);
    }

    body.customers .crm-topbar-search {
        display: none;
    }
}

@media (max-width: 767px) {
    body.customers .ui-dash-header {
        flex-direction: column;
        align-items: flex-start;
    }

    body.customers .mui-appbar-row {
        flex-direction: column;
        align-items: flex-start;
    }

    body.customers .contract-toolbar-actions {
        width: 100%;
    }

    body.customers .contract-toolbar-actions .btn {
        flex: 1 1 auto;
    }

    body.customers .nav-tabs,
    body.customers .project-tabs-nav {
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }

    body.customers .crm-topbar {
        flex-wrap: wrap;
    }
}

@media (max-width: 479px) {
    body.customers .ui-dash-snapshot-card {
        padding: var(--pp-space-3);
    }

    body.customers .card-value,
    body.customers .dash-card-value .kpi-value {
        font-size: 22px;
    }
}

/* === C18: Print styles === */
/* ==========================================================================
   C18: Print styles — scopat body.customers, deci activ la print pe
   ORICE pagină a portalului (inclusiv listări), nu doar pe view-urile
   de document (invoicehtml, proformahtml, contracthtml,
   credit_note_html, estimatehtml, viewproposal), care rămân ținta
   principală. Ascunderea chrome-ului (sidebar/topbar) și border-ul #ddd
   pe tabele sunt intenționat generale — un print de listare fără
   navigație și cu borduri lizibile e comportamentul dorit.
   ========================================================================== */
@media print {
    body.customers .mui-appbar,
    body.customers .contract-toolbar-actions,
    body.customers .action-button,
    body.customers .crm-sidebar,
    body.customers .crm-sidebar-overlay,
    body.customers .crm-topbar,
    body.customers .submenu.customer-top-submenu,
    body.customers .ui-dash-btn-secondary {
        display: none !important; /* overrides: nicio regulă anterioară — ascundere de chrome la print, nu există altă cale fără !important pe un context de print unde alte reguli sticky/flex din newStyle.css/ui-mui-refactor.css pot re-afișa elementul */
    }

    body.customers .mui-document-page,
    body.customers .mui-content-container {
        background: #fff;
        max-width: none;
        margin: 0;
        padding: 0;
    }

    body.customers .panel_s.mui-card,
    body.customers .card,
    body.customers .ui-dash-card {
        box-shadow: none !important; /* overrides: newStyle.css .panel_s{box-shadow:...} — umbrele soft nu au echivalent pe hârtie și strică fidelitatea printului browserului */
        border: 1px solid #ddd;
    }

    body.customers .table {
        border: 1px solid #ddd;
    }

    body.customers .table tr {
        page-break-inside: avoid;
    }
}

/* === QUARANTINE: !important overrides === */
/* ==========================================================================
   QUARANTINE: !important overrides
   Politică: maxim 15, fiecare cu comentariu obligatoriu care citează
   fișierul/selectorul învins și motivul. Toate deja documentate inline
   mai sus, în blocul @media print (C18) — singurul context din acest
   fișier unde specificitatea prefixului body.customers nu e suficientă,
   pentru că regulile vechi (newStyle.css, ui-mui-refactor.css) folosesc
   fie combinații sticky/position:fixed pe .mui-appbar, fie box-shadow
   direct pe .panel_s cu aceeași specificitate de selector — la egalitate
   de specificitate, comportamentul de print trebuie garantat, nu lăsat
   la ordinea întâmplătoare de încărcare a celor 9 fișiere vechi.
   Total !important în fișier: 2 (sub limita de 15).
   ========================================================================== */

/* ===== Mini-coș în topbar: trigger doar-icon + popover cu produsele
   din coș (omni_sales_header_cart_button + cart_popup.php). ===== */
body.customers .crm-cart-pop-wrap {
    position: relative;
    display: inline-flex;
}

body.customers .crm-cart-trigger {
    position: relative;
    width: 42px;
    height: 42px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-md);
    background: var(--pp-surface);
    color: var(--pp-primary);
    font-size: 17px;
    cursor: pointer;
    transition: border-color var(--pp-transition-fast), box-shadow var(--pp-transition-fast), transform var(--pp-transition-fast);
}

body.customers .crm-cart-trigger:hover,
body.customers .crm-cart-trigger[aria-expanded="true"] {
    border-color: var(--pp-primary);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .15);
    transform: translateY(-1px);
}

body.customers .crm-cart-trigger:focus-visible {
    outline: none;
    box-shadow: var(--pp-ring);
}

body.customers .crm-cart-trigger .crm-cart-badge {
    position: absolute;
    top: -7px;
    right: -7px;
    min-width: 19px;
    height: 19px;
    padding: 0 5px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--pp-primary);
    color: var(--pp-surface);
    font-size: 11px;
    font-weight: 600;
    line-height: 1;
    border-radius: 9999px;
    border: 2px solid var(--pp-surface);
}

body.customers .crm-cart-popover {
    position: absolute;
    top: calc(100% + 10px);
    right: 0;
    width: 340px;
    max-width: calc(100vw - 32px);
    background: var(--pp-surface);
    border-radius: var(--pp-radius-md);
    box-shadow: 0 12px 40px rgba(11, 15, 25, .16);
    z-index: 1060;
    overflow: hidden;
}

body.customers .crm-cart-pop-loading {
    padding: var(--pp-space-5);
    text-align: center;
    color: var(--pp-text-muted);
}

body.customers .crm-cart-pop-empty {
    padding: var(--pp-space-5);
    text-align: center;
    color: var(--pp-text-muted);
}

body.customers .crm-cart-pop-empty i {
    font-size: 28px;
    color: var(--pp-primary);
    display: block;
    margin-bottom: var(--pp-space-2);
}

body.customers .crm-cart-pop-empty p {
    margin: 0;
    font-size: 14px;
}

body.customers .crm-cart-pop-list {
    list-style: none;
    margin: 0;
    padding: 6px;
    max-height: 320px;
    overflow-y: auto;
}

body.customers .crm-cart-pop-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px;
    border-radius: var(--pp-radius-sm);
}

body.customers .crm-cart-pop-item:hover {
    background: rgba(var(--pp-primary-rgb), .06);
}

body.customers .crm-cart-pop-item + .crm-cart-pop-item {
    border-top: 1px dashed var(--pp-dash-soft);
}

body.customers .crm-cart-pop-thumb {
    width: 44px;
    height: 44px;
    object-fit: contain;
    border-radius: var(--pp-radius-sm);
    border: 1px solid var(--pp-border);
    background: var(--pp-surface);
    flex-shrink: 0;
}

body.customers .crm-cart-pop-info {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

body.customers .crm-cart-pop-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--pp-text);
    line-height: 1.3;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-decoration: none;
}

body.customers .crm-cart-pop-name:hover {
    color: var(--pp-primary);
}

body.customers .crm-cart-pop-qty {
    font-size: 12px;
    color: var(--pp-text-muted);
}

body.customers .crm-cart-pop-footer {
    padding: 10px;
    border-top: 1px solid var(--pp-border);
    background: var(--pp-cell-wash);
}

body.customers .crm-cart-pop-checkout {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 40px;
    border-radius: var(--pp-radius-sm);
    background: var(--pp-primary);
    color: var(--pp-surface);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: filter var(--pp-transition-fast), box-shadow var(--pp-transition-fast);
}

body.customers .crm-cart-pop-checkout:hover,
body.customers .crm-cart-pop-checkout:focus {
    color: var(--pp-surface);
    filter: brightness(.94);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .25);
    text-decoration: none;
}

/* Orice imagine-lipsă din portal (nul_image.jpg e un JPG cu „tablă de
   șah"): bitmap-ul e împins în afara cadrului, rămâne fundalul cu glif
   (gri #c3c9d5, neutru, la fel ca placeholder-ul din catalog). Prinde
   mini-coșul, tabelul coșului, detaliul de produs etc. */
body.customers img[src$="nul_image.jpg"] {
    object-fit: contain;
    object-position: -3000px 0;
    background:
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' viewBox='0 0 24 24' fill='none' stroke='%23c3c9d5' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='18' rx='3'/%3E%3Ccircle cx='9' cy='9' r='2'/%3E%3Cpath d='m21 15-3.5-3.5L9 20'/%3E%3C/svg%3E") center / 45% no-repeat,
        var(--pp-bg-muted);
    border-radius: var(--pp-radius-sm);
}

/* Mini-coș à la marketplace: antet, preț pe linie, ștergere, total. */
body.customers .crm-cart-pop-header {
    padding: 10px 12px;
    text-align: center;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--pp-primary);
    border-bottom: 1px solid var(--pp-border);
}

body.customers .crm-cart-pop-right {
    margin-left: auto;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
    flex-shrink: 0;
}

body.customers .crm-cart-pop-price {
    font-size: 13px;
    font-weight: 700;
    color: var(--pp-primary);
    white-space: nowrap;
}

body.customers .crm-cart-pop-remove {
    width: 26px;
    height: 26px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-sm);
    background: var(--pp-surface);
    color: var(--pp-text-muted);
    cursor: pointer;
    font-size: 13px;
    transition: border-color var(--pp-transition-fast), color var(--pp-transition-fast);
}

body.customers .crm-cart-pop-remove:hover {
    border-color: var(--pp-danger);
    color: var(--pp-danger);
}

body.customers .crm-cart-pop-total {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    border-top: 1px solid var(--pp-border);
    font-size: 13px;
}

body.customers .crm-cart-pop-total-label {
    font-weight: 700;
    color: var(--pp-text);
}

body.customers .crm-cart-pop-total-value {
    font-weight: 700;
    font-size: 15px;
    color: var(--pp-text);
}

/* ===== Toast-urile alert_float (common.js: .float-alert.alert-<tip>):
   card alb cu accent colorat pe stânga în locul alertei Bootstrap
   pline, umbră mare, iconul clopoțel colorat pe tip. ===== */
body.customers .float-alert {
    background: var(--pp-surface);
    border: 1px solid var(--pp-border);
    border-left-width: 3px;
    border-radius: var(--pp-radius-md);
    box-shadow: 0 8px 24px rgba(11, 15, 25, .14);
    color: var(--pp-text);
    padding: 10px 34px 10px 12px;
    display: flex;
    align-items: center;
    gap: 8px;
    width: auto;
    max-width: 300px;
}

body.customers .float-alert .alert-title {
    font-size: 13px;
    font-weight: 500;
    color: var(--pp-text);
    line-height: 1.35;
}

body.customers .float-alert .float-alert-icon {
    font-size: 14px;
    flex-shrink: 0;
}

body.customers .float-alert .close {
    position: absolute;
    top: 50%;
    right: 10px;
    transform: translateY(-50%);
    margin: 0;
    width: 20px;
    height: 20px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    line-height: 1;
    color: var(--pp-text-muted);
    opacity: .7;
    text-shadow: none;
}

body.customers .float-alert .close:hover {
    color: var(--pp-text);
    opacity: 1;
}

body.customers .float-alert.alert-success {
    border-left-color: var(--pp-success);
}

body.customers .float-alert.alert-success .float-alert-icon {
    color: var(--pp-success);
}

body.customers .float-alert.alert-danger {
    border-left-color: var(--pp-danger);
}

body.customers .float-alert.alert-danger .float-alert-icon {
    color: var(--pp-danger);
}

body.customers .float-alert.alert-warning {
    border-left-color: var(--pp-warning);
}

body.customers .float-alert.alert-warning .float-alert-icon {
    color: var(--pp-warning);
}

body.customers .float-alert.alert-info {
    border-left-color: var(--pp-info);
}

body.customers .float-alert.alert-info .float-alert-icon {
    color: var(--pp-info);
}

/* ===== Fișiere (clients/files) — dropzone + acțiuni =====
   Mesajul dropzone-ului era cyan #03a9f4 (style.min.css .dropzone
   .dz-message); zona întreagă trece pe violetul temei, cu invitație
   vizibilă la drag (dz-drag-hover e clasa pusă de Dropzone.js). */
/* Al doilea selector (0,5,1) e necesar: dashboard-refresh.css țintește
   .dashboard-refresh.files-page .ui-dash-card-files .dropzone (0,4,0)
   și ar bate rețeta generală (0,2,1). */
body.customers .dropzone,
body.customers .dashboard-refresh.files-page .ui-dash-card-files .dropzone {
    border: 2px dashed rgba(var(--pp-primary-rgb), .35);
    border-radius: var(--pp-radius-md);
    background: rgba(var(--pp-primary-rgb), .03);
    transition: border-color .2s ease, background .2s ease;
}

body.customers .dropzone:hover,
body.customers .dropzone.dz-drag-hover,
body.customers .dashboard-refresh.files-page .ui-dash-card-files .dropzone:hover,
body.customers .dashboard-refresh.files-page .ui-dash-card-files .dropzone.dz-drag-hover {
    border-color: var(--pp-primary);
    background: rgba(var(--pp-primary-rgb), .06);
}

body.customers .dropzone .dz-message {
    color: var(--pp-primary);
    font-size: 15px;
    font-weight: 600;
}

/* „Alege din Google Drive": pastilă albă cu text violet, rețeta
   CTA-urilor din portal — era btn-primary plin, cu uppercase. */
body.customers .ui-dash-files-actions .btn-primary {
    background: #fff !important; /* overrides: legacy .btn-primary background !important */
    border: 1px solid var(--pp-border) !important;
    color: var(--pp-primary) !important;
    border-radius: 10px;
    padding: 8px 14px;
    font-size: 14px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    box-shadow: 0 1px 3px rgba(11, 15, 25, .06);
    transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

body.customers .ui-dash-files-actions .btn-primary:hover,
body.customers .ui-dash-files-actions .btn-primary:focus {
    border-color: var(--pp-primary) !important;
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .18);
    transform: translateY(-1px);
}

/* ===== Calendar (clients/calendar, FullCalendar 3.9) =====
   Evenimentele vin cu background inline #03A9F4 (cyan info, pus de
   server per eveniment), peste care linkurile temei puneau text violet:
   ilizibil. Inline-ul se poate bate doar cu !important — toate
   evenimentele trec uniform pe violetul temei, cu text alb. */
body.customers .fc-event {
    background: var(--pp-primary) !important; /* overrides: style inline background-color per eveniment */
    border-color: var(--pp-primary) !important; /* overrides: idem border-color inline */
    color: #fff !important; /* overrides: body.customers a (violet) */
    border-radius: 6px;
    padding: 2px 6px;
    font-size: 12px;
}

body.customers .fc-event:hover {
    background: var(--pp-primary-hover) !important; /* overrides: idem */
    color: #fff !important;
}

/* Toolbar-ul (Astăzi, săgeți, Lună/Săptămâna/Zi): calendarul rulează cu
   themeSystem bootstrap3, deci butoanele sunt .btn.btn-default cu
   .active — nu .fc-button (regulile pe .fc-button din dashboard-refresh
   sunt moarte). Segmented în limbajul portalului: alb, activ violet
   plin, fără inset-ul Bootstrap. */
body.customers .fc-toolbar .btn-default {
    background: #fff;
    border: 1px solid var(--pp-border);
    color: var(--pp-text-muted);
    box-shadow: none !important; /* anulează inset-ul .btn.active/:active din Bootstrap */
    outline: none !important; /* overrides: bootstrap .btn:focus outline 5px auto -webkit-focus-ring-color */
    text-transform: none;
    /* Flex + înălțime fixă: glyphicon-urile săgeților au top:1px și
       line-height propriu, deci cu padding simplu ieșeau ~2px sub axă. */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 36px;
    padding: 0 14px;
    line-height: 1;
    transition: background .15s ease, color .15s ease, border-color .15s ease;
}

body.customers .fc-toolbar .btn-default .glyphicon {
    top: 0;
    line-height: 1;
}

body.customers .fc-toolbar .btn-default:hover,
body.customers .fc-toolbar .btn-default:focus,
body.customers .fc-toolbar .btn-default:active {
    background: var(--pp-bg-muted);
    color: var(--pp-text);
    border-color: var(--pp-border);
}

body.customers .fc-toolbar .btn-default.active,
body.customers .fc-toolbar .btn-default.active:hover,
body.customers .fc-toolbar .btn-default.active:focus {
    background: var(--pp-primary);
    border-color: var(--pp-primary);
    color: #fff;
}

body.customers .fc-toolbar .btn-default.disabled {
    opacity: .5;
}

/* Ziua de azi: wash violet, nu albastrul --dash-primary. Selectorul
   include #calendar fiindcă dashboard-refresh țintește
   .dashboard-refresh.calendar-page #calendar .fc-today (1,3,0). */
body.customers .calendar-page #calendar td.fc-today {
    background: rgba(var(--pp-primary-rgb), .06);
}

/* Antetul zilelor săptămânii: dashboard-refresh îl are pe albastrele
   hardcodate #eef6fa/#1e3a5f (tot cu #calendar în selector). */
body.customers .calendar-page #calendar .fc-day-header {
    background: var(--pp-cell-wash);
    color: var(--pp-text);
}

/* ===== Checkbox/radio „awesome" (profil — notificări email etc.) =====
   Varianta -info bifată era cyan #03a9f4 (style.min.css); în portal
   ambele variante trec pe violetul temei. Bifa albă din ::after rămâne. */
body.customers .checkbox-info input[type="checkbox"]:checked + label::before,
body.customers .checkbox-primary input[type="checkbox"]:checked + label::before {
    background-color: var(--pp-primary);
    border-color: var(--pp-primary);
}

body.customers .radio-info input[type="radio"]:checked + label::before,
body.customers .radio-primary input[type="radio"]:checked + label::before {
    border-color: var(--pp-primary);
}

body.customers .radio-info input[type="radio"]:checked + label::after,
body.customers .radio-primary input[type="radio"]:checked + label::after {
    background-color: var(--pp-primary);
}

/* ===== GDPR — cardurile de drepturi =====
   Itemul era o casetă gri ștearsă cu buton-pastilă 9999px cu text
   negru; intră în limbajul de card al temei, cu CTA-ul standard. */
body.customers .gdpr-page .gdpr-right-item {
    background: #fff;
    border: 1px solid var(--pp-border);
    border-radius: var(--pp-radius-md);
    padding: 20px;
    transition: border-color .2s ease, box-shadow .2s ease;
}

body.customers .gdpr-page .gdpr-right-item:hover {
    border-color: rgba(var(--pp-primary-rgb), .35);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .10);
}

body.customers .gdpr-page .gdpr-right-heading {
    margin: 0 0 14px;
    font-size: 15px;
    font-weight: 600;
    color: var(--pp-text);
}

body.customers .gdpr-page .ui-dash-btn-secondary {
    display: inline-block;
    background: #fff;
    border: 1px solid var(--pp-border);
    color: var(--pp-primary);
    border-radius: 10px;
    padding: 8px 14px;
    font-size: 14px;
    font-weight: 600;
    box-shadow: 0 1px 3px rgba(11, 15, 25, .06);
    transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

body.customers .gdpr-page .ui-dash-btn-secondary:hover,
body.customers .gdpr-page .ui-dash-btn-secondary:focus {
    border-color: var(--pp-primary);
    color: var(--pp-primary);
    box-shadow: 0 4px 12px rgba(var(--pp-primary-rgb), .18);
    transform: translateY(-1px);
    text-decoration: none;
}
