/* Rionale — Sacrestia */

/* Intestazione in fascia terracotta, con la filigrana: testo bianco, voce attiva in una pastiglia bianca.
   La fascia mostra la parte alta dello sfondo d'apertura della vetrina (alto 36rem): stessa sfumatura, stessa luce. */
.s-header {
  color: var(--r-band-text);
  background:
    var(--r-band-pattern),
    radial-gradient(38rem circle at 82% 68%, var(--r-band-glow), transparent 70%) top / 100% 36rem no-repeat,
    linear-gradient(135deg, var(--r-band-1), var(--r-band-2)) top / 100% 36rem no-repeat,
    var(--r-band-2);
  box-shadow: 0 6px 20px rgba(60, 25, 10, 0.18);
}

.s-header a,
.s-header .r-brand { color: var(--r-band-text); }
.s-header .r-brand span { color: var(--r-band-muted); }
.s-header :focus-visible { outline-color: #ffffff; }
.s-header .r-btn-secondary { background: transparent; border-color: var(--r-band-line); color: var(--r-band-text); }
.s-header .r-btn-secondary:hover { background: #ffffff; border-color: #ffffff; color: var(--r-band-1); }

.s-header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  padding: 0.8rem 0;
}

.s-org {
  font-weight: 600;
  color: var(--r-band-muted);
}

.s-nav {
  display: flex;
  gap: 0.25rem;
  flex-wrap: wrap;
  list-style: none;
  margin: 0;
  padding: 0;
}

.s-nav a {
  display: inline-block;
  padding: 0.5rem 0.9rem;
  border-radius: var(--r-radius-sm);
  text-decoration: none;
  color: var(--r-band-text);
  font-weight: 600;
}

.s-nav a:hover { box-shadow: inset 0 0 0 2px var(--r-band-line); }
.s-nav a[aria-current="page"] { background: #ffffff; color: var(--r-band-1); }

/* Menu per gruppi: un <details> per gruppo, la tendina su un riquadro chiaro. */
.s-nav-menu { position: relative; }
.s-nav-menu > summary {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.5rem 0.9rem;
  border-radius: var(--r-radius-sm);
  font-weight: 600;
  cursor: pointer;
  list-style: none;
  user-select: none;
}
.s-nav-menu > summary::-webkit-details-marker { display: none; }
.s-nav-menu > summary::after {
  content: "";
  width: 0.42rem;
  height: 0.42rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(-0.12rem) rotate(45deg);
}
.s-nav-menu[open] > summary::after { transform: translateY(0.12rem) rotate(-135deg); }
.s-nav-menu > summary:hover,
.s-nav-menu[open] > summary { box-shadow: inset 0 0 0 2px var(--r-band-line); }
.s-nav-menu > summary.s-nav-current { background: #ffffff; color: var(--r-band-1); }
.s-nav-panel {
  position: absolute;
  top: calc(100% + 0.35rem);
  left: 0;
  z-index: 40;
  min-width: 13rem;
  margin: 0;
  padding: 0.35rem;
  list-style: none;
  background: var(--r-surface);
  border: 1px solid var(--r-border);
  border-radius: var(--r-radius);
  box-shadow: var(--r-shadow);
}
.s-nav .s-nav-panel a {
  display: block;
  padding: 0.55rem 0.8rem;
  color: var(--r-text);
}
.s-nav .s-nav-panel a:hover { box-shadow: none; background: var(--r-surface-alt); }
.s-nav .s-nav-panel a[aria-current="page"] { background: var(--r-surface-alt); color: var(--r-primary); box-shadow: inset 3px 0 0 var(--r-primary); }
.s-header .s-nav-panel :focus-visible { outline-color: var(--r-focus); }

.s-user {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  flex-wrap: wrap;
  font-size: 0.95rem;
}

.s-main {
  padding: 1.5rem 0 3rem;
}

.s-title {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1.25rem;
}

.s-footer {
  background: var(--r-footer);
  padding: 1.1rem 0 2rem;
  color: var(--r-footer-text);
  font-size: 0.9rem;
}

.s-footer :focus-visible { outline-color: #ffffff; }

.s-footer a { color: inherit; }

/* Pagine di accesso: un riquadro bianco al centro di uno sfondo terracotta, come la vetrina */
.s-auth {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 2rem 1rem;
  color: var(--r-band-text);
  background:
    var(--r-band-pattern),
    radial-gradient(40rem circle at 85% 15%, var(--r-band-glow), transparent 70%),
    linear-gradient(135deg, var(--r-band-1), var(--r-band-2));
}

.s-auth-card {
  width: min(100%, 30rem);
}

.s-auth-card .r-card { padding: 2rem; color: var(--r-text); box-shadow: 0 18px 44px rgba(40, 15, 5, 0.35); border: 0; }
.s-auth-brand { text-align: center; margin-bottom: 1.25rem; }
.s-auth-brand .r-brand { color: var(--r-band-text); font-size: 1.45rem; }
.s-auth-brand .r-brand span { color: var(--r-band-muted); }
.s-auth-links { text-align: center; margin-top: 1.25rem; font-size: 0.95rem; }
.s-auth-card > .s-auth-links,
.s-auth-card > .s-auth-links a { color: var(--r-band-muted); }
.s-auth-brand :focus-visible,
.s-auth-card > .s-auth-links :focus-visible { outline-color: #ffffff; }

/* «Entra» e «Crea il tuo account»: i tre modi alla pari, stesso aspetto per tutti (12/10/2026).
   Niente più Apple in nero: nessuno dei tre deve risaltare sugli altri. */
.s-auth-choices { display: grid; gap: 0.75rem; margin-top: 1.5rem; }
.r-btn-choice {
  background: var(--r-surface);
  border-color: var(--r-field-border);
  color: var(--r-text);
}
.r-btn-choice:hover { border-color: var(--r-accent); background: var(--r-surface); color: var(--r-text); }
.s-auth-back { margin: 0 0 1rem; font-size: 0.95rem; }
/* «Manca solo un passo», al ritorno da Google o Apple senza account (12/10/2026) */
.s-signup-title { text-wrap: balance; }
.s-signup-hello { font-size: 1.15rem; font-weight: 600; margin: 0 0 0.4rem; }
.s-signup-email { margin: 0; font-weight: 600; overflow-wrap: anywhere; }

/* Profilo: impostare una password quando si è entrati solo con Google o Apple */
.s-oauth-password summary { cursor: pointer; font-weight: 600; color: var(--r-muted); }
.s-oauth-password[open] summary { color: var(--r-text); }
.s-oauth-password .r-grid { margin-top: 0.8rem; }

/* Cruscotto */
.s-dashboard-grid { margin-bottom: 1rem; }

@media (max-width: 40rem) {
  .s-header-inner { padding: 0.6rem 0; }
  .s-nav a { padding: 0.45rem 0.7rem; }
  .s-nav-menu > summary { padding: 0.45rem 0.7rem; }
  /* Sul telefono la tendina prende tutta la larghezza del menu. */
  .s-nav { position: relative; }
  .s-nav-menu { position: static; }
  .s-nav-panel { right: 0; min-width: 0; }
}

/* Persone e famiglie (passo 5) */
.p-filters { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: flex-end; }
.p-filters .r-grid { flex: 1 1 100%; margin: 0; }
.p-filters .r-field { margin-bottom: 0; }
.p-consents { white-space: nowrap; }
.p-consent {
  display: inline-grid;
  place-items: center;
  width: 1.6rem;
  height: 1.6rem;
  border-radius: 50%;
  font-size: 0.8rem;
  font-weight: 600;
  margin-right: 0.2rem;
  border: 1px solid var(--r-border);
}
.p-consent-yes { background: var(--r-accent); color: #fff; border-color: var(--r-accent); }
.p-consent-no { color: var(--r-muted); }
.p-consent-row { align-items: flex-start; }
.p-consent-row label span { display: block; }
.p-data { display: grid; grid-template-columns: max-content 1fr; gap: 0.35rem 1rem; margin: 0; }
.p-data dt { color: var(--r-muted); font-size: 0.9rem; }
.p-data dd { margin: 0; }

/* Iniziative (passo 6) */
.i-grow { flex: 1 1 14rem; }
.i-extra { border: 1px dashed var(--r-border); border-radius: var(--r-radius, 0.5rem); padding: 0.75rem; margin-bottom: 0.75rem; }
.i-checkin-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.i-checkin-row .c-body { flex: 1 1 auto; min-width: 0; }
.i-present .c-title::before { content: "✓ "; color: var(--r-accent); font-weight: 700; }
.i-scanner { width: 100%; max-width: 28rem; aspect-ratio: 4 / 3; background: #000; border-radius: 0.5rem; margin: 0.75rem 0; object-fit: cover; }
.i-participant { align-items: end; }
.i-participant-minor { align-self: center; }

/* Comunicazioni (passo 7) */
.c-preview { border-left: 3px solid var(--r-border); padding-left: 0.9rem; }
.c-preview p { margin: 0 0 0.5rem; overflow-wrap: anywhere; }

/* «La mia agenda» (passo 8) */
/* Le tue parrocchie: nome e ruolo a sinistra, i pulsanti a destra; sul telefono i pulsanti vanno sotto. */
.a-parish { align-items: center; justify-content: space-between; flex-wrap: wrap; }
.a-parish .c-body { flex: 1 1 14rem; min-width: 0; }
.a-parish-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.a-parish-actions form { margin: 0; }
.r-flex input[readonly][data-copy-source] { flex: 1 1 16rem; min-width: 0; }
/* Le tue prossime iniziative: con un titolo lungo il pulsante «Vedi il biglietto» si schiacciava su sei righe
   (01/10/2026). Il pulsante non si stringe e, se non c'è posto, va sotto. */
.a-ticket { align-items: center; justify-content: space-between; flex-wrap: wrap; }
.a-ticket .c-body { flex: 1 1 14rem; min-width: 0; }
.a-ticket > .r-btn { flex: none; white-space: nowrap; }

/* Gruppi (Fase 2): righe con i pulsanti a destra, che sul telefono vanno sotto. */
.g-row { align-items: center; justify-content: space-between; flex-wrap: wrap; }
.g-row .c-body { flex: 1 1 14rem; min-width: 0; overflow-wrap: anywhere; }
.g-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.g-actions form { margin: 0; }
.g-inline { flex-wrap: wrap; }
.g-inline .r-input, .g-inline .r-select { flex: 1 1 16rem; min-width: 0; width: auto; }
.a-group { padding: 0.45rem 0; border-top: 1px solid var(--r-border); }
.a-group:first-child { border-top: 0; }
.a-group .c-occ { padding: 0; }
.a-group p { margin: 0.3rem 0 0; }
.a-group-news { margin-top: 0.5rem; padding-left: 0.9rem; border-left: 3px solid var(--r-border); }
.a-group-news h3 { margin: 0 0 0.3rem; }
.a-group-news details { margin: 0.25rem 0; }
.a-group-news details p { overflow-wrap: anywhere; }

/* Kit di lancio (passo 10) */
.k-qr-preview { width: 12rem; max-width: 60%; margin: 0.5rem 0 1rem; }
.k-qr-preview svg { width: 100%; height: auto; display: block; }
.r-flex .k-textarea { flex: 1 1 20rem; min-width: 0; min-height: 4.5rem; resize: vertical; }
.r-flex:has(.k-textarea) { align-items: flex-start; }

/* Codici di abilitazione (SPECIFICHE §5.6): il codice si legge e si detta a gruppi di quattro. */
/* «Portare una parrocchia su Rionale» (§5.6): i passi della procedura, prima della casella del codice. */
.s-steps { margin: 0.4rem 0 0.8rem; padding-left: 1.2rem; }
.s-steps li { margin-bottom: 0.4rem; }

.s-code { font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; font-size: 1.25rem; letter-spacing: 0.08em; text-transform: uppercase; }
/* Su uno schermo stretto il codice intero (ABCD-EFGH-JKLM) non ci stava e le ultime lettere restavano
   fuori dalla casella: qui si stringe quel tanto che basta per leggerlo tutto. */
@media (max-width: 380px) {
    .s-code { font-size: 1.05rem; letter-spacing: 0.04em; }
}
.s-auth-card .s-code { flex: 1 1 12rem; min-width: 0; }

/* «Quando vale» (Services\Calendar\Period): si vede solo la parte della scelta fatta. Senza :has restano tutte visibili. */
.s-period-part { margin-top: 0.75rem; }
.s-period:has(input[name="period_mode"]) .s-period-part { display: none; }
.s-period:has(#period-dates:checked) .s-period-dates { display: grid; }
.s-period:has(#period-yearly:checked) .s-period-yearly,
.s-period:has(#period-season:checked) .s-period-season { display: block; }
.s-period .r-flex .r-select { flex: 1 1 6rem; min-width: 0; }

/* Orario di apertura delle chiese: con «stesso orario tutti i giorni» resta solo il lunedì. */
.s-hours:has(#hours_same:checked) .s-hours-other { display: none; }
.s-hours-table th[scope="row"] { white-space: nowrap; }
.s-hours-slot { flex-wrap: nowrap; align-items: center; gap: 0.35rem; }
.s-hours-slot .r-input { min-width: 6.5rem; }
/* Il riquadro non deve allargare la pagina (i fieldset di norma non si restringono sotto il contenuto). */
.s-hours { min-width: 0; }
@media (max-width: 640px) {
  .s-hours-table thead { display: none; }
  .s-hours-table, .s-hours-table tbody, .s-hours-table tr, .s-hours-table th, .s-hours-table td { display: block; width: 100%; }
  .s-hours-table tr { padding: 0.5rem 0; border-bottom: 1px solid var(--r-border); }
  .s-hours-table th, .s-hours-table td { padding: 0.2rem 0; border: 0; }
  .s-hours-table td::before { content: attr(data-label); display: block; font-size: 0.85rem; color: var(--r-muted); }
  .s-hours-slot .r-input { min-width: 0; flex: 1 1 0; }
}

/* Gruppi, passo B: presenze, verbale e pagina da stampare. */
.g-attendance { flex: 0 0 auto; width: auto; min-width: 9rem; }
.g-minutes { min-height: 18rem; font-family: inherit; }
.g-meetings li .r-small { display: block; }
/* A schermo segue il tema (chiaro o scuro); su carta sempre testo nero su bianco. */
.g-print-page { background: var(--r-surface); color: var(--r-text); }
.g-print { width: min(100% - 2rem, 44rem); margin: 2rem auto; line-height: 1.55; }
.g-print h1 { font-size: 1.5rem; margin: 0.2rem 0 0.4rem; }
.g-print h2 { font-size: 1.1rem; margin: 1.4rem 0 0.4rem; }
.g-print-org { text-transform: uppercase; letter-spacing: 0.06em; font-size: 0.85rem; margin: 0; }
.g-print-draft { border: 1px dashed currentColor; padding: 0.4rem 0.7rem; display: inline-block; }
.g-print-text { overflow-wrap: anywhere; }
.g-print-sign { margin-top: 2rem; font-style: italic; }
.g-print-actions { margin-top: 2rem; display: flex; gap: 0.5rem; flex-wrap: wrap; }
@media print {
  .g-print-actions { display: none; }
  .g-print { width: auto; margin: 0; }
  .g-print-page, .g-print-page * { background: #fff !important; color: #000 !important; }
}
.g-meeting-row { padding: 0.35rem 0; border-top: 1px solid var(--r-border); }
.g-meeting-row:first-child { border-top: 0; }
.g-meeting-row .r-btn { display: inline-block; }
.g-answer { display: block; }
.g-response { border: 1px solid var(--r-border); border-radius: var(--r-radius); padding: 0.75rem 1rem; }

/* Spazi (Fase 2): la settimana di uno spazio e i dettagli di una prenotazione. */
.sp-day { padding: 0.5rem 0; border-top: 1px solid var(--r-border); }
.sp-day:first-of-type { border-top: 0; }
.sp-day h3 { margin: 0 0 0.25rem; }
.sp-day h3::first-letter { text-transform: uppercase; }
.sp-day p { margin: 0; }
.sp-today h3 { color: var(--r-accent); }
.sp-details { display: grid; grid-template-columns: minmax(8rem, max-content) 1fr; gap: 0.35rem 1rem; margin: 0; }
.sp-details dt { color: var(--r-muted); }
.sp-details dd { margin: 0; overflow-wrap: anywhere; }
@media (max-width: 36rem) { .sp-details { grid-template-columns: 1fr; } .sp-details dd { margin-bottom: 0.4rem; } }

/* Moduli online (Fase 2) */
.f-templates { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 1rem; margin-bottom: 1rem; }
.f-templates .r-card { margin: 0; display: flex; flex-direction: column; }
.f-templates .r-card p:last-child { margin-top: auto; }
.f-narrow { max-width: 10rem; }
.f-share { display: flex; flex-wrap: wrap; gap: 1rem 1.5rem; align-items: center; }
.f-share > div:last-child { flex: 1 1 18rem; min-width: 0; }
.f-share-qr { width: 9rem; background: #ffffff; border-radius: var(--r-radius-sm); padding: 0.25rem; }
.f-share-qr svg { display: block; width: 100%; height: auto; }
.f-rows { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.9rem; }
.f-row { background: var(--r-surface); border: 1px solid var(--r-border); border-radius: var(--r-radius); padding: 0.9rem 1rem; }
.f-row-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 0.6rem; }
.f-row-title { display: flex; align-items: center; gap: 0.5rem; margin: 0; font-size: 1rem; }
.f-row-num { display: inline-grid; place-items: center; min-width: 1.8rem; height: 1.8rem; border-radius: 50%; background: var(--r-surface-alt); border: 1px solid var(--r-border); font-size: 0.9rem; }
.f-row[data-row-blank] { border-style: dashed; }
.f-row-tools { display: flex; gap: 0.35rem; margin-left: auto; }
.f-row-tools[hidden] { display: none; }
.f-label { min-height: 3.2rem; resize: vertical; }
.f-add { margin-top: 1rem; }
.f-builder-actions { position: sticky; bottom: 0; padding: 0.75rem 0; background: var(--r-bg); z-index: 5; }
.f-preview { max-width: 46rem; }
.f-summary { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: 1rem 1.5rem; }
.f-summary h3 { margin: 0 0 0.3rem; }
.f-counts { list-style: none; margin: 0; padding: 0; }
.f-counts li { display: flex; justify-content: space-between; gap: 0.75rem; padding: 0.2rem 0; border-top: 1px solid var(--r-border); }
.f-counts li:first-child { border-top: 0; }
.f-print-item { padding-bottom: 1.5rem; margin-bottom: 1.5rem; border-bottom: 1px solid var(--r-border); }
.f-print-item:last-child { border-bottom: 0; }
.f-print-foot { margin-top: 1rem; color: var(--r-muted); }
@media print {
  .f-print-item { break-after: page; border-bottom: 0; }
  .f-print-item:last-child { break-after: auto; }
  .f-answer { break-inside: avoid; }
}

/* Richieste alla segreteria (Fase 2) */
.rq-views { margin-bottom: 0.75rem; flex-wrap: wrap; }
.rq-type { display: grid; gap: 0.5rem; padding: 0.75rem 0; border-top: 1px solid var(--r-border); }
.rq-type:first-child { border-top: 0; }
.rq-type form { margin: 0; }
.rq-type-links { margin: 0; }
.rq-layout { display: grid; grid-template-columns: minmax(0, 2fr) minmax(16rem, 1fr); gap: 1rem; align-items: start; }
.rq-main > .r-card, .rq-side > .r-card { margin-top: 0; margin-bottom: 1rem; }
.rq-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.rq-actions form { margin: 0; }
.rq-side details summary { cursor: pointer; font-weight: 600; }
.rq-events { list-style: none; margin: 0; padding: 0; }
.rq-event { padding: 0.6rem 0 0.6rem 0.9rem; border-left: 3px solid var(--r-border); margin-bottom: 0.4rem; }
.rq-event-head { margin: 0; display: flex; flex-wrap: wrap; gap: 0.25rem 0.6rem; align-items: baseline; }
.rq-event-text { margin-top: 0.35rem; overflow-wrap: anywhere; }
.rq-event-message_out { border-left-color: var(--r-accent); }
.rq-event-message_in, .rq-event-appointment_change { border-left-color: var(--r-primary); }
.rq-note { background: var(--r-surface-alt); border-radius: 0 var(--r-radius-sm) var(--r-radius-sm) 0; }
@media (max-width: 52rem) {
  .rq-layout { grid-template-columns: 1fr; }
}

/* Benedizione delle famiglie (Richieste, passo B) */
.bl-zone-side { display: flex; flex-direction: column; align-items: flex-end; gap: 0.25rem; text-align: right; }
.bl-new { font-weight: 600; color: var(--r-accent); }
.bl-streets { margin: 0.25rem 0 0.5rem; padding-left: 1.2rem; columns: 2 14rem; column-gap: 1.5rem; }
.bl-streets li { break-inside: avoid; overflow-wrap: anywhere; }
.bl-reply { display: block; }
.bl-reply .c-body { gap: 0.35rem; }
.bl-reply p { margin: 0; }
.bl-reply-head { display: flex; flex-wrap: wrap; gap: 0.25rem 0.6rem; align-items: baseline; }
.bl-handled .bl-reply-head strong { opacity: 0.75; }
.bl-pref { overflow-wrap: anywhere; }
.bl-visit { color: var(--r-primary); }
.bl-visit-form summary { cursor: pointer; font-weight: 600; }
.bl-visit-form form { margin: 0.5rem 0; }
.bl-print-table { width: 100%; border-collapse: collapse; margin: 0.3rem 0 1rem; }
.bl-print-table td { border-bottom: 1px solid var(--r-border); padding: 0.35rem 0.4rem; vertical-align: top; overflow-wrap: anywhere; }
.bl-print-table td:first-child { width: 1.5rem; }
@media (max-width: 40rem) {
  .bl-zone-side { align-items: flex-start; text-align: left; }
}

/* Intenzioni di Messa e registro (Richieste, passo C) */
.in-side { display: flex; flex-direction: column; align-items: flex-end; gap: 0.2rem; text-align: right; }
.in-mass { align-items: flex-start; }
.in-mass-head { margin: 0; display: flex; flex-wrap: wrap; gap: 0.25rem 0.5rem; align-items: baseline; }
.in-mass .c-body { gap: 0.3rem; }
.in-list { list-style: none; margin: 0.3rem 0; padding: 0; }
.in-list li { display: flex; flex-wrap: wrap; gap: 0.3rem 0.6rem; align-items: baseline; padding: 0.2rem 0; }
.in-list form { margin: 0; }
.in-assign { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: end; margin: 0.4rem 0; }
.in-assign .r-select { flex: 1 1 18rem; min-width: 0; }
.in-mass-details summary { cursor: pointer; }
.in-mass-details form { margin: 0.5rem 0; }
.in-totals { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.2rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
.in-table-wrap { overflow-x: auto; }
.in-register { width: 100%; border-collapse: collapse; margin: 0.3rem 0 1rem; }
.in-register th, .in-register td { border: 1px solid var(--r-border); padding: 0.35rem 0.5rem; vertical-align: top; text-align: left; overflow-wrap: anywhere; }
.in-register th { font-size: 0.9rem; }
.in-register .in-num { text-align: right; white-space: nowrap; }
.in-register .in-hour { width: 4rem; white-space: nowrap; font-weight: 600; }
.in-sheet-item { margin: 0.15rem 0; }
.in-signatures { display: flex; flex-wrap: wrap; gap: 1.5rem; margin-top: 2.5rem; }
.in-signatures div { flex: 1 1 12rem; font-size: 0.9rem; }
.in-sign-line { display: block; border-top: 1px solid currentColor; margin-bottom: 0.3rem; height: 2.5rem; }
@media (max-width: 40rem) {
  .in-side { align-items: flex-start; text-align: left; }
}
@media print {
  .in-register { font-size: 0.85rem; }
  .in-register td:nth-child(1), .in-register td:nth-child(3), .in-register td:nth-child(5) { white-space: nowrap; }
  .in-register tr, .in-signatures { break-inside: avoid; }
}

/* Turni e servizi (SPECIFICHE §7.11) */
.sh-shift { align-items: flex-start; }
.sh-shift .c-body { gap: 0.35rem; }
.sh-head { margin: 0; display: flex; flex-wrap: wrap; gap: 0.25rem 0.6rem; align-items: baseline; }
.sh-people { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.3rem 0.9rem; }
.sh-people li { display: flex; align-items: center; gap: 0.4rem; }
.sh-people form, .sh-assign, .sh-more form { margin: 0; }
.sh-assign { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: end; }
.sh-assign .r-select { flex: 1 1 14rem; min-width: 0; }
.sh-released { color: var(--r-muted); }
.sh-more summary, .sh-release summary { cursor: pointer; }
.sh-more form + form { margin-top: 0.5rem; }

/* Catechesi (SPECIFICHE §7.13) */
.ct-warning { color: var(--r-accent); }
.ct-left .c-title { opacity: 0.7; text-decoration: line-through; }
/* Il nome di una tappa può essere lungo: va a capo invece di uscire dalla riga sui telefoni stretti. */
.ct-step { white-space: normal; overflow-wrap: anywhere; max-width: 100%; text-align: left; border-radius: 0.9rem; }
.ct-confirm { display: flex; flex-wrap: nowrap; gap: 0.4rem; align-items: center; margin: 0; flex: none; }
.ct-confirm .r-label { white-space: nowrap; margin: 0; }
.ct-confirm .r-select { flex: 0 0 11rem; min-width: 0; }
@media (max-width: 40rem) {
    .ct-confirm { flex-wrap: wrap; flex: 1 1 100%; }
    .ct-confirm .r-select { flex: 1 1 9rem; }
}
/* Catechesi, passo B: incontri, presenze e «cosa serve». */
.ct-checklist { margin-top: 0.35rem; }
.ct-checklist summary { cursor: pointer; }
.ct-checklist > span { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-top: 0.3rem; }
.ct-checklist form { margin: 0; }
.ct-attendance { flex-wrap: wrap; gap: 0.5rem; justify-content: space-between; }
.ct-choices { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.ct-absence { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin-top: 0.5rem; }
.ct-absence .r-label { flex: 1 1 100%; margin: 0; }
.ct-absence .r-select { flex: 0 1 15rem; min-width: 0; }
.ct-absence .r-input { flex: 1 1 10rem; min-width: 0; }
.ct-cancel > summary { display: inline-block; list-style: none; cursor: pointer; }
.ct-cancel > summary::-webkit-details-marker { display: none; }
.ct-cancel form { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.4rem; }
.ct-cancel .r-check { flex: 1 1 100%; display: flex; gap: 0.4rem; align-items: center; margin: 0; }
.ct-next { list-style: none; margin: 0.15rem 0 0.2rem; padding: 0; display: grid; gap: 0.15rem; }
.ct-next li { overflow-wrap: anywhere; }
.ct-off s { opacity: 0.75; }
.ct-off strong { color: var(--r-accent); }
.ct-cancel .r-input { flex: 1 1 12rem; min-width: 0; }

/* Galleria, solo in Sacrestia: modifica delle foto e richieste di rimozione. */
.gl-hidden img { opacity: 0.45; filter: grayscale(1); }
.gl-photo-form { display: flex; flex-direction: column; gap: 0.3rem; margin: 0; }
.gl-photo-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.gl-photo-actions form { margin: 0; }
.gl-edit summary { cursor: pointer; color: var(--r-muted); }
.gl-edit[open] summary { color: var(--r-text); }
.gl-edit > * { margin-top: 0.35rem; }
.gl-levels { margin: 0.4rem 0 0; padding-left: 1.1rem; }
.gl-levels-form { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.75rem; }
.gl-removal { align-items: flex-start; gap: 0.75rem; }
.gl-removal-thumb img { width: 5rem; height: 5rem; object-fit: cover; border-radius: var(--r-radius-sm); }
.gl-removal-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin-top: 0.4rem; }
.gl-removal-actions .r-input { flex: 1 1 12rem; min-width: 0; }

/* Notiziario, solo in Sacrestia: elenco dei blocchi e anteprima. */
.nz-weekly { display: flex; flex-wrap: wrap; gap: 0.6rem; align-items: end; }
.nz-weekly .r-field { margin: 0; }
.nz-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; }
.nz-actions form { margin: 0; }
/* A 320 punti i pulsanti dei blocchi si stringevano tanto da spezzare «Togli» su due righe: una parola
   sola in un pulsante non va mai a capo, semmai va a capo il pulsante (29/09/2026). */
.nz-actions .r-btn, .nz-block-row .rq-actions .r-btn { white-space: nowrap; }
.nz-block-row { align-items: flex-start; }
.nz-edit summary { cursor: pointer; color: var(--r-muted); }
.nz-edit[open] summary { color: var(--r-text); }
.nz-edit form { margin-top: 0.5rem; }
.nz-preview .nz-sheet { border: 1px dashed var(--r-border); border-radius: var(--r-radius-sm); padding: 1rem; }

/* Routine (§7.16): le voci di quello che Rionale fa da solo. */
.rt-row { align-items: flex-start; }
.rt-config { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin-top: 0.5rem; }
.rt-config .r-label { margin: 0; }
.rt-config .r-select { flex: 0 1 10rem; min-width: 0; }
.rt-config .r-input { flex: 0 0 5rem; }
.rt-error { color: var(--r-accent); }

/* Memoria, in Sacrestia: il consenso e il percorso del funerale. */
.mm-warning { color: var(--r-accent); }
.mm-consent { border: 1px dashed var(--r-border); border-radius: var(--r-radius-sm); padding: 0.9rem; margin: 0 0 1rem; }
.mm-consent legend { padding: 0 0.4rem; font-weight: 600; }
.mm-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.75rem; }
.mm-actions form { margin: 0; }

/* Lezionario: quanti giorni ci sono in archivio, mese per mese. Un elenco, non un grafico:
   la domanda è «ci sono?», e un numero accanto al mese la chiude. */
.l-months { list-style: none; margin: 0.25rem 0 0.75rem; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.l-months li { display: flex; align-items: baseline; gap: 0.35rem; padding: 0.3rem 0.5rem; border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); }
.l-month { font-variant-numeric: tabular-nums; }

/* Condividi (§7.8): i testi pronti per portare fuori dalla Piazza un contenuto già pubblico.
   Rionale non pubblica: prepara. Per questo la pagina è fatta di testi da copiare, non di interruttori. */
.sh-name { margin-top: 0; }
.sh-sub { margin: 1rem 0 0.25rem; font-size: 1rem; }
.sh-textarea { min-height: 7rem; resize: vertical; font-family: inherit; }
.sh-outside { border-left: 3px solid var(--r-accent); }
.sh-blocked { color: var(--r-accent); }
.sh-native { display: inline-block; }
/* Il riquadro nei moduli: si sceglie dove, non si manda niente. Mai spuntato in partenza. */
.sh-pick { border: 1px dashed var(--r-border); border-radius: var(--r-radius-sm); padding: 0.9rem; margin: 1rem 0 0; min-width: 0; }
.sh-pick legend { padding: 0 0.4rem; font-weight: 600; }
/* Un pulsante fermo finché la dichiarazione non è spuntata: si vede che c'è, e si vede che non parte. */
.is-disabled { opacity: 0.45; cursor: not-allowed; }

/* Tabellone (§7.17), in Sacrestia: gli schermi con il loro stato, le sequenze e le schermate. */
.tb-board { align-items: flex-start; gap: 0.8rem; flex-wrap: wrap; }
.tb-board .c-body { flex: 1 1 16rem; min-width: 0; }
.tb-state-online { background: var(--r-success-bg); color: var(--r-success); }
.tb-state-silent { background: var(--r-error-bg); color: var(--r-error); }
.tb-warn { display: block; color: var(--r-error); }
.tb-steps { margin: 0 0 1rem; padding-left: 1.4rem; }
.tb-steps li { margin: 0 0 0.35rem; overflow-wrap: anywhere; }
.tb-list { margin: 0 0 0.75rem; padding-left: 1.2rem; }
.tb-list li { margin: 0 0 0.3rem; }
.tb-code-input { max-width: 12rem; font-size: 1.4rem; font-weight: 700; letter-spacing: 0.15em; text-transform: uppercase; }
.tb-number { max-width: 7rem; }
.tb-dates { gap: 1rem; flex-wrap: wrap; }
.tb-dates .r-field { flex: 1 1 10rem; margin-bottom: 0.25rem; }
.tb-slide-row { align-items: center; gap: 0.8rem; flex-wrap: wrap; }
.tb-slide-row .c-body { flex: 1 1 14rem; min-width: 0; }
.tb-off .c-title a { color: var(--r-muted); }
.tb-thumb { flex: 0 0 auto; width: 96px; height: 54px; object-fit: cover; border-radius: var(--r-radius-sm); background: var(--r-surface-alt); }
.tb-thumb-large { width: 240px; height: 135px; max-width: 100%; }
.tb-kinds { list-style: none; margin: 0 0 0.75rem; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: 0.6rem; }
.tb-kind { display: flex; flex-direction: column; gap: 0.2rem; height: 100%; padding: 0.7rem 0.8rem; border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); text-decoration: none; color: var(--r-text); background: var(--r-surface); box-sizing: border-box; }
.tb-kind:hover, .tb-kind:focus { border-color: var(--r-primary); }
.tb-kind-name { font-weight: 700; color: var(--r-primary-strong); }
/* Tabellone, programma di uno schermo (passo B). */
.tb-rule { border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); padding: 0.7rem 0.8rem; margin: 0 0 0.9rem; min-width: 0; }
.tb-rule legend { padding: 0 0.3rem; }
.tb-rule-row { gap: 0.5rem; justify-content: flex-start; align-items: center; }
.tb-rule-row .r-input { flex: 1 1 10rem; min-width: 0; }
.tb-rule-row .tb-number, .tb-rule-row .tb-time { flex: 0 0 auto; width: 7rem; }
.tb-days { display: flex; flex-wrap: wrap; gap: 0.3rem 0.9rem; }
.tb-add-window { margin-top: 0.6rem; }
.tb-add-window summary { cursor: pointer; font-weight: 600; color: var(--r-primary-strong); }
.tb-tl-day { margin: 1rem 0 0.4rem; font-size: 1rem; }
.tb-timeline { list-style: none; margin: 0; padding: 0; }
.tb-timeline li { display: flex; gap: 0.7rem; padding: 0.4rem 0; border-top: 1px solid var(--r-border); }
.tb-timeline li:first-child { border-top: 0; }
.tb-tl-time { flex: 0 0 6.6rem; font-variant-numeric: tabular-nums; font-weight: 700; }
.tb-tl-what { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.tb-tl-what a { display: block; margin-top: 0.1rem; }

/* Foglietti dei canti di Coralis (§12.3): una riga per celebrazione, con il codice del QR. */
.cs-row { align-items: flex-start; }
/* Le chiavi del telecomando: su un telefono il pulsante «Revoca» va a capo sotto il nome, non si schiaccia. */
.rk-key { align-items: flex-start; gap: 0.8rem; flex-wrap: wrap; }
.rk-key .c-body { flex: 1 1 16rem; min-width: 0; }
.rk-fresh .r-flex { flex-wrap: wrap; }
.rk-fresh .r-input { flex: 1 1 14rem; min-width: 0; }
.cs-status { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin: 0.3rem 0; }
/* Lo stato del foglietto può essere lungo («Si apre lunedì 28 settembre alle 22:30»): a 320 punti va a capo
   dentro la pillola, invece di uscire dalla scheda. */
.cs-status .r-badge { white-space: normal; max-width: 100%; }
.cs-code { font-weight: 600; overflow-wrap: anywhere; }
.cs-add { margin-top: 0.2rem; }
.cs-add summary { cursor: pointer; font-size: 0.9rem; font-weight: 600; color: var(--r-primary-strong); }
.cs-form { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin-top: 0.4rem; }
.cs-form label { flex: 1 1 100%; }
.cs-form .r-input { flex: 1 1 12rem; min-width: 0; }

/* Osservatorio diocesano (§5.3): l'elenco delle parrocchie, le proposte e la ricerca. Tutto in colonna sul
   telefono: i nomi delle parrocchie sono lunghi e a 320 punti non stanno accanto a un pulsante. */
.dc-row { align-items: flex-start; }
.dc-links { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin: 0.2rem 0; }
.dc-search { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: flex-end; margin-bottom: 0.8rem; }
.dc-search label { flex: 1 1 100%; }
.dc-search .r-input { flex: 1 1 12rem; min-width: 0; }
.dc-propose { display: flex; flex-direction: column; gap: 0.3rem; padding: 0.7rem 0; border-top: 1px solid var(--r-border); }
.dc-propose .r-input { width: 100%; }
.dc-propose .r-btn { align-self: flex-start; }
.dc-proposal { padding: 0.7rem 0; border-top: 1px solid var(--r-border); }
.dc-proposal:first-of-type { border-top: 0; padding-top: 0.2rem; }

/* Unità pastorale (§5.2): «In quali parrocchie», nel modulo di un annuncio o di un appuntamento. Le spunte
   stanno in colonna anche quando i nomi delle parrocchie sono lunghi; il riquadro si distingue dal resto del
   modulo senza urlare. */
.un-targets { border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); padding: 0.7rem 0.8rem; }
.un-targets legend { padding: 0 0.4rem; }
.un-targets .r-hint { display: block; margin-bottom: 0.4rem; }
.un-targets .r-check { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: baseline; margin: 0 0 0.35rem; overflow-wrap: anywhere; }
.un-targets .r-check:last-child { margin-bottom: 0; }

/* Il testo di una comunicazione della curia: si legge, non si scorre di lato. */
.dn-text { white-space: pre-wrap; overflow-wrap: anywhere; margin: 0.2rem 0 0.6rem; }

/* Permessi su misura di un collaboratore (§5.5): un riquadro per modulo, in colonna sul telefono. */
.mp-modules { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(16rem, 100%), 1fr)); gap: 0.8rem; margin: 0 0 1rem; }
.mp-module { border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); padding: 0.7rem 0.8rem; margin: 0; min-width: 0; }
.mp-module legend { padding: 0 0.4rem; font-weight: 600; }
.mp-module .r-check { margin: 0 0 0.35rem; }
.mp-module .r-check:last-child { margin-bottom: 0; }
.mp-module label { overflow-wrap: anywhere; }

/* Indicatori dell'Osservatorio (§5.3): l'adozione nel tempo, una barra per mese. Niente stili inline (la CSP
   li vieta): la lunghezza è una classe a scaglioni di dieci. */
.di-months { list-style: none; margin: 0.4rem 0 0; padding: 0; }
.di-months li { display: flex; align-items: center; gap: 0.6rem; padding: 0.25rem 0; }
.di-month { flex: 0 0 6.5rem; font-size: 0.9rem; color: var(--r-muted); }
.di-bar { flex: 1 1 auto; height: 0.7rem; background: var(--r-surface-alt); border-radius: 999px; overflow: hidden; }
.di-fill { display: block; height: 100%; background: var(--r-primary-strong); border-radius: 999px; }
.di-count { flex: 0 0 2rem; text-align: right; font-weight: 600; }
.di-w-0 { width: 0%; }
.di-w-10 { width: 10%; }
.di-w-20 { width: 20%; }
.di-w-30 { width: 30%; }
.di-w-40 { width: 40%; }
.di-w-50 { width: 50%; }
.di-w-60 { width: 60%; }
.di-w-70 { width: 70%; }
.di-w-80 { width: 80%; }
.di-w-90 { width: 90%; }
.di-w-100 { width: 100%; }

/* Parrocchia dimostrativa (01/10/2026): l'ingresso con le tre strade e la fascia che dice dove si è. */
.d-choices { display: grid; gap: 1rem; margin-top: 1.25rem; }
.d-choice { display: grid; gap: 0.5rem; padding-top: 1rem; border-top: 1px solid var(--r-border); }
.d-choice h2 { font-size: 1.15rem; margin: 0; }
.d-choice p { margin: 0; }
.d-banner { display: flex; flex-wrap: wrap; gap: 0.6rem 1rem; align-items: center; justify-content: space-between; margin-bottom: 1rem; padding: 0.75rem 1rem; border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); background: var(--r-info-bg); color: var(--r-text); }
.d-banner p { margin: 0; flex: 1 1 18rem; min-width: 0; }
.d-banner form { margin: 0; }

/* Pannello → Demo, «Manda la demo» (10/10/2026): il messaggio, i pulsanti che lo aprono e il QR per chi è lì. */
.dm-send .dm-message { min-height: 8rem; }
.dm-actions .r-btn { flex: 1 1 12rem; }
.dm-qr { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--r-border); }
.dm-qr h3 { margin: 0 0 0.35rem; }
.dm-qr p { margin: 0; }

/* L'amministrazione di Rionale: il cruscotto e le passkey (09/10/2026). */
.s-dashboard { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(17rem, 100%), 1fr)); margin-top: 1rem; }
.s-dashboard .r-card { margin: 0; display: flex; flex-direction: column; }
.s-dashboard .r-card > p:last-child { margin-top: auto; margin-bottom: 0; }
.s-card-alert { border-left: 4px solid var(--r-accent); }
.s-figures { list-style: none; padding: 0; margin: 0 0 0.75rem; }
.s-figures li { display: flex; align-items: baseline; gap: 0.6rem; padding: 0.15rem 0; color: var(--r-muted); }
.s-figures .s-figure { font-size: 1.6rem; font-weight: 700; line-height: 1.1; min-width: 2.4rem; text-align: right; color: var(--r-text); font-variant-numeric: tabular-nums; }
.s-figures .s-figure-strong { color: var(--r-text); }
.s-figures .s-figure-strong .s-figure { color: var(--r-accent); }
.s-codes { list-style: none; padding: 0; margin: 0.75rem 0 0; display: grid; gap: 0.4rem; grid-template-columns: repeat(auto-fit, minmax(min(10rem, 100%), 1fr)); }
.s-codes code { display: block; padding: 0.45rem 0.6rem; border: 1px solid var(--r-border); border-radius: var(--r-radius-sm); background: var(--r-surface-alt); font-size: 1.05rem; letter-spacing: 0.06em; text-align: center; }
.s-list { list-style: none; padding: 0; margin: 0; }
.s-list > li { padding: 0.6rem 0; border-top: 1px solid var(--r-border); gap: 0.75rem; }
.s-list > li:first-child { border-top: 0; }
