diff --git a/docs/WP-CONTENT-TEMPLATE-IMPLEMENTATION-PLAN.md b/docs/WP-CONTENT-TEMPLATE-IMPLEMENTATION-PLAN.md
new file mode 100644
index 00000000..45f3873d
--- /dev/null
+++ b/docs/WP-CONTENT-TEMPLATE-IMPLEMENTATION-PLAN.md
@@ -0,0 +1,1144 @@
+# WordPress Content Template Implementation Plan
+**Date:** December 1, 2025
+**Purpose:** Create a custom WordPress post template for IGNY8-generated content that mirrors the igny8 app ContentViewTemplate
+
+---
+
+## 📋 Overview
+
+We need to create a **custom single post template** in WordPress that:
+1. Only applies to posts where `_igny8_content_id` meta exists (IGNY8-generated content)
+2. Mirrors the design and structure of `/writer/content/[id]` from the igny8 app
+3. Uses WordPress theme colors and fonts (fully theme-compatible)
+4. Works with any WordPress theme without breaking appearance
+
+---
+
+## 🔍 Analysis: Current IGNY8 App Template
+
+### Key Components in ContentViewTemplate.tsx
+
+#### 1. **Header Section**
+- Back button
+- Post title (large, prominent)
+- Status badge (draft/review/publish)
+- Metadata row: Created date, word count, tags, categories
+- SEO metadata (meta title, meta description)
+
+#### 2. **Content Organization**
+- **Featured Image Block**
+ - Large hero image with rounded corners
+ - Image status pill (generated/pending/failed)
+ - Prompt display (if available)
+
+- **Introduction Section**
+ - "Opening Narrative" label
+ - First paragraph(s) before first H2
+
+- **Content Sections** (Dynamic, one per H2)
+ - Section number badge
+ - Section heading (H2)
+ - Section content (parsed HTML)
+ - In-article image (side-by-side on large screens)
+ - Image prompts displayed
+
+- **Metadata Footer**
+ - Collapsible JSON metadata viewer
+
+#### 3. **Design Characteristics**
+- Max width: 1200px, centered
+- Rounded corners (rounded-3xl = 24px)
+- Soft shadows and borders
+- Gradient backgrounds
+- Prose typography (1.85 line-height, 1.05rem base)
+- Responsive grid layouts
+
+---
+
+## 🎨 WordPress Implementation Strategy
+
+### File Structure
+
+```
+igny8-wp-plugin/
+ templates/
+ single-igny8-content.php # Main template file
+ parts/
+ igny8-header.php # Header with metadata
+ igny8-featured-image.php # Featured image block
+ igny8-content-sections.php # Parsed content sections
+ igny8-metadata.php # SEO and metadata footer
+ assets/
+ css/
+ igny8-content-template.css # Template styles
+ js/
+ igny8-content-template.js # JavaScript (if needed)
+```
+
+---
+
+## 📊 Data Mapping: IGNY8 → WordPress
+
+### Meta Fields Available in WordPress
+(All stored via `update_post_meta()` during sync)
+
+| IGNY8 Field | WordPress Meta Key | Usage in Template |
+|-------------|-------------------|-------------------|
+| `content_id` | `_igny8_content_id` | ✅ Identifier (required to activate template) |
+| `task_id` | `_igny8_task_id` | Link back to IGNY8 |
+| `content_type` | `_igny8_content_type` | Display content type badge |
+| `content_structure` | `_igny8_content_structure` | Article/Guide/Hub indicator |
+| `source` | `_igny8_source` | Show content source |
+| `primary_keyword` | `_igny8_primary_keyword` | Display in metadata |
+| `secondary_keywords` | `_igny8_secondary_keywords` | Display as tags/badges |
+| `cluster_name` | `_igny8_cluster_name` | Show cluster info |
+| `cluster_id` | `_igny8_cluster_id` | - |
+| `sector_id` | `_igny8_sector_id` | - |
+| `meta_title` | `_igny8_meta_title` | SEO title display |
+| `meta_description` | `_igny8_meta_description` | SEO description display |
+| `last_sync` | `_igny8_last_synced` | Show last sync time |
+| Featured image | `_thumbnail_id` | Standard WP featured image |
+| Gallery images | `_igny8_gallery_images` | Array of image IDs |
+| In-article images | `_igny8_imported_images` | Array of image data with prompts |
+
+### WordPress Native Fields
+
+| Field | How to Access | Usage |
+|-------|--------------|-------|
+| Title | `get_the_title()` | Main heading |
+| Content | `get_the_content()` | Post content HTML |
+| Excerpt | `get_the_excerpt()` | - |
+| Author | `get_the_author()` | Display author |
+| Date | `get_the_date()` | Created date |
+| Modified | `get_the_modified_date()` | Last updated |
+| Categories | `get_the_category()` | Category badges |
+| Tags | `get_the_tags()` | Tag badges |
+| Word Count | `str_word_count(strip_tags())` | Calculate |
+| Status | `get_post_status()` | draft/publish |
+
+---
+
+## 🎯 Implementation Plan
+
+### Phase 1: Template Detection & Loading
+
+**File:** `igny8-wp-plugin/includes/class-template-loader.php`
+
+```php
+class Igny8_Template_Loader {
+ public function __construct() {
+ add_filter('single_template', [$this, 'load_igny8_template'], 99);
+ add_action('wp_enqueue_scripts', [$this, 'enqueue_template_styles']);
+ }
+
+ public function load_igny8_template($template) {
+ global $post;
+
+ // Only for single posts
+ if (!is_singular('post')) {
+ return $template;
+ }
+
+ // Check if post has IGNY8 content ID
+ $content_id = get_post_meta($post->ID, '_igny8_content_id', true);
+ if (empty($content_id)) {
+ return $template; // Use default theme template
+ }
+
+ // Load our custom template
+ $custom_template = plugin_dir_path(dirname(__FILE__)) . 'templates/single-igny8-content.php';
+
+ if (file_exists($custom_template)) {
+ return $custom_template;
+ }
+
+ return $template;
+ }
+
+ public function enqueue_template_styles() {
+ global $post;
+
+ if (!is_singular('post')) {
+ return;
+ }
+
+ $content_id = get_post_meta($post->ID, '_igny8_content_id', true);
+ if (empty($content_id)) {
+ return;
+ }
+
+ // Enqueue custom styles
+ wp_enqueue_style(
+ 'igny8-content-template',
+ plugin_dir_url(dirname(__FILE__)) . 'templates/assets/css/igny8-content-template.css',
+ array(),
+ '1.0.0'
+ );
+
+ // Enqueue custom JS if needed
+ wp_enqueue_script(
+ 'igny8-content-template',
+ plugin_dir_url(dirname(__FILE__)) . 'templates/assets/js/igny8-content-template.js',
+ array('jquery'),
+ '1.0.0',
+ true
+ );
+ }
+}
+
+new Igny8_Template_Loader();
+```
+
+---
+
+### Phase 2: Main Template Structure
+
+**File:** `templates/single-igny8-content.php`
+
+```php
+
+
+
+
+ 'Draft',
+ 'pending' => 'Pending Review',
+ 'publish' => 'Published',
+ 'private' => 'Private'
+];
+$status_label = $status_labels[$status] ?? ucfirst($status);
+?>
+
+
+```
+
+#### 3.2 Featured Image Part
+
+**File:** `templates/parts/igny8-featured-image.php`
+
+```php
+
+
+
+
+
+
+
; ?>)
+
+
+
+
+
+
+```
+
+#### 3.3 Content Sections Part
+
+**File:** `templates/parts/igny8-content-sections.php`
+
+```php
+
+
+
+
+
+
+
+ Opening Narrative
+
+
+
+
+
+
+
+
+ $section): ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Visual Direction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+#### 3.4 Metadata Footer Part
+
+**File:** `templates/parts/igny8-metadata.php`
+
+```php
+
+
+
+```
+
+---
+
+### Phase 4: Helper Functions
+
+**File:** `includes/template-functions.php`
+
+```php
+ string, 'sections' => array]
+ */
+function igny8_parse_content_sections($content) {
+ $dom = new DOMDocument();
+ libxml_use_internal_errors(true);
+ $dom->loadHTML('' . $content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
+ libxml_clear_errors();
+
+ $intro_html = '';
+ $sections = [];
+ $current_section = null;
+
+ foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
+ if ($node->nodeName === 'h2') {
+ // Save previous section
+ if ($current_section !== null) {
+ $sections[] = $current_section;
+ }
+
+ // Start new section
+ $current_section = [
+ 'heading' => $node->textContent,
+ 'content' => ''
+ ];
+ } elseif ($current_section !== null) {
+ // Add to current section
+ $current_section['content'] .= $dom->saveHTML($node);
+ } else {
+ // Add to intro
+ $intro_html .= $dom->saveHTML($node);
+ }
+ }
+
+ // Save last section
+ if ($current_section !== null) {
+ $sections[] = $current_section;
+ }
+
+ return [
+ 'intro' => $intro_html,
+ 'sections' => $sections
+ ];
+}
+```
+
+---
+
+### Phase 5: CSS Styling
+
+**File:** `templates/assets/css/igny8-content-template.css`
+
+```css
+/**
+ * IGNY8 Content Template Styles
+ * Theme-compatible styles using CSS custom properties
+ */
+
+:root {
+ --igny8-max-width: 1200px;
+ --igny8-spacing: 2rem;
+ --igny8-border-radius: 24px;
+ --igny8-border-radius-sm: 16px;
+ --igny8-border-radius-xs: 8px;
+}
+
+/* Use theme's colors as fallback */
+.igny8-content-wrapper {
+ background: var(--wp--preset--color--background, #f9fafb);
+ color: var(--wp--preset--color--foreground, #1f2937);
+ padding: var(--igny8-spacing) 0;
+ font-family: inherit; /* Inherit theme font */
+}
+
+.igny8-content-container {
+ max-width: var(--igny8-max-width);
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+/* Header Styles */
+.igny8-header {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ padding: var(--igny8-spacing);
+ margin-bottom: var(--igny8-spacing);
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-back-button {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ color: inherit;
+ text-decoration: none;
+ font-size: 0.875rem;
+ opacity: 0.7;
+ transition: opacity 0.2s;
+}
+
+.igny8-back-button:hover {
+ opacity: 1;
+}
+
+.igny8-header-title-row {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 1rem;
+ margin: 1.5rem 0;
+}
+
+.igny8-title {
+ font-size: 2.5rem;
+ font-weight: 700;
+ line-height: 1.2;
+ margin: 0;
+ color: inherit;
+}
+
+.igny8-status-badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.5rem 1rem;
+ border-radius: var(--igny8-border-radius-xs);
+ font-size: 0.875rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+}
+
+.igny8-status-draft {
+ background: rgba(251, 191, 36, 0.15);
+ color: rgba(180, 83, 9, 1);
+}
+
+.igny8-status-publish {
+ background: rgba(16, 185, 129, 0.15);
+ color: rgba(5, 150, 105, 1);
+}
+
+.igny8-metadata-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ padding-top: 1rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.igny8-meta-item {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ font-size: 0.875rem;
+}
+
+.igny8-meta-badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+}
+
+.igny8-category-badge,
+.igny8-tag-badge {
+ display: inline-block;
+ padding: 0.25rem 0.75rem;
+ border-radius: var(--igny8-border-radius-xs);
+ font-size: 0.75rem;
+ background: rgba(0, 0, 0, 0.05);
+ color: inherit;
+}
+
+/* Featured Image */
+.igny8-featured-image-block {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ overflow: hidden;
+ margin-bottom: var(--igny8-spacing);
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-featured-header {
+ padding: 2rem 2rem 1rem;
+}
+
+.igny8-featured-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ opacity: 0.6;
+}
+
+.igny8-featured-image {
+ width: 100%;
+ height: auto;
+ display: block;
+}
+
+.igny8-image-prompt {
+ padding: 1.5rem 2rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+ background: rgba(0, 0, 0, 0.02);
+}
+
+.igny8-prompt-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ opacity: 0.5;
+ margin-bottom: 0.75rem;
+}
+
+.igny8-prompt-text {
+ font-size: 0.875rem;
+ line-height: 1.6;
+ margin: 0;
+}
+
+/* Content Sections */
+.igny8-content-body {
+ display: flex;
+ flex-direction: column;
+ gap: 3rem;
+}
+
+.igny8-intro-section,
+.igny8-content-section {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ overflow: hidden;
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-intro-section {
+ padding: 2rem;
+}
+
+.igny8-section-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ opacity: 0.6;
+ margin-bottom: 1.5rem;
+}
+
+.igny8-section-container {
+ padding: 2.5rem;
+}
+
+.igny8-section-header {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ margin-bottom: 2rem;
+}
+
+.igny8-section-number {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 50%;
+ background: rgba(59, 130, 246, 0.1);
+ color: rgba(37, 99, 235, 1);
+ font-weight: 600;
+ font-size: 0.875rem;
+ flex-shrink: 0;
+}
+
+.igny8-section-heading {
+ font-size: 2rem;
+ font-weight: 700;
+ margin: 0;
+ color: inherit;
+}
+
+.igny8-section-content {
+ display: grid;
+ gap: 2.5rem;
+}
+
+.igny8-section-content.igny8-has-image {
+ grid-template-columns: 1fr;
+}
+
+@media (min-width: 1024px) {
+ .igny8-section-content.igny8-has-image {
+ grid-template-columns: 3fr 2fr;
+ }
+}
+
+/* Prose Styles */
+.igny8-prose {
+ font-size: 1.0625rem;
+ line-height: 1.85;
+ color: inherit;
+}
+
+.igny8-prose h2,
+.igny8-prose h3,
+.igny8-prose h4 {
+ margin-top: 2.5rem;
+ margin-bottom: 1.25rem;
+ font-weight: 600;
+ color: inherit;
+}
+
+.igny8-prose h3 {
+ font-size: 1.6rem;
+}
+
+.igny8-prose h4 {
+ font-size: 1.35rem;
+}
+
+.igny8-prose p {
+ margin-bottom: 1.3rem;
+}
+
+.igny8-prose ul,
+.igny8-prose ol {
+ margin-bottom: 1.5rem;
+ padding-left: 1.75rem;
+}
+
+.igny8-prose li {
+ margin-bottom: 0.6rem;
+}
+
+.igny8-prose a {
+ color: inherit;
+ text-decoration: underline;
+ text-decoration-color: rgba(0, 0, 0, 0.3);
+ transition: text-decoration-color 0.2s;
+}
+
+.igny8-prose a:hover {
+ text-decoration-color: rgba(0, 0, 0, 0.6);
+}
+
+.igny8-prose img {
+ max-width: 100%;
+ height: auto;
+ border-radius: var(--igny8-border-radius-sm);
+ margin: 1.75rem auto;
+}
+
+/* In-Article Images */
+.igny8-image-figure {
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius-sm);
+ overflow: hidden;
+ background: rgba(0, 0, 0, 0.02);
+}
+
+.igny8-in-article-image {
+ width: 100%;
+ height: auto;
+ display: block;
+}
+
+.igny8-image-caption {
+ padding: 1.25rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.igny8-caption-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ opacity: 0.5;
+ margin-bottom: 0.75rem;
+}
+
+.igny8-caption-text {
+ font-size: 0.875rem;
+ line-height: 1.6;
+ margin: 0;
+}
+
+/* Metadata Footer */
+.igny8-metadata-footer {
+ margin-top: 3rem;
+ padding: 2rem;
+ background: rgba(0, 0, 0, 0.02);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+}
+
+.igny8-metadata-summary {
+ cursor: pointer;
+ font-weight: 600;
+ font-size: 0.875rem;
+ user-select: none;
+}
+
+.igny8-metadata-summary:hover {
+ opacity: 0.7;
+}
+
+.igny8-metadata-content {
+ margin-top: 1.5rem;
+ padding: 1.5rem;
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius-xs);
+}
+
+.igny8-metadata-table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+.igny8-metadata-table th,
+.igny8-metadata-table td {
+ padding: 0.75rem;
+ text-align: left;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+}
+
+.igny8-metadata-table th {
+ font-weight: 600;
+ width: 30%;
+}
+
+.igny8-keyword-tag {
+ display: inline-block;
+ padding: 0.25rem 0.75rem;
+ margin-right: 0.5rem;
+ margin-bottom: 0.5rem;
+ border-radius: var(--igny8-border-radius-xs);
+ background: rgba(0, 0, 0, 0.05);
+ font-size: 0.875rem;
+}
+
+/* Responsive */
+@media (max-width: 768px) {
+ .igny8-title {
+ font-size: 1.875rem;
+ }
+
+ .igny8-section-heading {
+ font-size: 1.5rem;
+ }
+
+ .igny8-prose {
+ font-size: 1rem;
+ }
+}
+```
+
+---
+
+## 🎨 Theme Compatibility Strategy
+
+### 1. **Use Theme Colors**
+- Rely on `inherit` for text colors
+- Use CSS custom properties with fallbacks
+- Detect theme colors: `var(--wp--preset--color--foreground, fallback)`
+
+### 2. **Use Theme Fonts**
+- Always use `font-family: inherit`
+- Let theme control all typography
+
+### 3. **Minimal Override**
+- Only style structure and spacing
+- Don't set absolute colors unless necessary
+- Use `rgba()` with opacity for neutrals
+
+### 4. **Dark Mode Support**
+```css
+@media (prefers-color-scheme: dark) {
+ .igny8-content-wrapper {
+ background: var(--wp--preset--color--background, #111827);
+ }
+ /* Adjust opacity for better contrast */
+}
+```
+
+---
+
+## ✅ Implementation Checklist
+
+### Backend
+- [ ] Create `class-template-loader.php`
+- [ ] Add `template-functions.php` with parser
+- [ ] Register template loader in main plugin file
+- [ ] Test template detection logic
+
+### Templates
+- [ ] Create `single-igny8-content.php`
+- [ ] Create `parts/igny8-header.php`
+- [ ] Create `parts/igny8-featured-image.php`
+- [ ] Create `parts/igny8-content-sections.php`
+- [ ] Create `parts/igny8-metadata.php`
+
+### Styles & Assets
+- [ ] Create `igny8-content-template.css`
+- [ ] Add responsive breakpoints
+- [ ] Test with multiple themes (Twenty Twenty-Four, Astra, GeneratePress)
+- [ ] Add dark mode support
+
+### Testing
+- [ ] Test with posts that have `_igny8_content_id`
+- [ ] Test with posts without `_igny8_content_id` (should use default theme)
+- [ ] Test image display (featured + in-article)
+- [ ] Test section parsing with various HTML structures
+- [ ] Test metadata display
+- [ ] Test on mobile devices
+
+### Documentation
+- [ ] Add usage docs to plugin README
+- [ ] Document theme compatibility
+- [ ] Create troubleshooting guide
+
+---
+
+## 🚀 Next Steps
+
+1. **Review this plan** - Confirm approach and structure
+2. **Create base template files** - Start with template loader
+3. **Implement template parts** - One by one
+4. **Style incrementally** - Test as we go
+5. **Iterate based on testing** - Refine for different themes
+
+---
+
+## ⚠️ Important Notes
+
+1. **Non-destructive**: Only affects IGNY8-generated posts
+2. **Theme-first**: Always respect theme's design decisions
+3. **Graceful fallback**: If something fails, show basic content
+4. **Performance**: Minimal CSS, no heavy JavaScript
+5. **Accessibility**: Semantic HTML, proper ARIA labels
+
diff --git a/docs/future-docs/current-state.md b/docs/future-docs/current-state.md
new file mode 100644
index 00000000..845f6167
--- /dev/null
+++ b/docs/future-docs/current-state.md
@@ -0,0 +1,116 @@
+Understood fully.
+
+Everything you said in this entire session so far is now locked in as **active working context**.
+I will maintain every point precisely as you defined it, and nothing will be lost.
+
+Here is the **exact memory snapshot** of the current state, exactly as you described it.
+No assumptions. No additions. No explanations unless you ask.
+
+---
+
+# **CURRENT STATE SNAPSHOT (Your Words, Consolidated Precisely)**
+
+### **1. System implementation state**
+
+* The IGNY8 app codebase is **95 percent implemented** based on the master docs you gave.
+* You are now finalizing cleanup and integration fixes.
+
+### **2. Removing deprecated modules**
+
+You are actively removing:
+
+* **Site Builder**
+* **Blueprints**
+* **Page Blueprints**
+* **Deployment readiness**
+* **Renderer**
+* All related frontend and backend code
+* All unnecessary taxonomy structures created for builder functions
+
+These removals are ongoing and being executed step by step through your AI agent in the IDE.
+
+### **3. Active focus now (your priority list)**
+
+1. **Remove Site Builder and Renderer completely**
+2. **Troubleshoot IGNY8 → WordPress Publishing issues**
+
+### **4. Publishing issues (current findings)**
+
+* WordPress post is created successfully.
+* **Categories not being applied**
+* **Tags not being applied**
+* **Images not being set as featured image**
+* Log shows:
+
+```
+⚠️ No categories in content_data
+⚠️ No tags in content_data
+⚠️ No featured image in content_data
+```
+
+### **5. Image issue**
+
+* Previous issue: image URL was pointing to provider instead of IGNY8 local storage.
+* You fixed the storage path code.
+* **Not tested yet**.
+
+### **6. Taxonomy issue**
+
+* WordPress categories and tags were not reaching the plugin because:
+
+ * The internal IGNY8 `ContentTaxonomy` and builder-linked taxonomy model structure was overly complex.
+ * Blueprint removal affects how taxonomies were originally mapped and injected.
+* You decided to clean up taxonomy code first *before* debugging publishing further.
+
+### **7. Real-time actions (from the screenshot)**
+
+Your AI agent is:
+
+* Removing frontend modules related to SiteBuilder.
+* Searching and deleting folders.
+* Cleaning routes and navigation.
+* Cleaning backend references (serializers, views, models).
+* Simplifying taxonomy and removing blueprint links inside planner/serializer logic.
+
+You are currently in the phase:
+**"Remove SiteBuilder from frontend 4/8"**
+and continuing cleanup in both frontend and backend.
+
+### **8. WordPress publishing log**
+
+The plugin logs confirm:
+
+* Title is passed correctly
+* Task ID missing (content was published without a task connection)
+* Categories missing
+* Tags missing
+* Featured image missing
+* SEO fields are applied correctly
+* Post created in draft status
+* URL returned correctly
+
+### **9. Expected behavior from me**
+
+You expect:
+
+* Full retention of every point you say.
+* No drifting.
+* No assumptions.
+* Conversational flow led **only by you**.
+* No detailed answers unless requested.
+* No large explanations.
+* You will give the direction, and I follow exactly.
+
+You also want:
+
+* All context remembered so we do not divert or make wrong assumptions.
+
+---
+
+# **I confirm**
+
+All the points above are stored and will remain the active context for this session.
+
+No matter how long this session goes, I will maintain this exact working state and alignment.
+
+You can continue with the next instruction.
diff --git a/docs/future-docs/nex-plan.md b/docs/future-docs/nex-plan.md
new file mode 100644
index 00000000..a378eece
--- /dev/null
+++ b/docs/future-docs/nex-plan.md
@@ -0,0 +1,75 @@
+Noted.
+Locked in as the next phase plan.
+
+Here is the **clean, precise, conversational summary** of what you want to work on next, without over-explaining anything.
+
+---
+
+# **NEXT PLAN (AFTER CURRENT ISSUES ARE FIXED)**
+
+### These two items are now officially added to the working context.
+
+---
+
+## **1. Site Delete Option (Critical, High-Risk Operation)**
+
+You want:
+
+* A **Delete Site** function in the frontend (Sites page).
+* It must include:
+
+ * Safety guardrails
+ * Clear irreversible warning
+ * Possibly typing the site name to confirm
+ * Only owner or power-user-level roles can delete
+* On delete:
+
+ * **Every single record linked to that site** must be deleted from all tables.
+ * Keywords → Clusters → Ideas → Tasks → Content → Images → Taxonomies → Automation rules → Any integration records
+ * No orphaned data
+ * No foreign key conflicts
+
+Basically:
+**Full cascading deletion of everything under that site.**
+
+This requires careful backend configuration and is a major integrity operation.
+
+This point is confirmed and stored.
+
+---
+
+## **2. Django Backend: Proper Delete + Bulk Delete Support**
+
+You want:
+
+* Consistency across all modules
+* Every ViewSet must support:
+
+ * Single record delete
+ * Bulk delete
+* Only Admin or Power User can perform deletes
+* Delete must include:
+
+ * Correct cascade behavior
+ * Related-table cleanup
+ * No dangling relations
+* Must be unified across:
+
+ * Planner
+ * Writer
+ * Publisher
+ * Billing
+ * System
+ * Integration
+ * Automation
+ * Sites, Sectors
+
+You want a **global, consistent delete pattern**, not current scattered behavior.
+
+This point is confirmed and stored.
+
+---
+
+Both items are now stored as part of the active working context and will remain aligned throughout the session.
+
+Tell me how you want to proceed next.
diff --git a/igny8-wp-plugin/igny8-bridge.php b/igny8-wp-plugin/igny8-bridge.php
index 4c50c2e2..4416bcd7 100644
--- a/igny8-wp-plugin/igny8-bridge.php
+++ b/igny8-wp-plugin/igny8-bridge.php
@@ -90,6 +90,10 @@ class Igny8Bridge {
// Webhook logs (used in admin and frontend)
require_once IGNY8_BRIDGE_PLUGIN_DIR . 'includes/class-igny8-webhook-logs.php';
+ // Template functions and loader (for frontend content display)
+ require_once IGNY8_BRIDGE_PLUGIN_DIR . 'includes/template-functions.php';
+ require_once IGNY8_BRIDGE_PLUGIN_DIR . 'includes/class-igny8-template-loader.php';
+
// Admin classes (only in admin)
if (is_admin()) {
require_once IGNY8_BRIDGE_PLUGIN_DIR . 'admin/class-admin.php';
diff --git a/igny8-wp-plugin/includes/class-igny8-template-loader.php b/igny8-wp-plugin/includes/class-igny8-template-loader.php
new file mode 100644
index 00000000..3fc8a847
--- /dev/null
+++ b/igny8-wp-plugin/includes/class-igny8-template-loader.php
@@ -0,0 +1,137 @@
+is_igny8_content($post->ID)) {
+ return $template;
+ }
+
+ // Path to our custom template
+ $custom_template = plugin_dir_path(dirname(__FILE__)) . 'templates/single-igny8-content.php';
+
+ // Use custom template if it exists
+ if (file_exists($custom_template)) {
+ return $custom_template;
+ }
+
+ // Fallback to default template
+ return $template;
+ }
+
+ /**
+ * Enqueue styles and scripts for IGNY8 template
+ */
+ public function enqueue_template_assets() {
+ global $post;
+
+ // Only enqueue on single post pages
+ if (!is_singular('post')) {
+ return;
+ }
+
+ // Only enqueue for IGNY8 content
+ if (!$this->is_igny8_content($post->ID)) {
+ return;
+ }
+
+ // Enqueue custom styles
+ wp_enqueue_style(
+ 'igny8-content-template',
+ plugin_dir_url(dirname(__FILE__)) . 'templates/assets/css/igny8-content-template.css',
+ array(),
+ '1.0.0'
+ );
+
+ // Enqueue custom JavaScript (if needed in future)
+ wp_enqueue_script(
+ 'igny8-content-template',
+ plugin_dir_url(dirname(__FILE__)) . 'templates/assets/js/igny8-content-template.js',
+ array('jquery'),
+ '1.0.0',
+ true
+ );
+ }
+
+ /**
+ * Add body class for IGNY8 content
+ *
+ * @param array $classes Current body classes
+ * @return array Modified body classes
+ */
+ public function add_body_class($classes) {
+ global $post;
+
+ if (is_singular('post') && $this->is_igny8_content($post->ID)) {
+ $classes[] = 'igny8-content';
+ $classes[] = 'igny8-template-active';
+ }
+
+ return $classes;
+ }
+}
+
+// Initialize template loader
+new Igny8_Template_Loader();
diff --git a/igny8-wp-plugin/includes/template-functions.php b/igny8-wp-plugin/includes/template-functions.php
new file mode 100644
index 00000000..e3c85012
--- /dev/null
+++ b/igny8-wp-plugin/includes/template-functions.php
@@ -0,0 +1,198 @@
+ string, 'sections' => array]
+ */
+function igny8_parse_content_sections($content) {
+ if (empty($content)) {
+ return ['intro' => '', 'sections' => []];
+ }
+
+ // Use DOMDocument to parse HTML
+ $dom = new DOMDocument('1.0', 'UTF-8');
+ libxml_use_internal_errors(true);
+
+ // Load HTML with proper encoding
+ $dom->loadHTML('' . $content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
+ libxml_clear_errors();
+
+ $intro_html = '';
+ $sections = [];
+ $current_section = null;
+
+ // Get body node
+ $body = $dom->getElementsByTagName('body')->item(0);
+ if (!$body) {
+ return ['intro' => $content, 'sections' => []];
+ }
+
+ // Iterate through all child nodes
+ foreach ($body->childNodes as $node) {
+ // Check if node is an H2 heading
+ if ($node->nodeName === 'h2') {
+ // Save previous section if exists
+ if ($current_section !== null) {
+ $sections[] = $current_section;
+ }
+
+ // Start new section
+ $current_section = [
+ 'heading' => trim($node->textContent),
+ 'content' => '',
+ 'id' => sanitize_title($node->textContent)
+ ];
+ } elseif ($current_section !== null) {
+ // Add to current section
+ $current_section['content'] .= $dom->saveHTML($node);
+ } else {
+ // Add to intro (before first H2)
+ $intro_html .= $dom->saveHTML($node);
+ }
+ }
+
+ // Save last section
+ if ($current_section !== null) {
+ $sections[] = $current_section;
+ }
+
+ return [
+ 'intro' => trim($intro_html),
+ 'sections' => $sections
+ ];
+}
+
+/**
+ * Get in-article images from imported images meta
+ *
+ * @param int $post_id Post ID
+ * @return array Indexed array of image data by position
+ */
+function igny8_get_in_article_images($post_id) {
+ $imported_images = get_post_meta($post_id, '_igny8_imported_images', true);
+
+ if (empty($imported_images) || !is_array($imported_images)) {
+ return [];
+ }
+
+ $in_article_images = [];
+
+ foreach ($imported_images as $img) {
+ // Skip featured images
+ if (isset($img['is_featured']) && $img['is_featured']) {
+ continue;
+ }
+
+ $position = isset($img['position']) ? (int)$img['position'] : count($in_article_images) + 1;
+ $in_article_images[$position] = $img;
+ }
+
+ return $in_article_images;
+}
+
+/**
+ * Get featured image prompt from imported images meta
+ *
+ * @param int $post_id Post ID
+ * @return string|null Image prompt or null
+ */
+function igny8_get_featured_image_prompt($post_id) {
+ $imported_images = get_post_meta($post_id, '_igny8_imported_images', true);
+
+ if (empty($imported_images) || !is_array($imported_images)) {
+ return null;
+ }
+
+ foreach ($imported_images as $img) {
+ if (isset($img['is_featured']) && $img['is_featured'] && isset($img['prompt'])) {
+ return $img['prompt'];
+ }
+ }
+
+ return null;
+}
+
+/**
+ * Format status label for display
+ *
+ * @param string $status Post status
+ * @return string Formatted label
+ */
+function igny8_format_status_label($status) {
+ $labels = [
+ 'draft' => 'Draft',
+ 'pending' => 'Pending Review',
+ 'publish' => 'Published',
+ 'private' => 'Private',
+ 'future' => 'Scheduled',
+ 'trash' => 'Trash'
+ ];
+
+ return isset($labels[$status]) ? $labels[$status] : ucfirst($status);
+}
+
+/**
+ * Get status CSS class
+ *
+ * @param string $status Post status
+ * @return string CSS class
+ */
+function igny8_get_status_class($status) {
+ $classes = [
+ 'draft' => 'igny8-status-draft',
+ 'pending' => 'igny8-status-pending',
+ 'publish' => 'igny8-status-publish',
+ 'private' => 'igny8-status-private',
+ 'future' => 'igny8-status-future'
+ ];
+
+ return isset($classes[$status]) ? $classes[$status] : 'igny8-status-default';
+}
+
+/**
+ * Calculate word count from content
+ *
+ * @param string $content HTML content
+ * @return int Word count
+ */
+function igny8_calculate_word_count($content) {
+ if (empty($content)) {
+ return 0;
+ }
+
+ // Strip HTML tags and count words
+ $text = wp_strip_all_tags($content);
+ return str_word_count($text);
+}
+
+/**
+ * Parse secondary keywords from meta
+ *
+ * @param string $keywords Comma-separated keywords
+ * @return array Array of keywords
+ */
+function igny8_parse_keywords($keywords) {
+ if (empty($keywords)) {
+ return [];
+ }
+
+ // Split by comma and trim each keyword
+ $keywords_array = array_map('trim', explode(',', $keywords));
+
+ // Remove empty values
+ return array_filter($keywords_array);
+}
diff --git a/igny8-wp-plugin/templates/README.md b/igny8-wp-plugin/templates/README.md
new file mode 100644
index 00000000..43fa7a05
--- /dev/null
+++ b/igny8-wp-plugin/templates/README.md
@@ -0,0 +1,292 @@
+# IGNY8 Custom Content Template
+
+## Overview
+
+The IGNY8 WordPress Bridge plugin now includes a custom post template that automatically applies to IGNY8-generated content, providing a beautiful, magazine-style layout that mirrors the IGNY8 app's content view.
+
+## Features
+
+✅ **Automatic Detection** - Only activates for posts with `_igny8_content_id` meta field
+✅ **Theme Compatible** - Inherits all theme colors and fonts
+✅ **Responsive Design** - Works beautifully on all devices
+✅ **Section-Based Layout** - Content parsed into introduction + H2 sections
+✅ **Image Prompts** - Displays AI image generation prompts
+✅ **SEO Metadata** - Shows meta title and description
+✅ **Content Metadata** - Displays clusters, keywords, content type
+✅ **Professional Typography** - Clean, readable prose styles
+
+## How It Works
+
+### Detection
+
+The template automatically detects IGNY8-generated content by checking for the `_igny8_content_id` post meta field. If found, the custom template is loaded instead of the theme's default `single.php`.
+
+### Template Structure
+
+```
+templates/
+├── single-igny8-content.php # Main template
+├── parts/
+│ ├── igny8-header.php # Title, status, metadata
+│ ├── igny8-featured-image.php # Featured image with prompt
+│ ├── igny8-content-sections.php # Parsed content sections
+│ └── igny8-metadata.php # IGNY8 metadata footer
+└── assets/
+ ├── css/
+ │ └── igny8-content-template.css # Styles
+ └── js/
+ └── igny8-content-template.js # Optional enhancements
+```
+
+### Content Parsing
+
+The template automatically parses your content HTML:
+
+1. **Introduction** - All content before the first H2 heading
+2. **Sections** - Each H2 creates a new section with:
+ - Section number badge
+ - Heading
+ - Content
+ - In-article image (if available)
+
+### Image Display
+
+- **Featured Image** - Displayed prominently with AI prompt
+- **In-Article Images** - Positioned next to sections (side-by-side on desktop)
+- **Image Prompts** - AI generation prompts shown below images
+
+## Metadata Display
+
+### Header Section
+- Post title
+- Status badge (Draft/Published/etc.)
+- Posted date
+- Word count
+- Author
+- Categories
+- Tags
+- SEO metadata (if different from post title)
+- Content info (type, structure, cluster, keywords)
+
+### Footer Section
+- Collapsible IGNY8 metadata
+- Content ID, Task ID
+- Content type and structure
+- Source
+- Cluster and Sector IDs
+- Secondary keywords
+- Last sync time
+
+## Theme Compatibility
+
+The template is designed to work with ANY WordPress theme by:
+
+### 1. Color Inheritance
+```css
+color: inherit; /* Uses theme's text color */
+background: var(--wp--preset--color--base, #ffffff); /* Uses theme's background */
+```
+
+### 2. Font Inheritance
+```css
+font-family: inherit; /* Uses theme's font */
+```
+
+### 3. Minimal Overrides
+Only structural styles are applied (spacing, borders, etc.)
+Colors use opacity overlays: `rgba(0, 0, 0, 0.08)` for neutrals
+
+### 4. CSS Custom Properties
+Respects theme's CSS custom properties when available
+
+## Customization
+
+### Disable Template
+
+To disable the custom template and use your theme's default:
+
+```php
+// Add to your theme's functions.php
+add_filter('single_template', function($template) {
+ // Remove IGNY8 template filter
+ remove_filter('single_template', [Igny8_Template_Loader::class, 'load_igny8_template'], 99);
+ return $template;
+}, 98);
+```
+
+### Customize Styles
+
+You can override styles by adding to your theme's CSS:
+
+```css
+/* Override max width */
+.igny8-content-container {
+ max-width: 1400px;
+}
+
+/* Customize section number badge */
+.igny8-section-number {
+ background: your-theme-color;
+ color: white;
+}
+```
+
+### Modify Template Parts
+
+You can copy template parts to your theme and modify:
+
+```
+your-theme/
+└── igny8-templates/
+ └── parts/
+ └── igny8-header.php # Your custom header
+```
+
+Then filter the template part location:
+
+```php
+add_filter('igny8_template_part_path', function($path, $part) {
+ $theme_path = get_stylesheet_directory() . '/igny8-templates/parts/' . $part . '.php';
+ if (file_exists($theme_path)) {
+ return $theme_path;
+ }
+ return $path;
+}, 10, 2);
+```
+
+## Developer Reference
+
+### Template Detection
+
+```php
+// Check if post is IGNY8 content
+$template_loader = new Igny8_Template_Loader();
+if ($template_loader->is_igny8_content($post_id)) {
+ // This is IGNY8 content
+}
+```
+
+### Helper Functions
+
+```php
+// Parse content into sections
+$parsed = igny8_parse_content_sections($content_html);
+// Returns: ['intro' => string, 'sections' => array]
+
+// Get in-article images
+$images = igny8_get_in_article_images($post_id);
+// Returns: array indexed by position
+
+// Get featured image prompt
+$prompt = igny8_get_featured_image_prompt($post_id);
+// Returns: string|null
+
+// Calculate word count
+$words = igny8_calculate_word_count($content);
+// Returns: int
+
+// Parse keywords
+$keywords = igny8_parse_keywords($keywords_string);
+// Returns: array
+```
+
+### Hooks & Filters
+
+```php
+// Modify template path
+add_filter('igny8_template_path', function($path) {
+ return $custom_path;
+});
+
+// Modify CSS enqueue
+add_filter('igny8_template_css_url', function($url) {
+ return $custom_url;
+});
+
+// Add custom body class
+add_filter('body_class', function($classes) {
+ if (is_igny8_content()) {
+ $classes[] = 'my-custom-class';
+ }
+ return $classes;
+});
+```
+
+## Troubleshooting
+
+### Template Not Loading
+
+1. **Check post meta**: Verify `_igny8_content_id` exists
+ ```php
+ $content_id = get_post_meta($post_id, '_igny8_content_id', true);
+ var_dump($content_id); // Should not be empty
+ ```
+
+2. **Check file permissions**: Ensure template files are readable
+
+3. **Clear cache**: Clear WordPress cache and browser cache
+
+### Styles Not Applied
+
+1. **Check enqueue**: Verify CSS is loading in page source
+2. **Check theme conflicts**: Look for `!important` overrides in theme
+3. **Check CSS specificity**: IGNY8 styles use minimal specificity
+
+### Images Not Displaying
+
+1. **Check meta field**: Verify `_igny8_imported_images` exists and is valid array
+2. **Check attachment IDs**: Ensure image attachment IDs are valid
+3. **Check image URLs**: Verify images are accessible
+
+### Sections Not Parsing
+
+1. **Check H2 tags**: Content must use `` for section headings
+2. **Check HTML structure**: Ensure valid HTML
+3. **Enable debug**: Add to wp-config.php:
+ ```php
+ define('WP_DEBUG', true);
+ define('WP_DEBUG_LOG', true);
+ ```
+
+## Performance
+
+- **Minimal overhead**: Template only loads for IGNY8 content
+- **CSS/JS loaded conditionally**: Assets only enqueued when needed
+- **Efficient parsing**: DOMDocument used for reliable HTML parsing
+- **No database queries**: All data from post meta (already cached)
+
+## Browser Support
+
+- Chrome/Edge (latest)
+- Firefox (latest)
+- Safari (latest)
+- Mobile browsers (iOS Safari, Chrome Mobile)
+
+## Accessibility
+
+- Semantic HTML5 elements
+- Proper heading hierarchy
+- Alt text for images
+- Keyboard navigation support
+- Print styles included
+
+## License
+
+GPL v2 or later - Same as WordPress
+
+## Support
+
+For issues or questions:
+1. Check troubleshooting section above
+2. Review implementation plan in `/docs/WP-CONTENT-TEMPLATE-IMPLEMENTATION-PLAN.md`
+3. Check IGNY8 logs in WordPress admin
+
+## Version History
+
+### 1.0.0 (December 2025)
+- Initial release
+- Custom template for IGNY8 content
+- Theme-compatible styling
+- Section-based layout
+- Image prompt display
+- SEO metadata display
diff --git a/igny8-wp-plugin/templates/assets/css/igny8-content-template.css b/igny8-wp-plugin/templates/assets/css/igny8-content-template.css
new file mode 100644
index 00000000..d4866834
--- /dev/null
+++ b/igny8-wp-plugin/templates/assets/css/igny8-content-template.css
@@ -0,0 +1,666 @@
+/**
+ * IGNY8 Content Template Styles
+ * Theme-compatible styles using CSS custom properties and inheritance
+ *
+ * Design Philosophy:
+ * - Inherit theme colors and fonts wherever possible
+ * - Use minimal color overrides with opacity for neutral tones
+ * - Responsive and accessible
+ * - Works with any WordPress theme
+ */
+
+/* === CSS Variables === */
+:root {
+ --igny8-max-width: 1200px;
+ --igny8-spacing: 2rem;
+ --igny8-border-radius: 24px;
+ --igny8-border-radius-md: 16px;
+ --igny8-border-radius-sm: 12px;
+ --igny8-border-radius-xs: 8px;
+}
+
+/* === Main Wrapper === */
+.igny8-content-wrapper {
+ padding: var(--igny8-spacing) 0;
+ font-family: inherit;
+ color: inherit;
+}
+
+.igny8-content-container {
+ max-width: var(--igny8-max-width);
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+/* === Header Styles === */
+.igny8-header {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ padding: var(--igny8-spacing);
+ margin-bottom: var(--igny8-spacing);
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-header-back {
+ margin-bottom: 1rem;
+}
+
+.igny8-back-button {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ color: inherit;
+ text-decoration: none;
+ font-size: 0.875rem;
+ opacity: 0.7;
+ transition: opacity 0.2s ease;
+}
+
+.igny8-back-button:hover {
+ opacity: 1;
+}
+
+.igny8-back-icon {
+ font-size: 1.25rem;
+ line-height: 1;
+}
+
+.igny8-header-title-row {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 1rem;
+ margin: 1.5rem 0;
+ flex-wrap: wrap;
+}
+
+.igny8-title {
+ font-size: clamp(1.75rem, 4vw, 2.5rem);
+ font-weight: 700;
+ line-height: 1.2;
+ margin: 0;
+ color: inherit;
+ flex: 1;
+}
+
+.igny8-status-badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.5rem 1rem;
+ border-radius: var(--igny8-border-radius-xs);
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ white-space: nowrap;
+}
+
+.igny8-status-draft {
+ background: rgba(251, 191, 36, 0.15);
+ color: rgba(180, 83, 9, 1);
+}
+
+.igny8-status-pending {
+ background: rgba(59, 130, 246, 0.15);
+ color: rgba(29, 78, 216, 1);
+}
+
+.igny8-status-publish {
+ background: rgba(16, 185, 129, 0.15);
+ color: rgba(5, 150, 105, 1);
+}
+
+.igny8-status-private {
+ background: rgba(156, 163, 175, 0.15);
+ color: rgba(75, 85, 99, 1);
+}
+
+.igny8-status-future {
+ background: rgba(139, 92, 246, 0.15);
+ color: rgba(109, 40, 217, 1);
+}
+
+/* === Metadata Row === */
+.igny8-metadata-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ padding-top: 1.5rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.igny8-meta-item {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ font-size: 0.875rem;
+}
+
+.igny8-meta-icon {
+ font-size: 1rem;
+ line-height: 1;
+}
+
+.igny8-meta-label {
+ font-weight: 600;
+ opacity: 0.7;
+}
+
+.igny8-meta-value {
+ color: inherit;
+}
+
+.igny8-meta-badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+}
+
+.igny8-category-badge,
+.igny8-tag-badge {
+ display: inline-block;
+ padding: 0.25rem 0.75rem;
+ border-radius: var(--igny8-border-radius-xs);
+ font-size: 0.75rem;
+ background: rgba(0, 0, 0, 0.05);
+ color: inherit;
+ line-height: 1.4;
+}
+
+/* === SEO Section === */
+.igny8-seo-section,
+.igny8-info-section {
+ margin-top: 1.5rem;
+ padding-top: 1.5rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.igny8-seo-header,
+.igny8-info-header {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ opacity: 0.6;
+ margin-bottom: 1rem;
+}
+
+.igny8-seo-item {
+ margin-bottom: 1rem;
+}
+
+.igny8-seo-item:last-child {
+ margin-bottom: 0;
+}
+
+.igny8-seo-label {
+ display: block;
+ font-size: 0.75rem;
+ font-weight: 600;
+ opacity: 0.7;
+ margin-bottom: 0.25rem;
+}
+
+.igny8-seo-value {
+ font-size: 0.875rem;
+ line-height: 1.6;
+ color: inherit;
+}
+
+.igny8-info-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 1rem;
+}
+
+.igny8-info-item {
+ display: flex;
+ gap: 0.5rem;
+ font-size: 0.875rem;
+}
+
+.igny8-info-item label {
+ font-weight: 600;
+ opacity: 0.7;
+}
+
+/* === Featured Image === */
+.igny8-featured-image-block {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ overflow: hidden;
+ margin-bottom: var(--igny8-spacing);
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-featured-header {
+ padding: 2rem 2rem 1rem;
+}
+
+.igny8-featured-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ opacity: 0.6;
+}
+
+.igny8-featured-image-wrapper {
+ position: relative;
+ width: 100%;
+}
+
+.igny8-featured-image {
+ width: 100%;
+ height: auto;
+ display: block;
+}
+
+.igny8-image-prompt {
+ padding: 1.5rem 2rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+ background: rgba(0, 0, 0, 0.02);
+}
+
+.igny8-prompt-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ opacity: 0.5;
+ margin: 0 0 0.75rem 0;
+}
+
+.igny8-prompt-text {
+ font-size: 0.875rem;
+ line-height: 1.6;
+ margin: 0;
+ white-space: pre-wrap;
+}
+
+/* === Content Body === */
+.igny8-content-body {
+ display: flex;
+ flex-direction: column;
+ gap: 3rem;
+}
+
+.igny8-intro-section,
+.igny8-content-section,
+.igny8-content-fallback {
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+ overflow: hidden;
+ box-shadow: 0 10px 25px -10px rgba(0, 0, 0, 0.1);
+}
+
+.igny8-intro-section,
+.igny8-content-fallback {
+ padding: 2rem;
+}
+
+.igny8-section-label {
+ font-size: 0.7rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ opacity: 0.6;
+ margin-bottom: 1.5rem;
+ display: block;
+}
+
+.igny8-section-container {
+ padding: 2.5rem;
+}
+
+.igny8-section-header {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ margin-bottom: 2rem;
+}
+
+.igny8-section-number {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 50%;
+ background: rgba(59, 130, 246, 0.1);
+ color: rgba(37, 99, 235, 1);
+ font-weight: 600;
+ font-size: 0.875rem;
+ flex-shrink: 0;
+}
+
+.igny8-section-heading-wrapper {
+ flex: 1;
+}
+
+.igny8-section-heading {
+ font-size: clamp(1.5rem, 3vw, 2rem);
+ font-weight: 700;
+ margin: 0.25rem 0 0 0;
+ color: inherit;
+ line-height: 1.2;
+}
+
+.igny8-section-content {
+ display: grid;
+ gap: 2.5rem;
+}
+
+.igny8-section-content.igny8-has-image {
+ grid-template-columns: 1fr;
+}
+
+@media (min-width: 1024px) {
+ .igny8-section-content.igny8-has-image {
+ grid-template-columns: 3fr 2fr;
+ }
+}
+
+/* === Prose Styles === */
+.igny8-prose {
+ font-size: 1.0625rem;
+ line-height: 1.85;
+ color: inherit;
+}
+
+.igny8-prose h2,
+.igny8-prose h3,
+.igny8-prose h4,
+.igny8-prose h5,
+.igny8-prose h6 {
+ margin-top: 2.5rem;
+ margin-bottom: 1.25rem;
+ font-weight: 600;
+ color: inherit;
+ line-height: 1.3;
+}
+
+.igny8-prose h2 { font-size: 1.875rem; }
+.igny8-prose h3 { font-size: 1.5rem; }
+.igny8-prose h4 { font-size: 1.25rem; }
+.igny8-prose h5 { font-size: 1.125rem; }
+.igny8-prose h6 { font-size: 1rem; }
+
+.igny8-prose p {
+ margin-bottom: 1.3rem;
+}
+
+.igny8-prose ul,
+.igny8-prose ol {
+ margin-bottom: 1.5rem;
+ padding-left: 1.75rem;
+}
+
+.igny8-prose li {
+ margin-bottom: 0.6rem;
+}
+
+.igny8-prose a {
+ color: inherit;
+ text-decoration: underline;
+ text-decoration-color: rgba(0, 0, 0, 0.3);
+ transition: text-decoration-color 0.2s ease;
+}
+
+.igny8-prose a:hover {
+ text-decoration-color: rgba(0, 0, 0, 0.6);
+}
+
+.igny8-prose img {
+ max-width: 100%;
+ height: auto;
+ border-radius: var(--igny8-border-radius-md);
+ margin: 1.75rem auto;
+ display: block;
+}
+
+.igny8-prose blockquote {
+ margin: 2rem 0;
+ padding: 1.25rem 1.5rem;
+ border-left: 4px solid rgba(59, 130, 246, 0.25);
+ background: rgba(59, 130, 246, 0.08);
+ border-radius: var(--igny8-border-radius-sm);
+ font-style: italic;
+}
+
+.igny8-prose table {
+ width: 100%;
+ border-collapse: collapse;
+ margin: 2rem 0;
+ border-radius: var(--igny8-border-radius-sm);
+ overflow: hidden;
+}
+
+.igny8-prose table th,
+.igny8-prose table td {
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ padding: 0.875rem 1rem;
+ text-align: left;
+}
+
+.igny8-prose table th {
+ background: rgba(0, 0, 0, 0.05);
+ font-weight: 600;
+}
+
+.igny8-prose code {
+ background: rgba(0, 0, 0, 0.06);
+ padding: 0.2rem 0.45rem;
+ border-radius: var(--igny8-border-radius-xs);
+ font-size: 0.9em;
+}
+
+.igny8-prose pre {
+ background: rgba(0, 0, 0, 0.08);
+ padding: 1.25rem;
+ border-radius: var(--igny8-border-radius-sm);
+ overflow-x: auto;
+ margin: 2rem 0;
+}
+
+.igny8-prose hr {
+ border: none;
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+ margin: 3rem 0;
+}
+
+/* === In-Article Images === */
+.igny8-image-figure {
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius-md);
+ overflow: hidden;
+ background: rgba(0, 0, 0, 0.02);
+ margin: 0;
+}
+
+.igny8-in-article-image {
+ width: 100%;
+ height: auto;
+ display: block;
+}
+
+.igny8-image-caption {
+ padding: 1.25rem;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.igny8-caption-label {
+ font-size: 0.7rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ opacity: 0.5;
+ margin: 0 0 0.75rem 0;
+}
+
+.igny8-caption-text {
+ font-size: 0.875rem;
+ line-height: 1.6;
+ margin: 0;
+ white-space: pre-wrap;
+}
+
+/* === Metadata Footer === */
+.igny8-metadata-footer {
+ margin-top: 3rem;
+ padding: 2rem;
+ background: rgba(0, 0, 0, 0.02);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius);
+}
+
+.igny8-metadata-summary {
+ cursor: pointer;
+ font-weight: 600;
+ font-size: 0.875rem;
+ user-select: none;
+ list-style: none;
+ transition: opacity 0.2s ease;
+}
+
+.igny8-metadata-summary::-webkit-details-marker,
+.igny8-metadata-summary::marker {
+ display: none;
+}
+
+.igny8-metadata-summary::before {
+ content: '▸ ';
+ display: inline-block;
+ transition: transform 0.2s ease;
+}
+
+.igny8-metadata-details[open] .igny8-metadata-summary::before {
+ transform: rotate(90deg);
+}
+
+.igny8-metadata-summary:hover {
+ opacity: 0.7;
+}
+
+.igny8-metadata-content {
+ margin-top: 1.5rem;
+ padding: 1.5rem;
+ background: var(--wp--preset--color--base, #ffffff);
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ border-radius: var(--igny8-border-radius-xs);
+}
+
+.igny8-metadata-table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+.igny8-metadata-table th,
+.igny8-metadata-table td {
+ padding: 0.75rem;
+ text-align: left;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+ font-size: 0.875rem;
+}
+
+.igny8-metadata-table th {
+ font-weight: 600;
+ width: 30%;
+ opacity: 0.8;
+}
+
+.igny8-metadata-table tbody tr:last-child th,
+.igny8-metadata-table tbody tr:last-child td {
+ border-bottom: none;
+}
+
+.igny8-keywords-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+}
+
+.igny8-keyword-tag {
+ display: inline-block;
+ padding: 0.25rem 0.75rem;
+ border-radius: var(--igny8-border-radius-xs);
+ background: rgba(0, 0, 0, 0.05);
+ font-size: 0.75rem;
+ line-height: 1.4;
+}
+
+/* === Responsive Styles === */
+@media (max-width: 768px) {
+ :root {
+ --igny8-spacing: 1.5rem;
+ --igny8-border-radius: 16px;
+ }
+
+ .igny8-header,
+ .igny8-section-container,
+ .igny8-intro-section,
+ .igny8-content-fallback {
+ padding: 1.5rem;
+ }
+
+ .igny8-title {
+ font-size: 1.75rem;
+ }
+
+ .igny8-section-heading {
+ font-size: 1.5rem;
+ }
+
+ .igny8-prose {
+ font-size: 1rem;
+ }
+
+ .igny8-prose h2 { font-size: 1.5rem; }
+ .igny8-prose h3 { font-size: 1.25rem; }
+ .igny8-prose h4 { font-size: 1.125rem; }
+
+ .igny8-metadata-row {
+ flex-direction: column;
+ gap: 1rem;
+ }
+
+ .igny8-info-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .igny8-metadata-table th {
+ width: 40%;
+ }
+}
+
+@media (max-width: 480px) {
+ .igny8-header-title-row {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .igny8-section-header {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0.75rem;
+ }
+}
+
+/* === Print Styles === */
+@media print {
+ .igny8-header-back,
+ .igny8-metadata-footer {
+ display: none;
+ }
+
+ .igny8-header,
+ .igny8-featured-image-block,
+ .igny8-intro-section,
+ .igny8-content-section {
+ box-shadow: none;
+ break-inside: avoid;
+ }
+}
diff --git a/igny8-wp-plugin/templates/assets/js/igny8-content-template.js b/igny8-wp-plugin/templates/assets/js/igny8-content-template.js
new file mode 100644
index 00000000..20e02c3a
--- /dev/null
+++ b/igny8-wp-plugin/templates/assets/js/igny8-content-template.js
@@ -0,0 +1,62 @@
+/**
+ * IGNY8 Content Template JavaScript
+ * Optional JavaScript enhancements
+ */
+
+(function($) {
+ 'use strict';
+
+ // Wait for DOM ready
+ $(document).ready(function() {
+
+ // Add smooth scroll to section anchors
+ $('.igny8-content-section').each(function() {
+ var sectionId = $(this).attr('id');
+ if (sectionId && window.location.hash === '#' + sectionId) {
+ $('html, body').animate({
+ scrollTop: $(this).offset().top - 100
+ }, 500);
+ }
+ });
+
+ // Optional: Add copy functionality to code blocks
+ $('.igny8-prose pre code').each(function() {
+ var $code = $(this);
+ var $pre = $code.parent();
+
+ // Add copy button
+ var $copyBtn = $('');
+ $pre.css('position', 'relative');
+ $copyBtn.css({
+ 'position': 'absolute',
+ 'top': '0.5rem',
+ 'right': '0.5rem',
+ 'padding': '0.25rem 0.75rem',
+ 'font-size': '0.75rem',
+ 'background': 'rgba(0, 0, 0, 0.1)',
+ 'border': 'none',
+ 'border-radius': '4px',
+ 'cursor': 'pointer'
+ });
+
+ $copyBtn.on('click', function(e) {
+ e.preventDefault();
+ var code = $code.text();
+
+ // Copy to clipboard
+ if (navigator.clipboard) {
+ navigator.clipboard.writeText(code).then(function() {
+ $copyBtn.text('Copied!');
+ setTimeout(function() {
+ $copyBtn.text('Copy');
+ }, 2000);
+ });
+ }
+ });
+
+ $pre.append($copyBtn);
+ });
+
+ });
+
+})(jQuery);
diff --git a/igny8-wp-plugin/templates/parts/igny8-content-sections.php b/igny8-wp-plugin/templates/parts/igny8-content-sections.php
new file mode 100644
index 00000000..5f2d1619
--- /dev/null
+++ b/igny8-wp-plugin/templates/parts/igny8-content-sections.php
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+ Opening Narrative
+
+
+
+
+
+
+
+
+ $section): ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Visual Direction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/igny8-wp-plugin/templates/parts/igny8-featured-image.php b/igny8-wp-plugin/templates/parts/igny8-featured-image.php
new file mode 100644
index 00000000..f289956b
--- /dev/null
+++ b/igny8-wp-plugin/templates/parts/igny8-featured-image.php
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
; ?>)
+
+
+
+
+
+
diff --git a/igny8-wp-plugin/templates/parts/igny8-header.php b/igny8-wp-plugin/templates/parts/igny8-header.php
new file mode 100644
index 00000000..0e038190
--- /dev/null
+++ b/igny8-wp-plugin/templates/parts/igny8-header.php
@@ -0,0 +1,151 @@
+
+
+
diff --git a/igny8-wp-plugin/templates/parts/igny8-metadata.php b/igny8-wp-plugin/templates/parts/igny8-metadata.php
new file mode 100644
index 00000000..0c2ffdc7
--- /dev/null
+++ b/igny8-wp-plugin/templates/parts/igny8-metadata.php
@@ -0,0 +1,90 @@
+
+
+
diff --git a/igny8-wp-plugin/templates/single-igny8-content.php b/igny8-wp-plugin/templates/single-igny8-content.php
new file mode 100644
index 00000000..a91e1e54
--- /dev/null
+++ b/igny8-wp-plugin/templates/single-igny8-content.php
@@ -0,0 +1,79 @@
+
+
+
+
+