/*
 * COPIE. Originalul e `public/css/od_console.css`, al portalului vechi.
 *
 * De pe 14 septembrie 2026 v4 nu mai ia NIMIC de la portalul CodeIgniter la
 * rulare: foile, fonturile, imaginile si pluginurile stau in `v4/web/public/`
 * si se servesc de sub `base`-ul aplicatiei (vezi `vite.config.ts`, PORTAL_STYLES).
 * Regulile de stil sunt neschimbate; in `app.css` caile `url(/public/...)` au
 * devenit relative la foaie (`url(../fonts/...)`, `url(../images/...)`).
 * Pana cand portalul vechi dispare, cele doua copii se tin la fel.
 */
/*
 * =============================================================================
 * od_console.css - componentele portalului, pe desenul consolei
 * =============================================================================
 *
 * DE CE EXISTA, SI DE CE SEPARAT DE ZONA
 * -----------------------------------------------------------------------------
 *
 * Foaia asta s-a nascut ca `settings_console.css` si a imbracat o singura zona.
 * Cand a venit randul celui de-al doilea modul, intrebarea a fost daca se
 * copiaza. Nu se copiaza: doua foi care fac acelasi lucru se despart la prima
 * corectura facuta numai in una, si atunci ai doua desene, nu unul.
 *
 * Deci s-a taiat in doua, dupa o linie limpede: aici sta tot ce e COMPONENTA -
 * butonul, campul, cardul, pastila, tabelul, modalul, titlul de pagina - si
 * dincolo, in foaia zonei, sta numai ce tine de sasiul ei anume, cum e rail-ul
 * de navigare al setarilor.
 *
 * Taietura nu e din intuitie. S-a numarat: `label class="color"` e in 180 de
 * fisiere din tot portalul, `<h4><strong>` in 189, `selectpicker` in 151. Alea
 * nu sunt tipare de setari, sunt tipare de portal.
 *
 * -----------------------------------------------------------------------------
 * CUM SE APRINDE PE O ZONA
 * -----------------------------------------------------------------------------
 *
 * Toate regulile pornesc de la `body.od-console`, iar clasa aia se pune din
 * `od_console_zones()` in `general_helper.php`: o lista cu numele modulelor
 * care au trecut pe desenul nou. Un modul se aprinde adaugandu-i numele acolo,
 * si se stinge scotandu-l. Nimic altceva.
 *
 * Se aprinde pe rand, nu deodata, fiindca fiecare modul are markupul lui si
 * merita privit inainte sa fie declarat gata.
 *
 * -----------------------------------------------------------------------------
 * CULOAREA RAMANE A PORTALULUI
 * -----------------------------------------------------------------------------
 *
 * Din desen se ia tot ce nu e culoare: asezarea, tipografia, cardul, cele doua
 * feluri de buton, pastilele, colturile. Griurile raman cele din `tokens.css`,
 * pe care le foloseste tot portalul - vezi blocul de tokenuri pentru cele doua
 * valori care se corecteaza, si de ce.
 *
 * Foaia nu se construieste cu nimic - vezi capul lui `tokens.css` pentru de ce.
 */

/* ==========================================================================
 * 1. TOKENURILE
 * ========================================================================== */

body.od-console {

    /*
     * Culorile NU se schimba aici.
     *
     * Zona a stat o zi pe o paleta calda, luata din desen - off-white si un
     * negru cu galben in el. Arata bine singura, dar langa restul portalului,
     * care e pe griuri reci, se citea ca alt produs: treci din Inventoree in
     * Settings si se schimba temperatura ecranului.
     *
     * Deci griul nostru, cel din `tokens.css`, folosit de tot portalul. Ce se
     * ia din desen ramane tot ce nu e culoare: asezarea, tipografia, cardul,
     * cele doua feluri de buton, pastilele, colturile.
     *
     * Doua valori se corecteaza totusi, si nu ca sa arate altfel:
     */

    /* `--od-ink-faint` e #6b7480, calculat pe ALB, unde da 4,74:1. Fundalul
       paginii nu e alb, e #f4f6f8 - si acolo cade la 4,37:1, sub pragul de
       4,5. Aceeasi nuanta, doar cu doua trepte mai inchisa: 4,98:1 pe fundal,
       5,40:1 pe card. */
    --od-ink-faint: #626b77;

    /* Acelasi lucru la galben: #9e6b00 da 4,61:1 pe alb si 4,25:1 pe fundal.
       Corectat, 5,10:1 pe fundal. E capcana pe care o are orice paleta scrisa
       pe alb si folosita pe altceva. */
    --od-warn: #8a6116;

    /* ---------------------------------------------------------------------
       CE SE IA DIN DESEN
       --------------------------------------------------------------------- */

    /* Colturile: 3px era o linie franta, nu un colt. */
    --od-radius:    8px;
    --od-radius-lg: 12px;

    /* Cardul nu are umbra, are o linie. Umbra il ridica de pe pagina; aici
       toate stau pe acelasi plan, si linia e de ajuns ca sa le desparta. */
    --od-shadow:    none;

    /* Locale zonei - nu urca in tokens.css pana nu le cere si alta zona.
       Butonul primar e chiar `--od-ink`: negrul desenului avea galben in el si
       ar fi fost singurul lucru cald ramas pe ecran. Text alb pe el, 14,76:1. */
    --odc-btn:        #1f2933;
    --odc-btn-hover:  #38424e;
    --odc-pill-bg:    #e4e8ec;  /* ink pe ea, 11,98:1 */
    --odc-pad:        18px;     /* respiratia dinauntrul unui card */

    background-color: var(--od-ground);
    font-family: var(--od-font);
    font-size: var(--od-text-md);
    color: var(--od-ink);
    -webkit-font-smoothing: antialiased;
}

/* Fontul nu se mosteneste peste tot: Bootstrap si machetele il scriu pe nume
   in zeci de reguli, iar `body { font-family }` pierde in fata lor. */
body.od-console h1, body.od-console h2, body.od-console h3, body.od-console h4,
body.od-console h5, body.od-console h6, body.od-console p, body.od-console span,
body.od-console label, body.od-console a, body.od-console td, body.od-console th,
body.od-console li, body.od-console div, body.od-console small, body.od-console strong,
body.od-console .btn, body.od-console .form-control, body.od-console input,
body.od-console select, body.od-console textarea {
    font-family: var(--od-font);
}

body.od-console code, body.od-console pre, body.od-console kbd {
    font-family: var(--od-font-mono);
}

/* ==========================================================================
 * 2. TITLUL PAGINII
 * ==========================================================================
 *
 * `<header class="panel-heading">` cu `<h3><strong>Ceva</strong> altceva</h3>`
 * si `<label class="color">` sub el e tiparul din 31 de ecrane de setari.
 * Bootstrap ii da fundal gri si o bordura, fiindca il crede capul unui panou -
 * dar aici e titlul paginii, si un titlu de pagina nu sta intr-o cutie.
 *
 * Serif-ul apare AICI si nicaieri altundeva pe ecran.
 */

body.od-console header.panel-heading {
    padding: 0 0 4px;
    margin: 0 0 20px;
    background: none;
    border: 0;
}

/*
 * `h3 *`, nu doar `h3`.
 *
 * Titlul se scrie `<h3><strong>Ceva</strong> altceva</h3>`, iar regula de mai
 * sus, care pune fontul pe zeci de elemente ca sa bata Bootstrap-ul, il pune si
 * pe `strong`. Textul titlului sta chiar in `strong`, deci serif-ul era anulat
 * de propria lui foaie - masurat in Chromium: titlul iesea sans, cu tot cu
 * `font-family` corect scris pe `h3`.
 */
body.od-console header.panel-heading h3,
body.od-console header.panel-heading h3 * {
    margin: 0;
    font-family: var(--od-font-display);
    font-size: var(--od-text-display);
    font-weight: var(--od-weight-normal);
    line-height: 1.25;
    color: var(--od-ink);
}

/* `<strong>` e prima jumatate a titlului, nu un accent: la serif se ingroasa
   destul de tare cat sa rupa randul in doua bucati de greutati diferite. */
body.od-console header.panel-heading h3 strong {
    font-weight: var(--od-weight-semibold);
}

/* `label.color` primeste din `_layout.scss` fundal #DDD, inaltime fixa de 25px
   si taiere cu trei puncte - e desenat acolo ca o pastila. Sub titlul unei
   pagini nu e o pastila, e propozitia care spune ce face ecranul, si trebuie
   sa aiba voie sa curga pe doua randuri. */
body.od-console header.panel-heading label.color,
body.od-console header.panel-heading > label {
    display: block;
    margin: 6px 0 0;
    padding: 0;
    height: auto;
    max-width: 70ch;
    background: none;
    border-radius: 0;
    overflow: visible;
    white-space: normal;
    text-overflow: clip;
    font-family: var(--od-font);
    font-size: var(--od-text-sm);
    font-weight: var(--od-weight-normal);
    line-height: 1.45;
    color: var(--od-ink-soft);
}

/* --------------------------------------------------------------------------
 * Acelasi titlu, in panourile incarcate prin AJAX
 * --------------------------------------------------------------------------
 *
 * `header.panel-heading` e tiparul a 32 de ecrane. Dar panourile care se incarca
 * in `.page-content-wrapper` sunt FRAGMENTE, nu pagini, si nu-l pot folosi -
 * ele isi scriu titlul ca `<h4><strong>Ceva</strong> altceva</h4>` cu un
 * `<label class="color">` sub el. Alea sunt 129 de fisiere, adica de patru ori
 * mai multe.
 *
 * Numarat inainte de a scrie regula, ca sa nu prinda si altceva: in zona de
 * setari sunt 191 de `<h4>` fara clasa, si toate sunt titlul panoului - si cele
 * care nu incep cu `<strong>` ("Alarms settings", "Create alarm"). Cele 205 cu
 * clasa sunt in mare parte `modal-title`, care are deja regula lui mai jos.
 * De-aia `:not([class])`: e o linie de despartire care exista deja in markup.
 */
body.od-console h4:not([class]),
body.od-console h4:not([class]) * {
    font-family: var(--od-font-display);
    font-size: 22px;
    font-weight: var(--od-weight-normal);
    line-height: 1.3;
    color: var(--od-ink);
}

body.od-console h4:not([class]) { margin: 0 0 2px; }
body.od-console h4:not([class]) strong { font-weight: var(--od-weight-semibold); }

/*
 * ...dar nu si cand `h4` e titlul unei sectiuni DINAUNTRUL unui card.
 *
 * Cautat inainte de a scrie regula de mai sus, si de-aia exista si asta: din
 * 175 de fisiere cu `<h4>` fara clasa, 146 il au in primele trei randuri - alea
 * sunt titlul panoului. Din celelalte 29, cele mai multe stau intr-o coloana si
 * sunt tot titluri; doua stau insa intr-un card scris de mana (`.rd-card` in
 * RustDesk, `.ak-card` la cheia de API), si acolo un serif de 22 de pixeli ar fi
 * fost mai mare decat titlul paginii de deasupra lui.
 *
 * Un titlu dintr-un card e o eticheta, nu un nume de ecran: ramane sans, si cat
 * randul de sub el.
 */
body.od-console .portlet h4:not([class]),
body.od-console .panel h4:not([class]),
body.od-console section.settings h4:not([class]),
body.od-console [class*="-card"] h4:not([class]),
body.od-console .portlet h4:not([class]) *,
body.od-console .panel h4:not([class]) *,
body.od-console section.settings h4:not([class]) *,
body.od-console [class*="-card"] h4:not([class]) * {
    font-family: var(--od-font);
    font-size: var(--od-text-lg);
    font-weight: var(--od-weight-semibold);
}

/*
 * `label.color` peste tot in zona, nu doar sub `header.panel-heading`.
 *
 * `_layout.scss` il deseneaza ca pastila: fundal #DDD, inaltime fixa de 25px,
 * taiere cu trei puncte. Numarat inainte de a-l dezbraca: din 161 de folosiri
 * in zona de setari, 148 stau imediat sub un titlu - deci sunt propozitia care
 * spune ce face ecranul - si NICIUNA nu e intr-un `form-group`, adica eticheta
 * unui camp. Aici e text, si are voie sa curga pe doua randuri.
 */
body.od-console label.color {
    display: block;
    margin: 0 0 14px;
    padding: 0;
    height: auto;
    max-width: 70ch;
    background: none;
    border-radius: 0;
    overflow: visible;
    white-space: normal;
    text-overflow: clip;
    font-family: var(--od-font);
    font-size: var(--od-text-sm);
    font-weight: var(--od-weight-normal);
    line-height: 1.45;
    color: var(--od-ink-soft);
}

body.od-console label.color strong { font-weight: var(--od-weight-semibold); }

/*
 * Linia de sub titlu.
 *
 * 135 de panouri o pun (`<hr/>` imediat dupa subtitlu). Nu se scoate din
 * markup - ar insemna deschis 135 de fisiere pentru un pixel - dar se trage
 * mai aproape de titlu, ca sa se citeasca drept sfarsitul capului de pagina si
 * nu drept prima despartitura dinauntrul lui.
 */
body.od-console label.color + hr,
body.od-console h4:not([class]) + hr { margin: 4px 0 20px; }

/* ==========================================================================
 * 3. CARDUL
 * ==========================================================================
 *
 * Patru nume pentru acelasi lucru - `portlet`, `section.settings`,
 * `panel-default`, `od-sd-card` - fiindca s-au adunat in ani diferiti. Nu le
 * unific in markup acum; le fac sa arate la fel, ceea ce e tot ce se vede.
 */

body.od-console .portlet,
body.od-console .panel.panel-default,
body.od-console section.settings {
    background: var(--od-surface);
    border: 1px solid var(--od-rule);
    border-radius: var(--od-radius);
    box-shadow: var(--od-shadow);
    padding: var(--odc-pad);
    margin-bottom: 12px;
}

/* Panoul Bootstrap isi tine padding-ul in `.panel-body`; daca il pun si pe
   cutie, se aduna doua. */
body.od-console .panel.panel-default { padding: 0; }
body.od-console .panel.panel-default > .panel-body { padding: var(--odc-pad); }

body.od-console .panel.panel-default > .panel-heading {
    padding: 12px var(--odc-pad);
    background: none;
    border-bottom: 1px solid var(--od-rule-soft);
    font-size: var(--od-text-md);
    font-weight: var(--od-weight-semibold);
    color: var(--od-ink);
}

/* Linia despartitoare dinauntrul unui card. `hr.dotted` e punctata din 2016 si
   nu mai desparte nimic, doar zgarie. */
body.od-console hr,
body.od-console hr.dotted {
    border: 0;
    border-top: 1px solid var(--od-rule-soft);
    margin: 18px 0;
}

/* ==========================================================================
 * 4. BUTOANELE
 * ==========================================================================
 *
 * Doua feluri, atat: unul negru care duce actiunea inainte, unul alb cu
 * bordura pentru restul. Bootstrap are sapte culori de buton, si un ecran cu
 * sapte culori de buton nu spune care e cel important.
 */

body.od-console .btn {
    border-radius: 6px;
    border: 1px solid transparent;
    padding: 6px 12px;
    font-size: var(--od-text-md);
    font-weight: var(--od-weight-medium);
    line-height: 20px;
    box-shadow: none;
    text-shadow: none;
    background-image: none;
    transition: background-color 120ms ease, border-color 120ms ease;
}

body.od-console .btn-primary,
body.od-console .btn-success,
body.od-console .btn-info {
    background: var(--odc-btn);
    border-color: var(--odc-btn);
    color: #fff;
}

body.od-console .btn-primary:hover, body.od-console .btn-primary:focus,
body.od-console .btn-success:hover, body.od-console .btn-success:focus,
body.od-console .btn-info:hover,    body.od-console .btn-info:focus {
    background: var(--odc-btn-hover);
    border-color: var(--odc-btn-hover);
    color: #fff;
}

body.od-console .btn-default,
body.od-console .btn-secondary {
    background: var(--od-surface);
    border-color: var(--od-rule);
    color: var(--od-ink);
}

body.od-console .btn-default:hover, body.od-console .btn-default:focus {
    background: var(--od-surface-alt);
    border-color: #c3cad2;
    color: var(--od-ink);
}

/* Rosul ramane rosu: e singurul buton dupa care nu mai e drum inapoi. */
body.od-console .btn-danger {
    background: var(--od-crit);
    border-color: var(--od-crit);
    color: #fff;
}

body.od-console .btn-danger:hover, body.od-console .btn-danger:focus {
    background: #921c13;
    border-color: #921c13;
    color: #fff;
}

body.od-console .btn-sm, body.od-console .btn-xs {
    padding: 4px 10px;
    font-size: var(--od-text-sm);
    line-height: 18px;
}

body.od-console .btn:focus-visible {
    outline: 2px solid var(--od-info);
    outline-offset: 2px;
}

/* ==========================================================================
 * 5. FORMULARELE
 * ========================================================================== */

body.od-console .control-label,
body.od-console .form-group > label {
    font-size: var(--od-text-sm);
    font-weight: var(--od-weight-medium);
    color: var(--od-ink);
    margin-bottom: 5px;
}

/*
 * ...dar nu si pe o bifa.
 *
 * 18 fisiere scriu `<input class="form-control" type="checkbox">`. Clasa n-are
 * ce cauta acolo - Bootstrap o da campurilor de text - dar exista, si regula de
 * mai jos o lua in serios: intindea bifa pe toata latimea randului, cu bordura
 * si indesare, si o rupea de eticheta ei. Se vedea: casuta ajungea singura in
 * marginea din dreapta, iar cuvantul ramanea la stanga.
 *
 * Nu se repara in cele 18 machete, se exclude aici: o bifa nu e un camp de
 * text nici cand cineva i-a scris clasa gresita.
 */
body.od-console .form-control:not([type="checkbox"]):not([type="radio"]) {
    height: auto;
    padding: 7px 11px;
    font-size: var(--od-text-md);
    color: var(--od-ink);
    background: var(--od-surface);
    border: 1px solid var(--od-rule);
    border-radius: 6px;
    box-shadow: none;
    transition: border-color 120ms ease, box-shadow 120ms ease;
}

body.od-console .form-control:not([type="checkbox"]):not([type="radio"]):focus {
    border-color: #a9b2bd;
    box-shadow: 0 0 0 3px rgba(31, 41, 51, .09);
}

body.od-console .form-control::placeholder { color: var(--od-ink-faint); }

body.od-console .form-control[disabled],
body.od-console .form-control[readonly] {
    background: var(--od-surface-alt);
    color: var(--od-ink-soft);
}

/*
 * Eticheta din formularele orizontale sta intr-un `<span class="color">`.
 *
 * Si `_layout.scss` deseneaza `label span.color` cu ACEEASI pastila gri ca
 * `label.color`: fundal #DDD, inaltime fixa, taiere cu trei puncte. Adica in
 * cele 114 fisiere cu `form-horizontal`, fiecare eticheta de camp arata ca un
 * buton gri lipit deasupra campului.
 *
 * Numarat inainte de a o sterge: din 278 de `<span class="color">` in zona, 266
 * stau INAUNTRUL unui `<label>`, iar restul sunt langa cate un radio - tot
 * etichete. Deci in setari span-ul asta nu e o pastila nicaieri, e numele
 * campului, si se scrie ca atare.
 */
body.od-console label span.color,
body.od-console label .color {
    display: inline;
    padding: 0;
    height: auto;
    line-height: inherit;
    background: none;
    border-radius: 0;
    overflow: visible;
    white-space: normal;
    text-overflow: clip;
    font-size: var(--od-text-sm);
    font-weight: var(--od-weight-medium);
    color: var(--od-ink);
    margin: 0;
}

/*
 * Etichetele orizontale, la stanga.
 *
 * Bootstrap le impinge la dreapta, lipite de camp - de-aia machetele au
 * `style="text-align: left"` scris de mana pe ele, ceea ce e o votare. Aici se
 * face o data pentru toate: un rand de etichete aliniate la stanga se citeste
 * pe verticala, unul aliniat la dreapta se citeste doar pe orizontala, camp cu
 * camp.
 */
body.od-console .form-horizontal .control-label {
    text-align: left;
    padding-top: 8px;
    margin-bottom: 0;
}

body.od-console .help-block,
body.od-console .form-group .color.font-11,
body.od-console .form-group .color.font-12 {
    font-size: var(--od-text-xs);
    color: var(--od-ink-soft);
    margin-top: 5px;
}

body.od-console .form-group { margin-bottom: 16px; }

/*
 * Colturile dintre camp si addon.
 *
 * Bootstrap anuleaza raza pe laturile care se ating, ca sa iasa o singura
 * forma; regula mea de `.form-control` o punea inapoi pe toate patru, deci
 * campul si addon-ul se rotunjeau unul peste altul. Se anuleaza din nou, dar
 * numai unde se ating - 88 de fisiere au `input-group`.
 */
body.od-console .input-group .form-control:first-child,
body.od-console .input-group-btn:first-child > .btn,
body.od-console .input-group-addon:first-child {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

body.od-console .input-group .form-control:last-child,
body.od-console .input-group-btn:last-child > .btn,
body.od-console .input-group-addon:last-child {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

body.od-console .input-group-addon {
    background: var(--od-surface-alt);
    border-color: var(--od-rule);
    color: var(--od-ink-soft);
    font-size: var(--od-text-sm);
    border-radius: 6px;
}

/* --------------------------------------------------------------------------
 * Selectul cu cautare (bootstrap-select), in 81 de fisiere
 * --------------------------------------------------------------------------
 *
 * Pluginul construieste singur markupul, si copiaza clasa `form-control` de pe
 * `<select>` pe INVELISUL lui - un `<div class="btn-group bootstrap-select
 * form-control">` - iar inauntru pune un `<button class="btn dropdown-toggle">`.
 * Deci foaia zonei le imbraca pe amandoua: invelisul primea bordura si coltul
 * de camp, butonul primea bordura si coltul de buton, si iesea o cutie in alta,
 * cu selectul mai inalt cu doisprezece pixeli decat campul de text de sub el.
 *
 * Invelisul se dezbraca de tot - el nu e nimic, e doar un loc unde stau
 * celelalte doua - si campul se deseneaza pe buton, care e ce se vede si ce se
 * apasa. Asa selectul si campul de text au aceeasi inaltime, acelasi colt si
 * aceeasi bordura, ceea ce e tot ce li se cere.
 */
body.od-console .bootstrap-select.form-control,
body.od-console .bootstrap-select.btn-group {
    height: auto;
    padding: 0;
    border: 0;
    background: none;
    box-shadow: none;
    border-radius: 0;
}

body.od-console .bootstrap-select > .dropdown-toggle,
body.od-console .bootstrap-select > .dropdown-toggle:hover,
body.od-console .bootstrap-select > .dropdown-toggle:focus {
    height: auto;
    padding: 7px 26px 7px 11px;
    background: var(--od-surface);
    border: 1px solid var(--od-rule);
    border-radius: 6px;
    box-shadow: none;
    font-size: var(--od-text-md);
    font-weight: var(--od-weight-normal);
    line-height: 20px;
    color: var(--od-ink);
    text-align: left;
    white-space: nowrap;
}

body.od-console .bootstrap-select.open > .dropdown-toggle {
    border-color: #a9b2bd;
    box-shadow: 0 0 0 3px rgba(31, 41, 51, .09);
}

/* "Nothing selected" e o lipsa, nu o valoare: se scrie ca un placeholder. */
body.od-console .bootstrap-select > .dropdown-toggle.bs-placeholder,
body.od-console .bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
body.od-console .bootstrap-select > .dropdown-toggle.bs-placeholder:focus {
    color: var(--od-ink-faint);
}

body.od-console .bootstrap-select > .dropdown-toggle .caret {
    border-top-color: var(--od-ink-faint);
    right: 11px;
}

/* Lista: acelasi carton ca restul zonei, si randuri cu aer. */
body.od-console .bootstrap-select.btn-group .dropdown-menu {
    margin-top: 4px;
    padding: 4px;
    background: var(--od-surface);
    border: 1px solid var(--od-rule);
    border-radius: var(--od-radius);
    box-shadow: 0 10px 30px -14px rgba(31, 41, 51, .35);
}

body.od-console .bootstrap-select.btn-group .dropdown-menu > ul > li > a,
body.od-console .bootstrap-select.btn-group .dropdown-menu li > a {
    padding: 7px 10px;
    border-radius: 5px;
    font-size: var(--od-text-sm);
    color: var(--od-ink);
}

body.od-console .bootstrap-select.btn-group .dropdown-menu li > a:hover,
body.od-console .bootstrap-select.btn-group .dropdown-menu li > a:focus,
body.od-console .bootstrap-select.btn-group .dropdown-menu li.active > a {
    background: var(--od-surface-alt);
    color: var(--od-ink);
}

body.od-console .bootstrap-select.btn-group .dropdown-menu li.selected > a {
    background: var(--odc-pill-bg);
    font-weight: var(--od-weight-medium);
}

body.od-console .bootstrap-select.btn-group .dropdown-menu .divider {
    background: var(--od-rule-soft);
    margin: 4px 0;
}

/* Casuta de cautare din capul listei si titlurile de grup. */
body.od-console .bootstrap-select .bs-searchbox { padding: 4px 4px 8px; }

body.od-console .bootstrap-select.btn-group .dropdown-header {
    padding: 8px 10px 4px;
    font-size: var(--od-text-2xs);
    font-weight: var(--od-weight-semibold);
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--od-ink-faint);
}

/* --------------------------------------------------------------------------
 * Bifele si butoanele radio
 * --------------------------------------------------------------------------
 *
 * In zona sunt patru feluri, si numarate asa: 133 de locuri cu bifa nativa fara
 * nicio clasa, 60 cu Switchery, 36 cu iCheck, 18 cu `form-control` scris gresit
 * pe ea.
 *
 * NATIVA. Browserul o deseneaza cu albastrul lui, care nu e nicio culoare a
 * portalului - iar `accent-color` il schimba dintr-un rand, fara sa ascunda
 * bifa adevarata sub un `<span>` desenat, cum fac pluginurile. Bifa ramane
 * bifa: o citeste si cititorul de ecran, si tastatura o gaseste singura.
 */
/* `.form-control` mai are din Bootstrap `display: block` si `width: 100%`, iar
   excluderea de mai sus scoate doar regulile mele. Fara astea doua, bifa
   ramanea pe un rand al ei, cu eticheta cazuta dedesubt. */
body.od-console input[type="checkbox"].form-control,
body.od-console input[type="radio"].form-control {
    display: inline-block;
    width: 15px;
    padding: 0;
    border: 0;
    background: none;
    box-shadow: none;
}

body.od-console input[type="checkbox"],
body.od-console input[type="radio"] {
    accent-color: var(--od-ink);
    width: 15px;
    height: 15px;
    margin: 0 6px 0 0;
    vertical-align: -2px;
    cursor: pointer;
}

body.od-console input[type="checkbox"] + label,
body.od-console input[type="radio"] + label {
    font-weight: var(--od-weight-normal);
    margin-right: 16px;
    cursor: pointer;
}

/*
 * SWITCHERY. Pluginul isi scrie culoarea INLINE, la initializare, iar portalul
 * i-o da din javascript - si i-o da in zece feluri: #64BD63 in sasisprezece
 * locuri, #0090D9 in opt, si dupa ele #0000FF, #F00, #F0AD4E, #5bc0de, si
 * altele. Adica acelasi comutator inseamna "pornit" in zece culori, dupa ecranul
 * pe care nimeresti.
 *
 * Se corecteaza aici, si numai aici, fiindca alternativa era sa umblu in zeci
 * de initializari de javascript ca sa schimb o culoare. `!important` nu e o
 * scurtatura de lene: stilul pe care il bate e scris inline de plugin, si nimic
 * altceva nu-l poate bate.
 *
 * Starea se citeste din bifa adevarata, nu dintr-o clasa: Switchery nu pune
 * niciuna. Pune insa `<span class="switchery">` imediat dupa `<input>`, deci
 * `input:checked + .switchery` spune exact ce trebuie - verificat in browser
 * inainte de a scrie regula, pe pluginul adevarat.
 *
 * Pozitia bulinei ramane a pluginului: aia e miscarea lui, si n-am ce cauta in
 * ea.
 */
body.od-console .switchery {
    background-color: var(--od-rule) !important;
    border-color: var(--od-rule) !important;
    box-shadow: none !important;
}

body.od-console input:checked + .switchery {
    background-color: var(--od-ink) !important;
    border-color: var(--od-ink) !important;
}

/*
 * ICHECK: rosul, schimbat pe negru fara sa se atinga javascriptul.
 *
 * Cele 36 de locuri il pornesc cu `checkboxClass: 'icheckbox_flat-red'`, iar
 * skin-urile lui sunt imagini-sprite, nu culori - deci parea ca trebuie umblat
 * in fiecare initializare, adica in treizeci si sase de fisiere de javascript,
 * pentru o culoare.
 *
 * Nu trebuie. Skin-ul de baza al pluginului, `flat`, e NEGRU, si e in aceeasi
 * mapa. Comparate cele doua foi rand cu rand, singura deosebire dintre ele e
 * comentariul din cap: aceleasi marimi, aceleasi pozitii de sprite, aceeasi
 * regula de retina. Deci nu e nevoie de alta clasa, ci doar de alta imagine
 * sub clasa care exista - si aia se schimba de aici.
 *
 * Negrul sprite-ului nu e chiar `--od-ink`, fiindca e o poza, nu o culoare. E
 * insa mult mai aproape de el decat rosul de pana acum, care nu era nicio
 * culoare a portalului.
 */
body.od-console .icheckbox_flat-red,
body.od-console .iradio_flat-red {
    background-image: url(../plugins/iCheck/skins/flat/flat.png);
}

@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25),
       (min-resolution: 120dpi), (min-resolution: 1.25dppx) {
    body.od-console .icheckbox_flat-red,
    body.od-console .iradio_flat-red {
        background-image: url(../plugins/iCheck/skins/flat/flat@2x.png);
    }
}

/* ==========================================================================
 * 6. ALERTELE
 * ==========================================================================
 *
 * Tenta plata si o linie la stanga, nu bordura pe toate patru laturile cu
 * gradient in ea. Alerta e o propozitie, nu un obiect.
 */

body.od-console .alert {
    padding: 11px 14px;
    border: 0;
    border-left: 3px solid transparent;
    border-radius: 6px;
    font-size: var(--od-text-sm);
    box-shadow: none;
    text-shadow: none;
}

body.od-console .alert-success { background: var(--od-ok-bg);   border-left-color: var(--od-ok);   color: var(--od-ink); }
body.od-console .alert-warning { background: var(--od-warn-bg); border-left-color: var(--od-warn); color: var(--od-ink); }
body.od-console .alert-danger  { background: var(--od-crit-bg); border-left-color: var(--od-crit); color: var(--od-ink); }
body.od-console .alert-info    { background: var(--od-info-bg); border-left-color: var(--od-info); color: var(--od-ink); }

body.od-console .alert .fas,
body.od-console .alert .fa { margin-right: 4px; }

body.od-console .alert-success .fas, body.od-console .alert-success .fa { color: var(--od-ok); }
body.od-console .alert-warning .fas, body.od-console .alert-warning .fa { color: var(--od-warn); }
body.od-console .alert-danger .fas,  body.od-console .alert-danger .fa  { color: var(--od-crit); }
body.od-console .alert-info .fas,    body.od-console .alert-info .fa    { color: var(--od-info); }

/* ==========================================================================
 * 7. PASTILELE
 * ==========================================================================
 *
 * Bootstrap le face dreptunghiuri pline de culoare tare. In consola sunt
 * rotunde, cu tenta palida si scris inchis - se citesc ca o stare, nu ca o
 * alarma. Rosul si galbenul raman singurele care tipa, si numai cand trebuie.
 */

body.od-console .label,
body.od-console .badge {
    display: inline-block;
    padding: 3px 8px;
    border-radius: 999px;
    font-size: var(--od-text-xs);
    font-weight: var(--od-weight-medium);
    line-height: 16px;
    text-shadow: none;
    background: var(--odc-pill-bg);
    color: var(--od-ink-soft);
}

/* Verdele pastilei nu e `--od-ok`, si nu din capriciu: `--od-ok` (#008300) pe
   `--od-ok-bg` (#e4f2e4) da 4,27:1, adica sub prag. E o pereche care se atinge
   numai la pastile - alertele scriu cu ink pe tenta, nu cu verde pe verde, deci
   acolo nu se vede. Cu doua trepte mai inchis: 4,79:1. */
/*
 * `<label class="label bg-default color-white">` - 16 locuri.
 *
 * Se citea la 1,40:1: alb pe #DADADA. Nu e ceva ce am stricat eu - se citea la
 * fel si inainte - dar am masurat zona, deci nu-l las asa.
 *
 * Ce e de fapt: toate cele saisprezece sunt `<label>` intr-un formular, in
 * adam_intop si in actiunile de declansator. Niciuna nu e o pastila de stare -
 * sunt numele campului de sub ele. Cineva a incercat sa le scoata in evidenta
 * imbracandu-le in trei clase de pastila, si a iesit un cuvant nescris.
 *
 * Deci nu se face pastila inchisa cu scris alb - se face ce sunt: eticheta de
 * camp, ca toate celelalte din zona. Aia e si consecventa, si citibila.
 *
 * `!important` fiindca amandoua utilitarele il au: `.bg-default` e
 * `#DADADA !important` si `.color-white` e `white !important`. Fara el, regula
 * asta nu apuca nimic - verificat in browser, nu presupus.
 */
body.od-console label.label.bg-default,
body.od-console label.label.color-white {
    display: inline-block;
    padding: 0;
    background: none !important;
    border-radius: 0;
    font-size: var(--od-text-sm) !important;
    font-weight: var(--od-weight-medium);
    line-height: 1.45;
    color: var(--od-ink) !important;
    margin: 0 0 5px;
}

/*
 * Bara colorata a modulului isi tine pastila ei.
 *
 * `#page-header-nav` e banda cu filele modulului, iar `app.css` ii da pastilei
 * de acolo `background-color: #dc3545` printr-un selector cu doua id-uri.
 * Regula de mai sus are o singura clasa: pierde fundalul, dar castiga scrisul,
 * fiindca in bara nu e declarat niciun `color`. A iesit scris inchis pe rosu -
 * s-a si vazut asa la Proactivitee, pe numerele de pe file: "All Devices 10"
 * cu zecele nescris.
 *
 * Nu se ridica specificitatea regulii de sus ca sa imbrace si bara. Doua
 * motive: bara e desenata de modul, cu culorile lui, si n-are ce cauta in foaia
 * de continut; iar daca ar creste, ar ajunge sa bata `.label-success` si
 * celelalte de mai jos, care au o clasa in plus si atat. Se face invers - o
 * exceptie scrisa pe fata, care lasa bara asa cum era.
 */
body.od-console #page-header-nav li .label,
body.od-console #page-header-nav li .badge {
    padding: 3px 5px;
    border-radius: 3px;
    font-weight: 300;
    line-height: normal;
    color: #fff;
}

body.od-console .label-success, body.od-console .badge-success { background: var(--od-ok-bg);   color: #007a00; }
body.od-console .label-warning, body.od-console .badge-warning { background: var(--od-warn-bg); color: var(--od-warn); }
body.od-console .label-danger,  body.od-console .badge-danger  { background: var(--od-crit-bg); color: var(--od-crit); }
body.od-console .label-info,    body.od-console .badge-info    { background: var(--od-info-bg); color: var(--od-info); }

/*
 * PRIMARY SI DEFAULT, CELE DOUA CARE LIPSEAU DE AICI.
 *
 * Cele patru de deasupra sunt stari. `primary` si `default` nu sunt: unul e
 * ACCENTUL, celalalt e LINISTEA. Nefiind tentate, cadeau amandoua pe pastila
 * de baza - aceeasi hartie, aceeasi cerneala - deci purtau acelasi desen sub
 * doua nume.
 *
 * Nu erau nelizibile, cum s-a raportat: `body.od-console .label` (0,2,1) bate
 * `.label-default` din `app.css` (0,1,0), deci scrisul statea la 4,80:1. Cifra
 * de 1,3:1 vine dintr-o masuratoare facuta in jsdom, care nu stie `var()`:
 * acolo fundalul zonei iese transparent si prin el se vede `#337ab7` al lui
 * Bootstrap, care pe ecran nu se vede niciodata. Defectul adevarat era ca NU SE
 * DEOSEBEAU UNA DE ALTA - iar doua ecrane din zona pun tocmai perechea asta sa
 * spuna doua lucruri: cate reguli are un eveniment (Notifications) si daca
 * serviciul e de afaceri sau de IT (Easeedesk reports).
 *
 * `default` ramane pastila de baza, scrisa acum pe fata: e taman ce trebuie sa
 * fie, adica linistita, si scrisa aici nu mai depinde de cine castiga cascada.
 *
 * `primary` ia CERNEALA zonei cu scris alb - 14,76:1 - fiindca aia e deja
 * hotararea zonei pentru "accentul": `.btn-primary` de mai sus e chiar
 * `--odc-btn`. Nu albastrul lui `info`: alea doua ar fi ajuns iar acelasi desen
 * sub doua nume, adica exact defectul de care se scapa aici. Pastila plina e
 * si ce se cere de locul in care e pusa - un numar (cate reguli, ce SLA, cate
 * minute), care are de iesit in fata unui zero linistit de langa el.
 */
body.od-console .label-default, body.od-console .badge-default { background: var(--odc-pill-bg); color: var(--od-ink-soft); }
body.od-console .label-primary, body.od-console .badge-primary { background: var(--odc-btn);     color: #fff; }

/* ==========================================================================
 * 8. TABELELE
 * ==========================================================================
 *
 * Capul de tabel isi lasa fundalul si ramane cu o linie sub el. Randurile n-au
 * nevoie de dungi ca sa se citeasca daca au aer si o linie subtire intre ele -
 * dungile sunt ce pui cand n-ai niciuna dintre astea doua.
 */

body.od-console table.table,
body.od-console table.dataTableM,
body.od-console table.dataTable {
    font-size: var(--od-text-sm);
    color: var(--od-ink);
    border-collapse: collapse;
}

/* Banda inchisa e pusa pe `<thead>`, nu pe celule: `.settings .dataTableM >
   thead` o umple cu #393F4C, culoarea modulului. De-aia coloratul celulelor
   n-o stergea - masurat in Chromium, `th` era deja transparent si tot se
   vedea inchis. */
body.od-console table.table > thead,
body.od-console table.dataTableM > thead,
body.od-console table.dataTable > thead,
body.od-console table.table > thead > tr,
body.od-console table.dataTableM > thead > tr,
body.od-console table.dataTable > thead > tr {
    background: none;
}

body.od-console table.table > thead > tr > th,
body.od-console table.dataTableM > thead > tr > th,
body.od-console table.dataTable > thead > tr > th {
    padding: 8px 10px;
    background: none;
    border: 0;
    border-bottom: 1px solid var(--od-rule);
    font-size: var(--od-text-2xs);
    font-weight: var(--od-weight-semibold);
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--od-ink-faint);
    white-space: nowrap;
}

body.od-console table.table > tbody > tr > td,
body.od-console table.dataTableM > tbody > tr > td,
body.od-console table.dataTable > tbody > tr > td {
    padding: 9px 10px;
    border: 0;
    border-bottom: 1px solid var(--od-rule-soft);
    vertical-align: middle;
}

/* Dungile sunt scrise in doua locuri si pe amandoua paritatile - randul impar
   alb pe `td`, cel par #EBECF0 tot pe `td`, iar `tr` capata si el un gri de la
   Bootstrap. Se sterg toate patru: cu aer intre randuri si o linie subtire,
   dungile nu mai au ce sa desparta. */
body.od-console table.table-striped > tbody > tr:nth-child(odd),
body.od-console table.table-striped > tbody > tr:nth-child(even),
body.od-console table.table-striped > tbody > tr:nth-child(odd) > td,
body.od-console table.table-striped > tbody > tr:nth-child(odd) > th,
body.od-console table.table-striped > tbody > tr:nth-child(even) > td,
body.od-console table.table-striped > tbody > tr:nth-child(even) > th {
    background: none;
}
body.od-console table.table > tbody > tr:hover > td,
body.od-console table.dataTableM > tbody > tr:hover > td { background: var(--od-surface-alt); }
body.od-console table.table > tbody > tr:last-child > td { border-bottom: 0; }

/*
 * Randul "nu e nimic aici".
 *
 * DataTables il scrie singur cand tabelul e gol, iar `_settings.scss` ii pune
 * fundal #393F4C - culoarea modulului - si o bordura de doi pixeli in aceeasi
 * culoare. Iesea o banda inchisa in mijlocul unui carton alb, care se citeste a
 * eroare: primul lucru pe care il crede omul e ca s-a stricat ceva, nu ca nu
 * are inca nimic.
 *
 * Un tabel gol e o stare obisnuita, si arata ca atare: o propozitie linistita,
 * la mijloc, cu aer in jur.
 */
body.od-console td.dataTables_empty,
body.od-console table.dataTableSettings td.dataTables_empty {
    padding: 28px 12px !important;
    background: none;
    border: 0;
    border-top: 1px solid var(--od-rule-soft);
    text-align: center;
    font-size: var(--od-text-sm);
    color: var(--od-ink-soft);
}

body.od-console .settingsTable table.dataTableSettings td.dataTables_empty {
    border: 0;
    border-top: 1px solid var(--od-rule-soft);
}

/* ==========================================================================
 * 9. ANTETUL DE MODAL
 * ==========================================================================
 *
 * Era colorat cu culoarea modulului (`.settings .modal-header { background:
 * $settings }`), cu text alb pe el. Aici antetul e alb si spune ce face
 * fereastra; culoarea nu adauga nimic la asta.
 */

body.od-console .modal-content {
    border: 1px solid var(--od-rule);
    border-radius: var(--od-radius-lg);
    box-shadow: 0 12px 40px -12px rgba(31, 41, 51, .3);
}

body.od-console .modal-header {
    background: var(--od-surface) !important;
    border-bottom: 1px solid var(--od-rule-soft);
    padding: 16px 20px;
    border-radius: var(--od-radius-lg) var(--od-radius-lg) 0 0;
}

body.od-console .modal-header .modal-title {
    font-size: var(--od-text-lg);
    font-weight: var(--od-weight-semibold);
    color: var(--od-ink);
}

body.od-console .modal-header .close {
    color: var(--od-ink-soft);
    opacity: 1;
    text-shadow: none;
}

body.od-console .modal-body   { padding: 20px; }
body.od-console .modal-footer {
    padding: 14px 20px;
    border-top: 1px solid var(--od-rule-soft);
    background: var(--od-surface-alt);
    border-radius: 0 0 var(--od-radius-lg) var(--od-radius-lg);
}

/* ==========================================================================
 * 11. FILELE
 * ==========================================================================
 *
 * Si `menu-tab` (bara de setari a unui modul), si `nav-tabs` (filele dinauntrul
 * unui ecran) devin acelasi lucru: text, si o linie sub cel ales.
 */

body.od-console .nav-tabs {
    border-bottom: 1px solid var(--od-rule);
    margin-bottom: 18px;
}

body.od-console .nav-tabs > li > a {
    border: 0;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    margin: 0 18px 0 0;
    padding: 8px 0;
    font-size: var(--od-text-md);
    font-weight: var(--od-weight-medium);
    color: var(--od-ink-soft);
    background: none;
}

body.od-console .nav-tabs > li > a:hover {
    border-bottom-color: var(--od-rule);
    background: none;
    color: var(--od-ink);
}

body.od-console .nav-tabs > li.active > a,
body.od-console .nav-tabs > li.active > a:hover,
body.od-console .nav-tabs > li.active > a:focus {
    border: 0;
    border-bottom: 2px solid var(--od-ink);
    background: none;
    color: var(--od-ink);
}
