diff --git a/Claude.md b/Claude.md
index 2998213..490304f 100644
--- a/Claude.md
+++ b/Claude.md
@@ -2,20 +2,34 @@
## Project Status (January 2026)
-**Current Phase**: All 5 core features implemented and deployed. Ready for ANSI Art redesign.
+**Current Phase**: All core features implemented. ANSI Art terminal redesign complete. System is production-ready.
-**Recent Completion**:
+**Completed Features**:
- ✅ Activity Timeline (Feature 1)
- ✅ Ticket Assignment (Feature 2)
- ✅ Status Transitions with Workflows (Feature 3)
- ✅ Ticket Templates (Feature 4)
- ✅ Bulk Actions - Admin Only (Feature 5)
+- ✅ ANSI Art Terminal Redesign
+- ✅ File Attachments
+- ✅ Ticket Dependencies
+- ✅ @Mentions in Comments
+- ✅ Recurring Tickets
+- ✅ Custom Fields
+- ✅ Advanced Search with Saved Filters
+- ✅ Export to CSV/JSON
+- ✅ Admin Pages (Templates, Workflow, Recurring, Custom Fields, User Activity, Audit Log)
-**Next Priority**: 🎨 ANSI Art Redesign (major visual overhaul)
+**Recent Updates** (January 2026):
+- Added admin dropdown navigation in dashboard header
+- Fixed template/recurring ticket modals (larger size, type/assignee fields)
+- Made dashboard stat cards clickable for quick filtering
+- Fixed table overflow on dashboard
+- Improved error handling for ticket dependencies API
## Project Overview
-Tinker Tickets is a feature-rich, self-hosted ticket management system built for managing data center infrastructure issues. It features SSO integration with Authelia/LLDAP, workflow management, Discord notifications, and a comprehensive web interface.
+Tinker Tickets is a feature-rich, self-hosted ticket management system built for managing data center infrastructure issues. It features SSO integration with Authelia/LLDAP, workflow management, Discord notifications, and a retro terminal-style web interface.
**Tech Stack:**
- Backend: PHP 7.4+ with MySQLi
@@ -40,57 +54,100 @@ Controllers → Models → Database
Views
```
-### Project Structure (Updated)
+### Project Structure
```
/tinker_tickets/
├── api/ # API endpoints
│ ├── add_comment.php # POST: Add comment
-│ ├── assign_ticket.php # POST: Assign ticket to user (NEW)
-│ ├── bulk_operation.php # POST: Bulk operations - admin only (NEW)
-│ ├── get_template.php # GET: Fetch ticket template (NEW)
-│ ├── get_users.php # GET: Get user list (NEW)
-│ └── update_ticket.php # POST: Update ticket (workflow validation)
+│ ├── assign_ticket.php # POST: Assign ticket to user
+│ ├── bulk_operation.php # POST: Bulk operations - admin only
+│ ├── check_duplicates.php # GET: Check for duplicate tickets
+│ ├── delete_attachment.php # POST/DELETE: Delete attachment
+│ ├── export_tickets.php # GET: Export tickets to CSV/JSON
+│ ├── get_template.php # GET: Fetch ticket template
+│ ├── get_users.php # GET: Get user list
+│ ├── manage_recurring.php # CRUD: Recurring tickets (admin)
+│ ├── manage_templates.php # CRUD: Templates (admin)
+│ ├── manage_workflows.php # CRUD: Workflow rules (admin)
+│ ├── ticket_dependencies.php # GET/POST/DELETE: Ticket dependencies
+│ ├── update_ticket.php # POST: Update ticket (workflow validation)
+│ └── upload_attachment.php # GET/POST: List or upload attachments
├── assets/
│ ├── css/
-│ │ ├── dashboard.css # Shared + dashboard + bulk actions
-│ │ └── ticket.css # Ticket + timeline + dark mode fixes
+│ │ ├── dashboard.css # Dashboard + terminal styling
+│ │ └── ticket.css # Ticket view styling
│ ├── js/
-│ │ ├── dashboard.js # Dashboard + hamburger + bulk actions + templates
-│ │ └── ticket.js # Ticket + comments + status updates + assignment
+│ │ ├── advanced-search.js # Advanced search modal
+│ │ ├── ascii-banner.js # ASCII art banner
+│ │ ├── dashboard.js # Dashboard + bulk actions + templates
+│ │ ├── keyboard-shortcuts.js # Keyboard shortcuts
+│ │ ├── markdown.js # Markdown rendering
+│ │ ├── settings.js # User preferences
+│ │ ├── ticket.js # Ticket + comments + assignment
+│ │ └── toast.js # Toast notifications
│ └── images/
│ └── favicon.png
├── config/
│ └── config.php # Config + .env loading
-├── controllers/ # MVC Controllers
-│ ├── DashboardController.php # Dashboard with assigned_to column
+├── controllers/
+│ ├── DashboardController.php # Dashboard with stats + filters
│ └── TicketController.php # Ticket CRUD + timeline + templates
-├── models/ # Data models
+├── cron/
+│ └── create_recurring_tickets.php # Process recurring ticket schedules
+├── helpers/
+│ └── ResponseHelper.php # Standardized JSON responses
+├── middleware/
+│ ├── AuthMiddleware.php # Authelia SSO integration
+│ ├── CsrfMiddleware.php # CSRF protection
+│ ├── RateLimitMiddleware.php # API rate limiting
+│ └── SecurityHeadersMiddleware.php # Security headers
+├── models/
│ ├── AuditLogModel.php # Audit logging + timeline
-│ ├── BulkOperationsModel.php # Bulk operations tracking (NEW)
+│ ├── BulkOperationsModel.php # Bulk operations tracking
│ ├── CommentModel.php # Comment data access
-│ ├── TemplateModel.php # Ticket templates (NEW)
+│ ├── CustomFieldModel.php # Custom field definitions/values
+│ ├── DependencyModel.php # Ticket dependencies
+│ ├── RecurringTicketModel.php # Recurring ticket schedules
+│ ├── StatsModel.php # Dashboard statistics
+│ ├── TemplateModel.php # Ticket templates
│ ├── TicketModel.php # Ticket CRUD + assignment
-│ ├── UserModel.php # User management (NEW)
-│ └── WorkflowModel.php # Status transition workflows (NEW)
-├── views/ # PHP templates
+│ ├── UserModel.php # User management
+│ ├── UserPreferencesModel.php # User preferences
+│ └── WorkflowModel.php # Status transition workflows
+├── scripts/
+│ └── cleanup_orphan_uploads.php # Clean orphaned uploads
+├── uploads/ # File attachment storage
+├── views/
+│ ├── admin/
+│ │ ├── AuditLogView.php # Audit log browser
+│ │ ├── CustomFieldsView.php # Custom field management
+│ │ ├── RecurringTicketsView.php # Recurring ticket management
+│ │ ├── TemplatesView.php # Template management
+│ │ ├── UserActivityView.php # User activity report
+│ │ └── WorkflowDesignerView.php # Workflow transition designer
│ ├── CreateTicketView.php # Ticket creation with templates
-│ ├── DashboardView.php # Dashboard with bulk actions + assigned column
+│ ├── DashboardView.php # Dashboard with stats + bulk actions
│ └── TicketView.php # Ticket view with timeline + assignment
-├── migrations/ # Database migrations
-│ ├── 001_initial_schema.sql
-│ ├── 007_add_ticket_assignment.sql # Ticket assignment
-│ ├── 008_add_status_workflows.sql # Workflow rules
-│ ├── 009_add_ticket_templates.sql # Ticket templates
-│ ├── 010_add_bulk_operations.sql # Bulk operations
-│ └── 011_remove_view_tracking.sql # Remove view audit logs
-├── .env # Environment variables (GITIGNORED)
-├── Claude.md # This file
-├── README.md # User documentation
-├── index.php # Dashboard entry point
-└── ticket.php # Ticket view/create router
+├── .env # Environment variables (GITIGNORED)
+├── Claude.md # This file
+├── README.md # User documentation
+└── index.php # Main router
```
-## Database Schema (Updated)
+## Admin Pages
+
+All admin pages are accessible via the **Admin dropdown** in the dashboard header (for admin users only).
+
+| Route | Description |
+|-------|-------------|
+| `/admin/templates` | Create and edit ticket templates |
+| `/admin/workflow` | Visual workflow transition designer |
+| `/admin/recurring-tickets` | Manage recurring ticket schedules |
+| `/admin/custom-fields` | Define custom fields per category |
+| `/admin/user-activity` | View per-user activity statistics |
+| `/admin/audit-log` | Browse all audit log entries |
+
+## Database Schema
**Database**: `ticketing_system` at 10.10.10.50
**User**: `tinkertickets`
@@ -98,443 +155,63 @@ Controllers → Models → Database
### Core Tables
-#### `tickets` Table (Updated)
-```sql
-CREATE TABLE tickets (
- ticket_id INT AUTO_INCREMENT PRIMARY KEY,
- title VARCHAR(255) NOT NULL,
- description TEXT,
- status VARCHAR(50) DEFAULT 'Open',
- priority INT DEFAULT 4,
- category VARCHAR(50) DEFAULT 'General',
- type VARCHAR(50) DEFAULT 'Issue',
- created_by INT, -- User who created
- updated_by INT, -- User who last updated
- assigned_to INT, -- User assigned to (NEW)
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (created_by) REFERENCES users(user_id),
- FOREIGN KEY (updated_by) REFERENCES users(user_id),
- FOREIGN KEY (assigned_to) REFERENCES users(user_id) ON DELETE SET NULL,
- INDEX idx_status (status),
- INDEX idx_assigned_to (assigned_to)
-) ENGINE=InnoDB;
-```
+- `tickets` - Core ticket data with assignment
+- `ticket_comments` - Markdown-supported comments
+- `ticket_attachments` - File attachment metadata
+- `ticket_dependencies` - Ticket relationships (blocks/blocked_by/relates_to/duplicates)
+- `users` - User accounts synced from LLDAP
+- `user_preferences` - User settings and preferences
+- `audit_log` - Complete audit trail
+- `status_transitions` - Workflow configuration
+- `ticket_templates` - Reusable ticket templates
+- `recurring_tickets` - Scheduled ticket definitions
+- `custom_field_definitions` - Custom field schemas
+- `custom_field_values` - Custom field data per ticket
+- `saved_filters` - User-saved dashboard filters
+- `bulk_operations` - Bulk operation tracking
-#### `users` Table (SSO Integration)
-```sql
-CREATE TABLE users (
- user_id INT AUTO_INCREMENT PRIMARY KEY,
- username VARCHAR(100) UNIQUE NOT NULL,
- display_name VARCHAR(255),
- email VARCHAR(255),
- is_admin BOOLEAN DEFAULT FALSE,
- last_login TIMESTAMP NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-) ENGINE=InnoDB;
-```
-
-#### `comments` Table
-```sql
-CREATE TABLE comments (
- comment_id INT AUTO_INCREMENT PRIMARY KEY,
- ticket_id INT NOT NULL,
- user_id INT,
- comment_text TEXT NOT NULL,
- markdown_enabled BOOLEAN DEFAULT FALSE,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (ticket_id) REFERENCES tickets(ticket_id) ON DELETE CASCADE,
- FOREIGN KEY (user_id) REFERENCES users(user_id),
- INDEX idx_ticket_id (ticket_id)
-) ENGINE=InnoDB;
-```
-
-#### `audit_log` Table (Activity Timeline)
-```sql
-CREATE TABLE audit_log (
- log_id INT AUTO_INCREMENT PRIMARY KEY,
- user_id INT,
- action_type VARCHAR(50) NOT NULL, -- 'create', 'update', 'comment', 'assign', etc.
- entity_type VARCHAR(50) NOT NULL, -- 'ticket', 'comment'
- entity_id INT NOT NULL, -- ticket_id or comment_id
- details JSON, -- JSON details of what changed
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (user_id) REFERENCES users(user_id),
- INDEX idx_entity (entity_type, entity_id),
- INDEX idx_user (user_id),
- INDEX idx_action (action_type)
-) ENGINE=InnoDB;
-```
-
-#### `status_transitions` Table (Workflow Rules)
-```sql
-CREATE TABLE status_transitions (
- transition_id INT AUTO_INCREMENT PRIMARY KEY,
- from_status VARCHAR(50) NOT NULL,
- to_status VARCHAR(50) NOT NULL,
- requires_comment BOOLEAN DEFAULT FALSE, -- Transition requires comment
- requires_admin BOOLEAN DEFAULT FALSE, -- Transition requires admin
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- UNIQUE KEY unique_transition (from_status, to_status),
- INDEX idx_from_status (from_status)
-) ENGINE=InnoDB;
-```
-
-Default transitions:
-```sql
--- Open → Pending → In Progress → Closed
--- In Progress → Closed, Pending
--- Closed → X
-```
-
-#### `ticket_templates` Table
-```sql
-CREATE TABLE ticket_templates (
- template_id INT AUTO_INCREMENT PRIMARY KEY,
- template_name VARCHAR(100) NOT NULL,
- title_template VARCHAR(255) NOT NULL,
- description_template TEXT NOT NULL,
- category VARCHAR(50),
- type VARCHAR(50),
- default_priority INT DEFAULT 4,
- created_by INT,
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (created_by) REFERENCES users(user_id),
- INDEX idx_template_name (template_name)
-) ENGINE=InnoDB;
-```
-
-Default templates: Hardware Failure, Software Installation, Network Issue, Maintenance Request
-
-#### `bulk_operations` Table
-```sql
-CREATE TABLE bulk_operations (
- operation_id INT AUTO_INCREMENT PRIMARY KEY,
- operation_type VARCHAR(50) NOT NULL, -- 'bulk_close', 'bulk_assign', 'bulk_priority'
- ticket_ids TEXT NOT NULL, -- Comma-separated ticket IDs
- performed_by INT NOT NULL,
- parameters JSON, -- Operation parameters
- status VARCHAR(20) DEFAULT 'pending',
- total_tickets INT,
- processed_tickets INT DEFAULT 0,
- failed_tickets INT DEFAULT 0,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- completed_at TIMESTAMP NULL,
- FOREIGN KEY (performed_by) REFERENCES users(user_id),
- INDEX idx_performed_by (performed_by),
- INDEX idx_created_at (created_at)
-) ENGINE=InnoDB;
-```
-
-## API Endpoints (Updated)
+## API Endpoints
### Authentication
All API endpoints check: `$_SESSION['user']['user_id']` for authentication.
Admin-only endpoints check: `$_SESSION['user']['is_admin']`.
-### POST `/api/update_ticket.php`
-Updates ticket with workflow validation.
+### Core Endpoints
-**Request:**
-```json
-{
- "ticket_id": 123,
- "status": "In Progress", // Validated against workflow rules
- "priority": 2,
- "title": "Updated title",
- "description": "...",
- "category": "Software",
- "type": "Task"
-}
-```
+| Endpoint | Method | Description |
+|----------|--------|-------------|
+| `/api/update_ticket.php` | POST | Update ticket with workflow validation |
+| `/api/assign_ticket.php` | POST | Assign ticket to user |
+| `/api/add_comment.php` | POST | Add comment to ticket |
+| `/api/get_template.php` | GET | Fetch ticket template |
+| `/api/get_users.php` | GET | Get user list for assignments |
+| `/api/bulk_operation.php` | POST | Perform bulk operations (admin) |
+| `/api/ticket_dependencies.php` | GET/POST/DELETE | Manage ticket dependencies |
+| `/api/upload_attachment.php` | GET/POST | List or upload attachments |
+| `/api/delete_attachment.php` | POST/DELETE | Delete attachment |
+| `/api/export_tickets.php` | GET | Export tickets to CSV/JSON |
+| `/api/check_duplicates.php` | GET | Check for duplicate tickets |
-**Response:**
-```json
-{
- "success": true,
- "status": "In Progress",
- "priority": 2,
- "message": "Ticket updated successfully"
-}
-```
+## Dashboard Features
-**Features:**
-- Workflow validation via WorkflowModel
-- Partial updates (only send changed fields)
-- User tracking (updated_by)
-- Discord webhook notifications
-- Audit logging
+- **Stats Widgets**: Clickable cards for quick filtering (Open, Critical, Unassigned, Created Today, Closed Today)
+- **Admin Dropdown**: Quick access to all admin pages
+- **Sortable Columns**: Click headers to sort
+- **Advanced Search**: Date ranges, priority ranges, user filters
+- **Saved Filters**: Save and load custom filter combinations
+- **Bulk Actions** (admin): Select multiple tickets for bulk close/assign/priority/status
+- **Export**: Export selected tickets to CSV or JSON
+- **Left Sidebar**: Status, Category, Type filters
-### POST `/api/assign_ticket.php` (NEW)
-Assigns ticket to a user.
+## Terminal UI Design
-**Request:**
-```json
-{
- "ticket_id": 123,
- "assigned_to": 5 // user_id, or null to unassign
-}
-```
-
-**Response:**
-```json
-{
- "success": true
-}
-```
-
-### GET `/api/get_users.php` (NEW)
-Returns list of all users for assignment dropdowns.
-
-**Response:**
-```json
-{
- "success": true,
- "users": [
- {
- "user_id": 1,
- "username": "jared",
- "display_name": "Jared Vititoe",
- "is_admin": true
- }
- ]
-}
-```
-
-### GET `/api/get_template.php?template_id=1` (NEW)
-Fetches a ticket template.
-
-**Response:**
-```json
-{
- "success": true,
- "template": {
- "template_id": 1,
- "template_name": "Hardware Failure",
- "title_template": "Hardware Failure: [Device Name]",
- "description_template": "Device: \nIssue: \n...",
- "category": "Hardware",
- "type": "Problem",
- "default_priority": 2
- }
-}
-```
-
-### POST `/api/bulk_operation.php` (NEW - ADMIN ONLY)
-Performs bulk operations on tickets.
-
-**Request:**
-```json
-{
- "operation_type": "bulk_close", // or 'bulk_assign', 'bulk_priority'
- "ticket_ids": [123, 456, 789],
- "parameters": { // For bulk_assign or bulk_priority
- "assigned_to": 5, // For bulk_assign
- "priority": 2 // For bulk_priority
- }
-}
-```
-
-**Response:**
-```json
-{
- "success": true,
- "operation_id": 42,
- "processed": 3,
- "failed": 0,
- "message": "Bulk operation completed: 3 succeeded, 0 failed"
-}
-```
-
-### POST `/api/add_comment.php`
-Adds comment to ticket.
-
-**Request:**
-```json
-{
- "ticket_id": 123,
- "comment_text": "Comment content",
- "markdown_enabled": true
-}
-```
-
-**Response:**
-```json
-{
- "success": true,
- "user_name": "Jared Vititoe",
- "created_at": "Jan 01, 2026 12:00"
-}
-```
-
-## Key Features Implementation
-
-### Feature 1: Activity Timeline
-**Location**: Ticket view → Activity tab
-
-**Implementation**:
-- `AuditLogModel->getTicketTimeline()` - Fetches all events for a ticket
-- Shows: creates, updates, comments, assignments, status changes
-- Displays: user, action, timestamp, details
-- CSS: timeline-content boxes with icons
-- Dark mode: Fully supported
-
-**Code**: `views/TicketView.php:258-282`, `models/AuditLogModel.php:getTicketTimeline()`
-
-### Feature 2: Ticket Assignment
-**Location**: Ticket view → "Assigned to" dropdown, Dashboard → "Assigned To" column
-
-**Implementation**:
-- Database: `tickets.assigned_to` column
-- Models: `TicketModel->assignTicket()`, `TicketModel->unassignTicket()`
-- API: `api/assign_ticket.php`
-- Dashboard: Shows assigned user in table
-- Auto-saves on change
-- Audit logged
-
-**Code**: `views/TicketView.php:170-181`, `assets/js/ticket.js:handleAssignmentChange()`
-
-### Feature 3: Status Transitions with Workflows
-**Location**: Ticket view → Status dropdown (header)
-
-**Implementation**:
-- Database: `status_transitions` table defines allowed transitions
-- Models: `WorkflowModel->isTransitionAllowed()`, `WorkflowModel->getAllowedTransitions()`
-- Dropdown shows only valid transitions for current status
-- Server-side validation prevents invalid changes
-- Can require comments or admin privileges
-- Removed from hamburger menu (was duplicate)
-
-**Code**: `models/WorkflowModel.php`, `api/update_ticket.php:130-144`, `views/TicketView.php:185-198`
-
-### Feature 4: Ticket Templates
-**Location**: Create ticket page → Template selector
-
-**Implementation**:
-- Database: `ticket_templates` table
-- Models: `TemplateModel->getAllTemplates()`, `TemplateModel->getTemplateById()`
-- API: `api/get_template.php`
-- JavaScript: `loadTemplate()` in dashboard.js
-- Auto-fills: title, description, category, type, priority
-- 4 default templates included
-
-**Code**: `views/CreateTicketView.php:27-39`, `assets/js/dashboard.js:loadTemplate()`
-
-### Feature 5: Bulk Actions (Admin Only)
-**Location**: Dashboard → Checkboxes + Toolbar (admins only)
-
-**Implementation**:
-- Database: `bulk_operations` table tracks operations
-- Models: `BulkOperationsModel->processBulkOperation()`
-- API: `api/bulk_operation.php`
-- UI: Toolbar appears when tickets selected
-- Operations: Bulk close, bulk assign, bulk priority
-- All operations audit logged
-- Server-side admin validation
-
-**Code**: `views/DashboardView.php:176-188`, `assets/js/dashboard.js:bulkClose()`, `models/BulkOperationsModel.php`
-
-## Authentication & SSO Integration
-
-### Authelia Integration
-User information passed via HTTP headers:
-- `Remote-User`: Username
-- `Remote-Name`: Display name
-- `Remote-Email`: Email
-- `Remote-Groups`: Comma-separated groups
-
-### Session Management
-```php
-$_SESSION['user'] = [
- 'user_id' => 123,
- 'username' => 'jared',
- 'display_name' => 'Jared Vititoe',
- 'email' => 'jared@lotusguild.org',
- 'is_admin' => true // true if 'admins' in Remote-Groups
-];
-```
-
-### Admin Privileges
-- Bulk operations (close, assign, priority)
-- Future: Admin-only transitions
-
-## Frontend Components (Updated)
-
-### Dashboard (`DashboardView.php` + `dashboard.js`)
-
-**Features**:
-- Sortable columns including new "Assigned To" column
-- Search (title, description, ticket_id, category, type)
-- Status filtering (default: Open + In Progress)
-- Pagination (configurable)
-- Dark mode toggle
-- **Bulk Actions Toolbar** (admin only):
- - Checkboxes on each ticket
- - "Select All" checkbox
- - Bulk close, assign, priority buttons
- - Shows count of selected tickets
-
-**Hamburger Menu**:
-- Category/Type filtering
-- Apply/Clear filters
-- No status field (removed)
-
-### Ticket View (`TicketView.php` + `ticket.js`)
-
-**Features**:
-- **Tabbed Interface**: Description, Comments, Activity
-- **Activity Timeline**: Complete audit trail with icons
-- **Assignment Dropdown**: Assign to users
-- **Status Dropdown**: Workflow-validated status changes (header)
-- **Hamburger Menu**: Priority, Category, Type editing
-- **Edit Button**: Title and description editing
-- **Markdown Comments**: With live preview
-- **Dark Mode**: Comprehensive support
-
-**Visual Indicators**:
-- Priority colors (P1=Red, P2=Orange, P3=Blue, P4=Green, P5=Gray)
-- Status badges (Open=Green, In Progress=Yellow, Closed=Red)
-- Priority border colors on ticket container
-
-### Create Ticket (`CreateTicketView.php`)
-
-**Features**:
-- **Template Selector**: Quick-fill from templates
-- Standard fields: title, description, status, priority, category, type
-- Form validation
-- Discord webhook on creation
-
-## Dark Mode (Fixed)
-
-### Comprehensive Dark Mode CSS
-**Files**: `assets/css/ticket.css`, `assets/css/dashboard.css`
-
-**Colors**:
-```css
-body.dark-mode {
- --bg-primary: #1a202c; /* Main background */
- --bg-secondary: #2d3748; /* Cards, inputs */
- --bg-tertiary: #4a5568; /* Hover states */
- --text-primary: #e2e8f0; /* Main text */
- --text-secondary: #cbd5e0; /* Secondary text */
- --text-muted: #a0aec0; /* Muted text */
- --border-color: #4a5568; /* Borders */
-}
-```
-
-**Fixed Elements**:
-- Timeline boxes (background + text)
-- Bulk actions toolbar
-- Tables and table rows
-- Input fields and textareas
-- Dropdowns and selects
-- Comment boxes
-- Modal dialogs
-- All text elements
-
-**Important**: Used `!important` flags to override any conflicting styles.
+The application uses a retro terminal aesthetic with:
+- **Box-drawing characters**: ╔═╗║╚═╝┌─┐│└─┘
+- **Monospace fonts**: Courier New, Consolas, Monaco
+- **Terminal colors**: Green (#00ff41), Amber (#ffb000), Cyan (#00ffff)
+- **CRT effects**: Scanlines, subtle flicker
+- **Glow effects**: Text shadows for terminal phosphor look
+- **ASCII art**: Boot sequence, empty states, headers
## Configuration
@@ -549,27 +226,6 @@ DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
**CRITICAL**: `.env` is gitignored! Never commit this file.
-### Apache Configuration
-**Virtual Host**: Apache serving from `/root/code/tinker_tickets`
-
-```apache
-