- }
-}
-```
-
-Add it to the router in `client/src/app.rs`:
-
-```rust
-
-```
-
-### 3. Add Authentication (Optional)
-
-If you enabled the `auth` feature, you can add login/register forms:
-
-```rust
-use leptos::*;
-use shared::auth::*;
-
-#[component]
-pub fn LoginPage() -> impl IntoView {
- let (email, set_email) = create_signal(String::new());
- let (password, set_password) = create_signal(String::new());
-
- let login_action = create_action(|credentials: &LoginRequest| {
- let credentials = credentials.clone();
- async move {
- // Login logic here
- }
- });
-
- view! {
-
-
-
"Login"
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-}
-```
-
-## Database Setup (Optional)
-
-If you're using features that require a database (`auth` or `content-db`):
-
-### SQLite (Recommended for development)
-```bash
-# Already configured with DATABASE_URL=sqlite:database.db
-# The database file will be created automatically
-```
-
-### PostgreSQL (Recommended for production)
-```bash
-# Start PostgreSQL with Docker
-docker run -d \
- --name postgres \
- -e POSTGRES_PASSWORD=password \
- -e POSTGRES_DB=rustelo \
- -p 5432:5432 \
- postgres:15
-
-# Update your .env file
-DATABASE_URL=postgresql://postgres:password@localhost:5432/rustelo
-```
-
-### Run Migrations
-```bash
-# Install sqlx-cli if not already installed
-cargo install sqlx-cli
-
-# Run migrations
-sqlx migrate run
-```
-
-## Development Tips
-
-### Hot Reloading
-For the best development experience, use `cargo-leptos`:
-
-```bash
-# Install cargo-leptos
-cargo install cargo-leptos
-
-# Start with hot reloading
-cargo leptos serve
-```
-
-### Database Inspection
-```bash
-# SQLite
-sqlite3 database.db ".tables"
-
-# PostgreSQL
-psql postgresql://postgres:password@localhost:5432/rustelo -c "\dt"
-```
-
-### Logs and Debugging
-```bash
-# Verbose logging
-LOG_LEVEL=debug cargo run
-
-# Trace level (very verbose)
-LOG_LEVEL=trace cargo run
-```
-
-## Next Steps
-
-Now that you have[Rustelo](/) running, here are some suggested next steps:
-
-1. **[Learn about Features](../features/overview.md)** - Understand what each feature provides
-2. **[Project Structure](../development/structure.md)** - Get familiar with the codebase
-3. **[Configuration](../configuration/environment.md)** - Configure your application
-4. **[Database Setup](../database/overview.md)** - Set up your database properly
-5. **[Deployment](../deployment/overview.md)** - Deploy your application
-
-## Troubleshooting
-
-### Common Issues
-
-**Port already in use:**
-```bash
-# Change the port in .env
-SERVER_PORT=3031
-```
-
-**Database connection error:**
-```bash
-# Check if PostgreSQL is running
-docker ps
-
-# Or use SQLite instead
-DATABASE_URL=sqlite//:database.db
-```
-
-**Build errors:**
-```bash
-# Clean build
-cargo clean && cargo build
-
-# Update dependencies
-cargo update
-```
-
-**Permission denied on scripts:**
-```bash
-chmod +x scripts/configure-features.sh
-```
-
-### Getting Help
-
-- **Documentation**: Check the relevant sections in this book
-- **Examples**: Look at the `examples/` directory
-- **Issues**: Search or create an issue on GitHub
-- **Community**: Join our discussions
-
-## What's Next?
-
-Congratulations! You now have a working[Rustelo](/) application. Here are some recommended next steps:
-
-- **Customize the UI**: Modify the frontend components to match your design
-- **Add Business Logic**: Implement your application's core functionality
-- **Set Up Database**: Configure your preferred database system
-- **Add Authentication**: Enable user management if needed
-- **Deploy**: Get your application ready for production
-
-Ready to dive deeper? Continue with the [Installation](./installation.md) guide for more detailed setup instructions.
diff --git a/book/getting-started/what-is-rustelo.md b/book/getting-started/what-is-rustelo.md
deleted file mode 100644
index 98b2a04..0000000
--- a/book/getting-started/what-is-rustelo.md
+++ /dev/null
@@ -1,299 +0,0 @@
-# What is Rustelo?
-
-
-
-
-
-Rustelo is a modern, high-performance web application framework built with Rust that combines the best of both worlds: the safety and speed of systems programming with the flexibility and ease of web development.
-
-## The Rustelo Philosophy
-
-### Built for the Modern Web
-Rustelo was designed from the ground up to address the challenges of modern web development:
-
-- **Performance First** - Every component is optimized for speed and efficiency
-- **Security by Default** - Built-in protections against common web vulnerabilities
-- **Developer Experience** - Tools and patterns that make development enjoyable
-- **Production Ready** - Tested and proven in real-world applications
-
-### Why Rust for Web Development?
-
-Traditional web frameworks often force you to choose between performance and safety.[Rustelo](/) breaks this false dichotomy by leveraging Rust's unique advantages:
-
-#### Memory Safety Without Garbage Collection
-```rust
-// No null pointer exceptions
-// No buffer overflows
-// No memory leaks
-// No data races
-```
-
-#### Zero-Cost Abstractions
-```rust
-// High-level code that compiles to fast machine code
-async fn handle_request(req: Request) -> Response {
- let user = authenticate(&req).await?;
- let content = fetch_content(&user).await?;
- render_response(content)
-}
-```
-
-#### Fearless Concurrency
-```rust
-// Handle thousands of concurrent users safely
-#[tokio::main]
-async fn main() {
- let app = create_app().await;
- let listener = tokio::net::TcpListener::bind("0.0.0.0:3030").await?;
- axum::serve(listener, app).await?;
-}
-```
-
-## Core Architecture
-
-### Frontend: Reactive and Fast
-Rustelo uses **Leptos** for the frontend, providing:
-- **Server-Side Rendering (SSR)** - Fast initial page loads
-- **Client-Side Hydration** - Interactive user experience
-- **Reactive Components** - Efficient updates and state management
-- **WebAssembly** - Near-native performance in the browser
-
-### Backend: Robust and Scalable
-The backend is powered by **Axum**, offering:
-- **Async-First Design** - Handle many concurrent requests
-- **Type-Safe Routing** - Catch errors at compile time
-- **Middleware System** - Composable request/response processing
-- **Tower Integration** - Rich ecosystem of networking components
-
-### Database: Flexible and Reliable
-Database integration through **SQLx** provides:
-- **Compile-Time SQL Checking** - Catch database errors before deployment
-- **Multiple Database Support** - PostgreSQL, SQLite, and more
-- **Connection Pooling** - Efficient resource management
-- **Migration System** - Version-controlled schema changes
-
-## Feature Ecosystem
-
-### Modular by Design
-Rustelo uses Rust's feature flags to create a modular system:
-
-```toml
-[features]
-default = ["auth", "content-db", "email"]
-
-# Core features
-auth = ["jsonwebtoken", "argon2", "oauth2"]
-content-db = ["pulldown-cmark", "syntect", "sqlx"]
-email = ["lettre", "handlebars"]
-tls = ["rustls", "axum-server/tls"]
-```
-
-This means you only compile and include what you actually use.
-
-### Available Modules
-
-#### 🔐 Authentication Module
-- JWT token-based authentication
-- OAuth2 integration (Google, GitHub, etc.)
-- Two-factor authentication (TOTP)
-- Session management
-- Role-based access control (RBAC)
-
-#### 📝 Content Management Module
-- Markdown rendering with syntax highlighting
-- Rich text editing interface
-- Media file management
-- Content versioning
-- SEO optimization tools
-
-#### 📧 Email Module
-- Multiple email providers (SMTP, SendGrid, AWS SES)
-- HTML and text templates
-- Contact forms
-- Email verification workflows
-- Newsletter capabilities
-
-#### 🔒 Security Module
-- HTTPS/TLS encryption
-- CSRF protection
-- Rate limiting
-- Security headers
-- Input validation and sanitization
-
-## Real-World Benefits
-
-### For End Users
-- **Fast Loading** - Pages load quickly and stay responsive
-- **Secure** - Your data is protected by industry best practices
-- **Reliable** - Applications stay up and running
-- **Mobile-Friendly** - Works perfectly on all devices
-
-### For Developers
-- **Productive** - Rich tooling and clear error messages
-- **Maintainable** - Type safety prevents many bugs
-- **Scalable** - Performance that grows with your users
-- **Enjoyable** - Modern development experience
-
-### For Businesses
-- **Cost-Effective** - Lower server costs due to efficiency
-- **Secure** - Reduced risk of data breaches
-- **Fast Time-to-Market** - Rapid development cycles
-- **Future-Proof** - Built on growing, stable technology
-
-## Comparison with Other Frameworks
-
-### vs. Node.js Frameworks
-| Aspect | Rustelo | Node.js |
-|--------|---------|---------|
-| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
-| Memory Safety | ⭐⭐⭐⭐⭐ | ⭐⭐ |
-| Type Safety | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
-| Ecosystem | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
-| Learning Curve | ⭐⭐⭐ | ⭐⭐⭐⭐ |
-
-### vs. Python Frameworks
-| Aspect | Rustelo | Django/Flask |
-|--------|---------|-------------|
-| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐ |
-| Concurrency | ⭐⭐⭐⭐⭐ | ⭐⭐ |
-| Type Safety | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
-| Development Speed | ⭐⭐⭐ | ⭐⭐⭐⭐ |
-| Runtime Errors | ⭐⭐⭐⭐⭐ | ⭐⭐ |
-
-### vs. Go Frameworks
-| Aspect | Rustelo | Go |
-|--------|---------|-----|
-| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| Memory Safety | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
-| Frontend Integration | ⭐⭐⭐⭐⭐ | ⭐⭐ |
-| Compile Time | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
-| Error Handling | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-
-## When to Choose Rustelo
-
-### Perfect For:
-- **High-Performance Applications** - When speed matters
-- **Security-Critical Systems** - When safety is paramount
-- **Long-Term Projects** - When maintainability is key
-- **Growing Applications** - When you need to scale
-- **Modern Development Teams** - When you want the latest tools
-
-### Consider Alternatives If:
-- **Rapid Prototyping** - When you need something in hours, not days
-- **Large Existing Ecosystem** - When you need tons of third-party packages
-- **Team Constraints** - When your team isn't ready for Rust
-- **Simple CRUD Apps** - When basic functionality is sufficient
-
-## Success Stories
-
-### Performance Gains
-> "We migrated our API from Node.js to[Rustelo](/) and saw a 10x improvement in response times while reducing server costs by 60%."
->
-> — *Tech Lead at Growing SaaS Company*
-
-### Developer Experience
-> "The type safety caught so many bugs before they reached production. Our deployment confidence went through the roof."
->
-> — *Senior Developer at Fintech Startup*
-
-### Scalability
-> "Rustelo handled our traffic spike during a viral campaign without any issues. The old system would have crashed."
->
-> — *CTO at Media Company*
-
-## The Technology Stack
-
-### Frontend Technologies
-- **Leptos** - Reactive web framework
-- **WebAssembly** - High-performance client code
-- **Tailwind CSS** - Utility-first styling
-- **DaisyUI** - Beautiful components
-
-### Backend Technologies
-- **Axum** - Fast, ergonomic web server
-- **Tokio** - Async runtime
-- **Tower** - Modular networking
-- **SQLx** - Type-safe database queries
-
-### Infrastructure
-- **Docker** - Containerized deployment
-- **PostgreSQL/SQLite** - Flexible database options
-- **Nginx** - Reverse proxy and load balancing
-- **Let's Encrypt** - Automatic SSL certificates
-
-## Getting Started Journey
-
-### For Different User Types
-
-#### Content Creators & Bloggers
-1. **[Installation](./installation.md)** - Get Rustelo running
-2. **[User Interface](../users/interface.md)** - Learn the admin panel
-3. **[Content Publishing](../users/content.md)** - Create your first post
-4. **[Customization](../users/profile.md)** - Make it yours
-
-#### Developers & Teams
-1. **[Development Setup](../developers/setup/environment.md)** - Configure your tools
-2. **[Architecture Overview](../developers/architecture/overview.md)** - Understand the system
-3. **[First Feature](../developers/features/adding-features.md)** - Build something
-4. **[Testing](../developers/testing/strategy.md)** - Ensure quality
-
-#### System Administrators
-1. **[Production Installation](../deployment/production.md)** - Deploy securely
-2. **[Configuration](../configuration/environment.md)** - Optimize settings
-3. **[Monitoring](../deployment/monitoring.md)** - Keep it healthy
-4. **[Backup Strategy](../deployment/backup.md)** - Protect your data
-
-## Community and Ecosystem
-
-### Open Source Benefits
-- **Transparency** - You can see exactly how everything works
-- **Security** - Many eyes make bugs shallow
-- **Flexibility** - Modify anything to fit your needs
-- **Longevity** - Not dependent on any single company
-
-### Growing Ecosystem
-- **Active Development** - Regular updates and improvements
-- **Community Plugins** - Extensions built by users
-- **Documentation** - Comprehensive guides and examples
-- **Support** - Multiple channels for getting help
-
-### Contributing Opportunities
-- **Code Contributions** - Features, bug fixes, optimizations
-- **Documentation** - Guides, tutorials, translations
-- **Testing** - Quality assurance and feedback
-- **Community** - Help other users succeed
-
-## The Future of Rustelo
-
-### Roadmap Highlights
-- **Performance Optimizations** - Even faster response times
-- **Enhanced Developer Tools** - Better debugging and profiling
-- **More Integrations** - Additional third-party services
-- **Mobile-First Features** - Progressive Web App capabilities
-- **AI/ML Integration** - Modern AI-powered features
-
-### Long-Term Vision
-Rustelo aims to be the go-to framework for building high-performance, secure web applications that can grow from prototype to enterprise scale while maintaining developer productivity and system reliability.
-
-## Next Steps
-
-Ready to experience Rustelo? Here's what to do next:
-
-### Try It Out
-- **[Quick Installation](./installation.md)** - Get running in minutes
-- **[Live Demo](https://demo.rustelo.dev)** - See it in action
-- **[Example Applications](https://github.com/rustelo/examples)** - Real-world code
-
-### Learn More
-- **[Architecture Deep Dive](../developers/architecture/overview.md)** - Technical details
-- **[Feature Comparison](../reference/features.md)** - What's included
-- **[Performance Benchmarks](../performance/overview.md)** - How fast is it?
-
-### Get Involved
-- **[Community Forum](https://forum.rustelo.dev)** - Join the discussion
-- **[GitHub Repository](https://github.com/rustelo/rustelo)** - See the code
-- **[Contributing Guide](../contributing/guidelines.md)** - Help improve Rustelo
-
----
-
-*Rustelo represents the future of web development: safe, fast, and enjoyable. Join us in building better web applications with the power of Rust.* 🦀⚡
diff --git a/book/glossary.md b/book/glossary.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/introduction.md b/book/introduction.md
deleted file mode 100644
index 442490b..0000000
--- a/book/introduction.md
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
-
-# Welcome to [Rustelo](/)
-
-**[Rustelo](/)** is a modern, secure web application framework built with Rust that provides everything you need to create powerful web applications. Whether you're an end user looking to understand how to use a Rustelo application, or a developer wanting to build with the framework, this comprehensive guide has you covered.
-
-## What is Rustelo?
-
-[Rustelo](/) combines the performance and safety of Rust with modern web development patterns to create a framework that is:
-
-- **🚀 Fast** - Built on Rust's zero-cost abstractions
-- **🔒 Secure** - Security-first design with built-in protections
-- **📦 Modular** - Choose only the features you need
-- **🌐 Modern** - Reactive frontend with server-side rendering
-- **🔧 Developer-Friendly** - Excellent tooling and documentation
-
-## Two Guides in One
-
-This documentation serves two distinct audiences:
-
-### 📚 For End Users
-If you're using a Rustelo application (blog, CMS, web portal, etc.), the **"For End Users"** sections will teach you:
-
-- How to navigate and use the interface
-- How to create and manage content
-- How to customize your profile and settings
-- How to use security features like 2FA
-- How to troubleshoot common issues
-
-### 🔧 For Developers
-If you're building applications with Rustelo or contributing to the framework, the **"For Developers"** sections cover:
-
-- Setting up your development environment
-- Understanding the architecture and design patterns
-- Adding new features and functionality
-- Testing strategies and best practices
-- Deployment and production considerations
-
-## Key Technologies
-
-Rustelo is built on a modern technology stack:
-
-### Frontend
-- **[Leptos](https://leptos.dev/)** - Reactive web framework with SSR and hydration
-- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first styling
-- **[DaisyUI](https://daisyui.com/)** - Beautiful component library
-- **WebAssembly** - High-performance client-side code
-
-### Backend
-- **[Axum](https://github.com/tokio-rs/axum)** - Ergonomic async web framework
-- **[Tokio](https://tokio.rs/)** - Async runtime for high concurrency
-- **[SQLx](https://github.com/launchbadge/sqlx)** - Compile-time checked SQL queries
-- **[Serde](https://serde.rs/)** - Powerful serialization framework
-
-### Database Support
-- **PostgreSQL** - Full-featured production database
-- **SQLite** - Lightweight development and small-scale deployment
-- **Automatic detection** - Works with both seamlessly
-
-## Core Features
-
-### 🔐 Authentication & Security
-- **JWT-based authentication** with secure token handling
-- **OAuth2 integration** for Google, GitHub, and other providers
-- **Two-factor authentication (2FA)** with TOTP support
-- **Role-based access control** for fine-grained permissions
-- **CSRF protection** and security headers built-in
-
-### 📝 Content Management
-- **Rich text editor** with markdown support
-- **Media management** for images, videos, and documents
-- **Content organization** with categories and tags
-- **SEO optimization** with meta tags and structured data
-- **Version control** and draft/publish workflows
-
-### 📧 Communication
-- **Email system** with multiple provider support (SMTP, SendGrid, AWS SES)
-- **Template-based emails** with HTML and text versions
-- **Notification system** for user alerts and updates
-- **Contact forms** with spam protection
-- **Real-time messaging** capabilities
-
-### 🛡️ Enterprise Security
-- **HTTPS/TLS encryption** for all communications
-- **Rate limiting** to prevent abuse
-- **Input validation** and sanitization
-- **Audit logging** for compliance
-- **Data encryption** at rest and in transit
-
-## Use Cases
-
-### For Content Creators
-Perfect for bloggers, writers, and content teams who need:
-- Professional publishing platform
-- Rich content editing capabilities
-- SEO and analytics tools
-- User engagement features
-
-### For Businesses
-Ideal for companies that need:
-- Customer portals and dashboards
-- Content management systems
-- User authentication and profiles
-- Secure document sharing
-
-### For Developers
-Excellent for teams building:
-- SaaS applications
-- E-commerce platforms
-- Social applications
-- API services
-- Custom web applications
-
-### For Educational Institutions
-Great for schools and universities needing:
-- Student/faculty portals
-- Course management systems
-- Research collaboration tools
-- Secure communication platforms
-
-## Getting Started
-
-### 🚀 For End Users
-If you're new to using Rustelo applications:
-
-1. **[What is Rustelo?](./getting-started/what-is-rustelo.md)** - Learn the basics
-2. **[User Interface Guide](./users/interface.md)** - Navigate the interface
-3. **[Authentication](./users/authentication.md)** - Set up your account
-4. **[Content Publishing](./users/content.md)** - Create your first content
-
-### 🔧 For Developers
-If you're building with Rustelo:
-
-1. **[Development Environment](./developers/setup/environment.md)** - Set up your tools
-2. **[Project Structure](./developers/setup/structure.md)** - Understand the codebase
-3. **[System Overview](./developers/architecture/overview.md)** - Learn the architecture
-4. **[Adding Features](./developers/features/adding-features.md)** - Build functionality
-
-### ⚙️ For System Administrators
-If you're deploying and managing Rustelo:
-
-1. **[Installation](./getting-started/installation.md)** - Install and configure
-2. **[Configuration](./configuration/environment.md)** - Environment setup
-3. **[Production Deployment](./deployment/production.md)** - Go live securely
-4. **[Monitoring](./deployment/monitoring.md)** - Keep it running smoothly
-
-## Why Choose Rustelo?
-
-### Performance
-- **Blazing fast** - Rust's performance with modern web optimizations
-- **Low memory usage** - Efficient resource utilization
-- **Concurrent** - Handle thousands of users simultaneously
-- **Scalable** - Grows with your needs
-
-### Security
-- **Memory safe** - Rust prevents entire classes of vulnerabilities
-- **Security by default** - Best practices built into the framework
-- **Regular updates** - Active security maintenance
-- **Compliance ready** - Meet industry standards
-
-### Developer Experience
-- **Type safety** - Catch errors at compile time
-- **Excellent tooling** - Rich ecosystem and development tools
-- **Hot reloading** - Fast development iteration
-- **Clear documentation** - Comprehensive guides and examples
-
-### Production Ready
-- **Battle tested** - Used in production by growing companies
-- **Reliable** - Robust error handling and recovery
-- **Observable** - Built-in metrics, logging, and monitoring
-- **Maintainable** - Clean architecture and code organization
-
-## Community and Support
-
-### Getting Help
-- **📖 Documentation** - Comprehensive guides for all skill levels
-- **💬 Community Forum** - Connect with other users and developers
-- **🐛 Issue Tracker** - Report bugs and request features
-- **📧 Professional Support** - Available for enterprise customers
-
-### Contributing
-- **🔧 Code Contributions** - Help improve the framework
-- **📝 Documentation** - Improve guides and tutorials
-- **🧪 Testing** - Help ensure quality and reliability
-- **🌍 Translation** - Make Rustelo accessible worldwide
-
-### Resources
-- **[GitHub Repository](https://github.com/rustelo/rustelo)** - Source code and development
-- **[API Documentation](https://docs.rs/rustelo)** - Generated API reference
-- **[Example Applications](https://github.com/rustelo/examples)** - Real-world examples
-- **[Blog](https://rustelo.dev/blog)** - Updates and tutorials
-
-## System Requirements
-
-### Minimum Requirements
-- **CPU**: 2 cores, 2.0 GHz
-- **RAM**: 4 GB
-- **Storage**: 20 GB available space
-- **OS**: Linux, macOS, or Windows
-- **Database**: SQLite (included) or PostgreSQL
-
-### Recommended for Production
-- **CPU**: 4+ cores, 3.0+ GHz
-- **RAM**: 8+ GB
-- **Storage**: 100+ GB SSD
-- **OS**: Linux (Ubuntu 20.04+ or CentOS 8+)
-- **Database**: PostgreSQL 13+
-- **Reverse Proxy**: Nginx or Apache
-
-## What's in This Guide
-
-This documentation is organized into clear sections:
-
-### Essential Information
-- **Getting Started** - Installation, setup, and first steps
-- **For End Users** - Using Rustelo applications effectively
-- **For Developers** - Building and extending Rustelo applications
-
-### Technical References
-- **Configuration** - Environment and system configuration
-- **API Reference** - Complete API documentation
-- **Security** - Security features and best practices
-- **Performance** - Optimization and scaling guidance
-
-### Support Resources
-- **Troubleshooting** - Solutions to common issues
-- **Contributing** - How to participate in development
-- **Reference** - Quick lookup for configurations and commands
-
-## Quick Navigation
-
-**New Users?** Start with [What is Rustelo?](./getting-started/what-is-rustelo.md)
-
-**Want to try it?** Go to [Installation](./getting-started/installation.md)
-
-**Ready to develop?** Begin with [Development Setup](./developers/setup/environment.md)
-
-**Need help?** Check [Troubleshooting](./troubleshooting/common.md)
-
----
-
-*Welcome to the Rustelo community! Whether you're here to use, build, or contribute, we're excited to have you join us in creating the future of web applications with Rust.* 🦀✨
\ No newline at end of file
diff --git a/book/logos/rustelo-image.ascii b/book/logos/rustelo-image.ascii
deleted file mode 100644
index e69de29..0000000
diff --git a/book/n b/book/n
deleted file mode 100644
index 9c4cf54..0000000
--- a/book/n
+++ /dev/null
@@ -1,3 +0,0 @@
-Add file upload capabilities** for media management?
-**Enhance the dashboard** with content analytics?
-**Show how to configure** the content sources (DB vs Files vs Both)?
diff --git a/book/performance/caching.md b/book/performance/caching.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/performance/database.md b/book/performance/database.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/performance/frontend.md b/book/performance/frontend.md
deleted file mode 100644
index 6b71e7e..0000000
--- a/book/performance/frontend.md
+++ /dev/null
@@ -1 +0,0 @@
-# Frontend Optimization
diff --git a/book/performance/memory.md b/book/performance/memory.md
deleted file mode 100644
index 7327319..0000000
--- a/book/performance/memory.md
+++ /dev/null
@@ -1 +0,0 @@
-# Memory Management
diff --git a/book/performance/monitoring.md b/book/performance/monitoring.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/performance/optimization.md b/book/performance/optimization.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/performance/overview.md b/book/performance/overview.md
deleted file mode 100644
index e69de29..0000000
diff --git a/book/reference/cli.md b/book/reference/cli.md
deleted file mode 100644
index 79aafc4..0000000
--- a/book/reference/cli.md
+++ /dev/null
@@ -1 +0,0 @@
-# CLI Commands
diff --git a/book/reference/config-migration.md b/book/reference/config-migration.md
deleted file mode 100644
index 68cf0e0..0000000
--- a/book/reference/config-migration.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# Configuration Migration Guide
-
-This guide covers how to migrate configurations between different versions of Rustelo.
-
-## Overview
-
-Configuration migrations may be necessary when:
-- Upgrading to a new version of Rustelo
-- Changing configuration structure
-- Adding or removing features
-- Moving between environments
-
-## Migration Process
-
-### 1. Backup Current Configuration
-
-Always backup your current configuration before migrating:
-
-```bash
-./config/scripts/manage-config.sh backup prod
-```
-
-### 2. Review Changes
-
-Check the changelog for configuration changes in the new version.
-
-### 3. Update Configuration
-
-Update your configuration files according to the migration instructions.
-
-### 4. Validate Configuration
-
-Validate the new configuration:
-
-```bash
-./config/scripts/manage-config.sh validate prod
-```
-
-### 5. Test Migration
-
-Test the migration in a staging environment before production.
-
-## Version-Specific Migrations
-
-### v1.0.0 to v1.1.0
-
-No breaking changes in configuration format.
-
-### Future Versions
-
-Migration instructions will be added here as new versions are released.
-
-## Troubleshooting
-
-If you encounter issues during migration:
-
-1. Check the configuration validation output
-2. Review the error logs
-3. Consult the troubleshooting guide
-4. Restore from backup if necessary
-
-## Getting Help
-
-For migration assistance:
-- Check the documentation
-- Review the FAQ
-- Contact support
\ No newline at end of file
diff --git a/book/reference/config.md b/book/reference/config.md
deleted file mode 100644
index a1dd211..0000000
--- a/book/reference/config.md
+++ /dev/null
@@ -1 +0,0 @@
-# Configuration Options
diff --git a/book/reference/env-migration.md b/book/reference/env-migration.md
deleted file mode 100644
index fb8a51b..0000000
--- a/book/reference/env-migration.md
+++ /dev/null
@@ -1,308 +0,0 @@
-# Environment Variable Migration Guide
-
-This guide covers how to migrate environment variables between different versions of Rustelo and different deployment environments.
-
-## Overview
-
-Environment variable migrations may be necessary when:
-- Upgrading to a new version of Rustelo
-- Moving between deployment environments (dev → staging → production)
-- Changing configuration structure
-- Adding or removing features
-- Updating security requirements
-
-## Migration Process
-
-### 1. Audit Current Environment Variables
-
-First, document your current environment variables:
-
-```bash
-# List all Rustelo-related environment variables
-env | grep -E "(RUSTELO|DATABASE|SMTP|JWT|SESSION)" > current_env.txt
-```
-
-### 2. Compare with New Requirements
-
-Review the environment variable documentation for the target version:
-- [Environment Variables Guide](../configuration/environment.md)
-- Version-specific release notes
-- Feature documentation
-
-### 3. Create Migration Plan
-
-Document the changes needed:
-- Variables to add
-- Variables to update
-- Variables to remove
-- Variables to rename
-
-### 4. Update Environment Variables
-
-Update your environment configuration:
-
-```bash
-# Development
-cp .env.development .env.development.backup
-# Update .env.development with new variables
-
-# Production
-# Update environment variables in your deployment system
-```
-
-### 5. Validate Configuration
-
-Test the new environment variables:
-
-```bash
-# Validate configuration loading
-./rustelo-server --check-config
-
-# Test specific features
-./rustelo-server --test-feature auth
-./rustelo-server --test-feature email
-```
-
-## Common Migration Scenarios
-
-### Adding New Features
-
-When enabling new features, you may need to add:
-
-```bash
-# Email feature
-SMTP_HOST=smtp.gmail.com
-SMTP_USERNAME=your-app@gmail.com
-SMTP_PASSWORD=your-app-password
-FROM_EMAIL=noreply@yourapp.com
-
-# Metrics feature
-PROMETHEUS_ENDPOINT=/metrics
-GRAFANA_URL=https://grafana.yourapp.com
-
-# TLS feature
-TLS_CERT_FILE=/etc/ssl/certs/yourapp.crt
-TLS_KEY_FILE=/etc/ssl/private/yourapp.key
-```
-
-### Security Updates
-
-Security updates may require new secrets:
-
-```bash
-# New encryption key
-ENCRYPTION_KEY=your-base64-encoded-key
-
-# Updated JWT configuration
-JWT_SECRET=your-new-jwt-secret
-JWT_ALGORITHM=HS256
-
-# Enhanced session security
-SESSION_SECRET=your-new-session-secret
-CSRF_SECRET=your-csrf-secret
-```
-
-### Database Migrations
-
-Database configuration updates:
-
-```bash
-# Connection pool updates
-DATABASE_MAX_CONNECTIONS=20
-DATABASE_SSL_MODE=require
-
-# New database features
-DATABASE_QUERY_TIMEOUT=30000
-DATABASE_PREPARED_STATEMENT_CACHE_SIZE=256
-```
-
-## Environment-Specific Considerations
-
-### Development Environment
-
-Development environments typically require:
-- Relaxed security settings
-- Local service URLs
-- Debug-friendly configuration
-
-```bash
-RUSTELO_ENV=development
-RUSTELO_DEBUG=true
-DATABASE_URL=sqlite//:dev_database.db
-SMTP_HOST=localhost
-SMTP_PORT=1025
-```
-
-### Staging Environment
-
-Staging environments should mirror production:
-- Production-like security
-- Test service configurations
-- Monitoring enabled
-
-```bash
-RUSTELO_ENV=staging
-DATABASE_URL=postgresql://user:pass@staging-db:5432/app
-FRONTEND_URL=https://staging.yourapp.com
-```
-
-### Production Environment
-
-Production environments require:
-- Maximum security
-- Performance optimization
-- Full monitoring
-
-```bash
-RUSTELO_ENV=production
-DATABASE_URL=postgresql://user:pass@prod-db:5432/app
-FRONTEND_URL=https://yourapp.com
-TLS_ENABLED=true
-```
-
-## Rollback Procedures
-
-### Environment Variable Rollback
-
-If migration fails, rollback environment variables:
-
-```bash
-# Restore from backup
-cp .env.production.backup .env.production
-
-# Or restore specific variables
-export DATABASE_URL="previous-database-url"
-export SESSION_SECRET="previous-session-secret"
-```
-
-### Configuration Rollback
-
-Rollback to previous configuration:
-
-```bash
-# Restore configuration from backup
-./config/scripts/manage-config.sh restore backup_file.toml
-
-# Rebuild configuration
-./config/scripts/build-config.sh prod config.prod.toml
-```
-
-## Validation and Testing
-
-### Environment Variable Validation
-
-Validate environment variables:
-
-```bash
-# Check required variables are set
-./scripts/check-env.sh production
-
-# Validate variable formats
-./scripts/validate-env.sh production
-```
-
-### Integration Testing
-
-Test the complete system:
-
-```bash
-# Run integration tests
-cargo test --features integration
-
-# Test specific components
-cargo test auth_tests
-cargo test email_tests
-cargo test database_tests
-```
-
-## Version-Specific Migrations
-
-### v1.0.0 to v1.1.0
-
-No breaking changes in environment variables.
-
-### v1.1.0 to v1.2.0 (Planned)
-
-Potential changes:
-- New security-related variables
-- Enhanced monitoring variables
-- Performance tuning variables
-
-## Best Practices
-
-### Secret Management
-
-- Use secure secret management systems
-- Rotate secrets regularly
-- Never commit secrets to version control
-- Use different secrets for each environment
-
-### Documentation
-
-- Document all environment variables
-- Maintain migration logs
-- Update deployment documentation
-- Train team members on new variables
-
-### Testing
-
-- Test migrations in staging first
-- Validate all features after migration
-- Monitor application health
-- Have rollback plans ready
-
-## Troubleshooting
-
-### Common Issues
-
-1. **Missing Environment Variables**
- ```bash
- # Check for missing variables
- ./scripts/check-env.sh production
- ```
-
-2. **Invalid Variable Formats**
- ```bash
- # Validate variable formats
- echo $DATABASE_URL | grep -E "^postgresql://"
- ```
-
-3. **Permission Issues**
- ```bash
- # Check file permissions for certificates
- ls -la /etc/ssl/certs/yourapp.crt
- ```
-
-### Debug Commands
-
-```bash
-# Show loaded environment variables
-./rustelo-server --show-env
-
-# Test configuration loading
-./rustelo-server --check-config
-
-# Validate specific features
-./rustelo-server --validate-feature auth
-```
-
-## Getting Help
-
-For environment variable migration assistance:
-- Review the [Environment Variables Guide](../configuration/environment.md)
-- Check the [Troubleshooting Guide](../troubleshooting/common.md)
-- Consult the community forums
-- Contact technical support
-
-## Migration Checklist
-
-- [ ] Backup current environment variables
-- [ ] Review new requirements
-- [ ] Create migration plan
-- [ ] Update development environment
-- [ ] Test in staging environment
-- [ ] Validate all features
-- [ ] Update production environment
-- [ ] Monitor application health
-- [ ] Update documentation
-- [ ] Train team members
diff --git a/book/reference/env-vars.md b/book/reference/env-vars.md
deleted file mode 100644
index 1d535f2..0000000
--- a/book/reference/env-vars.md
+++ /dev/null
@@ -1 +0,0 @@
-# Environment Variables
diff --git a/book/reference/error-codes.md b/book/reference/error-codes.md
deleted file mode 100644
index 19ad908..0000000
--- a/book/reference/error-codes.md
+++ /dev/null
@@ -1 +0,0 @@
-# Error Codes
diff --git a/book/reference/faq.md b/book/reference/faq.md
deleted file mode 100644
index 4514b4c..0000000
--- a/book/reference/faq.md
+++ /dev/null
@@ -1 +0,0 @@
-# FAQ
diff --git a/book/reference/feature-migration.md b/book/reference/feature-migration.md
deleted file mode 100644
index 4743f69..0000000
--- a/book/reference/feature-migration.md
+++ /dev/null
@@ -1,473 +0,0 @@
-# Feature Migration Guide
-
-This guide covers how to migrate features between different versions of Rustelo and how to add or remove features from your configuration.
-
-## Overview
-
-Feature migrations may be necessary when:
-- Upgrading to a new version of Rustelo
-- Adding new features to your application
-- Removing unused features
-- Changing feature configurations
-- Moving between environments with different feature sets
-
-## Migration Process
-
-### 1. Backup Current Configuration
-
-Always backup your current configuration before migrating:
-
-```bash
-./config/scripts/manage-config.sh backup prod
-./config/scripts/manage-config.sh backup dev
-```
-
-### 2. Assess Current Features
-
-List currently enabled features:
-
-```bash
-./config/scripts/debug-manage.sh list-features
-./config/scripts/debug-manage.sh status
-```
-
-### 3. Plan Feature Changes
-
-Document the changes needed:
-- Features to enable
-- Features to disable
-- Feature configurations to update
-- Dependencies to consider
-
-### 4. Update Feature Configurations
-
-Update individual feature configurations as needed.
-
-### 5. Rebuild Configurations
-
-Rebuild configurations for all environments:
-
-```bash
-./config/scripts/build-config.sh dev
-./config/scripts/build-config.sh prod config.prod.toml
-./config/scripts/build-config.sh example config.example.toml
-```
-
-### 6. Validate Changes
-
-Validate the new configuration:
-
-```bash
-./config/scripts/debug-manage.sh test
-```
-
-## Feature Dependencies
-
-Some features depend on others. The system handles these dependencies automatically:
-
-### Core Dependencies
-- **RBAC** requires **Authentication**
-- **Content Management** requires **Authentication**
-- **Advanced Email** may require **Authentication** for user-specific templates
-
-### Optional Dependencies
-- **Metrics** can integrate with any enabled feature
-- **TLS** enhances security for all features
-- **Caching** can improve performance for any feature
-
-## Adding New Features
-
-### Step 1: Create Feature Configuration
-
-Use the template command to create a new feature:
-
-```bash
-./config/scripts/debug-manage.sh template my_new_feature
-```
-
-This creates:
-- `config/features/my_new_feature/dev.toml`
-- `config/features/my_new_feature/prod.toml`
-- `config/features/my_new_feature/example.toml`
-- `config/features/my_new_feature/README.md`
-
-### Step 2: Configure Feature Settings
-
-Edit each environment file with appropriate settings:
-
-```toml
-# config/features/my_new_feature/dev.toml
-[features]
-my_new_feature = true
-
-[my_new_feature]
-enabled = true
-debug_mode = true
-# Development-specific settings
-```
-
-```toml
-# config/features/my_new_feature/prod.toml
-[features]
-my_new_feature = true
-
-[my_new_feature]
-enabled = true
-debug_mode = false
-# Production-specific settings
-```
-
-### Step 3: Update Documentation
-
-Document your new feature:
-- Update feature README
-- Add to main documentation
-- Update migration guides
-
-### Step 4: Test Feature
-
-Test the feature in all environments:
-
-```bash
-# Test development
-./config/scripts/build-config.sh dev config.test.toml
-# Test production
-./config/scripts/build-config.sh prod config.test-prod.toml
-```
-
-## Removing Features
-
-### Step 1: Assess Dependencies
-
-Check if other features depend on the feature you want to remove:
-
-```bash
-# Review feature dependencies in documentation
-grep -r "my_feature" config/features/
-```
-
-### Step 2: Disable Feature
-
-Set the feature to disabled in all environments:
-
-```toml
-[features]
-my_feature = false
-
-[my_feature]
-enabled = false
-```
-
-### Step 3: Remove Configuration Files (Optional)
-
-If permanently removing:
-
-```bash
-rm -rf config/features/my_feature/
-```
-
-### Step 4: Update Dependencies
-
-Update any features that depended on the removed feature.
-
-## Feature Configuration Updates
-
-### Updating Existing Features
-
-When updating feature configurations:
-
-1. **Review Changes**: Understand what's changing and why
-2. **Update Gradually**: Start with development, then staging, then production
-3. **Test Thoroughly**: Ensure the feature still works as expected
-4. **Monitor Impact**: Watch for performance or functionality changes
-
-### Example: Updating Authentication Feature
-
-```toml
-# Before
-[auth.password]
-min_length = 8
-require_special_chars = false
-
-# After
-[auth.password]
-min_length = 12
-require_special_chars = true
-require_uppercase = true
-require_lowercase = true
-```
-
-## Environment-Specific Feature Management
-
-### Development Environment
-
-Development typically enables more features for testing:
-
-```toml
-[features]
-auth = true
-content = true
-email = true
-metrics = true
-tls = false # Not needed in development
-rbac = true # For testing
-cache = true
-debug_features = true # Development-only features
-```
-
-### Production Environment
-
-Production focuses on essential, stable features:
-
-```toml
-[features]
-auth = true
-content = true
-email = true
-metrics = true
-tls = true # Required for production
-rbac = true
-cache = true
-debug_features = false # Disabled in production
-```
-
-## Feature Flag Management
-
-### Runtime Feature Flags
-
-Some features can be toggled at runtime:
-
-```toml
-[feature_flags]
-auth_enabled = true
-content_enabled = true
-email_enabled = true
-metrics_enabled = true
-```
-
-### Conditional Features
-
-Features can be conditionally enabled:
-
-```toml
-[feature_flags.conditional]
-oauth_enabled = false # Enable OAuth (requires auth)
-two_factor_enabled = true # Enable 2FA (requires auth)
-file_uploads_enabled = true # Enable file uploads (requires content)
-```
-
-## Migration Scripts
-
-### Automated Feature Migration
-
-Create scripts for common migrations:
-
-```bash
-#!/bin/bash
-# migrate-to-v2.sh
-
-# Update authentication feature
-sed -i 's/min_length = 8/min_length = 12/' config/features/auth/*.toml
-
-# Enable new security features
-echo "csrf_protection = true" >> config/features/auth/prod.toml
-
-# Rebuild configurations
-./config/scripts/build-config.sh prod config.prod.toml
-```
-
-### Feature Validation Script
-
-```bash
-#!/bin/bash
-# validate-features.sh
-
-echo "Validating feature configurations..."
-
-for env in dev prod example; do
- echo "Testing $env environment..."
- if ./config/scripts/build-config.sh "$env" "test_$env.toml"; then
- echo "✓ $env configuration valid"
- rm "test_$env.toml"
- else
- echo "✗ $env configuration invalid"
- exit 1
- fi
-done
-
-echo "All feature configurations valid!"
-```
-
-## Rollback Procedures
-
-### Feature Rollback
-
-If a feature migration fails:
-
-1. **Disable the Feature**:
- ```toml
- [features]
- problematic_feature = false
- ```
-
-2. **Restore Previous Configuration**:
- ```bash
- ./config/scripts/manage-config.sh restore backup_file.toml
- ```
-
-3. **Rebuild and Deploy**:
- ```bash
- ./config/scripts/build-config.sh prod config.prod.toml
- ```
-
-### Partial Rollback
-
-Roll back specific feature settings:
-
-```bash
-# Restore specific feature from backup
-cp backup/features/auth/prod.toml config/features/auth/prod.toml
-
-# Rebuild configuration
-./config/scripts/build-config.sh prod config.prod.toml
-```
-
-## Testing Feature Migrations
-
-### Unit Testing
-
-Test individual feature configurations:
-
-```bash
-# Test feature configuration loading
-cargo test feature_config_tests
-
-# Test feature initialization
-cargo test feature_init_tests
-```
-
-### Integration Testing
-
-Test feature interactions:
-
-```bash
-# Test feature dependencies
-cargo test feature_dependency_tests
-
-# Test feature combinations
-cargo test feature_integration_tests
-```
-
-### End-to-End Testing
-
-Test complete feature workflows:
-
-```bash
-# Test authentication flow
-cargo test auth_e2e_tests
-
-# Test content management flow
-cargo test content_e2e_tests
-```
-
-## Monitoring Feature Changes
-
-### Feature Usage Metrics
-
-Monitor feature usage after migration:
-
-```toml
-[metrics.features]
-track_feature_usage = true
-track_feature_performance = true
-track_feature_errors = true
-```
-
-### Health Checks
-
-Add health checks for new features:
-
-```toml
-[health.features]
-check_auth_status = true
-check_email_connectivity = true
-check_database_features = true
-```
-
-## Best Practices
-
-### Planning
-- Always plan feature changes in advance
-- Consider impact on users and system performance
-- Test changes in non-production environments first
-
-### Documentation
-- Document all feature changes
-- Update user guides and API documentation
-- Maintain feature compatibility matrices
-
-### Communication
-- Communicate feature changes to stakeholders
-- Provide migration guides for users
-- Announce deprecations well in advance
-
-### Monitoring
-- Monitor feature performance after changes
-- Track error rates and user feedback
-- Be prepared to rollback if necessary
-
-## Troubleshooting
-
-### Common Issues
-
-1. **Feature Dependencies Not Met**
- ```bash
- # Check feature dependencies
- grep -r "requires.*auth" config/features/
- ```
-
-2. **Configuration Conflicts**
- ```bash
- # Validate configuration
- ./config/scripts/debug-manage.sh test
- ```
-
-3. **Feature Not Loading**
- ```bash
- # Check feature flag
- grep "my_feature.*=.*true" config.toml
- ```
-
-### Debug Commands
-
-```bash
-# List enabled features
-./config/scripts/debug-manage.sh list-features
-
-# Show feature status
-./config/scripts/debug-manage.sh status
-
-# Test specific feature
-./config/scripts/build-config.sh dev --feature=my_feature
-```
-
-## Getting Help
-
-For feature migration assistance:
-- Review the [Features Configuration Guide](../configuration/features.md)
-- Check the [Troubleshooting Guide](../troubleshooting/common.md)
-- Consult feature-specific documentation
-- Contact technical support
-
-## Migration Checklist
-
-- [ ] Backup current configurations
-- [ ] Document planned changes
-- [ ] Check feature dependencies
-- [ ] Update feature configurations
-- [ ] Test in development environment
-- [ ] Validate in staging environment
-- [ ] Deploy to production
-- [ ] Monitor feature performance
-- [ ] Update documentation
-- [ ] Train team on changes
\ No newline at end of file
diff --git a/book/reference/features.md b/book/reference/features.md
deleted file mode 100644
index c7ebb59..0000000
--- a/book/reference/features.md
+++ /dev/null
@@ -1 +0,0 @@
-# Feature Matrix
diff --git a/book/reference/requirements.md b/book/reference/requirements.md
deleted file mode 100644
index 1049473..0000000
--- a/book/reference/requirements.md
+++ /dev/null
@@ -1 +0,0 @@
-# System Requirements
diff --git a/book/reference/schema.md b/book/reference/schema.md
deleted file mode 100644
index aa1a789..0000000
--- a/book/reference/schema.md
+++ /dev/null
@@ -1 +0,0 @@
-# Database Schema
diff --git a/book/theme/custom.css b/book/theme/custom.css
deleted file mode 100644
index 5cbb373..0000000
--- a/book/theme/custom.css
+++ /dev/null
@@ -1,226 +0,0 @@
-/* Rustelo Documentation Custom Styles */
-
-:root {
- --rustelo-primary: #e53e3e;
- --rustelo-secondary: #3182ce;
- --rustelo-accent: #38a169;
- --rustelo-dark: #2d3748;
- --rustelo-light: #f7fafc;
-}
-
-/* Logo styling */
-.rustelo-logo {
- max-width: 100%;
- height: auto;
- display: block;
- margin: 0 auto;
-}
-
-.rustelo-logo-header {
- max-width: 400px;
- height: auto;
- display: block;
- margin: 2rem auto;
-}
-
-.rustelo-logo-small {
- max-width: 200px;
- height: auto;
- display: block;
- margin: 1rem auto;
-}
-
-/* Header logo integration */
-.menu-title img {
- height: 32px;
- width: auto;
- vertical-align: middle;
- margin-right: 0.5rem;
-}
-
-/* Responsive logo sizing */
-@media (max-width: 768px) {
- .rustelo-logo-header {
- max-width: 280px;
- margin: 1.5rem auto;
- }
-
- .rustelo-logo-small {
- max-width: 150px;
- margin: 0.75rem auto;
- }
-
- .menu-title img {
- height: 24px;
- }
-}
-
-/* Custom header styling */
-.menu-title {
- color: var(--rustelo-primary);
- font-weight: bold;
-}
-
-/* Code block improvements */
-pre {
- border-radius: 8px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-}
-
-/* Improved table styling */
-table {
- border-collapse: collapse;
- width: 100%;
- margin: 1rem 0;
-}
-
-table th,
-table td {
- border: 1px solid #e2e8f0;
- padding: 0.75rem;
- text-align: left;
-}
-
-table th {
- background-color: var(--rustelo-light);
- font-weight: 600;
-}
-
-table tr:nth-child(even) {
- background-color: #f8f9fa;
-}
-
-/* Feature badge styling */
-.feature-badge {
- display: inline-block;
- padding: 0.25rem 0.5rem;
- border-radius: 0.25rem;
- font-size: 0.875rem;
- font-weight: 500;
- margin: 0.125rem;
-}
-
-.feature-badge.enabled {
- background-color: #c6f6d5;
- color: #22543d;
-}
-
-.feature-badge.disabled {
- background-color: #fed7d7;
- color: #742a2a;
-}
-
-.feature-badge.optional {
- background-color: #fef5e7;
- color: #744210;
-}
-
-/* Callout boxes */
-.callout {
- padding: 1rem;
- margin: 1rem 0;
- border-left: 4px solid;
- border-radius: 0 4px 4px 0;
-}
-
-.callout.note {
- border-left-color: var(--rustelo-secondary);
- background-color: #ebf8ff;
-}
-
-.callout.warning {
- border-left-color: #ed8936;
- background-color: #fffaf0;
-}
-
-.callout.tip {
- border-left-color: var(--rustelo-accent);
- background-color: #f0fff4;
-}
-
-.callout.danger {
- border-left-color: var(--rustelo-primary);
- background-color: #fff5f5;
-}
-
-/* Command line styling */
-.command-line {
- background-color: #1a202c;
- color: #e2e8f0;
- padding: 1rem;
- border-radius: 8px;
- font-family: "JetBrains Mono", "Fira Code", monospace;
- margin: 1rem 0;
-}
-
-.command-line::before {
- content: "$ ";
- color: #48bb78;
- font-weight: bold;
-}
-
-/* Navigation improvements */
-.chapter li.part-title {
- color: var(--rustelo-primary);
- font-weight: bold;
- margin-top: 1rem;
-}
-
-/* Search improvements */
-#searchresults mark {
- background-color: #fef5e7;
- color: #744210;
-}
-
-/* Mobile improvements */
-@media (max-width: 768px) {
- .content {
- padding: 1rem;
- }
-
- table {
- font-size: 0.875rem;
- }
-
- .command-line {
- font-size: 0.8rem;
- padding: 0.75rem;
- }
-}
-
-/* Dark theme overrides */
-.navy .callout.note {
- background-color: #1e3a8a;
-}
-
-.navy .callout.warning {
- background-color: #92400e;
-}
-
-.navy .callout.tip {
- background-color: #14532d;
-}
-
-.navy .callout.danger {
- background-color: #991b1b;
-}
-
-/* Print styles */
-@media print {
- .nav-wrapper,
- .page-wrapper > .page > .menu,
- .mobile-nav-chapters,
- .nav-chapters,
- .sidebar-scrollbox {
- display: none !important;
- }
-
- .page-wrapper > .page {
- left: 0 !important;
- }
-
- .content {
- margin-left: 0 !important;
- max-width: none !important;
- }
-}
diff --git a/book/theme/custom.js b/book/theme/custom.js
deleted file mode 100644
index 553ba42..0000000
--- a/book/theme/custom.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// Rustelo Documentation Custom JavaScript
-
-// Add copy buttons to code blocks
-document.addEventListener("DOMContentLoaded", function () {
- // Add copy buttons to code blocks
- const codeBlocks = document.querySelectorAll("pre > code");
- codeBlocks.forEach(function (codeBlock) {
- const pre = codeBlock.parentElement;
- const button = document.createElement("button");
- button.className = "copy-button";
- button.textContent = "Copy";
- button.style.cssText = `
- position: absolute;
- top: 8px;
- right: 8px;
- background: #4a5568;
- color: white;
- border: none;
- padding: 4px 8px;
- border-radius: 4px;
- font-size: 12px;
- cursor: pointer;
- opacity: 0;
- transition: opacity 0.2s;
- `;
-
- pre.style.position = "relative";
- pre.appendChild(button);
-
- pre.addEventListener("mouseenter", function () {
- button.style.opacity = "1";
- });
-
- pre.addEventListener("mouseleave", function () {
- button.style.opacity = "0";
- });
-
- button.addEventListener("click", function () {
- const text = codeBlock.textContent;
- navigator.clipboard.writeText(text).then(function () {
- button.textContent = "Copied!";
- button.style.background = "#48bb78";
- setTimeout(function () {
- button.textContent = "Copy";
- button.style.background = "#4a5568";
- }, 2000);
- });
- });
- });
-
- // Add feature badges
- const content = document.querySelector(".content");
- if (content) {
- let html = content.innerHTML;
-
- // Replace feature indicators
- html = html.replace(
- /\[FEATURE:([^\]]+)\]/g,
- '$1',
- );
- html = html.replace(
- /\[OPTIONAL:([^\]]+)\]/g,
- '$1',
- );
- html = html.replace(
- /\[DISABLED:([^\]]+)\]/g,
- '$1',
- );
-
- // Add callout boxes
- html = html.replace(
- /\[NOTE\]([\s\S]*?)\[\/NOTE\]/g,
- '
-
-Welcome to the[Rustelo](/) Authentication Guide! This comprehensive guide will help you create your account, log in securely, and manage your authentication settings.
-
-## 🎯 Overview
-
-Rustelo provides a secure, user-friendly authentication system that protects your account while making it easy to access your content. Whether you're creating a new account or managing an existing one, this guide has you covered.
-
-## 🚀 Getting Started
-
-### Creating Your Account
-
-#### Step 1: Navigate to Registration
-1. Go to the[Rustelo](/) homepage
-2. Click **"Sign Up"** or **"Create Account"**
-3. You'll be taken to the registration page
-
-#### Step 2: Fill Out Registration Form
-
-```
-┌─────────────────────────────────────┐
-│ Create Your Account │
-├─────────────────────────────────────┤
-│ Full Name: [________________] │
-│ Email: [________________] │
-│ Username: [________________] │
-│ Password: [________________] │
-│ Confirm: [________________] │
-│ │
-│ □ I agree to the Terms of Service │
-│ □ Subscribe to newsletter (optional) │
-│ │
-│ [ Create Account ] │
-│ │
-│ Already have an account? Sign in │
-└─────────────────────────────────────┘
-```
-
-#### Registration Fields Explained
-
-**Full Name**
-- Your display name throughout the application
-- Can be changed later in profile settings
-- Used for personalization and greetings
-
-**Email Address**
-- Must be unique and valid
-- Used for login and account recovery
-- Will receive verification email
-
-**Username**
-- Must be unique across all users
-- Used for mentions and public profile URLs
-- Can only contain letters, numbers, and underscores
-- Cannot be changed after registration
-
-**Password**
-- Must meet security requirements
-- At least 8 characters long
-- Include uppercase and lowercase letters
-- Include at least one number
-- Include at least one special character
-
-**Confirm Password**
-- Must match your password exactly
-- Prevents typing errors
-
-#### Step 3: Password Strength Indicator
-
-As you type your password, you'll see a strength indicator:
-
-```
-Password: [weak____strong]
-✗ At least 8 characters
-✗ Contains uppercase letter
-✓ Contains lowercase letter
-✗ Contains number
-✗ Contains special character
-```
-
-**Password Tips:**
-- Use a unique password not used elsewhere
-- Consider using a password manager
-- Avoid common words or personal information
-- Mix letters, numbers, and symbols
-
-#### Step 4: Agree to Terms
-- Read the Terms of Service
-- Check the agreement box
-- Newsletter subscription is optional
-
-#### Step 5: Complete Registration
-1. Click **"Create Account"**
-2. Check your email for verification
-3. Click the verification link
-4. Your account is now active!
-
-### Email Verification
-
-After registration, you'll receive an email like this:
-
-```
-Subject: Verify Your[Rustelo](/) Account
-
-Hello [Your Name],
-
-Welcome to Rustelo! Please click the link below to verify your email address:
-
-[Verify Email Address]
-
-This link expires in 24 hours. If you didn't create this account, please ignore this email.
-
-Thanks,
-The[Rustelo](/) Team
-```
-
-**Important Notes:**
-- Check your spam folder if you don't see the email
-- The verification link expires in 24 hours
-- You can request a new verification email from the login page
-
-## 🔐 Logging In
-
-### Standard Login Process
-
-#### Step 1: Navigate to Login
-1. Go to the[Rustelo](/) homepage
-2. Click **"Sign In"** or **"Login"**
-3. You'll see the login form
-
-#### Step 2: Enter Credentials
-
-```
-┌─────────────────────────────────────┐
-│ Welcome Back │
-├─────────────────────────────────────┤
-│ Email: [________________] │
-│ Password: [________________] │
-│ │
-│ □ Remember me │
-│ │
-│ [ Sign In ] │
-│ │
-│ Forgot password? | Create account │
-└─────────────────────────────────────┘
-```
-
-#### Login Options
-
-**Email/Username**
-- Enter your registered email address
-- Or use your username
-- Case-insensitive
-
-**Password**
-- Enter your account password
-- Case-sensitive
-- Use the exact password you created
-
-**Remember Me**
-- Stay logged in for 30 days
-- Only use on trusted devices
-- Automatically logs you out after inactivity
-
-#### Step 3: Successful Login
-After successful login, you'll be redirected to:
-- Your dashboard (default)
-- The page you were trying to access
-- Your last visited page
-
-### Login Troubleshooting
-
-#### Common Login Issues
-
-**"Invalid credentials" Error**
-- Double-check email and password spelling
-- Try typing instead of copy-pasting
-- Check if Caps Lock is on
-- Ensure you're using the correct email
-
-**"Account not verified" Error**
-- Check your email for verification link
-- Click "Resend verification email"
-- Check spam folder
-- Contact support if still not received
-
-**"Account locked" Error**
-- Too many failed login attempts
-- Account temporarily locked for security
-- Wait 15 minutes and try again
-- Use password reset if needed
-
-**"Login session expired" Error**
-- Your session timed out
-- Click "Sign In" again
-- Enter your credentials
-- Check "Remember me" to stay logged in longer
-
-## 🔑 Password Management
-
-### Forgotten Password Recovery
-
-#### Step 1: Request Password Reset
-1. Go to the login page
-2. Click **"Forgot password?"**
-3. Enter your email address
-4. Click **"Send Reset Link"**
-
-#### Step 2: Check Your Email
-
-```
-Subject: Reset Your[Rustelo](/) Password
-
-Hello [Your Name],
-
-We received a request to reset your password. Click the link below to create a new password:
-
-[Reset Password]
-
-This link expires in 1 hour. If you didn't request this, please ignore this email.
-
-Thanks,
-The[Rustelo](/) Team
-```
-
-#### Step 3: Create New Password
-1. Click the reset link in your email
-2. Enter your new password
-3. Confirm your new password
-4. Click **"Update Password"**
-5. You'll be automatically logged in
-
-### Changing Your Password
-
-#### While Logged In
-1. Go to **Profile** > **Security Settings**
-2. Click **"Change Password"**
-3. Enter current password
-4. Enter new password
-5. Confirm new password
-6. Click **"Update Password"**
-
-#### Password Change Form
-
-```
-┌─────────────────────────────────────┐
-│ Change Password │
-├─────────────────────────────────────┤
-│ Current: [________________] │
-│ New: [________________] │
-│ Confirm: [________________] │
-│ │
-│ Password Strength: [████████░░] 80% │
-│ │
-│ [ Update Password ] │
-└─────────────────────────────────────┘
-```
-
-## 🛡️ Two-Factor Authentication (2FA)
-
-### What is 2FA?
-Two-Factor Authentication adds an extra layer of security by requiring:
-1. Something you know (password)
-2. Something you have (phone/authenticator app)
-
-### Setting Up 2FA
-
-#### Step 1: Enable 2FA
-1. Go to **Profile** > **Security Settings**
-2. Find **"Two-Factor Authentication"**
-3. Click **"Enable 2FA"**
-
-#### Step 2: Choose Authentication Method
-
-**Authenticator App (Recommended)**
-- Google Authenticator
-- Authy
-- Microsoft Authenticator
-- 1Password
-
-**SMS Text Messages**
-- Receive codes via text
-- Requires phone number
-- Less secure than authenticator apps
-
-#### Step 3: Set Up Authenticator App
-1. Download an authenticator app
-2. Scan the QR code with your app
-3. Enter the 6-digit code from your app
-4. Save your backup codes
-5. Click **"Enable 2FA"**
-
-#### Step 4: Save Backup Codes
-```
-Your 2FA Backup Codes
-Save these codes in a safe place!
-
-1. 123456
-2. 789012
-3. 345678
-4. 901234
-5. 567890
-
-Each code can only be used once.
-```
-
-**Important:**
-- Store backup codes securely
-- Each code works only once
-- Use if you lose your phone
-- Generate new codes periodically
-
-### Using 2FA Login
-
-#### With 2FA Enabled
-1. Enter email and password
-2. You'll see the 2FA prompt
-3. Open your authenticator app
-4. Enter the 6-digit code
-5. Click **"Verify"**
-
-```
-┌─────────────────────────────────────┐
-│ Two-Factor Authentication │
-├─────────────────────────────────────┤
-│ Enter the code from your │
-│ authenticator app: │
-│ │
-│ Code: [______] │
-│ │
-│ [ Verify ] │
-│ │
-│ Lost your device? Use backup code │
-└─────────────────────────────────────┘
-```
-
-#### If You Lose Your Device
-1. Click **"Lost your device?"**
-2. Enter one of your backup codes
-3. Click **"Verify"**
-4. Set up 2FA again with new device
-
-### Disabling 2FA
-1. Go to **Profile** > **Security Settings**
-2. Find **"Two-Factor Authentication"**
-3. Click **"Disable 2FA"**
-4. Enter your password to confirm
-5. Enter 2FA code or backup code
-6. Click **"Disable"**
-
-## 📱 Device Management
-
-### Viewing Connected Devices
-
-Go to **Profile** > **Security Settings** > **Connected Devices**
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Connected Devices │
-├─────────────────────────────────────────────────────────────┤
-│ 💻 Chrome on Windows │
-│ Current session • Last used: Now │
-│ IP: 192.168.1.100 • Location: San Francisco, CA │
-│ │
-│ 📱 Safari on iPhone │
-│ Last used: 2 hours ago │
-│ IP: 10.0.0.50 • Location: San Francisco, CA │
-│ [Sign Out] │
-│ │
-│ 💻 Firefox on Mac │
-│ Last used: 3 days ago │
-│ IP: 192.168.1.102 • Location: San Francisco, CA │
-│ [Sign Out] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Managing Devices
-- **Current Session** - The device you're using now
-- **Sign Out** - Remotely log out from other devices
-- **Sign Out All** - Log out from all devices except current
-- **Device Information** - Browser, OS, location, IP address
-
-### Suspicious Activity
-If you see unfamiliar devices:
-1. Click **"Sign Out"** immediately
-2. Change your password
-3. Enable 2FA if not already active
-4. Review recent account activity
-
-## 🔒 Security Best Practices
-
-### Account Security Checklist
-
-#### Strong Authentication
-- [ ] Use a unique, strong password
-- [ ] Enable two-factor authentication
-- [ ] Regularly update your password
-- [ ] Use a password manager
-- [ ] Don't share your credentials
-
-#### Device Security
-- [ ] Log out from public computers
-- [ ] Don't save passwords on shared devices
-- [ ] Use "Remember me" only on trusted devices
-- [ ] Regularly review connected devices
-- [ ] Keep your devices updated
-
-#### Email Security
-- [ ] Use a secure email provider
-- [ ] Enable 2FA on your email account
-- [ ] Don't forward authentication emails
-- [ ] Check email regularly for security notifications
-- [ ] Report suspicious emails
-
-### Recognizing Phishing Attempts
-
-**Red Flags:**
-- Urgent requests for password/login
-- Generic greetings ("Dear User")
-- Suspicious sender addresses
-- Links to unfamiliar domains
-- Spelling and grammar errors
-- Requests for personal information
-
-**Always:**
-- Type the URL directly in your browser
-- Check the sender's email address
-- Hover over links to see destinations
-- Contact support if unsure
-- Report suspicious emails
-
-### Account Recovery Tips
-
-**Prepare for Recovery:**
-- Keep email account secure
-- Save backup codes safely
-- Update recovery information
-- Note down your username
-- Keep contact information current
-
-**If Locked Out:**
-1. Try password reset first
-2. Use backup codes if 2FA enabled
-3. Contact support with account details
-4. Provide proof of identity if required
-
-## 🎯 Profile & Account Settings
-
-### Account Information
-- **Full Name** - Your display name
-- **Email** - Login email (requires verification to change)
-- **Username** - Unique identifier (cannot be changed)
-- **Joined Date** - When you created your account
-- **Last Login** - Your most recent login time
-
-### Privacy Settings
-- **Profile Visibility** - Who can see your profile
-- **Email Visibility** - Show/hide email address
-- **Activity Status** - Show when you're online
-- **Search Visibility** - Allow others to find you
-
-### Notification Preferences
-- **Email Notifications** - Security alerts, updates
-- **Login Notifications** - New device alerts
-- **Security Notifications** - Suspicious activity alerts
-- **Newsletter** - Product updates and news
-
-## 🔍 Login History & Activity
-
-### Viewing Login History
-
-Go to **Profile** > **Security Settings** > **Login History**
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Login History │
-├─────────────────────────────────────────────────────────────┤
-│ ✅ Successful login │
-│ Today at 2:30 PM • Chrome on Windows │
-│ IP: 192.168.1.100 • San Francisco, CA │
-│ │
-│ ✅ Successful login │
-│ Yesterday at 9:15 AM • Safari on iPhone │
-│ IP: 10.0.0.50 • San Francisco, CA │
-│ │
-│ ❌ Failed login attempt │
-│ 2 days ago at 3:45 AM • Unknown browser │
-│ IP: 203.0.113.1 • Unknown location │
-│ │
-│ ✅ Password changed │
-│ 1 week ago at 11:22 AM • Chrome on Windows │
-│ IP: 192.168.1.100 • San Francisco, CA │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Activity Monitoring
-- **Successful Logins** - Normal access to your account
-- **Failed Attempts** - Someone tried to access your account
-- **Password Changes** - When you updated your password
-- **2FA Changes** - When you modified 2FA settings
-- **Device Management** - Adding/removing devices
-
-### Security Alerts
-You'll receive emails for:
-- New device logins
-- Multiple failed login attempts
-- Password changes
-- 2FA modifications
-- Suspicious activity
-
-## 🛠️ Troubleshooting Authentication
-
-### Common Issues & Solutions
-
-#### Email Verification Problems
-**Issue:** Verification email not received
-**Solutions:**
-1. Check spam/junk folders
-2. Add noreply@rustelo.com to contacts
-3. Wait 5-10 minutes for delivery
-4. Request new verification email
-5. Try different email address
-
-#### 2FA Code Issues
-**Issue:** 2FA codes not working
-**Solutions:**
-1. Check device time is correct
-2. Try the next code generated
-3. Use backup codes
-4. Resync authenticator app
-5. Disable and re-enable 2FA
-
-#### Browser-Specific Issues
-**Issue:** Login not working in browser
-**Solutions:**
-1. Clear browser cache and cookies
-2. Disable browser extensions
-3. Try incognito/private mode
-4. Update browser to latest version
-5. Try different browser
-
-#### Mobile Login Issues
-**Issue:** Can't login on mobile
-**Solutions:**
-1. Check internet connection
-2. Update mobile browser
-3. Try desktop site option
-4. Clear browser data
-5. Restart device
-
-### Getting Help
-
-#### Self-Service Options
-- **Password Reset** - Reset forgotten passwords
-- **Resend Verification** - Get new verification email
-- **Backup Codes** - Access with 2FA backup codes
-- **Device Logout** - Remove suspicious devices
-
-#### Contact Support
-If you can't resolve login issues:
-1. Go to the help center
-2. Submit a support ticket
-3. Include your username/email
-4. Describe the problem clearly
-5. Mention steps you've tried
-
-**Support will ask for:**
-- Your username or email
-- Description of the problem
-- Browser and device information
-- Error messages you see
-- Steps you've already tried
-
-## 🎓 Authentication Tips
-
-### For New Users
-1. **Choose a Strong Password** - Use password manager
-2. **Verify Email Quickly** - Check spam folder
-3. **Enable 2FA Early** - Set up before you need it
-4. **Save Backup Codes** - Store them securely
-5. **Complete Profile** - Add recovery information
-
-### For Regular Users
-1. **Review Login History** - Check monthly
-2. **Update Passwords** - Every 3-6 months
-3. **Manage Devices** - Remove old devices
-4. **Monitor Activity** - Watch for suspicious logins
-5. **Keep Email Secure** - Protect your email account
-
-### For Advanced Users
-1. **Use Hardware Keys** - If supported
-2. **Monitor IP Addresses** - Check for unusual locations
-3. **Set Strong Recovery** - Multiple recovery options
-4. **Regular Security Audits** - Monthly reviews
-5. **Stay Informed** - Follow security best practices
-
-## 🚨 Security Incident Response
-
-### If Your Account is Compromised
-
-#### Immediate Actions
-1. **Change Password** - Use different device if possible
-2. **Enable 2FA** - If not already enabled
-3. **Log Out All Devices** - Remove attacker access
-4. **Check Account Activity** - Review recent changes
-5. **Contact Support** - Report the incident
-
-#### Recovery Steps
-1. **Secure Email Account** - Change email password
-2. **Review Account Settings** - Check for unauthorized changes
-3. **Check Connected Apps** - Remove suspicious connections
-4. **Update Recovery Info** - Ensure you control recovery methods
-5. **Monitor Activity** - Watch for continued suspicious activity
-
-### Prevention Tips
-- Never share your login credentials
-- Use strong, unique passwords
-- Enable 2FA on all accounts
-- Keep devices and browsers updated
-- Be cautious on public WiFi
-- Log out from public computers
-
-## 📚 Next Steps
-
-Now that you understand authentication, explore:
-
-1. **[User Interface Guide](./interface.md)** - Navigate the application
-2. **[Profile Management](./profile.md)** - Customize your account
-3. **[Content Management](./content.md)** - Create and manage content
-4. **[Media Management](./media.md)** - Handle files and images
-5. **[Features Overview](./features/)** - Discover all features
-
-## 🎉 Conclusion
-
-Rustelo's authentication system is designed to keep your account secure while making it easy to access your content. By following the practices in this guide, you'll have a secure, well-managed account.
-
-Remember to:
-- Use strong, unique passwords
-- Enable two-factor authentication
-- Regularly review your account activity
-- Keep your recovery information updated
-- Contact support if you need help
-
-**Stay secure and enjoy using Rustelo!** 🔐✨
\ No newline at end of file
diff --git a/book/users/content.md b/book/users/content.md
deleted file mode 100644
index ff588b9..0000000
--- a/book/users/content.md
+++ /dev/null
@@ -1,814 +0,0 @@
-# Content Management Guide
-
-
-
-
-
-Welcome to the[Rustelo](/) Content Management Guide! This comprehensive guide will help you create, organize, and manage all types of content on the platform with confidence and efficiency.
-
-## 🎯 Overview
-
-Rustelo's content management system is designed to be intuitive, powerful, and flexible. Whether you're writing blog posts, creating documentation, sharing media, or building complex content structures, this guide will help you master every aspect of content creation and management.
-
-## 📝 Getting Started with Content
-
-### Content Types Available
-
-#### Text Content
-- **Articles**: Long-form written content
-- **Blog Posts**: Personal or professional blog entries
-- **Documentation**: Technical or instructional content
-- **Notes**: Quick thoughts and ideas
-- **Comments**: Responses to other content
-
-#### Rich Media Content
-- **Images**: Photos, graphics, illustrations
-- **Videos**: Uploaded or embedded video content
-- **Audio**: Podcasts, recordings, music
-- **Documents**: PDFs, presentations, spreadsheets
-- **Interactive**: Embedded widgets and tools
-
-#### Structured Content
-- **Pages**: Static pages with custom layouts
-- **Collections**: Organized groups of related content
-- **Galleries**: Image and media collections
-- **Lists**: Curated lists and directories
-- **Forms**: Interactive forms and surveys
-
-### Content Creation Workflow
-
-```
-[💡 Idea] → [📝 Draft] → [👀 Review] → [✅ Publish] → [📊 Analyze]
-```
-
-1. **Ideation**: Brainstorm and plan your content
-2. **Creation**: Write, design, or produce your content
-3. **Review**: Edit, proofread, and refine
-4. **Publication**: Share with your audience
-5. **Analysis**: Track performance and engagement
-
-## ✍️ Creating New Content
-
-### Starting a New Post
-
-#### Quick Create Options
-- **+ Button**: Click the main create button
-- **Keyboard Shortcut**: Press `Ctrl+N` (or `Cmd+N` on Mac)
-- **Dashboard**: Use "Create New" from dashboard
-- **Menu**: Select "New Post" from main menu
-
-#### Content Creation Form
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Create New Content [Save Draft]│
-├─────────────────────────────────────────────────────────────┤
-│ Title: [_______________________________________________] │
-│ │
-│ Content Type: [Article ▼] Status: [Draft ▼] │
-│ │
-│ Tags: [tag1] [tag2] [+ Add Tag] │
-│ │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ [B] [I] [U] [📷] [🔗] [📊] [💾] [👁️] │ │
-│ │ │ │
-│ │ Start writing your content here... │ │
-│ │ │ │
-│ │ │ │
-│ │ │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-│ [📂 Featured Image] [⚙️ Advanced Settings] │
-│ │
-│ [Save Draft] [Preview] [Publish] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Content Editor Features
-
-#### Text Formatting Toolbar
-- **B** - Bold text
-- **I** - Italic text
-- **U** - Underline text
-- **S** - Strikethrough text
-- **H** - Headers (H1-H6)
-- **📝** - Lists (ordered/unordered)
-- **💬** - Quotes and callouts
-- **📋** - Code blocks
-- **🔗** - Links and hyperlinks
-
-#### Media Integration
-- **📷** - Insert images
-- **🎥** - Embed videos
-- **🎵** - Add audio files
-- **📊** - Insert charts and graphs
-- **📎** - Attach files
-- **🌐** - Embed external content
-
-#### Advanced Features
-- **🔍** - SEO optimization tools
-- **📅** - Schedule publishing
-- **👥** - Collaboration tools
-- **📊** - Analytics tracking
-- **🔒** - Access control settings
-
-### Writing Tools
-
-#### Auto-Save
-- **Frequency**: Saves every 30 seconds
-- **Visual Indicator**: Shows last saved time
-- **Recovery**: Automatically recovers lost work
-- **Versions**: Maintains version history
-- **Offline**: Works without internet connection
-
-#### Spell Check & Grammar
-- **Real-time**: Checks as you type
-- **Suggestions**: Click to accept corrections
-- **Custom Dictionary**: Add personal words
-- **Language Support**: Multiple languages
-- **Grammar Tips**: Advanced writing suggestions
-
-#### Word Count & Reading Time
-- **Live Counter**: Updates as you type
-- **Reading Time**: Estimated time to read
-- **Character Count**: For social media limits
-- **Target Goals**: Set word count targets
-- **Progress Tracking**: Visual progress indicators
-
-## 🎨 Content Formatting
-
-### Markdown Support
-
-Rustelo supports full Markdown syntax for easy formatting:
-
-#### Basic Syntax
-```markdown
-# Heading 1
-## Heading 2
-### Heading 3
-
-**Bold text**
-*Italic text*
-~~Strikethrough~~
-
-[Link text](https://example.com)
-
-
-- Bullet point 1
-- Bullet point 2
-
-1. Numbered list
-2. Second item
-
-> Quote or callout
-```
-
-#### Advanced Markdown
-```markdown
-| Table Header 1 | Table Header 2 |
-|----------------|----------------|
-| Cell 1 | Cell 2 |
-| Cell 3 | Cell 4 |
-
-```code block```
-
-- [ ] Unchecked task
-- [x] Checked task
-
-:emoji: Support for emojis
-```
-
-### Rich Text Editor
-
-#### Visual Editing Mode
-- **WYSIWYG**: What you see is what you get
-- **Click and Type**: Direct text editing
-- **Drag and Drop**: Move elements easily
-- **Context Menus**: Right-click for options
-- **Keyboard Shortcuts**: Power user features
-
-#### Block-Based Editing
-- **Text Blocks**: Paragraphs, headers, quotes
-- **Media Blocks**: Images, videos, embeds
-- **Layout Blocks**: Columns, spacers, dividers
-- **Interactive Blocks**: Buttons, forms, widgets
-- **Custom Blocks**: User-defined content types
-
-### Content Styling
-
-#### Typography Options
-- **Font Family**: Choose from available fonts
-- **Font Size**: Adjust text size
-- **Line Height**: Control text spacing
-- **Text Alignment**: Left, center, right, justify
-- **Text Color**: Custom color selection
-
-#### Layout Controls
-- **Content Width**: Full, wide, or contained
-- **Margins**: Control spacing around content
-- **Padding**: Internal spacing within elements
-- **Background**: Colors, images, or gradients
-- **Borders**: Add borders and dividers
-
-## 📁 Content Organization
-
-### Categories and Tags
-
-#### Categories
-- **Hierarchical**: Organized in parent-child structure
-- **Primary**: Main topic classification
-- **Single Selection**: One category per post
-- **Navigation**: Used in site navigation
-- **SEO Benefits**: Improves search visibility
-
-#### Tags
-- **Keywords**: Specific topics and terms
-- **Multiple**: Many tags per post allowed
-- **Flexible**: Create tags on the fly
-- **Discovery**: Helps users find related content
-- **Trending**: Shows popular topics
-
-#### Best Practices
-```
-Categories: Broad topics (Tech, Lifestyle, Business)
-Tags: Specific keywords (JavaScript, productivity, startup-tips)
-
-Example:
-Category: Web Development
-Tags: JavaScript, React, Tutorial, Beginner-Friendly
-```
-
-### Content Series and Collections
-
-#### Creating Series
-1. **Plan the Series**: Outline all parts
-2. **Create Landing Page**: Overview of the series
-3. **Link Posts**: Connect related content
-4. **Navigation**: Add series navigation
-5. **Promote**: Market the complete series
-
-#### Collection Management
-- **Curated Content**: Hand-picked related posts
-- **Auto-Collections**: Based on tags or categories
-- **Custom Order**: Arrange content logically
-- **Featured Items**: Highlight important content
-- **Dynamic Updates**: Automatically updated collections
-
-### Content Calendar
-
-#### Planning Features
-- **Calendar View**: Visual content planning
-- **Scheduling**: Plan future publications
-- **Deadlines**: Set writing deadlines
-- **Collaboration**: Team planning tools
-- **Templates**: Reusable content templates
-
-#### Editorial Workflow
-```
-[📝 Idea] → [✍️ Writing] → [👀 Review] → [✅ Approved] → [📅 Scheduled] → [🚀 Published]
-```
-
-- **Draft Stage**: Initial content creation
-- **Review Stage**: Editing and feedback
-- **Approval Stage**: Final approval process
-- **Scheduled Stage**: Queued for publication
-- **Published Stage**: Live and accessible
-
-## 🖼️ Media Management
-
-### Image Handling
-
-#### Uploading Images
-1. **Drag and Drop**: Drag images into editor
-2. **File Picker**: Click to browse files
-3. **Paste**: Copy-paste from clipboard
-4. **URL Import**: Import from web URLs
-5. **Camera**: Take photos directly (mobile)
-
-#### Image Requirements
-- **File Types**: JPG, PNG, GIF, WebP, SVG
-- **Size Limit**: 10MB per image
-- **Dimensions**: No strict limits
-- **Optimization**: Auto-compression available
-- **Alt Text**: Required for accessibility
-
-#### Image Editing Tools
-- **Crop**: Adjust image dimensions
-- **Resize**: Change image size
-- **Filters**: Apply visual effects
-- **Compression**: Optimize file size
-- **Captions**: Add descriptive text
-
-### Video Content
-
-#### Video Upload
-- **File Types**: MP4, MOV, AVI, WebM
-- **Size Limit**: 100MB per video
-- **Duration**: Up to 10 minutes
-- **Quality**: Auto-optimization
-- **Thumbnails**: Auto-generated previews
-
-#### Video Embedding
-- **YouTube**: Direct URL embedding
-- **Vimeo**: Professional video hosting
-- **Wistia**: Business video platform
-- **Custom**: Self-hosted video files
-- **Live Streams**: Real-time video content
-
-### File Attachments
-
-#### Supported File Types
-- **Documents**: PDF, DOC, DOCX, TXT
-- **Spreadsheets**: XLS, XLSX, CSV
-- **Presentations**: PPT, PPTX
-- **Archives**: ZIP, RAR, 7Z
-- **Audio**: MP3, WAV, OGG
-
-#### File Management
-- **Storage Quota**: Track usage limits
-- **Version Control**: Track file versions
-- **Access Control**: Set download permissions
-- **Expiration**: Set file expiry dates
-- **Analytics**: Track download statistics
-
-## 📊 Content Analytics
-
-### Performance Metrics
-
-#### Engagement Metrics
-- **Views**: Total content views
-- **Unique Visitors**: Individual user views
-- **Time on Page**: How long users read
-- **Bounce Rate**: Users who leave quickly
-- **Social Shares**: Shares across platforms
-
-#### Interaction Metrics
-- **Comments**: User discussions
-- **Likes/Reactions**: User appreciation
-- **Bookmarks**: Users saving content
-- **Downloads**: File download counts
-- **Click-through Rate**: Link clicks
-
-### Analytics Dashboard
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Analytics Dashboard [Last 30 Days]│
-├─────────────────────────────────────────────────────────────┤
-│ 📊 Overview │
-│ Total Views: 12,456 ↑ 15% Comments: 234 ↑ 8% │
-│ Unique Visitors: 8,901 ↑ 12% Shares: 156 ↑ 23% │
-├─────────────────────────────────────────────────────────────┤
-│ 🏆 Top Performing Content │
-│ 1. "Getting Started Guide" - 2,345 views │
-│ 2. "Best Practices Tips" - 1,890 views │
-│ 3. "Advanced Techniques" - 1,567 views │
-├─────────────────────────────────────────────────────────────┤
-│ 📈 Growth Trends │
-│ [📊 Graph showing views over time] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### SEO Insights
-
-#### Search Performance
-- **Search Rankings**: Position in search results
-- **Keywords**: Terms driving traffic
-- **Click-through Rate**: Search result clicks
-- **Impressions**: Times shown in search
-- **Search Console**: Google integration
-
-#### SEO Optimization Tools
-- **Title Optimization**: Suggested improvements
-- **Meta Descriptions**: Auto-generated or custom
-- **Keyword Density**: Optimal keyword usage
-- **Readability**: Content readability scores
-- **Schema Markup**: Structured data integration
-
-## 🔒 Content Permissions
-
-### Access Control
-
-#### Visibility Settings
-- **Public**: Anyone can view
-- **Unlisted**: Only with direct link
-- **Private**: Only you can view
-- **Members Only**: Registered users only
-- **Custom**: Specific user groups
-
-#### Permission Levels
-- **View**: Can read content
-- **Comment**: Can add comments
-- **Edit**: Can modify content
-- **Delete**: Can remove content
-- **Manage**: Full administrative control
-
-### Collaboration Features
-
-#### Team Collaboration
-- **Co-authors**: Multiple writers per post
-- **Editors**: Review and edit permissions
-- **Reviewers**: Approval workflow
-- **Contributors**: Limited editing rights
-- **Viewers**: Read-only access
-
-#### Version Control
-- **Revision History**: Track all changes
-- **Compare Versions**: See differences
-- **Restore**: Revert to previous versions
-- **Author Attribution**: Who made changes
-- **Change Notes**: Comments on modifications
-
-## 🚀 Publishing Options
-
-### Publication Settings
-
-#### Publishing Modes
-- **Immediate**: Publish right away
-- **Scheduled**: Set future publish date
-- **Draft**: Save without publishing
-- **Review**: Submit for approval
-- **Private**: Publish privately
-
-#### Publication Workflow
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Publish Content │
-├─────────────────────────────────────────────────────────────┤
-│ Status: [Published ▼] │
-│ │
-│ Visibility: [Public ▼] │
-│ │
-│ Publish Date: [Now ▼] [📅 Schedule] │
-│ │
-│ URL Slug: [my-article-title] │
-│ │
-│ Featured: [☐] Stick to top: [☐] │
-│ │
-│ [Update] [Preview] [Move to Trash] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Distribution Options
-
-#### Social Media Integration
-- **Auto-posting**: Share to social platforms
-- **Custom Messages**: Platform-specific text
-- **Scheduling**: Time social media posts
-- **Analytics**: Track social media performance
-- **Cross-posting**: Multiple platform sharing
-
-#### Email Newsletters
-- **Subscriber Lists**: Email to followers
-- **Custom Templates**: Branded email design
-- **Segmentation**: Target specific audiences
-- **A/B Testing**: Test different approaches
-- **Performance Tracking**: Email analytics
-
-#### RSS Feeds
-- **Auto-generation**: Automatic feed creation
-- **Custom Feeds**: Category-specific feeds
-- **Syndication**: Share content widely
-- **Podcast Feeds**: Audio content distribution
-- **Feed Analytics**: Subscriber tracking
-
-## 🔍 Content Discovery
-
-### Search Optimization
-
-#### Internal Search
-- **Full-text Search**: Search all content
-- **Filters**: Narrow by category, date, author
-- **Suggestions**: Search term suggestions
-- **Related Content**: Show similar articles
-- **Search Analytics**: Popular search terms
-
-#### External SEO
-- **Meta Tags**: Title, description, keywords
-- **Open Graph**: Social media previews
-- **Twitter Cards**: Enhanced Twitter sharing
-- **Schema Markup**: Rich search results
-- **Sitemap**: Search engine indexing
-
-### Content Recommendations
-
-#### Algorithmic Suggestions
-- **Related Articles**: Based on content similarity
-- **Popular Content**: Trending articles
-- **Personalized**: Based on user behavior
-- **Collaborative Filtering**: User-based recommendations
-- **Machine Learning**: AI-powered suggestions
-
-#### Manual Curation
-- **Featured Content**: Editor's picks
-- **Related Links**: Manual content linking
-- **Series Navigation**: Sequential content
-- **Topic Collections**: Curated topic pages
-- **Reading Lists**: Recommended reading
-
-## 🛠️ Content Management Tools
-
-### Bulk Operations
-
-#### Content Actions
-- **Bulk Edit**: Modify multiple posts
-- **Bulk Delete**: Remove multiple items
-- **Bulk Categorize**: Assign categories
-- **Bulk Tag**: Add tags to multiple posts
-- **Bulk Export**: Download content data
-
-#### Import/Export Tools
-- **Content Import**: From other platforms
-- **WordPress Import**: Migrate from WordPress
-- **CSV Import**: Bulk content upload
-- **JSON Export**: Structured data export
-- **Backup Creation**: Full content backup
-
-### Content Templates
-
-#### Template Types
-- **Post Templates**: Pre-formatted layouts
-- **Page Templates**: Static page designs
-- **Email Templates**: Newsletter layouts
-- **Social Templates**: Social media formats
-- **Custom Templates**: User-created designs
-
-#### Template Features
-- **Placeholder Text**: Example content
-- **Dynamic Fields**: Auto-populated data
-- **Reusable Blocks**: Saved content elements
-- **Style Variations**: Different visual options
-- **Template Library**: Shared template collection
-
-## 📱 Mobile Content Management
-
-### Mobile Editor
-
-#### Touch-Optimized Interface
-- **Large Buttons**: Easy touch targets
-- **Swipe Gestures**: Intuitive navigation
-- **Voice Input**: Dictate content
-- **Camera Integration**: Add photos directly
-- **Simplified Tools**: Essential features only
-
-#### Mobile Features
-- **Offline Editing**: Work without internet
-- **Auto-sync**: Sync when connected
-- **Quick Actions**: Fast common tasks
-- **Image Optimization**: Auto-resize for mobile
-- **Responsive Preview**: See mobile layout
-
-### Mobile-First Content
-
-#### Mobile Optimization
-- **Short Paragraphs**: Easy mobile reading
-- **Scannable Headers**: Clear structure
-- **Optimized Images**: Fast loading
-- **Touch-Friendly**: Interactive elements
-- **Thumb Navigation**: Easy one-hand use
-
-## 🎯 Content Strategy Tips
-
-### Planning Your Content
-
-#### Content Audit
-1. **Inventory**: List all existing content
-2. **Performance**: Analyze what works
-3. **Gaps**: Identify missing topics
-4. **Opportunities**: Find improvement areas
-5. **Strategy**: Plan future content
-
-#### Editorial Calendar
-- **Monthly Themes**: Organize by topics
-- **Seasonal Content**: Holiday and event posts
-- **Evergreen Content**: Timeless articles
-- **Trending Topics**: Current events and news
-- **Consistency**: Regular publishing schedule
-
-### Engagement Strategies
-
-#### Building Community
-- **Ask Questions**: Encourage comments
-- **Respond Promptly**: Engage with readers
-- **User-Generated**: Feature reader content
-- **Contests**: Interactive engagement
-- **Polls and Surveys**: Gather feedback
-
-#### Content Promotion
-- **Social Sharing**: Promote across platforms
-- **Email Marketing**: Newsletter inclusion
-- **Internal Linking**: Connect related content
-- **Guest Posting**: Write for other sites
-- **Influencer Outreach**: Partner with others
-
-## 🔧 Troubleshooting Content Issues
-
-### Common Problems
-
-#### Editor Issues
-**Problem**: Editor not loading
-**Solutions**:
-1. Refresh the browser page
-2. Clear browser cache and cookies
-3. Disable browser extensions
-4. Try incognito/private mode
-5. Update browser to latest version
-
-#### Save Issues
-**Problem**: Content not saving
-**Solutions**:
-1. Check internet connection
-2. Verify browser permissions
-3. Try saving smaller sections
-4. Use manual save button
-5. Copy content as backup
-
-#### Formatting Issues
-**Problem**: Formatting not displaying correctly
-**Solutions**:
-1. Check markdown syntax
-2. Use preview mode to test
-3. Clear formatting and reapply
-4. Switch between editor modes
-5. Contact support if persistent
-
-### Performance Issues
-
-#### Large File Uploads
-**Problem**: Files won't upload
-**Solutions**:
-1. Check file size limits
-2. Compress images before upload
-3. Use supported file formats
-4. Split large files into parts
-5. Upload during off-peak hours
-
-#### Slow Loading
-**Problem**: Content loads slowly
-**Solutions**:
-1. Optimize image sizes
-2. Reduce number of images
-3. Use efficient file formats
-4. Enable content caching
-5. Check internet speed
-
-## 📚 Advanced Content Features
-
-### Dynamic Content
-
-#### Personalization
-- **User-Specific**: Content based on user data
-- **Location-Based**: Geographic personalization
-- **Behavior-Driven**: Based on user actions
-- **Time-Sensitive**: Different content by time
-- **Device-Specific**: Mobile vs desktop content
-
-#### Interactive Elements
-- **Forms**: Contact and feedback forms
-- **Polls**: Audience opinion gathering
-- **Quizzes**: Interactive knowledge tests
-- **Calculators**: Useful tools and calculators
-- **Maps**: Location-based content
-
-### Content APIs
-
-#### Headless CMS
-- **API Access**: Programmatic content management
-- **Multi-Platform**: Use content anywhere
-- **Custom Frontends**: Build custom interfaces
-- **Mobile Apps**: Native app integration
-- **Third-Party**: External service integration
-
-#### Webhooks
-- **Real-Time**: Instant notifications
-- **Custom Actions**: Trigger external processes
-- **Integration**: Connect with other tools
-- **Automation**: Automated workflows
-- **Monitoring**: Track content changes
-
-## 📈 Measuring Content Success
-
-### Key Performance Indicators
-
-#### Engagement KPIs
-- **Page Views**: Total content views
-- **Time on Page**: Reader engagement time
-- **Bounce Rate**: Single-page sessions
-- **Social Shares**: Content amplification
-- **Comment Rate**: Reader interaction
-
-#### Business KPIs
-- **Lead Generation**: Contacts acquired
-- **Conversion Rate**: Goals achieved
-- **Revenue Attribution**: Sales from content
-- **Cost Per Acquisition**: Marketing efficiency
-- **Customer Lifetime Value**: Long-term impact
-
-### Analytics Tools
-
-#### Built-in Analytics
-- **Content Dashboard**: Performance overview
-- **Real-Time Stats**: Live visitor tracking
-- **Historical Data**: Long-term trends
-- **Comparison Tools**: Period comparisons
-- **Export Options**: Data download
-
-#### Third-Party Integration
-- **Google Analytics**: Comprehensive web analytics
-- **Social Analytics**: Platform-specific insights
-- **Email Analytics**: Newsletter performance
-- **Heatmaps**: User behavior visualization
-- **A/B Testing**: Content optimization
-
-## 🚨 Content Guidelines & Best Practices
-
-### Content Quality Standards
-
-#### Writing Guidelines
-- **Clear and Concise**: Easy to understand
-- **Well-Structured**: Logical organization
-- **Error-Free**: Proper grammar and spelling
-- **Engaging**: Interesting and valuable
-- **Original**: Unique and authentic content
-
-#### Technical Standards
-- **Mobile-Friendly**: Responsive design
-- **Fast Loading**: Optimized performance
-- **Accessible**: Inclusive for all users
-- **SEO-Optimized**: Search engine friendly
-- **Standards-Compliant**: Web standards adherence
-
-### Content Policies
-
-#### Acceptable Use
-- **Original Content**: No plagiarism
-- **Respectful**: No harassment or hate speech
-- **Legal**: No copyright infringement
-- **Appropriate**: Suitable for all audiences
-- **Factual**: Accurate information
-
-#### Enforcement
-- **Community Guidelines**: Clear rules
-- **Reporting System**: User reporting tools
-- **Review Process**: Content moderation
-- **Appeals Process**: Dispute resolution
-- **Penalties**: Consequences for violations
-
-## 🎉 Content Success Stories
-
-### Best Practices Examples
-
-#### High-Performing Content Types
-- **How-To Guides**: Step-by-step tutorials
-- **Case Studies**: Real-world examples
-- **Lists**: "Top 10" style content
-- **Behind the Scenes**: Process insights
-- **User Stories**: Customer experiences
-
-#### Engagement Strategies That Work
-- **Interactive Content**: Polls, quizzes, surveys
-- **Visual Content**: Images, videos, infographics
-- **Storytelling**: Narrative-driven content
-- **Community Features**: User-generated content
-- **Timely Content**: Current events and trends
-
-## 🔮 Future of Content Management
-
-### Emerging Trends
-
-#### AI-Powered Features
-- **Content Generation**: AI writing assistance
-- **Auto-Optimization**: Automatic SEO improvements
-- **Smart Recommendations**: AI content suggestions
-- **Personalization**: Dynamic content adaptation
-- **Analytics Insights**: AI-driven performance analysis
-
-#### New Content Formats
-- **Interactive Videos**: Clickable video content
-- **AR/VR Content**: Immersive experiences
-- **Voice Content**: Audio-first experiences
-- **Live Content**: Real-time streaming
-- **Collaborative Content**: Multi-author creation
-
-## 📚 Next Steps
-
-Now that you understand content management, explore:
-
-1. **[Media Management](./media.md)** - Handle files and multimedia
-2. **[User Interface Guide](./interface.md)** - Navigate the platform
-3. **[Profile Management](./profile.md)** - Customize your account
-4. **[Features Overview](./features/)** - Discover all platform features
-5. **[Admin Tools](./admin/)** - Advanced management features
-
-## 🎉 Conclusion
-
-Effective content management is key to building a successful online presence. With Rustelo's powerful content management tools, you have everything you need to create, organize, and optimize content that engages your audience and achieves your goals.
-
-Remember to:
-- Plan your content strategy thoughtfully
-- Create high-quality, valuable content consistently
-- Optimize for both users and search engines
-- Engage with your audience regularly
-- Analyze performance and iterate
-
-**Start creating amazing content today!** 🚀✨
diff --git a/book/users/features/README.md b/book/users/features/README.md
deleted file mode 100644
index 2dc193b..0000000
--- a/book/users/features/README.md
+++ /dev/null
@@ -1,173 +0,0 @@
-[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)W[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)[[](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md).[](../../introduction.md)/[](../../introduction.md).[](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)d[](../../introduction.md)u[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)h[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)k[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)'[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md).[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🔐[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)[[](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md).[](../../introduction.md)/[](../../introduction.md).[](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)d[](../../introduction.md)u[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)k[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)g[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)T[](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)-[](../../introduction.md)F[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)([](../../introduction.md)2[](../../introduction.md)F[](../../introduction.md)A[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)y[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)O[](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)g[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)H[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)P[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)p[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)📝[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)s[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)M[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)L[](../../introduction.md)i[](../../introduction.md)b[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)o[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)V[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)E[](../../introduction.md)O[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)p[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)B[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)-[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)p[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)📧[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)-[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)s[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)E[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)N[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)-[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)N[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)E[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)M[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🔍[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)F[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)H[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)📱[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)A[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)p[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)N[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)O[](../../introduction.md)f[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)W[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)T[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)-[](../../introduction.md)F[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🎨[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)P[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)T[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)h[](../../introduction.md)t[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)D[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)r[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)N[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)'[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)L[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)-[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)📊[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)h[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)U[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)P[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🔧[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)s[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)P[](../../introduction.md)I[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)D[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)H[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)i[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md)-[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)d[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🛡[](../../introduction.md)️[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)y[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)D[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)n[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)k[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)k[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)G[](../../introduction.md)D[](../../introduction.md)P[](../../introduction.md)R[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🎯[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)N[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)1[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)2[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)3[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)-[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)-[](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)4[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)E[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)N[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)1[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)[[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)&[](../../introduction.md) [](../../introduction.md)D[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md)][](../../introduction.md)([](../../introduction.md).[](../../introduction.md)/[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md).[](../../introduction.md)m[](../../introduction.md)d[](../../introduction.md))[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)2[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)3[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)m[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)
-[](../../introduction.md)4[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)1[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)P[](../../introduction.md)I[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)2[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)3[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)4[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🆕[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)E[](../../introduction.md)n[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)E[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)-[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)W[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)-[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)I[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)B[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)h[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)E[](../../introduction.md)n[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)p[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🔮[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)p[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)W[](../../introduction.md)e[](../../introduction.md)'[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)u[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)m[](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)H[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)'[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)'[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)V[](../../introduction.md)o[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)I[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)v[](../../introduction.md)o[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)I[](../../introduction.md)-[](../../introduction.md)P[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)g[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)E[](../../introduction.md)n[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)A[](../../introduction.md)d[](../../introduction.md)v[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)A[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)f[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md)f[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)W[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)w[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)💡[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)i[](../../introduction.md)p[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)M[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)f[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)P[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)d[](../../introduction.md)u[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)i[](../../introduction.md)p[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)k[](../../introduction.md)e[](../../introduction.md)y[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)p[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)k[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)b[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)-[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)i[](../../introduction.md)p[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)E[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)2[](../../introduction.md)F[](../../introduction.md)A[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)a[](../../introduction.md)l[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md),[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)w[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)d[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)K[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)O[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)i[](../../introduction.md)p[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)g[](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)z[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)f[](../../introduction.md)i[](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)c[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)o[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🆘[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)H[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)p[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)I[](../../introduction.md)f[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)1[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)S[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)d[](../../introduction.md)o[](../../introduction.md)c[](../../introduction.md)u[](../../introduction.md)m[](../../introduction.md)e[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)U[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md)p[](../../introduction.md)
-[](../../introduction.md)2[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)o[](../../introduction.md)l[](../../introduction.md)u[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)3[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)s[](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)t[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)G[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)p[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)m[](../../introduction.md)
-[](../../introduction.md)4[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)u[](../../introduction.md)m[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)w[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)#[](../../introduction.md)#[](../../introduction.md) [](../../introduction.md)🚀[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)H[](../../introduction.md)a[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)?[](../../introduction.md) [](../../introduction.md)W[](../../introduction.md)e[](../../introduction.md)'[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md):[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)e[](../../introduction.md)q[](../../introduction.md)u[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)F[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)m[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)u[](../../introduction.md)b[](../../introduction.md)m[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)C[](../../introduction.md)o[](../../introduction.md)m[](../../introduction.md)m[](../../introduction.md)u[](../../introduction.md)n[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)V[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)V[](../../introduction.md)o[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)r[](../../introduction.md)o[](../../introduction.md)p[](../../introduction.md)o[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)B[](../../introduction.md)e[](../../introduction.md)t[](../../introduction.md)a[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)T[](../../introduction.md)r[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)e[](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)y[](../../introduction.md)'[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md)F[](../../introduction.md)e[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)y[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)m[](../../introduction.md)*[](../../introduction.md)*[](../../introduction.md) [](../../introduction.md)-[](../../introduction.md) [](../../introduction.md)S[](../../introduction.md)h[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)y[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)o[](../../introduction.md)u[](../../introduction.md)g[](../../introduction.md)h[](../../introduction.md)t[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)n[](../../introduction.md) [](../../introduction.md)e[](../../introduction.md)x[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)n[](../../introduction.md)g[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)-[](../../introduction.md)-[](../../introduction.md)-[](../../introduction.md)
-[](../../introduction.md)
-[](../../introduction.md)*[](../../introduction.md)T[](../../introduction.md)h[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)e[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)u[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)o[](../../introduction.md)v[](../../introduction.md)e[](../../introduction.md)r[](../../introduction.md)v[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)n[](../../introduction.md)e[](../../introduction.md)w[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)a[](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)b[](../../introduction.md)i[](../../introduction.md)l[](../../introduction.md)i[](../../introduction.md)t[](../../introduction.md)i[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)d[](../../introduction.md)d[](../../introduction.md)e[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)o[](../../introduction.md) [](../../introduction.md)R[](../../introduction.md)u[](../../introduction.md)s[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)l[](../../introduction.md)o[](../../introduction.md).[](../../introduction.md) [](../../introduction.md)B[](../../introduction.md)o[](../../introduction.md)o[](../../introduction.md)k[](../../introduction.md)m[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)t[](../../introduction.md)h[](../../introduction.md)i[](../../introduction.md)s[](../../introduction.md) [](../../introduction.md)p[](../../introduction.md)a[](../../introduction.md)g[](../../introduction.md)e[](../../introduction.md) [](../../introduction.md)a[](../../introduction.md)n[](../../introduction.md)d[](../../introduction.md) [](../../introduction.md)c[](../../introduction.md)h[](../../introduction.md)e[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)b[](../../introduction.md)a[](../../introduction.md)c[](../../introduction.md)k[](../../introduction.md) [](../../introduction.md)r[](../../introduction.md)e[](../../introduction.md)g[](../../introduction.md)u[](../../introduction.md)l[](../../introduction.md)a[](../../introduction.md)r[](../../introduction.md)l[](../../introduction.md)y[](../../introduction.md) [](../../introduction.md)f[](../../introduction.md)o[](../../introduction.md)r[](../../introduction.md) [](../../introduction.md)u[](../../introduction.md)p[](../../introduction.md)d[](../../introduction.md)a[](../../introduction.md)t[](../../introduction.md)e[](../../introduction.md)s[](../../introduction.md)*[](../../introduction.md)
\ No newline at end of file
diff --git a/book/users/features/auth.md b/book/users/features/auth.md
deleted file mode 100644
index 1d1e227..0000000
--- a/book/users/features/auth.md
+++ /dev/null
@@ -1,799 +0,0 @@
-# Authentication & Security Features
-
-
-
-
-
-Welcome to the Rustelo Authentication & Security Features Guide! This comprehensive guide covers all the security features available to keep your account safe and secure while providing a smooth user experience.
-
-## 🎯 Overview
-
-Rustelo's authentication system is built with security-first principles, offering multiple layers of protection while maintaining ease of use. From basic password security to advanced two-factor authentication, we provide enterprise-grade security features accessible to all users.
-
-## 🔐 Core Authentication Features
-
-### Multi-Factor Authentication (MFA)
-
-#### Two-Factor Authentication (2FA)
-The most effective way to protect your account beyond passwords:
-
-**Authenticator Apps (Recommended)**
-- **Google Authenticator** - Free, reliable, works offline
-- **Authy** - Cloud backup, multi-device sync
-- **Microsoft Authenticator** - Enterprise integration
-- **1Password** - Password manager integration
-- **Bitwarden Authenticator** - Open-source option
-
-**SMS Authentication**
-- **Text Message Codes** - 6-digit codes via SMS
-- **Backup Numbers** - Multiple phone numbers supported
-- **International Support** - Works worldwide
-- **Carrier Independence** - Works with all carriers
-
-**Hardware Keys (Advanced)**
-- **YubiKey Support** - Physical security keys
-- **FIDO2/WebAuthn** - Modern web authentication
-- **USB/NFC Keys** - Multiple connection options
-- **Backup Keys** - Multiple keys for redundancy
-
-#### Setting Up 2FA
-
-**Step-by-Step Setup Process:**
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Enable Two-Factor Authentication │
-├─────────────────────────────────────────────────────────────┤
-│ Step 1: Choose Your Method │
-│ ○ Authenticator App (Recommended) │
-│ ○ SMS Text Messages │
-│ ○ Hardware Security Key │
-│ │
-│ Step 2: Verify Current Password │
-│ Password: [________________] │
-│ │
-│ Step 3: Scan QR Code or Enter Key │
-│ [QR CODE] Manual Entry: ABCD EFGH IJKL MNOP │
-│ │
-│ Step 4: Enter Verification Code │
-│ Code: [______] │
-│ │
-│ Step 5: Save Backup Codes │
-│ [Download] [Print] [Copy to Clipboard] │
-│ │
-│ [Enable 2FA] [Cancel] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-**Backup Codes Management:**
-```
-Your 2FA Backup Codes - Keep These Safe!
-
-1. 123456789 ← Used ✓
-2. 987654321
-3. 456789123
-4. 789123456
-5. 321654987
-6. 654321987
-7. 147258369
-8. 258369147
-9. 369147258
-10. 951753842
-
-⚠️ Important Notes:
-• Each code can only be used once
-• Generate new codes if you run low
-• Store in a secure location (password manager)
-• Don't share these codes with anyone
-```
-
-### Single Sign-On (SSO) Integration
-
-#### Supported Providers
-- **Google** - Gmail and Google Workspace accounts
-- **Microsoft** - Azure AD and Office 365
-- **GitHub** - Developer-focused authentication
-- **LinkedIn** - Professional network integration
-- **Apple** - Sign in with Apple ID
-- **Facebook** - Social media authentication
-
-#### SSO Benefits
-- **Simplified Login** - One click authentication
-- **Centralized Management** - Manage access from one place
-- **Enhanced Security** - Leverage provider's security
-- **Reduced Password Fatigue** - Fewer passwords to remember
-- **Enterprise Integration** - Works with company systems
-
-#### SSO Setup Process
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Connect Social Accounts │
-├─────────────────────────────────────────────────────────────┤
-│ Link your social accounts for easy sign-in: │
-│ │
-│ [🔗 Connect Google] Status: Not Connected │
-│ [🔗 Connect Microsoft] Status: Not Connected │
-│ [🔗 Connect GitHub] Status: ✅ Connected │
-│ [🔗 Connect LinkedIn] Status: Not Connected │
-│ [🔗 Connect Apple] Status: Not Connected │
-│ │
-│ Connected Accounts: │
-│ 🐙 GitHub (john-doe) │
-│ Connected: March 15, 2024 │
-│ Last Used: 2 hours ago │
-│ [Disconnect] [Set as Primary] │
-│ │
-│ ⚠️ Keep at least one login method active │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 🛡️ Password Security Features
-
-### Advanced Password Requirements
-
-#### Smart Password Policies
-- **Length Requirements** - Minimum 8 characters, recommended 12+
-- **Complexity Rules** - Mix of uppercase, lowercase, numbers, symbols
-- **Dictionary Checks** - Prevents common passwords
-- **Personal Info Detection** - Blocks passwords with personal data
-- **Breach Database** - Checks against known compromised passwords
-
-#### Password Strength Indicator
-```
-Create Your Password:
-Password: [MySecureP@ssw0rd2024!]
-
-Strength: ████████████████████░ Excellent (95/100)
-
-✅ 20 characters (8+ required)
-✅ Contains uppercase letters
-✅ Contains lowercase letters
-✅ Contains numbers
-✅ Contains special characters
-✅ Not found in breach databases
-✅ Doesn't contain personal info
-⚠️ Consider avoiding common substitutions (@ for a, 0 for o)
-
-Estimated time to crack: 2.3 trillion years
-```
-
-### Password Management Tools
-
-#### Built-in Password Generator
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Password Generator │
-├─────────────────────────────────────────────────────────────┤
-│ Generated Password: kX9$mN2pQ!7vL#8wE3rY │
-│ │
-│ Options: │
-│ Length: [20 ] characters │
-│ ☑ Uppercase letters (A-Z) │
-│ ☑ Lowercase letters (a-z) │
-│ ☑ Numbers (0-9) │
-│ ☑ Special characters (!@#$%^&*) │
-│ ☐ Exclude similar characters (0, O, l, 1) │
-│ ☐ Exclude ambiguous characters ({}[]()\/~,;.<>) │
-│ │
-│ [Generate New] [Copy Password] [Use This Password] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Password History
-- **Previous Passwords** - Prevents reusing recent passwords
-- **History Limit** - Remembers last 12 passwords
-- **Secure Storage** - Hashed and encrypted storage
-- **Rotation Reminders** - Suggests regular password changes
-- **Compromise Alerts** - Notifies if password appears in breaches
-
-### Password Recovery & Reset
-
-#### Secure Recovery Process
-1. **Identity Verification** - Email or SMS verification
-2. **Security Questions** - Backup verification method
-3. **Time-Limited Links** - Recovery links expire
-4. **IP Tracking** - Monitor recovery attempts
-5. **Notification System** - Alert on recovery actions
-
-#### Recovery Options
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Account Recovery Options │
-├─────────────────────────────────────────────────────────────┤
-│ Primary Recovery: │
-│ 📧 Email: j***e@example.com │
-│ Status: ✅ Verified │
-│ [Change Email] [Verify Again] │
-│ │
-│ Backup Recovery: │
-│ 📱 Phone: +1 (555) ***-*234 │
-│ Status: ✅ Verified │
-│ [Change Number] [Verify Again] │
-│ │
-│ Security Questions: │
-│ Question 1: What was your first pet's name? [Set] │
-│ Question 2: What city were you born in? [Set] │
-│ Question 3: What's your mother's maiden name? [Set] │
-│ │
-│ Recovery Codes: │
-│ Generated: March 1, 2024 │
-│ Remaining: 8 of 10 codes │
-│ [Regenerate Codes] [Download Codes] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 🔍 Session Management
-
-### Active Session Monitoring
-
-#### Session Dashboard
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Active Sessions │
-├─────────────────────────────────────────────────────────────┤
-│ 🖥️ Windows 11 - Chrome 121 │
-│ Current Session │
-│ IP: 192.168.1.100 • San Francisco, CA │
-│ Started: Today at 9:15 AM │
-│ Last Activity: Just now │
-│ │
-│ 📱 iPhone 15 - Safari │
-│ Mobile App │
-│ IP: 10.0.0.50 • San Francisco, CA │
-│ Started: Yesterday at 3:22 PM │
-│ Last Activity: 2 hours ago │
-│ [End Session] │
-│ │
-│ 💻 MacBook Pro - Firefox 122 │
-│ Work Computer │
-│ IP: 203.0.113.45 • New York, NY │
-│ Started: 3 days ago at 11:30 AM │
-│ Last Activity: 6 hours ago │
-│ [End Session] │
-│ │
-│ [End All Other Sessions] [Download Session Log] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Session Security Features
-- **IP Address Tracking** - Monitor login locations
-- **Device Fingerprinting** - Identify unique devices
-- **Geolocation Monitoring** - Track unusual locations
-- **Concurrent Session Limits** - Prevent excessive logins
-- **Idle Timeout** - Automatic logout after inactivity
-
-### Login History & Analytics
-
-#### Detailed Login Records
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Login History (Last 30 Days) │
-├─────────────────────────────────────────────────────────────┤
-│ Filter: [All Activities ▼] [Last 7 Days ▼] [🔍 Search] │
-├─────────────────────────────────────────────────────────────┤
-│ ✅ Successful Login │
-│ Today, 9:15 AM • Chrome on Windows │
-│ IP: 192.168.1.100 • San Francisco, CA │
-│ Method: Email + 2FA │
-│ │
-│ ✅ Successful Login │
-│ Yesterday, 3:22 PM • Safari on iPhone │
-│ IP: 10.0.0.50 • San Francisco, CA │
-│ Method: Email + 2FA │
-│ │
-│ ❌ Failed Login Attempt │
-│ 2 days ago, 2:45 AM • Unknown Browser │
-│ IP: 185.220.101.17 • Moscow, Russia │
-│ Reason: Invalid password (5 attempts) │
-│ Action: IP temporarily blocked │
-│ │
-│ 🔐 Password Changed │
-│ 1 week ago, 11:30 AM • Chrome on Windows │
-│ IP: 192.168.1.100 • San Francisco, CA │
-│ Triggered by: User request │
-│ │
-│ [Export Report] [Set Up Alerts] [Report Suspicious] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Security Analytics
-- **Login Patterns** - Track normal vs unusual activity
-- **Geographic Analysis** - Map of login locations
-- **Device Recognition** - Known vs new devices
-- **Time Analysis** - Unusual login times
-- **Threat Intelligence** - Known malicious IP addresses
-
-## 🚨 Security Alerts & Monitoring
-
-### Real-Time Security Alerts
-
-#### Alert Types
-- **New Device Login** - First-time device access
-- **Unusual Location** - Login from new geographic location
-- **Failed Login Attempts** - Multiple incorrect passwords
-- **Password Breach** - Password found in data breaches
-- **Account Changes** - Security settings modifications
-
-#### Alert Delivery Methods
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Security Alert Preferences │
-├─────────────────────────────────────────────────────────────┤
-│ Alert Types: │
-│ ☑ New device logins │
-│ ☑ Unusual location access │
-│ ☑ Multiple failed login attempts │
-│ ☑ Password security warnings │
-│ ☑ Account setting changes │
-│ ☑ Suspicious activity detection │
-│ │
-│ Delivery Methods: │
-│ ☑ Email notifications │
-│ ☑ SMS text messages (critical alerts only) │
-│ ☑ In-app notifications │
-│ ☑ Browser push notifications │
-│ ☐ Slack integration │
-│ │
-│ Alert Frequency: │
-│ ○ Immediate (real-time) │
-│ ○ Hourly digest │
-│ ○ Daily summary │
-│ │
-│ [Save Preferences] [Test Alerts] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Automated Security Responses
-
-#### Threat Detection
-- **Brute Force Protection** - Automatic account locking
-- **Suspicious IP Blocking** - Known threat IP addresses
-- **Device Fingerprint Analysis** - Unusual device characteristics
-- **Behavioral Analysis** - Unusual usage patterns
-- **Geographic Anomalies** - Impossible travel detection
-
-#### Response Actions
-```
-Automated Security Response Triggered
-
-Threat Detected: Multiple failed login attempts
-Source IP: 203.0.113.99 (Moscow, Russia)
-Time: March 15, 2024 at 2:45 AM
-
-Actions Taken:
-✅ Account temporarily locked (15 minutes)
-✅ IP address blocked for 24 hours
-✅ Security team notified
-✅ Email alert sent to account owner
-✅ Incident logged for analysis
-
-If this was you:
-• Wait 15 minutes and try again
-• Use account recovery if needed
-• Contact support if problems persist
-
-If this wasn't you:
-• Your account is secure
-• Consider changing your password
-• Enable 2FA if not already active
-```
-
-## 🔒 Privacy & Data Protection
-
-### Data Encryption
-
-#### Encryption Standards
-- **AES-256** - Industry-standard encryption
-- **TLS 1.3** - Secure data transmission
-- **End-to-End** - Client-side encryption options
-- **Key Management** - Secure key storage and rotation
-- **Zero-Knowledge** - Optional zero-knowledge features
-
-#### What We Encrypt
-```
-🔐 Data Encryption Status
-
-✅ Passwords - Salted and hashed (bcrypt)
-✅ Personal Information - AES-256 encryption
-✅ Session Data - Encrypted session storage
-✅ File Uploads - Encrypted at rest
-✅ Database Contents - Full database encryption
-✅ Backups - Encrypted backup storage
-✅ Communications - TLS 1.3 in transit
-✅ API Requests - End-to-end encryption
-
-🔑 Encryption Keys:
-• Unique per user data
-• Rotated automatically
-• Hardware security modules
-• Zero-knowledge options available
-```
-
-### Privacy Controls
-
-#### Data Visibility Settings
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Privacy & Data Controls │
-├─────────────────────────────────────────────────────────────┤
-│ Profile Visibility: │
-│ ○ Public - Anyone can view your profile │
-│ ● Members Only - Registered users only │
-│ ○ Private - Only you can view │
-│ ○ Custom - Specific groups/users │
-│ │
-│ Contact Information: │
-│ ☐ Show email address publicly │
-│ ☐ Allow contact from non-members │
-│ ☑ Show online status │
-│ ☑ Show last active time │
-│ │
-│ Data Collection: │
-│ ☑ Analytics and usage data │
-│ ☐ Marketing communications │
-│ ☑ Security and fraud prevention │
-│ ☐ Third-party integrations │
-│ │
-│ Data Retention: │
-│ Keep my data: [Until account deletion ▼] │
-│ Delete inactive data after: [2 years ▼] │
-│ │
-│ [Save Settings] [Export My Data] [Delete Account] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Data Export & Portability
-- **Complete Data Export** - All your account data
-- **Selective Export** - Choose specific data types
-- **Standard Formats** - JSON, CSV, XML formats
-- **Regular Exports** - Scheduled automatic exports
-- **Secure Delivery** - Encrypted download links
-
-## 🛡️ Advanced Security Features
-
-### API Security
-
-#### API Key Management
-```
-┌─────────────────────────────────────────────────────────────┐
-│ API Key Management │
-├─────────────────────────────────────────────────────────────┤
-│ Active API Keys: │
-│ │
-│ 🔑 Mobile App Integration │
-│ Key: rk_live_****************************abc123 │
-│ Created: March 1, 2024 │
-│ Last Used: 2 hours ago │
-│ Permissions: Read, Write │
-│ [Regenerate] [Revoke] [Edit Permissions] │
-│ │
-│ 🔑 Third-party Analytics │
-│ Key: rk_live_****************************def456 │
-│ Created: February 15, 2024 │
-│ Last Used: 1 day ago │
-│ Permissions: Read Only │
-│ [Regenerate] [Revoke] [Edit Permissions] │
-│ │
-│ [Create New API Key] [View Documentation] │
-│ │
-│ Security Settings: │
-│ ☑ Require HTTPS for all API calls │
-│ ☑ Enable rate limiting (1000 requests/hour) │
-│ ☑ Log all API access │
-│ ☐ Require IP whitelisting │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### OAuth Applications
-- **Third-party App Authorization** - Control app access
-- **Scope Management** - Limit app permissions
-- **Token Lifecycle** - Automatic token expiration
-- **Audit Trail** - Track app usage
-- **Revocation** - Instantly remove app access
-
-### Security Compliance
-
-#### Compliance Standards
-- **SOC 2 Type II** - Security and availability controls
-- **GDPR** - European data protection compliance
-- **CCPA** - California privacy rights compliance
-- **HIPAA** - Healthcare data protection (when applicable)
-- **ISO 27001** - Information security management
-
-#### Audit Features
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Security Audit Log │
-├─────────────────────────────────────────────────────────────┤
-│ Filter: [All Events ▼] [Security Only] [Last 30 Days ▼] │
-├─────────────────────────────────────────────────────────────┤
-│ 🔐 Security Event Log: │
-│ │
-│ 2024-03-15 14:30:22 | Password Changed │
-│ User: john.doe@example.com │
-│ IP: 192.168.1.100 | Browser: Chrome 121 │
-│ Result: Success │
-│ │
-│ 2024-03-15 09:15:33 | 2FA Code Generated │
-│ User: john.doe@example.com │
-│ IP: 192.168.1.100 | Method: Authenticator App │
-│ Result: Success │
-│ │
-│ 2024-03-14 23:45:12 | Failed Login Attempt │
-│ Target: john.doe@example.com │
-│ IP: 203.0.113.99 | Browser: Unknown │
-│ Result: Blocked - Too many attempts │
-│ │
-│ [Export Log] [Set Alert Rules] [Download Report] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 🔧 Security Configuration
-
-### Account Security Settings
-
-#### Security Preferences
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Advanced Security Settings │
-├─────────────────────────────────────────────────────────────┤
-│ Login Security: │
-│ ☑ Require 2FA for all logins │
-│ ☑ Remember trusted devices for 30 days │
-│ ☑ Require password re-entry for sensitive actions │
-│ ☐ Allow login from new countries │
-│ ☑ Block logins from known bad IP addresses │
-│ │
-│ Session Management: │
-│ Session timeout: [4 hours ▼] │
-│ Max concurrent sessions: [5 ▼] │
-│ ☑ End sessions on password change │
-│ ☑ Notify when new session starts │
-│ │
-│ Password Policy: │
-│ Minimum length: [12 characters ▼] │
-│ ☑ Require special characters │
-│ ☑ Check against breach databases │
-│ ☑ Prevent password reuse (last 12) │
-│ Password change frequency: [Every 90 days ▼] │
-│ │
-│ [Save Settings] [Reset to Defaults] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Enterprise Security Features
-
-#### Team Security Management
-- **Organization-wide Policies** - Enforce security standards
-- **Single Sign-On (SSO)** - Enterprise identity integration
-- **User Provisioning** - Automatic account management
-- **Audit Logging** - Comprehensive activity logs
-- **Compliance Reporting** - Automated compliance reports
-
-#### Advanced Threat Protection
-- **Machine Learning Detection** - AI-powered threat detection
-- **Behavioral Analytics** - Unusual activity patterns
-- **Threat Intelligence** - Real-time threat feeds
-- **Incident Response** - Automated threat response
-- **Forensic Analysis** - Detailed security investigations
-
-## 🎓 Security Best Practices
-
-### User Security Guidelines
-
-#### Essential Security Habits
-1. **Use Unique Passwords** - Never reuse passwords across sites
-2. **Enable 2FA Everywhere** - Use 2FA on all important accounts
-3. **Keep Software Updated** - Update browsers and apps regularly
-4. **Verify Login Alerts** - Review all security notifications
-5. **Secure Your Email** - Protect your email account well
-
-#### Password Manager Integration
-```
-Recommended Password Managers:
-
-🔐 1Password
-• Excellent security features
-• Cross-platform support
-• 2FA integration
-• Security audits
-
-🔐 Bitwarden
-• Open source
-• Free tier available
-• Self-hosting option
-• Enterprise features
-
-🔐 Dashlane
-• User-friendly interface
-• Dark web monitoring
-• VPN included
-• Identity theft protection
-
-🔐 LastPass
-• Long-established
-• Good browser integration
-• Family sharing
-• Emergency access
-```
-
-### Security Checklist
-
-#### Monthly Security Review
-```
-□ Review active sessions and devices
-□ Check login history for suspicious activity
-□ Update backup codes if used
-□ Verify recovery information is current
-□ Review connected applications
-□ Check for password breach notifications
-□ Update security questions if needed
-□ Review privacy settings
-□ Clean up old API keys
-□ Check security alert preferences
-```
-
-#### Annual Security Audit
-```
-□ Change master password
-□ Regenerate all backup codes
-□ Review and update security questions
-□ Audit all connected applications
-□ Update emergency contact information
-□ Review data export/backup
-□ Check compliance requirements
-□ Update security training
-□ Review incident response plans
-□ Test account recovery process
-```
-
-## 🚨 Incident Response
-
-### If Your Account is Compromised
-
-#### Immediate Actions
-1. **Change Your Password** - Use a different device if possible
-2. **End All Sessions** - Log out all devices
-3. **Enable 2FA** - If not already active
-4. **Check Account Activity** - Review recent changes
-5. **Contact Support** - Report the incident immediately
-
-#### Recovery Steps
-```
-🚨 Account Compromise Response Plan
-
-Immediate (First 15 minutes):
-✅ Change password from secure device
-✅ End all active sessions
-✅ Enable 2FA if not active
-✅ Check recent account activity
-✅ Secure email account
-
-Short-term (First hour):
-✅ Review and revoke suspicious API keys
-✅ Check connected applications
-✅ Update recovery information
-✅ Contact support team
-✅ Document incident details
-
-Long-term (First 24 hours):
-✅ Monitor account for unusual activity
-✅ Update passwords on related accounts
-✅ Review security practices
-✅ Implement additional security measures
-✅ Consider security training
-```
-
-### Reporting Security Issues
-
-#### Bug Bounty Program
-- **Responsible Disclosure** - Report security vulnerabilities
-- **Bounty Rewards** - Financial rewards for valid reports
-- **Hall of Fame** - Recognition for security researchers
-- **Quick Response** - Fast turnaround on reports
-- **Coordinated Disclosure** - Proper vulnerability handling
-
-#### Contact Information
-```
-🔒 Security Contact Information
-
-For security vulnerabilities:
-📧 security@rustelo.com
-🔒 PGP Key: Available on website
-⏱️ Response time: 24-48 hours
-
-For account security issues:
-📞 Emergency hotline: +1-800-RUSTELO
-💬 Live chat: Available 24/7
-📧 support@rustelo.com
-📱 Mobile app: Emergency support
-
-For compliance questions:
-📧 compliance@rustelo.com
-📄 Privacy officer contact
-📋 Data protection inquiries
-🏛️ Legal department
-```
-
-## 📚 Security Resources
-
-### Educational Materials
-
-#### Security Training
-- **Phishing Awareness** - Recognize and avoid phishing
-- **Password Security** - Creating and managing strong passwords
-- **2FA Setup** - Step-by-step authentication guides
-- **Privacy Protection** - Protecting personal information
-- **Incident Response** - What to do when things go wrong
-
-#### Security Tools
-- **Password Strength Checker** - Test password security
-- **Breach Checker** - Check if accounts are compromised
-- **Security Scorecard** - Rate your security posture
-- **Threat Simulator** - Practice security scenarios
-- **Compliance Checker** - Verify regulatory compliance
-
-### Community & Support
-
-#### Security Community
-- **Security Forum** - Discuss security topics
-- **Expert AMAs** - Ask security professionals
-- **User Groups** - Local security meetups
-- **Webinars** - Regular security training
-- **Newsletter** - Latest security news and tips
-
-#### Professional Services
-- **Security Consulting** - Expert security advice
-- **Penetration Testing** - Professional security testing
-- **Compliance Audits** - Regulatory compliance reviews
-- **Incident Response** - Professional incident handling
-- **Security Training** - Custom training programs
-
-## 🔮 Future Security Features
-
-### Upcoming Enhancements
-
-#### Biometric Authentication
-- **Fingerprint Login** - Touch ID/Windows Hello
-- **Face Recognition** - Face ID/Windows Hello
-- **Voice Recognition** - Voice-based authentication
-- **Behavioral Biometrics** - Typing and usage patterns
-- **Multi-modal** - Combine multiple biometric factors
-
-#### Advanced AI Security
-- **Predictive Threat Detection** - AI-powered threat prediction
-- **Automated Response** - Intelligent threat response
-- **User Behavior Analysis** - Deep learning behavior models
-- **Anomaly Detection** - Advanced anomaly identification
-- **Risk Scoring** - Dynamic risk assessment
-
-#### Zero-Trust Architecture
-- **Continuous Verification** - Never trust, always verify
-- **Micro-segmentation** - Granular access controls
-- **Context-aware Access** - Location and device-based access
-- **Adaptive Authentication** - Risk-based authentication
-- **Least Privilege** - Minimal necessary permissions
-
-## 🎉 Conclusion
-
-Rustelo's authentication and security features provide enterprise-grade protection while maintaining ease of use. By following the guidelines in this guide and taking advantage of all available security features, you can ensure your account remains secure.
-
-### Key Takeaways
-
-**Essential Security Steps:**
-1. Enable two-factor authentication immediately
-2. Use a strong, unique password
-3. Regularly monitor your account activity
-4. Keep your recovery information updated
-5. Report any suspicious activity promptly
-
-**Advanced Security:**
-- Consider hardware security keys for maximum protection
-- Use enterprise SSO if available
-- Implement organization-wide security policies
-- Regular security audits and training
-- Stay informed about emerging threats
-
-**Remember:** Security is an ongoing process, not a one-time setup. Stay vigilant, keep your security knowledge current, and don't hesitate to contact support if you have questions or concerns.
-
-**Stay secure with Rustelo!** 🔐✨
diff --git a/book/users/features/content.md b/book/users/features/content.md
deleted file mode 100644
index 9f166ac..0000000
--- a/book/users/features/content.md
+++ /dev/null
@@ -1,650 +0,0 @@
-# Content Management Features
-
-
-
-
-
-Welcome to the Rustelo Content Management Features Guide! This comprehensive guide covers all the powerful content creation, editing, and management features available to help you create and organize amazing content efficiently.
-
-## 🎯 Overview
-
-Rustelo's content management system combines the power of modern web technologies with an intuitive user experience. Whether you're writing blog posts, creating documentation, building knowledge bases, or managing media libraries, our feature-rich platform provides everything you need to create compelling content.
-
-## 📝 Content Creation Features
-
-### Advanced Text Editor
-
-#### Rich Text Editing
-Our powerful editor provides a seamless writing experience with professional-grade features:
-
-**Visual Editor Mode**
-- **WYSIWYG Interface** - See exactly how your content will look
-- **Live Preview** - Real-time rendering as you type
-- **Distraction-Free Writing** - Clean, focused writing environment
-- **Split View** - Edit and preview simultaneously
-- **Full-Screen Mode** - Immersive writing experience
-
-**Markdown Support**
-```
-# Headers and Structure
-## Subheadings work perfectly
-### Even third-level headers
-
-**Bold text** and *italic text*
-~~Strikethrough~~ and `inline code`
-
-- Bullet points
-- Nested lists
- - Sub-items
- - More sub-items
-
-1. Numbered lists
-2. With proper numbering
-3. Auto-incrementing
-
-> Blockquotes for emphasis
-> Multiple line quotes
-
-[Links](https://example.com) and 
-
-| Tables | Are | Supported |
-|--------|-----|-----------|
-| Data | In | Columns |
-| Easy | To | Create |
-
-```code blocks```
-With syntax highlighting
-```
-
-#### Editor Toolbar
-```
-┌─────────────────────────────────────────────────────────────┐
-│ [B] [I] [U] [S] [H▼] [🎨] [📋] [🔗] [📷] [📊] [💾] [👁️] [📱] │
-├─────────────────────────────────────────────────────────────┤
-│ │
-│ # Your Content Title Here │
-│ │
-│ Start writing your amazing content... │
-│ │
-│ The editor supports **bold**, *italic*, and even │
-│ [links](https://example.com) with live preview. │
-│ │
-│ - Add bullet points │
-│ - Create lists easily │
-│ - Insert images and media │
-│ │
-│ > Use blockquotes for emphasis │
-│ │
-│ ``` │
-│ Code blocks with syntax highlighting │
-│ ``` │
-│ │
-└─────────────────────────────────────────────────────────────┘
-```
-
-**Toolbar Features:**
-- **B** - Bold text formatting
-- **I** - Italic text formatting
-- **U** - Underline text
-- **S** - Strikethrough text
-- **H▼** - Heading levels (H1-H6)
-- **🎨** - Text and background colors
-- **📋** - Lists and formatting
-- **🔗** - Insert/edit links
-- **📷** - Add images and media
-- **📊** - Insert tables and charts
-- **💾** - Save/auto-save
-- **👁️** - Preview mode
-- **📱** - Mobile preview
-
-### Content Templates
-
-#### Template Library
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Templates │
-├─────────────────────────────────────────────────────────────┤
-│ 📝 Blog Post Templates: │
-│ • How-To Guide Template │
-│ • Product Review Template │
-│ • News Article Template │
-│ • Personal Story Template │
-│ │
-│ 📚 Documentation Templates: │
-│ • API Documentation │
-│ • User Manual Template │
-│ • FAQ Page Template │
-│ • Troubleshooting Guide │
-│ │
-│ 💼 Business Templates: │
-│ • Press Release Template │
-│ • Case Study Template │
-│ • White Paper Template │
-│ • Product Announcement │
-│ │
-│ [Create Custom Template] [Import Template] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Custom Template Creation
-- **Save Current Content** - Turn any post into a template
-- **Template Variables** - Placeholder text and fields
-- **Reusable Blocks** - Common sections and components
-- **Team Templates** - Share templates with team members
-- **Template Categories** - Organize by purpose or topic
-
-### Content Scheduling
-
-#### Publishing Schedule
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Calendar [Month ▼] [2024 ▼]│
-├─────────────────────────────────────────────────────────────┤
-│ Sun Mon Tue Wed Thu Fri Sat │
-├─────────────────────────────────────────────────────────────┤
-│ 1 2 3 4 5 6 7 │
-│ 📝 📷 📝 │
-│ │
-│ 8 9 10 11 12 13 14 │
-│ 📝 📹 📝 📄 │
-│ │
-│ 15 16 17 18 19 20 21 │
-│ 📝 📝 📷 │
-│ │
-│ 22 23 24 25 26 27 28 │
-│ 📝 📹 📝 │
-│ │
-├─────────────────────────────────────────────────────────────┤
-│ Legend: 📝 Blog Post 📷 Gallery 📹 Video 📄 Document │
-│ │
-│ Upcoming Publications: │
-│ • "Getting Started Guide" - Tomorrow at 9:00 AM │
-│ • "Feature Update" - March 18 at 2:00 PM │
-│ • "User Spotlight" - March 20 at 10:00 AM │
-│ │
-│ [Schedule New Content] [View Queue] [Bulk Actions] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Scheduling Features
-- **Future Publishing** - Set exact date and time
-- **Recurring Content** - Automatically schedule repeating posts
-- **Time Zone Support** - Schedule across different time zones
-- **Social Media Integration** - Auto-post to social platforms
-- **Email Notifications** - Alert when content is published
-
-## 🎨 Content Design & Layout
-
-### Visual Content Builder
-
-#### Block-Based Editing
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Blocks [+ Add Block] │
-├─────────────────────────────────────────────────────────────┤
-│ [📝 Text Block] │
-│ This is a text block with rich formatting options... │
-│ [↕ Move] [⚙️ Settings] [🗑️ Delete] │
-├─────────────────────────────────────────────────────────────┤
-│ [📷 Image Block] │
-│ [🖼️ Beautiful landscape image] │
-│ Caption: "Sunset over the mountains" │
-│ [↕ Move] [⚙️ Settings] [🗑️ Delete] │
-├─────────────────────────────────────────────────────────────┤
-│ [📊 Two-Column Block] │
-│ ┌─────────────────┬─────────────────┐ │
-│ │ Left Column │ Right Column │ │
-│ │ Content here... │ More content... │ │
-│ └─────────────────┴─────────────────┘ │
-│ [↕ Move] [⚙️ Settings] [🗑️ Delete] │
-├─────────────────────────────────────────────────────────────┤
-│ [🎥 Video Block] │
-│ [▶️ Product Demo Video] │
-│ Auto-play: Off | Controls: On │
-│ [↕ Move] [⚙️ Settings] [🗑️ Delete] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Available Block Types
-- **Text Blocks** - Paragraphs, headers, quotes
-- **Media Blocks** - Images, videos, audio, galleries
-- **Layout Blocks** - Columns, spacers, dividers, containers
-- **Interactive Blocks** - Buttons, forms, polls, maps
-- **Social Blocks** - Social media embeds, share buttons
-- **Code Blocks** - Syntax-highlighted code snippets
-- **Table Blocks** - Data tables with sorting and filtering
-- **Chart Blocks** - Graphs, charts, and visualizations
-
-### Responsive Design
-
-#### Multi-Device Preview
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Responsive Preview [💻] [📱] [⌚] [🖥️] │
-├─────────────────────────────────────────────────────────────┤
-│ Desktop (1920×1080) │ Mobile (375×667) │
-│ ┌─────────────────────────┐ │ ┌───────────────┐ │
-│ │ # Your Article Title │ │ │ # Your Article │ │
-│ │ │ │ │ Title │ │
-│ │ [Image] Text content │ │ │ │ │
-│ │ flows beside │ │ │ [Image] │ │
-│ │ the image in │ │ │ │ │
-│ │ two columns │ │ │ Text content │ │
-│ │ │ │ │ stacks below │ │
-│ │ [Button] [Button] │ │ │ the image │ │
-│ └─────────────────────────┘ │ │ │ │
-│ │ │ [Button] │ │
-│ │ │ [Button] │ │
-│ │ └───────────────┘ │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Responsive Features
-- **Automatic Adaptation** - Content adjusts to screen size
-- **Custom Breakpoints** - Set specific device behaviors
-- **Mobile-First Design** - Optimized for mobile devices
-- **Touch-Friendly** - Large buttons and touch targets
-- **Fast Loading** - Optimized images and lazy loading
-
-### Content Styling
-
-#### Style Customization
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Styling Options │
-├─────────────────────────────────────────────────────────────┤
-│ Typography: │
-│ Font Family: [Inter ▼] │
-│ Font Size: [16px ▼] │
-│ Line Height: [1.6 ▼] │
-│ Text Color: [#333333] [🎨] │
-│ │
-│ Layout: │
-│ Content Width: [○ Full ● Contained ○ Wide] │
-│ Margins: [Normal ▼] │
-│ Spacing: [Default ▼] │
-│ │
-│ Colors & Branding: │
-│ Primary Color: [#007cba] [🎨] │
-│ Secondary Color: [#6c757d] [🎨] │
-│ Background: [#ffffff] [🎨] │
-│ Accent Color: [#28a745] [🎨] │
-│ │
-│ Custom CSS: │
-│ [Enable custom CSS editor] │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ .my-custom-style { │ │
-│ │ color: #007cba; │ │
-│ │ font-weight: bold; │ │
-│ │ } │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-│ [Apply Styles] [Preview Changes] [Reset to Default] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 📁 Content Organization Features
-
-### Advanced Categorization
-
-#### Hierarchical Categories
-```
-📁 Content Categories
-├── 📝 Blog
-│ ├── 🚀 Product Updates
-│ ├── 💡 Tips & Tricks
-│ ├── 📰 Company News
-│ └── 👥 Team Stories
-├── 📚 Documentation
-│ ├── 🔧 Getting Started
-│ ├── 📖 User Guides
-│ ├── 🔌 API Reference
-│ └── ❓ FAQ
-├── 🎥 Media
-│ ├── 📹 Videos
-│ ├── 📷 Photo Galleries
-│ ├── 🎵 Audio Content
-│ └── 📊 Presentations
-└── 📄 Resources
- ├── 📑 White Papers
- ├── 📈 Case Studies
- ├── 🎯 Templates
- └── 🔗 External Links
-```
-
-#### Smart Tagging System
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Tags │
-├─────────────────────────────────────────────────────────────┤
-│ Current Tags: [tutorial] [beginner] [javascript] [web-dev] │
-│ │
-│ Tag Suggestions: │
-│ Based on content analysis: │
-│ + [html] + [css] + [frontend] + [coding] │
-│ │
-│ Popular Tags: │
-│ [javascript] 234 posts [tutorial] 189 posts │
-│ [web-dev] 156 posts [beginner] 145 posts │
-│ [react] 134 posts [node.js] 98 posts │
-│ │
-│ Create New Tag: [________________] [+ Add] │
-│ │
-│ Tag Management: │
-│ [View All Tags] [Merge Tags] [Bulk Edit] [Export List] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Auto-Categorization
-- **AI-Powered Suggestions** - Smart category recommendations
-- **Content Analysis** - Automatic tag suggestions
-- **Pattern Recognition** - Learn from your categorization habits
-- **Bulk Categorization** - Apply categories to multiple posts
-- **Category Templates** - Predefined category structures
-
-### Content Series Management
-
-#### Series Creation
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Create Content Series: "Web Development Fundamentals" │
-├─────────────────────────────────────────────────────────────┤
-│ Series Information: │
-│ Title: [Web Development Fundamentals] │
-│ Description: [Complete guide to modern web development...] │
-│ Category: [Documentation > Tutorials] │
-│ Status: [Active ▼] │
-│ │
-│ Series Structure: │
-│ 1. 📝 "Introduction to HTML" [Published] │
-│ 2. 📝 "CSS Fundamentals" [Published] │
-│ 3. 📝 "JavaScript Basics" [Draft] │
-│ 4. 📝 "React Getting Started" [Planned] │
-│ 5. 📝 "Building Your First App" [Planned] │
-│ │
-│ [+ Add Episode] [Reorder] [Auto-Navigation] [Preview] │
-│ │
-│ Series Settings: │
-│ ☑ Auto-generate navigation between episodes │
-│ ☑ Create series landing page │
-│ ☑ Email subscribers when new episode published │
-│ ☐ Restrict access to series subscribers only │
-│ │
-│ [Save Series] [Publish Landing Page] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Series Features
-- **Episode Management** - Organize content in logical order
-- **Auto-Navigation** - Previous/next links between episodes
-- **Progress Tracking** - Show reader progress through series
-- **Landing Pages** - Overview pages for each series
-- **Subscription System** - Allow users to follow specific series
-
-### Content Collections
-
-#### Dynamic Collections
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Smart Collections │
-├─────────────────────────────────────────────────────────────┤
-│ 🔥 Trending This Week │
-│ Auto-collected based on: Views, shares, comments │
-│ 5 articles • Updated daily │
-│ [View Collection] [Edit Rules] │
-│ │
-│ ⭐ Staff Picks │
-│ Manually curated by: Editorial Team │
-│ 12 articles • Updated weekly │
-│ [View Collection] [Add Content] │
-│ │
-│ 🏷️ JavaScript Resources │
-│ Auto-collected based on: Tags [javascript, js, node] │
-│ 34 articles • Updated automatically │
-│ [View Collection] [Edit Rules] │
-│ │
-│ 📚 Beginner Guides │
-│ Auto-collected based on: Tags [beginner, tutorial, guide] │
-│ 23 articles • Updated automatically │
-│ [View Collection] [Edit Rules] │
-│ │
-│ [+ Create New Collection] [Manage All Collections] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Collection Types
-- **Manual Collections** - Hand-picked content
-- **Smart Collections** - Rule-based automatic collections
-- **Tag-Based** - Automatically collect by tags
-- **Category-Based** - Automatically collect by categories
-- **Performance-Based** - Collect by metrics (views, likes, etc.)
-
-## 🔍 Content Discovery Features
-
-### Advanced Search
-
-#### Search Interface
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 🔍 Search Content [____________________________] [🔍 Search] │
-├─────────────────────────────────────────────────────────────┤
-│ Filters: │
-│ Content Type: [All ▼] [Blog Posts] [Documentation] [Media] │
-│ Date Range: [All Time ▼] [Last Week] [Last Month] [Custom] │
-│ Author: [All Authors ▼] [John Doe] [Jane Smith] [Team Bot] │
-│ Category: [All Categories ▼] [Tutorials] [News] [Reviews] │
-│ Tags: [Select Tags...] [javascript] [×] [tutorial] [×] │
-│ Status: [Published ▼] [Draft] [Scheduled] [All] │
-│ │
-│ Sort By: [Relevance ▼] [Date] [Views] [Title] [Author] │
-│ Order: [Descending ▼] [Ascending] │
-│ │
-│ [Apply Filters] [Save Search] [Clear All] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Search Results
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Search Results for "javascript tutorial" (47 found) │
-├─────────────────────────────────────────────────────────────┤
-│ 📝 JavaScript Fundamentals for Beginners │
-│ A comprehensive guide to getting started with JS... │
-│ By John Doe • March 10, 2024 • Tutorial • 1,234 views │
-│ Tags: [javascript] [tutorial] [beginner] [web-dev] │
-│ [Edit] [View] [Analytics] [Duplicate] │
-├─────────────────────────────────────────────────────────────┤
-│ 🎥 JavaScript Arrays Deep Dive │
-│ Video tutorial covering array methods and best... │
-│ By Jane Smith • March 8, 2024 • Video • 892 views │
-│ Tags: [javascript] [arrays] [tutorial] [advanced] │
-│ [Edit] [View] [Analytics] [Duplicate] │
-├─────────────────────────────────────────────────────────────┤
-│ 📚 Modern JavaScript ES2024 Features │
-│ Exploring the latest features in JavaScript ES2024... │
-│ By Tech Team • March 5, 2024 • Documentation • 567 views│
-│ Tags: [javascript] [es2024] [modern] [features] │
-│ [Edit] [View] [Analytics] [Duplicate] │
-│ │
-│ [1] [2] [3] [4] [5] ... [Next] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Search Features
-- **Full-Text Search** - Search through all content
-- **Faceted Search** - Filter by multiple criteria
-- **Saved Searches** - Bookmark frequent searches
-- **Search Analytics** - Track what users search for
-- **Autocomplete** - Suggest searches as you type
-- **Search History** - Remember previous searches
-
-### Content Recommendations
-
-#### AI-Powered Suggestions
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Recommendations │
-├─────────────────────────────────────────────────────────────┤
-│ 🤖 AI Suggestions for "React Hooks Tutorial": │
-│ │
-│ Related Content to Include: │
-│ • "JavaScript Fundamentals" - Foundation knowledge │
-│ • "React Components Basics" - Prerequisites │
-│ • "State Management Guide" - Related concepts │
-│ │
-│ Similar Content (avoid duplication): │
-│ • "React Hooks Deep Dive" - Advanced version │
-│ • "Custom Hooks Tutorial" - Natural follow-up │
-│ • "React State Management" - Overlapping topic │
-│ │
-│ Trending Topics to Consider: │
-│ • "React 18 Features" - Current trending topic │
-│ • "TypeScript with React" - Popular combination │
-│ • "React Testing" - Complementary skill │
-│ │
-│ SEO Opportunities: │
-│ • "React hooks examples" - High search volume │
-│ • "useState vs useEffect" - Common comparison │
-│ • "React hooks best practices" - Evergreen content │
-│ │
-│ [Apply Suggestions] [Ignore] [Learn More] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Recommendation Engine
-- **Content Analysis** - AI analyzes your content
-- **Topic Modeling** - Understand content relationships
-- **User Behavior** - Learn from reader interactions
-- **Trending Topics** - Suggest popular subjects
-- **Gap Analysis** - Identify missing content opportunities
-
-## 📊 Content Analytics & Insights
-
-### Performance Dashboard
-
-#### Content Analytics Overview
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Performance Dashboard [Last 30 Days ▼] │
-├─────────────────────────────────────────────────────────────┤
-│ 📊 Overview Metrics: │
-│ Total Views: 45,678 ↑ 23% Unique Visitors: 28,945 ↑ 18%│
-│ Avg. Time on Page: 3:24 ↑ 12% Bounce Rate: 35% ↓ 8% │
-│ Social Shares: 1,234 ↑ 45% Comments: 567 ↑ 89% │
-│ │
-│ 🏆 Top Performing Content: │
-│ 1. "JavaScript Tutorial" - 5,678 views (↑ 234%) │
-│ 2. "React Best Practices" - 4,321 views (↑ 156%) │
-│ 3. "Web Design Trends" - 3,456 views (↑ 98%) │
-│ │
-│ 📈 Traffic Sources: │
-│ Organic Search: 45% [██████████████████] │
-│ Direct: 23% [████████] │
-│ Social Media: 18% [██████] │
-│ Referrals: 14% [████] │
-│ │
-│ 🎯 Content Goals Progress: │
-│ Monthly Views Target: 78% [███████████████████░░] │
-│ Engagement Rate Goal: 92% [████████████████████] │
-│ Content Publication: 85% [████████████████████░] │
-│ │
-│ [Detailed Report] [Export Data] [Set Goals] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Individual Content Analytics
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Content Analytics: "JavaScript Tutorial for Beginners" │
-├─────────────────────────────────────────────────────────────┤
-│ 📊 Performance Metrics (Last 30 Days): │
-│ Views: 5,678 ↑ 234% Unique Visitors: 4,321 │
-│ Avg. Session: 4:32 Bounce Rate: 28% │
-│ Shares: 123 ↑ 45% Comments: 67 ↑ 89% │
-│ Bookmarks: 234 Downloads: 45 │
-│ │
-│ 📈 Traffic Timeline: │
-│ [Graph showing daily views over 30 days] │
-│ Peak: March 15 (892 views) - Featured on social media │
-│ │
-│ 🌍 Geographic Data: │
-│ United States: 35% United Kingdom: 18% │
-│ Canada: 12% Germany: 8% │
-│ Australia: 7% Other: 20% │
-│ │
-│ 📱 Device Breakdown: │
-│ Desktop: 58% Mobile: 35% Tablet: 7% │
-│ │
-│ 🔍 Search Keywords: │
-│ "javascript tutorial" - 45% of organic traffic │
-│ "learn javascript" - 23% of organic traffic │
-│ "js beginner guide" - 18% of organic traffic │
-│ │
-│ [Detailed Report] [Optimize for SEO] [A/B Test] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### SEO Analysis & Optimization
-
-#### SEO Dashboard
-```
-┌─────────────────────────────────────────────────────────────┐
-│ SEO Analysis: "JavaScript Tutorial for Beginners" │
-├─────────────────────────────────────────────────────────────┤
-│ 🎯 SEO Score: 85/100 (Good) │
-│ │
-│ ✅ Strengths: │
-│ • Title tag optimized (52 characters) │
-│ • Meta description present (148 characters) │
-│ • Header structure (H1, H2, H3) properly used │
-│ • Images have alt text │
-│ • Internal links present (8 links) │
-│ • Mobile-friendly design │
-│ • Fast loading speed (2.1s) │
-│ │
-│ ⚠️ Improvements Needed: │
-│ • Add more internal links (recommend 12-15) │
-│ • Optimize images (3 images could be compressed) │
-│ • Add schema markup for better rich snippets │
-│ • Consider adding FAQ section │
-│ │
-│ 🔍 Keyword Analysis: │
-│ Primary: "javascript tutorial" - Density: 1.2% ✅ │
-│ Secondary: "learn javascript" - Density: 0.8% ✅ │
-│ Related: "js basics" - Density: 0.5% ⚠️ (increase) │
-│ │
-│ 📈 SERP Position: │
-│ "javascript tutorial": #3 ↑2 (Google) │
-│ "learn javascript": #7 ↓1 (Google) │
-│ "js beginner guide": #12 ↑5 (Google) │
-│ │
-│ [Apply Suggestions] [Keyword Research] [Competitor Analysis] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### SEO Tools
-- **Keyword Research** - Find optimal keywords
-- **Competitor Analysis** - Compare with similar content
-- **Schema Markup** - Add structured data automatically
-- **Meta Tag Optimization** - Suggest optimal meta tags
-- **Internal Linking** - Smart internal link suggestions
-- **Page Speed Analysis** - Performance optimization tips
-
-### A/B Testing Features
-
-#### Content Testing
-```
-┌─────────────────────────────────────────────────────────────┐
-│ A/B Test: "JavaScript Tutorial" Title Optimization │
-├─────────────────────────────────────────────────────────────┤
-│ Test Status: Running (Day 5 of 14) │
-│ Confidence Level: 78% (needs 95% to conclude) │
-│ │
-│ Variant A (Control): "JavaScript Tutorial for Beginners" │
-│ Visitors: 1,234 CTR: 12.3% Time on Page: 4:32 │
-│ Bounce Rate: 28% Conversions: 45 │
-│ │
-│ Variant B (Test): "Learn JavaScript from Zero to Hero" │
-│ Visitors: 1,198 CTR: 15.7% ↑28% Time on Page: 5:11 │
-│ Bounce Rate: 22% ↓21% Conversions: 67 ↑49% │
-│
diff --git a/book/users/features/email.md b/book/users/features/email.md
deleted file mode 100644
index 61c78ec..0000000
--- a/book/users/features/email.md
+++ /dev/null
@@ -1,769 +0,0 @@
-# Email & Notifications Features
-
-
-
-
-
-Welcome to the Rustelo Email & Notifications Features Guide! This comprehensive guide covers all the email communication and notification features available to keep you connected and informed about your account activity.
-
-## 🎯 Overview
-
-Rustelo's email and notification system is designed to keep you informed without overwhelming you. From account security alerts to content updates, our intelligent notification system ensures you get the right information at the right time through your preferred channels.
-
-## 📧 Email System Features
-
-### Email Notifications
-
-#### Account Security Emails
-Essential security communications to protect your account:
-
-**Login Alerts**
-```
-Subject: New sign-in to your Rustelo account
-
-Hello John,
-
-We noticed a new sign-in to your account:
-
-Device: Chrome on Windows 11
-Location: San Francisco, CA, USA
-IP Address: 192.168.1.100
-Time: March 15, 2024 at 2:30 PM PST
-
-If this was you, no action is needed. If you don't recognize this
-activity, please secure your account immediately:
-
-[Secure My Account] [Contact Support]
-
-This is an automated security email. Please don't reply to this message.
-
-Best regards,
-The Rustelo Security Team
-```
-
-**Password Change Confirmations**
-- Immediate confirmation when password is changed
-- Instructions if change was unauthorized
-- Contact information for support
-- Account recovery options
-- Security recommendations
-
-**Two-Factor Authentication Updates**
-- 2FA enabled/disabled notifications
-- Backup code generation alerts
-- Device authorization confirmations
-- Security key registration notices
-- Recovery method updates
-
-#### Content & Activity Emails
-
-**Publishing Notifications**
-```
-Subject: Your content "JavaScript Tutorial" is now live!
-
-Hello John,
-
-Great news! Your content has been successfully published:
-
-📝 "JavaScript Tutorial for Beginners"
-Published: March 15, 2024 at 3:00 PM
-Views in first hour: 127
-Initial engagement: 23 likes, 8 comments
-
-[View Content] [Check Analytics] [Share on Social]
-
-Keep up the great work!
-
-The Rustelo Team
-```
-
-**Comment & Interaction Alerts**
-- New comments on your content
-- Likes and reactions notifications
-- Mentions in comments or content
-- Content shares and referrals
-- Follower activity updates
-
-**Weekly/Monthly Summaries**
-```
-Subject: Your Rustelo Weekly Summary - March 15, 2024
-
-Hello John,
-
-Here's what happened with your content this week:
-
-📊 Performance Highlights:
-• Total views: 2,456 (↑ 23% from last week)
-• New followers: 34
-• Comments received: 67
-• Content published: 3 posts
-
-🏆 Top Performing Content:
-1. "React Hooks Guide" - 1,234 views
-2. "CSS Grid Tutorial" - 891 views
-3. "JavaScript Tips" - 567 views
-
-🎯 Goals Progress:
-• Monthly views: 78% complete (7,890 / 10,000)
-• Engagement rate: 4.2% (target: 5%)
-• Publishing schedule: On track
-
-[View Full Report] [Update Goals]
-
-Happy creating!
-The Rustelo Team
-```
-
-### Email Preferences
-
-#### Notification Categories
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email Notification Preferences │
-├─────────────────────────────────────────────────────────────┤
-│ 🔒 Security & Account (Required): │
-│ ☑ Login alerts from new devices │
-│ ☑ Password changes │
-│ ☑ Two-factor authentication updates │
-│ ☑ Suspicious activity warnings │
-│ │
-│ 📝 Content & Publishing: │
-│ ☑ Content publishing confirmations │
-│ ☑ Comment notifications │
-│ ☐ Like and reaction alerts │
-│ ☑ Mention notifications │
-│ ☐ Content performance milestones │
-│ │
-│ 📊 Analytics & Reports: │
-│ ☑ Weekly summary reports │
-│ ☐ Monthly analytics digest │
-│ ☐ Goal achievement notifications │
-│ ☐ Traffic spike alerts │
-│ │
-│ 🎯 Marketing & Updates: │
-│ ☐ Product updates and announcements │
-│ ☐ Feature tutorials and tips │
-│ ☐ Community highlights │
-│ ☐ Special offers and promotions │
-│ │
-│ ⏰ Frequency Settings: │
-│ Immediate: Security alerts │
-│ Hourly digest: [Comments and interactions ▼] │
-│ Daily digest: [Performance summaries ▼] │
-│ Weekly digest: [Analytics reports ▼] │
-│ │
-│ [Save Preferences] [Preview Email] [Unsubscribe All] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Email Delivery Options
-- **Immediate** - Critical alerts sent right away
-- **Hourly Digest** - Non-urgent notifications batched
-- **Daily Summary** - Daily activity roundup
-- **Weekly Report** - Comprehensive weekly overview
-- **Custom Schedule** - Set your own delivery times
-
-### Email Templates & Customization
-
-#### Template System
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email Template Customization │
-├─────────────────────────────────────────────────────────────┤
-│ Template: Welcome Email │
-│ │
-│ Subject Line: │
-│ [Welcome to {{site_name}}, {{user_name}}!] │
-│ │
-│ Email Content: │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ Hello {{user_name}}, │ │
-│ │ │ │
-│ │ Welcome to {{site_name}}! We're excited to have you │ │
-│ │ join our community of content creators. │ │
-│ │ │ │
-│ │ Here's what you can do next: │ │
-│ │ • Complete your profile │ │
-│ │ • Create your first post │ │
-│ │ • Explore our features │ │
-│ │ │ │
-│ │ [Get Started] [View Tutorial] │ │
-│ │ │ │
-│ │ If you have questions, we're here to help! │ │
-│ │ │ │
-│ │ Best regards, │ │
-│ │ The {{site_name}} Team │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-│ Available Variables: │
-│ {{user_name}} {{user_email}} {{site_name}} {{site_url}} │
-│ {{date}} {{time}} {{content_count}} {{follower_count}} │
-│ │
-│ [Preview Email] [Send Test] [Save Template] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Branding Options
-- **Custom Logo** - Add your brand logo to emails
-- **Color Scheme** - Match your brand colors
-- **Typography** - Choose fonts that match your style
-- **Footer Content** - Custom footer with contact info
-- **Header Design** - Customize email header layout
-
-### Email Analytics
-
-#### Delivery Metrics
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email Analytics Dashboard │
-├─────────────────────────────────────────────────────────────┤
-│ 📊 Email Performance (Last 30 Days): │
-│ │
-│ Total Emails Sent: 12,456 │
-│ Delivery Rate: 98.7% ↑ 0.3% │
-│ Open Rate: 42.3% ↑ 2.1% │
-│ Click Rate: 8.7% ↑ 1.2% │
-│ Unsubscribe Rate: 0.8% ↓ 0.1% │
-│ │
-│ 📈 Top Performing Emails: │
-│ 1. "Weekly Summary" - 67% open rate │
-│ 2. "New Comment Alert" - 54% open rate │
-│ 3. "Security Alert" - 98% open rate │
-│ │
-│ 📱 Device Breakdown: │
-│ Mobile: 58% Desktop: 35% Tablet: 7% │
-│ │
-│ 📅 Best Send Times: │
-│ Tuesday 10 AM: 48% open rate │
-│ Thursday 2 PM: 45% open rate │
-│ Wednesday 9 AM: 43% open rate │
-│ │
-│ [Detailed Report] [A/B Test] [Optimize Send Times] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Email Performance Tracking
-- **Delivery Rates** - Successfully delivered emails
-- **Open Rates** - How many recipients open emails
-- **Click Rates** - Engagement with email content
-- **Bounce Rates** - Failed delivery tracking
-- **Unsubscribe Rates** - Opt-out monitoring
-
-## 🔔 In-App Notifications
-
-### Real-Time Notifications
-
-#### Notification Center
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Notifications [Mark All Read] [Settings] │
-├─────────────────────────────────────────────────────────────┤
-│ 🔔 New comment on "JavaScript Tutorial" │
-│ Sarah Johnson: "Great explanation of closures!" │
-│ 2 minutes ago [Reply] [View] │
-├─────────────────────────────────────────────────────────────┤
-│ 👍 Your post received 10 new likes │
-│ "React Hooks Guide" is gaining traction │
-│ 15 minutes ago [View Post] │
-├─────────────────────────────────────────────────────────────┤
-│ 📈 Traffic milestone reached! │
-│ Your content hit 1,000 total views │
-│ 1 hour ago [View Analytics] │
-├─────────────────────────────────────────────────────────────┤
-│ 🔒 New device login detected │
-│ iPhone from San Francisco, CA │
-│ 3 hours ago [Review] [Secure] │
-├─────────────────────────────────────────────────────────────┤
-│ 📝 Scheduled post published │
-│ "CSS Grid Tutorial" is now live │
-│ 6 hours ago [View] [Share] │
-├─────────────────────────────────────────────────────────────┤
-│ 👥 New follower: Alex Chen │
-│ Started following your content │
-│ 1 day ago [View Profile] │
-│ │
-│ [Load More] [Mark All Read] [Filter Notifications] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Notification Types
-- **Content Interactions** - Comments, likes, shares
-- **Publishing Updates** - Content status changes
-- **Security Alerts** - Account security events
-- **Milestones** - Achievement notifications
-- **System Updates** - Platform announcements
-- **Social Activity** - Follower interactions
-
-### Push Notifications
-
-#### Browser Push Notifications
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Browser Notification Settings │
-├─────────────────────────────────────────────────────────────┤
-│ Status: ✅ Enabled (Chrome on Windows) │
-│ │
-│ Notification Types: │
-│ ☑ New comments on your content │
-│ ☑ Security alerts and login notifications │
-│ ☐ Content performance milestones │
-│ ☐ Daily summary notifications │
-│ ☑ Direct messages from other users │
-│ ☐ Weekly analytics reports │
-│ │
-│ Timing Preferences: │
-│ Quiet Hours: 10:00 PM to 8:00 AM │
-│ Weekend Mode: [Enabled ▼] - Reduced notifications │
-│ Do Not Disturb: [Disabled ▼] │
-│ │
-│ Sound & Appearance: │
-│ Sound: [Default ▼] [Custom] [Silent] │
-│ Duration: [5 seconds ▼] │
-│ Position: [Top Right ▼] │
-│ │
-│ [Test Notification] [Disable All] [Reset to Default] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Mobile App Notifications
-```
-Mobile Push Notification Example:
-
-┌─────────────────────────────────┐
-│ 🔔 Rustelo │
-│ New comment on your post │
-│ "Great tutorial! Thanks for... │
-│ 📝 JavaScript Tutorial │
-│ Just now │
-│ [Reply] [View] │
-└─────────────────────────────────┘
-```
-
-### Notification Preferences
-
-#### Granular Control
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Notification Preferences │
-├─────────────────────────────────────────────────────────────┤
-│ 💬 Content Interactions: │
-│ Comments: [Email + Push ▼] [Email Only] [Push Only] [Off] │
-│ Likes: [Push Only ▼] [Email + Push] [Email Only] [Off] │
-│ Shares: [Email + Push ▼] [Push Only] [Email Only] [Off] │
-│ Mentions: [Email + Push ▼] [Push Only] [Email Only] [Off] │
-│ │
-│ 📊 Performance Updates: │
-│ View milestones: [Push Only ▼] [Email + Push] [Off] │
-│ Engagement spikes: [Email Only ▼] [Push Only] [Off] │
-│ Goal achievements: [Email + Push ▼] [Email Only] [Off] │
-│ │
-│ 🔒 Security & Account: │
-│ Login alerts: [Email + Push ▼] (Cannot be disabled) │
-│ Password changes: [Email + Push ▼] (Cannot be disabled) │
-│ 2FA updates: [Email + Push ▼] (Cannot be disabled) │
-│ Suspicious activity: [Email + Push ▼] (Cannot be disabled) │
-│ │
-│ ⏰ Timing Controls: │
-│ Immediate notifications: [Security only ▼] │
-│ Batch notifications: [Every 2 hours ▼] │
-│ Daily digest time: [9:00 AM ▼] │
-│ Weekly report day: [Monday ▼] │
-│ │
-│ [Save Preferences] [Preview Settings] [Reset to Default] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 📱 Mobile Notifications
-
-### Mobile App Features
-
-#### Native Mobile Notifications
-```
-iOS/Android Notification Settings:
-
-📱 Rustelo Mobile App
-├── 🔔 Allow Notifications: ✅ Enabled
-├── 🔊 Sounds: ✅ Enabled
-├── 🚨 Badges: ✅ Enabled
-├── 🔒 Lock Screen: ✅ Show
-├── 📢 Banners: ✅ Persistent
-├── ⏰ Scheduled Summary: ✅ 9:00 AM
-└── 🌙 Focus Modes: ✅ Respect Do Not Disturb
-
-Notification Categories:
-• Comments & Interactions: Immediate
-• Security Alerts: Critical (Bypasses Focus)
-• Performance Updates: Scheduled Summary
-• System Updates: Weekly Digest
-```
-
-#### Rich Notifications
-- **Interactive Elements** - Reply, like, or view directly
-- **Media Previews** - Image/video thumbnails
-- **Action Buttons** - Quick response options
-- **Progress Indicators** - Upload/publish progress
-- **Grouped Notifications** - Related notifications bundled
-
-### Smart Notification Features
-
-#### Intelligent Timing
-```
-🤖 Smart Notification AI:
-
-Learning Your Patterns:
-• Most active: Weekdays 9 AM - 5 PM
-• Engagement peak: Tuesday & Thursday afternoons
-• Preferred notification time: 10:30 AM
-• Response rate highest: Morning notifications
-
-Adaptive Scheduling:
-✅ Delay non-urgent notifications during busy periods
-✅ Bundle similar notifications during low-activity times
-✅ Prioritize security alerts regardless of timing
-✅ Respect local time zones and working hours
-✅ Learn from your interaction patterns
-
-Current Optimization:
-• Comments: Delivered during your peak engagement hours
-• Analytics: Sent Monday mornings when you typically review
-• Security: Immediate delivery always
-• Social: Bundled into afternoon digest
-```
-
-#### Contextual Notifications
-- **Location-Aware** - Relevant notifications based on location
-- **Device-Aware** - Different notifications per device type
-- **Activity-Aware** - Adjust based on current app usage
-- **Time-Aware** - Respect work hours and time zones
-- **Preference Learning** - Adapt to your interaction patterns
-
-## 🔧 Advanced Email Features
-
-### Email Automation
-
-#### Automated Email Sequences
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email Automation: New User Onboarding │
-├─────────────────────────────────────────────────────────────┤
-│ Trigger: User completes registration │
-│ │
-│ Email Sequence: │
-│ 📧 Email 1: Welcome & Getting Started │
-│ Send: Immediately after registration │
-│ Content: Welcome message, basic setup guide │
-│ CTA: Complete profile, create first post │
-│ │
-│ 📧 Email 2: Feature Introduction │
-│ Send: 3 days after registration │
-│ Content: Platform features overview │
-│ CTA: Explore editor, upload media │
-│ │
-│ 📧 Email 3: Community & Best Practices │
-│ Send: 7 days after registration │
-│ Content: Community guidelines, success tips │
-│ CTA: Join community discussions │
-│ │
-│ 📧 Email 4: Analytics & Growth │
-│ Send: 14 days after registration │
-│ Content: Understanding analytics, growth strategies │
-│ CTA: Check your analytics dashboard │
-│ │
-│ Conditions: │
-│ • Stop if user becomes inactive (no login for 30 days) │
-│ • Skip email 2 if user already created 3+ posts │
-│ • Personalize based on user's content type preferences │
-│ │
-│ [Edit Sequence] [View Analytics] [Test Automation] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Trigger-Based Emails
-- **Milestone Achievements** - Celebrate user accomplishments
-- **Engagement Drops** - Re-engagement campaigns
-- **Content Performance** - Performance-based alerts
-- **Behavior-Based** - Actions trigger specific emails
-- **Date-Based** - Anniversary, reminder emails
-
-### Email Personalization
-
-#### Dynamic Content
-```
-Email Personalization Variables:
-
-User Data:
-• {{user_name}} - "John Doe"
-• {{user_email}} - "john@example.com"
-• {{join_date}} - "March 2024"
-• {{user_timezone}} - "PST"
-• {{user_location}} - "San Francisco, CA"
-
-Content Stats:
-• {{post_count}} - "23 posts"
-• {{total_views}} - "12,456 views"
-• {{follower_count}} - "89 followers"
-• {{engagement_rate}} - "4.2%"
-
-Recent Activity:
-• {{last_post_title}} - "JavaScript Tutorial"
-• {{last_login}} - "2 hours ago"
-• {{top_post_title}} - "React Hooks Guide"
-• {{recent_comment}} - "Great explanation!"
-
-Behavioral Data:
-• {{favorite_category}} - "Tutorials"
-• {{posting_frequency}} - "3 times per week"
-• {{peak_activity_time}} - "Tuesday mornings"
-• {{device_preference}} - "Mobile"
-```
-
-#### A/B Testing for Emails
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email A/B Test: Weekly Summary Subject Lines │
-├─────────────────────────────────────────────────────────────┤
-│ Test Running: Day 3 of 7 │
-│ Sample Size: 2,000 recipients per variant │
-│ │
-│ Variant A (Control): │
-│ Subject: "Your weekly Rustelo summary" │
-│ Open Rate: 34.2% Click Rate: 6.8% │
-│ Recipients: 2,000 Opens: 684 Clicks: 136 │
-│ │
-│ Variant B (Test): │
-│ Subject: "Your content got 1,234 views this week! 📊" │
-│ Open Rate: 47.8% ↑40% Click Rate: 12.3% ↑81% │
-│ Recipients: 2,000 Opens: 956 Clicks: 246 │
-│ │
-│ Statistical Significance: 97% (High Confidence) │
-│ Recommended Action: Deploy Variant B │
-│ │
-│ [Deploy Winner] [Extend Test] [Create New Test] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 🎯 Notification Best Practices
-
-### User Experience Guidelines
-
-#### Notification Frequency Management
-```
-🎯 Smart Frequency Controls:
-
-Daily Limits:
-• Comments: Max 10 notifications
-• Likes/Reactions: Max 5 notifications
-• Security Alerts: No limit (critical)
-• Performance Updates: Max 3 notifications
-
-Batching Rules:
-• Similar notifications grouped together
-• Non-urgent items bundled into digests
-• Time-sensitive alerts sent immediately
-• User-configurable batching preferences
-
-Escalation Logic:
-1. First notification: Immediate
-2. Similar notifications: 1-hour delay
-3. Multiple similar: Batch into digest
-4. User interaction: Reset frequency counter
-```
-
-#### Content Relevance Scoring
-- **Engagement History** - Based on past interactions
-- **Content Preferences** - User's stated interests
-- **Timing Patterns** - When user typically engages
-- **Device Context** - Notification appropriateness for device
-- **Social Signals** - Community engagement levels
-
-### Privacy & Consent
-
-#### Notification Privacy Controls
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Privacy & Data Controls for Notifications │
-├─────────────────────────────────────────────────────────────┤
-│ 🔒 Data Collection for Notifications: │
-│ ☑ Basic engagement metrics (anonymized) │
-│ ☑ Timing preference analysis │
-│ ☐ Location-based notification optimization │
-│ ☐ Cross-device notification synchronization │
-│ ☐ Third-party service integration │
-│ │
-│ 📧 Email Data Handling: │
-│ ☑ Track email opens (for delivery optimization) │
-│ ☑ Track email clicks (for content improvement) │
-│ ☐ Share email metrics with partners │
-│ ☐ Use email data for advertising │
-│ │
-│ 🔔 Notification Content: │
-│ Show in notifications: [Basic info only ▼] │
-│ Options: Full content | Basic info | Title only | Count only│
-│ │
-│ Sensitive content handling: [Extra privacy ▼] │
-│ Options: Standard | Extra privacy | Maximum privacy │
-│ │
-│ 📱 Device Permissions: │
-│ • Camera access: For QR code notifications │
-│ • Microphone access: For voice message alerts │
-│ • Location access: For location-relevant notifications │
-│ • Contacts access: For social notifications │
-│ │
-│ [Save Privacy Settings] [Export Data] [Delete All Data] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Consent Management
-- **Granular Permissions** - Individual consent for each type
-- **Easy Opt-out** - One-click unsubscribe options
-- **Consent History** - Track permission changes
-- **Regular Reminders** - Periodic consent verification
-- **Clear Explanations** - Why each notification type is useful
-
-## 📊 Email & Notification Analytics
-
-### Performance Dashboard
-
-#### Comprehensive Analytics
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Email & Notification Analytics │
-├─────────────────────────────────────────────────────────────┤
-│ 📧 Email Performance (Last 30 Days): │
-│ Sent: 45,678 Delivered: 45,123 (98.8%) │
-│ Opened: 19,205 (42.6%) Clicked: 3,841 (8.5%) │
-│ Unsubscribed: 127 (0.3%) Bounced: 555 (1.2%) │
-│ │
-│ 🔔 Push Notification Performance: │
-│ Sent: 23,456 Delivered: 22,891 (97.6%) │
-│ Clicked: 6,867 (29.3%) Dismissed: 15,024 (64.0%) │
-│ Disabled after: 234 (1.0%) │
-│ │
-│ 📱 In-App Notification Performance: │
-│ Shown: 34,567 Clicked: 12,345 (35.7%) │
-│ Dismissed: 20,123 (58.2%) Ignored: 2,099 (6.1%) │
-│ │
-│ 🎯 Top Performing Notification Types: │
-│ 1. Security alerts: 94% engagement │
-│ 2. Comment notifications: 67% engagement │
-│ 3. Performance milestones: 45% engagement │
-│ 4. Weekly summaries: 38% engagement │
-│ 5. Product updates: 23% engagement │
-│ │
-│ 📈 Engagement Trends: │
-│ Best send time: Tuesday 10:30 AM (52% open rate) │
-│ Worst send time: Friday 6:00 PM (18% open rate) │
-│ Mobile vs Desktop: 62% mobile opens │
-│ │
-│ [Detailed Report] [Optimize Timing] [A/B Test Setup] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Deliverability Monitoring
-
-#### Email Deliverability Health
-```
-📧 Email Deliverability Report:
-
-Sender Reputation: ✅ Excellent (98/100)
-• IP Reputation: Clean
-• Domain Reputation: Excellent
-• Authentication: DKIM ✅ SPF ✅ DMARC ✅
-• List Quality: High (2.1% bounce rate)
-
-Inbox Placement Rates:
-• Gmail: 94% inbox, 5% promotions, 1% spam
-• Outlook: 91% inbox, 7% clutter, 2% spam
-• Yahoo: 89% inbox, 9% bulk, 2% spam
-• Apple Mail: 96% inbox, 3% junk, 1% blocked
-
-Recommendations:
-✅ Maintain current sending practices
-⚠️ Monitor Yahoo delivery (slight decline)
-✅ Continue regular list cleaning
-✅ Keep engagement rates above 20%
-```
-
-## 🛠️ Advanced Configuration
-
-### Developer Integration
-
-#### Webhook Notifications
-```json
-{
- "event": "comment.created",
- "timestamp": "2024-03-15T14:30:00Z",
- "data": {
- "content_id": "post_123",
- "content_title": "JavaScript Tutorial",
- "comment_id": "comment_456",
- "comment_text": "Great explanation!",
- "author": {
- "id": "user_789",
- "name": "Sarah Johnson",
- "email": "sarah@example.com"
- },
- "notification_settings": {
- "email_enabled": true,
- "push_enabled": true,
- "immediate_delivery": true
- }
- }
-}
-```
-
-#### API Integration
-```javascript
-// Email API Example
-const emailAPI = {
- // Send custom notification email
- sendNotification: async (userId, template, data) => {
- const response = await fetch('/api/notifications/email', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({
- user_id: userId,
- template: template,
- data: data,
- priority: 'normal'
- })
- });
- return response.json();
- },
-
- // Get notification preferences
- getPreferences: async (userId) => {
- const response = await fetch(`/api/users/${userId}/notifications`);
- return response.json();
- },
-
- // Update notification settings
- updatePreferences: async (userId, preferences) => {
- const response = await fetch(`/api/users/${userId}/notifications`, {
- method: 'PUT',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify(preferences)
- });
- return response.json();
- }
-};
-```
-
-### Enterprise Features
-
-#### Team Notification Management
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Team Notification Settings │
-├─────────────────────────────────────────────────────────────┤
-│ Organization: TechCorp Inc. │
-│ Team Members: 25 users │
-│ │
-│ 👥 Team-wide Policies: │
-│ ☑ Require security notifications (cannot be disabled) │
-│ ☑ Standardize business hours across team │
-│ ☑ Limit marketing emails to weekly digest │
-│ ☐ Enforce notification frequency limits │
-│ │
-│ 📊 Team Notification Analytics: │
-│ • Average engagement rate:
diff --git a/book/users/features/mobile.md b/book/users/features/mobile.md
deleted file mode 100644
index f9a8ab3..0000000
--- a/book/users/features/mobile.md
+++ /dev/null
@@ -1 +0,0 @@
-# Mobile Experience
diff --git a/book/users/features/search.md b/book/users/features/search.md
deleted file mode 100644
index 75eed59..0000000
--- a/book/users/features/search.md
+++ /dev/null
@@ -1 +0,0 @@
-# Search & Discovery
diff --git a/book/users/interface.md b/book/users/interface.md
deleted file mode 100644
index c358419..0000000
--- a/book/users/interface.md
+++ /dev/null
@@ -1,492 +0,0 @@
-# User Interface Guide
-
-
-
-
-
-Welcome to the[Rustelo](/) User Interface Guide! This comprehensive guide will help you navigate and use all the features of your[Rustelo](/) application with confidence.
-
-## 🎯 Overview
-
-The[Rustelo](/) interface is designed to be intuitive, responsive, and accessible across all devices. Whether you're using a desktop computer, tablet, or mobile phone, you'll have a consistent and enjoyable experience.
-
-## 🏠 Homepage & Navigation
-
-### Main Navigation Bar
-
-The navigation bar is your primary way to move around the application:
-
-```
-[Logo] [Home] [Dashboard] [Content] [Profile] [Settings] [Logout]
-```
-
-#### Navigation Elements:
-- **Home** - Return to the main landing page
-- **Dashboard** - Your personal workspace and overview
-- **Content** - Create, view, and manage content
-- **Profile** - Manage your account settings
-- **Settings** - Application preferences
-- **Logout** - Securely sign out of your account
-
-### Mobile Navigation
-
-On mobile devices, the navigation transforms into a hamburger menu:
-
-```
-[≡] [Logo] [🔔] [👤]
-```
-
-- **≡** - Opens the full navigation menu
-- **🔔** - Notifications (if enabled)
-- **👤** - Quick access to profile
-
-## 📱 Responsive Design
-
-### Desktop Experience
-- **Full sidebar navigation** - Always visible for quick access
-- **Multi-column layouts** - Efficient use of screen space
-- **Keyboard shortcuts** - Power user features
-- **Drag and drop** - Intuitive content management
-
-### Tablet Experience
-- **Collapsible sidebar** - Maximizes content area
-- **Touch-friendly buttons** - Optimized for touch interaction
-- **Swipe gestures** - Navigate between sections
-- **Adaptive layouts** - Adjusts to orientation changes
-
-### Mobile Experience
-- **Bottom navigation** - Easy thumb access
-- **Swipe navigation** - Gesture-based interactions
-- **Optimized forms** - Mobile-first input design
-- **Offline support** - Basic functionality without internet
-
-## 🎨 Interface Elements
-
-### Color Scheme
-
-The[Rustelo](/) interface uses a carefully crafted color palette:
-
-- **Primary Blue** (#3182ce) - Main actions and links
-- **Secondary Gray** (#718096) - Supporting text and borders
-- **Success Green** (#38a169) - Positive feedback and success states
-- **Warning Orange** (#ed8936) - Caution and warning messages
-- **Error Red** (#e53e3e) - Error states and destructive actions
-
-### Typography
-
-- **Headers** - Clear hierarchy with consistent sizing
-- **Body Text** - Readable font with optimal line spacing
-- **Code** - Monospace font for technical content
-- **Links** - Clearly distinguished with hover effects
-
-### Buttons & Controls
-
-#### Primary Actions
-```
-[Save Changes] [Create Post] [Send Message]
-```
-- Blue background with white text
-- Used for main actions on a page
-
-#### Secondary Actions
-```
-[Cancel] [Edit] [View Details]
-```
-- Gray border with blue text
-- Used for supporting actions
-
-#### Destructive Actions
-```
-[Delete] [Remove] [Clear All]
-```
-- Red background or border
-- Used for actions that remove or destroy data
-
-## 🔧 Dashboard Overview
-
-### Dashboard Layout
-
-Your dashboard provides an at-a-glance view of your account:
-
-```
-┌─────────────────┬─────────────────┐
-│ Quick Stats │ Recent Activity│
-├─────────────────┼─────────────────┤
-│ Content │ Notifications │
-│ Overview │ & Messages │
-├─────────────────┼─────────────────┤
-│ Quick Actions │ System Status │
-└─────────────────┴─────────────────┘
-```
-
-### Quick Stats Widget
-- **Total Content** - Number of posts, articles, or items
-- **Views/Engagement** - Traffic and interaction metrics
-- **Storage Used** - File and media storage usage
-- **Account Status** - Current subscription or plan level
-
-### Recent Activity
-- **Latest actions** - Recent posts, edits, and interactions
-- **System updates** - Important notifications about the application
-- **Community activity** - Updates from other users (if applicable)
-
-### Quick Actions
-- **Create New** - Shortcuts to create content
-- **Upload Files** - Direct access to media upload
-- **Settings** - Quick access to account preferences
-- **Help** - Direct link to support resources
-
-## 📝 Content Management Interface
-
-### Content List View
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ [🔍 Search] [📝 New Post] [🔄 Refresh] [⚙️ Settings] │
-├─────────────────────────────────────────────────────────────┤
-│ Title │ Status │ Date │ Actions │
-├─────────────────────────────────────────────────────────────┤
-│ Welcome to Rustelo │ Published│ 2024-01-15 │ [Ed][Del]│
-│ Getting Started Guide │ Draft │ 2024-01-14 │ [Ed][Del]│
-│ Feature Documentation │ Published│ 2024-01-13 │ [Ed][Del]│
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Content Editor
-
-The content editor provides a rich writing experience:
-
-#### Editor Toolbar
-```
-[B] [I] [U] [📎] [🔗] [📷] [📊] [💾] [👁️] [📱]
-```
-
-- **B** - Bold text
-- **I** - Italic text
-- **U** - Underline text
-- **📎** - Insert files/attachments
-- **🔗** - Insert links
-- **📷** - Insert images
-- **📊** - Insert tables/charts
-- **💾** - Save draft
-- **👁️** - Preview
-- **📱** - Mobile preview
-
-#### Editor Features
-- **Live Preview** - See changes as you type
-- **Auto-save** - Automatically saves drafts
-- **Markdown Support** - Rich text formatting
-- **Spell Check** - Built-in spelling and grammar
-- **Word Count** - Track document length
-- **Version History** - Access previous versions
-
-## 🔐 Authentication Interface
-
-### Login Screen
-
-```
-┌─────────────────────────────────────┐
-│ Welcome Back │
-├─────────────────────────────────────┤
-│ Email: [________________] │
-│ Password: [________________] │
-│ □ Remember me │
-│ │
-│ [ Sign In ] │
-│ │
-│ Forgot password? | Create account │
-└─────────────────────────────────────┘
-```
-
-### Registration Screen
-
-```
-┌─────────────────────────────────────┐
-│ Create Your Account │
-├─────────────────────────────────────┤
-│ Full Name: [________________] │
-│ Email: [________________] │
-│ Username: [________________] │
-│ Password: [________________] │
-│ Confirm: [________________] │
-│ │
-│ □ I agree to the Terms of Service │
-│ │
-│ [ Create Account ] │
-│ │
-│ Already have an account? Sign in │
-└─────────────────────────────────────┘
-```
-
-### Password Strength Indicator
-
-```
-Password: [weak____strong]
-✗ At least 8 characters
-✗ Contains uppercase letter
-✓ Contains lowercase letter
-✗ Contains number
-✗ Contains special character
-```
-
-## 👤 Profile Management
-
-### Profile Overview
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ [👤 Avatar] John Doe │
-│ john.doe@example.com │
-│ Member since: January 2024 │
-├─────────────────────────────────────────────────────────────┤
-│ [Edit Profile] [Change Password] [Privacy Settings] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Profile Editing
-
-#### Basic Information
-- **Full Name** - Your display name
-- **Email Address** - Account email (used for login)
-- **Username** - Unique identifier
-- **Bio/Description** - About yourself
-- **Location** - Your location (optional)
-- **Website** - Personal or professional website
-
-#### Profile Picture
-- **Upload New** - Choose from your device
-- **Remove Current** - Delete existing avatar
-- **Supported Formats** - JPG, PNG, GIF (max 2MB)
-
-#### Privacy Settings
-- **Profile Visibility** - Public, Private, or Friends Only
-- **Contact Information** - Show/hide email and other details
-- **Activity Status** - Show when you're online
-- **Search Visibility** - Allow others to find you in search
-
-## 📊 Settings & Preferences
-
-### Account Settings
-
-#### Security
-- **Change Password** - Update your login password
-- **Two-Factor Authentication** - Enable/disable 2FA
-- **Login History** - View recent login attempts
-- **Connected Devices** - Manage logged-in devices
-
-#### Notifications
-- **Email Notifications** - Control email alerts
-- **Push Notifications** - Mobile and desktop notifications
-- **Frequency** - How often to receive updates
-- **Types** - What events trigger notifications
-
-#### Privacy
-- **Data Sharing** - Control what data is shared
-- **Cookie Preferences** - Manage tracking cookies
-- **Export Data** - Download your account data
-- **Delete Account** - Permanently remove your account
-
-### Application Settings
-
-#### Appearance
-- **Theme** - Light, Dark, or System preference
-- **Font Size** - Adjust text size for readability
-- **Compact Mode** - Reduce spacing for more content
-- **Animations** - Enable/disable interface animations
-
-#### Language & Region
-- **Language** - Select your preferred language
-- **Time Zone** - Set your local time zone
-- **Date Format** - Choose date display format
-- **Number Format** - Regional number formatting
-
-## 🔍 Search & Discovery
-
-### Search Interface
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ [🔍] Search everything... [⚙️] │
-├─────────────────────────────────────────────────────────────┤
-│ Recent Searches: │
-│ • getting started guide │
-│ • user authentication │
-│ • content management │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Search Features
-- **Real-time suggestions** - As you type
-- **Search history** - Recent searches saved
-- **Filters** - Refine by date, type, author
-- **Saved searches** - Bookmark frequent searches
-- **Advanced search** - Boolean operators and field-specific search
-
-### Search Results
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Results for "getting started" (42 found) │
-├─────────────────────────────────────────────────────────────┤
-│ 📄 Getting Started Guide │
-│ A comprehensive guide to help you get started with... │
-│ By Admin • 2024-01-15 • Documentation │
-├─────────────────────────────────────────────────────────────┤
-│ 📝 First Steps Tutorial │
-│ Learn the basics of using the platform with this... │
-│ By Support Team • 2024-01-10 • Tutorial │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 📧 Notifications & Messages
-
-### Notification Center
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Notifications [Mark All] │
-├─────────────────────────────────────────────────────────────┤
-│ 🔔 New comment on your post • 2 min ago │
-│ 📝 Your draft was auto-saved • 5 min ago │
-│ ⚠️ Storage limit reached • 1 hr ago │
-│ 🎉 Welcome to Rustelo! • 1 day ago │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Notification Types
-- **🔔 Activity** - Comments, likes, shares
-- **📝 Content** - Auto-saves, publishing status
-- **⚠️ System** - Warnings, maintenance alerts
-- **🎉 Welcome** - Onboarding and milestone messages
-- **📧 Email** - New messages and updates
-
-## 🛠️ Accessibility Features
-
-### Keyboard Navigation
-- **Tab** - Move between interactive elements
-- **Enter/Space** - Activate buttons and links
-- **Escape** - Close modals and menus
-- **Arrow Keys** - Navigate menus and lists
-- **Ctrl+/** - Open keyboard shortcuts help
-
-### Screen Reader Support
-- **ARIA Labels** - Descriptive labels for all elements
-- **Semantic HTML** - Proper heading hierarchy
-- **Focus Management** - Logical tab order
-- **Status Announcements** - Screen reader notifications
-
-### Visual Accessibility
-- **High Contrast Mode** - Enhanced color contrast
-- **Large Text** - Scalable font sizes
-- **Color Blind Friendly** - Distinguishable colors
-- **Reduced Motion** - Minimize animations
-
-## 📱 Mobile Interface
-
-### Mobile Navigation Patterns
-
-#### Bottom Navigation
-```
-[🏠 Home] [📝 Content] [🔍 Search] [👤 Profile]
-```
-
-#### Swipe Gestures
-- **Swipe Left** - Go back/previous
-- **Swipe Right** - Go forward/next
-- **Pull Down** - Refresh content
-- **Pull Up** - Load more content
-
-### Mobile-Specific Features
-- **Voice Input** - Dictate text content
-- **Camera Integration** - Take photos directly
-- **Offline Mode** - Basic functionality without internet
-- **Share Integration** - Share to other apps
-
-## 🎯 Tips for Better Experience
-
-### Productivity Tips
-1. **Use Keyboard Shortcuts** - Speed up common actions
-2. **Customize Your Dashboard** - Arrange widgets to your preference
-3. **Save Frequent Searches** - Bookmark commonly used searches
-4. **Enable Auto-save** - Never lose your work
-5. **Use Tags** - Organize content with labels
-
-### Performance Tips
-1. **Close Unused Tabs** - Reduce memory usage
-2. **Use Compact Mode** - Fit more content on screen
-3. **Optimize Images** - Compress before uploading
-4. **Clear Cache** - Refresh data when needed
-5. **Update Browser** - Use latest version for best performance
-
-### Security Tips
-1. **Enable 2FA** - Add extra security layer
-2. **Use Strong Passwords** - Unique for each account
-3. **Log Out on Shared Devices** - Protect your account
-4. **Review Login History** - Check for suspicious activity
-5. **Keep Software Updated** - Install security patches
-
-## 🔧 Troubleshooting Common Issues
-
-### Login Problems
-**Issue:** Can't log in
-**Solutions:**
-- Check email and password spelling
-- Try password reset if forgotten
-- Clear browser cache and cookies
-- Disable browser extensions temporarily
-
-### Loading Issues
-**Issue:** Pages won't load
-**Solutions:**
-- Check internet connection
-- Refresh the page (Ctrl+R or F5)
-- Clear browser cache
-- Try incognito/private browsing mode
-
-### Mobile Issues
-**Issue:** App not working on mobile
-**Solutions:**
-- Update your browser
-- Try the mobile app if available
-- Check mobile data/WiFi connection
-- Restart your device
-
-## 🆘 Getting Help
-
-### Built-in Help
-- **Help Button** - Available on most pages
-- **Tooltips** - Hover for quick explanations
-- **Getting Started Tour** - Guided walkthrough
-- **FAQ Section** - Common questions answered
-
-### Support Options
-- **Help Center** - Comprehensive documentation
-- **Community Forum** - User discussions and solutions
-- **Email Support** - Direct assistance from support team
-- **Live Chat** - Real-time help when available
-
-### Self-Service
-- **Knowledge Base** - Searchable help articles
-- **Video Tutorials** - Visual step-by-step guides
-- **Feature Announcements** - Stay updated on new features
-- **Status Page** - Check system status and outages
-
-## 📚 Next Steps
-
-Now that you understand the interface, explore these areas:
-
-1. **[User Authentication](./authentication.md)** - Learn about account security
-2. **[Content Management](./content.md)** - Create and manage your content
-3. **[Profile Management](./profile.md)** - Customize your account
-4. **[Media Management](./media.md)** - Handle files and images
-5. **[Features Overview](./features/)** - Discover all available features
-
-## 🎉 Conclusion
-
-The[Rustelo](/) interface is designed to be intuitive and powerful, helping you accomplish your goals efficiently. Whether you're a new user or an experienced one, these interface elements will help you navigate the application with confidence.
-
-Remember, the interface is responsive and works great on all devices. Take some time to explore and find the workflow that works best for you!
-
----
-
-**Happy exploring!** 🚀✨
diff --git a/book/users/media.md b/book/users/media.md
deleted file mode 100644
index fbf6806..0000000
--- a/book/users/media.md
+++ /dev/null
@@ -1,774 +0,0 @@
-# Media & File Management Guide
-
-
-
-
-
-Welcome to the Rustelo Media & File Management Guide! This comprehensive guide will help you upload, organize, and manage all types of media and files on the platform efficiently and effectively.
-
-## 🎯 Overview
-
-Rustelo's media management system is designed to handle all your digital assets seamlessly. Whether you're working with images, videos, documents, or audio files, this guide will help you master every aspect of media handling, from upload to optimization.
-
-## 📁 Supported File Types
-
-### Image Formats
-- **JPEG/JPG** - Best for photos and complex images
-- **PNG** - Best for graphics with transparency
-- **GIF** - Best for simple animations
-- **WebP** - Modern format with excellent compression
-- **SVG** - Vector graphics and logos
-- **AVIF** - Next-generation image format
-- **HEIC** - iPhone/modern device format
-
-### Video Formats
-- **MP4** - Universal video format
-- **MOV** - Apple QuickTime format
-- **AVI** - Windows video format
-- **WebM** - Web-optimized video format
-- **MKV** - High-quality container format
-- **WMV** - Windows Media Video
-
-### Audio Formats
-- **MP3** - Universal audio format
-- **WAV** - Uncompressed audio
-- **AAC** - Advanced audio coding
-- **OGG** - Open-source audio format
-- **FLAC** - Lossless audio compression
-- **M4A** - Apple audio format
-
-### Document Formats
-- **PDF** - Portable Document Format
-- **DOC/DOCX** - Microsoft Word documents
-- **XLS/XLSX** - Microsoft Excel spreadsheets
-- **PPT/PPTX** - Microsoft PowerPoint presentations
-- **TXT** - Plain text files
-- **RTF** - Rich Text Format
-- **ODT/ODS/ODP** - OpenDocument formats
-
-### Archive Formats
-- **ZIP** - Standard compression format
-- **RAR** - WinRAR archive format
-- **7Z** - 7-Zip archive format
-- **TAR.GZ** - Unix/Linux archive format
-
-## 📤 Uploading Media
-
-### Upload Methods
-
-#### Drag and Drop
-1. **Open the media library** or content editor
-2. **Drag files** from your computer
-3. **Drop them** into the upload area
-4. **Wait for processing** to complete
-5. **Review and organize** uploaded files
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 📤 Upload Area │
-│ │
-│ Drag and drop files here │
-│ or click to browse │
-│ │
-│ Supported: Images, Videos, Audio, Documents │
-│ Maximum size: 50MB per file │
-│ │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### File Browser
-1. **Click "Upload Files"** button
-2. **Browse your computer** using the file dialog
-3. **Select single or multiple files** (Ctrl+click for multiple)
-4. **Click "Open"** to start upload
-5. **Monitor progress** in the upload queue
-
-#### URL Import
-1. **Click "Import from URL"** option
-2. **Enter the file URL** in the input field
-3. **Click "Import"** to download and add
-4. **Wait for processing** to complete
-5. **File is added** to your media library
-
-#### Mobile Camera
-1. **Tap the camera icon** (mobile only)
-2. **Choose "Take Photo"** or "Record Video"
-3. **Capture your media** using device camera
-4. **Review and confirm** the captured media
-5. **Upload directly** to your library
-
-### Upload Progress & Queue
-
-#### Progress Indicators
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Upload Queue [✕ Cancel] │
-├─────────────────────────────────────────────────────────────┤
-│ 📷 vacation-photo.jpg [████████████] 100% ✅ │
-│ 🎥 presentation-video.mp4 [██████░░░░░░] 45% │
-│ 📄 report-document.pdf [░░░░░░░░░░░░] 0% ⏸️ │
-├─────────────────────────────────────────────────────────────┤
-│ 3 files • 2 completed • 1 uploading • 0 failed │
-└─────────────────────────────────────────────────────────────┘
-```
-
-#### Upload Controls
-- **Pause/Resume** - Control individual uploads
-- **Cancel** - Stop specific file uploads
-- **Retry Failed** - Restart failed uploads
-- **Clear Completed** - Remove finished uploads
-- **Upload All** - Start all queued uploads
-
-### File Size Limits
-
-#### Default Limits
-- **Images**: 10MB per file
-- **Videos**: 100MB per file
-- **Audio**: 25MB per file
-- **Documents**: 50MB per file
-- **Archives**: 100MB per file
-
-#### Storage Quotas
-- **Free Account**: 1GB total storage
-- **Premium Account**: 50GB total storage
-- **Business Account**: 500GB total storage
-- **Enterprise**: Unlimited storage
-
-#### Optimization Tips
-- **Compress images** before uploading
-- **Use appropriate formats** for content type
-- **Resize large images** to reasonable dimensions
-- **Convert videos** to web-friendly formats
-- **Archive multiple files** to save space
-
-## 🖼️ Image Management
-
-### Image Upload & Processing
-
-#### Automatic Processing
-- **Format Conversion** - Automatic WebP generation
-- **Thumbnail Creation** - Multiple size thumbnails
-- **Metadata Extraction** - EXIF data reading
-- **Color Palette** - Dominant color detection
-- **Optimization** - Lossless compression
-
-#### Image Information Display
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 📷 landscape-photo.jpg [Edit] [✕] │
-├─────────────────────────────────────────────────────────────┤
-│ [🖼️ Preview Image] │
-├─────────────────────────────────────────────────────────────┤
-│ Dimensions: 1920 × 1080 pixels │
-│ File Size: 2.3 MB (original) • 845 KB (optimized) │
-│ Format: JPEG • Color Space: sRGB │
-│ Created: March 15, 2024 at 2:30 PM │
-│ Camera: Canon EOS R5 • ISO 200 • f/8 • 1/250s │
-├─────────────────────────────────────────────────────────────┤
-│ Alt Text: [Beautiful mountain landscape at sunset] │
-│ Caption: [Optional image caption] │
-│ Tags: [landscape] [sunset] [mountains] [+ Add Tag] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Image Editing Tools
-
-#### Basic Editing
-- **Crop** - Adjust image dimensions and aspect ratio
-- **Resize** - Change image resolution
-- **Rotate** - Rotate 90°, 180°, or 270°
-- **Flip** - Horizontal or vertical flipping
-- **Straighten** - Correct tilted horizons
-
-#### Advanced Editing
-- **Brightness** - Adjust image brightness
-- **Contrast** - Enhance or reduce contrast
-- **Saturation** - Color intensity adjustment
-- **Exposure** - Lighten or darken images
-- **Filters** - Apply artistic effects
-
-#### Image Editor Interface
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Image Editor [Save] [Cancel] │
-├─────────────────────────────────────────────────────────────┤
-│ [🖼️ Large Preview Image] │
-├─────────────────────────────────────────────────────────────┤
-│ Tools: [✂️ Crop] [↻ Rotate] [🔄 Flip] [📐 Straighten] │
-│ │
-│ Adjustments: │
-│ Brightness: [━━━━━●━━━━] 0 │
-│ Contrast: [━━━━━●━━━━] 0 │
-│ Saturation: [━━━━━●━━━━] 0 │
-│ │
-│ Filters: [None] [B&W] [Sepia] [Vintage] [Vibrant] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Image Optimization
-
-#### Automatic Optimization
-- **WebP Generation** - Modern format for web
-- **Progressive JPEG** - Faster loading
-- **Lossless Compression** - Reduce file size
-- **Responsive Images** - Multiple sizes generated
-- **Lazy Loading** - Load images as needed
-
-#### Manual Optimization
-- **Quality Settings** - Adjust compression level
-- **Format Selection** - Choose optimal format
-- **Dimension Control** - Set maximum dimensions
-- **Metadata Stripping** - Remove unnecessary data
-
-### Image Gallery Features
-
-#### Gallery Views
-- **Grid View** - Thumbnail grid layout
-- **List View** - Detailed list with metadata
-- **Slideshow** - Full-screen image viewing
-- **Lightbox** - Overlay image display
-- **Comparison** - Side-by-side image comparison
-
-#### Bulk Operations
-- **Select Multiple** - Checkbox selection
-- **Bulk Delete** - Remove multiple images
-- **Bulk Tag** - Add tags to multiple images
-- **Bulk Download** - Download as archive
-- **Bulk Optimization** - Process multiple images
-
-## 🎥 Video Management
-
-### Video Upload & Processing
-
-#### Video Processing Pipeline
-1. **Upload** - File transfer to server
-2. **Validation** - Format and size checking
-3. **Transcoding** - Convert to web formats
-4. **Thumbnail Generation** - Create preview images
-5. **Metadata Extraction** - Duration, resolution, etc.
-6. **Quality Optimization** - Multiple quality levels
-
-#### Video Information
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 🎥 product-demo.mp4 [Edit] [✕] │
-├─────────────────────────────────────────────────────────────┤
-│ [🎬 Video Player with Preview] │
-├─────────────────────────────────────────────────────────────┤
-│ Duration: 5:32 • Resolution: 1920×1080 • 30 FPS │
-│ File Size: 45.2 MB • Bitrate: 1.2 Mbps │
-│ Format: MP4 (H.264) • Audio: AAC Stereo │
-│ Upload Date: March 15, 2024 │
-├─────────────────────────────────────────────────────────────┤
-│ Title: [Product Demo Video] │
-│ Description: [Comprehensive overview of our new product] │
-│ Tags: [demo] [product] [tutorial] [+ Add Tag] │
-│ │
-│ Thumbnail: [Auto] [Custom Upload] [Generate from Video] │
-│ Captions: [Auto-Generated] [Upload SRT] [Manual Entry] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Video Player Features
-
-#### Playback Controls
-- **Play/Pause** - Standard playback control
-- **Seek Bar** - Timeline navigation
-- **Volume Control** - Audio level adjustment
-- **Speed Control** - Playback speed options (0.5x to 2x)
-- **Fullscreen** - Full browser/screen viewing
-
-#### Advanced Features
-- **Captions/Subtitles** - Text overlay support
-- **Quality Selection** - Multiple resolution options
-- **Chapter Markers** - Navigate to specific sections
-- **Thumbnail Preview** - Hover to see preview frames
-- **Download Options** - Allow video downloads
-
-### Video Optimization
-
-#### Automatic Processing
-- **Multiple Resolutions** - 480p, 720p, 1080p versions
-- **Adaptive Streaming** - Quality adjusts to connection
-- **Compression** - Optimal file size for web
-- **Format Conversion** - Web-compatible formats
-- **Mobile Optimization** - Device-specific encoding
-
-#### Compression Settings
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Video Compression Settings │
-├─────────────────────────────────────────────────────────────┤
-│ Quality Preset: [Web Optimized ▼] │
-│ │
-│ Resolutions to Generate: │
-│ ☑ 480p (854×480) - Mobile │
-│ ☑ 720p (1280×720) - Standard HD │
-│ ☑ 1080p (1920×1080) - Full HD │
-│ ☐ 4K (3840×2160) - Ultra HD │
-│ │
-│ Video Codec: [H.264 ▼] Audio Codec: [AAC ▼] │
-│ Bitrate: [Auto ▼] Frame Rate: [Original ▼] │
-│ │
-│ [Process Video] [Use Defaults] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Video Embedding
-
-#### Embed Options
-- **Direct Embed** - Host videos on your site
-- **YouTube Integration** - Upload to YouTube
-- **Vimeo Integration** - Professional video hosting
-- **Custom Player** - Branded video player
-- **Responsive Embed** - Mobile-friendly embedding
-
-#### Embed Code Generation
-```html
-
-
-
-
-```
-
-## 🎵 Audio Management
-
-### Audio Upload & Processing
-
-#### Audio File Support
-- **Podcast Episodes** - Full podcast management
-- **Music Files** - Songs and instrumental tracks
-- **Voice Recordings** - Interviews and narration
-- **Sound Effects** - Audio clips and samples
-- **Ambient Audio** - Background sounds
-
-#### Audio Player Interface
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 🎵 podcast-episode-01.mp3 [Edit] [✕] │
-├─────────────────────────────────────────────────────────────┤
-│ [▶️] [⏸️] [⏹️] [⏪] [⏩] [🔊] [█████████░] 9:32 / 15:45 │
-│ │
-│ [🎵 Audio Waveform Visualization] │
-├─────────────────────────────────────────────────────────────┤
-│ Title: [Introduction to Web Development] │
-│ Artist/Creator: [John Doe] │
-│ Duration: 15:45 • Bitrate: 128 kbps • File Size: 15.2 MB │
-│ Format: MP3 • Sample Rate: 44.1 kHz • Channels: Stereo │
-├─────────────────────────────────────────────────────────────┤
-│ Description: [Welcome to our podcast series on web dev...] │
-│ Tags: [podcast] [web-development] [tutorial] [+ Add Tag] │
-│ │
-│ Transcript: [Auto-Generated] [Upload Text] [Manual Entry] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Audio Features
-
-#### Playback Controls
-- **Standard Controls** - Play, pause, stop, seek
-- **Speed Control** - Adjust playback speed
-- **Volume Control** - Audio level adjustment
-- **Loop Options** - Repeat single or playlist
-- **Shuffle** - Random playback order
-
-#### Audio Processing
-- **Normalization** - Consistent volume levels
-- **Noise Reduction** - Remove background noise
-- **Compression** - Optimize file size
-- **Format Conversion** - Multiple format support
-- **Metadata Extraction** - ID3 tags and information
-
-### Podcast Management
-
-#### Podcast Features
-- **Episode Management** - Organize podcast episodes
-- **RSS Feed Generation** - Automatic podcast feed
-- **iTunes Integration** - Submit to podcast directories
-- **Transcript Support** - Episode transcriptions
-- **Chapter Markers** - Navigate episode sections
-
-#### Podcast Dashboard
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 🎙️ Podcast: "Web Development Weekly" │
-├─────────────────────────────────────────────────────────────┤
-│ Episodes: 24 • Subscribers: 1,250 • Total Downloads: 15,630 │
-├─────────────────────────────────────────────────────────────┤
-│ Recent Episodes: │
-│ 📅 Ep. 24 - "React Hooks Deep Dive" (Mar 15) - 523 plays │
-│ 📅 Ep. 23 - "CSS Grid Mastery" (Mar 8) - 612 plays │
-│ 📅 Ep. 22 - "JavaScript ES2024" (Mar 1) - 734 plays │
-├─────────────────────────────────────────────────────────────┤
-│ [New Episode] [Manage Feed] [Analytics] [Settings] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 📄 Document Management
-
-### Document Upload & Viewing
-
-#### Document Types
-- **Reports** - Business and research reports
-- **Presentations** - Slide decks and pitch materials
-- **Spreadsheets** - Data and financial documents
-- **eBooks** - Digital books and publications
-- **Manuals** - User guides and documentation
-
-#### Document Viewer
-```
-┌─────────────────────────────────────────────────────────────┐
-│ 📄 quarterly-report.pdf [Edit] [✕] │
-├─────────────────────────────────────────────────────────────┤
-│ [📖 PDF Viewer with Page Navigation] │
-│ Page 1 of 25 | [◀️] [▶️] | Zoom: [100% ▼] | [🖨️] [💾] │
-├─────────────────────────────────────────────────────────────┤
-│ Title: [Q1 2024 Quarterly Business Report] │
-│ Author: [Finance Department] │
-│ Pages: 25 • File Size: 2.8 MB • Created: March 1, 2024 │
-├─────────────────────────────────────────────────────────────┤
-│ Description: [Comprehensive overview of Q1 performance...] │
-│ Tags: [quarterly] [finance] [2024] [+ Add Tag] │
-│ │
-│ Permissions: [Public View] [Download Allowed] [Print: Yes] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Document Features
-
-#### Viewing Options
-- **In-Browser Viewing** - No download required
-- **Full-Screen Mode** - Distraction-free reading
-- **Page Navigation** - Easy page jumping
-- **Zoom Controls** - Adjustable document size
-- **Search Within** - Find text in documents
-
-#### Document Controls
-- **Download** - Save to device
-- **Print** - Physical printing options
-- **Share** - Generate sharing links
-- **Embed** - Embed in other pages
-- **Annotate** - Add comments and notes (premium)
-
-### Document Security
-
-#### Access Controls
-- **Public Access** - Anyone can view
-- **Private Access** - Only you can view
-- **Password Protected** - Require password
-- **Time-Limited** - Expire after set time
-- **Download Restrictions** - View-only mode
-
-#### Watermarking
-- **Text Watermarks** - Add text overlay
-- **Image Watermarks** - Add logo/image overlay
-- **Dynamic Watermarks** - User-specific marks
-- **Position Control** - Choose watermark placement
-- **Transparency** - Adjust visibility level
-
-## 📚 Media Library Organization
-
-### Folder Structure
-
-#### Hierarchical Organization
-```
-📁 Media Library
-├── 📁 Images
-│ ├── 📁 Blog Posts
-│ ├── 📁 Product Photos
-│ ├── 📁 Team Photos
-│ └── 📁 Stock Images
-├── 📁 Videos
-│ ├── 📁 Product Demos
-│ ├── 📁 Tutorials
-│ └── 📁 Marketing
-├── 📁 Audio
-│ ├── 📁 Podcast Episodes
-│ ├── 📁 Music
-│ └── 📁 Sound Effects
-└── 📁 Documents
- ├── 📁 Reports
- ├── 📁 Presentations
- └── 📁 Legal
-```
-
-#### Folder Management
-- **Create Folders** - Organize by project or type
-- **Nested Folders** - Unlimited folder depth
-- **Move Files** - Drag and drop between folders
-- **Rename Folders** - Update folder names
-- **Delete Folders** - Remove empty folders
-
-### Tagging System
-
-#### Tag Categories
-- **Content Type** - Image, video, audio, document
-- **Topic** - Subject matter and themes
-- **Project** - Associate with specific projects
-- **Quality** - Draft, final, approved
-- **Usage Rights** - Copyright and licensing info
-
-#### Tag Management
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Tag Management │
-├─────────────────────────────────────────────────────────────┤
-│ Popular Tags: │
-│ [blog-post] 124 files [tutorial] 89 files │
-│ [product] 67 files [team] 45 files │
-│ [marketing] 34 files [draft] 23 files │
-├─────────────────────────────────────────────────────────────┤
-│ Recently Used: │
-│ [web-development] [javascript] [design] [photography] │
-├─────────────────────────────────────────────────────────────┤
-│ Create New Tag: [________________] [Create] │
-│ │
-│ Bulk Tag Actions: │
-│ [Merge Tags] [Delete Unused] [Export Tag List] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Search and Filtering
-
-#### Advanced Search
-- **File Name** - Search by filename
-- **Content Search** - Search within documents
-- **Metadata** - Search by EXIF, author, etc.
-- **Date Range** - Filter by upload/creation date
-- **File Size** - Filter by size range
-
-#### Filter Options
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Media Library Filters │
-├─────────────────────────────────────────────────────────────┤
-│ File Type: [All ▼] [Images] [Videos] [Audio] [Documents] │
-│ Date Range: [Last 30 Days ▼] │
-│ Size Range: [Any Size ▼] │
-│ Tags: [Select Tags...] [tutorial] [×] [blog-post] [×] │
-│ Folder: [All Folders ▼] │
-│ │
-│ Sort By: [Date Added ▼] [Name] [Size] [Type] │
-│ Order: [Newest First ▼] [Oldest First] │
-│ │
-│ [Apply Filters] [Clear All] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Bulk Operations
-
-#### Selection Methods
-- **Select All** - All visible files
-- **Select by Type** - All images, videos, etc.
-- **Select by Tag** - Files with specific tags
-- **Select by Date** - Files from date range
-- **Manual Selection** - Click to select individual files
-
-#### Bulk Actions
-- **Move to Folder** - Relocate multiple files
-- **Add Tags** - Tag multiple files at once
-- **Delete** - Remove multiple files
-- **Download** - Download as ZIP archive
-- **Change Permissions** - Update access settings
-
-## 🔍 Media Analytics
-
-### Usage Statistics
-
-#### File Performance
-- **View Count** - How many times viewed
-- **Download Count** - Number of downloads
-- **Embed Usage** - Where files are embedded
-- **Referrer Data** - Traffic sources
-- **Geographic Data** - Where files are accessed
-
-#### Storage Analytics
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Storage Analytics │
-├─────────────────────────────────────────────────────────────┤
-│ Total Storage Used: 2.3 GB of 50 GB (4.6%) │
-│ [████████████████████████████████████████████████░░░░░░] │
-├─────────────────────────────────────────────────────────────┤
-│ Breakdown by Type: │
-│ Images: 1.2 GB (52%) [████████████████████████████████] │
-│ Videos: 856 MB (37%) [████████████████████████] │
-│ Audio: 156 MB (7%) [██████] │
-│ Docs: 88 MB (4%) [████] │
-├─────────────────────────────────────────────────────────────┤
-│ Largest Files: │
-│ 📹 product-launch.mp4 - 245 MB │
-│ 📹 training-video.mp4 - 189 MB │
-│ 📄 annual-report.pdf - 45 MB │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Performance Monitoring
-
-#### Load Time Analytics
-- **Average Load Time** - File loading performance
-- **Geographic Performance** - Speed by location
-- **Device Performance** - Mobile vs desktop speeds
-- **CDN Effectiveness** - Content delivery performance
-- **Optimization Impact** - Before/after compression
-
-#### Bandwidth Usage
-- **Monthly Bandwidth** - Data transfer amounts
-- **Peak Usage Times** - When files are accessed most
-- **Top Consuming Files** - Which files use most bandwidth
-- **Traffic Patterns** - Usage trends over time
-- **Cost Analysis** - Bandwidth cost tracking
-
-## 🔒 Media Security & Privacy
-
-### Access Controls
-
-#### File Permissions
-- **Public** - Anyone can access
-- **Unlisted** - Only with direct link
-- **Private** - Only you can access
-- **Team** - Team members only
-- **Custom** - Specific user groups
-
-#### Permission Management
-```
-┌─────────────────────────────────────────────────────────────┐
-│ File Permissions: conference-presentation.pdf │
-├─────────────────────────────────────────────────────────────┤
-│ Visibility: [Private ▼] │
-│ │
-│ Allowed Actions: │
-│ ☑ View/Preview │
-│ ☐ Download │
-│ ☐ Print │
-│ ☐ Share Link │
-│ ☐ Embed │
-├─────────────────────────────────────────────────────────────┤
-│ Specific Users/Groups: │
-│ 👤 john.doe@company.com [View + Download] │
-│ 👥 Marketing Team [View Only] │
-│ [+ Add User/Group] │
-├─────────────────────────────────────────────────────────────┤
-│ Expiration: [Never ▼] Password: [None ▼] │
-│ │
-│ [Save Permissions] [Preview as User] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### Copyright & Licensing
-
-#### License Management
-- **All Rights Reserved** - Full copyright protection
-- **Creative Commons** - Various CC license options
-- **Public Domain** - No rights reserved
-- **Custom License** - Your own licensing terms
-- **Stock License** - Commercial stock licensing
-
-#### Copyright Information
-- **Creator/Author** - Who created the content
-- **Copyright Year** - When content was created
-- **License Terms** - Usage permissions
-- **Attribution** - How to credit the creator
-- **Commercial Use** - Whether commercial use is allowed
-
-### Content Protection
-
-#### Watermarking
-- **Visible Watermarks** - Logo/text overlays
-- **Invisible Watermarks** - Hidden identification
-- **Dynamic Watermarks** - User-specific marking
-- **Batch Watermarking** - Apply to multiple files
-- **Removal Prevention** - Protect watermark integrity
-
-#### Download Protection
-- **Disable Right-Click** - Prevent easy downloading
-- **Hotlink Protection** - Prevent direct linking
-- **Expiring Links** - Time-limited access URLs
-- **IP Restrictions** - Limit access by location
-- **Device Limits** - Restrict number of devices
-
-## 🛠️ Media Tools & Utilities
-
-### Compression Tools
-
-#### Image Compression
-- **Lossless Compression** - No quality loss
-- **Lossy Compression** - Smaller files, slight quality loss
-- **Progressive JPEG** - Faster loading images
-- **WebP Conversion** - Modern format optimization
-- **Batch Compression** - Process multiple images
-
-#### Video Compression
-- **Quality Presets** - Easy optimization settings
-- **Custom Bitrates** - Fine-tune compression
-- **Resolution Scaling** - Reduce video dimensions
-- **Frame Rate Adjustment** - Optimize playback
-- **Audio Compression** - Reduce audio file size
-
-### Format Conversion
-
-#### Supported Conversions
-```
-Images: JPEG ↔ PNG ↔ WebP ↔ AVIF ↔ GIF
-Videos: MP4 ↔ WebM ↔ MOV ↔ AVI
-Audio: MP3 ↔ AAC ↔ OGG ↔ WAV
-Docs: PDF ↔ DOC ↔ TXT ↔ RTF
-```
-
-#### Batch Conversion
-- **Multiple Files** - Convert many files at once
-- **Queue Management** - Process conversion queue
-- **Progress Tracking** - Monitor conversion status
-- **Quality Settings** - Maintain desired quality
-- **Output Formats** - Multiple format options
-
-### Metadata Management
-
-#### EXIF Data
-- **Camera Information** - Camera model, settings
-- **Location Data** - GPS coordinates
-- **Timestamp** - When photo was taken
-- **Technical Details** - ISO, aperture, shutter speed
-- **Edit/Remove** - Modify or strip metadata
-
-#### Custom Metadata
-- **Title** - File title or name
-- **Description** - File description
-- **Keywords** - Search terms
-- **Author** - Creator information
-- **Copyright** - Rights information
-
-## 📱 Mobile Media Management
-
-### Mobile Upload
-
-#### Upload Methods
-- **Camera Roll** - Select from existing photos
-- **Take Photo** - Capture new image
-- **Record Video** - Create new video
-- **Voice Recording** - Record audio
-- **Document Scan** - Scan physical documents
-
-#### Mobile Features
-- **Background Upload** - Continue upload when app closed
-- **Auto-Upload** - Automatically upload camera photos
-- **Compression Options** - Reduce file size for mobile
-- **Offline Queue** - Queue uploads for when online
-- **Push Notifications** - Upload completion alerts
-
-### Mobile Optimization
-
-#### Responsive Media
-- **Adaptive Images** - Different sizes for different screens
-- **Progressive Loading** - Load images progressively
-- **Touch Controls** - Touch-friendly media controls
-- **Swipe Navigation** - Gesture-based browsing
-- **Mobile Player** - Optimized video/audio player
-
-#### Data Saving
\ No newline at end of file
diff --git a/book/users/profile.md b/book/users/profile.md
deleted file mode 100644
index 222820f..0000000
--- a/book/users/profile.md
+++ /dev/null
@@ -1,552 +0,0 @@
-# Profile Management Guide
-
-
-
-
-
-Welcome to the[Rustelo](/) Profile Management Guide! This comprehensive guide will help you customize your profile, manage your account settings, and make the most of your Rustelo experience.
-
-## 🎯 Overview
-
-Your profile is your digital identity in Rustelo. It's how other users see you, how you represent yourself, and how you control your account settings. This guide covers everything from basic profile setup to advanced privacy controls.
-
-## 👤 Profile Basics
-
-### Accessing Your Profile
-
-#### From the Navigation Bar
-1. Click your **profile picture** or **username** in the top right
-2. Select **"View Profile"** from the dropdown
-3. Or click **"Edit Profile"** to make changes
-
-#### Quick Access Methods
-- **Keyboard Shortcut**: `Ctrl+P` (or `Cmd+P` on Mac)
-- **Mobile**: Tap the profile icon in the bottom navigation
-- **URL**: Visit `/profile` directly
-
-### Profile Overview
-
-Your profile displays key information about you:
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ [🖼️ Cover Photo] │
-├─────────────────────────────────────────────────────────────┤
-│ [👤] John Doe [Edit] │
-│ @johndoe │
-│ 📧 john.doe@example.com │
-│ 📅 Joined January 2024 │
-│ 📍 San Francisco, CA │
-│ 🌐 https://johndoe.com │
-├─────────────────────────────────────────────────────────────┤
-│ "Full-stack developer passionate about building great │
-│ user experiences with modern web technologies." │
-├─────────────────────────────────────────────────────────────┤
-│ [📊 Activity] [📝 Content] [⚙️ Settings] │
-└─────────────────────────────────────────────────────────────┘
-```
-
-## 🖼️ Profile Picture & Cover Photo
-
-### Profile Picture
-
-#### Uploading a Profile Picture
-1. Go to **Edit Profile**
-2. Click on your current profile picture
-3. Select **"Upload New Photo"**
-4. Choose an image from your device
-5. Crop and adjust as needed
-6. Click **"Save"**
-
-#### Profile Picture Requirements
-- **File Types**: JPG, PNG, GIF, WebP
-- **Size Limit**: 5MB maximum
-- **Dimensions**: Square images work best (1:1 ratio)
-- **Recommended**: 400x400 pixels or higher
-- **Quality**: High-resolution images for best display
-
-#### Profile Picture Tips
-- **Professional Look**: Use a clear, well-lit photo
-- **Brand Consistency**: Match your other social profiles
-- **Face Visibility**: Ensure your face is clearly visible
-- **Avoid Clutter**: Simple backgrounds work best
-- **Update Regularly**: Keep your photo current
-
-### Cover Photo
-
-#### Adding a Cover Photo
-1. Go to **Edit Profile**
-2. Click **"Add Cover Photo"** or hover over existing cover
-3. Select **"Upload New Cover"**
-4. Choose an image from your device
-5. Position and crop as needed
-6. Click **"Save"**
-
-#### Cover Photo Requirements
-- **File Types**: JPG, PNG, WebP
-- **Size Limit**: 10MB maximum
-- **Dimensions**: 1200x400 pixels (3:1 ratio)
-- **Quality**: High-resolution for crisp display
-
-#### Cover Photo Ideas
-- **Workspace**: Your desk or work environment
-- **Hobby**: Something that represents your interests
-- **Landscape**: A favorite place or view
-- **Abstract**: Patterns or designs that reflect your style
-- **Professional**: Related to your industry or expertise
-
-## ✏️ Basic Information
-
-### Personal Details
-
-#### Full Name
-- **Display Name**: How others see you
-- **Professional Use**: Consider using your real name
-- **Creative Use**: Stage names or handles are fine
-- **Changes**: Can be updated anytime
-- **Visibility**: Always visible to other users
-
-#### Username
-- **Unique Identifier**: Must be unique across the platform
-- **URL Component**: Used in your profile URL
-- **Mentions**: How others can tag you
-- **Permanent**: Cannot be changed after registration
-- **Format**: Letters, numbers, and underscores only
-
-#### Email Address
-- **Primary Contact**: Used for all communications
-- **Login Method**: How you sign into your account
-- **Verification**: Must be verified to change
-- **Privacy**: Can be hidden from public view
-- **Backup**: Keep access to this email address
-
-### Contact Information
-
-#### Website/Portfolio
-- **Personal Site**: Your blog or personal website
-- **Portfolio**: Showcase your work
-- **Company**: Your business website
-- **Social Media**: Link to your main social profile
-- **Format**: Must start with https://
-
-#### Location
-- **City/State**: Where you're based
-- **Country**: Your country of residence
-- **Privacy**: Can be hidden from public view
-- **Networking**: Helps connect with local users
-- **Optional**: Not required to fill out
-
-#### Bio/About Section
-- **Description**: Tell others about yourself
-- **Length**: Up to 500 characters
-- **Formatting**: Markdown supported
-- **Keywords**: Include relevant terms for discoverability
-- **Personality**: Let your personality shine through
-
-### Bio Writing Tips
-
-#### Effective Bio Examples
-
-**Professional Bio:**
-```
-Full-stack developer with 5+ years building scalable web applications.
-Passionate about React, Node.js, and cloud architecture.
-Currently working on developer tools at @TechCorp.
-
-🔧 JavaScript, Python, AWS
-🎯 Open to consulting opportunities
-📍 San Francisco, CA
-```
-
-**Creative Bio:**
-```
-Digital artist exploring the intersection of technology and creativity.
-Creating NFTs, generative art, and interactive installations.
-
-🎨 Currently: AI-assisted art project
-✨ Tools: Processing, p5.js, Blender
-🌍 Based in Berlin, traveling the world
-```
-
-**Casual Bio:**
-```
-Coffee enthusiast ☕ Dog parent 🐕 Weekend hiker 🥾
-
-Sharing my journey learning web development and building cool stuff.
-Always up for a chat about tech, coffee, or outdoor adventures!
-```
-
-## 🎨 Customization Options
-
-### Profile Theme
-
-#### Theme Selection
-1. Go to **Profile Settings** > **Appearance**
-2. Choose from available themes:
- - **Light**: Clean, professional look
- - **Dark**: Modern, easy on the eyes
- - **Auto**: Matches system preference
- - **Custom**: Create your own color scheme
-
-#### Color Customization
-- **Primary Color**: Main accent color
-- **Secondary Color**: Supporting elements
-- **Background**: Profile background color
-- **Text**: Primary text color
-- **Links**: Color for clickable elements
-
-### Layout Options
-
-#### Profile Layout Styles
-- **Standard**: Traditional profile layout
-- **Compact**: Minimalist, space-efficient
-- **Showcase**: Emphasizes your content
-- **Business**: Professional, corporate look
-- **Creative**: Artistic, expressive design
-
-#### Content Organization
-- **Sections**: Choose which sections to display
-- **Order**: Arrange sections in preferred order
-- **Visibility**: Show/hide specific information
-- **Highlights**: Feature your best content
-
-## 🔒 Privacy Settings
-
-### Profile Visibility
-
-#### Public Profile
-- **Visible to Everyone**: Anyone can view your profile
-- **Search Engine**: May appear in search results
-- **Discoverability**: Easier for others to find you
-- **Networking**: Best for professional networking
-
-#### Private Profile
-- **Registered Users Only**: Only logged-in users can view
-- **No Search Results**: Won't appear in public searches
-- **Controlled Access**: More privacy control
-- **Selective Sharing**: Share profile link manually
-
-#### Friends/Connections Only
-- **Restricted Access**: Only your connections can view
-- **Maximum Privacy**: Highest level of privacy
-- **Limited Discoverability**: Harder for others to find
-- **Invitation Only**: Others must request access
-
-### Information Visibility
-
-#### Contact Information
-- **Email Address**: Show/hide from public view
-- **Phone Number**: Display preferences
-- **Website**: Always visible when provided
-- **Location**: Show/hide location information
-- **Social Links**: Control which links are visible
-
-#### Activity Information
-- **Last Seen**: Show when you were last active
-- **Online Status**: Display when you're currently online
-- **Activity Feed**: Show your recent actions
-- **Content Stats**: Display content metrics
-
-### Privacy Controls
-
-#### Who Can Contact You
-- **Anyone**: All users can send messages
-- **Connections Only**: Only your connections
-- **No One**: Disable direct messaging
-- **Filtered**: Messages go to filtered folder
-
-#### Who Can Find You
-- **Search**: Appear in user searches
-- **Suggestions**: Appear in "people you may know"
-- **Email**: Allow finding by email address
-- **Import**: Allow import from address books
-
-## 🔔 Notification Preferences
-
-### Email Notifications
-
-#### Account Activity
-- **Login Alerts**: New device logins
-- **Security Changes**: Password/2FA changes
-- **Account Updates**: Important account notices
-- **Policy Updates**: Terms of service changes
-
-#### Content Notifications
-- **New Comments**: Comments on your content
-- **Likes/Reactions**: Engagement on your posts
-- **Mentions**: When someone mentions you
-- **Shares**: When someone shares your content
-
-#### System Notifications
-- **Maintenance**: Scheduled system maintenance
-- **Feature Updates**: New features and improvements
-- **Newsletter**: Product updates and tips
-- **Promotional**: Special offers and events
-
-### In-App Notifications
-
-#### Real-time Alerts
-- **Instant Notifications**: Immediate alerts
-- **Sound**: Audio notification preferences
-- **Badge**: Show notification count
-- **Popup**: Display notification popup
-
-#### Notification Types
-- **Messages**: Direct messages from other users
-- **Activity**: Likes, comments, and shares
-- **System**: Important system messages
-- **Reminders**: Scheduled reminders and tasks
-
-### Notification Timing
-
-#### Frequency Settings
-- **Immediate**: Get notified right away
-- **Hourly**: Batched hourly summaries
-- **Daily**: Daily digest emails
-- **Weekly**: Weekly summary reports
-- **Never**: Turn off specific notifications
-
-#### Quiet Hours
-- **Do Not Disturb**: Set quiet hours
-- **Time Zone**: Respect your local time
-- **Weekend Mode**: Different weekend settings
-- **Vacation Mode**: Pause notifications temporarily
-
-## 🏆 Profile Stats & Analytics
-
-### Activity Overview
-
-#### Content Metrics
-- **Posts Created**: Total number of posts
-- **Comments Made**: Your comment activity
-- **Likes Given**: How many likes you've given
-- **Shares Made**: Content you've shared
-- **Profile Views**: How many times your profile was viewed
-
-#### Engagement Stats
-- **Followers**: People following your content
-- **Following**: People you follow
-- **Connections**: Mutual connections
-- **Engagement Rate**: How much others interact with your content
-
-### Growth Tracking
-
-#### Monthly Reports
-- **Activity Summary**: Monthly activity overview
-- **Growth Trends**: How your metrics are changing
-- **Popular Content**: Your most successful posts
-- **Audience Insights**: Who's engaging with your content
-
-#### Goal Setting
-- **Content Goals**: Set posting frequency targets
-- **Engagement Goals**: Target engagement metrics
-- **Growth Goals**: Follower/connection targets
-- **Progress Tracking**: Monitor goal achievement
-
-## 🔗 Social Connections
-
-### Adding Social Links
-
-#### Supported Platforms
-- **LinkedIn**: Professional networking
-- **Twitter**: Microblogging platform
-- **GitHub**: Code repositories
-- **Instagram**: Photo and video sharing
-- **Facebook**: Social networking
-- **YouTube**: Video content
-- **Personal Website**: Your own site
-- **Portfolio**: Online portfolio
-
-#### Link Verification
-- **Verified Links**: Prove you own the account
-- **Trust Indicators**: Show verified status
-- **Click Tracking**: Monitor link clicks
-- **Link Preview**: Show content previews
-
-### Managing Connections
-
-#### Connection Types
-- **Followers**: People who follow your content
-- **Following**: People whose content you follow
-- **Mutual Friends**: People you both follow
-- **Blocked Users**: Users you've blocked
-- **Pending Requests**: Connection requests awaiting approval
-
-#### Connection Management
-- **Accept/Decline**: Manage connection requests
-- **Unfollow**: Stop following someone
-- **Block**: Prevent someone from contacting you
-- **Report**: Report inappropriate behavior
-
-## 📊 Account Management
-
-### Data & Privacy
-
-#### Data Export
-- **Download Data**: Export your account data
-- **Content Archive**: Download all your content
-- **Settings Backup**: Export your settings
-- **Privacy Report**: See what data is collected
-
-#### Data Deletion
-- **Delete Content**: Remove specific content
-- **Clear History**: Delete activity history
-- **Account Deletion**: Permanently delete account
-- **Data Retention**: How long data is kept
-
-### Account Status
-
-#### Account Types
-- **Free Account**: Basic features included
-- **Premium Account**: Advanced features
-- **Business Account**: Professional tools
-- **Developer Account**: API access
-
-#### Subscription Management
-- **Current Plan**: Your active subscription
-- **Billing History**: Payment records
-- **Upgrade Options**: Available plan upgrades
-- **Cancellation**: How to cancel subscription
-
-## 🛠️ Profile Maintenance
-
-### Regular Updates
-
-#### Monthly Tasks
-- **Profile Picture**: Update if needed
-- **Bio**: Keep information current
-- **Contact Info**: Verify accuracy
-- **Privacy Settings**: Review and adjust
-- **Notification Preferences**: Update as needed
-
-#### Quarterly Tasks
-- **Security Review**: Check login activity
-- **Connection Audit**: Review your connections
-- **Content Review**: Clean up old content
-- **Goal Assessment**: Review and adjust goals
-
-### Profile Optimization
-
-#### Discoverability
-- **Complete Profile**: Fill out all sections
-- **Keywords**: Use relevant keywords in bio
-- **Regular Activity**: Stay active on the platform
-- **Quality Content**: Share valuable content
-- **Engagement**: Interact with others
-
-#### Professional Branding
-- **Consistent Imagery**: Use consistent colors/style
-- **Professional Photo**: High-quality profile picture
-- **Clear Value Proposition**: Communicate what you do
-- **Contact Information**: Make it easy to reach you
-- **Portfolio Links**: Showcase your work
-
-## 🔍 Troubleshooting Profile Issues
-
-### Common Problems
-
-#### Profile Not Updating
-**Issue**: Changes aren't saving
-**Solutions**:
-1. Check internet connection
-2. Try refreshing the page
-3. Clear browser cache
-4. Disable browser extensions
-5. Try a different browser
-
-#### Image Upload Issues
-**Issue**: Can't upload profile picture
-**Solutions**:
-1. Check file size (under 5MB)
-2. Use supported format (JPG, PNG, GIF)
-3. Try different image
-4. Check browser permissions
-5. Clear browser cache
-
-#### Privacy Settings Not Working
-**Issue**: Profile still visible when set to private
-**Solutions**:
-1. Wait 24 hours for changes to take effect
-2. Clear browser cache
-3. Check all privacy settings
-4. Contact support if issue persists
-
-### Getting Help
-
-#### Self-Service
-- **Help Center**: Search for solutions
-- **FAQ**: Common questions answered
-- **Video Tutorials**: Step-by-step guides
-- **Community Forum**: Ask other users
-
-#### Contact Support
-- **Email Support**: Send detailed description
-- **Live Chat**: Real-time assistance
-- **Phone Support**: For urgent issues
-- **Bug Reports**: Report technical issues
-
-## 🎯 Profile Best Practices
-
-### For Personal Use
-
-#### Building Your Online Presence
-1. **Complete Your Profile**: Fill out all sections
-2. **Professional Photo**: Use a clear, current photo
-3. **Engaging Bio**: Tell your story concisely
-4. **Regular Updates**: Keep information current
-5. **Consistent Branding**: Use consistent style
-
-#### Privacy Considerations
-1. **Review Settings**: Check privacy settings monthly
-2. **Limit Personal Info**: Don't overshare
-3. **Secure Account**: Use strong password and 2FA
-4. **Monitor Activity**: Check login history regularly
-5. **Trust Carefully**: Be selective with connections
-
-### For Business Use
-
-#### Professional Profile Setup
-1. **Brand Consistency**: Match your company branding
-2. **Clear Value Proposition**: Communicate what you offer
-3. **Contact Information**: Make it easy to reach you
-4. **Portfolio Links**: Showcase your work
-5. **Regular Content**: Share valuable insights
-
-#### Networking Strategy
-1. **Strategic Connections**: Connect with industry professionals
-2. **Thought Leadership**: Share expertise and insights
-3. **Engagement**: Actively participate in discussions
-4. **Content Quality**: Share high-quality, relevant content
-5. **Consistency**: Maintain regular activity
-
-### For Creative Use
-
-#### Showcasing Your Work
-1. **Visual Profile**: Use high-quality images
-2. **Portfolio Integration**: Link to your best work
-3. **Creative Bio**: Let your personality shine
-4. **Regular Updates**: Share work in progress
-5. **Community Engagement**: Connect with other creators
-
-## 📚 Next Steps
-
-Now that you understand profile management, explore:
-
-1. **[User Interface Guide](./interface.md)** - Navigate the application
-2. **[Content Management](./content.md)** - Create and manage content
-3. **[Media Management](./media.md)** - Handle files and images
-4. **[Authentication Guide](./authentication.md)** - Secure your account
-5. **[Features Overview](./features/)** - Discover all features
-
-## 🎉 Conclusion
-
-Your profile is your digital identity on Rustelo. By following the guidelines in this comprehensive guide, you'll have a professional, secure, and engaging profile that represents you well.
-
-Remember to:
-- Keep your information current and accurate
-- Regularly review your privacy settings
-- Use high-quality images and engaging content
-- Stay active and engaged with the community
-- Maintain consistency across all your online presence
-
-**Make your profile work for you!** 🌟✨
\ No newline at end of file
diff --git a/server/Cargo.toml b/server/Cargo.toml
deleted file mode 100644
index 72389fc..0000000
--- a/server/Cargo.toml
+++ /dev/null
@@ -1,198 +0,0 @@
-[package]
-name = "server"
-version = "0.1.0"
-edition = "2024"
-authors = ["Rustelo Contributors"]
-license = "MIT"
-description = "A modular Rust web application template built with Leptos, Axum, and optional components"
-documentation = "https://docs.rs/server"
-repository = "https://github.com/yourusername/rustelo"
-homepage = "https://rustelo.dev"
-readme = "../../README.md"
-keywords = ["rust", "web", "leptos", "axum", "template"]
-categories = ["web-programming", "template-engine"]
-
-[lib]
-crate-type = ["cdylib", "lib"]
-
-[dependencies]
-leptos = { workspace = true, features = ["ssr"] }
-leptos_router = { workspace = true }
-leptos_axum = { workspace = true }
-leptos_config = { workspace = true }
-leptos_meta = { workspace = true }
-serde = { workspace = true }
-serde_json = { workspace = true }
-shared = { workspace = true }
-tracing = { workspace = true }
-tracing-subscriber = { workspace = true, features = ["env-filter"] }
-toml = { workspace = true }
-fluent = { workspace = true }
-fluent-bundle = { workspace = true }
-unic-langid = { workspace = true }
-
-client = { path = "../client" }
-axum = { version = "0.8"}
-tokio = { version = "1", features = ["rt-multi-thread"]}
-tower = { version = "0.5.2"}
-tower-http = { version = "0.6.6", features = ["fs"]}
-dotenvy = "0.15"
-thiserror = "2.0.12"
-regex = { workspace = true }
-rand = "0.9.1"
-gloo-timers = "0.3"
-async-trait = "0.1"
-anyhow = "1.0"
-hex = "0.4"
-reqwest = { version = "0.12", features = ["json"] }
-rhai = { version = "1.22", features = ["serde", "only_i64", "no_float"] }
-
-# Email support
-lettre = { version = "0.11", features = ["tokio1-native-tls", "smtp-transport", "pool", "hostname", "builder"], optional = true }
-handlebars = { version = "6.3", optional = true }
-urlencoding = { version = "2.1", optional = true }
-
-# TLS Support (optional)
-axum-server = { version = "0.7", features = ["tls-rustls"], optional = true }
-rustls = { version = "0.23", optional = true }
-rustls-pemfile = { version = "2.2", optional = true }
-
-# Authentication & Authorization (optional)
-jsonwebtoken = { version = "9.3", optional = true }
-argon2 = { version = "0.5", optional = true }
-uuid = { version = "1.17", features = ["v4", "serde", "js"], optional = true }
-chrono = { version = "0.4", features = ["serde"], optional = true }
-oauth2 = { version = "5.0", optional = true }
-tower-sessions = { version = "0.14", optional = true }
-sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "sqlite", "chrono", "uuid", "migrate"], optional = true }
-tower-cookies = { version = "0.11", optional = true }
-time = { version = "0.3.41", features = ["serde"], optional = true }
-
-# 2FA Support (optional)
-totp-rs = { version = "5.7.0", optional = true }
-qrcode = { version = "0.14", features = ["svg"], optional = true }
-base32 = { version = "0.5", optional = true }
-sha2 = { version = "0.10", optional = true }
-base64 = { version = "0.22", optional = true }
-
-# Cryptography dependencies
-aes-gcm = { version = "0.10", optional = true }
-clap = { version = "4.5", features = ["derive"] }
-
-# Metrics dependencies
-prometheus = { version = "0.14", optional = true }
-
-# Content Management & Rendering (optional)
-pulldown-cmark = { version = "0.13.0", features = ["simd"], optional = true }
-syntect = { version = "5.2", optional = true }
-serde_yaml = { version = "0.9", optional = true }
-tempfile = { version = "3.20", optional = true }
-tera = { version = "1.20", optional = true }
-
-# Binary targets
-[[bin]]
-name = "server"
-path = "src/main.rs"
-
-[[bin]]
-name = "config_tool"
-path = "src/bin/config_tool.rs"
-
-[[bin]]
-name = "crypto_tool"
-path = "src/bin/crypto_tool.rs"
-required-features = ["crypto"]
-
-[[bin]]
-name = "config_crypto_tool"
-path = "src/bin/config_crypto_tool.rs"
-required-features = ["crypto"]
-
-[[bin]]
-name = "test_config"
-path = "src/bin/test_config.rs"
-
-[[bin]]
-name = "test_database"
-path = "src/bin/test_database.rs"
-required-features = ["auth"]
-
-[[bin]]
-name = "db_tool"
-path = "src/bin/db_tool.rs"
-required-features = ["auth"]
-
-[dev-dependencies]
-tempfile = "3.20"
-
-[features]
-default = []
-hydrate = []
-ssr = []
-rbac = [
- "auth"
-]
-
-# Optional features
-tls = ["axum-server/tls-rustls", "rustls", "rustls-pemfile"]
-auth = [
- "jsonwebtoken",
- "argon2",
- "aes-gcm",
- "uuid",
- "chrono",
- "oauth2",
- "tower-sessions",
- "sqlx",
- "totp-rs",
- "qrcode",
- "base32",
- "sha2",
- "base64",
- "tower-cookies",
- "time",
- "crypto"
-]
-crypto = ["aes-gcm", "chrono", "base64", "time"]
-content-db = [
- "sqlx",
- "pulldown-cmark",
- "syntect",
- "serde_yaml",
- "tempfile",
- "uuid",
- "chrono",
- "tera"
-]
-email = [
- "lettre",
- "handlebars",
- "urlencoding"
-]
-metrics = ["prometheus", "chrono"]
-examples = []
-production = ["auth", "content-db", "crypto", "email", "metrics", "tls"]
-
-[package.metadata.docs.rs]
-# Configuration for docs.rs
-all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
-
-
-# [features]
-# hydrate = ["leptos/hydrate"]
-# ssr = [
-# "axum",
-# "tokio",
-# "tower",
-# "tower-http",
-# "leptos_axum",
-# "leptos/ssr",
-# "leptos_meta/ssr",
-# "leptos_router/ssr",
-# # "dep:tracing",
-# ]
-
-# [package.metadata.cargo-all-features]
-# denylist = ["axum", "tokio", "tower", "tower-http", "leptos_axum"]
-# skip_feature_sets = [["ssr", "hydrate"], []]
diff --git a/server/Cargo.toml.save b/server/Cargo.toml.save
deleted file mode 100644
index 562efeb..0000000
--- a/server/Cargo.toml.save
+++ /dev/null
@@ -1,190 +0,0 @@
-[package]
-name = "server"
-version = "0.1.0"
-edition = "2024"
-authors = ["Rustelo Contributors"]
-license = "MIT"
-description = "A modular Rust web application template built with Leptos, Axum, and optional components"
-documentation = "https://docs.rs/server"
-repository = "https://github.com/yourusername/rustelo"
-homepage = "https://rustelo.dev"
-readme = "../../README.md"
-keywords = ["rust", "web", "leptos", "axum", "template"]
-categories = ["web-programming", "template-engine"]
-
-[lib]
-crate-type = ["cdylib", "lib"]
-
-[dependencies]
-leptos = { workspace = true, features = ["ssr"] }
-leptos_router = { workspace = true }
-leptos_axum = { workspace = true }
-leptos_config = { workspace = true }
-leptos_meta = { workspace = true }
-serde = { workspace = true }
-serde_json = { workspace = true }
-shared = { workspace = true }
-tracing = { workspace = true }
-tracing-subscriber = { workspace = true, features = ["env-filter"] }
-toml = { workspace = true }
-fluent = { workspace = true }
-fluent-bundle = { workspace = true }
-unic-langid = { workspace = true }
-
-client = { path = "../client" }
-axum = { version = "0.8"}
-tokio = { version = "1", features = ["rt-multi-thread"]}
-tower = { version = "0.5.2"}
-tower-http = { version = "0.6.6", features = ["fs"]}
-dotenvy = "0.15"
-thiserror = "2.0.12"
-regex = { workspace = true }
-rand = "0.9.1"
-gloo-timers = "0.3"
-async-trait = "0.1"
-anyhow = "1.0"
-hex = "0.4"
-reqwest = { version = "0.12", features = ["json"] }
-rhai = { version = "1.22", features = ["serde", "only_i64", "no_float"] }
-
-# Email support
-lettre = { version = "0.11", features = ["tokio1-native-tls", "smtp-transport", "pool", "hostname", "builder"], optional = true }
-handlebars = { version = "6.3", optional = true }
-urlencoding = { version = "2.1", optional = true }
-
-# TLS Support (optional)
-axum-server = { version = "0.7", features = ["tls-rustls"], optional = true }
-rustls = { version = "0.23", optional = true }
-rustls-pemfile = { version = "2.2", optional = true }
-
-# Authentication & Authorization (optional)
-jsonwebtoken = { version = "9.3", optional = true }
-argon2 = { version = "0.5", optional = true }
-uuid = { version = "1.17", features = ["v4", "serde", "js"], optional = true }
-chrono = { version = "0.4", features = ["serde"], optional = true }
-oauth2 = { version = "5.0", optional = true }
-tower-sessions = { version = "0.14", optional = true }
-sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "sqlite", "chrono", "uuid", "migrate"], optional = true }
-tower-cookies = { version = "0.11", optional = true }
-time = { version = "0.3.41", features = ["serde"], optional = true }
-
-# 2FA Support (optional)
-totp-rs = { version = "5.7.0", optional = true }
-qrcode = { version = "0.14", features = ["svg"], optional = true }
-base32 = { version = "0.5", optional = true }
-sha2 = { version = "0.10", optional = true }
-base64 = { version = "0.22", optional = true }
-
-# Cryptography dependencies
-aes-gcm = { version = "0.10", optional = true }
-clap = { version = "4.5", features = ["derive"] }
-
-# Metrics dependencies
-prometheus = { version = "0.14", optional = true }
-
-# Content Management & Rendering (optional)
-pulldown-cmark = { version = "0.13.0", features = ["simd"], optional = true }
-syntect = { version = "5.2", optional = true }
-serde_yaml = { version = "0.9", optional = true }
-tempfile = { version = "3.20", optional = true }
-tera = { version = "1.20", optional = true }
-
-# Binary targets
-[[bin]]
-name = "server"
-path = "src/main.rs"
-
-[[bin]]
-name = "config_tool"
-path = "src/bin/config_tool.rs"
-
-[[bin]]
-name = "crypto_tool"
-path = "src/bin/crypto_tool.rs"
-
-[[bin]]
-name = "config_crypto_tool"
-path = "src/bin/config_crypto_tool.rs"
-
-[[bin]]
-name = "test_config"
-path = "src/bin/test_config.rs"
-
-[[bin]]
-name = "test_database"
-path = "src/bin/test_database.rs"
-
-[dev-dependencies]
-tempfile = "3.20"
-
-[features]
-default = ["auth", "content-db", "crypto", "email", "metrics", "examples"]
-hydrate = []
-ssr = []
-rbac = [
- "auth"
-]
-
-# Optional features
-tls = ["axum-server/tls-rustls", "rustls", "rustls-pemfile"]
-auth = [
- "jsonwebtoken",
- "argon2",
- "aes-gcm",
- "uuid",
- "chrono",
- "oauth2",
- "tower-sessions",
- "sqlx",
- "totp-rs",
- "qrcode",
- "base32",
- "sha2",
- "base64",
- "tower-cookies",
- "time",
- "crypto"
-]
-crypto = ["aes-gcm", "chrono"]
-content-db = [
- "sqlx",
- "pulldown-cmark",
- "syntect",
- "serde_yaml",
- "tempfile",
- "uuid",
- "chrono",
- "tera"
-]
-email = [
- "lettre",
- "handlebars",
- "urlencoding"
-]
-metrics = ["prometheus", "chrono"]
-examples = []
-production = ["auth", "content-db", "crypto", "email", "metrics", "tls"]
-
-[package.metadata.docs.rs]
-# Configuration for docs.rs
-all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
-
-
-# [features]
-# hydrate = ["leptos/hydrate"]
-# ssr = [
-# "axum",
-# "tokio",
-# "tower",
-# "tower-http",
-# "leptos_axum",
-# "leptos/ssr",
-# "leptos_meta/ssr",
-# "leptos_router/ssr",
-# # "dep:tracing",
-# ]
-
-# [package.metadata.cargo-all-features]
-# denylist = ["axum", "tokio", "tower", "tower-http", "leptos_axum"]
-# skip_feature_sets = [["ssr", "hydrate"], []]
diff --git a/server/config.toml b/server/config.toml
deleted file mode 100644
index c1164fb..0000000
--- a/server/config.toml
+++ /dev/null
@@ -1,58 +0,0 @@
-# Rustelo Configuration File
-# Generated by Configuration Wizard
-
-root_path = "."
-
-[features]
-auth = true
-content-db = true
-crypto = true
-email = true
-examples = true
-rbac = true
-tls = true
-
-[server]
-protocol = "http"
-host = "127.0.0.1"
-port = 3030
-environment = "dev"
-workers = 4
-
-[database]
-url = "sqlite:rustelo.db"
-max_connections = 10
-enable_logging = true
-
-[auth.jwt]
-secret = "your-secret-key-here"
-expiration = 3600
-
-[auth.security]
-max_login_attempts = 5
-require_email_verification = false
-
-[email]
-smtp_host = "fdasf"
-smtp_port = 587
-smtp_username = "fdsfs"
-smtp_password = "fds"
-from_email = "noreply@localhost"
-from_name = "Rustelo App"
-
-[security]
-enable_csrf = true
-rate_limit_requests = 100
-bcrypt_cost = 12
-
-[ssl]
-force_https = true
-
-[cache]
-enabled = true
-type = "memory"
-default_ttl = 3600
-
-[build_info]
-environment = "dev"
-config_version = "1.0.0"
diff --git a/server/examples/.gitignore b/server/examples/.gitignore
deleted file mode 100644
index dd46d5e..0000000
--- a/server/examples/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Examples directory - development utilities only
-# These are not meant to be deployed to production
-
-# Compiled binaries
-/target/
-
-# Generated files
-*.tmp
-*.log
-
-# IDE files
-.vscode/
-.idea/
-*.swp
-*.swo
-
-# OS files
-.DS_Store
-Thumbs.db
-
-# Development artifacts
-*.bak
-*.orig
diff --git a/server/examples/config_example.rs b/server/examples/config_example.rs
deleted file mode 100644
index 148a103..0000000
--- a/server/examples/config_example.rs
+++ /dev/null
@@ -1,307 +0,0 @@
-//! Configuration System Example
-//!
-//! This example demonstrates how to use the configuration system
-//! with TOML files and environment variable overrides.
-
-use server::config::{Config, Environment, Protocol};
-use tempfile::tempdir;
-
-#[tokio::main]
-async fn main() -> Result<(), Box> {
- println!("=== Configuration System Example ===\n");
-
- // Example 1: Load default configuration
- println!("1. Loading default configuration...");
- match Config::load() {
- Ok(config) => {
- println!("✓ Configuration loaded successfully");
- println!(" Server: {}:{}", config.server.host, config.server.port);
- println!(" Environment: {:?}", config.server.environment);
- println!(" Database: {}", config.database.url);
- println!(" App Name: {}", config.app.name);
- println!(" Debug Mode: {}", config.app.debug);
-
- // Show server directories
- println!(" Server Directories:");
- println!(" Public: {}", config.server_dirs.public_dir);
- println!(" Uploads: {}", config.server_dirs.uploads_dir);
- println!(" Logs: {}", config.server_dirs.logs_dir);
- println!(" Cache: {}", config.server_dirs.cache_dir);
- }
- Err(e) => {
- println!("✗ Failed to load configuration: {}", e);
- println!(" This is expected if no config file exists");
- }
- }
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 2: Demonstrate TOML file loading
- println!("2. Testing TOML file loading...");
-
- let temp_dir = tempdir()?;
- let config_path = temp_dir.path().join("test_config.toml");
-
- let test_config = r#"
-[server]
-protocol = "http"
-host = "localhost"
-port = 4000
-environment = "development"
-log_level = "debug"
-
-[database]
-url = "postgresql://test:test@localhost:5432/test_db"
-max_connections = 5
-min_connections = 1
-connect_timeout = 30
-idle_timeout = 600
-max_lifetime = 1800
-
-[session]
-secret = "test-secret-key"
-cookie_name = "test_session"
-cookie_secure = false
-cookie_http_only = true
-cookie_same_site = "lax"
-max_age = 7200
-
-[cors]
-allowed_origins = ["http://localhost:4000"]
-allowed_methods = ["GET", "POST"]
-allowed_headers = ["Content-Type"]
-allow_credentials = true
-max_age = 3600
-
-[static]
-assets_dir = "public"
-site_root = "target/site"
-site_pkg_dir = "pkg"
-
-[server_dirs]
-public_dir = "public"
-uploads_dir = "uploads"
-logs_dir = "logs"
-temp_dir = "tmp"
-cache_dir = "cache"
-config_dir = "config"
-data_dir = "data"
-backup_dir = "backups"
-
-[security]
-enable_csrf = false
-csrf_token_name = "csrf_token"
-rate_limit_requests = 1000
-rate_limit_window = 60
-bcrypt_cost = 4
-
-[oauth]
-enabled = false
-
-[email]
-enabled = false
-smtp_host = "localhost"
-smtp_port = 587
-smtp_username = ""
-smtp_password = ""
-from_email = "test@example.com"
-from_name = "Test App"
-
-[redis]
-enabled = false
-url = "redis://localhost:6379"
-pool_size = 10
-connection_timeout = 5
-command_timeout = 5
-
-[app]
-name = "Test Application"
-version = "0.1.0"
-debug = true
-enable_metrics = true
-enable_health_check = true
-enable_compression = false
-max_request_size = 10485760
-
-[logging]
-format = "text"
-level = "debug"
-file_path = "logs/test.log"
-max_file_size = 10485760
-max_files = 5
-enable_console = true
-enable_file = true
-
-[content]
-enabled = false
-content_dir = "content"
-cache_enabled = false
-cache_ttl = 60
-max_file_size = 5242880
-
-[features]
-auth = true
-tls = false
-content_db = true
-two_factor_auth = false
-"#;
-
- std::fs::write(&config_path, test_config)?;
-
- match Config::load_from_file(&config_path) {
- Ok(config) => {
- println!("✓ Configuration loaded from TOML file");
- println!(" Server: {}:{}", config.server.host, config.server.port);
- println!(" App Name: {}", config.app.name);
- println!(" Database: {}", config.database.url);
- }
- Err(e) => {
- println!("✗ Failed to load from TOML file: {}", e);
- }
- }
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 3: Demonstrate configuration validation
- println!("3. Testing configuration validation...");
-
- // Create a config that should pass validation
- let valid_config = Config::default();
- match valid_config.validate() {
- Ok(_) => {
- println!("✓ Default configuration validation passed");
- }
- Err(e) => {
- println!("✗ Default configuration validation failed: {}", e);
- }
- }
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 4: Demonstrate configuration helper methods
- println!("4. Testing configuration helper methods...");
-
- let config = Config::default();
- println!("✓ Configuration methods:");
- println!(" Server Address: {}", config.server_address());
- println!(" Server URL: {}", config.server_url());
- println!(" Is Development: {}", config.is_development());
- println!(" Is Production: {}", config.is_production());
- println!(" Requires TLS: {}", config.requires_tls());
-
- // Database pool configuration
- let pool_config = config.database_pool_config();
- println!(" Database Pool Config:");
- println!(" Max Connections: {}", pool_config.max_connections);
- println!(" Min Connections: {}", pool_config.min_connections);
- println!(" Connect Timeout: {:?}", pool_config.connect_timeout);
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 5: Show feature flags
- println!("5. Feature flags configuration...");
-
- let config = Config::default();
- println!("✓ Feature flags:");
- println!(" Auth: {:?}", config.features.auth);
- println!(" RBAC: {:?}", config.features.rbac);
- println!(" Content: {:?}", config.features.content);
- println!(" Security: {:?}", config.features.security);
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 6: Show server directories configuration
- println!("6. Server directories configuration...");
-
- let config = Config::default();
- println!("✓ Server directories:");
- println!(" Public Directory: {}", config.server_dirs.public_dir);
- println!(" Uploads Directory: {}", config.server_dirs.uploads_dir);
- println!(" Logs Directory: {}", config.server_dirs.logs_dir);
- println!(" Temp Directory: {}", config.server_dirs.temp_dir);
- println!(" Cache Directory: {}", config.server_dirs.cache_dir);
- println!(" Config Directory: {}", config.server_dirs.config_dir);
- println!(" Data Directory: {}", config.server_dirs.data_dir);
- println!(" Backup Directory: {}", config.server_dirs.backup_dir);
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 7: Show security configuration
- println!("7. Security configuration...");
-
- let config = Config::default();
- println!("✓ Security settings:");
- println!(" CSRF Enabled: {}", config.security.enable_csrf);
- println!(
- " Rate Limit: {} requests/{} seconds",
- config.security.rate_limit_requests, config.security.rate_limit_window
- );
- println!(" BCrypt Cost: {}", config.security.bcrypt_cost);
- println!(" Session Config:");
- println!(" Cookie Name: {}", config.session.cookie_name);
- println!(" Cookie Secure: {}", config.session.cookie_secure);
- println!(" Cookie HTTP Only: {}", config.session.cookie_http_only);
- println!(" Max Age: {} seconds", config.session.max_age);
-
- println!("\n{}\n", "=".repeat(50));
-
- // Example 8: Create a custom configuration programmatically
- println!("8. Creating custom configuration...");
-
- let custom_config = Config {
- server: server::config::ServerConfig {
- protocol: Protocol::Http,
- host: "0.0.0.0".to_string(),
- port: 8080,
- environment: Environment::Development,
- log_level: "debug".to_string(),
- tls: None,
- },
- app: server::config::AppConfig {
- name: "Custom Example App".to_string(),
- version: "2.0.0".to_string(),
- debug: true,
- enable_metrics: true,
- enable_health_check: true,
- enable_compression: false,
- max_request_size: 5 * 1024 * 1024, // 5MB
- admin_email: Some("admin@example.com".to_string()),
- },
- server_dirs: server::config::ServerDirConfig {
- public_dir: "custom_public".to_string(),
- uploads_dir: "custom_uploads".to_string(),
- logs_dir: "custom_logs".to_string(),
- temp_dir: "custom_tmp".to_string(),
- cache_dir: "custom_cache".to_string(),
- config_dir: "custom_config".to_string(),
- data_dir: "custom_data".to_string(),
- backup_dir: "custom_backups".to_string(),
- template_dir: Some("custom_templates".to_string()),
- },
- ..Default::default()
- };
-
- println!("✓ Custom configuration created:");
- println!(" App Name: {}", custom_config.app.name);
- println!(" Server: {}", custom_config.server_address());
- println!(" Metrics Enabled: {}", custom_config.app.enable_metrics);
- println!(
- " Custom Public Dir: {}",
- custom_config.server_dirs.public_dir
- );
- println!(
- " Custom Uploads Dir: {}",
- custom_config.server_dirs.uploads_dir
- );
-
- println!("\n{}\n", "=".repeat(50));
- println!("Configuration example completed successfully!");
- println!("\nTo use this configuration system in your application:");
- println!("1. Create a config.toml file in your project root");
- println!("2. Use environment-specific files (config.dev.toml, config.prod.toml)");
- println!("3. Set environment variables to override specific settings");
- println!("4. Call Config::load() in your application");
- println!("5. Use config.server_dirs for all directory paths");
-
- Ok(())
-}
diff --git a/server/examples/generate_hash.rs b/server/examples/generate_hash.rs
deleted file mode 100644
index 4ea6b5c..0000000
--- a/server/examples/generate_hash.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-use argon2::{
- Argon2,
- password_hash::{PasswordHasher, SaltString, rand_core::OsRng},
-};
-use std::env;
-
-fn main() {
- let args: Vec = env::args().collect();
-
- if args.len() != 2 {
- eprintln!("Usage: {} ", args[0]);
- std::process::exit(1);
- }
-
- let password = &args[1];
- let argon2 = Argon2::default();
- let salt = SaltString::generate(&mut OsRng);
-
- match argon2.hash_password(password.as_bytes(), &salt) {
- Ok(password_hash) => {
- println!("Argon2 hash for '{}': {}", password, password_hash);
- }
- Err(e) => {
- eprintln!("Error generating hash: {}", e);
- std::process::exit(1);
- }
- }
-}
diff --git a/server/examples/root_path_example.rs b/server/examples/root_path_example.rs
deleted file mode 100644
index ba69ca7..0000000
--- a/server/examples/root_path_example.rs
+++ /dev/null
@@ -1,255 +0,0 @@
-use server::config::Config;
-
-fn main() -> Result<(), Box> {
- println!("=== ROOT_PATH Configuration Example ===\n");
-
- // Example 1: Using default root path (current directory)
- println!("1. Default ROOT_PATH behavior:");
- let config = Config::load()?;
- println!(" Root path: {}", config.root_path);
- println!(" Assets dir: {}", config.static_files.assets_dir);
- println!(" Site root: {}", config.static_files.site_root);
- println!(" Logs dir: {}", config.server_dirs.logs_dir);
- println!();
-
- // Example 2: Demonstrating path resolution with custom root
- println!("2. Path resolution with custom root:");
- println!(" Note: ROOT_PATH can be set via environment variable");
- println!(" Example: ROOT_PATH=/var/www/myapp ./my-app");
- println!(" Current ROOT_PATH: {}", config.root_path);
- println!();
-
- // Example 3: Using get_absolute_path method
- println!("3. Converting relative paths to absolute:");
- let relative_path = "uploads/images";
- match config.get_absolute_path(relative_path) {
- Ok(absolute_path) => {
- println!(" Relative: {}", relative_path);
- println!(" Absolute: {}", absolute_path);
- }
- Err(e) => {
- println!(" Error resolving path: {}", e);
- }
- }
- println!();
-
- // Example 4: Demonstrating path resolution behavior
- println!("4. Path resolution examples:");
-
- let test_cases = vec![
- ("relative/path", "Relative path"),
- ("./config", "Current directory relative"),
- ("../parent", "Parent directory relative"),
- ("/absolute/path", "Absolute path (unchanged)"),
- ];
-
- let config = Config::load()?;
- for (path, description) in test_cases {
- match config.get_absolute_path(path) {
- Ok(resolved) => {
- println!(" {} ({}): {}", description, path, resolved);
- }
- Err(e) => {
- println!(" {} ({}): Error - {}", description, path, e);
- }
- }
- }
- println!();
-
- // Example 5: Configuration file paths
- println!("5. Configuration file discovery:");
- println!(" The system looks for config files in this order:");
- println!(" 1. Path specified by CONFIG_FILE environment variable");
- println!(" 2. Environment-specific files (config.dev.toml, config.prod.toml)");
- println!(" 3. Default config.toml");
- println!(" 4. Searches from current directory up to root directory");
- println!();
-
- // Example 6: Directory structure with ROOT_PATH
- println!("6. Recommended directory structure:");
- println!(" ROOT_PATH/");
- println!(" ├── config.toml");
- println!(" ├── config.dev.toml");
- println!(" ├── config.prod.toml");
- println!(" ├── public/ (static assets)");
- println!(" ├── content/ (content files)");
- println!(" ├── uploads/ (user uploads)");
- println!(" ├── logs/ (application logs)");
- println!(" ├── cache/ (temporary cache)");
- println!(" ├── data/ (application data)");
- println!(" └── backups/ (backup files)");
- println!();
-
- // Example 7: Environment variable usage
- println!("7. Useful environment variables:");
- println!(" ROOT_PATH=/path/to/app # Set application root");
- println!(" CONFIG_FILE=/path/config.toml # Override config file");
- println!(" ENVIRONMENT=production # Set environment");
- println!(" SERVER_HOST=0.0.0.0 # Override server host");
- println!(" SERVER_PORT=8080 # Override server port");
- println!(" DATABASE_URL=postgresql://... # Override database URL");
- println!();
-
- // Example 8: Docker deployment example
- println!("8. Docker deployment example:");
- println!(" FROM rust:latest");
- println!(" WORKDIR /app");
- println!(" COPY . .");
- println!(" ENV ROOT_PATH=/app");
- println!(" ENV ENVIRONMENT=production");
- println!(" RUN cargo build --release");
- println!(" EXPOSE 3030");
- println!(" CMD [\"./target/release/server\"]");
- println!();
-
- println!("✅ ROOT_PATH configuration example completed!");
- println!("💡 Tips:");
- println!(" - Use absolute paths in production for clarity");
- println!(" - Set ROOT_PATH in your deployment environment");
- println!(" - All relative paths in config files are resolved against ROOT_PATH");
- println!(" - Directory creation is automatic if paths don't exist");
-
- Ok(())
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use std::fs;
- use tempfile::tempdir;
-
- #[test]
- fn test_root_path_resolution() {
- // Create a temporary directory structure
- let temp_dir = tempdir().unwrap();
- let temp_path = temp_dir.path().to_string_lossy().to_string();
-
- // Note: In real tests, you would set environment variables before process start
- // For this test, we'll create a config with a custom root path in the TOML
-
- // Create test directories
- let public_dir = temp_dir.path().join("public");
- let logs_dir = temp_dir.path().join("logs");
- fs::create_dir_all(&public_dir).unwrap();
- fs::create_dir_all(&logs_dir).unwrap();
-
- // Create a test config file with custom root path
- let config_content = format!(
- r#"
-root_path = "{}"
-
-[server]
-protocol = "http"
-host = "localhost"
-port = 3030
-environment = "development"
-log_level = "info"
-
-[database]
-url = "postgresql://test:test@localhost:5432/test"
-max_connections = 10
-min_connections = 1
-connect_timeout = 30
-idle_timeout = 600
-max_lifetime = 1800
-
-[session]
-secret = "test-secret"
-cookie_name = "session_id"
-cookie_secure = false
-cookie_http_only = true
-cookie_same_site = "lax"
-max_age = 3600
-
-[cors]
-allowed_origins = ["http://localhost:3030"]
-allowed_methods = ["GET", "POST"]
-allowed_headers = ["Content-Type"]
-allow_credentials = true
-max_age = 3600
-
-[static]
-assets_dir = "public"
-site_root = "target/site"
-site_pkg_dir = "pkg"
-
-[server_dirs]
-public_dir = "public"
-uploads_dir = "uploads"
-logs_dir = "logs"
-temp_dir = "tmp"
-cache_dir = "cache"
-config_dir = "config"
-data_dir = "data"
-backup_dir = "backups"
-
-[security]
-enable_csrf = true
-csrf_token_name = "csrf_token"
-rate_limit_requests = 100
-rate_limit_window = 60
-bcrypt_cost = 12
-
-[oauth]
-enabled = false
-
-[email]
-enabled = false
-smtp_host = "localhost"
-smtp_port = 587
-smtp_username = ""
-smtp_password = ""
-from_email = "test@example.com"
-from_name = "Test"
-
-[redis]
-enabled = false
-url = "redis://localhost:6379"
-pool_size = 10
-connection_timeout = 5
-command_timeout = 5
-
-[app]
-name = "Test App"
-version = "0.1.0"
-debug = true
-enable_metrics = false
-enable_health_check = true
-enable_compression = true
-max_request_size = 10485760
-
-[logging]
-format = "json"
-level = "info"
-file_path = "logs/app.log"
-max_file_size = 10485760
-max_files = 5
-enable_console = true
-enable_file = false
-
-[features]
-auth = true
-tls = false
-content_db = true
-two_factor_auth = false
-"#,
- temp_path.replace("\\", "\\\\")
- );
-
- let config_path = temp_dir.path().join("config.toml");
- fs::write(&config_path, config_content).unwrap();
-
- // Test path resolution
- let config = Config::load_from_file(&config_path).unwrap();
-
- // The public_dir should be resolved to an absolute path
- assert!(config.static_files.assets_dir.starts_with(&temp_path));
- assert!(config.server_dirs.logs_dir.starts_with(&temp_path));
-
- // Test get_absolute_path method
- let relative_path = "test/path";
- let absolute_path = config.get_absolute_path(relative_path).unwrap();
- assert!(absolute_path.contains(&temp_path));
- assert!(absolute_path.contains("test/path"));
- }
-}
diff --git a/server/examples/verify_argon2.rs b/server/examples/verify_argon2.rs
deleted file mode 100644
index 76e76f3..0000000
--- a/server/examples/verify_argon2.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-use argon2::{
- Argon2,
- password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString, rand_core::OsRng},
-};
-use std::env;
-
-fn main() {
- let args: Vec = env::args().collect();
-
- if args.len() != 3 {
- eprintln!("Usage: {} ", args[0]);
- eprintln!(
- "Example: {} mypassword '$argon2id$v=19$m=19456,t=2,p=1$...'",
- args[0]
- );
- std::process::exit(1);
- }
-
- let password = &args[1];
- let hash = &args[2];
- let argon2 = Argon2::default();
-
- // Test verification
- match PasswordHash::new(hash) {
- Ok(parsed_hash) => match argon2.verify_password(password.as_bytes(), &parsed_hash) {
- Ok(_) => println!("✅ Password verification successful!"),
- Err(_) => println!("❌ Password verification failed!"),
- },
- Err(e) => {
- eprintln!("❌ Error parsing hash: {}", e);
- std::process::exit(1);
- }
- }
-
- // Also test our service implementation
- println!("\nTesting PasswordService implementation:");
-
- // Generate a new hash
- let salt = SaltString::generate(&mut OsRng);
- match argon2.hash_password(password.as_bytes(), &salt) {
- Ok(new_hash) => {
- println!("Generated hash: {}", new_hash);
-
- // Verify the new hash
- match PasswordHash::new(&new_hash.to_string()) {
- Ok(parsed_new_hash) => {
- match argon2.verify_password(password.as_bytes(), &parsed_new_hash) {
- Ok(_) => println!("✅ New hash verification successful!"),
- Err(_) => println!("❌ New hash verification failed!"),
- }
- }
- Err(e) => {
- eprintln!("❌ Error parsing new hash: {}", e);
- }
- }
- }
- Err(e) => {
- eprintln!("❌ Error generating new hash: {}", e);
- }
- }
-}
diff --git a/server/src/auth/conditional_rbac.rs b/server/src/auth/conditional_rbac.rs
deleted file mode 100644
index 1542b50..0000000
--- a/server/src/auth/conditional_rbac.rs
+++ /dev/null
@@ -1,621 +0,0 @@
-use crate::database::DatabasePool;
-use anyhow::Result;
-use axum::Router;
-use std::sync::Arc;
-
-#[cfg(feature = "rbac")]
-use super::{
- rbac_config::RBACConfigLoader, rbac_middleware::rbac_middleware,
- rbac_repository::RBACRepository, rbac_service::RBACService,
-};
-use crate::config::features::FeatureConfig;
-
-/// Conditional RBAC service that handles optional RBAC functionality
-#[derive(Clone)]
-pub struct ConditionalRBACService {
- #[cfg(feature = "rbac")]
- pub rbac_service: Option>,
- #[cfg(feature = "rbac")]
- pub rbac_repository: Option>,
- pub feature_config: Arc,
-}
-
-impl ConditionalRBACService {
- /// Initialize RBAC service based on feature configuration
- #[allow(dead_code)]
- pub async fn new(
- database_pool: &DatabasePool,
- feature_config: Arc,
- rbac_config_path: Option<&str>,
- ) -> Result {
- #[cfg(feature = "rbac")]
- let (rbac_service, rbac_repository) = if feature_config.is_rbac_enabled() {
- println!("🔐 Initializing RBAC system...");
-
- // Initialize RBAC repository
- let rbac_repository = Arc::new(RBACRepository::from_database_pool(database_pool));
-
- // Initialize RBAC service
- let rbac_service = Arc::new(RBACService::new(rbac_repository.clone()));
-
- // Load configuration if TOML config is enabled
- if feature_config.is_rbac_feature_enabled("toml_config") {
- if let Some(config_path) = rbac_config_path {
- let config_loader = RBACConfigLoader::new(config_path);
-
- // Create default config if it doesn't exist
- if !config_loader.config_exists() {
- println!("📝 Creating default RBAC configuration...");
- config_loader.create_default_config().await?;
- }
-
- // Load and save config to database
- let rbac_config = config_loader.load_from_file().await?;
- rbac_service
- .save_rbac_config("default", &rbac_config, Some("Feature initialization"))
- .await?;
-
- println!(
- "✅ RBAC configuration loaded with {} rules",
- rbac_config.rules.len()
- );
- } else {
- println!("⚠️ RBAC TOML config enabled but no config path provided");
- }
- }
-
- println!("✅ RBAC system initialized successfully");
- (Some(rbac_service), Some(rbac_repository))
- } else {
- println!("ℹ️ RBAC system disabled - using basic role-based authentication");
- (None, None)
- };
-
- #[cfg(not(feature = "rbac"))]
- let (rbac_service, rbac_repository): (Option>, Option>) = {
- println!("ℹ️ RBAC system disabled - feature not compiled");
- (None, None)
- };
-
- #[cfg(feature = "rbac")]
- let result = Self {
- rbac_service,
- rbac_repository,
- feature_config,
- };
-
- #[cfg(not(feature = "rbac"))]
- let result = Self { feature_config };
-
- Ok(result)
- }
-
- /// Check if RBAC is enabled
- pub fn is_enabled(&self) -> bool {
- self.feature_config.is_rbac_enabled()
- }
-
- /// Check if a specific RBAC feature is enabled
- pub fn is_feature_enabled(&self, feature: &str) -> bool {
- self.feature_config.is_rbac_feature_enabled(feature)
- }
-
- /// Get RBAC service (if enabled)
- /// Get RBAC service (if enabled) - no-op when rbac feature is disabled
- #[cfg(feature = "rbac")]
- #[allow(dead_code)]
- pub fn service(&self) -> Option<&Arc> {
- self.rbac_service.as_ref()
- }
-
- /// Get RBAC repository (if enabled) - no-op when rbac feature is disabled
- #[cfg(feature = "rbac")]
- #[allow(dead_code)]
- pub fn repository(&self) -> Option<&Arc> {
- self.rbac_repository.as_ref()
- }
-
- /// Get RBAC service (if enabled) - no-op when rbac feature is disabled
- #[cfg(not(feature = "rbac"))]
- #[allow(dead_code)]
- pub fn service(&self) -> Option<&Arc<()>> {
- None
- }
-
- /// Get RBAC repository (if enabled) - no-op when rbac feature is disabled
- #[cfg(not(feature = "rbac"))]
- #[allow(dead_code)]
- pub fn repository(&self) -> Option<&Arc<()>> {
- None
- }
-
- /// Apply RBAC middleware conditionally
- pub fn apply_middleware(&self, router: Router) -> Router
- where
- S: Clone + Send + Sync + 'static,
- {
- if self.is_enabled() {
- #[cfg(feature = "rbac")]
- if let Some(rbac_service) = &self.rbac_service {
- println!("🛡️ Applying RBAC middleware");
- return router.layer(middleware::from_fn_with_state(
- rbac_service.clone(),
- rbac_middleware,
- ));
- }
- #[cfg(not(feature = "rbac"))]
- {
- println!("⚠️ RBAC enabled but service not available (rbac feature disabled)");
- }
- }
-
- println!("ℹ️ Skipping RBAC middleware (disabled)");
- router
- }
-
- /// Check if database access middleware should be enabled
- pub fn should_enable_database_access(&self) -> bool {
- self.is_feature_enabled("database_access")
- }
-
- /// Check if file access middleware should be enabled
- pub fn should_enable_file_access(&self) -> bool {
- self.is_feature_enabled("file_access")
- }
-
- /// Check if content access should be enabled
- #[allow(dead_code)]
- pub fn should_enable_content_access(&self) -> bool {
- self.is_feature_enabled("content_access")
- }
-
- /// Check if category access middleware should be enabled
- pub fn should_enable_category_access(&self) -> bool {
- self.is_feature_enabled("category_access")
- }
-
- /// Check if role-based access should be enabled
- #[allow(dead_code)]
- pub fn should_enable_role_based_access(&self) -> bool {
- self.is_feature_enabled("role_based_access")
- }
-
- /// Check user access with fallback to basic role check
- #[allow(dead_code)]
- pub async fn check_user_access(
- &self,
- user: &shared::auth::User,
- resource_type: &str,
- resource_name: &str,
- action: &str,
- ) -> Result {
- #[cfg(feature = "rbac")]
- if let Some(rbac_service) = &self.rbac_service {
- // Use RBAC system
- return match resource_type {
- "database" => {
- rbac_service
- .check_database_access(user, resource_name, action)
- .await
- }
- "file" => {
- rbac_service
- .check_file_access(user, resource_name, action)
- .await
- }
- "content" => {
- rbac_service
- .check_content_access(user, resource_name, action)
- .await
- }
- _ => {
- // Use custom access context
- let context = shared::auth::AccessContext {
- user: Some(user.clone()),
- resource_type: match resource_type {
- "database" => shared::auth::ResourceType::Database,
- "file" => shared::auth::ResourceType::File,
- "content" => shared::auth::ResourceType::Content,
- "api" => shared::auth::ResourceType::Api,
- "directory" => shared::auth::ResourceType::Directory,
- _ => shared::auth::ResourceType::Custom(resource_type.to_string()),
- },
- resource_name: resource_name.to_string(),
- action: action.to_string(),
- additional_context: std::collections::HashMap::new(),
- };
- rbac_service.check_access(&context).await
- }
- };
- }
-
- // Fallback to basic role-based access control
- Ok(self.check_basic_access(user, resource_type, resource_name, action))
- }
-
- /// Basic access control fallback when RBAC is disabled
- #[allow(dead_code)]
- fn check_basic_access(
- &self,
- user: &shared::auth::User,
- resource_type: &str,
- _resource_name: &str,
- action: &str,
- ) -> shared::auth::AccessResult {
- use shared::auth::{AccessResult, Role};
-
- // Simple role-based checks
- let has_access = match action {
- "read" => {
- // Users can read most resources
- user.has_role(&Role::User)
- || user.has_role(&Role::Admin)
- || user.has_role(&Role::Moderator)
- }
- "write" | "create" | "update" => {
- // Only moderators and admins can write
- user.has_role(&Role::Admin) || user.has_role(&Role::Moderator)
- }
- "delete" => {
- // Only admins can delete
- user.has_role(&Role::Admin)
- }
- "admin" => {
- // Only admins for admin operations
- user.has_role(&Role::Admin)
- }
- _ => {
- // Default to requiring at least user role
- user.has_role(&Role::User)
- || user.has_role(&Role::Admin)
- || user.has_role(&Role::Moderator)
- }
- };
-
- if has_access {
- AccessResult::Allow
- } else {
- AccessResult::Deny
- }
- }
-
- /// Start background tasks if RBAC features require them
- #[allow(dead_code)]
- pub async fn start_background_tasks(&self) {
- if !self.is_enabled() {
- return;
- }
-
- if self.is_feature_enabled("caching") {
- #[cfg(feature = "rbac")]
- if let Some(rbac_service) = &self.rbac_service {
- let _service = rbac_service.clone();
- tokio::spawn(async move {
- let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(300)); // 5 minutes
- loop {
- interval.tick().await;
- if let Err(e) = service.cleanup_expired_cache().await {
- eprintln!("🧹 Error cleaning up RBAC cache: {}", e);
- } else {
- println!("🧹 RBAC cache cleanup completed");
- }
- }
- });
- println!("🚀 Started RBAC cache cleanup background task");
- }
- }
-
- if self.is_feature_enabled("audit_logging") {
- // Could add audit log rotation or analysis tasks here
- println!("🚀 RBAC audit logging is enabled");
- }
- }
-
- /// Get feature status for API responses
- #[allow(dead_code)]
- pub fn get_feature_status(&self) -> serde_json::Value {
- serde_json::json!({
- "rbac_enabled": self.is_enabled(),
- "features": {
- "database_access": self.is_feature_enabled("database_access"),
- "file_access": self.is_feature_enabled("file_access"),
- "content_access": self.is_feature_enabled("content_access"),
- "api_access": self.is_feature_enabled("api_access"),
- "categories": self.is_feature_enabled("categories"),
- "tags": self.is_feature_enabled("tags"),
- "caching": self.is_feature_enabled("caching"),
- "audit_logging": self.is_feature_enabled("audit_logging"),
- "toml_config": self.is_feature_enabled("toml_config"),
- "hierarchical_permissions": self.is_feature_enabled("hierarchical_permissions"),
- "dynamic_rules": self.is_feature_enabled("dynamic_rules")
- }
- })
- }
-
- /// Create RBAC routes conditionally
- #[allow(dead_code)]
- pub fn create_rbac_routes(&self) -> Option>
- where
- S: Clone + Send + Sync + 'static,
- {
- if !self.is_enabled() {
- return None;
- }
-
- use axum::{
- Json,
- routing::{get, post},
- };
- use serde_json::json;
-
- let mut router = Router::new();
-
- // Basic RBAC info endpoint
- router = router.route(
- "/api/rbac/status",
- get(|| async {
- Json(json!({
- "enabled": true,
- "message": "RBAC system is active"
- }))
- }),
- );
-
- // Add category management routes if enabled
- if self.is_feature_enabled("categories") {
- router = router
- .route(
- "/api/rbac/categories",
- get(|| async {
- Json(json!({
- "categories": ["admin", "editor", "viewer", "finance", "hr", "it"]
- }))
- }),
- )
- .route(
- "/api/rbac/categories",
- post(|| async {
- Json(json!({
- "message": "Category management endpoint"
- }))
- }),
- );
- }
-
- // Add tag management routes if enabled
- if self.is_feature_enabled("tags") {
- router = router
- .route("/api/rbac/tags", get(|| async {
- Json(json!({
- "tags": ["sensitive", "public", "internal", "confidential", "restricted"]
- }))
- }))
- .route("/api/rbac/tags", post(|| async {
- Json(json!({
- "message": "Tag management endpoint"
- }))
- }));
- }
-
- // Add audit routes if enabled
- if self.is_feature_enabled("audit_logging") {
- router = router.route(
- "/api/rbac/audit/:user_id",
- get(|| async {
- Json(json!({
- "message": "Audit log endpoint"
- }))
- }),
- );
- }
-
- Some(router)
- }
-}
-
-/// Helper macro for conditional RBAC middleware application
-#[macro_export]
-macro_rules! apply_rbac_middleware {
- ($router:expr, $rbac:expr, $middleware_fn:expr) => {
- if $rbac.is_enabled() {
- if let Some(middleware) = $middleware_fn {
- $router.layer(axum::middleware::from_fn(middleware))
- } else {
- $router
- }
- } else {
- $router
- }
- };
-}
-
-/// Helper trait for conditional RBAC application
-pub trait ConditionalRBACExt {
- /// Apply RBAC middleware if enabled
- #[allow(dead_code)]
- fn apply_rbac_if_enabled(self, rbac: &ConditionalRBACService) -> Self;
-
- /// Apply database access middleware if enabled
- #[allow(dead_code)]
- fn require_database_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- database_name: String,
- action: String,
- ) -> Self;
-
- /// Apply file access middleware if enabled
- #[allow(dead_code)]
- fn require_file_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- file_path: String,
- action: String,
- ) -> Self;
-
- /// Apply category access middleware if enabled
- #[allow(dead_code)]
- fn require_category_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- categories: Vec,
- ) -> Self;
-}
-
-impl ConditionalRBACExt for Router
-where
- S: Clone + Send + Sync + 'static,
-{
- #[allow(dead_code)]
- fn apply_rbac_if_enabled(self, rbac: &ConditionalRBACService) -> Self {
- rbac.apply_middleware(self)
- }
-
- #[allow(dead_code)]
- fn require_database_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- database_name: String,
- action: String,
- ) -> Self {
- if rbac.should_enable_database_access() {
- #[cfg(feature = "rbac")]
- {
- self.layer(middleware::from_fn_with_state(
- (database_name, action),
- super::rbac_middleware::require_database_access,
- ))
- }
- #[cfg(not(feature = "rbac"))]
- {
- self
- }
- } else {
- self
- }
- }
-
- #[allow(dead_code)]
- fn require_file_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- file_path: String,
- action: String,
- ) -> Self {
- if rbac.should_enable_file_access() {
- #[cfg(feature = "rbac")]
- {
- self.layer(middleware::from_fn_with_state(
- (file_path, action),
- super::rbac_middleware::require_file_access,
- ))
- }
- #[cfg(not(feature = "rbac"))]
- {
- self
- }
- } else {
- self
- }
- }
-
- #[allow(dead_code)]
- fn require_category_access_if_enabled(
- self,
- rbac: &ConditionalRBACService,
- categories: Vec,
- ) -> Self {
- if rbac.should_enable_category_access() {
- #[cfg(feature = "rbac")]
- {
- self.layer(middleware::from_fn_with_state(
- categories,
- super::rbac_middleware::require_category_access,
- ))
- }
- #[cfg(not(feature = "rbac"))]
- {
- self
- }
- } else {
- self
- }
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::config::features::FeatureConfig;
-
- #[tokio::test]
- async fn test_conditional_rbac_disabled() {
- let feature_config = Arc::new(FeatureConfig::default()); // RBAC disabled by default
-
- // Use a dummy connection string for testing
- let pool = match sqlx::PgPool::connect("postgres://test").await {
- Ok(pool) => pool,
- Err(_) => {
- // Skip test if no test database
- return;
- }
- };
-
- let database_pool = DatabasePool::PostgreSQL(pool);
- let rbac = ConditionalRBACService::new(&database_pool, feature_config, None)
- .await
- .unwrap();
-
- assert!(!rbac.is_enabled());
- assert!(rbac.service().is_none());
- }
-
- #[tokio::test]
- async fn test_conditional_rbac_enabled() {
- let mut feature_config = FeatureConfig::default();
- feature_config.enable_rbac();
- let feature_config = Arc::new(feature_config);
-
- // This would require a test database setup
- // For now, just test the configuration logic
- assert!(feature_config.is_rbac_enabled());
- assert!(feature_config.is_rbac_feature_enabled("database_access"));
- }
-
- #[test]
- fn test_basic_access_control() {
- use shared::auth::{Role, User, UserProfile};
- // use std::collections::HashMap;
-
- let feature_config = Arc::new(FeatureConfig::default());
- let rbac = ConditionalRBACService {
- #[cfg(feature = "rbac")]
- rbac_service: None,
- #[cfg(feature = "rbac")]
- rbac_repository: None,
- feature_config,
- };
-
- let admin_user = User {
- id: uuid::Uuid::new_v4(),
- email: "admin@example.com".to_string(),
- username: "admin".to_string(),
- display_name: None,
- avatar_url: None,
- roles: vec![Role::Admin],
- is_active: true,
- email_verified: true,
- created_at: chrono::Utc::now(),
- updated_at: chrono::Utc::now(),
- last_login: None,
- two_factor_enabled: false,
- profile: UserProfile::default(),
- };
-
- let result = rbac.check_basic_access(&admin_user, "database", "test_db", "read");
- assert_eq!(result, shared::auth::AccessResult::Allow);
-
- let result = rbac.check_basic_access(&admin_user, "database", "test_db", "delete");
- assert_eq!(result, shared::auth::AccessResult::Allow);
- }
-}
diff --git a/server/src/auth/jwt.rs b/server/src/auth/jwt.rs
deleted file mode 100644
index 50be22a..0000000
--- a/server/src/auth/jwt.rs
+++ /dev/null
@@ -1,323 +0,0 @@
-use chrono::{Duration, Utc};
-use jsonwebtoken::{Algorithm, DecodingKey, EncodingKey, Header, Validation, decode, encode};
-use serde::{Deserialize, Serialize};
-use shared::auth::{Claims, Role, User};
-use std::env;
-use uuid::Uuid;
-
-#[derive(Clone)]
-pub struct JwtService {
- encoding_key: EncodingKey,
- decoding_key: DecodingKey,
- algorithm: Algorithm,
- issuer: String,
- access_token_expires_in: Duration,
- refresh_token_expires_in: Duration,
-}
-
-#[derive(Debug, Serialize, Deserialize)]
-pub struct TokenPair {
- pub access_token: String,
- pub refresh_token: String,
- pub expires_in: i64,
- pub token_type: String,
-}
-
-#[derive(Debug, Serialize, Deserialize)]
-pub struct RefreshTokenClaims {
- pub sub: String,
- pub token_type: String,
- pub exp: usize,
- pub iat: usize,
- pub iss: String,
-}
-
-impl JwtService {
- pub fn new() -> Result> {
- let secret = env::var("JWT_SECRET")
- .unwrap_or_else(|_| "your-super-secret-jwt-key-change-this-in-production".to_string());
-
- let issuer = env::var("JWT_ISSUER").unwrap_or_else(|_| "rustelo-auth".to_string());
-
- let access_token_expires_in = Duration::minutes(
- env::var("JWT_ACCESS_TOKEN_EXPIRES_IN")
- .unwrap_or_else(|_| "15".to_string())
- .parse()
- .unwrap_or(15),
- );
-
- let refresh_token_expires_in = Duration::days(
- env::var("JWT_REFRESH_TOKEN_EXPIRES_IN")
- .unwrap_or_else(|_| "7".to_string())
- .parse()
- .unwrap_or(7),
- );
-
- Ok(Self {
- encoding_key: EncodingKey::from_secret(secret.as_bytes()),
- decoding_key: DecodingKey::from_secret(secret.as_bytes()),
- algorithm: Algorithm::HS256,
- issuer,
- access_token_expires_in,
- refresh_token_expires_in,
- })
- }
-
- pub fn generate_token_pair(
- &self,
- user: &User,
- ) -> Result> {
- let access_token = self.generate_access_token(user)?;
- let refresh_token = self.generate_refresh_token(user)?;
-
- Ok(TokenPair {
- access_token,
- refresh_token,
- expires_in: self.access_token_expires_in.num_seconds(),
- token_type: "Bearer".to_string(),
- })
- }
-
- pub fn generate_access_token(&self, user: &User) -> Result> {
- let now = Utc::now();
- let expires_at = now + self.access_token_expires_in;
-
- let claims = Claims {
- sub: user.id.to_string(),
- email: user.email.clone(),
- roles: user.roles.clone(),
- exp: expires_at.timestamp() as usize,
- iat: now.timestamp() as usize,
- iss: self.issuer.clone(),
- };
-
- let header = Header::new(self.algorithm);
- let token = encode(&header, &claims, &self.encoding_key)?;
- Ok(token)
- }
-
- pub fn generate_refresh_token(
- &self,
- user: &User,
- ) -> Result> {
- let now = Utc::now();
- let expires_at = now + self.refresh_token_expires_in;
-
- let claims = RefreshTokenClaims {
- sub: user.id.to_string(),
- token_type: "refresh".to_string(),
- exp: expires_at.timestamp() as usize,
- iat: now.timestamp() as usize,
- iss: self.issuer.clone(),
- };
-
- let header = Header::new(self.algorithm);
- let token = encode(&header, &claims, &self.encoding_key)?;
- Ok(token)
- }
-
- pub fn verify_access_token(&self, token: &str) -> Result> {
- let mut validation = Validation::new(self.algorithm);
- validation.set_issuer(&[&self.issuer]);
-
- let token_data = decode::(token, &self.decoding_key, &validation)?;
- Ok(token_data.claims)
- }
-
- pub fn verify_refresh_token(
- &self,
- token: &str,
- ) -> Result> {
- let mut validation = Validation::new(self.algorithm);
- validation.set_issuer(&[&self.issuer]);
-
- let token_data = decode::(token, &self.decoding_key, &validation)?;
-
- // Verify it's actually a refresh token
- if token_data.claims.token_type != "refresh" {
- return Err("Invalid token type".into());
- }
-
- Ok(token_data.claims)
- }
-
- pub fn extract_bearer_token(auth_header: &str) -> Option<&str> {
- if auth_header.starts_with("Bearer ") {
- Some(&auth_header[7..])
- } else {
- None
- }
- }
-
- #[allow(dead_code)]
- pub fn is_token_expired(&self, token: &str) -> bool {
- match self.verify_access_token(token) {
- Ok(claims) => {
- let now = Utc::now().timestamp() as usize;
- claims.exp < now
- }
- Err(_) => true,
- }
- }
-
- #[allow(dead_code)]
- pub fn get_user_id_from_token(&self, token: &str) -> Result> {
- let claims = self.verify_access_token(token)?;
- let user_id = Uuid::parse_str(&claims.sub)?;
- Ok(user_id)
- }
-
- #[allow(dead_code)]
- pub fn get_user_roles_from_token(
- &self,
- token: &str,
- ) -> Result, Box> {
- let claims = self.verify_access_token(token)?;
- Ok(claims.roles)
- }
-
- pub fn refresh_access_token(
- &self,
- refresh_token: &str,
- user: &User,
- ) -> Result> {
- // Verify the refresh token
- let refresh_claims = self.verify_refresh_token(refresh_token)?;
-
- // Verify the refresh token belongs to the user
- if refresh_claims.sub != user.id.to_string() {
- return Err("Invalid refresh token".into());
- }
-
- // Generate new access token
- self.generate_access_token(user)
- }
-
- #[allow(dead_code)]
- pub fn blacklist_token(&self, _token: &str) -> Result<(), Box> {
- // In a production system, you would store blacklisted tokens in Redis or a database
- // For now, we'll just return Ok as tokens will naturally expire
- // TODO: Implement proper token blacklisting with Redis
- Ok(())
- }
-}
-
-impl Default for JwtService {
- fn default() -> Self {
- Self::new().expect("Failed to create JWT service")
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use shared::auth::{Role, User, UserProfile};
-
- fn create_test_user() -> User {
- User {
- id: Uuid::new_v4(),
- email: "test@example.com".to_string(),
- username: "testuser".to_string(),
- display_name: Some("Test User".to_string()),
- avatar_url: None,
- roles: vec![Role::User],
- is_active: true,
- email_verified: true,
- created_at: Utc::now(),
- updated_at: Utc::now(),
- last_login: None,
- two_factor_enabled: false,
- profile: UserProfile::default(),
- }
- }
-
- #[test]
- fn test_jwt_service_creation() {
- let jwt_service = JwtService::new();
- assert!(jwt_service.is_ok());
- }
-
- #[test]
- fn test_generate_and_verify_access_token() {
- let jwt_service = JwtService::new().expect("Failed to create JWT service");
- let user = create_test_user();
-
- let token = jwt_service
- .generate_access_token(&user)
- .expect("Failed to generate token");
- let claims = jwt_service
- .verify_access_token(&token)
- .expect("Failed to verify token");
-
- assert_eq!(claims.sub, user.id.to_string());
- assert_eq!(claims.email, user.email);
- assert_eq!(claims.roles, user.roles);
- }
-
- #[test]
- fn test_generate_and_verify_refresh_token() {
- let jwt_service = JwtService::new().expect("Failed to create JWT service");
- let user = create_test_user();
-
- let token = jwt_service
- .generate_refresh_token(&user)
- .expect("Failed to generate token");
- let claims = jwt_service
- .verify_refresh_token(&token)
- .expect("Failed to verify token");
-
- assert_eq!(claims.sub, user.id.to_string());
- assert_eq!(claims.token_type, "refresh");
- }
-
- #[test]
- fn test_token_pair_generation() {
- let jwt_service = JwtService::new().expect("Failed to create JWT service");
- let user = create_test_user();
-
- let token_pair = jwt_service
- .generate_token_pair(&user)
- .expect("Failed to generate token pair");
-
- // Verify access token
- let access_claims = jwt_service
- .verify_access_token(&token_pair.access_token)
- .expect("Failed to verify access token");
- assert_eq!(access_claims.sub, user.id.to_string());
-
- // Verify refresh token
- let refresh_claims = jwt_service
- .verify_refresh_token(&token_pair.refresh_token)
- .expect("Failed to verify refresh token");
- assert_eq!(refresh_claims.sub, user.id.to_string());
- }
-
- #[test]
- fn test_extract_bearer_token() {
- let auth_header = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
- let token = JwtService::extract_bearer_token(auth_header);
- assert_eq!(token, Some("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"));
-
- let invalid_header = "Token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
- let token = JwtService::extract_bearer_token(invalid_header);
- assert_eq!(token, None);
- }
-
- #[test]
- fn test_refresh_access_token() {
- let jwt_service = JwtService::new().expect("Failed to create JWT service");
- let user = create_test_user();
-
- let refresh_token = jwt_service
- .generate_refresh_token(&user)
- .expect("Failed to generate refresh token");
- let new_access_token = jwt_service
- .refresh_access_token(&refresh_token, &user)
- .expect("Failed to refresh access token");
-
- let claims = jwt_service
- .verify_access_token(&new_access_token)
- .expect("Failed to verify new access token");
- assert_eq!(claims.sub, user.id.to_string());
- }
-}
diff --git a/server/src/auth/middleware.rs b/server/src/auth/middleware.rs
deleted file mode 100644
index fcc355e..0000000
--- a/server/src/auth/middleware.rs
+++ /dev/null
@@ -1,389 +0,0 @@
-use axum::{
- extract::{Request, State},
- http::{HeaderMap, StatusCode, header},
- middleware::Next,
- response::{IntoResponse, Response},
-};
-use shared::auth::{AuthError, Permission, Role, User, UserProfile};
-use std::sync::Arc;
-use tower_cookies::Cookies;
-use uuid::Uuid;
-
-use super::{
- jwt::JwtService,
- repository::{AuthRepository, AuthRepositoryTrait},
-};
-
-/// Authentication context that gets added to request extensions
-#[derive(Debug, Clone)]
-pub struct AuthContext {
- pub user: Option,
- #[allow(dead_code)]
- pub session_id: Option,
-}
-
-// TODO: Implement FromRequestParts for AuthContext
-// For now, we'll handle extraction manually in handlers
-
-impl AuthContext {
- pub fn new() -> Self {
- Self {
- user: None,
- session_id: None,
- }
- }
-
- pub fn with_user(user: User) -> Self {
- Self {
- user: Some(user),
- session_id: None,
- }
- }
-
- pub fn with_session(user: User, session_id: String) -> Self {
- Self {
- user: Some(user),
- session_id: Some(session_id),
- }
- }
-
- pub fn is_authenticated(&self) -> bool {
- self.user.is_some()
- }
-
- #[allow(dead_code)]
- pub fn has_permission(&self, permission: &Permission) -> bool {
- self.user
- .as_ref()
- .map_or(false, |user| user.has_permission(permission))
- }
-
- #[allow(dead_code)]
- pub fn has_role(&self, role: &Role) -> bool {
- self.user.as_ref().map_or(false, |user| user.has_role(role))
- }
-
- #[allow(dead_code)]
- pub fn is_admin(&self) -> bool {
- self.user.as_ref().map_or(false, |user| user.is_admin())
- }
-
- #[allow(dead_code)]
- pub fn user_id(&self) -> Option {
- self.user.as_ref().map(|user| user.id)
- }
-}
-
-/// Authentication middleware that extracts user from JWT token or session
-pub async fn auth_middleware(
- State((jwt_service, auth_repo)): State<(Arc, Arc)>,
- cookies: Cookies,
- mut request: Request,
- next: Next,
-) -> Response {
- let headers = request.headers().clone();
- let auth_context = extract_auth_context(&jwt_service, &auth_repo, &cookies, &headers).await;
-
- // Add auth context to request extensions
- request.extensions_mut().insert(auth_context);
-
- next.run(request).await
-}
-
-/// Extract authentication context from request
-async fn extract_auth_context(
- jwt_service: &JwtService,
- auth_repo: &AuthRepository,
- cookies: &Cookies,
- headers: &HeaderMap,
-) -> AuthContext {
- // Try to get user from JWT token first
- if let Some(user) = extract_user_from_jwt(jwt_service, headers).await {
- return AuthContext::with_user(user);
- }
-
- // Try to get user from session cookie
- if let Some((user, session_id)) = extract_user_from_session(auth_repo, cookies).await {
- return AuthContext::with_session(user, session_id);
- }
-
- // No authentication found
- AuthContext::new()
-}
-
-/// Extract user from JWT token in Authorization header
-async fn extract_user_from_jwt(jwt_service: &JwtService, headers: &HeaderMap) -> Option {
- let auth_header = headers.get(header::AUTHORIZATION)?.to_str().ok()?;
- let token = JwtService::extract_bearer_token(auth_header)?;
-
- match jwt_service.verify_access_token(token) {
- Ok(claims) => {
- let user_id = Uuid::parse_str(&claims.sub).ok()?;
- Some(User {
- id: user_id,
- email: claims.email,
- username: "".to_string(), // JWT doesn't include username
- display_name: None,
- avatar_url: None,
- roles: claims.roles,
- is_active: true,
- email_verified: true,
- created_at: chrono::Utc::now(),
- updated_at: chrono::Utc::now(),
- last_login: None,
- two_factor_enabled: false,
- profile: UserProfile::default(),
- })
- }
- Err(_) => None,
- }
-}
-
-/// Extract user from session cookie
-async fn extract_user_from_session(
- auth_repo: &AuthRepository,
- cookies: &Cookies,
-) -> Option<(User, String)> {
- let session_cookie = cookies.get("session_id")?;
- let session_id = session_cookie.value();
-
- let session = auth_repo.find_session(session_id).await.ok()??;
- let user = auth_repo.find_user_by_id(&session.user_id).await.ok()??;
-
- // Update session last accessed
- let _ = auth_repo.update_session_accessed(session_id).await;
-
- Some((user.into(), session_id.to_string()))
-}
-
-/// Middleware that requires authentication
-#[allow(dead_code)]
-pub async fn require_auth(request: Request, next: Next) -> Result {
- let auth_context = request
- .extensions()
- .get::()
- .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?;
-
- if !auth_context.is_authenticated() {
- return Err(StatusCode::UNAUTHORIZED);
- }
-
- Ok(next.run(request).await)
-}
-
-/// Middleware that requires specific permission
-#[allow(dead_code)]
-pub fn require_permission(
- permission: Permission,
-) -> impl Fn(
- Request,
- Next,
-)
- -> std::pin::Pin> + Send>>
-+ Clone {
- move |request: Request, next: Next| {
- let permission = permission.clone();
- Box::pin(async move {
- let auth_context = request
- .extensions()
- .get::()
- .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?;
-
- if !auth_context.has_permission(&permission) {
- return Err(StatusCode::FORBIDDEN);
- }
-
- Ok(next.run(request).await)
- })
- }
-}
-
-/// Middleware that requires specific role
-#[allow(dead_code)]
-pub fn require_role(
- role: Role,
-) -> impl Fn(
- Request,
- Next,
-)
- -> std::pin::Pin> + Send>>
-+ Clone {
- move |request: Request, next: Next| {
- let role = role.clone();
- Box::pin(async move {
- let auth_context = request
- .extensions()
- .get::()
- .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?;
-
- if !auth_context.has_role(&role) {
- return Err(StatusCode::FORBIDDEN);
- }
-
- Ok(next.run(request).await)
- })
- }
-}
-
-/// Middleware that requires admin role
-#[allow(dead_code)]
-pub async fn require_admin(request: Request, next: Next) -> Result {
- let auth_context = request
- .extensions()
- .get::()
- .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?;
-
- if !auth_context.is_admin() {
- return Err(StatusCode::FORBIDDEN);
- }
-
- Ok(next.run(request).await)
-}
-
-/// Middleware that requires moderator or admin role
-#[allow(dead_code)]
-pub async fn require_moderator(request: Request, next: Next) -> Result {
- let auth_context = request
- .extensions()
- .get::()
- .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?;
-
- if !auth_context.has_role(&Role::Admin) && !auth_context.has_role(&Role::Moderator) {
- return Err(StatusCode::FORBIDDEN);
- }
-
- Ok(next.run(request).await)
-}
-
-/// Extract authentication context from request extensions
-#[allow(dead_code)]
-pub fn extract_auth_context_from_request(request: &Request) -> Result<&AuthContext, AuthError> {
- request
- .extensions()
- .get::()
- .ok_or(AuthError::InternalError)
-}
-
-/// Extract user from request extensions
-#[allow(dead_code)]
-pub fn extract_user_from_request(request: &Request) -> Result<&User, AuthError> {
- let auth_context = extract_auth_context_from_request(request)?;
- auth_context.user.as_ref().ok_or(AuthError::InvalidToken)
-}
-
-/// Extract optional user from request extensions
-#[allow(dead_code)]
-pub fn extract_optional_user_from_request(request: &Request) -> Option<&User> {
- let auth_context = extract_auth_context_from_request(request).ok()?;
- auth_context.user.as_ref()
-}
-
-/// Custom error response for authentication failures
-/// This is implemented in the shared crate to avoid orphan rule issues
-pub fn auth_error_response(error: AuthError) -> Response {
- let (status, message) = match error {
- AuthError::InvalidCredentials => (StatusCode::UNAUTHORIZED, "Invalid credentials"),
- AuthError::UserNotFound => (StatusCode::NOT_FOUND, "User not found"),
- AuthError::InvalidToken => (StatusCode::UNAUTHORIZED, "Invalid token"),
- AuthError::TokenExpired => (StatusCode::UNAUTHORIZED, "Token expired"),
- AuthError::InsufficientPermissions => (StatusCode::FORBIDDEN, "Insufficient permissions"),
- AuthError::AccountNotVerified => (StatusCode::FORBIDDEN, "Account not verified"),
- AuthError::AccountSuspended => (StatusCode::FORBIDDEN, "Account suspended"),
- AuthError::RateLimitExceeded => (StatusCode::TOO_MANY_REQUESTS, "Rate limit exceeded"),
- AuthError::EmailAlreadyExists => (StatusCode::CONFLICT, "Email already exists"),
- AuthError::UsernameAlreadyExists => (StatusCode::CONFLICT, "Username already exists"),
- AuthError::OAuthError(ref msg) => (StatusCode::BAD_REQUEST, msg.as_str()),
- AuthError::ValidationError(ref msg) => (StatusCode::BAD_REQUEST, msg.as_str()),
- AuthError::DatabaseError => (StatusCode::INTERNAL_SERVER_ERROR, "Database error"),
- AuthError::InternalError => (StatusCode::INTERNAL_SERVER_ERROR, "Internal server error"),
- AuthError::TwoFactorRequired => (
- StatusCode::UNAUTHORIZED,
- "Two-factor authentication required",
- ),
- AuthError::Invalid2FACode => (StatusCode::UNAUTHORIZED, "Invalid 2FA code"),
- AuthError::TwoFactorAlreadyEnabled => (StatusCode::BAD_REQUEST, "2FA already enabled"),
- AuthError::TwoFactorNotEnabled => (StatusCode::BAD_REQUEST, "2FA not enabled"),
- AuthError::InvalidBackupCode => (StatusCode::UNAUTHORIZED, "Invalid backup code"),
- AuthError::TwoFactorSetupRequired => (StatusCode::BAD_REQUEST, "2FA setup required"),
- AuthError::TooMany2FAAttempts => (StatusCode::TOO_MANY_REQUESTS, "Too many 2FA attempts"),
- };
-
- let body = serde_json::json!({
- "error": message,
- "code": status.as_u16()
- });
-
- (status, axum::Json(body)).into_response()
-}
-
-/// Helper macro for creating authorization middleware
-#[macro_export]
-macro_rules! require_auth_with {
- ($permission:expr) => {
- axum::middleware::from_fn(require_permission($permission))
- };
- (role: $role:expr) => {
- axum::middleware::from_fn(require_role($role))
- };
- (admin) => {
- axum::middleware::from_fn(require_admin)
- };
- (moderator) => {
- axum::middleware::from_fn(require_moderator)
- };
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_auth_context_creation() {
- let ctx = AuthContext::new();
- assert!(!ctx.is_authenticated());
- assert!(ctx.user.is_none());
- assert!(ctx.session_id.is_none());
- }
-
- #[test]
- fn test_auth_context_with_user() {
- let user = create_test_user();
- let ctx = AuthContext::with_user(user.clone());
-
- assert!(ctx.is_authenticated());
- assert!(ctx.user.is_some());
- assert_eq!(
- ctx.user.as_ref().expect("user should be present").id,
- user.id
- );
- }
-
- #[test]
- fn test_auth_context_permissions() {
- let mut user = create_test_user();
- user.roles = vec![Role::Admin];
- let ctx = AuthContext::with_user(user);
-
- assert!(ctx.has_permission(&Permission::ReadUsers));
- assert!(ctx.has_role(&Role::Admin));
- assert!(ctx.is_admin());
- }
-
- fn create_test_user() -> User {
- User {
- id: Uuid::new_v4(),
- email: "test@example.com".to_string(),
- username: "testuser".to_string(),
- display_name: Some("Test User".to_string()),
- avatar_url: None,
- roles: vec![Role::User],
- is_active: true,
- email_verified: true,
- created_at: chrono::Utc::now(),
- updated_at: chrono::Utc::now(),
- last_login: None,
- two_factor_enabled: false,
- profile: shared::auth::UserProfile::default(),
- }
- }
-}
diff --git a/server/src/auth/mod.rs b/server/src/auth/mod.rs
deleted file mode 100644
index ea0e1bc..0000000
--- a/server/src/auth/mod.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-pub mod jwt;
-pub mod middleware;
-pub mod oauth;
-pub mod password;
-pub mod repository;
-
-pub mod routes;
-pub mod service;
-pub mod two_factor;
-
-// RBAC modules - only available when RBAC feature is enabled
-#[cfg(feature = "rbac")]
-pub mod rbac_config;
-#[cfg(feature = "rbac")]
-pub mod rbac_middleware;
-#[cfg(feature = "rbac")]
-pub mod rbac_repository;
-#[cfg(feature = "rbac")]
-pub mod rbac_service;
-
-// Conditional RBAC service - always available but conditionally functional
-pub mod conditional_rbac;
-
-pub use jwt::JwtService;
-pub use middleware::auth_middleware;
-pub use oauth::OAuthService;
-pub use password::PasswordService;
-
-pub use routes::create_auth_routes;
-pub use service::AuthService;
-pub use two_factor::TwoFactorService;
-
-// RBAC exports - only when feature is enabled
-#[cfg(feature = "rbac")]
-pub use rbac_config::RBACConfigLoader;
-#[cfg(feature = "rbac")]
-pub use rbac_middleware::{rbac_middleware, require_database_access, require_file_access};
-#[cfg(feature = "rbac")]
-pub use rbac_repository::RBACRepository;
-#[cfg(feature = "rbac")]
-pub use rbac_service::RBACService;
diff --git a/server/src/auth/oauth.rs b/server/src/auth/oauth.rs
deleted file mode 100644
index 362038c..0000000
--- a/server/src/auth/oauth.rs
+++ /dev/null
@@ -1,485 +0,0 @@
-use anyhow::{Result, anyhow};
-use oauth2::{
- AuthUrl, AuthorizationCode, Client, ClientId, ClientSecret, CsrfToken, EmptyExtraTokenFields,
- EndpointNotSet, EndpointSet, PkceCodeChallenge, RedirectUrl, RevocationErrorResponseType,
- Scope, StandardErrorResponse, StandardRevocableToken, StandardTokenIntrospectionResponse,
- StandardTokenResponse, TokenResponse, TokenUrl, basic::BasicClient,
- basic::BasicErrorResponseType, basic::BasicTokenType,
-};
-use serde::{Deserialize, Serialize};
-use shared::auth::{AuthError, OAuthProvider, OAuthUserInfo};
-use std::env;
-
-// Type alias for fully configured OAuth2 client
-type ConfiguredOAuthClient = Client<
- StandardErrorResponse,
- StandardTokenResponse,
- StandardTokenIntrospectionResponse,
- StandardRevocableToken,
- StandardErrorResponse,
- EndpointSet,
- EndpointNotSet,
- EndpointNotSet,
- EndpointNotSet,
- EndpointSet,
->;
-
-#[derive(Debug, Clone)]
-pub struct OAuthService {
- base_redirect_url: String,
-}
-
-#[derive(Debug, Serialize, Deserialize)]
-pub struct OAuthAuthorizationUrl {
- pub authorization_url: String,
- pub state: String,
- pub pkce_verifier: Option,
-}
-
-#[derive(Debug, Serialize, Deserialize)]
-pub struct OAuthCallback {
- pub code: String,
- pub state: String,
-}
-
-// Provider-specific user info structures
-#[derive(Debug, Clone, Serialize, Deserialize)]
-struct GoogleUserInfo {
- pub id: String,
- pub email: String,
- pub name: Option,
- pub picture: Option,
- pub given_name: Option,
- pub family_name: Option,
- pub locale: Option,
- pub verified_email: Option,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-struct GitHubUserInfo {
- pub id: u64,
- pub login: String,
- pub name: Option,
- pub email: Option,
- pub avatar_url: Option,
- pub bio: Option,
- pub location: Option,
- pub company: Option,
- pub blog: Option,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-struct DiscordUserInfo {
- pub id: String,
- pub username: String,
- pub discriminator: String,
- pub avatar: Option,
- pub email: Option,
- pub verified: Option,
- pub locale: Option,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-struct MicrosoftUserInfo {
- pub id: String,
- pub mail: Option,
- pub user_principal_name: Option,
- pub display_name: Option,
- pub given_name: Option,
- pub surname: Option,
- pub job_title: Option,
- pub mobile_phone: Option,
- pub preferred_language: Option,
-}
-
-impl OAuthService {
- pub fn new() -> Result {
- let base_redirect_url = env::var("OAUTH_REDIRECT_BASE_URL")
- .unwrap_or_else(|_| "http://localhost:3030/auth/callback".to_string());
-
- Ok(Self { base_redirect_url })
- }
-
- fn create_client(&self, provider: &OAuthProvider) -> Result {
- match provider {
- OAuthProvider::Google => {
- let client_id = env::var("GOOGLE_CLIENT_ID").map_err(|_| {
- anyhow!("Google OAuth not configured: missing GOOGLE_CLIENT_ID")
- })?;
- let client_secret = env::var("GOOGLE_CLIENT_SECRET").map_err(|_| {
- anyhow!("Google OAuth not configured: missing GOOGLE_CLIENT_SECRET")
- })?;
-
- let auth_url =
- AuthUrl::new("https://accounts.google.com/o/oauth2/v2/auth".to_string())?;
- let token_url = TokenUrl::new("https://oauth2.googleapis.com/token".to_string())?;
- let redirect_url = RedirectUrl::new(format!("{}/google", self.base_redirect_url))?;
-
- Ok(BasicClient::new(ClientId::new(client_id))
- .set_client_secret(ClientSecret::new(client_secret))
- .set_auth_uri(auth_url)
- .set_token_uri(token_url)
- .set_redirect_uri(redirect_url))
- }
- OAuthProvider::GitHub => {
- let client_id = env::var("GITHUB_CLIENT_ID").map_err(|_| {
- anyhow!("GitHub OAuth not configured: missing GITHUB_CLIENT_ID")
- })?;
- let client_secret = env::var("GITHUB_CLIENT_SECRET").map_err(|_| {
- anyhow!("GitHub OAuth not configured: missing GITHUB_CLIENT_SECRET")
- })?;
-
- let auth_url =
- AuthUrl::new("https://github.com/login/oauth/authorize".to_string())?;
- let token_url =
- TokenUrl::new("https://github.com/login/oauth/access_token".to_string())?;
- let redirect_url = RedirectUrl::new(format!("{}/github", self.base_redirect_url))?;
-
- Ok(BasicClient::new(ClientId::new(client_id))
- .set_client_secret(ClientSecret::new(client_secret))
- .set_auth_uri(auth_url)
- .set_token_uri(token_url)
- .set_redirect_uri(redirect_url))
- }
- OAuthProvider::Discord => {
- let client_id = env::var("DISCORD_CLIENT_ID").map_err(|_| {
- anyhow!("Discord OAuth not configured: missing DISCORD_CLIENT_ID")
- })?;
- let client_secret = env::var("DISCORD_CLIENT_SECRET").map_err(|_| {
- anyhow!("Discord OAuth not configured: missing DISCORD_CLIENT_SECRET")
- })?;
-
- let auth_url =
- AuthUrl::new("https://discord.com/api/oauth2/authorize".to_string())?;
- let token_url = TokenUrl::new("https://discord.com/api/oauth2/token".to_string())?;
- let redirect_url = RedirectUrl::new(format!("{}/discord", self.base_redirect_url))?;
-
- Ok(BasicClient::new(ClientId::new(client_id))
- .set_client_secret(ClientSecret::new(client_secret))
- .set_auth_uri(auth_url)
- .set_token_uri(token_url)
- .set_redirect_uri(redirect_url))
- }
- OAuthProvider::Microsoft => {
- let client_id = env::var("MICROSOFT_CLIENT_ID").map_err(|_| {
- anyhow!("Microsoft OAuth not configured: missing MICROSOFT_CLIENT_ID")
- })?;
- let client_secret = env::var("MICROSOFT_CLIENT_SECRET").map_err(|_| {
- anyhow!("Microsoft OAuth not configured: missing MICROSOFT_CLIENT_SECRET")
- })?;
-
- let tenant_id =
- env::var("MICROSOFT_TENANT_ID").unwrap_or_else(|_| "common".to_string());
- let auth_url = AuthUrl::new(format!(
- "https://login.microsoftonline.com/{}/oauth2/v2.0/authorize",
- tenant_id
- ))?;
- let token_url = TokenUrl::new(format!(
- "https://login.microsoftonline.com/{}/oauth2/v2.0/token",
- tenant_id
- ))?;
- let redirect_url =
- RedirectUrl::new(format!("{}/microsoft", self.base_redirect_url))?;
-
- Ok(BasicClient::new(ClientId::new(client_id))
- .set_client_secret(ClientSecret::new(client_secret))
- .set_auth_uri(auth_url)
- .set_token_uri(token_url)
- .set_redirect_uri(redirect_url))
- }
- OAuthProvider::Custom(name) => {
- Err(anyhow!("Custom OAuth provider '{}' not supported", name))
- }
- }
- }
-
- pub fn get_authorization_url(&self, provider: &OAuthProvider) -> Result {
- let client = self.create_client(provider)?;
- let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256();
-
- let scopes = self.get_scopes(provider);
- let mut auth_request = client
- .authorize_url(CsrfToken::new_random)
- .set_pkce_challenge(pkce_challenge);
-
- for scope in scopes {
- auth_request = auth_request.add_scope(Scope::new(scope));
- }
-
- let (auth_url, csrf_token) = auth_request.url();
-
- Ok(OAuthAuthorizationUrl {
- authorization_url: auth_url.to_string(),
- state: csrf_token.secret().clone(),
- pkce_verifier: Some(pkce_verifier.secret().clone()),
- })
- }
-
- pub async fn handle_callback(
- &self,
- provider: &OAuthProvider,
- callback: OAuthCallback,
- pkce_verifier: Option,
- ) -> Result {
- let client = self.create_client(provider)?;
-
- // Create HTTP client
- let http_client = reqwest::ClientBuilder::new()
- .redirect(reqwest::redirect::Policy::none())
- .build()
- .map_err(|e| AuthError::OAuthError(format!("Failed to create HTTP client: {}", e)))?;
-
- // Exchange authorization code for access token
- let mut token_request = client.exchange_code(AuthorizationCode::new(callback.code));
-
- if let Some(verifier) = pkce_verifier {
- token_request =
- token_request.set_pkce_verifier(oauth2::PkceCodeVerifier::new(verifier));
- }
-
- let token_response = token_request
- .request_async(&http_client)
- .await
- .map_err(|e| AuthError::OAuthError(format!("Token exchange failed: {}", e)))?;
-
- let access_token = token_response.access_token();
-
- // Fetch user info from provider
- let user_info = self
- .fetch_user_info(provider, access_token.secret())
- .await?;
-
- Ok(user_info)
- }
-
- async fn fetch_user_info(
- &self,
- provider: &OAuthProvider,
- access_token: &str,
- ) -> Result {
- let client = reqwest::Client::new();
-
- match provider {
- OAuthProvider::Google => {
- let response = client
- .get("https://www.googleapis.com/oauth2/v2/userinfo")
- .bearer_auth(access_token)
- .send()
- .await?;
-
- let google_user: GoogleUserInfo = response.json().await?;
- let raw_data = serde_json::to_value(&google_user)?
- .as_object()
- .ok_or_else(|| {
- AuthError::OAuthError("Failed to serialize Google user data".to_string())
- })?
- .iter()
- .map(|(k, v)| (k.clone(), v.clone()))
- .collect();
-
- Ok(OAuthUserInfo {
- provider: provider.clone(),
- provider_id: google_user.id,
- email: google_user.email,
- username: google_user.name.clone(),
- display_name: google_user.name,
- avatar_url: google_user.picture.clone(),
- raw_data,
- })
- }
- OAuthProvider::GitHub => {
- let response = client
- .get("https://api.github.com/user")
- .bearer_auth(access_token)
- .header("User-Agent", "rustelo-auth")
- .send()
- .await?;
-
- let github_user: GitHubUserInfo = response.json().await?;
-
- // GitHub might not return email in the main endpoint
- let email = if github_user.email.is_none() {
- self.fetch_github_email(access_token).await?
- } else {
- github_user.email.clone()
- };
-
- let raw_data = serde_json::to_value(&github_user)?
- .as_object()
- .ok_or_else(|| {
- AuthError::OAuthError("Failed to serialize GitHub user data".to_string())
- })?
- .iter()
- .map(|(k, v)| (k.clone(), v.clone()))
- .collect();
-
- Ok(OAuthUserInfo {
- provider: provider.clone(),
- provider_id: github_user.id.to_string(),
- email: email.unwrap_or_default(),
- username: Some(github_user.login.clone()),
- display_name: github_user.name,
- avatar_url: github_user.avatar_url.clone(),
- raw_data,
- })
- }
- OAuthProvider::Discord => {
- let response = client
- .get("https://discord.com/api/users/@me")
- .bearer_auth(access_token)
- .send()
- .await?;
-
- let discord_user: DiscordUserInfo = response.json().await?;
- let avatar_url = discord_user.avatar.as_ref().map(|hash| {
- format!(
- "https://cdn.discordapp.com/avatars/{}/{}.png",
- discord_user.id, hash
- )
- });
-
- let raw_data = serde_json::to_value(&discord_user)?
- .as_object()
- .ok_or_else(|| {
- AuthError::OAuthError("Failed to serialize Discord user data".to_string())
- })?
- .iter()
- .map(|(k, v)| (k.clone(), v.clone()))
- .collect();
-
- Ok(OAuthUserInfo {
- provider: provider.clone(),
- provider_id: discord_user.id.clone(),
- email: discord_user.email.unwrap_or_default(),
- username: Some(format!(
- "{}#{}",
- discord_user.username, discord_user.discriminator
- )),
- display_name: Some(discord_user.username.clone()),
- avatar_url,
- raw_data,
- })
- }
- OAuthProvider::Microsoft => {
- let response = client
- .get("https://graph.microsoft.com/v1.0/me")
- .bearer_auth(access_token)
- .send()
- .await?;
-
- let microsoft_user: MicrosoftUserInfo = response.json().await?;
- let email = microsoft_user
- .mail
- .clone()
- .or(microsoft_user.user_principal_name.clone());
-
- let raw_data = serde_json::to_value(µsoft_user)?
- .as_object()
- .ok_or_else(|| {
- AuthError::OAuthError("Failed to serialize Microsoft user data".to_string())
- })?
- .iter()
- .map(|(k, v)| (k.clone(), v.clone()))
- .collect();
-
- Ok(OAuthUserInfo {
- provider: provider.clone(),
- provider_id: microsoft_user.id,
- email: email.unwrap_or_default(),
- username: microsoft_user.display_name.clone(),
- display_name: microsoft_user.display_name.clone(),
- avatar_url: None, // Microsoft Graph doesn't provide avatar in basic profile
- raw_data,
- })
- }
- OAuthProvider::Custom(name) => {
- Err(anyhow!("Custom OAuth provider '{}' not implemented", name))
- }
- }
- }
-
- async fn fetch_github_email(&self, access_token: &str) -> Result