tractatus/public/media-inquiry.html
TheFlow b21cda335d feat(i18n): add multilingual support to case-submission and media-inquiry pages
Adds German and French translations for form submission pages with
dynamic message handling and language selector integration.

**Pages Updated:**
- case-submission.html: Added data-i18n attributes and language selector
- media-inquiry.html: Added data-i18n attributes and language selector

**Translation Files Created:**
- EN/DE/FR for case-submission (form labels, help text, dynamic messages)
- EN/DE/FR for media-inquiry (form labels, help text, dynamic messages)

**JavaScript Updates:**
- case-submission.js: Added i18n translation helper for dynamic content
- media-inquiry.js: Added i18n translation helper for dynamic content
- Submit buttons and error messages now translate based on selected language

**Features:**
- Language flags visible in navbar for easy switching
- Form labels and help text translate on language change
- Submit button text updates during submission ("Submitting..." → "Einreichen..." in DE)
- Success/error messages display in user's selected language
- All translations via DeepL API for professional quality

**Technical Details:**
- Uses cache-busting timestamps for translation fetches (prevents stale cache)
- Submit buttons use <span data-i18n> for translatable content
- Form JavaScript uses window.i18nTranslations for dynamic text

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 16:41:54 +13:00

182 lines
7.3 KiB
HTML

<!DOCTYPE html>
<html lang="en" data-page="media-inquiry">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-i18n="page.title">Media Inquiry | Tractatus AI Safety</title>
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761447293715">
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761447293715">
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761447293715">
<style>
.form-group { margin-bottom: 1.5rem; }
.form-label {
display: block;
font-weight: 600;
color: #374151;
margin-bottom: 0.5rem;
}
.form-input, .form-textarea {
width: 100%;
padding: 0.75rem;
border: 2px solid #e2e8f0;
border-radius: 0.5rem;
font-size: 1rem;
transition: all 0.2s ease;
}
.form-input:focus, .form-textarea:focus {
outline: none;
border-color: var(--tractatus-core-end);
box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
transform: translateY(-1px);
}
.form-textarea { min-height: 150px; resize: vertical; }
.form-help { font-size: 0.875rem; color: #6b7280; margin-top: 0.25rem; }
.required { color: #dc2626; }
#success-message, #error-message {
display: none;
padding: 1rem;
border-radius: 0.5rem;
margin-bottom: 1.5rem;
}
#success-message {
background-color: #d1fae5;
border: 1px solid #10b981;
color: #065f46;
}
#error-message {
background-color: #fee2e2;
border: 1px solid #ef4444;
color: #991b1b;
}
/* Accessibility: Skip link */
.skip-link { position: absolute; left: -9999px; top: 0; }
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; border: 2px solid var(--tractatus-core-end); }
/* Accessibility: Focus indicators (WCAG 2.4.7) */
a:focus, button:focus, input:focus, select:focus, textarea:focus {
outline: 3px solid var(--tractatus-core-end);
outline-offset: 2px;
}
a:focus:not(:focus-visible) { outline: none; }
a:focus-visible { outline: 3px solid var(--tractatus-core-end); outline-offset: 2px; }
</style>
</head>
<body class="bg-gray-50">
<!-- Skip Link for Keyboard Navigation -->
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Navigation (injected by navbar.js) -->
<script src="/js/components/navbar.js?v=0.1.0.1761447293715"></script>
<script src="/js/i18n-simple.js?v=0.1.0.1761447293715"></script>
<!-- Main Content -->
<main id="main-content" class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
<!-- Header -->
<div class="mb-8">
<h1 data-i18n="page.heading" class="text-3xl font-bold text-gray-900 mb-3">Media Inquiry</h1>
<p class="text-lg text-gray-600">
Press and media inquiries about the Tractatus Framework. We review all inquiries and respond promptly.
</p>
</div>
<!-- Messages -->
<div id="success-message" role="alert" aria-live="polite"></div>
<div id="error-message" role="alert" aria-live="assertive"></div>
<!-- Form -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-8">
<form id="media-inquiry-form">
<!-- Contact Information -->
<h2 data-i18n="form.contact_info_heading" class="text-xl font-semibold text-gray-900 mb-6">Contact Information</h2>
<div class="form-group">
<label for="contact-name" class="form-label">
<span data-i18n="form.contact_name_label">Your Name</span> <span class="required">*</span>
</label>
<input type="text" id="contact-name" name="contact.name" class="form-input" required aria-required="true">
</div>
<div class="form-group">
<label for="contact-email" class="form-label">
<span data-i18n="form.contact_email_label">Email Address</span> <span class="required">*</span>
</label>
<input type="email" id="contact-email" name="contact.email" class="form-input" required aria-required="true">
</div>
<div class="form-group">
<label for="contact-outlet" class="form-label">
<span data-i18n="form.contact_outlet_label">Media Outlet/Organization</span> <span class="required">*</span>
</label>
<input type="text" id="contact-outlet" name="contact.outlet" class="form-input" required aria-required="true" aria-describedby="outlet-help">
<p id="outlet-help" class="form-help" data-i18n="form.contact_outlet_help">Publication, website, podcast, or organization you represent</p>
</div>
<div class="form-group">
<label for="contact-phone" class="form-label">
<span data-i18n="form.contact_phone_label">Phone Number (optional)</span>
</label>
<input type="tel" id="contact-phone" name="contact.phone" class="form-input">
</div>
<!-- Inquiry Details -->
<h2 data-i18n="form.inquiry_details_heading" class="text-xl font-semibold text-gray-900 mb-6 mt-8">Inquiry Details</h2>
<div class="form-group">
<label for="inquiry-subject" class="form-label">
<span data-i18n="form.inquiry_subject_label">Subject</span> <span class="required">*</span>
</label>
<input type="text" id="inquiry-subject" name="inquiry.subject" class="form-input" required aria-required="true">
</div>
<div class="form-group">
<label for="inquiry-message" class="form-label">
<span data-i18n="form.inquiry_message_label">Message</span> <span class="required">*</span>
</label>
<textarea id="inquiry-message" name="inquiry.message" class="form-textarea" required aria-required="true"></textarea>
</div>
<div class="form-group">
<label for="inquiry-deadline" class="form-label">
<span data-i18n="form.inquiry_deadline_label">Deadline (if applicable)</span>
</label>
<input type="datetime-local" id="inquiry-deadline" name="inquiry.deadline" class="form-input" aria-describedby="deadline-help">
<p id="deadline-help" class="form-help" data-i18n="form.inquiry_deadline_help">When do you need a response by?</p>
</div>
<!-- Submit Button -->
<div class="mt-8">
<button type="submit" id="submit-button" class="w-full text-white px-6 py-3 rounded-lg font-semibold transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 bg-gradient-cyan-blue">
<span data-i18n="form.submit_button">Submit Inquiry</span>
</button>
<p class="form-help mt-3 text-center">
We review all media inquiries and typically respond within 24-48 hours.
</p>
</div>
</form>
</div>
<!-- Privacy Note -->
<div class="mt-6 text-sm text-gray-600 text-center">
<p>
Your contact information is handled according to our
<a href="/about/values.html" class="hover:underline transition-colors text-tractatus-link">privacy principles</a>.
We never share media inquiries with third parties.
</p>
</div>
</main>
<!-- Footer -->
<script src="/js/components/language-selector.js?v=0.1.0.1761447293715"></script>
<script src="/js/media-inquiry.js?v=0.1.0.1761447293715"></script>
<!-- Footer Component -->
<script src="/js/components/footer.js?v=0.1.0.1761447293715"></script>
</body>
</html>