@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/Tabiot.Blazor.Breadcrumb/Tabiot.Blazor.Breadcrumb.ypcz477a8p.bundle.scp.css';
@import '_content/Tabiot.Blazor.Core/Tabiot.Blazor.Core.wfr2gml081.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';

/* /Components/Http/AuthorizationPreview.razor.rz.scp.css */
/* AuthorizationPreview — condiviso tra il tab Authorization della request
   e il riepilogo della collection. */

.auth-preview[b-8t2vbuo9kv] {
    border: 1px solid var(--tp-border-subtle);
    border-left: 3px solid var(--tp-accent);
    border-radius: var(--tp-radius-md);
    background: var(--tp-surface-sunken);
    overflow: hidden;
}

.ap-head[b-8t2vbuo9kv] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--tp-space-2) var(--tp-space-3);
    padding: var(--tp-space-2) var(--tp-space-3);
    background: var(--tp-surface-raised);
    border-bottom: 1px solid var(--tp-border-subtle);
}

.ap-type[b-8t2vbuo9kv] {
    font-size: var(--tp-fs-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--tp-accent);
    background: var(--tp-accent-soft);
    border-radius: var(--tp-radius-pill);
    padding: 0.15rem var(--tp-space-2);
}

.ap-label[b-8t2vbuo9kv] { font-weight: 600; color: var(--bs-body-color); }

.ap-inherited[b-8t2vbuo9kv] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    margin-left: auto;
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
}

.ap-body[b-8t2vbuo9kv] { padding: var(--tp-space-3); }
.ap-body > .tp-section-title[b-8t2vbuo9kv] { display: block; margin-bottom: var(--tp-space-2); }

.ap-table td[b-8t2vbuo9kv] { border-bottom: none; padding-top: var(--tp-space-1); padding-bottom: var(--tp-space-1); }
.ap-table tbody tr:hover[b-8t2vbuo9kv] { background: transparent; }

/* Con due sole colonne il browser le farebbe 50/50, staccando il valore dal nome. */
.ap-table .tpt-key[b-8t2vbuo9kv] { width: 1%; padding-right: var(--tp-space-4); }

.ap-value[b-8t2vbuo9kv] { font-family: var(--tp-font-mono); }

.ap-reveal[b-8t2vbuo9kv] {
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--bs-secondary-color);
    padding: 0 var(--tp-space-1);
    margin-left: var(--tp-space-1);
}
.ap-reveal:hover[b-8t2vbuo9kv] { color: var(--tp-accent); }

.ap-text[b-8t2vbuo9kv] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); margin: 0; }
.ap-warning[b-8t2vbuo9kv] { display: flex; align-items: center; gap: var(--tp-space-2); color: var(--tp-warning); }
.ap-warning i[b-8t2vbuo9kv] { flex-shrink: 0; }

/* Stato "nessuna autorizzazione": tratteggiato, per distinguerlo da una configurata. */
.auth-preview-empty[b-8t2vbuo9kv] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
    padding: var(--tp-space-3) var(--tp-space-4);
    border: 1px dashed var(--tp-border-subtle);
    border-left: 1px dashed var(--tp-border-subtle);
    background: var(--tp-surface-sunken);
}
.auth-preview-empty > i[b-8t2vbuo9kv] { font-size: 1.4rem; color: var(--bs-secondary-color); opacity: 0.6; }
.ap-title[b-8t2vbuo9kv] { font-weight: 600; color: var(--bs-body-color); display: block; }

/* Chip "temporanea": l'auth non esiste a DB, va detto dove si legge il tipo. */
.ap-temporary[b-8t2vbuo9kv] {
    font-size: var(--tp-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--tp-warning);
    border: 1px solid var(--tp-warning);
    border-radius: var(--tp-radius-pill);
    padding: 0.05rem var(--tp-space-2);
}

/* Incorporata in una card che la contiene già: niente bordo/sfondo propri. */
.auth-preview.ap-embedded[b-8t2vbuo9kv] {
    border: none;
    border-radius: 0;
    background: transparent;
}
/* /Components/Http/AuthorizationSourceCard.razor.rz.scp.css */
/* Card unica del tab Authorization: selettore del modo, corpo che ne dipende, anteprima in fondo. */

.auth-card[b-12q1rel7pf] {
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    background: var(--tp-surface-sunken);
    overflow: hidden;
}

.auth-card-head[b-12q1rel7pf] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--tp-space-2) var(--tp-space-3);
    padding: var(--tp-space-2) var(--tp-space-3);
    background: var(--tp-surface-raised);
    border-bottom: 1px solid var(--tp-border-subtle);
}

/* Stesso linguaggio visivo del selettore Body della request: segmenti in un unico blocco. */
.auth-mode-switch[b-12q1rel7pf] {
    display: inline-flex;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    overflow: hidden;
    background: var(--bs-body-bg);
}

.auth-mode-switch .seg[b-12q1rel7pf] {
    background: transparent;
    border: none;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-1) var(--tp-space-3);
    font-size: var(--tp-fs-sm);
    cursor: pointer;
    white-space: nowrap;
}

.auth-mode-switch .seg + .seg[b-12q1rel7pf] { border-left: 1px solid var(--tp-border-subtle); }
.auth-mode-switch .seg:hover[b-12q1rel7pf] { color: var(--bs-body-color); }
.auth-mode-switch .seg.active[b-12q1rel7pf] { background: var(--tp-accent-soft); color: var(--tp-accent); font-weight: 600; }

.auth-mode-hint[b-12q1rel7pf] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    margin-left: auto;
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
}

.auth-card-body[b-12q1rel7pf] {
    padding: var(--tp-space-3);
    border-bottom: 1px solid var(--tp-border-subtle);
}

.auth-mode-note[b-12q1rel7pf] { margin: 0; font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); }

/* Il combo dell'autorizzazione è un singolo campo: non ha senso a tutta larghezza. */
.auth-picker[b-12q1rel7pf] { max-width: 28rem; }

.auth-temp-foot[b-12q1rel7pf] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--tp-space-2) var(--tp-space-3);
    margin-top: var(--tp-space-3);
}

.auth-temp-warning[b-12q1rel7pf] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    color: var(--tp-warning);
}

.auth-temp-warning i[b-12q1rel7pf] { flex-shrink: 0; }
.auth-temp-foot > :last-child[b-12q1rel7pf] { margin-left: auto; }
/* /Components/Http/AuthorizationValueEditor.razor.rz.scp.css */
/* Anteprima dell'header generato: fondo neutro del tema, non l'utility bg-light di
   Bootstrap, che porta !important e un chiaro fuori posto sullo scuro. */
.header-preview[b-ilj4yr1iaw] {
    background: var(--tp-surface-raised);
    border: 1px solid var(--tp-border-subtle);
    color: var(--bs-body-color);
}

/* Mascheramento dei valori sensibili. L'input resta di tipo testo (vedi il commento nel .razor):
   -webkit-text-security disegna i caratteri come pallini senza toccare il valore. Supportato da
   Chrome/Edge/Safari e da Firefox 118+. ::deep perche' l'<input> lo rende DxTextBox, non noi. */
.secret-field.masked[b-ilj4yr1iaw]  input {
    -webkit-text-security: disc;
}
/* /Components/Http/CollectionDetails.razor.rz.scp.css */
/* CollectionDetails — stessa scala e stessi token del resto dell'explorer. */

.collection-details[b-jctzoo6lzs] {
    height: 100%;
    overflow: auto;
    padding: var(--tp-page-pad-y) var(--tp-page-pad-x) var(--tp-space-6);
}

/* ===== Testata ===== */
.collection-details-header[b-jctzoo6lzs] {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--tp-space-4);
    padding-bottom: var(--tp-space-3);
    margin-bottom: var(--tp-space-5);
    border-bottom: 1px solid var(--tp-border-subtle);
}

.cd-identity[b-jctzoo6lzs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
    min-width: 0;
}

.cd-identity-icon[b-jctzoo6lzs] { color: var(--tp-warning); font-size: var(--tp-fs-xl); flex-shrink: 0; }
.cd-identity-text[b-jctzoo6lzs] { min-width: 0; display: flex; flex-direction: column; gap: 0.1rem; }

.cd-title[b-jctzoo6lzs] {
    font-size: var(--tp-fs-xl);
    font-weight: 600;
    color: var(--bs-body-color);
    margin: 0;
    overflow-wrap: anywhere;
}

.cd-path[b-jctzoo6lzs] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); }

/* ===== Sezioni ===== */
.collection-details-section[b-jctzoo6lzs] { margin-bottom: var(--tp-space-5); }
.collection-details-section > .tp-section-title[b-jctzoo6lzs] { margin-bottom: var(--tp-space-3); }

.section-hint[b-jctzoo6lzs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-size: var(--tp-fs-md);
    color: var(--bs-secondary-color);
    margin: 0;
}
.section-hint i[b-jctzoo6lzs] { color: var(--tp-accent); }

.inherited-badge[b-jctzoo6lzs] {
    font-size: var(--tp-fs-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--tp-info);
    background: rgba(78, 201, 240, 0.12);
    border-radius: var(--tp-radius-pill);
    padding: 0.1rem var(--tp-space-2);
    margin-left: var(--tp-space-2);
}

/* ===== Righe chiave/valore ===== */
.collection-info-row[b-jctzoo6lzs] {
    display: flex;
    align-items: baseline;
    gap: var(--tp-space-3);
    padding: var(--tp-space-2) 0;
    border-bottom: 1px solid var(--tp-border-subtle);
    font-size: var(--tp-fs-md);
}
.collection-info-row:last-child[b-jctzoo6lzs] { border-bottom: none; }

.collection-info-label[b-jctzoo6lzs] {
    flex: 0 0 9rem;
    color: var(--bs-secondary-color);
}

/* Il valore sta accanto all'etichetta invece di essere spinto a fondo riga: la riga
   può occupare tutta la larghezza senza costringere l'occhio ad attraversare il vuoto. */
.collection-info-value[b-jctzoo6lzs] {
    flex: 0 1 auto;
    min-width: 0;
    color: var(--bs-body-color);
    overflow-wrap: anywhere;
}

.inherited-info[b-jctzoo6lzs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    margin: var(--tp-space-2) 0 0;
}

/* ===== Tabella header ===== */
.headers-table[b-jctzoo6lzs] { width: 100%; border-collapse: collapse; font-size: var(--tp-fs-sm); }

.headers-table th[b-jctzoo6lzs] {
    text-align: left;
    font-weight: 600;
    font-size: var(--tp-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-1) var(--tp-space-2);
    border-bottom: 1px solid var(--tp-border-subtle);
}

.headers-table td[b-jctzoo6lzs] {
    padding: var(--tp-space-2);
    border-bottom: 1px solid var(--tp-surface-raised);
    font-family: var(--tp-font-mono);
    vertical-align: top;
}

.headers-table tbody tr[b-jctzoo6lzs] { transition: background-color 0.15s ease; }
.headers-table tbody tr:hover[b-jctzoo6lzs] { background-color: var(--tp-surface-hover); }
.headers-table .hk[b-jctzoo6lzs] { color: var(--tp-accent); font-weight: 600; white-space: nowrap; }
.headers-table .hv[b-jctzoo6lzs] { color: var(--bs-body-color); overflow-wrap: anywhere; }

/* ===== Statistiche ===== */
/* auto-fill con un massimo: con auto-fit le tre card si allargherebbero a mezzo schermo
   per contenere un numero di due cifre. */
.statistics-grid[b-jctzoo6lzs] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(9rem, 13rem));
    gap: var(--tp-space-3);
}

.statistics-card[b-jctzoo6lzs] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--tp-space-1);
    background-color: var(--bs-tertiary-bg);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-lg);
    padding: var(--tp-space-3) var(--tp-space-4);
    text-align: left;
    cursor: pointer;
    transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}

.statistics-card:hover[b-jctzoo6lzs],
.statistics-card:focus-visible[b-jctzoo6lzs] {
    transform: translateY(-2px);
    border-color: var(--tp-accent-line);
    box-shadow: var(--tp-elevation);
    outline: none;
}

.stat-value[b-jctzoo6lzs] {
    font-size: 1.75rem;
    font-weight: 700;
    line-height: 1.1;
    color: var(--tp-accent);
    font-variant-numeric: tabular-nums;
}

.stat-label[b-jctzoo6lzs] {
    font-size: var(--tp-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--bs-secondary-color);
}
/* /Components/Http/CollectionExplorer.razor.rz.scp.css */
.api-client-container[b-z4bndo32yu] {
    display: flex;
    flex-direction: column;
    /* L'altezza arriva dalla catena che site.css completa per questa pagina fino al box del
       body: qui basta riempirla. Niente calc() sul viewport — la shell di Oss.Layouts non
       espone l'altezza reale del menu né quella del titolo, e indovinarle lasciava sempre
       qualche pixel di scroll sul documento. */
    height: 100%;
    min-height: 0;
    overflow: hidden;
}

/* Riferimento di posizionamento per il drawer e il suo velo su schermo stretto. */
.api-client-body[b-z4bndo32yu] {
    display: flex;
    flex: 1;
    min-height: 0;
    position: relative;
}

.api-sidebar[b-z4bndo32yu] {
    width: var(--tp-sidebar-width, 280px);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    border-right: 1px solid var(--tp-border-subtle);
    position: relative;
}

/* Nessun padding qui: ogni vista possiede il proprio scroll e la propria spaziatura,
   così la send bar di RequestSender può restare fissa mentre solo i pannelli scorrono. */
.api-main-content[b-z4bndo32yu] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background-color: var(--bs-body-bg);
}

.sidebar-resizer[b-z4bndo32yu] {
    position: absolute;
    top: 0;
    right: -3px;
    width: 6px;
    height: 100%;
    cursor: col-resize;
    z-index: 5;
}
.sidebar-resizer:hover[b-z4bndo32yu] { background: var(--tp-accent-soft); }

/* Sidebar chiusa: sparisce del tutto. Il toggle vive nella barra di contesto,
   quindi qui non serve tenere un rail visibile. */
.api-sidebar.collapsed[b-z4bndo32yu] {
    width: 0;
    min-width: 0;
    border-right: none;
    overflow: hidden;
}
.api-sidebar.collapsed .sidebar-resizer[b-z4bndo32yu] { display: none; }

/* ===== Schermo stretto: la sidebar diventa un drawer ===== */
@media (max-width: 768px) {
    /* Sovrapposta, non in colonna: a 390px una colonna da 280 lascerebbe una
       novantina di pixel alla request. La larghezza scelta col resizer (che qui
       non c'e') viene ignorata a favore di una quota del viewport. */
    .api-sidebar[b-z4bndo32yu] {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        z-index: 20;
        width: min(85vw, 320px);
        box-shadow: var(--tp-elevation);
        transition: transform 0.2s ease;
    }

    /* Chiusa scorre fuori invece di azzerare la larghezza: azzerandola il contenuto
       collasserebbe di scatto a ogni apertura, senza transizione possibile.
       Bordo e ombra vanno spenti: a traslazione completa il bordo destro cade
       esattamente sul filo sinistro del contenuto e l'ombra si irradia da li',
       lasciando una riga scura a drawer chiuso. */
    .api-sidebar.collapsed[b-z4bndo32yu] {
        width: min(85vw, 320px);
        transform: translateX(-100%);
        border-right: none;
        box-shadow: none;
    }

    /* Trascinamento col mouse: al tocco non risponde e resterebbe solo una striscia
       morta sul bordo del drawer. */
    .sidebar-resizer[b-z4bndo32yu] { display: none; }

    .sidebar-backdrop[b-z4bndo32yu] {
        position: absolute;
        inset: 0;
        z-index: 15;
        background: rgba(0, 0, 0, 0.45);
    }
}

@media (prefers-reduced-motion: reduce) {
    .api-sidebar[b-z4bndo32yu] { transition: none; }
}

/* ===== Barra di contesto compatta (solo schermo stretto) =====
   Non ha una variante desktop: la pagina la renderizza soltanto sotto soglia, quindi
   niente media query. I due nomi sono lettura, non scelta — per scegliere si apre il
   drawer, dove vivono i combo. */
.context-bar-compact[b-z4bndo32yu] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-1) var(--tp-page-pad-x);
    background: var(--tp-surface-sunken);
    border-bottom: 1px solid var(--tp-border-subtle);
    flex-shrink: 0;
}

/* Tutta la riga e' il bersaglio: su un telefono un'area larga vale piu' di un'icona. */
.ctx-summary[b-z4bndo32yu] {
    flex: 1;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    min-height: var(--tp-control-h);
    padding: 0 var(--tp-space-2);
    background: transparent;
    border: none;
    color: var(--bs-body-color);
    font-size: var(--tp-fs-sm);
    text-align: left;
    cursor: pointer;
}

/* Ogni nome tronca per conto suo invece di far traboccare la riga: senza min-width
   un workspace dal nome lungo spingerebbe fuori l'environment. */
.ctx-summary-item[b-z4bndo32yu] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ctx-summary-item i[b-z4bndo32yu] { color: var(--tp-accent); flex-shrink: 0; }

.ctx-summary-sep[b-z4bndo32yu] {
    width: 1px;
    height: 1rem;
    flex-shrink: 0;
    background: var(--tp-border-subtle);
}
/* /Components/Http/CollectionSidebar.razor.rz.scp.css */
.collection-sidebar[b-pnux1daxlk] {
    display: flex;
    flex-direction: column;
    height: 100%;
    background-color: var(--bs-body-bg);
    color: var(--bs-body-color);
    overflow: hidden;
}

.sidebar-header[b-pnux1daxlk] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-2);
    border-bottom: 1px solid var(--tp-border-subtle);
    flex-shrink: 0;
}

[b-pnux1daxlk] .new-btn { flex: 1; }
[b-pnux1daxlk] .btn-accent {
    background-color: var(--tp-accent);
    border-color: var(--tp-accent);
    color: #fff;
    font-weight: 600;
}
[b-pnux1daxlk] .btn-accent:hover { filter: brightness(1.08); color: #fff; }

.header-tools[b-pnux1daxlk] { display: flex; gap: var(--tp-space-1); }

.icon-btn[b-pnux1daxlk] {
    background: transparent;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-sm);
    color: var(--bs-secondary-color);
    /* Quadrato: prima i due pulsanti avevano larghezze diverse a seconda dell'icona. */
    width: 1.75rem;
    height: 1.75rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    padding: 0;
    cursor: pointer;
    transition: color 0.15s ease, border-color 0.15s ease;
}
.icon-btn:hover[b-pnux1daxlk] { color: var(--tp-accent); border-color: var(--tp-accent); }

.sidebar-filter[b-pnux1daxlk] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-1) var(--tp-space-2);
    margin: var(--tp-space-2) var(--tp-space-2) 0;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    background: var(--tp-surface-sunken);
    color: var(--bs-secondary-color);
    flex-shrink: 0;
    transition: border-color 0.15s ease;
}
.sidebar-filter:focus-within[b-pnux1daxlk] { border-color: var(--tp-accent); }

.filter-input[b-pnux1daxlk] {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: none;
    outline: none;
    padding: var(--tp-space-1) 0;
    color: var(--bs-body-color);
    font-size: var(--tp-fs-sm);
}
.filter-input[b-pnux1daxlk]::placeholder { color: var(--bs-secondary-color); }

.sidebar-filter .icon-btn[b-pnux1daxlk] { border-color: transparent; width: 1.25rem; height: 1.25rem; }

.sidebar-body[b-pnux1daxlk] {
    flex: 1;
    min-height: 0;
    overflow: auto;
    padding: var(--tp-space-2);
}

.sidebar-empty[b-pnux1daxlk] { padding: var(--tp-space-6) var(--tp-space-3); }
/* /Components/Http/CollectionTree.razor.rz.scp.css */
.tree-list[b-y1v2j3zvdv] { list-style: none; margin: 0; padding: 0; }

/* Guida verticale: rende leggibile l'annidamento senza aggiungere indentazione. */
.tree-children[b-y1v2j3zvdv] {
    margin-left: 0.65rem;
    padding-left: var(--tp-space-2);
    border-left: 1px solid var(--tp-border-subtle);
}

.tree-row[b-y1v2j3zvdv] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-1) var(--tp-space-2);
    border-radius: var(--tp-radius-sm);
    cursor: pointer;
    font-size: var(--tp-fs-sm);
    color: var(--bs-body-color);
    line-height: 1.5;
    user-select: none;
}

.tree-row:hover[b-y1v2j3zvdv] { background-color: var(--tp-surface-hover); }
.tree-row.selected[b-y1v2j3zvdv] {
    background-color: var(--tp-accent-soft);
    box-shadow: inset 2px 0 0 var(--tp-accent);
    color: var(--bs-body-color);
}

.twisty[b-y1v2j3zvdv] {
    width: 0.85rem;
    flex-shrink: 0;
    text-align: center;
    color: var(--bs-secondary-color);
    font-size: 0.7rem;
}
.folder-icon[b-y1v2j3zvdv] { color: var(--tp-warning); font-size: var(--tp-fs-sm); flex-shrink: 0; }

.row-label[b-y1v2j3zvdv] {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.method-tag[b-y1v2j3zvdv] {
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-xs);
    font-weight: 700;
    width: 2.4rem;
    flex-shrink: 0;
    letter-spacing: 0.3px;
    text-transform: uppercase;
}

/* Maniglia drag e menu compaiono solo all'hover della riga: riservare lo spazio evita
   che l'etichetta si sposti quando appaiono. */
.drag-handle[b-y1v2j3zvdv], .row-actions[b-y1v2j3zvdv] {
    opacity: 0;
    transition: opacity 0.15s ease;
    flex-shrink: 0;
}
.tree-row:hover .drag-handle[b-y1v2j3zvdv],
.tree-row:hover .row-actions[b-y1v2j3zvdv],
.tree-row.selected .row-actions[b-y1v2j3zvdv] { opacity: 1; }

.drag-handle[b-y1v2j3zvdv] {
    width: 0.7rem;
    color: var(--bs-secondary-color);
    cursor: grab;
    font-size: 0.75rem;
}
[b-y1v2j3zvdv] .row-menu { color: var(--bs-secondary-color); }

/* Stato "trascinamento" applicato da SortableJS */
.tree-item.sortable-ghost > .tree-row[b-y1v2j3zvdv] { opacity: 0.4; }
.tree-item.sortable-chosen > .tree-row[b-y1v2j3zvdv] { background-color: var(--tp-accent-soft); }
/* /Components/Http/ExplorerHome.razor.rz.scp.css */
.explorer-home[b-oxed1yiviq] {
    height: 100%;
    overflow: auto;
    padding: var(--tp-page-pad-y) var(--tp-page-pad-x) var(--tp-space-6);
}

.home-section[b-oxed1yiviq] { margin: 0 0 var(--tp-space-3); }
.home-section + *[b-oxed1yiviq] { margin-top: 0; }
.explorer-home > .home-section ~ .home-section[b-oxed1yiviq] { margin-top: var(--tp-space-6); }

/* auto-fit con un massimo: prima erano `flex: 1` e su schermo largo diventavano
   tre riquadri enormi con dentro una riga di testo. */
.quick-actions[b-oxed1yiviq] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(14rem, 18rem));
    gap: var(--tp-space-3);
}

.quick-card[b-oxed1yiviq] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.1rem;
    text-align: left;
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-lg);
    padding: var(--tp-space-4);
    cursor: pointer;
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}

.quick-card:hover[b-oxed1yiviq],
.quick-card:focus-visible[b-oxed1yiviq] {
    transform: translateY(-2px);
    border-color: var(--tp-accent-line);
    box-shadow: var(--tp-elevation);
    outline: none;
}

.quick-card i[b-oxed1yiviq] {
    font-size: 1.25rem;
    color: var(--tp-accent);
    margin-bottom: var(--tp-space-2);
}

.qc-title[b-oxed1yiviq] { font-weight: 600; font-size: var(--tp-fs-md); color: var(--bs-body-color); }
.qc-sub[b-oxed1yiviq] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); }
/* /Components/Http/GlobalTimeoutControl.razor.rz.scp.css */
/* Override globale del timeout, nella context bar.
   A riposo deve sparire accanto ai combo; da attivo deve essere impossibile non vederlo,
   perché un valore dimenticato qui scavalca in silenzio il timeout di ogni request. */

.gto[b-t39q5bsbq9] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-1);
    flex-shrink: 0;
    height: 1.75rem; /* stessa altezza del toggle sidebar */
    padding: 0 var(--tp-space-1) 0 var(--tp-space-2);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-sm);
    background: transparent;
    transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

.gto:hover[b-t39q5bsbq9] { border-color: var(--tp-border-strong); }

/* L'input non ha bordi propri: il focus lo mostra il contenitore. */
.gto:focus-within[b-t39q5bsbq9] {
    border-color: var(--tp-accent);
    box-shadow: 0 0 0 2px var(--tp-accent-soft);
}

.gto-icon[b-t39q5bsbq9] {
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
    line-height: 1;
    flex-shrink: 0;
    /* Larghezza fissa: stopwatch e clessidra hanno glifi diversi e la pillola
       cambierebbe larghezza al solo cambio di stato. */
    width: 1rem;
    text-align: center;
}

.gto-label[b-t39q5bsbq9] {
    font-size: var(--tp-fs-xs);
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    white-space: nowrap;
    flex-shrink: 0;
}

.gto-input[b-t39q5bsbq9] {
    width: 2.75rem;
    padding: 0;
    border: none;
    background: transparent;
    color: var(--bs-body-color);
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-sm);
    text-align: right;
    -moz-appearance: textfield;
    appearance: textfield;
}

/* Le frecce dello spinner non entrano in 2.75rem e non servono. */
.gto-input[b-t39q5bsbq9]::-webkit-outer-spin-button,
.gto-input[b-t39q5bsbq9]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.gto-input:focus[b-t39q5bsbq9] { outline: none; }
.gto-input[b-t39q5bsbq9]::placeholder { color: var(--bs-secondary-color); opacity: 0.55; }

.gto-input:disabled[b-t39q5bsbq9] { cursor: not-allowed; }

.gto-clear[b-t39q5bsbq9] {
    flex-shrink: 0;
    width: 1.25rem;
    height: 1.25rem;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: var(--tp-radius-sm);
    background: transparent;
    color: inherit;
    opacity: 0.8;
    font-size: var(--tp-fs-xs);
    line-height: 1;
    cursor: pointer;
}

.gto-clear:hover[b-t39q5bsbq9] { opacity: 1; background: var(--tp-surface-hover); }

/* Interruttore "nessun timeout": la forma è quella del form-switch dei Settings, così si
   riconosce senza leggere. Senza etichetta perché lo stato acceso lo dice già la pillola. */
.gto-switch[b-t39q5bsbq9] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    flex-shrink: 0;
    padding-left: 0;
    min-height: 0;
}

.gto-switch .form-check-input[b-t39q5bsbq9] {
    margin: 0;
    float: none;
    cursor: pointer;
}

.gto-switch .form-check-label[b-t39q5bsbq9] {
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    white-space: nowrap;
    cursor: pointer;
}

/* Acceso: il verso è quello del rosso "nessun timeout", non dell'accento di default. */
.gto.is-unlimited .gto-switch .form-check-input:checked[b-t39q5bsbq9] {
    background-color: var(--tp-danger);
    border-color: var(--tp-danger);
}

.gto.is-unlimited .gto-switch .form-check-label[b-t39q5bsbq9] { color: var(--tp-danger); }

/* ----- Armato: override numerico attivo ----- */
.gto.is-active[b-t39q5bsbq9] {
    border-color: var(--tp-warning);
    background: var(--tp-warning-soft);
    box-shadow: 0 0 0 1px var(--tp-warning), 0 0 10px var(--tp-warning-glow);
}

.gto.is-active .gto-icon[b-t39q5bsbq9],
.gto.is-active .gto-label[b-t39q5bsbq9],
.gto.is-active .gto-input[b-t39q5bsbq9],
.gto.is-active .gto-clear[b-t39q5bsbq9] { color: var(--tp-warning); }

.gto.is-active .gto-input[b-t39q5bsbq9] { font-weight: 700; }
.gto.is-active:focus-within[b-t39q5bsbq9] { box-shadow: 0 0 0 1px var(--tp-warning), 0 0 0 3px var(--tp-warning-glow); }

/* ----- Armato: 0 secondi, cioè nessun timeout affatto ----- */
.gto.is-unlimited[b-t39q5bsbq9] {
    border-color: var(--tp-danger);
    background: var(--tp-danger-soft);
    box-shadow: 0 0 0 1px var(--tp-danger), 0 0 10px var(--tp-danger-glow);
}

.gto.is-unlimited .gto-icon[b-t39q5bsbq9],
.gto.is-unlimited .gto-label[b-t39q5bsbq9],
.gto.is-unlimited .gto-input[b-t39q5bsbq9] { color: var(--tp-danger); }

.gto.is-unlimited .gto-input[b-t39q5bsbq9] { font-weight: 700; }
.gto.is-unlimited:focus-within[b-t39q5bsbq9] { box-shadow: 0 0 0 1px var(--tp-danger), 0 0 0 3px var(--tp-danger-glow); }
/* /Components/Http/RecentRequests.razor.rz.scp.css */
/* RecentRequests — griglia di card, allineata ai token --tp-*. */

.recent-grid[b-yzs3gh63t8] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
    gap: var(--tp-space-3);
}

.recent-request-card[b-yzs3gh63t8] {
    width: 100%;
    height: 100%;
    text-align: left;
    background-color: var(--bs-tertiary-bg);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-lg);
    transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
    cursor: pointer;
    padding: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.recent-request-card:hover[b-yzs3gh63t8],
.recent-request-card:focus-visible[b-yzs3gh63t8] {
    transform: translateY(-2px);
    border-color: var(--tp-accent-line);
    box-shadow: var(--tp-elevation);
    outline: none; /* border-color + box-shadow fungono da focus ring */
}

/* Header colorato in base allo status */
.recent-request-card .card-header[b-yzs3gh63t8] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-2) var(--tp-space-3);
    border-bottom: 1px solid var(--tp-border-subtle);
    background-color: var(--tp-surface-raised);
}

.card-header-success[b-yzs3gh63t8] { background: rgba(45, 212, 168, 0.14); border-bottom-color: rgba(45, 212, 168, 0.3); }
.card-header-warning[b-yzs3gh63t8] { background: rgba(255, 181, 71, 0.14); border-bottom-color: rgba(255, 181, 71, 0.3); }
.card-header-danger[b-yzs3gh63t8]  { background: rgba(255, 107, 107, 0.14); border-bottom-color: rgba(255, 107, 107, 0.3); }
.card-header-info[b-yzs3gh63t8]    { background: rgba(78, 201, 240, 0.14); border-bottom-color: rgba(78, 201, 240, 0.3); }
/* 5xx più marcato del 4xx: un errore del server non è un errore della richiesta. */
.card-header-danger-strong[b-yzs3gh63t8] { background: rgba(255, 107, 107, 0.26); border-bottom-color: rgba(255, 107, 107, 0.45); }

.recent-request-card .card-body[b-yzs3gh63t8] {
    padding: var(--tp-space-3);
    flex: 1;
}

.recent-request-card .card-title[b-yzs3gh63t8] {
    font-size: var(--tp-fs-md);
    color: var(--bs-body-color);
    font-weight: 600;
}

.recent-request-card .card-text[b-yzs3gh63t8] {
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
}

.recent-empty[b-yzs3gh63t8] {
    border: 1px dashed var(--tp-border-subtle);
    border-radius: var(--tp-radius-lg);
    background: var(--tp-surface-sunken);
}
/* /Components/Http/RequestHeaderTable.razor.rz.scp.css */
/* RequestHeaderTable — la struttura della tabella è .kv-table in site.css,
   qui restano solo le larghezze. */

.kv-col-key[b-7tx29h6uxb] { width: 26%; }
.kv-col-desc[b-7tx29h6uxb] { width: 22%; }

/* Solo la parte read-only (auth/collection) aspetta un caricamento: le righe editabili
   sotto sono già in memoria e non passano mai da qui. */
.kv-loading-row td[b-7tx29h6uxb] { padding: var(--tp-space-2) var(--tp-space-3); }
/* /Components/Http/RequestParamsTable.razor.rz.scp.css */
/* Larghezze specifiche del tab Params: la struttura della tabella è in site.css. */
.kv-col-key[b-mdq0y5b28l] { width: 34%; }
.kv-col-desc[b-mdq0y5b28l] { width: 25%; }
/* /Components/Http/RequestRunner.razor.rz.scp.css */
/* RequestRunner — allineato ai token --tp-* (prima usava i --bs-*, e staccava
   visivamente dal resto dell'explorer). */

.runner[b-ghure7u19u] {
    display: flex;
    flex-direction: column;
    gap: var(--tp-space-4);
}

.runner-target[b-ghure7u19u] { margin: 0; color: var(--bs-secondary-color); font-size: var(--tp-fs-md); }

/* ===== Input dataset ===== */
.runner-input .form-label[b-ghure7u19u] {
    font-size: var(--tp-fs-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--bs-secondary-color);
    margin-bottom: var(--tp-space-1);
}

.runner-textarea[b-ghure7u19u] {
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-sm);
}

.runner-input-actions[b-ghure7u19u] {
    display: flex;
    gap: var(--tp-space-2);
    margin-top: var(--tp-space-2);
    align-items: center;
}

/* InputFile è un componente figlio: senza ::deep la regola non lo raggiunge e il
   controllo "Scegli file" nativo resta visibile dentro il pulsante. */
.runner-input-actions[b-ghure7u19u]  .runner-file-input { display: none; }

/* ===== Anteprima ===== */
.runner-preview-head[b-ghure7u19u] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--tp-space-3);
    margin-bottom: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
}

/* L'aspetto base delle due tabelle viene da .tp-table (site.css). */
.col-index[b-ghure7u19u] { width: 3rem; color: var(--bs-secondary-color); }

/* ===== Configurazione ===== */
.runner-config[b-ghure7u19u] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--tp-space-4);
    align-items: flex-end;
    padding: var(--tp-space-3) var(--tp-space-4);
    background: var(--tp-surface-raised);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
}

.runner-config-field[b-ghure7u19u] {
    display: flex;
    flex-direction: column;
    min-width: 8rem;
}

.runner-config-field .form-label[b-ghure7u19u] {
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    margin-bottom: var(--tp-space-1);
}

.runner-config-flags[b-ghure7u19u] {
    display: flex;
    flex-direction: column;
    gap: var(--tp-space-1);
}

.runner-check[b-ghure7u19u] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    margin: 0;
}

/* ===== Azioni ===== */
.runner-actions[b-ghure7u19u] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
}

.runner-progress[b-ghure7u19u] {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    color: var(--bs-secondary-color);
}

/* I risultati della run vivono nel pannello risposta: vedi RunResultsPanel.razor.css. */
/* /Components/Http/RequestSender.razor.rz.scp.css */
/* RequestSender — testata fissa + due pannelli con scroll indipendente.
   Tutte le misure vengono dalla scala definita in site.css. */

.request-builder[b-2vtqreh2ah] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* ===== Testata (non scorre) ===== */
.builder-head[b-2vtqreh2ah] {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    gap: var(--tp-space-2);
    padding: var(--tp-space-3) var(--tp-page-pad-x);
    border-bottom: 1px solid var(--tp-border-subtle);
    background: var(--tp-surface-sunken);
}

/* ----- Riga identità ----- */
.request-meta[b-2vtqreh2ah] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    min-width: 0;
}

/* Titolo editabile, non campo di form: nessuna scatola a riposo, e l'affordance è una
   sottolineatura invece di un bordo che compare e sparisce tutt'intorno. Il bordo
   inferiore c'è sempre, solo trasparente: così il testo non salta di un pixel quando
   la linea si accende. */
.name-input[b-2vtqreh2ah] {
    background: transparent;
    border: none;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    color: var(--bs-body-color);
    font-weight: 600;
    font-size: var(--tp-fs-xl);
    line-height: 1.3;
    padding: 0 0 var(--tp-space-1);
    min-width: 8rem;
    /* Cresce con la riga invece di fermarsi a un cap: il nome e' la cosa piu' lunga
       qui dentro, e cio' che lo segue e' ancorato a destra dal proprio gruppo. */
    flex: 1 1 auto;
    text-overflow: ellipsis;
    transition: border-color 0.15s ease;
}
.name-input:hover[b-2vtqreh2ah] { border-bottom-color: var(--tp-border-strong); }
.name-input:focus[b-2vtqreh2ah] { outline: none; border-bottom-color: var(--tp-accent); }

/* Attenuato e corsivo: un titolo mancante deve leggersi come un invito, non come il
   nome della request. */
.name-input[b-2vtqreh2ah]::placeholder {
    color: var(--bs-secondary-color);
    font-weight: 400;
    font-style: italic;
}

.unsaved-dot[b-2vtqreh2ah] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--tp-warning);
    flex-shrink: 0;
}

.meta-chip[b-2vtqreh2ah] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    background: var(--tp-surface-raised);
    border-radius: var(--tp-radius-pill);
    padding: 0.15rem var(--tp-space-2);
    max-width: 18rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Chip e toggle in coda alla riga. Il margine automatico sta sul gruppo e non sui due
   singoli: con due margini auto lo spazio libero si spartisce fra loro e la chip
   finirebbe a mezza strada invece che a destra. */
.meta-trailing[b-2vtqreh2ah] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
    margin-left: auto;
    min-width: 0;
}

.proxy-switch[b-2vtqreh2ah] {
    padding-left: var(--tp-space-3);
    border-left: 1px solid var(--tp-border-subtle);
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    flex-shrink: 0;
}
.proxy-switch .form-check-input[b-2vtqreh2ah] { margin: 0; float: none; }
.proxy-switch .form-check-label[b-2vtqreh2ah] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); }

/* ----- Send bar ----- */
.send-bar[b-2vtqreh2ah] { display: flex; gap: var(--tp-space-2); align-items: stretch; }

.method-pill[b-2vtqreh2ah] {
    flex: 0 0 auto;
    height: var(--tp-control-h);
    border: 1px solid currentColor;
    border-radius: var(--tp-radius-md);
    background: transparent;
    font-family: var(--tp-font-mono);
    font-weight: 700;
    font-size: var(--tp-fs-sm);
    padding: 0 var(--tp-space-2);
    cursor: pointer;
}
.method-pill option[b-2vtqreh2ah] { color: var(--bs-body-color); background: var(--bs-body-bg); }

.url-input[b-2vtqreh2ah] {
    flex: 1;
    min-width: 0;
    height: var(--tp-control-h);
    background: var(--bs-body-bg);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    color: var(--bs-body-color);
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-md);
    padding: 0 var(--tp-space-3);
}
.url-input:focus[b-2vtqreh2ah] { outline: none; border-color: var(--tp-accent); box-shadow: 0 0 0 3px var(--tp-accent-soft); }
.url-input.has-variables[b-2vtqreh2ah] { border-color: rgba(255, 181, 71, 0.45); }

.btn-send[b-2vtqreh2ah] {
    flex: 0 0 auto;
    height: var(--tp-control-h);
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-2);
    background: var(--tp-success);
    border: none;
    border-radius: var(--tp-radius-md);
    color: #08231d;
    font-weight: 600;
    padding: 0 var(--tp-space-4);
    cursor: pointer;
}
.btn-send:hover:not(:disabled)[b-2vtqreh2ah] { filter: brightness(1.08); }
.btn-send:disabled[b-2vtqreh2ah] { opacity: 0.45; cursor: not-allowed; }

/* Annulla: azione distruttiva come lo Stop del Runner, non un successo travestito da verde. */
.btn-send.is-cancel[b-2vtqreh2ah] { background: transparent; border: 1px solid var(--tp-danger); color: var(--tp-danger); }
.btn-send.is-cancel:hover:not(:disabled)[b-2vtqreh2ah] { background: rgba(255, 107, 107, 0.12); }

/* Run: stesso peso dell'invio ma in secondo piano (contornato), per non competere con Invia. */
.btn-run[b-2vtqreh2ah] {
    flex: 0 0 auto;
    height: var(--tp-control-h);
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-2);
    background: transparent;
    border: 1px solid var(--tp-accent);
    border-radius: var(--tp-radius-md);
    color: var(--tp-accent);
    font-weight: 600;
    padding: 0 var(--tp-space-3);
    white-space: nowrap;
    cursor: pointer;
}
.btn-run:hover[b-2vtqreh2ah] { background: var(--tp-accent-soft); }

.btn-run.is-stop[b-2vtqreh2ah] { border-color: var(--tp-danger); color: var(--tp-danger); }
.btn-run.is-stop:hover[b-2vtqreh2ah] { background: rgba(255, 107, 107, 0.12); }

.btn-save[b-2vtqreh2ah] {
    flex: 0 0 auto;
    position: relative;
    width: var(--tp-control-h);
    height: var(--tp-control-h);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    color: var(--bs-secondary-color);
    cursor: pointer;
}
.btn-save:hover[b-2vtqreh2ah] { color: var(--tp-accent); border-color: var(--tp-accent); }

.unsaved-badge[b-2vtqreh2ah] {
    position: absolute;
    top: -3px;
    right: -3px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background-color: var(--tp-warning);
    border: 1px solid var(--bs-body-bg);
}

/* ----- URL risolto ----- */
.resolved-url[b-2vtqreh2ah] {
    display: flex;
    align-items: baseline;
    gap: var(--tp-space-2);
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    word-break: break-all;
}
.resolved-url i[b-2vtqreh2ah] { color: var(--tp-accent); flex-shrink: 0; }

/* ===== Pannelli ===== */
.builder-panes[b-2vtqreh2ah] {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.pane[b-2vtqreh2ah] {
    display: flex;
    flex-direction: column;
    min-height: 0;
}

/* Senza risposta il pannello richiesta prende tutta l'altezza; con la risposta
   si limita a una quota e i due riquadri scorrono in modo indipendente. */
.request-tabs[b-2vtqreh2ah] { flex: 1 1 auto; }
.builder-panes.has-response .request-tabs[b-2vtqreh2ah] { flex: 0 1 auto; max-height: 45%; }
.builder-panes.has-response .response-section[b-2vtqreh2ah] {
    flex: 1 1 auto;
    border-top: 1px solid var(--tp-border-subtle);
}

/* Disposizione affiancata: i due pannelli diventano colonne di pari larghezza. */
.builder-panes.has-response.split-columns[b-2vtqreh2ah] { flex-direction: row; }
.builder-panes.has-response.split-columns .request-tabs[b-2vtqreh2ah] {
    flex: 1 1 50%;
    max-height: none;
    min-width: 0;
    border-right: 1px solid var(--tp-border-subtle);
}
.builder-panes.has-response.split-columns .response-section[b-2vtqreh2ah] {
    flex: 1 1 50%;
    min-width: 0;
    border-top: none;
}
/* A colonne il padding orizzontale doppio tra i due pannelli è di troppo. */
.builder-panes.split-columns .tab-body[b-2vtqreh2ah],
.builder-panes.split-columns .response-head[b-2vtqreh2ah],
.builder-panes.split-columns .response-body-container[b-2vtqreh2ah],
.builder-panes.split-columns .nav-tabs[b-2vtqreh2ah] { padding-left: var(--tp-space-3); padding-right: var(--tp-space-3); }
/* A colonne lo spazio è poco: tab più stretti ritardano l'andata a capo. */
.builder-panes.split-columns .nav-tabs .nav-link[b-2vtqreh2ah] { padding-left: var(--tp-space-2); padding-right: var(--tp-space-2); }

@media (max-width: 1100px) {
    /* Sotto questa soglia due colonne sono più strette di quanto serva a leggere una risposta. */
    .builder-panes.has-response.split-columns[b-2vtqreh2ah] { flex-direction: column; }
    .builder-panes.has-response.split-columns .request-tabs[b-2vtqreh2ah] {
        flex: 0 1 auto;
        max-height: 45%;
        border-right: none;
    }
    .builder-panes.has-response.split-columns .response-section[b-2vtqreh2ah] {
        border-top: 1px solid var(--tp-border-subtle);
    }
}

/* ----- Nav dei tab ----- */
.nav-tabs[b-2vtqreh2ah] {
    flex-shrink: 0;
    /* I tab vanno a capo invece di scorrere: a colonne affiancate lo scroll orizzontale
       nascondeva voci di navigazione, che così restano tutte visibili. */
    flex-wrap: wrap;
    padding: 0 var(--tp-page-pad-x);
    border-bottom: 1px solid var(--tp-border-subtle);
}
.nav-tabs .nav-link[b-2vtqreh2ah] {
    border: none;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-2) var(--tp-space-3);
    font-size: var(--tp-fs-md);
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-2);
    transition: color 0.15s ease, border-color 0.15s ease;
}
.nav-tabs .nav-link:hover:not(:disabled)[b-2vtqreh2ah] { color: var(--bs-body-color); }
.nav-tabs .nav-link.active[b-2vtqreh2ah] {
    color: var(--tp-accent);
    border-bottom-color: var(--tp-accent);
    font-weight: 600;
}
.nav-tabs .nav-link:disabled[b-2vtqreh2ah] { opacity: 0.4; cursor: not-allowed; }

.tab-count[b-2vtqreh2ah] {
    font-size: var(--tp-fs-xs);
    font-weight: 700;
    background: var(--tp-accent-soft);
    color: var(--tp-accent);
    padding: 0.05rem var(--tp-space-1);
    border-radius: var(--tp-radius-pill);
    min-width: 1.25rem;
    text-align: center;
}

.tab-body[b-2vtqreh2ah] {
    flex: 1;
    min-height: 0;
    overflow: auto;
    padding: var(--tp-space-3) var(--tp-page-pad-x) var(--tp-space-4);
}

/* I tab contengono tabelle dati (chiavi, token, URL lunghi): la larghezza serve.
   Il cap resta solo dove il contenuto è un singolo campo (vedi AuthorizationSourceCard). */
/* Colonna ad altezza piena. Con la sola larghezza un figlio che chiede height:100%
   si misurava contro un'altezza automatica e non risolveva: l'editor del body restava
   al min-height interno del componente Tabiot invece di riempire il pannello. Per i tab
   a tabella non cambia nulla — restano alti quanto il contenuto e, se eccedono, e'
   .tab-body a scorrere come prima. */
.tab-pane[b-2vtqreh2ah] {
    width: 100%;
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* Body: switch None/JSON */
.body-type-switch[b-2vtqreh2ah] {
    display: inline-flex;
    /* Da figlio di una colonna flex l'inline-flex viene blockificato e lo stretch di
       default lo porterebbe a tutta larghezza: qui deve restare largo quanto i due
       segmenti. */
    align-self: flex-start;
    margin-bottom: var(--tp-space-3);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    overflow: hidden;
}
.body-type-switch .seg[b-2vtqreh2ah] {
    background: transparent;
    border: none;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-1) var(--tp-space-3);
    font-size: var(--tp-fs-sm);
    cursor: pointer;
}
.body-type-switch .seg.active[b-2vtqreh2ah] { background: var(--tp-accent-soft); color: var(--tp-accent); font-weight: 600; }

.tab-hint[b-2vtqreh2ah], .rh-empty[b-2vtqreh2ah] {
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
    text-align: center;
    padding: var(--tp-space-4);
}

/* ===== Risposta ===== */
/* Testata della risposta: banda colorata a sinistra + fondo sfumato nel colore
   dello stato, così l'esito si legge da lontano senza rileggere il codice HTTP. */
.response-head[b-2vtqreh2ah] {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    gap: var(--tp-space-2);
    padding: var(--tp-space-3) var(--tp-page-pad-x);
    border-left: 4px solid var(--tp-status, var(--bs-secondary-color));
    background: linear-gradient(90deg,
                var(--tp-status-tint, transparent) 0%,
                transparent 60%);
}

.response-head.s-ok[b-2vtqreh2ah]       { --tp-status: var(--tp-success); --tp-status-tint: rgba(45, 212, 168, 0.14); }
.response-head.s-redirect[b-2vtqreh2ah] { --tp-status: var(--tp-info);    --tp-status-tint: rgba(78, 201, 240, 0.14); }
.response-head.s-error[b-2vtqreh2ah]    { --tp-status: var(--tp-danger);  --tp-status-tint: rgba(255, 107, 107, 0.14); }
.response-head.s-other[b-2vtqreh2ah]    { --tp-status: var(--bs-secondary-color); --tp-status-tint: var(--tp-surface-raised); }
.response-head.s-pending[b-2vtqreh2ah]  { --tp-status: var(--tp-accent);  --tp-status-tint: rgba(124, 92, 255, 0.14); }

.status-pill.is-sending[b-2vtqreh2ah] {
    font-size: var(--tp-fs-md);
    font-weight: 600;
}

.elapsed[b-2vtqreh2ah] {
    font-variant-numeric: tabular-nums;   /* la larghezza non balla a ogni decimo */
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
}

.status-strip[b-2vtqreh2ah] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--tp-space-2) var(--tp-space-4);
    font-size: var(--tp-fs-md);
}

.status-pill[b-2vtqreh2ah] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-weight: 700;
    font-size: var(--tp-fs-lg);
    color: var(--tp-status, var(--bs-secondary-color));
}

.status-dot[b-2vtqreh2ah] {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    display: inline-block;
    background: var(--tp-status, var(--bs-secondary-color));
    box-shadow: 0 0 0 4px var(--tp-status-tint, transparent);
}

.status-text[b-2vtqreh2ah] { font-weight: 500; font-size: var(--tp-fs-sm); opacity: 0.9; }

.strip-meta[b-2vtqreh2ah] { color: var(--bs-secondary-color); font-variant-numeric: tabular-nums; }
.strip-meta i[b-2vtqreh2ah] { margin-right: var(--tp-space-1); }

.strip-chip[b-2vtqreh2ah] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    font-size: var(--tp-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--tp-info);
    background: rgba(78, 201, 240, 0.12);
    border-radius: var(--tp-radius-pill);
    padding: 0.1rem var(--tp-space-2);
}

.btn-copy[b-2vtqreh2ah] {
    background: transparent;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
    padding: var(--tp-space-1) var(--tp-space-3);
    cursor: pointer;
}
.btn-copy:hover[b-2vtqreh2ah] { color: var(--tp-accent); border-color: var(--tp-accent); }

.strip-buttons[b-2vtqreh2ah] { display: inline-flex; gap: var(--tp-space-2); align-items: center; }
.btn-icon-only[b-2vtqreh2ah] { padding: var(--tp-space-1) var(--tp-space-2); }

.chip-iteration[b-2vtqreh2ah] { color: var(--tp-accent); background: var(--tp-accent-soft); }

/* Passaggio tra risposta del singolo invio e risultati della run. */
.mode-switch[b-2vtqreh2ah] {
    display: inline-flex;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    overflow: hidden;
}
.mode-switch .seg[b-2vtqreh2ah] {
    background: transparent;
    border: none;
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
    padding: var(--tp-space-1) var(--tp-space-3);
    cursor: pointer;
    white-space: nowrap;
}
.mode-switch .seg.active[b-2vtqreh2ah] { background: var(--tp-accent-soft); color: var(--tp-accent); font-weight: 600; }

/* L'elenco delle iterazioni non deve mai spingere la risposta fuori dal pannello:
   altezza limitata, scroll interno (vedi RunResultsPanel.razor.css). */
.response-section[b-2vtqreh2ah]  .run-results {
    flex: 0 1 auto;
    max-height: 45%;
}

/* Body inviato, mostrato nel tab "richiesta inviata". */
.sent-body-label[b-2vtqreh2ah] {
    font-size: var(--tp-fs-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--bs-secondary-color);
    margin: var(--tp-space-3) 0 var(--tp-space-1);
}

.sent-body[b-2vtqreh2ah] {
    background: var(--tp-surface-sunken);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-sm);
    padding: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    margin: 0;
    white-space: pre-wrap;
    word-break: break-word;
}

.actual-url[b-2vtqreh2ah] {
    display: flex;
    align-items: baseline;
    gap: var(--tp-space-2);
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
    word-break: break-all;
}
.method-tag[b-2vtqreh2ah] { font-weight: 700; flex-shrink: 0; }
.actual-url-text[b-2vtqreh2ah] { flex: 1; min-width: 0; }

.response-alert[b-2vtqreh2ah] { font-size: var(--tp-fs-md); margin: 0; }

.response-body-container[b-2vtqreh2ah] {
    flex: 1;
    min-height: 0;
    overflow: auto;
    padding: var(--tp-space-3) var(--tp-page-pad-x) var(--tp-space-4);
}

.response-pane[b-2vtqreh2ah] { height: 100%; display: flex; flex-direction: column; min-height: 0; }
.response-pane-scroll[b-2vtqreh2ah] { display: block; height: auto; }

/* I due editor Ace non hanno regole qui: si posizionano dai propri parametri (CssClass, MinHeight,
   ButtonClass) e il resto sta in .tp-code-editor, globale in site.css. */

/* Tabella header risposta */
.response-headers[b-2vtqreh2ah] { width: 100%; border-collapse: collapse; font-size: var(--tp-fs-sm); }
.response-headers th[b-2vtqreh2ah] {
    text-align: left;
    font-weight: 600;
    font-size: var(--tp-fs-xs);
    letter-spacing: 0.5px;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-1) var(--tp-space-2);
    border-bottom: 1px solid var(--tp-border-subtle);
}
.response-headers td[b-2vtqreh2ah] {
    padding: var(--tp-space-1) var(--tp-space-2);
    border-bottom: 1px solid var(--tp-surface-raised);
    font-family: var(--tp-font-mono);
    vertical-align: top;
}
.response-headers tbody tr:hover[b-2vtqreh2ah] { background: var(--tp-surface-hover); }
.response-headers .hk[b-2vtqreh2ah] { color: var(--tp-accent); font-weight: 600; white-space: nowrap; }

.response-headers .hv[b-2vtqreh2ah] { color: var(--bs-body-color); word-break: break-all; }

/* ===== Tab Settings =====
   Un'impostazione per riga: icona, testo (etichetta + spiegazione), controllo a destra.
   La griglia regge una terza e una quarta riga senza ridisegnare il pannello. */
.settings-pane[b-2vtqreh2ah] {
    display: flex;
    flex-direction: column;
    gap: var(--tp-space-2);
    max-width: var(--tp-content-max);
}

.setting[b-2vtqreh2ah] {
    display: grid;
    grid-template-columns: 1.5rem minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--tp-space-1) var(--tp-space-3);
    padding: var(--tp-space-3);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    background: var(--tp-surface-sunken);
    transition: border-color 0.15s ease, background-color 0.15s ease;
}
.setting:hover[b-2vtqreh2ah] { border-color: var(--tp-border-strong); }

.setting-icon[b-2vtqreh2ah] {
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-md);
    line-height: 1;
    text-align: center;
}

.setting-text[b-2vtqreh2ah] { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; }
.setting-label-row[b-2vtqreh2ah] { display: flex; align-items: center; gap: var(--tp-space-2); flex-wrap: wrap; }

.setting-label[b-2vtqreh2ah] {
    margin: 0;
    font-size: var(--tp-fs-md);
    font-weight: 600;
    color: var(--bs-body-color);
}

.setting-desc[b-2vtqreh2ah] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); }

/* Marca le impostazioni volatili: nel tab Settings tutto il resto viene salvato con la request. */
.setting-badge[b-2vtqreh2ah] {
    font-size: var(--tp-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--bs-secondary-color);
    background: var(--tp-surface-raised);
    border-radius: var(--tp-radius-pill);
    padding: 0.05rem var(--tp-space-2);
    white-space: nowrap;
}

.setting-control[b-2vtqreh2ah] { display: flex; align-items: center; justify-content: flex-end; }

/* Nota agganciata alla riga: sotto testo e controllo, a tutta larghezza. */
.setting-note[b-2vtqreh2ah] {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    margin-top: var(--tp-space-1);
    padding: var(--tp-space-1) var(--tp-space-2);
    border-radius: var(--tp-radius-sm);
    background: var(--tp-warning-soft);
    color: var(--tp-warning);
    font-size: var(--tp-fs-sm);
}

/* Interruttori: stessa resa del toggle in testata, senza il float di Bootstrap. */
.setting-switch[b-2vtqreh2ah] { display: flex; align-items: center; gap: var(--tp-space-2); padding-left: 0; min-height: 0; }
.setting-switch .form-check-input[b-2vtqreh2ah] { margin: 0; float: none; flex-shrink: 0; }
.setting-switch .form-check-label[b-2vtqreh2ah] { font-size: var(--tp-fs-sm); color: var(--bs-secondary-color); white-space: nowrap; }

/* Numero e "nessun timeout" in un'unica cornice: l'accoppiamento si vede prima di cliccare. */
.timeout-group[b-2vtqreh2ah] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    height: var(--tp-control-h);
    padding: 0 var(--tp-space-3);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    background: var(--bs-body-bg);
}
.timeout-group:focus-within[b-2vtqreh2ah] { border-color: var(--tp-accent); box-shadow: 0 0 0 3px var(--tp-accent-soft); }

.timeout-input[b-2vtqreh2ah] {
    width: 3.5rem;
    padding: 0;
    border: none;
    background: transparent;
    color: var(--bs-body-color);
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-md);
    text-align: right;
}
.timeout-input:focus[b-2vtqreh2ah] { outline: none; }
.timeout-input[b-2vtqreh2ah]::placeholder { color: var(--bs-secondary-color); opacity: 0.55; }
.timeout-input:disabled[b-2vtqreh2ah] { opacity: 0.45; }

.timeout-sep[b-2vtqreh2ah] { width: 1px; align-self: stretch; margin: var(--tp-space-2) 0; background: var(--tp-border-subtle); }

/* Nessun timeout: stesso codice colore dell'override globale a 0 secondi nella context bar. */
.setting.is-unlimited[b-2vtqreh2ah] { border-color: var(--tp-danger); background: var(--tp-danger-soft); }
.setting.is-unlimited .setting-icon[b-2vtqreh2ah] { color: var(--tp-danger); }
.setting.is-unlimited .timeout-group[b-2vtqreh2ah] { border-color: var(--tp-danger); }
.setting.is-unlimited .setting-switch .form-check-label[b-2vtqreh2ah] { color: var(--tp-danger); font-weight: 600; }

/* Impostazione attiva: basta l'icona accesa, la riga non deve gridare. */
.setting.is-on .setting-icon[b-2vtqreh2ah] { color: var(--tp-accent); }

/* ===== Campo URL con l'occhio dell'URL risolto ===== */
/* Il bottone sta dentro il campo, quindi serve un contenitore posizionato attorno
   all'input: da solo un <input> non puo' ospitare figli. */
.url-field[b-2vtqreh2ah] {
    position: relative;
    display: flex;
    flex: 1;
    min-width: 0;
}

/* Spazio a destra perche' il testo non finisca sotto l'occhio. */
.url-input.has-eye[b-2vtqreh2ah] { padding-right: calc(var(--tp-control-h) + var(--tp-space-1)); }

.url-eye[b-2vtqreh2ah] {
    position: absolute;
    top: 0;
    right: 0;
    width: var(--tp-control-h);
    height: var(--tp-control-h);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    color: var(--bs-secondary-color);
    cursor: pointer;
}
.url-eye:hover[b-2vtqreh2ah] { color: var(--tp-accent); }
.url-eye.is-on[b-2vtqreh2ah] { color: var(--tp-accent); }

/* Valore in sola lettura in coda a una riga di impostazioni. */
.setting-value[b-2vtqreh2ah] {
    font-size: var(--tp-fs-sm);
    color: var(--bs-body-color);
    text-align: right;
    word-break: break-word;
}

/* ===== Schermo stretto ===== */
@media (max-width: 768px) {
    /* Testata piu' bassa: qui ogni banda tolta e' contenuto guadagnato. */
    .builder-head[b-2vtqreh2ah] {
        padding-top: var(--tp-space-2);
        padding-bottom: var(--tp-space-2);
        gap: var(--tp-space-1);
    }

    /* Nome e salvataggio sulla stessa riga. Ci stanno perche' chip e toggle proxy qui
       non ci sono: la collection e il proxy hanno entrambi la loro riga — con tanto di
       spiegazione — nel tab Impostazioni, e in testata costavano una riga intera. */
    .name-input[b-2vtqreh2ah] { min-width: 0; }
    .meta-trailing[b-2vtqreh2ah] { display: none; }

    /* Una riga sola: metodo, URL e invio. Il send perde l'etichetta e resta un quadrato
       da --tp-control-h, ancora toccabile ma senza rubare la seconda riga. */
    .send-bar[b-2vtqreh2ah] { flex-wrap: wrap; }
    .btn-send .btn-label[b-2vtqreh2ah] { display: none; }
    .btn-send[b-2vtqreh2ah] {
        width: var(--tp-control-h);
        padding: 0;
        gap: 0;
        justify-content: center;
    }

    /* Il Runner compare solo con un dataset caricato: li' la riga propria se la merita. */
    .btn-run[b-2vtqreh2ah] { flex: 1 1 100%; justify-content: center; }

    /* Sette voci con icona + testo + badge riempiono tre righe: resta l'icona, e
       l'etichetta solo dove serve a sapere dove sei. */
    .nav-tabs .nav-link[b-2vtqreh2ah] {
        padding-left: var(--tp-space-2);
        padding-right: var(--tp-space-2);
        /* Con l'etichetta sul solo tab attivo quella voce sarebbe piu' alta delle altre e
           la sua sottolineatura scenderebbe sotto la fila: l'altezza va imposta uguale
           per tutti. */
        min-height: var(--tp-control-h);
    }
    .nav-tabs .nav-link .tab-label[b-2vtqreh2ah] { display: none; }
    .nav-tabs .nav-link.active .tab-label[b-2vtqreh2ah] { display: inline; }

    /* E il link deve riempire il proprio <li>, altrimenti resta alto quanto il contenuto
       dentro un elemento gia' stirato all'altezza della riga. */
    .nav-tabs .nav-item[b-2vtqreh2ah] { display: flex; }

    /* La voce della risposta e' un cambio di modalita', non un tab fra pari: sta in
       fondo, staccata, e tiene l'etichetta anche da inattiva. */
    .nav-item-response[b-2vtqreh2ah] { margin-left: auto; }
    .nav-item-response .nav-link .tab-label[b-2vtqreh2ah] { display: inline; }

    /* Un pannello alla volta, a tutta altezza: la quota del 45% e l'affiancamento
       presuppongono spazio per due riquadri leggibili, che qui non c'e'. */
    .builder-panes.has-response.split-columns[b-2vtqreh2ah] { flex-direction: column; }
    .builder-panes.has-response .request-tabs[b-2vtqreh2ah],
    .builder-panes.has-response.split-columns .request-tabs[b-2vtqreh2ah] {
        flex: 1 1 auto;
        max-height: none;
        border-right: none;
    }
    .builder-panes.mobile-request .response-section[b-2vtqreh2ah] { display: none; }

    /* Con la risposta in vista sparisce solo il CORPO della request, non tutto il
       pannello: la striscia dei tab deve restare, perche' e' lei a contenere la voce
       che riporta indietro. Il pannello si stringe quindi sulla sola striscia.
       Il secondo selettore non e' ridondante: con l'affiancamento memorizzato in
       localStorage la regola .has-response.split-columns ha una classe in piu' e
       vincerebbe, lasciando meta' altezza a un pannello dal corpo nascosto. */
    .builder-panes.mobile-response.has-response .request-tabs[b-2vtqreh2ah],
    .builder-panes.mobile-response.has-response.split-columns .request-tabs[b-2vtqreh2ah] {
        flex: 0 0 auto;
    }
    .builder-panes.mobile-response .request-tabs .tab-body[b-2vtqreh2ah] { display: none; }

    /* Il pannello nascosto si porta via anche il bordo che lo separava dall'altro. */
    .builder-panes.mobile-response .response-section[b-2vtqreh2ah] { border-top: none; }

    .btn-split-toggle[b-2vtqreh2ah] { display: none; }
}
/* /Components/Http/RequestVariableTable.razor.rz.scp.css */
/* RequestVariableTable — la struttura della tabella è .kv-table in site.css. */

.kv-col-key[b-z9jo4fm0q4] { width: 20%; }
.kv-col-type[b-z9jo4fm0q4] { width: 8rem; }
.kv-col-secret[b-z9jo4fm0q4] { width: 2.25rem; text-align: center; }
.kv-col-desc[b-z9jo4fm0q4] { width: 20%; }

/* Lo switch del valore booleano occupa la stessa altezza degli input delle altre righe,
   così la tabella non salta cambiando tipo a una variabile. */
.kv-switch[b-z9jo4fm0q4] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    min-height: calc(var(--tp-fs-sm) + var(--tp-space-2) * 2);
    margin: 0;
    padding-left: 2.5em;
}

/* Valore non riconosciuto sotto uno switch: si mostra, non si nasconde. */
.kv-raw[b-z9jo4fm0q4] {
    font-family: var(--tp-font-mono);
    font-size: var(--tp-fs-xs);
    color: var(--bs-secondary-color);
    overflow-wrap: anywhere;
}

.kv-secret[b-z9jo4fm0q4] {
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-1);
    border-radius: var(--tp-radius-sm);
}
.kv-secret:hover[b-z9jo4fm0q4] { color: var(--tp-accent); }
.kv-secret.is-secret[b-z9jo4fm0q4] { color: var(--tp-warning); }
/* /Components/Http/ResponseFileCard.razor.rz.scp.css */
.response-file[b-clyiil6rli] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .35rem;
    height: 100%;
    padding: 2rem 1rem;
    text-align: center;
}

.response-file-icon[b-clyiil6rli] {
    font-size: 2.75rem;
    opacity: .65;
    margin-bottom: .35rem;
}

.response-file-name[b-clyiil6rli] {
    font-weight: 600;
    word-break: break-all;
}

.response-file-meta[b-clyiil6rli] {
    font-size: .85rem;
    opacity: .75;
}

.response-file-state[b-clyiil6rli] {
    font-size: .8rem;
    opacity: .55;
    margin-top: .25rem;
}
/* /Components/Http/RunResultsPanel.razor.rz.scp.css */
/* Elenco iterazioni della run, mostrato sopra al visualizzatore di risposta. */

.run-results[b-0nn4qxuaz5] {
    display: flex;
    flex-direction: column;
    min-height: 0;
    border-bottom: 1px solid var(--tp-border-subtle);
}

/* ===== Riepilogo ===== */
.run-summary[b-0nn4qxuaz5] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--tp-space-2) var(--tp-space-4);
    padding: var(--tp-space-2) var(--tp-page-pad-x);
    background: var(--tp-surface-sunken);
    font-size: var(--tp-fs-sm);
}

.run-progress[b-0nn4qxuaz5] {
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    font-size: var(--tp-fs-md);
}
.run-progress i[b-0nn4qxuaz5] { margin-right: var(--tp-space-1); color: var(--tp-accent); }

.run-tally[b-0nn4qxuaz5] {
    display: inline-flex;
    align-items: center;
    gap: var(--tp-space-1);
    color: var(--bs-secondary-color);
    font-variant-numeric: tabular-nums;
}
.run-tally.t-pass i[b-0nn4qxuaz5] { color: var(--tp-success); }
.run-tally.t-fail i[b-0nn4qxuaz5] { color: var(--tp-warning); }
.run-tally.t-error i[b-0nn4qxuaz5] { color: var(--tp-danger); }

.btn-run-export[b-0nn4qxuaz5] {
    background: transparent;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    color: var(--bs-secondary-color);
    font-size: var(--tp-fs-sm);
    padding: var(--tp-space-1) var(--tp-space-3);
    cursor: pointer;
}
.btn-run-export:hover:not(:disabled)[b-0nn4qxuaz5] { color: var(--tp-accent); border-color: var(--tp-accent); }
.btn-run-export:disabled[b-0nn4qxuaz5] { opacity: 0.5; cursor: not-allowed; }

/* ===== Tabella ===== */
/* Lo scroll sta qui dentro: la lista non spinge mai fuori schermo la risposta. */
.run-table-scroll[b-0nn4qxuaz5] {
    flex: 1 1 auto;
    min-height: 0;
    overflow: auto;
    padding: 0 var(--tp-page-pad-x) var(--tp-space-2);
}

/* L'intestazione resta leggibile mentre si scorrono migliaia di righe. */
.run-table thead th[b-0nn4qxuaz5] {
    position: sticky;
    top: 0;
    z-index: 1;
    background: var(--bs-body-bg);
}

.run-table tbody tr[b-0nn4qxuaz5] { cursor: pointer; }
.run-row.selected > td[b-0nn4qxuaz5] { background: var(--tp-accent-soft); }
.run-row.selected > td:first-child[b-0nn4qxuaz5] { box-shadow: inset 3px 0 0 var(--tp-accent); }

.col-index[b-0nn4qxuaz5] { width: 3rem; color: var(--bs-secondary-color); }

.run-empty[b-0nn4qxuaz5] {
    text-align: center;
    color: var(--bs-secondary-color);
    padding: var(--tp-space-4);
}

.run-dot[b-0nn4qxuaz5] {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    display: inline-block;
    margin-right: var(--tp-space-1);
}
.run-dot.s-ok[b-0nn4qxuaz5] { background: var(--tp-success); }
.run-dot.s-redirect[b-0nn4qxuaz5] { background: var(--tp-info); }
.run-dot.s-error[b-0nn4qxuaz5] { background: var(--tp-danger); }
.run-dot.s-other[b-0nn4qxuaz5] { background: var(--bs-secondary-color); }
/* /Components/Http/WorkspaceHeader.razor.rz.scp.css */
/* Due colonne: i tool a sinistra e tutto il resto in una colonna che va a capo dentro
   di sé. La barra stessa non va a capo, così le righe successive restano allineate al
   bordo dei campi invece di infilarsi sotto il toggle della sidebar. */
.context-bar[b-qdxp4lcbe2] {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: var(--tp-space-3);
    padding: var(--tp-space-2) var(--tp-page-pad-x);
    background-color: var(--tp-surface-sunken);
    border-bottom: 1px solid var(--tp-border-subtle);
    flex-shrink: 0;
}

/* Su finestra stretta i gruppi vanno a capo invece di schiacciarsi: il gap verticale
   è esplicito, quello orizzontale da solo lascerebbe le righe appiccicate. */
.ctx-wrap[b-qdxp4lcbe2] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--tp-space-2) var(--tp-space-3);
    flex: 1;
    min-width: 0;
}

/* Separatore + campo sono un'unica unità di a-capo: il separatore non può restare
   orfano in coda a una riga. La quota flessibile della barra sta qui. */
.ctx-group[b-qdxp4lcbe2] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
    flex: 0 1 22rem;
    min-width: 14rem;
}

/* I combo hanno una larghezza propria imposta da DevExpress: il campo occupa
   quel che resta del gruppo invece di ammassarsi a sinistra. */
.ctx-field[b-qdxp4lcbe2] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    flex: 1;
    min-width: 0;
}

.ctx-field[b-qdxp4lcbe2]  .dxbl-edit-box,
.ctx-field[b-qdxp4lcbe2]  .dxbl-combobox {
    width: 100%;
}

.ctx-icon[b-qdxp4lcbe2] {
    color: var(--tp-accent);
    font-size: var(--tp-fs-md);
    flex-shrink: 0;
    width: 1rem;
    text-align: center;
}

/* Ancorato in alto e alto quanto un controllo in linea: a barra andata a capo il toggle
   resta centrato sulla prima riga invece di galleggiare fra le due. */
.ctx-tools[b-qdxp4lcbe2] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-1);
    flex-shrink: 0;
    align-self: flex-start;
    min-height: var(--tp-control-h);
}


/* Spinto a destra: separa il contesto di sessione dai selettori, senza rubare
   larghezza ai combo quando la finestra è stretta. */
.ctx-trailing[b-qdxp4lcbe2] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-3);
    margin-left: auto;
    flex-shrink: 0;
}

/* Dentro il drawer, su schermo stretto: qui la larghezza c'è, quindi il timeout
   globale torna visibile — nella barra costava una riga intera, in una colonna alta
   quanto il pannello no. Vedi la media query in coda, che lo spegne nella barra. */
.context-bar.in-drawer[b-qdxp4lcbe2] {
    border-bottom: 1px solid var(--tp-border-subtle);
}
.context-bar.in-drawer .ctx-trailing[b-qdxp4lcbe2] {
    display: flex;
    flex: 1 1 100%;
    margin-left: 0;
    /* Riga propria, ma il controllo non la riempie: sta a destra invece di galleggiare
       a sinistra sotto i due combo. */
    justify-content: flex-end;
}

/* Altezza fissa e non "stretch": a barra andata a capo lo stretch seguirebbe
   l'altezza della riga, che cambia da una riga all'altra. */
.ctx-sep[b-qdxp4lcbe2] {
    width: 1px;
    height: 1.25rem;
    align-self: center;
    flex-shrink: 0;
    background: var(--tp-border-subtle);
}

/* ===== Schermo stretto: la barra diventa una colonna ===== */
@media (max-width: 768px) {
    .context-bar[b-qdxp4lcbe2] {
        flex-wrap: wrap;
        gap: var(--tp-space-2);
    }

    /* Un campo per riga: due combo affiancate a 390px sono entrambe illeggibili.
       Il minimo desktop di 14rem qui non ha senso e va azzerato. */
    .ctx-group[b-qdxp4lcbe2] {
        flex: 1 1 100%;
        min-width: 0;
    }

    /* A colonna i separatori verticali non separano piu' niente: sarebbero
       stanghette a caso in testa a ogni riga. */
    .ctx-sep[b-qdxp4lcbe2] { display: none; }

    /* Il timeout globale si imposta una volta e non e' contesto di sessione da leggere
       a colpo d'occhio: nella barra, su telefono, cedergli una riga intera non conviene.
       Dentro il drawer torna visibile: la' la riga non toglie spazio al contenuto. */
    .ctx-trailing[b-qdxp4lcbe2] { display: none; }
}
/* /Components/Http/WorkspacePicker.razor.rz.scp.css */
/* Il picker occupa tutta l'area principale e possiede il proprio scroll, come le altre
   viste dell'explorer (.api-main-content non ne ha uno). */
.workspace-picker[b-kdl0rwmlrs] {
    flex: 1;
    min-height: 0;
    overflow: auto;
    padding: var(--tp-page-pad-y) var(--tp-page-pad-x) var(--tp-space-6);
}

/* Padding a zero: quello di pagina e' asimmetrico (piu' in basso) e sposterebbe lo
   spinner sopra il centro. Serve a distanziare le card, non un elemento centrato. */
.wp-loading[b-kdl0rwmlrs] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}

/* Stessa misura di .tp-home in Pages/Home.razor, e per lo stesso motivo: il picker e' una
   schermata di atterraggio a tutto schermo, senza sidebar, e nel flusso arriva subito dopo
   la Home. Non si allinea invece a .explorer-home, che e' a piena larghezza perche' e' un
   pannello di lavoro affiancato alla sidebar, non un atterraggio. */
.wp-inner[b-kdl0rwmlrs] {
    max-width: 1400px;
    margin: 0 auto;
}

.wp-head[b-kdl0rwmlrs] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--tp-space-3);
    flex-wrap: wrap;
    margin-bottom: var(--tp-space-3);
}

.wp-grid[b-kdl0rwmlrs] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
    gap: var(--tp-space-3);
}

.wp-grid-recent[b-kdl0rwmlrs] { margin-bottom: var(--tp-space-6); }

.workspace-picker > .wp-inner > .tp-section-title[b-kdl0rwmlrs] { margin-bottom: var(--tp-space-3); }

.wp-card[b-kdl0rwmlrs] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--tp-space-1);
    text-align: left;
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-lg);
    padding: var(--tp-space-4);
    cursor: pointer;
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}

.wp-card:hover[b-kdl0rwmlrs],
.wp-card:focus-visible[b-kdl0rwmlrs] {
    transform: translateY(-2px);
    border-color: var(--tp-accent-line);
    box-shadow: var(--tp-elevation);
    outline: none;
}

/* Le card di ripresa sono la scorciatoia: si distinguono dal fondo, non dalla dimensione. */
.wp-card-recent[b-kdl0rwmlrs] { border-color: var(--tp-accent-line); background: var(--tp-accent-soft); }

.wp-card-title[b-kdl0rwmlrs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    min-width: 0;
    font-weight: 600;
    font-size: var(--tp-fs-md);
    color: var(--bs-body-color);
}

.wp-card-title i[b-kdl0rwmlrs] { color: var(--tp-accent); }

/* Un'etichetta lunga tronca invece di allargare la colonna della griglia. */
.wp-card-title[b-kdl0rwmlrs],
.wp-env[b-kdl0rwmlrs],
.wp-desc[b-kdl0rwmlrs] {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wp-env[b-kdl0rwmlrs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    font-size: var(--tp-fs-sm);
    color: var(--bs-body-color);
}

.wp-env i[b-kdl0rwmlrs] { color: var(--bs-secondary-color); }

/* "Nessun environment" e' uno stato, non un nome: non deve leggersi come un'etichetta. */
.wp-env-none[b-kdl0rwmlrs] { color: var(--bs-secondary-color); font-style: italic; }

.wp-desc[b-kdl0rwmlrs],
.wp-count[b-kdl0rwmlrs],
.wp-age[b-kdl0rwmlrs] {
    font-size: var(--tp-fs-sm);
    color: var(--bs-secondary-color);
}

.wp-age[b-kdl0rwmlrs] { margin-top: var(--tp-space-1); font-size: var(--tp-fs-xs); }

.wp-count[b-kdl0rwmlrs] { margin-top: auto; padding-top: var(--tp-space-1); }

/* Stesso campo del filtro della sidebar, che pero' vive in un .razor.css scoped e non
   puo' prestare le sue classi. */
.wp-filter[b-kdl0rwmlrs] {
    display: flex;
    align-items: center;
    gap: var(--tp-space-2);
    padding: var(--tp-space-1) var(--tp-space-2);
    min-width: 12rem;
    border: 1px solid var(--tp-border-subtle);
    border-radius: var(--tp-radius-md);
    background: var(--tp-surface-sunken);
    color: var(--bs-secondary-color);
    transition: border-color 0.15s ease;
}

.wp-filter:focus-within[b-kdl0rwmlrs] { border-color: var(--tp-accent); }

.wp-filter-input[b-kdl0rwmlrs] {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: none;
    outline: none;
    padding: var(--tp-space-1) 0;
    color: var(--bs-body-color);
    font-size: var(--tp-fs-sm);
}

.wp-filter-input[b-kdl0rwmlrs]::placeholder { color: var(--bs-secondary-color); }

.wp-clear[b-kdl0rwmlrs] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    padding: 0;
    background: none;
    border: none;
    color: inherit;
    cursor: pointer;
}

.wp-clear:hover[b-kdl0rwmlrs] { color: var(--tp-accent); }

@media (max-width: 768px) {
    .wp-grid[b-kdl0rwmlrs] { grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); }
    .wp-head[b-kdl0rwmlrs] { align-items: stretch; }
    .wp-filter[b-kdl0rwmlrs] { width: 100%; }
}
