/* Standard UX/UI — sezione platform (passaggio globale 28-set).
 * Solo regole specifiche della sezione: i pattern condivisi (pill .jo-qf,
 * KPI .jo-kpi, tabelle, testate) stanno in joorna-standard.css. */

/* Layout (mockup VIEWS.dashboard): KPI → grafici 2:1 → tre card. */
.jo-hd {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* Da vedere: scorciatoie verso le sezioni, una riga ciascuna. */
.jo-hd-links {
    margin: 6px 0 0;
    padding: 0;
    list-style: none;
}

.jo-hd-links > li + li { border-top: 1px solid var(--jo-ui-line-2); }

.jo-hd-link {
    display: grid;
    grid-template-columns: 28px minmax(0, 1fr) auto 16px;
    gap: 10px;
    align-items: center;
    margin: 0 -8px;
    padding: 7px 8px;
    border-radius: 8px;
    transition: background-color .12s ease;
}

a.jo-hd-link:hover { background: var(--ds-accent-soft); }
a.jo-hd-link:hover b { color: var(--ds-accent-fg); }
a.jo-hd-link:focus-visible { outline: 2px solid var(--ds-accent); outline-offset: 1px; }

.jo-hd-link .jo-kpi-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 8px;
    background: var(--jo-ui-soft);
    color: var(--jo-ui-muted);
}

.jo-hd-link .jo-kpi-ic svg { width: 15px; height: 15px; }

.jo-hd-link b { display: block; font-size: 13px; font-weight: 600; color: var(--jo-ui-ink); }
.jo-hd-link small { display: block; font-size: 12px; color: var(--jo-ui-muted); }

.jo-hd-link-v {
    font-size: 16px;
    font-weight: 700;
    color: var(--jo-ui-ink);
    font-variant-numeric: tabular-nums;
}

/* Occupazione camere giorno per giorno: una riga per camera, un pallino per notte. */
.jo-occ-card .jo-hd-card-h { align-items: flex-start; }
.jo-occ-card .jo-hd-card-h .jo-an-card-hint { margin: 2px 0 0; }

.jo-occ-nav {
    display: flex;
    flex-shrink: 0;
    align-items: center;
    gap: 2px;
}

.jo-occ-nav svg { width: 16px; height: 16px; }

.jo-occ-today {
    height: 28px;
    padding: 0 10px;
    border: 1px solid var(--ds-border);
    border-radius: 8px;
    font-size: 12px;
    font-weight: 500;
    color: var(--jo-ui-ink);
}

.jo-occ-today:hover:not(:disabled) { background: var(--ds-accent-soft); color: var(--ds-accent-fg); }
.jo-occ-today:disabled { color: var(--jo-ui-muted); opacity: .6; cursor: default; }

.jo-occ-scroll {
    max-height: 330px;
    overflow: auto;
}

.jo-occ {
    width: 100%;
    min-width: calc(130px + var(--jo-occ-days) * 18px);
    border-collapse: separate;
    border-spacing: 0;
    table-layout: fixed;
}

.jo-occ th,
.jo-occ td {
    padding: 0;
    text-align: center;
}

.jo-occ thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    padding-bottom: 6px;
    background: var(--ds-surface);
    font-size: 11px;
    font-weight: 600;
    line-height: 1.2;
    color: var(--jo-ui-muted);
    font-variant-numeric: tabular-nums;
}

.jo-occ thead th span {
    display: block;
    font-size: 10px;
    font-weight: 500;
    text-transform: uppercase;
}

.jo-occ thead th.is-weekend { color: var(--jo-ui-ink); }

.jo-occ .jo-occ-room {
    position: sticky;
    left: 0;
    z-index: 2;
    width: 130px;
    padding-right: 10px;
    background: var(--ds-surface);
    text-align: left;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--jo-ui-ink);
}

.jo-occ .jo-occ-room span { display: block; }

.jo-occ tbody td,
.jo-occ tbody th { height: 30px; }

/* Riga "Occupate": camere occupate per notte, sotto la griglia. */
.jo-occ tfoot td,
.jo-occ tfoot th {
    height: 26px;
    border-top: 1px solid var(--jo-ui-line-2);
    font-size: 11px;
    font-weight: 600;
    color: var(--jo-ui-muted);
    font-variant-numeric: tabular-nums;
}

.jo-occ tfoot .jo-occ-room { font-size: 12px; color: var(--jo-ui-muted); }

.jo-occ .is-today { background: var(--ds-accent-soft); }
.jo-occ thead th.is-today { color: var(--ds-accent-fg); border-radius: 6px 6px 0 0; }

.jo-occ-dot {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 15px;
    height: 15px;
    border: 1.5px solid var(--ds-border-strong);
    border-radius: 999px;
    font-size: 8.5px;
    font-style: normal;
    font-weight: 700;
    line-height: 1;
    vertical-align: middle;
    color: var(--ds-surface);
}

.jo-occ-dot.is-on {
    border-color: transparent;
    background: var(--jo-primary-400);
    cursor: default;
}

.jo-occ-legend {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 16px;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid var(--jo-ui-line-2);
    font-size: 12px;
    color: var(--jo-ui-muted);
}

.jo-occ-legend > span { display: inline-flex; align-items: center; gap: 6px; }

.jo-occ-today-mark {
    display: inline-block;
    width: 14px;
    height: 14px;
    border-radius: 4px;
    background: var(--ds-accent-soft);
}

.jo-occ-count { margin-left: auto; }

.jo-hd-go {
    width: 16px;
    height: 16px;
    margin-left: auto;
    color: var(--jo-ui-muted);
}

.jo-hd-card-h {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.jo-hd-card-h { margin-bottom: 12px; }

.jo-hd-card-h h3 { margin: 0; }

.jo-hd-card-h + .jo-hd-stats { margin-top: 0; }

.jo-hd-foot {
    display: flex;
    justify-content: space-between;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--jo-ui-line-2);
    font-size: 13px;
    color: var(--jo-ui-muted);
}

.jo-hd-foot b { color: var(--jo-ui-ink); }

/* Elenchi delle card: campagne e attività recenti. */
.jo-hd-list,
.jo-hd-timeline {
    margin: 10px 0 0;
    padding: 0;
    list-style: none;
}

.jo-hd-list > li,
.jo-hd-timeline > li {
    padding: 9px 0;
    border-top: 1px solid var(--jo-ui-line-2);
    font-size: 13px;
}

.jo-hd-list > li:first-child,
.jo-hd-timeline > li:first-child { border-top: 0; }

.jo-hd-list b,
.jo-hd-timeline b {
    display: block;
    font-weight: 600;
    color: var(--jo-ui-ink);
}

.jo-hd-list span,
.jo-hd-timeline span {
    display: block;
    font-size: 12px;
    color: var(--jo-ui-muted);
}

.jo-hd-timeline > li {
    display: grid;
    grid-template-columns: 26px minmax(0, 1fr) auto;
    gap: 10px;
    align-items: start;
}

.jo-hd-timeline a:hover b { color: var(--jo-ui-accent); }

.jo-hd-tl-ic {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 7px;
    background: var(--jo-ui-soft);
    color: var(--jo-ui-muted);
}

.jo-hd-tl-ic svg { width: 15px; height: 15px; }

.jo-hd-timeline time {
    font-size: 12px;
    color: var(--jo-ui-muted);
    white-space: nowrap;
}

.jo-hd-none {
    color: var(--jo-ui-muted);
}

/* Chatbot: quattro numeri e l'esito delle conversazioni. */
.jo-hd-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
    margin-top: 12px;
}

.jo-hd-stats > div {
    padding: 8px 10px;
    border-radius: 8px;
    background: var(--jo-ui-soft);
}

.jo-hd-stats dt { font-size: 12px; color: var(--jo-ui-muted); }
.jo-hd-stats dd { font-size: 17px; font-weight: 700; color: var(--jo-ui-ink); }

.jo-hd-outcomes { margin-top: 12px; }

.jo-hd-outcomes .jo-hd-bar-row { font-size: 12px; }

.jo-hd-outcomes b { width: 34px; text-align: right; color: var(--jo-ui-ink); }

.jo-hd-out-l {
    flex: 0 0 132px;
    color: var(--jo-ui-muted);
}

.jo-hd-more { align-self: flex-start; }

/* Barre di avanzamento (prova moduli, open rate segmenti). */
.jo-hd-bar-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 6px;
}

.jo-hd-bar {
    flex: 1;
    display: block;
    height: 6px;
    border-radius: 999px;
    background: var(--jo-ui-line-2);
    overflow: hidden;
}

.jo-hd-bar > i {
    display: block;
    height: 100%;
    border-radius: 999px;
    background: var(--jo-ui-accent);
}

.jo-hd-bar > i.is-ok { background: var(--jo-ui-ok); }
.jo-hd-bar > i.is-danger { background: var(--jo-ui-danger); }

/* Tre KPI su una riga da tablet in su (Attività comunicazioni, Profilo ospiti, Piano & Moduli). */
@media (min-width: 768px) {
    .jo-kpis.jo-kpis--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

/* Etichetta "dato di gruppo" dentro la nota di un .jo-kpi (report Analisi dei segmenti). */
.jo-kpi-flag {
    display: inline-block;
    margin-left: 6px;
    padding: 0 6px;
    border: 1px solid var(--jo-ui-line);
    border-radius: 999px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--jo-ui-muted);
    cursor: help;
}

/* Dettagli sotto una riga di segmento (Risultati per segmento). */
.jo-tseg-facts {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin: auto 0 0;
    padding-top: 10px;
    border-top: 1px solid var(--jo-ui-line-2);
    font-size: 12.5px;
}

.jo-tseg-facts > div {
    display: flex;
    justify-content: space-between;
    gap: 8px;
}

.jo-tseg-facts dt {
    color: var(--jo-ui-muted);
}

.jo-tseg-facts dd {
    margin: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

/* Su telefono il badge fonte ruberebbe spazio all'etichetta del KPI. */
@media (max-width: 767px) {
    .jo-kpi-src {
        display: none;
    }
}

/* ── Performance ▸ Email e automazioni (revisione 19-ott-2026) ─────────────
   Risultati per segmento: una riga per segmento (segment-performance.blade.php),
   la freccia apre importi e canali. Prestazioni delle campagne: sotto i 640px
   ogni campagna è una card con le etichette (jo-mtable--cards). */
.jo-segperf { display: flex; flex-direction: column; }
.jo-segperf-head,
.jo-segperf-row > summary {
    display: grid;
    grid-template-columns: minmax(0, 2fr) repeat(4, minmax(0, 1fr)) 16px;
    align-items: center;
    gap: 12px;
}
.jo-segperf-head {
    padding: 0 0 6px;
    border-bottom: 1px solid var(--jo-ui-line-2);
    font-size: 12px;
    font-weight: 600;
    color: var(--ds-text-tertiary, #5B5B6B);
}
.jo-segperf-head::after { content: ""; }
.jo-segperf .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.jo-segperf-row { border-bottom: 1px solid var(--jo-ui-line-2); }
.jo-segperf-row:last-child { border-bottom: 0; }
.jo-segperf-row > summary {
    padding: 9px 0;
    font-size: 13.5px;
    color: var(--ds-text-secondary, #3F3F46);
    list-style: none;
    cursor: pointer;
}
.jo-segperf-row > summary::-webkit-details-marker { display: none; }
.jo-segperf-row > summary::after {
    content: "";
    justify-self: end;
    width: 7px;
    height: 7px;
    border-right: 1.75px solid var(--ds-text-tertiary, #5B5B6B);
    border-bottom: 1.75px solid var(--ds-text-tertiary, #5B5B6B);
    transform: rotate(45deg);
    transition: transform .15s ease;
}
.jo-segperf-row[open] > summary::after { transform: rotate(-135deg); }
.jo-segperf-name { display: flex; flex-direction: column; min-width: 0; }
.jo-segperf-name b { overflow: hidden; font-weight: 600; color: var(--ds-text-primary, #18181B); text-overflow: ellipsis; white-space: nowrap; }
.jo-segperf small { font-size: 12px; font-weight: 400; color: var(--ds-text-tertiary, #5B5B6B); }
.jo-segperf-row .jo-tseg-facts { margin: 0 0 10px; padding: 8px 0 0; }

/* Ospiti e segmenti ▸ I segmenti più performanti (owner 21-ott-2026): le stesse
   righe, ognuna un link al dettaglio del segmento, con l'andamento a pallino. */
.jo-segperf--top .jo-segperf-head,
.jo-segperf-link {
    display: grid;
    grid-template-columns: minmax(0, 1.9fr) repeat(5, minmax(0, .7fr)) minmax(0, 1.25fr) minmax(0, 1.25fr) minmax(150px, 1.3fr) 16px;
    column-gap: 16px;
    align-items: center;
    gap: 12px;
}
.jo-segperf--top .jo-segperf-head { padding: 0 8px 6px; margin: 0 -8px; }
.jo-segperf--top .jo-segperf-head > span:last-of-type,
.jo-segperf-link > [data-label="Andamento"] { padding-left: 16px; }
.jo-segperf-link {
    margin: 0 -8px;
    padding: 10px 8px;
    border-radius: 8px;
    font-size: 13.5px;
    color: var(--ds-text-secondary, #3F3F46);
    transition: background .15s;
}
.jo-segperf-link:hover { background: var(--ds-row-hover, #F4F0FF); }
.jo-segperf-link::after {
    content: "";
    justify-self: end;
    width: 7px;
    height: 7px;
    border-top: 1.75px solid var(--ds-text-tertiary, #5B5B6B);
    border-right: 1.75px solid var(--ds-text-tertiary, #5B5B6B);
    transform: rotate(45deg);
}
.jo-segperf-desc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jo-segperf-share { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jo-segperf .jo-empty-dash { color: var(--ds-empty, #8A8A99); }
.jo-an.jo-an-loading { opacity: .55; pointer-events: none; transition: opacity .15s; }

@media (max-width: 639px) {
    .jo-segperf-head { display: none; }
    .jo-segperf-row > summary { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 12px; }
    .jo-segperf-row > summary::after { display: none; }
    .jo-segperf-name { grid-column: 1 / -1; }
    .jo-segperf-row > summary > .num { display: flex; justify-content: space-between; gap: 6px; text-align: left; }
    .jo-segperf-row > summary > .num::before { content: attr(data-label); color: var(--ds-text-tertiary, #5B5B6B); font-size: 12px; }
    .jo-segperf-link { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 12px; }
    .jo-segperf-link::after { display: none; }
    .jo-segperf-link > [data-label] { display: flex; justify-content: space-between; gap: 6px; text-align: left; }
    .jo-segperf-link > [data-label]::before { content: attr(data-label); color: var(--ds-text-tertiary, #5B5B6B); font-size: 12px; }
    /* Il valore resta nella sua metà: «● In crescita +154,9%» non esce dallo schermo. */
    .jo-segperf-link > [data-label] { min-width: 0; }
    .jo-segperf-link > [data-label] > *:not(small) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .jo-segperf-link > [data-label="Andamento"] { grid-column: 1 / -1; padding-left: 0; }

    .jo-mtable.jo-mtable--cards,
    .jo-mtable.jo-mtable--cards tbody,
    .jo-mtable.jo-mtable--cards tr,
    .jo-mtable.jo-mtable--cards td { display: block; width: 100%; }
    .jo-mtable.jo-mtable--cards thead { display: none; }
    .jo-mtable.jo-mtable--cards tr { padding: 10px 0; border-bottom: 1px solid var(--jo-ui-line-2); }
    .jo-mtable.jo-mtable--cards tr:last-child { border-bottom: 0; }
    .jo-mtable.jo-mtable--cards td { padding: 2px 0; border: 0; }
    .jo-mtable.jo-mtable--cards td.jo-mtable-title { padding-bottom: 4px; font-weight: 600; color: var(--ds-text-primary, #18181B); }
    .jo-mtable.jo-mtable--cards td.num { display: flex; justify-content: space-between; gap: 12px; text-align: right; white-space: normal; }
    .jo-mtable.jo-mtable--cards td.num::before { content: attr(data-label); color: var(--ds-text-tertiary, #5B5B6B); font-weight: 400; text-align: left; }
}

/* Report Risultati campagne email: ospiti raggiunti per mese (barre). */
.jo-trend {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.jo-trend-top {
    display: flex;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 6px;
    font-size: 13px;
}

.jo-trend-top b {
    font-weight: 600;
    text-transform: capitalize;
}

.jo-trend-top span {
    color: var(--jo-ui-muted);
    font-variant-numeric: tabular-nums;
}

.jo-trend-track {
    height: 8px;
    overflow: hidden;
    border-radius: 999px;
    background: var(--jo-ui-soft);
}

.jo-trend-track > i {
    display: block;
    height: 100%;
    border-radius: inherit;
    background: var(--jo-ui-accent);
}

/* ── Amministrazione ▸ Piano & Moduli: un riquadro a righe ─────────
   Icona · modulo (nome + descrizione su una riga) · stato (pallino) ·
   scadenza · azione. Stesse superfici e bordi delle tabelle. */
.jo-plan {
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-card);
    background: var(--ds-surface);
    box-shadow: var(--ds-shadow-rest);
    overflow: hidden;
}

.jo-plan-head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    border-bottom: 1px solid var(--ds-row-divider);
    background: var(--ds-surface-sunken);
}

.jo-plan-head h3 {
    margin: 0;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--ds-text-tertiary);
}

.jo-plan-count {
    font-size: 12px;
    color: var(--ds-text-placeholder);
}

.jo-plan-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.jo-plan-row {
    display: grid;
    grid-template-columns: 32px minmax(0, 1fr) 150px 210px auto;
    align-items: center;
    gap: 14px;
    min-height: 56px;
    padding: 8px 16px;
}

.jo-plan-row + .jo-plan-row {
    border-top: 1px solid var(--ds-row-divider);
}

.jo-plan-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    background: var(--ds-surface-sunken);
    color: var(--ds-text-tertiary);
}

.jo-plan-ic svg {
    width: 17px;
    height: 17px;
}

.jo-plan-name {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.jo-plan-name strong {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--ds-text-primary);
}

.jo-plan-name span {
    overflow: hidden;
    font-size: 12.5px;
    white-space: nowrap;
    text-overflow: ellipsis;
    color: var(--ds-text-tertiary);
}

.jo-plan-detail {
    font-size: 12.5px;
    color: var(--ds-text-secondary);
}

.jo-plan-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    min-width: 0;
}

/* Azioni del modulo solo icona (16px su area 32px); il fulmine "Attiva subito" è l'azione principale, in viola. */
.jo-plan-actions { gap: 2px; }
.jo-plan-actions .jo-icon-btn { width: 32px; height: 32px; }
.jo-plan-actions .jo-icon-btn.is-primary { color: var(--ds-accent, #7C5CCB); }
.jo-plan-actions .jo-icon-btn.is-primary:hover,
.jo-plan-actions .jo-icon-btn.is-primary:focus-visible {
    background: var(--ds-accent-soft, #F3EEFC);
    color: var(--ds-accent, #7C5CCB);
}

.jo-plan-foot {
    margin: 0;
    padding: 12px 16px;
    border-top: 1px solid var(--ds-row-divider);
    font-size: 13px;
    color: var(--ds-text-tertiary);
}

.jo-plan-group + .jo-plan-group .jo-plan-head {
    border-top: 1px solid var(--ds-row-divider);
}

/* Barra della vista: conteggio a sinistra, Lista | Card a destra (come le tabelle). */
.jo-plan-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 10px 16px;
    border-bottom: 1px solid var(--ds-row-divider);
    font-size: 12.5px;
    color: var(--ds-text-tertiary);
}

/* Vista Card: stesse voci, in tessere — icona e nome, descrizione intera,
   stato e scadenza, azione in fondo. */
.jo-plan--cards .jo-plan-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 12px;
    padding: 12px 16px 16px;
}

.jo-plan--cards .jo-plan-row {
    grid-template-columns: 32px minmax(0, 1fr);
    grid-template-rows: auto auto 1fr;
    align-items: start;
    row-gap: 8px;
    column-gap: 10px;
    padding: 12px 14px;
    border: 1px solid var(--ds-border);
    border-radius: 10px;
    background: var(--ds-surface);
}

.jo-plan--cards .jo-plan-row + .jo-plan-row { border-top: 1px solid var(--ds-border); }

.jo-plan--cards .jo-plan-name span {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    white-space: normal;
}

.jo-plan--cards .jo-plan-row > .jo-cell-status { grid-column: 1 / -1; }
.jo-plan--cards .jo-plan-row > .jo-plan-detail { grid-column: 1 / -1; margin-top: -4px; }

.jo-plan--cards .jo-plan-row > .jo-plan-actions {
    grid-column: 1 / -1;
    align-self: end;
    justify-content: flex-start;
}

.jo-plan--cards .jo-plan-actions:empty { display: none; }

/* Tablet e telefono: stato e scadenza sotto il nome, azione a capo. */
@media (max-width: 900px) {
    .jo-plan-row {
        grid-template-columns: 32px minmax(0, 1fr);
        row-gap: 4px;
    }

    .jo-plan-row > .jo-cell-status,
    .jo-plan-row > .jo-plan-detail,
    .jo-plan-row > .jo-plan-actions {
        grid-column: 2;
        justify-content: flex-start;
    }
}

/* ── Assistenza ───────────────────────────────────────────────────
   Card sempre aperte una sotto l'altra (owner 15-ott-2026). */
.jo-assist {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

/* Revisione 19-ott-2026: il messaggio è un'area di quattro righe a tutta
   larghezza, Invia sotto a destra. */
.jo-assist-form {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
}

.jo-assist-form > .fi-fo-component-ctn {
    flex: 1 1 auto;
    min-width: 0;
    row-gap: 16px;
}

.jo-assist-submit {
    display: flex;
    flex: none;
    justify-content: flex-end;
}

/* Contatti e scorciatoie: righe icona in tessera · testo (· freccia). */
.jo-assist-rows {
    display: flex;
    flex-direction: column;
    margin: 0;
    padding: 0;
    list-style: none;
}

.jo-assist-rows > li + li {
    border-top: 1px solid var(--ds-row-divider, var(--ds-border));
}

.jo-assist-row {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 0 -8px;
    padding: 9px 8px;
    border-radius: 8px;
    color: var(--ds-text-secondary);
}

a.jo-assist-row[href]:hover {
    background: var(--ds-row-hover, #F6F2FD);
}

.jo-assist-ic {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    background: var(--ds-accent-soft, #F1EAFD);
    color: var(--ds-accent, #7145D9);
}

.jo-assist-ic svg {
    width: 16px;
    height: 16px;
}

.jo-assist-row-txt {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    min-width: 0;
    line-height: 1.35;
}

.jo-assist-row-txt b {
    overflow: hidden;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--ds-text-primary);
    text-overflow: ellipsis;
    white-space: nowrap;
}

.jo-assist-row-txt small {
    font-size: 12px;
    color: var(--ds-text-tertiary);
}

.jo-assist-go {
    flex: none;
    width: 16px;
    height: 16px;
    color: var(--ds-text-tertiary);
}

/* Novità: il mese in una piccola etichetta, il titolo, i punti; una riga
   ciascuna (revisione 19-ott-2026: testo lungo → puntini, intero nel tooltip). */
.jo-assist-news {
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.jo-assist-news-label {
    display: inline-flex;
    padding: 1px 8px;
    border-radius: 999px;
    background: var(--ds-surface-2, #F3F4F8);
    font-size: 11.5px;
    font-weight: 600;
    color: var(--ds-text-tertiary);
}

.jo-assist-news-title {
    margin-top: 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--ds-text-primary);
}

.jo-assist-news ul {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin: 8px 0 0;
    padding: 0;
    list-style: none;
    font-size: 13px;
    color: var(--ds-text-secondary);
}

.jo-assist-news-title,
.jo-assist-news li {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.jo-assist-news li {
    position: relative;
    padding-left: 16px;
}

.jo-assist-news li::before {
    content: "";
    position: absolute;
    top: .55em;
    left: 4px;
    width: 5px;
    height: 5px;
    border-radius: 999px;
    background: var(--ds-lime-strong, #9DBB1A);
}

/* ── Panoramica: widget scelti dall'utente (owner 2-ott-2026) ────────────
 * Righe scelte dall'utente (owner 9-ott-2026: "lo metto tra due grafici e si
 * mette tra quei due, gli altri si restringono"): ogni riga è una riga flex
 * (.jo-hd-break la chiude, DashboardWidgets::rowStarts); nella riga i widget
 * si dividono lo spazio secondo il tipo — gli andamenti nel tempo ('wide')
 * prendono il doppio degli altri, nessuno scende sotto un terzo (massimo 3
 * per riga, il quarto va sotto), 'full' sempre da solo. Le righe di partenza
 * le fa DashboardWidgets::rowStarts con le misure del catalogo. Le card della stessa
 * riga alte uguali, il piede in fondo. Sotto i 1100px uno per riga. */
.jo-hd-board {
    display: flex;
    flex-wrap: wrap;
    column-gap: 16px;
    align-items: stretch;
}

/* La distanza fra le righe la dà il margine sotto i widget: il fine riga non la raddoppia. */
.jo-hd-board > * { flex: 1 1 100%; margin-bottom: 16px; }

/* Fine riga: un elemento alto zero largo tutta la riga. */
.jo-hd-board > .jo-hd-break { flex: 0 0 100%; height: 0; margin: 0; }

@media (min-width: 1100px) {
    .jo-hd-board > .jo-hd-w { flex: 1 1 0; min-width: calc((100% - 32px) / 3); }
    .jo-hd-board > .jo-hd-w--wide { flex-grow: 2; }
    /* A riga intera di partenza (la riga la chiude rowStarts); accanto ad altri si stringe come loro. */
    .jo-hd-board > .jo-hd-w--full { flex-grow: 3; }
}

/* Si prende e si sposta da qualsiasi punto della card. */
.jo-hd-w[draggable="true"] { cursor: grab; }
.jo-hd-w[draggable="true"]:active { cursor: grabbing; }
.jo-hd-w a, .jo-hd-w button { cursor: pointer; }
.jo-hd-w-grip { cursor: grab; }

.jo-hd-w { display: flex; min-width: 0; }
.jo-hd-w > .jo-an-card { display: flex; flex: 1; flex-direction: column; min-width: 0; }
.jo-hd-w > .jo-an-card > .jo-occ-legend,
.jo-hd-w > .jo-an-card > .jo-hd-foot { margin-top: auto; }
.jo-hd-w > .jo-an-card > .jo-occ-scroll { margin-bottom: 12px; }

/* Grafici che riempiono la card (owner 9-ott-2026: "niente spazi vuoti, i
 * grafici si adattano anche quando li sposti"): le card della stessa riga
 * restano alte uguali e il grafico si allunga fino al fondo della sua,
 * partendo dalla sua altezza di sempre (--aa-h, x-analytics.chart). Base 0:
 * è la riga a decidere l'altezza, non il grafico (niente giri di misure).
 * Lo stesso per lo stato vuoto, al centro dello spazio. Vale per Panoramica,
 * Dashboard Generale e Panoramica del chatbot (.jo-hd-board). */
.jo-hd-w > .jo-an-card > .aa-chart,
.jo-hd-w > .jo-an-card > * > .aa-chart:only-child {
    flex: 1 1 0;
    height: auto !important;
    min-height: var(--aa-h, 180px);
}
.jo-hd-w > .jo-an-card > .jo-an-empty { flex: 1 1 auto; justify-content: center; }

/* Strutture a confronto: grafico e tabella affiancati nella stessa card. */
.jo-hd-split { display: grid !important; gap: 20px; }

@media (min-width: 1100px) {
    .jo-hd-split { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
}

.jo-hd-board-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    padding: 32px 16px;
    color: var(--ds-text-tertiary);
    font-size: 13px;
}

.jo-hd-board-empty > svg { width: 28px; height: 28px; color: var(--ds-text-placeholder); }

/* Carosello dei widget (hotel-dashboard/picker.blade.php): pannello fisso in
 * fondo allo schermo, a tutta larghezza, tessere in fila che scorrono in
 * orizzontale. Niente velo: la Panoramica sopra resta visibile e si aggiorna. */
.jo-wpick-dock {
    position: fixed;
    inset: auto 0 0 0;
    z-index: 40;
    padding: 10px 20px 12px;
    border-top: 1px solid var(--ds-border);
    background: var(--ds-bg-sidebar);
    box-shadow: 0 -8px 24px -8px rgba(20, 22, 40, .14);
}

.jo-wpick-in { transition: transform .2s ease, opacity .2s ease; }
.jo-wpick-from { transform: translateY(100%); opacity: 0; }
.jo-wpick-to { transform: translateY(0); opacity: 1; }

.jo-wpick-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 8px;
}

.jo-wpick-title { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; min-width: 0; }
.jo-wpick-title b { font-size: 14px; font-weight: 600; color: var(--ds-text-primary); }
.jo-wpick-count { font-size: 12.5px; color: var(--ds-text-tertiary); }
.jo-wpick-nav { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }
.jo-wpick-nav .jo-icon-btn:disabled { opacity: .4; cursor: default; }

.jo-wpick-reset {
    margin-right: 8px;
    padding: 4px 8px;
    border-radius: 8px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--ds-text-secondary);
}

.jo-wpick-reset:hover { background: var(--ds-surface-hover); color: var(--ds-text-primary); }

.jo-wpick-track {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 196px;
    gap: 10px;
    margin: 0;
    padding: 2px 2px 6px;
    list-style: none;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x proximity;
    scrollbar-width: thin;
}

@media (max-width: 640px) {
    .jo-wpick-dock { padding: 12px 16px 14px; }
    .jo-wpick-reset { display: none; }
}

.jo-wpick-card {
    display: flex;
    flex-direction: column;
    scroll-snap-align: start;
    border: 1px solid var(--ds-border);
    border-radius: 10px;
    background: var(--ds-surface);
    overflow: hidden;
    transition: border-color .12s ease;
}

.jo-wpick-card:hover { border-color: var(--ds-border-strong); }
.jo-wpick-card.is-on { border-color: var(--ds-step-current-bd); }

.jo-wpick-prev {
    position: relative;
    display: grid;
    place-items: center;
    height: 52px;
    padding: 8px 14px;
    background: var(--ds-surface-sunken);
    border-bottom: 1px solid var(--ds-row-divider);
}

.jo-wpick-prev svg { width: 100%; height: 100%; }
.jo-wpick-prev svg rect,
.jo-wpick-prev svg circle { fill: var(--ds-border); }
.jo-wpick-prev svg :is(rect, circle).on { fill: var(--ds-accent); opacity: .55; }
.jo-wpick-prev--dots svg circle:not(.on) { fill: none; stroke: var(--ds-border-strong); stroke-width: 1; }
.jo-wpick-prev svg polyline { stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.jo-wpick-prev svg polyline.on { stroke: var(--ds-accent); opacity: .7; }
.jo-wpick-prev svg polyline.alt { stroke: var(--ds-lime-strong); opacity: .7; }

.jo-wpick-badge {
    position: absolute;
    top: 6px;
    right: 6px;
    display: inline-flex;
    align-items: center;
    gap: 3px;
    padding: 1px 8px 1px 6px;
    border: 1px solid var(--ds-step-done-bd);
    border-radius: 999px;
    background: var(--ds-step-done-bg);
    color: var(--ds-step-done-fg);
    font-size: 11.5px;
    font-weight: 500;
}

.jo-wpick-badge svg { width: 12px; height: 12px; }

.jo-wpick-body { flex: 1; padding: 8px 12px 2px; }
.jo-wpick-body b { display: block; font-size: 13px; font-weight: 600; color: var(--ds-text-primary); }
.jo-wpick-body p {
    display: -webkit-box;
    margin: 2px 0 0;
    overflow: hidden;
    font-size: 12px;
    line-height: 1.35;
    color: var(--ds-text-tertiary);
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

.jo-wpick-actions {
    display: flex;
    align-items: center;
    gap: 2px;
    padding: 6px 10px 10px;
}

.jo-wpick-actions .jo-icon-btn:disabled { opacity: .35; cursor: default; }
.jo-wpick-cta { margin-left: auto; }

/* Nascondi un widget: occhio barrato nell'angolo, al passaggio sulla card
 * (sempre visibile su touch e da tastiera). Le azioni della testata della
 * card (Apri, frecce) si spostano per lasciargli posto. */
.jo-hd-w { position: relative; }

.jo-hd-w-tools {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 2;
    display: flex;
    gap: 2px;
    border-radius: 8px;
    background: var(--ds-surface);
    opacity: 0;
    transition: opacity .12s ease;
}

.jo-hd-w:hover .jo-hd-w-tools,
.jo-hd-w-tools:focus-within { opacity: 1; }

@media (hover: none) {
    .jo-hd-w-tools { opacity: 1; }
    .jo-hd-w-grip { display: none !important; }
}

.jo-hd-w-grip { cursor: grab; }
.jo-hd-w-grip:active { cursor: grabbing; }
html.jo-wpick-dragging .jo-hd-w-tools { opacity: 0; }
.jo-hd-w.is-dragged > .jo-an-card { opacity: .4; outline: 2px dashed var(--ds-accent); outline-offset: -2px; }

.jo-hd-w > .jo-an-card > .jo-hd-card-h,
.jo-hd-w > .jo-an-card > h3 { padding-right: 64px; }
.jo-hd-w > .jo-hd-split > .jo-mtable-wrap { margin-top: 30px; }

/* Con il carosello aperto la Panoramica si può scorrere fino in fondo. */
html.jo-wpick-open .fi-main { padding-bottom: 230px; }

/* Velo sotto il carosello: la pagina si scurisce, il carosello resta chiaro. */
.jo-wpick-veil {
    position: fixed;
    inset: 0;
    z-index: 38;
    background: rgba(15, 17, 26, .42);
}

.jo-wpick-fade { transition: opacity .18s ease; }
.jo-wpick-fade-0 { opacity: 0; }
.jo-wpick-fade-1 { opacity: 1; }

/* Tessere da aggiungere: si trascinano nella pagina. */
.jo-wpick-card[draggable='true'] { cursor: grab; }
.jo-wpick-card[draggable='true']:active { cursor: grabbing; }
.jo-wpick-card.is-dragged { opacity: .45; border-style: dashed; }

/* Durante il trascinamento la Panoramica sale sopra il velo come zona di
 * rilascio; il widget sotto il cursore mostra dove andrà il nuovo (prima di lui). */
.jo-hd-board { position: relative; }

html.jo-wpick-dragging .jo-hd-board.is-drop {
    z-index: 39;
    border-radius: 14px;
    outline: 2px dashed var(--ds-accent);
    outline-offset: 8px;
}

.jo-hd-w.is-before::before,
.jo-hd-w.is-after::after {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: -10px;
    width: 3px;
    border-radius: 3px;
    background: var(--ds-accent);
}

/* Lasciato sulla metà destra: va dopo, la linea sta a destra. */
.jo-hd-w.is-after::after { left: auto; right: -10px; }

.jo-hd-drop-hint {
    position: fixed;
    top: 84px;
    left: 50%;
    z-index: 41;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    border-radius: 999px;
    background: var(--ds-accent);
    color: var(--ds-surface);
    font-size: 13px;
    font-weight: 500;
    transform: translateX(-50%);
    pointer-events: none;
    box-shadow: var(--ds-shadow-raised);
}

.jo-hd-drop-hint > span { display: inline-flex; align-items: center; gap: 6px; }
.jo-hd-drop-hint svg { width: 16px; height: 16px; }

/* Il widget appena aggiunto si illumina: sopra il velo, bordo e alone lilla. */
.jo-hd-w.is-glow { z-index: 39; }

.jo-hd-w.is-glow > .jo-an-card {
    box-shadow: 0 0 0 2px var(--ds-accent), 0 14px 36px -8px rgba(124, 92, 203, .5);
    animation: jo-hd-glow 1.2s ease-out;
}

@keyframes jo-hd-glow {
    0% { transform: scale(.97); box-shadow: 0 0 0 0 var(--ds-accent), 0 0 0 0 rgba(124, 92, 203, 0); }
    40% { transform: scale(1.01); }
    100% { transform: scale(1); }
}

@media (prefers-reduced-motion: reduce) {
    .jo-hd-w.is-glow > .jo-an-card { animation: none; }
}

/* Chatbot ▸ Panoramica a widget: le card .jo-panel nella stessa griglia
 * della Panoramica (alte uguali per riga, piede in fondo, posto per gli
 * strumenti del widget nell'angolo). */
.jo-hd-w > .jo-panel { display: flex; flex: 1; flex-direction: column; min-width: 0; margin: 0; }
.jo-hd-w > .jo-panel > .jo-ca-link,
.jo-hd-w > .jo-panel > .jo-ca-foot { margin-top: auto; }
.jo-hd-w > .jo-panel > .jo-ca-head { padding-right: 64px; }

/* Da completare (owner 7-ott-2026): barra di avanzamento sottile e righe come "Da vedere", su due colonne da 1024px. */
.jo-setup-card .jo-hd-card-h { align-items: flex-start; margin-bottom: 10px; }
.jo-setup-card .jo-hd-card-h .jo-an-card-hint { margin: 2px 0 0; }

.jo-setup-bar {
    height: 4px;
    margin: 0 0 6px;
    overflow: hidden;
    border-radius: 999px;
    background: var(--jo-ui-soft);
}

.jo-setup-bar > span {
    display: block;
    height: 100%;
    border-radius: inherit;
    background: var(--ds-lime-strong);
}

@media (min-width: 1024px) {
    .jo-setup-links { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 28px; }
    .jo-setup-links > li + li { border-top: 0; }
    .jo-setup-links > li { border-bottom: 1px solid var(--jo-ui-line-2); }
}

/* Card Chatbot in Panoramica: titolo delle barre (owner 7-ott-2026). */
.jo-hd-out-title { margin: 14px 0 -4px; font-size: 12px; font-weight: 600; color: var(--ds-text-tertiary, #5B5B6B); }
.jo-setup-links .jo-setup-do { font-size: 12.5px; font-weight: 500; color: var(--jo-primary-600, #7C5CCB); white-space: nowrap; }

/* Widget nascosto: "Annulla" per 5 secondi, la barra si accorcia (HasWidgetBoard::removeWidget). */
.jo-undo-bar {
    display: block;
    height: 3px;
    margin-top: 8px;
    border-radius: 999px;
    background: var(--ds-accent, #7C5CCB);
    transform-origin: left center;
    animation: jo-undo-countdown 5s linear forwards;
}
.fi-no-notification:hover .jo-undo-bar { animation-play-state: paused; }
@keyframes jo-undo-countdown { from { transform: scaleX(1); } to { transform: scaleX(0); } }

/* Provenienza delle prenotazioni (Panoramica, owner 9-ott-2026): una riga per
   canale col logo, la barra, il numero e la percentuale. */
.jo-bks { display: grid; flex: 1; align-content: center; gap: 10px; margin-top: 12px; }
.jo-bks-row { display: grid; grid-template-columns: 24px minmax(0, 9rem) 1fr auto 3rem; align-items: center; gap: 10px; font-size: 13px; }
.jo-bks-logo { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 6px; background: var(--ds-surface-sunken, #F3F4F8); color: var(--ds-text-tertiary, #5B5B6B); }
.jo-bks-logo svg { width: 15px; height: 15px; }
.jo-bks-logo.is-brand { background: none; }
.jo-bks-logo.is-brand svg { width: 22px; height: 22px; }
.jo-bks-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ds-text-secondary, #3F3F46); }
.jo-bks-bar { height: 8px; border-radius: 999px; background: var(--ds-surface-sunken, #F3F4F8); overflow: hidden; }
.jo-bks-bar > i { display: block; height: 100%; border-radius: inherit; background: var(--ds-accent, #7C5CCB); opacity: .75; }
.jo-bks-n { font-variant-numeric: tabular-nums; color: var(--ds-text-primary, #18181B); }
.jo-bks-pct { text-align: right; font-variant-numeric: tabular-nums; color: var(--ds-text-tertiary, #5B5B6B); }

/* ── Piano e moduli, revisione 19-ott-2026 ────────────────────────
 * Sul telefono una riga per modulo: icona, nome e pallino dello stato (il
 * nome dello stato nel tooltip), la data o la richiesta solo se ci sono;
 * niente descrizione né switch Lista | Card (si resta in Lista). */
@media (max-width: 639px) {
    .jo-plan-bar { display: none; }

    .jo-plan .jo-plan-row,
    .jo-plan.jo-plan--cards .jo-plan-row {
        grid-template-columns: 28px minmax(0, 1fr) auto auto;
        grid-template-rows: none;
        align-items: center;
        row-gap: 2px;
        column-gap: 10px;
        min-height: 48px;
        padding: 8px 12px;
        border: 0;
        border-radius: 0;
    }

    .jo-plan.jo-plan--cards .jo-plan-list { display: block; padding: 0; }
    .jo-plan.jo-plan--cards .jo-plan-row + .jo-plan-row { border-top: 1px solid var(--ds-row-divider); }

    .jo-plan .jo-plan-ic { width: 28px; height: 28px; }
    .jo-plan .jo-plan-name span { display: none; }

    .jo-plan .jo-plan-row > .jo-cell-status { grid-column: 3; grid-row: 1; }
    .jo-plan .jo-plan-row > .jo-plan-actions { grid-column: 4; grid-row: 1; }
    .jo-plan .jo-plan-row > .jo-plan-detail { grid-column: 2 / -1; grid-row: 2; margin: 0; font-size: 12px; color: var(--ds-text-tertiary); }
    .jo-plan .jo-plan-row > .jo-plan-detail--quiet { display: none; }
    .jo-plan .jo-plan-actions:empty { display: none; }

    .jo-plan .jo-plan-state {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip: rect(0 0 0 0);
        white-space: nowrap;
    }
}

/* ── Panoramica, revisione 19-ott-2026 ────────────────────────────
 * - Provenienza delle prenotazioni: le righe partono dall'alto, non
 *   centrate nella card (lasciavano ~90px vuoti sopra e sotto).
 * - Campagne: senza campagne nel periodo il messaggio sta al centro dello
 *   spazio che resta, invece di lasciare mezza card vuota sotto.
 * - Strumenti del widget (sposta, nascondi) uguali su ogni card: la card
 *   tiene il suo contenuto (grafici, tabelle, tooltip) sotto di loro, così
 *   compaiono sempre al passaggio e restano visibili su touch. */
.jo-bks { align-content: start; }

.jo-hd-w > .jo-an-card { isolation: isolate; }
.jo-hd-w-tools { z-index: 3; }

.jo-hd-w > .jo-an-card:has(> .jo-hd-list) { display: flex; flex-direction: column; }
/* Attività recenti senza righe: la frase non sta nella colonna dell'icona. */
.jo-hd-timeline > li.jo-hd-none { display: block; }
.jo-hd-w > .jo-an-card > .jo-hd-list:has(> .jo-hd-none:only-child),
.jo-hd-w > .jo-an-card > .jo-hd-timeline:has(> .jo-hd-none:only-child) {
    display: grid;
    flex: 1;
    place-items: center;
    text-align: center;
}
/* Oggi (19-ott-2026, Agenda per ruolo): da fare e da sistemare, righe come
 * "Da vedere", su due colonne da 1024px; niente da fare = segno verde e una frase. */
.jo-today-card .jo-hd-card-h { align-items: flex-start; margin-bottom: 4px; }
.jo-today-card .jo-hd-card-h .jo-an-card-hint { margin: 2px 0 0; }
.jo-today-at { color: var(--jo-ui-muted); font-weight: 400; }
.jo-today-cols { display: grid; gap: 4px 28px; }
.jo-today-h {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 10px 0 0;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .02em;
    text-transform: uppercase;
    color: var(--jo-ui-muted);
}
.jo-today-h b {
    display: inline-flex;
    min-width: 20px;
    height: 20px;
    align-items: center;
    justify-content: center;
    padding: 0 6px;
    border-radius: 999px;
    font-size: 12px;
    color: var(--ds-accent-fg);
    background: var(--ds-accent-soft);
}
.jo-today-links { margin-top: 2px; }
.jo-today-links .jo-today-do { font-size: 12.5px; font-weight: 500; color: var(--jo-primary-600, #7C5CCB); white-space: nowrap; }
.jo-today-urgent {
    display: inline-block;
    width: 7px;
    height: 7px;
    margin-right: 6px;
    border-radius: 999px;
    background: var(--ds-warn-dot, #D9A048);
    vertical-align: 1px;
}
.jo-today-empty { display: flex; align-items: center; gap: 12px; padding: 8px 0 4px; }
.jo-today-empty .jo-kpi-ic { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 10px; }
.jo-today-empty .jo-kpi-ic svg { width: 20px; height: 20px; }
.jo-today-empty b { display: block; font-size: 14px; font-weight: 600; color: var(--jo-ui-ink); }
.jo-today-empty small { display: block; font-size: 12px; color: var(--jo-ui-muted); }

@media (min-width: 1024px) {
    .jo-today-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Seleziona un hotel ▸ "Le tue strutture oggi" (partner, 19-ott-2026) e
 * righe dell'Agenda nella Dashboard Generale. */
.jo-selhotel-agenda { margin: 0 0 14px; padding: 0 0 10px; border-bottom: 1px solid var(--jo-ui-line-2); }
.jo-selhotel-agenda-h { margin: 0 0 4px; font-size: 12px; font-weight: 600; letter-spacing: .02em; text-transform: uppercase; color: var(--jo-ui-muted); }
.jo-selhotel-agenda ul { margin: 0; padding: 0; list-style: none; }
.jo-selhotel-agenda .jo-kpi-ic { display: inline-flex; width: 28px; height: 28px; flex-shrink: 0; align-items: center; justify-content: center; border-radius: 8px; }
.jo-selhotel-agenda-go { font-size: 12.5px; font-weight: 500; color: var(--jo-primary-600, #7C5CCB); white-space: nowrap; }
.jo-gd-agenda-row { grid-template-columns: 28px minmax(0, 1fr) auto 32px; }
.jo-gd-agenda-row .jo-gd-enter { justify-self: end; }
