feat(en-pages): build remaining 14 pages (Editorial / Forms / Hubs / Legal)

Brings the EN site to 34 live pages, completing the original sitemap
from PDF Strategie & Contenu Partie C.1.

Editorial section (5 pages, page-editorial-detail.php template)
- /why-asterion/, /about/, /customers/, /trust/, /partners/
- inc/editorial-data.php centralizes the copy from D.18-D.21, D.28
- Reuses the industry-detail partial (same section schema)

Conversion section (4 pages, page-conversion-form.php template)
- /request-demo/, /request-te-kit/, /request-quote/, /contact/
- inc/forms-data.php declares fields per page (text/email/select/textarea)
- template-parts/conversion-form.php renders two-column layout
  (form left, promise right), eligibility list (T&E), FAQ (Demo)
- inc/form-handler.php: nonce-protected POST handler with honeypot,
  per-field sanitizer, wp_mail to AV_LEADS_RECIPIENT (defaults to
  jerome.foucher@asterionvr.com, override via wp-config.php define),
  redirect-back-with-status pattern.

Insights & Resources (page-insights-hub.php, page-resources.php)
- /insights/ queries `post`, falls back to placeholder when empty
- /resources/ lists 4 resource groups (datasheets, whitepapers,
  videos, brochures) per D.23

Legal (page-legal.php template, parent + 4 children)
- /legal/, /legal/privacy/, /legal/terms/, /legal/cookies/, /legal/notice/
- Renders page content if filled, falls back to slug-driven section
  skeleton (per D.29) for counsel to draft against.

All 16 new URLs verified HTTP 200, sizes 49-66 KB each. Mu-plugin
asterion-seed-rest.php in LocalWP self-deleted after seeding.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 12:41:36 +02:00
parent 45b0b95232
commit 70864129ed
10 changed files with 1066 additions and 2 deletions

View File

@@ -0,0 +1,100 @@
<?php
/**
* Template Name: Resources
*
* /resources/ — datasheets, whitepapers, videos, brochures.
*
* @package AsterionBricks
*/
defined('ABSPATH') || exit;
get_header();
$home_url = home_url('/');
$groups = [
[
'eyebrow' => 'Datasheets',
'title' => 'Technical specifications.',
'items' => [
['title' => 'PROSERVE — full datasheet', 'note' => 'Hardware specifications, software capabilities, scenarios. Gated, light form.'],
['title' => 'MY PROSERVE — quick datasheet', 'note' => '4-page summary.'],
['title' => 'PROSERVE FLEX — quick datasheet', 'note' => '4-page summary.'],
['title' => 'PROSERVE ACADEMY — quick datasheet', 'note' => '4-page summary.'],
['title' => 'PROSERVE+ — customization brochure', 'note' => 'Hardware add-ons, custom scenarios, process.'],
],
],
[
'eyebrow' => 'Whitepapers',
'title' => 'Long-form analyses.',
'items' => [
['title' => 'VR vs Live Fire: the 2026 cost-benefit comparison', 'note' => 'Quantified comparison across cost, fidelity, scalability, environmental.'],
['title' => "The Instructor's Guide to VR Training Programs", 'note' => "Methodology, drill design, AAR debriefing, assessment frameworks."],
['title' => 'Use of Force Training: how immersive simulation reduces tactical errors', 'note' => 'Reviews academic literature and Asterion deployment data.'],
['title' => 'Sovereignty in security simulation: why your training data must never leave your network', 'note' => 'For procurement and IT teams.'],
],
],
[
'eyebrow' => 'Videos',
'title' => 'Show, not tell.',
'items' => [
['title' => 'PROSERVE — 90-second product film', 'note' => 'Cinematic overview.'],
['title' => 'Instructor Cockpit walkthrough (3 minutes)', 'note' => 'Inside the instructor PC.'],
['title' => 'AAR replay — annotated example (4 minutes)', 'note' => 'A drill replayed with overlays.'],
['title' => 'MY PROSERVE — unboxing & first deployment (6 min)', 'note' => 'From mini-case to first scenario in real time.'],
['title' => 'Customer story — [name redacted unit] (8 min)', 'note' => 'Operational deployment, instructor interview, AAR excerpts.'],
],
],
[
'eyebrow' => 'Brochures',
'title' => 'For procurement and end-user briefs.',
'items' => [
['title' => 'PROSERVE general brochure', 'note' => '8 pages, EN/FR.'],
['title' => 'Industry-specific brochures', 'note' => 'Police, Special Forces, Military, Firefighters — one PDF each.'],
],
],
];
?>
<section class="av-hero" aria-labelledby="resources-headline">
<div class="av-hero__media" aria-hidden="true">
<div style="width:100%;height:100%;background:linear-gradient(135deg, #081427 0%, #0B1F3A 50%, #13294B 100%);"></div>
</div>
<div class="av-container">
<div class="av-hero__inner">
<p class="av-hero__eyebrow"><?php esc_html_e('Resources', 'asterion-bricks'); ?></p>
<h1 id="resources-headline" class="av-hero__headline">Everything to evaluate, justify, and procure.</h1>
<p class="av-hero__sub">
Whether you are building an internal pitch, drafting a procurement specification, or briefing your team — these resources are designed to help.
</p>
</div>
</div>
</section>
<?php foreach ($groups as $idx => $group) :
$is_dark = ($idx % 2 === 1);
$section_class = 'av-section' . ($is_dark ? ' av-section--dark' : '');
?>
<section class="<?php echo esc_attr($section_class); ?>" data-av-reveal>
<div class="av-container">
<div class="av-section__head">
<span class="av-eyebrow<?php echo $is_dark ? ' av-eyebrow--gold' : ''; ?>"><?php echo esc_html($group['eyebrow']); ?></span>
<h2 class="av-section__title"><?php echo esc_html($group['title']); ?></h2>
</div>
<div class="av-grid-3">
<?php foreach ($group['items'] as $item) : ?>
<article class="av-card<?php echo $is_dark ? ' is-on-dark' : ''; ?>">
<div class="av-card__body">
<h3 class="av-card__title" style="font-size:var(--text-h4);"><?php echo esc_html($item['title']); ?></h3>
<p class="av-card__excerpt"><?php echo esc_html($item['note']); ?></p>
<div class="av-card__cta">
<a href="<?php echo esc_url($home_url . 'contact/'); ?>" class="av-link<?php echo $is_dark ? ' av-link--on-dark' : ''; ?> av-link--with-arrow"><?php esc_html_e('Request access', 'asterion-bricks'); ?></a>
</div>
</div>
</article>
<?php endforeach; ?>
</div>
</div>
</section>
<?php endforeach; ?>
<?php get_footer(); ?>