diff --git a/public/admin/config.yml b/public/admin/config.yml index fb89b5c..de45eb5 100644 --- a/public/admin/config.yml +++ b/public/admin/config.yml @@ -10,6 +10,9 @@ backend: api_root: http://localhost:3010/api/v1 app_id: 73c02331-8842-4ddc-b769-8b09c3c422fb +# CTAO branding on the CMS sign-in screen (official Decap/Sveltia option) +logo_url: /brand/CTAO_Logo_positive.svg + media_folder: "public/uploads" public_folder: "/uploads" diff --git a/public/brand/AAFF_CTAO_Logo_RGB_Monochrome-negative.svg b/public/brand/AAFF_CTAO_Logo_RGB_Monochrome-negative.svg new file mode 100644 index 0000000..2e72a5f --- /dev/null +++ b/public/brand/AAFF_CTAO_Logo_RGB_Monochrome-negative.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/CTAO_Logo_positive.svg b/public/brand/CTAO_Logo_positive.svg new file mode 100644 index 0000000..88eeb49 --- /dev/null +++ b/public/brand/CTAO_Logo_positive.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/content/news/call-for-proposals-2026.md b/src/content/news/call-for-proposals-2026.md deleted file mode 100644 index ddad6e2..0000000 --- a/src/content/news/call-for-proposals-2026.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Nabór propozycji obserwacyjnych 2026" -description: "Ruszył otwarty nabór wniosków o czas obserwacyjny na teleskopach CTAO." -date: 2026-07-10 -category: "ogłoszenia" -author: "Biuro Naukowe CTAO" -draft: false ---- - -## Otwarty nabór - -Zapraszamy zespoły badawcze do składania **propozycji obserwacyjnych** na nadchodzący -cykl. Wnioski można składać przez portal rejestracyjny w zakładce *Teleskopy*. - -### Terminy - -- Otwarcie naboru: 10 lipca 2026 -- Zamknięcie: 30 września 2026 -- Ogłoszenie wyników: grudzień 2026 - -### Wymagania - -Każdy wniosek powinien zawierać uzasadnienie naukowe, wymagany czas obserwacji oraz -preferowany zakres energii. Szczegóły w dokumentacji naboru. diff --git a/src/content/news/first-light-lst-1.md b/src/content/news/first-light-lst-1.md deleted file mode 100644 index cd4e951..0000000 --- a/src/content/news/first-light-lst-1.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Pierwsze światło teleskopu LST-1" -description: "Największy teleskop CTAO zarejestrował pierwsze błyski Czerenkowa z kierunku Krab." -date: 2026-06-18 -category: "obserwacje" -author: "Zespół LST" -draft: false ---- - -## Kamień milowy dla obserwatorium - -Largest Size Telescope (LST-1) na La Palmie zarejestrował **pierwsze światło** — -charakterystyczne błyski promieniowania Czerenkowa powstające, gdy promienie gamma -o wysokiej energii wchodzą w atmosferę Ziemi. - -To pierwszy z czterech dużych teleskopów, które utworzą północną część sieci CTAO. - -### Co dalej - -- Kalibracja kamery i luster segmentowych -- Wspólne obserwacje z pozostałymi teleskopami sieci -- Pierwsze publikacje danych dla społeczności naukowej - -> „To początek nowej ery w astronomii promieniowania gamma." diff --git a/src/content/news/new-data-center-online.md b/src/content/news/new-data-center-online.md deleted file mode 100644 index ec5125f..0000000 --- a/src/content/news/new-data-center-online.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Nowe centrum danych CTAO uruchomione" -description: "Infrastruktura obliczeniowa do przetwarzania danych z sieci teleskopów jest już aktywna." -date: 2026-07-01 -category: "infrastruktura" -author: "Zespół IT" -draft: false ---- - -## Przetwarzanie danych na dużą skalę - -Uruchomiliśmy nowe **centrum danych**, które będzie przetwarzać strumienie danych -z całej sieci teleskopów CTAO — od surowych zdarzeń po gotowe katalogi naukowe. - -### Możliwości - -- Automatyczny pipeline rekonstrukcji zdarzeń -- Archiwum danych z dostępem dla społeczności -- Dashboardy monitorujące stan sieci w czasie rzeczywistym - -Panel monitoringu będzie dostępny w zakładce *Dashboard* portalu. diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index 584f139..6112c75 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -1,46 +1,63 @@ --- import '../styles/global.css'; -const { title = 'CTAO Portal', description = 'Portal obserwatorium CTAO' } = Astro.props; +const { title = 'CTAO Science Portal', description = 'CTAO Science Portal — demo' } = Astro.props; const path = Astro.url.pathname; const isActive = (href) => (href === '/' ? path === '/' : path.startsWith(href)); +// Navigation = services from the Science Portal spec (REQUIREMENTS.md §2/§5). +// External systems built by other teams are links out, clearly marked. const links = [ - { href: '/', label: 'Newsy' }, - { href: '/telescopes', label: 'Teleskopy' }, + { href: '/', label: 'News' }, + { href: '/telescopes', label: 'Proposals' }, { href: '/dashboard', label: 'Dashboard' }, ]; --- - + {title} - {/* Sora via Google Fonts for the demo; self-host the woff2 for production. */} + {/* Brand typography (BRAND D.3): Inter (body) + Space Grotesk (headlines). + Google Fonts for the demo; self-host woff2 for production. */} - + - +
diff --git a/src/pages/dashboard.astro b/src/pages/dashboard.astro index cfcb18b..5c00352 100644 --- a/src/pages/dashboard.astro +++ b/src/pages/dashboard.astro @@ -3,12 +3,15 @@ import Base from '../layouts/Base.astro'; ---
+ Makieta — dane przykładowe
📡
-

Dashboard

-

Tu trafią dane z innych serwisów (monitoring sieci teleskopów, statusy, wykresy).
- To część dynamiczna — utrzymywana osobno od statycznych treści.

+

Dashboard użytkownika

+

Wg specyfikacji SUSS: status wniosków, harmonogramy, produkty danych i zgłoszenia + helpdesku użytkownika — zbierane z pozostałych serwisów.
+ To część dynamiczna (nasz zakres, Release 5), utrzymywana osobno od + statycznych treści. Wszystko na tej stronie jest makietą.

diff --git a/src/pages/index.astro b/src/pages/index.astro index 733738d..64364ab 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -5,23 +5,32 @@ import Base from '../layouts/Base.astro'; const posts = (await getCollection('news', ({ data }) => !data.draft)).sort( (a, b) => b.data.date.valueOf() - a.data.date.valueOf(), ); -const fmt = (d) => new Intl.DateTimeFormat('pl-PL', { dateStyle: 'long' }).format(d); +const fmt = (d) => new Intl.DateTimeFormat('en-GB', { dateStyle: 'long' }).format(d); +const iso = (d) => d.toISOString().slice(0, 10); --- - -
-
Cherenkov Telescope Array Observatory
-

Aktualności i ogłoszenia

-

Najnowsze informacje z sieci teleskopów CTAO. Treść zarządzana przez edytorów w graficznym CMS-ie, publikowana jako statyczna strona.

+ +
+ +
+
Cherenkov Telescope Array Observatory
+

News & Announcements

+

Exploring the Universe at the Highest Energies

+
-
+
- {posts.map((post) => ( -
- {post.data.category} -

{post.data.title}

-

{post.data.description}

-
{post.data.author} · {fmt(post.data.date)}
+ {posts.map((post, i) => ( +
+ {post.data.cover && ( + + )} +
+ {post.data.category} +

{post.data.title}

+

{post.data.description}

+
{post.data.author} ·
+
))}
diff --git a/src/pages/telescopes.astro b/src/pages/telescopes.astro index 101b60b..a9dac0c 100644 --- a/src/pages/telescopes.astro +++ b/src/pages/telescopes.astro @@ -2,13 +2,17 @@ import Base from '../layouts/Base.astro'; --- -
-
Rejestracja
-

Zgłoszenie obserwacji

-

Mockup formularza rejestracji/rezerwacji czasu na teleskopach CTAO. To makieta — bez logiki wysyłki.

+
+
+
Proposal Submission
+

Zgłoszenie obserwacji

+

Składanie wniosków obserwacyjnych (w tym ToO / MWL)

+
+ Makieta — bez logiki wysyłki + Docelowo: Proposal Handling System (team APC) zintegrowany w portalu
diff --git a/src/styles/global.css b/src/styles/global.css index 92c67e0..d682937 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -1,60 +1,57 @@ /* ========================================================================== - CTAO Portal — flat design, "Cherenkov blue" accent. - All look-and-feel lives in the tokens below: change a color/font/radius - here and the whole site follows. Light is canonical; dark mode overrides - only the tokens. All pairings meet WCAG AA contrast. + CTAO Science Portal — design tokens per the official CTAO Brand Guidelines + (April 2024): colors D.2, typography D.3 (Inter body / Space Grotesk display), + flash D.4. All look-and-feel lives in the tokens below; WCAG 2.1 AA contrast. + Light theme only (brand is light-first; navy bands carry the dark identity). ========================================================================== */ :root { - --bg: #ffffff; - --surface: #f4f6fa; - --text: #131c2b; + /* Brand palette — hex values straight from the brand book */ + --galaxy: #00004a; /* Galaxy Blue — headings, header/footer bands */ + --cherenkov: #00e4d8; /* Cherenkov Blue — accents, flash, CTAs; NOT for small text on light */ + --moon: #f5f5f5; /* Moon Gray — surfaces */ + --azure: #007aff; /* Cosmic Azure — brand hyperlink hue (large/UI only on light) */ + --indigo: #00009c; /* Interestellar Indigo — gradient depth */ + /* Derived, WCAG-adjusted */ + --text: #101228; /* near-Galaxy body ink */ --muted: #46536a; - --border: #dfe4ec; - --accent: #1d4ed8; /* Cherenkov blue — links, buttons, active states */ - --accent-strong: #14369b; /* hover / chip text */ - --accent-soft: #edf2fe; /* chip & hint backgrounds */ + --border: #e2e5ee; + --link: #0057c2; /* Cosmic Azure darkened to pass AA (4.5:1) for body links */ + --on-galaxy-muted: #c7cde9; + --tint-cherenkov: rgba(0, 228, 216, 0.16); /* chip/badge fill derived from --cherenkov */ + /* Type & layout */ + --font-body: "Inter", Arial, system-ui, sans-serif; /* BRAND D.3.1 */ + --font-display: "Space Grotesk", var(--font-body); /* BRAND D.3.2 — headlines only */ --radius: 10px; - --maxw: 1080px; - --font: "Sora", system-ui, sans-serif; -} -@media (prefers-color-scheme: dark) { - :root { - --bg: #101419; - --surface: #161c24; - --text: #e7ebf2; - --muted: #9aa5b8; - --border: #2a3340; - --accent: #8ab4f8; - --accent-strong: #b3ccfa; - --accent-soft: #1a2637; - } + --maxw: 1120px; } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; - font-family: var(--font); - background: var(--bg); + font-family: var(--font-body); + background: #fff; color: var(--text); line-height: 1.65; min-height: 100dvh; } -a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; } -a:hover { color: var(--accent-strong); } +h1, h2 { font-family: var(--font-display); letter-spacing: -0.01em; } + +a { color: var(--link); text-decoration: underline; text-underline-offset: 3px; } +a:hover { color: var(--indigo); } img { max-width: 100%; height: auto; display: block; } /* Visible keyboard focus everywhere (WCAG 2.4.7) */ -:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } +:focus-visible { outline: 2px solid var(--azure); outline-offset: 2px; } /* Skip link — first tab stop, hidden until focused (WCAG 2.4.1) */ .skip { - position: absolute; left: 16px; top: -48px; z-index: 20; - background: var(--accent); color: var(--bg); text-decoration: none; + position: absolute; left: 16px; top: -52px; z-index: 20; + background: var(--galaxy); color: #fff; text-decoration: none; padding: 10px 16px; border-radius: 0 0 var(--radius) var(--radius); } -.skip:focus { top: 0; color: var(--bg); } +.skip:focus { top: 0; } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; } @@ -62,121 +59,160 @@ img { max-width: 100%; height: auto; display: block; } .container { max-width: var(--maxw); margin: 0 auto; padding: 0 20px; } -/* Header / nav */ -.site-header { background: var(--bg); border-bottom: 1px solid var(--border); } -.nav { display: flex; align-items: center; gap: 6px; min-height: 60px; flex-wrap: wrap; } -.brand { - display: flex; align-items: center; gap: 10px; - font-weight: 700; letter-spacing: 0.01em; color: var(--text); text-decoration: none; +/* Flash — the 4-point star brand asset (BRAND D.4), CSS-only approximation */ +.flash { + display: inline-block; width: 14px; height: 14px; background: var(--cherenkov); + clip-path: polygon(50% 0, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0 50%, 40% 40%); } -/* Flat triangle — the Cherenkov light cone */ -.brand .dot { - width: 13px; height: 12px; background: var(--accent); - clip-path: polygon(50% 0, 100% 100%, 0 100%); + +/* Header — Galaxy Blue band, reverse (white) logo per BRAND B.1.2 */ +.site-header { background: var(--galaxy); } +.nav { display: flex; align-items: center; gap: 4px; min-height: 64px; flex-wrap: wrap; } +.brand { display: flex; align-items: center; gap: 10px; margin-right: 10px; } +.brand img { height: 26px; width: auto; } +.brand .brand-sub { + color: var(--cherenkov); font-size: 0.78rem; font-weight: 500; + border-left: 1px solid rgba(255,255,255,0.25); padding-left: 10px; } .nav .spacer { flex: 1; } .nav a.navlink { - color: var(--muted); font-weight: 500; font-size: 0.95rem; + color: var(--on-galaxy-muted); font-weight: 500; font-size: 0.95rem; padding: 10px 10px; text-decoration: none; border-bottom: 2px solid transparent; } -.nav a.navlink:hover { color: var(--text); } -.nav a.navlink[aria-current="page"] { color: var(--text); border-bottom-color: var(--accent); } +.nav a.navlink:hover { color: #fff; } +.nav a.navlink[aria-current="page"] { color: #fff; border-bottom-color: var(--cherenkov); } .nav a.navlink--edit { - color: var(--accent); border: 1px solid var(--border); border-radius: var(--radius); + color: #fff; border: 1px solid rgba(255,255,255,0.35); border-radius: var(--radius); padding: 7px 14px; margin-left: 6px; } -.nav a.navlink--edit:hover { border-color: var(--accent); } +.nav a.navlink--edit:hover { border-color: var(--cherenkov); color: var(--cherenkov); } +/* AAI login placeholder — visibly disabled (mock) */ +.nav .login-mock { + color: var(--galaxy); background: var(--cherenkov); font: inherit; font-weight: 600; + border: 0; border-radius: var(--radius); padding: 8px 16px; margin-left: 6px; cursor: not-allowed; +} +.external::after { content: " ↗"; font-size: 0.85em; } -/* Hero */ -.hero { padding: 56px 0 24px; } -.hero h1 { - font-size: clamp(1.9rem, 5vw, 2.8rem); margin: 0 0 12px; - line-height: 1.12; letter-spacing: -0.02em; font-weight: 700; +/* Hero — navy band with a subtle nebula gradient (BRAND D.5) */ +.hero-band { + background: + radial-gradient(700px 340px at 85% 115%, rgba(0,228,216,0.28), transparent 65%), + radial-gradient(500px 260px at -5% -40%, rgba(0,0,156,0.55), transparent 60%), + var(--galaxy); + color: #fff; padding: 56px 0 48px; position: relative; overflow: hidden; } -/* Flat editorial signature: accent bar under the page title */ -.hero h1::after { - content: ""; display: block; width: 56px; height: 4px; - background: var(--accent); margin-top: 18px; -} -.hero p { color: var(--muted); font-size: 1.06rem; max-width: 60ch; margin: 0; } +.hero-band .flash { position: absolute; right: 8%; top: 22%; width: 22px; height: 22px; } +.hero h1 { font-size: clamp(1.9rem, 5vw, 2.9rem); margin: 0 0 10px; line-height: 1.12; font-weight: 700; } +.hero p { color: var(--cherenkov); font-size: 1.08rem; max-width: 62ch; margin: 0; } /* subtitle per BRAND D.3.4 */ .eyebrow { - color: var(--accent); font-weight: 600; text-transform: uppercase; - letter-spacing: 0.14em; font-size: 0.72rem; margin-bottom: 6px; + color: var(--on-galaxy-muted); font-weight: 600; text-transform: uppercase; + letter-spacing: 0.14em; font-size: 0.72rem; margin-bottom: 8px; } +/* Section headings on light background */ +.section-title { color: var(--galaxy); font-size: 1.4rem; margin: 36px 0 4px; } + /* News grid */ .grid { display: grid; gap: 16px; grid-template-columns: 1fr; padding: 28px 0 64px; } @media (min-width: 640px) { .grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 940px) { .grid { grid-template-columns: repeat(3, 1fr); } } +/* News cards — image + category + clamped title/description +