/*
 * CSS del progetto custom. Caricato per ultimo (vedi _header.php).
 * Il tema del core sta in dist/css/cms-core.css: per cambiarlo basta ridefinire qui i token, ad esempio
 * :root { --accent: #1d4ed8; --accent-strong: #1e3a8a; --accent-soft: #dbeafe; }
 */

:root {
    --success-soft: #e3efe8;
    --warning-soft: #f6ecd9;
    --danger-soft: #f5e1df;
    --info-soft: #e2ebf5;
    --surface-2: #f1f0ec;
    --radius: 0.3rem;
}

.captcha-image {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    cursor: pointer;
    max-width: 100%;
}

/* --- Stili di pagina del progetto (dopo il design system CMS) --- */

/* Anagrafica assistito (card condivisa + blocco ricetta) */
.ricettario-anagrafica-card.ricettario-anagrafica-incomplete {
    border-width: 2px;
    box-shadow: 0 0 0 0.05rem rgba(255, 193, 7, 0.35);
}

.ricettario-anagrafica-card .card-footer {
    background-color: var(--surface-2);
}

.ricettario-anagrafica-card .ts-wrapper.single .ts-control {
    min-height: calc(1.5em + 0.4rem + 2px);
    padding-top: 0.2rem;
    padding-bottom: 0.2rem;
    font-size: 0.875rem;
}

#fieldset-prescrizione[disabled],
.ricettario-prescrizione-locked {
    opacity: 0.55;
    pointer-events: none;
}

#fieldset-prescrizione[disabled] .select2-container,
#fieldset-prescrizione[disabled] .ts-wrapper {
    opacity: 0.85;
}

/* Omnibar callout condiviso (farmaci / prestazioni) */
.omnibar-search-callout {
    background: linear-gradient(180deg, var(--info-soft) 0%, var(--paper) 100%);
    border: 1px solid var(--info-soft);
    border-radius: 0.35rem;
    padding: 0.85rem 1rem 0.35rem;
    margin-bottom: 1rem;
}

.omnibar-search-callout > .form-group {
    margin-bottom: 0.75rem;
}

.omnibar-search-callout .omnibar-search-label {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.35rem;
    font-weight: 600;
    color: var(--text);
    margin-bottom: 0.4rem;
}

.omnibar-search-callout .omnibar-search-label .omnibar-search-hint {
    font-weight: 400;
    font-size: 0.85rem;
    color: var(--muted);
}

.omnibar-search-callout .ts-wrapper.single .ts-control {
    min-height: 42px;
    border-color: var(--line);
    box-shadow: none;
}

.omnibar-search-callout .ts-wrapper.single.focus .ts-control,
.omnibar-search-callout .ts-wrapper.single.dropdown-active .ts-control {
    border-color: var(--accent);
    box-shadow: 0 0 0 0.2rem var(--accent-soft);
}

.omnibar-search-callout .ts-wrapper .ts-control input {
    font-size: 0.95rem;
}

.omnibar-dropdown-message {
    padding: 0.75rem 1rem;
    color: var(--muted);
    font-size: 0.9rem;
}

/* Dashboard medico: KPI in header card pazienti */
.dashboard-medico-pazienti-header {
    overflow: visible;
}

.dashboard-medico-pazienti-header::after {
    display: none;
}

.dashboard-medico-pazienti-header-meta {
    flex: 1 1 auto;
    min-width: 0;
}

.assistito-labeled-card.dashboard-medico-pazienti-card .nav-tabs .assistito-card-tabs-meta {
    pointer-events: auto;
    width: 100%;
    display: flex;
    align-items: center;
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
}

.assistito-labeled-card.dashboard-agenda-card .nav-tabs {
    display: flex;
    flex-wrap: nowrap;
    align-items: stretch;
    width: 100%;
}

.dashboard-agenda-header-item {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: center;
}

.dashboard-agenda-header-meta {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    width: 100%;
    min-height: 2.35rem;
    padding: 0 0.35rem 0 0.5rem;
}

.dashboard-agenda-nav {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    justify-self: start;
}

.dashboard-agenda-nav .btn {
    padding: 0.1rem 0.4rem;
    line-height: 1.2;
}

.dashboard-agenda-month-label {
    text-align: center;
    font-weight: 600;
    font-size: 0.95rem;
    color: var(--text);
    line-height: 1.2;
    min-width: 0;
    justify-self: center;
}

.dashboard-agenda-expand {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    justify-self: end;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: 0.25rem;
    color: var(--muted);
    text-decoration: none;
}

.dashboard-agenda-expand:hover {
    background: var(--surface-2);
    color: var(--text);
    text-decoration: none;
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-label--link {
    pointer-events: auto;
    cursor: pointer;
    text-decoration: none;
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-label--link:hover {
    background: var(--line);
    color: var(--text);
}

.dashboard-medico-pazienti-header-top {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 0.75rem;
    width: 100%;
}

.dashboard-medico-kpi {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    flex: 1 1 auto;
    min-width: 0;
    gap: 0;
}

.dashboard-medico-kpi-item {
    display: flex;
    flex-direction: row;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.3rem 0.4rem;
    min-width: 0;
    padding: 0 0.85rem;
    border-right: 1px solid var(--line);
}

.dashboard-medico-kpi-item:first-child {
    padding-left: 0.25rem;
}

.dashboard-medico-kpi-item:last-child {
    border-right: none;
    padding-right: 0.5rem;
}

.dashboard-medico-kpi-label {
    font-size: 0.72rem;
    font-weight: 400;
    color: var(--muted);
    line-height: 1.2;
    white-space: nowrap;
}

.dashboard-medico-kpi-value {
    font-weight: 600;
    font-size: 0.9rem;
    color: var(--text);
    line-height: 1.2;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.dashboard-medico-sync-status {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    font-size: 0.72rem;
    font-weight: 400;
}

.dashboard-medico-sync-status .badge {
    font-size: 0.65rem;
    font-weight: 500;
    padding: 0.15em 0.45em;
    vertical-align: baseline;
}

.dashboard-medico-sync-tools {
    flex: 0 0 auto;
    margin-left: auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
}

.dashboard-medico-add-btn {
    white-space: nowrap;
}

.dashboard-medico-sync-btn {
    width: 1.65rem;
    height: 1.65rem;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    border-radius: 0.25rem;
}

.dashboard-medico-sync-btn i {
    font-size: 0.7rem;
    margin: 0;
    line-height: 1;
}

@media (max-width: 767.98px) {
    .dashboard-medico-kpi-item {
        border-right: 0;
        padding: 0 0.75rem 0 0;
    }
}

/* Dashboard medico: barra assistito selezionato */
.dashboard-assistito-bar > .card-header {
    display: flex;
    align-items: center;
}

.dashboard-assistito-bar-title {
    display: flex;
    align-items: center;
    flex-wrap: nowrap;
    gap: 0.5rem 0.65rem;
}

.dashboard-assistito-bar > .card-header .card-title {
    float: none;
    width: auto;
}

.dashboard-assistito-picker {
    max-width: 28rem;
}

.dashboard-assistito-deselect {
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.01em;
    border-radius: 999px;
    padding: 0.18rem 0.7rem;
    color: var(--muted);
    border: 1px solid var(--line);
    background: var(--surface);
    box-shadow: none;
}

.dashboard-assistito-deselect:hover,
.dashboard-assistito-deselect:focus {
    color: #fff;
    background: var(--muted);
    border-color: var(--muted);
}

.dashboard-assistito-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem;
}

.dashboard-assistito-actions .dashboard-assistito-action {
    font-weight: 600;
    font-size: 0.8125rem;
    letter-spacing: 0.01em;
    white-space: nowrap;
    border: 0;
    border-radius: 0.4rem;
    padding: 0.4rem 0.8rem;
    color: #fff;
    box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12);
    transition: transform 0.12s ease, box-shadow 0.12s ease, filter 0.12s ease;
}

.dashboard-assistito-actions .dashboard-assistito-action:hover,
.dashboard-assistito-actions .dashboard-assistito-action:focus {
    color: #fff;
}

.dashboard-assistito-actions a.dashboard-assistito-action:hover,
.dashboard-assistito-actions a.dashboard-assistito-action:focus {
    transform: translateY(-1px);
    box-shadow: 0 4px 10px rgba(16, 24, 40, 0.16);
    filter: brightness(1.06);
}

.dashboard-assistito-actions .dashboard-assistito-action:disabled,
.dashboard-assistito-actions .dashboard-assistito-action[aria-disabled="true"] {
    opacity: 0.55;
    box-shadow: none;
    transform: none;
    filter: none;
}

.dashboard-assistito-actions .is-scheda {
    background: var(--info);
}

.dashboard-assistito-actions .is-farmaci {
    background: var(--accent);
}

.dashboard-assistito-actions .is-prestazioni {
    background: var(--success);
}

.dashboard-assistito-actions .is-ssn {
    background: var(--warning);
}

.dashboard-followup-placeholder {
    min-height: 8rem;
}

.dashboard-followup-card .dashboard-followup-gruppi {
    flex: 1 1 auto;
    min-height: 0;
    max-height: 22rem;
    overflow-y: auto;
}

.dashboard-followup-card .dashboard-followup-item-list {
    gap: 0.4rem;
}

.agenda-fc-wrap {
    min-height: 12rem;
}

.agenda-fc-wrap.agenda-fc-loading {
    opacity: 0.7;
    pointer-events: none;
}

.agenda-fc-expand {
    position: absolute;
    top: 0.3rem;
    right: 0.3rem;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.85rem;
    height: 1.85rem;
    border: 1px solid var(--line);
    border-radius: 0.25rem;
    background: var(--surface);
    color: var(--muted);
}

.agenda-fc-expand:hover {
    background: var(--surface-2);
    color: var(--text);
    text-decoration: none;
}

.agenda-fc .fc-toolbar-title {
    font-size: 1.15rem;
    line-height: 1.25;
    margin: 0;
    text-transform: capitalize;
}

.agenda-fc .fc-col-header-cell-cushion {
    text-transform: capitalize;
}

.agenda-fc-wrap .fc.fc-theme-bootstrap .fc-toolbar.fc-header-toolbar {
    margin-bottom: 0.5rem;
}

.agenda-fc-wrap .fc.fc-theme-bootstrap .fc-toolbar-title {
    font-size: 1.15rem;
    line-height: 1.25;
    margin: 0;
    text-transform: capitalize;
}

.agenda-fc-compact .fc.fc-theme-bootstrap .fc-toolbar.fc-header-toolbar {
    margin-bottom: 0.15rem;
    min-height: 0;
}

.agenda-fc-compact .fc-toolbar-chunk:empty {
    display: none;
}

.agenda-fc-compact .fc.fc-theme-bootstrap .fc-toolbar-title {
    font-size: 0.95rem;
    font-weight: 600;
    padding: 0;
    display: inline-block;
    vertical-align: middle;
    text-transform: capitalize;
}

.agenda-fc-compact .fc.fc-theme-bootstrap .fc-button,
.agenda-fc-compact .fc.fc-theme-bootstrap .btn {
    padding: 0.1rem 0.35rem;
    font-size: 0.75rem;
    line-height: 1.15;
    height: auto;
}

.agenda-fc-compact .fc-toolbar-chunk {
    display: flex;
    align-items: center;
    gap: 0.35rem;
}

.agenda-fc-compact .fc-col-header-cell-cushion {
    padding: 0.2rem 0.25rem;
}

.agenda-fc-compact .fc {
    font-size: 0.85rem;
}

.agenda-fc-compact .fc-daygrid-day-frame {
    min-height: 3.5rem !important;
}

.agenda-fc-compact .fc-daygrid-day-top {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    justify-content: space-between;
}

.agenda-fc-compact .fc-daygrid-day-number {
    padding: 0.35rem 0.4rem;
    float: none;
}

.agenda-fc-compact .fc-daygrid-body,
.agenda-fc-compact .fc-daygrid-body table,
.agenda-fc-compact .fc-scrollgrid-sync-table {
    height: auto !important;
}

.agenda-fc-compact .fc-daygrid-day-events,
.agenda-fc-compact .fc-daygrid-day-bottom {
    display: none;
}

.agenda-fc-compact .fc-daygrid-body-unbalanced .fc-daygrid-day-events {
    min-height: 0 !important;
}

.agenda-fc-day-counts {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.2rem;
    padding: 0.35rem 0.3rem;
}

.agenda-fc-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.25rem;
    padding: 0.05rem 0.38rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 600;
    line-height: 1.4;
}

.agenda-fc-count-visita {
    background: var(--info);
    color: #fff;
}

.agenda-fc-count-impegno {
    background: var(--warning);
    color: #fff;
}

.agenda-fc-legend {
    font-size: 0.75rem;
    color: var(--muted);
}

.agenda-fc-legend-dot {
    display: inline-block;
    width: 0.65rem;
    height: 0.65rem;
    padding: 0;
    min-width: 0;
    border-radius: 50%;
    vertical-align: middle;
    margin-right: 0.2rem;
}

.agenda-fc .fc-event {
    cursor: pointer;
}

/* Specificita' alzata apposta: la regola di FullCalendar per "oggi" (.fc .fc-daygrid-day.fc-day-today)
   ha lo stesso numero di classi e vincerebbe per ordine di caricamento, cancellando la selezione
   quando il giorno selezionato e' anche oggi. */
.agenda-fc-wrap .fc .fc-daygrid-day.is-selected {
    background: var(--accent-soft);
    box-shadow: inset 0 0 0 2px var(--accent);
}

.agenda-fc-wrap.agenda-hide-visite .agenda-fc-visita {
    display: none !important;
}

.agenda-fc-wrap.agenda-hide-impegni .agenda-fc-impegno {
    display: none !important;
}

/* ── Tema FullCalendar (tutte le modalita') ─────────────────────────────────
   Le variabili --fc-* sono definite dal plugin su :root: ridefinite qui prendono i
   token del tema. Gli eventi arrivano dal feed senza colori e si vestono per classe. */

.agenda-fc-wrap .fc {
    --fc-border-color: var(--line);
    --fc-page-bg-color: var(--surface);
    --fc-neutral-bg-color: var(--surface-2);
    --fc-neutral-text-color: var(--muted);
    /* Piu' leggero della selezione (--accent-soft), cosi' i due stati non si confondono. */
    --fc-today-bg-color: var(--surface-2);
    --fc-now-indicator-color: var(--danger);
    --fc-highlight-color: var(--accent-soft);
    --fc-non-business-color: var(--surface-2);
    --fc-event-bg-color: var(--info);
    --fc-event-border-color: var(--info);
    --fc-event-text-color: var(--surface);
    --fc-more-link-bg-color: var(--surface-2);
    --fc-more-link-text-color: var(--accent);
    --fc-bg-event-color: var(--surface-2);
    --fc-bg-event-opacity: 1;
    --fc-small-font-size: 0.8rem;
}

.agenda-fc-wrap .fc .fc-event.agenda-fc-visita {
    background-color: var(--info);
    border-color: var(--info);
    color: var(--surface);
}

.agenda-fc-wrap .fc .fc-event.agenda-fc-impegno {
    background-color: var(--warning);
    border-color: var(--warning);
    color: var(--ink);
}

.agenda-fc-wrap .fc .fc-event.agenda-fc-visita-noshow {
    background-color: var(--muted);
    border-color: var(--muted);
    color: var(--surface);
}

.agenda-fc-wrap .fc .fc-event.agenda-fc-visita-noshow .agenda-fc-ev-nome {
    text-decoration: line-through;
}

/* In vista Mese gli eventi con orario sono un pallino piu' testo: il pallino prende il
   colore dal bordo, quindi la classe deve arrivare fin li'. */
.agenda-fc-wrap .fc .fc-daygrid-dot-event.agenda-fc-visita,
.agenda-fc-wrap .fc .fc-daygrid-dot-event.agenda-fc-impegno,
.agenda-fc-wrap .fc .fc-daygrid-dot-event.agenda-fc-visita-noshow {
    background-color: transparent;
    border-color: transparent;
    color: var(--text);
}

.agenda-fc-wrap .fc .fc-daygrid-dot-event:hover {
    background-color: var(--surface-2);
}

.agenda-fc-wrap .fc .agenda-fc-visita .fc-daygrid-event-dot { border-color: var(--info); }
.agenda-fc-wrap .fc .agenda-fc-impegno .fc-daygrid-event-dot { border-color: var(--warning); }
.agenda-fc-wrap .fc .agenda-fc-visita-noshow .fc-daygrid-event-dot { border-color: var(--muted); }

.agenda-fc-wrap .fc .fc-bg-event.agenda-fc-chiusura {
    background: repeating-linear-gradient(135deg, var(--surface-2) 0 6px, var(--line) 6px 7px);
    opacity: 1;
}

.agenda-fc-wrap .fc .fc-bg-event.agenda-fc-chiusura .fc-event-title,
.agenda-fc-chiusura-label {
    margin: 0.25rem 0.35rem;
    font-size: 0.7rem;
    font-weight: 600;
    font-style: normal;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--muted);
}

.agenda-fc-wrap .fc .fc-col-header-cell-cushion,
.agenda-fc-wrap .fc .fc-daygrid-day-number {
    color: var(--text);
    text-decoration: none;
}

.agenda-fc-wrap .fc .fc-col-header-cell-cushion {
    padding: 0.4rem 0.25rem;
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--muted);
}

.agenda-fc-wrap .fc .fc-daygrid-day-number {
    padding: 0.3rem 0.45rem;
    font-size: 0.875rem;
    font-variant-numeric: tabular-nums;
}

.agenda-fc-wrap .fc .fc-day-today .fc-daygrid-day-number {
    font-weight: 700;
    color: var(--accent-strong);
}

.agenda-fc-wrap .fc .fc-day-other .fc-daygrid-day-number {
    color: var(--muted);
    opacity: 0.7;
}

.agenda-fc-wrap .fc .fc-timegrid-slot-label-cushion,
.agenda-fc-wrap .fc .fc-timegrid-axis-cushion {
    font-size: 0.7rem;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.agenda-fc-wrap .fc .fc-daygrid-more-link {
    font-size: 0.7rem;
    font-weight: 600;
    padding: 0.05rem 0.35rem;
    border-radius: var(--radius);
}

.agenda-fc-wrap .fc .fc-popover {
    border-color: var(--line);
    border-radius: var(--radius);
    box-shadow: 0 0.35rem 1rem var(--line);
}

.agenda-fc-wrap .fc .fc-popover-header {
    background: var(--surface-2);
    color: var(--text);
    font-size: 0.8rem;
    font-weight: 600;
}

/* ── Modalita' completa (calendar.php e Calendari medici) ──────────────────── */

.agenda-fc-full .fc .fc-scrollgrid {
    border-radius: var(--radius);
    overflow: hidden;
}

.agenda-fc-full .fc .fc-timegrid-slot {
    height: 2rem;
}

.agenda-fc-full .fc .fc-timegrid-col.is-selected,
.agenda-fc-full .fc .fc-col-header-cell.is-selected {
    background: var(--accent-soft);
    box-shadow: inset 0 -3px 0 var(--accent);
}

.agenda-fc-full .fc .fc-event {
    border-radius: var(--radius);
}

.agenda-fc-ev {
    display: flex;
    flex-direction: column;
    gap: 0.05rem;
    min-width: 0;
    padding: 0.1rem 0.3rem;
    line-height: 1.25;
    overflow: hidden;
}

.agenda-fc-ev-riga {
    display: flex;
    align-items: center;
    gap: 0.3rem;
    min-width: 0;
}

.agenda-fc-ev-ora {
    flex: 0 0 auto;
    font-size: 0.7rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.agenda-fc-ev-nome {
    min-width: 0;
    font-size: 0.8rem;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.agenda-fc-ev-tipo,
.agenda-fc-ev-sede {
    font-size: 0.7rem;
    opacity: 0.85;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.agenda-fc-ev-stato {
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.agenda-fc-full .fc .fc-daygrid-dot-event .agenda-fc-ev {
    flex-direction: row;
    align-items: center;
    gap: 0.3rem;
    padding: 0.1rem 0.2rem;
}

.agenda-fc-full .fc .fc-daygrid-dot-event .agenda-fc-ev-nome {
    font-weight: 500;
}

/* Barra: frecce e Oggi, titolo, selettore di vista. Sostituisce la toolbar del plugin. */
.agenda-fc-bar {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 0.5rem 0.75rem;
    position: relative;
    margin-bottom: 0.65rem;
    padding: 0.15rem 0.15rem 0.65rem;
    border-bottom: 1px solid var(--line);
}

.agenda-fc-bar-nav {
    display: flex;
    align-items: center;
    gap: 0.25rem;
}

.agenda-fc-bar-nav .btn {
    min-width: 2rem;
    min-height: 2rem;
}

.agenda-fc-bar-title {
    margin: 0;
    min-width: 0;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.25;
    text-align: center;
    text-transform: capitalize;
    color: var(--text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.agenda-fc-views {
    display: inline-flex;
    padding: 0.15rem;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--surface-2);
}

.agenda-fc-view {
    min-height: 1.75rem;
    padding: 0.2rem 0.75rem;
    border: 0;
    border-radius: 999px;
    background: transparent;
    color: var(--muted);
    font: inherit;
    font-size: 0.8rem;
    font-weight: 600;
    line-height: 1.2;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
}

.agenda-fc-view:hover {
    color: var(--text);
}

.agenda-fc-view[aria-pressed="true"] {
    background: var(--accent);
    color: var(--surface);
}

.agenda-fc-view:focus-visible,
.agenda-fc-bar-nav .btn:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

/* Caricamento: una linea che scorre sotto la barra, oltre all'opacita' del wrap. */
.agenda-fc-loading .agenda-fc-bar::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--accent), transparent);
    background-size: 40% 100%;
    background-repeat: no-repeat;
    animation: agenda-fc-progress 1.2s ease-in-out infinite;
}

@keyframes agenda-fc-progress {
    from { background-position: -40% 0; }
    to { background-position: 140% 0; }
}

.agenda-fc-scroll {
    overflow-x: auto;
}

/* La settimana ha bisogno di larghezza: sotto i 40rem si scorre in orizzontale
   e il plugin, che si misura sul contenitore, non schiaccia le colonne. */
.agenda-fc-full.is-view-week .agenda-fc {
    min-width: 40rem;
}

.agenda-fc-error {
    margin-top: 0.75rem;
}

.agenda-fc-error[hidden] {
    display: none;
}

/* Conteggi per giorno: gli stessi della dashboard, ma qui solo su schermo stretto,
   dove il testo degli eventi non ci sta. Sopra, restano gli eventi. */
.agenda-fc-full .agenda-fc-day-counts {
    display: none;
}

@media (max-width: 767.98px) {
    .agenda-fc-bar {
        grid-template-columns: auto minmax(0, 1fr);
    }

    .agenda-fc-views {
        grid-column: 1 / -1;
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .agenda-fc-view {
        text-align: center;
    }

    .agenda-fc-full .fc .fc-dayGridMonth-view .agenda-fc-day-counts {
        display: flex;
        padding: 0.2rem 0.25rem;
    }

    .agenda-fc-full .fc .fc-dayGridMonth-view .fc-daygrid-day-events,
    .agenda-fc-full .fc .fc-dayGridMonth-view .fc-daygrid-day-bottom {
        display: none;
    }

    .agenda-fc-full .fc .fc-dayGridMonth-view .fc-daygrid-day-top {
        display: flex;
        flex-direction: row;
        align-items: flex-start;
        justify-content: space-between;
    }

    .agenda-fc-full .fc .fc-dayGridMonth-view .fc-daygrid-day-frame {
        min-height: 3.25rem;
    }

    .agenda-fc-full .fc .fc-daygrid-day-number {
        padding: 0.25rem 0.35rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .agenda-fc-loading .agenda-fc-bar::after {
        animation: none;
        background: var(--accent);
        background-size: 100% 100%;
    }

    .agenda-fc-view {
        transition: none;
    }
}

.prenota-field-help {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.15rem;
    height: 1.15rem;
    padding: 0;
    font-size: 0.7rem;
    font-weight: 600;
    line-height: 1;
    border-radius: 50%;
    cursor: help;
    vertical-align: text-top;
}

.prenota-code-dictable {
    font-size: 2rem;
    font-weight: 700;
    letter-spacing: 0.28em;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    text-align: center;
    background: var(--surface-2);
    border: 1px solid var(--line);
    border-radius: 0.5rem;
    padding: 0.75rem 1rem;
    user-select: all;
}

/* Scheda assistito: patient banner */
.content-header.assistito-content-header {
    padding-top: 0.35rem;
    padding-bottom: 0.1rem;
}

.content-wrapper > .content-header.assistito-content-header + .content {
    padding-top: 0.35rem;
}

.ricettario-patient-banner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.35rem 0.85rem;
    padding: 0;
}

.ricettario-patient-banner-main {
    display: flex;
    align-items: center;
    min-width: 0;
    gap: 0.6rem;
}

.ricettario-patient-avatar {
    flex: 0 0 auto;
    width: 2.25rem;
    height: 2.25rem;
    border-radius: 50%;
    background: var(--accent-soft);
    color: var(--accent);
    font-weight: 600;
    font-size: 0.82rem;
    letter-spacing: 0.02em;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

.ricettario-patient-banner-text {
    min-width: 0;
}

.ricettario-patient-name-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.5rem;
}

.ricettario-patient-name {
    margin: 0;
    font-size: 1.15rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--text);
}

.ricettario-patient-name-row .badge {
    font-size: 0.68rem;
    font-weight: 600;
    padding: 0.2em 0.45em;
}

.ricettario-patient-cf {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.92rem;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.04em;
    color: var(--muted);
}

.ricettario-patient-incarico {
    font-size: 0.75rem;
    margin-top: 0.05rem;
    line-height: 1.2;
}

.ricettario-patient-banner-actions {
    flex: 0 0 auto;
    margin-left: auto;
}

/* Card anagrafica: identità a testo */
.ricettario-anagrafica-identity-compact {
    margin-bottom: 0.85rem;
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--line);
}

.ricettario-anagrafica-identity {
    margin-bottom: 0.15rem;
}

.ricettario-anagrafica-field {
    margin-bottom: 0.45rem;
}

.ricettario-anagrafica-label {
    display: block;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.15rem;
}

.ricettario-anagrafica-value {
    display: block;
    font-size: 0.95rem;
    color: var(--text);
    line-height: 1.35;
    word-break: break-word;
}

.ricettario-anagrafica-residenza,
.ricettario-anagrafica-contatti {
    margin-top: 0.1rem;
    padding-top: 0.5rem;
    border-top: 1px solid var(--line);
}

.ricettario-anagrafica-residenza-title {
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--muted);
    margin-bottom: 0.4rem;
}

.ricettario-anagrafica-card .card-body {
    padding: 0.7rem 1rem 0.45rem;
}

.ricettario-anagrafica-residenza .form-group,
.ricettario-anagrafica-contatti .form-group {
    margin-bottom: 0.45rem;
}

.ricettario-anagrafica-residenza .row > [class*="col-"]:last-child .form-group,
.ricettario-anagrafica-contatti .row > [class*="col-"]:last-child .form-group {
    margin-bottom: 0;
}

.ricettario-anagrafica-residenza label,
.ricettario-anagrafica-contatti label {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.12rem;
}

.ricettario-anagrafica-residenza .form-control,
.ricettario-anagrafica-contatti .form-control {
    height: calc(1.5em + 0.4rem + 2px);
    padding: 0.2rem 0.5rem;
    font-size: 0.875rem;
}

.ricettario-anagrafica-residenza .form-text,
.ricettario-anagrafica-contatti .form-text {
    margin-top: 0.15rem;
    font-size: 0.75rem;
}

.ricettario-anagrafica-card .card-footer {
    padding: 0.4rem 1rem;
}

/* Azioni rapide */
.ricettario-azioni-label {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.4rem;
}

.ricettario-azioni-btn {
    text-align: left;
    font-weight: 500;
}

.ricettario-azioni-btn + .ricettario-azioni-btn {
    margin-top: 0.4rem;
}

/* Accents card (allineati a dashboard / tab-ricetta) */
.card.ricettario-anagrafica-card:not(.ricettario-anagrafica-incomplete),
.card.ricettario-azioni-card,
.card.assistito-elenco-card,
.card.assistito-cartella-card,
.card.dashboard-medico-pazienti-card,
.card.dashboard-agenda-card,
.card.dashboard-followup-card,
.card.dashboard-news-card {
    border-top: 1px solid var(--line);
    border-left: 3px solid var(--accent);
}

.dashboard-news-item {
    display: flex;
    gap: 0.75rem;
}

.dashboard-news-thumb {
    width: 52px;
    height: 52px;
    object-fit: cover;
    flex-shrink: 0;
    border-radius: 0.25rem;
}

.dashboard-news-body {
    min-width: 0;
    flex: 1;
}

.dashboard-news-tags .badge {
    font-size: 0.7rem;
    margin-right: 0.25rem;
}

.dashboard-news-cover {
    max-height: 360px;
    object-fit: cover;
}

.dashboard-news-detail-body img {
    max-width: 100%;
    height: auto;
}

.dashboard-news-detail-body table {
    max-width: 100%;
}

.card.assistito-cartella-card {
    border-left-color: var(--info);
}

.card.assistito-note-card {
    border-top: 1px solid var(--line);
    border-left: 3px solid var(--muted);
}

.card.ricettario-anagrafica-card.ricettario-anagrafica-incomplete {
    border-left-color: var(--warning);
}

/*
 * Linguette delle card con etichetta: una famiglia sola, per classe. Dati essenziali, quadro clinico e
 * ultime prescrizioni hanno lo stesso comportamento; cambia solo il colore della linguetta attiva.
 * Prima la regola elencava due card, e la terza (Dati essenziali) ereditava da AdminLTE linguette
 * bianche su testata bianca, con un bordo grigio in alto come unico segno: non si capiva che
 * fossero linguette. Lo stato non è solo colore: l'attiva ha anche il peso e la barra inferiore.
 */
.assistito-labeled-card.card-outline-tabs > .card-header .nav-tabs {
    padding-top: 0.3rem;
}

.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link {
    font-size: 0.875rem;
    color: var(--muted);
    background: var(--surface-2);
    border: 1px solid var(--line);
    border-bottom-color: transparent;
    margin-right: 0.2rem;
}

.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link:hover {
    color: var(--text);
    background: var(--accent-soft);
}

.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: -2px;
}

.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link.active {
    background: var(--surface);
    font-weight: 600;
    color: var(--accent);
    border-color: var(--line);
    box-shadow: inset 0 -2px 0 var(--accent);
}

/* con le linguette sul fondo grigio, il titolo della card torna a essere un titolo e non una di loro */
.assistito-labeled-card.card-outline-tabs > .card-header .nav-tabs .assistito-card-tabs-label {
    background: transparent;
    border-right: 0;
}

.assistito-elenco-card.card-outline-tabs > .card-header a.nav-link.active.assistito-ricette-tab-prestazioni {
    color: var(--success);
    box-shadow: inset 0 -2px 0 var(--success);
}

.assistito-cartella-card.card-outline-tabs > .card-header a.nav-link.active {
    color: var(--info);
    box-shadow: inset 0 -2px 0 var(--info);
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-label {
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
    cursor: default;
    pointer-events: none;
    background: var(--surface-2);
    border: 0;
    border-right: 1px solid var(--line);
    border-radius: 0;
    margin: 0;
    padding-left: 1rem;
    padding-right: 1rem;
    opacity: 1;
}

/* Le linguette devono vedersi tutte: vanno a capo, non scorrono oltre il bordo della card */
.assistito-labeled-card .nav-tabs {
    flex-wrap: wrap;
    row-gap: 0.15rem;
}

.assistito-labeled-card .nav-tabs .nav-link {
    white-space: nowrap;
}

/* tolto il bordo fuso col corpo, la separazione dal card-body va data qui */
.assistito-labeled-card.card-outline-tabs > .card-header + .card-body {
    border-top: 1px solid var(--line);
}

/* Riepilogo in testa alla scheda Anagrafica: si legge prima del form. Disegnato sul più stretto */
.assistito-essenziali-riepilogo {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
    gap: 0.6rem 1.25rem;
    margin: 0 0 1rem;
    padding: 0.75rem 1rem;
    background: var(--surface-2);
    border: 1px solid var(--line);
    border-radius: var(--radius);
}

.assistito-essenziali-voce {
    min-width: 0;
}

.assistito-essenziali-voce-larga {
    grid-column: 1 / -1;
}

.assistito-essenziali-riepilogo dt {
    margin-bottom: 0.1rem;
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--muted);
}

.assistito-essenziali-riepilogo dd {
    margin: 0;
    font-size: 1rem;
    color: var(--text);
    overflow-wrap: anywhere;
}

.assistito-essenziali-nota,
.assistito-essenziali-email {
    display: block;
}

.assistito-essenziali-nota {
    font-size: 0.8rem;
    color: var(--muted);
}

.assistito-anagrafica-toolbar {
    display: flex;
    justify-content: flex-end;
    margin: 0 0 0.75rem;
}

.assistito-cartella-tab-count {
    font-weight: 600;
}

.assistito-quadro-pane-footer {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
}

/* I modali della cartella condividono la classe cartella-modal: elencare gli id
   lasciava fuori ogni sezione nuova (e' successo a procedura e contatto_sanitario). */
.cartella-modal .ts-wrapper {
    width: 100%;
}

.cartella-modal .ts-control {
    min-height: calc(1.5em + 0.75rem + 2px);
}

.cartella-modal .pss-badge {
    font-size: 0.65rem;
    font-weight: 600;
    vertical-align: middle;
    padding: 0.12em 0.4em;
    letter-spacing: 0.03em;
}

.cartella-modal label .pss-badge {
    margin-left: 0.3rem;
}

.cartella-modal .pss-legend {
    color: var(--text);
}

.partial-date {
    display: flex;
    align-items: center;
    flex-wrap: nowrap;
    gap: 0.2rem;
}

.partial-date-d,
.partial-date-m {
    width: 2.55rem;
    flex: 0 0 2.55rem;
    text-align: center;
    padding-left: 0.2rem;
    padding-right: 0.2rem;
}

.partial-date-y {
    width: 4.1rem;
    flex: 0 0 4.1rem;
    text-align: center;
    padding-left: 0.25rem;
    padding-right: 0.25rem;
}

.partial-date-sep {
    color: var(--muted);
    user-select: none;
    line-height: 1;
}

.partial-date-pick-wrap {
    position: relative;
    flex: 0 0 auto;
}

.partial-date-pick {
    padding: 0.25rem 0.45rem;
}

.partial-date-native {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    border: 0;
    padding: 0;
    margin: 0;
    pointer-events: none;
}

.assistito-quadro-stato {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
}

.assistito-quadro-stato label {
    font-size: 0.85rem;
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-label i {
    color: var(--muted);
    font-size: 0.85em;
}

.assistito-labeled-card .nav-tabs .nav-item:first-child .assistito-card-tabs-label {
    border-top-left-radius: 0.25rem;
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-meta {
    cursor: default;
    pointer-events: none;
    background: transparent;
    border: 0;
    opacity: 1;
}

.assistito-labeled-card .nav-tabs .assistito-card-tabs-meta .btn,
.assistito-labeled-card .nav-tabs .assistito-card-tabs-meta a {
    pointer-events: auto;
}

.assistito-labeled-card .nav-tabs .nav-item.assistito-elenco-expand-item {
    align-self: center;
}

.assistito-labeled-card .nav-tabs .assistito-elenco-expand {
    pointer-events: auto;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 0;
    opacity: 1;
    margin-top: 0.2rem;
    margin-right: 0.35rem;
    padding: 0.35rem 0.55rem;
    min-height: 1.75rem;
    min-width: 1.75rem;
    border-radius: 0.25rem;
    color: var(--muted);
}

.assistito-labeled-card .nav-tabs .assistito-elenco-expand:hover {
    background: var(--surface-2);
    color: var(--text);
}


.ricettario-anagrafica-card .nav-tabs {
    flex-wrap: wrap;
    align-items: center;
}

.assistito-anagrafica-header-alert-item {
    flex: 1 1 12rem;
    min-width: 0;
}

.assistito-anagrafica-header-alert {
    display: block;
    font-size: 0.7rem;
    font-weight: 600;
    line-height: 1.25;
    color: var(--warning);
    cursor: default;
    pointer-events: none;
    background: transparent;
    border: 0;
    white-space: nowrap;
    padding-top: 0.4rem;
    padding-bottom: 0.4rem;
    opacity: 1;
}

.assistito-anagrafica-header-alert i {
    color: var(--warning);
}

/* Con le linguette lo stato sta dentro la scheda Anagrafica: nelle altre non c'entra nulla */
.assistito-anagrafica-stato {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin: 0 0 0.75rem;
}

.assistito-anagrafica-stato-msg {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--warning);
}

/* ... e la linguetta si fa notare anche da un'altra linguetta */
.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link.assistito-tab-incompleta {
    border-color: var(--warning);
    border-bottom-color: transparent;
}

.assistito-labeled-card.card-outline-tabs > .card-header a.nav-link.assistito-tab-incompleta.active {
    border-color: var(--warning);
}

.assistito-labeled-card.assistito-note-card .nav-tabs .assistito-note-actions {
    pointer-events: auto;
    display: flex;
    align-items: center;
    gap: 0.35rem;
    padding-top: 0.3rem;
    padding-bottom: 0.3rem;
}

.assistito-note-card textarea {
    min-height: 8rem;
    resize: vertical;
    font-size: 0.875rem;
}

.assistito-note-count-row {
    display: flex;
    justify-content: flex-end;
    margin-top: 0.25rem;
}

.assistito-note-count {
    font-size: 0.75rem;
}

.assistito-elenco-scroll {
    max-height: 22rem;
    overflow-y: auto;
}

.assistito-elenco-card .card-body {
    min-height: 16rem;
}

.assistito-nre-block {
    padding: 0.65rem 0.75rem;
    border-bottom: 1px solid var(--line);
}

.assistito-nre-block:hover {
    background: var(--surface-2);
}

.assistito-nre-block:last-child {
    border-bottom: 0;
}

.assistito-nre-head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.35rem 0.5rem;
    margin-bottom: 0.35rem;
}

.assistito-nre-head-main,
.assistito-nre-head-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
}

.assistito-nre-code {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.78rem;
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--text);
    word-break: break-all;
}

.assistito-nre-date {
    font-size: 0.75rem;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.assistito-nre-voci {
    margin: 0;
    padding: 0;
}

.assistito-nre-voci li {
    font-size: 0.8rem;
    line-height: 1.35;
    color: var(--muted);
    word-break: break-word;
    padding: 0.08rem 0;
}

.assistito-nre-qt {
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    margin-left: 0.15rem;
}

.assistito-nre-fallback {
    font-size: 0.78rem;
    color: var(--muted);
    font-style: italic;
}

.assistito-empty-state {
    text-align: center;
    padding: 1.75rem 1rem;
    color: var(--muted);
}

.assistito-empty-state i {
    display: block;
    font-size: 1.65rem;
    color: var(--line);
    margin-bottom: 0.55rem;
}

.assistito-empty-state p {
    margin-bottom: 0.65rem;
    font-size: 0.88rem;
}

.assistito-empty-state-tab {
    min-height: 12rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.assistito-cartella-card .card-body {
    min-height: 16rem;
}

.certificato-riepilogo dt {
    font-weight: 600;
}

/* Pagina FSE assistito */
.card.assistito-fse-pss-card,
.card.assistito-fse-consulta-card,
.card.assistito-fse-ricerca-card {
    border-top: 1px solid var(--line);
    border-left: 3px solid var(--accent);
}

.card.assistito-fse-pss-card {
    border-left-color: var(--info);
}

.assistito-fse-callout {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    margin-bottom: 1rem;
    padding: 0.7rem 0.9rem;
    border: 1px solid var(--warning-soft);
    border-left: 3px solid var(--warning);
    background: var(--warning-soft);
    border-radius: 0.25rem;
}

.assistito-fse-callout > i {
    color: var(--warning);
    margin-top: 0.12rem;
}

.assistito-fse-callout p {
    margin: 0;
    font-size: 0.88rem;
    color: var(--text);
    line-height: 1.4;
}

/* Sezione senza voci: nasconde la tabella e mostra la frase. Lo fa il tema, da
   data-dt-empty-into + data-dt-hide-empty sulla tabella; qui resta solo l'aspetto. */
.assistito-quadro-vuoto {
    margin: 0 0 0.5rem;
    font-size: 0.88rem;
    color: var(--muted);
}

/* Parametri vitali: striscia «Ultime misure» sopra lo storico. Due colonne a 390px, poi quante ne stanno */
.assistito-parametri-ultime {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
    gap: 0.5rem;
    margin: 0 0 0.75rem;
}

.assistito-parametri-ultime > div {
    padding: 0.45rem 0.6rem;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--surface-2);
}

.assistito-parametri-ultime dt {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--muted);
}

.assistito-parametri-ultime dd {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--text);
}

.assistito-parametri-ultime dd small {
    display: block;
    font-size: 0.78rem;
    font-weight: 400;
    color: var(--muted);
}

/* Modulo di rilevazione: numeri grandi, l'unita' accanto al campo, righe alte almeno 44px al dito */
.cartella-modal .parametri-valore {
    font-size: 1.05rem;
    min-height: 2.75rem;
}

.cartella-modal .parametri-input-group {
    max-width: 22rem;
}

.cartella-modal .parametri-input-group .input-group-text {
    min-width: 3.25rem;
    justify-content: center;
}

.cartella-modal .parametri-gruppo-titolo {
    margin: 1rem 0 0.6rem;
    padding-bottom: 0.25rem;
    border-bottom: 1px solid var(--line);
    font-size: 0.9rem;
    font-weight: 600;
}

.cartella-modal .parametri-altre > summary,
.cartella-modal .parametri-note > summary {
    padding: 0.6rem 0;
    font-weight: 600;
    cursor: pointer;
}

.cartella-modal .parametri-avviso {
    color: var(--text);
    font-weight: 600;
}

/* Piano di cura: il tipo di attivita' si sceglie con cinque bottoni grandi. Sono radio veri (frecce
   e lettore di schermo gratis): l'input resta nel DOM, invisibile, e il bottone e' la sua etichetta */
.cartella-modal .piano-tipi {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr));
    gap: 0.5rem;
}

.cartella-modal .piano-tipo-btn {
    position: relative;
    margin: 0;
    font-weight: 400;
    cursor: pointer;
}

.cartella-modal .piano-tipo-radio {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.cartella-modal .piano-tipo-btn > span {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    min-height: 2.75rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--surface-2);
    color: var(--text);
    line-height: 1.2;
}

/* scelto: bordo spesso, grassetto e spunta — non solo un colore */
.cartella-modal .piano-tipo-radio:checked + span {
    border: 2px solid var(--accent);
    padding: calc(0.5rem - 1px) calc(0.75rem - 1px);
    background: var(--accent-soft);
    font-weight: 600;
}

.cartella-modal .piano-tipo-radio:checked + span::after {
    content: "\2713";
    margin-left: auto;
}

.cartella-modal .piano-tipo-radio:focus-visible + span {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

.cartella-modal .piano-tipo-radio:disabled + span {
    opacity: 0.55;
    cursor: not-allowed;
}

.cartella-modal .piano-tipo-radio:disabled:checked + span {
    opacity: 1;
}

/* il riquadro giallo o la riga verde dicono gia' che e' vuota.
   Si spegne il <p>, non il contenitore: quello porta lo stile inline del tema. */
.assistito-dichiara:not(.d-none) ~ .assistito-quadro-vuoto-wrap > .assistito-quadro-vuoto,
.assistito-dichiarato:not(.d-none) ~ .assistito-quadro-vuoto-wrap > .assistito-quadro-vuoto {
    display: none;
}

/* Riquadro «dichiara che il dato manca»: e' un assistito-fse-callout con due bottoni. Disegnato sui ~390px */
.assistito-dichiara-body {
    flex: 1 1 auto;
    min-width: 0;
}

.assistito-dichiara-azioni {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.5rem;
}

/* Dichiarazione in vigore: stessa sagoma del riquadro giallo, tono quieto */
.assistito-dichiarato {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem 0.65rem;
    margin-bottom: 1rem;
    padding: 0.5rem 0.9rem;
    border: 1px solid var(--success-soft);
    border-left: 3px solid var(--success);
    background: var(--success-soft);
    border-radius: 0.25rem;
}

.assistito-dichiarato > i {
    color: var(--success);
}

.assistito-dichiarato p {
    margin: 0;
    font-size: 0.88rem;
    color: var(--text);
}

.assistito-dichiarato .btn-link {
    margin-left: auto;
    min-height: 2rem;
    padding: 0 0.25rem;
    font-size: 0.875rem;
}

.assistito-dichiara-azioni .btn {
    min-height: 2rem;
    font-size: 0.875rem;
}

.assistito-labeled-card.assistito-fse-pss-card .nav-tabs .assistito-fse-pss-actions {
    pointer-events: auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 0.4rem 0.5rem;
    padding: 0.35rem 0.65rem 0.35rem 0.5rem;
}

.assistito-fse-pss-card .card-body {
    padding-top: 0.85rem;
}

.assistito-fse-esito-host:not(:empty) {
    margin-top: 0.85rem;
}

.assistito-fse-esito {
    border: 1px solid var(--success-soft);
    border-left: 3px solid var(--success);
    background: var(--success-soft);
    padding: 0.65rem 0.8rem;
    border-radius: 0.2rem;
}

.assistito-fse-esito.is-warning {
    border-color: var(--warning-soft);
    border-left-color: var(--warning);
    background: var(--warning-soft);
}

.assistito-fse-esito.is-failed {
    border-color: var(--danger-soft);
    border-left-color: var(--danger);
    background: var(--danger-soft);
}

.assistito-fse-esito-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.45rem 0.75rem;
    margin: 0;
    font-size: 0.85rem;
    color: var(--text);
}

.assistito-fse-esito-stato {
    font-weight: 600;
}

.assistito-fse-esito-meta {
    color: var(--muted);
    font-size: 0.8rem;
}

.assistito-fse-esito-sezioni {
    display: flex;
    flex-wrap: wrap;
    gap: 0.2rem 0.5rem;
    margin: 0.4rem 0 0;
    font-size: 0.8rem;
    color: var(--text);
}

.assistito-fse-esito-sezione.is-vuota {
    color: var(--muted);
}

.assistito-fse-consenso-list {
    list-style: none;
    margin: 0;
    padding: 0;
}

.assistito-fse-consenso-list li {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.55rem;
    padding: 0.45rem 0;
    border-bottom: 1px solid var(--paper);
    font-size: 0.85rem;
}

.assistito-fse-consenso-list li:last-child {
    border-bottom: 0;
}

.assistito-fse-ricerca-host .table-responsive {
    margin-bottom: 0;
}

.assistito-fse-ricerca-card .ts-wrapper {
    width: 100%;
}

.assistito-fse-ricerca-card .btn-block {
    white-space: nowrap;
}

@media (max-width: 991.98px) {
    .assistito-labeled-card.assistito-fse-pss-card .nav-tabs {
        flex-wrap: wrap;
    }

    .assistito-labeled-card.assistito-fse-pss-card .nav-tabs .nav-item.ml-auto {
        width: 100%;
        margin-left: 0 !important;
    }

    .assistito-labeled-card.assistito-fse-pss-card .nav-tabs .assistito-fse-pss-actions {
        justify-content: flex-start;
        padding-left: 0.75rem;
    }

    .ricettario-patient-banner-actions {
        margin-left: 0;
        width: 100%;
    }
}

.agenda-fc-visita-noshow {
    opacity: 0.85;
}

.assistito-sec {
    scroll-margin-top: 3.75rem;
}

.assistito-toc .pp-rail-link.is-active {
    color: var(--accent);
    font-weight: 600;
}

/* Le linguette del quadro clinico nel rail: rientrate e col trattino, perche' si leggano come figlie
   della voce sopra e non come sezioni della scheda */
/* conteggio e «!» in coda alla voce: il margine sta sul contenitore, cosi' non dipende da quale dei due c'e' */
.assistito-toc .pp-rail-meta {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    margin-left: auto;
}

.assistito-toc .pp-rail-sublist {
    list-style: none;
    margin: 0 0 0.2rem;
    padding: 0.1rem 0 0 0.5rem;
}

.assistito-toc .pp-rail-sublink {
    font-size: 0.8rem;
    line-height: 1.2;
    padding-top: 0.02rem;
    padding-bottom: 0.02rem;
}

.assistito-toc .pp-rail-sublink::before {
    content: "–";
    flex: 0 0 auto;
    color: var(--muted);
}

.followup-item-list {
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
}

.followup-item {
    display: flex;
    align-items: stretch;
    overflow: hidden;
    margin: 0;
    border: 1px solid var(--line);
    border-radius: 0.35rem;
    background: var(--surface);
}

.followup-item--scaduto {
    border-color: var(--danger-soft);
    background: var(--danger-soft);
}

.followup-item--in-scadenza {
    border-color: var(--warning-soft);
    background: var(--warning-soft);
}

.followup-item--fatto {
    border-color: var(--success-soft);
    background: var(--success-soft);
}

.followup-item-stato {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    align-self: stretch;
    padding: 0 0.15rem;
    user-select: none;
}

.followup-item-stato-label {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    text-transform: uppercase;
    letter-spacing: 0.14em;
    font-size: 0.68rem;
    font-weight: 700;
    line-height: 1.15;
    padding: 0.55rem 0.28rem;
    white-space: nowrap;
}

.followup-item-stato--scaduto {
    background: var(--danger);
    color: #fff;
}

.followup-item-stato--in-scadenza {
    background: var(--warning);
    color: var(--ink);
}

.followup-item-stato--fatto {
    background: var(--success);
    color: #fff;
}

.followup-item-body {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.55rem 0.75rem 0.6rem;
}

.followup-item-fatto .followup-item-body {
    opacity: 0.55;
}

.followup-item-data {
    font-weight: 600;
    color: inherit;
}

.followup-finestra-elenco .prenota-field-help {
    margin-bottom: 0;
}

.followup-item-azioni {
    flex-wrap: wrap;
}

.followup-item-azioni-form {
    margin-bottom: 0;
}

/* Dashboard omnibar — optical aperture (not the ricette .omnibar-* styles) */
.dashboard-omnibar-header-row {
    position: relative;
    z-index: 1050;
    overflow: visible;
}
.dashboard-omnibar {
    position: relative;
    z-index: 1050;
    max-width: 52rem;
    margin-left: auto;
}
.dashboard-omnibar-shell {
    position: relative;
    border-radius: 2px;
    padding: 1px;
    background: var(--line);
    overflow: hidden;
}
.dashboard-omnibar-spin {
    display: none;
    position: absolute;
    inset: -120%;
    background: conic-gradient(
        from 0deg,
        transparent 0 38%,
        var(--accent) 48%,
        var(--accent-soft) 52%,
        transparent 62%
    );
    pointer-events: none;
}
.dashboard-omnibar.is-focused .dashboard-omnibar-shell {
    background: transparent;
}
.dashboard-omnibar.is-focused .dashboard-omnibar-spin {
    display: block;
    animation: dashboard-omnibar-orbit 9s linear infinite;
}
.dashboard-omnibar-inner {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 0.7rem;
    min-height: 54px;
    padding: 0 0.85rem 0 0.95rem;
    background: var(--surface);
    border-radius: 1px;
}
.dashboard-omnibar-lens {
    display: flex;
    color: var(--muted);
    flex: 0 0 auto;
    line-height: 0;
}
.dashboard-omnibar.is-focused .dashboard-omnibar-lens {
    color: var(--accent);
}
.dashboard-omnibar-input {
    flex: 1 1 auto;
    min-width: 0;
    border: 0;
    background: transparent;
    color: var(--text);
    font-family: inherit;
    font-size: 1rem;
    letter-spacing: 0.01em;
    outline: none;
    box-shadow: none;
    height: 36px;
    padding: 0;
}
.dashboard-omnibar-input::-webkit-search-decoration,
.dashboard-omnibar-input::-webkit-search-cancel-button {
    -webkit-appearance: none;
}
.dashboard-omnibar-input::placeholder {
    color: var(--muted);
    opacity: 0.85;
}
.dashboard-omnibar-kbd {
    flex: 0 0 auto;
    font-family: "IBM Plex Mono", SFMono-Regular, Menlo, monospace;
    font-size: 0.68rem;
    font-weight: 500;
    color: var(--muted);
    border: 1px solid var(--line);
    border-radius: 2px;
    padding: 0.12rem 0.38rem;
    background: var(--paper);
}
.dashboard-omnibar.is-focused .dashboard-omnibar-kbd {
    display: none;
}
.dashboard-omnibar-panel {
    position: fixed;
    z-index: 1060;
    background: var(--surface);
    border: 1px solid var(--line);
    border-top: 0;
    border-radius: 0 0 2px 2px;
    max-height: 60vh;
    overflow: auto;
}
.dashboard-omnibar-hints {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem 1.1rem;
    padding: 0.85rem 1rem 0.95rem;
}
.dashboard-omnibar-hints span {
    font-family: "IBM Plex Mono", SFMono-Regular, Menlo, monospace;
    font-size: 0.72rem;
    letter-spacing: 0.04em;
    color: var(--muted);
    position: relative;
    padding-left: 0.7rem;
}
.dashboard-omnibar-hints span::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.35em;
    width: 2px;
    height: 0.7em;
    background: var(--accent);
}
.dashboard-omnibar-status {
    padding: 0.7rem 1rem;
    font-size: 0.88rem;
    color: var(--muted);
}
.dashboard-omnibar-section-label {
    font-family: "IBM Plex Mono", SFMono-Regular, Menlo, monospace;
    font-size: 0.68rem;
    letter-spacing: 0.06em;
    color: var(--muted);
    padding: 0.55rem 1rem 0.25rem;
    position: relative;
}
.dashboard-omnibar-section-label::before {
    content: "";
    display: inline-block;
    width: 2px;
    height: 0.7em;
    margin-right: 0.5rem;
    background: var(--accent);
    vertical-align: -0.05em;
}
.dashboard-omnibar-option {
    display: block;
    width: 100%;
    text-align: left;
    border: 0;
    background: transparent;
    padding: 0.55rem 1rem 0.6rem 1.05rem;
    cursor: pointer;
    color: inherit;
    position: relative;
}
.dashboard-omnibar-option::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.35rem;
    bottom: 0.35rem;
    width: 2px;
    background: transparent;
}
.dashboard-omnibar-option.is-active,
.dashboard-omnibar-option:hover {
    background: var(--accent-soft);
}
.dashboard-omnibar-option.is-active::before,
.dashboard-omnibar-option:hover::before {
    background: var(--accent);
}
.dashboard-omnibar-option-title {
    display: block;
    font-weight: 500;
    font-size: 0.95rem;
    color: var(--text);
}
.dashboard-omnibar-option-sub {
    display: block;
    margin-top: 0.12rem;
    font-size: 0.78rem;
    color: var(--muted);
}
@keyframes dashboard-omnibar-orbit {
    to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    .dashboard-omnibar.is-focused .dashboard-omnibar-spin {
        display: none;
        animation: none;
    }
    .dashboard-omnibar.is-focused .dashboard-omnibar-shell {
        background: var(--accent);
    }
}
@media (max-width: 991.98px) {
    .dashboard-omnibar {
        max-width: none;
        margin-left: 0;
    }
    .dashboard-omnibar-panel {
        max-height: 60vh;
    }
}

/* ── Importazione assistiti: passi della procedura guidata ─────────────────────
   Disegnati a mano invece che con bs-stepper: qui il passo lo decide lo stato
   letto dal server, non la navigazione dell'utente, quindi della libreria
   servirebbe solo l'aspetto. Colori dai token del tema, mai esadecimali. */

.import-passi-testa {
    display: flex;
    flex-wrap: wrap;
    list-style: none;
    margin: 0 0 1.25rem;
    padding: 0;
    gap: 0.25rem;
}

.import-passo {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1 1 auto;
    min-width: 8rem;
    padding: 0.5rem 0.75rem;
    border-bottom: 3px solid var(--line);
    color: var(--muted);
    font-size: 0.88rem;
}

.import-passo-numero {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.6rem;
    height: 1.6rem;
    border-radius: 50%;
    background: var(--line);
    color: var(--surface);
    font-weight: 600;
    font-size: 0.8rem;
    flex: 0 0 auto;
}

.import-passo.is-attivo {
    border-bottom-color: var(--accent);
    color: var(--text);
    font-weight: 600;
}

.import-passo.is-attivo .import-passo-numero {
    background: var(--accent);
}

.import-passo.is-fatto {
    border-bottom-color: var(--success);
    color: var(--text);
}

.import-passo.is-fatto .import-passo-numero {
    background: var(--success);
}

@media (max-width: 575.98px) {
    .import-passo-label {
        display: none;
    }
    .import-passo {
        min-width: 0;
        flex: 1 1 0;
        justify-content: center;
    }
}

/* ── Elenchi: quel che il core non copre ───────────────────────────────
   Barra delle faccette, pill, contatore, stato vuoto, fasce di stato sulla riga e
   scheletro adesso stanno nel tema: `.cms-dt-*` e `.cms-skeleton` in cms-core.css,
   pilotati dagli attributi `data-dt-*`. Le pagine usano quelli, non copie locali.

   Qui restano le due cose che il core non pretende di sapere: come si disegna una
   striscia di numeri, e come si dice che la tabella non ha potuto caricare. */

.elenco-kpi {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}

.elenco-kpi-item {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    min-width: 0;
    padding: 0.6rem 0.75rem;
    background: var(--surface);
    border: 1px solid var(--line);
    border-left: 3px solid var(--line);
    border-radius: var(--radius);
}

.elenco-kpi-item--accento { border-left-color: var(--accent); }
.elenco-kpi-item--ok { border-left-color: var(--success); }
.elenco-kpi-item--attenzione { border-left-color: var(--warning); }
.elenco-kpi-item--scaduto { border-left-color: var(--danger); }
.elenco-kpi-item--info { border-left-color: var(--info); }

.elenco-kpi-ico {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: var(--radius);
    background: var(--surface-2);
    color: var(--muted);
    font-size: 0.8rem;
}

.elenco-kpi-corpo {
    min-width: 0;
}

.elenco-kpi-valore {
    display: block;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--text);
    font-variant-numeric: tabular-nums;
}

.elenco-kpi-label {
    display: block;
    font-size: 0.7rem;
    line-height: 1.2;
    color: var(--muted);
    overflow-wrap: anywhere;
}

/* Non e' lo stato vuoto, che dice «qui non c'e' niente»: questo dice «non ho
   potuto guardare», e allo stato vuoto del core non compete. */

.elenco-errore {
    display: flex;
    align-items: flex-start;
    gap: 0.65rem;
    margin: 0.75rem 0 0;
    padding: 0.75rem 0.9rem;
    border: 1px solid var(--danger-soft);
    border-left: 3px solid var(--danger);
    border-radius: var(--radius);
    background: var(--danger-soft);
    color: var(--text);
    font-size: 0.875rem;
}

.elenco-errore > i {
    margin-top: 0.15rem;
    color: var(--danger);
}

.elenco-errore p {
    margin: 0;
}

.elenco-errore p + p {
    margin-top: 0.25rem;
    color: var(--muted);
}

/* Impostazioni → Carta intestata: il logo come lo vede la cornice dei PDF (max 18 mm di altezza). */
.carta-intestata-logo {
    display: inline-block;
    padding: 0.75rem 1rem;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: #fff;
}

.carta-intestata-logo img {
    display: block;
    max-height: 72px;
    max-width: 200px;
}

.carta-intestata-anteprima {
    padding: 1rem 1.25rem;
    border-left: 3px solid var(--accent);
    border-radius: var(--radius);
    background: var(--surface);
}

.carta-intestata-anteprima .nome {
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 1.15rem;
    color: var(--ink);
}

.carta-intestata-anteprima .recapiti {
    margin: 0.25rem 0 0;
    font-size: 0.85rem;
    color: var(--muted);
}

.carta-intestata-anteprima .recapiti span + span::before {
    content: ' · ';
}

