Allinea contenuti legali e rifinisce UI home/footer.
Riorganizza privacy/gdpr/terms con struttura dati dedicata, uniforma copy e stile delle sezioni principali, aggiorna card prodotto/servizi e migliora ordine e separatori del footer per una presentazione più coerente. Made-with: Cursor
This commit is contained in:
@ -4,29 +4,80 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
|
||||
<SubpageLayout
|
||||
title="Chi siamo — NexStudio"
|
||||
description="Chi è NexStudio: missione, team e ambiti Legal Tech e Health Tech."
|
||||
description="Missione, valori e come lavoriamo con studi legali e strutture sanitarie: qualità, verticalità e impegno nel tempo."
|
||||
heading="Chi siamo"
|
||||
lead="Un team giovane e dinamico di programmatori dalla Tailandia e dall'Italia, uniti per creare
|
||||
applicazioni ad alta usabilità ed efficienza"
|
||||
lead="Siamo un team internazionale — tra Bangkok e l’Italia — che unisce ingegneria del software, intelligenza artificiale applicata e conoscenza dei domini regolamentati, per strumenti professionali usabili e sostenibili nel tempo."
|
||||
>
|
||||
<p>
|
||||
Ci impegnamo nel rendere invisibile la tecnologia. Creiamo software che si fanno carico di processi strutturati
|
||||
e calcoli intricati, sollevando l'utilizzatore da compiti impegnativi, dispersivi e soggetti ad errori.
|
||||
Siamo focalizzati su software SaaS ad alta complessità per settori
|
||||
regolamentati, specificatamente legale e medico, con focus su intelligenza artificiale integrata nei flussi
|
||||
professionali (LexAura, MediAura). Nascondiamo sotto una superficie fluida e intuitiva motori
|
||||
ad alta ingegneria. Abbiamo racchiuso una logica complessa in un’interfaccia essenziale, affinché basti solo
|
||||
premere un tasto dove prima servivano ore di lavoro.
|
||||
Ci impegniamo a rendere la tecnologia invisibile nel lavoro quotidiano. Progettiamo
|
||||
<strong>software che assume su di sé</strong> processi strutturati, controlli e
|
||||
complessità computazionale, così che chi lavora su norme, pazienti o documentazione
|
||||
possa concentrarsi su <strong>giudizio, responsabilità e relazione</strong> — non su
|
||||
menu, formati o incertezze operative. Nascondere la complessità sotto
|
||||
<strong>interfaccia essenziale, tempi reattivi e tracciabilità</strong> è al centro di
|
||||
come disegniamo il prodotto, non un optional estetico.
|
||||
</p>
|
||||
<h2>Dove operiamo</h2>
|
||||
|
||||
<h2>La nostra missione</h2>
|
||||
<p>
|
||||
Base operativa a Bangkok; collaborazione con clienti a livello internazionale. Dettagli in <a
|
||||
class="text-sky-400/90 hover:text-sky-300"
|
||||
href="/dove-siamo">Dove siamo</a
|
||||
>.
|
||||
Operiamo dove un errore pesa: <strong>Legal Tech e Health Tech</strong>. Qui servono
|
||||
precisione, tracciamento delle scelte e rispetto dei vincoli normativi, non
|
||||
sperimenti generici. La nostra missione è fornire <strong>piattaforme SaaS mature</strong>
|
||||
— come <strong>LexAura</strong> e <strong>MediAura</strong> — che integrino modelli
|
||||
d’intelligenza artificiale in flussi già vissuti dallo studio o dalla struttura, con
|
||||
continuità tra automazione, revisione umana e responsabilità riconoscibile.
|
||||
</p>
|
||||
<h2>Contatti</h2>
|
||||
|
||||
<h2>Perché possiamo meritare la tua fiducia</h2>
|
||||
<p>
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/#contatti">Vai alla sezione Contatti</a> sulla homepage.
|
||||
La fiducia non si ottiene con un motto, ma con <strong>ingegneria, chiarezza e
|
||||
continuità</strong>. Significa architetture provate, aggiornamenti regolari dei
|
||||
modelli d’analisi, assistenza e formazione laddove l’adozione chiede metodo oltre
|
||||
al click. Significa anche onestà sui confini: l’IA nelle nostre offerte è pensata
|
||||
per <strong>estendere e accelerare</strong> il lavoro professionale, lasciando a
|
||||
avvocato, medico o organizzazione <strong>la decisione finale e la
|
||||
documentazione</strong> che la norma richiede.
|
||||
</p>
|
||||
|
||||
<h2>Come lavoriamo, in sintesi</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Verticalità e dominio.</strong> Less genericismo, più requisiti operativi
|
||||
(normative, flussi, audit) incorporati fin dalla progettazione.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Qualità e sicurezza come priorità, non retorica.</strong> Ingegneria, test
|
||||
e infrastrutture coerenti con l’esposizione a dati sensibili.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Supporto e evoluzione.</strong> Il rapporto con il cliente non finisce
|
||||
all’abbonamento: manutenzione evolutiva, assistenza e procedure chiare in caso di
|
||||
urgenze operative, dove serve.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Comunicazione trasparente.</strong> Documentazione, informativa privacy
|
||||
(dove obbligo) e <strong>aspettative reciproche</strong> esplicite, perché
|
||||
l’onboarding non diventi il primo ostacolo.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Team e cultura</h2>
|
||||
<p>
|
||||
Siamo developer, product e specialisti di dominio in un <strong>modello
|
||||
distribuito</strong>: fusi orari diversi e linguaggi comuni, un solo obiettivo
|
||||
prodotto. Ci muoviamo con <strong>iterazioni rapide</strong> laddove serve
|
||||
innovazione, e con <strong>governance</strong> laddove un cambiamento impatta
|
||||
validazione, conformità o continuità del servizio. La diversità del gruppo
|
||||
(competenze, contesti) è per noi vantaggio competitivo: riduce l’assunto implicito
|
||||
e costringe a rendere esplicito ciò che il software promette, e a chi.
|
||||
</p>
|
||||
|
||||
<h2>Impegno nel tempo</h2>
|
||||
<p>
|
||||
Il settore che ci sceglie non cerca un prototipo, ma <strong>un percorso
|
||||
sostenibile</strong>: allineamento normativo, adozione in team, affiancamento quando
|
||||
qualcosa non gira. Costruiamo e manteniamo il prodotto con quella lente, perché
|
||||
nelle vostre professioni la <strong>continuità</strong> non è comodità, è
|
||||
requisito.
|
||||
</p>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -1,5 +1,13 @@
|
||||
---
|
||||
import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
import {
|
||||
getCodiceEticoPremessa,
|
||||
codiceEticoConformityBlocks,
|
||||
qualitaValidazioneProdotto,
|
||||
getCodiceEticoProductListPhrase,
|
||||
notePraticheDPIA,
|
||||
codiceEticoTutelaDatiRuoli,
|
||||
} from '../data/codice-etico';
|
||||
|
||||
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
|
||||
---
|
||||
@ -23,9 +31,29 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
<li><a class={link} href="#ambito">Ambito di applicazione</a></li>
|
||||
<li><a class={link} href="#valori">Valori e principi fondamentali</a></li>
|
||||
<li>
|
||||
<a class={link} href="#conformita">Conformità normativa specifica (ambito legale e medico)</a>
|
||||
<a class={link} href="#conformita">Conformità normativa (per perimetro: piattaforma, legale, sanitario)</a>
|
||||
<ol class="mt-2 list-decimal space-y-1 pl-5 text-nx-muted/95">
|
||||
<li>
|
||||
<a class={link} href="#conformita-piattaforma">4.1 Piattaforma e SaaS (orizzontale)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class={link} href="#conformita-legal">4.2 Ambito legale (LexAura)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class={link} href="#conformita-sanitario">4.3 Ambito sanitario (MediAura)</a>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>
|
||||
<a class={link} href="#tutela-dati">Tutela dei dati personali e dati sensibili</a>
|
||||
<ol class="mt-2 list-decimal space-y-1 pl-5 text-nx-muted/95">
|
||||
<li>
|
||||
<a class={link} href="#tutela-dati-ruoli"
|
||||
>5.1 Ruoli: pazienti, clienti, abbonati, Società</a
|
||||
>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a class={link} href="#tutela-dati">Tutela dei dati personali e dati sensibili</a></li>
|
||||
<li>
|
||||
<a class={link} href="#sicurezza">Sicurezza dell’informazione e resilienza operativa</a>
|
||||
</li>
|
||||
@ -70,11 +98,7 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
|
||||
<h2 id="premessa">1. Premessa</h2>
|
||||
<p>
|
||||
Questo Codice Etico stabilisce i principi, i doveri e le regole di comportamento che tutti i
|
||||
soggetti coinvolti in <strong>NexStudio</strong> (di seguito «Società») devono osservare nello
|
||||
sviluppo, nella commercializzazione e nella gestione di soluzioni SaaS destinate ai settori
|
||||
legale e medico. Mira a garantire conformità normativa, tutela della privacy, sicurezza,
|
||||
qualità tecnica, protezione dei diritti degli utenti e responsabilità professionale.
|
||||
{getCodiceEticoPremessa()}
|
||||
</p>
|
||||
|
||||
<h2 id="ambito">2. Ambito di applicazione</h2>
|
||||
@ -95,37 +119,68 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
<li>Miglioramento continuo e accountability.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="conformita">4. Conformità normativa specifica (ambito legale e medico)</h2>
|
||||
<p>La Società osserva, fra gli altri:</p>
|
||||
<ul>
|
||||
<li>Thailand Personal Data Protection Act (PDPA).</li>
|
||||
<li>
|
||||
Regolamento generale sulla protezione dei dati (GDPR), quando applicabile per utenti o
|
||||
servizi nell’Unione europea.
|
||||
</li>
|
||||
<li>
|
||||
Normative sanitarie e standard locali o internazionali pertinenti (ad esempio requisiti
|
||||
nazionali per la gestione dei dati clinici, standard ISO rilevanti).
|
||||
</li>
|
||||
<li>
|
||||
Requisiti normativi per dispositivi medici o software medicale (ad esempio EU MDR,
|
||||
regolamenti locali) se le funzionalità rientrano nella definizione di dispositivo medico.
|
||||
</li>
|
||||
<li>
|
||||
Norme professionali e di segreto professionale per avvocati e operatori sanitari;
|
||||
rispetto di privilegi professionali (<em>attorney–client privilege</em>, segreto medico).
|
||||
</li>
|
||||
<li>
|
||||
Se applicabile per mercati esteri: HIPAA per dati sanitari negli Stati Uniti e normative
|
||||
sull’esportazione di dati o tecnologie.
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="conformita">4. Conformità normativa specifica</h2>
|
||||
<p>
|
||||
I riferimenti sotto sono raggruppati: obblighi orizzontali a tutte le offerte
|
||||
<strong>SaaS</strong>, riferimenti distinti per il perimetro
|
||||
<strong>Legal Tech / LexAura</strong> e per <strong>Health Tech / MediAura</strong> (ciascuna
|
||||
linea può estendersi o diversificare secondo prodotto e mercato, senza commistione indebita
|
||||
ad altri perimetri). Riepilogo riga prodotto:
|
||||
<span class="text-nx-fg">{getCodiceEticoProductListPhrase()}</span>.
|
||||
</p>
|
||||
{
|
||||
codiceEticoConformityBlocks.map((block, i) => (
|
||||
<section
|
||||
class:list={['', i > 0 && 'mt-5']}
|
||||
data-conformity-block={block.id}
|
||||
>
|
||||
<h3
|
||||
id={block.anchorId}
|
||||
class="scroll-mt-8 text-base font-semibold text-nx-fg"
|
||||
>
|
||||
{block.title}
|
||||
</h3>
|
||||
{block.lead ? <p class="text-sm text-nx-muted sm:text-base">{block.lead}</p> : null}
|
||||
<ul class="mt-2 list-disc pl-5">
|
||||
{block.items.map((t) => (
|
||||
<li>{t}</li>
|
||||
))}
|
||||
</ul>
|
||||
</section>
|
||||
))
|
||||
}
|
||||
<p class="mt-6 text-sm sm:text-base">
|
||||
La Società effettua DPIA (Data Protection Impact Assessment) per trattamenti ad alto rischio e
|
||||
consulta autorità o <em>regulatory counsel</em> quando necessario.
|
||||
consulta autorità o <em>regulatory counsel</em> quando necessario, con riferimenti
|
||||
<strong>per ciascun trattamento</strong> al perimetro (piattaforma, legale, sanitario) ove
|
||||
interessa.
|
||||
</p>
|
||||
|
||||
<h2 id="tutela-dati">5. Tutela dei dati personali e dati sensibili</h2>
|
||||
<p class="text-nx-muted sm:text-base">{codiceEticoTutelaDatiRuoli.intro}</p>
|
||||
<h3
|
||||
id={codiceEticoTutelaDatiRuoli.anchorId}
|
||||
class="!mt-6 text-base font-semibold text-nx-fg"
|
||||
>
|
||||
{codiceEticoTutelaDatiRuoli.title}
|
||||
</h3>
|
||||
{
|
||||
codiceEticoTutelaDatiRuoli.rows.map((r) => (
|
||||
<p class="mt-3 sm:text-base">
|
||||
<span class="font-semibold text-nx-fg">{r.label}.</span>{' '}
|
||||
{r.text}
|
||||
</p>
|
||||
))
|
||||
}
|
||||
<p
|
||||
class="mt-4 border-l-2 border-sky-500/30 pl-4 text-sm leading-relaxed text-nx-muted"
|
||||
>
|
||||
{codiceEticoTutelaDatiRuoli.note}
|
||||
</p>
|
||||
<p class="mt-8 text-sm font-medium text-nx-fg sm:text-base">
|
||||
Nella concreta operatività, la Società e i collaboratori si attengono ai principi operativi
|
||||
seguenti (complementari ai ruoli sopra):
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Minimizzazione:</strong> raccogliere solo i dati necessari e pertinenti.</li>
|
||||
<li>
|
||||
@ -202,11 +257,14 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
<strong>Test e copertura:</strong> definire copertura minima per componenti critici; test di
|
||||
integrazione, performance e sicurezza.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Validazione clinica:</strong> per funzionalità che assistono decisioni cliniche o
|
||||
legali, procedere a validazione con esperti (clinici e legali), studi pilota, documentazione
|
||||
di limitazioni e avvertenze.
|
||||
</li>
|
||||
{
|
||||
qualitaValidazioneProdotto.map((v) => (
|
||||
<li>
|
||||
<strong>Validazione (per {v.id === 'legal' ? 'perimetro legale' : 'perimetro sanitario'}):</strong>{' '}
|
||||
{v.text}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
<li>
|
||||
<strong>Classificazione del rischio:</strong> valutare impatto su salute o diritti e
|
||||
applicare misure di mitigazione proporzionate.
|
||||
@ -338,8 +396,9 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
<ul>
|
||||
<li>
|
||||
Onboarding obbligatorio su: sicurezza informatica, privacy (PDPA e GDPR), gestione dati
|
||||
sensibili, normative mediche e legali rilevanti, uso responsabile dell’AI, pratiche di coding
|
||||
sicuro.
|
||||
sensibili, requisiti e documentazione riferibili a ciascuna linea prodotto
|
||||
(oggi: {getCodiceEticoProductListPhrase()}; estendere il curriculum quando l’elenco
|
||||
cresce), uso responsabile dell’AI, pratiche di coding sicuro.
|
||||
</li>
|
||||
<li>Formazione annuale obbligatoria e formazione aggiuntiva per ruoli critici.</li>
|
||||
<li>Registrazione e conservazione dei record di formazione.</li>
|
||||
@ -475,20 +534,7 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
|
||||
Predisporre un piano di formazione di 90 giorni per l’onboarding e formazione ricorrente
|
||||
annuale.
|
||||
</li>
|
||||
<li>
|
||||
Eseguire DPIA per i trattamenti sanitari e legali critici e verificare se parti del prodotto
|
||||
rientrano nella definizione di dispositivo medico ai fini di registrazione o approvazione
|
||||
normativa.
|
||||
</li>
|
||||
{notePraticheDPIA.map((t) => <li>{t}</li>)}
|
||||
</ul>
|
||||
|
||||
<h2>Collegamenti</h2>
|
||||
<p>
|
||||
<a class={link} href="/modello-organizzativo">Modello organizzativo</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="/about">Chi siamo</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="#indice">Torna all’indice</a>
|
||||
</p>
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -12,7 +12,7 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
|
||||
title="Cookie Policy — NexStudio"
|
||||
description="Cookie Policy NexStudio: categorie, base giuridica, consenso, terze parti, diritti e contatti. Sede Bangkok."
|
||||
heading="Cookie Policy"
|
||||
lead="Per NexStudio — sede: Bangkok, Thailandia. Versione documento 1.0, in vigore dal 21 aprile 2026. Integra l’uso del modulo di consenso first-party descritto sotto; per il trattamento dei dati personali vedi l’Informativa privacy."
|
||||
lead="Per NexStudio, con sede a Bangkok, Thailandia. Versione documento 1.0, in vigore dal 21 aprile 2026. Integra l'uso del modulo di consenso first-party descritto sotto; per il trattamento dei dati personali vedi l'informativa privacy."
|
||||
>
|
||||
<div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg">
|
||||
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
|
||||
@ -457,16 +457,5 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
|
||||
<li><span class="text-nx-muted">☐</span> Procedure DSR e revoca collegate dall’informativa privacy</li>
|
||||
<li><span class="text-nx-muted">☐</span> Link a privacy e contatti DPO/referente nel footer</li>
|
||||
</ul>
|
||||
|
||||
<h2>Collegamenti</h2>
|
||||
<p>
|
||||
<a class={link} href="/privacy">Informativa privacy</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="/codice-etico">Codice etico</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="/modello-organizzativo">Modello organizzativo</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="#indice">Torna all’indice</a>
|
||||
</p>
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -4,15 +4,13 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
|
||||
<SubpageLayout
|
||||
title="Dove siamo — NexStudio"
|
||||
description="Sede operativa e contatti NexStudio."
|
||||
description="Sede operativa a Bangkok, Thailandia; fusi orari e lingue per lavorare con clienti in Europa e altre regioni."
|
||||
heading="Dove siamo"
|
||||
lead="Sede operativa a Bangkok (Thailandia). Completate l’indirizzo, i recapiti e gli orari di riferimento per il pubblico."
|
||||
lead="NexStudio ha base a Bangkok, in Thailandia. Sotto, come organizziamo fusi orari e lingue rispetto a clienti in Europa e oltre."
|
||||
>
|
||||
<h2>Sede</h2>
|
||||
<p>
|
||||
NexStudio opera con base operativa a <strong>Bangkok</strong>, in
|
||||
Thailandia. Inserite qui indirizzo completo, eventuale sede legale in altro
|
||||
Stato, e se il rapporto con i clienti avviene prevalentemente da remoto.
|
||||
<strong>Thailandia</strong> — <strong>Bangkok</strong>
|
||||
</p>
|
||||
|
||||
<h2>Fusi orari e lingue</h2>
|
||||
@ -21,14 +19,4 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
tedesco, francese, spagnolo e tailandese, con orari da concordare in base
|
||||
al team e al fuso rispetto ai clienti in Europa e altre regioni.
|
||||
</p>
|
||||
|
||||
<h2>Contatti</h2>
|
||||
<p>
|
||||
Per richieste commerciali o tecniche utilizzate la sezione <a
|
||||
class="text-sky-400/90 hover:text-sky-300"
|
||||
href="/#contatti">Contatti</a
|
||||
> sulla homepage (chat e altri canali che attiverete). Aggiungete in questa
|
||||
pagina email istituzionali, PEC se applicabile, e numeri di telefono solo se
|
||||
desiderate renderli pubblici.
|
||||
</p>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -1,55 +1,74 @@
|
||||
---
|
||||
import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
import {
|
||||
gdprCrossReferences,
|
||||
gdprDocument,
|
||||
gdprRiferimenti,
|
||||
gdprSections,
|
||||
} from '../data/gdpr';
|
||||
|
||||
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
|
||||
const lead =
|
||||
"Diritti degli interessati e modalita' di esercizio ai sensi del Regolamento (UE) 2016/679, in coerenza con l'informativa privacy quadro del portale NexStudio. " +
|
||||
gdprCrossReferences.lead;
|
||||
---
|
||||
|
||||
<SubpageLayout
|
||||
title="GDPR — NexStudio"
|
||||
description="Informazioni sul trattamento dei dati personali ai sensi del Regolamento UE 2016/679 (GDPR)."
|
||||
description="Pagina GDPR NexStudio: diritti degli interessati, modalita' operative, ruoli tra portale corporate e SaaS LexAura/MediAura, coordinamento con privacy dedicate."
|
||||
heading="GDPR e diritti degli interessati"
|
||||
lead="Documento provvisorio: integrare riferimenti contrattuali, responsabile della protezione dei dati (DPO) se nominato, e procedure interne."
|
||||
lead={lead}
|
||||
>
|
||||
<p>
|
||||
Il Regolamento (UE) 2016/679 (GDPR) disciplina il trattamento dei dati
|
||||
personali nel territorio dell’Unione. La presente pagina riassume i diritti
|
||||
riconosciuti agli interessati e come possono esercitarli nei confronti di
|
||||
NexStudio, senza sostituire l’informativa privacy completa.
|
||||
</p>
|
||||
<div>
|
||||
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
|
||||
<span class="font-medium text-nx-fg">Versione</span> {gdprDocument.version}
|
||||
<span class="text-nx-muted/80"> · </span>
|
||||
<span class="font-medium text-nx-fg">In vigore dal</span> {gdprDocument.inVigoreDal}
|
||||
<span class="text-nx-muted/80"> · </span>
|
||||
<span class="font-medium text-nx-fg">Ultimo aggiornamento</span> {gdprDocument.ultimoAggiornamento}
|
||||
</p>
|
||||
|
||||
<h2>Diritti riconosciuti</h2>
|
||||
<ul>
|
||||
<li>Accesso ai propri dati e copia in formato intelligibile</li>
|
||||
<li>Rettifica di dati inesatti o incompleti</li>
|
||||
<li>Cancellazione (“diritto all’oblio”) nei casi previsti dalla legge</li>
|
||||
<li>Limitazione del trattamento</li>
|
||||
<li>Portabilità dei dati forniti con consenso o contratto, ove applicabile</li>
|
||||
<li>Opposizione al trattamento basato su legittimo interesse o per fini di marketing</li>
|
||||
<li>Revoca del consenso in qualsiasi momento, senza pregiudicare la liceità del trattamento precedente</li>
|
||||
<li>Reclamo all’autorità di controllo competente</li>
|
||||
</ul>
|
||||
<p class="!mt-5 text-sm text-nx-muted sm:text-base">
|
||||
Documenti connessi:{' '}
|
||||
{
|
||||
gdprRiferimenti.map((r, i) => (
|
||||
<span>
|
||||
{i > 0 && <span class="text-nx-muted/80"> · </span>}
|
||||
<a class={link} href={r.href}>{r.label}</a>
|
||||
</span>
|
||||
))
|
||||
}
|
||||
</p>
|
||||
|
||||
<h2>Modalità di esercizio</h2>
|
||||
<p>
|
||||
Indicare un canale dedicato (es. email privacy@…, modulo PEC o ticket). Per
|
||||
richieste generiche potete anche utilizzare la sezione <a
|
||||
class="text-sky-400/90 hover:text-sky-300"
|
||||
href="/#contatti">Contatti</a
|
||||
> sul sito principale, specificando oggetto e dati utili a identificare la
|
||||
pratica.
|
||||
</p>
|
||||
<h2 id="indice" class="!mt-8">Indice</h2>
|
||||
<ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
|
||||
{
|
||||
gdprSections.map((s) => (
|
||||
<li>
|
||||
<a class={link} href={`#${s.id}`}>{s.title}</a>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ol>
|
||||
|
||||
<h2>Trasferimenti extra-UE</h2>
|
||||
<p>
|
||||
Se utilizzate fornitori con sede fuori dallo Spazio Economico Europeo,
|
||||
descrivete garanzie (Clausole contrattuali tipo, decisioni di adeguatezza,
|
||||
norme vincolanti d’impresa) e il riferimento documentale.
|
||||
</p>
|
||||
|
||||
<h2>Documenti correlati</h2>
|
||||
<p>
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/privacy"
|
||||
>Informativa privacy</a
|
||||
>
|
||||
·
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/cookies">Informativa cookie</a>
|
||||
</p>
|
||||
{
|
||||
gdprSections.map((s) => (
|
||||
<section class="mt-10" id={s.id}>
|
||||
<h2 class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl">
|
||||
{s.title}
|
||||
</h2>
|
||||
{s.paragraphs.map((p) => (
|
||||
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
|
||||
))}
|
||||
{s.bullets && s.bullets.length > 0 ? (
|
||||
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
|
||||
{s.bullets.map((b) => (
|
||||
<li class="text-nx-muted">{b}</li>
|
||||
))}
|
||||
</ul>
|
||||
) : null}
|
||||
</section>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -148,10 +148,10 @@ const techSliderItems = stackSection.techSlider.items;
|
||||
</div>
|
||||
<div class="relative z-10 mx-auto max-w-6xl">
|
||||
<p
|
||||
class="mb-6 inline-flex items-center gap-2 rounded-full border border-nx-border bg-nx-surface/60 px-3 py-1 text-xs font-medium text-sky-300/90"
|
||||
class="mb-6 inline-flex items-center gap-2.5 rounded-full border border-nx-border bg-nx-surface/60 px-4 py-1.5 text-sm font-medium text-sky-300/90 sm:px-5 sm:py-2"
|
||||
>
|
||||
<span
|
||||
class="h-1.5 w-1.5 rounded-full bg-sky-400 shadow-[0_0_8px_#38bdf8]"></span>
|
||||
class="h-2 w-2 rounded-full bg-sky-400 shadow-[0_0_10px_#38bdf8]"></span>
|
||||
{hero.badge}
|
||||
</p>
|
||||
<h1
|
||||
@ -229,18 +229,32 @@ const techSliderItems = stackSection.techSlider.items;
|
||||
{productsSection.lead}
|
||||
</p>
|
||||
|
||||
<div
|
||||
class="mt-14 grid gap-8 lg:grid-cols-2 lg:gap-10 lg:items-stretch"
|
||||
>
|
||||
<div class="relative mt-14">
|
||||
<div
|
||||
class="pointer-events-none absolute -top-28 left-1/2 z-0 h-64 w-[min(96%,60rem)] -translate-x-1/2 rounded-full bg-[radial-gradient(ellipse_at_center,rgba(125,211,252,0.34)_0%,rgba(96,165,250,0.2)_36%,rgba(16,24,40,0)_74%)] blur-3xl"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute -top-14 left-1/2 z-0 h-40 w-[min(88%,54rem)] -translate-x-1/2 rounded-full bg-[radial-gradient(ellipse_at_center,rgba(186,230,253,0.16)_0%,rgba(16,24,40,0)_70%)] blur-2xl"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<div
|
||||
class="relative z-10 grid gap-8 lg:grid-cols-2 lg:gap-10 lg:items-stretch"
|
||||
>
|
||||
{productsSection.items.map((product, pi) => (
|
||||
<article
|
||||
class:list={[
|
||||
'flex flex-col rounded-2xl border p-6 sm:p-8',
|
||||
'relative flex flex-col overflow-hidden rounded-2xl border p-6 -translate-y-1 shadow-2xl shadow-black/30 sm:p-8',
|
||||
pi === 0
|
||||
? 'border-sky-500/25 bg-gradient-to-b from-sky-950/30 to-nx-surface/30'
|
||||
: 'border-emerald-500/20 bg-gradient-to-b from-emerald-950/25 to-nx-surface/30',
|
||||
? 'border-sky-400/45 bg-gradient-to-b from-sky-950/30 to-nx-surface/30'
|
||||
: 'border-emerald-400/40 bg-gradient-to-b from-emerald-950/25 to-nx-surface/30',
|
||||
]}
|
||||
>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.12),transparent_62%)]"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<div class="pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/35 to-transparent opacity-60" aria-hidden="true"></div>
|
||||
<div class="flex flex-wrap items-baseline justify-between gap-2">
|
||||
<h3 class="text-2xl font-semibold tracking-tight text-nx-fg">
|
||||
{product.name}
|
||||
@ -249,8 +263,8 @@ const techSliderItems = stackSection.techSlider.items;
|
||||
class:list={[
|
||||
'rounded-full px-2.5 py-0.5 text-xs font-medium',
|
||||
pi === 0
|
||||
? 'bg-sky-500/15 text-sky-200/95'
|
||||
: 'bg-emerald-500/15 text-emerald-200/95',
|
||||
? 'bg-sky-500/25 text-sky-200/95'
|
||||
: 'bg-emerald-500/25 text-emerald-200/95',
|
||||
]}
|
||||
>
|
||||
{product.badge}
|
||||
@ -298,6 +312,7 @@ const techSliderItems = stackSection.techSlider.items;
|
||||
) : null}
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@ -464,7 +479,7 @@ const techSliderItems = stackSection.techSlider.items;
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="nx-tech-slider mt-10"
|
||||
class="nx-tech-slider mt-6 sm:mt-7"
|
||||
role="region"
|
||||
aria-label={stackSection.techSlider.ariaLabel}
|
||||
>
|
||||
|
||||
@ -1,22 +1,38 @@
|
||||
---
|
||||
import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
import {
|
||||
modelloOrganizzativo,
|
||||
modelloOrganizzativoRuoli,
|
||||
modelloOrganizzativoGovernance,
|
||||
modelloOrganizzativoResponsabilitaSintesi,
|
||||
modelloOrganizzativoControlliLean,
|
||||
modelloOrganizzativoKpi,
|
||||
modelloOrganizzativoDocumentazione,
|
||||
modelloOrganizzativoPiano30,
|
||||
modelloOrganizzativoOutsourcing,
|
||||
modelloOrganizzativoNote,
|
||||
modelloOrganizzativoFlussiDecisionali,
|
||||
} from '../data/modello-organizzativo';
|
||||
|
||||
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
|
||||
const tbl = 'mt-4 w-full border-collapse text-left text-sm';
|
||||
const tbl = 'min-w-[22rem] w-full border-collapse text-left text-sm';
|
||||
const th = 'border border-nx-border bg-nx-surface/60 px-3 py-2 font-semibold text-nx-fg';
|
||||
const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
|
||||
const tableWrap = 'mt-2 overflow-x-auto';
|
||||
---
|
||||
|
||||
<SubpageLayout
|
||||
title="Modello organizzativo — NexStudio"
|
||||
description="Modello organizzativo NexStudio: ruoli, governance, RACI, controlli lean, KPI e piano operativo a 30 giorni."
|
||||
description="Modello organizzativo NexStudio: governance, ruoli, RACI, controlli lean, KPI, piano 30 giorni — per le linee LexAura (Legal Tech) e MediAura (Health Tech)."
|
||||
heading="Modello organizzativo"
|
||||
lead="Schema di ruoli, ritmi di governo e responsabilità per una software company snella (SaaS legal/med). Non sostituisce valutazioni legali (es. D.Lgs. 231/2001): va allineato a società, organi e consulenti."
|
||||
lead="Ruoli, ritmi di governo, processi e controlli «lean» in una software house con SaaS a elevata regolamentazione. Complementare al codice etico. Non sostituisce statuti, modelli di compliance societari (es. 231) né pareri legali: andate in parallelo con struttura reale e consulenti."
|
||||
>
|
||||
<div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg">
|
||||
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
|
||||
Documento operativo per <strong class="text-nx-fg">NexStudio</strong> (sede Bangkok). Ruoli
|
||||
numerici indicativi: adattare al team reale e formalizzare nomine e deleghe per iscritto.
|
||||
{modelloOrganizzativo.introBox}
|
||||
</p>
|
||||
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">
|
||||
{modelloOrganizzativo.perimetro}
|
||||
</p>
|
||||
|
||||
<h2 id="indice" class="!mt-8">Indice</h2>
|
||||
@ -36,107 +52,36 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
|
||||
|
||||
<h2 id="ruoli">1. Ruoli e perimetro</h2>
|
||||
<p>
|
||||
Elenco sintetico delle funzioni, con attese di impegno (full-time, part-time, frazionale o
|
||||
esternalizzato). I numeri tra parentesi sono orientativi per una fase early-stage.
|
||||
Elenco sintetico delle funzioni e delle attese di impegno. Per allineare il dominio
|
||||
prodotto (Legal Tech, Health Tech) a ruoli e consiglieri, fate riferimento anche a <a
|
||||
class={link}
|
||||
href="/codice-etico">codice etico</a
|
||||
> e, per i trattamenti di dati, a privacy policy e DPA.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Founder / CEO (1):</strong> strategia, approvazione delle policy, contatti con board
|
||||
e investitori, accountability complessiva anche verso obblighi di legge e contratti.
|
||||
</li>
|
||||
<li>
|
||||
<strong>CTO / Head of Product (1):</strong> architettura, roadmap, quality gate di prodotto,
|
||||
responsabilità tecnica end-to-end.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Lead Engineer (1–2):</strong> sviluppo, code review, esecuzione CI/CD e qualità del
|
||||
codice in reparto.
|
||||
</li>
|
||||
<li>
|
||||
<strong>DevOps / Platform (1, oppure outsourcing):</strong> deploy, KMS, backup e
|
||||
disaster recovery, governo dell’ambiente di produzione.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Security & Privacy Lead (1, ruolo ibrido o contractor):</strong> sicurezza
|
||||
operativa, gestione delle vulnerabilità, coordinamento con il DPO.
|
||||
</li>
|
||||
<li>
|
||||
<strong>DPO / Privacy Responsible (frazionale o outsourcing):</strong> DPIA, gestione dei
|
||||
diritti degli interessati, coerenza dell’informativa privacy.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Legal & Compliance (frazionale o legale interno):</strong> contratti, NDA,
|
||||
revisione delle normative di settore legale e medico pertinenti ai prodotti.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Product / Clinical Advisor (part-time o consulente):</strong> validazione di
|
||||
funzionalità con impatto medico o legale, limiti d’uso e avvertenze.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Customer Success / Support (1):</strong> onboarding clienti, gestione richieste,
|
||||
escalation verso tecnici e governance.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Operations / HR (1, part-time):</strong> onboarding del personale, formazione,
|
||||
gestione delle segnalazioni interne.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Finance (1, part-time o outsourcing):</strong> contabilità, pagamenti, policy su
|
||||
incassi e fornitori.
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoRuoli.map((r) => (
|
||||
<li>
|
||||
<strong>{r.label}:</strong> {r.text}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<h2 id="governance">2. Governance essenziale</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Weekly Tactical</strong> (Founder, CTO, Security/Privacy Lead, Customer Success):
|
||||
priorità operative, incidenti aperti, rilasci critici in corso.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Biweekly Product Sync</strong> (CTO, Lead Engineer, Product Advisor): backlog,
|
||||
piano di release, checkpoint di compliance di prodotto.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Monthly Compliance Check</strong> (Founder/CEO, Legal, DPO, Security Lead): revisione
|
||||
DPIA, vendor ad alto rischio, sintesi incidenti e azioni correttive.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Quarterly Board / Founders review:</strong> strategia, budget, rischi maggiori e
|
||||
capacità organizzative.
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoGovernance.map((g) => (
|
||||
<li>
|
||||
<strong>{g.nome}:</strong> {g.partecipanti}. <span class="text-nx-muted/95">— {g.nota}</span>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<h2 id="responsabilita">3. Principali responsabilità (sintesi)</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Codice etico e policy:</strong> owner <em>Legal & Compliance</em> — approvatore
|
||||
<em>CEO</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Sicurezza operativa e incident response:</strong> owner <em>Security Lead</em> —
|
||||
esecutore tecnico <em>CTO</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Privacy, trattamenti sensibili e DPIA:</strong> owner <em>DPO</em> — supporto
|
||||
<em>Legal</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Rilasci in produzione:</strong> accountable <em>CTO</em> — responsible <em>Lead
|
||||
Engineer</em> — consulted <em>Security</em>, <em>DPO</em>, <em>Product Advisor</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Fornitori e sub-processori:</strong> owner <em>Operations</em> + <em>Legal</em> —
|
||||
due diligence <em>Security</em> / <em>DPO</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Richieste degli interessati (DSR):</strong> owner <em>DPO</em> — esecuzione operativa
|
||||
<em>Customer Success</em> (ove applicabile).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Segnalazioni e whistleblowing:</strong> owner <em>Operations</em> / <em>HR</em> —
|
||||
supporto investigativo <em>Legal</em>.
|
||||
</li>
|
||||
{modelloOrganizzativoResponsabilitaSintesi.map((l) => <li>{l}</li>)}
|
||||
</ul>
|
||||
|
||||
<h2 id="raci">4. RACI sintetico per processi critici</h2>
|
||||
@ -145,306 +90,248 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
|
||||
<strong>C</strong> = Consulted, <strong>I</strong> = Informed.
|
||||
</p>
|
||||
|
||||
<h3>Rilascio in produzione</h3>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th}>Ruolo</th>
|
||||
<th class={th}>R</th>
|
||||
<th class={th}>A</th>
|
||||
<th class={th}>C</th>
|
||||
<th class={th}>I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Lead Engineer</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CTO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Security Lead, DPO, Product Advisor</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO, Customer Success</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 class="!mt-5" id="raci-release">Rilascio in produzione</h3>
|
||||
<div class={tableWrap}>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th} scope="col">Ruolo</th>
|
||||
<th class={th} scope="col">R</th>
|
||||
<th class={th} scope="col">A</th>
|
||||
<th class={th} scope="col">C</th>
|
||||
<th class={th} scope="col">I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Lead engineer</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CTO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Security lead, DPO, product advisor</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO, customer success</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h3>Incident response (violazione dei dati)</h3>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th}>Ruolo</th>
|
||||
<th class={th}>R</th>
|
||||
<th class={th}>A</th>
|
||||
<th class={th}>C</th>
|
||||
<th class={th}>I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Security Lead</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>DPO, Legal, CTO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Clienti coinvolti, Board (se impatto elevato)</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="raci-incident">Incident response (violazione dei dati o incidente P0)</h3>
|
||||
<div class={tableWrap}>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th} scope="col">Ruolo</th>
|
||||
<th class={th} scope="col">R</th>
|
||||
<th class={th} scope="col">A</th>
|
||||
<th class={th} scope="col">C</th>
|
||||
<th class={th} scope="col">I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Security lead</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>DPO, legal, CTO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Clienti interessati, board (se impatto elevato)</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h3>Onboarding vendor (sub-processore)</h3>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th}>Ruolo</th>
|
||||
<th class={th}>R</th>
|
||||
<th class={th}>A</th>
|
||||
<th class={th}>C</th>
|
||||
<th class={th}>I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Operations</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Legal</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Security Lead, DPO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CTO, Finance</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="raci-vendor">Onboarding vendor (sub-processore)</h3>
|
||||
<div class={tableWrap}>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th} scope="col">Ruolo</th>
|
||||
<th class={th} scope="col">R</th>
|
||||
<th class={th} scope="col">A</th>
|
||||
<th class={th} scope="col">C</th>
|
||||
<th class={th} scope="col">I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>Operations</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Legal</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Security lead, DPO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CTO, finance</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h3>DPIA per modulo sanitario o legale</h3>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th}>Ruolo</th>
|
||||
<th class={th}>R</th>
|
||||
<th class={th}>A</th>
|
||||
<th class={th}>C</th>
|
||||
<th class={th}>I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>DPO</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Legal</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Product Advisor, CTO, Security Lead</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="raci-dpia">DPIA (per perimetro: LexAura, MediAura, piattaforma)</h3>
|
||||
<p class="text-sm text-nx-muted sm:text-base">
|
||||
La matrice RACI non sostituisce il criterio legale (chi è titolare, chi responsabile) definito
|
||||
in contratti e in <a class={link} href="/codice-etico#tutela-dati-ruoli">§5.1 del codice etico</a
|
||||
>. Qui: chi coordina l’esercizio interno della valutazione d’impatto.
|
||||
</p>
|
||||
<div class={tableWrap}>
|
||||
<table class={tbl}>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class={th} scope="col">Ruolo</th>
|
||||
<th class={th} scope="col">R</th>
|
||||
<th class={th} scope="col">A</th>
|
||||
<th class={th} scope="col">C</th>
|
||||
<th class={th} scope="col">I</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class={td}>DPO</td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Legal</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>Product advisor, CTO, security lead</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
<td class={td}></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class={td}>CEO</td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}></td>
|
||||
<td class={td}>●</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h2 id="flussi">5. Flussi decisionali rapidi</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Decisione tecnica ordinaria:</strong> Lead Engineer → CTO (documentare su ticket se
|
||||
impatta rischio o contratti).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Rilascio con impatto privacy o sicurezza:</strong> approvazione obbligatoria di
|
||||
<em>Security Lead</em> e <em>DPO</em> (target: entro 48 ore lavorative).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Incident P0:</strong> <em>Security Lead</em> notifica CEO, DPO e Legal entro 4 ore;
|
||||
escalation al Board se l’impatto è elevato (clienti, regolatori, volumi o classi di dati).
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoFlussiDecisionali.map((f) => (
|
||||
<li>
|
||||
<strong>{f.titolo}:</strong> {f.testo}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<h2 id="controlli">6. Controlli minimi obbligatori (lean)</h2>
|
||||
<ul>
|
||||
<li>IAM con MFA per accesso a produzione e a segreti.</li>
|
||||
<li>CI/CD con SAST e scansione automatica delle dipendenze.</li>
|
||||
<li>SBOM generato automaticamente per ogni release.</li>
|
||||
<li>TLS in transito; cifratura a riposo per dati sensibili.</li>
|
||||
<li>Backup giornalieri e test DR trimestrale (ripristino documentato).</li>
|
||||
<li>Log degli accessi e alerting su anomalie (SIEM o servizio gestito).</li>
|
||||
<li>Checklist pre-release (security/privacy) con traccia digitale di approvazione.</li>
|
||||
{modelloOrganizzativoControlliLean.map((c) => <li>{c}</li>)}
|
||||
</ul>
|
||||
|
||||
<h2 id="kpi">7. KPI essenziali (core metrics)</h2>
|
||||
<h2 id="kpi">7. KPI essenziali</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Security:</strong> percentuale di patch critiche entro SLA; MTTD e MTTR per
|
||||
incidenti.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Privacy:</strong> tempo medio di risposta alle DSR; numero di DPIA completate / in
|
||||
corso.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Product:</strong> tempo di ciclo del deploy; copertura test sui moduli critici.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Operations:</strong> uptime rispetto a SLA; tempo medio di risposta del supporto;
|
||||
segnalazioni chiuse nel periodo.
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoKpi.map((k) => (
|
||||
<li>
|
||||
<strong>{k.area}:</strong> {k.testo}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<h2 id="documentazione">8. Documentazione minima da mantenere</h2>
|
||||
<ul>
|
||||
<li>Codice etico firmato e registro delle adesioni.</li>
|
||||
<li>Informativa privacy e template di DPA (Data Processing Agreement).</li>
|
||||
<li>DPIA per trattamenti critici.</li>
|
||||
<li>Security whitepaper breve (1–2 pagine) per clienti e audit.</li>
|
||||
<li>Incident response playbook (versione esecutiva).</li>
|
||||
<li>SBOM e registro fornitori / sub-processori.</li>
|
||||
<li>Checklist pre-release e log delle approvazioni.</li>
|
||||
{modelloOrganizzativoDocumentazione.map((d) => <li>{d}</li>)}
|
||||
</ul>
|
||||
|
||||
<h2 id="piano-30">9. Primo piano operativo (30 giorni)</h2>
|
||||
<ol>
|
||||
<li>
|
||||
<strong>Giorni 0–3:</strong> nomina formale dei ruoli chiave (Security Lead, DPO frazionale,
|
||||
Legal frazionale).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Giorni 4–10:</strong> integrare la checklist pre-release in CI/CD; abilitare MFA e
|
||||
policy IAM coerenti con il minimo sopra.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Giorni 11–17:</strong> avviare DPIA sul modulo medico/legale più critico; due
|
||||
diligence sui fornitori ad alto rischio.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Giorni 18–24:</strong> pubblicare una Trust Center di base (link al Codice etico,
|
||||
contatti DPO/security, materiali privacy/DPA se disponibili).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Giorni 25–30:</strong> tabletop su incident response; test di rollback deploy e
|
||||
ripristino backup; formazione iniziale obbligatoria (security e privacy).
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoPiano30.map((p) => (
|
||||
<li>
|
||||
<strong>{p.quando}:</strong> {p.testo}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ol>
|
||||
|
||||
<h2 id="outsourcing">10. Outsourcing consigliato (per restare snelli)</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Security Ops / SOC:</strong> servizio gestito per log, alerting e penetration test
|
||||
periodici.
|
||||
</li>
|
||||
<li>
|
||||
<strong>DPO e Legal:</strong> consulenti frazionali con esperienza PDPA, GDPR e contesto
|
||||
medico-legale locale.
|
||||
</li>
|
||||
<li>
|
||||
<strong>DevOps / Platform:</strong> servizi cloud gestiti (es. KMS, database gestiti) per
|
||||
ridurre carico operativo interno.
|
||||
</li>
|
||||
{
|
||||
modelloOrganizzativoOutsourcing.map((o) => (
|
||||
<li>
|
||||
<strong>{o.titolo}:</strong> {o.testo}
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
|
||||
<h2 id="note">11. Note pratiche e raccomandazioni</h2>
|
||||
<ul>
|
||||
<li>
|
||||
Mantenere <strong>separazione dei compiti</strong> sui controlli critici (es. chi sviluppa
|
||||
non approva da solo gli accessi a produzione).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Automatizzare</strong> controlli ripetitivi (SAST, SBOM, scansioni dipendenze) nella
|
||||
pipeline.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Documentare</strong> decisioni su rischio e accettazioni (log nel sistema di
|
||||
ticketing) per audit e post-mortem.
|
||||
</li>
|
||||
<li>
|
||||
Coinvolgere <strong>advisor clinici e legali</strong> esterni per convalide su funzionalità ad
|
||||
alto rischio.
|
||||
</li>
|
||||
<li>
|
||||
Prevedere <strong>revisione trimestrale</strong> del modello e aggiornamento delle
|
||||
responsabilità man mano che la società cresce.
|
||||
</li>
|
||||
{modelloOrganizzativoNote.map((n) => <li>{n}</li>)}
|
||||
</ul>
|
||||
|
||||
<h2>Collegamenti</h2>
|
||||
<p>
|
||||
<a class={link} href="/codice-etico">Codice etico</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="/about">Chi siamo</a>
|
||||
<span class="text-nx-muted"> · </span>
|
||||
<a class={link} href="#indice">Torna all’indice</a>
|
||||
</p>
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -1,53 +1,77 @@
|
||||
---
|
||||
import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
import {
|
||||
privacyCrossReferences,
|
||||
privacyDocument,
|
||||
privacyRiferimenti,
|
||||
privacySections,
|
||||
} from '../data/privacy';
|
||||
|
||||
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
|
||||
const lead =
|
||||
"Informativa quadro sul trattamento dei dati personali per il portale istituzionale NexStudio (sede operativa: Bangkok, Thailandia) e per le interazioni corporate con i servizi SaaS LexAura e MediAura. " +
|
||||
privacyCrossReferences.lead;
|
||||
---
|
||||
|
||||
<SubpageLayout
|
||||
title="Privacy — NexStudio"
|
||||
description="Informativa sul trattamento dei dati personali NexStudio."
|
||||
description="Informativa privacy quadro NexStudio: sito istituzionale, contatti corporate, rimandi ai dettagli privacy dei SaaS LexAura (Legal Tech) e MediAura (Health Tech)."
|
||||
heading="Informativa sulla privacy"
|
||||
lead="Documento provvisorio: va adattato alla vostra organizzazione e revisionato da un legale prima della pubblicazione definitiva."
|
||||
lead={lead}
|
||||
>
|
||||
<p>
|
||||
Questa pagina descrive, in forma generica, come NexStudio intende trattare i
|
||||
dati personali raccolti attraverso il sito web e i canali di contatto. Le
|
||||
finalità, le basi giuridiche e i destinatari vanno definiti in base alle
|
||||
vostre attività reali (es. gestione richieste, newsletter, analytics).
|
||||
</p>
|
||||
<div>
|
||||
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
|
||||
<span class="font-medium text-nx-fg">Versione</span> {privacyDocument.version}
|
||||
<span class="text-nx-muted/80"> · </span>
|
||||
<span class="font-medium text-nx-fg">In vigore dal</span> {privacyDocument.inVigoreDal}
|
||||
<span class="text-nx-muted/80"> · </span>
|
||||
<span class="font-medium text-nx-fg">Ultimo aggiornamento</span>{' '}
|
||||
{privacyDocument.ultimoAggiornamento}
|
||||
</p>
|
||||
|
||||
<h2>Titolare del trattamento</h2>
|
||||
<p>
|
||||
Indicare ragione sociale, sede, P.IVA e modalità di contatto (es. email
|
||||
dedicata privacy). Per richieste degli interessati potete rimandare alla
|
||||
sezione <a class="text-sky-400/90 hover:text-sky-300" href="/#contatti"
|
||||
>Contatti</a
|
||||
> o a un indirizzo PEC / form strutturato.
|
||||
</p>
|
||||
<p class="!mt-5 text-sm text-nx-muted sm:text-base">
|
||||
Documenti connessi:{' '}
|
||||
{
|
||||
privacyRiferimenti.map((r, i) => (
|
||||
<span>
|
||||
{i > 0 && <span class="text-nx-muted/80"> · </span>}
|
||||
<a class={link} href={r.href}>{r.label}</a>
|
||||
</span>
|
||||
))
|
||||
}
|
||||
</p>
|
||||
|
||||
<h2>Tipologie di dati e finalità</h2>
|
||||
<p>
|
||||
Esempi da personalizzare: dati di navigazione e log tecnici; dati forniti
|
||||
volontariamente tramite moduli o chat; eventuali cookie di profilazione (da
|
||||
collegare alla <a class="text-sky-400/90 hover:text-sky-300" href="/cookies"
|
||||
>informativa cookie</a
|
||||
>). Per ogni trattamento indicare la base giuridica (contratto, legittimo
|
||||
interesse, consenso, obbligo legale).
|
||||
</p>
|
||||
<h2 id="indice" class="!mt-8">Indice</h2>
|
||||
<ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
|
||||
{
|
||||
privacySections.map((s) => (
|
||||
<li>
|
||||
<a class={link} href={`#${s.id}`}>{s.title}</a>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ol>
|
||||
|
||||
<h2>Conservazione e sicurezza</h2>
|
||||
<p>
|
||||
Specificare tempi di conservazione per categoria di dati e misure di
|
||||
sicurezza adottate (crittografia, controllo accessi, fornitori cloud, sede
|
||||
dei dati).
|
||||
</p>
|
||||
|
||||
<h2>Diritti degli interessati</h2>
|
||||
<p>
|
||||
Gli interessati possono esercitare i diritti previsti dal Reg. (UE) 2016/679
|
||||
(accesso, rettifica, cancellazione, limitazione, portabilità, opposizione,
|
||||
revoca del consenso). Dettagli operativi nella pagina <a
|
||||
class="text-sky-400/90 hover:text-sky-300"
|
||||
href="/gdpr">GDPR</a
|
||||
>.
|
||||
</p>
|
||||
{
|
||||
privacySections.map((s) => (
|
||||
<section class="mt-10" id={s.id}>
|
||||
<h2
|
||||
class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl"
|
||||
>
|
||||
{s.title}
|
||||
</h2>
|
||||
{s.paragraphs.map((p) => (
|
||||
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
|
||||
))}
|
||||
{s.bullets && s.bullets.length > 0 ? (
|
||||
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
|
||||
{s.bullets.map((b) => (
|
||||
<li class="text-nx-muted">{b}</li>
|
||||
))}
|
||||
</ul>
|
||||
) : null}
|
||||
</section>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
@ -1,25 +1,69 @@
|
||||
---
|
||||
import SubpageLayout from '../layouts/SubpageLayout.astro';
|
||||
import { termsDocument, termsSections, termsRiferimenti, termsCrossReferences } from '../data/terms';
|
||||
|
||||
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
|
||||
const lead =
|
||||
"Si applicano alla navigazione e all'uso del sito informativo pubblico di NexStudio (sede: Bangkok, Thailandia). I contratti d'abbonamento o d'acquisto sui prodotti software restano retti da offerte, ordini o accordi separati. " +
|
||||
termsCrossReferences.leadNote;
|
||||
---
|
||||
|
||||
<SubpageLayout
|
||||
title="Condizioni d’uso — NexStudio"
|
||||
description="Termini e condizioni d’uso dei siti e servizi NexStudio."
|
||||
description="Condizioni d’uso del sito web NexStudio: accettazione, utilizzo lecito, responsabilità, legge applicabile. Bangkok, LexAura e MediAura, servizi B2B per contratto a parte."
|
||||
heading="Condizioni d’uso"
|
||||
lead="Bozza: definire condizioni d’uso del sito, limitazioni di responsabilità, proprietà intellettuale e legge applicabile con supporto legale."
|
||||
lead={lead}
|
||||
>
|
||||
<p>
|
||||
Questa pagina ospiterà le condizioni d’uso per il sito
|
||||
pubblico e, se del caso, per l’accesso a demo o aree riservate. Struttura
|
||||
tipica: oggetto, utente, servizi offerti, obblighi dell’utente, limitazione
|
||||
di responsabilità, sospensione, legge e foro competente.
|
||||
</p>
|
||||
<h2>Collegamenti</h2>
|
||||
<p>
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/privacy">Privacy</a>
|
||||
·
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/cookies">Informativa cookie</a>
|
||||
·
|
||||
<a class="text-sky-400/90 hover:text-sky-300" href="/gdpr">Diritti privacy (GDPR)</a>
|
||||
</p>
|
||||
<div>
|
||||
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
|
||||
<span class="font-medium text-nx-fg">Versione</span> {termsDocument.version}
|
||||
<span class="text-nx-muted/80"> · </span>
|
||||
<span class="font-medium text-nx-fg">In vigore dal</span> {termsDocument.inVigoreDal}
|
||||
</p>
|
||||
|
||||
<p class="!mt-5 text-sm text-nx-muted sm:text-base">
|
||||
Documenti connessi:{' '}
|
||||
{
|
||||
termsRiferimenti.map((r, i) => (
|
||||
<span>
|
||||
{i > 0 && <span class="text-nx-muted/80"> · </span>}
|
||||
<a class={link} href={r.href}>{r.label}</a>
|
||||
</span>
|
||||
))
|
||||
}
|
||||
</p>
|
||||
|
||||
<h2 id="indice" class="!mt-8">Indice</h2>
|
||||
<ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
|
||||
{
|
||||
termsSections.map((s) => (
|
||||
<li>
|
||||
<a class={link} href={`#${s.id}`}>{s.title}</a>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ol>
|
||||
|
||||
{
|
||||
termsSections.map((s) => (
|
||||
<section class="mt-10" id={s.id}>
|
||||
<h2
|
||||
class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl"
|
||||
>
|
||||
{s.title}
|
||||
</h2>
|
||||
{s.paragraphs.map((p) => (
|
||||
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
|
||||
))}
|
||||
{s.bullets && s.bullets.length > 0 ? (
|
||||
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
|
||||
{s.bullets.map((b) => (
|
||||
<li class="text-nx-muted">{b}</li>
|
||||
))}
|
||||
</ul>
|
||||
) : null}
|
||||
</section>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</SubpageLayout>
|
||||
|
||||
Reference in New Issue
Block a user