/*!
 * PNRR Matching — stile frontend plugin
 * Palette/font da templates/pnrr-pnc-reference/design-tokens.md (sito
 * https://pnrr-pnc.uniroma2.it/). Nessuna dipendenza esterna a runtime (no
 * CDN): i file .woff2 di Titillium Web/Cardo (licenza SIL Open Font
 * License, sottoinsieme "latin") sono self-hosted in assets/fonts/.
 * Tutte le regole sono innestate sotto .pnrr-scope per non entrare in
 * conflitto con lo stile del tema WP attivo (header/nav/footer restano
 * del tema, qui c'è solo il contenuto dello shortcode).
 */

/* ---------------------------------------------------------------------- */
/* 1. Font self-hosted (placeholder — aggiungere i file reali in fonts/)   */
/* ---------------------------------------------------------------------- */
@font-face {
    font-family: 'Titillium Web';
    src: url('../fonts/titillium-web-regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'Titillium Web';
    src: url('../fonts/titillium-web-semibold.woff2') format('woff2');
    font-weight: 600;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'Cardo';
    src: url('../fonts/cardo-regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

/* ---------------------------------------------------------------------- */
/* 2. Design tokens                                                        */
/* ---------------------------------------------------------------------- */
.pnrr-scope {
    --pnrr-primary: #007d34;
    --pnrr-primary-dark: #006027;
    /* Accento blu istituzionale (richiesta cliente: "il viola non mi
     * piace", riferito al precedente magenta #f00069 ereditato dalla
     * palette del sito originale pnrr-pnc.uniroma2.it, vedi
     * templates/pnrr-pnc-reference/design-tokens.md). Blu scelto invece di
     * un secondo tono caldo per restare a distanza di tonalità sia dal
     * verde primario (145° vs 205°, ~64° di separazione, ben distinguibili)
     * sia dagli usi semantici già occupati (--pnrr-danger è un rosso 342°,
     * --pnrr-warning un ambra 38°): un accento caldo avrebbe rischiato di
     * confondersi con uno dei due. Contrasto testo bianco su questo sfondo
     * (uso principale: bottoni CTA) 6.75:1 — supera AA (4.5:1) con ampio
     * margine; il vecchio magenta era invece a 4.28:1, sotto la soglia AA.
     */
    --pnrr-accent: #0a5ca8;
    --pnrr-accent-dark: #073f73;
    --pnrr-bg: #F9F9F9;
    --pnrr-surface: #ffffff;
    --pnrr-text: #000000;
    --pnrr-text-soft: #5a5a5a;
    --pnrr-border: #cfcabe;
    --pnrr-neutral: #A4A4A4;
    --pnrr-success: var(--pnrr-primary);
    --pnrr-danger: #c0003a;
    --pnrr-warning: #a66a00;
    --pnrr-radius: 8px;
    --pnrr-radius-sm: 4px;
    --pnrr-gap: 1rem;
    --pnrr-font-body: 'Titillium Web', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
    --pnrr-font-display: 'Cardo', Georgia, 'Times New Roman', serif;
    --pnrr-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);

    color: var(--pnrr-text);
    font-family: var(--pnrr-font-body);
    line-height: 1.5;
    box-sizing: border-box;
}

.pnrr-scope *,
.pnrr-scope *::before,
.pnrr-scope *::after {
    box-sizing: inherit;
}

@media (prefers-color-scheme: dark) {
    .pnrr-scope {
        --pnrr-bg: #14171a;
        --pnrr-surface: #1f2327;
        --pnrr-text: #f1f1f1;
        --pnrr-text-soft: #c7c7c7;
        --pnrr-border: #3a3f45;
        --pnrr-primary: #23a35a;
        /* Variante più chiara/satura del blu istituzionale, necessaria per
         * restare leggibile su sfondo scuro. Compromesso deliberato: dà
         * priorità al contrasto testo-bianco-su-bottone (4.59:1, supera AA)
         * rispetto al testo semplice su sfondo scuro (~3.4:1, sotto AA ma
         * sempre usato in grassetto su elementi accessori, mai su testo
         * corrente) — stesso compromesso, nella stessa direzione, del
         * precedente magenta di questa riga (che falliva peggio: 3.12:1 sul
         * bottone).
         */
        --pnrr-accent: #1175d9;
        --pnrr-accent-dark: #0d5aa8;
    }
}

/* ---------------------------------------------------------------------- */
/* 3. Layout base / tipografia                                            */
/* ---------------------------------------------------------------------- */
.pnrr-scope {
    background: transparent;
}

/*
 * Bugfix + richiesta cliente ("la pagina di utilizzo deve essere più
 * grande", tofix.md #4): il tema attivo (Twenty Twenty-Five, block theme)
 * applica ai figli diretti di .entry-content con layout "constrained" la
 * regola `.is-layout-constrained > :where(...):max-width: var(--wp--style
 * --global--content-size)` (645px in questo tema, vedi theme.json). Il
 * wrapper di ogni shortcode (<div class="pnrr-scope pnrr-scope--XXX">,
 * generato da Frontend\Nav::wrapContent) è ESATTAMENTE uno di questi figli
 * diretti: qualunque max-width impostato qui sotto sui singoli componenti
 * (.pnrr-card, .pnrr-section, ecc.) veniva quindi comunque schiacciato a
 * 645px dal tema, perché il foglio di stile del tema (inline in <head>,
 * blocco #global-styles-inline-css) viene stampato DOPO il nostro
 * pnrr-matching.css e, a parità di specificità (0,1,0 da entrambe le
 * parti: la nostra .pnrr-card contro il selettore del tema), vince chi
 * arriva per ultimo nel cascade.
 *
 * Eleviamo qui la specificità con un selettore a doppia classe — ogni
 * wrapper porta SEMPRE sia "pnrr-scope" sia una variante "pnrr-scope--*"
 * (vedi i vari templates/frontend/*.php) — per riprendere il controllo
 * della larghezza. Non rimuoviamo del tutto il tetto (max-width:none):
 * su monitor molto larghi lascerebbe i componenti interni privi di un
 * limite esterno "di buon senso" (liste/card a tutta larghezza, con
 * spaziatura eccessiva). Alziamo invece il tetto a 1340px, la stessa
 * "wideSize" del tema (vedi theme.json, coerente con .pnrr-nav__inner/
 * .pnrr-site-footer__inner già a 1100px): abbastanza per dare "respiro"
 * ai componenti interni più larghi (.pnrr-card ora 1000px, .pnrr-section
 * 1100px, ecc.) senza renderli edge-to-edge.
 */
.pnrr-scope[class*="pnrr-scope--"] {
    max-width: 1340px;
    margin-left: auto;
    margin-right: auto;
}

.pnrr-card {
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1.5rem;
    max-width: 1000px;
    margin: 0 auto;
}

.pnrr-scope--project-search .pnrr-card,
.pnrr-scope--project-form .pnrr-card,
.pnrr-scope--industria-search .pnrr-card {
    max-width: none;
}

.pnrr-form__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.5rem;
    margin: 0 0 0.5rem;
}

.pnrr-form__intro {
    color: var(--pnrr-text-soft);
    margin: 0 0 1.25rem;
}

.pnrr-form__back {
    max-width: 1000px;
    margin: 0 auto 0.75rem;
}

.pnrr-form__section {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.15rem;
    margin: 1.75rem 0 0.75rem;
    padding-top: 1rem;
    border-top: 1px solid var(--pnrr-border);
}

.pnrr-link {
    color: var(--pnrr-primary);
    text-decoration: underline;
    font-weight: 600;
}

.pnrr-link:hover,
.pnrr-link:focus-visible {
    color: var(--pnrr-primary-dark);
}

/* ---------------------------------------------------------------------- */
/* 4. Form controls                                                        */
/* ---------------------------------------------------------------------- */
.pnrr-form {
    display: flex;
    flex-direction: column;
    gap: var(--pnrr-gap);
}

.pnrr-field-row {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--pnrr-gap);
}

@media (min-width: 560px) {
    .pnrr-field-row {
        grid-template-columns: 1fr 1fr;
    }
}

.pnrr-field {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.pnrr-field > legend,
.pnrr-field > label {
    font-weight: 600;
    font-size: 0.925rem;
}

fieldset.pnrr-field {
    border: none;
    padding: 0;
    margin: 0;
}

.pnrr-field input[type="text"],
.pnrr-field input[type="email"],
.pnrr-field input[type="password"],
.pnrr-field input[type="url"],
.pnrr-field input[type="search"],
.pnrr-field input[type="file"],
.pnrr-field input[type="date"],
.pnrr-field input[type="time"],
.pnrr-field select,
.pnrr-field textarea {
    font-family: inherit;
    font-size: 1rem;
    padding: 0.6rem 0.75rem;
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
    background: var(--pnrr-surface);
    color: var(--pnrr-text);
    width: 100%;
}

.pnrr-field input:focus-visible,
.pnrr-field select:focus-visible,
.pnrr-field textarea:focus-visible {
    outline: 2px solid var(--pnrr-primary);
    outline-offset: 1px;
    border-color: var(--pnrr-primary);
}

.pnrr-field textarea {
    resize: vertical;
    min-height: 6rem;
}

.pnrr-field__hint {
    color: var(--pnrr-text-soft);
    font-size: 0.8rem;
    margin: 0;
}

/* Bugfix post-uso ("i suggerimenti università non funzionano"): menu a
 * tendina custom che sostituisce un <input list="..."> + <datalist>
 * nativo HTML5 — quel menu è disegnato dal browser in un layer fuori dal
 * DOM/CSS della pagina, con comportamento inconsistente su Chrome
 * (segnalato e riprodotto dall'utente) e non ispezionabile da uno
 * screenshot automatico. Vedi initAccademiaUniversitaField() in
 * pnrr-matching.js. */
.pnrr-suggest {
    position: relative;
}

.pnrr-suggest__list {
    position: absolute;
    z-index: 20;
    top: 100%;
    left: 0;
    right: 0;
    margin: 0.25rem 0 0;
    padding: 0.25rem;
    list-style: none;
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
    max-height: 240px;
    overflow-y: auto;
}

.pnrr-suggest__item {
    padding: 0.5rem 0.6rem;
    border-radius: var(--pnrr-radius-sm);
    cursor: pointer;
    font-size: 0.925rem;
}

.pnrr-suggest__item:hover,
.pnrr-suggest__item--active {
    background: var(--pnrr-primary-light, rgba(0, 0, 0, 0.06));
}

.pnrr-char-counter {
    align-self: flex-end;
    font-size: 0.8rem;
    color: var(--pnrr-text-soft);
    margin: 0;
}

.pnrr-char-counter.is-over {
    color: var(--pnrr-danger);
    font-weight: 600;
}

.pnrr-field--checkbox label {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    font-weight: 400;
}

.pnrr-checkbox-group,
.pnrr-radio-group {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.pnrr-radio-group--scroll {
    max-height: 220px;
    overflow-y: auto;
    padding: 0.5rem;
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
}

.pnrr-checkbox,
.pnrr-radio {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-weight: 400;
    font-size: 0.95rem;
}

.pnrr-media-list {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    padding: 0;
    margin: 0.25rem 0 0;
}

.pnrr-media-list li {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    background: var(--pnrr-bg);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
    padding: 0.25rem 0.5rem;
    font-size: 0.85rem;
}

.pnrr-media-list img {
    width: 32px;
    height: 32px;
    object-fit: cover;
    border-radius: var(--pnrr-radius-sm);
}

.pnrr-media-list button {
    border: none;
    background: none;
    color: var(--pnrr-danger);
    cursor: pointer;
    font-weight: 700;
    line-height: 1;
    padding: 0 0.2rem;
}

/* ---------------------------------------------------------------------- */
/* 5. Bottoni                                                              */
/* ---------------------------------------------------------------------- */
.pnrr-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    font-family: inherit;
    font-weight: 600;
    font-size: 0.95rem;
    padding: 0.65rem 1.4rem;
    border-radius: var(--pnrr-radius-sm);
    border: 1px solid transparent;
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;
}

.pnrr-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

.pnrr-btn--primary {
    background: var(--pnrr-primary);
    color: #ffffff;
}

.pnrr-btn--primary:hover:not(:disabled),
.pnrr-btn--primary:focus-visible {
    background: var(--pnrr-primary-dark);
}

.pnrr-btn--accent {
    background: var(--pnrr-accent);
    color: #ffffff;
}

.pnrr-btn--accent:hover:not(:disabled),
.pnrr-btn--accent:focus-visible {
    background: var(--pnrr-accent-dark);
}

.pnrr-btn--outline {
    background: transparent;
    color: var(--pnrr-primary);
    border-color: var(--pnrr-primary);
}

.pnrr-btn--outline:hover:not(:disabled) {
    background: var(--pnrr-primary);
    color: #ffffff;
}

.pnrr-btn--danger {
    background: transparent;
    color: var(--pnrr-danger);
    border-color: var(--pnrr-danger);
}

.pnrr-btn--danger:hover:not(:disabled) {
    background: var(--pnrr-danger);
    color: #ffffff;
}

.pnrr-btn--small {
    padding: 0.4rem 0.9rem;
    font-size: 0.85rem;
}

/* ---------------------------------------------------------------------- */
/* 6. Alert / notice                                                       */
/* ---------------------------------------------------------------------- */
.pnrr-alert {
    border-radius: var(--pnrr-radius-sm);
    padding: 0.75rem 1rem;
    font-size: 0.9rem;
    border: 1px solid transparent;
}

.pnrr-alert--error,
.pnrr-alert.is-error {
    background: #fdeaf1;
    /* var(--pnrr-danger), non --pnrr-accent: prima del cambio colore
     * dell'accento (era un magenta #f00069, quasi identico in tonalità al
     * rosso di --pnrr-danger) i due coincidevano quasi per caso. Un accento
     * ora blu renderebbe questo bordo di un colore incoerente con lo stato
     * "errore" — l'alert di errore deve dipendere solo dal colore
     * semantico di errore, mai dal colore del brand. */
    border-color: var(--pnrr-danger);
    color: var(--pnrr-danger);
}

.pnrr-alert--success,
.pnrr-alert.is-success {
    background: #e7f5ec;
    border-color: var(--pnrr-primary);
    color: var(--pnrr-primary-dark);
}

.pnrr-notice {
    border-radius: var(--pnrr-radius-sm);
    padding: 0.9rem 1.1rem;
    font-size: 0.95rem;
    border: 1px solid var(--pnrr-border);
    background: var(--pnrr-bg);
}

.pnrr-notice--error {
    border-color: var(--pnrr-danger);
    color: var(--pnrr-danger);
    background: #fdeaf1;
}

.pnrr-notice--info {
    border-color: var(--pnrr-primary);
    color: var(--pnrr-text);
}

.pnrr-loading {
    color: var(--pnrr-text-soft);
    font-style: italic;
}

/* ---------------------------------------------------------------------- */
/* 7. Ricerca progetti / card                                             */
/* ---------------------------------------------------------------------- */
.pnrr-filters {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--pnrr-gap);
    align-items: end;
    margin-bottom: 1.5rem;
}

@media (min-width: 720px) {
    .pnrr-filters {
        grid-template-columns: 2fr 1fr 1fr 1fr auto;
    }
}

.pnrr-search-status {
    color: var(--pnrr-text-soft);
    font-size: 0.9rem;
}

.pnrr-project-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.25rem;
}

@media (min-width: 560px) {
    .pnrr-project-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 960px) {
    .pnrr-project-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

.pnrr-project-card {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1.1rem;
    text-decoration: none;
    color: inherit;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.pnrr-project-card:hover,
.pnrr-project-card:focus-visible {
    transform: translateY(-2px);
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12);
}

.pnrr-project-card__title {
    font-family: var(--pnrr-font-display);
    font-size: 1.1rem;
    color: var(--pnrr-primary-dark);
    margin: 0;
}

.pnrr-project-card__meta {
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
}

.pnrr-badge {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.2rem 0.6rem;
    border-radius: 999px;
    background: var(--pnrr-bg);
    border: 1px solid var(--pnrr-border);
    color: var(--pnrr-text-soft);
    width: fit-content;
}

.pnrr-badge--trl {
    background: rgba(0, 125, 52, 0.1);
    border-color: var(--pnrr-primary);
    color: var(--pnrr-primary-dark);
}

.pnrr-keyword-list {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    padding: 0;
    margin: 0;
}

.pnrr-keyword-list li {
    font-size: 0.75rem;
    background: var(--pnrr-bg);
    border-radius: 999px;
    padding: 0.15rem 0.55rem;
    color: var(--pnrr-text-soft);
}

/* "I miei progetti" (Stage 9): stessa card del catalogo pubblico ma su un
 * <div> (non un <a>, la card intera non è cliccabile) con un bottone
 * "Modifica" esplicito in fondo. */
.pnrr-project-card--mine {
    align-items: flex-start;
}

.pnrr-project-card__edit {
    align-self: flex-start;
    margin-top: 0.25rem;
    text-decoration: none;
}

.pnrr-my-projects__header {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.5rem;
}

.pnrr-my-projects__header .pnrr-form__title,
.pnrr-my-projects__header .pnrr-form__intro {
    margin: 0;
}

.pnrr-my-projects__header .pnrr-form__intro {
    margin-top: 0.4rem;
}

/* ---------------------------------------------------------------------- */
/* 8. Dettaglio progetto + prenotazione                                    */
/* ---------------------------------------------------------------------- */
.pnrr-scope--project-detail {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.5rem;
    align-items: start;
}

@media (min-width: 840px) {
    .pnrr-scope--project-detail {
        grid-template-columns: 2fr 1fr;
    }

    .pnrr-scope--project-detail > .pnrr-alert {
        grid-column: 1 / -1;
    }
}

.pnrr-project-detail__body {
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1.75rem;
}

.pnrr-project-detail__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.6rem;
    margin: 0 0 0.5rem;
}

.pnrr-project-detail__grid {
    display: grid;
    gap: 0.75rem;
    margin: 1rem 0;
}

.pnrr-project-detail__grid dt {
    font-weight: 600;
    color: var(--pnrr-text-soft);
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.pnrr-project-detail__grid dd {
    margin: 0 0 0.75rem;
}

.pnrr-project-detail__images {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 0.5rem;
    margin: 1rem 0;
}

.pnrr-project-detail__images img {
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: var(--pnrr-radius-sm);
    border: 1px solid var(--pnrr-border);
}

.pnrr-booking-widget {
    position: sticky;
    top: 1rem;
}

.pnrr-booking-widget h3 {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    margin-top: 0;
}

.pnrr-slot-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
}

.pnrr-slot-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
    padding: 0.6rem 0.8rem;
    font-size: 0.9rem;
}

.pnrr-slot-item__time {
    display: flex;
    flex-direction: column;
}

.pnrr-slot-item__time strong {
    font-size: 0.95rem;
}

.pnrr-slot-item__time span {
    color: var(--pnrr-text-soft);
    font-size: 0.8rem;
}

/* toggle switch per my-slots */
.pnrr-toggle {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    cursor: pointer;
    user-select: none;
}

.pnrr-toggle__track {
    width: 42px;
    height: 24px;
    border-radius: 999px;
    background: var(--pnrr-neutral);
    position: relative;
    transition: background-color 0.15s ease;
    flex-shrink: 0;
}

.pnrr-toggle__track::after {
    content: '';
    position: absolute;
    top: 3px;
    left: 3px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: #ffffff;
    transition: transform 0.15s ease;
}

.pnrr-toggle.is-open .pnrr-toggle__track {
    background: var(--pnrr-primary);
}

.pnrr-toggle.is-open .pnrr-toggle__track::after {
    transform: translateX(18px);
}

.pnrr-toggle__label {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--pnrr-text-soft);
}

.pnrr-toggle.is-open .pnrr-toggle__label {
    color: var(--pnrr-primary-dark);
}

/* ---------------------------------------------------------------------- */
/* 9. Dashboard / meeting                                                  */
/* ---------------------------------------------------------------------- */
.pnrr-meeting-list {
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
}

.pnrr-meeting-card {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1rem 1.25rem;
}

.pnrr-meeting-card__info {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.pnrr-meeting-card__title {
    font-weight: 600;
}

.pnrr-meeting-card__meta {
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
}

/* Dati dell'azienda richiedente (Stage 9, solo viewer accademia: vedi
 * meeting.requester in meetingCardMarkup). */
.pnrr-meeting-card__requester {
    font-size: 0.85rem;
    color: var(--pnrr-primary-dark);
    font-weight: 600;
}

.pnrr-meeting-card__actions {
    display: flex;
    gap: 0.5rem;
}

/* Stage 12: sala/tavolo assegnati (incontro accettato) e motivo di
 * rifiuto/annullamento (compilato dal destinatario), entrambi opzionali. */
.pnrr-meeting-card__assignment {
    font-size: 0.85rem;
    color: var(--pnrr-primary-dark);
    font-weight: 600;
    margin: 0.2rem 0 0;
}

.pnrr-meeting-card__response-notes {
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
    font-style: italic;
    margin: 0.2rem 0 0;
}

/* Stage 14 (bugfix post-uso): motivo della richiesta compilato dal
 * richiedente, mostrato al destinatario (e al richiedente stesso). */
.pnrr-meeting-card__notes {
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
    font-style: italic;
    margin: 0.2rem 0 0;
}

/* Stage 12: pannello inline per il motivo di rifiuto/annullamento, aperto
 * dal click su "Rifiuta"/"Annulla" invece di inviare subito la richiesta
 * (mai un prompt() nativo, vedi pnrr-matching.js). flex-basis 100% lo fa
 * scendere su una riga propria dentro il layout flex di .pnrr-meeting-card. */
.pnrr-meeting-card__reason-panel {
    flex-basis: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding-top: 0.75rem;
    margin-top: 0.5rem;
    border-top: 1px solid var(--pnrr-border);
}

.pnrr-meeting-card__reason-panel label {
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
}

.pnrr-meeting-card__reason-input {
    resize: vertical;
}

.pnrr-meeting-card__reason-actions {
    display: flex;
    gap: 0.5rem;
}

.pnrr-status {
    display: inline-flex;
    align-items: center;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    padding: 0.25rem 0.65rem;
    border-radius: 999px;
}

.pnrr-status--pending {
    background: rgba(164, 164, 164, 0.2);
    color: var(--pnrr-warning);
}

.pnrr-status--accepted {
    background: rgba(0, 125, 52, 0.12);
    color: var(--pnrr-primary-dark);
}

.pnrr-status--declined,
.pnrr-status--cancelled {
    /* rgba di --pnrr-danger (#c0003a), non del brand accent: prima del
     * cambio colore dell'accento le due tonalità coincidevano quasi per
     * caso (vedi commento su .pnrr-alert--error). */
    background: rgba(192, 0, 58, 0.1);
    color: var(--pnrr-danger);
}

/* ---------------------------------------------------------------------- */
/* 10. Utility                                                             */
/* ---------------------------------------------------------------------- */
.pnrr-scope [hidden] {
    display: none !important;
}

.pnrr-empty-state {
    color: var(--pnrr-text-soft);
    font-style: italic;
    padding: 1rem 0;
}

.pnrr-btn--large {
    padding: 0.85rem 1.75rem;
    font-size: 1rem;
}

.pnrr-btn--outline-invert {
    background: transparent;
    color: #ffffff;
    border-color: rgba(255, 255, 255, 0.7);
}

.pnrr-btn--outline-invert:hover:not(:disabled),
.pnrr-btn--outline-invert:focus-visible {
    background: rgba(255, 255, 255, 0.15);
    border-color: #ffffff;
}

/* ---------------------------------------------------------------------- */
/* 11. Navigazione principale + footer (Frontend\Nav)                      */
/* ---------------------------------------------------------------------- */

/* Tecnica "full bleed": la nav/footer escono dal container centrato del
 * tema (che li ospita dentro il contenuto della pagina, vedi Frontend\Nav)
 * per occupare tutta la larghezza del viewport, esattamente come fa il
 * tema stesso con i blocchi "alignfull".
 *
 * Selettore a doppia classe (.pnrr-scope.pnrr-nav / .pnrr-scope.pnrr-site-
 * footer, entrambe sempre presenti sull'elemento, vedi templates/frontend/
 * nav.php e site-footer.php) + !important: necessario per battere la
 * regola del tema `.is-layout-constrained > :where(...)`, che fissa
 * max-width:645px e margin-left/right:auto!important sullo stesso
 * elemento (è un figlio diretto di .entry-content) — senza questa
 * maggiore specificità/priorità la nav restava schiacciata a 645px
 * nonostante margin/max-width qui sotto (vedi commento più esteso sopra
 * "layout base/tipografia" per il fix gemello sul contenuto). */
.pnrr-scope.pnrr-nav,
.pnrr-scope.pnrr-site-footer {
    width: 100% !important;
    margin-left: calc(50% - 50vw) !important;
    margin-right: calc(50% - 50vw) !important;
    max-width: 100vw !important;
    padding-left: calc(50vw - 50%) !important;
    padding-right: calc(50vw - 50%) !important;
    box-sizing: border-box;
}

.pnrr-nav {
    position: sticky;
    top: 0;
    z-index: 100;
    background: var(--pnrr-surface);
    border-bottom: 1px solid var(--pnrr-border);
}

.pnrr-nav__inner {
    max-width: 1100px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.6rem 1.25rem;
}

.pnrr-nav__brand {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    text-decoration: none;
    color: var(--pnrr-text);
    font-weight: 700;
}

.pnrr-nav__logo {
    display: block;
    width: 32px;
    height: 32px;
    object-fit: contain;
}

.pnrr-nav__title {
    display: flex;
    flex-direction: column;
    font-family: var(--pnrr-font-display);
    font-size: 1.15rem;
    line-height: 1.15;
    color: var(--pnrr-primary-dark);
}

.pnrr-nav__subtitle {
    font-family: var(--pnrr-font-body);
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--pnrr-text-soft);
}

.pnrr-nav__toggle {
    display: none;
    flex-direction: column;
    justify-content: center;
    gap: 4px;
    width: 36px;
    height: 32px;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
}

.pnrr-nav__toggle-bar {
    display: block;
    height: 2px;
    background: var(--pnrr-text);
    border-radius: 1px;
}

.pnrr-nav__menu {
    list-style: none;
    display: flex;
    align-items: center;
    gap: 1.5rem;
    margin: 0;
    padding: 0;
}

.pnrr-nav__menu a {
    text-decoration: none;
    color: var(--pnrr-text);
    font-weight: 600;
    font-size: 0.9rem;
    white-space: nowrap;
}

.pnrr-nav__menu a:hover,
.pnrr-nav__menu a:focus-visible {
    color: var(--pnrr-primary);
}

.pnrr-nav__menu a.pnrr-nav__cta {
    background: var(--pnrr-accent);
    color: #ffffff;
    padding: 0.45rem 1rem;
    border-radius: var(--pnrr-radius-sm);
}

.pnrr-nav__menu a.pnrr-nav__cta:hover,
.pnrr-nav__menu a.pnrr-nav__cta:focus-visible {
    background: var(--pnrr-accent-dark);
    color: #ffffff;
}

/* Voce di menu corrispondente alla pagina corrente (tofix.md: "la pagina
 * corrente non deve essere scritta ma deve essere evidenziata nella
 * button bar" — vedi Frontend\Nav::currentActiveKey). Due varianti: link
 * normali (sottolineati + colore primario) e la CTA "Registrati" (che ha
 * già uno sfondo pieno, quindi qui usiamo un outline invece del colore). */
.pnrr-nav__menu a.pnrr-nav__link--active {
    color: var(--pnrr-primary);
    text-decoration: underline;
    text-underline-offset: 0.25em;
}

.pnrr-nav__menu a.pnrr-nav__cta.pnrr-nav__link--active {
    outline: 2px solid var(--pnrr-primary-dark);
    outline-offset: 2px;
}

@media (max-width: 720px) {
    .pnrr-nav__toggle {
        display: flex;
    }

    .pnrr-nav__menu {
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
        background: var(--pnrr-surface);
        border-bottom: 1px solid var(--pnrr-border);
        max-height: 0;
        overflow: hidden;
        transition: max-height 0.2s ease;
    }

    .pnrr-nav__menu.is-open {
        max-height: 400px;
    }

    .pnrr-nav__menu li {
        border-top: 1px solid var(--pnrr-border);
    }

    .pnrr-nav__menu a {
        display: block;
        padding: 0.85rem 1.25rem;
    }
}

.pnrr-site-footer {
    background: var(--pnrr-bg);
    border-top: 1px solid var(--pnrr-border);
    margin-top: 3rem;
}

.pnrr-site-footer__inner {
    max-width: 1100px;
    margin: 0 auto;
    padding: 1.5rem 1.25rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
}

.pnrr-site-footer__brand,
.pnrr-site-footer__links {
    margin: 0;
    font-size: 0.85rem;
    color: var(--pnrr-text-soft);
}

/* ---------------------------------------------------------------------- */
/* 12. Homepage                                                            */
/* ---------------------------------------------------------------------- */
.pnrr-scope--homepage {
    display: block;
}

.pnrr-hero {
    position: relative;
    display: flex;
    align-items: center;
    min-height: 480px;
    padding: 3rem 1.25rem;
    color: #ffffff;
    overflow: hidden;
    border-radius: var(--pnrr-radius);
    flex-direction: column;
    justify-content: center;
    gap: 1.5rem;
}

.pnrr-hero__media {
    position: absolute;
    inset: 0;
    background-size: cover;
    /* L'immagine ha la grafica a bolle sulla sinistra: su schermi stretti
       si ritaglia tenendo il lato destro (la stretta di mano). */
    background-position: 70% center;
}

.pnrr-hero__media::after {
    content: '';
    position: absolute;
    inset: 0;
    /* L'immagine è già virata in verde: basta scurire leggermente il lato
       del testo (a destra su desktop) per garantire il contrasto. */
    background: linear-gradient(90deg, rgba(0, 40, 17, 0.35) 0%, rgba(0, 40, 17, 0.55) 45%, rgba(0, 40, 17, 0.8) 100%);
}

.pnrr-hero__content {
    position: relative;
    width: 100%;
    max-width: 560px;
    margin: 0 auto;
    text-align: left;
    display: flex;
    flex-direction: column;
    gap: 0.9rem;
}

.pnrr-hero__eyebrow {
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 0.8rem;
    font-weight: 700;
    color: #d9f5e4;
    margin: 0;
}

.pnrr-hero__title {
    font-family: var(--pnrr-font-display);
    font-size: clamp(2.25rem, 5vw, 3.25rem);
    line-height: 1.1;
    margin: 0;
    color: #ffffff;
}

.pnrr-hero__subtitle {
    font-size: 1.2rem;
    color: #eef7f0;
    margin: 0;
}

@media (min-width: 900px) {
    .pnrr-hero {
        /* Il padding-bottom maggiorato serviva a lasciare spazio ai loghi
           PNRR in basso a destra, ora rimossi (richiesta cliente ottobre
           2026): senza di loro l'hero torna simmetrico. */
        padding: 3rem;
    }

    .pnrr-hero__content {
        margin: 0 0 0 auto;
    }
}

.pnrr-hero__cta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.85rem;
    margin-top: 0.5rem;
}

.pnrr-hero__welcome {
    font-weight: 600;
    margin: 0 0 0.25rem;
}

.pnrr-hero__secondary-link {
    color: #ffffff;
    text-decoration: underline;
    font-size: 0.9rem;
}

.pnrr-section {
    max-width: 1100px;
    margin: 3rem auto;
    padding: 0 1.25rem;
}

.pnrr-section__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.5rem;
    text-align: center;
    margin: 0 0 1.75rem;
}

.pnrr-event-info__card {
    max-width: 760px;
    text-align: center;
}

.pnrr-event-info__name {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.4rem;
    margin: 0 0 0.4rem;
}

.pnrr-event-info__dates {
    font-weight: 600;
    color: var(--pnrr-accent);
    margin: 0 0 0.75rem;
}

.pnrr-event-info__description {
    color: var(--pnrr-text-soft);
    margin: 0;
}

/* Informativa privacy dell'ateneo: testo di servizio, più piccolo del
   corpo della scheda e separato dalla descrizione dell'evento da un filetto. */
.pnrr-event-info__privacy-title,
.pnrr-event-info__privacy {
    color: var(--pnrr-text-soft);
    font-size: 0.9rem;
    line-height: 1.5;
    text-align: left;
    margin: 0.75rem 0 0;
}

.pnrr-event-info__privacy-title {
    font-weight: 600;
    color: var(--pnrr-primary-dark);
    margin-bottom: 0.35rem;
}

.pnrr-event-info__description + .pnrr-event-info__privacy-title,
.pnrr-event-info__dates + .pnrr-event-info__privacy-title,
.pnrr-event-info__name + .pnrr-event-info__privacy-title {
    border-top: 1px solid var(--pnrr-border);
    padding-top: 0.9rem;
    margin-top: 1rem;
}

.pnrr-event-info__privacy + .pnrr-event-info__privacy {
    margin-top: 0.5rem;
}

.pnrr-event-info__privacy-link {
    color: var(--pnrr-accent);
    text-decoration: underline;
}

.pnrr-value-props__grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.25rem;
}

@media (min-width: 720px) {
    .pnrr-value-props__grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

.pnrr-value-card {
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1.5rem;
    text-align: center;
}

.pnrr-value-card__step {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    border-radius: 50%;
    background: var(--pnrr-primary);
    color: #ffffff;
    font-weight: 700;
    margin-bottom: 0.75rem;
}

.pnrr-value-card h3 {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.15rem;
    line-height: 1.35;
    margin: 0;
}

.pnrr-value-card p {
    color: var(--pnrr-text-soft);
    font-size: 0.9rem;
    margin: 0;
}

/* ---------------------------------------------------------------------- */
/* 13. Scelta registrazione (industria/accademia)                          */
/* ---------------------------------------------------------------------- */
.pnrr-register-choice {
    max-width: 860px;
    margin: 0 auto;
    text-align: center;
}

.pnrr-choice-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.25rem;
    margin-top: 1.5rem;
    text-align: left;
}

@media (min-width: 620px) {
    .pnrr-choice-grid {
        grid-template-columns: 1fr 1fr;
    }
}

.pnrr-choice-card {
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    box-shadow: var(--pnrr-shadow);
    padding: 1.5rem;
    text-decoration: none;
    color: inherit;
    border-top: 4px solid var(--pnrr-primary);
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.pnrr-choice-card:nth-child(2) {
    border-top-color: var(--pnrr-accent);
}

.pnrr-choice-card:hover,
.pnrr-choice-card:focus-visible {
    transform: translateY(-3px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);
}

.pnrr-choice-card__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.2rem;
    margin: 0;
}

.pnrr-choice-card__text {
    color: var(--pnrr-text-soft);
    font-size: 0.9rem;
    margin: 0;
    flex-grow: 1;
}

.pnrr-choice-card__cta {
    font-weight: 700;
    color: var(--pnrr-accent);
    font-size: 0.9rem;
}

/* ---------------------------------------------------------------------- */
/* 14. Slot di disponibilità — vista "chip" per giorno (my-slots)          */
/* ---------------------------------------------------------------------- */
.pnrr-slot-days {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.pnrr-slot-day__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.05rem;
    margin: 0 0 0.6rem;
    text-transform: capitalize;
}

.pnrr-slot-day__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 0.6rem;
}

.pnrr-slot-chip {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
    background: var(--pnrr-surface);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius-sm);
    padding: 0.6rem 0.5rem;
    cursor: pointer;
    font-family: inherit;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}

.pnrr-slot-chip:hover:not(:disabled) {
    border-color: var(--pnrr-primary);
}

.pnrr-slot-chip:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

.pnrr-slot-chip__time {
    font-weight: 700;
    font-size: 0.9rem;
    color: var(--pnrr-text);
}

.pnrr-slot-chip__status {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--pnrr-text-soft);
}

.pnrr-slot-chip.is-open {
    background: rgba(0, 125, 52, 0.1);
    border-color: var(--pnrr-primary);
}

.pnrr-slot-chip.is-open .pnrr-slot-chip__status {
    color: var(--pnrr-primary-dark);
    font-weight: 700;
}

/* Slot con un meeting pending/accepted associato (Stage 10, tofix.md: "se
 * un orario è prenotato per un incontro, deve essere scritto PRENOTATO non
 * CHIUSO"): terzo stato, visivamente distinto sia da "Aperto" (verde) sia
 * da "Chiuso" (neutro) usando l'accent del brand. Il chip è disabilitato
 * (non cliccabile, vedi renderChip in pnrr-matching.js) ma deve restare
 * leggibile: sovrascriviamo qui l'opacità/cursore di .pnrr-slot-chip:disabled
 * (stessa specificità, ma queste regole vengono dopo nel foglio quindi
 * vincono in cascata). */
.pnrr-slot-chip--booked {
    background: rgba(10, 92, 168, 0.1);
    border-color: var(--pnrr-accent);
    opacity: 1;
    cursor: default;
}

.pnrr-slot-chip--booked .pnrr-slot-chip__status {
    color: var(--pnrr-accent);
    font-weight: 700;
}

/* ---------------------------------------------------------------------- */
/* 15. Chiusura/apertura slot in blocco (my-slots, Stage 9)                */
/* ---------------------------------------------------------------------- */
.pnrr-bulk-panel {
    background: var(--pnrr-bg);
    border: 1px solid var(--pnrr-border);
    border-radius: var(--pnrr-radius);
    padding: 1.25rem 1.5rem;
    margin-bottom: 1.5rem;
}

.pnrr-bulk-panel__title {
    font-family: var(--pnrr-font-display);
    color: var(--pnrr-primary-dark);
    font-size: 1.1rem;
    margin: 0 0 0.4rem;
}

.pnrr-bulk-panel .pnrr-field-row {
    margin-bottom: 0.75rem;
}

.pnrr-bulk-panel__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 1rem;
}
