/* ============================================================
   StomaPlan - foaia de stil a aplicației
   Registru: instrument profesional, alb curat, accent "sage"
   ============================================================ */

:root {
    /* Culori de bază */
    --primary:       #2b5fc7;
    --primary-hover: #234fae;
    --primary-deep:  #1a3a80;
    --primary-soft:  #e9effc;
    --focus:         #4f7fe0;

    --ink:       #191c24;
    --muted:     #5c6270;
    --bg:        #ffffff;
    --surface2:  #f4f4f5; /* v1.88.90 - gri neutru (era albăstrui) */
    --line:      #e4e4e6; /* v1.88.89 - gri neutru, fără tenta albastră */
    --line-soft: #efeff1;

    --danger:      #b3362a;
    --danger-deep: #8f2f24;
    --danger-soft: #fbeeec;
    --danger-line: #ecc9c3;

    /* Mișcare */
    --ease-out:   cubic-bezier(0.23, 1, 0.32, 1);
    --ease-inout: cubic-bezier(0.77, 0, 0.175, 1);

    /* Straturi */
    --z-bar:   40;
    --z-rail:  60;
    --z-pop:   80;
    --z-toast: 90;
}

/* ============================================================
   Bază
   ============================================================ */
* { box-sizing: border-box; }

html { height: 100%; }

body {
    margin: 0;
    min-height: 100%;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
                 "Helvetica Neue", Arial, sans-serif;
    font-size: 14px;
    line-height: 1.45;
    color: var(--ink);
    background: var(--bg);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}

h1, h2, h3 { line-height: 1.2; color: var(--ink); }
p  { margin: 0 0 10px; }
a  { color: var(--primary-deep); }

.ic { display: inline-block; vertical-align: middle; flex: none; }

.skip-link {
    position: absolute;
    left: -9999px;
    top: 8px;
    background: var(--ink);
    color: #fff;
    padding: 8px 14px;
    border-radius: 8px;
    z-index: 100;
}
.skip-link:focus { left: 8px; }

:focus-visible {
    outline: 2px solid var(--focus);
    outline-offset: 2px;
    border-radius: 4px;
}

.spacer { flex: 1; }
.muted  { color: var(--muted); }

/* ============================================================
   Schela paginii: rail fix + conținut
   ============================================================ */
.rail {
    position: fixed;
    inset: 0 auto 0 0;
    width: 232px;
    background: var(--rail);
    color: var(--rail-text, #c3c9d8);
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 14px 12px;
    z-index: var(--z-rail);
}

.brand {
    display: flex;
    align-items: center;
    gap: 10px;
    color: inherit;
    text-decoration: none;
    padding: 6px 8px;
}
.brand-mark {
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: var(--rail-hi);
    color: var(--rail-accent, #a9c4f5);
    flex: none;
}
.brand-text strong {
    display: block;
    font-size: 15.5px;
    letter-spacing: 0.2px;
    color: var(--rail-strong, #f4f6fa);
}
.brand-text small {
    display: block;
    font-size: 11px;
    color: var(--rail-muted, #9aa3b8);
    max-width: 148px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.rail-nav {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
}
.rail-link {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 9px 11px;
    border-radius: 9px;
    color: var(--rail-text, #c3c9d8);
    text-decoration: none;
    font-size: 13.5px;
    font-weight: 500;
    transition: background 0.15s ease, color 0.15s ease;
}
.rail-link.is-active {
    background: var(--rail-hi);
    color: var(--rail-strong, #fff);
    font-weight: 600;
}
.rail-link.is-active .ic { color: var(--rail-accent, #a9c4f5); }

.rail-foot {
    display: flex;
    align-items: center;
    gap: 6px;
    border-top: 1px solid var(--rail-accent, #2e3750);
    padding-top: 12px;
}
.rail-user {
    display: flex;
    align-items: center;
    gap: 9px;
    flex: 1;
    min-width: 0;
    color: inherit;
    text-decoration: none;
    padding: 6px;
    border-radius: 9px;
    transition: background 0.15s ease;
}
.rail-user-text { min-width: 0; }
.rail-user-text strong {
    display: block;
    font-size: 12.5px;
    color: var(--rail-text, #eceff5);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.rail-user-text small { font-size: 11px; color: var(--rail-muted, #9aa3b8); }

.avatar {
    width: 32px;
    height: 32px;
    border-radius: 999px;
    display: grid;
    place-items: center;
    font-size: 12px;
    font-weight: 700;
    color: #fff;
    background: var(--c, #5c6270);
    flex: none;
}

.rail-out {
    color: var(--rail-muted, #9aa3b8);
    padding: 8px;
    border-radius: 8px;
    display: grid;
    place-items: center;
    transition: background 0.15s ease, color 0.15s ease;
}

.rail-scrim {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.4);
    z-index: calc(var(--z-rail) - 1);
}

.shell {
    margin-left: 232px;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

.topbar {
    display: none;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border-bottom: 1px solid var(--line);
    background: #fff;
    position: sticky;
    top: 0;
    z-index: var(--z-bar);
}
.topbar-title { font-weight: 700; font-size: 15px; }

/* v1.69.6 - butonul principal mutat în bara de sus stă mereu în dreapta,
   inclusiv după rotirea telefonului în landscape (761-900px) */
/* v1.89.90 - triunghiul de alertă din locul burgerului: roșu; v1.89.94 - licăre DOAR
   triunghiul (svg-ul), chenarul pătratului rămâne fix. */
@keyframes tbAlertPulse { 50% { opacity: 0.35; } }
.topbar .tb-alert { color: #e04545; }
.topbar .tb-alert .ic { animation: tbAlertPulse 1.1s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .topbar .tb-alert .ic { animation: none; } }

.topbar .btn-top-new {
    margin-left: auto;
    order: 99;
    padding: 7px 12px;
    font-size: 13.5px;
}

.main {
    flex: 1;
    min-width: 0;
    padding: 22px clamp(16px, 3vw, 32px) 34px;
}

/* ============================================================
   Butoane
   ============================================================ */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 8px 14px;
    border-radius: 9px;
    border: 1px solid transparent;
    background: none;
    font: inherit;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--ink);
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s ease, border-color 0.15s ease,
                color 0.15s ease, transform 0.12s var(--ease-out);
}
.btn:active { transform: scale(0.97); }
.btn:disabled { opacity: 0.55; pointer-events: none; }

.btn-primary { background: var(--primary); color: var(--primary-fg, #fff); }
.btn-ghost   { border-color: var(--line); background: #fff; }
.btn-icon    { padding: 7px; }
.btn-sm      { padding: 5px 10px; font-size: 12.5px; border-radius: 8px; }
.btn-block   { width: 100%; }

.btn-danger        { color: var(--danger-deep); }
.btn-danger-solid  { background: var(--danger); color: #fff; }

/* ============================================================
   Câmpuri de formular
   ============================================================ */
.input {
    width: 100%;
    padding: 8px 11px;
    border-radius: 9px;
    border: 1px solid var(--line);
    background: #fff;
    font: inherit;
    font-size: 14px;
    color: var(--ink);
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.input:focus {
    outline: none;
    border-color: var(--focus);
    box-shadow: 0 0 0 3px #dde7f9;
    box-shadow: 0 0 0 3px color-mix(in oklab, var(--focus) 20%, white);
}
.input::placeholder { color: #98a0b2; }

.input-sm { width: auto; padding: 6px 10px; font-size: 13px; }

select.input {
    appearance: none;
    padding-right: 30px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235c6270' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9.5 12 15.5 18 9.5'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 9px center;
    background-size: 14px;
}

textarea.input { resize: vertical; min-height: 58px; }

.input-wrap { position: relative; }
.input-ic {
    position: absolute;
    left: 10px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--muted);
    pointer-events: none;
}
.input.has-ic { padding-left: 31px; }

.field {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
}
.field > label,
.field-label {
    font-size: 12.5px;
    font-weight: 600;
    color: #3e4452;
}
.lbl-opt { font-weight: 400; color: var(--muted); }

.check {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
    font-weight: 500;
    color: #3e4452;
    cursor: pointer;
    user-select: none;
}
.check input[type="checkbox"],
input[type="checkbox"],
input[type="radio"] { accent-color: var(--primary); }
.check input[type="checkbox"] { width: 15px; height: 15px; }

/* ============================================================
   Control segmentat, cipuri, insigne
   ============================================================ */
.seg {
    display: inline-flex;
    gap: 2px;
    background: var(--surface2);
    border: 1px solid var(--line);
    border-radius: 10px;
    padding: 3px;
}
.seg-btn {
    border: none;
    background: none;
    padding: 6px 12px;
    border-radius: 7px;
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    color: var(--muted);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
}
.seg-btn.is-active {
    background: #fff;
    color: var(--ink);
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.09);
}
.seg-sm .seg-btn { padding: 4px 10px; font-size: 12.5px; }

.chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.chip {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 11px;
    border-radius: 7px;
    border: 1px solid var(--line);
    background: #fff;
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: #3e4452;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.chip.is-active {
    border-color: var(--primary);
    background: var(--primary-soft);
    color: var(--primary-deep);
}
.chip-dot {
    width: 9px;
    height: 9px;
    border-radius: 999px;
    background: var(--c, #94a0b8);
    flex: none;
    display: inline-block;
}
.chip-dot-all {
    background: conic-gradient(#2F6FE4, #2E9E5B, #DE7C0D, #D6336C, #2F6FE4);
}

.badge {
    display: inline-flex;
    align-items: center;
    padding: 3px 9px;
    border-radius: 7px; /* v1.86.3 - pastilele scurte arătau ca buline */
    border: 1px solid transparent;
    font-size: 11.5px;
    font-weight: 600;
    white-space: nowrap;
}
.badge.st-programata  { background: #edeff4; color: #3f4552; border-color: #dfe3ec; }
.badge.st-confirmata  { background: var(--primary-soft); color: #1e3f8f; border-color: #c9d9f5; }
.badge.st-finalizata  { background: #e8f3ea; color: #316b41; border-color: #d3ebdb; }
.badge.st-anulata     { background: #f9e9e7; color: #a13a2e; border-color: #efd2cd; }
.badge.st-neprezentat { background: #f7efdd; color: #8a6116; border-color: #ecdfc0; }
.badge-off            { background: #eff1f5; color: #767c8c; border-color: #dfe2ea; }

/* ============================================================
   Alerte, toast-uri
   ============================================================ */
.alert {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 13.5px;
    margin-bottom: 14px;
}
.alert .ic { margin-top: 1px; }
.alert-error {
    background: var(--danger-soft);
    border: 1px solid var(--danger-line);
    color: var(--danger-deep);
}
.alert-info {
    background: var(--primary-soft);
    border: 1px solid #c9d9f5;
    color: #1e3f8f;
}

.toast-host {
    position: fixed;
    right: 18px;
    bottom: 18px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    z-index: var(--z-toast);
}
.toast {
    display: flex;
    align-items: flex-start;
    background: #1d222e;
    color: #f2f3ea;
    padding: 10px 14px;
    border-radius: 10px;
    font-size: 13px;
    line-height: 1.4;
    max-width: 340px;
    box-shadow: 0 10px 28px rgba(15, 20, 35, 0.28);
    opacity: 0;
    transform: translateY(8px);
    transition: transform 0.2s var(--ease-out), opacity 0.2s ease;
}
.toast::before {
    content: "";
    width: 8px;
    height: 8px;
    border-radius: 99px;
    background: #94a0b8;
    flex: none;
    margin: 5px 9px 0 0;
}
.toast-success::before { background: #a3c255; }
.toast-error::before   { background: #e2695c; }
.toast.is-in { opacity: 1; transform: none; }

/* ============================================================
   Dialoguri
   ============================================================ */
.dlg {
    border: none;
    border-radius: 14px;
    padding: 0;
    width: min(560px, calc(100vw - 32px));
    color: var(--ink);
    box-shadow: 0 24px 64px rgba(15, 20, 35, 0.3);
}
.dlg::backdrop { background: rgba(0, 0, 0, 0.45); }
.dlg[open] { animation: dlgIn 0.18s var(--ease-out); }
.dlg[open]::backdrop { animation: fadeIn 0.18s ease; }

@keyframes dlgIn {
    from { opacity: 0; transform: scale(0.97) translateY(4px); }
}
@keyframes fadeIn {
    from { opacity: 0; }
}

.dlg-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 16px 18px 0;
}
.dlg-head h2 { margin: 0; font-size: 16.5px; }
/* v1.88.99 - X-ul de închidere: roșu, aceeași dimensiune peste tot */
.dlg-x {
    margin-right: -6px;
    width: 30px; height: 30px; padding: 0; flex: 0 0 auto;
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--danger); border: none; border-radius: 8px; color: #fff;
    box-shadow: none;
}

.dlg-x .ic { width: 15px; height: 15px; }

.dlg-body { padding: 14px 18px 4px; }
.dlg-foot {
    display: flex;
    justify-content: flex-end;
    gap: 9px;
    padding: 14px 18px 16px;
}
.dlg-foot-split {
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}
.dlg-foot-left  { display: flex; gap: 6px; flex-wrap: wrap; }
.dlg-foot-right { display: flex; gap: 9px; }

.dlg-view    { width: min(480px, calc(100vw - 32px)); }
.dlg-confirm { width: min(420px, calc(100vw - 32px)); }
.dlg-confirm .dlg-body { padding-top: 18px; font-size: 14px; }

.form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px 14px;
}
.field-wide { grid-column: 1 / -1; }

.form-error {
    margin-top: 12px;
    background: var(--danger-soft);
    border: 1px solid var(--danger-line);
    color: var(--danger-deep);
    padding: 10px 12px;
    border-radius: 9px;
    font-size: 13px;
}
.conf-row  { margin-top: 5px; font-weight: 600; }
.conf-hint { margin-top: 4px; color: #a2564c; font-size: 12.5px; }

/* Combobox pacient */
.combo { position: relative; }
.combo-list {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 10px;
    box-shadow: 0 10px 30px rgba(15, 20, 35, 0.14);
    z-index: 20;
    max-height: 220px;
    overflow-y: auto;
}
.combo-item {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    width: 100%;
    padding: 9px 12px;
    border: none;
    background: none;
    font: inherit;
    font-size: 13.5px;
    text-align: left;
    cursor: pointer;
}
.combo-item span { color: var(--muted); font-size: 12.5px; }
.combo-item.is-active { background: var(--primary-soft); }

.combo-linked {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    font-size: 12px;
    font-weight: 600;
    color: var(--primary-deep);
    background: var(--primary-soft);
    border: 1px solid #c9d9f5;
    padding: 3px 5px 3px 9px;
    border-radius: 7px;
}
.combo-unlink {
    border: none;
    background: none;
    cursor: pointer;
    color: inherit;
    display: grid;
    place-items: center;
    padding: 2px;
    border-radius: 99px;
}

/* Detalii programare */
.v-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 10px;
}
.v-patient { font-size: 17px; font-weight: 700; }
.v-phone {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-top: 3px;
    color: var(--primary-deep);
    font-weight: 600;
    font-size: 13.5px;
    text-decoration: none;
}
.v-grid {
    display: flex;
    flex-direction: column;
    gap: 9px;
    margin-top: 14px;
}
.v-row {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13.5px;
}
.v-row .ic { color: #8791a5; }
.v-row .chip-dot { margin-right: 6px; }
.v-notes {
    margin-top: 12px;
    background: var(--surface2);
    border: 1px solid var(--line);
    border-radius: 9px;
    padding: 9px 11px;
    font-size: 13px;
    white-space: pre-wrap;
}
.v-meta { margin-top: 12px; font-size: 11.5px; color: var(--muted); }

/* ============================================================
   Bara calendarului
   ============================================================ */
.cal-toolbar {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 14px;
}
.cal-toolbar-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    position: relative;
}
.cal-filters { gap: 8px; }
.cal-nav { display: inline-flex; gap: 2px; }

.cal-date:focus,
.cal-date:focus-visible { color: var(--ink); }
.cal-date {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border: none;
    background: none;
    font: inherit;
    font-size: 16.5px;
    font-weight: 700;
    color: var(--ink);
    cursor: pointer;
    padding: 6px 8px;
    border-radius: 9px;
    transition: background 0.15s ease;
}
.cal-date .ic { color: var(--muted); }
.cal-datepick {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
    border: 0;
    padding: 0;
}

/* ============================================================
   Grila Zi / Săptămână
   ============================================================ */
.dg-wrap {
    overflow: auto;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: #fff;
    max-height: calc(100vh - 205px);
    min-height: 320px;
    overscroll-behavior: contain;
}
.daygrid {
    display: grid;
    position: relative;
}

.dg-head {
    position: sticky;
    top: 0;
    z-index: 5;
    background: #fff;
    border-bottom: 1px solid var(--line);
}
.dg-corner { display: none; }
.dg-head {
    padding: 9px 12px;
    border-left: 1px solid var(--line-soft);
    min-width: 0;
}
.dg-head-name {
    font-size: 13px;
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dg-head-meta { font-size: 11px; color: var(--muted); margin-top: 1px; }

.dg-head-day { cursor: pointer; }
.dg-head-day.is-today .dg-head-name { color: var(--primary-deep); }
.dg-head-day.is-today .dg-head-meta { color: var(--primary); font-weight: 600; }

/* Banda orelor stă în AFARA containerului derulant (.dg-outer nu derulează
   niciodată) - de aceea nu se poate mișca orizontal, indiferent de swipe. */
.dg-outer {
    position: relative;
}
.dg-gutter {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    z-index: 30;
    background: #fff;
    border-right: 1px solid var(--line);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
.dg-ghead {
    flex: 0 0 auto;
    background: #fff;
    border-bottom: 1px solid var(--line);
}
.dg-ghclip {
    flex: 1 1 auto;
    position: relative;
    overflow: hidden;
}
.dg-ghours { position: relative; will-change: transform; }
.daygrid { min-height: 100%; padding-bottom: 0; } /* v1.88.92 - grila se termină fix la ora finală */
.dg-hour.is-first { transform: translateY(1px); }
.dg-hour.is-last  { transform: translateY(-14px); } /* v1.88.91 - ultima oră trasă în sus (inversul primei), rămâne vizibilă */
.dg-hour {
    position: absolute;
    right: 7px;
    transform: translateY(-7px);
    font-size: 11px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    background: #fff;
    padding: 0 2px;
}

.dg-col {
    position: relative;
    border-left: 1px solid var(--line-soft);
    min-width: 0;
}
.dg-col.is-today { background-color: #f8faff; }

.nowline {
    position: absolute;
    left: 0;
    right: 0;
    height: 2px;
    background: #d64533;
    z-index: 3;
    pointer-events: none;
}
.nowline span {
    position: absolute;
    left: -1px;
    top: -3px;
    width: 8px;
    height: 8px;
    border-radius: 99px;
    background: #d64533;
}

.sel-ghost {
    position: absolute;
    left: 2px;
    right: 3px;
    border: 1px dashed var(--focus);
    border-radius: 8px;
    background: #e7eefb;
    background: color-mix(in oklab, var(--primary) 12%, white);
    z-index: 2;
    pointer-events: none;
}

.drag-badge {
    position: fixed;
    z-index: var(--z-pop);
    background: var(--ink);
    color: #fff;
    font-size: 12px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    padding: 4px 9px;
    border-radius: 7px;
    pointer-events: none;
    box-shadow: 0 6px 18px rgba(15, 20, 35, 0.3);
    white-space: nowrap;
}

/* ---------- Blocurile de programare ---------- */
.evt,
.mo-pill {
    --c: #4F5BD5;
    background-color: #eceef8;
    border: 1px solid #ced3ee;
    color: #303a6e;
    background-color: color-mix(in oklab, var(--c) 13%, white);
    border-color: color-mix(in oklab, var(--c) 34%, white);
    color: color-mix(in oklab, var(--c) 58%, #20241a);
}

.evt {
    position: absolute;
    border-radius: 8px;
    padding: 4px 8px 6px;
    overflow: hidden;
    cursor: pointer;
    user-select: none;
    -webkit-user-select: none;
    touch-action: manipulation;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
    transition: box-shadow 0.15s ease;
}
.evt:focus-visible { outline-offset: 0; }

.evt-time {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    opacity: 0.85;
}
.evt-flag { display: inline-flex; }
.evt-pat {
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.25;
    margin-top: 1px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.evt-meta {
    font-size: 11px;
    opacity: 0.75;
    margin-top: 1px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.evt.is-compact {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 2px 7px;
}
.evt.is-compact .evt-time { font-size: 10.5px; }
.evt.is-compact .evt-pat  { font-size: 11.5px; margin: 0; }
.evt.is-compact .evt-meta { display: none; }

.evt-resize {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 8px;
    cursor: ns-resize;
    touch-action: none;
}
.evt-resize::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: 2px;
    width: 26px;
    height: 3px;
    border-radius: 3px;
    transform: translateX(-50%);
    background: currentColor;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.evt.is-drag {
    box-shadow: 0 14px 34px rgba(15, 20, 35, 0.28);
    cursor: grabbing;
    z-index: 30;
    opacity: 0.95;
}

.evt.st-confirmata {
    background-color: #e6ecf6;
    background-color: color-mix(in oklab, var(--c) 19%, white);
}
.evt.st-finalizata { opacity: 0.58; }
.evt.st-anulata {
    background-color: #fff;
    border-style: dashed;
    border-color: #ccd1dc;
    color: #828a9c;
}
.evt.st-anulata .evt-time,
.evt.st-anulata .evt-pat,
.evt.st-anulata .evt-h,
.evt.st-anulata .evt-nm { text-decoration: line-through; } /* .evt-h/.evt-nm: markup-ul compact din Săptămână */
.evt.st-neprezentat {
    background-image: repeating-linear-gradient(
        45deg, rgba(0, 0, 0, 0.05) 0 5px, transparent 5px 10px
    );
}

/* ============================================================
   Vederea Lună
   ============================================================ */
.mo-wrap {
    border: 1px solid var(--line);
    border-radius: 12px;
    background: #fff;
    overflow: hidden;
}
.mo-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
}
.mo-dow {
    padding: 8px 10px;
    font-size: 11.5px;
    font-weight: 700;
    color: var(--muted);
    border-bottom: 1px solid var(--line);
    background: var(--surface2);
}
.mo-cell {
    min-height: 112px;
    border-top: 1px solid var(--line-soft);
    border-left: 1px solid var(--line-soft);
    padding: 6px;
    display: flex;
    flex-direction: column;
    gap: 3px;
    cursor: pointer;
    background: #fff;
    min-width: 0;
}
.mo-cell:nth-child(7n + 8) { border-left: none; }
.mo-cell.is-out { background: #f9fafc; }
.mo-cell.is-out .mo-num { color: #adb3c2; }

.mo-num {
    font-size: 12px;
    font-weight: 600;
    color: #4b5162;
    width: 22px;
    height: 22px;
    display: grid;
    place-items: center;
    border-radius: 999px;
    flex: none;
}
.mo-cell.is-today .mo-num { background: var(--primary); color: var(--primary-fg, #fff); }

.mo-pill {
    display: flex;
    align-items: center;
    gap: 5px;
    width: 100%;
    padding: 2px 7px;
    border-radius: 6px;
    font: inherit;
    font-size: 11.5px;
    text-align: left;
    cursor: pointer;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.mo-pill-t { font-weight: 700; font-variant-numeric: tabular-nums; flex: none; }
.mo-pill.st-finalizata { opacity: 0.6; }
.mo-pill.st-anulata {
    background-color: #fff;
    border-style: dashed;
    border-color: #ccd1dc;
    color: #828a9c;
    text-decoration: line-through;
}
.mo-more {
    border: none;
    background: none;
    font: inherit;
    font-size: 11px;
    font-weight: 600;
    color: var(--muted);
    text-align: left;
    padding: 1px 7px;
    cursor: pointer;
    border-radius: 6px;
}

/* ============================================================
   Vederea Listă + tabele generale
   ============================================================ */
.list-wrap { display: flex; flex-direction: column; gap: 10px; }
.list-head { display: flex; align-items: center; gap: 12px; }
.list-count { color: var(--muted); font-size: 13px; }

.tbl-wrap {
    border: 1px solid var(--line);
    border-radius: 12px;
    background: #fff;
    overflow: auto;
}
.tbl {
    width: 100%;
    border-collapse: collapse;
    font-size: 13.5px;
}
.tbl th {
    text-align: left;
    font-size: 12px;
    font-weight: 600;
    color: var(--muted);
    padding: 10px 12px;
    background: var(--surface2);
    border-bottom: 1px solid var(--line);
    position: sticky;
    top: 0;
    z-index: 2;
    white-space: nowrap;
}
.tbl td {
    padding: 10px 12px;
    border-bottom: 1px solid var(--line-soft);
    vertical-align: middle;
}
.tbl tbody tr:last-child td { border-bottom: none; }

.list-row { cursor: pointer; }
.list-sub td {
    background: var(--surface2);
    font-weight: 700;
    font-size: 12.5px;
    color: #434a5a;
    padding: 7px 12px;
}
.td-time {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    white-space: nowrap;
}
.td-pat { font-weight: 600; }
.td-act { text-align: right; white-space: nowrap; }
.list-row.st-anulata .td-pat,
.list-row.st-anulata .td-time {
    text-decoration: line-through;
    color: var(--muted);
}
.list-row.st-finalizata td { color: #6a7080; }

.tel {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted var(--line-strong);
    white-space: nowrap;
}
.doc { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }

.row-actions { display: flex; gap: 5px; justify-content: flex-end; }
.tbl form { display: inline; margin: 0; }

.swatch-mini {
    width: 14px;
    height: 14px;
    border-radius: 99px;
    display: inline-block;
    background: var(--c, #94a0b8);
    vertical-align: -2px;
    margin-right: 7px;
}

/* ============================================================
   Stare goală, schelete de încărcare
   ============================================================ */
.empty {
    border: 1px dashed #d3d7e2;
    border-radius: 14px;
    background: #fff;
    padding: 44px 24px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    text-align: center;
}
.empty-ic {
    width: 46px;
    height: 46px;
    border-radius: 12px;
    background: var(--primary-soft);
    color: var(--primary-deep);
    display: grid;
    place-items: center;
}
.empty-ic .ic { width: 22px; height: 22px; }
.empty h3 { margin: 4px 0 0; font-size: 16px; }
.empty p {
    margin: 0;
    color: var(--muted);
    font-size: 13.5px;
    max-width: 430px;
    line-height: 1.5;
}
.empty .btn { margin-top: 10px; }

.skel {
    border: 1px solid var(--line);
    border-radius: 12px;
    background: #fff;
    padding: 14px;
    overflow: hidden;
}
.skel-grid { display: flex; gap: 12px; height: min(520px, 58vh); }
.skel-col {
    flex: 1;
    position: relative;
    background: var(--surface2);
    border-radius: 9px;
}
.skel-blk {
    position: absolute;
    left: 8px;
    right: 8px;
    border-radius: 7px;
    background: #e7e8e0;
    animation: pulse 1.3s ease-in-out infinite;
}
.skel-month {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 6px;
}
.skel-cell {
    height: 88px;
    border-radius: 8px;
    background: var(--surface2);
    animation: pulse 1.3s ease-in-out infinite;
}
.skel-list .skel-bar {
    height: 16px;
    border-radius: 6px;
    background: var(--surface2);
    margin: 14px 0;
    animation: pulse 1.3s ease-in-out infinite;
}
.w30 { width: 30%; }
.w60 { width: 60%; }

@keyframes pulse { 50% { opacity: 0.5; } }

/* ============================================================
   Pagini clasice (Pacienți, Echipă, Scaune, …)
   ============================================================ */
.page-head {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 16px;
}
.page-head h1 { font-size: 20px; margin: 0; }
.page-sub { color: var(--muted); font-size: 13px; margin: 2px 0 0; width: 100%; }

.card {
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 12px;
    padding: 16px 18px;
    margin-bottom: 16px;
}
.card > h2 { font-size: 15px; margin: 0 0 12px; }

.frow {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: 12px 14px;
    align-items: end;
}
.frow .field-wide { grid-column: 1 / -1; }
.form-actions {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-top: 14px;
    flex-wrap: wrap;
}

.swatches { display: flex; gap: 7px; flex-wrap: wrap; }
.swatch { position: relative; display: inline-block; cursor: pointer; }
.swatch input {
    position: absolute;
    inset: 0;
    opacity: 0;
    cursor: pointer;
}
.swatch span {
    display: block;
    width: 26px;
    height: 26px;
    border-radius: 999px;
    background: var(--c);
    border: 2px solid #fff;
    box-shadow: 0 0 0 1px var(--line);
    transition: box-shadow 0.12s ease, transform 0.12s var(--ease-out);
}
.swatch input:checked + span {
    box-shadow: 0 0 0 2px var(--ink);
    transform: scale(1.06);
}
.swatch input:focus-visible + span { box-shadow: 0 0 0 3px var(--focus); }

.hint { font-size: 12.5px; color: var(--muted); }

/* ============================================================
   Pagina de autentificare
   ============================================================ */
.page-login { background: #fff; }
.login-wrap {
    display: grid;
    grid-template-columns: 1.05fr 1fr;
    min-height: 100vh;
}
.login-brand {
    background: var(--rail);
    color: #e9eadf;
    display: flex;
    align-items: center;
    padding: clamp(28px, 6vw, 72px);
}
.login-brand-inner {
    max-width: 470px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.brand-lg .brand-mark { width: 52px; height: 52px; border-radius: 14px; }
.brand-lg .brand-text strong { font-size: 20px; }
.login-brand h1 {
    margin: 8px 0 0;
    font-size: clamp(26px, 3.4vw, 38px);
    line-height: 1.12;
    letter-spacing: -0.5px;
    color: #f4f6fa;
}
.login-brand p {
    margin: 0;
    color: #aab2c5;
    font-size: 15px;
    line-height: 1.55;
}
.login-points {
    list-style: none;
    margin: 10px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 11px;
}
.login-points li {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: 14px;
    color: #d3d9e6;
}
.login-points .ic { color: var(--rail-accent, #a9c4f5); margin-top: 1px; }

.login-form-side {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 28px;
}
.login-card {
    width: min(380px, 100%);
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.login-card h2 { margin: 0; font-size: 22px; }
.login-sub { margin: -8px 0 2px; color: var(--muted); font-size: 13.5px; }
.login-hint {
    margin: 4px 0 0;
    font-size: 12.5px;
    color: var(--muted);
    line-height: 1.55;
}
code {
    background: var(--surface2);
    border: 1px solid var(--line);
    padding: 1px 5px;
    border-radius: 5px;
    font-size: 12px;
}

/* ============================================================
   Financiar & Statistici
   ============================================================ */
.dlg-pay { width: min(460px, calc(100vw - 32px)); }
.pay-sub {
    margin: 0 0 12px;
    font-size: 13.5px;
    color: var(--muted);
}
.pay-sub strong { color: var(--ink); }
.pay-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px 14px;
}
.pay-grid .field-wide { grid-column: 1 / -1; }

.pay-box {
    background: var(--surface2);
    border: 1px solid var(--line);
    border-radius: 10px;
    padding: 12px;
}
.pay-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
    font-size: 13px;
}
.pay-head .ic { color: var(--primary-deep); }
.pay-head .hint { margin-left: auto; text-align: right; }

.pay-delta {
    margin-top: 10px;
    font-size: 13px;
    font-weight: 700;
    min-height: 18px;
}
.pay-delta.is-neg { color: var(--danger-deep); }
.pay-delta.is-pos { color: var(--primary-deep); }
.pay-delta.is-ok  { color: #3f8552; }
.pay-balance {
    margin-top: 6px;
    font-size: 12.5px;
    color: var(--muted);
    min-height: 16px;
}

.pay-tag {
    display: inline-block;
    padding: 1px 8px;
    border-radius: 7px;
    font-size: 11.5px;
    font-weight: 700;
}
.pay-tag.is-neg { background: var(--danger-soft); color: var(--danger-deep); }
.pay-tag.is-pos { background: var(--primary-soft); color: var(--primary-deep); }
.pay-tag.is-ok  { background: #e8f3ea; color: #316b41; }

.m-neg { color: var(--danger-deep); font-weight: 600; }
.m-pos { color: var(--primary-deep); font-weight: 600; }
/* v1.89.31 - coloanele de bani care trebuie citite la fel peste tot: aceeași mărime și aceeași
   grosime ca „Sold de plată" de la Furnizori (13,5px / 600), indiferent dacă tabelul e compact
   sau nu. Culoarea rămâne a fiecăreia (.m-neg roșu pentru datorii etc.), nu o atinge. */
.td-money { font-size: 13.5px; font-weight: 600; }
.td-money strong { font-weight: inherit; }
/* v1.89.32 - aceeași mărime, dar fără îngroșare (Achiziții › Achitat, Lucrări › Cost/Achitat) */
.td-money.is-plain { font-weight: 400; }
.td-num {
    text-align: right;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.tbl th.td-num { text-align: right; }
.tbl tfoot td {
    background: var(--surface2);
    font-weight: 700;
    border-top: 1px solid var(--line);
}

/* Carduri KPI */
.kpis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: 12px;
    margin-bottom: 16px;
}
.kpi {
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 12px;
    padding: 13px 15px;
}
.kpi-label { font-size: 12px; font-weight: 600; color: var(--muted); }
.kpi-group .kpi .kpi-label {
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-weight: 700;
    color: var(--kpi-accent);
}
.kpi-value {
    font-size: 21px;
    font-weight: 700;
    margin-top: 3px;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.3px;
}
.kpi-sub { font-size: 11.5px; color: var(--muted); margin-top: 2px; }
.kpi-value.is-neg { color: var(--danger-deep); }
/* v1.89.18 - cardurile Avansuri au text normal, nu albastru (cerere Mihai) */
.kpi-value.is-pos { color: inherit; }

/* Grafic simplu cu bare */
.bars {
    display: flex;
    align-items: flex-end;
    gap: 4px;
    height: 150px;
    padding: 8px 2px 0;
}
.bar {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 5px;
    min-width: 0;
    height: 100%;
}
.bar i {
    display: block;
    width: 100%;
    max-width: 46px;
    /* graficele își păstrează albastrul, indiferent de culoarea principală aleasă */
    background: #2b5fc7;
    background: color-mix(in oklab, #2b5fc7 82%, white);
    border-radius: 5px 5px 2px 2px;
    min-height: 2px;
}
.bar.is-zero i { background: var(--line); }
.bar b {
    font-size: 10.5px;
    font-weight: 600;
    color: var(--muted);
    white-space: nowrap;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
}
.bar .bar-v {
    font-size: 10px;
    color: #6a7080;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
/* Alinierea coloanelor: etichetele (valoare + nume) nu se comprimă niciodată -
   doar bara cedează spațiu. Altfel, la coloana maximă (height:100%) flexbox
   comprima proporțional și textele, iar bara + numele ei coborau cu câțiva
   pixeli față de celelalte coloane. */
.bar .bar-v, .bar .bar-v2, .bar b { flex-shrink: 0; }

/* Bară de progres (grad de ocupare, ponderi) */
.prog {
    height: 8px;
    border-radius: 99px;
    background: var(--surface2);
    border: 1px solid var(--line-soft);
    overflow: hidden;
    min-width: 90px;
}
.prog i {
    display: block;
    height: 100%;
    background: #2b5fc7;
    border-radius: 99px;
}
.prog.is-doc i { background: var(--c, var(--primary)); }
.prog-wrap { display: flex; align-items: center; gap: 9px; }
.prog-pct {
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    min-width: 38px;
    text-align: right;
}

.period-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 16px;
}

/* Bare pereche pentru comparația cu anul precedent */
.bar-cols {
    display: flex;
    align-items: flex-end;
    justify-content: center;
    gap: 2px;
    width: 100%;
    height: 100%;
}
.bar-cols i {
    flex: 1;
    max-width: 30px;
}
.bars .bar i.prev {
    background: #cdd2de;
}
.bars.is-doc .bar i:not(.prev) { background: var(--c, #2b5fc7); }

.chart-legend {
    display: flex;
    gap: 16px;
    align-items: center;
    flex-wrap: wrap;
    margin-top: 10px;
    font-size: 12px;
    color: var(--muted);
}
.chart-legend .lg {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.chart-legend .lg::before {
    content: "";
    width: 10px;
    height: 10px;
    border-radius: 3px;
    background: var(--primary);
}
.chart-legend .lg.lg-prev::before { background: #cdd2de; }

/* Filtre în capetele tabelurilor */
.tbl-filters td {
    background: #fbfbfd;
    padding: 5px 8px;
    border-bottom: 1px solid var(--line);
}
.tbl-filters .input {
    padding: 4px 8px;
    font-size: 12px;
    border-radius: 7px;
    width: 100%;
    min-width: 70px;
}
.tbl-filter-count {
    font-size: 12px;
    color: var(--muted);
    margin: 6px 2px 0;
}
tr.is-filtered-out { display: none; }

.badge-method {
    background: #edeff4;
    color: #3f4552;
    border-color: #dfe3ec;
}

/* ============================================================
   Interacțiuni la hover (doar dispozitive cu cursor)
   ============================================================ */
/* v1.90.36 - hoverul din MENIU stă separat, doar pe (hover: hover): gardul suplimentar
   (pointer: fine) îl stingea pe laptopurile cu ecran tactil / unele ferestre de aplicație,
   unde cursorul există dar pointerul principal e raportat „coarse". Nuanța e jumătate din
   intensitatea elementului selectat (--rail-hov, calculată în theme_head). */
@media (hover: hover) {
    .rail-link:hover:not(.is-active) { background: var(--rail-hov, var(--rail-hi)); color: var(--rail-strong, #fff); }
    .rail-user:hover { background: var(--rail-hov, var(--rail-hi)); }
    .rail-out:hover  { background: var(--rail-hov, var(--rail-hi)); color: var(--rail-strong, #fff); }
}
@media (hover: hover) and (pointer: fine) {
    .btn-primary:hover      { background: var(--primary-hover); }
    .btn-ghost:hover        { background: var(--surface2); border-color: #a9a9ab; }
    .btn-ghost.btn-danger:hover {
        background: var(--danger-soft);
        border-color: var(--danger-line);
    }
    .btn-danger-solid:hover { background: #9c2c21; }

    .seg-btn:hover:not(.is-active) { color: var(--ink); }
    .chip:hover:not(.is-active) { border-color: #a9a9ab; background: var(--surface2); }
    .cal-date:hover { background: var(--surface2); }

    .evt:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16); z-index: 6; }
    .evt:hover .evt-resize::after { opacity: 0.5; }
    .mo-pill:hover { filter: brightness(0.97); }
    .mo-more:hover { background: var(--surface2); color: var(--ink); }
    .mo-cell:hover { background: #fafbfe; }
    .dg-head-day:hover { background: var(--surface2); }

    .list-row:hover td { background: #f8f9fc; }
    .combo-item:hover { background: var(--primary-soft); }
    .combo-unlink:hover { background: #d4e1f8; }
    .tel:hover { border-bottom-color: var(--ink); }
    .v-phone:hover { text-decoration: underline; }
    .toast { cursor: default; }
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 900px) {
    .rail {
        transform: translateX(-105%);
        transition: transform 0.22s var(--ease-out);
        box-shadow: 0 0 40px rgba(15, 20, 35, 0.35);
        width: 250px;
    }
    body.rail-open .rail { transform: none; }
    .shell { margin-left: 0; }
    .topbar { display: flex; }
    .main { padding: 14px 14px 26px; }

    .dg-wrap { max-height: calc(100vh - 250px); }
    .mo-cell { min-height: 86px; padding: 4px; }
    .cal-date { font-size: 15px; }
}

@media (max-width: 560px) {
    .form-grid { grid-template-columns: 1fr; }
    .dlg {
        width: 100vw;
        max-width: none;
        height: 100dvh;
        max-height: none;
        border-radius: 0;
        margin: 0;
    }
    #dlg-appt form {
        display: flex;
        flex-direction: column;
        height: 100%;
    }
    #dlg-appt .dlg-body { flex: 1; overflow-y: auto; }
    .dlg-confirm { height: auto; width: min(340px, calc(100vw - 40px)); border-radius: 14px; margin: auto; }

    .login-wrap { grid-template-columns: 1fr; }
    .login-brand { padding: 24px 20px; }
    .login-brand h1 { font-size: 24px; }
    .login-points { display: none; }
    .login-form-side { padding: 22px 16px 34px; }
}

/* ============================================================
   Tipărire (lista de programări)
   ============================================================ */
@media print {
    .rail, .rail-scrim, .topbar, .cal-toolbar, .list-head,
    dialog, .toast-host, .td-act, .skip-link {
        display: none !important;
    }
    .shell { margin: 0; }
    .main { padding: 0; }
    body { background: #fff; }
    .tbl-wrap { border: none; border-radius: 0; overflow: visible; }
    .tbl { font-size: 12px; }
    .tbl th { position: static; }
    .tel { border-bottom: none; }
}

/* ============================================================
   v1.90.39 - Printarea DOAR din butoanele aplicației.
   Butoanele de print pun pe body o clasă autorizată înainte de
   window.print() și o scot la afterprint. Un print pornit altfel
   (meniul browserului, Ctrl+P scăpat de intercept) găsește body
   fără clasă și tipărește doar mesajul de mai jos.
   ATENȚIE: orice punct de print NOU trebuie adăugat în ambele
   selectoare de aici. Clase autorizate: print-cal (lista de
   programări), print-paro, print-plan, print-dental,
   print-techsold (sold tehnician + sold furnizor).
   ============================================================ */
@media print {
    body:not(.print-cal):not(.print-paro):not(.print-plan):not(.print-dental):not(.print-techsold) > * {
        display: none !important;
    }
    body:not(.print-cal):not(.print-paro):not(.print-plan):not(.print-dental):not(.print-techsold)::after {
        content: 'Printarea se face din butoanele dedicate ale aplicației.';
        display: block;
        padding: 28px 0;
        font-size: 14px;
        color: #111;
    }
}

/* ============================================================
   Mișcare redusă
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* ============================================================
   v1.3 - Meniu restrâns (doar iconițe), buton de restrângere
   ============================================================ */
.rail-collapse {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 9px 11px;
    border: 0;
    border-radius: 9px;
    background: transparent;
    color: var(--rail-text, #9aa3b8);
    font: inherit;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    text-align: left;
    transition: background 0.15s ease, color 0.15s ease;
}
.rail-collapse:hover { background: var(--rail-hov, var(--rail-hi)); color: var(--rail-strong, #fff); }
.rail-collapse .ic { transition: transform 0.2s ease; flex: none; }
html.rail-min .rail-collapse .ic { transform: rotate(180deg); }

@media (min-width: 901px) {
    html.rail-min .rail  { width: 74px; padding: 14px 9px; }
    html.rail-min .shell { margin-left: 74px; }
    html.rail-min .brand { justify-content: center; padding: 6px 0; }
    html.rail-min .brand-text,
    html.rail-min .rail-link > span,
    html.rail-min .rail-collapse > span,
    html.rail-min .rail-user-text { display: none; }
    html.rail-min .rail-link,
    html.rail-min .rail-collapse { justify-content: center; padding: 11px 0; }
    /* v1.87.4 - în meniul restrâns: chevronul dispare, iar sublistele respectă
       starea reală (hidden). Nimic nu le forțează deschise. */
    html.rail-min .rail-group-chev { display: none; }
    html.rail-min .rail-sub { margin-left: 0; }
    html.rail-min .rail-sub-link { padding-left: 0; }
    html.rail-min .rail-foot { flex-direction: column-reverse; gap: 4px; padding-top: 10px; }
    html.rail-min .rail-user { justify-content: center; padding: 6px 0; width: 100%; flex: none; }
}
@media (max-width: 900px) {
    .rail-collapse { display: none; }
    html.rail-min .shell { margin-left: 0; }
}

/* ============================================================
   v1.3 - Chip calendar: telefonul în dreapta numelui
   ============================================================ */
.evt-pat {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
}
.evt-pat-name {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.evt-phone {
    margin-left: auto;
    flex: none;
    font-weight: 500;
    font-size: 10.5px;
    opacity: 0.85;
    letter-spacing: 0.2px;
    font-variant-numeric: tabular-nums;
}
.evt.is-compact .evt-pat { flex: 1; min-width: 0; }
.evt.is-compact .evt-phone { font-size: 10px; }

/* ============================================================
   v1.3 - Sold pacient la încasare: sugestii datorie / avans
   ============================================================ */
.pay-suggest {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 9px;
    padding: 8px 11px;
    border: 1px dashed var(--line);
    border-radius: 9px;
    background: var(--surface2, #f4f4f5);
    font-size: 13px;
}
.pay-suggest .btn { margin-left: auto; }
.pay-sg strong { font-variant-numeric: tabular-nums; }
.pay-after { color: var(--muted); font-weight: 500; }
.combo-label {
    padding: 7px 11px 4px;
    font-size: 10.5px;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    color: var(--muted);
}

/* ============================================================
   v1.3 - Documente (poze) în fișa pacientului
   ============================================================ */
.docs-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}
.docs-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 12px;
}
.doc-card {
    border: 1px solid var(--line);
    border-radius: 12px;
    overflow: hidden;
    background: #fff;
    display: flex;
    flex-direction: column;
}
.doc-thumb {
    display: block;
    aspect-ratio: 4 / 3;
    background: var(--surface2, #f4f4f5);
}
.doc-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.doc-meta {
    padding: 7px 9px 8px;
    font-size: 11.5px;
    color: var(--muted);
    display: flex;
    align-items: center;
    gap: 8px;
}
.doc-meta .doc-date { flex: 1; }
.doc-meta form { display: contents; }
.sold-line { display: inline-flex; align-items: center; gap: 8px; }

/* ============================================================
   v1.3.1 - Sloturi ocupate de alți medici (rolul „medic”)
   ============================================================ */
.evt.is-restricted {
    cursor: default;
    background-image: repeating-linear-gradient(
        135deg,
        transparent 0 7px,
        rgba(255, 255, 255, 0.30) 7px 10px
    );
}
.evt.is-restricted .evt-pat-name { font-weight: 500; opacity: 0.9; }
.mo-pill.is-restricted { cursor: default; opacity: 0.8; }
.list-row.is-restricted { cursor: default; }
.list-row.is-restricted td { opacity: 0.85; }

/* ============================================================
   v1.4 - Filtre cu pastile în capetele tabelurilor
   ============================================================ */
.tbl-filters td { position: relative; padding: 6px 8px 8px; vertical-align: top; }
.tf-box {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px;
    min-height: 34px;
    padding: 3px 6px;
    border: 1px solid var(--line);
    border-radius: 8px;
    background: #fff;
    cursor: text;
}
.tf-box:focus-within { border-color: var(--focus); box-shadow: 0 0 0 3px rgba(79, 127, 224, 0.14); }
.tf-chips { display: contents; }
.tf-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    max-width: 100%;
    padding: 2px 4px 2px 8px;
    border-radius: 7px;
    background: var(--primary-soft, #e9effc);
    color: var(--primary-deep, #1a3a80);
    font-size: 11.5px;
    font-weight: 600;
}
.tf-chip > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tf-chip.is-loose { background: #f3ecfb; color: #5a3d8a; }
.tf-x {
    border: 0;
    background: transparent;
    color: inherit;
    font-size: 14px;
    line-height: 1;
    padding: 0 4px;
    cursor: pointer;
    border-radius: 999px;
}
.tf-x:hover { background: rgba(0, 0, 0, 0.08); }
.tf-in {
    flex: 1;
    min-width: 36px;
    width: 40px;
    border: 0;
    outline: 0;
    background: transparent;
    font: inherit;
    font-size: 12.5px;
    padding: 2px;
}
.tf-menu[hidden] { display: none; }
.tf-menu {
    position: absolute;
    left: 8px;
    right: 8px;
    top: 100%;
    margin-top: -4px;
    max-height: 230px;
    overflow: auto;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 9px;
    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.14);
    z-index: 30;
    display: flex;
    flex-direction: column;
    padding: 4px;
}
.tf-opt {
    border: 0;
    background: transparent;
    text-align: left;
    font: inherit;
    font-size: 12.5px;
    padding: 7px 9px;
    border-radius: 7px;
    cursor: pointer;
}
.tf-opt:hover { background: var(--surface2, #f4f4f5); }

/* ============================================================
   v1.4 - Etichete deasupra ambelor coloane la comparație
   ============================================================ */
.bar-v2 {
    display: flex;
    gap: 6px;
    justify-content: center;
    font-size: 10px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1.1;
    margin-bottom: 3px;
    white-space: nowrap;
}
.bar-v2 { overflow: visible; }
.bar-v2 b { flex: none; text-align: center; overflow: visible; padding: 0 1px; }
.bar-v2 .prev { color: var(--muted); font-weight: 600; }
.bar.is-hidden { display: none; }

/* ============================================================
   v1.4 - Grafice tip plăcintă
   ============================================================ */
.pies {
    display: flex;
    gap: 26px;
    flex-wrap: wrap;
    align-items: flex-start;
}
.pie-fig { margin: 0; text-align: center; }
.pie {
    width: 190px;
    height: 190px;
    border-radius: 50%;
    background: var(--line-soft, #edeff4);
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
}
.pie-fig figcaption { margin-top: 8px; font-size: 12px; color: var(--muted); }
.pie-legend {
    list-style: none;
    margin: 14px 0 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 6px 18px;
    font-size: 12.5px;
}
.pie-legend { grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); }
.pie-legend li { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }
.pl-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.pl-vals { display: flex; flex-wrap: wrap; gap: 2px 9px; align-items: baseline; }
.pl-vals b { white-space: nowrap; }
.pl-vals .hint { white-space: nowrap; }
.pie-legend li.is-hidden { display: none; }
.pie-legend i {
    width: 10px;
    height: 10px;
    border-radius: 3px;
    background: var(--c, #94a0b8);
    flex: none;
    margin-top: 4px;
}
.pie-legend .pl-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pie-legend b { font-variant-numeric: tabular-nums; }
.pie-legend .pl-pct { color: var(--muted); }

/* ============================================================
   v1.4 - Paginare (lista de pacienți)
   ============================================================ */
.pager {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    margin-top: 14px;
}
.pager .spacer { flex: 1; }
.pg-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 32px;
    padding: 0 9px;
    border: 1px solid var(--line);
    border-radius: 8px;
    background: #fff;
    color: var(--ink);
    text-decoration: none;
    font-size: 13px;
    font-weight: 600;
}
.pg-btn:hover { border-color: var(--focus); }
.pg-btn.is-active { background: var(--primary); border-color: var(--primary); color: var(--primary-fg, #fff); }
.pg-btn.is-off { opacity: 0.45; pointer-events: none; }
.pg-info { font-size: 12.5px; color: var(--muted); }

/* Cât timp o listă de filtrare e deschisă, containerul tabelului nu o taie. */
.tbl-wrap:has(.tf-menu:not([hidden])) { overflow: visible; }

/* v1.5 - iconița de status înaintea intervalului */
.evt-st { display: inline-flex; align-items: center; margin-right: 4px; opacity: 0.9; }
.evt-st .ic { width: 11px; height: 11px; }
.evt-st.st-anulata, .evt-st.st-neprezentat { opacity: 1; }
.mo-pill .evt-st { margin-right: 3px; }
.mo-pill .evt-st .ic { width: 10px; height: 10px; }

/* v1.5 - tabel detaliat Financiar: ~8 rânduri vizibile, antet lipicios */
.tbl-scroll8 { max-height: 560px; overflow: auto; }
.tbl-scroll8 thead th {
    position: sticky;
    top: 0;
    /* v1.89.35 - era alb și ieșea din rând față de toate celelalte capete de tabel */
    background: var(--secondary, var(--surface2));
    z-index: 3;
    box-shadow: 0 1px 0 var(--line);
}
.tbl-scroll8 .tbl-filters td {
    position: sticky;
    top: 42px;
    background: #fff;
    z-index: 2;
    box-shadow: 0 1px 0 var(--line-soft);
}

/* v1.5 - tabele compacte la Statistici: încap fără scroll orizontal
   pe ecrane obișnuite; scrollul apare doar când chiar nu e loc */
.tbl-compact th, .tbl-compact td { padding: 8px 9px; }
.tbl-compact { font-size: 13px; }
.tbl-compact .td-pat { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tbl-compact .tbl-filters td { padding: 5px 6px 7px; }

.fin-hist { white-space: nowrap; align-self: center; }
.fin-hist b { font-variant-numeric: tabular-nums; }

/* v1.5 - feliile plăcintei: SVG cu tooltip nativ */
.pie svg { width: 100%; height: 100%; display: block; border-radius: 50%; }
.pie-slice { cursor: default; transition: opacity 0.12s ease; }
.pie-slice:hover { opacity: 0.82; }

/* v1.5 - selecția anilor comparați */
.cmp-form { display: flex; align-items: center; gap: 7px; }
.input-sm { height: 34px; padding: 4px 8px; width: auto; font-size: 13px; }

/* v1.5 - zile nelucrătoare în calendar */
.dg-col.is-off {
    background:
        repeating-linear-gradient(135deg, transparent 0 9px, rgba(120, 128, 148, 0.07) 9px 13px),
        #fafbfd;
}
.mo-cell.is-off { background: #f6f7fa; }

/* v1.5 - bifele zilelor lucrătoare + mini-calendarul de excepții */
.wd-row { display: flex; gap: 8px; flex-wrap: wrap; }
.wd-chk {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 11px;
    border: 1px solid var(--line);
    border-radius: 9px;
    background: #fff;
    font-size: 13px;
    cursor: pointer;
    user-select: none;
}
.wd-chk:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); font-weight: 600; }
.wd-chk input { accent-color: var(--primary); }

.cd-grid {
    display: grid;
    grid-template-columns: repeat(7, 44px);
    gap: 5px;
    max-width: 100%;
}
.cd-grid form { display: contents; }
.cd-head { font-size: 11px; font-weight: 700; color: var(--muted); text-align: center; padding-bottom: 2px; }
.cd {
    display: grid;
    place-items: center;
    width: 44px;
    height: 38px;
    border: 1px solid var(--line);
    border-radius: 9px;
    background: #fff;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    color: var(--ink);
}
.cd:hover { border-color: var(--focus); }
.cd.is-out { border-color: transparent; background: transparent; color: #c3c7d2; cursor: default; }
.cd.is-weekoff { background: var(--surface2); color: #a3a9b8; cursor: not-allowed; border-style: dashed; }
.cd.is-closed { background: var(--danger-soft); border-color: var(--danger-line); color: var(--danger-deep); font-weight: 700; }
.cd.is-today { box-shadow: inset 0 0 0 2px var(--primary); }
.cd-list { display: flex; gap: 8px; flex-wrap: wrap; }
.cd-list .tf-chip { border: 0; cursor: pointer; font: inherit; font-size: 12px; }

/* v1.5.3 - eticheta zilelor nelucrătoare în grilă */
.dg-off-tag {
    position: sticky;
    top: 6px;
    display: block;
    width: max-content;
    margin: 6px auto 0;
    padding: 3px 10px;
    border-radius: 7px;
    background: rgba(120, 128, 148, 0.14);
    color: #6a7080;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    pointer-events: none;
    z-index: 1;
}

/* v1.6 - nota din istoricul pacientului + saltul la dată din Statistici */
.td-note { max-width: 280px; white-space: normal; font-size: 12.5px; color: var(--muted); }
.cal-jump { display: flex; align-items: center; position: relative; }
.cal-pickwrap { position: relative; display: inline-flex; }
/* inputul ascuns stă chiar sub titlu → calendarul nativ se deschide acolo */
.cal-jump .cal-datepick,
.cal-pickwrap .cal-datepick { top: 100%; bottom: auto; left: 14px; }

/* v1.6.1 - datele afișate românește (ZZ/LL/AAAA) peste inputul nativ */
.ro-date { position: relative; display: inline-flex; width: 100%; }
.ro-date:has(.input-sm) { width: auto; }
.ro-date .ro-date-face {
    pointer-events: none;
    display: flex;
    align-items: center;
    font-variant-numeric: tabular-nums;
}
.ro-date .ro-date-face.is-empty { color: var(--muted); }
.ro-date input[type="date"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}
.cal-jump .cal-date { display: inline-flex; align-items: center; gap: 7px; }

/* v1.7 - titlul-perioadă ca buton + linkul către fișă din detalii */
button.cal-date {
    background: none;
    border: 0;
    font: inherit;
    padding: 0;
    cursor: pointer;
    color: inherit;
}
button.cal-date:hover { color: var(--primary); }
button.cal-date .ic { color: var(--muted); }
.v-patient-link { color: inherit; text-decoration: none; border-bottom: 1px dashed var(--line-strong, #c9cedb); }
.v-patient-link:hover { color: var(--primary); border-bottom-color: var(--primary); }

/* v1.7.2 - liniile fine ale grilei, la pasul ales în Setări */
.dg-lines { position: absolute; inset: 0; pointer-events: none; z-index: 1; }
.dg-line {
    position: absolute;
    left: 0;
    right: 0;
    height: 0;
    border-top: 1px dashed var(--line-soft, #eef0f4);
}
.dg-line.is-hour { border-top-style: solid; border-top-color: var(--line, #e4e7ee); }
.dg-col > .evt, .dg-col > .nowline, .dg-col > .dg-off-tag { position: absolute; z-index: 2; }

/* v1.8 - bifele de tip rând (SMS) */
.chk-line {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 10px;
    font-size: 13px;
    color: var(--ink);
    cursor: pointer;
    user-select: none;
}
.chk-line input { accent-color: var(--primary); }
.chk-line[hidden] { display: none; } /* v1.80.1 - hidden bătea display:flex */

/* v1.8 - separator subtil în carduri */
.sep { border: 0; border-top: 1px solid var(--line-soft); margin: 16px 0; }

/* v1.9 - separator discret în carduri */
hr.soft { border: 0; border-top: 1px solid var(--line-soft); margin: 18px 0 14px; }

/* v1.10 - filtrul de scaune cu selecție multiplă */
.mselect { position: relative; display: inline-flex; }
.mselect[hidden], .chips[hidden] { display: none !important; }
/* butoanele de filtrare arată ca chips-urile din Calendar */
.mselect-btn { cursor: pointer; text-align: left; }
.mselect-btn .ms-ic { margin-right: 0; color: inherit; }
.mselect-btn .chip-dot { margin-right: 0; }
.mselect-menu {
    position: absolute;
    top: calc(100% + 5px);
    right: 0;
    left: auto;
    max-height: min(60vh, 420px);
    overflow-y: auto;
    z-index: 40;
    min-width: 210px;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 11px;
    box-shadow: 0 12px 28px rgba(20, 26, 40, 0.13);
    padding: 7px;
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.mselect-menu[hidden] { display: none; }
.mselect-opt {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 9px;
    border-radius: 8px;
    font-size: 13.5px;
    cursor: pointer;
    user-select: none;
}
.mselect-opt:hover { background: var(--surface2, #f4f6fa); }
.mselect-opt input { accent-color: var(--primary); }
.mselect-opt .chip-dot { margin-right: 7px; vertical-align: middle; }

/* v1.90.19 - selectorul de lucrări multiple din formularul de programare:
   butonul arată și se așază exact ca vechiul <select class="input"> */
.treat-sel { display: flex; width: 100%; }
.treat-btn { display: flex; align-items: center; gap: 8px; width: 100%; background: #fff; font: inherit; }
.treat-btn-text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; }
.treat-btn-text.is-empty { color: var(--muted); }
.treat-caret { flex: 0 0 auto; color: var(--muted); }
.treat-menu { left: 0; right: 0; min-width: 0; max-height: min(46vh, 320px); }
.treat-opt-name { flex: 1; min-width: 0; }
.treat-cas {
    flex: 0 0 auto;
    padding: 1px 9px;
    border: 1.5px solid #0b7285;
    border-radius: 999px;
    background: #fff;
    color: #0b7285;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .4px;
    cursor: pointer;
    line-height: 1.5;
}
.treat-cas.is-on { background: #0b7285; color: #fff; }
/* costurile individuale la finalizare (2+ lucrări) */
.pay-treats { display: flex; flex-direction: column; gap: 6px; margin: 0 0 10px; }
.pay-treat-row { display: flex; align-items: center; gap: 10px; }
.pay-treat-name { flex: 1; min-width: 0; font-size: 13.5px; }
.pay-treat-cost { width: 132px; flex: 0 0 auto; }
.cas-tag {
    display: inline-block;
    padding: 0 7px;
    border-radius: 999px;
    background: rgba(11, 114, 133, .12);
    color: #0b7285;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .4px;
}
/* v1.90.38 - eticheta lucrărilor ANTERIOARE de tehnician (facturi din era pre-soft) */
.prior-tag {
    display: inline-block;
    padding: 0 7px;
    border-radius: 999px;
    background: rgba(146, 64, 14, .12);
    color: #92400e;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .4px;
}

/* v1.13 - acțiunile din fereastra de detalii: egale, pe un singur rând */
.dlg-foot-split {
    display: flex;
    align-items: stretch;
    gap: 8px;
    flex-wrap: wrap;
}
.dlg-foot-split .dlg-foot-left,
.dlg-foot-split .dlg-foot-right {
    display: flex;
    gap: 8px;
    flex: 1 1 auto;
}
.dlg-foot-split .btn {
    flex: 1 1 0;
    justify-content: center;
    white-space: nowrap;
    padding-left: 10px;
    padding-right: 10px;
}
@media (max-width: 560px) {
    .dlg-foot-split .dlg-foot-left,
    .dlg-foot-split .dlg-foot-right { flex: 1 1 100%; }
}

/* v1.11 - casete de cod în pagini de configurare */
.codebox {
    background: var(--surface2, #f4f6fa);
    border: 1px solid var(--line-soft);
    border-radius: 9px;
    padding: 10px 13px;
    font-size: 12.5px;
    overflow-x: auto;
    margin: 0;
    white-space: pre;
}

/* v1.12 - tabelele financiare încap pe laptop: celulele grele pot rupe rândul */
.tbl-compact .doc { white-space: normal; }
.tbl-compact .doc .chip-dot { flex: none; }
.tbl-compact .badge { font-size: 11px; padding: 3px 8px; }
.tbl-compact th { padding: 8px 9px; }

/* v1.13 - bifele și radio-urile urmează culoarea principală aleasă */
input[type="checkbox"], input[type="radio"] { accent-color: var(--primary); }

/* v1.14 - „Azi” marcat discret când ziua curentă e cea afișată */
#navToday.is-on-today,
.btn.is-on-today {
    border: 1px solid var(--line-strong);
    box-shadow: inset 0 0 0 1px #e4e7ee;
}
.btn, .btn:hover { text-decoration: none; }
.seg-btn,
.seg-btn:hover { text-decoration: none; }
.seg-btn.is-active {
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-thickness: 1.5px;
}

/* v1.14 - cardurile financiare, grupate: încasările vs. valoarea lucrărilor */
.kpis-grouped {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    align-items: stretch;
}
.kpi-group {
    display: flex;
    gap: 10px;
    flex: 1 1 420px;
    padding: 0;
}
/* v1.88.15 - stilul de card SB Admin 2 LA NIVEL DE APLICAȚIE: grupul e transparent,
   cardul alb poartă banda + titlul în culoarea de accent (--kpi-accent).
   Semantica: venituri = verde, cheltuieli = roșu, altele = albastru. */
.kpi-group { background: transparent; border: none; --kpi-accent: #4e73df; }
.kpi-group:first-child { --kpi-accent: #2f9e63; }
.kpi-group.kpi-group-blue,
.kpi-group.kpi-group-contract { --kpi-accent: #4e73df; }
.kpi-group.kpi-group-contract {
    flex: 1 1 420px; /* v1.75: trei carduri (procent, costuri tehnicieni, rest de plată) */
}
/* v1.89.23 - Încasări: metodele de plată au intrat în primul grup (verde), deci ultimul grup
   NU mai e verde; singura cheltuială de pe pagină (Tehnicieni) e roșie, restul albastre. */
.page-mypay .kpi-group.kpi-group-mp-cost { --kpi-accent: #e74a3b; }
/* Statistici: după reordonare, Valori (venituri) e primul = verde implicit, Activitate = albastru implicit */
/* Situație financiară: Datorii/Avansuri albastre, rândul de cheltuieli roșu */
.page-finance .kpi-group.kpi-group-blue { --kpi-accent: #e74a3b; }
@media (max-width: 900px) {
    /* singur pe rând pe telefon → lat cât ecranul */
    .kpi-group.kpi-group-contract { flex: 1 1 100%; }
}
/* v1.89.24 - Încasări pe desktop: sumele trebuie să încapă ÎNTREGI pe o singură linie,
   în FIECARE card, chiar și „100.000,00 lei" (cerere Mihai). Măsurat la fontul paginii:
   valoarea cu semn = 143px, cea mai lungă etichetă („PROCENTUL MEU") = 110px + cei 22px
   ținuți pentru „i", plus 34px padding + borduri → 184px lățime minimă de card.
   Cardurile intră într-o grilă cu coloane egale de minimum atât: ies toate la fel de late
   (ca pe telefon) și rândurile se rup singure când nu mai încap, în loc ca primul grup,
   cu patru carduri, să fie strivit de restul. Grupurile rămân doar purtătoarele culorii:
   --kpi-accent se moștenește și peste display:contents, iar ordinea din HTML e deja cea
   cerută (verzi, datorii/avansuri, tehnicieni, procent/rest). */
@media (min-width: 901px) {
    .page-mypay .kpis-grouped {
        display: grid;
        gap: 10px;
        align-items: stretch;
        /* cel mult 5 coloane (medic cu contract: 9 carduri → 5 + 4): când e loc berechet,
           minimul coloanei urcă la o cincime din rând, așa că a șasea nu mai încape și nu
           rămâne un card singur pe rândul al doilea. Sub 5×184px se strâng singure la 4, 3… */
        grid-template-columns: repeat(auto-fill, minmax(max(184px, (100% - 40px) / 5), 1fr));
    }
    /* medic FĂRĂ contract - doar 6 carduri: 3 + 3 până încap toate șase pe un rând */
    .page-mypay .kpis-grouped:not(:has(.kpi-group-contract)) { grid-template-columns: repeat(3, 1fr); }
    @media (min-width: 1450px) {
        .page-mypay .kpis-grouped:not(:has(.kpi-group-contract)) { grid-template-columns: repeat(6, 1fr); }
    }
    .page-mypay .kpis-grouped .kpi-group { display: contents; }
    .page-mypay .kpis-grouped .kpi { flex: none; margin: 0; min-width: 0; }
    /* eticheta și suma pe o singură linie - lățimea minimă de mai sus e calculată pentru ele */
    .page-mypay .kpis-grouped .kpi-label,
    .page-mypay .kpis-grouped .kpi-value { white-space: nowrap; }
}
/* v1.90.25 - Situație financiară: cardurile EGALE și aliniate pe coloane pe desktop
   (cerere Mihai): 7 pe rând cu CAS pornit (5 verzi + 2 albastre / Nedecontat + 6 roșii),
   6 fără CAS - --fin-cols vine din pagină, grupurile rămân doar purtătoarele culorii. */
@media (min-width: 901px) {
    .page-finance .kpis-grouped {
        display: grid;
        gap: 10px;
        align-items: stretch;
        grid-template-columns: repeat(var(--fin-cols, 6), 1fr);
    }
    .page-finance .kpis-grouped .kpi-group { display: contents; }
    .page-finance .kpis-grouped .kpi { flex: none; margin: 0; min-width: 0; }
}
/* v1.90.26 - cardurile de pondere: etichetele se rup SIMETRIC (cerere Mihai).
   Cardul e containerul de măsură; pragul de 168px = lățimea sub care cea mai lungă
   etichetă („PONDERE TEHNICIENI", cu rezerva butonului „i") nu mai încape pe UN rând.
   Peste prag: toate trei pe un rând; sub el, al doilea cuvânt coboară FORȚAT pe rândul
   al doilea la toate trei - niciodată amestecat, indiferent de rezoluție sau de zoom. */
.page-finance .kpi-pct { container-type: inline-size; }
.page-finance .kpi-pct .kpi-label { white-space: nowrap; }
@container (max-width: 168px) {
    .page-finance .kpi-pct .kpi-label .kpi-lbl2 { display: block; }
}

/* v1.89.25 - încasările ALTUI medic (.mp-kpis-doc): rândul 1 = DOAR cardurile verzi, rândul 2 =
   restul (Datorii, Avansuri, Tehnicieni, Procent, Rest de plată). Rândurile au 4 și 5 carduri,
   deci grila are 20 de coloane (cel mai mic multiplu comun) și cardurile ocupă 5, respectiv 4 -
   așa ies egale pe fiecare rând, cu același spațiu între ele. Medicul fără contract are doar
   două carduri pe rândul al doilea, deci ocupă 10 coloane fiecare.
   Pragul de 1260px: sub el nu încap cinci carduri de 184px pe un rând, așa că rămâne grila
   din 1.89.24, care se rupe singură (3+3+3). La încasările PROPRII nu se aplică nimic din toate
   astea - acolo layoutul rămâne cel din 1.89.24. */
@media (min-width: 1260px) {
    .page-mypay .kpis-grouped.mp-kpis-doc { grid-template-columns: repeat(20, 1fr); }
    /* ATENȚIE la specificitate: toate cele trei reguli au aceeași formă (`> .kpi-group > .kpi`)
       plus clasa cardului, altfel regula generală de 4 coloane le bate pe celelalte. */
    .page-mypay .kpis-grouped.mp-kpis-doc > .kpi-group > .kpi { grid-column: span 4; }
    .page-mypay .kpis-grouped.mp-kpis-doc > .kpi-group > .kpi-mp-total,
    .page-mypay .kpis-grouped.mp-kpis-doc > .kpi-group > .kpi-mp-inc,
    .page-mypay .kpis-grouped.mp-kpis-doc > .kpi-group > .kpi-mp-cash,
    .page-mypay .kpis-grouped.mp-kpis-doc > .kpi-group > .kpi-mp-card { grid-column: span 5; }
    /* fără contract: pe rândul al doilea rămân doar Datorii și Avansuri */
    .page-mypay .kpis-grouped.mp-kpis-doc:not(:has(.kpi-group-contract)) > .kpi-group > .kpi-mp-debt,
    .page-mypay .kpis-grouped.mp-kpis-doc:not(:has(.kpi-group-contract)) > .kpi-group > .kpi-mp-adv { grid-column: span 10; }
}
/* cardurile albe din grupuri: umbra stratificată a pastilelor active (toggle) */
.kpi-group .kpi { background: #fff;
    border: 1px solid var(--line);
    border-left: 5px solid var(--kpi-accent);
    border-radius: 6px; padding: 12px 14px;
    box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.06),
                0 1px 2.5px rgba(0, 0, 0, 0.16),
                0 2px 7px rgba(0, 0, 0, 0.07); }
.kpi-group .kpi { flex: 1 1 0; margin: 0; }
@media (max-width: 900px) {
    .kpi-group { flex-wrap: wrap; }
    .kpi-group .kpi { flex: 1 1 45%; }
}

/* v1.15 - antetele de secțiune cu comutatorul propriu de grafic */
.sec-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.sec-head h2 { margin: 0; }

/* v1.16 - chip compact în Săptămână: iconiță + ora de început + nume;
   numele se strânge primul, apoi ora e tăiată de margine - iconița rămâne */
.evt-line {
    display: flex;
    flex-wrap: wrap;            /* numele poate continua pe rândurile următoare */
    align-items: center;
    gap: 2px 4px;
    min-width: 0;
    overflow: hidden;
    font-size: 11.5px;
    font-weight: 700;
    line-height: 1.3;
}
.evt-line svg { flex: 0 0 auto; }
.evt-h { flex: 0 0 auto; font-variant-numeric: tabular-nums; }
.evt-nm {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: normal;        /* multi-line unde chip-ul are înălțime */
    overflow-wrap: break-word;
    font-weight: 600;
}
/* chip-urile scunde rămân pe un singur rând, cu nume scurtat elegant */
.evt.is-compact .evt-line { flex-wrap: nowrap; }
.evt.is-compact .evt-nm { white-space: nowrap; text-overflow: ellipsis; }

/* v1.16 - capul tabelelor rămâne întreg la derulare: etichetele sus,
   rândul de căutare imediat sub ele, cu fundal opac */
.tbl thead tr.tbl-filters td {
    position: sticky;
    top: 37px;
    z-index: 2;
    background: var(--surface2);
    box-shadow: 0 1px 0 var(--line);
}
.tbl-compact thead tr.tbl-filters td { top: 33px; }

/* v1.16 - aer între tabelul de datorii și cel de avansuri */
.fin-cols > div + div { margin-top: 26px; }
@media (min-width: 901px) { .fin-cols.bal-cols > div + div { margin-top: 0; } }

/* v1.16 - capete de tabel sortabile */
.tbl th.th-sortable { cursor: pointer; user-select: none; }
.tbl th.th-sortable:hover { color: var(--text, #1c2130); }
/* spațiul săgeții e rezervat permanent → coloanele nu se mișcă la sortare;
   pe coloanele numerice (aliniate dreapta) săgeata stă ÎNAINTEA textului,
   ca textul antetului să se termine exact la marginea datelor */
.tbl th.th-sortable::after { content: " ▲"; font-size: 9px; visibility: hidden; }
.tbl th.th-asc::after  { content: " ▲"; font-size: 9px; visibility: visible; }
.tbl th.th-desc::after { content: " ▼"; font-size: 9px; visibility: visible; }
.tbl th.td-num.th-sortable::after { content: none; }
.tbl th.td-num.th-sortable::before { content: "▲ "; font-size: 9px; visibility: hidden; }
.tbl th.td-num.th-asc::before  { content: "▲ "; visibility: visible; }
.tbl th.td-num.th-desc::before { content: "▼ "; visibility: visible; }

/* v1.18 - Săptămâna: coloanele zilelor alternează alb / gri foarte pal */
.daygrid.is-week .dg-col.is-alt:not(.is-today) { background-color: #f5f6fa; }

/* meniul filtrului de medici se deschide spre dreapta (aliniat cu butonul) */
#docSel .mselect-menu { left: 0; right: auto; }
/* v1.46.6 - pe desktop, meniul medicilor se lărgește după cel mai lung nume,
   ca fiecare medic să încapă pe un singur rând. Lățimea „max-content" scapă
   meniul absolut-poziționat de limita containerului (butonul), care altfel
   îl strângea la min-width și frângea numele lungi. Pe telefon rămâne ca acum. */
@media (min-width: 761px) {
    .mselect-menu { width: max-content; max-width: min(92vw, 380px); }
    .mselect-opt { white-space: nowrap; }
}

/* iconițele din butoanele/opțiunile de filtre */
.ms-ic { display: inline-flex; vertical-align: middle; margin-right: 7px; color: var(--muted); }
.ms-ic svg { display: block; }
.mselect-btn .chip-dot { margin-right: 7px; }

/* v1.19 - Încasări pe zile (Lună): geometrie fixă, ca linia de referință
   să cadă exact pe vârful barei celei mai înalte.
   Anatomie: .bars-vert 220px, padding 0; eticheta zilei jos = 15px + gap 3px
   → zona barelor = 100% − 18px; bara maximă = 80% din zonă. */
.bars-vert { position: relative; height: 220px; padding: 0 2px; }
.bars-vert .bar { gap: 3px; }
.bars-vert .bar b { flex: 0 0 15px; height: 15px; line-height: 15px; }
.bars-vert .bar-stack {
    flex: 1 1 auto;
    min-height: 0;
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
    position: relative;
    z-index: 1;
}
.bars-vert .bar-stack .bar-v {
    font-size: 9.5px;
    font-weight: 600;
    color: #444b5c;
    line-height: 1;
    flex: 0 0 auto;
    white-space: nowrap;
    max-width: 100%;
    overflow: hidden;   /* numărul nu depășește niciodată lățimea barei */
}
.bars-maxline {
    position: absolute;
    left: 0;
    right: 0;
    bottom: calc(18px + (100% - 18px) * 0.8);  /* exact vârful barei de 80% */
    border-top: 1px dashed var(--line-strong);
    pointer-events: none;
    z-index: 0;
}
/* Verticalizarea o decide un script care MĂSOARĂ fiecare număr față de
   lățimea barei lui: orizontal cât timp încape, vertical doar când nu. */
.bars-vert.bars-vv .bar-stack .bar-v {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    max-width: none;
    max-height: 100%;
}
.bars-maxline em {
    position: absolute;
    right: 2px;
    bottom: 3px;
    font-style: normal;
    font-size: 10px;
    font-weight: 600;
    color: #7c8294;
    background: #fff;
    border-radius: 4px;
    padding: 1px 5px;
    font-variant-numeric: tabular-nums;
}

/* v1.19.5 - rândul de filtre are aceeași înălțime în toate vederile
   (Listă nu mai împinge nimic în jos la comutare) */
.cal-filters { min-height: 40px; }
.list-only .input-sm { height: 33px; }
#btnPrint { padding-top: 5px; padding-bottom: 5px; }

/* v1.21 - eticheta „sold achitat la zi” */
.pay-tag.is-ok { background: #e7f5ec; color: #2e7d4f; }

/* v1.21 - lightbox pentru documentele pacientului */
.lb-overlay {
    position: fixed;
    inset: 0;
    z-index: 200;
    background: rgba(12, 16, 28, 0.88);
    display: flex;
    align-items: center;
    justify-content: center;
}
.lb-overlay[hidden] { display: none; }
.lb-img {
    max-width: min(94vw, 1600px);
    max-height: 92vh;
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
    background: #fff;
}
.lb-btn {
    position: fixed;
    top: 50%;
    transform: translateY(-50%);
    width: 52px;
    height: 52px;
    border-radius: 50%;
    border: 0;
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
    font-size: 26px;
    line-height: 1;
    cursor: pointer;
}
.lb-btn:hover { background: rgba(255, 255, 255, 0.28); }
.lb-prev { left: 22px; }
.lb-next { right: 22px; }
.lb-close {
    position: fixed;
    top: 18px;
    right: 22px;
    width: 46px;
    height: 46px;
    border-radius: 50%;
    border: 0;
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
    font-size: 22px;
    cursor: pointer;
}
.lb-close:hover { background: rgba(255, 255, 255, 0.28); }
.lb-count {
    position: fixed;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    color: #dfe4ee;
    font-size: 13px;
    background: rgba(255, 255, 255, 0.1);
    padding: 5px 13px;
    border-radius: 99px;
}

/* v1.23 - butoanele de zoom din vizualizatorul de documente */
.lb-zoom {
    position: fixed;
    top: 18px;
    left: 22px;
    display: flex;
    gap: 8px;
}
.lb-zbtn {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    border: 0;
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
    font-size: 24px;
    line-height: 1;
    cursor: pointer;
}
.lb-zbtn:hover { background: rgba(255, 255, 255, 0.28); }
.lb-img { transition: transform 0.12s ease-out; will-change: transform; touch-action: none;
          user-select: none; -webkit-user-select: none; -webkit-user-drag: none; }
/* v1.89.33 - cât ține tragerea, imaginea urmează cursorul 1:1, fără animația de mai sus (care
   o făcea să „alunece" în urma mouse-ului) și fără drag-and-drop-ul nativ al browserului. */
.lb-img.is-dragging { transition: none; }
.lb-overlay { touch-action: none; }

/* v1.24 - numele fișierului ales nu mai împinge butonul de adăugare */
.doc-fname {
    flex: 0 0 auto;
    width: 200px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* v1.25 - butoanele de status din detaliile programării: culori pline, înălțimi egale */
.dlg-foot .btn { min-height: 42px; }
/* v1.26.1 - în dialogul de finalizare, Renunță și Finalizează au aceeași lățime */
#dlg-pay .dlg-foot { display: flex; gap: 10px; }
#dlg-pay .dlg-foot .btn { flex: 1 1 0; justify-content: center; }
.btn-q-ok  { background: #2e9e63; border-color: #2e9e63; color: #fff; }
.btn-q-ok:hover  { background: #268554; border-color: #268554; color: #fff; }
.btn-q-mut { background: #e8ebf1; border-color: #dde2ea; color: #2a3040; }
.btn-q-mut:hover { background: #dde2ea; color: #1c2130; }
.btn-q-can { background: #fadfe4; border-color: #f4cbd3; color: #96222f; }
.btn-q-can:hover { background: #f4cbd3; color: #7d1c27; }
.btn-q-ok svg, .btn-q-mut svg, .btn-q-can svg { flex: 0 0 auto; }

/* v1.25 - totalurile din registru, ca mici carduri */
.tot-card {
    display: inline-flex;
    flex-direction: column;
    gap: 1px;
    padding: 7px 14px;
    border-radius: 11px;
    line-height: 1.2;
}
.tot-card small { font-size: 11px; color: inherit; opacity: 0.75; }
.tot-card strong { font-size: 15px; }
.tot-cost { background: #f9f6ef; border: 1px solid #ece4d2; color: #6b5b2e; }
.tot-paid { background: #eaf7ee; border: 1px solid #d3ebdb; color: #24693f; }
.tot-card + .tot-card { margin-left: 8px; }

/* v1.25.1 - cardul soldului (datorie / avans) în aceeași familie cu totalurile */
.tot-neg { background: #fbe9ec; border: 1px solid #f4d2d8; color: #96222f; }
.tot-adv { background: #e8f0fd; border: 1px solid #d4e2f8; color: #2456a8; }

/* ============================================================
   v1.29 - OPTIMIZĂRI PENTRU TELEFON
   ============================================================ */

/* etichete lung/scurt: pe desktop lung, pe telefon scurt */
.lbl-sm { display: none; }
@media (max-width: 760px) {
    .lbl-lg { display: none; }
    .lbl-sm { display: inline; }

    /* toolbarul calendarului: rândul 1 cu vederi + navigare + „Programare nouă” în dreapta;
       rândul 2: Medici · Unit · Anulate pe același rând */
    .cal-toolbar-row { flex-wrap: wrap; gap: 8px; }
    #btnNew { margin-left: auto; order: 99; padding: 8px 12px; }
    #btnNew span { display: inline; }
    .cal-filters { min-height: 0; }
    .cal-filters .chips { display: none !important; }         /* pe telefon: mereu dropdown */
    .cal-filters .mselect { display: inline-flex !important; }
    .cal-filters > * { flex: 0 0 auto; }

    /* meniurile de filtre ocupă lățimea ecranului, nu ies în afară */
    .mselect-menu {
        position: fixed !important;
        left: 12px !important;
        right: 12px !important;
        width: auto !important;
        max-height: 60vh;
        overflow: auto;
        z-index: 120;
    }

    /* meniul lateral: fără module financiare/administrative pe telefon */
    .nav-finance, .nav-stats, .nav-sms, .nav-settings { display: none !important; }

    /* autentificarea: sigla și numele centrate sus, formularul centrat
       pe orizontală și pe verticală în spațiul rămas */
    .login-wrap {
        display: flex;
        flex-direction: column;
        min-height: 100dvh;
    }
    .login-brand {
        flex: 0 0 auto;
        padding: 20px 16px 14px;
        min-height: 0;
        display: flex;
        justify-content: center;      /* sigla + StomaPlan, centrate în viewport */
    }
    .login-brand .brand { justify-content: center; margin: 0; }
    .login-brand-inner {
        display: flex;
        flex-direction: column;
        align-items: center;
        text-align: center;
        gap: 10px;
    }
    .login-brand h1, .login-brand p, .login-points { display: none; }
    .login-form-side {
        flex: 1 1 auto;
        display: flex;
        align-items: flex-start;      /* sus - tastatura nu acoperă câmpurile */
        justify-content: center;      /* centrat pe orizontală */
        padding: 6px 18px 28px;
    }
    .login-card {
        margin: 0;
        width: 100%;
        max-width: 400px;
    }
    .login-card h2,
    .login-card .login-sub,
    .login-card .login-hint { text-align: center; }
    .login-card h2 { margin-top: 0.5em; } /* o jumătate de rând deasupra „Autentificare” */

    /* tabelele se derulează lateral fără să rupă pagina */
    .tbl-wrap { overflow-x: auto; }

    /* Bara de sus preia identitatea meniului: fundal închis, text și iconuri deschise */
    .topbar {
        display: flex;
        align-items: center;
        gap: 8px;
        background: var(--rail);
        border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    }
    .topbar .topbar-title { color: var(--rail-fg, #fff); }
    .topbar #railToggle { color: var(--rail-fg, #c3c9d8); }
    .topbar #railToggle:hover { color: var(--rail-fg, #fff); background: rgba(127, 127, 127, 0.14); }


    /* pagina nu derulează lateral - grila derulează în interiorul ei,
       iar banda orelor rămâne fixă (sticky) indiferent de swipe */
    html, body { overflow-x: hidden; overscroll-behavior-x: none; }

    /* fără printare pe telefon */
    #btnPrint { display: none !important; }

    /* căutarea pacienților: singură pe primul rând, lată cât ecranul */
    .cal-toolbar-row .input-wrap {
        flex: 1 1 100% !important;
        max-width: 100% !important;
    }

    /* „Pe pagină:” + numerele - pe rând propriu */
    .cal-toolbar-row .pg-info { flex-basis: 100%; margin-top: 4px; }
    .cal-toolbar-row .pg-info + .seg { margin-top: -2px; }

    /* dialogurile umplu aproape tot ecranul */
    .dlg { width: calc(100vw - 20px); max-width: none; }

    /* grila calendarului: derulare laterală naturală cu degetul */
    .dg-wrap { overflow-x: auto; }

    /* calendarul rămâne în ecran (înălțimea exactă o setează scriptul, măsurat) */
    .dg-wrap { min-height: 240px; }
    .main { padding-bottom: 8px; }

    /* luna se comprimă în ecran: rânduri egale, celule elastice, fără derulare */
    .mo-grid { grid-auto-rows: minmax(0, 1fr); overflow: hidden; }
    .mo-cell { min-height: 0 !important; overflow: hidden; padding: 3px 4px; }
    .mo-wrap { overflow: visible; }

    /* fără meniul de apăsare lungă al sistemului pe programări */
    .evt { -webkit-touch-callout: none; }

    /* programarea „ridicată” la ținerea apăsată - semnal clar că intră în mutare */
    .evt.is-lifted {
        transform: scale(1.045);
        box-shadow: 0 10px 26px rgba(20, 30, 60, 0.3);
        z-index: 40;
        transition: transform 0.12s ease-out, box-shadow 0.12s ease-out;
    }

    /* mânerul de redimensionare: DOAR zona marcajului central prinde degetul
       (v1.80.4) - în stânga/dreapta lui e corpul programării, care derulează
       pagina normal; glisarea orizontală pe marcaj derulează, verticala redimensionează */
    .evt-resize { height: 16px; touch-action: pan-x; left: 50%; right: auto; width: 64px; transform: translateX(-50%); }
    .evt.is-compact .evt-resize { height: 9px; }
    .evt-resize::after {
        opacity: 0.55;
        width: 38px;
        height: 4px;
        bottom: 0;
        border-radius: 3px 3px 0 0;
    }
}

/* fără selecții și highlight-uri accidentale la atingerea grilei */
.daygrid, .daygrid *, .evt {
    -webkit-user-select: none;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
}
/* scroll-ul nativ (vertical și lateral) rămâne complet liber pe grile */

/* v1.31 - calendarul propriu de alegere a datei (telefon) */
#spDatePop {
    position: fixed;
    inset: 0;
    background: rgba(15, 20, 35, 0.45);
    z-index: 200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
}
.sp-dp-card {
    background: #fff;
    border-radius: 16px;
    padding: 14px;
    width: min(360px, 100%);
    box-shadow: 0 18px 50px rgba(10, 16, 34, 0.3);
}
.sp-dp-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 6px;
}
.sp-dp-head .btn { padding: 6px 14px; font-size: 18px; line-height: 1; }
.sp-dp-dow,
.sp-dp-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}
.sp-dp-dow span {
    text-align: center;
    font-size: 11.5px;
    color: var(--muted);
    padding: 4px 0;
}
.sp-dp-day {
    border: none;
    background: none;
    font: inherit;
    font-size: 14.5px;
    padding: 9px 0;
    border-radius: 9px;
    cursor: pointer;
    color: var(--ink);
}
.sp-dp-day.is-today { font-weight: 700; color: var(--primary); }
.sp-dp-day.is-sel { background: var(--primary); color: var(--primary-fg, #fff); font-weight: 700; }
.sp-dp-foot {
    display: flex;
    gap: 10px;
    margin-top: 12px;
}
.sp-dp-foot .btn { flex: 1; justify-content: center; }

/* v1.33 - selectarea rapidă a anului în calendarul aplicației */
.sp-dp-title {
    border: none;
    background: none;
    font: inherit;
    font-weight: 700;
    font-size: 15px;
    color: var(--ink);
    cursor: pointer;
    padding: 6px 10px;
    border-radius: 9px;
}
.sp-dp-title:hover { background: var(--soft, #f2f4f9); }
.sp-dp-years {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 6px;
    padding: 6px 0 2px;
}
.sp-dp-year {
    border: none;
    background: none;
    font: inherit;
    font-size: 14.5px;
    padding: 12px 0;
    border-radius: 9px;
    cursor: pointer;
    color: var(--ink);
}
.sp-dp-year.is-today { font-weight: 700; color: var(--primary); }
.sp-dp-year.is-sel { background: var(--primary); color: var(--primary-fg, #fff); font-weight: 700; }
.sp-dp-year:hover:not(.is-sel) { background: var(--soft, #f2f4f9); }

/* v1.90.23 - calendarul de perioadă: doar lunile pe „Lună", doar anii pe „An",
   iar pe „Săptămână" rândul (luni-duminică) se evidențiază și se alege întreg */
.sp-dp-months {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
    padding: 6px 0 2px;
}
.sp-dp-month {
    border: none;
    background: none;
    font: inherit;
    font-size: 13.5px;
    padding: 13px 0;
    border-radius: 9px;
    cursor: pointer;
    color: var(--ink);
}
.sp-dp-month:hover:not(.is-sel) { background: var(--soft, #f2f4f9); }
.sp-dp-month.is-today { font-weight: 700; color: var(--primary); }
.sp-dp-month.is-sel { background: var(--primary); color: var(--primary-fg, #fff); font-weight: 700; }
.sp-dp-weeks { display: flex; flex-direction: column; gap: 2px; }
.sp-dp-wrow {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    border-radius: 9px;
    cursor: pointer;
}
.sp-dp-wrow:hover:not(.is-selweek) { background: #e4edfb; }
.sp-dp-wrow:hover:not(.is-selweek) .sp-dp-day { background: transparent; }
.sp-dp-wrow.is-selweek { background: var(--primary); }
.sp-dp-wrow.is-selweek .sp-dp-day { color: var(--primary-fg, #fff); font-weight: 700; }
.sp-dp-day.is-out { color: var(--muted); opacity: .55; }

/* v1.35 - importul de pacienți: agenda pe telefon, VCF pe desktop */
.imp-mob { display: none; }
@media (max-width: 760px) {
    .imp-mob { display: inline-flex; }
    .imp-desk { display: none !important; }
}

/* v1.35 - „Ține-mă minte” la autentificare */
.login-remember {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13.5px;
    color: var(--muted);
    margin: 4px 0 12px;
    cursor: pointer;
}
.login-remember input { width: 16px; height: 16px; accent-color: var(--primary); }
@media (max-width: 760px) {
    .login-remember { justify-content: center; }
}

/* v1.36 - vizibilitatea pacientului (multi-select pe fișă, doar medic-șef) */
.vis-dd {
    position: relative;
    display: inline-block;
}
.vis-dd summary {
    cursor: pointer;
    list-style: none;
    user-select: none;
}
.vis-dd summary::-webkit-details-marker { display: none; }
.vis-list {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    z-index: 60;
    min-width: 240px;
    max-width: 320px;
    border: 1px solid var(--line);
    border-radius: 12px;
    max-height: 260px;
    overflow-y: auto;
    padding: 4px;
    background: #fff;
    box-shadow: 0 12px 32px rgba(15, 22, 40, 0.16);
}
.vis-row {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 9px;
    border-radius: 8px;
    cursor: pointer;
    white-space: nowrap;
}
.vis-row span {
    overflow: hidden;
    text-overflow: ellipsis;
}
.vis-row:hover { background: var(--soft, #f2f4f9); }
.vis-row input { width: 15px; height: 15px; flex: 0 0 auto; accent-color: var(--primary); }
.vis-row input:disabled + span { color: var(--muted); }

/* v1.39 - ghid de instalare pe iPhone (Safari) */
#iosHint {
    position: fixed;
    left: 10px;
    right: 10px;
    bottom: 12px;
    z-index: 300;
    display: flex;
    align-items: flex-start;
    gap: 10px;
    background: var(--rail, #0f1523);
    color: #fff;
    border-radius: 14px;
    padding: 12px 12px 12px 14px;
    box-shadow: 0 12px 34px rgba(10, 16, 34, 0.35);
    font-size: 13.5px;
    line-height: 1.45;
}
#iosHint b, #iosHint strong { color: #fff; }
.ios-hint-x {
    border: none;
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
    width: 30px;
    height: 30px;
    border-radius: 9px;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    flex: 0 0 auto;
}

/* v1.40 - popup de informare + suma încasată blocată pentru alte roluri */
#spAlertPop {
    position: fixed;
    inset: 0;
    z-index: 400;
    background: rgba(15, 20, 35, 0.45);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
}
.sp-al-card {
    background: #fff;
    border-radius: 14px;
    padding: 20px 18px 16px;
    width: min(380px, 100%);
    box-shadow: 0 18px 50px rgba(10, 16, 34, 0.3);
    text-align: center;
}
.sp-al-card p { margin: 0 0 14px; line-height: 1.5; }
.input.is-locked { background: #f3f4f8; color: var(--muted); cursor: not-allowed; }

/* v1.41 - programările din zilele precedente: doar vizualizare pentru non-admin */
.evt.is-past-lock .evt-resize { display: none; }
.evt.is-past-lock { cursor: default; }

/* ===== Jurnal de audit - disponibil doar pe desktop ===== */
@media (max-width: 900px) {
    .rail-link.nav-audit { display: none; }
    .audit-desktop { display: none; }
    .audit-mobile-note { display: block; }
}
@media (min-width: 901px) {
    .audit-mobile-note { display: none; }
}

/* v1.44.3 - atributul hidden câștigă în fața display-urilor din clase
   (altfel .pay-suggest/.pay-grid rămân vizibile ca zone goale) */
.pay-suggest[hidden], .pay-grid[hidden], .pay-balance[hidden], .pay-delta[hidden] { display: none; }

/* v1.45.3 - Pe medici (Bare): linia discretă de referință + ponderea față de
   cel mai bun, deasupra liniei, în dreptul fiecărei coloane. Eticheta stă sus
   (margin-bottom:auto), restul coloanei rămâne ancorat jos. */
/* v1.45.5 - Pe medici (Bare): ponderea din totalul încasărilor, ca etichetă
   imediat deasupra sumei fiecărei coloane (fără linie de referință). Puțin mai
   înalt decât graficele obișnuite, ca eticheta în plus să nu strângă bara maximă. */
.bars.bars-share { height: 168px; }
.bar .bar-share {
    flex-shrink: 0;
    font-size: 10.5px;
    font-weight: 400; /* procentul nebolduit, suma bolduită (doar în graficul Pe medici) */
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    line-height: 14px;
    margin-top: -3px; /* lipit de suma de deasupra - se citesc împreună: „6.700 / 55,3%" */
}
.bars.bars-share .bar-v { font-weight: 700; }

/* v1.46.3 - secțiunea Încasări: graficul umple spațiul rămas din viewport,
   FĂRĂ constante de pixeli - pur prin flex, deci scalează pe orice desktop:
   .shell e deja coloană pe min-height:100vh cu .main pe flex:1; aici .main
   devine coloană, cardul absoarbe restul (flex:1), iar în card graficul
   absoarbe restul dintre titlu și indicație. Barele au înălțimi procentuale,
   deci urmează automat. Totul e limitat la prezența .chart-fill (doar
   secțiunea Încasări); browserele fără :has rămân pe înălțimea fixă. */
/* Lanțul de înălțimi DEFINITE, de la rădăcină: procentele barelor se rezolvă
   doar dacă fiecare container are dimensiune definită (regula flexbox care
   funcționa și la înălțimea fixă). .shell primește height (nu doar min-height)
   cât fereastra; dacă conținutul e mai înalt, pagina derulează normal. */
body:has(.card.chart-fill) .shell { height: 100vh; min-height: 100vh; }
.main:has(> .card.chart-fill) { display: flex; flex-direction: column; }
.main:has(> .card.chart-fill) > .card.chart-fill {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    min-height: 0;
}
.main:has(> .card.chart-fill) .chart-fill .bars {
    /* AMBELE variante de grafic (.bars simplu - Zi/Săptămână/An/comparații -
       și .bars-vert - Luna): flex-basis 0 (nu auto), ca dimensiunea rezultată
       din flex să fie DEFINITĂ și înălțimile procentuale ale barelor să se
       rezolve corect (cu basis auto, procentele colapsează). */
    flex: 1 1 0;
    height: auto;
    min-height: 180px; /* plasa de siguranță pe ferestre foarte scunde */
}
@media (max-width: 760px) {
    /* pe telefon, cardurile KPI stivuite ocupă oricum ecranul - grafice fixe,
       la înălțimile lor originale */
    .main:has(> .card.chart-fill) .chart-fill .bars { flex: 0 0 auto; height: 150px; }
    .main:has(> .card.chart-fill) .chart-fill .bars-vert { height: 220px; }
}

/* v1.51.0 - Financiar: datoriile/avansurile istorice, în chenar roz vizibil */
.fin-hist {
    border: 1px solid var(--danger-line);
    background: var(--danger-soft);
    padding: 7px 12px;
    border-radius: 10px;
}

/* v1.51.0 - Statistici: butoanele secțiunilor centrate pe PAGINA VIZIBILĂ
   (lățimea zonei de conținut, adică fereastra minus meniul lateral vizibil),
   nu între titlu și marginea dreaptă. Sub 1100px revine în flux, altfel
   segmentul lat ar călca titlul. */
@media (min-width: 1100px) {
    .page-head:has(> .seg[aria-label="Secțiunea de statistici"]) { position: relative; }
    .page-head > .seg[aria-label="Secțiunea de statistici"] {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
    }
}

/* v1.51.1 - Listă: câmpul de căutare suficient de lat pentru placeholder */
#fltQ { min-width: 250px; }

/* v1.51.5 - EXPERIMENT (reversibil): culorile iconițelor de status.
   Bifa (finalizată): verde puternic + îngroșată, vizibilă peste orice fundal;
   x-ul (anulată + neprezentată): negru. Ceasul (programată): neatins.
   Pentru revenire: șterge acest bloc. */
.evt-st.st-finalizata { color: #15803d; }
.evt-st.st-finalizata .ic { stroke-width: 3.6; }
.evt-st.st-anulata, .evt-st.st-neprezentat { color: #111111; }

/* v1.51.6 - Financiar: golul dintre cele două toggle-uri aliniat cu golul
   dintre grupul verde și cel chihlimbar de deasupra. Aceeași geometrie ca
   .kpis-grouped: două jumătăți egale (flex 1 1 0) cu gap 20px - mijlocul
   golului cade identic; segmentul de grupare se lipește de gol din stânga,
   metodele din dreapta. */
.fin-tabs { gap: 12px; }
.fin-tabs > div { flex: 0 0 auto; display: flex; min-width: 0; }
.fin-perpage { display: flex; align-items: center; gap: 8px; margin-left: auto; }
@media (max-width: 900px) {
    .fin-tabs { flex-wrap: wrap; }
    .fin-tabs > div, .fin-tabs > div:first-child { flex: 1 1 100%; justify-content: flex-start; }
}

/* v1.51.7 - badge-ul de status din dialogul de detalii: iconița statusului
   în fața textului, în culoarea textului badge-ului (currentColor) */
.badge.has-ic { display: inline-flex; align-items: center; gap: 5px; }
.badge.has-ic .ic { width: 12px; height: 12px; flex-shrink: 0; }

/* v1.51.9 - Setări: cardul clinicii pe două coloane pe desktop - formularul
   (nume, program, zile, ore) pe jumătatea stângă, calendarul de excepții pe
   dreapta; pe ecrane înguste se stivuiesc natural. h3-ul din dreapta nu mai
   are nevoie de separatorul de sus. */
.clinic-cols { display: flex; gap: 34px; flex-wrap: wrap; align-items: flex-start; }
.clinic-cols > div:first-child { flex: 1 1 460px; min-width: 0; } /* formularul ocupă tot ce rămâne */
.clinic-cols > div:last-child {
    /* calendarul: blocul stă la dreapta, dar îngustat exact pe lățimea grilei
       (7 x 44px + 6 x 5px gap = 338px), ca titlul, textul și navigarea pe luni
       să se poată CENTRA pe calendarul de sub ele */
    flex: 0 0 auto;
    margin-left: auto;
    max-width: 338px;
}
.clinic-cols > div:last-child .cal-toolbar-row { justify-content: center; }
.clinic-cols > div:last-child h3 { text-align: center; }
.clinic-cols > div:last-child > p.hint { text-align: center; }
@media (min-width: 980px) {
    .clinic-cols > div > h3#zile { margin-top: 0; padding-top: 0; border-top: none; }
}

/* ============================================================
   v1.53 - Status dentar (odontogramă) pe fișa pacientului + catalog
   ============================================================ */
.dental-head { flex-wrap: wrap; row-gap: 8px; }
.dental-dent { display: inline-flex; align-items: center; margin: 0; }
.field-inline { display: inline-flex; align-items: center; gap: 8px; }
.dental-hint { margin: 0 0 10px; }
.dental-wrap { display: flex; gap: 22px; align-items: flex-start; flex-wrap: wrap; }
.dental-map-col { flex: 0 1 660px; min-width: 280px; }
.dental-list-col { flex: 1 1 340px; min-width: 0; }
/* Tabelul nu încape lângă hartă fără scrollbar orizontal → coboară sub, pe toată lățimea */
.dental-wrap.is-stacked { flex-direction: column; }
.dental-wrap.is-stacked .dental-map-col,
.dental-wrap.is-stacked .dental-list-col { flex: 1 1 auto; width: 100%; }
.dental-map { width: 100%; }
.dental-svg { display: block; width: 100%; height: auto; max-width: 660px; user-select: none; -webkit-user-select: none; }
.dental-svg .dz { fill: #f3f4f7; stroke: #b8bfcc; stroke-width: 1; transition: stroke .12s; }
.dental-svg .dz-soft { fill-opacity: 0.38; }
.dental-svg .dz-full { fill-opacity: 1; }
.dental-svg .dt { cursor: pointer; }
.dental-svg .dt:hover .dz { stroke: var(--primary); }
.dental-svg .dt-num { font-size: 11px; font-weight: 600; fill: #4b5563; font-family: inherit; }
.dental-svg .dt-missing .dz { fill: #fafbfc; stroke-dasharray: 2 2; }
.dental-svg .dt-x { stroke-width: 2.4; stroke-linecap: round; }
.dental-svg .dt-mid { stroke: #cbd0da; stroke-dasharray: 3 3; }
.dental-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 10px; font-size: 12.5px; color: var(--muted); }
.dental-lg { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.dental-empty { margin: 4px 0 0; }
.dental-tbl tr.is-hl td { background: #fff7d6; }
.dental-tbl .dental-tooth-no { font-weight: 700; }
.dental-tbl .td-note { font-weight: 400; }
.dental-hist { margin-top: 12px; }
.dental-hist summary { cursor: pointer; font-weight: 600; font-size: 13.5px; color: var(--muted); margin-bottom: 8px; }
.dental-appt { font-size: 11.5px; margin-top: 2px; }
.dental-surf-row { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.dental-surf-row .chk-line { margin: 0; }
.dental-color { width: 64px; height: 38px; padding: 3px; }
.dlg-dental { width: min(600px, calc(100vw - 32px)); }
@media (max-width: 760px) {
    .dental-wrap { flex-direction: column; }
    .dental-map-col { flex: 1 1 auto; width: 100%; }
}
@media print {
    body.print-dental .card:not(#dental), body.print-dental .page-head, body.print-dental .flash,
    body.print-dental #dental .btn, body.print-dental .dental-selbar, body.print-dental .dental-hint,
    body.print-dental .dental-dent select { display: none !important; }
    body.print-dental #dental { border: none; box-shadow: none; }
    body.print-dental .dental-wrap { flex-direction: column; }
    body.print-dental .dental-map-col { flex: 1 1 auto; }
    body.print-dental .dental-hist { display: block; }
    body.print-dental .dental-hist[open] summary { display: block; }
}
/* Grila de dinți (folosită în dialogul „Adaugă o condiție” din fișa pacientului) */
.pay-teeth-grid { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
.pay-teeth-row { display: flex; gap: 3px; }
.pay-teeth-row .pay-tooth:nth-child(8) { margin-right: 6px; }
.pay-tooth {
    flex: 1 1 0; min-width: 0; height: 28px; padding: 0; font: inherit; font-size: 11.5px; font-weight: 600;
    border: 1px solid var(--line); border-radius: 6px; background: var(--surface); color: #4b5563; cursor: pointer;
}
.pay-tooth:hover { border-color: var(--primary); color: var(--primary); }
.pay-tooth.is-on { background: var(--primary); border-color: var(--primary); color: var(--primary-fg, #fff); }
/* Pozițiile de supranumerar (FDI x9): contur punctat, număr estompat */
.dental-svg .dt-extra .dz { stroke-dasharray: 3 2; stroke: #c2c8d6; }
.dental-svg .dt-extra .dt-num { fill: #9aa1b2; font-style: italic; }
.dental-super { margin: 0 0 0 14px; white-space: nowrap; }

/* v1.55 - dentiția + bifa de supranumerari stau deasupra hărții; selecția multiplă în dialog */
.dental-dent-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 10px; }
.dental-dent-top .dental-super { margin-left: 8px; }
.dental-pick { margin: 0 0 12px; }
.dental-pick .pay-tooth.is-extra { border-style: dashed; color: #9aa1b2; }
.dental-pick .pay-tooth.is-extra.is-on { border-style: solid; color: #fff; }
/* Paginația fișei pacientului: taburi centrate pe primul rând; subtitlul sub nume.
   Centrarea = modelul de la Statistici: pe ecrane late segmentul iese din flux și
   stă la mijlocul PAGINII VIZIBILE (left:50% + translateX), nu între titlu și
   marginea dreaptă; sub 1100px revine în flux, altfel ar călca numele. */
.pat-sub { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.pat-tabs { flex-wrap: wrap; }
@media (min-width: 901px) {
    /* v1.72.4: capsula se întinde maximal între numele pacientului și Vizibilitate,
       cu o margine mică față de fiecare. (Vechea centrare cu left:50% + translateX
       limita lățimea la jumătate din antet și rupea taburile pe 2 rânduri.) */
    /* capsula are lățimea conținutului, centrată; poate crește până la tot
       spațiul dintre nume și Vizibilitate DOAR dacă are nevoie (nu rupe rândul) */
    .page-head > .pat-tabs { flex: 0 1 auto; margin-left: auto; margin-right: auto; }
    .page-head:has(> .pat-tabs) > .spacer { display: none; }
}
@media (max-width: 900px) {
    .page-head .pat-tabs { order: 5; width: 100%; justify-content: center; }
    .page-head .pat-tabs + .spacer { display: none; }
}

/* ============================================================
   v1.58 - Parodontogramă (fișa Berna)
   ============================================================ */
.perio-head { margin-bottom: 14px; grid-template-columns: 180px 220px auto; align-items: end; }
.perio-chart { overflow-x: auto; }
.perio-arch { margin-bottom: 6px; }
/* trebuie să încapă și pe desktopuri obișnuite: coloana de etichete îngustă + celule compacte */
.perio-tbl { border-collapse: collapse; width: 100%; min-width: 930px; table-layout: fixed; }
.perio-tbl th {
    width: 104px; text-align: right; padding: 1px 6px 1px 0; font-size: 10px; font-weight: 600;
    color: var(--muted); white-space: nowrap; border: 0;
}
.perio-tbl td { border: 1px solid #e3e7ef; padding: 0; text-align: center; height: 20px; background: #fff; }
.perio-tbl td.is-missing { background: #f1f3f7; }
.perio-tbl td.is-missing .perio-in, .perio-tbl td.is-missing .perio-dot,
.perio-tbl td.is-missing .perio-fc, .perio-tbl td.is-missing .perio-mob,
.perio-tbl td.is-missing .perio-imp { visibility: hidden; }
.perio-sites { display: table-cell; }
.perio-sites .perio-in { width: 33.33%; }
.perio-in {
    border: 0; height: 20px; padding: 0; text-align: center; font: inherit; font-size: 10.5px;
    background: transparent; outline-offset: -2px; min-width: 0;
}
.perio-in:focus { outline: 2px solid var(--primary); background: #eef4ff; }
.perio-in.is-deep { color: #dc2626; font-weight: 700; }
.perio-dot {
    width: 30%; height: 16px; margin: 2px 1%; border: 0; padding: 0; background: transparent; cursor: pointer;
    position: relative;
}
.perio-dot::after {
    content: ''; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: 8px; height: 8px; border-radius: 50%; border: 1px solid #c3c9d6; background: #fff;
}
.perio-dot-bop.is-on::after { background: #dc2626; border-color: #dc2626; }
.perio-dot-plaque.is-on::after { background: #2563eb; border-color: #2563eb; }
/* Furcația (Hamp 1975): grad 0 = nimic (slot punctat), 1 = cerc gol, 2 = semiplin, 3 = plin */
.perio-fc {
    width: 15px; height: 15px; margin: 1px 2px; border: 1.4px dashed #c0c6d2; border-radius: 50%;
    background: #fff; cursor: pointer; padding: 0;
}
.perio-fc[data-g="1"] { border: 1.6px solid #374151; }
.perio-fc[data-g="2"] { border: 1.6px solid #374151; background: linear-gradient(to right, #374151 50%, #fff 50%); }
.perio-fc[data-g="3"] { border: 1.6px solid #374151; background: #374151; }
.perio-mob, .perio-imp {
    width: 100%; height: 20px; border: 0; background: transparent; cursor: pointer;
    font: inherit; font-size: 11px; font-weight: 700; color: #1f2937; padding: 0;
}
.perio-imp.is-on { color: #0f766e; }
.perio-num { background: #f7f8fb !important; }
.perio-numbtn {
    width: 100%; height: 22px; border: 0; background: transparent; cursor: pointer;
    font: inherit; font-size: 11.5px; font-weight: 700; color: #374151; padding: 0;
}
.perio-numbtn.is-extra { color: #9aa1b2; font-style: italic; }
.perio-numbtn.is-missing { text-decoration: line-through; color: #b0b6c3; }
.perio-r-strip th { vertical-align: middle; }
.perio-stripcell { padding: 0 !important; background: #fcfdff !important; }
.perio-svg { display: block; width: 100%; height: auto; }
.perio-svg .pt-root { fill: #f6f0e2; stroke: #7c8494; stroke-width: 1.1; }
.perio-svg .pt-crown { fill: #fcfcf9; stroke: #7c8494; stroke-width: 1.1; }
.perio-svg .pt-implant { fill: #dfe4ec; stroke: #6b7280; stroke-width: 1.1; }
.perio-svg .pt-thread { stroke: #6b7280; stroke-width: 1; }
.perio-svg .pt-missing { opacity: 0.28; }
.perio-svg .pt-x { stroke: #9aa1b0; stroke-width: 2; stroke-linecap: round; }
.perio-svg .pt-cej { stroke: #c6ccd8; stroke-dasharray: 3 3; }
.perio-svg .pt-grid { stroke: #eef1f6; stroke-width: 1; }
.perio-svg .pt-grid5 { stroke: #e0e5ee; }
.perio-svg .pt-furc-c { fill: #fff; stroke: #374151; stroke-width: 1.3; }
.perio-svg .pt-furc-f { fill: #374151; stroke: #374151; }
.perio-svg .pt-mg { fill: none; stroke: #dc2626; stroke-width: 1.6; stroke-linejoin: round; }
.perio-svg .pt-al { fill: none; stroke: #2563eb; stroke-width: 1.6; stroke-linejoin: round; }
.perio-svg .pt-pocket { fill: rgba(59, 130, 246, 0.16); stroke: none; }
.perio-al { background: #f7f8fb !important; }
.perio-al-v { display: inline-block; width: 33.33%; font-size: 10.5px; color: #1e40af; font-weight: 600; }
.perio-al-v.is-deep { color: #dc2626; }
.perio-summary { margin: 8px 0 12px; font-size: 13px; color: var(--ink); font-weight: 600; text-align: center; }
tr.is-hl td { background: #fff7d6; }
@media print {
    /* v1.90.34 - și bara cu taburile fișei, meniul și antetul paginii dispar la print
       (taburile „Pacient · Programări și finanțe · …" apăreau pe foaie) - fișa începe
       cu antetul de print (StomaPlan | pacient · clinică | data) */
    body.print-paro .card:not(#paro), body.print-paro .page-head, body.print-paro .flash,
    body.print-paro .rail, body.print-paro .topbar, body.print-paro .pat-tabs,
    body.print-paro #paro .sec-head,
    body.print-paro #paro .btn, body.print-paro #paro .form-actions, body.print-paro #paro .tbl-wrap { display: none !important; }
    body.print-paro #paro { border: none; box-shadow: none; padding: 0; }
    body.print-paro .perio-chart { overflow: visible; }
    /* fișa trebuie să încapă pe lățimea unui A4 portret: celule și fonturi comprimate */
    body.print-paro .perio-tbl { min-width: 0; }
    body.print-paro .perio-tbl th { width: 70px; font-size: 7.5px; padding-right: 3px; }
    body.print-paro .perio-tbl td { height: 12px; line-height: 11px; }
    body.print-paro .perio-in { font-size: 7.5px; height: 11px; line-height: 11px; }
    body.print-paro .perio-sites { white-space: nowrap; }
    /* la print, siturile stau garantat pe UN rând (inline-block se rupea în WeasyPrint/motoare stricte) */
    body.print-paro .perio-sites .perio-in { float: left; width: 33.33%; }
    body.print-paro td.perio-al .perio-al-v { float: left; width: 33.33%; line-height: 11px; }
    body.print-paro .perio-dot { height: 9px; }
    body.print-paro .perio-mob, body.print-paro .perio-imp, body.print-paro .perio-numbtn { line-height: 11px; }
    body.print-paro .perio-al-v { font-size: 7.5px; }
    body.print-paro .perio-dot { height: 9px; margin: 1px 1%; }
    body.print-paro .perio-dot::after { width: 5px; height: 5px; }
    body.print-paro .perio-fc { width: 9px; height: 9px; border-width: 1px; font-size: 6px; margin: 0 1px; }
    body.print-paro .perio-mob, body.print-paro .perio-imp { font-size: 8px; height: 12px; }
    body.print-paro .perio-numbtn { font-size: 8.5px; height: 13px; }
    body.print-paro .perio-summary { font-size: 9.5px; margin: 4px 0; }
    body.print-paro .perio-head { grid-template-columns: 1fr 1fr 1fr; margin-bottom: 3px; gap: 6px; }
    body.print-paro .perio-head .input { font-size: 9px; height: 18px; padding: 1px 5px; }
    body.print-paro .perio-head .field-label { font-size: 8px; }
    body.print-paro .perio-head .field { gap: 1px; }
    body.print-paro .perio-head .chk-line { font-size: 9px; }
    body.print-paro #paro h2 { font-size: 13px; }
    body.print-paro .perio-summary { font-size: 8.5px; }
}
/* dintele tăiat: nivelul de atașament dispare odată cu restul valorilor */
.perio-tbl td.is-missing .perio-al-v { visibility: hidden; }
/* hover pe dinte: rândurile celorlalți dinți dispar din listă */
.dental-tbl tr.is-dim { display: none; }
/* atributul hidden trebuie să bată display-ul din .field (altfel Suprafețele rămân vizibile la condițiile pe dintele întreg) */
.field[hidden] { display: none !important; }

/* Antetul fișelor tipărite: logo + StomaPlan | pacient · clinică (centrat) | data */
.print-head { display: none; }
@media print {
    @page { margin: 0; } /* fără antetul/subsolul browserului (URL-ul) - se tipăresc în margine */
    body.print-dental #dental { padding: 8mm 9mm !important; }
    body.print-paro #paro { padding: 5mm 8mm !important; }
    body.print-dental #dental .print-head, body.print-paro #paro .print-head {
        display: flex; align-items: center; gap: 10px; margin-bottom: 8px;
        border-bottom: 1px solid #d7dbe4; padding-bottom: 6px;
    }
    .print-head .ph-brand { display: inline-flex; align-items: center; gap: 6px; flex: 1 1 0; font-size: 13px; }
    .print-head .ph-brand .ic { color: var(--primary); }
    .print-head .ph-center { flex: 2 1 0; text-align: center; font-size: 13px; }
    .print-head .ph-date { flex: 1 1 0; text-align: right; font-size: 12px; }
    /* Fișa parodontală: O SINGURĂ pagină (Letter sau A4). Benzile SVG își iau înălțimea
       din LĂȚIMEA tabelului (raportul viewBox), deci plafonăm lățimea - zoom-ul nu le
       micșora și arcada a doua sărea întreagă pe pagina 2. */
    body.print-paro .perio-tbl { width: 560px; min-width: 0; margin: 0 auto; }
    body.print-paro .perio-arch { margin-bottom: 2px; }
    body.print-paro .perio-summary { margin: 2px 0 4px; page-break-inside: avoid; }
    body.print-paro #paro h2 { margin: 0 0 2px; }
    body.print-paro .perio-head { margin-bottom: 4px; }
}

/* ============================================================
   EXPERIMENT-SEGMENTE v3 (1.60.7, reversibil - șterge blocul pentru revenire)
   Stilul de „pastilă” pe TOATE segmentele de paginație (.seg) și pe toate
   navigările ‹ / Azi / › (.cal-nav) din aplicație: calendar, fișa pacientului,
   Financiar, Statistici, Încasările mele etc. FĂRĂ schimbări de formă
   (blocul nu conține nicio regulă de rază). „Azi” pe ziua curentă = pastila
   accentuată (umbra stratificată + bold), în rest pastila obișnuită.
   ============================================================ */
.seg {
    border-color: #e3e3e5; /* v1.88.94 - chenar mai discret DOAR pe capsulele de pastile */
    background: rgba(0, 0, 0, 0.05);
    box-shadow: inset 0 0.5px 1.5px rgba(0, 0, 0, 0.06);
}
.seg-btn {
    color: #5b6474;
    transition: color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease;
}
.seg-btn:hover { color: var(--ink); background: transparent; }
.seg-btn.is-active,
.seg-btn.is-active:hover {
    background: #fff;
    color: var(--ink);
    /* „bold" cu lățime identică (text-shadow, nu font-weight 700):
       activarea unui tab nu mai lărgește textul și nu mai rupe capsula pe 2 rânduri */
    font-weight: 600;
    text-shadow: 0.4px 0 0 currentColor;
    text-decoration: none; /* fără underline pe opțiunea activă */
    box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.06),
                0 1px 2.5px rgba(0, 0, 0, 0.16),
                0 2px 7px rgba(0, 0, 0, 0.07);
}
.seg-btn:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.35); }
.cal-nav .btn {
    border-color: transparent;
    background: #fff;
    box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.10),
                0 1px 2.5px rgba(0, 0, 0, 0.10);
    transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.12s ease;
}
/* v1.89.57 - hover DOAR pe dispozitive cu cursor: pe telefon atingerea lăsa culoarea
   de hover „lipită" pe ‹ / › după navigare (tap-ul rămâne ultimul punct atins). */
@media (hover: hover) and (pointer: fine) {
    .cal-nav .btn:hover { background: var(--surface2); }
}
.cal-nav .btn:active { transform: scale(0.97); box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.12); }
/* „Azi” marcat pe ziua curentă: pastila accentuată (învinge regula veche cu chenar gri) */
#navToday.is-on-today,
.cal-nav .btn.is-on-today,
.cal-nav .btn.is-on-today:hover {
    border-color: transparent;
    background: #fff;
    color: var(--ink);
    font-weight: 700;
    box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.06),
                0 1px 2.5px rgba(0, 0, 0, 0.18),
                0 2px 8px rgba(0, 0, 0, 0.10);
}


/* v1.63.1 - Datele pacientului: contact + observații pe două coloane (desktop),
   e-mail/data nașterii sub nume/telefon, Vizibilitatea în antet, dreapta sus */
.pat-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: stretch; margin-bottom: 16px; }
.pat-cols[hidden] { display: none !important; } /* hidden trebuie să bată display: grid (comutarea taburilor) */
.pat-cols > .card { margin-bottom: 0; display: flex; flex-direction: column; }
.pat-cols > .card textarea { flex: 1; min-height: 96px; } /* observațiile umplu cardul → aceeași înălțime cu contactul */
.frow-2 { grid-template-columns: 1fr 1fr; }
.pat-vis { margin-left: 12px; }
.pat-vis .vis-list { right: 0; left: auto; }
@media (max-width: 1100px) {
    .pat-cols { grid-template-columns: 1fr; }
}

/* v1.64.3 - ajustări DOAR pentru mobil */
@media (max-width: 900px) {
    /* 1) totalurile din Istoricul programărilor nu se mai taie: rândul se înfășoară */
    [data-pattab="istoric"] .sec-head { flex-wrap: wrap; row-gap: 8px; }
    [data-pattab="istoric"] .sec-head .tot-card { min-width: 0; }

    /* 2) Status dentar: fără printare pe mobil; tabelele se trag cu degetul.
       Fără min-width tabelul se strivea ca să încapă → nu exista nimic de tras. */
    #dentalPrint { display: none; }
    #dental .dental-wrap, #dental .dental-wrap.is-stacked { display: block; }
    #dental .dental-map-col, #dental .dental-list-col { width: 100%; max-width: 100%; min-width: 0; }
    #dental .tbl-wrap { overflow-x: auto !important; touch-action: pan-x pan-y; -webkit-overflow-scrolling: touch; } /* v1.89.4: fără max-width - bloca ieșirea pe toată lățimea ecranului */
    #dental .dental-tbl { min-width: 640px; }

    /* 3) Parodontograma pe mobil = doar vizualizare: fără examinare nouă, ștergere,
       salvare sau tipărire; graficul nu primește input (dar se poate derula) */
    .paro-newbtn, .paro-delform, #perioSave, #perioPrint { display: none !important; }
    #paro .perio-chart input, #paro .perio-chart button,
    #paro .perio-head input, #paro .perio-head select, #paro .perio-head textarea { pointer-events: none; }
}

/* v1.64.7 - bara de sus mobilă: O SINGURĂ identitate pe tot intervalul ≤900px
   (fundal = culoarea meniului, titlul + liniuțele = --rail-fg din luminozitate).
   Contrast garantat prin construcție, fără ferestre 760/900 diferite. */
@media (max-width: 900px) {
    .topbar { background: var(--rail); border-bottom: 1px solid rgba(127, 127, 127, 0.22); }
    .topbar .topbar-title { color: var(--rail-fg, #fff); }
    .topbar #railToggle { color: var(--rail-fg, #fff); }
    #railToggle .ic { color: inherit; stroke-width: 2; } /* culoarea vine inline din PHP (contrast calculat) */

}

/* Confirmările pe mobil: id + !important la FINALUL fișierului - nicio altă regulă
   din foaie nu le mai poate face cât ecranul. Centrare nativă forțată (inset+margin). */
@media (max-width: 900px) {
    #dlg-confirm {
        width: min(340px, calc(100vw - 40px)) !important;
        max-width: none !important;
        height: fit-content !important; /* cu inset:0, „auto” se ÎNTINDE între sus și jos - fit-content = pe conținut */
        max-height: 82vh !important;
        margin: auto !important;
        inset: 0 !important;
        border-radius: 14px !important;
        overflow: auto !important;
    }
    #dlg-confirm .dlg-body { padding: 16px 16px 8px; }
    #dlg-confirm .dlg-foot { padding: 8px 16px 14px; justify-content: flex-end; }
}


/* v1.67 - Raportul zilnic: intrare de meniu doar pe mobil */
@media (min-width: 901px) {
    .rail-mobile-only { display: none; }
}

/* v1.67.5 - Raport zilnic: ziua + calendarul pe același rând cu navigarea;
   coboară natural (flex-wrap) doar când nu mai încap. */
#rapToolbar { flex-direction: row; flex-wrap: wrap; align-items: center; }

/* v1.67.2 - Raport zilnic pe mobil: primul card lat cât rândul, celelalte două pe un rând */
@media (max-width: 900px) {
    /* v1.69.5 - Raport: Preț lucrări + Încasat pe primul rând, Cash + Card pe al doilea */
    .page-raport .kpi-group .kpi { flex: 1 1 40%; }

    /* v1.88.40 - Încasările mele pe mobil: perechi fixe pe 2 coloane -
       Total lucrări+Încasări, Cash+Card, Costuri tehnicieni+Datorii, Procentul meu+Rest */
    .page-mypay .kpis-grouped { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
    .page-mypay .kpis-grouped .kpi-group { display: contents; }
    /* v1.89.23 - aceeași ordine ca pe desktop: lucrări/încasări, cash/card, datorii/avansuri,
       tehnicieni/procent, rest */
    .page-mypay .kpi-mp-total { order: 1; }
    .page-mypay .kpi-mp-inc   { order: 2; }
    .page-mypay .kpi-mp-cash  { order: 3; }
    .page-mypay .kpi-mp-card  { order: 4; }
    .page-mypay .kpi-mp-debt  { order: 5; }
    .page-mypay .kpi-mp-adv   { order: 6; }
    .page-mypay .kpi-mp-tech  { order: 7; }
    .page-mypay .kpi-mp-pct   { order: 8; }
    .page-mypay .kpi-mp-rest  { order: 9; }
}

/* v1.69 - „Selectează medic" (Încasările mele, doar medic-șef, toate ecranele) */
.mypay-pick { display: inline-flex; white-space: nowrap; flex: 0 0 auto; }
@media (max-width: 900px) {
    /* pe mobil butonul stă pe același rând cu titlul, în dreapta sus */
    .page-mypay .page-head { flex-wrap: nowrap; }
    .page-mypay .page-head > div { min-width: 0; }
}
.mypay-pick-list { display: flex; flex-direction: column; gap: 8px; padding-bottom: 14px; }
.mypay-pick-item { justify-content: flex-start; }
.mypay-pick-item.is-current { border-color: var(--primary); font-weight: 700; }
#dlg-pick-doc { width: min(340px, calc(100vw - 40px)); }
#dlg-pick-doc .dlg-foot { display: none; }

/* v1.69.4 - Raport zilnic pe mobil: Pondere se strânge dinamic, Încasat și
   Procent rămân integral pe o singură linie și tabelul încape în chenar */
@media (max-width: 900px) {
    .rap-docs th:nth-child(2) { width: auto !important; }
    .rap-docs .td-pat { max-width: 34vw; }
    .rap-docs td:nth-child(3), .rap-docs th:nth-child(3),
    .rap-docs td:nth-child(4), .rap-docs th:nth-child(4) { white-space: nowrap; }
    .rap-docs .prog { min-width: 24px; flex: 1 1 auto; }
    .rap-docs .prog-wrap { min-width: 0; }
}

/* v1.70 - legenda statusului dentar: pe hover (desktop) condiția se evidențiază
   pe hartă, iar bulina și textul din legendă se boldează */
@media (hover: hover) and (pointer: fine) {
    .dental-lg[data-cond] { cursor: default; }
    /* „bold" prin text-shadow: aceeași lățime a textului, legenda nu se reașază */
    .dental-lg[data-cond]:hover,
    .dental-lg[data-cond].is-hl { text-shadow: 0.5px 0 0 currentColor; color: var(--ink, #1c2233); }
    .dental-lg[data-cond]:hover .chip-dot,
    .dental-lg[data-cond].is-hl .chip-dot { box-shadow: 0 0 0 2px var(--c, #94a0b8); }
}

/* v1.72 - Planurile de tratament */
.plan-newform, .plan-addrow { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.plan-addrow { margin-top: 6px; }
.plan-inline-form { display: inline-flex; margin: 0; }
.plan-inline-form[hidden] { display: none; } /* CSS-ul de display bate atributul hidden - îl respectăm explicit */
.plan-rename-form { gap: 6px; align-items: center; }
/* v1.89.80 - planurile se deschid/închid DOAR din butonul de editare (fără săgeată) */
.plan-card.is-closed .plan-body { display: none; }
/* v1.90.34 - lista planurilor e tabel (ca la Parodontogramă): planurile expirate stau estompate */
.plan-row-exp td { color: var(--muted); }
.plan-row-exp .chip-dot { opacity: 0.5; }
/* antetul planului deschis există doar pentru PRINT: pe ecran stau câmpurile de editare
   (hidden e bătut de display-ul clasei .sec-head, deci se forțează aici) */
.plan-card .plan-head[hidden] { display: none !important; background: none; }
.plan-card { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; margin-top: 12px; }
.plan-card.plan-expired { opacity: 0.62; }
.plan-head { gap: 8px; flex-wrap: wrap; }
.plan-valid { font-size: 12.5px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.plan-tbl input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--primary); }
.plan-print-valid { display: none; }
@media print {
    body.print-plan .card:not(#plans), body.print-plan .page-head, body.print-plan .flash,
    body.print-plan .rail, body.print-plan .topbar, body.print-plan .pat-tabs,
    body.print-plan #plans > .sec-head, body.print-plan .plan-card:not(.print-target),
    body.print-plan .plan-print, body.print-plan .plan-inline-form,
    body.print-plan .plan-valid,
    /* v1.90.34 - lista planurilor (tabelul), câmpurile de editare și butoanele de jos */
    body.print-plan #plans > .tbl-wrap, body.print-plan .plan-open-head,
    body.print-plan #plans .form-actions,
    body.print-plan .plan-tbl input[type="checkbox"],
    body.print-plan .plan-tbl th:first-child, body.print-plan .plan-tbl td:first-child,
    body.print-plan .plan-addrow, body.print-plan .plan-newform,
    body.print-plan .plan-tbl th:last-child, body.print-plan .plan-tbl td:last-child { display: none !important; }
    body.print-plan #plans { border: none; box-shadow: none; }
    body.print-plan .plan-card.print-target { border: none; padding: 0; margin: 0; opacity: 1; }
    /* v1.89.80 - cu planul deschis titlul e înlocuit de formularul de redenumire;
       la print formularul dispare, deci titlul revine forțat */
    body.print-plan .plan-title-txt[hidden] { display: inline !important; }
    /* v1.90.34 - antetul de plan (titlu + medic) există DOAR pentru print: pe ecran
       planul deschis are câmpurile de editare (ca parodontograma); fără fundalul galben
       de evidențiere (regula veche .plan-card:not(.is-closed)) pe foaia tipărită */
    body.print-plan .plan-card.print-target .plan-head[hidden] {
        display: flex !important; background: none; padding: 0; margin: 0 0 4px;
    }
    body.print-plan .plan-card.print-target .plan-body { display: block !important; }
    /* antetul ca la Parodontogramă, planul sub el, valabilitatea la final */
    body.print-plan .plan-card.print-target .print-head {
        display: flex; align-items: center; gap: 10px;
        border-bottom: 1px solid #d6dae3; padding-bottom: 8px; margin-bottom: 10px;
    }
    body.print-plan .plan-card.print-target .plan-print-valid {
        display: block; margin-top: 14px; padding-top: 8px;
        border-top: 1px solid #d6dae3; font-size: 12.5px;
    }
}

/* v1.72.5 - creionul de editare stă discret înaintea numelui condiției */
.dental-edit-lead { padding: 3px; margin-right: 7px; vertical-align: middle; }
body.print-dental .dental-edit-lead { display: none !important; }

/* v1.72.7 - planuri: butonul de expirare roz + creionul etapei */
.plan-expire-btn { background: #fbdce5; border-color: #eec2cf; color: #7a2740; }
.plan-expire-btn:hover { background: #f6cbd8; border-color: #e5aebf; }
.plan-item-edit { padding: 3px; margin-right: 6px; vertical-align: middle; }
body.print-plan .plan-item-edit { display: none !important; }

/* v1.72.9 - planurile pe mobil: fără print, antet echilibrat pe rânduri */
@media (max-width: 900px) {
    .plan-print { display: none; }
    .plan-head { row-gap: 6px; }
    /* titlul + medicul pe primul rând; valabilitatea pe rând propriu;
       „Marchează expirat" (lat) + coșul, ordonate pe rândul lor, pe toată lățimea */
    .plan-valid { flex-basis: 100%; white-space: normal; }
    .plan-head > .spacer { display: none; }
    .plan-head > .plan-expire-form { flex: 1 1 auto; }
    .plan-head > .plan-expire-form .btn { width: 100%; justify-content: center; }
}

/* v1.73 - ghidul de activare a agendei pe iPhone */
#dlg-ios-contacts { width: min(440px, calc(100vw - 32px)); }
.ios-steps p { margin: 0 0 8px; }
.ios-steps ol { margin: 0 0 12px; padding-left: 22px; }
.ios-steps li { margin: 3px 0; }

/* v1.76.1 - dialogurile cu tabele (Detalii sold, Lucrările acoperite): late pe desktop, fără scroll orizontal */
#dlg-tech-sold, #dlg-pay-works { width: min(1120px, calc(100vw - 32px)); }
.dlg-tbl-wrap { border: none; max-height: 60vh; overflow: auto; }
.dlg-tbl-wrap .tbl { width: 100%; }
.dlg-tbl-wrap .td-time, .dlg-tbl-wrap .td-num { white-space: nowrap; }
@media (min-width: 901px) {
    .dlg-tbl-wrap { overflow-x: hidden; }
    .dlg-tbl-wrap .td-pat { white-space: nowrap; max-width: none; overflow: visible; }
}

/* v1.76.3 - printul soldului rămas (Detalii sold): doar zona de print, fără dialog și restul paginii */
.print-only-area { display: none; }
/* v1.89.26 - aceleași reguli servesc și soldul furnizorului (#supSoldPrintArea), de aceea
   selectorul merge pe clasa .print-only-area, nu pe id-ul zonei de la tehnicieni. */
@media print {
    body.print-techsold > *:not(.print-only-area) { display: none !important; }
    body.print-techsold .print-only-area:not([hidden]) { display: block !important; }
    body.print-techsold .print-only-area .th-sortable::after { content: none; }
}

/* v1.79.1 - mesajele de confirmare pot avea rând gol (\n\n) */
#confirmMsg { white-space: pre-line; }

/* v1.79.4 - Raport zilnic: cardul Costuri tehnicieni ultimul, singur pe rând */
/* v1.88.57 - cardul tehnicienilor nu mai e singur pe rând (grupul roșu are 2 carduri) */

/* v1.79.5 - Programare nouă / Editează programarea pe desktop: 3 coloane, dialog mai lat */
@media (min-width: 901px) {
    #dlg-appt { width: min(760px, calc(100vw - 32px)); }
    #dlg-appt .form-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* v1.79.5 - chip-ul „pacient legat" respectă hidden (bug pre-existent: display bătea atributul) */
.combo-linked[hidden] { display: none; }

/* v1.80 - Financiar: grupul „Alte cheltuieli" (albastrul contractului), un singur rând */
.kpi-group.kpi-group-costs { flex: 1 1 100%; }

/* v1.80.3 - bifa „Salariat": la nivelul selectului de lângă ea (label gol deasupra),
   centrată orizontal în coloana ei, textul cât cel din inputuri/selecte */
.staff-line {
    margin: 0;
    justify-content: center;
    font-size: 14px;
    min-height: 38px; /* înălțimea unui .input (padding 8 + text + borduri) */
}
.field[hidden] { display: none; } /* siguranță: hidden pe .field (display:flex) */

/* v1.81.3 - fișa pacientului pe mobil: Înapoi + Nume + Vizibilitate pe ACELAȘI rând;
   programarea și datoria/avansul imediat sub nume (aliniate cu el). Coloana numelui
   se poate comprima (min-width:0), fontul e ușor redus ca numele obișnuite să încapă
   pe un rând; eticheta de sold sare doar ca unitate întreagă. */
@media (max-width: 900px) {
    /* spacerele au flex:1 și mâncau jumătate din rând -> coloana numelui rămânea ~90px */
    .page-head:has(> .pat-vis) > .spacer { display: none; }
    .page-head:has(> .pat-vis) > div:not(.seg):not(.spacer) { flex: 1 1 0; min-width: 0; }
    .page-head:has(> .pat-vis) h1 { font-size: 18px; line-height: 1.25; }
    .page-head:has(> .pat-vis) > .pat-vis { margin-left: auto; }
    .page-head:has(> .pat-vis) .pat-sub {
        display: inline-flex; flex-wrap: wrap; gap: 2px 8px; align-items: center;
    }
    .page-head:has(> .pat-vis) .pay-tag { white-space: nowrap; } /* pastila nu se frânge intern */
}

/* v1.82 - dialogul Unește pacienți */
#dlg-merge { width: min(560px, calc(100vw - 32px)); }
.merge-list { border: 1px solid var(--line); border-radius: 10px; margin-top: 4px; max-height: 200px; overflow: auto; background: #fff; }
.merge-opt { display: block; width: 100%; text-align: left; padding: 8px 10px; border: none; background: none; cursor: pointer; font: inherit; }
.merge-opt:hover { background: var(--primary-soft); }

/* v1.83 - Alerte: badge roșu cu puls subtil în meniu + pagina de alerte */
.rail-link { position: relative; }
.alert-badge {
    margin-left: auto;
    min-width: 20px; height: 20px; padding: 0 6px;
    border-radius: 999px;
    background: #d43a5a; color: #fff;
    font-size: 11.5px; font-weight: 700; line-height: 20px; text-align: center;
}
/* v1.83.4 - alerte nevăzute: bulina rămâne STATICĂ; clipește un contur roșu în jurul
   întregului buton „Alerte" din meniu, până la prima deschidere a paginii */
.rail-link.alert-ring { animation: alert-ring 1.2s ease-in-out infinite; }
@keyframes alert-ring {
    0%, 100% { box-shadow: inset 0 0 0 2px rgba(212, 58, 90, 0.95); }
    50%      { box-shadow: inset 0 0 0 2px rgba(212, 58, 90, 0.1); }
}
.rail.is-collapsed .alert-badge { position: absolute; top: 4px; right: 4px; margin: 0; }
@media (prefers-reduced-motion: reduce) { .rail-link.alert-ring { animation: none; box-shadow: inset 0 0 0 2px #d43a5a; } }
/* v1.83.7 - rândurile noi ale ciclului: nuanța DESCHISĂ a culorii grupului */
.alert-card.kind-admin_pass       tr.alert-row-new td { background: #fbe4e9; }
.alert-card.kind-cron_dead        tr.alert-row-new td { background: #f3e6fa; }
.alert-card.kind-sms_unconfigured tr.alert-row-new td { background: #f9ecdf; }
.alert-card.kind-sms_stuck        tr.alert-row-new td { background: #f9f1de; }
.alert-card.kind-no_units         tr.alert-row-new td { background: #eaeef4; }
.alert-card.kind-no_doctors      tr.alert-row-new td { background: #e6ebf2; }
.alert-card.kind-appt_forgotten   tr.alert-row-new td { background: #e4eefa; }
.alert-card.kind-done_unpaid      tr.alert-row-new td { background: #e0f2f1; }
.alert-card.kind-old_debt         tr.alert-row-new td { background: #fae7e0; }
.alert-card.kind-tech_old         tr.alert-row-new td { background: #ece7f9; }
.alert-card.kind-sms_failed       tr.alert-row-new td { background: #f9eedd; }
.alert-card.kind-dup_pair         tr.alert-row-new td { background: #e2f3e9; }
/* v1.89.89 - stocurile noi în alerte: galbenul evidențierii de la statusul dentar
   v1.90.15 - facturile de furnizori scadente au același stil ca stocurile */
.alert-card.kind-stock_low        tr.alert-row-new td { background: #fff7d6; }
.alert-card.kind-sup_due          tr.alert-row-new td { background: #fff7d6; }
/* v1.89.89 - pe mobil, celula de butoane devine flex (nu mai e celulă de tabel) și nu se
   mai întinde pe înălțimea rândului: sub butoane rămânea alb când eticheta se înfășura.
   Culoarea stă ACUM și pe rând, deci blocul e plin, la toate tipurile de alerte. */
.alert-card.kind-admin_pass       tr.alert-row-new { background: #fbe4e9; }
.alert-card.kind-cron_dead        tr.alert-row-new { background: #f3e6fa; }
.alert-card.kind-sms_unconfigured tr.alert-row-new { background: #f9ecdf; }
.alert-card.kind-sms_stuck        tr.alert-row-new { background: #f9f1de; }
.alert-card.kind-no_units         tr.alert-row-new { background: #eaeef4; }
.alert-card.kind-no_doctors       tr.alert-row-new { background: #e6ebf2; }
.alert-card.kind-appt_forgotten   tr.alert-row-new { background: #e4eefa; }
.alert-card.kind-done_unpaid      tr.alert-row-new { background: #e0f2f1; }
.alert-card.kind-old_debt         tr.alert-row-new { background: #fae7e0; }
.alert-card.kind-tech_old         tr.alert-row-new { background: #ece7f9; }
.alert-card.kind-sms_failed       tr.alert-row-new { background: #f9eedd; }
.alert-card.kind-dup_pair         tr.alert-row-new { background: #e2f3e9; }
.alert-card.kind-stock_low        tr.alert-row-new { background: #fff7d6; }
.alert-card.kind-sup_due          tr.alert-row-new { background: #fff7d6; }
/* v1.83.5 - dungă fină per GRUP de alertă (nu per severitate) */
.alert-card { border-left: 2px solid var(--line); }
.alert-card.kind-admin_pass       { border-left-color: #d43a5a; }
.alert-card.kind-cron_dead        { border-left-color: #a855d4; }
.alert-card.kind-sms_unconfigured { border-left-color: #d4884a; }
.alert-card.kind-sms_stuck        { border-left-color: #d4a94a; }
.alert-card.kind-no_units         { border-left-color: #7d8aa3; }
.alert-card.kind-no_doctors       { border-left-color: #5d6f8d; }
.alert-card.kind-appt_forgotten   { border-left-color: #4a86d4; }
.alert-card.kind-done_unpaid      { border-left-color: #3aa8a4; }
.alert-card.kind-old_debt         { border-left-color: #d46a4a; }
.alert-card.kind-tech_old         { border-left-color: #8d75d4; }
.alert-card.kind-sms_failed       { border-left-color: #d49a4a; }
.alert-card.kind-dup_pair         { border-left-color: #4aae6c; }
.alert-card.kind-works_nocost     { border-left-color: #a3aab8; }
.alert-sev {
    display: inline-block; margin-left: 8px; padding: 3px 13px;
    border-radius: 7px; font-size: 14px; font-weight: 700; vertical-align: 3px;
    background: #eef1f6; color: #4a5468;
}
.sev-crit .alert-sev { background: #fbdce5; color: #a12744; }
.sev-warn .alert-sev { background: #f7e6a8; color: #7a5d10; }
/* v1.83.8 - pastilele preiau nuanțele grupului (fundal deschis + text din culoarea dungii) */
.kind-admin_pass       .alert-sev, .kind-admin_pass       .alert-count { background: #fbe4e9; color: #a12744; }
.kind-cron_dead        .alert-sev, .kind-cron_dead        .alert-count { background: #f3e6fa; color: #7c3aa3; }
.kind-sms_unconfigured .alert-sev, .kind-sms_unconfigured .alert-count { background: #f9ecdf; color: #a05c22; }
.kind-sms_stuck        .alert-sev, .kind-sms_stuck        .alert-count { background: #f9f1de; color: #93711d; }
.kind-no_units         .alert-sev, .kind-no_units         .alert-count { background: #eaeef4; color: #4c5a70; }
.kind-no_doctors       .alert-sev, .kind-no_doctors       .alert-count { background: #e6ebf2; color: #3f4f68; }
.kind-appt_forgotten   .alert-sev, .kind-appt_forgotten   .alert-count { background: #e4eefa; color: #2f5da0; }
.kind-done_unpaid      .alert-sev, .kind-done_unpaid      .alert-count { background: #e0f2f1; color: #1f6f6c; }
.kind-old_debt         .alert-sev, .kind-old_debt         .alert-count { background: #fae7e0; color: #a0421f; }
.kind-tech_old         .alert-sev, .kind-tech_old         .alert-count { background: #ece7f9; color: #5b3fa8; }
.kind-sms_failed       .alert-sev, .kind-sms_failed       .alert-count { background: #f9eedd; color: #93601d; }
.kind-dup_pair         .alert-sev, .kind-dup_pair         .alert-count { background: #e2f3e9; color: #256d43; }
.kind-works_nocost     .alert-sev, .kind-works_nocost     .alert-count { background: #edeff3; color: #4a5468; }
@media (max-width: 900px) {
    /* v1.89.30 - când butoanele nu mai încap pe un rând, coboară unul sub altul; erau lipite,
       fiindcă celula era un simplu șir de elemente „inline". Acum e flex cu spațiere. */
    .page-alerte .td-actions {
        white-space: normal !important;
        display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; align-items: center;
    }
    .page-alerte .td-actions form { display: inline-flex; margin: 0; }
    /* v1.89.30 - „Importă" stă la capătul din dreapta al rândului de paginație de la Tehnicieni */
    /* `order: 2` bate regula generală care trimite butoanele la începutul rândului (order: -1) */
    .page-tehnicieni .fz-perpage #btnImpTechContacts { order: 2; margin-left: auto; flex: 0 0 auto; }
}

/* v1.83.6 - numărul de alerte al grupului: pastilă aliniată cu cea de severitate */
.alert-count {
    display: inline-block; margin-left: 6px; padding: 3px 13px;
    border-radius: 7px; font-size: 14px; font-weight: 700; vertical-align: 3px;
    background: #e7ebf2; color: #3f4a5f;
}

/* v1.84.2 - plierea grupurilor de alerte */
.alert-toggle .ic { transition: transform 0.18s ease; }
.alert-toggle.is-collapsed .ic { transform: rotate(-90deg); }

/* v1.85 - excepțiile de plată */
.exc-tools { display: flex; align-items: center; gap: 10px; margin: 0 0 10px; flex-wrap: wrap; }
.exc-bar { display: flex; align-items: center; gap: 10px; padding: 6px 12px; border-radius: 10px;
           background: var(--accent-soft, #eef3fb); font-weight: 600; flex-wrap: wrap; }
.exc-bar[hidden] { display: none; } /* v1.85.1 - display:flex bătea atributul hidden */
.exc-pick { margin-right: 7px; }
.exc-pick input { width: 16px; height: 16px; vertical-align: -2px; }
tr[data-appt].exc-on { cursor: pointer; }
.badge-exc { display: inline-block; margin-left: 6px; padding: 2px 10px; border: none; border-radius: 7px;
             background: #fdeeda; color: #8a5a13; font-size: 12.5px; font-weight: 700; cursor: default; }
button.badge-exc { cursor: pointer; }
button.badge-exc:hover { background: #fbe3c2; }
.exc-split { line-height: 1.55; }

/* v1.85.5 - Utilizatori: numele pe un singur rând, coloana cât cel mai lung nume */
.u-nowrap { white-space: nowrap; }

/* v1.86 - Furnizori */
.badge-rec  { background: #e8eef9; color: #33549c; }
.badge-on   { background: #dff1e4; color: #256d43; }
.badge-off  { background: #eef1f6; color: #6b7488; }
.st-ok   { background: #dff1e4; color: #256d43; }
.st-part { background: #fdf3d7; color: #8a6d1a; }
.st-open { background: #eef1f6; color: #4a5468; }
.st-late { background: #fbdce5; color: #a12744; }
.st-fill { background: #fdeeda; color: #8a5a13; }
.page-furnizori tr.is-off td { opacity: 0.55; }
.cat-row { display: inline-flex; gap: 8px; margin: 0 6px 8px 0; align-items: center; }
.cat-row .input { width: 220px; }
.cat-row-toggle { display: inline-flex; margin: 0 14px 8px 0; }

/* v1.86.1 - grupul Sistem din meniu */
.rail-group-toggle { width: 100%; background: none; border: none; cursor: pointer; text-align: left; font-family: inherit; }
/* v1.86.5 - shorthand-ul font:inherit reseta mărimea din .rail-link (13.5px) la cea a părintelui */
.rail-group-chev { margin-left: auto; display: inline-flex; }
/* v1.87.5 - tranziția săgeții doar DUPĂ prima cadră: starea inițială se desenează direct */
html.sp-anim .rail-group-chev { transition: transform 0.18s ease; }
.rail-group.is-open .rail-group-chev { transform: rotate(180deg); }
.rail-sub { display: flex; flex-direction: column; }
.rail-sub[hidden] { display: none; } /* v1.86.2 - a TREIA oară aceeași capcană: display bate hidden */
.rail-sub-link { padding-left: 34px; }
.rail.is-collapsed .rail-sub-link { padding-left: 0; }

/* v1.86.2 - meniul derulează intern doar când depășește înălțimea ecranului */
.rail { display: flex; flex-direction: column; }
.rail-nav { overflow-y: auto; overscroll-behavior: contain; min-height: 0; flex: 1 1 auto; scrollbar-width: thin; }

/* v1.86.5 - scrollbar cu adevărat fin pe meniu (3px, discret) */
.rail-nav { scrollbar-color: rgba(255, 255, 255, 0.22) transparent; }
.rail-nav::-webkit-scrollbar { width: 3px; }
.rail-nav::-webkit-scrollbar-track { background: transparent; }
.rail-nav::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.18); border-radius: 3px; }
.rail-nav::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.32); }

/* v1.86.7 - Raport zilnic pe desktop: cardurile la înălțimea conținutului, valori pe un rând */
@media (min-width: 901px) {
    .page-raport .kpis-grouped { align-items: stretch; }
    .page-raport .kpi-group { flex-wrap: wrap; align-content: stretch; }
    .page-raport .kpi-group .kpi { flex: 1 1 190px; min-width: 190px; }
    .page-raport .kpi-value { white-space: nowrap; }
}

/* v1.86.8 - bannerul de impersonare (demo) */
.imp-banner { display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
              margin: 0 0 14px; padding: 9px 14px; border-radius: 10px;
              background: #fdf3d7; border: 1px solid #ecd489; color: #6d5410; font-size: 13.5px; }
/* v1.89.34 - impersonare fără drept de scriere: bannerul e chihlimbar, nu neutru */
.imp-banner.is-ro { background: #fff4e0; border-color: #f0c67a; color: #7a4d06; }
.imp-banner-btn { background: #8a6d1a; color: #fff; border: none; }
.imp-banner-btn:hover { background: #6d5410; color: #fff; }

/* v1.87.0 - Furnizori: bara de segmente cu Categorii pe același rând */
.fz-segbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.fz-segbar .seg { flex: 0 0 auto; }
.fz-segbar > .btn { margin-left: auto; }
/* perioada: granularitate + navigator, fără spargeri urâte */
.fz-period .fz-period-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.fz-period-nav { display: flex; align-items: center; gap: 8px; }
.fz-period-row .fz-perpage { margin-left: auto; }
.fz-period-nav .fz-period-label { white-space: nowrap; min-width: 120px; text-align: center; }
/* acțiunile din tabele pe un singur rând, aliniate la dreapta */
.page-furnizori .td-actions { white-space: nowrap; }
.page-furnizori .td-actions > * { vertical-align: middle; }
@media (max-width: 900px) {
    /* segmentul de perioadă nu se sparge pe 2 rânduri când e „Pe lună" selectat */
    .fz-period .seg-sm { flex: 0 0 auto; }
    .fz-period-nav { margin-left: 0; width: 100%; justify-content: space-between; }
    .fz-period-nav .fz-period-label { min-width: 0; flex: 1 1 auto; }
    /* cele două butoane din ultima coloană rămân pe un rând */
    .page-furnizori .td-actions { display: flex; gap: 6px; justify-content: flex-end; align-items: center; }
    .page-furnizori .td-actions form { display: inline-flex; margin: 0; }
}

/* v1.87.2 - spinnerul butoanelor la salvare */
@keyframes sp-rot { to { transform: rotate(360deg); } }
.btn.is-busy { position: relative; pointer-events: none; opacity: 0.75; }
.btn.is-busy > * { visibility: hidden; }
.btn.is-busy::after { content: ""; position: absolute; inset: 0; margin: auto;
    width: 14px; height: 14px; border-radius: 50%;
    border: 2px solid currentColor; border-top-color: transparent;
    animation: sp-rot 0.6s linear infinite; }

/* v1.87.4 - Furnizori: bara pager cu selectorul de rânduri pe pagină */
.fz-perpage { display: flex; align-items: center; gap: 8px; }
.page-furnizori .pager { margin-top: 14px; }

/* v1.88.3 - Raport zilnic: titlul doar pe desktop; pe mobil rămâne cum era */
.rap-desk-title { margin-bottom: 4px; }
@media (max-width: 900px) { .rap-desk-title { display: none; } }

/* rândurile: verdele (4 carduri) + galbenul (2 carduri) stau pe ACELAȘI rând,
   albastrul (6 carduri) ia rândul doi întreg */
.page-finance .kpi-group:first-child { flex: 0 0 calc((100% - 50px) / 6 * 4 + 30px); min-width: 0; }
.page-finance .kpi-group.kpi-group-costs { flex: 0 0 calc((100% - 50px) / 6 * 2 + 10px); min-width: 0; }
.page-finance .kpi-group.kpi-group-blue { flex: 1 1 100%; }
@media (max-width: 900px) {
    .page-finance .kpi-group:first-child,
    .page-finance .kpi-group.kpi-group-costs { flex: 1 1 100%; }
}
/* spațiere uniformă: distanța dintre grupuri = distanța dintre carduri (10px) */
.page-finance .kpis-grouped { gap: 10px; }

/* v1.88.19 - Statistici > Tehnicieni: cele 3 grupuri (2+1+3 carduri) pe UN rând, coloane egale */
.kpis-tech .kpi-group:nth-child(1) { flex: 0 0 calc((100% - 50px) / 6 * 2 + 10px); min-width: 0; }
.kpis-tech .kpi-group:nth-child(2) { flex: 0 0 calc((100% - 50px) / 6); min-width: 0; }
.kpis-tech .kpi-group:nth-child(3) { flex: 0 0 calc((100% - 50px) / 6 * 3 + 20px); min-width: 0; }
@media (max-width: 1100px) {
    .kpis-tech .kpi-group:nth-child(1),
    .kpis-tech .kpi-group:nth-child(2),
    .kpis-tech .kpi-group:nth-child(3) { flex: 1 1 100%; }
}

/* v1.88.22 - Statistici: graficele de bare mai înalte (+30%) */
.page-stats .bars { height: 234px; }
/* Medici: 1 + 3 carduri pe 4 coloane egale (titlurile nu se mai sparg) */
.kpis-med .kpi-group:nth-child(1) { flex: 0 0 calc((100% - 30px) / 4); min-width: 0; }
.kpis-med .kpi-group:nth-child(2) { flex: 0 0 calc((100% - 30px) / 4 * 3 + 20px); min-width: 0; }
@media (max-width: 1100px) {
    .kpis-med .kpi-group:nth-child(1),
    .kpis-med .kpi-group:nth-child(2) { flex: 1 1 100%; }
}

/* ===== v1.88.26 - Situație financiară: modul Compact (linie + profit/pie) ===== */
.fin-compact { display: flex; gap: 10px; align-items: stretch; height: var(--fin-h, 420px); }
/* v1.88.33 - aliniate cu grila cardurilor de sus (6 coloane): graficul se închide
   la marginea dreaptă a cardului 4, pie-ul începe la marginea stângă a cardului 5 */
.fin-chart-card { flex: 0 0 calc((100% - 50px) / 6 * 4 + 30px); min-width: 0; display: flex; flex-direction: column; }
.fin-pie-card { flex: 0 0 calc((100% - 50px) / 6 * 2 + 10px); min-width: 0; display: flex; flex-direction: column; align-items: center; overflow: hidden; }
.fin-chart-wrap { flex: 1 1 auto; min-height: 0; }
.fin-chart-wrap svg { display: block; width: 100%; height: 100%; }
.fchips { display: flex; flex-wrap: wrap; gap: 6px; }
.fchip { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); background: #fff;
         border-radius: 7px; padding: 4px 10px; font-size: 12.5px; font-weight: 600; color: var(--muted); cursor: pointer; }
.fchip i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; opacity: 0.35; }
.fchip.is-on { color: var(--ink); border-color: #b9c0cf; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); }
.fchip.is-on i { opacity: 1; }
.fin-profit { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 6px 0 12px; text-align: center; }
.fin-profit-label { font-size: 12px; font-weight: 700; letter-spacing: 0.4px; text-transform: uppercase; }
.fin-profit.is-pos-p .fin-profit-label, .fin-profit.is-pos-p .fin-profit-val { color: #2f9e63; }
.fin-profit.is-neg-p .fin-profit-label, .fin-profit.is-neg-p .fin-profit-val { color: #e74a3b; }
/* v1.90.1 - suma profitului SCALEAZĂ cu înălțimea ferestrei: pe laptopuri scunde textul
   uriaș sufoca plăcinta (JS-ul o micșora până devenea ilizibilă) */
.fin-profit-val { font-size: clamp(16px, 1.6vh + 8px, 26px); font-weight: 800; line-height: 1.15; }
/* v1.90.4 - rândul Decont CAS din legendă arată ca celelalte (doar bulina îi poartă culoarea) */
@media (max-height: 840px) {
    /* ecran scund: legenda (acum cu până la 10 rânduri) și profitul cedează primele,
       ca plăcinta să rămână lizibilă */
    .fin-pie-legend { font-size: 11.5px; row-gap: 3px; }
    .fin-profit { padding: 2px 0 8px; }
    /* și cardurile KPI din Situație cedează înălțime: regiunea grafic+plăcintă are un
       minim de 340px, iar pe laptopuri scunde fiecare pixel de deasupra conta */
    #finKpis { gap: 8px; margin-bottom: 12px; }
    #finKpis .kpi-group { gap: 8px; }
    #finKpis .kpi { padding: 8px 11px; }
    #finKpis .kpi-value { font-size: 17px; }
    #finKpis .kpi-sub { font-size: 11px; }
}
/* v1.88.83 - plăcinta umple spațiul dintre profit și legendă și scalează cu fereastra */
/* v1.88.88 - profitul + plăcinta + legenda stau ca bloc compact, centrat pe verticală;
   plăcinta primește din JS exact spațiul rămas (plafonat), nu se mai umflă pe ecrane înalte */
.fin-pie-card { justify-content: center; }
.fin-pie-wrap { flex: 0 0 auto; width: 100%; display: flex; align-items: center; justify-content: center; padding: 8px 0; }
.fin-pie { width: 240px; height: 240px; max-width: 82%; } /* JS-ul îi dă px din spațiul real */
.fin-pie-legend { display: grid; grid-template-columns: auto auto auto auto; column-gap: 9px; row-gap: 5px;
                  margin-top: 12px; font-size: 12.5px; justify-content: start; align-items: center; }
.fpl { display: contents; }
.fpl i { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }
.fpl .fpl-n, .fpl .fpl-p { text-align: left; }
.fpl .fpl-v { font-weight: 600; text-align: right; justify-self: end; font-variant-numeric: tabular-nums; }
.fpl .fpl-p { color: var(--muted); }
.fpl-info .fpl-n, .fpl-info .fpl-v { color: var(--muted); font-weight: 400; }
@media (max-width: 1000px) {
    .fin-compact { flex-direction: column; height: auto; }
    .fin-chart-card { min-height: 360px; }
    .fin-pie-wrap { flex: 0 0 auto; }
    .fin-pie { height: auto; width: min(240px, 70%); max-width: none; }
}

/* v1.88.30 - modul Structură: legendă simplă (nu arată a buton) */
.fleg-item { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600;
             color: var(--muted); padding: 4px 2px; }
.fleg-item i { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }

/* ===== v1.88.44 - butonul „i" de pe carduri: subtextul apare doar la cerere ===== */
.kpis .kpi { position: relative; }
.kpis .kpi .kpi-label { padding-right: 22px; }
.kpis .kpi .kpi-sub { display: none; }
.kpis .kpi.is-info .kpi-sub { display: block; }
.kpi-info-btn { position: absolute; top: 8px; right: 8px; width: 17px; height: 17px; border-radius: 50%;
                border: 1.5px solid #9aa3b5; background: transparent; color: #9aa3b5;
                font: 700 10.5px/1 Georgia, serif; font-style: italic; cursor: pointer; padding: 0;
                display: inline-flex; align-items: center; justify-content: center; opacity: 0.38;
                -webkit-tap-highlight-color: transparent; }
.kpi-info-btn:hover { opacity: 0.75; }
.kpi.is-info .kpi-info-btn { opacity: 1; border-color: var(--kpi-accent, #4e73df); color: var(--kpi-accent, #4e73df); }

/* v1.88.45 - pie: felia de sub mouse se mărește ușor
   v1.90.10 - NU și inelul Decont CAS: fiind subțire, mărirea îl scotea de sub cursor
   și hover-ul intra într-o buclă de licărire
   v1.90.11 - inelul are efectul lui: se ÎNGROAȘĂ simetric (rămâne sub cursor) */
.fin-pie path { transform-origin: 100px 100px; transition: transform 0.16s ease; }
.fin-pie path:not(.fin-pie-casarc):hover { transform: scale(1.05); }
.fin-pie .fin-pie-casarc { transition: stroke-width 0.16s ease; }
.fin-pie .fin-pie-casarc:hover { stroke-width: 10; }

/* v1.88.49 - pe mobil, lista de pacienți nu mai repetă titlul (rămâne doar lângă burger) */
@media (max-width: 900px) {
    .page-patients .pat-list-h1 { display: none; }
}

/* v1.88.50 - lista de pacienți pe mobil: numele pe UN rând (coloana se lățește
   după cel mai lung nume din pagina curentă; tabelul derulează orizontal) */
@media (max-width: 900px) {
    .page-patients .tbl .td-pat,
    .page-patients .tbl .td-pat a { white-space: nowrap; }
    .page-patients .tbl-compact .td-pat { max-width: none; } /* fără trunchiere cu … */
}

/* v1.88.52 - pe mobil, titlul paginii rămâne doar lângă burger (ca la Pacienți) */
@media (max-width: 900px) {
    .h1-mob-hide { display: none; }
}

/* v1.88.54 - interstițialul „modul TVA activ" (Tehnicieni/Furnizori, blocant, 7s) */
.vat-gate { position: fixed; inset: 0; z-index: 2600; background: rgba(20, 24, 35, 0.55);
            display: flex; align-items: center; justify-content: center; padding: 20px; }
.vat-gate-card { background: #fff; border-radius: 14px; max-width: 540px; width: 100%;
                 height: fit-content; padding: 22px 24px; line-height: 1.55;
                 box-shadow: 0 18px 50px rgba(15, 20, 34, 0.35); }

/* v1.88.54 - rândurile fiscale din Setări pe aceeași grilă: coloanele cotelor se aliniază */
.frow-fiscal { grid-template-columns: 240px 170px 170px; align-items: end; }
@media (max-width: 720px) { .frow-fiscal { grid-template-columns: 1fr 1fr; } }

/* v1.88.55 - pe mobil, textele descriptive de sub titluri dispar (Furnizori/Alerte/Condiții/Tratamente/Unit-uri) */
@media (max-width: 900px) {
    .hint-mob-hide { display: none; }
}

/* v1.88.55 - alerta „Modul TVA activ": totul roșu, borderul licăre permanent */
@keyframes vatAckPulse {
    0%, 100% { border-color: var(--danger); }
    50%      { border-color: rgba(217, 64, 64, 0.25); }
}
.alert-card.kind-vat_ack {
    border: 1.5px solid var(--danger);
    border-left: 5px solid var(--danger);
    animation: vatAckPulse 1.1s ease-in-out infinite;
}
.alert-card.kind-vat_ack .sec-head h2 { color: var(--danger-deep, #b42318); }
.alert-card.kind-vat_ack .tbl td { color: var(--danger-deep, #b42318); }
/* v1.89.84 - grupul „Stocuri sub prag" licăre la fel ca alerta de TVA (doar chenarul;
   conținutul rămâne cu culorile lui)
   v1.90.15 - la fel și „Facturi de furnizori cu scadența depășită" */
.alert-card.kind-stock_low,
.alert-card.kind-sup_due {
    border: 1.5px solid var(--danger);
    border-left: 5px solid var(--danger);
    animation: vatAckPulse 1.1s ease-in-out infinite;
}

/* v1.88.56 - lista de programări: la sortare pe coloane, subtitlurile de dată se ascund */
.list-tbl tbody.sort-active .list-sub { display: none; }

/* v1.88.56 - Raport zilnic, Medicii zilei: numele medicului pe un singur rând */
.rap-docs2 .td-pat .doc { white-space: nowrap; }

/* v1.88.56 - reordonare prin tragere pe mobil (Condiții dentare / Tratamente / Unit-uri) */
.drag-h { display: none; }
@media (max-width: 900px) {
    tbody[data-reorder] .row-actions form.rord-form { display: none; } /* DOAR săgețile dispar pe mobil (toggle/ștergere rămân) */
    tbody[data-reorder] .drag-h { display: inline-flex; align-items: center; justify-content: center;
        width: 34px; height: 34px; border-radius: 8px; border: 1px solid var(--line);
        color: #6a7386; font-size: 17px; touch-action: none; user-select: none; -webkit-user-select: none; }
}
tbody[data-reorder] tr.drag-live { opacity: 0.45; background: #eef2fb; }

/* v1.88.58 - borduri mai vizibile pe butoanele cu fundal transparent/alb și pe filtrele din bare */
:root { --line-strong: #bcbcbc; } /* v1.88.89 - gri NEUTRU (aceeași apăsare, fără tenta albastră) */
.chip,
.btn-ghost,
.mselect-btn { border-color: var(--line-strong); }
/* căutarea din pagina de pacienți */
.page-patients #patLiveQ { border-color: var(--line-strong); }

/* v1.88.60 - toate input box-urile cu chenarul segmentelor */
.input { border-color: var(--line-strong); }

/* v1.88.63 - Raport zilnic: badge-urile Cost/Plată + cardul de totaluri */
.badge.rap-cost { background: #fbeeec; color: #b3362a; border: 1px solid #ecc9c4; }
.badge.rap-pay  { background: #e7f4ec; color: #1d7a4b; border: 1px solid #bfe0cc; }

/* v1.88.64 - Raport zilnic, desktop: verzile ocupă primul rând (4 pe rând),
   Datorii · Avansuri · Tehnicieni · Furnizori împreună pe al doilea */
@media (min-width: 901px) {
    /* v1.88.69 - geometrie exactă: grupurile devin transparente, toate cardurile împart
       același gap; rândul 1 = 6 carduri identice, rândul 2 = 4 identice (aliniere la pixel) */
    .page-raport .kpis-grouped { flex-wrap: wrap; }
    .page-raport .kpis-grouped .kpi-group { display: contents; }
    .page-raport .kpis-grouped .kpi { min-width: 0; flex: 0 0 calc((100% - 50px) / 6); }
    .page-raport .kpi-group[aria-label="Cheltuielile zilei"] .kpi { flex: 0 0 calc((100% - 30px) / 4); }
    /* grupul roșu începe MEREU pe rândul 2, chiar și fără Datorii/Avansuri */
    .page-raport .kpi-group[aria-label="Cheltuielile zilei"]::before {
        content: ""; flex-basis: 100%; height: 0; margin-top: -10px;
    }
}

/* v1.89.4 - MOBIL: tabelele pe TOATĂ lățimea ecranului, ORIUNDE ar fi în pagină
   (în card, direct în pagină, în calendar); dialogurile sunt excluse.
   Gaura din 1.89.2: regulile erau legate de .card, deci tabelele din afara
   cardurilor rămâneau strivite (fără scroll), iar la cele din card „chenarul"
   vizibil era al CARDULUI, nu al wrapperului, și marginea -18px ieșea doar până
   la buza cardului, nu a ecranului. Acum:
   1) wrapperul iese până în buzele ECRANULUI la orice adâncime de imbricare
      (margini calc(50% - 50vw) - nu depind de containere);
   2) wrapperul e flex cu două „tampoane" ::before/::after de 18px care FAC PARTE
      din zona de scroll (modelul carusel - fiabil, spre deosebire de bordurile
      transparente pe tabel, care se bat cap în cap cu border-collapse):
      tabelele care încap stau încadrate cu 18px pe ambele părți; cele late
      pornesc cu margine în stânga și ating buza dreaptă, iar trase cu degetul,
      marginea stângă se consumă și la capăt rămâne cea dreaptă;
   3) cardurile care conțin tabele își pierd „cutia" (chenar/fundal/umbră),
      ca la pacienți - altfel tabelul ar tăia chenarul cardului. */
@media (max-width: 900px) {
    body { overflow-x: clip; } /* plasa de siguranță: pagina însăși nu capătă scroll orizontal */
    .tbl-wrap:not(.dlg-tbl-wrap) {
        display: flex;
        border: none !important; border-radius: 0; padding: 0 !important; box-shadow: none !important;
        margin-left: calc(50% - 50vw) !important;
        margin-right: calc(50% - 50vw) !important;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }
    .tbl-wrap:not(.dlg-tbl-wrap)::before,
    .tbl-wrap:not(.dlg-tbl-wrap)::after { content: ""; flex: 0 0 18px; }
    .tbl-wrap:not(.dlg-tbl-wrap) > .tbl {
        flex: 0 0 auto;
        width: max-content; min-width: calc(100% - 36px); margin: 0;
    }
    .tbl-wrap:not(.dlg-tbl-wrap) .tbl td { max-width: 70vw; } /* o celulă lungă nu împinge tabelul la infinit */
    /* orice tabel rămas într-un dialog fără clasa dedicată stă pe loc */
    dialog .tbl-wrap:not(.dlg-tbl-wrap) { display: block; margin-left: 0 !important; margin-right: 0 !important; }
    dialog .tbl-wrap:not(.dlg-tbl-wrap) > .tbl { min-width: 100%; }
    /* cardurile cu tabele nu mai sunt „cutii" pe mobil (ca la pacienți);
       v1.89.8 - padding lateral 4px: cu paddingul paginii de 14px, titlurile
       ajung la 18px de buza ecranului = exact unde începe conținutul capului
       gri de tabel (tamponul de 18px al zonei de scroll) */
    .card:has(.tbl-wrap:not(.dlg-tbl-wrap)),
    .plan-card:has(.tbl-wrap) {
        border: none; background: transparent; box-shadow: none; border-radius: 0;
        padding-left: 4px; padding-right: 4px;
    }
    /* excepție: alertele TVA, Stocuri și Facturi scadente își păstrează chenarul roșu pulsatoriu */
    .alert-card.kind-vat_ack:has(.tbl-wrap),
    .alert-card.kind-stock_low:has(.tbl-wrap),
    .alert-card.kind-sup_due:has(.tbl-wrap) { border: 1.5px solid var(--danger); border-left: 5px solid var(--danger); }
    /* v1.89.5 - restrângerea grupurilor de alerte: display:flex de mai sus bătea
       atributul hidden (aceeași capcană ca la .exc-bar în v1.85.1) */
    .tbl-wrap[hidden] { display: none !important; }
    /* v1.89.5 - tabelele din alerte sunt liste etichetă+butoane: eticheta se
       înfășoară ca să NU iasă nimic din ecran (pe lat depășeau buza dreaptă) */
    .tbl-wrap.alert-body > .tbl { flex: 1 1 auto; width: auto; min-width: 0; }
    /* v1.89.5 - Încasări pe mobil: excepția la dreapta; v1.89.6 - capsulele
       Încasări/Plăți pe rândul cu numele medicului (mutate de scriptul paginii) */
    #excStart { margin-left: auto; }
    .page-head #mpTabSeg { margin-left: auto; }
    [data-fit] thead, .tbl-scroll8 thead { box-shadow: none; }
    /* v1.89.1 - Tehnicieni: numărul din antet dispare
       v1.89.30 - „Importă" nu mai stă în antet: scriptul paginii îl mută la capătul din
       dreapta al rândului de paginație, așa că regula veche de ordonare a fost scoasă. */
    .page-tehnicieni .page-head > div > .muted { display: none; }
    /* v1.89.7 - „Categorii" nu mai stă în antetul paginii pe mobil: scriptul îl
       mută pe rândul cu „Lista furnizorilor", aliniat la dreapta prin spacer */
}

/* v1.88.74 - cardurile de pe același rând au MEREU înălțimea celui mai înalt (mobil + desktop) */
.kpis, .kpis-grouped, .kpi-group { align-items: stretch; }
.kpis .kpi, .kpis-grouped .kpi { height: auto; }

/* v1.88.75 - Vizibilitatea în bara de sus pe mobil (fișa pacientului) */
.topbar .vis-top { margin-left: auto; order: 99; position: relative; }
.topbar .vis-top summary { padding: 6px 11px; font-size: 13px; background: #fff; }
.topbar .vis-top .vis-list { right: 0; left: auto; z-index: 60; }

/* v1.88.80 - butoanele de acțiune unitare pe rândurile listelor (doar icon):
   galben = editare, roșu deschis (ban) = dezactivare, verde (check) = activare, roșu = ștergere.
   Ordinea în markup e mereu editare -> dezactivare -> ștergere. */
.btn-act {
    display: inline-flex; align-items: center; justify-content: center;
    width: 30px; height: 30px; padding: 0; flex: 0 0 auto;
    border: none; border-radius: 8px; color: #fff; cursor: pointer;
    transition: filter .12s ease;
}
.btn-act:hover { filter: brightness(0.92); }
.btn-act-del:hover { background: #9c2c21; filter: none; }
.btn-act .ic { display: block; }
.btn-act-edit { background: #f59e0b; } /* v1.88.92 - chihlimbar saturat */
.cas-recv-btn { background: #2f9e63; } /* v1.90.0 - „Marchează încasat" la deconturile CAS */
/* v1.90.2 - Statistici › CAS: bare stivuite pe luna vizată
   (albastru = decontat de CAS, gri = nedecontat până la solicitat)
   v1.90.7 - segmentul maro al bonusurilor a dispărut: bonusurile s-au decuplat de CAS */
.cas-bars { display: flex; align-items: flex-end; gap: 5px; height: 210px; padding: 8px 2px 0; }
.cas-bar { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end;
           gap: 4px; min-width: 0; height: 100%; }
.cas-v { font-size: 10.5px; font-weight: 700; color: #4a5262; white-space: nowrap; }
.cas-col { width: 100%; max-width: 46px; display: flex; flex-direction: column; justify-content: flex-end; flex: 1; min-height: 0; }
.cas-col i { display: block; width: 100%; }
.cas-col .sg-dif { background: #c2c8d4; }
.cas-col .sg-net { background: #2b5fc7; background: color-mix(in oklab, #2b5fc7 82%, white); }
.cas-col i:first-child { border-radius: 5px 5px 0 0; }
.cas-col i:last-child { border-radius: 0 0 2px 2px; }
.cas-col i:only-child { border-radius: 5px 5px 2px 2px; }
.cas-bar.is-zero .cas-col::after { content: ''; display: block; height: 2px; background: var(--line); border-radius: 2px; }
.cas-bar b { font-size: 10.5px; font-weight: 600; color: var(--muted); white-space: nowrap; overflow: hidden; max-width: 100%; }
.cas-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 12px; font-size: 12px; color: var(--muted); }
.cas-legend span { display: inline-flex; align-items: center; gap: 6px; }
.cas-legend i { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }
.btn-act-off  { background: #f0685a; } /* roșu mai deschis decât ștergerea, nu roz */
.btn-act-on   { background: #47935c; } /* v1.89.0 - verde sobru, în ton cu chihlimbarul */
/* v1.89.34 - „intră în cont" (impersonare): același verde ca activarea, dar acțiune distinctă */
.btn-act-imp  { background: #47935c; }
.btn-act-del  { background: var(--danger); } /* v1.89.0 - același roșu ca btn-danger-solid */
/* placeholder invizibil: ține coloana butonului lipsă, ca edit/ban/trash să cadă
   mereu pe aceeași verticală pe toate rândurile */
.btn-act-ph { display: inline-block; width: 30px; height: 30px; flex: 0 0 auto; }

/* v1.88.82 - tooltip propriu, global: înlocuiește title-ul nativ (care apărea sub cursor).
   Stă DEASUPRA elementului, centrat, nu iese din fereastră și e peste orice (z-index maxim). */
.sp-tip {
    position: fixed; z-index: 4000; pointer-events: none;
    background: #1f2937; color: #fff;
    font-size: 12.5px; line-height: 1.35; font-weight: 500;
    padding: 6px 10px; border-radius: 7px; max-width: 280px;
    box-shadow: 0 4px 14px rgba(15, 23, 42, 0.22);
}

/* v1.88.86 - butonul de acces la fișa pacientului: pătrat (ca butoanele de acțiune),
   iconul în culoarea butoanelor din setările de culori (--primary / ui_accent) */
.pat-open { background: #fff; border: 1px solid var(--line-strong); color: var(--primary, #2b5fc7); }
.pat-open:hover { filter: none; background: var(--primary-soft, #eef3fb); }
/* v1.88.86 - Furnizori: acțiunile aliniate la dreapta și pe desktop - rândurile fără
   „Plătește" își țin trio-ul pe aceleași coloane cu celelalte */
.page-furnizori .td-actions { display: flex; gap: 6px; justify-content: flex-end; align-items: center; }
.page-furnizori .td-actions form { display: inline-flex; margin: 0; }
/* v1.89.27 - rândurile de la Tehnicieni erau cu 11px mai înalte decât cele de la Furnizori:
   acolo celula de acțiuni e flex centrat, aici butoanele stăteau pe linia de bază a textului
   și trăgeau după ele spațiul de sub ea. Aceeași aliniere → aceeași înălțime de rând. */
.page-tehnicieni .td-act { display: flex; gap: 6px; justify-content: flex-end; align-items: center; }
.page-tehnicieni .td-act form { display: inline-flex; margin: 0; }
/* v1.89.27 - bifele din tabelul de alocare sunt doar indicatoare (se aprind singure), deci nu
   arată „stinse" ca un câmp dezactivat obișnuit și nu prind cursorul de interzis.
   v1.89.33 - browserul desenează în gri orice bifă dezactivată, indiferent de accent-color, așa
   că le desenăm noi: bifate = albastru plin cu bifa albă, nebifate = chenar gol. */
#techPayTbl input[type="checkbox"],
#supPayTbl input[type="checkbox"] {
    appearance: none; -webkit-appearance: none;
    width: 16px; height: 16px; margin: 0; flex: 0 0 auto;
    border: 1.5px solid var(--line-strong); border-radius: 4px;
    background: #fff; opacity: 1; cursor: default; position: relative; vertical-align: middle;
}
#techPayTbl input[type="checkbox"]:checked,
#supPayTbl input[type="checkbox"]:checked { background: var(--primary); border-color: var(--primary); }
#techPayTbl input[type="checkbox"]:checked::after,
#supPayTbl input[type="checkbox"]:checked::after {
    content: ""; position: absolute; left: 4.5px; top: 1px;
    width: 4px; height: 9px; border: solid #fff; border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}

/* v1.88.95 - capetele rămân vizibile la scrollul intern al tabelelor "fit" */
/* v1.88.99 - în containerele cu scroll intern, THEADUL ÎNTREG e lipicios (capul +
   rândul de căutare se mișcă împreună, deci nu se mai comprimă/suprapune nimic);
   sticky-ul individual pe celule se stinge acolo ca să nu se bată cap în cap. */
[data-fit] thead, .tbl-scroll8 thead, .dlg-tbl-wrap thead {
    position: sticky; top: 0; z-index: 5;
    background: var(--surface2);
    box-shadow: 0 1px 0 var(--line);
}
[data-fit] .tbl th, .tbl-scroll8 thead th, .dlg-tbl-wrap .tbl th,
[data-fit] .tbl thead tr.tbl-filters td, .tbl-scroll8 .tbl-filters td { position: static; }
/* v1.89.14 - scrollul intern al tabelelor „fit" e DOAR pe rânduri: capul + rândul
   de căutare stau într-un tabel propriu deasupra zonei de scroll (app.js le mută) */
[data-fit].is-fit-split { overflow: visible; } /* meniurile filtrelor ies liber; scrollul e pe .fit-scroll */
/* v1.89.15 - fâșia de deasupra scrollbarului (capul e mai îngust cu lățimea lui)
   se colorează în griul capului de tabel; zona rândurilor rămâne albă, iar linia
   de sub cap traversează TOATĂ lățimea (inclusiv fâșia) */
[data-fit].is-fit-split { background: var(--surface2); }
[data-fit].is-fit-split thead { box-shadow: none; }
[data-fit] .fit-scroll { overflow-y: auto; overflow-x: hidden; background: #fff; border-top: 1px solid var(--line); border-radius: 0 0 11px 11px; }
/* v1.89.28 - colțul din STÂNGA SUS al capului de tabel: containerul are raza lui de 12px, dar
   `is-fit-split` îi scoate `overflow:hidden` (ca să iasă meniurile filtrelor), așa că prima
   celulă a capului își desena colțul drept peste el. În dreapta nu se vedea, fiindcă acolo
   capul e mai îngust cu lățimea scrollbarului și rămâne la vedere fundalul rotunjit al
   containerului. Rotunjesc prima celulă și se potrivesc amândouă, pe toate paginile. */
[data-fit].is-fit-split .fit-head thead tr:first-child > *:first-child { border-top-left-radius: 11px; }
/* și în dreapta, pentru tabelele fără scrollbar vertical, unde nu mai există fâșia care
   rotunjea colțul; acolo unde fâșia există, tăietura cade pe același gri și nu se vede */
[data-fit].is-fit-split .fit-head thead tr:first-child > *:last-child { border-top-right-radius: 11px; }
[data-fit].is-fit-split .tbl { margin: 0; }
/* în containerele care AU rămas pe thead lipicios (dialoguri, Situație-Detaliat),
   celulele rândului de căutare sunt garantat opace - nu se vede nimic printre ele */
.tbl-scroll8 .tbl-filters td, .dlg-tbl-wrap .tbl-filters td { background: var(--surface2); }
/* Soldurile: Datorii și Avansuri una lângă alta pe desktop */
@media (min-width: 901px) {
    .bal-cols { display: flex; gap: 14px; align-items: flex-start; }
    .bal-col { flex: 1 1 0; min-width: 0; }
}
/* bulina medicului la "Următoarea programare": spațiu fără separator */
.next-doc { margin-left: 7px; }

/* v1.88.99 - planul de tratament: deschidere/închidere ca la parodontogramă
   (buton Deschide/Închide + antetul evidențiat galben când planul e deschis) */
.plan-card .po-open, .plan-card .po-close { display: inline-flex; align-items: center; gap: 6px; }
/* închis -> butonul devine creionul stas (galben, pătrat); deschis -> „✕ Închide" alb */
.plan-card.is-closed .plan-openbtn {
    width: 30px; height: 30px; padding: 0; border: none; border-radius: 8px;
    background: #f59e0b; color: #fff; box-shadow: none;
}
.plan-card.is-closed .plan-openbtn:hover { filter: brightness(0.92); background: #f59e0b; color: #fff; }
.plan-card.is-closed .plan-openbtn .po-open span:last-child { display: none; }
.plan-card.is-closed .po-close { display: none; }
.plan-card:not(.is-closed) .po-open { display: none; }
.plan-card:not(.is-closed) .plan-head { background: #fff7d6; border-radius: 8px; }
.plan-head { padding: 6px 8px; margin-left: -8px; margin-right: -8px; }

/* v1.88.99 - Status dentar: „Rezolvat" verde (verdele acțiunii de activare) */
.btn-resolve-green { background: #47935c; border-color: #47935c; color: #fff; }
.btn-resolve-green:hover { background: #3d7f4f; border-color: #3d7f4f; color: #fff; }
/* Radiografii: ștergerea stă în colțul din dreapta-jos al cardului */
.doc-card { position: relative; }
.doc-card .doc-meta form { display: block; position: absolute; right: 8px; bottom: 8px; margin: 0; }
.doc-card .doc-meta { padding-right: 44px; }

/* v1.89.0 - hoverul X-ului de închidere: roșu mai închis, vizibil (peste hoverul de ghost) */
.btn.btn-ghost.dlg-x:hover, .dlg-x:hover { background: #9c2c21; color: #fff; border: none; }

/* v1.89.6 - butoanele cu atributul hidden chiar dispar (display-ul din .btn călca
   atributul): „Șterge excepția" apărea și la ADĂUGAREA unei excepții, iar „Adaugă
   excepție" rămânea vizibil în modul de alegere. */
.btn[hidden], .btn-act[hidden] { display: none !important; }
.seg[hidden] { display: none !important; } /* v1.89.8 - pastila PAC/MED în modul Listă */

/* v1.89.6 - Furnizori: butonul „Categorii" cu chihlimbarul editării */
#btnCats { background: #f59e0b; border-color: #f59e0b; color: #fff; }
#btnCats:hover { background: #db8c08; border-color: #db8c08; color: #fff; }

/* v1.89.8 - antet de pagină fără conținut vizibil pe mobil: se strânge de tot
   (clasa e pusă de app.js doar sub 900px) */
.page-head.is-blank { display: none !important; }

/* v1.89.8 - pe mobil, „Pe pagină: 50/100/500" stă în STÂNGA în toate barele.
   v1.89.9 - FĂRĂ order (urca rândul deasupra taburilor): își păstrează locul
   pe verticală, dar ia un rând întreg și pornește de la stânga. */
@media (max-width: 900px) {
    .fz-perpage { flex: 0 0 100%; margin-left: 0 !important; }
    .sec-head:has(.fz-perpage) { flex-wrap: wrap; } /* Statistici: bara nu avea wrap */
    #whoSeg { margin-left: auto; } /* v1.89.9 - PAC/MED împins la capătul din dreapta al rândului */
    /* v1.89.10 - „Revino la ordinea inițială"/„Ordonează alfabetic" stau în stânga */
    .page-head .ord-reset { order: -1; margin-right: auto; }
    /* v1.89.12 - fișa pacientului: cardul „Achitat la zi"/Datorie/Avans stă pe
       rândul cu titlul „Sold", în dreapta; formularul de încasare coboară sub ele */
    .sold-head h2 { order: -2; }
    .sold-head > .tot-card { order: -1; margin-left: auto; }
    .sold-head form { flex-basis: 100%; }
    .sold-head .spacer { display: none; }
    /* v1.89.13 - Încasări, tabul Plăți pe mobil: perioada dispare (restul de
       plată e „la zi" oricând), rămâne DOAR cardul Rest de plată, cu „Plată
       nouă" în dreapta lui (mutat acolo de scriptul paginii) */
    .mp-hide-pays { display: none !important; }
    /* .page-mypay ca să batem grila „2 pe rând" a cardurilor (linia .page-mypay .kpis-grouped) */
    .page-mypay .mp-pays-kpis { display: flex; align-items: stretch; gap: 10px; }
    .page-mypay .mp-pays-kpis .kpi-group { display: contents; }
    .page-mypay .mp-pays-kpis .kpi { display: none; }
    .page-mypay .mp-pays-kpis .kpi.kpi-mp-rest { display: block; flex: 1 1 auto; min-width: 0; order: 0; } /* order explicit: ordonarea „2 pe rând" îi dădea order 8 */
    .page-mypay .mp-pays-kpis #btnPayoutAdd { align-self: center; flex: 0 0 auto; order: 1; }
}

/* v1.89.10 - Programări, desktop: în modul Listă căutarea și statusul de pe
   rândul filtrelor aveau 33px (input-sm) față de 39px cât au segmentele
   Calendar/Listă și restul rândului - acum toate au aceeași înălțime */
@media (min-width: 901px) {
    #calToolbar #fltQ, #calToolbar #fltStatus { height: 39px; }
    /* v1.89.11 - Medici și Unit-uri au înălțimea PASTILEI dinăuntrul segmentelor
       (31px, cât „Calendar"/„Zi"), nu a întregii capsule de 39px - și în forma
       de chips individuale pe medici, și în cea de dropdown */
    #calToolbar .cal-filters .chip {
        height: 31px; padding-top: 0; padding-bottom: 0;
        display: inline-flex; align-items: center;
    }
}

/* v1.89.9 - Programări, desktop: elementele de pe rândul al doilea la aceeași
   înălțime; v1.89.11 - Medici și Unit-uri coboară la înălțimea PASTILEI
   dinăuntrul capsulelor (31px, cât „Calendar"/„Zi"), nu a capsulei întregi */
@media (min-width: 901px) {
    .cal-filters .check { min-height: 39px; }
    #whoSeg .seg-btn { padding: 6px 12px; font-size: 13px; } /* ca la .seg normal */
    /* v1.89.19 - lățimea capsulei = lățimea butonului „Programare nouă" (pusă de calendar.js);
       pastilele se împart egal și centrează textul */
    #whoSeg { box-sizing: border-box; }
    #whoSeg .seg-btn { flex: 1 1 0; justify-content: center; text-align: center; }
}

/* ============================================================
   v1.89.35 - CULOAREA SECUNDARĂ (Setări › Aspect): fundalul pastilelor și al capetelor
   de tabel. Implicit e griul dinainte (#f4f4f5), deci fără ea aplicația arată identic.
   Chenarul se derivă din ea în aceeași proporție ca până acum, iar textul se alege singur
   spre negru sau spre alb, după contrastul real cu fundalul (vezi readable_fg_soft() din
   helpers.php) - deci rămâne lizibil pe orice culoare aleasă.
   ============================================================ */
.tbl th,
.tbl-scroll8 thead th,
.dlg-tbl-wrap .tbl th,
[data-fit] .fit-head .tbl th {
    background: var(--secondary, var(--surface2));
    color: var(--secondary-fg, var(--muted));
    border-bottom-color: var(--secondary-line, var(--line));
}
.tbl th.th-sortable:hover { color: var(--secondary-strong, var(--ink)); }
/* rândul de căutare: fundalul capului; câmpurile din el rămân neatinse */
.tbl thead tr.tbl-filters td,
.tbl-scroll8 .tbl-filters td,
.dlg-tbl-wrap .tbl-filters td,
[data-fit] .fit-head .tbl thead tr.tbl-filters td {
    background: var(--secondary, var(--surface2));
    box-shadow: 0 1px 0 var(--secondary-line, var(--line));
}
/* fâșia de lângă scrollbar, la tabelele care se derulează, ține de cap */
[data-fit].is-fit-split { background: var(--secondary, var(--surface2)); }
/* grupurile de pastile: cutia și textul neselectat; pastila activă rămâne albă */
.seg {
    background: var(--secondary, var(--surface2));
    border-color: var(--secondary-line, var(--line));
}
.seg-btn { color: var(--secondary-fg, var(--muted)); }
.seg-btn:hover:not(.is-active) { color: var(--secondary-strong, var(--ink)); }

/* La print capul rămâne deschis: pe hârtie un fundal închis mănâncă toner. */
@media print {
    .tbl th,
    .tbl-scroll8 thead th,
    .dlg-tbl-wrap .tbl th,
    [data-fit] .fit-head .tbl th,
    .tbl thead tr.tbl-filters td { background: var(--surface2) !important; color: var(--muted) !important; }
    .seg { background: var(--surface2) !important; border-color: var(--line) !important; }
    .seg-btn { color: var(--muted) !important; }
}

/* Setări › Aspect: cele șase culori pe un singur rând pe desktop */
@media (min-width: 1100px) {
    .frow.theme-row { grid-template-columns: repeat(6, minmax(0, 1fr)); align-items: stretch; }
    .frow.theme-row .field { justify-content: flex-end; }
    .frow.theme-row .field-label { display: block; }
}

/* v1.89.36 - O SINGURĂ linie sub capul de tabel, pe toată lățimea.
   Până acum ultimul rând al capului își desena chenarul (iar rândul de căutare și o umbră),
   apoi zona de scroll mai desena unul. Peste coloane se suprapuneau și treceau neobservate,
   dar în fâșia de lângă scrollbar rămânea doar cel de jos - acolo linia părea coborâtă cu
   câțiva pixeli, deci capul „se lăsa" în dreapta. Acum linia e una singură, pe .fit-head. */
[data-fit].is-fit-split .fit-head { border-bottom: 1px solid var(--secondary-line, var(--line)); }
[data-fit].is-fit-split .fit-head .tbl thead tr:last-child > th,
[data-fit].is-fit-split .fit-head .tbl thead tr:last-child > td {
    border-bottom: 0;
    box-shadow: none;
}
[data-fit].is-fit-split .fit-scroll { border-top: 0; }

/* v1.89.40 - Tabelele cu scroll intern (data-fit) se termină la ACEEAȘI distanță de marginea de
   jos pe desktop, oriunde ar fi. Cele din carduri (Tehnicieni, Furnizori, Încasări, Solduri) se
   opreau cu 32px mai sus - paddingul de jos al cardului + marginea lui - față de Pacienți sau
   Situație › Detaliat, care stau direct în pagină. Cardul își pierde paddingul de jos și marginea,
   iar linia lui de jos devine linia de jos a tabelului (care nu mai desenează una proprie). */
@media (min-width: 901px) {
    /* marcajul .fit-flush îl pune app.js (nu :has, fiindcă măsurătoarea trebuie făcută cu cardul
       deja lipit - vezi comentariul de la run()) */
    .card.fit-flush { padding-bottom: 0; margin-bottom: 0; }
    .card.fit-flush [data-fit].is-fit-split { border-bottom: 0; }
    .card.fit-flush [data-fit].is-fit-split .fit-scroll { border-radius: 0; }
}

/* v1.89.41 - fără scrollbar „fantomă" la încărcare: până rulează data-fit, pagina nu poate
   derula (clasa e pusă în <head>, scoasă de app.js după ce tabelele și-au luat scrollul intern) */
html.fit-pending { overflow-y: hidden; }

/* v1.89.43/44 - selectorul de culoare al aplicației ([data-cp] + .cp-pop), popover ca al Chrome */
.cp { display: block; min-width: 0; }
/* v1.89.45 - butonul poartă chiar clasa .input + height:42px;padding:4px, EXACT ca
   input-ul nativ de dinainte - același chenar subțire deschis, aceeași rază, fără
   efecte la hover; doar cursorul arată că se poate apăsa. */
.cp-btn { display: block; cursor: pointer; }
.cp.is-open .cp-btn { border-color: var(--focus); box-shadow: 0 0 0 3px #dde7f9; box-shadow: 0 0 0 3px color-mix(in oklab, var(--focus) 20%, white); }
/* v1.89.46 - blocul de culoare copiază EXACT eșantionul nativ al Chromium, calibrat pe
   PIXELI (captură lângă un input nativ identic, în același browser): umplerea începe la
   ~8px CSS de marginea cutiei pe orizontală și ~10px pe verticală (padding-ul input-ului
   + padding-ul intern al eșantionului nativ), colțuri aproape drepte, chenar gri. */
.cp-sw { display: block; height: calc(100% - 8px); margin: 4px 2px; border-radius: 1px; border: 1px solid rgb(119, 119, 119); }
.cp-pop {
    position: fixed; z-index: 1200; width: 260px; padding: 12px; background: #fff;
    border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
}
.cp-pop[hidden] { display: none; }
.cp-sv { position: relative; width: 100%; height: 160px; border-radius: 8px; cursor: crosshair; touch-action: none; user-select: none; -webkit-user-select: none; outline: none; }
.cp-sv:focus-visible { box-shadow: 0 0 0 2px var(--primary); }
.cp-sv-dot { position: absolute; width: 16px; height: 16px; margin: -8px 0 0 -8px; border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45), 0 1px 3px rgba(0, 0, 0, 0.3); pointer-events: none; }
.cp-row { display: flex; align-items: center; gap: 10px; margin: 12px 0 10px; }
.cp-eye { flex: 0 0 32px; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
    background: none; border: 0; border-radius: 8px; color: #1f1f1f; cursor: pointer; }
.cp-eye:hover { background: var(--surface2); }
.cp-prev { flex: 0 0 40px; width: 40px; height: 40px; border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.12); }
.cp-hue { flex: 1 1 0; min-width: 0; display: block; height: 12px; border-radius: 6px; -webkit-appearance: none; appearance: none;
    background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); cursor: pointer; }
/* v1.89.47 - ca în Chrome: bila de pe bară e umplută cu nuanța curentă (variabila --cp-hue,
   pusă de app.js), cu inel alb și umbră */
.cp-hue::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background: var(--cp-hue, #f00); border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.22), 0 1px 3px rgba(0, 0, 0, 0.3); }
.cp-hue::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background: var(--cp-hue, #f00); border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.22); }
.cp-hue::-moz-range-track { background: transparent; }
.cp-input { display: block; width: 100%; height: 38px; text-align: center; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 14px; letter-spacing: 0.03em; }
.cp-input.is-invalid { border-color: var(--danger); }


/* v1.89.52 - butoanele ‹ / Azi / › primesc culoarea secundară DOAR când ea e o culoare
   adevărată (html.sec-custom, pus de theme_head; orice nuanță de gri = rămân albe).
   Se schimbă NUMAI culorile: forma, umbrele și înălțimea rămân exact cele de acum.
   Hoverul folosește chenarul derivat (--secondary-line), care e mereu cu o treaptă
   mai închis pe culori deschise și mai deschis pe culori închise. */
html.sec-custom .cal-nav .btn {
    background: var(--secondary);
    color: var(--secondary-strong, var(--ink));
}
@media (hover: hover) and (pointer: fine) {
    html.sec-custom .cal-nav .btn:hover { background: var(--secondary-line); }
}
/* v1.89.54 - pe ziua curentă, „Azi" arată EXACT ca pe setările implicite (pastila albă,
   bold, umbra accentuată), chiar dacă restul butoanelor poartă culoarea secundară. */
html.sec-custom .cal-nav .btn.is-on-today,
html.sec-custom .cal-nav .btn.is-on-today:hover,
html.sec-custom #navToday.is-on-today,
html.sec-custom #navToday.is-on-today:hover {
    border-color: transparent;
    background: #fff;
    color: var(--ink);
    font-weight: 700;
    box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.06),
                0 1px 2.5px rgba(0, 0, 0, 0.18),
                0 2px 8px rgba(0, 0, 0, 0.10);
}

/* v1.89.53 - pe MOBIL, colțurile de sus ale capului de tabel sunt rotunjite (pe desktop
   cutia .tbl-wrap face asta prin overflow; pe telefon tabelul e full-bleed, fără cutie,
   așa că raza se pune direct pe primele/ultimele celule ale primului rând din cap). */
@media (max-width: 900px) {
    .tbl-wrap:not(.dlg-tbl-wrap) .tbl thead tr:first-child > *:first-child { border-top-left-radius: 11px; }
    .tbl-wrap:not(.dlg-tbl-wrap) .tbl thead tr:first-child > *:last-child { border-top-right-radius: 11px; }
}

/* v1.89.58 - pe MOBIL, „Detalii sold" se lipea de insigna de stare (chiar peste ea, -2px):
   plafonul generic de 70vw pe celule (pus ca un TEXT lung să nu întindă tabelul) tăia celula
   de acțiuni sub lățimea butoanelor, iar flexul alinia la dreapta și dădea pe dinafară spre
   stânga, peste insignă. Celulele de acțiuni nu au text lung - le scot de sub plafon; golul
   redevine cel natural din umplutura celulelor (≥ cel dintre butoane). */
@media (max-width: 900px) {
    .tbl-wrap:not(.dlg-tbl-wrap) .tbl td.td-act,
    .tbl-wrap:not(.dlg-tbl-wrap) .tbl td.td-actions { max-width: none; }
}

/* v1.89.67 - marcajul „A" (Situație › Personal › Plăți): activarea încasărilor
   s-a făcut în perioada afișată, Procentul și Plățile pot diferi normal.
   v1.89.69 - A la dimensiunea textului din rând, bulina cerc simetric în jurul lui,
   centrat pe ambele axe (flex); verificat pe pixeli cu Playwright. */
.tbl td .pay-act {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 21px;
    height: 21px;
    flex: none;
    border-radius: 50%;
    background: #2f9e63;
    color: #fff;
    font-size: inherit;
    font-weight: 700;
    line-height: 1;
    margin-right: 6px;
    vertical-align: middle;
    position: relative;
    top: -1px; /* mijlocul bulinei exact pe mijlocul textului (măsurat: middle o lasă cu ~1px mai jos) */
    cursor: help;
}

/* v1.89.74 - card scund cu toate feliile fiscale active: legenda se strânge ca să
   încapă întreagă (clasa e pusă de sizePie doar când altfel nu ar încăpea)
   v1.90.1 - în modul strâns legenda trece pe DOUĂ coloane (până la 10 rânduri cu CAS):
   înjumătățește înălțimea, iar sizePie re-mărește plăcinta cu spațiul eliberat */
.fin-pie-card.fin-pie-tight .fin-pie-legend {
    font-size: 11px;
    row-gap: 2px;
    margin-top: 6px;
}
@media (min-width: 1600px) {
    /* card lat: legenda strânsă trece pe DOUĂ coloane (două intrări pe rând) -
       înjumătățește înălțimea, iar sizePie re-mărește plăcinta cu spațiul eliberat;
       pe carduri înguste (laptop 1366) etichetele nu încap pe două coloane */
    .fin-pie-card.fin-pie-tight .fin-pie-legend {
        grid-template-columns: auto auto auto 1fr auto auto auto 1fr;
        column-gap: 7px;
    }
}
.fin-pie-card.fin-pie-tight .fpl i {
    width: 9px;
    height: 9px;
}
/* v1.90.1 - în modul strâns eticheta Profit/Pierdere stă pe același rând cu suma:
   încă ~25px câștigați pentru plăcintă pe laptopurile scunde */
.fin-pie-card.fin-pie-tight .fin-profit {
    flex-direction: row;
    align-items: baseline;
    justify-content: center;
    gap: 8px;
    padding: 0 0 6px;
}

/* v1.89.76 - hover pe rândurile de date ale TUTUROR tabelelor (identic cu Programări › Listă,
   #f8f9fc), doar pe dispozitive cu cursor. Excepții (autorizate de Mihai): tabelele din
   dialoguri (rânduri neinteractive - hover-ul ar sugera altceva), rândurile-mesaj goale
   (un singur td întins pe tot rândul) și evidențierea galbenă is-hl, care rămâne deasupra. */
@media (hover: hover) and (pointer: fine) {
    .tbl > tbody > tr:not(.is-hl):not(:has(> td[colspan])):hover > td {
        background: #f8f9fc;
    }
    dialog .tbl > tbody > tr:not(.is-hl):not(:has(> td[colspan])):hover > td {
        background: transparent; /* aceeași specificitate + dialog: excepția câștigă */
    }
}

/* v1.89.82 - Stocuri: butoanele rapide -/+ pe rând, badge-urile de stare */
.stk-qty { display: inline-flex; align-items: center; gap: 8px; }
/* v1.89.87 - capul „Stoc" e centrat, iar grupul -/+ e centrat în celulă: cifra din
   mijloc stă sub titlul coloanei */
.stk-qcell { text-align: center; }
.stk-qty form { margin: 0; display: inline-flex; }
.stk-qval { min-width: 42px; text-align: center; font-weight: 700; font-variant-numeric: tabular-nums; }
.stk-low .stk-qval { color: #b3261e; }
.stk-qbtn {
    width: 26px; height: 26px; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid transparent; cursor: pointer;
    font-size: 17px; font-weight: 700; line-height: 1; padding: 0;
    transition: filter 0.12s ease;
}
.stk-qbtn:hover:not(:disabled) { filter: brightness(0.92); }
.stk-minus { background: #fbdce5; border-color: #eec2cf; color: #7a2740; }
.stk-plus  { background: #d9f0e1; border-color: #bfe3cd; color: #1d5c34; }
.stk-qbtn:disabled { background: #eff1f5; border-color: #e3e6ee; color: #b6bcc9; cursor: default; }
/* v1.89.83 - istoricul (doar medic-șef): fundal propriu, altfel iconița albă era invizibilă */
.btn-act.stk-histbtn { background: #5b6b8c; }
/* v1.89.84 - butonul de istoric global poartă aceeași culoare ca istoricul de pe rânduri */
.btn.stk-allhist-btn { background: #5b6b8c; border-color: #5b6b8c; color: #fff; }
.btn.stk-allhist-btn:hover { background: #4e5d7c; border-color: #4e5d7c; color: #fff; }
/* v1.89.84 - dialogurile de istoric încap tot pe desktop */
#dlg-stk-allhist { width: min(960px, calc(100vw - 32px)); }
#dlg-stk-hist { width: min(760px, calc(100vw - 32px)); }
/* v1.89.84 - „Peste prag": vizual gol în listă, dar textul e citit de căutarea pe Stare.
   v1.89.85 - rămâne ÎN flux (inline-block 0x0), nu absolute: poziționat absolut ieșea din
   zona de scroll a tabelului și lățea pagina pe mobil (scroll orizontal fantomă). */
.stk-vh { display: inline-block; width: 0; height: 0; overflow: hidden; white-space: nowrap; }
/* v1.89.84 - „Am comandat" în alerte: verde plin */
.btn.stk-ok-btn { background: #47935c; border-color: #47935c; color: #fff; }
.btn.stk-ok-btn:hover { background: #3c7f4f; border-color: #3c7f4f; color: #fff; }

/* v1.89.89 - bifa „Arată dezactivate" stă în capul tabelului, deasupra Istoric/Prag */
.stk-offwrap {
    display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
    font-weight: 600; font-size: 11.5px; white-space: nowrap;
}
.stk-offwrap input[type="checkbox"] { width: 14px; height: 14px; margin: 0; }
.stk-offwrap .hint { font-size: 11px; }

/* v1.89.86 - perechea Prag + Istoric (doar medic-șef) */
#stkHdrBtns { display: flex; gap: 8px; }
/* v1.89.87 - butonul de prag: galbenul de editare */
.btn.stk-def-btn { background: #f59e0b; border-color: #f59e0b; color: #fff; }
.btn.stk-def-btn:hover { background: #db8d09; border-color: #db8d09; color: #fff; }
/* mutată în celula de pe rândul de căutare: fiecare buton pe jumătate din lățimea coloanei;
   v1.89.87 - pe desktop Istoric stă primul (pe telefon rămâne Prag, Istoric = ordinea DOM) */
#stkHdrBtns.in-cell { gap: 4px; width: 100%; flex-direction: row-reverse; }
#stkHdrBtns.in-cell .btn {
    flex: 1 1 0; min-width: 0; justify-content: center;
    padding: 5px 2px; font-size: 11.5px; white-space: nowrap;
}
#stkHdrBtns.in-cell .btn .ic { display: none; } /* iconița nu mai încape la lățimea asta */

/* v1.89.86 - mobil: Material + UM + Stoc (cu -/+) încap pe primul ecran;
   spațiul dintre butoane și cifră se strânge, lățimile fixe de desktop cad */
@media (max-width: 900px) {
    .stk-tbl th { width: auto !important; }
    .stk-tbl th, .stk-tbl td { padding-left: 7px; padding-right: 7px; }
    .stk-tbl .td-pat { max-width: 34vw; white-space: normal; overflow-wrap: anywhere; }
    .stk-qty { gap: 4px; }
    .stk-qval { min-width: 22px; }
    /* v1.89.89 - pe telefon Stocuri urca deasupra Tehnicienilor prin reguli de order;
       v1.90.16 - reguli scoase: ambele stau acum în grupul Operațiuni, iar ordinea
       meniului (Programări, Pacienți, Alerte, Operațiuni, ...) vine din document */

    /* v1.89.88 - pe telefon: fără Prag/Istoric; v1.89.89 - ambele butoane rapide,
       mari (+ înaintea cifrei, − la dreapta), încap pe lățimea telefonului;
       bifa „Arată dezactivate" nu se vede pe telefon */
    #stkHdrBtns { display: none; }
    .stk-qbtn { width: 34px; height: 34px; font-size: 21px; }
    .stk-offwrap { display: none; }
    /* v1.89.93 - textul de sub bara cu burgerul: aliniat la stânga cu marginea capului de
       tabel (cardul pierde chenarul pe mobil dar păstrează 4px de padding), iar spațiul
       până la tabel = spațiul până la bară (14px, cât e paddingul de sus al lui main) */
    .page-stocuri .page-head { margin-bottom: 14px; }
    .page-stocuri .page-head .page-sub { margin-left: 4px; margin-top: 0; }
}
.badge.stk-lowbadge { background: #fdecea; color: #b3261e; border-color: #f4c7c3; }
.badge.stk-ordered {
    background: #fff3d6; color: #8a6116; border-color: #f0dfae;
    cursor: pointer; font: inherit; font-size: 12px;
}
.badge.stk-ordered:hover { filter: brightness(0.95); }
.stk-offrow > td { opacity: 0.55; }
.stk-offrow > td.td-act { opacity: 1; }
