content split + copy audit + css polish: content (news/pages/uploads) moves to the ctao/content repo (build overlays it — two-repo build.sh, link-content.sh for local dev); portal copy trimmed to source-documents-only (dashboard empty states, minimal privacy/disclaimer, no mock badges); css: inverted selection on navy bands, featured-card text-track floor, 44px toc target, mobile search dates on own line, footer link row gap; DESIGN.md rewritten as a short handoff
This commit is contained in:
+4
-2
@@ -8,8 +8,10 @@ import Base from '../layouts/Base.astro';
|
||||
<article class="article">
|
||||
<h1>Page not found</h1>
|
||||
<div class="prose">
|
||||
<p>The address may be mistyped or the page may have moved — go to the
|
||||
<a href="/">home page</a> or browse <a href="/news">all news</a>.</p>
|
||||
{/* Keep "the <a>" on one line: the compiler drops the whitespace at a
|
||||
line break before a tag, which glued "the" to the link text. */}
|
||||
<p>The address may be mistyped or the page may have moved —
|
||||
go to the <a href="/">home page</a> or browse <a href="/news">all news</a>.</p>
|
||||
</div>
|
||||
<form class="search-form" role="search" action="/search" method="get">
|
||||
<label class="sr-only" for="nf-q">Search news</label>
|
||||
|
||||
@@ -1,22 +1,8 @@
|
||||
---
|
||||
import Base from '../layouts/Base.astro';
|
||||
|
||||
// Sample data, clearly labelled as mock in the UI. Per SPEC §3.3.2 the dashboard
|
||||
// aggregates: proposal statuses, scheduling info, data products, help-desk tickets.
|
||||
const proposals = [
|
||||
{ id: 'PROP-2026-0142', title: 'AGN flare monitoring with LST sub-array', status: 'In review', kind: 'review' },
|
||||
{ id: 'PROP-2026-0089', title: 'Galactic PeVatron survey follow-up', status: 'Accepted', kind: 'ok' },
|
||||
{ id: 'PROP-2025-0231', title: 'GRB afterglow ToO programme', status: 'Draft', kind: 'draft' },
|
||||
];
|
||||
const products = [
|
||||
{ id: 'OBS-88213', desc: 'DL3 event lists — PKS 2155-304 (12 runs)', date: '2026-07-18' },
|
||||
{ id: 'OBS-87990', desc: 'DL3 event lists — Crab Nebula calibration', date: '2026-07-02' },
|
||||
];
|
||||
const fmt = (iso) => new Intl.DateTimeFormat('en-GB', { dateStyle: 'medium' }).format(new Date(iso));
|
||||
const tickets = [
|
||||
{ id: '#4821', subject: 'Question about co-investigator roles', status: 'Answered', kind: 'ok' },
|
||||
{ id: '#4711', subject: 'Data download quota question', status: 'Open', kind: 'review' },
|
||||
];
|
||||
// Per SPEC §3.3.2 the dashboard aggregates proposal statuses, data products
|
||||
// and help-desk tickets. No integrations exist yet, so panels show empty
|
||||
// states instead of fabricated sample rows (source-documents-only rule).
|
||||
---
|
||||
<Base title="CTAO Science Portal — Dashboard" description="User dashboard (mock)">
|
||||
<section class="band--moon">
|
||||
@@ -25,44 +11,18 @@ const tickets = [
|
||||
<p class="standfirst">Your proposals, data products and support tickets in one place.</p>
|
||||
</header>
|
||||
<div class="container page">
|
||||
<span class="badge-mock">Mock — sample data, no live services connected</span>
|
||||
<div class="dash-grid">
|
||||
<div class="panel">
|
||||
<h2 class="panel-title">My proposals</h2>
|
||||
<ul class="rows">
|
||||
{proposals.map((p) => (
|
||||
<li>
|
||||
<span class="row-id">{p.id}</span>
|
||||
<span class="row-main">{p.title}</span>
|
||||
<span class={`pill pill--${p.kind}`}>{p.status}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p class="notice">Proposal statuses will appear here once the Proposal Handling System (APC team) is connected.</p>
|
||||
</div>
|
||||
<div class="panel">
|
||||
<h2 class="panel-title">Recent data products</h2>
|
||||
<ul class="rows">
|
||||
{products.map((d) => (
|
||||
<li>
|
||||
<span class="row-id">{d.id}</span>
|
||||
<span class="row-main">{d.desc}</span>
|
||||
<time class="row-date" datetime={d.date}>{fmt(d.date)}</time>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p class="notice">Search and download in the <a href="https://padc-ctao-data-explorer.obspm.fr/" target="_blank" rel="noopener" class="external">Data Explorer</a> (external, LUX team).</p>
|
||||
<p class="notice">Your data products will appear here. Search and download in the <a href="https://padc-ctao-data-explorer.obspm.fr/" target="_blank" rel="noopener" class="external">Data Explorer</a> (external, LUX team).</p>
|
||||
</div>
|
||||
<div class="panel">
|
||||
<h2 class="panel-title">Support tickets</h2>
|
||||
<ul class="rows">
|
||||
{tickets.map((t) => (
|
||||
<li>
|
||||
<span class="row-id">{t.id}</span>
|
||||
<span class="row-main">{t.subject}</span>
|
||||
<span class={`pill pill--${t.kind}`}>{t.status}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p class="notice">Help-desk tickets will appear here once User Support is connected.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,9 +25,9 @@ const services = [
|
||||
icon: '<circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="4"/><path d="m5.7 5.7 3.5 3.5m5.6 0 3.5-3.5m0 12.6-3.5-3.5m-5.6 0-3.5 3.5"/>' },
|
||||
// Two subdued planned tiles complete the 2×3 grid (an orphan 4th tile in a
|
||||
// 3-col grid reads broken); the remaining TBD services stay on the quiet line.
|
||||
{ title: 'Software', planned: true, desc: 'Science analysis tools and pipelines — planned.',
|
||||
{ title: 'Software', planned: true, desc: 'Landing page for CTAO software — planned.',
|
||||
icon: '<rect x="3" y="4.5" width="18" height="15" rx="2"/><path d="m7 9.5 3 2.5-3 2.5M12.5 15H17"/>' },
|
||||
{ title: 'Documentation', planned: true, desc: 'User guides and technical documentation — planned.',
|
||||
{ title: 'Documentation', planned: true, desc: 'CTAO user documentation — planned.',
|
||||
icon: '<path d="M12 6.7C10.6 5.2 8.6 4.5 5.7 4.5H4v13.6h1.7c2.9 0 4.9.7 6.3 2.2 1.4-1.5 3.4-2.2 6.3-2.2H20V4.5h-1.7c-2.9 0-4.9.7-6.3 2.2z"/><path d="M12 6.7v13.6"/>' },
|
||||
];
|
||||
const planned = ['Scheduling', 'Science alerts'];
|
||||
|
||||
@@ -6,7 +6,6 @@ import Base from '../layouts/Base.astro';
|
||||
<div class="band-bg" aria-hidden="true"></div>
|
||||
<div class="auth-card">
|
||||
<img class="auth-logo" src="/brand/CTAO_Logo_positive.svg" alt="CTAO" />
|
||||
<span class="badge-mock">Mock — AAI integration pending</span>
|
||||
<h1>Sign in</h1>
|
||||
{/* Auth pages are scanned, not read — one line, no reassurance prose */}
|
||||
<p class="muted">Use your CTAO account — single sign-on via CTAO AAI.</p>
|
||||
|
||||
@@ -8,8 +8,6 @@ import Base from '../layouts/Base.astro';
|
||||
<p class="standfirst">Submit observation proposals, including ToO and MWL requests.</p>
|
||||
</header>
|
||||
<div class="container page">
|
||||
<span class="badge-mock">Mock — PHS not yet connected</span>
|
||||
<span class="badge-ext">Planned integration: Proposal Handling System (APC team)</span>
|
||||
{/* Integration landing, not a form: the PHS is APC's product — the spec
|
||||
(§3.3.3) scopes this portal to integrating it, so we describe the
|
||||
hand-off instead of imitating their submission UI. */}
|
||||
@@ -22,7 +20,6 @@ import Base from '../layouts/Base.astro';
|
||||
<ul class="panel-list">
|
||||
<li>This menu entry, with a single sign-on hand-off (CTAO AAI).</li>
|
||||
<li>Proposal status feedback in your <a href="/dashboard">Dashboard</a>.</li>
|
||||
<li>Notifications via news and announcements.</li>
|
||||
</ul>
|
||||
<button class="btn" type="button" disabled>Open the Proposal Handling System — integration planned</button>
|
||||
</div>
|
||||
|
||||
@@ -15,9 +15,6 @@ const channels = [
|
||||
<p class="standfirst">Help desk, FAQ, user forum and mailing lists.</p>
|
||||
</header>
|
||||
<div class="container page">
|
||||
{/* One page-level whisper badge — the tiles below stay clean (they are
|
||||
not interactive; honesty lives here, at the point users arrive). */}
|
||||
<span class="badge-mock">Mock — target: SUSS User Support system</span>
|
||||
<h2 class="sr-only">Support channels</h2>
|
||||
<div class="grid">
|
||||
{channels.map((c) => (
|
||||
|
||||
Reference in New Issue
Block a user