chore: bump cache version for audit analytics improvements
This commit is contained in:
parent
485ce6df0e
commit
38687f4d27
18 changed files with 275 additions and 130 deletions
145
AUDIT_ANALYTICS_IMPROVEMENTS.md
Normal file
145
AUDIT_ANALYTICS_IMPROVEMENTS.md
Normal file
|
|
@ -0,0 +1,145 @@
|
||||||
|
# Audit Analytics Dashboard Improvements
|
||||||
|
|
||||||
|
## Issues Identified
|
||||||
|
1. "Decisions over time" chart broken - groups by hour-of-day (0:00-23:00) across all 30 days
|
||||||
|
2. Too granular - hourly data not useful for 30-day period
|
||||||
|
3. Missing service health dashboard
|
||||||
|
4. Missing long-term violations view
|
||||||
|
5. Too much focus on recent decisions list
|
||||||
|
|
||||||
|
## Proposed Changes
|
||||||
|
|
||||||
|
### 1. Add Service Health (24h) Section
|
||||||
|
**Location:** Between service chart and timeline chart
|
||||||
|
**Purpose:** Show which services are healthy (allowed, no violations) in last 24 hours
|
||||||
|
|
||||||
|
**HTML to add:**
|
||||||
|
```html
|
||||||
|
<!-- Service Health (24h) -->
|
||||||
|
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-6 mb-8">
|
||||||
|
<h3 class="text-lg font-semibold text-gray-900 mb-4">Service Health (Last 24 Hours)</h3>
|
||||||
|
<div id="service-health-24h" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||||
|
<!-- Will be populated by JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
**JavaScript function needed:**
|
||||||
|
- `renderServiceHealth24h()` - filter last 24h, group by service, show allowed counts + violations
|
||||||
|
- Green background if no blocks/violations, red if issues
|
||||||
|
- Show: Service name, ✓ or ⚠ icon, Allowed count, Blocked count (if > 0), Violations count (if > 0)
|
||||||
|
|
||||||
|
### 2. Add Violations & Blocks (7 days) Section
|
||||||
|
**Location:** After service health, before timeline
|
||||||
|
**Purpose:** Long-term view of violations and blocks
|
||||||
|
|
||||||
|
**HTML to add:**
|
||||||
|
```html
|
||||||
|
<!-- Violations & Blocks (7 days) -->
|
||||||
|
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-6 mb-8">
|
||||||
|
<h3 class="text-lg font-semibold text-gray-900 mb-4">Violations & Blocks (Last 7 Days)</h3>
|
||||||
|
<div id="violations-7days" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
|
||||||
|
<!-- Will be populated by JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
**JavaScript function needed:**
|
||||||
|
- `renderViolations7days()` - filter last 7 days, group by day, show blocks + violations per day
|
||||||
|
- Red background for days with violations
|
||||||
|
- Green message if zero violations: "✓ No violations or blocks in the last 7 days"
|
||||||
|
- Show: Day label, event count, blocks count, violations count, services involved
|
||||||
|
|
||||||
|
### 3. Fix Timeline Chart with Tabs
|
||||||
|
**Location:** Existing timeline chart
|
||||||
|
**Purpose:** Replace broken hourly view with useful time bucketing
|
||||||
|
|
||||||
|
**HTML to modify:**
|
||||||
|
```html
|
||||||
|
<!-- Timeline Chart -->
|
||||||
|
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-6 mb-8">
|
||||||
|
<div class="flex items-center justify-between mb-4">
|
||||||
|
<h3 class="text-lg font-semibold text-gray-900">Decisions Over Time</h3>
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<button data-timeline-mode="6hourly" onclick="switchTimelineMode('6hourly')"
|
||||||
|
class="px-3 py-1 text-sm rounded bg-gray-200 text-gray-700">
|
||||||
|
6-Hourly (24h)
|
||||||
|
</button>
|
||||||
|
<button data-timeline-mode="daily" onclick="switchTimelineMode('daily')"
|
||||||
|
class="px-3 py-1 text-sm rounded bg-purple-600 text-white">
|
||||||
|
Daily (7d)
|
||||||
|
</button>
|
||||||
|
<button data-timeline-mode="weekly" onclick="switchTimelineMode('weekly')"
|
||||||
|
class="px-3 py-1 text-sm rounded bg-gray-200 text-gray-700">
|
||||||
|
Weekly (4w)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="timeline-chart" class="chart-container">
|
||||||
|
<!-- Chart will be rendered here -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
**JavaScript changes:**
|
||||||
|
- Add `let timelineMode = 'daily';` at top
|
||||||
|
- Replace `renderTimelineChart()` to support 3 modes:
|
||||||
|
- **6-hourly (24h):** 4 buckets (0-6h, 6-12h, 12-18h, 18-24h ago)
|
||||||
|
- **Daily (7d):** 7 buckets (last 7 days, labeled "Jan 1", "Jan 2", etc.)
|
||||||
|
- **Weekly (4w):** 4 buckets (Week 1, Week 2, Week 3, Week 4)
|
||||||
|
- Add `switchTimelineMode(mode)` function to toggle between modes
|
||||||
|
- Fix bar chart to show actual dates/time ranges, not hours-of-day
|
||||||
|
|
||||||
|
### 4. Remove or Simplify Recent Decisions Table
|
||||||
|
**Current:** Shows 50 recent decisions with full details
|
||||||
|
**Proposed:** Either remove entirely or reduce to 10 rows (less focus on individual decisions, more on patterns)
|
||||||
|
|
||||||
|
## Implementation Priority
|
||||||
|
1. Fix timeline chart (critical - currently broken)
|
||||||
|
2. Add service health 24h (high value)
|
||||||
|
3. Add violations 7 days (high value)
|
||||||
|
4. Simplify/remove recent decisions table (cleanup)
|
||||||
|
|
||||||
|
## Key Design Goals
|
||||||
|
- **Service Health:** Quick status check - which services are working correctly?
|
||||||
|
- **Violations:** Long-term tracking - any patterns in violations/blocks?
|
||||||
|
- **Timeline:** Useful time bucketing - how is usage changing over time?
|
||||||
|
- **Less detail noise:** Remove granular recent decisions list, focus on aggregate patterns
|
||||||
|
|
||||||
|
## Example Data Flow
|
||||||
|
|
||||||
|
**Service Health (24h):**
|
||||||
|
```
|
||||||
|
ContextPressureMonitor: ✓ Allowed: 45
|
||||||
|
BoundaryEnforcer: ✓ Allowed: 32
|
||||||
|
CrossReferenceValidator: ⚠ Allowed: 12, Violations: 3
|
||||||
|
```
|
||||||
|
|
||||||
|
**Violations (7 days):**
|
||||||
|
```
|
||||||
|
Fri, Oct 25: 2 blocks, 5 violations (BoundaryEnforcer, CrossReferenceValidator)
|
||||||
|
Thu, Oct 24: 0 blocks, 1 violation (MetacognitiveVerifier)
|
||||||
|
[other days with no violations not shown]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Timeline (Daily 7d):**
|
||||||
|
```
|
||||||
|
Bar chart showing:
|
||||||
|
Oct 19: 45 decisions
|
||||||
|
Oct 20: 52 decisions
|
||||||
|
Oct 21: 38 decisions
|
||||||
|
...
|
||||||
|
Oct 25: 67 decisions
|
||||||
|
```
|
||||||
|
|
||||||
|
## CSP Compliance
|
||||||
|
- All styles via Tailwind classes (no inline styles)
|
||||||
|
- onclick handlers for timeline mode buttons only (simple, CSP-safe)
|
||||||
|
- All rendering via innerHTML (no eval/Function)
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
1. Update audit-analytics.html with new HTML sections
|
||||||
|
2. Add new JavaScript functions
|
||||||
|
3. Update renderDashboard() to call new functions
|
||||||
|
4. Test with real audit data
|
||||||
|
5. Deploy to production
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>About | Tractatus AI Safety Framework</title>
|
<title>About | Tractatus AI Safety Framework</title>
|
||||||
<meta name="description" content="Learn about the Tractatus Framework: our mission, values, team, and commitment to preserving human agency through structural AI safety.">
|
<meta name="description" content="Learn about the Tractatus Framework: our mission, values, team, and commitment to preserving human agency through structural AI safety.">
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
/* Accessibility: Skip link */
|
/* Accessibility: Skip link */
|
||||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||||
|
|
@ -310,17 +310,17 @@
|
||||||
<!-- Footer with Te Tiriti Acknowledgment -->
|
<!-- Footer with Te Tiriti Acknowledgment -->
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Internationalization -->
|
<!-- Internationalization -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Scroll Animations (Phase 3) -->
|
<!-- Scroll Animations (Phase 3) -->
|
||||||
<script src="/js/scroll-animations.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/scroll-animations.js?v=0.1.0.1761346024265"></script>
|
||||||
<!-- Page Transitions (Phase 3) -->
|
<!-- Page Transitions (Phase 3) -->
|
||||||
<script src="/js/page-transitions.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/page-transitions.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>API Reference | Tractatus Framework</title>
|
<title>API Reference | Tractatus Framework</title>
|
||||||
<meta name="description" content="Complete API reference for Tractatus Framework - endpoints, authentication, request/response formats, and examples.">
|
<meta name="description" content="Complete API reference for Tractatus Framework - endpoints, authentication, request/response formats, and examples.">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.endpoint-badge {
|
.endpoint-badge {
|
||||||
@apply inline-block px-2 py-1 rounded text-xs font-mono font-semibold;
|
@apply inline-block px-2 py-1 rounded text-xs font-mono font-semibold;
|
||||||
|
|
@ -869,7 +869,7 @@
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@
|
||||||
<!-- RSS Feed -->
|
<!-- RSS Feed -->
|
||||||
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
/* Accessibility: Skip link */
|
/* Accessibility: Skip link */
|
||||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||||
|
|
@ -118,7 +118,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Breadcrumb -->
|
<!-- Breadcrumb -->
|
||||||
<div class="bg-white border-b border-gray-200">
|
<div class="bg-white border-b border-gray-200">
|
||||||
|
|
@ -226,10 +226,10 @@
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
|
|
||||||
<!-- Load Blog Post JavaScript -->
|
<!-- Load Blog Post JavaScript -->
|
||||||
<script src="/js/blog-post.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/blog-post.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@
|
||||||
<!-- RSS Feed -->
|
<!-- RSS Feed -->
|
||||||
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
/* Accessibility: Skip link */
|
/* Accessibility: Skip link */
|
||||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Hero Section -->
|
<!-- Hero Section -->
|
||||||
<div class="bg-gradient-to-br from-indigo-50 to-blue-50 py-20">
|
<div class="bg-gradient-to-br from-indigo-50 to-blue-50 py-20">
|
||||||
|
|
@ -260,14 +260,14 @@
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Internationalization (must load first for footer translations) -->
|
<!-- Internationalization (must load first for footer translations) -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Load Blog JavaScript -->
|
<!-- Load Blog JavaScript -->
|
||||||
<script src="/js/blog.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/blog.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Submit Case Study | Tractatus AI Safety</title>
|
<title>Submit Case Study | Tractatus AI Safety</title>
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
/* Accessibility: Skip link */
|
/* Accessibility: Skip link */
|
||||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||||
|
|
@ -217,10 +217,10 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<script src="/js/case-submission.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/case-submission.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,6 @@
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/check-version.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/check-version.js?v=0.1.0.1761346024265"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Documentation - Tractatus Framework</title>
|
<title>Documentation - Tractatus Framework</title>
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
/* Prose styling for document content */
|
/* Prose styling for document content */
|
||||||
.prose h1 { @apply text-3xl font-bold mt-8 mb-4 text-gray-900; }
|
.prose h1 { @apply text-3xl font-bold mt-8 mb-4 text-gray-900; }
|
||||||
|
|
@ -66,12 +66,12 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script src="/js/utils/api.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/utils/api.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/utils/router.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/utils/router.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/document-viewer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/document-viewer.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/code-copy-button.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/code-copy-button.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/toc.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/toc.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/docs-viewer-app.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/docs-viewer-app.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@
|
||||||
<link rel="preload" href="/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin>
|
<link rel="preload" href="/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||||
<link rel="preload" href="/fonts/inter-700.woff2" as="font" type="font/woff2" crossorigin>
|
<link rel="preload" href="/fonts/inter-700.woff2" as="font" type="font/woff2" crossorigin>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
html { scroll-behavior: smooth; }
|
html { scroll-behavior: smooth; }
|
||||||
|
|
||||||
|
|
@ -485,7 +485,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265" defer></script>
|
||||||
|
|
||||||
<!-- Page Header -->
|
<!-- Page Header -->
|
||||||
<div class="bg-white border-b border-gray-200">
|
<div class="bg-white border-b border-gray-200">
|
||||||
|
|
@ -866,15 +866,15 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Version Management & PWA -->
|
<!-- Version Management & PWA -->
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265" defer></script>
|
||||||
|
|
||||||
<script src="/js/components/document-cards.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/components/document-cards.js?v=0.1.0.1761346024265" defer></script>
|
||||||
<script src="/js/docs-app.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/docs-app.js?v=0.1.0.1761346024265" defer></script>
|
||||||
<script src="/js/docs-search-enhanced.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/docs-search-enhanced.js?v=0.1.0.1761346024265" defer></script>
|
||||||
|
|
||||||
<!-- Internationalization -->
|
<!-- Internationalization -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265" defer></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531" defer></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265" defer></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -18,21 +18,21 @@
|
||||||
<meta name="apple-mobile-web-app-title" content="Tractatus">
|
<meta name="apple-mobile-web-app-title" content="Tractatus">
|
||||||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
|
|
||||||
<!-- Syntax highlighting for code blocks -->
|
<!-- Syntax highlighting for code blocks -->
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css?v=0.1.0.1761346024265">
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/bash.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/bash.min.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/json.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/json.min.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/yaml.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/yaml.min.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Markdown parser -->
|
<!-- Markdown parser -->
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/11.0.0/marked.min.js?v=0.1.0.1761338266531"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/11.0.0/marked.min.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* Accessibility: Skip link */
|
/* Accessibility: Skip link */
|
||||||
|
|
@ -325,7 +325,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Hero -->
|
<!-- Hero -->
|
||||||
<div class="bg-gradient-to-br from-blue-50 to-indigo-50 py-16">
|
<div class="bg-gradient-to-br from-blue-50 to-indigo-50 py-16">
|
||||||
|
|
@ -630,16 +630,16 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Internationalization -->
|
<!-- Internationalization -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Version Management & PWA -->
|
<!-- Version Management & PWA -->
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<script src="/js/faq.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/faq.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
<link rel="manifest" href="/manifest.json">
|
<link rel="manifest" href="/manifest.json">
|
||||||
<meta name="theme-color" content="#3b82f6">
|
<meta name="theme-color" content="#3b82f6">
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; border: 2px solid #3b82f6; }
|
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; border: 2px solid #3b82f6; }
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
<body class="bg-gray-50">
|
<body class="bg-gray-50">
|
||||||
|
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Breadcrumb -->
|
<!-- Breadcrumb -->
|
||||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||||
|
|
@ -638,12 +638,12 @@ npm start</code></pre>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/scroll-animations.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/scroll-animations.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/page-transitions.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/page-transitions.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||||
.hover-lift { transition: transform 0.2s; }
|
.hover-lift { transition: transform 0.2s; }
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<div id="navbar-placeholder" class="min-h-16"></div>
|
<div id="navbar-placeholder" class="min-h-16"></div>
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Hero Section -->
|
<!-- Hero Section -->
|
||||||
<header role="banner">
|
<header role="banner">
|
||||||
|
|
@ -407,21 +407,21 @@ Additional case studies and research findings documented in technical papers
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Version Management & PWA -->
|
<!-- Version Management & PWA -->
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
|
|
||||||
<!-- Internationalization -->
|
<!-- Internationalization -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Scroll Animations (Phase 3) -->
|
<!-- Scroll Animations (Phase 3) -->
|
||||||
<script src="/js/scroll-animations.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/scroll-animations.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Page Transitions (Phase 3) -->
|
<!-- Page Transitions (Phase 3) -->
|
||||||
<script src="/js/page-transitions.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/page-transitions.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Koha — Reciprocal Support | Tractatus AI Safety</title>
|
<title>Koha — Reciprocal Support | Tractatus AI Safety</title>
|
||||||
<meta name="description" content="Join a relationship of mutual support for AI safety. Koha is reciprocal giving that maintains community bonds — your contribution sustains this work; our work serves you and the commons.">
|
<meta name="description" content="Join a relationship of mutual support for AI safety. Koha is reciprocal giving that maintains community bonds — your contribution sustains this work; our work serves you and the commons.">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||||
.skip-link { position: absolute; left: -9999px; }
|
.skip-link { position: absolute; left: -9999px; }
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main id="main-content" class="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
<main id="main-content" class="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||||
|
|
@ -380,17 +380,17 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Currency utilities and selector -->
|
<!-- Currency utilities and selector -->
|
||||||
<script src="/js/utils/currency.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/utils/currency.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/currency-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/currency-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Donation form functionality -->
|
<!-- Donation form functionality -->
|
||||||
<script src="/js/koha-donation.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/koha-donation.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Internationalization -->
|
<!-- Internationalization -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||||
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.hover-lift { transition: all 0.3s ease; }
|
.hover-lift { transition: all 0.3s ease; }
|
||||||
.hover-lift:hover { transform: translateY(-2px); }
|
.hover-lift:hover { transform: translateY(-2px); }
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
|
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||||
|
|
@ -605,20 +605,20 @@
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Internationalization (must load first for footer translations) -->
|
<!-- Internationalization (must load first for footer translations) -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Scroll Animations (Phase 3) -->
|
<!-- Scroll Animations (Phase 3) -->
|
||||||
<script src="/js/scroll-animations.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/scroll-animations.js?v=0.1.0.1761346024265"></script>
|
||||||
<!-- Page Transitions (Phase 3) -->
|
<!-- Page Transitions (Phase 3) -->
|
||||||
<script src="/js/page-transitions.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/page-transitions.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Version Management & PWA -->
|
<!-- Version Management & PWA -->
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/leader-page.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/leader-page.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Media Inquiry | Tractatus AI Safety</title>
|
<title>Media Inquiry | Tractatus AI Safety</title>
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.form-group { margin-bottom: 1.5rem; }
|
.form-group { margin-bottom: 1.5rem; }
|
||||||
.form-label {
|
.form-label {
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main id="main-content" class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
<main id="main-content" class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||||
|
|
@ -171,10 +171,10 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<script src="/js/media-inquiry.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/media-inquiry.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title data-i18n="meta.title">Privacy Policy | Tractatus AI Safety Framework</title>
|
<title data-i18n="meta.title">Privacy Policy | Tractatus AI Safety Framework</title>
|
||||||
<meta name="description" content="Privacy policy for the Tractatus AI Safety Framework. Learn how we collect, use, and protect your data." data-i18n="meta.description">
|
<meta name="description" content="Privacy policy for the Tractatus AI Safety Framework. Learn how we collect, use, and protect your data." data-i18n="meta.description">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.skip-link { position: absolute; left: -9999px; }
|
.skip-link { position: absolute; left: -9999px; }
|
||||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||||
|
|
@ -26,11 +26,11 @@
|
||||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||||
|
|
||||||
<!-- Navigation (injected by navbar.js) -->
|
<!-- Navigation (injected by navbar.js) -->
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- i18n Support -->
|
<!-- i18n Support -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||||
|
|
@ -246,7 +246,7 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||||
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761346024265">
|
||||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761338266531">
|
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761346024265">
|
||||||
<style>
|
<style>
|
||||||
.skip-link { position: absolute; left: -9999px; }
|
.skip-link { position: absolute; left: -9999px; }
|
||||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
|
|
||||||
<script src="/js/components/navbar.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/navbar.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||||
|
|
@ -611,20 +611,20 @@
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<!-- Internationalization (must load first for footer translations) -->
|
<!-- Internationalization (must load first for footer translations) -->
|
||||||
<script src="/js/i18n-simple.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/i18n-simple.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/components/language-selector.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/language-selector.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Scroll Animations (Phase 3) -->
|
<!-- Scroll Animations (Phase 3) -->
|
||||||
<script src="/js/scroll-animations.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/scroll-animations.js?v=0.1.0.1761346024265"></script>
|
||||||
<!-- Page Transitions (Phase 3) -->
|
<!-- Page Transitions (Phase 3) -->
|
||||||
<script src="/js/page-transitions.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/page-transitions.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Version Management & PWA -->
|
<!-- Version Management & PWA -->
|
||||||
<script src="/js/version-manager.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/version-manager.js?v=0.1.0.1761346024265"></script>
|
||||||
<script src="/js/researcher-page.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/researcher-page.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
<!-- Footer Component -->
|
<!-- Footer Component -->
|
||||||
<script src="/js/components/footer.js?v=0.1.0.1761338266531"></script>
|
<script src="/js/components/footer.js?v=0.1.0.1761346024265"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"buildDate": "2025-10-24T20:37:46.537Z",
|
"buildDate": "2025-10-24T22:47:04.271Z",
|
||||||
"changelog": [
|
"changelog": [
|
||||||
"Mobile: Fixed calendar page loading issues with enhanced error handling",
|
"Mobile: Fixed calendar page loading issues with enhanced error handling",
|
||||||
"Cache: Service worker v0.1.2 - FORCE REFRESH for mobile cache fix",
|
"Cache: Service worker v0.1.2 - FORCE REFRESH for mobile cache fix",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue