c4eb598a3a
Il ruolo `campus` diventa `piattaforme` e non apre più solo la sezione Biohacking: copre tutte le aree riservate, con migrazione guardata sugli utenti esistenti. Nell'header la vecchia voce Biohacking lascia il posto a un menu Piattaforme con i due link, visibile solo a chi ha il ruolo, e /piattaforme diventa la pagina di atterraggio. Stress Index è portata dentro il sito: le nove viste dell'area professionisti diventano pagine Astro sotto /piattaforme/stress-index, con lo stile del sito al posto del design system del prototipo. React resta solo dove serve davvero — grafici recharts e scheda cliente — il resto è Astro con un filo di JS. I dati sono ancora quelli dimostrativi, raccolti in lib/stress-index/data.ts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
47 lines
2.0 KiB
Plaintext
47 lines
2.0 KiB
Plaintext
---
|
|
// Indice delle piattaforme riservate: è la pagina di atterraggio del ruolo `piattaforme`
|
|
// (vedi landingFor in lib/auth). L'accesso è già filtrato dal middleware.
|
|
import Base from '../../layouts/Base.astro';
|
|
import { piattaforme } from '../../data/piattaforme';
|
|
export const prerender = false;
|
|
---
|
|
<Base title="Piattaforme" description="Le piattaforme riservate InsanityLab.">
|
|
<section class="section plat-index">
|
|
<div class="container">
|
|
<p class="plat-index__eyebrow">Area riservata</p>
|
|
<h1>Piattaforme</h1>
|
|
<p class="plat-index__lead">Gli strumenti riservati agli utenti abilitati.</p>
|
|
<div class="plat-index__grid">
|
|
{piattaforme.map((p) => (
|
|
<a class="plat-card" href={p.href}>
|
|
<h2 class="plat-card__title">{p.label}</h2>
|
|
<p class="plat-card__desc">{p.description}</p>
|
|
<span class="plat-card__cta">Entra</span>
|
|
</a>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</Base>
|
|
|
|
<style>
|
|
.plat-index__eyebrow {
|
|
font-family: var(--font-heading); font-size: .72rem; font-weight: 600; letter-spacing: .18em;
|
|
text-transform: uppercase; color: var(--c-accent-dark); margin: 0 0 .6em;
|
|
}
|
|
.plat-index__lead { max-width: 46ch; color: var(--c-text-light); margin-bottom: 46px; }
|
|
.plat-index__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; }
|
|
.plat-card {
|
|
display: block; text-decoration: none; background: var(--c-bg-alt); padding: 34px 30px 30px;
|
|
border-top: 3px solid var(--c-accent); transition: transform .3s ease, box-shadow .3s ease;
|
|
}
|
|
.plat-card:hover { transform: translateY(-4px); box-shadow: 0 14px 30px rgba(0,0,0,.08); }
|
|
.plat-card__title { font-size: 1.25rem; margin-bottom: .4em; }
|
|
.plat-card__desc { color: var(--c-text-light); font-size: .92rem; margin-bottom: 1.4em; }
|
|
.plat-card__cta {
|
|
font-family: var(--font-heading); font-size: .72rem; font-weight: 600; letter-spacing: .18em;
|
|
text-transform: uppercase; color: var(--c-accent-dark);
|
|
}
|
|
.plat-card__cta::after { content: ' →'; }
|
|
</style>
|