@import '_content/Bora.Blazor.Components/Bora.Blazor.Components.b5afgsg50h.bundle.scp.css';
@import '_content/Bora.Blazor/Bora.Blazor.jf8cl6m2ot.bundle.scp.css';
@import '_content/Cefo.Blazor/Cefo.Blazor.y4aub4d93k.bundle.scp.css';
@import '_content/DeFa.Blazor/DeFa.Blazor.y8z9ikn8y4.bundle.scp.css';
@import '_content/NodeAir.Assistant.Blazor/NodeAir.Assistant.Blazor.25n62ho4so.bundle.scp.css';
@import '_content/Oss.Alerts.Blazor/Oss.Alerts.Blazor.97kuwimdc4.bundle.scp.css';
@import '_content/Oss.Filters.Blazor/Oss.Filters.Blazor.tcd8r2hg0l.bundle.scp.css';
@import '_content/Oss.Menu.Blazor/Oss.Menu.Blazor.36o7zkrtkd.bundle.scp.css';
@import '_content/Oss.Settings.Blazor/Oss.Settings.Blazor.qhcwns5zxw.bundle.scp.css';
@import '_content/Scarnas.Blazor.Components/Scarnas.Blazor.Components.8w9pwpweek.bundle.scp.css';
@import '_content/Scarnas.SDK.BlazorAuth/Scarnas.SDK.BlazorAuth.6x9hnb453o.bundle.scp.css';
@import '_content/Servel.Blazor.Forms/Servel.Blazor.Forms.609oh5ogbc.bundle.scp.css';
@import '_content/Tabiot.Blazor.Breadcrumb/Tabiot.Blazor.Breadcrumb.ypcz477a8p.bundle.scp.css';
@import '_content/Tabiot.Blazor.Conversion/Tabiot.Blazor.Conversion.rutrgx2pjl.bundle.scp.css';
@import '_content/Tabiot.Blazor.Core/Tabiot.Blazor.Core.wfr2gml081.bundle.scp.css';
@import '_content/Tabiot.Blazor.DetailsCard/Tabiot.Blazor.DetailsCard.ulqc6uogr5.bundle.scp.css';
@import '_content/Tabiot.Blazor.DxColumnChooser/Tabiot.Blazor.DxColumnChooser.m6085f0y0m.bundle.scp.css';
@import '_content/Tabiot.Blazor.Layouts/Tabiot.Blazor.Layouts.j5crb2ebzl.bundle.scp.css';
@import '_content/Tabiot.Blazor.Loading/Tabiot.Blazor.Loading.hxb6uypiw6.bundle.scp.css';
@import '_content/Tabiot.Blazor.SearchBox/Tabiot.Blazor.SearchBox.hl5yquya2h.bundle.scp.css';
@import '_content/Tabiot.Blazor.Toast/Tabiot.Blazor.Toast.0g3v6srpia.bundle.scp.css';
@import '_content/Tabiot.Blazor.Wizard/Tabiot.Blazor.Wizard.v96prrzmrc.bundle.scp.css';

/* /Components/iso/SprintView.razor.rz.scp.css */
[b-zo3emn6r4c] .parent-region-row {
    background-color: var(--custom-row-color, #7a7d84);
}

[b-zo3emn6r4c] td.ko-threshold {
    background-color: rgba(245, 198, 203, 0.5);
}

[b-zo3emn6r4c] td.ok-threshold {
    background-color: rgba(198, 245, 203, 0.5);
}

[b-zo3emn6r4c] td.notsook-threshold {
    background-color: rgba(245, 245, 203, 0.5);
}
/* /Components/sch/CalendarEventsBand.razor.rz.scp.css */
.bandRow > td[b-mxkpej2ka3] {
    padding: 0.15rem 0.25rem;
    vertical-align: middle;
    font-size: 0.8125rem;
    line-height: 1.2;
}

.bandLabel[b-mxkpej2ka3] {
    font-weight: 600;
    text-transform: uppercase;
    font-size: 0.75rem;
    letter-spacing: 0.03em;
}

.bandChip[b-mxkpej2ka3] {
    border-radius: 0.25rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* colori di ripiego quando l'evento non ne porta uno suo */
.bandEvent[b-mxkpej2ka3] {
    background-color: rgba(var(--bs-primary-rgb), 0.25);
}

.bandHoliday[b-mxkpej2ka3] {
    background-color: rgba(var(--bs-warning-rgb), 0.3);
}

/* una festività non goduta si distingue senza cambiare colore di fondo */
.notEnjoyed .bandChipText[b-mxkpej2ka3] {
    text-decoration: line-through;
    opacity: 0.75;
}

/* i tratti troncati perdono l'angolo dal lato in cui proseguono */
.continuesBefore[b-mxkpej2ka3] {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

.continuesAfter[b-mxkpej2ka3] {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

.bandChipText[b-mxkpej2ka3] {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* .bandInternal non ha stile ed e voluto: e solo un aggancio per l'esportazione PDF, che scarta
   dal rendering gli elementi corrispondenti ai selettori in calendar_print_ignore_selectors.
   La classe la applica CalendarEventsBand.GetCellClass agli eventi con visibleToWorkers falso.
   Non rimuoverla dal markup perche "non ha regole CSS": la sua assenza non si vede a schermo,
   si vede solo in un PDF che mostra ai dipendenti eventi interni. */
/* /Components/sch/CalendarTableRow.razor.rz.scp.css */
.inLending[b-k6zbacdcam] {
    pointer-events: none;
    background-color: rgba(var(--bs-secondary-rgb), 0.35) !important;
}

.cellTemplate[b-k6zbacdcam] {
    min-width: 84px;
    max-width: 150px;
    padding: 0.2rem 0.15rem;
    vertical-align: middle;
    position: relative;
    font-size: 0.875rem;
    line-height: 1.25;
}

/* i due badge condividono misura e area cliccabile */
.absenceBadge[b-k6zbacdcam] {
    position: absolute;
    top: 0;
    left: 0;
    font-size: 0.75rem;
    line-height: 1;
    padding: 1px 2px;
}

.clockingBadge[b-k6zbacdcam] {
    position: absolute;
    top: 0;
    right: 0;
    font-size: 0.75rem;
    line-height: 1;
    padding: 1px 2px;
}

small[b-k6zbacdcam] {
    font-size: 10px;
}
/* /Components/sch/WorkshiftsCalendar.razor.rz.scp.css */
[b-vlir4ursx2] p {
    margin: 0 !important;
    padding: 0 !important;
}

[b-vlir4ursx2] .borderTop {
    border-top: 2px solid var(--bs-body-color) !important;
    padding: 0;
}

[b-vlir4ursx2] .borderRight {
    border-right: 2px solid var(--bs-body-color) !important;
    padding: 0;
}

[b-vlir4ursx2] .bg-higlight {
    --bs-bg-opacity: 0.3;
    background-color: rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity)) !important;
}

/* righe mansione: tinta leggera per marcare la separazione tra gruppi (regge tema chiaro/scuro) */
[b-vlir4ursx2] tr.jobRow > td {
    background-color: rgba(var(--bs-primary-rgb), 0.12) !important;
}

/* prima colonna sticky: tinta sovrapposta al body-bg per restare opaca durante lo scroll */
[b-vlir4ursx2] tr.jobRow > td:first-child {
    background-color: var(--bs-body-bg) !important;
    background-image: linear-gradient(rgba(var(--bs-primary-rgb), 0.12), rgba(var(--bs-primary-rgb), 0.12)) !important;
}

[b-vlir4ursx2] .firstColumn {
    min-width: 100px;
    max-width: 300px;
    padding: 0.3rem;
    text-align: start;
}

/* Fixed header */
/* intestazioni più ariose: oggi il padding è 3px su due righe di testo */
[b-vlir4ursx2] table thead th {
    position: sticky;
    top: 0;
    z-index: 3;
    background-color: var(--bs-body-bg) !important;
    padding: 0.35rem 0.25rem;
    font-size: 0.875rem;
    line-height: 1.2;
}

    [b-vlir4ursx2] table thead th:first-child {
        position: sticky;
        left: 0;
        z-index: 4;
    }

[b-vlir4ursx2] table tbody th {
    position: sticky;
    left: 0;
    background-color: var(--bs-body-bg) !important;
    z-index: 1;
}

[b-vlir4ursx2] .command-row {
    position: sticky;
    top: 0;
    z-index: 2;
    background-color: var(--bs-body-bg) !important;
}

/* Fixed first column */
[b-vlir4ursx2] tr > td:first-child {
    position: sticky;
    left: 0;
    box-shadow: inset -2px 0px 0px 0px var(--bs-border-color), -3px 0px 0px 0px var(--bs-border-color);
    background-color: var(--bs-body-bg) !important;
    z-index: 1;
}

/* intestazioni: il weekend si stacca, oggi si riconosce a colpo d'occhio */
[b-vlir4ursx2] th.weekendHeader {
    background-image: linear-gradient(rgba(var(--bs-secondary-rgb), 0.18), rgba(var(--bs-secondary-rgb), 0.18)) !important;
}

[b-vlir4ursx2] th.todayHeader {
    box-shadow: inset 0 -3px 0 0 var(--bs-primary);
    font-weight: 600;
}

/* la colonna ore resta distinguibile senza dominare */
[b-vlir4ursx2] .weeklyHours {
    min-width: 56px;
    font-size: 0.8125rem;
}
/* /Components/trp/Planning.razor.rz.scp.css */
/* ::deep perché il CSS isolato non marca la radice di un componente figlio: senza, il campo data prende tutta la riga. */
.planning-date-host[b-r382068i41]  .planning-date {
    width: 11rem;
}

.planning-group[b-r382068i41] {
    margin-bottom: 0.75rem;
    border: 1px solid var(--bs-border-color);
    border-radius: 0.375rem;
    overflow: hidden;
}

.planning-group-head[b-r382068i41] {
    background-color: var(--bs-tertiary-bg);
    border-bottom: 1px solid var(--bs-border-color);
}

/* Le tre bande del mockup: ambra per «non ho ancora deciso», grigia per «lavora senza mezzo» e per gli assenti. */
.planning-group-unassigned .planning-group-head[b-r382068i41] { background-color: rgba(var(--bs-warning-rgb), 0.25); }
.planning-group-internal .planning-group-head[b-r382068i41],
.planning-group-noAsset .planning-group-head[b-r382068i41],
.planning-group-absent .planning-group-head[b-r382068i41] { background-color: rgba(var(--bs-secondary-rgb), 0.2); }

/* Il badge del conteggio dentro il pulsante primario: il tema impone il bianco ai discendenti del
   bottone con !important, e il numero sparirebbe su sfondo chiaro (bianco su bianco, collaudo 27/08).
   Solo un !important lo riporta a galla — verificato: senza, la regola non morde. */
.planning-publish-count[b-r382068i41] { color: var(--bs-body-color) !important; }

/* I contatori della testata: numero grande a cifre di pari larghezza, etichetta piccola sotto il numero. */
.planning-counter b[b-r382068i41] {
    font-size: 1.2rem;
    font-variant-numeric: tabular-nums;
}

.planning-counter span[b-r382068i41] {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--bs-secondary-color);
}

/* Il contatore è un Tabiot.Blazor.Button: il CSS isolato non timbra la radice di un componente figlio,
   quindi le regole sul pulsante vogliono ::deep, ospitate dal contenitore che è nel markup della pagina.
   Non deve sembrare un pulsante finché non lo si punta. */
.planning-counters[b-r382068i41]  .planning-counter {
    display: flex;
    align-items: baseline;
    gap: 0.375rem;
    background: none;
    border: 1px solid transparent;
    border-radius: 0.375rem;
    padding: 0.125rem 0.5rem;
}

.planning-counters[b-r382068i41]  .planning-counter:not(:disabled):hover { border-color: var(--bs-border-color); }
.planning-counters[b-r382068i41]  .planning-counter:disabled { opacity: 1; cursor: default; }

/* I due allarmi, e solo quando hanno qualcosa da dire. */
.planning-counter-alarm b[b-r382068i41] { color: var(--bs-warning-text-emphasis); }

/* Le gravi gridano più degli allarmi d'orario: sono l'unico numero che può fermare una giornata. */
.planning-counter-hard b[b-r382068i41] { color: var(--bs-danger); }

/* «Verificati» non è cliccabile: stesso allineamento dei fratelli, nessun affordance di pulsante. */
.planning-counter-static[b-r382068i41] { display: inline-flex; align-items: baseline; gap: .35rem; cursor: default; }

/* L'etichetta in attesa del giudizio: il posto del numero c'è, il numero no. */
.planning-counter-pending[b-r382068i41] { opacity: .45; }

/* Il filtro acceso: il contatore resta a video e dice di essere lui. */
.planning-counters[b-r382068i41]  .planning-counter-active {
    border-color: var(--bs-primary-border-subtle);
    background-color: var(--bs-secondary-bg);
}

.planning-filter[b-r382068i41] { font-size: 0.8rem; color: var(--bs-secondary-color); }

/* La pastiglia colore del tipo di assenza: un quadratino, vuoto se il tipo non ha un colore. */
.planning-absence-swatch[b-r382068i41] {
    display: inline-block;
    width: 0.85rem;
    height: 0.85rem;
    border-radius: 0.2rem;
    border: 1px solid var(--bs-border-color);
    flex-shrink: 0;
}

/* Griglia elastica, pannello a larghezza fissa: è la «checksplit» del mockup. */
.planning-split[b-r382068i41] { display: flex; gap: .75rem; min-height: 0; }
.planning-split > .planning-grid-column[b-r382068i41] { flex: 1 1 auto; min-width: 0; }
.planning-anomaly-column[b-r382068i41] { flex: 0 0 360px; border-left: 1px solid var(--bs-border-color); padding-left: .75rem; }
/* Richiuso: il titolo è nascosto dal markup, ma il residuo (bordo, padding) non deve comunque traboccare i 2.5rem. */
.planning-anomaly-column.is-collapsed[b-r382068i41] { flex-basis: 2.5rem; padding-left: 0; border-left: 0; overflow: hidden; }
.planning-anomaly-column.is-collapsed .planning-anomaly-header[b-r382068i41] { justify-content: center; }

/* Accesa e non lampeggiante: chi arriva dal pannello deve ritrovare la riga anche dopo qualche secondo. */
[b-r382068i41] .planning-row.is-highlighted { background: color-mix(in srgb, var(--bs-primary) 10%, var(--bs-body-bg)); }

/* Sotto i 1200px il pannello va sotto la griglia: due colonne Bootstrap, non un layout nuovo. */
@media (max-width: 1200px) {
    .planning-split[b-r382068i41] { flex-direction: column; }
    /* .is-collapsed va ripetuta: ha specificità maggiore e la sua flex-basis di 2.5rem qui diventa
       un'altezza, cioè una striscia da 40px al posto del pannello richiuso. */
    .planning-anomaly-column[b-r382068i41],
    .planning-anomaly-column.is-collapsed[b-r382068i41] { flex-basis: auto; border-left: 0; border-top: 1px solid var(--bs-border-color); padding-left: 0; }
    /* Il pannello ora si apre in basso: lo stesso chevron ruotato indica su/giù invece che destra/sinistra. */
    .planning-anomaly-header[b-r382068i41]  i { transform: rotate(-90deg); }
}

/* Il badge della giornata: sta in fondo alla barra dei contatori, non sopra la griglia. */
.planning-day-state[b-r382068i41] {
    padding: .15rem .5rem;
    border-radius: .25rem;
    font-size: .8rem;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
}

.planning-day-state-ok[b-r382068i41] {
    background: var(--bs-success-bg-subtle);
    color: var(--bs-success-text-emphasis);
}

.planning-day-state-warn[b-r382068i41] {
    background: var(--bs-warning-bg-subtle);
    color: var(--bs-warning-text-emphasis);
}

.planning-day-by[b-r382068i41] {
    font-size: .75rem;
    color: var(--bs-secondary-color);
}
/* /Components/trp/PlanningAssetPanel.razor.rz.scp.css */
.eyebrow[b-owsg4ws242] {
    display: block;
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--bs-secondary-color);
    margin-bottom: .25rem;
}

/* Sulla voce selezionata il fondo è pieno: la nota grigia riprende il colore attivo del list-group, non il suo grigio. */
.list-group-item-action.active .text-body-secondary[b-owsg4ws242] {
    color: var(--bs-list-group-active-color) !important;
}
/* /Components/trp/PlanningAxisHeader.razor.rz.scp.css */
.planning-axis[b-6oabwirm2y] {
    position: sticky;
    top: 0;
    z-index: 2;
    background-color: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
    font-size: 0.72rem;
    color: var(--bs-secondary-color);
    font-variant-numeric: tabular-nums;
}

/* Larga come .planning-row-head, o le ore non stanno sopra i blocchi che indicano. */
.planning-axis-gutter[b-6oabwirm2y] { width: 13rem; }

.planning-axis-hours[b-6oabwirm2y] {
    position: relative;
    height: 1.25rem;
    /* Stessa area di .planning-timeline, che non ha padding orizzontale. */
    margin: 0;
}

.planning-axis-hour[b-6oabwirm2y] {
    position: absolute;
    top: 0;
    transform: translateX(-50%);
    padding: 0 0.15rem;
    background-color: var(--bs-body-bg);
}
/* /Components/trp/PlanningBlock.razor.rz.scp.css */
.planning-block[b-20ldbwiqxq] {
    width: 11rem;
    flex: 0 0 auto;
    padding: 0.35rem 0.5rem;
    border: 1px solid var(--bs-border-color);
    border-left-width: 4px;
    border-radius: 0.375rem;
    background-color: var(--bs-body-bg);
    font-size: 0.875rem;
    line-height: 1.25;
    position: relative;
}

.planning-block.is-return[b-20ldbwiqxq] {
    width: 8rem;
    border-style: dashed;
    border-left-style: solid;
    opacity: 0.85;
}

/* Il fantasma: passato a un altro autista (legenda del mockup). */
.planning-block.handed-over[b-20ldbwiqxq] {
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--bs-border-color);
    opacity: .7;
}

.planning-handed-over[b-20ldbwiqxq] {
    display: block;
    color: var(--bs-body-secondary-color);
    font-style: italic;
}

/* Da Task 8 la ⚠ è un Tabiot.Blazor.Button: la sua radice è di un componente figlio, serve ::deep. */
[b-20ldbwiqxq] .planning-block-anomaly { color: var(--bs-danger); }

.status-running[b-20ldbwiqxq] { box-shadow: 0 0 0 2px rgba(var(--bs-primary-rgb), 0.35); }
.status-done[b-20ldbwiqxq] { background-color: rgba(var(--bs-success-rgb), 0.08); }
.status-notExecuted[b-20ldbwiqxq] { background-color: rgba(var(--bs-danger-rgb), 0.08); text-decoration: line-through; }
.status-offPlan[b-20ldbwiqxq] { background-color: rgba(var(--bs-warning-rgb), 0.12); }

.planning-block[draggable="true"][b-20ldbwiqxq] { cursor: grab; }
.planning-block[draggable="true"]:active[b-20ldbwiqxq] { cursor: grabbing; }

.unpublished-dot[b-20ldbwiqxq] {
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background-color: var(--bs-warning);
    align-self: center;
}

/* Vuoto e non pieno: è partita, ma il telefono non l'ha ancora presa. Sul telefono = nessun puntino. */
.sent-dot[b-20ldbwiqxq] {
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    border: 1px solid var(--bs-secondary);
    align-self: center;
}
/* /Components/trp/PlanningDayApprovalPanel.razor.rz.scp.css */
/* Gli stessi numeri della testata, ma dentro il popup: il CSS di ambito non attraversa i componenti,
   quindi le regole di .planning-counter vanno ridichiarate qui o non si applicano affatto. */
.approval-counters .planning-counter[b-ro4xi2yv8m] {
    display: inline-flex;
    flex-direction: column;
    line-height: 1.1;
}

.approval-counters .planning-counter b[b-ro4xi2yv8m] {
    font-size: 1.35rem;
}

.approval-counters .planning-counter span[b-ro4xi2yv8m] {
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .02em;
    color: var(--bs-secondary-color);
}
/* /Components/trp/PlanningForfeitPanel.razor.rz.scp.css */
/* CSS isolato: quello di Planning.razor non colpisce questo componente (rev.1 fix 6). */
.planning-absence-swatch[b-iv0hkgge4o] {
    display: inline-block;
    width: 0.85rem;
    height: 0.85rem;
    border-radius: 0.2rem;
    border: 1px solid var(--bs-border-color);
    flex-shrink: 0;
}

/* Titolo di passo: piccolo, maiuscoletto, attenuato — stesso stile delle etichette dei contatori (rev.1 fix 8). */
.eyebrow[b-iv0hkgge4o] {
    display: block;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--bs-secondary-color);
    margin-bottom: 0.25rem;
}
/* /Components/trp/PlanningRow.razor.rz.scp.css */
.planning-row-head[b-eec986lcud] {
    width: 13rem;
    border-right: 1px solid var(--bs-border-color);
}

/* Nella testata e non a destra come il mockup: là si sovrapporrebbe ai blocchi di fine giornata. */
.planning-row-badge[b-eec986lcud] { display: block; width: fit-content; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
/* /Components/trp/PlanningSequenceBlocks.razor.rz.scp.css */
.planning-row-blocks[b-wqnliw2p21] {
    min-height: 3.5rem;
}

/* Una fessura fra i blocchi: invisibile finché non ci si trascina sopra. */
.planning-drop[b-wqnliw2p21] {
    width: 0.5rem;
    flex: 0 0 auto;
    border-radius: 0.25rem;
}

.planning-drop-end[b-wqnliw2p21] { flex: 1 1 auto; min-width: 1.5rem; }

.planning-row-blocks:has(.planning-block:active) .planning-drop[b-wqnliw2p21] {
    background-color: rgba(var(--bs-primary-rgb), 0.15);
}
/* /Components/trp/PlanningTimelineBlocks.razor.rz.scp.css */
.planning-timeline[b-i18ite06ea] {
    position: relative;
    padding: 0.25rem 0;
    --lane-height: 5.5rem;
    --operation-height: 1.25rem;
    min-height: calc(var(--lane-height) * var(--trip-lanes) + var(--operation-height) * var(--operation-lanes) + 0.5rem);
}

.planning-timeline-trips[b-i18ite06ea],
.planning-timeline-operations[b-i18ite06ea] {
    position: relative;
}

.planning-timeline-trips[b-i18ite06ea] { height: calc(var(--lane-height) * var(--trip-lanes)); }
.planning-timeline-operations[b-i18ite06ea] { height: calc(var(--operation-height) * var(--operation-lanes)); }

/* La corsia è il --lane della campata: l'altezza della riga cresce con le corsie, non con i blocchi. */
.planning-timeline-slot[b-i18ite06ea] {
    position: absolute;
    top: calc(var(--lane-height) * var(--lane));
    /* Un viaggio di venti minuti non deve sparire: il minimo può farlo uscire dal suo posto, e va bene. */
    min-width: 5rem;
}

/* Il CSS isolato non marca la radice di un componente figlio: la larghezza del blocco vuole ::deep. */
.planning-timeline-slot[b-i18ite06ea]  .planning-block {
    width: 100%;
    height: calc(var(--lane-height) - 0.35rem);
    overflow: hidden;
}

.planning-timeline-slot.shape-Muted[b-i18ite06ea]  .planning-block {
    border-style: dashed;
    opacity: 0.75;
}

/* Partito e mai chiuso: il bordo destro non esiste, e la sfumatura lo dice. */
.planning-timeline-slot.shape-OpenEnded[b-i18ite06ea]  .planning-block {
    border-right: 0;
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
    -webkit-mask-image: linear-gradient(to right, black 70%, transparent 100%);
    mask-image: linear-gradient(to right, black 70%, transparent 100%);
}

.planning-operation[b-i18ite06ea] {
    position: absolute;
    top: calc(var(--operation-height) * var(--lane));
    height: calc(var(--operation-height) - 0.15rem);
    min-width: 1.25rem;
    display: flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0 0.25rem;
    font-size: 0.7rem;
    line-height: 1;
    border-radius: 0.2rem;
    background-color: var(--bs-tertiary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    white-space: nowrap;
}

/* Senza durata: una tacca sull'istante — mezza larghezza a sinistra, come le ore dell'intestazione. */
.planning-operation.shape-Instant[b-i18ite06ea] {
    transform: translateX(-50%);
    justify-content: center;
    background-color: var(--bs-warning-bg-subtle);
    border-color: var(--bs-warning-border-subtle);
}

.planning-operation.shape-Instant .planning-operation-label[b-i18ite06ea] { display: none; }

.planning-operation.shape-OpenEnded[b-i18ite06ea] { border-right-style: dashed; }

/* La ⚠ del mockup: l'operazione che porta un'anomalia si stacca dalle altre della corsia. */
.planning-operation.has-anomaly[b-i18ite06ea] {
    border-color: var(--bs-danger);
    background: color-mix(in srgb, var(--bs-danger) 12%, var(--bs-body-bg));
}

/* La ⚠ è un Tabiot.Blazor.Button: la sua radice è di un componente figlio, serve ::deep (come PlanningBlock). */
[b-i18ite06ea] .planning-operation-anomaly { color: var(--bs-danger); }

/* La banda della giornata: dietro a tutto, dall'apertura alla chiusura. */
.planning-day-band[b-i18ite06ea] {
    position: absolute;
    top: 0;
    bottom: 0;
    background-color: rgba(var(--bs-primary-rgb), 0.06);
    border-left: 2px solid rgba(var(--bs-primary-rgb), 0.35);
    border-right: 2px solid rgba(var(--bs-primary-rgb), 0.35);
    /* Niente pointer-events: none, o il title della banda («giornata mai chiusa») non si potrebbe leggere. */
}

/* Mai chiusa: a destra non c'è un bordo, perché non c'è una fine. */
.planning-day-band.is-open[b-i18ite06ea] {
    border-right: 0;
    -webkit-mask-image: linear-gradient(to right, black 60%, transparent 100%);
    mask-image: linear-gradient(to right, black 60%, transparent 100%);
}
