From fd0db9b145207155afaceb8db5042f4c7cb19c8a Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Thu, 26 Feb 2026 20:17:13 +0100 Subject: [PATCH] feat: Add Supplemental Feeds feature with UI and backend support - Implemented the main view for Supplemental Feeds, displaying clients with Merchant Account IDs and their associated feed files. - Added styling for the feeds page and its components, including headers, empty states, and dropdown menus for syncing actions. - Created backend logic to generate supplemental feeds for clients, including file handling and data sanitization. - Integrated new routes and views for managing feeds, ensuring proper data retrieval and display. - Updated navigation to include the new Supplemental Feeds section. - Added necessary documentation for CRON job management related to feed generation. --- .htaccess | 9 +- .vscode/ftp-kr.sync.cache.json | 299 ++++++++++++++----- AGENTS.md | 46 --- CLAUDE.md | 144 +++++---- MEMORY.md | 4 + autoload/controls/class.Clients.php | 35 +++ autoload/controls/class.Cron.php | 56 ++++ autoload/controls/class.Feeds.php | 57 ++++ autoload/controls/class.Products.php | 51 +++- autoload/controls/class.Users.php | 26 +- autoload/factory/class.Products.php | 16 + autoload/services/class.SupplementalFeed.php | 119 ++++++++ autoload/view/class.Feeds.php | 12 + docs/CRON_QUEUE.md | 27 ++ docs/todo.md | 2 + feeds/.gitkeep | 0 feeds/.htaccess | 5 + feeds/supplemental_1.tsv | 1 + feeds/supplemental_10.tsv | 6 + feeds/supplemental_2.tsv | 13 + feeds/supplemental_3.tsv | 5 + feeds/supplemental_4.tsv | 4 + feeds/supplemental_5.tsv | 6 + feeds/supplemental_6.tsv | 1 + feeds/supplemental_7.tsv | 5 + feeds/supplemental_8.tsv | 6 + feeds/supplemental_9.tsv | 1 + index.php | 1 + layout/style.css | 2 +- layout/style.css.map | 2 +- layout/style.scss | 119 ++++++++ templates/clients/main_view.php | 82 +++-- templates/feeds/main_view.php | 85 ++++++ templates/products/main_view.php | 160 ++++++---- templates/site/layout-logged.php | 9 +- 35 files changed, 1120 insertions(+), 296 deletions(-) delete mode 100644 AGENTS.md create mode 100644 MEMORY.md create mode 100644 autoload/controls/class.Feeds.php create mode 100644 autoload/services/class.SupplementalFeed.php create mode 100644 autoload/view/class.Feeds.php create mode 100644 docs/CRON_QUEUE.md create mode 100644 docs/todo.md create mode 100644 feeds/.gitkeep create mode 100644 feeds/.htaccess create mode 100644 feeds/supplemental_1.tsv create mode 100644 feeds/supplemental_10.tsv create mode 100644 feeds/supplemental_2.tsv create mode 100644 feeds/supplemental_3.tsv create mode 100644 feeds/supplemental_4.tsv create mode 100644 feeds/supplemental_5.tsv create mode 100644 feeds/supplemental_6.tsv create mode 100644 feeds/supplemental_7.tsv create mode 100644 feeds/supplemental_8.tsv create mode 100644 feeds/supplemental_9.tsv create mode 100644 templates/feeds/main_view.php diff --git a/.htaccess b/.htaccess index f273f58..9389e1f 100644 --- a/.htaccess +++ b/.htaccess @@ -8,13 +8,16 @@ RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{SERVER_PORT} !=443 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent] +# Pliki TSV z feeds/ - serwuj statycznie +RewriteCond %{REQUEST_URI} ^/feeds/.+\.tsv$ [NC] +RewriteRule ^ - [L] + # Statyczne zasoby - pomijaj RewriteCond %{REQUEST_URI} ^/(libraries|layout|upload|temp)/ [NC] RewriteRule ^ - [L] -# Istniejące pliki/katalogi - pomijaj -RewriteCond %{REQUEST_FILENAME} -f [OR] -RewriteCond %{REQUEST_FILENAME} -d +# Istniejące pliki - pomijaj (katalogi NIE, zeby /feeds trafialo do index.php) +RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # Wszystko inne → index.php diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index 52fc457..8d6c52b 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -89,20 +89,20 @@ }, "class.CampaignTerms.php": { "type": "-", - "size": 21563, - "lmtime": 1771441276763, - "modified": true + "size": 34205, + "lmtime": 1771966770529, + "modified": false }, "class.Clients.php": { "type": "-", - "size": 12653, - "lmtime": 1771619242656, - "modified": true + "size": 13909, + "lmtime": 1772117575587, + "modified": false }, "class.Cron.php": { "type": "-", - "size": 182635, - "lmtime": 1771851157171, + "size": 185030, + "lmtime": 1772117310268, "modified": false }, "class.FacebookAds.php": { @@ -111,6 +111,12 @@ "lmtime": 1771619366367, "modified": false }, + "class.Feeds.php": { + "type": "-", + "size": 1768, + "lmtime": 1772117999910, + "modified": false + }, "class.Logs.php": { "type": "-", "size": 4821, @@ -119,8 +125,8 @@ }, "class.Products.php": { "type": "-", - "size": 45248, - "lmtime": 1771757540415, + "size": 47110, + "lmtime": 1772116324270, "modified": false }, "class.Site.php": { @@ -131,9 +137,9 @@ }, "class.Users.php": { "type": "-", - "size": 20039, - "lmtime": 1771617570626, - "modified": true + "size": 21234, + "lmtime": 1772117354114, + "modified": false }, "class.XmlFiles.php": { "type": "-", @@ -151,8 +157,8 @@ }, "class.Campaigns.php": { "type": "-", - "size": 11208, - "lmtime": 1771755241179, + "size": 13229, + "lmtime": 1771966790175, "modified": false }, "class.Clients.php": { @@ -181,9 +187,9 @@ }, "class.Products.php": { "type": "-", - "size": 33709, + "size": 34441, "lmtime": 1771757529304, - "modified": false + "modified": true }, "class.Users.php": { "type": "-", @@ -196,6 +202,12 @@ "size": 1453, "lmtime": 0, "modified": true + }, + "class.CronQueue.php": { + "type": "-", + "size": 2858, + "lmtime": 1772116301682, + "modified": false } }, "services": { @@ -219,8 +231,8 @@ }, "class.GoogleAdsApi.php": { "type": "-", - "size": 122118, - "lmtime": 1771954979121, + "size": 125232, + "lmtime": 1771966884611, "modified": false }, "class.OpenAiApi.php": { @@ -228,6 +240,12 @@ "size": 29408, "lmtime": 1771171891986, "modified": true + }, + "class.SupplementalFeed.php": { + "type": "-", + "size": 3860, + "lmtime": 1772118229909, + "modified": false } }, "view": { @@ -243,6 +261,12 @@ "lmtime": 0, "modified": false }, + "class.Logs.php": { + "type": "-", + "size": 211, + "lmtime": 0, + "modified": false + }, "class.Site.php": { "type": "-", "size": 649, @@ -254,6 +278,12 @@ "size": 415, "lmtime": 0, "modified": false + }, + "class.Feeds.php": { + "type": "-", + "size": 187, + "lmtime": 1772117805998, + "modified": false } } }, @@ -266,10 +296,22 @@ "cron.php": { "type": "-", "size": 1977, - "lmtime": 0, - "modified": true + "lmtime": 1772116852209, + "modified": false }, "docs": { + "class-methods.md": { + "type": "-", + "size": 58706, + "lmtime": 1771954009821, + "modified": false + }, + "CRON_QUEUE.md": { + "type": "-", + "size": 1192, + "lmtime": 1771955129000, + "modified": false + }, "database.sql": { "type": "-", "size": 9123, @@ -294,10 +336,84 @@ "lmtime": 1771496247126, "modified": true }, - "class-methods.md": { + "todo.md": { "type": "-", - "size": 58706, - "lmtime": 1771954009821, + "size": 657, + "lmtime": 1772115859276, + "modified": false + } + }, + "feeds": { + ".gitkeep": { + "type": "-", + "size": 0, + "lmtime": 1772116360653, + "modified": false + }, + ".htaccess": { + "type": "-", + "size": 96, + "lmtime": 1772116360000, + "modified": false + }, + "supplemental_10.tsv": { + "type": "-", + "size": 573, + "lmtime": 0, + "modified": false + }, + "supplemental_1.tsv": { + "type": "-", + "size": 45, + "lmtime": 0, + "modified": false + }, + "supplemental_2.tsv": { + "type": "-", + "size": 1331, + "lmtime": 0, + "modified": false + }, + "supplemental_3.tsv": { + "type": "-", + "size": 377, + "lmtime": 1772117280000, + "modified": false + }, + "supplemental_4.tsv": { + "type": "-", + "size": 385, + "lmtime": 0, + "modified": false + }, + "supplemental_5.tsv": { + "type": "-", + "size": 436, + "lmtime": 0, + "modified": false + }, + "supplemental_6.tsv": { + "type": "-", + "size": 45, + "lmtime": 0, + "modified": false + }, + "supplemental_7.tsv": { + "type": "-", + "size": 297, + "lmtime": 0, + "modified": false + }, + "supplemental_8.tsv": { + "type": "-", + "size": 449, + "lmtime": 0, + "modified": false + }, + "supplemental_9.tsv": { + "type": "-", + "size": 45, + "lmtime": 0, "modified": false } }, @@ -309,15 +425,15 @@ }, ".htaccess": { "type": "-", - "size": 601, - "lmtime": 0, - "modified": true + "size": 716, + "lmtime": 1772117932512, + "modified": false }, "index.php": { "type": "-", - "size": 4210, - "lmtime": 1771198110809, - "modified": true + "size": 4267, + "lmtime": 1772117836613, + "modified": false }, "install.php": { "type": "-", @@ -334,14 +450,14 @@ }, "style.css": { "type": "-", - "size": 58603, - "lmtime": 1771955179296, + "size": 60877, + "lmtime": 1772117956039, "modified": false }, "style.css.map": { "type": "-", - "size": 156429, - "lmtime": 1771955179296, + "size": 162739, + "lmtime": 1772117956039, "modified": false }, "style-old.css": { @@ -358,8 +474,8 @@ }, "style.scss": { "type": "-", - "size": 68201, - "lmtime": 1771955178718, + "size": 70931, + "lmtime": 1772117955600, "modified": false } }, @@ -573,16 +689,28 @@ "lmtime": 0, "modified": false }, + "024_campaign_ad_groups_status.sql": { + "type": "-", + "size": 131, + "lmtime": 1771755182086, + "modified": false + }, + "025_campaign_keywords_status.sql": { + "type": "-", + "size": 115, + "lmtime": 1771966738564, + "modified": false + }, "demo_data.sql": { "type": "-", "size": 21146, "lmtime": 0, "modified": true }, - "024_campaign_ad_groups_status.sql": { + "026_cron_queue.sql": { "type": "-", - "size": 131, - "lmtime": 1771755182086, + "size": 1851, + "lmtime": 1772116290944, "modified": false } }, @@ -593,6 +721,50 @@ "modified": false }, "templates": { + "allegro": {}, + "campaign_alerts": {}, + "campaigns": { + "main_view.php": { + "type": "-", + "size": 21607, + "lmtime": 1771717394441, + "modified": false + } + }, + "campaign_terms": { + "main_view.php": { + "type": "-", + "size": 98481, + "lmtime": 1771967157143, + "modified": false + } + }, + "clients": { + "main_view.php": { + "type": "-", + "size": 16977, + "lmtime": 1772117630298, + "modified": false + } + }, + "cron": {}, + "facebook_ads": { + "main_view.php": { + "type": "-", + "size": 10806, + "lmtime": 1771717403326, + "modified": false + } + }, + "html": {}, + "logs": { + "main_view.php": { + "type": "-", + "size": 5948, + "lmtime": 1771717396318, + "modified": false + } + }, "products": { "main_view.php": { "type": "-", @@ -610,31 +782,23 @@ "site": { "layout-cron.php": { "type": "-", - "size": 5764, + "size": 5763, "lmtime": 1771367592957, - "modified": false + "modified": true }, "layout-logged.php": { "type": "-", - "size": 7746, - "lmtime": 1771367592216, + "size": 10230, + "lmtime": 1772117855095, "modified": false }, "layout-unlogged.php": { "type": "-", - "size": 2024, + "size": 2023, "lmtime": 0, "modified": true } }, - "campaigns": { - "main_view.php": { - "type": "-", - "size": 21607, - "lmtime": 1771717394441, - "modified": false - } - }, "users": { "login-form.php": { "type": "-", @@ -649,35 +813,12 @@ "modified": false } }, - "campaign_terms": { + "xml_files": {}, + "feeds": { "main_view.php": { "type": "-", - "size": 94858, - "lmtime": 1771954474677, - "modified": false - } - }, - "clients": { - "main_view.php": { - "type": "-", - "size": 9867, - "lmtime": 1771494851645, - "modified": false - } - }, - "facebook_ads": { - "main_view.php": { - "type": "-", - "size": 10806, - "lmtime": 1771717403326, - "modified": false - } - }, - "logs": { - "main_view.php": { - "type": "-", - "size": 5948, - "lmtime": 1771717396318, + "size": 3231, + "lmtime": 1772117831024, "modified": false } } diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 262f599..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,46 +0,0 @@ -# Repository Guidelines - -## Struktura projektu i organizacja modułów -To repozytorium zawiera aplikację PHP w lekkiej architekturze MVC do zarządzania reklamami. - -- Punkty wejścia: `index.php`, `ajax.php`, `api.php`, `cron.php`, `install.php` -- Kontrolery: `autoload/controls/class.*.php` (`\controls`) -- Fabryki (dostęp do danych): `autoload/factory/class.*.php` (`\factory`) -- Warstwa widoku: `autoload/view/class.*.php` (`\view`) -- Integracje zewnętrzne (Google Ads, OpenAI, Claude, Meta): `autoload/services/` -- Szablony: `templates//` -- Style: `layout/style.scss` -> `layout/style.css` -- Zmiany schematu bazy: `migrations/*.sql` (numerowane, przyrostowe) -- Dokumentacja techniczna i notatki: `docs/` - -## Komendy build/test/development -- `php -S localhost:8000` - uruchamia lokalny serwer PHP z katalogu repozytorium. -- `php install.php` - wykonuje oczekujące migracje bazy danych. -- `php install.php --with_demo` - wykonuje migracje i ładuje dane demonstracyjne. -- `php install.php --force` - wymusza ponowne uruchomienie wszystkich migracji (ostrożnie). -- `php -l ścieżka\do\pliku.php` - sprawdza składnię pliku PHP. - -Projekt nie wymaga standardowo pipeline `Node`/`Composer` do uruchomienia. SCSS kompiluje się zwykle przez VS Code Live Sass Compiler podczas edycji `layout/style.scss`. - -## Styl kodu i konwencje nazewnictwa -- Zachowuj obecny wzorzec nazw plików/klas: `class.Moduł.php`, namespace małymi literami (np. `\controls`). -- Nazwy klas: `PascalCase`; metody, zmienne i kolumny DB: `snake_case`. -- Utrzymuj styl formatowania zgodny z edytowanym plikiem (historyczny styl nawiasów i wcięć). -- Preferuj małe, statyczne metody w kontrolerach/fabrykach oraz jawne tablice danych do szablonów/JSON. - -## Wytyczne testowania -W repozytorium nie ma obecnie skonfigurowanego automatycznego zestawu testów (`phpunit` nie jest skonfigurowany). - -- Wykonuj ręczne testy smoke dla zmienionych tras, np. `/campaigns/main_view`, `/users/settings`. -- Dla zmian w API/AJAX sprawdzaj odpowiedzi JSON zarówno dla sukcesu, jak i błędów. -- Przed PR uruchamiaj `php -l` dla każdego modyfikowanego pliku PHP. - -## Zasady commitów i pull requestów -- Stosuj krótkie, rzeczowe komunikaty commitów. Historia preferuje prefiksy Conventional Commits, szczególnie `feat:` (oraz `fix:`, `refactor:`, `chore:`). -- Jeden commit powinien obejmować jeden spójny zakres zmian (schema, backend, UI). -- PR powinien zawierać: cel zmian, listę zmienionych modułów/ścieżek, wpływ na migracje, kroki testowe i zrzuty ekranu dla zmian UI. -- Dodawaj powiązane ID zadania/issue, jeśli istnieją. - -## Bezpieczeństwo i konfiguracja -- Traktuj `config.php` i klucze API jako dane wrażliwe; nie commituj prawdziwych sekretów. -- Tymczasowe pliki debugowe z `tmp/` nie powinny trafiać do commitów produkcyjnych, chyba że jest to celowe. diff --git a/CLAUDE.md b/CLAUDE.md index be916b0..6531740 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,100 +4,114 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -adsPRO is a PHP SaaS application for managing Google Ads campaigns, products, and clients. It integrates with Google Ads API, OpenAI, and Claude AI to provide AI-powered ad optimization. UI language is Polish. +adsPRO is a PHP web application for managing Google Ads, Facebook Ads, and Google Merchant Center campaigns. It tracks campaign performance (ROAS, budgets, conversions), manages product feeds, and provides AI-powered suggestions for product titles/descriptions. The UI is in Polish. + +## Tech Stack + +- **PHP** (no framework, custom MVC-like architecture) +- **MySQL** via Medoo ORM (`$mdb` global) and RedBeanPHP (`\R::`) in legacy endpoints +- **Frontend**: jQuery, DataTables, Highcharts, Select2, Bootstrap 5, Font Awesome 6 +- **SCSS** for styling (`layout/style.scss` → `layout/style.css`) +- **Google Ads REST API** v23 (direct cURL, no SDK) +- **Facebook Ads Graph API** (direct cURL) +- **AI services**: OpenAI, Claude, Gemini APIs for product text suggestions ## Architecture -Custom lightweight MVC framework with three layers: +### Request Flow -- **Controllers** (`autoload/controls/class.*.php`, namespace `\controls`) - handle requests, return rendered views or JSON -- **Factories** (`autoload/factory/class.*.php`, namespace `\factory`) - data access layer, all static methods, use Medoo ORM -- **Views** (`autoload/view/class.*.php`, namespace `\view`) - compose templates with data -- **Services** (`autoload/services/class.*.php`, namespace `\services`) - external API integrations (GoogleAdsApi, ClaudeApi, OpenAiApi) -- **Templates** (`templates/`) - PHP files, variables accessed via `$this->varName` +`index.php` is the single entry point. `.htaccess` rewrites all non-static requests to it. The router uses a `$route_aliases` map and fallback URL segment parsing (`/module/action`) to set `$_GET['module']` and `$_GET['action']`. `\controls\Site::route()` instantiates `\controls\{Module}` and calls the action method. -### Autoloading +Other entry points: +- `ajax.php` — AJAX requests (same autoloader, session-based auth with IP binding) +- `api.php` — external API endpoints (domain tester, Open Page Rank) +- `cron.php` — legacy cron (task reminders, recurring tasks) -PSR-0-like: `\controls\Campaigns` resolves to `autoload/controls/class.Campaigns.php`. +### Autoloader & Namespace Convention -### Routing +`spl_autoload_register` maps namespaces to filesystem paths: +- `\controls\Campaigns` → `autoload/controls/class.Campaigns.php` +- `\factory\Clients` → `autoload/factory/class.Clients.php` +- `\services\GoogleAdsApi` → `autoload/services/class.GoogleAdsApi.php` +- `\view\Site` → `autoload/view/class.Site.php` -Entry point: `index.php`. URL `/module/action/key=value` maps to `\controls\Module::action()`. Route aliases defined in `$route_aliases` array. Default route: `campaigns/main_view`. +File naming: `class.{ClassName}.php`. Root-level classes (no namespace): `autoload/class.{Name}.php`. -### Database +### Layer Responsibilities -MySQL via Medoo ORM (`global $mdb`). Common patterns: -```php -$mdb->select('table', '*', ['field' => $value]); -$mdb->get('table', '*', ['id' => $id]); -$mdb->insert('table', ['field' => $value]); -$mdb->update('table', ['field' => $value], ['id' => $id]); -$mdb->query($sql, [':param' => $value])->fetchAll(\PDO::FETCH_ASSOC); -``` +- **`autoload/controls/`** — Controllers. Handle request params via `\S::get()`, call factory/services, return HTML (via `\Tpl::view()`) or `echo json_encode()` + `exit` for AJAX. +- **`autoload/factory/`** — Data access layer. Static methods wrapping `$mdb` queries. Named after domain entities (Clients, Campaigns, Products, etc.). +- **`autoload/services/`** — External API integrations (GoogleAdsApi, FacebookAdsApi, ClaudeApi, OpenAiApi, GeminiApi, SupplementalFeed). +- **`autoload/view/`** — View helpers. Thin wrappers that call `\Tpl::view()` with template path and data. +- **`templates/{module}/`** — PHP template files rendered by `Tpl::view()`. Templates access data via `$this->varName`. -### Key Utility Classes +### Key Base Classes -- `\S` - static helpers: `\S::get('param')` (POST/GET), `\S::get_session()`, `\S::set_session()`, `\S::alert()`, `\S::send_email()` -- `\Tpl::view('path/template', ['var' => $data])` - template rendering -- `\Html::input()`, `\Html::select()`, etc. - form component builders -- `\Cache::store()`, `\Cache::fetch()` - file-based caching +- **`\S`** — Static utility: `get()` reads POST/GET, `get_session()`/`set_session()` for sessions, `alert()` for flash messages, `send_email()` for SMTP. +- **`\Tpl`** — Template engine. `Tpl::view('module/template', [...])` renders `templates/module/template.php`. Looks in `templates_user/` first (override), then `templates/`. +- **`\DbModel`** — Active Record base class. Subclasses set `$table`; provides `save()`, `delete()`. +- **`\Cache`** — File-based cache in `temp/` directory. `Cache::store($key, $data, $ttl)` / `Cache::fetch($key)`. -### Authentication +### Settings Storage -Session-based with cookie auto-login. User stored in `$_SESSION['user']`. Public paths whitelisted in `index.php`. IP validated per session. +App settings (API keys, cron state, feature flags) are stored in a `settings` DB table as key-value pairs. Access via `\services\GoogleAdsApi::get_setting($key)` / `set_setting($key, $value)` — these are used globally, not just for Google Ads. -## Commands +## Database Migrations -### Database Migrations +Numbered SQL files in `migrations/` (e.g., `001_google_ads_settings.sql`). Run via: ```bash -# Run migrations (via browser or CLI) -php install.php - -# With demo data -php install.php --with_demo - -# Force re-run all -php install.php --force +php install.php # apply pending migrations +php install.php --force # re-apply all migrations +php install.php --with_demo # include demo_data.sql ``` -Migration files in `migrations/` follow pattern `NNN_description.sql`. Tracked in `schema_migrations` table (idempotent). +Tracks applied migrations in `schema_migrations` table. -### SASS Compilation +## Cron System -VS Code Live Sass Compiler watches `layout/style.scss` and compiles to `layout/style.css` (compressed). +Multiple cron endpoints called externally (e.g., every 1-5 minutes): -### Deployment +| Endpoint | Purpose | +|---|---| +| `/cron.php` | Legacy: task reminders, recurring tasks | +| `/cron/cron_universal` | Google Ads campaigns + products sync (backfill window) | +| `/cron/cron_campaigns_product_alerts_merchant` | Product alerts from Merchant Center | +| `/cron/cron_products_urls` | Fetch product URLs from Merchant Center | +| `/cron/cron_facebook_ads` | Facebook Ads sync (30-day window) | -Files auto-upload to remote server via VS Code FTP-Kr extension (`.vscode/ftp-kr.json`). No build step required. +Progress is tracked in `cron_sync_status` table with phases (pending → fetch → aggregate_30 → done). Dashboard at `/settings` shows real-time progress with ETA calculations. -## Code Conventions +## Supplemental Feeds -- **PHP style**: Spaces inside parentheses `if ( $x )`, braces on new line, 2-space indent in templates, 4-space in classes -- **Naming**: Classes PascalCase, methods/variables/columns snake_case, namespaces lowercase -- **Static methods**: Controllers and factories use `static public function` -- **JSON endpoints**: `echo json_encode([...]); exit;` -- **Template variables**: passed as array to `\Tpl::view()`, accessed as `$this->varName` +`\services\SupplementalFeed::generate_for_client($id)` generates TSV files in `feeds/` directory (e.g., `feeds/supplemental_1.tsv`) for Google Merchant Center. Managed via `/feeds` UI. -## Frontend Stack +## Coding Conventions -jQuery 3.6, DataTables 2.1, Bootstrap 4, Select2 4.1, Highcharts, Font Awesome 6.5, jquery-confirm for modals. All loaded via CDN or from `libraries/`. +- All classes use static methods extensively +- Database access uses the global `$mdb` (Medoo instance) — never instantiate a new connection +- AJAX endpoints: `echo json_encode([...])` then `exit` +- Page actions: return HTML string from `\Tpl::view()` +- POST/GET params: always use `\S::get('param_name')`, never `$_POST`/`$_GET` directly +- Flash messages: `\S::alert('message')` then `header('Location: ...')` + `exit` +- Timezone: `Europe/Warsaw` +- Currency display: `\S::number_display($value)` formats as "1 234,56 zł" +- All user-facing strings are in Polish -## Entry Points +## Adding a New Module -| File | Purpose | -|------|---------| -| `index.php` | Main app (routing + auth) | -| `ajax.php` | AJAX requests (authenticated) | -| `api.php` | Public API | -| `cron.php` | Background jobs | -| `install.php` | Database migration runner | -| `config.php` | DB and email credentials | +1. Create controller: `autoload/controls/class.{ModuleName}.php` (namespace `controls`) +2. Create factory: `autoload/factory/class.{ModuleName}.php` (namespace `factory`) +3. Optionally create view helper: `autoload/view/class.{ModuleName}.php` (namespace `view`) +4. Create templates: `templates/{module_name}/main_view.php` etc. +5. Add route aliases in `index.php` `$route_aliases` array if clean URLs are needed +6. Add sidebar link in `templates/site/layout-logged.php` -## API Settings Storage +## Frontend Libraries (in `libraries/`) -Google Ads, Claude, and OpenAI API keys are stored in the `settings` table (key-value) and managed via the Settings page (`\controls\Users::settings`). - -## Project Memory - -Plik `docs/memory.md` zawiera trwala pamiec projektu - decyzje, ustalenia i wzorce potwierdzone w trakcie pracy. Czytaj go na poczatku sesji i aktualizuj gdy zapadna nowe istotne decyzje. +- `medoo/` — Medoo PHP database framework (SQL builder) +- `rb.php` — RedBeanPHP ORM (used in legacy `api.php`, `cron.php`) +- `phpmailer/` — Email sending +- `framework/` — jQuery UI, Bootstrap, various jQuery plugins +- `functions.js` — Shared JS utilities +- `adspro-dialog.js/.css` — Custom modal dialog component diff --git a/MEMORY.md b/MEMORY.md new file mode 100644 index 0000000..be05fd2 --- /dev/null +++ b/MEMORY.md @@ -0,0 +1,4 @@ +# Google Ads Project Memory + +## Zasady pracy +- Zawsze pisz do mnie po polsku \ No newline at end of file diff --git a/autoload/controls/class.Clients.php b/autoload/controls/class.Clients.php index 60655e3..eaa71ae 100644 --- a/autoload/controls/class.Clients.php +++ b/autoload/controls/class.Clients.php @@ -315,6 +315,20 @@ class Clients // Tabele Facebook Ads mogly nie byc jeszcze zainstalowane. } + // Supplemental Feed: binarny per klient (wygenerowany dzisiaj = 1/1, nie = 0/1) + $feed_today = date( 'Y-m-d' ); + $feed_last_date = (string) \services\GoogleAdsApi::get_setting( 'cron_supplemental_feed_last_date' ); + $feed_done_today = ( $feed_last_date === $feed_today ); + + if ( !empty( $merchant_clients_ids ) ) + { + foreach ( $merchant_clients_ids as $cid ) + { + $cid = (int) $cid; + $data[ $cid ]['feed'] = [ $feed_done_today ? 1 : 0, 1 ]; + } + } + echo json_encode( [ 'status' => 'ok', 'data' => $data ] ); exit; } @@ -396,6 +410,27 @@ class Clients \services\FacebookAdsApi::set_setting( 'cron_facebook_ads_force_client_id', (string) $id ); \services\FacebookAdsApi::set_setting( 'cron_facebook_ads_force_requested_at', date( 'Y-m-d H:i:s' ) ); } + else if ( $pipeline === 'supplemental_feed' ) + { + $has_merchant_id = trim( (string) ( $client['google_merchant_account_id'] ?? '' ) ) !== ''; + if ( !$has_merchant_id ) + { + echo json_encode( [ 'success' => false, 'message' => 'Klient nie ma ustawionego Merchant Account ID.' ] ); + exit; + } + + try + { + \services\SupplementalFeed::generate_for_client( $id ); + echo json_encode( [ 'success' => true, 'pipeline' => 'supplemental_feed', 'immediate' => true ] ); + exit; + } + catch ( \Throwable $e ) + { + echo json_encode( [ 'success' => false, 'message' => 'Blad generowania feedu: ' . $e -> getMessage() ] ); + exit; + } + } else { // Domyslny reset (wszystkie pipeline oparte o cron_sync_status). diff --git a/autoload/controls/class.Cron.php b/autoload/controls/class.Cron.php index 610ab8c..1b89b9e 100644 --- a/autoload/controls/class.Cron.php +++ b/autoload/controls/class.Cron.php @@ -246,6 +246,61 @@ class Cron ] ); } + // --- Supplemental Feed: generuj raz dziennie gdy pipeline'y ukonczone --- + $today = date( 'Y-m-d' ); + $feed_last_date = (string) self::get_setting_value( 'cron_supplemental_feed_last_date', '' ); + + if ( $feed_last_date !== $today ) + { + $feed_clients = $mdb -> query( + "SELECT id, name, google_merchant_account_id FROM clients + WHERE " . $clients_not_deleted_sql . " + AND COALESCE(active, 0) = 1 + AND google_merchant_account_id IS NOT NULL + AND google_merchant_account_id <> '' + ORDER BY id ASC" + ) -> fetchAll( \PDO::FETCH_ASSOC ); + + $feed_generated = 0; + $feed_products_total = 0; + $feed_errors = []; + $feed_details = []; + + foreach ( $feed_clients as $fc ) + { + try + { + $feed_result = \services\SupplementalFeed::generate_for_client( (int) $fc['id'] ); + $feed_generated++; + $feed_products_total += (int) $feed_result['products_written']; + $feed_details[] = [ + 'client_id' => (int) $fc['id'], + 'client_name' => (string) $fc['name'], + 'products_written' => (int) $feed_result['products_written'], + 'file' => (string) $feed_result['file'] + ]; + } + catch ( \Throwable $e ) + { + $feed_errors[] = 'Feed klient #' . $fc['id'] . ': ' . $e -> getMessage(); + } + } + + self::set_setting_value( 'cron_supplemental_feed_last_date', $today ); + self::set_setting_value( 'cron_supplemental_feed_last_count', (string) $feed_products_total ); + self::set_setting_value( 'cron_supplemental_feed_files', (string) $feed_generated ); + + self::output_cron_response( [ + 'result' => 'Supplemental feed: ' . $feed_generated . ' plikow, ' . $feed_products_total . ' produktow.', + 'supplemental_feed' => 1, + 'feed_generated' => $feed_generated, + 'feed_products_total' => $feed_products_total, + 'feed_details' => $feed_details, + 'active_date' => $sync_date, + 'errors' => $feed_errors + ] ); + } + self::output_cron_response( [ 'result' => 'Wszyscy aktywni klienci zostali przetworzeni dla calego okna dat.', 'active_date' => $sync_date, @@ -4991,6 +5046,7 @@ class Cron return $label; } + // =========================== // FRAZY - history 30 // =========================== diff --git a/autoload/controls/class.Feeds.php b/autoload/controls/class.Feeds.php new file mode 100644 index 0000000..bcd8347 --- /dev/null +++ b/autoload/controls/class.Feeds.php @@ -0,0 +1,57 @@ + pdo -> prepare( "SHOW COLUMNS FROM clients LIKE 'deleted'" ); + $stmt -> execute(); + $has_deleted = (bool) $stmt -> fetch( \PDO::FETCH_ASSOC ); + } + catch ( \Throwable $e ) {} + + $not_deleted_sql = $has_deleted ? 'COALESCE( deleted, 0 ) = 0' : '1=1'; + + $clients = $mdb -> query( + "SELECT id, name, google_merchant_account_id + FROM clients + WHERE " . $not_deleted_sql . " + AND google_merchant_account_id IS NOT NULL + AND google_merchant_account_id <> '' + ORDER BY name ASC" + ) -> fetchAll( \PDO::FETCH_ASSOC ); + + $base_url = ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http' ) + . '://' . $_SERVER['HTTP_HOST']; + + $feeds_dir = __DIR__ . '/../../feeds'; + $items = []; + + foreach ( $clients as $client ) + { + $filename = 'supplemental_' . $client['id'] . '.tsv'; + $file_path = $feeds_dir . '/' . $filename; + $exists = file_exists( $file_path ); + + $items[] = [ + 'client_id' => (int) $client['id'], + 'client_name' => (string) $client['name'], + 'merchant_id' => (string) $client['google_merchant_account_id'], + 'filename' => $filename, + 'url' => $base_url . '/feeds/' . $filename, + 'exists' => $exists, + 'modified_at' => $exists ? date( 'Y-m-d H:i:s', filemtime( $file_path ) ) : null, + 'size' => $exists ? filesize( $file_path ) : 0, + ]; + } + + return \view\Feeds::main_view( $items ); + } +} diff --git a/autoload/controls/class.Products.php b/autoload/controls/class.Products.php index 2513aa0..a12c4dc 100644 --- a/autoload/controls/class.Products.php +++ b/autoload/controls/class.Products.php @@ -44,7 +44,7 @@ class Products return [ 'status' => 'skipped', 'message' => 'Brak zmian do synchronizacji.' ]; } - $supported_fields = [ 'title', 'description', 'google_product_category', 'custom_label_4' ]; + $supported_fields = [ 'title', 'description', 'google_product_category' ]; $normalized_changes = []; foreach ( $changed_fields as $field => $change ) @@ -660,6 +660,22 @@ class Products exit; } + static public function delete_product_merchant_sync_log() + { + $log_id = (int) \S::get( 'log_id' ); + + if ( $log_id <= 0 ) + { + echo json_encode( [ 'status' => 'error', 'message' => 'Nieprawidłowe ID logu.' ] ); + exit; + } + + $result = \factory\Products::delete_product_merchant_sync_log( $log_id ); + + echo json_encode( [ 'status' => $result ? 'ok' : 'error' ] ); + exit; + } + static public function ai_suggest() { $product_id = \S::get( 'product_id' ); @@ -1055,17 +1071,9 @@ class Products { $product_id = \S::get( 'product_id' ); $custom_label_4 = \S::get( 'custom_label_4' ); - $old_custom_label_4 = (string) \factory\Products::get_product_data( $product_id, 'custom_label_4' ); if ( \factory\Products::set_product_data( $product_id, 'custom_label_4', $custom_label_4 ) ) { - self::sync_product_fields_to_merchant( $product_id, [ - 'custom_label_4' => [ - 'old' => $old_custom_label_4, - 'new' => (string) $custom_label_4 - ] - ], 'products_ui' ); - \factory\Products::add_product_comment( $product_id, 'Zmiana etykiety 4 na: ' . $custom_label_4 ); echo json_encode( [ 'status' => 'ok' ] ); } @@ -1247,9 +1255,30 @@ class Products \factory\Products::set_product_data( $product_id, 'product_url', $product_url ?: '' ); - if ( !empty( $changed_for_merchant ) ) + foreach ( $changed_for_merchant as $field => $change ) { - self::sync_product_fields_to_merchant( $product_id, $changed_for_merchant, 'products_ui' ); + if ( trim( $change['old'] ) === trim( $change['new'] ) ) + { + continue; + } + + $log_old = $change['old']; + $log_new = $change['new']; + + if ( $field === 'description' ) + { + $log_old = $log_old !== '' ? '(zmieniono)' : ''; + $log_new = '(zmieniono)'; + } + + \factory\Products::add_product_merchant_sync_log( [ + 'product_id' => $product_id, + 'field_name' => $field, + 'old_value' => $log_old, + 'new_value' => $log_new, + 'sync_status' => 'local', + 'sync_source' => 'products_ui' + ] ); } } diff --git a/autoload/controls/class.Users.php b/autoload/controls/class.Users.php index c74b126..d1e69da 100644 --- a/autoload/controls/class.Users.php +++ b/autoload/controls/class.Users.php @@ -343,12 +343,29 @@ class Users $facebook_meta .= ', ' . $facebook_eta_meta; } + // --- Supplemental Feed --- (postep = wygenerowany dzisiaj, binarny jak Facebook) + $feed_today = date( 'Y-m-d' ); + $feed_last_date = (string) \services\GoogleAdsApi::get_setting( 'cron_supplemental_feed_last_date' ); + $feed_done_today = ( $feed_last_date === $feed_today ); + + $feed_processed = $feed_done_today ? $merchant_clients_total : 0; + $feed_total = max( 1, $merchant_clients_total ); + + $feed_last_count = (int) \services\GoogleAdsApi::get_setting( 'cron_supplemental_feed_last_count' ); + $feed_files = (int) \services\GoogleAdsApi::get_setting( 'cron_supplemental_feed_files' ); + + $feed_meta = 'Klienci z Merchant ID: ' . $merchant_clients_total + . ', ostatnia generacja: ' . ( $feed_last_date ?: 'nigdy' ) + . ', pliki: ' . $feed_files + . ', produkty: ' . $feed_last_count + . ', dzisiaj: ' . ( $feed_done_today ? 'tak' : 'nie' ); + $cron_schedule = []; // --- Endpointy CRON --- $cron_endpoints = [ [ 'name' => 'Legacy CRON', 'path' => '/cron.php', 'action' => 'cron_legacy', 'plan' => '' ], - [ 'name' => 'Cron uniwersalny (Google Ads)', 'path' => '/cron/cron_universal', 'action' => 'cron_universal', 'plan' => 'Co 1 min: kampanie (wczoraj) + frazy/produkty (7 dni wstecz) + Merchant URL' ], + [ 'name' => 'Cron uniwersalny (Google Ads)', 'path' => '/cron/cron_universal', 'action' => 'cron_universal', 'plan' => 'Co 1 min: kampanie (wczoraj) + frazy/produkty (7 dni wstecz) + Merchant URL + supplemental feed (raz dziennie)' ], [ 'name' => 'Cron alertow kampanii (Merchant)', 'path' => '/cron/cron_campaigns_product_alerts_merchant', 'action' => 'cron_campaigns_product_alerts_merchant', 'plan' => 'Co 15 min: alerty produktowe z Google Merchant' ], [ 'name' => 'Cron URL produktów (Merchant)', 'path' => '/cron/cron_products_urls', 'action' => 'cron_products_urls', 'plan' => '' ], [ 'name' => 'Cron Facebook Ads', 'path' => '/cron/cron_facebook_ads', 'action' => 'cron_facebook_ads', 'plan' => 'Co 5 min: 30 dni wstecz od wczoraj, blokada ponownego pobrania w tym samym dniu' ], @@ -399,6 +416,13 @@ class Users 'percent' => self::progress_percent( $facebook_processed, $facebook_total ), 'meta' => $facebook_meta ], + [ + 'name' => 'Supplemental Feed', + 'processed' => $feed_processed, + 'total' => $feed_total, + 'percent' => self::progress_percent( $feed_processed, $feed_total ), + 'meta' => $feed_meta + ], ], 'schedule' => $cron_schedule, 'urls' => $urls diff --git a/autoload/factory/class.Products.php b/autoload/factory/class.Products.php index 2d2172d..345a487 100644 --- a/autoload/factory/class.Products.php +++ b/autoload/factory/class.Products.php @@ -597,6 +597,22 @@ class Products ) -> fetchAll( \PDO::FETCH_ASSOC ); } + static public function delete_product_merchant_sync_log( $log_id ) + { + global $mdb; + + $log_id = (int) $log_id; + + if ( $log_id <= 0 ) + { + return false; + } + + $pdo = $mdb -> delete( 'products_merchant_sync_log', [ 'id' => $log_id ] ); + + return $pdo -> rowCount() > 0; + } + static public function get_product_ads_keyword_context( $product_id ) { global $mdb; diff --git a/autoload/services/class.SupplementalFeed.php b/autoload/services/class.SupplementalFeed.php new file mode 100644 index 0000000..7210769 --- /dev/null +++ b/autoload/services/class.SupplementalFeed.php @@ -0,0 +1,119 @@ + query( + "SELECT p.offer_id, p.title, p.description, p.google_product_category + FROM products p + WHERE p.client_id = :client_id + AND p.offer_id IS NOT NULL + AND p.offer_id <> '' + AND ( p.title IS NOT NULL OR p.description IS NOT NULL OR p.google_product_category IS NOT NULL )", + [ ':client_id' => $client_id ] + ) -> fetchAll( \PDO::FETCH_ASSOC ); + + $feeds_dir = __DIR__ . '/../../feeds'; + if ( !is_dir( $feeds_dir ) ) + { + mkdir( $feeds_dir, 0755, true ); + } + + $filename = 'supplemental_' . $client_id . '.tsv'; + $file_path = $feeds_dir . '/' . $filename; + $fp = fopen( $file_path, 'w' ); + + if ( $fp === false ) + { + throw new \RuntimeException( 'Nie mozna otworzyc pliku: ' . $file_path ); + } + + fwrite( $fp, "id\ttitle\tdescription\tgoogle_product_category\n" ); + + $written = 0; + foreach ( $products as $row ) + { + $title = self::sanitize_for_tsv( $row['title'] ?? '' ); + $description = self::sanitize_for_tsv( $row['description'] ?? '' ); + $category = trim( (string) ( $row['google_product_category'] ?? '' ) ); + + if ( $title === '' && $description === '' && $category === '' ) + { + continue; + } + + fwrite( $fp, implode( "\t", [ + $row['offer_id'], + $title, + $description, + $category + ] ) . "\n" ); + + $written++; + } + + fclose( $fp ); + + return [ + 'products_total' => count( $products ), + 'products_written' => $written, + 'file' => $filename + ]; + } + + /** + * Czyści HTML z tekstu na potrzeby TSV. + * Zachowuje strukturę (akapity, listy) jako escaped \n. + * GMC interpretuje literalny \n jako nowa linia w opisie. + */ + static private function sanitize_for_tsv( $value ) + { + $value = (string) $value; + if ( $value === '' ) return ''; + + //
  • → newline + punktor + $value = preg_replace( '#]*>#i', "\n- ", $value ); + + // Blokowe tagi zamykajace → newline (akapity, divy, listy, naglowki) + $value = preg_replace( '##i', "\n", $value ); + $value = preg_replace( '##i', "\n", $value ); + + // Usun pozostale tagi + $value = strip_tags( $value ); + + // Dekoduj encje HTML + $value = html_entity_decode( $value, ENT_QUOTES | ENT_HTML5, 'UTF-8' ); + + // Taby → spacja (tab lamie TSV) + $value = str_replace( "\t", ' ', $value ); + + // Normalizuj newline + $value = str_replace( "\r\n", "\n", $value ); + $value = str_replace( "\r", "\n", $value ); + + // Wielokrotne puste linie → max 1 + $value = preg_replace( "/\n{3,}/", "\n\n", $value ); + + // Spacje wielokrotne w ramach linii → jedna + $value = preg_replace( '/ {2,}/', ' ', $value ); + + // Trim kazdej linii + $value = implode( "\n", array_map( 'trim', explode( "\n", $value ) ) ); + $value = trim( $value ); + + // Escape newline jako literalny \n dla TSV + $value = str_replace( "\n", '\\n', $value ); + + return $value; + } +} diff --git a/autoload/view/class.Feeds.php b/autoload/view/class.Feeds.php new file mode 100644 index 0000000..efc8296 --- /dev/null +++ b/autoload/view/class.Feeds.php @@ -0,0 +1,12 @@ + $items, + ] ); + } +} diff --git a/docs/CRON_QUEUE.md b/docs/CRON_QUEUE.md new file mode 100644 index 0000000..0d5d794 --- /dev/null +++ b/docs/CRON_QUEUE.md @@ -0,0 +1,27 @@ +# Kolejka Cron (DB) + +## Cel +- Zadania cron sa zapisywane w bazie (`cron_jobs`) i planowane przez harmonogram (`cron_schedules`). +- Aktualnie domyslnie dziala zadanie: `product_links_health_check` (co 7 dni). + +## Tabele +- `cron_jobs` - kolejka zadan z priorytetem, retry i backoff. +- `cron_schedules` - definicje cyklicznych zadan. +- `product_link_alerts` - alerty dla nieistniejacych powiazan produktu. + +## Uruchamianie +- Jednorazowo: `php bin/cron.php` +- Z limitem batcha: `php bin/cron.php --limit=50` +- Z panelu (`Ustawienia -> Cron`) mozna wlaczyc uruchamianie workera podczas requestow HTTP. + +## Zalecenie dla systemowego crona +- Uruchamiaj `php /sciezka/do/orderPRO/bin/cron.php` co 1-5 minut. +- Harmonogram 7-dniowy jest liczony przez `cron_schedules.next_run_at`, wiec sam worker powinien byc uruchamiany regularnie. + +## Jak dziala `product_links_health_check` +1. Pobiera aktywne integracje `shoppro` z API key. +2. Odswieza cache ofert (`channel_offers`) przez import API. +3. Czyści nieaktualne rekordy ofert z cache. +4. Weryfikuje aktywne powiazania `product_channel_map`. +5. Dla brakujacych powiazan ustawia alert `missing_remote_link`. +6. Dla przywroconych powiazan zamyka alert. diff --git a/docs/todo.md b/docs/todo.md new file mode 100644 index 0000000..af76e35 --- /dev/null +++ b/docs/todo.md @@ -0,0 +1,2 @@ +1. Zmiany w tytuła, opisie i kategorii google jednak nie powinn być synchronizowane przez API z Google Merchant Center (także to jest do wyłączenia) a powinny być jedynie zapisywanie w tabeli products, następnie trzeba stworzyć zadanie CRON, który będzie dla każdego z Klientów tworzył suplemental feed. Zadanie ma to się uruchamiać co 4h. +2. Cron ma działać na podstawie bazy danych. Czyli musi być jakieś narzędzie, które będzie dodawało zadania do bazy danych w odpowiednich odstępach czasu. Schemat działania jest mniej więcej opisany w pliku CRON_QUEUE.md (to jest plik z innego projektu więc wymaga dopasownia klas i metod) \ No newline at end of file diff --git a/feeds/.gitkeep b/feeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/feeds/.htaccess b/feeds/.htaccess new file mode 100644 index 0000000..5e5deea --- /dev/null +++ b/feeds/.htaccess @@ -0,0 +1,5 @@ +Allow from all + + + AddType text/tab-separated-values .tsv + diff --git a/feeds/supplemental_1.tsv b/feeds/supplemental_1.tsv new file mode 100644 index 0000000..3d29623 --- /dev/null +++ b/feeds/supplemental_1.tsv @@ -0,0 +1 @@ +id title description google_product_category diff --git a/feeds/supplemental_10.tsv b/feeds/supplemental_10.tsv new file mode 100644 index 0000000..1daea0f --- /dev/null +++ b/feeds/supplemental_10.tsv @@ -0,0 +1,6 @@ +id title description google_product_category +shopify_pl_8476788261204_46803770409300 GS żarówka LED E27 7W ciepłobiała zestaw 10 sztuk +shopify_pl_8454714753364_46732986483028 GS żarówka LED 7W E27 barwa ciepła biała +shopify_pl_8454759842132_46733043466580 Kobi Light żarówka LED E27 7W barwa neutralna biała 4000K 600lm 2425 +shopify_pl_8459153473876_46746440270164 Kobi Light żarówka LED świecowa E14 1,5W 150 lm zimnobiała 6000K 2425 +shopify_pl_8476790358356_46803775684948 Kobi Light żarówki LED E27 7W 4000K neutralne białe zestaw 10 sztuk 2425 diff --git a/feeds/supplemental_2.tsv b/feeds/supplemental_2.tsv new file mode 100644 index 0000000..2735a27 --- /dev/null +++ b/feeds/supplemental_2.tsv @@ -0,0 +1,13 @@ +id title description google_product_category +1778 Pudełko na pieniądze z życzeniami na Chrzest Święty Dłonie UV drewniane 14,5 × 14,5 cm +944 Drewniana zakładka do książki z grawerem Piesek, sklejka brzozowa 18 x 5 cm +1536 Tabliczka do zdjęć serduszko z napisem Miłość naszego życia, sklejka brzozowa 11 x 10 cm +2016 Pudełko na pieniądze z życzeniami na Chrzest Święty z nadrukiem UV, aniołek dziewczynka, drewniane białe 14,5 x 14,5 cm +1928 Magnes podziękowanie na wieczór panieński na plastrze brzozy Szampan z woreczkiem z organzy 12 x 15 cm +1720 Prośba o zostanie Matką Chrzestną z akrylu lustrzanego złotego Dłonie 14 x 10 cm 2 mm +1345 Zawieszka do wózka, przypinka z agrafką i czerwoną kokardką, różowo-fioletowa, personalizowana drewniana +1841 Magnes podziękowanie dla gości na chrzest Stopa ze sklejki brzozowej 12 x 8 cm, woreczek z organzy 12 x 15 cm +1961 Akrylowe podziękowanie na chrzest dla Ojca Chrzestnego ze zdjęciem, wzór 1, biały tekst +1470 Drewniana prośba o bycie ojcem chrzestnym Misiek, serduszko czerwone 12 x 12 cm, sklejka brzozowa 3 mm +1719 Prośba o zostanie Ojcem Chrzestnym z akrylu lustrzanego złotego 14 x 10 cm, wzór Dłonie +1599 Pudełko na pieniądze z życzeniami na Chrzest Święty, drewniane, Gołąbek 14,5 x 14,5 x 2,5 cm diff --git a/feeds/supplemental_3.tsv b/feeds/supplemental_3.tsv new file mode 100644 index 0000000..13b892d --- /dev/null +++ b/feeds/supplemental_3.tsv @@ -0,0 +1,5 @@ +id title description google_product_category +4302 Gen Factor Personal Care Cinnamic krem przeciwstarzeniowy i depigmentacyjny 6262 +7792 Aurumaris serum do twarzy z mikroigłami Total Remake Smart Serum 30ml 6262 +3510 Gen Factor Przeciwzmarszczkowy krem do twarzy z proteinami Personal Care Red 6262 +114 Podopharm Onygen krem na onycholizę do regeneracji paznokci 20ml 478 diff --git a/feeds/supplemental_4.tsv b/feeds/supplemental_4.tsv new file mode 100644 index 0000000..3afe74f --- /dev/null +++ b/feeds/supplemental_4.tsv @@ -0,0 +1,4 @@ +id title description google_product_category +shopify_zz_15830679224669_62928228286813 IBRA Makeup Kępki rzęs ślubne Bride Style MIX 8-12mm profil C 2761 +shopify_zz_15440624222557_57759508234589 IBRA Makeup Kępki rzęs Insta Style MIX długości 10-14 mm skręt C 2761 +shopify_zz_15085459505501_56180531462493 Ibra Makeup Kępki rzęs syntetyczne 12mm skręt C Extra Double 2761 diff --git a/feeds/supplemental_5.tsv b/feeds/supplemental_5.tsv new file mode 100644 index 0000000..4da3585 --- /dev/null +++ b/feeds/supplemental_5.tsv @@ -0,0 +1,6 @@ +id title description google_product_category +1123 AAA cążki do skórek IL-10 5 mm ze stali japońskiej +3410 Ibra Makeup błyszczący cień do powiek Brown Sugar różowe złoto i brąz +285 Karaja podkład liftingujący Skin Velvet nr 6 do cery suchej i mieszanej +3274 IBRA Makeup wygładzający puder transparentny No More Pore Pro Makeup Academy +120 Karaja wodoodporna mikro kredka do brwi Micro Browliner nr 1 jasny brąz diff --git a/feeds/supplemental_6.tsv b/feeds/supplemental_6.tsv new file mode 100644 index 0000000..3d29623 --- /dev/null +++ b/feeds/supplemental_6.tsv @@ -0,0 +1 @@ +id title description google_product_category diff --git a/feeds/supplemental_7.tsv b/feeds/supplemental_7.tsv new file mode 100644 index 0000000..cedeeea --- /dev/null +++ b/feeds/supplemental_7.tsv @@ -0,0 +1,5 @@ +id title description google_product_category +6358 Elpar przewód ziemny YKY 5x16 RE drut 1KV +641 NKT Przewód elektryczny YKY 5x10 mm² ziemny drut miedziany +6334 Elpar przewód bezhalogenowy N2XH-J 3x2,5 RE 0,6/1kV B2ca +5279 Elpar przewód elektryczny OWY (H05VV-F) 5x4 mm² linka czarny diff --git a/feeds/supplemental_8.tsv b/feeds/supplemental_8.tsv new file mode 100644 index 0000000..0f7c259 --- /dev/null +++ b/feeds/supplemental_8.tsv @@ -0,0 +1,6 @@ +id title description google_product_category +808 Ssawka do odkurzacza mała z welurem 32 mm zamiennik do Zelmer +1 Worki do odkurzacza Zelmer Meteor, Admiral 1010, 1020, 1030 papierowe 5 szt. z filtrami +387 Zelmer zestaw trzepaków do miksera ręcznego do modeli 181, 281, 371, 381 +397 Zelmer sprzęgło napędowe ślimaka 86.1203 do maszynki do mielenia mięsa +21 Worki papierowe do odkurzacza Amica Sumam, Nortes, Universis, Beris 5 szt. diff --git a/feeds/supplemental_9.tsv b/feeds/supplemental_9.tsv new file mode 100644 index 0000000..3d29623 --- /dev/null +++ b/feeds/supplemental_9.tsv @@ -0,0 +1 @@ +id title description google_product_category diff --git a/index.php b/index.php index 7733fb9..9db58a0 100644 --- a/index.php +++ b/index.php @@ -51,6 +51,7 @@ $route_aliases = [ 'settings/save_ai_prompts' => ['users', 'settings_save_ai_prompts'], 'products/ai_suggest' => ['products', 'ai_suggest'], 'clients/save' => ['clients', 'save'], + 'feeds' => ['feeds', 'main_view'], 'logs' => ['logs', 'main_view'], 'logs/get_data_table' => ['logs', 'get_logs_data_table'], 'logs/get_detail' => ['logs', 'get_detail'], diff --git a/layout/style.css b/layout/style.css index e1fa095..34dc5a7 100644 --- a/layout/style.css +++ b/layout/style.css @@ -1 +1 @@ -*{box-sizing:border-box}body{font-family:"Roboto",sans-serif;margin:0;padding:0;font-size:14px;color:#4e5e6a;background:#f4f6f9;max-width:100vw;overflow-x:hidden}.hide{display:none}small{font-size:.75em}.text-right{text-align:right}.text-bold{font-weight:700 !important}.nowrap{white-space:nowrap}body.unlogged{background:#f4f6f9;margin:0;padding:0}.login-container{display:flex;min-height:100vh}.login-brand{flex:0 0 45%;background:linear-gradient(135deg, #1E2A3A 0%, #2C3E57 50%, #6690F4 100%);display:flex;align-items:center;justify-content:center;padding:60px;position:relative;overflow:hidden}.login-brand::before{content:"";position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle, rgba(102, 144, 244, 0.15) 0%, transparent 70%);border-radius:50%}.login-brand .brand-content{position:relative;z-index:1;color:#fff;max-width:400px}.login-brand .brand-logo{font-size:48px;font-weight:300;margin-bottom:20px;letter-spacing:-1px}.login-brand .brand-logo strong{font-weight:700}.login-brand .brand-tagline{font-size:18px;opacity:.85;line-height:1.6;margin-bottom:50px}.login-brand .brand-features .feature{display:flex;align-items:center;gap:15px;margin-bottom:20px;opacity:.8}.login-brand .brand-features .feature i{font-size:20px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:hsla(0,0%,100%,.1);border-radius:10px}.login-brand .brand-features .feature span{font-size:15px}.login-form-wrapper{flex:1;display:flex;align-items:center;justify-content:center;padding:60px;background:#fff}.login-box{width:100%;max-width:420px}.login-box .login-header{margin-bottom:35px}.login-box .login-header h1{font-size:28px;font-weight:700;color:#2d3748;margin:0 0 8px}.login-box .login-header p{color:#718096;font-size:15px;margin:0}.login-box .form-group{margin-bottom:20px}.login-box .form-group label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.login-box .input-with-icon{position:relative}.login-box .input-with-icon i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px}.login-box .input-with-icon .form-control{padding-left:42px}.login-box .form-control{width:100%;height:46px;border:2px solid #e2e8f0;border-radius:8px;padding:0 14px;font-size:14px;font-family:"Roboto",sans-serif;color:#2d3748;transition:border-color .3s,box-shadow .3s}.login-box .form-control::-moz-placeholder{color:#cbd5e0}.login-box .form-control::placeholder{color:#cbd5e0}.login-box .form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.15);outline:none}.login-box .form-error{color:#c00;font-size:12px;margin-top:4px}.login-box .checkbox-group .checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#718096;font-weight:400}.login-box .checkbox-group .checkbox-label input[type=checkbox]{width:16px;height:16px;accent-color:#6690f4}.login-box .btn-login{width:100%;height:48px;font-size:15px;font-weight:600;border-radius:8px;display:flex;align-items:center;justify-content:center;gap:8px}.login-box .btn-login.disabled{opacity:.7;pointer-events:none}.login-box .alert{display:none;padding:12px 16px;border-radius:8px;font-size:13px;margin-bottom:20px}.login-box .alert.alert-danger{background:#fff5f5;color:#c00;border:1px solid #fed7d7}.login-box .alert.alert-success{background:#f0fff4;color:#276749;border:1px solid #c6f6d5}@media(max-width: 768px){.login-brand{display:none}.login-form-wrapper{padding:30px 20px}}body.logged{display:flex;min-height:100vh;background:#f4f6f9}.sidebar{width:260px;min-height:100vh;background:#1e2a3a;position:fixed;top:0;left:0;z-index:1000;display:flex;flex-direction:column;transition:width .3s ease;overflow:hidden}.sidebar.collapsed{width:70px}.sidebar.collapsed .sidebar-header{padding:16px 0;justify-content:center}.sidebar.collapsed .sidebar-header .sidebar-logo{display:none}.sidebar.collapsed .sidebar-header .sidebar-toggle i{transform:rotate(180deg)}.sidebar.collapsed .sidebar-nav ul li a{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li a span{display:none}.sidebar.collapsed .sidebar-nav ul li a i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label span{display:none}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-footer .sidebar-user{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-user .user-info{display:none}.sidebar.collapsed .sidebar-footer .sidebar-logout{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-logout span{display:none}.sidebar.collapsed .nav-divider{margin:8px 15px}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 16px;border-bottom:1px solid hsla(0,0%,100%,.08)}.sidebar-header .sidebar-logo a{color:#fff;text-decoration:none;font-size:24px;font-weight:300;letter-spacing:-0.5px}.sidebar-header .sidebar-logo a strong{font-weight:700}.sidebar-header .sidebar-toggle{background:none;border:none;color:#a8b7c7;cursor:pointer;padding:6px;border-radius:6px;transition:all .3s}.sidebar-header .sidebar-toggle:hover{background:hsla(0,0%,100%,.08);color:#fff}.sidebar-header .sidebar-toggle i{transition:transform .3s}.sidebar-nav{flex:1;padding:12px 0;overflow-y:auto}.sidebar-nav ul{list-style:none;margin:0;padding:0}.sidebar-nav ul li.nav-group{margin-bottom:4px}.sidebar-nav ul li.nav-group .nav-group-label{display:flex;align-items:center;padding:11px 20px;color:#d5deea;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li.nav-group .nav-group-label i{width:20px;text-align:center;margin-right:12px;font-size:14px;color:#b6c4d3}.sidebar-nav ul li.nav-group .nav-submenu{margin:0;padding:0;list-style:none}.sidebar-nav ul li.nav-group .nav-submenu li a{padding-left:44px}.sidebar-nav ul li.nav-group.active>.nav-group-label{color:#fff;background:rgba(102,144,244,.12);border-left-color:#6690f4}.sidebar-nav ul li.nav-group.active>.nav-group-label i{color:#6690f4}.sidebar-nav ul li.nav-divider{height:1px;background:hsla(0,0%,100%,.08);margin:8px 20px}.sidebar-nav ul li a{display:flex;align-items:center;padding:11px 20px;color:#a8b7c7;text-decoration:none;font-size:14px;transition:all .2s;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li a i{width:20px;text-align:center;margin-right:12px;font-size:15px}.sidebar-nav ul li a:hover{background:#263548;color:#fff}.sidebar-nav ul li.active>a{background:rgba(102,144,244,.15);color:#fff;border-left-color:#6690f4}.sidebar-nav ul li.active>a i{color:#6690f4}.badge-alerts-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:8px;border-radius:50%;font-size:11px;font-weight:600;line-height:1;background:#fff;color:#6690f4}.sidebar-footer{padding:16px 20px;border-top:1px solid hsla(0,0%,100%,.08)}.sidebar-footer .sidebar-user{display:flex;align-items:center;gap:10px;margin-bottom:12px}.sidebar-footer .sidebar-user .user-avatar{width:34px;height:34px;border-radius:50%;background:rgba(102,144,244,.2);display:flex;align-items:center;justify-content:center;color:#6690f4;font-size:14px;flex-shrink:0}.sidebar-footer .sidebar-user .user-info{overflow:hidden}.sidebar-footer .sidebar-user .user-info .user-email{color:#a8b7c7;font-size:12px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-footer .sidebar-logout{display:flex;align-items:center;gap:8px;color:#e53e3e;text-decoration:none;font-size:13px;padding:8px 10px;border-radius:6px;transition:all .2s}.sidebar-footer .sidebar-logout i{font-size:14px}.sidebar-footer .sidebar-logout:hover{background:rgba(229,62,62,.1)}.main-wrapper{margin-left:260px;flex:1;min-height:100vh;transition:margin-left .3s ease;display:flex;flex-direction:column}.main-wrapper.expanded{margin-left:70px}.topbar{height:56px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;padding:0 25px;position:sticky;top:0;z-index:500}.topbar .topbar-toggle{background:none;border:none;color:#4e5e6a;cursor:pointer;padding:8px 10px;border-radius:6px;font-size:16px;margin-right:15px;transition:all .2s}.topbar .topbar-toggle:hover{background:#f4f6f9}.topbar .topbar-breadcrumb{font-size:16px;font-weight:600;color:#2d3748}.content{flex:1;padding:25px}.app-alert{background:#ebf8ff;border:1px solid #bee3f8;color:#2b6cb0;padding:12px 16px;border-radius:8px;margin-bottom:20px;font-size:14px}.btn{padding:10px 20px;transition:all .2s ease;color:#fff;border:0;border-radius:6px;cursor:pointer;display:inline-flex;text-decoration:none;gap:6px;justify-content:center;align-items:center;font-size:14px;font-family:"Roboto",sans-serif;font-weight:500}.btn.btn_small,.btn.btn-xs,.btn.btn-sm{padding:5px 10px;font-size:12px}.btn.btn_small i,.btn.btn-xs i,.btn.btn-sm i{font-size:11px}.btn.btn-success{background:#57b951}.btn.btn-success:hover{background:#4a9c3b}.btn.btn-primary{background:#6690f4}.btn.btn-primary:hover{background:#3164db}.btn.btn-danger{background:#c00}.btn.btn-danger:hover{background:#b30000}.btn.disabled{opacity:.6;pointer-events:none}.form-control{border:1px solid #e2e8f0;border-radius:6px;height:38px;width:100%;padding:6px 12px;font-family:"Roboto",sans-serif;font-size:14px;color:#2d3748;transition:border-color .2s,box-shadow .2s}.form-control option{padding:5px}.form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:none}input[type=checkbox]{border:1px solid #e2e8f0}table{border-collapse:collapse;font-size:13px}.table{width:100%}.table th,.table td{border:1px solid #e2e8f0;padding:8px 10px}.table th{background:#f7fafc;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#718096}.table td.center{text-align:center}.table td.left{text-align:left}.table.table-sm td{padding:5px !important}.table input.form-control{font-size:13px;height:32px}.clients-table-wrap,.campaigns-table-wrap,.products-table-wrap,.logs-table-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;max-width:100%;-ms-overflow-style:none;scrollbar-width:none}.clients-table-wrap::-webkit-scrollbar,.campaigns-table-wrap::-webkit-scrollbar,.products-table-wrap::-webkit-scrollbar,.logs-table-wrap::-webkit-scrollbar{display:none}.clients-table-wrap .table,.campaigns-table-wrap .table,.products-table-wrap .table,.logs-table-wrap .table{margin:0;width:100% !important}.clients-table-wrap .table thead th,.campaigns-table-wrap .table thead th,.products-table-wrap .table thead th,.logs-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 16px;white-space:nowrap}.clients-table-wrap .table tbody td,.campaigns-table-wrap .table tbody td,.products-table-wrap .table tbody td,.logs-table-wrap .table tbody td{padding:10px 16px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-table-wrap .table tbody tr:hover td,.campaigns-table-wrap .table tbody tr:hover td,.products-table-wrap .table tbody tr:hover td,.logs-table-wrap .table tbody tr:hover td{background:#f8fafc}.clients-table-wrap .dt-layout-row,.campaigns-table-wrap .dt-layout-row,.products-table-wrap .dt-layout-row,.logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.clients-table-wrap .dt-layout-row:first-child,.campaigns-table-wrap .dt-layout-row:first-child,.products-table-wrap .dt-layout-row:first-child,.logs-table-wrap .dt-layout-row:first-child{display:none}.clients-table-wrap .dt-info,.campaigns-table-wrap .dt-info,.products-table-wrap .dt-info,.logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.clients-table-wrap .dt-paging .pagination,.campaigns-table-wrap .dt-paging .pagination,.products-table-wrap .dt-paging .pagination,.logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.clients-table-wrap .dt-paging .pagination .page-item .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link,.products-table-wrap .dt-paging .pagination .page-item .page-link,.logs-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:-moz-fit-content;width:fit-content;height:36px;padding:0 14px;border-radius:8px;font-size:13px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;cursor:pointer;transition:all .2s;text-decoration:none;line-height:1;white-space:nowrap}.clients-table-wrap .dt-paging .pagination .page-item .page-link:hover,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover,.products-table-wrap .dt-paging .pagination .page-item .page-link:hover,.logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.clients-table-wrap .dt-paging .pagination .page-item.active .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link,.products-table-wrap .dt-paging .pagination .page-item.active .page-link,.logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.clients-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.products-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.clients-table-wrap .dt-processing,.campaigns-table-wrap .dt-processing,.products-table-wrap .dt-processing,.logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.card{background:#fff;padding:20px;border-radius:8px;color:#2d3748;font-size:14px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.card.mb25{margin-bottom:20px}.card .card-header{font-weight:600;font-size:15px}.card .card-body{padding-top:12px}.card .card-body table th,.card .card-body table td{font-size:13px}.card .card-body table th.bold,.card .card-body table td.bold{font-weight:600}.card .card-body table th.text-right,.card .card-body table td.text-right{text-align:right}.card .card-body table th.text-center,.card .card-body table td.text-center{text-align:center}.action_menu{display:flex;margin-bottom:20px;gap:12px}.action_menu .btn{padding:8px 16px}.action_menu .btn.btn_add{background:#57b951}.action_menu .btn.btn_add:hover{background:#4a9c3b}.action_menu .btn.btn_cancel{background:#c00}.action_menu .btn.btn_cancel:hover{background:#b30000}.settings-tabs{display:flex;gap:8px;margin-bottom:18px}.settings-tabs .settings-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;text-decoration:none;color:#6b7a89;background:#e9eef5;border:1px solid #d8e0ea;font-size:13px;font-weight:600;transition:all .2s}.settings-tabs .settings-tab:hover{color:#2d3748;background:#dde6f2}.settings-tabs .settings-tab.active{color:#fff;background:#6690f4;border-color:#6690f4}.settings-card{background:#fff;border-radius:10px;padding:28px;box-shadow:0 1px 4px rgba(0,0,0,.06)}.settings-card .settings-card-header{display:flex;align-items:center;gap:14px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.settings-card .settings-card-header .settings-card-icon{width:44px;height:44px;border-radius:10px;background:rgb(225.706097561,233.7475609756,252.893902439);color:#6690f4;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.settings-card .settings-card-header h3{margin:0;font-size:17px;font-weight:600;color:#2d3748}.settings-card .settings-card-header small{color:#8899a6;font-size:13px}.settings-card .settings-field{margin-bottom:18px}.settings-card .settings-field label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.settings-card .settings-input-wrap{position:relative}.settings-card .settings-input-wrap .settings-input-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px;pointer-events:none}.settings-card .settings-input-wrap .form-control{padding-left:38px}.settings-card .settings-input-wrap .settings-toggle-pw{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:none;border:none;color:#a0aec0;cursor:pointer;padding:6px 10px;font-size:14px;transition:color .2s}.settings-card .settings-input-wrap .settings-toggle-pw:hover{color:#6690f4}.settings-card .settings-field .settings-toggle-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:14px;font-weight:500;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-bottom:0;width:100%}.settings-card .settings-field .settings-toggle-label .settings-toggle-text{flex:1 1 auto;min-width:0;line-height:1.35}.settings-card .settings-toggle-checkbox{display:none}.settings-card .settings-toggle-checkbox+.settings-toggle-switch{display:inline-block;position:relative;width:44px;height:24px;background:#ccc;border-radius:12px;transition:background .2s;flex-shrink:0}.settings-card .settings-toggle-checkbox+.settings-toggle-switch::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch{background:#22c55e}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch::after{transform:translateX(20px)}.settings-card .settings-fields-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}@media(max-width: 768px){.settings-card .settings-fields-grid{grid-template-columns:1fr}}.settings-card .settings-alert-error{display:flex;align-items:center;gap:10px;background:#fff5f5;color:#c00;border:1px solid #fed7d7;border-radius:8px;padding:12px 16px;margin-bottom:20px;font-size:13px}.settings-card .settings-alert-error i{font-size:16px;flex-shrink:0}.clients-page .clients-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.clients-page .clients-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.clients-page .clients-header h2 i{color:#6690f4;margin-right:8px}.clients-page .clients-table-wrap .table .client-id{color:#8899a6;font-size:13px;font-weight:600}.clients-page .clients-table-wrap .table .client-name{font-weight:600;color:#2d3748}.clients-page .badge-id{display:inline-block;background:#eef2ff;color:#6690f4;font-size:13px;font-weight:600;padding:4px 10px;border-radius:6px;font-family:monospace}.clients-page .actions-cell{text-align:center;white-space:nowrap}.clients-page .btn-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s;margin:0 2px}.clients-page .btn-icon.btn-icon-edit{background:#eef2ff;color:#6690f4}.clients-page .btn-icon.btn-icon-edit:hover{background:#6690f4;color:#fff}.clients-page .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.clients-page .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.clients-page .btn-icon.btn-icon-sync{background:#f0fdf4;color:#16a34a}.clients-page .btn-icon.btn-icon-sync:hover{background:#16a34a;color:#fff}.clients-page .btn-icon.btn-icon-sync:disabled{opacity:.7;cursor:wait}.clients-page .btn-icon.btn-icon-sync.is-queued{background:#fef3c7;color:#d97706}.clients-page .client-sync-bars{display:flex;flex-direction:column;gap:4px}.clients-page .client-sync-row{display:flex;align-items:center;gap:4px}.clients-page .client-sync-label{font-size:11px;font-weight:600;color:#8899a6;width:18px;flex-shrink:0}.clients-page .client-sync-track{flex:1;height:6px;border-radius:999px;background:#e9eef5;overflow:hidden}.clients-page .client-sync-fill{height:100%;border-radius:999px;background:#cbd5e0;transition:width .4s ease}.clients-page .client-sync-fill.is-active{background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.clients-page .client-sync-fill.is-done{background:#57b951}.clients-page .client-sync-pct{font-size:11px;font-weight:600;color:#8899a6;width:32px;text-align:right;flex-shrink:0}.clients-page .empty-state{text-align:center;padding:50px 20px !important;color:#a0aec0}.clients-page .empty-state i{font-size:40px;margin-bottom:12px;display:block}.clients-page .empty-state p{margin:0;font-size:15px}.btn-secondary{background:#e2e8f0;color:#2d3748;border:none;padding:8px 18px;border-radius:6px;font-size:14px;cursor:pointer;transition:background .2s}.btn-secondary:hover{background:#cbd5e0}.campaigns-page{max-width:100%;overflow-x:hidden;width:100%}.campaigns-page .campaigns-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.campaigns-page .campaigns-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.campaigns-page .campaigns-header h2 i{color:#6690f4;margin-right:8px}.campaigns-page .campaigns-filters{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:20px}.campaigns-page .campaigns-filters .filter-group{flex:1;min-width:0}.campaigns-page .campaigns-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.campaigns-page .campaigns-filters .filter-group label i{margin-right:4px}.campaigns-page .campaigns-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.campaigns-page .campaigns-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .filter-group .filter-with-action{display:flex;align-items:center;gap:8px}.campaigns-page .campaigns-filters .filter-group .filter-with-action .form-control{flex:1}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon{flex-shrink:0;width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.campaigns-page .campaigns-filters .filter-group-campaign-multi{flex:2 !important}.campaigns-page .campaigns-filters .campaign-dropdown{flex:1;min-width:0;position:relative}.campaigns-page .campaigns-filters .campaign-dropdown-trigger{width:100%;padding:10px 14px;padding-right:32px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;cursor:pointer;display:flex;align-items:center;transition:border-color .2s;position:relative;min-height:42px;box-sizing:border-box}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text.is-placeholder{color:#8899a6}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-arrow{position:absolute;right:12px;font-size:10px;color:#8899a6;transition:transform .2s}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-trigger{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-arrow{transform:rotate(180deg)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-menu{display:block}.campaigns-page .campaigns-filters .campaign-dropdown-menu{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:100;max-height:280px;overflow-y:auto;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:4px 0}.campaigns-page .campaigns-filters .campaign-dropdown-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:14px;color:#2d3748;margin:0;transition:background .15s}.campaigns-page .campaigns-filters .campaign-dropdown-item:hover{background:#f8fafc}.campaigns-page .campaigns-filters .campaign-dropdown-item.is-checked{background:#eef2ff}.campaigns-page .campaigns-filters .campaign-dropdown-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;flex-shrink:0;accent-color:#6690f4}.campaigns-page .campaigns-filters .campaign-dropdown-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-list-panel{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);margin-bottom:20px;overflow:hidden}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #e2e8f0;gap:12px}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left{display:flex;align-items:center;gap:8px;font-size:13px;color:#4e5e6a}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left input[type=checkbox]{width:16px;height:16px;cursor:pointer}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin:0}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left .campaigns-selected-count{margin-left:12px;color:#8899a6}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:hover:not(:disabled){background:#c00;color:#fff}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:disabled{opacity:.4;cursor:not-allowed}.campaigns-page .campaigns-list-panel .campaigns-list-items{display:flex;flex-wrap:wrap;gap:0;padding:8px 8px;max-height:220px;overflow-y:auto}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item{display:flex;align-items:center;gap:8px;padding:6px 12px;margin:2px;border-radius:6px;font-size:13px;color:#2d3748;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item:hover{background:#f0f4ff}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item input[type=checkbox]{width:15px;height:15px;cursor:pointer;flex-shrink:0}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item .campaigns-list-item-name{white-space:nowrap}.campaigns-page .campaigns-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:20px;min-height:350px;overflow:hidden}.campaigns-page .campaigns-chart-wrap #container{max-width:100%}.campaigns-page .campaigns-table-wrap .table{width:100%}.campaigns-page .delete-history-entry{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .delete-history-entry:hover{background:#c00;color:#fff}.products-page .products-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.products-page .products-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.products-page .products-header h2 i{color:#6690f4;margin-right:8px}.products-page .products-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:20px;margin-bottom:16px}.products-page .products-filters .filter-group{flex:1 1 220px;min-width:0}.products-page .products-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.products-page .products-filters .filter-group label i{margin-right:4px}.products-page .products-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.products-page .products-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.products-page .products-filters .filter-group select.form-control{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.products-page .products-filters .filter-group.filter-group-client,.products-page .products-filters .filter-group.filter-group-campaign,.products-page .products-filters .filter-group.filter-group-ad-group{flex:1 1 260px}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions{display:flex;gap:8px;align-items:center}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions .form-control{flex:1 1 auto;min-width:0}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group{min-width:38px;height:38px;border-radius:6px;margin:0;background:#dc3545;border:1px solid #dc3545;color:#fff;cursor:pointer}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:hover:not(:disabled){background:#bb2d3b;border-color:#bb2d3b;color:#fff}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:disabled{opacity:.45;cursor:default;background:#dc3545;border-color:#dc3545;color:#fff}.products-page .products-filters .filter-group.filter-group-roas{flex:0 0 200px}.products-page .products-filters .filter-group.filter-group-search{flex:1 1 200px}.products-page .products-filters .filter-group.filter-group-cl4{flex:0 0 160px}.products-page .products-filters .filter-group.filter-group-columns{flex:0 0 240px}.products-page .products-scope-alerts{margin-bottom:12px;border:1px solid #fecaca;background:#fef2f2;border-radius:8px;overflow:hidden}.products-page .products-scope-alerts summary{cursor:pointer;list-style:none;padding:10px 12px;font-size:13px;font-weight:600;color:#991b1b;display:flex;align-items:center;gap:8px}.products-page .products-scope-alerts summary::-webkit-details-marker{display:none}.products-page .products-scope-alerts .products-scope-alerts-list{border-top:1px solid #fecaca;background:#fff;max-height:260px;overflow:auto}.products-page .products-scope-alerts .products-scope-alert-item{padding:10px 12px;border-bottom:1px solid #f1f5f9}.products-page .products-scope-alerts .products-scope-alert-item:last-child{border-bottom:none}.products-page .products-scope-alerts .products-scope-alert-meta{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:11px;color:#64748b}.products-page .products-scope-alerts .products-scope-alert-type{display:inline-flex;align-items:center;padding:2px 6px;border-radius:999px;background:#eef2ff;color:#4338ca;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.products-page .products-scope-alerts .products-scope-alert-message{font-size:13px;color:#2d3748;line-height:1.45}.products-page .products-actions{margin-bottom:12px}.products-page .products-actions .btn-danger{padding:7px 14px;font-size:13px;border-radius:6px;border:none;cursor:pointer;transition:all .2s}.products-page .products-actions .btn-danger:disabled{opacity:.4;cursor:default}.products-page .products-table-wrap .table{width:100%}.products-page .products-table-wrap .table input.min_roas,.products-page .products-table-wrap .table input.form-control-sm,.products-page .products-table-wrap .table select.custom_label_4,.products-page .products-table-wrap .table select.form-control-sm{padding:3px 6px;font-size:12px;border:1px solid #e2e8f0;border-radius:4px;background:#fff}.products-page .delete-product{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.products-page .delete-product:hover{background:#c00;color:#fff}.products-page .edit-product-title{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#eef2ff;color:#6690f4;transition:all .2s}.products-page .edit-product-title:hover{background:#6690f4;color:#fff}.desc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.desc-header label{margin:0}.desc-tabs{display:flex;gap:2px;background:#eee;border-radius:6px;padding:2px}.desc-tab{border:none;background:rgba(0,0,0,0);padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;color:#666;transition:all .15s ease}.desc-tab i{margin-right:4px}.desc-tab.active{background:#fff;color:#333;box-shadow:0 1px 3px rgba(0,0,0,.12);font-weight:500}.desc-tab:hover:not(.active){color:#333}.desc-wrap{flex:1;min-width:0}.desc-preview ul,.desc-preview ol{margin:6px 0;padding-left:20px}.desc-preview li{margin-bottom:3px}.desc-preview b,.desc-preview strong{font-weight:600}.input-with-ai{display:flex;gap:8px;align-items:flex-start}.input-with-ai .form-control{flex:1}.btn-ai-suggest{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:8px;border:1px solid #c084fc;background:linear-gradient(135deg, #F3E8FF, #EDE9FE);color:#7c3aed;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;min-height:38px}.btn-ai-suggest i{font-size:13px}.btn-ai-suggest:hover{background:linear-gradient(135deg, #7C3AED, #6D28D9);color:#fff;border-color:#6d28d9}.btn-ai-suggest:disabled{opacity:.7;cursor:wait}.btn-ai-suggest.btn-ai-claude{border-color:#d97706;background:linear-gradient(135deg, #FEF3C7, #FDE68A);color:#92400e}.btn-ai-suggest.btn-ai-claude:hover{background:linear-gradient(135deg, #D97706, #B45309);color:#fff;border-color:#b45309}.btn-ai-suggest.btn-ai-gemini{border-color:#4285f4;background:linear-gradient(135deg, #E8F0FE, #D2E3FC);color:#1a73e8}.btn-ai-suggest.btn-ai-gemini:hover{background:linear-gradient(135deg, #4285F4, #1A73E8);color:#fff;border-color:#1a73e8}.form_container{background:#fff;padding:25px;max-width:1300px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.form_container.full{max-width:100%}.form_container .form_group{margin-bottom:12px;display:flex}.form_container .form_group>.label{width:300px;display:inline-flex;align-items:flex-start;justify-content:right;padding-right:12px}.form_container .form_group .input{width:calc(100% - 300px)}.default_popup{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.45);display:none;z-index:2000}.default_popup .popup_content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);background:#fff;padding:25px;border-radius:10px;max-width:1140px;width:95%;box-shadow:0 20px 60px rgba(0,0,0,.15)}.default_popup .popup_content .popup_header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.default_popup .popup_content .popup_header .title{font-size:18px;font-weight:600}.default_popup .popup_content .close{cursor:pointer;color:#a0aec0;font-size:18px;padding:4px}.default_popup .popup_content .close:hover{color:#c00}.dt-layout-table{margin-bottom:20px}.pagination button{border:1px solid #e2e8f0;background:#fff;display:inline-flex;height:32px;width:32px;align-items:center;justify-content:center;margin:0 2px;border-radius:4px;transition:all .2s;cursor:pointer}.pagination button:hover{background:#f4f6f9;border-color:#6690f4}table#products a{color:inherit;text-decoration:none}table#products .table-product-title{display:flex;justify-content:space-between}table#products .edit-product-title{display:flex;height:25px;align-items:center;justify-content:center;width:25px;cursor:pointer;background:#fff;border:1px solid #cbd5e0;color:#cbd5e0;border-radius:4px}table#products .edit-product-title:hover{background:#cbd5e0;color:#fff}table#products a.custom_name{color:#57b951 !important}.product-history-page .product-history-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.product-history-page .product-history-meta span{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;color:#4e5e6a;background:#eef2ff;border:1px solid #d9e2ff}.product-history-page .product-history-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:16px}.product-history-page .chart-with-form{display:flex;gap:20px;align-items:flex-start}.product-history-page .chart-area{flex:1 1 auto;min-width:0}.product-history-page .product-history-chart{min-height:360px}.product-history-page .comment-form{width:340px;flex:0 0 340px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:14px}.product-history-page .comment-form .form-group{margin-bottom:12px}.product-history-page .comment-form label{display:block;font-weight:600;margin-bottom:6px;font-size:13px;color:#52606d}.product-history-page .comment-form input[type=date],.product-history-page .comment-form textarea{width:100%;border:1px solid #e2e8f0;border-radius:6px;padding:8px 12px;font-size:14px;font-family:"Roboto",sans-serif;background:#fff}.product-history-page .comment-form input[type=date]:focus,.product-history-page .comment-form textarea:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.product-history-page .comment-form textarea{min-height:110px;resize:vertical}.product-history-page .comment-form .btn{width:100%;justify-content:center;padding:10px 16px}.product-history-page .comment-form .btn[disabled]{opacity:.6;cursor:not-allowed}.product-history-page .products-table-wrap{overflow-x:auto}.product-history-page .products-table-wrap .table{min-width:980px}.product-history-page .products-table-wrap .comment-cell{display:flex;align-items:center;justify-content:space-between;gap:10px}.product-history-page .products-table-wrap .comment-text{word-break:break-word}.product-history-page .products-table-wrap .delete-comment{color:#c00;text-decoration:none;font-weight:600;white-space:nowrap}.product-history-page .products-table-wrap .delete-comment:hover{text-decoration:underline}.product-history-page .products-table-wrap .dt-paging .pagination .page-item{list-style:none}.cron-status-overview{display:flex;flex-wrap:wrap;gap:10px 20px;margin-bottom:20px;color:#4e5e6a;font-size:13px}.cron-progress-list{margin-bottom:20px}.cron-schedule-list{margin-bottom:20px}.cron-schedule-item{border:1px solid #dfe7f0;background:#f4f8fd;border-radius:8px;padding:9px 12px;margin-bottom:8px}.cron-schedule-item:last-child{margin-bottom:0}.cron-schedule-item strong{display:block;color:#2d3748;font-size:13px;font-weight:700;margin-bottom:2px}.cron-schedule-item small{display:block;color:#678;font-size:12px;line-height:1.35}.cron-progress-item{margin-bottom:14px}.cron-progress-item:last-child{margin-bottom:0}.cron-progress-item .cron-progress-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;font-size:13px}.cron-progress-item .cron-progress-head strong{color:#2d3748;font-weight:600}.cron-progress-item .cron-progress-head span{color:#6b7a89;font-size:12px;font-weight:600;white-space:nowrap}.cron-progress-item small{display:block;margin-top:5px;color:#789;font-size:12px}.cron-progress-bar{width:100%;height:10px;border-radius:999px;background:#e9eef5;overflow:hidden}.cron-progress-bar>span{display:block;height:100%;background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.cron-url-list{margin-bottom:20px}.cron-url-item{border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;padding:10px 12px;margin-bottom:10px}.cron-url-item:last-child{margin-bottom:0}.cron-url-item .cron-url-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.cron-url-item .cron-url-top strong{color:#2d3748;font-size:13px;font-weight:600}.cron-url-item .cron-url-top small{color:#7a8794;font-size:11px;white-space:nowrap}.cron-url-item code{display:block;background:#eef2f7;border:1px solid #dde4ed;border-radius:6px;padding:6px 8px;color:#2e3b49;font-size:12px;overflow-x:auto}.cron-url-item .cron-url-plan{display:block;color:#6c7b8a;font-size:11px;margin-bottom:6px}@media(max-width: 1200px){.product-history-page .chart-with-form{flex-direction:column}.product-history-page .comment-form{width:100%;flex:1 1 auto}}.jconfirm-box .form-group .select2-container,.adspro-dialog-box .form-group .select2-container{width:100% !important;margin-top:8px}.jconfirm-box .select2-container--default .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;min-height:42px;display:flex;align-items:center;padding:4px 12px;box-shadow:none;transition:border-color .2s,box-shadow .2s;font-size:14px}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;line-height:1.4;color:#495057}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder{color:#cbd5e0}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;right:8px}.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,.jconfirm-box .select2-container--default .select2-selection--single:hover,.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single:hover{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:0}.jconfirm-box .select2-container .select2-dropdown,.adspro-dialog-box .select2-container .select2-dropdown{border-color:#e2e8f0;border-radius:0 0 6px 6px;font-size:14px}.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field{padding:6px 10px;border-radius:4px;border:1px solid #e2e8f0;font-size:14px}.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#6690f4;color:#fff}@media(max-width: 992px){.sidebar{transform:translateX(-100%)}.sidebar.mobile-open{transform:translateX(0)}.main-wrapper{margin-left:0 !important}}.campaign-terms-wrap{display:flex;flex-direction:column;gap:20px;margin-top:20px}.campaign-terms-page{max-width:100%;overflow:hidden}.campaign-terms-page .campaigns-filters{flex-wrap:wrap}.campaign-terms-page .campaigns-filters .filter-group{min-width:220px}.campaign-terms-page .campaigns-filters .filter-group.terms-columns-group{min-width:280px}.campaign-terms-page .terms-card-toggle{margin-left:auto;width:28px;height:28px;border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#475569;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-card-toggle:hover{background:#f8fafc;border-color:#cbd5e1}.campaign-terms-page .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap{display:none}.campaign-terms-page .terms-search-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-search-toolbar label{font-size:12px;font-weight:600;color:#475569;display:inline-flex;align-items:center;gap:6px;margin:0;white-space:nowrap}.campaign-terms-page .terms-search-toolbar .terms-search-toolbar-label{min-width:86px}.campaign-terms-page .terms-search-toolbar #terms_min_clicks_all,.campaign-terms-page .terms-search-toolbar #terms_max_clicks_all{width:160px;height:32px}.campaign-terms-page .terms-search-toolbar #terms_min_conversions_all,.campaign-terms-page .terms-search-toolbar #terms_max_conversions_all{width:130px;max-width:130px}.campaign-terms-page .terms-search-selected-label{margin:0;font-size:12px;color:#475569;font-weight:600;white-space:nowrap}.campaign-terms-page .terms-ai-analyze-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-ai-analyze-btn:hover{background:#dbeafe;border-color:#93c5fd}.campaign-terms-page .terms-ai-analyze-btn:disabled{opacity:.6;cursor:wait}.campaign-terms-page .terms-table-search-input{width:200px;min-width:120px;max-width:200px;height:32px;font-size:12px;flex:0 1 200px}.campaign-terms-page .terms-negative-toolbar,.campaign-terms-page .terms-keywords-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #fecaca;background:#fef2f2;color:#dc2626;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-negative-bulk-btn:hover{background:#fee2e2;border-color:#fca5a5}.campaign-terms-page .terms-negative-bulk-btn:disabled{opacity:.5;cursor:not-allowed}.campaign-terms-page table.campaigns-extra-table>thead>tr>th{position:sticky;top:0;z-index:2;background-color:#111827 !important;color:#e5e7eb !important;border-bottom:1px solid #0b1220 !important;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;white-space:nowrap}.campaign-terms-page #terms_search_table thead th .dt-column-order,.campaign-terms-page #terms_negative_table thead th .dt-column-order{display:none !important}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.campaign-terms-page #terms_search_table thead th .dt-column-title,.campaign-terms-page #terms_negative_table thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc::after{content:"↕";position:absolute;right:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:999px;font-size:12px;font-weight:700;line-height:16px;text-align:center;color:#e5e7eb;background:#374151}.campaign-terms-page #terms_search_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=ascending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=ascending]::after{content:"▲";color:#fff;background:#2563eb}.campaign-terms-page #terms_search_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=descending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=descending]::after{content:"▼";color:#fff;background:#2563eb}.campaign-terms-page #terms_negative_select_all,.campaign-terms-page .terms-negative-select-row,.campaign-terms-page #terms_search_select_all,.campaign-terms-page .terms-search-select-row{width:14px;height:14px;cursor:pointer}.campaign-terms-page .dt-layout-row:first-child{display:none}.campaign-terms-page .dt-layout-row{padding:10px 12px;margin:0 !important;border-top:1px solid #f1f5f9}.campaign-terms-page .dt-info{font-size:12px;color:#64748b}.campaign-terms-page .dt-paging .pagination{margin:0;padding:0;list-style:none !important;display:flex;align-items:center;gap:6px}.campaign-terms-page .dt-paging .pagination .page-item{list-style:none !important}.campaign-terms-page .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:-moz-fit-content;width:fit-content;height:32px;padding:0 12px;border-radius:6px;font-size:12px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;text-decoration:none;line-height:1;white-space:nowrap}.campaign-terms-page .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.previous .page-link,.campaign-terms-page .dt-paging .pagination .page-item.next .page-link{min-width:72px}.campaign-terms-page .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.terms-columns-box{display:flex;flex-direction:column;gap:6px}.terms-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.terms-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.terms-columns-control summary::-webkit-details-marker{display:none}.terms-columns-control summary::after{content:"▼";float:right;font-size:10px;color:#64748b;margin-top:2px}.terms-columns-control[open] summary::after{content:"▲"}.terms-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:180px;overflow-y:auto}.terms-columns-list .terms-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.terms-columns-list .terms-col-item:last-child{margin-bottom:0}.terms-columns-list .terms-col-item input[type=checkbox]{margin:0}.campaigns-extra-card{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.campaigns-extra-card-title{padding:14px 16px;border-bottom:1px solid #e2e8f0;font-size:13px;font-weight:700;color:#334155;display:flex;align-items:center;gap:8px}.campaigns-extra-card-title .terms-card-title-label{display:inline-flex;align-items:center;gap:8px}.campaigns-extra-table-wrap{overflow:auto}.campaigns-extra-table{margin:0;width:100%;table-layout:fixed}.campaigns-extra-table tbody td{padding:9px 12px;border-bottom:1px solid #f1f5f9;font-size:13px;color:#334155;vertical-align:middle;white-space:nowrap}.campaigns-extra-table td.num-cell{text-align:right;white-space:nowrap}.campaigns-extra-table td.text-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table th.terms-negative-select-cell,.campaigns-extra-table td.terms-negative-select-cell,.campaigns-extra-table th.terms-search-select-cell,.campaigns-extra-table td.terms-search-select-cell{text-align:center}.campaigns-extra-table th.phrase-nowrap,.campaigns-extra-table td.phrase-nowrap{white-space:nowrap !important;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table .terms-add-negative-btn,.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s}.campaigns-extra-table .terms-add-negative-btn{border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-add-negative-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover,.campaigns-extra-table .terms-delete-keyword-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.campaigns-extra-table .terms-toggle-keyword-status-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #fde68a;background:#fffbeb;color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn:hover{background:#d97706;color:#fff;border-color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success{border-color:#a7f3d0;background:#ecfdf5;color:#059669}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success:hover{background:#059669;color:#fff;border-color:#059669}.campaigns-extra-table .terms-change-match-type-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-change-match-type-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table tbody tr:hover{background:#f8fafc}.campaigns-extra-table tbody tr.term-is-negative td{color:#dc2626}.campaigns-extra-table tbody tr.term-is-negative:hover{background:#fef2f2}.campaigns-empty-row{text-align:center;color:#94a3b8 !important;font-style:italic}.terms-ai-modal-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.terms-ai-modal-toolbar label{font-size:12px;font-weight:600;color:#334155;margin:0}.terms-ai-modal-toolbar .form-control{width:200px;height:32px}.terms-ai-summary{font-size:12px;color:#64748b;margin-bottom:10px}.terms-ai-results-wrap{border:1px solid #e2e8f0;border-radius:8px;max-height:420px;overflow:auto}.terms-ai-results-table{width:100%;border-collapse:collapse;font-size:12px}.terms-ai-results-table th,.terms-ai-results-table td{border-bottom:1px solid #eef2f7;padding:8px;vertical-align:middle}.terms-ai-results-table th{position:sticky;top:0;background:#f8fafc;color:#334155;font-weight:700}.terms-ai-results-table td.term-col{min-width:260px;max-width:380px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.terms-ai-results-table td.reason-col{min-width:320px}.terms-ai-action-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.terms-ai-action-badge.action-exclude{background:#fee2e2;color:#b91c1c}.terms-ai-action-badge.action-keep{background:#dcfce7;color:#166534}.products-page .products-filters .filter-group.filter-group-columns{min-width:240px}.products-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.products-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.products-columns-control summary::-webkit-details-marker{display:none}.products-columns-control summary::after{content:"▼";float:right;font-size:10px;color:#64748b;margin-top:2px}.products-columns-control[open] summary::after{content:"▲"}.products-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:220px;overflow-y:auto}.products-columns-list .products-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.products-columns-list .products-col-item:last-child{margin-bottom:0}.products-columns-list .products-col-item input[type=checkbox]{margin:0}#products th:last-child,#products td:last-child{white-space:nowrap}#products tr.product-row-unavailable{opacity:.45}#products tr.product-row-unavailable td{background-color:#f0f0f0 !important}#products .product-warning-icon{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:#dc2626;font-size:16px}#products .product-warning-icon:hover{color:#b91c1c}#products .products-row-actions{display:inline-flex;align-items:center;gap:4px}#products .products-row-actions .btn{width:38px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:4px !important}#products .products-row-actions .btn i{line-height:1}.logs-page .logs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.logs-page .logs-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.logs-page .logs-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:16px}.logs-page .logs-filters .filter-group{flex:1 1 160px;min-width:0;max-width:220px}.logs-page .logs-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.logs-page .logs-filters .filter-group .form-control{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.logs-page .logs-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.logs-page .logs-filters .filter-group select.form-control{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.logs-page .logs-filters .filter-group.filter-group-buttons{flex:0 0 auto;display:flex;gap:6px;max-width:none}.logs-page .logs-table-wrap .table{width:100%}.logs-page .badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.logs-page .badge-success{background:#d1fae5;color:#065f46}.logs-page .badge-danger{background:#fee2e2;color:#991b1b}.logs-page .badge-warning{background:#fef3c7;color:#92400e}.js-title-alt-apply{color:#000;justify-content:flex-start}/*# sourceMappingURL=style.css.map */ \ No newline at end of file +*{box-sizing:border-box}body{font-family:"Roboto",sans-serif;margin:0;padding:0;font-size:14px;color:#4e5e6a;background:#f4f6f9;max-width:100vw;overflow-x:hidden}.hide{display:none}small{font-size:.75em}.text-right{text-align:right}.text-bold{font-weight:700 !important}.nowrap{white-space:nowrap}body.unlogged{background:#f4f6f9;margin:0;padding:0}.login-container{display:flex;min-height:100vh}.login-brand{flex:0 0 45%;background:linear-gradient(135deg, #1E2A3A 0%, #2C3E57 50%, #6690F4 100%);display:flex;align-items:center;justify-content:center;padding:60px;position:relative;overflow:hidden}.login-brand::before{content:"";position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle, rgba(102, 144, 244, 0.15) 0%, transparent 70%);border-radius:50%}.login-brand .brand-content{position:relative;z-index:1;color:#fff;max-width:400px}.login-brand .brand-logo{font-size:48px;font-weight:300;margin-bottom:20px;letter-spacing:-1px}.login-brand .brand-logo strong{font-weight:700}.login-brand .brand-tagline{font-size:18px;opacity:.85;line-height:1.6;margin-bottom:50px}.login-brand .brand-features .feature{display:flex;align-items:center;gap:15px;margin-bottom:20px;opacity:.8}.login-brand .brand-features .feature i{font-size:20px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:hsla(0,0%,100%,.1);border-radius:10px}.login-brand .brand-features .feature span{font-size:15px}.login-form-wrapper{flex:1;display:flex;align-items:center;justify-content:center;padding:60px;background:#fff}.login-box{width:100%;max-width:420px}.login-box .login-header{margin-bottom:35px}.login-box .login-header h1{font-size:28px;font-weight:700;color:#2d3748;margin:0 0 8px}.login-box .login-header p{color:#718096;font-size:15px;margin:0}.login-box .form-group{margin-bottom:20px}.login-box .form-group label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.login-box .input-with-icon{position:relative}.login-box .input-with-icon i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px}.login-box .input-with-icon .form-control{padding-left:42px}.login-box .form-control{width:100%;height:46px;border:2px solid #e2e8f0;border-radius:8px;padding:0 14px;font-size:14px;font-family:"Roboto",sans-serif;color:#2d3748;transition:border-color .3s,box-shadow .3s}.login-box .form-control::-moz-placeholder{color:#cbd5e0}.login-box .form-control::placeholder{color:#cbd5e0}.login-box .form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.15);outline:none}.login-box .form-error{color:#c00;font-size:12px;margin-top:4px}.login-box .checkbox-group .checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#718096;font-weight:400}.login-box .checkbox-group .checkbox-label input[type=checkbox]{width:16px;height:16px;accent-color:#6690f4}.login-box .btn-login{width:100%;height:48px;font-size:15px;font-weight:600;border-radius:8px;display:flex;align-items:center;justify-content:center;gap:8px}.login-box .btn-login.disabled{opacity:.7;pointer-events:none}.login-box .alert{display:none;padding:12px 16px;border-radius:8px;font-size:13px;margin-bottom:20px}.login-box .alert.alert-danger{background:#fff5f5;color:#c00;border:1px solid #fed7d7}.login-box .alert.alert-success{background:#f0fff4;color:#276749;border:1px solid #c6f6d5}@media(max-width: 768px){.login-brand{display:none}.login-form-wrapper{padding:30px 20px}}body.logged{display:flex;min-height:100vh;background:#f4f6f9}.sidebar{width:260px;min-height:100vh;background:#1e2a3a;position:fixed;top:0;left:0;z-index:1000;display:flex;flex-direction:column;transition:width .3s ease;overflow:hidden}.sidebar.collapsed{width:70px}.sidebar.collapsed .sidebar-header{padding:16px 0;justify-content:center}.sidebar.collapsed .sidebar-header .sidebar-logo{display:none}.sidebar.collapsed .sidebar-header .sidebar-toggle i{transform:rotate(180deg)}.sidebar.collapsed .sidebar-nav ul li a{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li a span{display:none}.sidebar.collapsed .sidebar-nav ul li a i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label span{display:none}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-footer .sidebar-user{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-user .user-info{display:none}.sidebar.collapsed .sidebar-footer .sidebar-logout{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-logout span{display:none}.sidebar.collapsed .nav-divider{margin:8px 15px}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 16px;border-bottom:1px solid hsla(0,0%,100%,.08)}.sidebar-header .sidebar-logo a{color:#fff;text-decoration:none;font-size:24px;font-weight:300;letter-spacing:-0.5px}.sidebar-header .sidebar-logo a strong{font-weight:700}.sidebar-header .sidebar-toggle{background:none;border:none;color:#a8b7c7;cursor:pointer;padding:6px;border-radius:6px;transition:all .3s}.sidebar-header .sidebar-toggle:hover{background:hsla(0,0%,100%,.08);color:#fff}.sidebar-header .sidebar-toggle i{transition:transform .3s}.sidebar-nav{flex:1;padding:12px 0;overflow-y:auto}.sidebar-nav ul{list-style:none;margin:0;padding:0}.sidebar-nav ul li.nav-group{margin-bottom:4px}.sidebar-nav ul li.nav-group .nav-group-label{display:flex;align-items:center;padding:11px 20px;color:#d5deea;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li.nav-group .nav-group-label i{width:20px;text-align:center;margin-right:12px;font-size:14px;color:#b6c4d3}.sidebar-nav ul li.nav-group .nav-submenu{margin:0;padding:0;list-style:none}.sidebar-nav ul li.nav-group .nav-submenu li a{padding-left:44px}.sidebar-nav ul li.nav-group.active>.nav-group-label{color:#fff;background:rgba(102,144,244,.12);border-left-color:#6690f4}.sidebar-nav ul li.nav-group.active>.nav-group-label i{color:#6690f4}.sidebar-nav ul li.nav-divider{height:1px;background:hsla(0,0%,100%,.08);margin:8px 20px}.sidebar-nav ul li a{display:flex;align-items:center;padding:11px 20px;color:#a8b7c7;text-decoration:none;font-size:14px;transition:all .2s;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li a i{width:20px;text-align:center;margin-right:12px;font-size:15px}.sidebar-nav ul li a:hover{background:#263548;color:#fff}.sidebar-nav ul li.active>a{background:rgba(102,144,244,.15);color:#fff;border-left-color:#6690f4}.sidebar-nav ul li.active>a i{color:#6690f4}.badge-alerts-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:8px;border-radius:50%;font-size:11px;font-weight:600;line-height:1;background:#fff;color:#6690f4}.sidebar-footer{padding:16px 20px;border-top:1px solid hsla(0,0%,100%,.08)}.sidebar-footer .sidebar-user{display:flex;align-items:center;gap:10px;margin-bottom:12px}.sidebar-footer .sidebar-user .user-avatar{width:34px;height:34px;border-radius:50%;background:rgba(102,144,244,.2);display:flex;align-items:center;justify-content:center;color:#6690f4;font-size:14px;flex-shrink:0}.sidebar-footer .sidebar-user .user-info{overflow:hidden}.sidebar-footer .sidebar-user .user-info .user-email{color:#a8b7c7;font-size:12px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-footer .sidebar-logout{display:flex;align-items:center;gap:8px;color:#e53e3e;text-decoration:none;font-size:13px;padding:8px 10px;border-radius:6px;transition:all .2s}.sidebar-footer .sidebar-logout i{font-size:14px}.sidebar-footer .sidebar-logout:hover{background:rgba(229,62,62,.1)}.main-wrapper{margin-left:260px;flex:1;min-height:100vh;transition:margin-left .3s ease;display:flex;flex-direction:column}.main-wrapper.expanded{margin-left:70px}.topbar{height:56px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;padding:0 25px;position:sticky;top:0;z-index:500}.topbar .topbar-toggle{background:none;border:none;color:#4e5e6a;cursor:pointer;padding:8px 10px;border-radius:6px;font-size:16px;margin-right:15px;transition:all .2s}.topbar .topbar-toggle:hover{background:#f4f6f9}.topbar .topbar-breadcrumb{font-size:16px;font-weight:600;color:#2d3748}.content{flex:1;padding:25px}.app-alert{background:#ebf8ff;border:1px solid #bee3f8;color:#2b6cb0;padding:12px 16px;border-radius:8px;margin-bottom:20px;font-size:14px}.btn{padding:10px 20px;transition:all .2s ease;color:#fff;border:0;border-radius:6px;cursor:pointer;display:inline-flex;text-decoration:none;gap:6px;justify-content:center;align-items:center;font-size:14px;font-family:"Roboto",sans-serif;font-weight:500}.btn.btn_small,.btn.btn-xs,.btn.btn-sm{padding:5px 10px;font-size:12px}.btn.btn_small i,.btn.btn-xs i,.btn.btn-sm i{font-size:11px}.btn.btn-success{background:#57b951}.btn.btn-success:hover{background:#4a9c3b}.btn.btn-primary{background:#6690f4}.btn.btn-primary:hover{background:#3164db}.btn.btn-danger{background:#c00}.btn.btn-danger:hover{background:#b30000}.btn.disabled{opacity:.6;pointer-events:none}.form-control{border:1px solid #e2e8f0;border-radius:6px;height:38px;width:100%;padding:6px 12px;font-family:"Roboto",sans-serif;font-size:14px;color:#2d3748;transition:border-color .2s,box-shadow .2s}.form-control option{padding:5px}.form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:none}input[type=checkbox]{border:1px solid #e2e8f0}table{border-collapse:collapse;font-size:13px}.table{width:100%}.table th,.table td{border:1px solid #e2e8f0;padding:8px 10px}.table th{background:#f7fafc;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#718096}.table td.center{text-align:center}.table td.left{text-align:left}.table.table-sm td{padding:5px !important}.table input.form-control{font-size:13px;height:32px}.clients-table-wrap,.campaigns-table-wrap,.products-table-wrap,.logs-table-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;max-width:100%;-ms-overflow-style:none;scrollbar-width:none}.clients-table-wrap::-webkit-scrollbar,.campaigns-table-wrap::-webkit-scrollbar,.products-table-wrap::-webkit-scrollbar,.logs-table-wrap::-webkit-scrollbar{display:none}.clients-table-wrap .table,.campaigns-table-wrap .table,.products-table-wrap .table,.logs-table-wrap .table{margin:0;width:100% !important}.clients-table-wrap .table thead th,.campaigns-table-wrap .table thead th,.products-table-wrap .table thead th,.logs-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 16px;white-space:nowrap}.clients-table-wrap .table tbody td,.campaigns-table-wrap .table tbody td,.products-table-wrap .table tbody td,.logs-table-wrap .table tbody td{padding:10px 16px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-table-wrap .table tbody tr:hover td,.campaigns-table-wrap .table tbody tr:hover td,.products-table-wrap .table tbody tr:hover td,.logs-table-wrap .table tbody tr:hover td{background:#f8fafc}.clients-table-wrap .dt-layout-row,.campaigns-table-wrap .dt-layout-row,.products-table-wrap .dt-layout-row,.logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.clients-table-wrap .dt-layout-row:first-child,.campaigns-table-wrap .dt-layout-row:first-child,.products-table-wrap .dt-layout-row:first-child,.logs-table-wrap .dt-layout-row:first-child{display:none}.clients-table-wrap .dt-info,.campaigns-table-wrap .dt-info,.products-table-wrap .dt-info,.logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.clients-table-wrap .dt-paging .pagination,.campaigns-table-wrap .dt-paging .pagination,.products-table-wrap .dt-paging .pagination,.logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.clients-table-wrap .dt-paging .pagination .page-item .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link,.products-table-wrap .dt-paging .pagination .page-item .page-link,.logs-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:-moz-fit-content;width:fit-content;height:36px;padding:0 14px;border-radius:8px;font-size:13px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;cursor:pointer;transition:all .2s;text-decoration:none;line-height:1;white-space:nowrap}.clients-table-wrap .dt-paging .pagination .page-item .page-link:hover,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover,.products-table-wrap .dt-paging .pagination .page-item .page-link:hover,.logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.clients-table-wrap .dt-paging .pagination .page-item.active .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link,.products-table-wrap .dt-paging .pagination .page-item.active .page-link,.logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.clients-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.products-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.clients-table-wrap .dt-processing,.campaigns-table-wrap .dt-processing,.products-table-wrap .dt-processing,.logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.card{background:#fff;padding:20px;border-radius:8px;color:#2d3748;font-size:14px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.card.mb25{margin-bottom:20px}.card .card-header{font-weight:600;font-size:15px}.card .card-body{padding-top:12px}.card .card-body table th,.card .card-body table td{font-size:13px}.card .card-body table th.bold,.card .card-body table td.bold{font-weight:600}.card .card-body table th.text-right,.card .card-body table td.text-right{text-align:right}.card .card-body table th.text-center,.card .card-body table td.text-center{text-align:center}.action_menu{display:flex;margin-bottom:20px;gap:12px}.action_menu .btn{padding:8px 16px}.action_menu .btn.btn_add{background:#57b951}.action_menu .btn.btn_add:hover{background:#4a9c3b}.action_menu .btn.btn_cancel{background:#c00}.action_menu .btn.btn_cancel:hover{background:#b30000}.settings-tabs{display:flex;gap:8px;margin-bottom:18px}.settings-tabs .settings-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;text-decoration:none;color:#6b7a89;background:#e9eef5;border:1px solid #d8e0ea;font-size:13px;font-weight:600;transition:all .2s}.settings-tabs .settings-tab:hover{color:#2d3748;background:#dde6f2}.settings-tabs .settings-tab.active{color:#fff;background:#6690f4;border-color:#6690f4}.settings-card{background:#fff;border-radius:10px;padding:28px;box-shadow:0 1px 4px rgba(0,0,0,.06)}.settings-card .settings-card-header{display:flex;align-items:center;gap:14px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.settings-card .settings-card-header .settings-card-icon{width:44px;height:44px;border-radius:10px;background:rgb(225.706097561,233.7475609756,252.893902439);color:#6690f4;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.settings-card .settings-card-header h3{margin:0;font-size:17px;font-weight:600;color:#2d3748}.settings-card .settings-card-header small{color:#8899a6;font-size:13px}.settings-card .settings-field{margin-bottom:18px}.settings-card .settings-field label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.settings-card .settings-input-wrap{position:relative}.settings-card .settings-input-wrap .settings-input-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px;pointer-events:none}.settings-card .settings-input-wrap .form-control{padding-left:38px}.settings-card .settings-input-wrap .settings-toggle-pw{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:none;border:none;color:#a0aec0;cursor:pointer;padding:6px 10px;font-size:14px;transition:color .2s}.settings-card .settings-input-wrap .settings-toggle-pw:hover{color:#6690f4}.settings-card .settings-field .settings-toggle-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:14px;font-weight:500;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-bottom:0;width:100%}.settings-card .settings-field .settings-toggle-label .settings-toggle-text{flex:1 1 auto;min-width:0;line-height:1.35}.settings-card .settings-toggle-checkbox{display:none}.settings-card .settings-toggle-checkbox+.settings-toggle-switch{display:inline-block;position:relative;width:44px;height:24px;background:#ccc;border-radius:12px;transition:background .2s;flex-shrink:0}.settings-card .settings-toggle-checkbox+.settings-toggle-switch::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch{background:#22c55e}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch::after{transform:translateX(20px)}.settings-card .settings-fields-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}@media(max-width: 768px){.settings-card .settings-fields-grid{grid-template-columns:1fr}}.settings-card .settings-alert-error{display:flex;align-items:center;gap:10px;background:#fff5f5;color:#c00;border:1px solid #fed7d7;border-radius:8px;padding:12px 16px;margin-bottom:20px;font-size:13px}.settings-card .settings-alert-error i{font-size:16px;flex-shrink:0}.feeds-page .feeds-header{margin-bottom:20px}.feeds-page .feeds-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.feeds-page .feeds-header h2 i{color:#6690f4;margin-right:8px}.feeds-page .empty-state-box{text-align:center;padding:50px 20px;color:#a0aec0}.feeds-page .empty-state-box i{font-size:40px;margin-bottom:12px;display:block}.feeds-page .empty-state-box p{margin:0;font-size:15px}.feeds-page .feed-link{color:#6690f4;text-decoration:none;font-weight:500;font-size:13px}.feeds-page .feed-link:hover{text-decoration:underline}.feeds-page .feed-link i{font-size:11px;margin-right:4px}.feeds-page .btn-icon-copy{background:none;border:none;color:#8899a6;cursor:pointer;padding:2px 6px;font-size:13px;margin-left:6px}.feeds-page .btn-icon-copy:hover{color:#6690f4}.clients-page .clients-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.clients-page .clients-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.clients-page .clients-header h2 i{color:#6690f4;margin-right:8px}.clients-page .clients-table-wrap .table .client-id{color:#8899a6;font-size:13px;font-weight:600}.clients-page .clients-table-wrap .table .client-name{font-weight:600;color:#2d3748}.clients-page .badge-id{display:inline-block;background:#eef2ff;color:#6690f4;font-size:13px;font-weight:600;padding:4px 10px;border-radius:6px;font-family:monospace}.clients-page .actions-cell{text-align:center;white-space:nowrap}.clients-page .btn-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s;margin:0 2px}.clients-page .btn-icon.btn-icon-edit{background:#eef2ff;color:#6690f4}.clients-page .btn-icon.btn-icon-edit:hover{background:#6690f4;color:#fff}.clients-page .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.clients-page .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.clients-page .btn-icon.btn-icon-sync{background:#f0fdf4;color:#16a34a}.clients-page .btn-icon.btn-icon-sync:hover{background:#16a34a;color:#fff}.clients-page .btn-icon.btn-icon-sync:disabled{opacity:.7;cursor:wait}.clients-page .btn-icon.btn-icon-sync.is-queued{background:#fef3c7;color:#d97706}.clients-page .client-sync-bars{display:flex;flex-direction:column;gap:4px}.clients-page .client-sync-row{display:flex;align-items:center;gap:4px}.clients-page .client-sync-label{font-size:11px;font-weight:600;color:#8899a6;width:18px;flex-shrink:0}.clients-page .client-sync-track{flex:1;height:6px;border-radius:999px;background:#e9eef5;overflow:hidden}.clients-page .client-sync-fill{height:100%;border-radius:999px;background:#cbd5e0;transition:width .4s ease}.clients-page .client-sync-fill.is-active{background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.clients-page .client-sync-fill.is-done{background:#57b951}.clients-page .client-sync-pct{font-size:11px;font-weight:600;color:#8899a6;width:32px;text-align:right;flex-shrink:0}.clients-page .sync-dropdown{position:relative;display:inline-block}.clients-page .sync-dropdown .sync-dropdown-menu{display:none;position:absolute;right:0;top:100%;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.12);padding:4px 0;min-width:200px;white-space:nowrap}.clients-page .sync-dropdown .sync-dropdown-menu button{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;border:none;background:none;font-size:13px;color:#2d3748;cursor:pointer;text-align:left}.clients-page .sync-dropdown .sync-dropdown-menu button:hover{background:#f7fafc}.clients-page .sync-dropdown .sync-dropdown-menu button:disabled{opacity:.4;cursor:default}.clients-page .sync-dropdown .sync-dropdown-menu button i{width:16px;text-align:center;color:#8899a6}.clients-page .sync-dropdown.is-open .sync-dropdown-menu{display:block}.clients-page .empty-state{text-align:center;padding:50px 20px !important;color:#a0aec0}.clients-page .empty-state i{font-size:40px;margin-bottom:12px;display:block}.clients-page .empty-state p{margin:0;font-size:15px}.btn-secondary{background:#e2e8f0;color:#2d3748;border:none;padding:8px 18px;border-radius:6px;font-size:14px;cursor:pointer;transition:background .2s}.btn-secondary:hover{background:#cbd5e0}.campaigns-page{max-width:100%;overflow-x:hidden;width:100%}.campaigns-page .campaigns-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.campaigns-page .campaigns-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.campaigns-page .campaigns-header h2 i{color:#6690f4;margin-right:8px}.campaigns-page .campaigns-filters{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:20px}.campaigns-page .campaigns-filters .filter-group{flex:1;min-width:0}.campaigns-page .campaigns-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.campaigns-page .campaigns-filters .filter-group label i{margin-right:4px}.campaigns-page .campaigns-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.campaigns-page .campaigns-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .filter-group .filter-with-action{display:flex;align-items:center;gap:8px}.campaigns-page .campaigns-filters .filter-group .filter-with-action .form-control{flex:1}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon{flex-shrink:0;width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.campaigns-page .campaigns-filters .filter-group-campaign-multi{flex:2 !important}.campaigns-page .campaigns-filters .campaign-dropdown{flex:1;min-width:0;position:relative}.campaigns-page .campaigns-filters .campaign-dropdown-trigger{width:100%;padding:10px 14px;padding-right:32px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;cursor:pointer;display:flex;align-items:center;transition:border-color .2s;position:relative;min-height:42px;box-sizing:border-box}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text.is-placeholder{color:#8899a6}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-arrow{position:absolute;right:12px;font-size:10px;color:#8899a6;transition:transform .2s}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-trigger{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-arrow{transform:rotate(180deg)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-menu{display:block}.campaigns-page .campaigns-filters .campaign-dropdown-menu{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:100;max-height:280px;overflow-y:auto;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:4px 0}.campaigns-page .campaigns-filters .campaign-dropdown-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:14px;color:#2d3748;margin:0;transition:background .15s}.campaigns-page .campaigns-filters .campaign-dropdown-item:hover{background:#f8fafc}.campaigns-page .campaigns-filters .campaign-dropdown-item.is-checked{background:#eef2ff}.campaigns-page .campaigns-filters .campaign-dropdown-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;flex-shrink:0;accent-color:#6690f4}.campaigns-page .campaigns-filters .campaign-dropdown-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-list-panel{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);margin-bottom:20px;overflow:hidden}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #e2e8f0;gap:12px}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left{display:flex;align-items:center;gap:8px;font-size:13px;color:#4e5e6a}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left input[type=checkbox]{width:16px;height:16px;cursor:pointer}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin:0}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left .campaigns-selected-count{margin-left:12px;color:#8899a6}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:hover:not(:disabled){background:#c00;color:#fff}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:disabled{opacity:.4;cursor:not-allowed}.campaigns-page .campaigns-list-panel .campaigns-list-items{display:flex;flex-wrap:wrap;gap:0;padding:8px 8px;max-height:220px;overflow-y:auto}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item{display:flex;align-items:center;gap:8px;padding:6px 12px;margin:2px;border-radius:6px;font-size:13px;color:#2d3748;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item:hover{background:#f0f4ff}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item input[type=checkbox]{width:15px;height:15px;cursor:pointer;flex-shrink:0}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item .campaigns-list-item-name{white-space:nowrap}.campaigns-page .campaigns-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:20px;min-height:350px;overflow:hidden}.campaigns-page .campaigns-chart-wrap #container{max-width:100%}.campaigns-page .campaigns-table-wrap .table{width:100%}.campaigns-page .delete-history-entry{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .delete-history-entry:hover{background:#c00;color:#fff}.products-page .products-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.products-page .products-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.products-page .products-header h2 i{color:#6690f4;margin-right:8px}.products-page .products-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:20px;margin-bottom:16px}.products-page .products-filters .filter-group{flex:1 1 220px;min-width:0}.products-page .products-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.products-page .products-filters .filter-group label i{margin-right:4px}.products-page .products-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.products-page .products-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.products-page .products-filters .filter-group select.form-control{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.products-page .products-filters .filter-group.filter-group-client,.products-page .products-filters .filter-group.filter-group-campaign,.products-page .products-filters .filter-group.filter-group-ad-group{flex:1 1 260px}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions{display:flex;gap:8px;align-items:center}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions .form-control{flex:1 1 auto;min-width:0}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group{min-width:38px;height:38px;border-radius:6px;margin:0;background:#dc3545;border:1px solid #dc3545;color:#fff;cursor:pointer}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:hover:not(:disabled){background:#bb2d3b;border-color:#bb2d3b;color:#fff}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:disabled{opacity:.45;cursor:default;background:#dc3545;border-color:#dc3545;color:#fff}.products-page .products-filters .filter-group.filter-group-roas{flex:0 0 200px}.products-page .products-filters .filter-group.filter-group-search{flex:1 1 200px}.products-page .products-filters .filter-group.filter-group-cl4{flex:0 0 160px}.products-page .products-filters .filter-group.filter-group-columns{flex:0 0 240px}.products-page .products-scope-alerts{margin-bottom:12px;border:1px solid #fecaca;background:#fef2f2;border-radius:8px;overflow:hidden}.products-page .products-scope-alerts summary{cursor:pointer;list-style:none;padding:10px 12px;font-size:13px;font-weight:600;color:#991b1b;display:flex;align-items:center;gap:8px}.products-page .products-scope-alerts summary::-webkit-details-marker{display:none}.products-page .products-scope-alerts .products-scope-alerts-list{border-top:1px solid #fecaca;background:#fff;max-height:260px;overflow:auto}.products-page .products-scope-alerts .products-scope-alert-item{padding:10px 12px;border-bottom:1px solid #f1f5f9}.products-page .products-scope-alerts .products-scope-alert-item:last-child{border-bottom:none}.products-page .products-scope-alerts .products-scope-alert-meta{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:11px;color:#64748b}.products-page .products-scope-alerts .products-scope-alert-type{display:inline-flex;align-items:center;padding:2px 6px;border-radius:999px;background:#eef2ff;color:#4338ca;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.products-page .products-scope-alerts .products-scope-alert-message{font-size:13px;color:#2d3748;line-height:1.45}.products-page .products-actions{margin-bottom:12px}.products-page .products-actions .btn-danger{padding:7px 14px;font-size:13px;border-radius:6px;border:none;cursor:pointer;transition:all .2s}.products-page .products-actions .btn-danger:disabled{opacity:.4;cursor:default}.products-page .products-table-wrap .table{width:100%}.products-page .products-table-wrap .table input.min_roas,.products-page .products-table-wrap .table input.form-control-sm,.products-page .products-table-wrap .table select.custom_label_4,.products-page .products-table-wrap .table select.form-control-sm{padding:3px 6px;font-size:12px;border:1px solid #e2e8f0;border-radius:4px;background:#fff}.products-page .delete-product{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.products-page .delete-product:hover{background:#c00;color:#fff}.products-page .edit-product-title{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#eef2ff;color:#6690f4;transition:all .2s}.products-page .edit-product-title:hover{background:#6690f4;color:#fff}.desc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.desc-header label{margin:0}.desc-tabs{display:flex;gap:2px;background:#eee;border-radius:6px;padding:2px}.desc-tab{border:none;background:rgba(0,0,0,0);padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;color:#666;transition:all .15s ease}.desc-tab i{margin-right:4px}.desc-tab.active{background:#fff;color:#333;box-shadow:0 1px 3px rgba(0,0,0,.12);font-weight:500}.desc-tab:hover:not(.active){color:#333}.desc-wrap{flex:1;min-width:0}.desc-preview ul,.desc-preview ol{margin:6px 0;padding-left:20px}.desc-preview li{margin-bottom:3px}.desc-preview b,.desc-preview strong{font-weight:600}.input-with-ai{display:flex;gap:8px;align-items:flex-start}.input-with-ai .form-control{flex:1}.btn-ai-suggest{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:8px;border:1px solid #c084fc;background:linear-gradient(135deg, #F3E8FF, #EDE9FE);color:#7c3aed;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;min-height:38px}.btn-ai-suggest i{font-size:13px}.btn-ai-suggest:hover{background:linear-gradient(135deg, #7C3AED, #6D28D9);color:#fff;border-color:#6d28d9}.btn-ai-suggest:disabled{opacity:.7;cursor:wait}.btn-ai-suggest.btn-ai-claude{border-color:#d97706;background:linear-gradient(135deg, #FEF3C7, #FDE68A);color:#92400e}.btn-ai-suggest.btn-ai-claude:hover{background:linear-gradient(135deg, #D97706, #B45309);color:#fff;border-color:#b45309}.btn-ai-suggest.btn-ai-gemini{border-color:#4285f4;background:linear-gradient(135deg, #E8F0FE, #D2E3FC);color:#1a73e8}.btn-ai-suggest.btn-ai-gemini:hover{background:linear-gradient(135deg, #4285F4, #1A73E8);color:#fff;border-color:#1a73e8}.form_container{background:#fff;padding:25px;max-width:1300px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.form_container.full{max-width:100%}.form_container .form_group{margin-bottom:12px;display:flex}.form_container .form_group>.label{width:300px;display:inline-flex;align-items:flex-start;justify-content:right;padding-right:12px}.form_container .form_group .input{width:calc(100% - 300px)}.default_popup{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.45);display:none;z-index:2000}.default_popup .popup_content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);background:#fff;padding:25px;border-radius:10px;max-width:1140px;width:95%;box-shadow:0 20px 60px rgba(0,0,0,.15)}.default_popup .popup_content .popup_header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.default_popup .popup_content .popup_header .title{font-size:18px;font-weight:600}.default_popup .popup_content .close{cursor:pointer;color:#a0aec0;font-size:18px;padding:4px}.default_popup .popup_content .close:hover{color:#c00}.dt-layout-table{margin-bottom:20px}.pagination button{border:1px solid #e2e8f0;background:#fff;display:inline-flex;height:32px;width:32px;align-items:center;justify-content:center;margin:0 2px;border-radius:4px;transition:all .2s;cursor:pointer}.pagination button:hover{background:#f4f6f9;border-color:#6690f4}table#products a{color:inherit;text-decoration:none}table#products .table-product-title{display:flex;justify-content:space-between}table#products .edit-product-title{display:flex;height:25px;align-items:center;justify-content:center;width:25px;cursor:pointer;background:#fff;border:1px solid #cbd5e0;color:#cbd5e0;border-radius:4px}table#products .edit-product-title:hover{background:#cbd5e0;color:#fff}table#products a.custom_name{color:#57b951 !important}.product-history-page .product-history-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.product-history-page .product-history-meta span{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;color:#4e5e6a;background:#eef2ff;border:1px solid #d9e2ff}.product-history-page .product-history-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:16px}.product-history-page .chart-with-form{display:flex;gap:20px;align-items:flex-start}.product-history-page .chart-area{flex:1 1 auto;min-width:0}.product-history-page .product-history-chart{min-height:360px}.product-history-page .comment-form{width:340px;flex:0 0 340px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:14px}.product-history-page .comment-form .form-group{margin-bottom:12px}.product-history-page .comment-form label{display:block;font-weight:600;margin-bottom:6px;font-size:13px;color:#52606d}.product-history-page .comment-form input[type=date],.product-history-page .comment-form textarea{width:100%;border:1px solid #e2e8f0;border-radius:6px;padding:8px 12px;font-size:14px;font-family:"Roboto",sans-serif;background:#fff}.product-history-page .comment-form input[type=date]:focus,.product-history-page .comment-form textarea:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.product-history-page .comment-form textarea{min-height:110px;resize:vertical}.product-history-page .comment-form .btn{width:100%;justify-content:center;padding:10px 16px}.product-history-page .comment-form .btn[disabled]{opacity:.6;cursor:not-allowed}.product-history-page .products-table-wrap{overflow-x:auto}.product-history-page .products-table-wrap .table{min-width:980px}.product-history-page .products-table-wrap .comment-cell{display:flex;align-items:center;justify-content:space-between;gap:10px}.product-history-page .products-table-wrap .comment-text{word-break:break-word}.product-history-page .products-table-wrap .delete-comment{color:#c00;text-decoration:none;font-weight:600;white-space:nowrap}.product-history-page .products-table-wrap .delete-comment:hover{text-decoration:underline}.product-history-page .products-table-wrap .dt-paging .pagination .page-item{list-style:none}.cron-status-overview{display:flex;flex-wrap:wrap;gap:10px 20px;margin-bottom:20px;color:#4e5e6a;font-size:13px}.cron-progress-list{margin-bottom:20px}.cron-schedule-list{margin-bottom:20px}.cron-schedule-item{border:1px solid #dfe7f0;background:#f4f8fd;border-radius:8px;padding:9px 12px;margin-bottom:8px}.cron-schedule-item:last-child{margin-bottom:0}.cron-schedule-item strong{display:block;color:#2d3748;font-size:13px;font-weight:700;margin-bottom:2px}.cron-schedule-item small{display:block;color:#678;font-size:12px;line-height:1.35}.cron-progress-item{margin-bottom:14px}.cron-progress-item:last-child{margin-bottom:0}.cron-progress-item .cron-progress-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;font-size:13px}.cron-progress-item .cron-progress-head strong{color:#2d3748;font-weight:600}.cron-progress-item .cron-progress-head span{color:#6b7a89;font-size:12px;font-weight:600;white-space:nowrap}.cron-progress-item small{display:block;margin-top:5px;color:#789;font-size:12px}.cron-progress-bar{width:100%;height:10px;border-radius:999px;background:#e9eef5;overflow:hidden}.cron-progress-bar>span{display:block;height:100%;background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.cron-url-list{margin-bottom:20px}.cron-url-item{border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;padding:10px 12px;margin-bottom:10px}.cron-url-item:last-child{margin-bottom:0}.cron-url-item .cron-url-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.cron-url-item .cron-url-top strong{color:#2d3748;font-size:13px;font-weight:600}.cron-url-item .cron-url-top small{color:#7a8794;font-size:11px;white-space:nowrap}.cron-url-item code{display:block;background:#eef2f7;border:1px solid #dde4ed;border-radius:6px;padding:6px 8px;color:#2e3b49;font-size:12px;overflow-x:auto}.cron-url-item .cron-url-plan{display:block;color:#6c7b8a;font-size:11px;margin-bottom:6px}@media(max-width: 1200px){.product-history-page .chart-with-form{flex-direction:column}.product-history-page .comment-form{width:100%;flex:1 1 auto}}.jconfirm-box .form-group .select2-container,.adspro-dialog-box .form-group .select2-container{width:100% !important;margin-top:8px}.jconfirm-box .select2-container--default .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;min-height:42px;display:flex;align-items:center;padding:4px 12px;box-shadow:none;transition:border-color .2s,box-shadow .2s;font-size:14px}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;line-height:1.4;color:#495057}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder{color:#cbd5e0}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;right:8px}.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,.jconfirm-box .select2-container--default .select2-selection--single:hover,.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single:hover{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:0}.jconfirm-box .select2-container .select2-dropdown,.adspro-dialog-box .select2-container .select2-dropdown{border-color:#e2e8f0;border-radius:0 0 6px 6px;font-size:14px}.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field{padding:6px 10px;border-radius:4px;border:1px solid #e2e8f0;font-size:14px}.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#6690f4;color:#fff}@media(max-width: 992px){.sidebar{transform:translateX(-100%)}.sidebar.mobile-open{transform:translateX(0)}.main-wrapper{margin-left:0 !important}}.campaign-terms-wrap{display:flex;flex-direction:column;gap:20px;margin-top:20px}.campaign-terms-page{max-width:100%;overflow:hidden}.campaign-terms-page .campaigns-filters{flex-wrap:wrap}.campaign-terms-page .campaigns-filters .filter-group{min-width:220px}.campaign-terms-page .campaigns-filters .filter-group.terms-columns-group{min-width:280px}.campaign-terms-page .terms-card-toggle{margin-left:auto;width:28px;height:28px;border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#475569;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-card-toggle:hover{background:#f8fafc;border-color:#cbd5e1}.campaign-terms-page .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap{display:none}.campaign-terms-page .terms-search-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-search-toolbar label{font-size:12px;font-weight:600;color:#475569;display:inline-flex;align-items:center;gap:6px;margin:0;white-space:nowrap}.campaign-terms-page .terms-search-toolbar .terms-search-toolbar-label{min-width:86px}.campaign-terms-page .terms-search-toolbar #terms_min_clicks_all,.campaign-terms-page .terms-search-toolbar #terms_max_clicks_all{width:160px;height:32px}.campaign-terms-page .terms-search-toolbar #terms_min_conversions_all,.campaign-terms-page .terms-search-toolbar #terms_max_conversions_all{width:130px;max-width:130px}.campaign-terms-page .terms-search-selected-label{margin:0;font-size:12px;color:#475569;font-weight:600;white-space:nowrap}.campaign-terms-page .terms-ai-analyze-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-ai-analyze-btn:hover{background:#dbeafe;border-color:#93c5fd}.campaign-terms-page .terms-ai-analyze-btn:disabled{opacity:.6;cursor:wait}.campaign-terms-page .terms-table-search-input{width:200px;min-width:120px;max-width:200px;height:32px;font-size:12px;flex:0 1 200px}.campaign-terms-page .terms-negative-toolbar,.campaign-terms-page .terms-keywords-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #fecaca;background:#fef2f2;color:#dc2626;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-negative-bulk-btn:hover{background:#fee2e2;border-color:#fca5a5}.campaign-terms-page .terms-negative-bulk-btn:disabled{opacity:.5;cursor:not-allowed}.campaign-terms-page table.campaigns-extra-table>thead>tr>th{position:sticky;top:0;z-index:2;background-color:#111827 !important;color:#e5e7eb !important;border-bottom:1px solid #0b1220 !important;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;white-space:nowrap}.campaign-terms-page #terms_search_table thead th .dt-column-order,.campaign-terms-page #terms_negative_table thead th .dt-column-order{display:none !important}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.campaign-terms-page #terms_search_table thead th .dt-column-title,.campaign-terms-page #terms_negative_table thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc::after{content:"↕";position:absolute;right:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:999px;font-size:12px;font-weight:700;line-height:16px;text-align:center;color:#e5e7eb;background:#374151}.campaign-terms-page #terms_search_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=ascending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=ascending]::after{content:"▲";color:#fff;background:#2563eb}.campaign-terms-page #terms_search_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=descending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=descending]::after{content:"▼";color:#fff;background:#2563eb}.campaign-terms-page #terms_negative_select_all,.campaign-terms-page .terms-negative-select-row,.campaign-terms-page #terms_search_select_all,.campaign-terms-page .terms-search-select-row{width:14px;height:14px;cursor:pointer}.campaign-terms-page .dt-layout-row:first-child{display:none}.campaign-terms-page .dt-layout-row{padding:10px 12px;margin:0 !important;border-top:1px solid #f1f5f9}.campaign-terms-page .dt-info{font-size:12px;color:#64748b}.campaign-terms-page .dt-paging .pagination{margin:0;padding:0;list-style:none !important;display:flex;align-items:center;gap:6px}.campaign-terms-page .dt-paging .pagination .page-item{list-style:none !important}.campaign-terms-page .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:-moz-fit-content;width:fit-content;height:32px;padding:0 12px;border-radius:6px;font-size:12px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;text-decoration:none;line-height:1;white-space:nowrap}.campaign-terms-page .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.previous .page-link,.campaign-terms-page .dt-paging .pagination .page-item.next .page-link{min-width:72px}.campaign-terms-page .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.terms-columns-box{display:flex;flex-direction:column;gap:6px}.terms-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.terms-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.terms-columns-control summary::-webkit-details-marker{display:none}.terms-columns-control summary::after{content:"▼";float:right;font-size:10px;color:#64748b;margin-top:2px}.terms-columns-control[open] summary::after{content:"▲"}.terms-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:180px;overflow-y:auto}.terms-columns-list .terms-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.terms-columns-list .terms-col-item:last-child{margin-bottom:0}.terms-columns-list .terms-col-item input[type=checkbox]{margin:0}.campaigns-extra-card{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.campaigns-extra-card-title{padding:14px 16px;border-bottom:1px solid #e2e8f0;font-size:13px;font-weight:700;color:#334155;display:flex;align-items:center;gap:8px}.campaigns-extra-card-title .terms-card-title-label{display:inline-flex;align-items:center;gap:8px}.campaigns-extra-table-wrap{overflow:auto}.campaigns-extra-table{margin:0;width:100%;table-layout:fixed}.campaigns-extra-table tbody td{padding:9px 12px;border-bottom:1px solid #f1f5f9;font-size:13px;color:#334155;vertical-align:middle;white-space:nowrap}.campaigns-extra-table td.num-cell{text-align:right;white-space:nowrap}.campaigns-extra-table td.text-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table th.terms-negative-select-cell,.campaigns-extra-table td.terms-negative-select-cell,.campaigns-extra-table th.terms-search-select-cell,.campaigns-extra-table td.terms-search-select-cell{text-align:center}.campaigns-extra-table th.phrase-nowrap,.campaigns-extra-table td.phrase-nowrap{white-space:nowrap !important;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table .terms-add-negative-btn,.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s}.campaigns-extra-table .terms-add-negative-btn{border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-add-negative-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover,.campaigns-extra-table .terms-delete-keyword-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.campaigns-extra-table .terms-toggle-keyword-status-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #fde68a;background:#fffbeb;color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn:hover{background:#d97706;color:#fff;border-color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success{border-color:#a7f3d0;background:#ecfdf5;color:#059669}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success:hover{background:#059669;color:#fff;border-color:#059669}.campaigns-extra-table .terms-change-match-type-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-change-match-type-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table tbody tr:hover{background:#f8fafc}.campaigns-extra-table tbody tr.term-is-negative td{color:#dc2626}.campaigns-extra-table tbody tr.term-is-negative:hover{background:#fef2f2}.campaigns-empty-row{text-align:center;color:#94a3b8 !important;font-style:italic}.terms-ai-modal-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.terms-ai-modal-toolbar label{font-size:12px;font-weight:600;color:#334155;margin:0}.terms-ai-modal-toolbar .form-control{width:200px;height:32px}.terms-ai-summary{font-size:12px;color:#64748b;margin-bottom:10px}.terms-ai-results-wrap{border:1px solid #e2e8f0;border-radius:8px;max-height:420px;overflow:auto}.terms-ai-results-table{width:100%;border-collapse:collapse;font-size:12px}.terms-ai-results-table th,.terms-ai-results-table td{border-bottom:1px solid #eef2f7;padding:8px;vertical-align:middle}.terms-ai-results-table th{position:sticky;top:0;background:#f8fafc;color:#334155;font-weight:700}.terms-ai-results-table td.term-col{min-width:260px;max-width:380px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.terms-ai-results-table td.reason-col{min-width:320px}.terms-ai-action-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.terms-ai-action-badge.action-exclude{background:#fee2e2;color:#b91c1c}.terms-ai-action-badge.action-keep{background:#dcfce7;color:#166534}.products-page .products-filters .filter-group.filter-group-columns{min-width:240px}.products-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.products-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.products-columns-control summary::-webkit-details-marker{display:none}.products-columns-control summary::after{content:"▼";float:right;font-size:10px;color:#64748b;margin-top:2px}.products-columns-control[open] summary::after{content:"▲"}.products-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:220px;overflow-y:auto}.products-columns-list .products-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.products-columns-list .products-col-item:last-child{margin-bottom:0}.products-columns-list .products-col-item input[type=checkbox]{margin:0}#products th:last-child,#products td:last-child{white-space:nowrap}#products tr.product-row-unavailable{opacity:.45}#products tr.product-row-unavailable td{background-color:#f0f0f0 !important}#products .product-warning-icon{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:#dc2626;font-size:16px}#products .product-warning-icon:hover{color:#b91c1c}#products .products-row-actions{display:inline-flex;align-items:center;gap:4px}#products .products-row-actions .btn{width:38px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:4px !important}#products .products-row-actions .btn i{line-height:1}.logs-page .logs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.logs-page .logs-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.logs-page .logs-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:16px}.logs-page .logs-filters .filter-group{flex:1 1 160px;min-width:0;max-width:220px}.logs-page .logs-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.logs-page .logs-filters .filter-group .form-control{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.logs-page .logs-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.logs-page .logs-filters .filter-group select.form-control{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.logs-page .logs-filters .filter-group.filter-group-buttons{flex:0 0 auto;display:flex;gap:6px;max-width:none}.logs-page .logs-table-wrap .table{width:100%}.logs-page .badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.logs-page .badge-success{background:#d1fae5;color:#065f46}.logs-page .badge-danger{background:#fee2e2;color:#991b1b}.logs-page .badge-warning{background:#fef3c7;color:#92400e}.js-title-alt-apply{color:#000;justify-content:flex-start}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/layout/style.css.map b/layout/style.css.map index 90916eb..056e791 100644 --- a/layout/style.css.map +++ b/layout/style.css.map @@ -1 +1 @@ -{"version":3,"sources":["style.css","style.scss"],"names":[],"mappings":"AAAA,EC4BA,qBACE,CAAA,KAGF,+BACE,CAAA,QACA,CAAA,SACA,CAAA,cACA,CAAA,aAxBM,CAAA,kBAFK,CAAA,eA6BX,CAAA,iBACA,CAAA,MAGF,YACE,CAAA,MAIF,eACE,CAAA,YAGF,gBACE,CAAA,WAGF,0BACE,CAAA,QAGF,kBACE,CAAA,cAMF,kBAzDa,CAAA,QA2DX,CAAA,SACA,CAAA,iBAGF,YACE,CAAA,gBACA,CAAA,aAGF,YACE,CAAA,yEACA,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,YACA,CAAA,iBACA,CAAA,eACA,CAAA,qBAEA,UACE,CAAA,iBACA,CAAA,QACA,CAAA,UACA,CAAA,UACA,CAAA,WACA,CAAA,iFACA,CAAA,iBACA,CAAA,4BAGF,iBACE,CAAA,SACA,CAAA,UA1FK,CAAA,eA4FL,CAAA,yBAGF,cACE,CAAA,eACA,CAAA,kBACA,CAAA,mBACA,CAAA,gCAEA,eACE,CAAA,4BAIJ,cACE,CAAA,WACA,CAAA,eACA,CAAA,kBACA,CAAA,sCAIA,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,UACA,CAAA,wCAEA,cACE,CAAA,UACA,CAAA,WACA,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,6BACA,CAAA,kBACA,CAAA,2CAGF,cACE,CAAA,oBAMR,MACE,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,YACA,CAAA,eAhJO,CAAA,WAoJT,UACE,CAAA,eACA,CAAA,yBAEA,kBACE,CAAA,4BAEA,cACE,CAAA,eACA,CAAA,aA3JM,CAAA,cA6JN,CAAA,2BAGF,aACE,CAAA,cACA,CAAA,QACA,CAAA,uBAIJ,kBACE,CAAA,6BAEA,aACE,CAAA,cACA,CAAA,eACA,CAAA,aA7KM,CAAA,iBA+KN,CAAA,4BAIJ,iBACE,CAAA,8BAEA,iBACE,CAAA,SACA,CAAA,OACA,CAAA,0BACA,CAAA,aACA,CAAA,cACA,CAAA,0CAGF,iBACE,CAAA,yBAIJ,UACE,CAAA,WACA,CAAA,wBACA,CAAA,iBACA,CAAA,cACA,CAAA,cACA,CAAA,+BACA,CAAA,aA3MQ,CAAA,0CA6MR,CAAA,2CAEA,aACE,CAHF,sCAEA,aACE,CAAA,+BAGF,oBA5NO,CAAA,0CA8NL,CAAA,YACA,CAAA,uBAIJ,UAtNQ,CAAA,cAwNN,CAAA,cACA,CAAA,2CAIA,YACE,CAAA,kBACA,CAAA,OACA,CAAA,cACA,CAAA,cACA,CAAA,aACA,CAAA,eACA,CAAA,gEAEA,UACE,CAAA,WACA,CAAA,oBArPG,CAAA,sBA2PT,UACE,CAAA,WACA,CAAA,cACA,CAAA,eACA,CAAA,iBACA,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,OACA,CAAA,+BAEA,UACE,CAAA,mBACA,CAAA,kBAIJ,YACE,CAAA,iBACA,CAAA,iBACA,CAAA,cACA,CAAA,kBACA,CAAA,+BAEA,kBACE,CAAA,UAvQI,CAAA,wBAyQJ,CAAA,gCAGF,kBACE,CAAA,aACA,CAAA,wBACA,CAAA,yBAMN,aACE,YACE,CAAA,oBAGF,iBACE,CAAA,CAAA,YAOJ,YACE,CAAA,gBACA,CAAA,kBA3SW,CAAA,SAgTb,WApSe,CAAA,gBAsSb,CAAA,kBAtTW,CAAA,cAwTX,CAAA,KACA,CAAA,MACA,CAAA,YACA,CAAA,YACA,CAAA,qBACA,CAAA,yBACA,CAAA,eACA,CAAA,mBAEA,UAhTiB,CAAA,mCAmTf,cACE,CAAA,sBACA,CAAA,iDAEA,YACE,CAAA,qDAGF,wBACE,CAAA,wCAIJ,cACE,CAAA,sBACA,CAAA,6CAEA,YACE,CAAA,0CAGF,cACE,CAAA,cACA,CAAA,iEAIJ,cACE,CAAA,sBACA,CAAA,sEAEA,YACE,CAAA,mEAGF,cACE,CAAA,cACA,CAAA,iDAKF,sBACE,CAAA,4DAEA,YACE,CAAA,mDAIJ,sBACE,CAAA,wDAEA,YACE,CAAA,gCAKN,eACE,CAAA,gBAKN,YACE,CAAA,kBACA,CAAA,6BACA,CAAA,sBACA,CAAA,2CACA,CAAA,gCAEA,UAvYO,CAAA,oBAyYL,CAAA,cACA,CAAA,eACA,CAAA,qBACA,CAAA,uCAEA,eACE,CAAA,gCAIJ,eACE,CAAA,WACA,CAAA,aAzZW,CAAA,cA2ZX,CAAA,WACA,CAAA,iBACA,CAAA,kBACA,CAAA,sCAEA,8BACE,CAAA,UA7ZG,CAAA,kCAiaL,wBACE,CAAA,aAKN,MACE,CAAA,cACA,CAAA,eACA,CAAA,gBAEA,eACE,CAAA,QACA,CAAA,SACA,CAAA,6BAGE,iBACE,CAAA,8CAEA,YACE,CAAA,kBACA,CAAA,iBACA,CAAA,aACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,mCACA,CAAA,gDAEA,UACE,CAAA,iBACA,CAAA,iBACA,CAAA,cACA,CAAA,aACA,CAAA,0CAIJ,QACE,CAAA,SACA,CAAA,eACA,CAAA,+CAEA,iBACE,CAAA,qDAIJ,UAndC,CAAA,gCAqdC,CAAA,yBA5dC,CAAA,uDA+dD,aA/dC,CAAA,+BAqeL,UACE,CAAA,8BACA,CAAA,eACA,CAAA,qBAGF,YACE,CAAA,kBACA,CAAA,iBACA,CAAA,aA3eO,CAAA,oBA6eP,CAAA,cACA,CAAA,kBACA,CAAA,mCACA,CAAA,uBAEA,UACE,CAAA,iBACA,CAAA,iBACA,CAAA,cACA,CAAA,2BAGF,kBAxfQ,CAAA,UAGP,CAAA,4BA2fH,gCACE,CAAA,UA5fC,CAAA,yBAPE,CAAA,8BAugBH,aAvgBG,CAAA,oBA+gBX,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,WACA,CAAA,aACA,CAAA,eACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,aACA,CAAA,eAnhBO,CAAA,aAPE,CAAA,gBA+hBX,iBACE,CAAA,wCACA,CAAA,8BAEA,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,2CAEA,UACE,CAAA,WACA,CAAA,iBACA,CAAA,+BACA,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,aAhjBK,CAAA,cAkjBL,CAAA,aACA,CAAA,yCAGF,eACE,CAAA,qDAEA,aAtjBS,CAAA,cAwjBP,CAAA,aACA,CAAA,kBACA,CAAA,eACA,CAAA,sBACA,CAAA,gCAKN,YACE,CAAA,kBACA,CAAA,OACA,CAAA,aACA,CAAA,oBACA,CAAA,cACA,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,kCAEA,cACE,CAAA,sCAGF,6BACE,CAAA,cAMN,iBAxkBe,CAAA,MA0kBb,CAAA,gBACA,CAAA,+BACA,CAAA,YACA,CAAA,qBACA,CAAA,uBAEA,gBA/kBiB,CAAA,QAqlBnB,WAplBe,CAAA,eAbN,CAAA,+BAomBP,CAAA,YACA,CAAA,kBACA,CAAA,cACA,CAAA,eACA,CAAA,KACA,CAAA,WACA,CAAA,uBAEA,eACE,CAAA,WACA,CAAA,aA7mBI,CAAA,cA+mBJ,CAAA,gBACA,CAAA,iBACA,CAAA,cACA,CAAA,iBACA,CAAA,kBACA,CAAA,6BAEA,kBAxnBS,CAAA,2BA6nBX,cACE,CAAA,eACA,CAAA,aA5nBQ,CAAA,SAkoBZ,MACE,CAAA,YACA,CAAA,WAGF,kBACE,CAAA,wBACA,CAAA,aACA,CAAA,iBACA,CAAA,iBACA,CAAA,kBACA,CAAA,cACA,CAAA,KAQF,iBACE,CAAA,uBACA,CAAA,UA1pBO,CAAA,QA4pBP,CAAA,iBACA,CAAA,cACA,CAAA,mBACA,CAAA,oBACA,CAAA,OACA,CAAA,sBACA,CAAA,kBACA,CAAA,cACA,CAAA,+BACA,CAAA,eACA,CAAA,uCAEA,gBAGE,CAAA,cACA,CAAA,6CAEA,cACE,CAAA,iBAIJ,kBA/qBS,CAAA,uBAkrBP,kBAjrBW,CAAA,iBAsrBb,kBAlsBS,CAAA,uBAqsBP,kBApsBW,CAAA,gBAysBb,eA7rBQ,CAAA,sBAgsBN,kBA/rBU,CAAA,cAosBZ,UACE,CAAA,mBACA,CAAA,cAKJ,wBACE,CAAA,iBACA,CAAA,WACA,CAAA,UACA,CAAA,gBACA,CAAA,+BACA,CAAA,cACA,CAAA,aAvtBU,CAAA,0CAytBV,CAAA,qBAEA,WACE,CAAA,oBAGF,oBAxuBS,CAAA,yCA0uBP,CAAA,YACA,CAAA,qBAIJ,wBACE,CAAA,MAIF,wBACE,CAAA,cACA,CAAA,OAGF,UACE,CAAA,oBAEA,wBAEE,CAAA,gBACA,CAAA,UAGF,kBACE,CAAA,eACA,CAAA,cACA,CAAA,wBACA,CAAA,oBACA,CAAA,aACA,CAAA,iBAGF,iBACE,CAAA,eAGF,eACE,CAAA,mBAGF,sBACE,CAAA,0BAGF,cACE,CAAA,WACA,CAAA,gFAKJ,eAvxBS,CAAA,kBA4xBP,CAAA,oCACA,CAAA,eACA,CAAA,cACA,CAAA,uBACA,CAAA,oBACA,CAAA,4JAEA,YACE,CAAA,4GAGF,QACE,CAAA,qBACA,CAAA,gJAEA,kBACE,CAAA,+BACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,aACA,CAAA,iBACA,CAAA,kBACA,CAAA,gJAGF,iBACE,CAAA,cACA,CAAA,aAvzBM,CAAA,qBAyzBN,CAAA,+BACA,CAAA,oLAGF,kBACE,CAAA,4IAIJ,iBACE,CAAA,mBACA,CAAA,4BACA,CAAA,4LAEA,YACE,CAAA,oHAIJ,cACE,CAAA,aACA,CAAA,4KAIA,QACE,CAAA,SACA,CAAA,eACA,CAAA,YACA,CAAA,kBACA,CAAA,OACA,CAAA,oQAGE,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,sBACA,CADA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,eAx2BD,CAAA,aACD,CAAA,cA02BE,CAAA,kBACA,CAAA,oBACA,CAAA,aACA,CAAA,kBACA,CAAA,4RAEA,kBACE,CAAA,aAz3BD,CAAA,oBAAA,CAAA,gSA+3BH,kBA/3BG,CAAA,UAOF,CAAA,oBAPE,CAAA,eAm4BD,CAAA,wSAGF,WACE,CAAA,cACA,CAAA,mBACA,CAAA,4IAMR,6BACE,CAAA,aAx4BI,CAAA,cA04BJ,CAAA,MAKJ,eAh5BS,CAAA,YAk5BP,CAAA,iBACA,CAAA,aAj5BU,CAAA,cAm5BV,CAAA,oCACA,CAAA,WAEA,kBACE,CAAA,mBAGF,eACE,CAAA,cACA,CAAA,iBAGF,gBACE,CAAA,oDAIE,cAEE,CAAA,8DAEA,eACE,CAAA,0EAGF,gBACE,CAAA,4EAGF,iBACE,CAAA,aAQV,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBAEA,gBACE,CAAA,0BAEA,kBA/7BO,CAAA,gCAk8BL,kBAj8BS,CAAA,6BAs8BX,eAr8BM,CAAA,mCAw8BJ,kBAv8BQ,CAAA,eA+8Bd,YACE,CAAA,OACA,CAAA,kBACA,CAAA,6BAEA,mBACE,CAAA,kBACA,CAAA,OACA,CAAA,gBACA,CAAA,iBACA,CAAA,oBACA,CAAA,aACA,CAAA,kBACA,CAAA,wBACA,CAAA,cACA,CAAA,eACA,CAAA,kBACA,CAAA,mCAEA,aAv+BQ,CAAA,kBAy+BN,CAAA,oCAGF,UA9+BK,CAAA,kBAPE,CAAA,oBAAA,CAAA,eA6/BX,eAt/BS,CAAA,kBAw/BP,CAAA,YACA,CAAA,oCACA,CAAA,qCAEA,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,mBACA,CAAA,+BACA,CAAA,yDAEA,UACE,CAAA,WACA,CAAA,kBACA,CAAA,0DACA,CAAA,aA/gCK,CAAA,YAihCL,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,aACA,CAAA,wCAGF,QACE,CAAA,cACA,CAAA,eACA,CAAA,aAlhCM,CAAA,2CAshCR,aACE,CAAA,cACA,CAAA,+BAIJ,kBACE,CAAA,qCAEA,aACE,CAAA,cACA,CAAA,eACA,CAAA,aAliCM,CAAA,iBAoiCN,CAAA,oCAIJ,iBACE,CAAA,yDAEA,iBACE,CAAA,SACA,CAAA,OACA,CAAA,0BACA,CAAA,aACA,CAAA,cACA,CAAA,mBACA,CAAA,kDAGF,iBACE,CAAA,wDAGF,iBACE,CAAA,SACA,CAAA,OACA,CAAA,0BACA,CAAA,eACA,CAAA,WACA,CAAA,aACA,CAAA,cACA,CAAA,gBACA,CAAA,cACA,CAAA,oBACA,CAAA,8DAEA,aA/kCK,CAAA,sDAqlCT,mBACE,CAAA,kBACA,CAAA,QACA,CAAA,cACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CADA,qBACA,CADA,gBACA,CAAA,eACA,CAAA,UACA,CAAA,4EAEA,aACE,CAAA,WACA,CAAA,gBACA,CAAA,yCAIJ,YACE,CAAA,iEAEA,oBACE,CAAA,iBACA,CAAA,UACA,CAAA,WACA,CAAA,eACA,CAAA,kBACA,CAAA,yBACA,CAAA,aACA,CAAA,wEAEA,UACE,CAAA,iBACA,CAAA,OACA,CAAA,QACA,CAAA,UACA,CAAA,WACA,CAAA,eACA,CAAA,iBACA,CAAA,wBACA,CAAA,yEAIJ,kBACE,CAAA,gFAEA,0BACE,CAAA,qCAKN,YACE,CAAA,6BACA,CAAA,UACA,CAAA,yBAEA,qCALF,yBAMI,CAAA,CAAA,qCAIJ,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,UA3oCM,CAAA,wBA6oCN,CAAA,iBACA,CAAA,iBACA,CAAA,kBACA,CAAA,cACA,CAAA,uCAEA,cACE,CAAA,aACA,CAAA,8BAOJ,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,kBACA,CAAA,iCAEA,QACE,CAAA,cACA,CAAA,eACA,CAAA,aAzqCM,CAAA,mCA4qCN,aArrCK,CAAA,gBAurCH,CAAA,oDAOF,aACE,CAAA,cACA,CAAA,eACA,CAAA,sDAGF,eACE,CAAA,aA5rCI,CAAA,wBAksCV,oBACE,CAAA,kBACA,CAAA,aA7sCO,CAAA,cA+sCP,CAAA,eACA,CAAA,gBACA,CAAA,iBACA,CAAA,qBACA,CAAA,4BAGF,iBACE,CAAA,kBACA,CAAA,wBAGF,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,kBACA,CAAA,YACA,CAAA,sCAEA,kBACE,CAAA,aAzuCK,CAAA,4CA4uCL,kBA5uCK,CAAA,UAOF,CAAA,wCA2uCL,kBACE,CAAA,UAtuCI,CAAA,8CAyuCJ,eAzuCI,CAAA,UAND,CAAA,sCAqvCL,kBACE,CAAA,aACA,CAAA,4CAEA,kBACE,CAAA,UA1vCC,CAAA,+CA8vCH,UACE,CAAA,WACA,CAAA,gDAGF,kBACE,CAAA,aACA,CAAA,gCAKN,YACE,CAAA,qBACA,CAAA,OACA,CAAA,+BAGF,YACE,CAAA,kBACA,CAAA,OACA,CAAA,iCAGF,cACE,CAAA,eACA,CAAA,aACA,CAAA,UACA,CAAA,aACA,CAAA,iCAGF,MACE,CAAA,UACA,CAAA,mBACA,CAAA,kBACA,CAAA,eACA,CAAA,gCAGF,WACE,CAAA,mBACA,CAAA,kBACA,CAAA,yBACA,CAAA,0CAEA,2DACE,CAAA,wCAGF,kBA5yCO,CAAA,+BAizCT,cACE,CAAA,eACA,CAAA,aACA,CAAA,UACA,CAAA,gBACA,CAAA,aACA,CAAA,2BAGF,iBACE,CAAA,4BACA,CAAA,aACA,CAAA,6BAEA,cACE,CAAA,kBACA,CAAA,aACA,CAAA,6BAGF,QACE,CAAA,cACA,CAAA,eAKN,kBACE,CAAA,aA/0CU,CAAA,WAi1CV,CAAA,gBACA,CAAA,iBACA,CAAA,cACA,CAAA,cACA,CAAA,yBACA,CAAA,qBAEA,kBACE,CAAA,gBAOJ,cACE,CAAA,iBACA,CAAA,UACA,CAAA,kCAEA,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,kBACA,CAAA,qCAEA,QACE,CAAA,cACA,CAAA,eACA,CAAA,aA92CM,CAAA,uCAi3CN,aA13CK,CAAA,gBA43CH,CAAA,mCAKN,YACE,CAAA,cACA,CAAA,QACA,CAAA,kBACA,CAAA,iDAEA,MACE,CAAA,WACA,CAAA,uDAEA,aACE,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,aACA,CAAA,iBACA,CAAA,yDAEA,gBACE,CAAA,+DAIJ,UACE,CAAA,iBACA,CAAA,wBACA,CAAA,iBACA,CAAA,cACA,CAAA,aAr5CI,CAAA,eAFH,CAAA,2BA05CD,CAAA,oBACA,CADA,eACA,CAAA,uBACA,CAAA,yLACA,CAAA,2BACA,CAAA,qCACA,CAAA,kBACA,CAAA,qEAEA,YACE,CAAA,oBA16CC,CAAA,yCA46CD,CAAA,qEAIJ,YACE,CAAA,kBACA,CAAA,OACA,CAAA,mFAEA,MACE,CAAA,+EAGF,aACE,CAAA,UACA,CAAA,WACA,CAAA,mBACA,CAAA,kBACA,CAAA,sBACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,kBACA,CAAA,+FAEA,kBACE,CAAA,UA17CF,CAAA,qGA67CE,eA77CF,CAAA,UAND,CAAA,gEA48CL,iBACE,CAAA,sDAGF,MACE,CAAA,WACA,CAAA,iBACA,CAAA,8DAGF,UACE,CAAA,iBACA,CAAA,kBACA,CAAA,wBACA,CAAA,iBACA,CAAA,cACA,CAAA,aA19CM,CAAA,eAFH,CAAA,cA+9CH,CAAA,YACA,CAAA,kBACA,CAAA,2BACA,CAAA,iBACA,CAAA,eACA,CAAA,qBACA,CAAA,sFAEA,MACE,CAAA,WACA,CAAA,eACA,CAAA,sBACA,CAAA,kBACA,CAAA,qGAEA,aACE,CAAA,uFAIJ,iBACE,CAAA,UACA,CAAA,cACA,CAAA,aACA,CAAA,wBACA,CAAA,yFAKF,oBApgDK,CAAA,yCAsgDH,CAAA,uFAGF,wBACE,CAAA,sFAGF,aACE,CAAA,2DAIJ,YACE,CAAA,iBACA,CAAA,oBACA,CAAA,MACA,CAAA,OACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,eAnhDG,CAAA,wBAqhDH,CAAA,iBACA,CAAA,oCACA,CAAA,aACA,CAAA,2DAGF,YACE,CAAA,kBACA,CAAA,OACA,CAAA,gBACA,CAAA,cACA,CAAA,cACA,CAAA,aA/hDM,CAAA,QAiiDN,CAAA,0BACA,CAAA,iEAEA,kBACE,CAAA,sEAGF,kBACE,CAAA,gFAGF,UACE,CAAA,WACA,CAAA,cACA,CAAA,aACA,CAAA,oBAzjDG,CAAA,gEA6jDL,MACE,CAAA,WACA,CAAA,eACA,CAAA,sBACA,CAAA,kBACA,CAAA,sCAKN,eAhkDO,CAAA,kBAkkDL,CAAA,oCACA,CAAA,kBACA,CAAA,eACA,CAAA,8DAEA,YACE,CAAA,kBACA,CAAA,6BACA,CAAA,iBACA,CAAA,+BACA,CAAA,QACA,CAAA,mEAEA,YACE,CAAA,kBACA,CAAA,OACA,CAAA,cACA,CAAA,aAllDA,CAAA,wFAqlDA,UACE,CAAA,WACA,CAAA,cACA,CAAA,yEAGF,cACE,CAAA,wBACA,CADA,qBACA,CADA,gBACA,CAAA,QACA,CAAA,6FAGF,gBACE,CAAA,aACA,CAAA,+FAKF,mBACE,CAAA,kBACA,CAAA,OACA,CAAA,gBACA,CAAA,WACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,cACA,CAAA,kBACA,CAAA,UA7mDA,CAAA,kBA+mDA,CAAA,oHAEA,eAjnDA,CAAA,UAND,CAAA,wGA4nDC,UACE,CAAA,kBACA,CAAA,4DAMR,YACE,CAAA,cACA,CAAA,KACA,CAAA,eACA,CAAA,gBACA,CAAA,eACA,CAAA,iFAEA,YACE,CAAA,kBACA,CAAA,OACA,CAAA,gBACA,CAAA,UACA,CAAA,iBACA,CAAA,cACA,CAAA,aAjpDI,CAAA,cAmpDJ,CAAA,wBACA,CADA,qBACA,CADA,gBACA,CAAA,0BACA,CAAA,uFAEA,kBACE,CAAA,sGAGF,UACE,CAAA,WACA,CAAA,cACA,CAAA,aACA,CAAA,2GAGF,kBACE,CAAA,sCAMR,eA3qDO,CAAA,kBA6qDL,CAAA,oCACA,CAAA,YACA,CAAA,kBACA,CAAA,gBACA,CAAA,eACA,CAAA,iDAEA,cACE,CAAA,6CAKF,UACE,CAAA,sCAIJ,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,kBACA,CAAA,UAnsDM,CAAA,kBAqsDN,CAAA,4CAEA,eAvsDM,CAAA,UAND,CAAA,gCAwtDP,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,kBACA,CAAA,mCAEA,QACE,CAAA,cACA,CAAA,eACA,CAAA,aA/tDM,CAAA,qCAkuDN,aA3uDK,CAAA,gBA6uDH,CAAA,iCAKN,YACE,CAAA,cACA,CAAA,oBACA,CAAA,QACA,CAAA,kBACA,CAAA,+CAEA,cACE,CAAA,WACA,CAAA,qDAEA,aACE,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,aACA,CAAA,iBACA,CAAA,uDAEA,gBACE,CAAA,6DAIJ,UACE,CAAA,iBACA,CAAA,wBACA,CAAA,iBACA,CAAA,cACA,CAAA,aAvwDI,CAAA,eAFH,CAAA,2BA4wDD,CAAA,mEAEA,YACE,CAAA,oBAtxDC,CAAA,yCAwxDD,CAAA,mEAIJ,oBACE,CADF,eACE,CAAA,uBACA,CAAA,yLACA,CAAA,2BACA,CAAA,qCACA,CAAA,kBACA,CAAA,6MAGF,cAGE,CAAA,8FAIA,YACE,CAAA,OACA,CAAA,kBACA,CAAA,4GAEA,aACE,CAAA,WACA,CAAA,+FAIJ,cACE,CAAA,WACA,CAAA,iBACA,CAAA,QACA,CAAA,kBACA,CAAA,wBACA,CAAA,UACA,CAAA,cACA,CAAA,oHAEA,kBACE,CAAA,oBACA,CAAA,UACA,CAAA,wGAGF,WACE,CAAA,cACA,CAAA,kBACA,CAAA,oBACA,CAAA,UACA,CAAA,iEAKN,cACE,CAAA,mEAGF,cACE,CAAA,gEAGF,cACE,CAAA,oEAGF,cACE,CAAA,sCAKN,kBACE,CAAA,wBACA,CAAA,kBACA,CAAA,iBACA,CAAA,eACA,CAAA,8CAEA,cACE,CAAA,eACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,aACA,CAAA,YACA,CAAA,kBACA,CAAA,OACA,CAAA,sEAEA,YACE,CAAA,kEAIJ,4BACE,CAAA,eACA,CAAA,gBACA,CAAA,aACA,CAAA,iEAGF,iBACE,CAAA,+BACA,CAAA,4EAEA,kBACE,CAAA,iEAIJ,YACE,CAAA,kBACA,CAAA,OACA,CAAA,iBACA,CAAA,cACA,CAAA,aACA,CAAA,iEAGF,mBACE,CAAA,kBACA,CAAA,eACA,CAAA,mBACA,CAAA,kBACA,CAAA,aACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,oEAGF,cACE,CAAA,aAv5DM,CAAA,gBAy5DN,CAAA,iCAIJ,kBACE,CAAA,6CAEA,gBACE,CAAA,cACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,kBACA,CAAA,sDAEA,UACE,CAAA,cACA,CAAA,2CAMJ,UACE,CAAA,8PAGA,eAIE,CAAA,cACA,CAAA,wBACA,CAAA,iBACA,CAAA,eA77DC,CAAA,+BAo8DP,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,kBACA,CAAA,UAx8DM,CAAA,kBA08DN,CAAA,qCAEA,eA58DM,CAAA,UAND,CAAA,mCAy9DP,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,kBACA,CAAA,aA1+DO,CAAA,kBA4+DP,CAAA,yCAEA,kBA9+DO,CAAA,UAOF,CAAA,aA++DT,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,iBACA,CAAA,mBAEA,QACE,CAAA,WAIJ,YACE,CAAA,OACA,CAAA,eACA,CAAA,iBACA,CAAA,WACA,CAAA,UAGF,WACE,CAAA,wBACA,CAAA,gBACA,CAAA,cACA,CAAA,iBACA,CAAA,cACA,CAAA,UACA,CAAA,wBACA,CAAA,YAEA,gBACE,CAAA,iBAGF,eACE,CAAA,UACA,CAAA,oCACA,CAAA,eACA,CAAA,6BAGF,UACE,CAAA,WAIJ,MACE,CAAA,WACA,CAAA,kCAKA,YAEE,CAAA,iBACA,CAAA,iBAGF,iBACE,CAAA,qCAGF,eAEE,CAAA,eAIJ,YACE,CAAA,OACA,CAAA,sBACA,CAAA,6BAEA,MACE,CAAA,gBAIJ,mBACE,CAAA,kBACA,CAAA,OACA,CAAA,gBACA,CAAA,iBACA,CAAA,wBACA,CAAA,oDACA,CAAA,aACA,CAAA,cACA,CAAA,eACA,CAAA,cACA,CAAA,kBACA,CAAA,kBACA,CAAA,eACA,CAAA,kBAEA,cACE,CAAA,sBAGF,oDACE,CAAA,UACA,CAAA,oBACA,CAAA,yBAGF,UACE,CAAA,WACA,CAAA,8BAGF,oBACE,CAAA,oDACA,CAAA,aACA,CAAA,oCAEA,oDACE,CAAA,UACA,CAAA,oBACA,CAAA,8BAIJ,oBACE,CAAA,oDACA,CAAA,aACA,CAAA,oCAEA,oDACE,CAAA,UACA,CAAA,oBACA,CAAA,gBAMN,eAtnES,CAAA,YAwnEP,CAAA,gBACA,CAAA,iBACA,CAAA,oCACA,CAAA,qBAEA,cACE,CAAA,4BAGF,kBACE,CAAA,YACA,CAAA,mCAEA,WACE,CAAA,mBACA,CAAA,sBACA,CAAA,qBACA,CAAA,kBACA,CAAA,mCAGF,wBACE,CAAA,eAMN,cACE,CAAA,KACA,CAAA,MACA,CAAA,UACA,CAAA,WACA,CAAA,0BACA,CAAA,YACA,CAAA,YACA,CAAA,8BAEA,iBACE,CAAA,OACA,CAAA,QACA,CAAA,+BACA,CAAA,eAlqEK,CAAA,YAoqEL,CAAA,kBACA,CAAA,gBACA,CAAA,SACA,CAAA,sCACA,CAAA,4CAEA,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,kBACA,CAAA,mDAEA,cACE,CAAA,eACA,CAAA,qCAIJ,cACE,CAAA,aACA,CAAA,cACA,CAAA,WACA,CAAA,2CAEA,UAtrEI,CAAA,iBA8rEV,kBACE,CAAA,mBAIA,wBACE,CAAA,eA1sEK,CAAA,mBA4sEL,CAAA,WACA,CAAA,UACA,CAAA,kBACA,CAAA,sBACA,CAAA,YACA,CAAA,iBACA,CAAA,kBACA,CAAA,cACA,CAAA,yBAEA,kBAvtES,CAAA,oBANF,CAAA,iBAwuET,aACE,CAAA,oBACA,CAAA,oCAGF,YACE,CAAA,6BACA,CAAA,mCAGF,YACE,CAAA,WACA,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,cACA,CAAA,eAjvEK,CAAA,wBAmvEL,CAAA,aACA,CAAA,iBACA,CAAA,yCAEA,kBACE,CAAA,UAxvEG,CAAA,6BA6vEP,wBACE,CAAA,4CAMF,YACE,CAAA,cACA,CAAA,OACA,CAAA,kBACA,CAAA,iDAEA,mBACE,CAAA,kBACA,CAAA,gBACA,CAAA,mBACA,CAAA,cACA,CAAA,eACA,CAAA,aA/wEE,CAAA,kBAixEF,CAAA,wBACA,CAAA,kDAIJ,eAvxEO,CAAA,kBAyxEL,CAAA,oCACA,CAAA,YACA,CAAA,kBACA,CAAA,uCAGF,YACE,CAAA,QACA,CAAA,sBACA,CAAA,kCAGF,aACE,CAAA,WACA,CAAA,6CAGF,gBACE,CAAA,oCAGF,WACE,CAAA,cACA,CAAA,kBACA,CAAA,wBACA,CAAA,kBACA,CAAA,YACA,CAAA,gDAEA,kBACE,CAAA,0CAGF,aACE,CAAA,eACA,CAAA,iBACA,CAAA,cACA,CAAA,aACA,CAAA,kGAGF,UAEE,CAAA,wBACA,CAAA,iBACA,CAAA,gBACA,CAAA,cACA,CAAA,+BACA,CAAA,eAz0EG,CAAA,8GA40EH,YACE,CAAA,oBAp1EG,CAAA,yCAs1EH,CAAA,6CAIJ,gBACE,CAAA,eACA,CAAA,yCAGF,UACE,CAAA,sBACA,CAAA,iBACA,CAAA,mDAGF,UACE,CAAA,kBACA,CAAA,2CAIJ,eACE,CAAA,kDAEA,eACE,CAAA,yDAGF,YACE,CAAA,kBACA,CAAA,6BACA,CAAA,QACA,CAAA,yDAGF,qBACE,CAAA,2DAGF,UAh3EM,CAAA,oBAk3EJ,CAAA,eACA,CAAA,kBACA,CAAA,iEAEA,yBACE,CAAA,6EAIJ,eACE,CAAA,sBAKN,YACE,CAAA,cACA,CAAA,aACA,CAAA,kBACA,CAAA,aA14EM,CAAA,cA44EN,CAAA,oBAGF,kBACE,CAAA,oBAGF,kBACE,CAAA,oBAGF,wBACE,CAAA,kBACA,CAAA,iBACA,CAAA,gBACA,CAAA,iBACA,CAAA,+BAEA,eACE,CAAA,2BAGF,aACE,CAAA,aAl6EQ,CAAA,cAo6ER,CAAA,eACA,CAAA,iBACA,CAAA,0BAGF,aACE,CAAA,UACA,CAAA,cACA,CAAA,gBACA,CAAA,oBAIJ,kBACE,CAAA,+BAEA,eACE,CAAA,wCAGF,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,QACA,CAAA,iBACA,CAAA,cACA,CAAA,+CAEA,aAh8EQ,CAAA,eAk8EN,CAAA,6CAGF,aACE,CAAA,cACA,CAAA,eACA,CAAA,kBACA,CAAA,0BAIJ,aACE,CAAA,cACA,CAAA,UACA,CAAA,cACA,CAAA,mBAIJ,UACE,CAAA,WACA,CAAA,mBACA,CAAA,kBACA,CAAA,eACA,CAAA,wBAEA,aACE,CAAA,WACA,CAAA,2DACA,CAAA,eAIJ,kBACE,CAAA,eAGF,wBACE,CAAA,iBACA,CAAA,kBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0BAEA,eACE,CAAA,6BAGF,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,OACA,CAAA,iBACA,CAAA,oCAEA,aAz/EQ,CAAA,cA2/EN,CAAA,eACA,CAAA,mCAGF,aACE,CAAA,cACA,CAAA,kBACA,CAAA,oBAIJ,aACE,CAAA,kBACA,CAAA,wBACA,CAAA,iBACA,CAAA,eACA,CAAA,aACA,CAAA,cACA,CAAA,eACA,CAAA,8BAGF,aACE,CAAA,aACA,CAAA,cACA,CAAA,iBACA,CAAA,0BAIJ,uCAEI,qBACE,CAAA,oCAGF,UACE,CAAA,aACA,CAAA,CAAA,+FAMN,qBAEE,CAAA,cACA,CAAA,+IAGF,qBA/iFS,CAAA,wBAkjFP,CAAA,iBACA,CAAA,eACA,CAAA,YACA,CAAA,kBACA,CAAA,gBACA,CAAA,eACA,CAAA,0CACA,CAAA,cACA,CAAA,yMAGF,cAEE,CAAA,eACA,CAAA,aACA,CAAA,+MAGF,aAEE,CAAA,mMAGF,WAEE,CAAA,SACA,CAAA,4VAGF,oBAtlFW,CAAA,yCA2lFT,CAAA,SACA,CAAA,2GAGF,oBArlFU,CAAA,yBAwlFR,CAAA,cACA,CAAA,yKAGF,gBAEE,CAAA,iBACA,CAAA,wBACA,CAAA,cACA,CAAA,mMAGF,wBA9mFW,CAAA,UAOF,CAAA,yBAgnFT,SACE,2BACE,CAAA,qBAEA,uBACE,CAAA,cAIJ,wBACE,CAAA,CAAA,qBAOJ,YACE,CAAA,qBACA,CAAA,QACA,CAAA,eACA,CAAA,qBAGF,cACE,CAAA,eACA,CAAA,wCAEA,cACE,CAAA,sDAEA,eACE,CAAA,0EAEA,eACE,CAAA,wCAKN,gBACE,CAAA,UACA,CAAA,WACA,CAAA,wBACA,CAAA,iBACA,CAAA,eACA,CAAA,aACA,CAAA,mBACA,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,kBACA,CAAA,8CAEA,kBACE,CAAA,oBACA,CAAA,mFAIJ,YACE,CAAA,2CAGF,YACE,CAAA,kBACA,CAAA,cACA,CAAA,QACA,CAAA,iBACA,CAAA,+BACA,CAAA,eACA,CAAA,iDAEA,cACE,CAAA,eACA,CAAA,aACA,CAAA,mBACA,CAAA,kBACA,CAAA,OACA,CAAA,QACA,CAAA,kBACA,CAAA,uEAGF,cACE,CAAA,kIAGF,WAEE,CAAA,WACA,CAAA,4IAGF,WAEE,CAAA,eACA,CAAA,kDAIJ,QACE,CAAA,cACA,CAAA,aACA,CAAA,eACA,CAAA,kBACA,CAAA,2CAGF,gBACE,CAAA,mBACA,CAAA,kBACA,CAAA,OACA,CAAA,WACA,CAAA,cACA,CAAA,iBACA,CAAA,wBACA,CAAA,kBACA,CAAA,aACA,CAAA,cACA,CAAA,eACA,CAAA,cACA,CAAA,kBACA,CAAA,iDAEA,kBACE,CAAA,oBACA,CAAA,oDAGF,UACE,CAAA,WACA,CAAA,+CAIJ,WACE,CAAA,eACA,CAAA,eACA,CAAA,WACA,CAAA,cACA,CAAA,cACA,CAAA,0FAGF,YAEE,CAAA,kBACA,CAAA,cACA,CAAA,QACA,CAAA,iBACA,CAAA,+BACA,CAAA,eACA,CAAA,8CAGF,gBACE,CAAA,mBACA,CAAA,kBACA,CAAA,OACA,CAAA,WACA,CAAA,cACA,CAAA,iBACA,CAAA,wBACA,CAAA,kBACA,CAAA,aACA,CAAA,cACA,CAAA,eACA,CAAA,cACA,CAAA,kBACA,CAAA,oDAEA,kBACE,CAAA,oBACA,CAAA,uDAGF,UACE,CAAA,kBACA,CAAA,6DAIJ,eACE,CAAA,KACA,CAAA,SACA,CAAA,mCACA,CAAA,wBACA,CAAA,0CACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,iBACA,CAAA,kBACA,CAAA,wIAGF,uBAEE,CAAA,kRAGF,cAIE,CAAA,kBACA,CAAA,eACA,CAAA,wIAGF,aAEE,CAAA,eACA,CAAA,sBACA,CAAA,iBACA,CAAA,8SAGF,WAIE,CAAA,iBACA,CAAA,UACA,CAAA,OACA,CAAA,0BACA,CAAA,UACA,CAAA,WACA,CAAA,mBACA,CAAA,cACA,CAAA,eACA,CAAA,gBACA,CAAA,iBACA,CAAA,aACA,CAAA,kBACA,CAAA,kTAGF,WAIE,CAAA,UACA,CAAA,kBACA,CAAA,sTAGF,WAIE,CAAA,UACA,CAAA,kBACA,CAAA,4LAGF,UAIE,CAAA,WACA,CAAA,cACA,CAAA,gDAGF,YACE,CAAA,oCAGF,iBACE,CAAA,mBACA,CAAA,4BACA,CAAA,8BAGF,cACE,CAAA,aACA,CAAA,4CAGF,QACE,CAAA,SACA,CAAA,0BACA,CAAA,YACA,CAAA,kBACA,CAAA,OACA,CAAA,uDAEA,0BACE,CAAA,kEAEA,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,sBACA,CADA,iBACA,CAAA,WACA,CAAA,cACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,eACA,CAAA,aACA,CAAA,oBACA,CAAA,aACA,CAAA,kBACA,CAAA,wEAEA,kBACE,CAAA,aACA,CAAA,oBACA,CAAA,kJAIJ,cAEE,CAAA,yEAGF,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,2EAGF,WACE,CAAA,cACA,CAAA,mBACA,CAAA,mBAMR,YACE,CAAA,qBACA,CAAA,OACA,CAAA,uBAGF,wBACE,CAAA,iBACA,CAAA,eACA,CAAA,eACA,CAAA,+BAEA,cACE,CAAA,gBACA,CAAA,cACA,CAAA,eACA,CAAA,aACA,CAAA,eACA,CAAA,uDAEA,YACE,CAAA,sCAGF,WACE,CAAA,WACA,CAAA,cACA,CAAA,aACA,CAAA,cACA,CAAA,4CAIJ,WACE,CAAA,oBAIJ,4BACE,CAAA,gBACA,CAAA,gBACA,CAAA,eACA,CAAA,oCAEA,YACE,CAAA,kBACA,CAAA,OACA,CAAA,cACA,CAAA,aACA,CAAA,iBACA,CAAA,+CAEA,eACE,CAAA,yDAGF,QACE,CAAA,sBAKN,eACE,CAAA,kBACA,CAAA,oCACA,CAAA,eACA,CAAA,4BAGF,iBACE,CAAA,+BACA,CAAA,cACA,CAAA,eACA,CAAA,aACA,CAAA,YACA,CAAA,kBACA,CAAA,OACA,CAAA,oDAEA,mBACE,CAAA,kBACA,CAAA,OACA,CAAA,4BAIJ,aACE,CAAA,uBAGF,QACE,CAAA,UACA,CAAA,kBACA,CAAA,gCAEA,gBACE,CAAA,+BACA,CAAA,cACA,CAAA,aACA,CAAA,qBACA,CAAA,kBACA,CAAA,mCAGF,gBACE,CAAA,kBACA,CAAA,oCAGF,kBACE,CAAA,eACA,CAAA,sBACA,CAAA,gNAGF,iBAIE,CAAA,gFAGF,6BAEE,CAAA,eACA,CAAA,sBACA,CAAA,kJAGF,mBAGE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,cACA,CAAA,kBACA,CAAA,+CAGF,wBACE,CAAA,kBACA,CAAA,aACA,CAAA,qDAEA,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,mGAIJ,wBAEE,CAAA,kBACA,CAAA,aACA,CAAA,+GAEA,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,wDAIJ,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,cACA,CAAA,kBACA,CAAA,wBACA,CAAA,kBACA,CAAA,aACA,CAAA,8DAEA,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,qEAGF,oBACE,CAAA,kBACA,CAAA,aACA,CAAA,2EAEA,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,oDAKN,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,UACA,CAAA,WACA,CAAA,iBACA,CAAA,cACA,CAAA,kBACA,CAAA,wBACA,CAAA,kBACA,CAAA,aACA,CAAA,0DAEA,kBACE,CAAA,UACA,CAAA,oBACA,CAAA,sCAIJ,kBACE,CAAA,oDAGF,aACE,CAAA,uDAGF,kBACE,CAAA,qBAIJ,iBACE,CAAA,wBACA,CAAA,iBACA,CAAA,wBAGF,YACE,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,8BAEA,cACE,CAAA,eACA,CAAA,aACA,CAAA,QACA,CAAA,sCAGF,WACE,CAAA,WACA,CAAA,kBAIJ,cACE,CAAA,aACA,CAAA,kBACA,CAAA,uBAGF,wBACE,CAAA,iBACA,CAAA,gBACA,CAAA,aACA,CAAA,wBAGF,UACE,CAAA,wBACA,CAAA,cACA,CAAA,sDAEA,+BAEE,CAAA,WACA,CAAA,qBACA,CAAA,2BAGF,eACE,CAAA,KACA,CAAA,kBACA,CAAA,aACA,CAAA,eACA,CAAA,oCAGF,eACE,CAAA,eACA,CAAA,kBACA,CAAA,eACA,CAAA,sBACA,CAAA,sCAGF,eACE,CAAA,uBAIJ,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,mBACA,CAAA,eACA,CAAA,cACA,CAAA,eACA,CAAA,sCAEA,kBACE,CAAA,aACA,CAAA,mCAGF,kBACE,CAAA,aACA,CAAA,oEAOJ,eACE,CAAA,0BAGF,wBACE,CAAA,iBACA,CAAA,eACA,CAAA,eACA,CAAA,kCAEA,cACE,CAAA,gBACA,CAAA,cACA,CAAA,eACA,CAAA,aACA,CAAA,eACA,CAAA,0DAEA,YACE,CAAA,yCAGF,WACE,CAAA,WACA,CAAA,cACA,CAAA,aACA,CAAA,cACA,CAAA,+CAIJ,WACE,CAAA,uBAIJ,4BACE,CAAA,gBACA,CAAA,gBACA,CAAA,eACA,CAAA,0CAEA,YACE,CAAA,kBACA,CAAA,OACA,CAAA,cACA,CAAA,aACA,CAAA,iBACA,CAAA,qDAEA,eACE,CAAA,+DAGF,QACE,CAAA,gDAOJ,kBAEE,CAAA,qCAGF,WACE,CAAA,wCAEA,mCACE,CAAA,gCAIJ,mBACE,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,aACA,CAAA,cACA,CAAA,sCAEA,aACE,CAAA,gCAIJ,mBACE,CAAA,kBACA,CAAA,OACA,CAAA,qCAEA,UACE,CAAA,WACA,CAAA,SACA,CAAA,mBACA,CAAA,kBACA,CAAA,sBACA,CAAA,4BACA,CAAA,uCAEA,aACE,CAAA,wBAUN,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,kBACA,CAAA,2BAEA,QACE,CAAA,cACA,CAAA,eACA,CAAA,aAh4GM,CAAA,yBAq4GV,YACE,CAAA,cACA,CAAA,oBACA,CAAA,QACA,CAAA,kBACA,CAAA,uCAEA,cACE,CAAA,WACA,CAAA,eACA,CAAA,6CAEA,aACE,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,aACA,CAAA,iBACA,CAAA,qDAGF,UACE,CAAA,gBACA,CAAA,wBACA,CAAA,iBACA,CAAA,cACA,CAAA,aAh6GI,CAAA,eAFH,CAAA,2BAq6GD,CAAA,2DAEA,YACE,CAAA,oBA/6GC,CAAA,yCAi7GD,CAAA,2DAIJ,oBACE,CADF,eACE,CAAA,uBACA,CAAA,yLACA,CAAA,2BACA,CAAA,qCACA,CAAA,kBACA,CAAA,4DAGF,aACE,CAAA,YACA,CAAA,OACA,CAAA,cACA,CAAA,mCAMJ,UACE,CAAA,kBAIJ,oBACE,CAAA,eACA,CAAA,iBACA,CAAA,cACA,CAAA,eACA,CAAA,wBACA,CAAA,mBACA,CAAA,0BAGF,kBACE,CAAA,aACA,CAAA,yBAGF,kBACE,CAAA,aACA,CAAA,0BAGF,kBACE,CAAA,aACA,CAAA,oBAIJ,UACE,CAAA,0BACA","file":"style.css","sourcesContent":["*{box-sizing:border-box}body{font-family:\"Roboto\",sans-serif;margin:0;padding:0;font-size:14px;color:#4e5e6a;background:#f4f6f9;max-width:100vw;overflow-x:hidden}.hide{display:none}small{font-size:.75em}.text-right{text-align:right}.text-bold{font-weight:700 !important}.nowrap{white-space:nowrap}body.unlogged{background:#f4f6f9;margin:0;padding:0}.login-container{display:flex;min-height:100vh}.login-brand{flex:0 0 45%;background:linear-gradient(135deg, #1E2A3A 0%, #2C3E57 50%, #6690F4 100%);display:flex;align-items:center;justify-content:center;padding:60px;position:relative;overflow:hidden}.login-brand::before{content:\"\";position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle, rgba(102, 144, 244, 0.15) 0%, transparent 70%);border-radius:50%}.login-brand .brand-content{position:relative;z-index:1;color:#fff;max-width:400px}.login-brand .brand-logo{font-size:48px;font-weight:300;margin-bottom:20px;letter-spacing:-1px}.login-brand .brand-logo strong{font-weight:700}.login-brand .brand-tagline{font-size:18px;opacity:.85;line-height:1.6;margin-bottom:50px}.login-brand .brand-features .feature{display:flex;align-items:center;gap:15px;margin-bottom:20px;opacity:.8}.login-brand .brand-features .feature i{font-size:20px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:hsla(0,0%,100%,.1);border-radius:10px}.login-brand .brand-features .feature span{font-size:15px}.login-form-wrapper{flex:1;display:flex;align-items:center;justify-content:center;padding:60px;background:#fff}.login-box{width:100%;max-width:420px}.login-box .login-header{margin-bottom:35px}.login-box .login-header h1{font-size:28px;font-weight:700;color:#2d3748;margin:0 0 8px}.login-box .login-header p{color:#718096;font-size:15px;margin:0}.login-box .form-group{margin-bottom:20px}.login-box .form-group label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.login-box .input-with-icon{position:relative}.login-box .input-with-icon i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px}.login-box .input-with-icon .form-control{padding-left:42px}.login-box .form-control{width:100%;height:46px;border:2px solid #e2e8f0;border-radius:8px;padding:0 14px;font-size:14px;font-family:\"Roboto\",sans-serif;color:#2d3748;transition:border-color .3s,box-shadow .3s}.login-box .form-control::placeholder{color:#cbd5e0}.login-box .form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.15);outline:none}.login-box .form-error{color:#c00;font-size:12px;margin-top:4px}.login-box .checkbox-group .checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#718096;font-weight:400}.login-box .checkbox-group .checkbox-label input[type=checkbox]{width:16px;height:16px;accent-color:#6690f4}.login-box .btn-login{width:100%;height:48px;font-size:15px;font-weight:600;border-radius:8px;display:flex;align-items:center;justify-content:center;gap:8px}.login-box .btn-login.disabled{opacity:.7;pointer-events:none}.login-box .alert{display:none;padding:12px 16px;border-radius:8px;font-size:13px;margin-bottom:20px}.login-box .alert.alert-danger{background:#fff5f5;color:#c00;border:1px solid #fed7d7}.login-box .alert.alert-success{background:#f0fff4;color:#276749;border:1px solid #c6f6d5}@media(max-width: 768px){.login-brand{display:none}.login-form-wrapper{padding:30px 20px}}body.logged{display:flex;min-height:100vh;background:#f4f6f9}.sidebar{width:260px;min-height:100vh;background:#1e2a3a;position:fixed;top:0;left:0;z-index:1000;display:flex;flex-direction:column;transition:width .3s ease;overflow:hidden}.sidebar.collapsed{width:70px}.sidebar.collapsed .sidebar-header{padding:16px 0;justify-content:center}.sidebar.collapsed .sidebar-header .sidebar-logo{display:none}.sidebar.collapsed .sidebar-header .sidebar-toggle i{transform:rotate(180deg)}.sidebar.collapsed .sidebar-nav ul li a{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li a span{display:none}.sidebar.collapsed .sidebar-nav ul li a i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label span{display:none}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-footer .sidebar-user{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-user .user-info{display:none}.sidebar.collapsed .sidebar-footer .sidebar-logout{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-logout span{display:none}.sidebar.collapsed .nav-divider{margin:8px 15px}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 16px;border-bottom:1px solid hsla(0,0%,100%,.08)}.sidebar-header .sidebar-logo a{color:#fff;text-decoration:none;font-size:24px;font-weight:300;letter-spacing:-0.5px}.sidebar-header .sidebar-logo a strong{font-weight:700}.sidebar-header .sidebar-toggle{background:none;border:none;color:#a8b7c7;cursor:pointer;padding:6px;border-radius:6px;transition:all .3s}.sidebar-header .sidebar-toggle:hover{background:hsla(0,0%,100%,.08);color:#fff}.sidebar-header .sidebar-toggle i{transition:transform .3s}.sidebar-nav{flex:1;padding:12px 0;overflow-y:auto}.sidebar-nav ul{list-style:none;margin:0;padding:0}.sidebar-nav ul li.nav-group{margin-bottom:4px}.sidebar-nav ul li.nav-group .nav-group-label{display:flex;align-items:center;padding:11px 20px;color:#d5deea;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li.nav-group .nav-group-label i{width:20px;text-align:center;margin-right:12px;font-size:14px;color:#b6c4d3}.sidebar-nav ul li.nav-group .nav-submenu{margin:0;padding:0;list-style:none}.sidebar-nav ul li.nav-group .nav-submenu li a{padding-left:44px}.sidebar-nav ul li.nav-group.active>.nav-group-label{color:#fff;background:rgba(102,144,244,.12);border-left-color:#6690f4}.sidebar-nav ul li.nav-group.active>.nav-group-label i{color:#6690f4}.sidebar-nav ul li.nav-divider{height:1px;background:hsla(0,0%,100%,.08);margin:8px 20px}.sidebar-nav ul li a{display:flex;align-items:center;padding:11px 20px;color:#a8b7c7;text-decoration:none;font-size:14px;transition:all .2s;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li a i{width:20px;text-align:center;margin-right:12px;font-size:15px}.sidebar-nav ul li a:hover{background:#263548;color:#fff}.sidebar-nav ul li.active>a{background:rgba(102,144,244,.15);color:#fff;border-left-color:#6690f4}.sidebar-nav ul li.active>a i{color:#6690f4}.badge-alerts-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:8px;border-radius:50%;font-size:11px;font-weight:600;line-height:1;background:#fff;color:#6690f4}.sidebar-footer{padding:16px 20px;border-top:1px solid hsla(0,0%,100%,.08)}.sidebar-footer .sidebar-user{display:flex;align-items:center;gap:10px;margin-bottom:12px}.sidebar-footer .sidebar-user .user-avatar{width:34px;height:34px;border-radius:50%;background:rgba(102,144,244,.2);display:flex;align-items:center;justify-content:center;color:#6690f4;font-size:14px;flex-shrink:0}.sidebar-footer .sidebar-user .user-info{overflow:hidden}.sidebar-footer .sidebar-user .user-info .user-email{color:#a8b7c7;font-size:12px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-footer .sidebar-logout{display:flex;align-items:center;gap:8px;color:#e53e3e;text-decoration:none;font-size:13px;padding:8px 10px;border-radius:6px;transition:all .2s}.sidebar-footer .sidebar-logout i{font-size:14px}.sidebar-footer .sidebar-logout:hover{background:rgba(229,62,62,.1)}.main-wrapper{margin-left:260px;flex:1;min-height:100vh;transition:margin-left .3s ease;display:flex;flex-direction:column}.main-wrapper.expanded{margin-left:70px}.topbar{height:56px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;padding:0 25px;position:sticky;top:0;z-index:500}.topbar .topbar-toggle{background:none;border:none;color:#4e5e6a;cursor:pointer;padding:8px 10px;border-radius:6px;font-size:16px;margin-right:15px;transition:all .2s}.topbar .topbar-toggle:hover{background:#f4f6f9}.topbar .topbar-breadcrumb{font-size:16px;font-weight:600;color:#2d3748}.content{flex:1;padding:25px}.app-alert{background:#ebf8ff;border:1px solid #bee3f8;color:#2b6cb0;padding:12px 16px;border-radius:8px;margin-bottom:20px;font-size:14px}.btn{padding:10px 20px;transition:all .2s ease;color:#fff;border:0;border-radius:6px;cursor:pointer;display:inline-flex;text-decoration:none;gap:6px;justify-content:center;align-items:center;font-size:14px;font-family:\"Roboto\",sans-serif;font-weight:500}.btn.btn_small,.btn.btn-xs,.btn.btn-sm{padding:5px 10px;font-size:12px}.btn.btn_small i,.btn.btn-xs i,.btn.btn-sm i{font-size:11px}.btn.btn-success{background:#57b951}.btn.btn-success:hover{background:#4a9c3b}.btn.btn-primary{background:#6690f4}.btn.btn-primary:hover{background:#3164db}.btn.btn-danger{background:#c00}.btn.btn-danger:hover{background:#b30000}.btn.disabled{opacity:.6;pointer-events:none}.form-control{border:1px solid #e2e8f0;border-radius:6px;height:38px;width:100%;padding:6px 12px;font-family:\"Roboto\",sans-serif;font-size:14px;color:#2d3748;transition:border-color .2s,box-shadow .2s}.form-control option{padding:5px}.form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:none}input[type=checkbox]{border:1px solid #e2e8f0}table{border-collapse:collapse;font-size:13px}.table{width:100%}.table th,.table td{border:1px solid #e2e8f0;padding:8px 10px}.table th{background:#f7fafc;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#718096}.table td.center{text-align:center}.table td.left{text-align:left}.table.table-sm td{padding:5px !important}.table input.form-control{font-size:13px;height:32px}.clients-table-wrap,.campaigns-table-wrap,.products-table-wrap,.logs-table-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;max-width:100%;-ms-overflow-style:none;scrollbar-width:none}.clients-table-wrap::-webkit-scrollbar,.campaigns-table-wrap::-webkit-scrollbar,.products-table-wrap::-webkit-scrollbar,.logs-table-wrap::-webkit-scrollbar{display:none}.clients-table-wrap .table,.campaigns-table-wrap .table,.products-table-wrap .table,.logs-table-wrap .table{margin:0;width:100% !important}.clients-table-wrap .table thead th,.campaigns-table-wrap .table thead th,.products-table-wrap .table thead th,.logs-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 16px;white-space:nowrap}.clients-table-wrap .table tbody td,.campaigns-table-wrap .table tbody td,.products-table-wrap .table tbody td,.logs-table-wrap .table tbody td{padding:10px 16px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-table-wrap .table tbody tr:hover td,.campaigns-table-wrap .table tbody tr:hover td,.products-table-wrap .table tbody tr:hover td,.logs-table-wrap .table tbody tr:hover td{background:#f8fafc}.clients-table-wrap .dt-layout-row,.campaigns-table-wrap .dt-layout-row,.products-table-wrap .dt-layout-row,.logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.clients-table-wrap .dt-layout-row:first-child,.campaigns-table-wrap .dt-layout-row:first-child,.products-table-wrap .dt-layout-row:first-child,.logs-table-wrap .dt-layout-row:first-child{display:none}.clients-table-wrap .dt-info,.campaigns-table-wrap .dt-info,.products-table-wrap .dt-info,.logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.clients-table-wrap .dt-paging .pagination,.campaigns-table-wrap .dt-paging .pagination,.products-table-wrap .dt-paging .pagination,.logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.clients-table-wrap .dt-paging .pagination .page-item .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link,.products-table-wrap .dt-paging .pagination .page-item .page-link,.logs-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:fit-content;height:36px;padding:0 14px;border-radius:8px;font-size:13px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;cursor:pointer;transition:all .2s;text-decoration:none;line-height:1;white-space:nowrap}.clients-table-wrap .dt-paging .pagination .page-item .page-link:hover,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover,.products-table-wrap .dt-paging .pagination .page-item .page-link:hover,.logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.clients-table-wrap .dt-paging .pagination .page-item.active .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link,.products-table-wrap .dt-paging .pagination .page-item.active .page-link,.logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.clients-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.products-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.clients-table-wrap .dt-processing,.campaigns-table-wrap .dt-processing,.products-table-wrap .dt-processing,.logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.card{background:#fff;padding:20px;border-radius:8px;color:#2d3748;font-size:14px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.card.mb25{margin-bottom:20px}.card .card-header{font-weight:600;font-size:15px}.card .card-body{padding-top:12px}.card .card-body table th,.card .card-body table td{font-size:13px}.card .card-body table th.bold,.card .card-body table td.bold{font-weight:600}.card .card-body table th.text-right,.card .card-body table td.text-right{text-align:right}.card .card-body table th.text-center,.card .card-body table td.text-center{text-align:center}.action_menu{display:flex;margin-bottom:20px;gap:12px}.action_menu .btn{padding:8px 16px}.action_menu .btn.btn_add{background:#57b951}.action_menu .btn.btn_add:hover{background:#4a9c3b}.action_menu .btn.btn_cancel{background:#c00}.action_menu .btn.btn_cancel:hover{background:#b30000}.settings-tabs{display:flex;gap:8px;margin-bottom:18px}.settings-tabs .settings-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;text-decoration:none;color:#6b7a89;background:#e9eef5;border:1px solid #d8e0ea;font-size:13px;font-weight:600;transition:all .2s}.settings-tabs .settings-tab:hover{color:#2d3748;background:#dde6f2}.settings-tabs .settings-tab.active{color:#fff;background:#6690f4;border-color:#6690f4}.settings-card{background:#fff;border-radius:10px;padding:28px;box-shadow:0 1px 4px rgba(0,0,0,.06)}.settings-card .settings-card-header{display:flex;align-items:center;gap:14px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.settings-card .settings-card-header .settings-card-icon{width:44px;height:44px;border-radius:10px;background:rgb(225.706097561,233.7475609756,252.893902439);color:#6690f4;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.settings-card .settings-card-header h3{margin:0;font-size:17px;font-weight:600;color:#2d3748}.settings-card .settings-card-header small{color:#8899a6;font-size:13px}.settings-card .settings-field{margin-bottom:18px}.settings-card .settings-field label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.settings-card .settings-input-wrap{position:relative}.settings-card .settings-input-wrap .settings-input-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px;pointer-events:none}.settings-card .settings-input-wrap .form-control{padding-left:38px}.settings-card .settings-input-wrap .settings-toggle-pw{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:none;border:none;color:#a0aec0;cursor:pointer;padding:6px 10px;font-size:14px;transition:color .2s}.settings-card .settings-input-wrap .settings-toggle-pw:hover{color:#6690f4}.settings-card .settings-field .settings-toggle-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:14px;font-weight:500;user-select:none;margin-bottom:0;width:100%}.settings-card .settings-field .settings-toggle-label .settings-toggle-text{flex:1 1 auto;min-width:0;line-height:1.35}.settings-card .settings-toggle-checkbox{display:none}.settings-card .settings-toggle-checkbox+.settings-toggle-switch{display:inline-block;position:relative;width:44px;height:24px;background:#ccc;border-radius:12px;transition:background .2s;flex-shrink:0}.settings-card .settings-toggle-checkbox+.settings-toggle-switch::after{content:\"\";position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch{background:#22c55e}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch::after{transform:translateX(20px)}.settings-card .settings-fields-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}@media(max-width: 768px){.settings-card .settings-fields-grid{grid-template-columns:1fr}}.settings-card .settings-alert-error{display:flex;align-items:center;gap:10px;background:#fff5f5;color:#c00;border:1px solid #fed7d7;border-radius:8px;padding:12px 16px;margin-bottom:20px;font-size:13px}.settings-card .settings-alert-error i{font-size:16px;flex-shrink:0}.clients-page .clients-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.clients-page .clients-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.clients-page .clients-header h2 i{color:#6690f4;margin-right:8px}.clients-page .clients-table-wrap .table .client-id{color:#8899a6;font-size:13px;font-weight:600}.clients-page .clients-table-wrap .table .client-name{font-weight:600;color:#2d3748}.clients-page .badge-id{display:inline-block;background:#eef2ff;color:#6690f4;font-size:13px;font-weight:600;padding:4px 10px;border-radius:6px;font-family:monospace}.clients-page .actions-cell{text-align:center;white-space:nowrap}.clients-page .btn-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s;margin:0 2px}.clients-page .btn-icon.btn-icon-edit{background:#eef2ff;color:#6690f4}.clients-page .btn-icon.btn-icon-edit:hover{background:#6690f4;color:#fff}.clients-page .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.clients-page .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.clients-page .btn-icon.btn-icon-sync{background:#f0fdf4;color:#16a34a}.clients-page .btn-icon.btn-icon-sync:hover{background:#16a34a;color:#fff}.clients-page .btn-icon.btn-icon-sync:disabled{opacity:.7;cursor:wait}.clients-page .btn-icon.btn-icon-sync.is-queued{background:#fef3c7;color:#d97706}.clients-page .client-sync-bars{display:flex;flex-direction:column;gap:4px}.clients-page .client-sync-row{display:flex;align-items:center;gap:4px}.clients-page .client-sync-label{font-size:11px;font-weight:600;color:#8899a6;width:18px;flex-shrink:0}.clients-page .client-sync-track{flex:1;height:6px;border-radius:999px;background:#e9eef5;overflow:hidden}.clients-page .client-sync-fill{height:100%;border-radius:999px;background:#cbd5e0;transition:width .4s ease}.clients-page .client-sync-fill.is-active{background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.clients-page .client-sync-fill.is-done{background:#57b951}.clients-page .client-sync-pct{font-size:11px;font-weight:600;color:#8899a6;width:32px;text-align:right;flex-shrink:0}.clients-page .empty-state{text-align:center;padding:50px 20px !important;color:#a0aec0}.clients-page .empty-state i{font-size:40px;margin-bottom:12px;display:block}.clients-page .empty-state p{margin:0;font-size:15px}.btn-secondary{background:#e2e8f0;color:#2d3748;border:none;padding:8px 18px;border-radius:6px;font-size:14px;cursor:pointer;transition:background .2s}.btn-secondary:hover{background:#cbd5e0}.campaigns-page{max-width:100%;overflow-x:hidden;width:100%}.campaigns-page .campaigns-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.campaigns-page .campaigns-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.campaigns-page .campaigns-header h2 i{color:#6690f4;margin-right:8px}.campaigns-page .campaigns-filters{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:20px}.campaigns-page .campaigns-filters .filter-group{flex:1;min-width:0}.campaigns-page .campaigns-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.campaigns-page .campaigns-filters .filter-group label i{margin-right:4px}.campaigns-page .campaigns-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.campaigns-page .campaigns-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .filter-group .filter-with-action{display:flex;align-items:center;gap:8px}.campaigns-page .campaigns-filters .filter-group .filter-with-action .form-control{flex:1}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon{flex-shrink:0;width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.campaigns-page .campaigns-filters .filter-group-campaign-multi{flex:2 !important}.campaigns-page .campaigns-filters .campaign-dropdown{flex:1;min-width:0;position:relative}.campaigns-page .campaigns-filters .campaign-dropdown-trigger{width:100%;padding:10px 14px;padding-right:32px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;cursor:pointer;display:flex;align-items:center;transition:border-color .2s;position:relative;min-height:42px;box-sizing:border-box}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text.is-placeholder{color:#8899a6}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-arrow{position:absolute;right:12px;font-size:10px;color:#8899a6;transition:transform .2s}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-trigger{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-arrow{transform:rotate(180deg)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-menu{display:block}.campaigns-page .campaigns-filters .campaign-dropdown-menu{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:100;max-height:280px;overflow-y:auto;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:4px 0}.campaigns-page .campaigns-filters .campaign-dropdown-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:14px;color:#2d3748;margin:0;transition:background .15s}.campaigns-page .campaigns-filters .campaign-dropdown-item:hover{background:#f8fafc}.campaigns-page .campaigns-filters .campaign-dropdown-item.is-checked{background:#eef2ff}.campaigns-page .campaigns-filters .campaign-dropdown-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;flex-shrink:0;accent-color:#6690f4}.campaigns-page .campaigns-filters .campaign-dropdown-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-list-panel{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);margin-bottom:20px;overflow:hidden}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #e2e8f0;gap:12px}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left{display:flex;align-items:center;gap:8px;font-size:13px;color:#4e5e6a}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left input[type=checkbox]{width:16px;height:16px;cursor:pointer}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left label{cursor:pointer;user-select:none;margin:0}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left .campaigns-selected-count{margin-left:12px;color:#8899a6}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:hover:not(:disabled){background:#c00;color:#fff}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:disabled{opacity:.4;cursor:not-allowed}.campaigns-page .campaigns-list-panel .campaigns-list-items{display:flex;flex-wrap:wrap;gap:0;padding:8px 8px;max-height:220px;overflow-y:auto}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item{display:flex;align-items:center;gap:8px;padding:6px 12px;margin:2px;border-radius:6px;font-size:13px;color:#2d3748;cursor:pointer;user-select:none;transition:background .15s}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item:hover{background:#f0f4ff}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item input[type=checkbox]{width:15px;height:15px;cursor:pointer;flex-shrink:0}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item .campaigns-list-item-name{white-space:nowrap}.campaigns-page .campaigns-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:20px;min-height:350px;overflow:hidden}.campaigns-page .campaigns-chart-wrap #container{max-width:100%}.campaigns-page .campaigns-table-wrap .table{width:100%}.campaigns-page .delete-history-entry{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .delete-history-entry:hover{background:#c00;color:#fff}.products-page .products-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.products-page .products-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.products-page .products-header h2 i{color:#6690f4;margin-right:8px}.products-page .products-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:20px;margin-bottom:16px}.products-page .products-filters .filter-group{flex:1 1 220px;min-width:0}.products-page .products-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.products-page .products-filters .filter-group label i{margin-right:4px}.products-page .products-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.products-page .products-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.products-page .products-filters .filter-group select.form-control{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.products-page .products-filters .filter-group.filter-group-client,.products-page .products-filters .filter-group.filter-group-campaign,.products-page .products-filters .filter-group.filter-group-ad-group{flex:1 1 260px}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions{display:flex;gap:8px;align-items:center}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions .form-control{flex:1 1 auto;min-width:0}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group{min-width:38px;height:38px;border-radius:6px;margin:0;background:#dc3545;border:1px solid #dc3545;color:#fff;cursor:pointer}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:hover:not(:disabled){background:#bb2d3b;border-color:#bb2d3b;color:#fff}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:disabled{opacity:.45;cursor:default;background:#dc3545;border-color:#dc3545;color:#fff}.products-page .products-filters .filter-group.filter-group-roas{flex:0 0 200px}.products-page .products-filters .filter-group.filter-group-search{flex:1 1 200px}.products-page .products-filters .filter-group.filter-group-cl4{flex:0 0 160px}.products-page .products-filters .filter-group.filter-group-columns{flex:0 0 240px}.products-page .products-scope-alerts{margin-bottom:12px;border:1px solid #fecaca;background:#fef2f2;border-radius:8px;overflow:hidden}.products-page .products-scope-alerts summary{cursor:pointer;list-style:none;padding:10px 12px;font-size:13px;font-weight:600;color:#991b1b;display:flex;align-items:center;gap:8px}.products-page .products-scope-alerts summary::-webkit-details-marker{display:none}.products-page .products-scope-alerts .products-scope-alerts-list{border-top:1px solid #fecaca;background:#fff;max-height:260px;overflow:auto}.products-page .products-scope-alerts .products-scope-alert-item{padding:10px 12px;border-bottom:1px solid #f1f5f9}.products-page .products-scope-alerts .products-scope-alert-item:last-child{border-bottom:none}.products-page .products-scope-alerts .products-scope-alert-meta{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:11px;color:#64748b}.products-page .products-scope-alerts .products-scope-alert-type{display:inline-flex;align-items:center;padding:2px 6px;border-radius:999px;background:#eef2ff;color:#4338ca;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.products-page .products-scope-alerts .products-scope-alert-message{font-size:13px;color:#2d3748;line-height:1.45}.products-page .products-actions{margin-bottom:12px}.products-page .products-actions .btn-danger{padding:7px 14px;font-size:13px;border-radius:6px;border:none;cursor:pointer;transition:all .2s}.products-page .products-actions .btn-danger:disabled{opacity:.4;cursor:default}.products-page .products-table-wrap .table{width:100%}.products-page .products-table-wrap .table input.min_roas,.products-page .products-table-wrap .table input.form-control-sm,.products-page .products-table-wrap .table select.custom_label_4,.products-page .products-table-wrap .table select.form-control-sm{padding:3px 6px;font-size:12px;border:1px solid #e2e8f0;border-radius:4px;background:#fff}.products-page .delete-product{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.products-page .delete-product:hover{background:#c00;color:#fff}.products-page .edit-product-title{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#eef2ff;color:#6690f4;transition:all .2s}.products-page .edit-product-title:hover{background:#6690f4;color:#fff}.desc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.desc-header label{margin:0}.desc-tabs{display:flex;gap:2px;background:#eee;border-radius:6px;padding:2px}.desc-tab{border:none;background:rgba(0,0,0,0);padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;color:#666;transition:all .15s ease}.desc-tab i{margin-right:4px}.desc-tab.active{background:#fff;color:#333;box-shadow:0 1px 3px rgba(0,0,0,.12);font-weight:500}.desc-tab:hover:not(.active){color:#333}.desc-wrap{flex:1;min-width:0}.desc-preview ul,.desc-preview ol{margin:6px 0;padding-left:20px}.desc-preview li{margin-bottom:3px}.desc-preview b,.desc-preview strong{font-weight:600}.input-with-ai{display:flex;gap:8px;align-items:flex-start}.input-with-ai .form-control{flex:1}.btn-ai-suggest{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:8px;border:1px solid #c084fc;background:linear-gradient(135deg, #F3E8FF, #EDE9FE);color:#7c3aed;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;min-height:38px}.btn-ai-suggest i{font-size:13px}.btn-ai-suggest:hover{background:linear-gradient(135deg, #7C3AED, #6D28D9);color:#fff;border-color:#6d28d9}.btn-ai-suggest:disabled{opacity:.7;cursor:wait}.btn-ai-suggest.btn-ai-claude{border-color:#d97706;background:linear-gradient(135deg, #FEF3C7, #FDE68A);color:#92400e}.btn-ai-suggest.btn-ai-claude:hover{background:linear-gradient(135deg, #D97706, #B45309);color:#fff;border-color:#b45309}.btn-ai-suggest.btn-ai-gemini{border-color:#4285f4;background:linear-gradient(135deg, #E8F0FE, #D2E3FC);color:#1a73e8}.btn-ai-suggest.btn-ai-gemini:hover{background:linear-gradient(135deg, #4285F4, #1A73E8);color:#fff;border-color:#1a73e8}.form_container{background:#fff;padding:25px;max-width:1300px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.form_container.full{max-width:100%}.form_container .form_group{margin-bottom:12px;display:flex}.form_container .form_group>.label{width:300px;display:inline-flex;align-items:flex-start;justify-content:right;padding-right:12px}.form_container .form_group .input{width:calc(100% - 300px)}.default_popup{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.45);display:none;z-index:2000}.default_popup .popup_content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);background:#fff;padding:25px;border-radius:10px;max-width:1140px;width:95%;box-shadow:0 20px 60px rgba(0,0,0,.15)}.default_popup .popup_content .popup_header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.default_popup .popup_content .popup_header .title{font-size:18px;font-weight:600}.default_popup .popup_content .close{cursor:pointer;color:#a0aec0;font-size:18px;padding:4px}.default_popup .popup_content .close:hover{color:#c00}.dt-layout-table{margin-bottom:20px}.pagination button{border:1px solid #e2e8f0;background:#fff;display:inline-flex;height:32px;width:32px;align-items:center;justify-content:center;margin:0 2px;border-radius:4px;transition:all .2s;cursor:pointer}.pagination button:hover{background:#f4f6f9;border-color:#6690f4}table#products a{color:inherit;text-decoration:none}table#products .table-product-title{display:flex;justify-content:space-between}table#products .edit-product-title{display:flex;height:25px;align-items:center;justify-content:center;width:25px;cursor:pointer;background:#fff;border:1px solid #cbd5e0;color:#cbd5e0;border-radius:4px}table#products .edit-product-title:hover{background:#cbd5e0;color:#fff}table#products a.custom_name{color:#57b951 !important}.product-history-page .product-history-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.product-history-page .product-history-meta span{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;color:#4e5e6a;background:#eef2ff;border:1px solid #d9e2ff}.product-history-page .product-history-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:16px}.product-history-page .chart-with-form{display:flex;gap:20px;align-items:flex-start}.product-history-page .chart-area{flex:1 1 auto;min-width:0}.product-history-page .product-history-chart{min-height:360px}.product-history-page .comment-form{width:340px;flex:0 0 340px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:14px}.product-history-page .comment-form .form-group{margin-bottom:12px}.product-history-page .comment-form label{display:block;font-weight:600;margin-bottom:6px;font-size:13px;color:#52606d}.product-history-page .comment-form input[type=date],.product-history-page .comment-form textarea{width:100%;border:1px solid #e2e8f0;border-radius:6px;padding:8px 12px;font-size:14px;font-family:\"Roboto\",sans-serif;background:#fff}.product-history-page .comment-form input[type=date]:focus,.product-history-page .comment-form textarea:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.product-history-page .comment-form textarea{min-height:110px;resize:vertical}.product-history-page .comment-form .btn{width:100%;justify-content:center;padding:10px 16px}.product-history-page .comment-form .btn[disabled]{opacity:.6;cursor:not-allowed}.product-history-page .products-table-wrap{overflow-x:auto}.product-history-page .products-table-wrap .table{min-width:980px}.product-history-page .products-table-wrap .comment-cell{display:flex;align-items:center;justify-content:space-between;gap:10px}.product-history-page .products-table-wrap .comment-text{word-break:break-word}.product-history-page .products-table-wrap .delete-comment{color:#c00;text-decoration:none;font-weight:600;white-space:nowrap}.product-history-page .products-table-wrap .delete-comment:hover{text-decoration:underline}.product-history-page .products-table-wrap .dt-paging .pagination .page-item{list-style:none}.cron-status-overview{display:flex;flex-wrap:wrap;gap:10px 20px;margin-bottom:20px;color:#4e5e6a;font-size:13px}.cron-progress-list{margin-bottom:20px}.cron-schedule-list{margin-bottom:20px}.cron-schedule-item{border:1px solid #dfe7f0;background:#f4f8fd;border-radius:8px;padding:9px 12px;margin-bottom:8px}.cron-schedule-item:last-child{margin-bottom:0}.cron-schedule-item strong{display:block;color:#2d3748;font-size:13px;font-weight:700;margin-bottom:2px}.cron-schedule-item small{display:block;color:#678;font-size:12px;line-height:1.35}.cron-progress-item{margin-bottom:14px}.cron-progress-item:last-child{margin-bottom:0}.cron-progress-item .cron-progress-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;font-size:13px}.cron-progress-item .cron-progress-head strong{color:#2d3748;font-weight:600}.cron-progress-item .cron-progress-head span{color:#6b7a89;font-size:12px;font-weight:600;white-space:nowrap}.cron-progress-item small{display:block;margin-top:5px;color:#789;font-size:12px}.cron-progress-bar{width:100%;height:10px;border-radius:999px;background:#e9eef5;overflow:hidden}.cron-progress-bar>span{display:block;height:100%;background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.cron-url-list{margin-bottom:20px}.cron-url-item{border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;padding:10px 12px;margin-bottom:10px}.cron-url-item:last-child{margin-bottom:0}.cron-url-item .cron-url-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.cron-url-item .cron-url-top strong{color:#2d3748;font-size:13px;font-weight:600}.cron-url-item .cron-url-top small{color:#7a8794;font-size:11px;white-space:nowrap}.cron-url-item code{display:block;background:#eef2f7;border:1px solid #dde4ed;border-radius:6px;padding:6px 8px;color:#2e3b49;font-size:12px;overflow-x:auto}.cron-url-item .cron-url-plan{display:block;color:#6c7b8a;font-size:11px;margin-bottom:6px}@media(max-width: 1200px){.product-history-page .chart-with-form{flex-direction:column}.product-history-page .comment-form{width:100%;flex:1 1 auto}}.jconfirm-box .form-group .select2-container,.adspro-dialog-box .form-group .select2-container{width:100% !important;margin-top:8px}.jconfirm-box .select2-container--default .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;min-height:42px;display:flex;align-items:center;padding:4px 12px;box-shadow:none;transition:border-color .2s,box-shadow .2s;font-size:14px}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;line-height:1.4;color:#495057}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder{color:#cbd5e0}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;right:8px}.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,.jconfirm-box .select2-container--default .select2-selection--single:hover,.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single:hover{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:0}.jconfirm-box .select2-container .select2-dropdown,.adspro-dialog-box .select2-container .select2-dropdown{border-color:#e2e8f0;border-radius:0 0 6px 6px;font-size:14px}.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field{padding:6px 10px;border-radius:4px;border:1px solid #e2e8f0;font-size:14px}.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#6690f4;color:#fff}@media(max-width: 992px){.sidebar{transform:translateX(-100%)}.sidebar.mobile-open{transform:translateX(0)}.main-wrapper{margin-left:0 !important}}.campaign-terms-wrap{display:flex;flex-direction:column;gap:20px;margin-top:20px}.campaign-terms-page{max-width:100%;overflow:hidden}.campaign-terms-page .campaigns-filters{flex-wrap:wrap}.campaign-terms-page .campaigns-filters .filter-group{min-width:220px}.campaign-terms-page .campaigns-filters .filter-group.terms-columns-group{min-width:280px}.campaign-terms-page .terms-card-toggle{margin-left:auto;width:28px;height:28px;border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#475569;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-card-toggle:hover{background:#f8fafc;border-color:#cbd5e1}.campaign-terms-page .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap{display:none}.campaign-terms-page .terms-search-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-search-toolbar label{font-size:12px;font-weight:600;color:#475569;display:inline-flex;align-items:center;gap:6px;margin:0;white-space:nowrap}.campaign-terms-page .terms-search-toolbar .terms-search-toolbar-label{min-width:86px}.campaign-terms-page .terms-search-toolbar #terms_min_clicks_all,.campaign-terms-page .terms-search-toolbar #terms_max_clicks_all{width:160px;height:32px}.campaign-terms-page .terms-search-toolbar #terms_min_conversions_all,.campaign-terms-page .terms-search-toolbar #terms_max_conversions_all{width:130px;max-width:130px}.campaign-terms-page .terms-search-selected-label{margin:0;font-size:12px;color:#475569;font-weight:600;white-space:nowrap}.campaign-terms-page .terms-ai-analyze-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-ai-analyze-btn:hover{background:#dbeafe;border-color:#93c5fd}.campaign-terms-page .terms-ai-analyze-btn:disabled{opacity:.6;cursor:wait}.campaign-terms-page .terms-table-search-input{width:200px;min-width:120px;max-width:200px;height:32px;font-size:12px;flex:0 1 200px}.campaign-terms-page .terms-negative-toolbar,.campaign-terms-page .terms-keywords-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #fecaca;background:#fef2f2;color:#dc2626;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-negative-bulk-btn:hover{background:#fee2e2;border-color:#fca5a5}.campaign-terms-page .terms-negative-bulk-btn:disabled{opacity:.5;cursor:not-allowed}.campaign-terms-page table.campaigns-extra-table>thead>tr>th{position:sticky;top:0;z-index:2;background-color:#111827 !important;color:#e5e7eb !important;border-bottom:1px solid #0b1220 !important;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;white-space:nowrap}.campaign-terms-page #terms_search_table thead th .dt-column-order,.campaign-terms-page #terms_negative_table thead th .dt-column-order{display:none !important}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.campaign-terms-page #terms_search_table thead th .dt-column-title,.campaign-terms-page #terms_negative_table thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc::after{content:\"↕\";position:absolute;right:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:999px;font-size:12px;font-weight:700;line-height:16px;text-align:center;color:#e5e7eb;background:#374151}.campaign-terms-page #terms_search_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=ascending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=ascending]::after{content:\"▲\";color:#fff;background:#2563eb}.campaign-terms-page #terms_search_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=descending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=descending]::after{content:\"▼\";color:#fff;background:#2563eb}.campaign-terms-page #terms_negative_select_all,.campaign-terms-page .terms-negative-select-row,.campaign-terms-page #terms_search_select_all,.campaign-terms-page .terms-search-select-row{width:14px;height:14px;cursor:pointer}.campaign-terms-page .dt-layout-row:first-child{display:none}.campaign-terms-page .dt-layout-row{padding:10px 12px;margin:0 !important;border-top:1px solid #f1f5f9}.campaign-terms-page .dt-info{font-size:12px;color:#64748b}.campaign-terms-page .dt-paging .pagination{margin:0;padding:0;list-style:none !important;display:flex;align-items:center;gap:6px}.campaign-terms-page .dt-paging .pagination .page-item{list-style:none !important}.campaign-terms-page .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:fit-content;height:32px;padding:0 12px;border-radius:6px;font-size:12px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;text-decoration:none;line-height:1;white-space:nowrap}.campaign-terms-page .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.previous .page-link,.campaign-terms-page .dt-paging .pagination .page-item.next .page-link{min-width:72px}.campaign-terms-page .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.terms-columns-box{display:flex;flex-direction:column;gap:6px}.terms-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.terms-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.terms-columns-control summary::-webkit-details-marker{display:none}.terms-columns-control summary::after{content:\"▼\";float:right;font-size:10px;color:#64748b;margin-top:2px}.terms-columns-control[open] summary::after{content:\"▲\"}.terms-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:180px;overflow-y:auto}.terms-columns-list .terms-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.terms-columns-list .terms-col-item:last-child{margin-bottom:0}.terms-columns-list .terms-col-item input[type=checkbox]{margin:0}.campaigns-extra-card{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.campaigns-extra-card-title{padding:14px 16px;border-bottom:1px solid #e2e8f0;font-size:13px;font-weight:700;color:#334155;display:flex;align-items:center;gap:8px}.campaigns-extra-card-title .terms-card-title-label{display:inline-flex;align-items:center;gap:8px}.campaigns-extra-table-wrap{overflow:auto}.campaigns-extra-table{margin:0;width:100%;table-layout:fixed}.campaigns-extra-table tbody td{padding:9px 12px;border-bottom:1px solid #f1f5f9;font-size:13px;color:#334155;vertical-align:middle;white-space:nowrap}.campaigns-extra-table td.num-cell{text-align:right;white-space:nowrap}.campaigns-extra-table td.text-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table th.terms-negative-select-cell,.campaigns-extra-table td.terms-negative-select-cell,.campaigns-extra-table th.terms-search-select-cell,.campaigns-extra-table td.terms-search-select-cell{text-align:center}.campaigns-extra-table th.phrase-nowrap,.campaigns-extra-table td.phrase-nowrap{white-space:nowrap !important;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table .terms-add-negative-btn,.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s}.campaigns-extra-table .terms-add-negative-btn{border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-add-negative-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover,.campaigns-extra-table .terms-delete-keyword-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.campaigns-extra-table .terms-toggle-keyword-status-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #fde68a;background:#fffbeb;color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn:hover{background:#d97706;color:#fff;border-color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success{border-color:#a7f3d0;background:#ecfdf5;color:#059669}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success:hover{background:#059669;color:#fff;border-color:#059669}.campaigns-extra-table .terms-change-match-type-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-change-match-type-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table tbody tr:hover{background:#f8fafc}.campaigns-extra-table tbody tr.term-is-negative td{color:#dc2626}.campaigns-extra-table tbody tr.term-is-negative:hover{background:#fef2f2}.campaigns-empty-row{text-align:center;color:#94a3b8 !important;font-style:italic}.terms-ai-modal-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.terms-ai-modal-toolbar label{font-size:12px;font-weight:600;color:#334155;margin:0}.terms-ai-modal-toolbar .form-control{width:200px;height:32px}.terms-ai-summary{font-size:12px;color:#64748b;margin-bottom:10px}.terms-ai-results-wrap{border:1px solid #e2e8f0;border-radius:8px;max-height:420px;overflow:auto}.terms-ai-results-table{width:100%;border-collapse:collapse;font-size:12px}.terms-ai-results-table th,.terms-ai-results-table td{border-bottom:1px solid #eef2f7;padding:8px;vertical-align:middle}.terms-ai-results-table th{position:sticky;top:0;background:#f8fafc;color:#334155;font-weight:700}.terms-ai-results-table td.term-col{min-width:260px;max-width:380px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.terms-ai-results-table td.reason-col{min-width:320px}.terms-ai-action-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.terms-ai-action-badge.action-exclude{background:#fee2e2;color:#b91c1c}.terms-ai-action-badge.action-keep{background:#dcfce7;color:#166534}.products-page .products-filters .filter-group.filter-group-columns{min-width:240px}.products-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.products-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.products-columns-control summary::-webkit-details-marker{display:none}.products-columns-control summary::after{content:\"▼\";float:right;font-size:10px;color:#64748b;margin-top:2px}.products-columns-control[open] summary::after{content:\"▲\"}.products-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:220px;overflow-y:auto}.products-columns-list .products-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.products-columns-list .products-col-item:last-child{margin-bottom:0}.products-columns-list .products-col-item input[type=checkbox]{margin:0}#products th:last-child,#products td:last-child{white-space:nowrap}#products tr.product-row-unavailable{opacity:.45}#products tr.product-row-unavailable td{background-color:#f0f0f0 !important}#products .product-warning-icon{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:#dc2626;font-size:16px}#products .product-warning-icon:hover{color:#b91c1c}#products .products-row-actions{display:inline-flex;align-items:center;gap:4px}#products .products-row-actions .btn{width:38px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:4px !important}#products .products-row-actions .btn i{line-height:1}.logs-page .logs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.logs-page .logs-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.logs-page .logs-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:16px}.logs-page .logs-filters .filter-group{flex:1 1 160px;min-width:0;max-width:220px}.logs-page .logs-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.logs-page .logs-filters .filter-group .form-control{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.logs-page .logs-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.logs-page .logs-filters .filter-group select.form-control{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.logs-page .logs-filters .filter-group.filter-group-buttons{flex:0 0 auto;display:flex;gap:6px;max-width:none}.logs-page .logs-table-wrap .table{width:100%}.logs-page .badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.logs-page .badge-success{background:#d1fae5;color:#065f46}.logs-page .badge-danger{background:#fee2e2;color:#991b1b}.logs-page .badge-warning{background:#fef3c7;color:#92400e}.js-title-alt-apply{color:#000;justify-content:flex-start}","@use \"sass:color\";\r\n// === adsPRO - Nowe style ===\r\n\r\n// --- Zmienne ---\r\n$cPrimary: #6690F4;\r\n$cPrimaryDark: #3164db;\r\n$cSidebarBg: #1E2A3A;\r\n$cSidebarText: #A8B7C7;\r\n$cSidebarHover: #263548;\r\n$cSidebarActive: $cPrimary;\r\n$cContentBg: #F4F6F9;\r\n$cWhite: #FFFFFF;\r\n$cText: #4E5E6A;\r\n$cTextDark: #2D3748;\r\n$cBorder: #E2E8F0;\r\n$cSuccess: #57B951;\r\n$cSuccessDark: #4a9c3b;\r\n$cDanger: #CC0000;\r\n$cDangerDark: #b30000;\r\n$cWarning: #FF8C00;\r\n$cGreenLight: #57b951;\r\n\r\n$sidebarWidth: 260px;\r\n$sidebarCollapsed: 70px;\r\n$topbarHeight: 56px;\r\n$transitionSpeed: 0.3s;\r\n\r\n// --- Reset i baza ---\r\n* {\r\n box-sizing: border-box;\r\n}\r\n\r\nbody {\r\n font-family: \"Roboto\", sans-serif;\r\n margin: 0;\r\n padding: 0;\r\n font-size: 14px;\r\n color: $cText;\r\n background: $cContentBg;\r\n max-width: 100vw;\r\n overflow-x: hidden;\r\n}\r\n\r\n.hide {\r\n display: none;\r\n}\r\n\r\n// --- Typografia ---\r\nsmall {\r\n font-size: .75em;\r\n}\r\n\r\n.text-right {\r\n text-align: right;\r\n}\r\n\r\n.text-bold {\r\n font-weight: 700 !important;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n// ===========================\r\n// LOGIN PAGE (unlogged)\r\n// ===========================\r\nbody.unlogged {\r\n background: $cContentBg;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n.login-container {\r\n display: flex;\r\n min-height: 100vh;\r\n}\r\n\r\n.login-brand {\r\n flex: 0 0 45%;\r\n background: linear-gradient(135deg, $cSidebarBg 0%, #2C3E57 50%, $cPrimary 100%);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 60px;\r\n position: relative;\r\n overflow: hidden;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n top: -50%;\r\n right: -50%;\r\n width: 100%;\r\n height: 100%;\r\n background: radial-gradient(circle, rgba($cPrimary, 0.15) 0%, transparent 70%);\r\n border-radius: 50%;\r\n }\r\n\r\n .brand-content {\r\n position: relative;\r\n z-index: 1;\r\n color: $cWhite;\r\n max-width: 400px;\r\n }\r\n\r\n .brand-logo {\r\n font-size: 48px;\r\n font-weight: 300;\r\n margin-bottom: 20px;\r\n letter-spacing: -1px;\r\n\r\n strong {\r\n font-weight: 700;\r\n }\r\n }\r\n\r\n .brand-tagline {\r\n font-size: 18px;\r\n opacity: 0.85;\r\n line-height: 1.6;\r\n margin-bottom: 50px;\r\n }\r\n\r\n .brand-features {\r\n .feature {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin-bottom: 20px;\r\n opacity: 0.8;\r\n\r\n i {\r\n font-size: 20px;\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba($cWhite, 0.1);\r\n border-radius: 10px;\r\n }\r\n\r\n span {\r\n font-size: 15px;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.login-form-wrapper {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 60px;\r\n background: $cWhite;\r\n}\r\n\r\n.login-box {\r\n width: 100%;\r\n max-width: 420px;\r\n\r\n .login-header {\r\n margin-bottom: 35px;\r\n\r\n h1 {\r\n font-size: 28px;\r\n font-weight: 700;\r\n color: $cTextDark;\r\n margin: 0 0 8px;\r\n }\r\n\r\n p {\r\n color: #718096;\r\n font-size: 15px;\r\n margin: 0;\r\n }\r\n }\r\n\r\n .form-group {\r\n margin-bottom: 20px;\r\n\r\n label {\r\n display: block;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n margin-bottom: 6px;\r\n }\r\n }\r\n\r\n .input-with-icon {\r\n position: relative;\r\n\r\n i {\r\n position: absolute;\r\n left: 14px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #A0AEC0;\r\n font-size: 14px;\r\n }\r\n\r\n .form-control {\r\n padding-left: 42px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n height: 46px;\r\n border: 2px solid $cBorder;\r\n border-radius: 8px;\r\n padding: 0 14px;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n color: $cTextDark;\r\n transition: border-color $transitionSpeed, box-shadow $transitionSpeed;\r\n\r\n &::placeholder {\r\n color: #CBD5E0;\r\n }\r\n\r\n &:focus {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.15);\r\n outline: none;\r\n }\r\n }\r\n\r\n .form-error {\r\n color: $cDanger;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n }\r\n\r\n .checkbox-group {\r\n .checkbox-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n color: #718096;\r\n font-weight: 400;\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n accent-color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n .btn-login {\r\n width: 100%;\r\n height: 48px;\r\n font-size: 15px;\r\n font-weight: 600;\r\n border-radius: 8px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n\r\n &.disabled {\r\n opacity: 0.7;\r\n pointer-events: none;\r\n }\r\n }\r\n\r\n .alert {\r\n display: none;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n margin-bottom: 20px;\r\n\r\n &.alert-danger {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n border: 1px solid #FED7D7;\r\n }\r\n\r\n &.alert-success {\r\n background: #F0FFF4;\r\n color: #276749;\r\n border: 1px solid #C6F6D5;\r\n }\r\n }\r\n}\r\n\r\n// Responsywność logowania\r\n@media (max-width: 768px) {\r\n .login-brand {\r\n display: none;\r\n }\r\n\r\n .login-form-wrapper {\r\n padding: 30px 20px;\r\n }\r\n}\r\n\r\n// ===========================\r\n// LAYOUT (logged) - SIDEBAR\r\n// ===========================\r\nbody.logged {\r\n display: flex;\r\n min-height: 100vh;\r\n background: $cContentBg;\r\n}\r\n\r\n// --- Sidebar ---\r\n.sidebar {\r\n width: $sidebarWidth;\r\n min-height: 100vh;\r\n background: $cSidebarBg;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 1000;\r\n display: flex;\r\n flex-direction: column;\r\n transition: width $transitionSpeed ease;\r\n overflow: hidden;\r\n\r\n &.collapsed {\r\n width: $sidebarCollapsed;\r\n\r\n .sidebar-header {\r\n padding: 16px 0;\r\n justify-content: center;\r\n\r\n .sidebar-logo {\r\n display: none;\r\n }\r\n\r\n .sidebar-toggle i {\r\n transform: rotate(180deg);\r\n }\r\n }\r\n\r\n .sidebar-nav ul li a {\r\n padding: 12px 0;\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n i {\r\n margin-right: 0;\r\n font-size: 18px;\r\n }\r\n }\r\n\r\n .sidebar-nav ul li.nav-group .nav-group-label {\r\n padding: 12px 0;\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n i {\r\n margin-right: 0;\r\n font-size: 18px;\r\n }\r\n }\r\n\r\n .sidebar-footer {\r\n .sidebar-user {\r\n justify-content: center;\r\n\r\n .user-info {\r\n display: none;\r\n }\r\n }\r\n\r\n .sidebar-logout {\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n }\r\n }\r\n\r\n .nav-divider {\r\n margin: 8px 15px;\r\n }\r\n }\r\n}\r\n\r\n.sidebar-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 20px 20px 16px;\r\n border-bottom: 1px solid rgba($cWhite, 0.08);\r\n\r\n .sidebar-logo a {\r\n color: $cWhite;\r\n text-decoration: none;\r\n font-size: 24px;\r\n font-weight: 300;\r\n letter-spacing: -0.5px;\r\n\r\n strong {\r\n font-weight: 700;\r\n }\r\n }\r\n\r\n .sidebar-toggle {\r\n background: none;\r\n border: none;\r\n color: $cSidebarText;\r\n cursor: pointer;\r\n padding: 6px;\r\n border-radius: 6px;\r\n transition: all $transitionSpeed;\r\n\r\n &:hover {\r\n background: rgba($cWhite, 0.08);\r\n color: $cWhite;\r\n }\r\n\r\n i {\r\n transition: transform $transitionSpeed;\r\n }\r\n }\r\n}\r\n\r\n.sidebar-nav {\r\n flex: 1;\r\n padding: 12px 0;\r\n overflow-y: auto;\r\n\r\n ul {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n &.nav-group {\r\n margin-bottom: 4px;\r\n\r\n .nav-group-label {\r\n display: flex;\r\n align-items: center;\r\n padding: 11px 20px;\r\n color: #D5DEEA;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.6px;\r\n border-left: 3px solid transparent;\r\n\r\n i {\r\n width: 20px;\r\n text-align: center;\r\n margin-right: 12px;\r\n font-size: 14px;\r\n color: #B6C4D3;\r\n }\r\n }\r\n\r\n .nav-submenu {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n\r\n li a {\r\n padding-left: 44px;\r\n }\r\n }\r\n\r\n &.active>.nav-group-label {\r\n color: $cWhite;\r\n background: rgba($cPrimary, 0.12);\r\n border-left-color: $cPrimary;\r\n\r\n i {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n &.nav-divider {\r\n height: 1px;\r\n background: rgba($cWhite, 0.08);\r\n margin: 8px 20px;\r\n }\r\n\r\n a {\r\n display: flex;\r\n align-items: center;\r\n padding: 11px 20px;\r\n color: $cSidebarText;\r\n text-decoration: none;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n border-left: 3px solid transparent;\r\n\r\n i {\r\n width: 20px;\r\n text-align: center;\r\n margin-right: 12px;\r\n font-size: 15px;\r\n }\r\n\r\n &:hover {\r\n background: $cSidebarHover;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.active>a {\r\n background: rgba($cPrimary, 0.15);\r\n color: $cWhite;\r\n border-left-color: $cPrimary;\r\n\r\n i {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.badge-alerts-count {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 20px;\r\n height: 20px;\r\n padding: 0 6px;\r\n margin-left: 8px;\r\n border-radius: 50%;\r\n font-size: 11px;\r\n font-weight: 600;\r\n line-height: 1;\r\n background: $cWhite;\r\n color: $cPrimary;\r\n}\r\n\r\n.sidebar-footer {\r\n padding: 16px 20px;\r\n border-top: 1px solid rgba($cWhite, 0.08);\r\n\r\n .sidebar-user {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 12px;\r\n\r\n .user-avatar {\r\n width: 34px;\r\n height: 34px;\r\n border-radius: 50%;\r\n background: rgba($cPrimary, 0.2);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: $cPrimary;\r\n font-size: 14px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .user-info {\r\n overflow: hidden;\r\n\r\n .user-email {\r\n color: $cSidebarText;\r\n font-size: 12px;\r\n display: block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n }\r\n\r\n .sidebar-logout {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n color: #E53E3E;\r\n text-decoration: none;\r\n font-size: 13px;\r\n padding: 8px 10px;\r\n border-radius: 6px;\r\n transition: all 0.2s;\r\n\r\n i {\r\n font-size: 14px;\r\n }\r\n\r\n &:hover {\r\n background: rgba(#E53E3E, 0.1);\r\n }\r\n }\r\n}\r\n\r\n// --- Main wrapper ---\r\n.main-wrapper {\r\n margin-left: $sidebarWidth;\r\n flex: 1;\r\n min-height: 100vh;\r\n transition: margin-left $transitionSpeed ease;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n &.expanded {\r\n margin-left: $sidebarCollapsed;\r\n }\r\n}\r\n\r\n// --- Topbar ---\r\n.topbar {\r\n height: $topbarHeight;\r\n background: $cWhite;\r\n border-bottom: 1px solid $cBorder;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 25px;\r\n position: sticky;\r\n top: 0;\r\n z-index: 500;\r\n\r\n .topbar-toggle {\r\n background: none;\r\n border: none;\r\n color: $cText;\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n border-radius: 6px;\r\n font-size: 16px;\r\n margin-right: 15px;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cContentBg;\r\n }\r\n }\r\n\r\n .topbar-breadcrumb {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n}\r\n\r\n// --- Content area ---\r\n.content {\r\n flex: 1;\r\n padding: 25px;\r\n}\r\n\r\n.app-alert {\r\n background: #EBF8FF;\r\n border: 1px solid #BEE3F8;\r\n color: #2B6CB0;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n}\r\n\r\n// ===========================\r\n// KOMPONENTY WSPÓLNE\r\n// ===========================\r\n\r\n// --- Buttons ---\r\n.btn {\r\n padding: 10px 20px;\r\n transition: all 0.2s ease;\r\n color: $cWhite;\r\n border: 0;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n display: inline-flex;\r\n text-decoration: none;\r\n gap: 6px;\r\n justify-content: center;\r\n align-items: center;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n font-weight: 500;\r\n\r\n &.btn_small,\r\n &.btn-xs,\r\n &.btn-sm {\r\n padding: 5px 10px;\r\n font-size: 12px;\r\n\r\n i {\r\n font-size: 11px;\r\n }\r\n }\r\n\r\n &.btn-success {\r\n background: $cSuccess;\r\n\r\n &:hover {\r\n background: $cSuccessDark;\r\n }\r\n }\r\n\r\n &.btn-primary {\r\n background: $cPrimary;\r\n\r\n &:hover {\r\n background: $cPrimaryDark;\r\n }\r\n }\r\n\r\n &.btn-danger {\r\n background: $cDanger;\r\n\r\n &:hover {\r\n background: $cDangerDark;\r\n }\r\n }\r\n\r\n &.disabled {\r\n opacity: 0.6;\r\n pointer-events: none;\r\n }\r\n}\r\n\r\n// --- Form controls ---\r\n.form-control {\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n height: 38px;\r\n width: 100%;\r\n padding: 6px 12px;\r\n font-family: \"Roboto\", sans-serif;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n\r\n option {\r\n padding: 5px;\r\n }\r\n\r\n &:focus {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n outline: none;\r\n }\r\n}\r\n\r\ninput[type=\"checkbox\"] {\r\n border: 1px solid $cBorder;\r\n}\r\n\r\n// --- Tables ---\r\ntable {\r\n border-collapse: collapse;\r\n font-size: 13px;\r\n}\r\n\r\n.table {\r\n width: 100%;\r\n\r\n th,\r\n td {\r\n border: 1px solid $cBorder;\r\n padding: 8px 10px;\r\n }\r\n\r\n th {\r\n background: #F7FAFC;\r\n font-weight: 600;\r\n font-size: 12px;\r\n text-transform: uppercase;\r\n letter-spacing: 0.03em;\r\n color: #718096;\r\n }\r\n\r\n td.center {\r\n text-align: center;\r\n }\r\n\r\n td.left {\r\n text-align: left;\r\n }\r\n\r\n &.table-sm td {\r\n padding: 5px !important;\r\n }\r\n\r\n input.form-control {\r\n font-size: 13px;\r\n height: 32px;\r\n }\r\n}\r\n\r\n// --- Unified app tables (clients/campaigns/products/logs) ---\r\n.clients-table-wrap,\r\n.campaigns-table-wrap,\r\n.products-table-wrap,\r\n.logs-table-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n overflow-x: auto;\r\n max-width: 100%;\r\n -ms-overflow-style: none;\r\n scrollbar-width: none;\r\n\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .table {\r\n margin: 0;\r\n width: 100% !important;\r\n\r\n thead th {\r\n background: #F8FAFC;\r\n border-bottom: 2px solid $cBorder;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n padding: 12px 16px;\r\n white-space: nowrap;\r\n }\r\n\r\n tbody td {\r\n padding: 10px 16px;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n }\r\n\r\n tbody tr:hover td {\r\n background: #F8FAFC;\r\n }\r\n }\r\n\r\n .dt-layout-row {\r\n padding: 14px 20px;\r\n margin: 0 !important;\r\n border-top: 1px solid #F1F5F9;\r\n\r\n &:first-child {\r\n display: none;\r\n }\r\n }\r\n\r\n .dt-info {\r\n font-size: 13px;\r\n color: #8899A6;\r\n }\r\n\r\n .dt-paging {\r\n .pagination {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n\r\n .page-item {\r\n .page-link {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 36px;\r\n width: fit-content;\r\n height: 36px;\r\n padding: 0 14px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 500;\r\n border: 1px solid $cBorder;\r\n background: $cWhite;\r\n color: $cText;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n text-decoration: none;\r\n line-height: 1;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n\r\n &.active .page-link {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n border-color: $cPrimary;\r\n font-weight: 600;\r\n }\r\n\r\n &.disabled .page-link {\r\n opacity: 0.35;\r\n cursor: default;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .dt-processing {\r\n background: rgba($cWhite, 0.9);\r\n color: $cText;\r\n font-size: 14px;\r\n }\r\n}\r\n\r\n// --- Cards ---\r\n.card {\r\n background: $cWhite;\r\n padding: 20px;\r\n border-radius: 8px;\r\n color: $cTextDark;\r\n font-size: 14px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n &.mb25 {\r\n margin-bottom: 20px;\r\n }\r\n\r\n .card-header {\r\n font-weight: 600;\r\n font-size: 15px;\r\n }\r\n\r\n .card-body {\r\n padding-top: 12px;\r\n\r\n table {\r\n\r\n th,\r\n td {\r\n font-size: 13px;\r\n\r\n &.bold {\r\n font-weight: 600;\r\n }\r\n\r\n &.text-right {\r\n text-align: right;\r\n }\r\n\r\n &.text-center {\r\n text-align: center;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- Action menu ---\r\n.action_menu {\r\n display: flex;\r\n margin-bottom: 20px;\r\n gap: 12px;\r\n\r\n .btn {\r\n padding: 8px 16px;\r\n\r\n &.btn_add {\r\n background: $cSuccess;\r\n\r\n &:hover {\r\n background: $cSuccessDark;\r\n }\r\n }\r\n\r\n &.btn_cancel {\r\n background: $cDanger;\r\n\r\n &:hover {\r\n background: $cDangerDark;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- Settings page ---\r\n.settings-tabs {\r\n display: flex;\r\n gap: 8px;\r\n margin-bottom: 18px;\r\n\r\n .settings-tab {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 8px 14px;\r\n border-radius: 8px;\r\n text-decoration: none;\r\n color: #6B7A89;\r\n background: #E9EEF5;\r\n border: 1px solid #D8E0EA;\r\n font-size: 13px;\r\n font-weight: 600;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n color: $cTextDark;\r\n background: #DDE6F2;\r\n }\r\n\r\n &.active {\r\n color: $cWhite;\r\n background: $cPrimary;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n}\r\n\r\n.settings-card {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n padding: 28px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n\r\n .settings-card-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n margin-bottom: 24px;\r\n padding-bottom: 16px;\r\n border-bottom: 1px solid $cBorder;\r\n\r\n .settings-card-icon {\r\n width: 44px;\r\n height: 44px;\r\n border-radius: 10px;\r\n background: color.adjust($cPrimary, $lightness: 26%);\r\n color: $cPrimary;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 18px;\r\n flex-shrink: 0;\r\n }\r\n\r\n h3 {\r\n margin: 0;\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n\r\n small {\r\n color: #8899A6;\r\n font-size: 13px;\r\n }\r\n }\r\n\r\n .settings-field {\r\n margin-bottom: 18px;\r\n\r\n label {\r\n display: block;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n margin-bottom: 6px;\r\n }\r\n }\r\n\r\n .settings-input-wrap {\r\n position: relative;\r\n\r\n .settings-input-icon {\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #A0AEC0;\r\n font-size: 14px;\r\n pointer-events: none;\r\n }\r\n\r\n .form-control {\r\n padding-left: 38px;\r\n }\r\n\r\n .settings-toggle-pw {\r\n position: absolute;\r\n right: 4px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: none;\r\n border: none;\r\n color: #A0AEC0;\r\n cursor: pointer;\r\n padding: 6px 10px;\r\n font-size: 14px;\r\n transition: color 0.2s;\r\n\r\n &:hover {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n .settings-field .settings-toggle-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 10px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n font-weight: 500;\r\n user-select: none;\r\n margin-bottom: 0;\r\n width: 100%;\r\n\r\n .settings-toggle-text {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n line-height: 1.35;\r\n }\r\n }\r\n\r\n .settings-toggle-checkbox {\r\n display: none;\r\n\r\n &+.settings-toggle-switch {\r\n display: inline-block;\r\n position: relative;\r\n width: 44px;\r\n height: 24px;\r\n background: #ccc;\r\n border-radius: 12px;\r\n transition: background 0.2s;\r\n flex-shrink: 0;\r\n\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n top: 3px;\r\n left: 3px;\r\n width: 18px;\r\n height: 18px;\r\n background: #fff;\r\n border-radius: 50%;\r\n transition: transform 0.2s;\r\n }\r\n }\r\n\r\n &:checked+.settings-toggle-switch {\r\n background: #22C55E;\r\n\r\n &::after {\r\n transform: translateX(20px);\r\n }\r\n }\r\n }\r\n\r\n .settings-fields-grid {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 0 24px;\r\n\r\n @media (max-width: 768px) {\r\n grid-template-columns: 1fr;\r\n }\r\n }\r\n\r\n .settings-alert-error {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n border: 1px solid #FED7D7;\r\n border-radius: 8px;\r\n padding: 12px 16px;\r\n margin-bottom: 20px;\r\n font-size: 13px;\r\n\r\n i {\r\n font-size: 16px;\r\n flex-shrink: 0;\r\n }\r\n }\r\n}\r\n\r\n// --- Clients page ---\r\n.clients-page {\r\n .clients-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .clients-table-wrap {\r\n .table {\r\n .client-id {\r\n color: #8899A6;\r\n font-size: 13px;\r\n font-weight: 600;\r\n }\r\n\r\n .client-name {\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n }\r\n }\r\n\r\n .badge-id {\r\n display: inline-block;\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n font-size: 13px;\r\n font-weight: 600;\r\n padding: 4px 10px;\r\n border-radius: 6px;\r\n font-family: monospace;\r\n }\r\n\r\n .actions-cell {\r\n text-align: center;\r\n white-space: nowrap;\r\n }\r\n\r\n .btn-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 34px;\r\n height: 34px;\r\n border-radius: 8px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n margin: 0 2px;\r\n\r\n &.btn-icon-edit {\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n\r\n &:hover {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.btn-icon-delete {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.btn-icon-sync {\r\n background: #F0FDF4;\r\n color: #16a34a;\r\n\r\n &:hover {\r\n background: #16a34a;\r\n color: $cWhite;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.7;\r\n cursor: wait;\r\n }\r\n\r\n &.is-queued {\r\n background: #FEF3C7;\r\n color: #D97706;\r\n }\r\n }\r\n }\r\n\r\n .client-sync-bars {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n }\r\n\r\n .client-sync-row {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .client-sync-label {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: #8899A6;\r\n width: 18px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .client-sync-track {\r\n flex: 1;\r\n height: 6px;\r\n border-radius: 999px;\r\n background: #E9EEF5;\r\n overflow: hidden;\r\n }\r\n\r\n .client-sync-fill {\r\n height: 100%;\r\n border-radius: 999px;\r\n background: #CBD5E0;\r\n transition: width 0.4s ease;\r\n\r\n &.is-active {\r\n background: linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%);\r\n }\r\n\r\n &.is-done {\r\n background: $cSuccess;\r\n }\r\n }\r\n\r\n .client-sync-pct {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: #8899A6;\r\n width: 32px;\r\n text-align: right;\r\n flex-shrink: 0;\r\n }\r\n\r\n .empty-state {\r\n text-align: center;\r\n padding: 50px 20px !important;\r\n color: #A0AEC0;\r\n\r\n i {\r\n font-size: 40px;\r\n margin-bottom: 12px;\r\n display: block;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n font-size: 15px;\r\n }\r\n }\r\n}\r\n\r\n.btn-secondary {\r\n background: #E2E8F0;\r\n color: $cTextDark;\r\n border: none;\r\n padding: 8px 18px;\r\n border-radius: 6px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n\r\n &:hover {\r\n background: #CBD5E0;\r\n }\r\n}\r\n\r\n// ===========================\r\n// CAMPAIGNS PAGE\r\n// ===========================\r\n.campaigns-page {\r\n max-width: 100%;\r\n overflow-x: hidden;\r\n width: 100%;\r\n\r\n .campaigns-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .campaigns-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n\r\n .filter-group {\r\n flex: 1;\r\n min-width: 0;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 10px 14px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n .filter-with-action {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .form-control {\r\n flex: 1;\r\n }\r\n\r\n .btn-icon {\r\n flex-shrink: 0;\r\n width: 42px;\r\n height: 42px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 8px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n\r\n &.btn-icon-delete {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .filter-group-campaign-multi {\r\n flex: 2 !important;\r\n }\r\n\r\n .campaign-dropdown {\r\n flex: 1;\r\n min-width: 0;\r\n position: relative;\r\n }\r\n\r\n .campaign-dropdown-trigger {\r\n width: 100%;\r\n padding: 10px 14px;\r\n padding-right: 32px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n transition: border-color 0.2s;\r\n position: relative;\r\n min-height: 42px;\r\n box-sizing: border-box;\r\n\r\n .campaign-dropdown-text {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n &.is-placeholder {\r\n color: #8899A6;\r\n }\r\n }\r\n\r\n .campaign-dropdown-arrow {\r\n position: absolute;\r\n right: 12px;\r\n font-size: 10px;\r\n color: #8899A6;\r\n transition: transform 0.2s;\r\n }\r\n }\r\n\r\n .campaign-dropdown.is-open {\r\n .campaign-dropdown-trigger {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n\r\n .campaign-dropdown-arrow {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .campaign-dropdown-menu {\r\n display: block;\r\n }\r\n }\r\n\r\n .campaign-dropdown-menu {\r\n display: none;\r\n position: absolute;\r\n top: calc(100% + 4px);\r\n left: 0;\r\n right: 0;\r\n z-index: 100;\r\n max-height: 280px;\r\n overflow-y: auto;\r\n background: $cWhite;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n padding: 4px 0;\r\n }\r\n\r\n .campaign-dropdown-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 8px 12px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n margin: 0;\r\n transition: background 0.15s;\r\n\r\n &:hover {\r\n background: #F8FAFC;\r\n }\r\n\r\n &.is-checked {\r\n background: #EEF2FF;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n accent-color: $cPrimary;\r\n }\r\n\r\n span {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n\r\n .campaigns-list-panel {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n margin-bottom: 20px;\r\n overflow: hidden;\r\n\r\n .campaigns-list-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n border-bottom: 1px solid $cBorder;\r\n gap: 12px;\r\n\r\n &-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 13px;\r\n color: $cText;\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n }\r\n\r\n label {\r\n cursor: pointer;\r\n user-select: none;\r\n margin: 0;\r\n }\r\n\r\n .campaigns-selected-count {\r\n margin-left: 12px;\r\n color: #8899A6;\r\n }\r\n }\r\n\r\n &-right {\r\n .campaigns-bulk-delete-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 8px 16px;\r\n border: none;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover:not(:disabled) {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .campaigns-list-items {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 0;\r\n padding: 8px 8px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n\r\n .campaigns-list-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 6px 12px;\r\n margin: 2px;\r\n border-radius: 6px;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n cursor: pointer;\r\n user-select: none;\r\n transition: background 0.15s;\r\n\r\n &:hover {\r\n background: #F0F4FF;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 15px;\r\n height: 15px;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n }\r\n\r\n .campaigns-list-item-name {\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .campaigns-chart-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n padding: 20px;\r\n margin-bottom: 20px;\r\n min-height: 350px;\r\n overflow: hidden;\r\n\r\n #container {\r\n max-width: 100%;\r\n }\r\n }\r\n\r\n .campaigns-table-wrap {\r\n .table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n .delete-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS PAGE\r\n// ===========================\r\n.products-page {\r\n .products-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .products-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: flex-end;\r\n gap: 20px;\r\n margin-bottom: 16px;\r\n\r\n .filter-group {\r\n flex: 1 1 220px;\r\n min-width: 0;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 10px 14px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n select.form-control {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n }\r\n\r\n &.filter-group-client,\r\n &.filter-group-campaign,\r\n &.filter-group-ad-group {\r\n flex: 1 1 260px;\r\n }\r\n\r\n &.filter-group-ad-group {\r\n .ad-group-filter-actions {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n\r\n .form-control {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n }\r\n\r\n #delete-products-ad-group {\r\n min-width: 38px;\r\n height: 38px;\r\n border-radius: 6px;\r\n margin: 0;\r\n background: #dc3545;\r\n border: 1px solid #dc3545;\r\n color: #fff;\r\n cursor: pointer;\r\n\r\n &:hover:not(:disabled) {\r\n background: #bb2d3b;\r\n border-color: #bb2d3b;\r\n color: #fff;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.45;\r\n cursor: default;\r\n background: #dc3545;\r\n border-color: #dc3545;\r\n color: #fff;\r\n }\r\n }\r\n }\r\n\r\n &.filter-group-roas {\r\n flex: 0 0 200px;\r\n }\r\n\r\n &.filter-group-search {\r\n flex: 1 1 200px;\r\n }\r\n\r\n &.filter-group-cl4 {\r\n flex: 0 0 160px;\r\n }\r\n\r\n &.filter-group-columns {\r\n flex: 0 0 240px;\r\n }\r\n }\r\n }\r\n\r\n .products-scope-alerts {\r\n margin-bottom: 12px;\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n list-style: none;\r\n padding: 10px 12px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: #991B1B;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n }\r\n\r\n .products-scope-alerts-list {\r\n border-top: 1px solid #FECACA;\r\n background: #FFF;\r\n max-height: 260px;\r\n overflow: auto;\r\n }\r\n\r\n .products-scope-alert-item {\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #F1F5F9;\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n }\r\n\r\n .products-scope-alert-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 4px;\r\n font-size: 11px;\r\n color: #64748B;\r\n }\r\n\r\n .products-scope-alert-type {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 2px 6px;\r\n border-radius: 999px;\r\n background: #EEF2FF;\r\n color: #4338CA;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n }\r\n\r\n .products-scope-alert-message {\r\n font-size: 13px;\r\n color: $cTextDark;\r\n line-height: 1.45;\r\n }\r\n }\r\n\r\n .products-actions {\r\n margin-bottom: 12px;\r\n\r\n .btn-danger {\r\n padding: 7px 14px;\r\n font-size: 13px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: default;\r\n }\r\n }\r\n }\r\n\r\n .products-table-wrap {\r\n .table {\r\n width: 100%;\r\n\r\n // Kompaktowe inputy w tabeli\r\n input.min_roas,\r\n input.form-control-sm,\r\n select.custom_label_4,\r\n select.form-control-sm {\r\n padding: 3px 6px;\r\n font-size: 12px;\r\n border: 1px solid $cBorder;\r\n border-radius: 4px;\r\n background: $cWhite;\r\n }\r\n }\r\n }\r\n\r\n // Przycisk usuwania w wierszu\r\n .delete-product {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n // Przycisk edycji w wierszu\r\n .edit-product-title {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n }\r\n }\r\n}\r\n\r\n// --- Popup edycji produktu: AI suggest ---\r\n.desc-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 4px;\r\n\r\n label {\r\n margin: 0;\r\n }\r\n}\r\n\r\n.desc-tabs {\r\n display: flex;\r\n gap: 2px;\r\n background: #eee;\r\n border-radius: 6px;\r\n padding: 2px;\r\n}\r\n\r\n.desc-tab {\r\n border: none;\r\n background: transparent;\r\n padding: 4px 12px;\r\n font-size: 12px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n color: #666;\r\n transition: all .15s ease;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n\r\n &.active {\r\n background: #fff;\r\n color: #333;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, .12);\r\n font-weight: 500;\r\n }\r\n\r\n &:hover:not(.active) {\r\n color: #333;\r\n }\r\n}\r\n\r\n.desc-wrap {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.desc-preview {\r\n\r\n ul,\r\n ol {\r\n margin: 6px 0;\r\n padding-left: 20px;\r\n }\r\n\r\n li {\r\n margin-bottom: 3px;\r\n }\r\n\r\n b,\r\n strong {\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.input-with-ai {\r\n display: flex;\r\n gap: 8px;\r\n align-items: flex-start;\r\n\r\n .form-control {\r\n flex: 1;\r\n }\r\n}\r\n\r\n.btn-ai-suggest {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 6px 12px;\r\n border-radius: 8px;\r\n border: 1px solid #C084FC;\r\n background: linear-gradient(135deg, #F3E8FF, #EDE9FE);\r\n color: #7C3AED;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n white-space: nowrap;\r\n min-height: 38px;\r\n\r\n i {\r\n font-size: 13px;\r\n }\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #7C3AED, #6D28D9);\r\n color: #FFF;\r\n border-color: #6D28D9;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.7;\r\n cursor: wait;\r\n }\r\n\r\n &.btn-ai-claude {\r\n border-color: #D97706;\r\n background: linear-gradient(135deg, #FEF3C7, #FDE68A);\r\n color: #92400E;\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #D97706, #B45309);\r\n color: #FFF;\r\n border-color: #B45309;\r\n }\r\n }\r\n\r\n &.btn-ai-gemini {\r\n border-color: #4285F4;\r\n background: linear-gradient(135deg, #E8F0FE, #D2E3FC);\r\n color: #1A73E8;\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #4285F4, #1A73E8);\r\n color: #FFF;\r\n border-color: #1A73E8;\r\n }\r\n }\r\n}\r\n\r\n// --- Form container ---\r\n.form_container {\r\n background: $cWhite;\r\n padding: 25px;\r\n max-width: 1300px;\r\n border-radius: 8px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n &.full {\r\n max-width: 100%;\r\n }\r\n\r\n .form_group {\r\n margin-bottom: 12px;\r\n display: flex;\r\n\r\n >.label {\r\n width: 300px;\r\n display: inline-flex;\r\n align-items: flex-start;\r\n justify-content: right;\r\n padding-right: 12px;\r\n }\r\n\r\n .input {\r\n width: calc(100% - 300px);\r\n }\r\n }\r\n}\r\n\r\n// --- Default popup ---\r\n.default_popup {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.45);\r\n display: none;\r\n z-index: 2000;\r\n\r\n .popup_content {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n background: $cWhite;\r\n padding: 25px;\r\n border-radius: 10px;\r\n max-width: 1140px;\r\n width: 95%;\r\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);\r\n\r\n .popup_header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n\r\n .title {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n }\r\n\r\n .close {\r\n cursor: pointer;\r\n color: #A0AEC0;\r\n font-size: 18px;\r\n padding: 4px;\r\n\r\n &:hover {\r\n color: $cDanger;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- DataTables override ---\r\n.dt-layout-table {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.pagination {\r\n button {\r\n border: 1px solid $cBorder;\r\n background: $cWhite;\r\n display: inline-flex;\r\n height: 32px;\r\n width: 32px;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 0 2px;\r\n border-radius: 4px;\r\n transition: all 0.2s;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: $cContentBg;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS specific\r\n// ===========================\r\ntable#products {\r\n a {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n\r\n .table-product-title {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .edit-product-title {\r\n display: flex;\r\n height: 25px;\r\n align-items: center;\r\n justify-content: center;\r\n width: 25px;\r\n cursor: pointer;\r\n background: $cWhite;\r\n border: 1px solid #CBD5E0;\r\n color: #CBD5E0;\r\n border-radius: 4px;\r\n\r\n &:hover {\r\n background: #CBD5E0;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n a.custom_name {\r\n color: $cGreenLight !important;\r\n }\r\n}\r\n\r\n// --- Product history ---\r\n.product-history-page {\r\n .product-history-meta {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n margin-bottom: 14px;\r\n\r\n span {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 5px 10px;\r\n border-radius: 999px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: $cText;\r\n background: #EEF2FF;\r\n border: 1px solid #D9E2FF;\r\n }\r\n }\r\n\r\n .product-history-chart-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n padding: 20px;\r\n margin-bottom: 16px;\r\n }\r\n\r\n .chart-with-form {\r\n display: flex;\r\n gap: 20px;\r\n align-items: flex-start;\r\n }\r\n\r\n .chart-area {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n\r\n .product-history-chart {\r\n min-height: 360px;\r\n }\r\n\r\n .comment-form {\r\n width: 340px;\r\n flex: 0 0 340px;\r\n background: #F8FAFC;\r\n border: 1px solid $cBorder;\r\n border-radius: 10px;\r\n padding: 14px;\r\n\r\n .form-group {\r\n margin-bottom: 12px;\r\n }\r\n\r\n label {\r\n display: block;\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n font-size: 13px;\r\n color: #52606D;\r\n }\r\n\r\n input[type=\"date\"],\r\n textarea {\r\n width: 100%;\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n padding: 8px 12px;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n background: $cWhite;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n textarea {\r\n min-height: 110px;\r\n resize: vertical;\r\n }\r\n\r\n .btn {\r\n width: 100%;\r\n justify-content: center;\r\n padding: 10px 16px;\r\n }\r\n\r\n .btn[disabled] {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n .products-table-wrap {\r\n overflow-x: auto;\r\n\r\n .table {\r\n min-width: 980px;\r\n }\r\n\r\n .comment-cell {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 10px;\r\n }\r\n\r\n .comment-text {\r\n word-break: break-word;\r\n }\r\n\r\n .delete-comment {\r\n color: $cDanger;\r\n text-decoration: none;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n }\r\n\r\n .dt-paging .pagination .page-item {\r\n list-style: none;\r\n }\r\n }\r\n}\r\n\r\n.cron-status-overview {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px 20px;\r\n margin-bottom: 20px;\r\n color: $cText;\r\n font-size: 13px;\r\n}\r\n\r\n.cron-progress-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-schedule-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-schedule-item {\r\n border: 1px solid #DFE7F0;\r\n background: #F4F8FD;\r\n border-radius: 8px;\r\n padding: 9px 12px;\r\n margin-bottom: 8px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n strong {\r\n display: block;\r\n color: $cTextDark;\r\n font-size: 13px;\r\n font-weight: 700;\r\n margin-bottom: 2px;\r\n }\r\n\r\n small {\r\n display: block;\r\n color: #667788;\r\n font-size: 12px;\r\n line-height: 1.35;\r\n }\r\n}\r\n\r\n.cron-progress-item {\r\n margin-bottom: 14px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cron-progress-head {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 6px;\r\n font-size: 13px;\r\n\r\n strong {\r\n color: $cTextDark;\r\n font-weight: 600;\r\n }\r\n\r\n span {\r\n color: #6B7A89;\r\n font-size: 12px;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n small {\r\n display: block;\r\n margin-top: 5px;\r\n color: #778899;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.cron-progress-bar {\r\n width: 100%;\r\n height: 10px;\r\n border-radius: 999px;\r\n background: #E9EEF5;\r\n overflow: hidden;\r\n\r\n >span {\r\n display: block;\r\n height: 100%;\r\n background: linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%);\r\n }\r\n}\r\n\r\n.cron-url-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-url-item {\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n background: #F8FAFC;\r\n padding: 10px 12px;\r\n margin-bottom: 10px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cron-url-top {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 6px;\r\n\r\n strong {\r\n color: $cTextDark;\r\n font-size: 13px;\r\n font-weight: 600;\r\n }\r\n\r\n small {\r\n color: #7A8794;\r\n font-size: 11px;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n code {\r\n display: block;\r\n background: #EEF2F7;\r\n border: 1px solid #DDE4ED;\r\n border-radius: 6px;\r\n padding: 6px 8px;\r\n color: #2E3B49;\r\n font-size: 12px;\r\n overflow-x: auto;\r\n }\r\n\r\n .cron-url-plan {\r\n display: block;\r\n color: #6C7B8A;\r\n font-size: 11px;\r\n margin-bottom: 6px;\r\n }\r\n}\r\n\r\n@media (max-width: 1200px) {\r\n .product-history-page {\r\n .chart-with-form {\r\n flex-direction: column;\r\n }\r\n\r\n .comment-form {\r\n width: 100%;\r\n flex: 1 1 auto;\r\n }\r\n }\r\n}\r\n\r\n// --- Select2 w modalu ---\r\n.jconfirm-box .form-group .select2-container,\r\n.adspro-dialog-box .form-group .select2-container {\r\n width: 100% !important;\r\n margin-top: 8px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single {\r\n background-color: $cWhite;\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n min-height: 42px;\r\n display: flex;\r\n align-items: center;\r\n padding: 4px 12px;\r\n box-shadow: none;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered {\r\n padding-left: 0;\r\n line-height: 1.4;\r\n color: #495057;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder {\r\n color: #CBD5E0;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow {\r\n height: 100%;\r\n right: 8px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,\r\n.jconfirm-box .select2-container--default .select2-selection--single:hover,\r\n.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single:hover {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n outline: 0;\r\n}\r\n\r\n.jconfirm-box .select2-container .select2-dropdown,\r\n.adspro-dialog-box .select2-container .select2-dropdown {\r\n border-color: $cBorder;\r\n border-radius: 0 0 6px 6px;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,\r\n.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n border: 1px solid $cBorder;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],\r\n.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected] {\r\n background-color: $cPrimary;\r\n color: $cWhite;\r\n}\r\n\r\n// ===========================\r\n// RESPONSYWNOŚĆ\r\n// ===========================\r\n@media (max-width: 992px) {\r\n .sidebar {\r\n transform: translateX(-100%);\r\n\r\n &.mobile-open {\r\n transform: translateX(0);\r\n }\r\n }\r\n\r\n .main-wrapper {\r\n margin-left: 0 !important;\r\n }\r\n}\r\n\r\n// ===========================\r\n// CAMPAIGN TERMS VIEW\r\n// ===========================\r\n.campaign-terms-wrap {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n margin-top: 20px;\r\n}\r\n\r\n.campaign-terms-page {\r\n max-width: 100%;\r\n overflow: hidden;\r\n\r\n .campaigns-filters {\r\n flex-wrap: wrap;\r\n\r\n .filter-group {\r\n min-width: 220px;\r\n\r\n &.terms-columns-group {\r\n min-width: 280px;\r\n }\r\n }\r\n }\r\n\r\n .terms-card-toggle {\r\n margin-left: auto;\r\n width: 28px;\r\n height: 28px;\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n color: #475569;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #F8FAFC;\r\n border-color: #CBD5E1;\r\n }\r\n }\r\n\r\n .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap {\r\n display: none;\r\n }\r\n\r\n .terms-search-toolbar {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #EEF2F7;\r\n background: #FFFFFF;\r\n\r\n label {\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #475569;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n margin: 0;\r\n white-space: nowrap;\r\n }\r\n\r\n .terms-search-toolbar-label {\r\n min-width: 86px;\r\n }\r\n\r\n #terms_min_clicks_all,\r\n #terms_max_clicks_all {\r\n width: 160px;\r\n height: 32px;\r\n }\r\n\r\n #terms_min_conversions_all,\r\n #terms_max_conversions_all {\r\n width: 130px;\r\n max-width: 130px;\r\n }\r\n }\r\n\r\n .terms-search-selected-label {\r\n margin: 0;\r\n font-size: 12px;\r\n color: #475569;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n\r\n .terms-ai-analyze-btn {\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n border: 1px solid #BFDBFE;\r\n background: #EFF6FF;\r\n color: #1D4ED8;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #DBEAFE;\r\n border-color: #93C5FD;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.6;\r\n cursor: wait;\r\n }\r\n }\r\n\r\n .terms-table-search-input {\r\n width: 200px;\r\n min-width: 120px;\r\n max-width: 200px;\r\n height: 32px;\r\n font-size: 12px;\r\n flex: 0 1 200px;\r\n }\r\n\r\n .terms-negative-toolbar,\r\n .terms-keywords-toolbar {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #EEF2F7;\r\n background: #FFFFFF;\r\n }\r\n\r\n .terms-negative-bulk-btn {\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n color: #DC2626;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #FEE2E2;\r\n border-color: #FCA5A5;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n table.campaigns-extra-table>thead>tr>th {\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n background-color: #111827 !important;\r\n color: #E5E7EB !important;\r\n border-bottom: 1px solid #0B1220 !important;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: .4px;\r\n padding: 10px 12px;\r\n white-space: nowrap;\r\n }\r\n\r\n #terms_search_table thead th .dt-column-order,\r\n #terms_negative_table thead th .dt-column-order {\r\n display: none !important;\r\n }\r\n\r\n #terms_search_table thead th.dt-orderable-asc,\r\n #terms_search_table thead th.dt-orderable-desc,\r\n #terms_negative_table thead th.dt-orderable-asc,\r\n #terms_negative_table thead th.dt-orderable-desc {\r\n cursor: pointer;\r\n padding-right: 34px;\r\n overflow: hidden;\r\n }\r\n\r\n #terms_search_table thead th .dt-column-title,\r\n #terms_negative_table thead th .dt-column-title {\r\n display: block;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding-right: 2px;\r\n }\r\n\r\n #terms_search_table thead th.dt-orderable-asc::after,\r\n #terms_search_table thead th.dt-orderable-desc::after,\r\n #terms_negative_table thead th.dt-orderable-asc::after,\r\n #terms_negative_table thead th.dt-orderable-desc::after {\r\n content: '\\2195';\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 999px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n line-height: 16px;\r\n text-align: center;\r\n color: #E5E7EB;\r\n background: #374151;\r\n }\r\n\r\n #terms_search_table thead th.dt-ordering-asc::after,\r\n #terms_negative_table thead th.dt-ordering-asc::after,\r\n #terms_search_table thead th[aria-sort=\"ascending\"]::after,\r\n #terms_negative_table thead th[aria-sort=\"ascending\"]::after {\r\n content: '\\25B2';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n }\r\n\r\n #terms_search_table thead th.dt-ordering-desc::after,\r\n #terms_negative_table thead th.dt-ordering-desc::after,\r\n #terms_search_table thead th[aria-sort=\"descending\"]::after,\r\n #terms_negative_table thead th[aria-sort=\"descending\"]::after {\r\n content: '\\25BC';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n }\r\n\r\n #terms_negative_select_all,\r\n .terms-negative-select-row,\r\n #terms_search_select_all,\r\n .terms-search-select-row {\r\n width: 14px;\r\n height: 14px;\r\n cursor: pointer;\r\n }\r\n\r\n .dt-layout-row:first-child {\r\n display: none;\r\n }\r\n\r\n .dt-layout-row {\r\n padding: 10px 12px;\r\n margin: 0 !important;\r\n border-top: 1px solid #F1F5F9;\r\n }\r\n\r\n .dt-info {\r\n font-size: 12px;\r\n color: #64748B;\r\n }\r\n\r\n .dt-paging .pagination {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none !important;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n\r\n .page-item {\r\n list-style: none !important;\r\n\r\n .page-link {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 36px;\r\n width: fit-content;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n font-size: 12px;\r\n font-weight: 500;\r\n border: 1px solid #E2E8F0;\r\n background: #FFFFFF;\r\n color: #4E5E6A;\r\n text-decoration: none;\r\n line-height: 1;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background: #EEF2FF;\r\n color: #6690F4;\r\n border-color: #6690F4;\r\n }\r\n }\r\n\r\n &.previous .page-link,\r\n &.next .page-link {\r\n min-width: 72px;\r\n }\r\n\r\n &.active .page-link {\r\n background: #6690F4;\r\n color: #FFFFFF;\r\n border-color: #6690F4;\r\n }\r\n\r\n &.disabled .page-link {\r\n opacity: 0.35;\r\n cursor: default;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.terms-columns-box {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n\r\n.terms-columns-control {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n list-style: none;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n\r\n &::after {\r\n content: '\\25BC';\r\n float: right;\r\n font-size: 10px;\r\n color: #64748B;\r\n margin-top: 2px;\r\n }\r\n }\r\n\r\n &[open] summary::after {\r\n content: '\\25B2';\r\n }\r\n}\r\n\r\n.terms-columns-list {\r\n border-top: 1px solid #EEF2F7;\r\n padding: 8px 10px;\r\n max-height: 180px;\r\n overflow-y: auto;\r\n\r\n .terms-col-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #334155;\r\n margin-bottom: 6px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n input[type=checkbox] {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n.campaigns-extra-card {\r\n background: #FFFFFF;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n overflow: hidden;\r\n}\r\n\r\n.campaigns-extra-card-title {\r\n padding: 14px 16px;\r\n border-bottom: 1px solid #E2E8F0;\r\n font-size: 13px;\r\n font-weight: 700;\r\n color: #334155;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .terms-card-title-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n}\r\n\r\n.campaigns-extra-table-wrap {\r\n overflow: auto;\r\n}\r\n\r\n.campaigns-extra-table {\r\n margin: 0;\r\n width: 100%;\r\n table-layout: fixed;\r\n\r\n tbody td {\r\n padding: 9px 12px;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 13px;\r\n color: #334155;\r\n vertical-align: middle;\r\n white-space: nowrap;\r\n }\r\n\r\n td.num-cell {\r\n text-align: right;\r\n white-space: nowrap;\r\n }\r\n\r\n td.text-cell {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n th.terms-negative-select-cell,\r\n td.terms-negative-select-cell,\r\n th.terms-search-select-cell,\r\n td.terms-search-select-cell {\r\n text-align: center;\r\n }\r\n\r\n th.phrase-nowrap,\r\n td.phrase-nowrap {\r\n white-space: nowrap !important;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .terms-add-negative-btn,\r\n .terms-remove-negative-btn,\r\n .terms-delete-keyword-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n }\r\n\r\n .terms-add-negative-btn {\r\n border: 1px solid #E2E8F0;\r\n background: #EEF2FF;\r\n color: #3B82F6;\r\n\r\n &:hover {\r\n background: #3B82F6;\r\n color: #FFFFFF;\r\n border-color: #3B82F6;\r\n }\r\n }\r\n\r\n .terms-remove-negative-btn,\r\n .terms-delete-keyword-btn {\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n color: #DC2626;\r\n\r\n &:hover {\r\n background: #DC2626;\r\n color: #FFFFFF;\r\n border-color: #DC2626;\r\n }\r\n }\r\n\r\n .terms-toggle-keyword-status-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n border: 1px solid #FDE68A;\r\n background: #FFFBEB;\r\n color: #D97706;\r\n\r\n &:hover {\r\n background: #D97706;\r\n color: #FFFFFF;\r\n border-color: #D97706;\r\n }\r\n\r\n &.text-success {\r\n border-color: #A7F3D0;\r\n background: #ECFDF5;\r\n color: #059669;\r\n\r\n &:hover {\r\n background: #059669;\r\n color: #FFFFFF;\r\n border-color: #059669;\r\n }\r\n }\r\n }\r\n\r\n .terms-change-match-type-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n border: 1px solid #E2E8F0;\r\n background: #EEF2FF;\r\n color: #3B82F6;\r\n\r\n &:hover {\r\n background: #3B82F6;\r\n color: #FFFFFF;\r\n border-color: #3B82F6;\r\n }\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n\r\n tbody tr.term-is-negative td {\r\n color: #DC2626;\r\n }\r\n\r\n tbody tr.term-is-negative:hover {\r\n background: #FEF2F2;\r\n }\r\n}\r\n\r\n.campaigns-empty-row {\r\n text-align: center;\r\n color: #94A3B8 !important;\r\n font-style: italic;\r\n}\r\n\r\n.terms-ai-modal-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 10px;\r\n\r\n label {\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n margin: 0;\r\n }\r\n\r\n .form-control {\r\n width: 200px;\r\n height: 32px;\r\n }\r\n}\r\n\r\n.terms-ai-summary {\r\n font-size: 12px;\r\n color: #64748B;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.terms-ai-results-wrap {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 8px;\r\n max-height: 420px;\r\n overflow: auto;\r\n}\r\n\r\n.terms-ai-results-table {\r\n width: 100%;\r\n border-collapse: collapse;\r\n font-size: 12px;\r\n\r\n th,\r\n td {\r\n border-bottom: 1px solid #EEF2F7;\r\n padding: 8px;\r\n vertical-align: middle;\r\n }\r\n\r\n th {\r\n position: sticky;\r\n top: 0;\r\n background: #F8FAFC;\r\n color: #334155;\r\n font-weight: 700;\r\n }\r\n\r\n td.term-col {\r\n min-width: 260px;\r\n max-width: 380px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n td.reason-col {\r\n min-width: 320px;\r\n }\r\n}\r\n\r\n.terms-ai-action-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 999px;\r\n padding: 2px 8px;\r\n font-size: 11px;\r\n font-weight: 700;\r\n\r\n &.action-exclude {\r\n background: #FEE2E2;\r\n color: #B91C1C;\r\n }\r\n\r\n &.action-keep {\r\n background: #DCFCE7;\r\n color: #166534;\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS VIEW (INLINE MOVED)\r\n// ===========================\r\n.products-page .products-filters .filter-group.filter-group-columns {\r\n min-width: 240px;\r\n}\r\n\r\n.products-columns-control {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n list-style: none;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n\r\n &::after {\r\n content: '\\25BC';\r\n float: right;\r\n font-size: 10px;\r\n color: #64748B;\r\n margin-top: 2px;\r\n }\r\n }\r\n\r\n &[open] summary::after {\r\n content: '\\25B2';\r\n }\r\n}\r\n\r\n.products-columns-list {\r\n border-top: 1px solid #EEF2F7;\r\n padding: 8px 10px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n\r\n .products-col-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #334155;\r\n margin-bottom: 6px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n input[type=checkbox] {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n#products {\r\n\r\n th:last-child,\r\n td:last-child {\r\n white-space: nowrap;\r\n }\r\n\r\n tr.product-row-unavailable {\r\n opacity: 0.45;\r\n\r\n td {\r\n background-color: #f0f0f0 !important;\r\n }\r\n }\r\n\r\n .product-warning-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n color: #DC2626;\r\n font-size: 16px;\r\n\r\n &:hover {\r\n color: #B91C1C;\r\n }\r\n }\r\n\r\n .products-row-actions {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n .btn {\r\n width: 38px;\r\n height: 32px;\r\n padding: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 4px !important;\r\n\r\n i {\r\n line-height: 1;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// LOGS PAGE\r\n// ===========================\r\n.logs-page {\r\n .logs-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n }\r\n\r\n .logs-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: flex-end;\r\n gap: 14px;\r\n margin-bottom: 16px;\r\n\r\n .filter-group {\r\n flex: 1 1 160px;\r\n min-width: 0;\r\n max-width: 220px;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 8px 12px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n select.form-control {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n }\r\n\r\n &.filter-group-buttons {\r\n flex: 0 0 auto;\r\n display: flex;\r\n gap: 6px;\r\n max-width: none;\r\n }\r\n }\r\n }\r\n\r\n .logs-table-wrap {\r\n .table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n .badge {\r\n display: inline-block;\r\n padding: 3px 8px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n }\r\n\r\n .badge-success {\r\n background: #D1FAE5;\r\n color: #065F46;\r\n }\r\n\r\n .badge-danger {\r\n background: #FEE2E2;\r\n color: #991B1B;\r\n }\r\n\r\n .badge-warning {\r\n background: #FEF3C7;\r\n color: #92400E;\r\n }\r\n}\r\n\r\n.js-title-alt-apply {\r\n color: #000;\r\n justify-content: flex-start;\r\n}"]} \ No newline at end of file +{"version":3,"sources":["style.css","style.scss"],"names":[],"mappings":"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","file":"style.css","sourcesContent":["*{box-sizing:border-box}body{font-family:\"Roboto\",sans-serif;margin:0;padding:0;font-size:14px;color:#4e5e6a;background:#f4f6f9;max-width:100vw;overflow-x:hidden}.hide{display:none}small{font-size:.75em}.text-right{text-align:right}.text-bold{font-weight:700 !important}.nowrap{white-space:nowrap}body.unlogged{background:#f4f6f9;margin:0;padding:0}.login-container{display:flex;min-height:100vh}.login-brand{flex:0 0 45%;background:linear-gradient(135deg, #1E2A3A 0%, #2C3E57 50%, #6690F4 100%);display:flex;align-items:center;justify-content:center;padding:60px;position:relative;overflow:hidden}.login-brand::before{content:\"\";position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle, rgba(102, 144, 244, 0.15) 0%, transparent 70%);border-radius:50%}.login-brand .brand-content{position:relative;z-index:1;color:#fff;max-width:400px}.login-brand .brand-logo{font-size:48px;font-weight:300;margin-bottom:20px;letter-spacing:-1px}.login-brand .brand-logo strong{font-weight:700}.login-brand .brand-tagline{font-size:18px;opacity:.85;line-height:1.6;margin-bottom:50px}.login-brand .brand-features .feature{display:flex;align-items:center;gap:15px;margin-bottom:20px;opacity:.8}.login-brand .brand-features .feature i{font-size:20px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:hsla(0,0%,100%,.1);border-radius:10px}.login-brand .brand-features .feature span{font-size:15px}.login-form-wrapper{flex:1;display:flex;align-items:center;justify-content:center;padding:60px;background:#fff}.login-box{width:100%;max-width:420px}.login-box .login-header{margin-bottom:35px}.login-box .login-header h1{font-size:28px;font-weight:700;color:#2d3748;margin:0 0 8px}.login-box .login-header p{color:#718096;font-size:15px;margin:0}.login-box .form-group{margin-bottom:20px}.login-box .form-group label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.login-box .input-with-icon{position:relative}.login-box .input-with-icon i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px}.login-box .input-with-icon .form-control{padding-left:42px}.login-box .form-control{width:100%;height:46px;border:2px solid #e2e8f0;border-radius:8px;padding:0 14px;font-size:14px;font-family:\"Roboto\",sans-serif;color:#2d3748;transition:border-color .3s,box-shadow .3s}.login-box .form-control::placeholder{color:#cbd5e0}.login-box .form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.15);outline:none}.login-box .form-error{color:#c00;font-size:12px;margin-top:4px}.login-box .checkbox-group .checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#718096;font-weight:400}.login-box .checkbox-group .checkbox-label input[type=checkbox]{width:16px;height:16px;accent-color:#6690f4}.login-box .btn-login{width:100%;height:48px;font-size:15px;font-weight:600;border-radius:8px;display:flex;align-items:center;justify-content:center;gap:8px}.login-box .btn-login.disabled{opacity:.7;pointer-events:none}.login-box .alert{display:none;padding:12px 16px;border-radius:8px;font-size:13px;margin-bottom:20px}.login-box .alert.alert-danger{background:#fff5f5;color:#c00;border:1px solid #fed7d7}.login-box .alert.alert-success{background:#f0fff4;color:#276749;border:1px solid #c6f6d5}@media(max-width: 768px){.login-brand{display:none}.login-form-wrapper{padding:30px 20px}}body.logged{display:flex;min-height:100vh;background:#f4f6f9}.sidebar{width:260px;min-height:100vh;background:#1e2a3a;position:fixed;top:0;left:0;z-index:1000;display:flex;flex-direction:column;transition:width .3s ease;overflow:hidden}.sidebar.collapsed{width:70px}.sidebar.collapsed .sidebar-header{padding:16px 0;justify-content:center}.sidebar.collapsed .sidebar-header .sidebar-logo{display:none}.sidebar.collapsed .sidebar-header .sidebar-toggle i{transform:rotate(180deg)}.sidebar.collapsed .sidebar-nav ul li a{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li a span{display:none}.sidebar.collapsed .sidebar-nav ul li a i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label{padding:12px 0;justify-content:center}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label span{display:none}.sidebar.collapsed .sidebar-nav ul li.nav-group .nav-group-label i{margin-right:0;font-size:18px}.sidebar.collapsed .sidebar-footer .sidebar-user{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-user .user-info{display:none}.sidebar.collapsed .sidebar-footer .sidebar-logout{justify-content:center}.sidebar.collapsed .sidebar-footer .sidebar-logout span{display:none}.sidebar.collapsed .nav-divider{margin:8px 15px}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 16px;border-bottom:1px solid hsla(0,0%,100%,.08)}.sidebar-header .sidebar-logo a{color:#fff;text-decoration:none;font-size:24px;font-weight:300;letter-spacing:-0.5px}.sidebar-header .sidebar-logo a strong{font-weight:700}.sidebar-header .sidebar-toggle{background:none;border:none;color:#a8b7c7;cursor:pointer;padding:6px;border-radius:6px;transition:all .3s}.sidebar-header .sidebar-toggle:hover{background:hsla(0,0%,100%,.08);color:#fff}.sidebar-header .sidebar-toggle i{transition:transform .3s}.sidebar-nav{flex:1;padding:12px 0;overflow-y:auto}.sidebar-nav ul{list-style:none;margin:0;padding:0}.sidebar-nav ul li.nav-group{margin-bottom:4px}.sidebar-nav ul li.nav-group .nav-group-label{display:flex;align-items:center;padding:11px 20px;color:#d5deea;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li.nav-group .nav-group-label i{width:20px;text-align:center;margin-right:12px;font-size:14px;color:#b6c4d3}.sidebar-nav ul li.nav-group .nav-submenu{margin:0;padding:0;list-style:none}.sidebar-nav ul li.nav-group .nav-submenu li a{padding-left:44px}.sidebar-nav ul li.nav-group.active>.nav-group-label{color:#fff;background:rgba(102,144,244,.12);border-left-color:#6690f4}.sidebar-nav ul li.nav-group.active>.nav-group-label i{color:#6690f4}.sidebar-nav ul li.nav-divider{height:1px;background:hsla(0,0%,100%,.08);margin:8px 20px}.sidebar-nav ul li a{display:flex;align-items:center;padding:11px 20px;color:#a8b7c7;text-decoration:none;font-size:14px;transition:all .2s;border-left:3px solid rgba(0,0,0,0)}.sidebar-nav ul li a i{width:20px;text-align:center;margin-right:12px;font-size:15px}.sidebar-nav ul li a:hover{background:#263548;color:#fff}.sidebar-nav ul li.active>a{background:rgba(102,144,244,.15);color:#fff;border-left-color:#6690f4}.sidebar-nav ul li.active>a i{color:#6690f4}.badge-alerts-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:8px;border-radius:50%;font-size:11px;font-weight:600;line-height:1;background:#fff;color:#6690f4}.sidebar-footer{padding:16px 20px;border-top:1px solid hsla(0,0%,100%,.08)}.sidebar-footer .sidebar-user{display:flex;align-items:center;gap:10px;margin-bottom:12px}.sidebar-footer .sidebar-user .user-avatar{width:34px;height:34px;border-radius:50%;background:rgba(102,144,244,.2);display:flex;align-items:center;justify-content:center;color:#6690f4;font-size:14px;flex-shrink:0}.sidebar-footer .sidebar-user .user-info{overflow:hidden}.sidebar-footer .sidebar-user .user-info .user-email{color:#a8b7c7;font-size:12px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-footer .sidebar-logout{display:flex;align-items:center;gap:8px;color:#e53e3e;text-decoration:none;font-size:13px;padding:8px 10px;border-radius:6px;transition:all .2s}.sidebar-footer .sidebar-logout i{font-size:14px}.sidebar-footer .sidebar-logout:hover{background:rgba(229,62,62,.1)}.main-wrapper{margin-left:260px;flex:1;min-height:100vh;transition:margin-left .3s ease;display:flex;flex-direction:column}.main-wrapper.expanded{margin-left:70px}.topbar{height:56px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;padding:0 25px;position:sticky;top:0;z-index:500}.topbar .topbar-toggle{background:none;border:none;color:#4e5e6a;cursor:pointer;padding:8px 10px;border-radius:6px;font-size:16px;margin-right:15px;transition:all .2s}.topbar .topbar-toggle:hover{background:#f4f6f9}.topbar .topbar-breadcrumb{font-size:16px;font-weight:600;color:#2d3748}.content{flex:1;padding:25px}.app-alert{background:#ebf8ff;border:1px solid #bee3f8;color:#2b6cb0;padding:12px 16px;border-radius:8px;margin-bottom:20px;font-size:14px}.btn{padding:10px 20px;transition:all .2s ease;color:#fff;border:0;border-radius:6px;cursor:pointer;display:inline-flex;text-decoration:none;gap:6px;justify-content:center;align-items:center;font-size:14px;font-family:\"Roboto\",sans-serif;font-weight:500}.btn.btn_small,.btn.btn-xs,.btn.btn-sm{padding:5px 10px;font-size:12px}.btn.btn_small i,.btn.btn-xs i,.btn.btn-sm i{font-size:11px}.btn.btn-success{background:#57b951}.btn.btn-success:hover{background:#4a9c3b}.btn.btn-primary{background:#6690f4}.btn.btn-primary:hover{background:#3164db}.btn.btn-danger{background:#c00}.btn.btn-danger:hover{background:#b30000}.btn.disabled{opacity:.6;pointer-events:none}.form-control{border:1px solid #e2e8f0;border-radius:6px;height:38px;width:100%;padding:6px 12px;font-family:\"Roboto\",sans-serif;font-size:14px;color:#2d3748;transition:border-color .2s,box-shadow .2s}.form-control option{padding:5px}.form-control:focus{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:none}input[type=checkbox]{border:1px solid #e2e8f0}table{border-collapse:collapse;font-size:13px}.table{width:100%}.table th,.table td{border:1px solid #e2e8f0;padding:8px 10px}.table th{background:#f7fafc;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#718096}.table td.center{text-align:center}.table td.left{text-align:left}.table.table-sm td{padding:5px !important}.table input.form-control{font-size:13px;height:32px}.clients-table-wrap,.campaigns-table-wrap,.products-table-wrap,.logs-table-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;max-width:100%;-ms-overflow-style:none;scrollbar-width:none}.clients-table-wrap::-webkit-scrollbar,.campaigns-table-wrap::-webkit-scrollbar,.products-table-wrap::-webkit-scrollbar,.logs-table-wrap::-webkit-scrollbar{display:none}.clients-table-wrap .table,.campaigns-table-wrap .table,.products-table-wrap .table,.logs-table-wrap .table{margin:0;width:100% !important}.clients-table-wrap .table thead th,.campaigns-table-wrap .table thead th,.products-table-wrap .table thead th,.logs-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 16px;white-space:nowrap}.clients-table-wrap .table tbody td,.campaigns-table-wrap .table tbody td,.products-table-wrap .table tbody td,.logs-table-wrap .table tbody td{padding:10px 16px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-table-wrap .table tbody tr:hover td,.campaigns-table-wrap .table tbody tr:hover td,.products-table-wrap .table tbody tr:hover td,.logs-table-wrap .table tbody tr:hover td{background:#f8fafc}.clients-table-wrap .dt-layout-row,.campaigns-table-wrap .dt-layout-row,.products-table-wrap .dt-layout-row,.logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.clients-table-wrap .dt-layout-row:first-child,.campaigns-table-wrap .dt-layout-row:first-child,.products-table-wrap .dt-layout-row:first-child,.logs-table-wrap .dt-layout-row:first-child{display:none}.clients-table-wrap .dt-info,.campaigns-table-wrap .dt-info,.products-table-wrap .dt-info,.logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.clients-table-wrap .dt-paging .pagination,.campaigns-table-wrap .dt-paging .pagination,.products-table-wrap .dt-paging .pagination,.logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.clients-table-wrap .dt-paging .pagination .page-item .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link,.products-table-wrap .dt-paging .pagination .page-item .page-link,.logs-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:fit-content;height:36px;padding:0 14px;border-radius:8px;font-size:13px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;cursor:pointer;transition:all .2s;text-decoration:none;line-height:1;white-space:nowrap}.clients-table-wrap .dt-paging .pagination .page-item .page-link:hover,.campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover,.products-table-wrap .dt-paging .pagination .page-item .page-link:hover,.logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.clients-table-wrap .dt-paging .pagination .page-item.active .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link,.products-table-wrap .dt-paging .pagination .page-item.active .page-link,.logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.clients-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.products-table-wrap .dt-paging .pagination .page-item.disabled .page-link,.logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.clients-table-wrap .dt-processing,.campaigns-table-wrap .dt-processing,.products-table-wrap .dt-processing,.logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.card{background:#fff;padding:20px;border-radius:8px;color:#2d3748;font-size:14px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.card.mb25{margin-bottom:20px}.card .card-header{font-weight:600;font-size:15px}.card .card-body{padding-top:12px}.card .card-body table th,.card .card-body table td{font-size:13px}.card .card-body table th.bold,.card .card-body table td.bold{font-weight:600}.card .card-body table th.text-right,.card .card-body table td.text-right{text-align:right}.card .card-body table th.text-center,.card .card-body table td.text-center{text-align:center}.action_menu{display:flex;margin-bottom:20px;gap:12px}.action_menu .btn{padding:8px 16px}.action_menu .btn.btn_add{background:#57b951}.action_menu .btn.btn_add:hover{background:#4a9c3b}.action_menu .btn.btn_cancel{background:#c00}.action_menu .btn.btn_cancel:hover{background:#b30000}.settings-tabs{display:flex;gap:8px;margin-bottom:18px}.settings-tabs .settings-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;text-decoration:none;color:#6b7a89;background:#e9eef5;border:1px solid #d8e0ea;font-size:13px;font-weight:600;transition:all .2s}.settings-tabs .settings-tab:hover{color:#2d3748;background:#dde6f2}.settings-tabs .settings-tab.active{color:#fff;background:#6690f4;border-color:#6690f4}.settings-card{background:#fff;border-radius:10px;padding:28px;box-shadow:0 1px 4px rgba(0,0,0,.06)}.settings-card .settings-card-header{display:flex;align-items:center;gap:14px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.settings-card .settings-card-header .settings-card-icon{width:44px;height:44px;border-radius:10px;background:rgb(225.706097561,233.7475609756,252.893902439);color:#6690f4;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.settings-card .settings-card-header h3{margin:0;font-size:17px;font-weight:600;color:#2d3748}.settings-card .settings-card-header small{color:#8899a6;font-size:13px}.settings-card .settings-field{margin-bottom:18px}.settings-card .settings-field label{display:block;font-size:13px;font-weight:600;color:#2d3748;margin-bottom:6px}.settings-card .settings-input-wrap{position:relative}.settings-card .settings-input-wrap .settings-input-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:14px;pointer-events:none}.settings-card .settings-input-wrap .form-control{padding-left:38px}.settings-card .settings-input-wrap .settings-toggle-pw{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:none;border:none;color:#a0aec0;cursor:pointer;padding:6px 10px;font-size:14px;transition:color .2s}.settings-card .settings-input-wrap .settings-toggle-pw:hover{color:#6690f4}.settings-card .settings-field .settings-toggle-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:14px;font-weight:500;user-select:none;margin-bottom:0;width:100%}.settings-card .settings-field .settings-toggle-label .settings-toggle-text{flex:1 1 auto;min-width:0;line-height:1.35}.settings-card .settings-toggle-checkbox{display:none}.settings-card .settings-toggle-checkbox+.settings-toggle-switch{display:inline-block;position:relative;width:44px;height:24px;background:#ccc;border-radius:12px;transition:background .2s;flex-shrink:0}.settings-card .settings-toggle-checkbox+.settings-toggle-switch::after{content:\"\";position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch{background:#22c55e}.settings-card .settings-toggle-checkbox:checked+.settings-toggle-switch::after{transform:translateX(20px)}.settings-card .settings-fields-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}@media(max-width: 768px){.settings-card .settings-fields-grid{grid-template-columns:1fr}}.settings-card .settings-alert-error{display:flex;align-items:center;gap:10px;background:#fff5f5;color:#c00;border:1px solid #fed7d7;border-radius:8px;padding:12px 16px;margin-bottom:20px;font-size:13px}.settings-card .settings-alert-error i{font-size:16px;flex-shrink:0}.feeds-page .feeds-header{margin-bottom:20px}.feeds-page .feeds-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.feeds-page .feeds-header h2 i{color:#6690f4;margin-right:8px}.feeds-page .empty-state-box{text-align:center;padding:50px 20px;color:#a0aec0}.feeds-page .empty-state-box i{font-size:40px;margin-bottom:12px;display:block}.feeds-page .empty-state-box p{margin:0;font-size:15px}.feeds-page .feed-link{color:#6690f4;text-decoration:none;font-weight:500;font-size:13px}.feeds-page .feed-link:hover{text-decoration:underline}.feeds-page .feed-link i{font-size:11px;margin-right:4px}.feeds-page .btn-icon-copy{background:none;border:none;color:#8899a6;cursor:pointer;padding:2px 6px;font-size:13px;margin-left:6px}.feeds-page .btn-icon-copy:hover{color:#6690f4}.clients-page .clients-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.clients-page .clients-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.clients-page .clients-header h2 i{color:#6690f4;margin-right:8px}.clients-page .clients-table-wrap .table .client-id{color:#8899a6;font-size:13px;font-weight:600}.clients-page .clients-table-wrap .table .client-name{font-weight:600;color:#2d3748}.clients-page .badge-id{display:inline-block;background:#eef2ff;color:#6690f4;font-size:13px;font-weight:600;padding:4px 10px;border-radius:6px;font-family:monospace}.clients-page .actions-cell{text-align:center;white-space:nowrap}.clients-page .btn-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s;margin:0 2px}.clients-page .btn-icon.btn-icon-edit{background:#eef2ff;color:#6690f4}.clients-page .btn-icon.btn-icon-edit:hover{background:#6690f4;color:#fff}.clients-page .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.clients-page .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.clients-page .btn-icon.btn-icon-sync{background:#f0fdf4;color:#16a34a}.clients-page .btn-icon.btn-icon-sync:hover{background:#16a34a;color:#fff}.clients-page .btn-icon.btn-icon-sync:disabled{opacity:.7;cursor:wait}.clients-page .btn-icon.btn-icon-sync.is-queued{background:#fef3c7;color:#d97706}.clients-page .client-sync-bars{display:flex;flex-direction:column;gap:4px}.clients-page .client-sync-row{display:flex;align-items:center;gap:4px}.clients-page .client-sync-label{font-size:11px;font-weight:600;color:#8899a6;width:18px;flex-shrink:0}.clients-page .client-sync-track{flex:1;height:6px;border-radius:999px;background:#e9eef5;overflow:hidden}.clients-page .client-sync-fill{height:100%;border-radius:999px;background:#cbd5e0;transition:width .4s ease}.clients-page .client-sync-fill.is-active{background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.clients-page .client-sync-fill.is-done{background:#57b951}.clients-page .client-sync-pct{font-size:11px;font-weight:600;color:#8899a6;width:32px;text-align:right;flex-shrink:0}.clients-page .sync-dropdown{position:relative;display:inline-block}.clients-page .sync-dropdown .sync-dropdown-menu{display:none;position:absolute;right:0;top:100%;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.12);padding:4px 0;min-width:200px;white-space:nowrap}.clients-page .sync-dropdown .sync-dropdown-menu button{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;border:none;background:none;font-size:13px;color:#2d3748;cursor:pointer;text-align:left}.clients-page .sync-dropdown .sync-dropdown-menu button:hover{background:#f7fafc}.clients-page .sync-dropdown .sync-dropdown-menu button:disabled{opacity:.4;cursor:default}.clients-page .sync-dropdown .sync-dropdown-menu button i{width:16px;text-align:center;color:#8899a6}.clients-page .sync-dropdown.is-open .sync-dropdown-menu{display:block}.clients-page .empty-state{text-align:center;padding:50px 20px !important;color:#a0aec0}.clients-page .empty-state i{font-size:40px;margin-bottom:12px;display:block}.clients-page .empty-state p{margin:0;font-size:15px}.btn-secondary{background:#e2e8f0;color:#2d3748;border:none;padding:8px 18px;border-radius:6px;font-size:14px;cursor:pointer;transition:background .2s}.btn-secondary:hover{background:#cbd5e0}.campaigns-page{max-width:100%;overflow-x:hidden;width:100%}.campaigns-page .campaigns-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.campaigns-page .campaigns-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.campaigns-page .campaigns-header h2 i{color:#6690f4;margin-right:8px}.campaigns-page .campaigns-filters{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:20px}.campaigns-page .campaigns-filters .filter-group{flex:1;min-width:0}.campaigns-page .campaigns-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.campaigns-page .campaigns-filters .filter-group label i{margin-right:4px}.campaigns-page .campaigns-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.campaigns-page .campaigns-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .filter-group .filter-with-action{display:flex;align-items:center;gap:8px}.campaigns-page .campaigns-filters .filter-group .filter-with-action .form-control{flex:1}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon{flex-shrink:0;width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:none;cursor:pointer;font-size:14px;transition:all .2s}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete{background:#fff5f5;color:#c00}.campaigns-page .campaigns-filters .filter-group .filter-with-action .btn-icon.btn-icon-delete:hover{background:#c00;color:#fff}.campaigns-page .campaigns-filters .filter-group-campaign-multi{flex:2 !important}.campaigns-page .campaigns-filters .campaign-dropdown{flex:1;min-width:0;position:relative}.campaigns-page .campaigns-filters .campaign-dropdown-trigger{width:100%;padding:10px 14px;padding-right:32px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;cursor:pointer;display:flex;align-items:center;transition:border-color .2s;position:relative;min-height:42px;box-sizing:border-box}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-text.is-placeholder{color:#8899a6}.campaigns-page .campaigns-filters .campaign-dropdown-trigger .campaign-dropdown-arrow{position:absolute;right:12px;font-size:10px;color:#8899a6;transition:transform .2s}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-trigger{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-arrow{transform:rotate(180deg)}.campaigns-page .campaigns-filters .campaign-dropdown.is-open .campaign-dropdown-menu{display:block}.campaigns-page .campaigns-filters .campaign-dropdown-menu{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:100;max-height:280px;overflow-y:auto;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);padding:4px 0}.campaigns-page .campaigns-filters .campaign-dropdown-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:14px;color:#2d3748;margin:0;transition:background .15s}.campaigns-page .campaigns-filters .campaign-dropdown-item:hover{background:#f8fafc}.campaigns-page .campaigns-filters .campaign-dropdown-item.is-checked{background:#eef2ff}.campaigns-page .campaigns-filters .campaign-dropdown-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;flex-shrink:0;accent-color:#6690f4}.campaigns-page .campaigns-filters .campaign-dropdown-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.campaigns-page .campaigns-list-panel{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);margin-bottom:20px;overflow:hidden}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #e2e8f0;gap:12px}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left{display:flex;align-items:center;gap:8px;font-size:13px;color:#4e5e6a}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left input[type=checkbox]{width:16px;height:16px;cursor:pointer}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left label{cursor:pointer;user-select:none;margin:0}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-left .campaigns-selected-count{margin-left:12px;color:#8899a6}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:hover:not(:disabled){background:#c00;color:#fff}.campaigns-page .campaigns-list-panel .campaigns-list-toolbar-right .campaigns-bulk-delete-btn:disabled{opacity:.4;cursor:not-allowed}.campaigns-page .campaigns-list-panel .campaigns-list-items{display:flex;flex-wrap:wrap;gap:0;padding:8px 8px;max-height:220px;overflow-y:auto}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item{display:flex;align-items:center;gap:8px;padding:6px 12px;margin:2px;border-radius:6px;font-size:13px;color:#2d3748;cursor:pointer;user-select:none;transition:background .15s}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item:hover{background:#f0f4ff}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item input[type=checkbox]{width:15px;height:15px;cursor:pointer;flex-shrink:0}.campaigns-page .campaigns-list-panel .campaigns-list-items .campaigns-list-item .campaigns-list-item-name{white-space:nowrap}.campaigns-page .campaigns-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:20px;min-height:350px;overflow:hidden}.campaigns-page .campaigns-chart-wrap #container{max-width:100%}.campaigns-page .campaigns-table-wrap .table{width:100%}.campaigns-page .delete-history-entry{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.campaigns-page .delete-history-entry:hover{background:#c00;color:#fff}.products-page .products-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.products-page .products-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.products-page .products-header h2 i{color:#6690f4;margin-right:8px}.products-page .products-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:20px;margin-bottom:16px}.products-page .products-filters .filter-group{flex:1 1 220px;min-width:0}.products-page .products-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.products-page .products-filters .filter-group label i{margin-right:4px}.products-page .products-filters .filter-group .form-control{width:100%;padding:10px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.products-page .products-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.products-page .products-filters .filter-group select.form-control{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.products-page .products-filters .filter-group.filter-group-client,.products-page .products-filters .filter-group.filter-group-campaign,.products-page .products-filters .filter-group.filter-group-ad-group{flex:1 1 260px}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions{display:flex;gap:8px;align-items:center}.products-page .products-filters .filter-group.filter-group-ad-group .ad-group-filter-actions .form-control{flex:1 1 auto;min-width:0}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group{min-width:38px;height:38px;border-radius:6px;margin:0;background:#dc3545;border:1px solid #dc3545;color:#fff;cursor:pointer}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:hover:not(:disabled){background:#bb2d3b;border-color:#bb2d3b;color:#fff}.products-page .products-filters .filter-group.filter-group-ad-group #delete-products-ad-group:disabled{opacity:.45;cursor:default;background:#dc3545;border-color:#dc3545;color:#fff}.products-page .products-filters .filter-group.filter-group-roas{flex:0 0 200px}.products-page .products-filters .filter-group.filter-group-search{flex:1 1 200px}.products-page .products-filters .filter-group.filter-group-cl4{flex:0 0 160px}.products-page .products-filters .filter-group.filter-group-columns{flex:0 0 240px}.products-page .products-scope-alerts{margin-bottom:12px;border:1px solid #fecaca;background:#fef2f2;border-radius:8px;overflow:hidden}.products-page .products-scope-alerts summary{cursor:pointer;list-style:none;padding:10px 12px;font-size:13px;font-weight:600;color:#991b1b;display:flex;align-items:center;gap:8px}.products-page .products-scope-alerts summary::-webkit-details-marker{display:none}.products-page .products-scope-alerts .products-scope-alerts-list{border-top:1px solid #fecaca;background:#fff;max-height:260px;overflow:auto}.products-page .products-scope-alerts .products-scope-alert-item{padding:10px 12px;border-bottom:1px solid #f1f5f9}.products-page .products-scope-alerts .products-scope-alert-item:last-child{border-bottom:none}.products-page .products-scope-alerts .products-scope-alert-meta{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:11px;color:#64748b}.products-page .products-scope-alerts .products-scope-alert-type{display:inline-flex;align-items:center;padding:2px 6px;border-radius:999px;background:#eef2ff;color:#4338ca;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.products-page .products-scope-alerts .products-scope-alert-message{font-size:13px;color:#2d3748;line-height:1.45}.products-page .products-actions{margin-bottom:12px}.products-page .products-actions .btn-danger{padding:7px 14px;font-size:13px;border-radius:6px;border:none;cursor:pointer;transition:all .2s}.products-page .products-actions .btn-danger:disabled{opacity:.4;cursor:default}.products-page .products-table-wrap .table{width:100%}.products-page .products-table-wrap .table input.min_roas,.products-page .products-table-wrap .table input.form-control-sm,.products-page .products-table-wrap .table select.custom_label_4,.products-page .products-table-wrap .table select.form-control-sm{padding:3px 6px;font-size:12px;border:1px solid #e2e8f0;border-radius:4px;background:#fff}.products-page .delete-product{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#fff5f5;color:#c00;transition:all .2s}.products-page .delete-product:hover{background:#c00;color:#fff}.products-page .edit-product-title{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;cursor:pointer;font-size:12px;background:#eef2ff;color:#6690f4;transition:all .2s}.products-page .edit-product-title:hover{background:#6690f4;color:#fff}.desc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.desc-header label{margin:0}.desc-tabs{display:flex;gap:2px;background:#eee;border-radius:6px;padding:2px}.desc-tab{border:none;background:rgba(0,0,0,0);padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;color:#666;transition:all .15s ease}.desc-tab i{margin-right:4px}.desc-tab.active{background:#fff;color:#333;box-shadow:0 1px 3px rgba(0,0,0,.12);font-weight:500}.desc-tab:hover:not(.active){color:#333}.desc-wrap{flex:1;min-width:0}.desc-preview ul,.desc-preview ol{margin:6px 0;padding-left:20px}.desc-preview li{margin-bottom:3px}.desc-preview b,.desc-preview strong{font-weight:600}.input-with-ai{display:flex;gap:8px;align-items:flex-start}.input-with-ai .form-control{flex:1}.btn-ai-suggest{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:8px;border:1px solid #c084fc;background:linear-gradient(135deg, #F3E8FF, #EDE9FE);color:#7c3aed;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;min-height:38px}.btn-ai-suggest i{font-size:13px}.btn-ai-suggest:hover{background:linear-gradient(135deg, #7C3AED, #6D28D9);color:#fff;border-color:#6d28d9}.btn-ai-suggest:disabled{opacity:.7;cursor:wait}.btn-ai-suggest.btn-ai-claude{border-color:#d97706;background:linear-gradient(135deg, #FEF3C7, #FDE68A);color:#92400e}.btn-ai-suggest.btn-ai-claude:hover{background:linear-gradient(135deg, #D97706, #B45309);color:#fff;border-color:#b45309}.btn-ai-suggest.btn-ai-gemini{border-color:#4285f4;background:linear-gradient(135deg, #E8F0FE, #D2E3FC);color:#1a73e8}.btn-ai-suggest.btn-ai-gemini:hover{background:linear-gradient(135deg, #4285F4, #1A73E8);color:#fff;border-color:#1a73e8}.form_container{background:#fff;padding:25px;max-width:1300px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}.form_container.full{max-width:100%}.form_container .form_group{margin-bottom:12px;display:flex}.form_container .form_group>.label{width:300px;display:inline-flex;align-items:flex-start;justify-content:right;padding-right:12px}.form_container .form_group .input{width:calc(100% - 300px)}.default_popup{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.45);display:none;z-index:2000}.default_popup .popup_content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);background:#fff;padding:25px;border-radius:10px;max-width:1140px;width:95%;box-shadow:0 20px 60px rgba(0,0,0,.15)}.default_popup .popup_content .popup_header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.default_popup .popup_content .popup_header .title{font-size:18px;font-weight:600}.default_popup .popup_content .close{cursor:pointer;color:#a0aec0;font-size:18px;padding:4px}.default_popup .popup_content .close:hover{color:#c00}.dt-layout-table{margin-bottom:20px}.pagination button{border:1px solid #e2e8f0;background:#fff;display:inline-flex;height:32px;width:32px;align-items:center;justify-content:center;margin:0 2px;border-radius:4px;transition:all .2s;cursor:pointer}.pagination button:hover{background:#f4f6f9;border-color:#6690f4}table#products a{color:inherit;text-decoration:none}table#products .table-product-title{display:flex;justify-content:space-between}table#products .edit-product-title{display:flex;height:25px;align-items:center;justify-content:center;width:25px;cursor:pointer;background:#fff;border:1px solid #cbd5e0;color:#cbd5e0;border-radius:4px}table#products .edit-product-title:hover{background:#cbd5e0;color:#fff}table#products a.custom_name{color:#57b951 !important}.product-history-page .product-history-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.product-history-page .product-history-meta span{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;color:#4e5e6a;background:#eef2ff;border:1px solid #d9e2ff}.product-history-page .product-history-chart-wrap{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:20px;margin-bottom:16px}.product-history-page .chart-with-form{display:flex;gap:20px;align-items:flex-start}.product-history-page .chart-area{flex:1 1 auto;min-width:0}.product-history-page .product-history-chart{min-height:360px}.product-history-page .comment-form{width:340px;flex:0 0 340px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:14px}.product-history-page .comment-form .form-group{margin-bottom:12px}.product-history-page .comment-form label{display:block;font-weight:600;margin-bottom:6px;font-size:13px;color:#52606d}.product-history-page .comment-form input[type=date],.product-history-page .comment-form textarea{width:100%;border:1px solid #e2e8f0;border-radius:6px;padding:8px 12px;font-size:14px;font-family:\"Roboto\",sans-serif;background:#fff}.product-history-page .comment-form input[type=date]:focus,.product-history-page .comment-form textarea:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.product-history-page .comment-form textarea{min-height:110px;resize:vertical}.product-history-page .comment-form .btn{width:100%;justify-content:center;padding:10px 16px}.product-history-page .comment-form .btn[disabled]{opacity:.6;cursor:not-allowed}.product-history-page .products-table-wrap{overflow-x:auto}.product-history-page .products-table-wrap .table{min-width:980px}.product-history-page .products-table-wrap .comment-cell{display:flex;align-items:center;justify-content:space-between;gap:10px}.product-history-page .products-table-wrap .comment-text{word-break:break-word}.product-history-page .products-table-wrap .delete-comment{color:#c00;text-decoration:none;font-weight:600;white-space:nowrap}.product-history-page .products-table-wrap .delete-comment:hover{text-decoration:underline}.product-history-page .products-table-wrap .dt-paging .pagination .page-item{list-style:none}.cron-status-overview{display:flex;flex-wrap:wrap;gap:10px 20px;margin-bottom:20px;color:#4e5e6a;font-size:13px}.cron-progress-list{margin-bottom:20px}.cron-schedule-list{margin-bottom:20px}.cron-schedule-item{border:1px solid #dfe7f0;background:#f4f8fd;border-radius:8px;padding:9px 12px;margin-bottom:8px}.cron-schedule-item:last-child{margin-bottom:0}.cron-schedule-item strong{display:block;color:#2d3748;font-size:13px;font-weight:700;margin-bottom:2px}.cron-schedule-item small{display:block;color:#678;font-size:12px;line-height:1.35}.cron-progress-item{margin-bottom:14px}.cron-progress-item:last-child{margin-bottom:0}.cron-progress-item .cron-progress-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;font-size:13px}.cron-progress-item .cron-progress-head strong{color:#2d3748;font-weight:600}.cron-progress-item .cron-progress-head span{color:#6b7a89;font-size:12px;font-weight:600;white-space:nowrap}.cron-progress-item small{display:block;margin-top:5px;color:#789;font-size:12px}.cron-progress-bar{width:100%;height:10px;border-radius:999px;background:#e9eef5;overflow:hidden}.cron-progress-bar>span{display:block;height:100%;background:linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%)}.cron-url-list{margin-bottom:20px}.cron-url-item{border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;padding:10px 12px;margin-bottom:10px}.cron-url-item:last-child{margin-bottom:0}.cron-url-item .cron-url-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.cron-url-item .cron-url-top strong{color:#2d3748;font-size:13px;font-weight:600}.cron-url-item .cron-url-top small{color:#7a8794;font-size:11px;white-space:nowrap}.cron-url-item code{display:block;background:#eef2f7;border:1px solid #dde4ed;border-radius:6px;padding:6px 8px;color:#2e3b49;font-size:12px;overflow-x:auto}.cron-url-item .cron-url-plan{display:block;color:#6c7b8a;font-size:11px;margin-bottom:6px}@media(max-width: 1200px){.product-history-page .chart-with-form{flex-direction:column}.product-history-page .comment-form{width:100%;flex:1 1 auto}}.jconfirm-box .form-group .select2-container,.adspro-dialog-box .form-group .select2-container{width:100% !important;margin-top:8px}.jconfirm-box .select2-container--default .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;min-height:42px;display:flex;align-items:center;padding:4px 12px;box-shadow:none;transition:border-color .2s,box-shadow .2s;font-size:14px}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;line-height:1.4;color:#495057}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder{color:#cbd5e0}.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;right:8px}.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,.jconfirm-box .select2-container--default .select2-selection--single:hover,.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,.adspro-dialog-box .select2-container--default .select2-selection--single:hover{border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1);outline:0}.jconfirm-box .select2-container .select2-dropdown,.adspro-dialog-box .select2-container .select2-dropdown{border-color:#e2e8f0;border-radius:0 0 6px 6px;font-size:14px}.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field{padding:6px 10px;border-radius:4px;border:1px solid #e2e8f0;font-size:14px}.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#6690f4;color:#fff}@media(max-width: 992px){.sidebar{transform:translateX(-100%)}.sidebar.mobile-open{transform:translateX(0)}.main-wrapper{margin-left:0 !important}}.campaign-terms-wrap{display:flex;flex-direction:column;gap:20px;margin-top:20px}.campaign-terms-page{max-width:100%;overflow:hidden}.campaign-terms-page .campaigns-filters{flex-wrap:wrap}.campaign-terms-page .campaigns-filters .filter-group{min-width:220px}.campaign-terms-page .campaigns-filters .filter-group.terms-columns-group{min-width:280px}.campaign-terms-page .terms-card-toggle{margin-left:auto;width:28px;height:28px;border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#475569;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-card-toggle:hover{background:#f8fafc;border-color:#cbd5e1}.campaign-terms-page .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap{display:none}.campaign-terms-page .terms-search-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-search-toolbar label{font-size:12px;font-weight:600;color:#475569;display:inline-flex;align-items:center;gap:6px;margin:0;white-space:nowrap}.campaign-terms-page .terms-search-toolbar .terms-search-toolbar-label{min-width:86px}.campaign-terms-page .terms-search-toolbar #terms_min_clicks_all,.campaign-terms-page .terms-search-toolbar #terms_max_clicks_all{width:160px;height:32px}.campaign-terms-page .terms-search-toolbar #terms_min_conversions_all,.campaign-terms-page .terms-search-toolbar #terms_max_conversions_all{width:130px;max-width:130px}.campaign-terms-page .terms-search-selected-label{margin:0;font-size:12px;color:#475569;font-weight:600;white-space:nowrap}.campaign-terms-page .terms-ai-analyze-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-ai-analyze-btn:hover{background:#dbeafe;border-color:#93c5fd}.campaign-terms-page .terms-ai-analyze-btn:disabled{opacity:.6;cursor:wait}.campaign-terms-page .terms-table-search-input{width:200px;min-width:120px;max-width:200px;height:32px;font-size:12px;flex:0 1 200px}.campaign-terms-page .terms-negative-toolbar,.campaign-terms-page .terms-keywords-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:6px;border:1px solid #fecaca;background:#fef2f2;color:#dc2626;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.campaign-terms-page .terms-negative-bulk-btn:hover{background:#fee2e2;border-color:#fca5a5}.campaign-terms-page .terms-negative-bulk-btn:disabled{opacity:.5;cursor:not-allowed}.campaign-terms-page table.campaigns-extra-table>thead>tr>th{position:sticky;top:0;z-index:2;background-color:#111827 !important;color:#e5e7eb !important;border-bottom:1px solid #0b1220 !important;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;white-space:nowrap}.campaign-terms-page #terms_search_table thead th .dt-column-order,.campaign-terms-page #terms_negative_table thead th .dt-column-order{display:none !important}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.campaign-terms-page #terms_search_table thead th .dt-column-title,.campaign-terms-page #terms_negative_table thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.campaign-terms-page #terms_search_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_search_table thead th.dt-orderable-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-orderable-desc::after{content:\"↕\";position:absolute;right:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:999px;font-size:12px;font-weight:700;line-height:16px;text-align:center;color:#e5e7eb;background:#374151}.campaign-terms-page #terms_search_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-asc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=ascending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=ascending]::after{content:\"▲\";color:#fff;background:#2563eb}.campaign-terms-page #terms_search_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_negative_table thead th.dt-ordering-desc::after,.campaign-terms-page #terms_search_table thead th[aria-sort=descending]::after,.campaign-terms-page #terms_negative_table thead th[aria-sort=descending]::after{content:\"▼\";color:#fff;background:#2563eb}.campaign-terms-page #terms_negative_select_all,.campaign-terms-page .terms-negative-select-row,.campaign-terms-page #terms_search_select_all,.campaign-terms-page .terms-search-select-row{width:14px;height:14px;cursor:pointer}.campaign-terms-page .dt-layout-row:first-child{display:none}.campaign-terms-page .dt-layout-row{padding:10px 12px;margin:0 !important;border-top:1px solid #f1f5f9}.campaign-terms-page .dt-info{font-size:12px;color:#64748b}.campaign-terms-page .dt-paging .pagination{margin:0;padding:0;list-style:none !important;display:flex;align-items:center;gap:6px}.campaign-terms-page .dt-paging .pagination .page-item{list-style:none !important}.campaign-terms-page .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;width:fit-content;height:32px;padding:0 12px;border-radius:6px;font-size:12px;font-weight:500;border:1px solid #e2e8f0;background:#fff;color:#4e5e6a;text-decoration:none;line-height:1;white-space:nowrap}.campaign-terms-page .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.previous .page-link,.campaign-terms-page .dt-paging .pagination .page-item.next .page-link{min-width:72px}.campaign-terms-page .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4}.campaign-terms-page .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.terms-columns-box{display:flex;flex-direction:column;gap:6px}.terms-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.terms-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.terms-columns-control summary::-webkit-details-marker{display:none}.terms-columns-control summary::after{content:\"▼\";float:right;font-size:10px;color:#64748b;margin-top:2px}.terms-columns-control[open] summary::after{content:\"▲\"}.terms-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:180px;overflow-y:auto}.terms-columns-list .terms-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.terms-columns-list .terms-col-item:last-child{margin-bottom:0}.terms-columns-list .terms-col-item input[type=checkbox]{margin:0}.campaigns-extra-card{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.campaigns-extra-card-title{padding:14px 16px;border-bottom:1px solid #e2e8f0;font-size:13px;font-weight:700;color:#334155;display:flex;align-items:center;gap:8px}.campaigns-extra-card-title .terms-card-title-label{display:inline-flex;align-items:center;gap:8px}.campaigns-extra-table-wrap{overflow:auto}.campaigns-extra-table{margin:0;width:100%;table-layout:fixed}.campaigns-extra-table tbody td{padding:9px 12px;border-bottom:1px solid #f1f5f9;font-size:13px;color:#334155;vertical-align:middle;white-space:nowrap}.campaigns-extra-table td.num-cell{text-align:right;white-space:nowrap}.campaigns-extra-table td.text-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table th.terms-negative-select-cell,.campaigns-extra-table td.terms-negative-select-cell,.campaigns-extra-table th.terms-search-select-cell,.campaigns-extra-table td.terms-search-select-cell{text-align:center}.campaigns-extra-table th.phrase-nowrap,.campaigns-extra-table td.phrase-nowrap{white-space:nowrap !important;overflow:hidden;text-overflow:ellipsis}.campaigns-extra-table .terms-add-negative-btn,.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s}.campaigns-extra-table .terms-add-negative-btn{border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-add-negative-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table .terms-remove-negative-btn,.campaigns-extra-table .terms-delete-keyword-btn{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover,.campaigns-extra-table .terms-delete-keyword-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.campaigns-extra-table .terms-toggle-keyword-status-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #fde68a;background:#fffbeb;color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn:hover{background:#d97706;color:#fff;border-color:#d97706}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success{border-color:#a7f3d0;background:#ecfdf5;color:#059669}.campaigns-extra-table .terms-toggle-keyword-status-btn.text-success:hover{background:#059669;color:#fff;border-color:#059669}.campaigns-extra-table .terms-change-match-type-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer;transition:all .2s;border:1px solid #e2e8f0;background:#eef2ff;color:#3b82f6}.campaigns-extra-table .terms-change-match-type-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}.campaigns-extra-table tbody tr:hover{background:#f8fafc}.campaigns-extra-table tbody tr.term-is-negative td{color:#dc2626}.campaigns-extra-table tbody tr.term-is-negative:hover{background:#fef2f2}.campaigns-empty-row{text-align:center;color:#94a3b8 !important;font-style:italic}.terms-ai-modal-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.terms-ai-modal-toolbar label{font-size:12px;font-weight:600;color:#334155;margin:0}.terms-ai-modal-toolbar .form-control{width:200px;height:32px}.terms-ai-summary{font-size:12px;color:#64748b;margin-bottom:10px}.terms-ai-results-wrap{border:1px solid #e2e8f0;border-radius:8px;max-height:420px;overflow:auto}.terms-ai-results-table{width:100%;border-collapse:collapse;font-size:12px}.terms-ai-results-table th,.terms-ai-results-table td{border-bottom:1px solid #eef2f7;padding:8px;vertical-align:middle}.terms-ai-results-table th{position:sticky;top:0;background:#f8fafc;color:#334155;font-weight:700}.terms-ai-results-table td.term-col{min-width:260px;max-width:380px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.terms-ai-results-table td.reason-col{min-width:320px}.terms-ai-action-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.terms-ai-action-badge.action-exclude{background:#fee2e2;color:#b91c1c}.terms-ai-action-badge.action-keep{background:#dcfce7;color:#166534}.products-page .products-filters .filter-group.filter-group-columns{min-width:240px}.products-columns-control{border:1px solid #e2e8f0;border-radius:6px;background:#fff;overflow:hidden}.products-columns-control summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:600;color:#334155;list-style:none}.products-columns-control summary::-webkit-details-marker{display:none}.products-columns-control summary::after{content:\"▼\";float:right;font-size:10px;color:#64748b;margin-top:2px}.products-columns-control[open] summary::after{content:\"▲\"}.products-columns-list{border-top:1px solid #eef2f7;padding:8px 10px;max-height:220px;overflow-y:auto}.products-columns-list .products-col-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#334155;margin-bottom:6px}.products-columns-list .products-col-item:last-child{margin-bottom:0}.products-columns-list .products-col-item input[type=checkbox]{margin:0}#products th:last-child,#products td:last-child{white-space:nowrap}#products tr.product-row-unavailable{opacity:.45}#products tr.product-row-unavailable td{background-color:#f0f0f0 !important}#products .product-warning-icon{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:#dc2626;font-size:16px}#products .product-warning-icon:hover{color:#b91c1c}#products .products-row-actions{display:inline-flex;align-items:center;gap:4px}#products .products-row-actions .btn{width:38px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:4px !important}#products .products-row-actions .btn i{line-height:1}.logs-page .logs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.logs-page .logs-header h2{margin:0;font-size:20px;font-weight:600;color:#2d3748}.logs-page .logs-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:16px}.logs-page .logs-filters .filter-group{flex:1 1 160px;min-width:0;max-width:220px}.logs-page .logs-filters .filter-group label{display:block;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;margin-bottom:6px}.logs-page .logs-filters .filter-group .form-control{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:14px;color:#2d3748;background:#fff;transition:border-color .2s}.logs-page .logs-filters .filter-group .form-control:focus{outline:none;border-color:#6690f4;box-shadow:0 0 0 3px rgba(102,144,244,.1)}.logs-page .logs-filters .filter-group select.form-control{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.logs-page .logs-filters .filter-group.filter-group-buttons{flex:0 0 auto;display:flex;gap:6px;max-width:none}.logs-page .logs-table-wrap .table{width:100%}.logs-page .badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.logs-page .badge-success{background:#d1fae5;color:#065f46}.logs-page .badge-danger{background:#fee2e2;color:#991b1b}.logs-page .badge-warning{background:#fef3c7;color:#92400e}.js-title-alt-apply{color:#000;justify-content:flex-start}","@use \"sass:color\";\r\n// === adsPRO - Nowe style ===\r\n\r\n// --- Zmienne ---\r\n$cPrimary: #6690F4;\r\n$cPrimaryDark: #3164db;\r\n$cSidebarBg: #1E2A3A;\r\n$cSidebarText: #A8B7C7;\r\n$cSidebarHover: #263548;\r\n$cSidebarActive: $cPrimary;\r\n$cContentBg: #F4F6F9;\r\n$cWhite: #FFFFFF;\r\n$cText: #4E5E6A;\r\n$cTextDark: #2D3748;\r\n$cBorder: #E2E8F0;\r\n$cSuccess: #57B951;\r\n$cSuccessDark: #4a9c3b;\r\n$cDanger: #CC0000;\r\n$cDangerDark: #b30000;\r\n$cWarning: #FF8C00;\r\n$cGreenLight: #57b951;\r\n\r\n$sidebarWidth: 260px;\r\n$sidebarCollapsed: 70px;\r\n$topbarHeight: 56px;\r\n$transitionSpeed: 0.3s;\r\n\r\n// --- Reset i baza ---\r\n* {\r\n box-sizing: border-box;\r\n}\r\n\r\nbody {\r\n font-family: \"Roboto\", sans-serif;\r\n margin: 0;\r\n padding: 0;\r\n font-size: 14px;\r\n color: $cText;\r\n background: $cContentBg;\r\n max-width: 100vw;\r\n overflow-x: hidden;\r\n}\r\n\r\n.hide {\r\n display: none;\r\n}\r\n\r\n// --- Typografia ---\r\nsmall {\r\n font-size: .75em;\r\n}\r\n\r\n.text-right {\r\n text-align: right;\r\n}\r\n\r\n.text-bold {\r\n font-weight: 700 !important;\r\n}\r\n\r\n.nowrap {\r\n white-space: nowrap;\r\n}\r\n\r\n// ===========================\r\n// LOGIN PAGE (unlogged)\r\n// ===========================\r\nbody.unlogged {\r\n background: $cContentBg;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n.login-container {\r\n display: flex;\r\n min-height: 100vh;\r\n}\r\n\r\n.login-brand {\r\n flex: 0 0 45%;\r\n background: linear-gradient(135deg, $cSidebarBg 0%, #2C3E57 50%, $cPrimary 100%);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 60px;\r\n position: relative;\r\n overflow: hidden;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n top: -50%;\r\n right: -50%;\r\n width: 100%;\r\n height: 100%;\r\n background: radial-gradient(circle, rgba($cPrimary, 0.15) 0%, transparent 70%);\r\n border-radius: 50%;\r\n }\r\n\r\n .brand-content {\r\n position: relative;\r\n z-index: 1;\r\n color: $cWhite;\r\n max-width: 400px;\r\n }\r\n\r\n .brand-logo {\r\n font-size: 48px;\r\n font-weight: 300;\r\n margin-bottom: 20px;\r\n letter-spacing: -1px;\r\n\r\n strong {\r\n font-weight: 700;\r\n }\r\n }\r\n\r\n .brand-tagline {\r\n font-size: 18px;\r\n opacity: 0.85;\r\n line-height: 1.6;\r\n margin-bottom: 50px;\r\n }\r\n\r\n .brand-features {\r\n .feature {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin-bottom: 20px;\r\n opacity: 0.8;\r\n\r\n i {\r\n font-size: 20px;\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba($cWhite, 0.1);\r\n border-radius: 10px;\r\n }\r\n\r\n span {\r\n font-size: 15px;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.login-form-wrapper {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 60px;\r\n background: $cWhite;\r\n}\r\n\r\n.login-box {\r\n width: 100%;\r\n max-width: 420px;\r\n\r\n .login-header {\r\n margin-bottom: 35px;\r\n\r\n h1 {\r\n font-size: 28px;\r\n font-weight: 700;\r\n color: $cTextDark;\r\n margin: 0 0 8px;\r\n }\r\n\r\n p {\r\n color: #718096;\r\n font-size: 15px;\r\n margin: 0;\r\n }\r\n }\r\n\r\n .form-group {\r\n margin-bottom: 20px;\r\n\r\n label {\r\n display: block;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n margin-bottom: 6px;\r\n }\r\n }\r\n\r\n .input-with-icon {\r\n position: relative;\r\n\r\n i {\r\n position: absolute;\r\n left: 14px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #A0AEC0;\r\n font-size: 14px;\r\n }\r\n\r\n .form-control {\r\n padding-left: 42px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n height: 46px;\r\n border: 2px solid $cBorder;\r\n border-radius: 8px;\r\n padding: 0 14px;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n color: $cTextDark;\r\n transition: border-color $transitionSpeed, box-shadow $transitionSpeed;\r\n\r\n &::placeholder {\r\n color: #CBD5E0;\r\n }\r\n\r\n &:focus {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.15);\r\n outline: none;\r\n }\r\n }\r\n\r\n .form-error {\r\n color: $cDanger;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n }\r\n\r\n .checkbox-group {\r\n .checkbox-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n color: #718096;\r\n font-weight: 400;\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n accent-color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n .btn-login {\r\n width: 100%;\r\n height: 48px;\r\n font-size: 15px;\r\n font-weight: 600;\r\n border-radius: 8px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n\r\n &.disabled {\r\n opacity: 0.7;\r\n pointer-events: none;\r\n }\r\n }\r\n\r\n .alert {\r\n display: none;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n margin-bottom: 20px;\r\n\r\n &.alert-danger {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n border: 1px solid #FED7D7;\r\n }\r\n\r\n &.alert-success {\r\n background: #F0FFF4;\r\n color: #276749;\r\n border: 1px solid #C6F6D5;\r\n }\r\n }\r\n}\r\n\r\n// Responsywność logowania\r\n@media (max-width: 768px) {\r\n .login-brand {\r\n display: none;\r\n }\r\n\r\n .login-form-wrapper {\r\n padding: 30px 20px;\r\n }\r\n}\r\n\r\n// ===========================\r\n// LAYOUT (logged) - SIDEBAR\r\n// ===========================\r\nbody.logged {\r\n display: flex;\r\n min-height: 100vh;\r\n background: $cContentBg;\r\n}\r\n\r\n// --- Sidebar ---\r\n.sidebar {\r\n width: $sidebarWidth;\r\n min-height: 100vh;\r\n background: $cSidebarBg;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 1000;\r\n display: flex;\r\n flex-direction: column;\r\n transition: width $transitionSpeed ease;\r\n overflow: hidden;\r\n\r\n &.collapsed {\r\n width: $sidebarCollapsed;\r\n\r\n .sidebar-header {\r\n padding: 16px 0;\r\n justify-content: center;\r\n\r\n .sidebar-logo {\r\n display: none;\r\n }\r\n\r\n .sidebar-toggle i {\r\n transform: rotate(180deg);\r\n }\r\n }\r\n\r\n .sidebar-nav ul li a {\r\n padding: 12px 0;\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n i {\r\n margin-right: 0;\r\n font-size: 18px;\r\n }\r\n }\r\n\r\n .sidebar-nav ul li.nav-group .nav-group-label {\r\n padding: 12px 0;\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n i {\r\n margin-right: 0;\r\n font-size: 18px;\r\n }\r\n }\r\n\r\n .sidebar-footer {\r\n .sidebar-user {\r\n justify-content: center;\r\n\r\n .user-info {\r\n display: none;\r\n }\r\n }\r\n\r\n .sidebar-logout {\r\n justify-content: center;\r\n\r\n span {\r\n display: none;\r\n }\r\n }\r\n }\r\n\r\n .nav-divider {\r\n margin: 8px 15px;\r\n }\r\n }\r\n}\r\n\r\n.sidebar-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 20px 20px 16px;\r\n border-bottom: 1px solid rgba($cWhite, 0.08);\r\n\r\n .sidebar-logo a {\r\n color: $cWhite;\r\n text-decoration: none;\r\n font-size: 24px;\r\n font-weight: 300;\r\n letter-spacing: -0.5px;\r\n\r\n strong {\r\n font-weight: 700;\r\n }\r\n }\r\n\r\n .sidebar-toggle {\r\n background: none;\r\n border: none;\r\n color: $cSidebarText;\r\n cursor: pointer;\r\n padding: 6px;\r\n border-radius: 6px;\r\n transition: all $transitionSpeed;\r\n\r\n &:hover {\r\n background: rgba($cWhite, 0.08);\r\n color: $cWhite;\r\n }\r\n\r\n i {\r\n transition: transform $transitionSpeed;\r\n }\r\n }\r\n}\r\n\r\n.sidebar-nav {\r\n flex: 1;\r\n padding: 12px 0;\r\n overflow-y: auto;\r\n\r\n ul {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n &.nav-group {\r\n margin-bottom: 4px;\r\n\r\n .nav-group-label {\r\n display: flex;\r\n align-items: center;\r\n padding: 11px 20px;\r\n color: #D5DEEA;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.6px;\r\n border-left: 3px solid transparent;\r\n\r\n i {\r\n width: 20px;\r\n text-align: center;\r\n margin-right: 12px;\r\n font-size: 14px;\r\n color: #B6C4D3;\r\n }\r\n }\r\n\r\n .nav-submenu {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n\r\n li a {\r\n padding-left: 44px;\r\n }\r\n }\r\n\r\n &.active>.nav-group-label {\r\n color: $cWhite;\r\n background: rgba($cPrimary, 0.12);\r\n border-left-color: $cPrimary;\r\n\r\n i {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n &.nav-divider {\r\n height: 1px;\r\n background: rgba($cWhite, 0.08);\r\n margin: 8px 20px;\r\n }\r\n\r\n a {\r\n display: flex;\r\n align-items: center;\r\n padding: 11px 20px;\r\n color: $cSidebarText;\r\n text-decoration: none;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n border-left: 3px solid transparent;\r\n\r\n i {\r\n width: 20px;\r\n text-align: center;\r\n margin-right: 12px;\r\n font-size: 15px;\r\n }\r\n\r\n &:hover {\r\n background: $cSidebarHover;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.active>a {\r\n background: rgba($cPrimary, 0.15);\r\n color: $cWhite;\r\n border-left-color: $cPrimary;\r\n\r\n i {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.badge-alerts-count {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 20px;\r\n height: 20px;\r\n padding: 0 6px;\r\n margin-left: 8px;\r\n border-radius: 50%;\r\n font-size: 11px;\r\n font-weight: 600;\r\n line-height: 1;\r\n background: $cWhite;\r\n color: $cPrimary;\r\n}\r\n\r\n.sidebar-footer {\r\n padding: 16px 20px;\r\n border-top: 1px solid rgba($cWhite, 0.08);\r\n\r\n .sidebar-user {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 12px;\r\n\r\n .user-avatar {\r\n width: 34px;\r\n height: 34px;\r\n border-radius: 50%;\r\n background: rgba($cPrimary, 0.2);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: $cPrimary;\r\n font-size: 14px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .user-info {\r\n overflow: hidden;\r\n\r\n .user-email {\r\n color: $cSidebarText;\r\n font-size: 12px;\r\n display: block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n }\r\n\r\n .sidebar-logout {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n color: #E53E3E;\r\n text-decoration: none;\r\n font-size: 13px;\r\n padding: 8px 10px;\r\n border-radius: 6px;\r\n transition: all 0.2s;\r\n\r\n i {\r\n font-size: 14px;\r\n }\r\n\r\n &:hover {\r\n background: rgba(#E53E3E, 0.1);\r\n }\r\n }\r\n}\r\n\r\n// --- Main wrapper ---\r\n.main-wrapper {\r\n margin-left: $sidebarWidth;\r\n flex: 1;\r\n min-height: 100vh;\r\n transition: margin-left $transitionSpeed ease;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n &.expanded {\r\n margin-left: $sidebarCollapsed;\r\n }\r\n}\r\n\r\n// --- Topbar ---\r\n.topbar {\r\n height: $topbarHeight;\r\n background: $cWhite;\r\n border-bottom: 1px solid $cBorder;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 25px;\r\n position: sticky;\r\n top: 0;\r\n z-index: 500;\r\n\r\n .topbar-toggle {\r\n background: none;\r\n border: none;\r\n color: $cText;\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n border-radius: 6px;\r\n font-size: 16px;\r\n margin-right: 15px;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cContentBg;\r\n }\r\n }\r\n\r\n .topbar-breadcrumb {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n}\r\n\r\n// --- Content area ---\r\n.content {\r\n flex: 1;\r\n padding: 25px;\r\n}\r\n\r\n.app-alert {\r\n background: #EBF8FF;\r\n border: 1px solid #BEE3F8;\r\n color: #2B6CB0;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n}\r\n\r\n// ===========================\r\n// KOMPONENTY WSPÓLNE\r\n// ===========================\r\n\r\n// --- Buttons ---\r\n.btn {\r\n padding: 10px 20px;\r\n transition: all 0.2s ease;\r\n color: $cWhite;\r\n border: 0;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n display: inline-flex;\r\n text-decoration: none;\r\n gap: 6px;\r\n justify-content: center;\r\n align-items: center;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n font-weight: 500;\r\n\r\n &.btn_small,\r\n &.btn-xs,\r\n &.btn-sm {\r\n padding: 5px 10px;\r\n font-size: 12px;\r\n\r\n i {\r\n font-size: 11px;\r\n }\r\n }\r\n\r\n &.btn-success {\r\n background: $cSuccess;\r\n\r\n &:hover {\r\n background: $cSuccessDark;\r\n }\r\n }\r\n\r\n &.btn-primary {\r\n background: $cPrimary;\r\n\r\n &:hover {\r\n background: $cPrimaryDark;\r\n }\r\n }\r\n\r\n &.btn-danger {\r\n background: $cDanger;\r\n\r\n &:hover {\r\n background: $cDangerDark;\r\n }\r\n }\r\n\r\n &.disabled {\r\n opacity: 0.6;\r\n pointer-events: none;\r\n }\r\n}\r\n\r\n// --- Form controls ---\r\n.form-control {\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n height: 38px;\r\n width: 100%;\r\n padding: 6px 12px;\r\n font-family: \"Roboto\", sans-serif;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n\r\n option {\r\n padding: 5px;\r\n }\r\n\r\n &:focus {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n outline: none;\r\n }\r\n}\r\n\r\ninput[type=\"checkbox\"] {\r\n border: 1px solid $cBorder;\r\n}\r\n\r\n// --- Tables ---\r\ntable {\r\n border-collapse: collapse;\r\n font-size: 13px;\r\n}\r\n\r\n.table {\r\n width: 100%;\r\n\r\n th,\r\n td {\r\n border: 1px solid $cBorder;\r\n padding: 8px 10px;\r\n }\r\n\r\n th {\r\n background: #F7FAFC;\r\n font-weight: 600;\r\n font-size: 12px;\r\n text-transform: uppercase;\r\n letter-spacing: 0.03em;\r\n color: #718096;\r\n }\r\n\r\n td.center {\r\n text-align: center;\r\n }\r\n\r\n td.left {\r\n text-align: left;\r\n }\r\n\r\n &.table-sm td {\r\n padding: 5px !important;\r\n }\r\n\r\n input.form-control {\r\n font-size: 13px;\r\n height: 32px;\r\n }\r\n}\r\n\r\n// --- Unified app tables (clients/campaigns/products/logs) ---\r\n.clients-table-wrap,\r\n.campaigns-table-wrap,\r\n.products-table-wrap,\r\n.logs-table-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n overflow-x: auto;\r\n max-width: 100%;\r\n -ms-overflow-style: none;\r\n scrollbar-width: none;\r\n\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .table {\r\n margin: 0;\r\n width: 100% !important;\r\n\r\n thead th {\r\n background: #F8FAFC;\r\n border-bottom: 2px solid $cBorder;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n padding: 12px 16px;\r\n white-space: nowrap;\r\n }\r\n\r\n tbody td {\r\n padding: 10px 16px;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n }\r\n\r\n tbody tr:hover td {\r\n background: #F8FAFC;\r\n }\r\n }\r\n\r\n .dt-layout-row {\r\n padding: 14px 20px;\r\n margin: 0 !important;\r\n border-top: 1px solid #F1F5F9;\r\n\r\n &:first-child {\r\n display: none;\r\n }\r\n }\r\n\r\n .dt-info {\r\n font-size: 13px;\r\n color: #8899A6;\r\n }\r\n\r\n .dt-paging {\r\n .pagination {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n\r\n .page-item {\r\n .page-link {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 36px;\r\n width: fit-content;\r\n height: 36px;\r\n padding: 0 14px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 500;\r\n border: 1px solid $cBorder;\r\n background: $cWhite;\r\n color: $cText;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n text-decoration: none;\r\n line-height: 1;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n\r\n &.active .page-link {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n border-color: $cPrimary;\r\n font-weight: 600;\r\n }\r\n\r\n &.disabled .page-link {\r\n opacity: 0.35;\r\n cursor: default;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .dt-processing {\r\n background: rgba($cWhite, 0.9);\r\n color: $cText;\r\n font-size: 14px;\r\n }\r\n}\r\n\r\n// --- Cards ---\r\n.card {\r\n background: $cWhite;\r\n padding: 20px;\r\n border-radius: 8px;\r\n color: $cTextDark;\r\n font-size: 14px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n &.mb25 {\r\n margin-bottom: 20px;\r\n }\r\n\r\n .card-header {\r\n font-weight: 600;\r\n font-size: 15px;\r\n }\r\n\r\n .card-body {\r\n padding-top: 12px;\r\n\r\n table {\r\n\r\n th,\r\n td {\r\n font-size: 13px;\r\n\r\n &.bold {\r\n font-weight: 600;\r\n }\r\n\r\n &.text-right {\r\n text-align: right;\r\n }\r\n\r\n &.text-center {\r\n text-align: center;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- Action menu ---\r\n.action_menu {\r\n display: flex;\r\n margin-bottom: 20px;\r\n gap: 12px;\r\n\r\n .btn {\r\n padding: 8px 16px;\r\n\r\n &.btn_add {\r\n background: $cSuccess;\r\n\r\n &:hover {\r\n background: $cSuccessDark;\r\n }\r\n }\r\n\r\n &.btn_cancel {\r\n background: $cDanger;\r\n\r\n &:hover {\r\n background: $cDangerDark;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- Settings page ---\r\n.settings-tabs {\r\n display: flex;\r\n gap: 8px;\r\n margin-bottom: 18px;\r\n\r\n .settings-tab {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 8px 14px;\r\n border-radius: 8px;\r\n text-decoration: none;\r\n color: #6B7A89;\r\n background: #E9EEF5;\r\n border: 1px solid #D8E0EA;\r\n font-size: 13px;\r\n font-weight: 600;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n color: $cTextDark;\r\n background: #DDE6F2;\r\n }\r\n\r\n &.active {\r\n color: $cWhite;\r\n background: $cPrimary;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n}\r\n\r\n.settings-card {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n padding: 28px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n\r\n .settings-card-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n margin-bottom: 24px;\r\n padding-bottom: 16px;\r\n border-bottom: 1px solid $cBorder;\r\n\r\n .settings-card-icon {\r\n width: 44px;\r\n height: 44px;\r\n border-radius: 10px;\r\n background: color.adjust($cPrimary, $lightness: 26%);\r\n color: $cPrimary;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 18px;\r\n flex-shrink: 0;\r\n }\r\n\r\n h3 {\r\n margin: 0;\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n\r\n small {\r\n color: #8899A6;\r\n font-size: 13px;\r\n }\r\n }\r\n\r\n .settings-field {\r\n margin-bottom: 18px;\r\n\r\n label {\r\n display: block;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n margin-bottom: 6px;\r\n }\r\n }\r\n\r\n .settings-input-wrap {\r\n position: relative;\r\n\r\n .settings-input-icon {\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #A0AEC0;\r\n font-size: 14px;\r\n pointer-events: none;\r\n }\r\n\r\n .form-control {\r\n padding-left: 38px;\r\n }\r\n\r\n .settings-toggle-pw {\r\n position: absolute;\r\n right: 4px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: none;\r\n border: none;\r\n color: #A0AEC0;\r\n cursor: pointer;\r\n padding: 6px 10px;\r\n font-size: 14px;\r\n transition: color 0.2s;\r\n\r\n &:hover {\r\n color: $cPrimary;\r\n }\r\n }\r\n }\r\n\r\n .settings-field .settings-toggle-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 10px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n font-weight: 500;\r\n user-select: none;\r\n margin-bottom: 0;\r\n width: 100%;\r\n\r\n .settings-toggle-text {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n line-height: 1.35;\r\n }\r\n }\r\n\r\n .settings-toggle-checkbox {\r\n display: none;\r\n\r\n &+.settings-toggle-switch {\r\n display: inline-block;\r\n position: relative;\r\n width: 44px;\r\n height: 24px;\r\n background: #ccc;\r\n border-radius: 12px;\r\n transition: background 0.2s;\r\n flex-shrink: 0;\r\n\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n top: 3px;\r\n left: 3px;\r\n width: 18px;\r\n height: 18px;\r\n background: #fff;\r\n border-radius: 50%;\r\n transition: transform 0.2s;\r\n }\r\n }\r\n\r\n &:checked+.settings-toggle-switch {\r\n background: #22C55E;\r\n\r\n &::after {\r\n transform: translateX(20px);\r\n }\r\n }\r\n }\r\n\r\n .settings-fields-grid {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 0 24px;\r\n\r\n @media (max-width: 768px) {\r\n grid-template-columns: 1fr;\r\n }\r\n }\r\n\r\n .settings-alert-error {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n border: 1px solid #FED7D7;\r\n border-radius: 8px;\r\n padding: 12px 16px;\r\n margin-bottom: 20px;\r\n font-size: 13px;\r\n\r\n i {\r\n font-size: 16px;\r\n flex-shrink: 0;\r\n }\r\n }\r\n}\r\n\r\n// --- Clients page ---\r\n// --- Feeds page ---\r\n.feeds-page {\r\n .feeds-header {\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .empty-state-box {\r\n text-align: center;\r\n padding: 50px 20px;\r\n color: #A0AEC0;\r\n\r\n i {\r\n font-size: 40px;\r\n margin-bottom: 12px;\r\n display: block;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n font-size: 15px;\r\n }\r\n }\r\n\r\n .feed-link {\r\n color: $cPrimary;\r\n text-decoration: none;\r\n font-weight: 500;\r\n font-size: 13px;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n i {\r\n font-size: 11px;\r\n margin-right: 4px;\r\n }\r\n }\r\n\r\n .btn-icon-copy {\r\n background: none;\r\n border: none;\r\n color: #8899A6;\r\n cursor: pointer;\r\n padding: 2px 6px;\r\n font-size: 13px;\r\n margin-left: 6px;\r\n\r\n &:hover {\r\n color: $cPrimary;\r\n }\r\n }\r\n}\r\n\r\n.clients-page {\r\n .clients-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .clients-table-wrap {\r\n .table {\r\n .client-id {\r\n color: #8899A6;\r\n font-size: 13px;\r\n font-weight: 600;\r\n }\r\n\r\n .client-name {\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n }\r\n }\r\n\r\n .badge-id {\r\n display: inline-block;\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n font-size: 13px;\r\n font-weight: 600;\r\n padding: 4px 10px;\r\n border-radius: 6px;\r\n font-family: monospace;\r\n }\r\n\r\n .actions-cell {\r\n text-align: center;\r\n white-space: nowrap;\r\n }\r\n\r\n .btn-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 34px;\r\n height: 34px;\r\n border-radius: 8px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n margin: 0 2px;\r\n\r\n &.btn-icon-edit {\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n\r\n &:hover {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.btn-icon-delete {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n &.btn-icon-sync {\r\n background: #F0FDF4;\r\n color: #16a34a;\r\n\r\n &:hover {\r\n background: #16a34a;\r\n color: $cWhite;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.7;\r\n cursor: wait;\r\n }\r\n\r\n &.is-queued {\r\n background: #FEF3C7;\r\n color: #D97706;\r\n }\r\n }\r\n }\r\n\r\n .client-sync-bars {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n }\r\n\r\n .client-sync-row {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .client-sync-label {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: #8899A6;\r\n width: 18px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .client-sync-track {\r\n flex: 1;\r\n height: 6px;\r\n border-radius: 999px;\r\n background: #E9EEF5;\r\n overflow: hidden;\r\n }\r\n\r\n .client-sync-fill {\r\n height: 100%;\r\n border-radius: 999px;\r\n background: #CBD5E0;\r\n transition: width 0.4s ease;\r\n\r\n &.is-active {\r\n background: linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%);\r\n }\r\n\r\n &.is-done {\r\n background: $cSuccess;\r\n }\r\n }\r\n\r\n .client-sync-pct {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: #8899A6;\r\n width: 32px;\r\n text-align: right;\r\n flex-shrink: 0;\r\n }\r\n\r\n .sync-dropdown {\r\n position: relative;\r\n display: inline-block;\r\n\r\n .sync-dropdown-menu {\r\n display: none;\r\n position: absolute;\r\n right: 0;\r\n top: 100%;\r\n z-index: 100;\r\n background: #fff;\r\n border: 1px solid #E2E8F0;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\r\n padding: 4px 0;\r\n min-width: 200px;\r\n white-space: nowrap;\r\n\r\n button {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n width: 100%;\r\n padding: 8px 14px;\r\n border: none;\r\n background: none;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n cursor: pointer;\r\n text-align: left;\r\n\r\n &:hover {\r\n background: #F7FAFC;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: default;\r\n }\r\n\r\n i {\r\n width: 16px;\r\n text-align: center;\r\n color: #8899A6;\r\n }\r\n }\r\n }\r\n\r\n &.is-open .sync-dropdown-menu {\r\n display: block;\r\n }\r\n }\r\n\r\n .empty-state {\r\n text-align: center;\r\n padding: 50px 20px !important;\r\n color: #A0AEC0;\r\n\r\n i {\r\n font-size: 40px;\r\n margin-bottom: 12px;\r\n display: block;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n font-size: 15px;\r\n }\r\n }\r\n}\r\n\r\n.btn-secondary {\r\n background: #E2E8F0;\r\n color: $cTextDark;\r\n border: none;\r\n padding: 8px 18px;\r\n border-radius: 6px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n\r\n &:hover {\r\n background: #CBD5E0;\r\n }\r\n}\r\n\r\n// ===========================\r\n// CAMPAIGNS PAGE\r\n// ===========================\r\n.campaigns-page {\r\n max-width: 100%;\r\n overflow-x: hidden;\r\n width: 100%;\r\n\r\n .campaigns-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .campaigns-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n\r\n .filter-group {\r\n flex: 1;\r\n min-width: 0;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 10px 14px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n .filter-with-action {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .form-control {\r\n flex: 1;\r\n }\r\n\r\n .btn-icon {\r\n flex-shrink: 0;\r\n width: 42px;\r\n height: 42px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 8px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: all 0.2s;\r\n\r\n &.btn-icon-delete {\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .filter-group-campaign-multi {\r\n flex: 2 !important;\r\n }\r\n\r\n .campaign-dropdown {\r\n flex: 1;\r\n min-width: 0;\r\n position: relative;\r\n }\r\n\r\n .campaign-dropdown-trigger {\r\n width: 100%;\r\n padding: 10px 14px;\r\n padding-right: 32px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n transition: border-color 0.2s;\r\n position: relative;\r\n min-height: 42px;\r\n box-sizing: border-box;\r\n\r\n .campaign-dropdown-text {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n &.is-placeholder {\r\n color: #8899A6;\r\n }\r\n }\r\n\r\n .campaign-dropdown-arrow {\r\n position: absolute;\r\n right: 12px;\r\n font-size: 10px;\r\n color: #8899A6;\r\n transition: transform 0.2s;\r\n }\r\n }\r\n\r\n .campaign-dropdown.is-open {\r\n .campaign-dropdown-trigger {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n\r\n .campaign-dropdown-arrow {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .campaign-dropdown-menu {\r\n display: block;\r\n }\r\n }\r\n\r\n .campaign-dropdown-menu {\r\n display: none;\r\n position: absolute;\r\n top: calc(100% + 4px);\r\n left: 0;\r\n right: 0;\r\n z-index: 100;\r\n max-height: 280px;\r\n overflow-y: auto;\r\n background: $cWhite;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n padding: 4px 0;\r\n }\r\n\r\n .campaign-dropdown-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 8px 12px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n margin: 0;\r\n transition: background 0.15s;\r\n\r\n &:hover {\r\n background: #F8FAFC;\r\n }\r\n\r\n &.is-checked {\r\n background: #EEF2FF;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n accent-color: $cPrimary;\r\n }\r\n\r\n span {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n\r\n .campaigns-list-panel {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n margin-bottom: 20px;\r\n overflow: hidden;\r\n\r\n .campaigns-list-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n border-bottom: 1px solid $cBorder;\r\n gap: 12px;\r\n\r\n &-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 13px;\r\n color: $cText;\r\n\r\n input[type=\"checkbox\"] {\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n }\r\n\r\n label {\r\n cursor: pointer;\r\n user-select: none;\r\n margin: 0;\r\n }\r\n\r\n .campaigns-selected-count {\r\n margin-left: 12px;\r\n color: #8899A6;\r\n }\r\n }\r\n\r\n &-right {\r\n .campaigns-bulk-delete-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 8px 16px;\r\n border: none;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover:not(:disabled) {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .campaigns-list-items {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 0;\r\n padding: 8px 8px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n\r\n .campaigns-list-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 6px 12px;\r\n margin: 2px;\r\n border-radius: 6px;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n cursor: pointer;\r\n user-select: none;\r\n transition: background 0.15s;\r\n\r\n &:hover {\r\n background: #F0F4FF;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 15px;\r\n height: 15px;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n }\r\n\r\n .campaigns-list-item-name {\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .campaigns-chart-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n padding: 20px;\r\n margin-bottom: 20px;\r\n min-height: 350px;\r\n overflow: hidden;\r\n\r\n #container {\r\n max-width: 100%;\r\n }\r\n }\r\n\r\n .campaigns-table-wrap {\r\n .table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n .delete-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS PAGE\r\n// ===========================\r\n.products-page {\r\n .products-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n\r\n i {\r\n color: $cPrimary;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n\r\n .products-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: flex-end;\r\n gap: 20px;\r\n margin-bottom: 16px;\r\n\r\n .filter-group {\r\n flex: 1 1 220px;\r\n min-width: 0;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 10px 14px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n select.form-control {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n }\r\n\r\n &.filter-group-client,\r\n &.filter-group-campaign,\r\n &.filter-group-ad-group {\r\n flex: 1 1 260px;\r\n }\r\n\r\n &.filter-group-ad-group {\r\n .ad-group-filter-actions {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n\r\n .form-control {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n }\r\n\r\n #delete-products-ad-group {\r\n min-width: 38px;\r\n height: 38px;\r\n border-radius: 6px;\r\n margin: 0;\r\n background: #dc3545;\r\n border: 1px solid #dc3545;\r\n color: #fff;\r\n cursor: pointer;\r\n\r\n &:hover:not(:disabled) {\r\n background: #bb2d3b;\r\n border-color: #bb2d3b;\r\n color: #fff;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.45;\r\n cursor: default;\r\n background: #dc3545;\r\n border-color: #dc3545;\r\n color: #fff;\r\n }\r\n }\r\n }\r\n\r\n &.filter-group-roas {\r\n flex: 0 0 200px;\r\n }\r\n\r\n &.filter-group-search {\r\n flex: 1 1 200px;\r\n }\r\n\r\n &.filter-group-cl4 {\r\n flex: 0 0 160px;\r\n }\r\n\r\n &.filter-group-columns {\r\n flex: 0 0 240px;\r\n }\r\n }\r\n }\r\n\r\n .products-scope-alerts {\r\n margin-bottom: 12px;\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n list-style: none;\r\n padding: 10px 12px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: #991B1B;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n }\r\n\r\n .products-scope-alerts-list {\r\n border-top: 1px solid #FECACA;\r\n background: #FFF;\r\n max-height: 260px;\r\n overflow: auto;\r\n }\r\n\r\n .products-scope-alert-item {\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #F1F5F9;\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n }\r\n\r\n .products-scope-alert-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 4px;\r\n font-size: 11px;\r\n color: #64748B;\r\n }\r\n\r\n .products-scope-alert-type {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 2px 6px;\r\n border-radius: 999px;\r\n background: #EEF2FF;\r\n color: #4338CA;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n }\r\n\r\n .products-scope-alert-message {\r\n font-size: 13px;\r\n color: $cTextDark;\r\n line-height: 1.45;\r\n }\r\n }\r\n\r\n .products-actions {\r\n margin-bottom: 12px;\r\n\r\n .btn-danger {\r\n padding: 7px 14px;\r\n font-size: 13px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: default;\r\n }\r\n }\r\n }\r\n\r\n .products-table-wrap {\r\n .table {\r\n width: 100%;\r\n\r\n // Kompaktowe inputy w tabeli\r\n input.min_roas,\r\n input.form-control-sm,\r\n select.custom_label_4,\r\n select.form-control-sm {\r\n padding: 3px 6px;\r\n font-size: 12px;\r\n border: 1px solid $cBorder;\r\n border-radius: 4px;\r\n background: $cWhite;\r\n }\r\n }\r\n }\r\n\r\n // Przycisk usuwania w wierszu\r\n .delete-product {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #FFF5F5;\r\n color: $cDanger;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cDanger;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n // Przycisk edycji w wierszu\r\n .edit-product-title {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 12px;\r\n background: #EEF2FF;\r\n color: $cPrimary;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: $cPrimary;\r\n color: $cWhite;\r\n }\r\n }\r\n}\r\n\r\n// --- Popup edycji produktu: AI suggest ---\r\n.desc-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 4px;\r\n\r\n label {\r\n margin: 0;\r\n }\r\n}\r\n\r\n.desc-tabs {\r\n display: flex;\r\n gap: 2px;\r\n background: #eee;\r\n border-radius: 6px;\r\n padding: 2px;\r\n}\r\n\r\n.desc-tab {\r\n border: none;\r\n background: transparent;\r\n padding: 4px 12px;\r\n font-size: 12px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n color: #666;\r\n transition: all .15s ease;\r\n\r\n i {\r\n margin-right: 4px;\r\n }\r\n\r\n &.active {\r\n background: #fff;\r\n color: #333;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, .12);\r\n font-weight: 500;\r\n }\r\n\r\n &:hover:not(.active) {\r\n color: #333;\r\n }\r\n}\r\n\r\n.desc-wrap {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.desc-preview {\r\n\r\n ul,\r\n ol {\r\n margin: 6px 0;\r\n padding-left: 20px;\r\n }\r\n\r\n li {\r\n margin-bottom: 3px;\r\n }\r\n\r\n b,\r\n strong {\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.input-with-ai {\r\n display: flex;\r\n gap: 8px;\r\n align-items: flex-start;\r\n\r\n .form-control {\r\n flex: 1;\r\n }\r\n}\r\n\r\n.btn-ai-suggest {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 6px 12px;\r\n border-radius: 8px;\r\n border: 1px solid #C084FC;\r\n background: linear-gradient(135deg, #F3E8FF, #EDE9FE);\r\n color: #7C3AED;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n white-space: nowrap;\r\n min-height: 38px;\r\n\r\n i {\r\n font-size: 13px;\r\n }\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #7C3AED, #6D28D9);\r\n color: #FFF;\r\n border-color: #6D28D9;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.7;\r\n cursor: wait;\r\n }\r\n\r\n &.btn-ai-claude {\r\n border-color: #D97706;\r\n background: linear-gradient(135deg, #FEF3C7, #FDE68A);\r\n color: #92400E;\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #D97706, #B45309);\r\n color: #FFF;\r\n border-color: #B45309;\r\n }\r\n }\r\n\r\n &.btn-ai-gemini {\r\n border-color: #4285F4;\r\n background: linear-gradient(135deg, #E8F0FE, #D2E3FC);\r\n color: #1A73E8;\r\n\r\n &:hover {\r\n background: linear-gradient(135deg, #4285F4, #1A73E8);\r\n color: #FFF;\r\n border-color: #1A73E8;\r\n }\r\n }\r\n}\r\n\r\n// --- Form container ---\r\n.form_container {\r\n background: $cWhite;\r\n padding: 25px;\r\n max-width: 1300px;\r\n border-radius: 8px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n &.full {\r\n max-width: 100%;\r\n }\r\n\r\n .form_group {\r\n margin-bottom: 12px;\r\n display: flex;\r\n\r\n >.label {\r\n width: 300px;\r\n display: inline-flex;\r\n align-items: flex-start;\r\n justify-content: right;\r\n padding-right: 12px;\r\n }\r\n\r\n .input {\r\n width: calc(100% - 300px);\r\n }\r\n }\r\n}\r\n\r\n// --- Default popup ---\r\n.default_popup {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.45);\r\n display: none;\r\n z-index: 2000;\r\n\r\n .popup_content {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n background: $cWhite;\r\n padding: 25px;\r\n border-radius: 10px;\r\n max-width: 1140px;\r\n width: 95%;\r\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);\r\n\r\n .popup_header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n\r\n .title {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n }\r\n\r\n .close {\r\n cursor: pointer;\r\n color: #A0AEC0;\r\n font-size: 18px;\r\n padding: 4px;\r\n\r\n &:hover {\r\n color: $cDanger;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- DataTables override ---\r\n.dt-layout-table {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.pagination {\r\n button {\r\n border: 1px solid $cBorder;\r\n background: $cWhite;\r\n display: inline-flex;\r\n height: 32px;\r\n width: 32px;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 0 2px;\r\n border-radius: 4px;\r\n transition: all 0.2s;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: $cContentBg;\r\n border-color: $cPrimary;\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS specific\r\n// ===========================\r\ntable#products {\r\n a {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n\r\n .table-product-title {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .edit-product-title {\r\n display: flex;\r\n height: 25px;\r\n align-items: center;\r\n justify-content: center;\r\n width: 25px;\r\n cursor: pointer;\r\n background: $cWhite;\r\n border: 1px solid #CBD5E0;\r\n color: #CBD5E0;\r\n border-radius: 4px;\r\n\r\n &:hover {\r\n background: #CBD5E0;\r\n color: $cWhite;\r\n }\r\n }\r\n\r\n a.custom_name {\r\n color: $cGreenLight !important;\r\n }\r\n}\r\n\r\n// --- Product history ---\r\n.product-history-page {\r\n .product-history-meta {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n margin-bottom: 14px;\r\n\r\n span {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 5px 10px;\r\n border-radius: 999px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: $cText;\r\n background: #EEF2FF;\r\n border: 1px solid #D9E2FF;\r\n }\r\n }\r\n\r\n .product-history-chart-wrap {\r\n background: $cWhite;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n padding: 20px;\r\n margin-bottom: 16px;\r\n }\r\n\r\n .chart-with-form {\r\n display: flex;\r\n gap: 20px;\r\n align-items: flex-start;\r\n }\r\n\r\n .chart-area {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n\r\n .product-history-chart {\r\n min-height: 360px;\r\n }\r\n\r\n .comment-form {\r\n width: 340px;\r\n flex: 0 0 340px;\r\n background: #F8FAFC;\r\n border: 1px solid $cBorder;\r\n border-radius: 10px;\r\n padding: 14px;\r\n\r\n .form-group {\r\n margin-bottom: 12px;\r\n }\r\n\r\n label {\r\n display: block;\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n font-size: 13px;\r\n color: #52606D;\r\n }\r\n\r\n input[type=\"date\"],\r\n textarea {\r\n width: 100%;\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n padding: 8px 12px;\r\n font-size: 14px;\r\n font-family: \"Roboto\", sans-serif;\r\n background: $cWhite;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n textarea {\r\n min-height: 110px;\r\n resize: vertical;\r\n }\r\n\r\n .btn {\r\n width: 100%;\r\n justify-content: center;\r\n padding: 10px 16px;\r\n }\r\n\r\n .btn[disabled] {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n .products-table-wrap {\r\n overflow-x: auto;\r\n\r\n .table {\r\n min-width: 980px;\r\n }\r\n\r\n .comment-cell {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 10px;\r\n }\r\n\r\n .comment-text {\r\n word-break: break-word;\r\n }\r\n\r\n .delete-comment {\r\n color: $cDanger;\r\n text-decoration: none;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n }\r\n\r\n .dt-paging .pagination .page-item {\r\n list-style: none;\r\n }\r\n }\r\n}\r\n\r\n.cron-status-overview {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px 20px;\r\n margin-bottom: 20px;\r\n color: $cText;\r\n font-size: 13px;\r\n}\r\n\r\n.cron-progress-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-schedule-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-schedule-item {\r\n border: 1px solid #DFE7F0;\r\n background: #F4F8FD;\r\n border-radius: 8px;\r\n padding: 9px 12px;\r\n margin-bottom: 8px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n strong {\r\n display: block;\r\n color: $cTextDark;\r\n font-size: 13px;\r\n font-weight: 700;\r\n margin-bottom: 2px;\r\n }\r\n\r\n small {\r\n display: block;\r\n color: #667788;\r\n font-size: 12px;\r\n line-height: 1.35;\r\n }\r\n}\r\n\r\n.cron-progress-item {\r\n margin-bottom: 14px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cron-progress-head {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 6px;\r\n font-size: 13px;\r\n\r\n strong {\r\n color: $cTextDark;\r\n font-weight: 600;\r\n }\r\n\r\n span {\r\n color: #6B7A89;\r\n font-size: 12px;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n small {\r\n display: block;\r\n margin-top: 5px;\r\n color: #778899;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.cron-progress-bar {\r\n width: 100%;\r\n height: 10px;\r\n border-radius: 999px;\r\n background: #E9EEF5;\r\n overflow: hidden;\r\n\r\n >span {\r\n display: block;\r\n height: 100%;\r\n background: linear-gradient(90deg, #5A9BFF 0%, #2E6BDF 100%);\r\n }\r\n}\r\n\r\n.cron-url-list {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.cron-url-item {\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n background: #F8FAFC;\r\n padding: 10px 12px;\r\n margin-bottom: 10px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cron-url-top {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 6px;\r\n\r\n strong {\r\n color: $cTextDark;\r\n font-size: 13px;\r\n font-weight: 600;\r\n }\r\n\r\n small {\r\n color: #7A8794;\r\n font-size: 11px;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n code {\r\n display: block;\r\n background: #EEF2F7;\r\n border: 1px solid #DDE4ED;\r\n border-radius: 6px;\r\n padding: 6px 8px;\r\n color: #2E3B49;\r\n font-size: 12px;\r\n overflow-x: auto;\r\n }\r\n\r\n .cron-url-plan {\r\n display: block;\r\n color: #6C7B8A;\r\n font-size: 11px;\r\n margin-bottom: 6px;\r\n }\r\n}\r\n\r\n@media (max-width: 1200px) {\r\n .product-history-page {\r\n .chart-with-form {\r\n flex-direction: column;\r\n }\r\n\r\n .comment-form {\r\n width: 100%;\r\n flex: 1 1 auto;\r\n }\r\n }\r\n}\r\n\r\n// --- Select2 w modalu ---\r\n.jconfirm-box .form-group .select2-container,\r\n.adspro-dialog-box .form-group .select2-container {\r\n width: 100% !important;\r\n margin-top: 8px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single {\r\n background-color: $cWhite;\r\n border: 1px solid $cBorder;\r\n border-radius: 6px;\r\n min-height: 42px;\r\n display: flex;\r\n align-items: center;\r\n padding: 4px 12px;\r\n box-shadow: none;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__rendered,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__rendered {\r\n padding-left: 0;\r\n line-height: 1.4;\r\n color: #495057;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__placeholder,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__placeholder {\r\n color: #CBD5E0;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-selection--single .select2-selection__arrow,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single .select2-selection__arrow {\r\n height: 100%;\r\n right: 8px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default.select2-container--focus .select2-selection--single,\r\n.jconfirm-box .select2-container--default .select2-selection--single:hover,\r\n.adspro-dialog-box .select2-container--default.select2-container--focus .select2-selection--single,\r\n.adspro-dialog-box .select2-container--default .select2-selection--single:hover {\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n outline: 0;\r\n}\r\n\r\n.jconfirm-box .select2-container .select2-dropdown,\r\n.adspro-dialog-box .select2-container .select2-dropdown {\r\n border-color: $cBorder;\r\n border-radius: 0 0 6px 6px;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container .select2-search--dropdown .select2-search__field,\r\n.adspro-dialog-box .select2-container .select2-search--dropdown .select2-search__field {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n border: 1px solid $cBorder;\r\n font-size: 14px;\r\n}\r\n\r\n.jconfirm-box .select2-container--default .select2-results__option--highlighted[aria-selected],\r\n.adspro-dialog-box .select2-container--default .select2-results__option--highlighted[aria-selected] {\r\n background-color: $cPrimary;\r\n color: $cWhite;\r\n}\r\n\r\n// ===========================\r\n// RESPONSYWNOŚĆ\r\n// ===========================\r\n@media (max-width: 992px) {\r\n .sidebar {\r\n transform: translateX(-100%);\r\n\r\n &.mobile-open {\r\n transform: translateX(0);\r\n }\r\n }\r\n\r\n .main-wrapper {\r\n margin-left: 0 !important;\r\n }\r\n}\r\n\r\n// ===========================\r\n// CAMPAIGN TERMS VIEW\r\n// ===========================\r\n.campaign-terms-wrap {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n margin-top: 20px;\r\n}\r\n\r\n.campaign-terms-page {\r\n max-width: 100%;\r\n overflow: hidden;\r\n\r\n .campaigns-filters {\r\n flex-wrap: wrap;\r\n\r\n .filter-group {\r\n min-width: 220px;\r\n\r\n &.terms-columns-group {\r\n min-width: 280px;\r\n }\r\n }\r\n }\r\n\r\n .terms-card-toggle {\r\n margin-left: auto;\r\n width: 28px;\r\n height: 28px;\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n color: #475569;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #F8FAFC;\r\n border-color: #CBD5E1;\r\n }\r\n }\r\n\r\n .terms-adgroups-card.is-collapsed .campaigns-extra-table-wrap {\r\n display: none;\r\n }\r\n\r\n .terms-search-toolbar {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #EEF2F7;\r\n background: #FFFFFF;\r\n\r\n label {\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #475569;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n margin: 0;\r\n white-space: nowrap;\r\n }\r\n\r\n .terms-search-toolbar-label {\r\n min-width: 86px;\r\n }\r\n\r\n #terms_min_clicks_all,\r\n #terms_max_clicks_all {\r\n width: 160px;\r\n height: 32px;\r\n }\r\n\r\n #terms_min_conversions_all,\r\n #terms_max_conversions_all {\r\n width: 130px;\r\n max-width: 130px;\r\n }\r\n }\r\n\r\n .terms-search-selected-label {\r\n margin: 0;\r\n font-size: 12px;\r\n color: #475569;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n\r\n .terms-ai-analyze-btn {\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n border: 1px solid #BFDBFE;\r\n background: #EFF6FF;\r\n color: #1D4ED8;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #DBEAFE;\r\n border-color: #93C5FD;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.6;\r\n cursor: wait;\r\n }\r\n }\r\n\r\n .terms-table-search-input {\r\n width: 200px;\r\n min-width: 120px;\r\n max-width: 200px;\r\n height: 32px;\r\n font-size: 12px;\r\n flex: 0 1 200px;\r\n }\r\n\r\n .terms-negative-toolbar,\r\n .terms-keywords-toolbar {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid #EEF2F7;\r\n background: #FFFFFF;\r\n }\r\n\r\n .terms-negative-bulk-btn {\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n color: #DC2626;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: #FEE2E2;\r\n border-color: #FCA5A5;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n table.campaigns-extra-table>thead>tr>th {\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n background-color: #111827 !important;\r\n color: #E5E7EB !important;\r\n border-bottom: 1px solid #0B1220 !important;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: .4px;\r\n padding: 10px 12px;\r\n white-space: nowrap;\r\n }\r\n\r\n #terms_search_table thead th .dt-column-order,\r\n #terms_negative_table thead th .dt-column-order {\r\n display: none !important;\r\n }\r\n\r\n #terms_search_table thead th.dt-orderable-asc,\r\n #terms_search_table thead th.dt-orderable-desc,\r\n #terms_negative_table thead th.dt-orderable-asc,\r\n #terms_negative_table thead th.dt-orderable-desc {\r\n cursor: pointer;\r\n padding-right: 34px;\r\n overflow: hidden;\r\n }\r\n\r\n #terms_search_table thead th .dt-column-title,\r\n #terms_negative_table thead th .dt-column-title {\r\n display: block;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding-right: 2px;\r\n }\r\n\r\n #terms_search_table thead th.dt-orderable-asc::after,\r\n #terms_search_table thead th.dt-orderable-desc::after,\r\n #terms_negative_table thead th.dt-orderable-asc::after,\r\n #terms_negative_table thead th.dt-orderable-desc::after {\r\n content: '\\2195';\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 999px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n line-height: 16px;\r\n text-align: center;\r\n color: #E5E7EB;\r\n background: #374151;\r\n }\r\n\r\n #terms_search_table thead th.dt-ordering-asc::after,\r\n #terms_negative_table thead th.dt-ordering-asc::after,\r\n #terms_search_table thead th[aria-sort=\"ascending\"]::after,\r\n #terms_negative_table thead th[aria-sort=\"ascending\"]::after {\r\n content: '\\25B2';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n }\r\n\r\n #terms_search_table thead th.dt-ordering-desc::after,\r\n #terms_negative_table thead th.dt-ordering-desc::after,\r\n #terms_search_table thead th[aria-sort=\"descending\"]::after,\r\n #terms_negative_table thead th[aria-sort=\"descending\"]::after {\r\n content: '\\25BC';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n }\r\n\r\n #terms_negative_select_all,\r\n .terms-negative-select-row,\r\n #terms_search_select_all,\r\n .terms-search-select-row {\r\n width: 14px;\r\n height: 14px;\r\n cursor: pointer;\r\n }\r\n\r\n .dt-layout-row:first-child {\r\n display: none;\r\n }\r\n\r\n .dt-layout-row {\r\n padding: 10px 12px;\r\n margin: 0 !important;\r\n border-top: 1px solid #F1F5F9;\r\n }\r\n\r\n .dt-info {\r\n font-size: 12px;\r\n color: #64748B;\r\n }\r\n\r\n .dt-paging .pagination {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none !important;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n\r\n .page-item {\r\n list-style: none !important;\r\n\r\n .page-link {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 36px;\r\n width: fit-content;\r\n height: 32px;\r\n padding: 0 12px;\r\n border-radius: 6px;\r\n font-size: 12px;\r\n font-weight: 500;\r\n border: 1px solid #E2E8F0;\r\n background: #FFFFFF;\r\n color: #4E5E6A;\r\n text-decoration: none;\r\n line-height: 1;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background: #EEF2FF;\r\n color: #6690F4;\r\n border-color: #6690F4;\r\n }\r\n }\r\n\r\n &.previous .page-link,\r\n &.next .page-link {\r\n min-width: 72px;\r\n }\r\n\r\n &.active .page-link {\r\n background: #6690F4;\r\n color: #FFFFFF;\r\n border-color: #6690F4;\r\n }\r\n\r\n &.disabled .page-link {\r\n opacity: 0.35;\r\n cursor: default;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.terms-columns-box {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n\r\n.terms-columns-control {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n list-style: none;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n\r\n &::after {\r\n content: '\\25BC';\r\n float: right;\r\n font-size: 10px;\r\n color: #64748B;\r\n margin-top: 2px;\r\n }\r\n }\r\n\r\n &[open] summary::after {\r\n content: '\\25B2';\r\n }\r\n}\r\n\r\n.terms-columns-list {\r\n border-top: 1px solid #EEF2F7;\r\n padding: 8px 10px;\r\n max-height: 180px;\r\n overflow-y: auto;\r\n\r\n .terms-col-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #334155;\r\n margin-bottom: 6px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n input[type=checkbox] {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n.campaigns-extra-card {\r\n background: #FFFFFF;\r\n border-radius: 10px;\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);\r\n overflow: hidden;\r\n}\r\n\r\n.campaigns-extra-card-title {\r\n padding: 14px 16px;\r\n border-bottom: 1px solid #E2E8F0;\r\n font-size: 13px;\r\n font-weight: 700;\r\n color: #334155;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .terms-card-title-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n}\r\n\r\n.campaigns-extra-table-wrap {\r\n overflow: auto;\r\n}\r\n\r\n.campaigns-extra-table {\r\n margin: 0;\r\n width: 100%;\r\n table-layout: fixed;\r\n\r\n tbody td {\r\n padding: 9px 12px;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 13px;\r\n color: #334155;\r\n vertical-align: middle;\r\n white-space: nowrap;\r\n }\r\n\r\n td.num-cell {\r\n text-align: right;\r\n white-space: nowrap;\r\n }\r\n\r\n td.text-cell {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n th.terms-negative-select-cell,\r\n td.terms-negative-select-cell,\r\n th.terms-search-select-cell,\r\n td.terms-search-select-cell {\r\n text-align: center;\r\n }\r\n\r\n th.phrase-nowrap,\r\n td.phrase-nowrap {\r\n white-space: nowrap !important;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .terms-add-negative-btn,\r\n .terms-remove-negative-btn,\r\n .terms-delete-keyword-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n }\r\n\r\n .terms-add-negative-btn {\r\n border: 1px solid #E2E8F0;\r\n background: #EEF2FF;\r\n color: #3B82F6;\r\n\r\n &:hover {\r\n background: #3B82F6;\r\n color: #FFFFFF;\r\n border-color: #3B82F6;\r\n }\r\n }\r\n\r\n .terms-remove-negative-btn,\r\n .terms-delete-keyword-btn {\r\n border: 1px solid #FECACA;\r\n background: #FEF2F2;\r\n color: #DC2626;\r\n\r\n &:hover {\r\n background: #DC2626;\r\n color: #FFFFFF;\r\n border-color: #DC2626;\r\n }\r\n }\r\n\r\n .terms-toggle-keyword-status-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n border: 1px solid #FDE68A;\r\n background: #FFFBEB;\r\n color: #D97706;\r\n\r\n &:hover {\r\n background: #D97706;\r\n color: #FFFFFF;\r\n border-color: #D97706;\r\n }\r\n\r\n &.text-success {\r\n border-color: #A7F3D0;\r\n background: #ECFDF5;\r\n color: #059669;\r\n\r\n &:hover {\r\n background: #059669;\r\n color: #FFFFFF;\r\n border-color: #059669;\r\n }\r\n }\r\n }\r\n\r\n .terms-change-match-type-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n border: 1px solid #E2E8F0;\r\n background: #EEF2FF;\r\n color: #3B82F6;\r\n\r\n &:hover {\r\n background: #3B82F6;\r\n color: #FFFFFF;\r\n border-color: #3B82F6;\r\n }\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n\r\n tbody tr.term-is-negative td {\r\n color: #DC2626;\r\n }\r\n\r\n tbody tr.term-is-negative:hover {\r\n background: #FEF2F2;\r\n }\r\n}\r\n\r\n.campaigns-empty-row {\r\n text-align: center;\r\n color: #94A3B8 !important;\r\n font-style: italic;\r\n}\r\n\r\n.terms-ai-modal-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 10px;\r\n\r\n label {\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n margin: 0;\r\n }\r\n\r\n .form-control {\r\n width: 200px;\r\n height: 32px;\r\n }\r\n}\r\n\r\n.terms-ai-summary {\r\n font-size: 12px;\r\n color: #64748B;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.terms-ai-results-wrap {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 8px;\r\n max-height: 420px;\r\n overflow: auto;\r\n}\r\n\r\n.terms-ai-results-table {\r\n width: 100%;\r\n border-collapse: collapse;\r\n font-size: 12px;\r\n\r\n th,\r\n td {\r\n border-bottom: 1px solid #EEF2F7;\r\n padding: 8px;\r\n vertical-align: middle;\r\n }\r\n\r\n th {\r\n position: sticky;\r\n top: 0;\r\n background: #F8FAFC;\r\n color: #334155;\r\n font-weight: 700;\r\n }\r\n\r\n td.term-col {\r\n min-width: 260px;\r\n max-width: 380px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n td.reason-col {\r\n min-width: 320px;\r\n }\r\n}\r\n\r\n.terms-ai-action-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 999px;\r\n padding: 2px 8px;\r\n font-size: 11px;\r\n font-weight: 700;\r\n\r\n &.action-exclude {\r\n background: #FEE2E2;\r\n color: #B91C1C;\r\n }\r\n\r\n &.action-keep {\r\n background: #DCFCE7;\r\n color: #166534;\r\n }\r\n}\r\n\r\n// ===========================\r\n// PRODUCTS VIEW (INLINE MOVED)\r\n// ===========================\r\n.products-page .products-filters .filter-group.filter-group-columns {\r\n min-width: 240px;\r\n}\r\n\r\n.products-columns-control {\r\n border: 1px solid #E2E8F0;\r\n border-radius: 6px;\r\n background: #FFFFFF;\r\n overflow: hidden;\r\n\r\n summary {\r\n cursor: pointer;\r\n padding: 8px 10px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n color: #334155;\r\n list-style: none;\r\n\r\n &::-webkit-details-marker {\r\n display: none;\r\n }\r\n\r\n &::after {\r\n content: '\\25BC';\r\n float: right;\r\n font-size: 10px;\r\n color: #64748B;\r\n margin-top: 2px;\r\n }\r\n }\r\n\r\n &[open] summary::after {\r\n content: '\\25B2';\r\n }\r\n}\r\n\r\n.products-columns-list {\r\n border-top: 1px solid #EEF2F7;\r\n padding: 8px 10px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n\r\n .products-col-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #334155;\r\n margin-bottom: 6px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n input[type=checkbox] {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n#products {\r\n\r\n th:last-child,\r\n td:last-child {\r\n white-space: nowrap;\r\n }\r\n\r\n tr.product-row-unavailable {\r\n opacity: 0.45;\r\n\r\n td {\r\n background-color: #f0f0f0 !important;\r\n }\r\n }\r\n\r\n .product-warning-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n color: #DC2626;\r\n font-size: 16px;\r\n\r\n &:hover {\r\n color: #B91C1C;\r\n }\r\n }\r\n\r\n .products-row-actions {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n .btn {\r\n width: 38px;\r\n height: 32px;\r\n padding: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 4px !important;\r\n\r\n i {\r\n line-height: 1;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ===========================\r\n// LOGS PAGE\r\n// ===========================\r\n.logs-page {\r\n .logs-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: $cTextDark;\r\n }\r\n }\r\n\r\n .logs-filters {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: flex-end;\r\n gap: 14px;\r\n margin-bottom: 16px;\r\n\r\n .filter-group {\r\n flex: 1 1 160px;\r\n min-width: 0;\r\n max-width: 220px;\r\n\r\n label {\r\n display: block;\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .form-control {\r\n width: 100%;\r\n padding: 8px 12px;\r\n border: 1px solid $cBorder;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: $cTextDark;\r\n background: $cWhite;\r\n transition: border-color 0.2s;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: $cPrimary;\r\n box-shadow: 0 0 0 3px rgba($cPrimary, 0.1);\r\n }\r\n }\r\n\r\n select.form-control {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238899A6' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 12px center;\r\n padding-right: 32px;\r\n }\r\n\r\n &.filter-group-buttons {\r\n flex: 0 0 auto;\r\n display: flex;\r\n gap: 6px;\r\n max-width: none;\r\n }\r\n }\r\n }\r\n\r\n .logs-table-wrap {\r\n .table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n .badge {\r\n display: inline-block;\r\n padding: 3px 8px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n }\r\n\r\n .badge-success {\r\n background: #D1FAE5;\r\n color: #065F46;\r\n }\r\n\r\n .badge-danger {\r\n background: #FEE2E2;\r\n color: #991B1B;\r\n }\r\n\r\n .badge-warning {\r\n background: #FEF3C7;\r\n color: #92400E;\r\n }\r\n}\r\n\r\n.js-title-alt-apply {\r\n color: #000;\r\n justify-content: flex-start;\r\n}"]} \ No newline at end of file diff --git a/layout/style.scss b/layout/style.scss index 6c1cf73..6d37161 100644 --- a/layout/style.scss +++ b/layout/style.scss @@ -1194,6 +1194,72 @@ table { } // --- Clients page --- +// --- Feeds page --- +.feeds-page { + .feeds-header { + margin-bottom: 20px; + + h2 { + margin: 0; + font-size: 20px; + font-weight: 600; + color: $cTextDark; + + i { + color: $cPrimary; + margin-right: 8px; + } + } + } + + .empty-state-box { + text-align: center; + padding: 50px 20px; + color: #A0AEC0; + + i { + font-size: 40px; + margin-bottom: 12px; + display: block; + } + + p { + margin: 0; + font-size: 15px; + } + } + + .feed-link { + color: $cPrimary; + text-decoration: none; + font-weight: 500; + font-size: 13px; + + &:hover { + text-decoration: underline; + } + + i { + font-size: 11px; + margin-right: 4px; + } + } + + .btn-icon-copy { + background: none; + border: none; + color: #8899A6; + cursor: pointer; + padding: 2px 6px; + font-size: 13px; + margin-left: 6px; + + &:hover { + color: $cPrimary; + } + } +} + .clients-page { .clients-header { display: flex; @@ -1351,6 +1417,59 @@ table { flex-shrink: 0; } + .sync-dropdown { + position: relative; + display: inline-block; + + .sync-dropdown-menu { + display: none; + position: absolute; + right: 0; + top: 100%; + z-index: 100; + background: #fff; + border: 1px solid #E2E8F0; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12); + padding: 4px 0; + min-width: 200px; + white-space: nowrap; + + button { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 8px 14px; + border: none; + background: none; + font-size: 13px; + color: $cTextDark; + cursor: pointer; + text-align: left; + + &:hover { + background: #F7FAFC; + } + + &:disabled { + opacity: 0.4; + cursor: default; + } + + i { + width: 16px; + text-align: center; + color: #8899A6; + } + } + } + + &.is-open .sync-dropdown-menu { + display: block; + } + } + .empty-state { text-align: center; padding: 50px 20px !important; diff --git a/templates/clients/main_view.php b/templates/clients/main_view.php index 9c8c6be..3e0ba1a 100644 --- a/templates/clients/main_view.php +++ b/templates/clients/main_view.php @@ -68,24 +68,34 @@ - - - - - - - - - - +
    + + + + + + + + + + + +
    + @@ -253,8 +263,25 @@ function toggleClientActive( id, btn ) } ); } -function syncClient( id, pipeline, btn ) +// --- Sync dropdown menu --- +function toggleSyncMenu( btn ) { + var $dropdown = $( btn ).closest( '.sync-dropdown' ); + var wasOpen = $dropdown.hasClass( 'is-open' ); + $( '.sync-dropdown.is-open' ).removeClass( 'is-open' ); + if ( !wasOpen ) $dropdown.addClass( 'is-open' ); +} + +$( document ).on( 'click', function( e ) { + if ( !$( e.target ).closest( '.sync-dropdown' ).length ) + { + $( '.sync-dropdown.is-open' ).removeClass( 'is-open' ); + } +}); + +function syncFromMenu( id, pipeline, btn ) +{ + $( '.sync-dropdown.is-open' ).removeClass( 'is-open' ); var $btn = $( btn ); var $icon = $btn.find( 'i' ); var origClass = $icon.attr( 'class' ); @@ -266,6 +293,7 @@ function syncClient( id, pipeline, btn ) campaigns: 'kampanii', products: 'produktow', campaigns_product_alerts_merchant: 'walidacji Merchant', + supplemental_feed: 'supplemental feed', facebook_ads: 'Facebook Ads' }; @@ -278,21 +306,18 @@ function syncClient( id, pipeline, btn ) if ( data.success ) { - $btn.addClass( 'is-queued' ); - - var cron_hint = pipeline === 'facebook_ads' - ? ' Dane zostana pobrane przy najblizszym uruchomieniu /cron/cron_facebook_ads.' - : ' Dane zostana pobrane przy najblizszym uruchomieniu CRON.'; - var refresh_hint = pipeline === 'facebook_ads' - ? ' Wymuszenie Facebook Ads nadpisuje dane dla okresu z config.php i pobiera tylko aktywne kampanie/zestawy/reklamy.' - : ''; + var msg = data.immediate + ? 'Supplemental feed wygenerowany pomyslnie.' + : 'Synchronizacja ' + labels[ pipeline ] + ' zostala zakolejkowana. Dane zostana pobrane przy najblizszym uruchomieniu CRON.'; $.alert({ - title: 'Zakolejkowano', - content: 'Synchronizacja ' + labels[ pipeline ] + ' zostala zakolejkowana.' + cron_hint + refresh_hint, + title: data.immediate ? 'Gotowe' : 'Zakolejkowano', + content: msg, type: 'green', autoClose: 'ok|3000' }); + + loadSyncStatus(); } else { @@ -390,6 +415,7 @@ function loadSyncStatus() if ( info.campaigns ) html += renderSyncBar( 'K:', info.campaigns[0], info.campaigns[1] ); if ( info.products ) html += renderSyncBar( 'P:', info.products[0], info.products[1] ); if ( info.merchant ) html += renderSyncBar( 'M:', info.merchant[0], info.merchant[1] ); + if ( info.feed ) html += renderSyncBar( 'F:', info.feed[0], info.feed[1] ); if ( info.facebook_ads ) html += renderSyncBar( 'FB:', info.facebook_ads[0], info.facebook_ads[1] ); html += ''; diff --git a/templates/feeds/main_view.php b/templates/feeds/main_view.php new file mode 100644 index 0000000..3c227ae --- /dev/null +++ b/templates/feeds/main_view.php @@ -0,0 +1,85 @@ +
    +
    +

    Supplemental Feeds

    +
    + + items ) ): ?> +
    + +

    Brak klientow z ustawionym Merchant Account ID.

    +
    + +
    + + + + + + + + + + + + + + items as $item ): ?> + + + + + + + + + + + +
    #IDKlientMerchant IDPlikStatusOstatnia aktualizacjaRozmiar
    + + + + + + + + + + + + Wygenerowany + + Oczekuje + + + + + + + + + + KB + + + +
    +
    + +
    + + diff --git a/templates/products/main_view.php b/templates/products/main_view.php index 6c4302e..904d0f9 100644 --- a/templates/products/main_view.php +++ b/templates/products/main_view.php @@ -1246,7 +1246,7 @@ $( function() var product_id = $( this ).attr( 'product_id' ); $.confirm({ - title: 'Logi synchronizacji Merchant (produkt #' + product_id + ')', + title: 'Logi zmian produktu', content: '
    Ładowanie logów...
    ', useBootstrap: false, boxWidth: '1100px', @@ -1262,74 +1262,114 @@ $( function() var jc = this; var $wrap = jc.$content.find( '.merchant-logs-wrap' ); - $.ajax({ - url: '/products/get_product_merchant_sync_logs/', - type: 'POST', - data: { product_id: product_id, limit: 100 }, - success: function( response ) - { - var data; + function load_logs() + { + $wrap.html( 'Ładowanie logów...' ); - try + $.ajax({ + url: '/products/get_product_merchant_sync_logs/', + type: 'POST', + data: { product_id: product_id, limit: 100 }, + success: function( response ) { - data = JSON.parse( response ); - } - catch ( err ) + var data; + + try + { + data = JSON.parse( response ); + } + catch ( err ) + { + $wrap.html( '
    Nie udało się odczytać odpowiedzi serwera.
    ' ); + return; + } + + if ( data.status !== 'ok' ) + { + $wrap.html( '
    ' + escape_html( data.message || 'Błąd pobierania logów.' ) + '
    ' ); + return; + } + + if ( !data.logs || !data.logs.length ) + { + $wrap.html( '
    Brak logów dla tego produktu.
    ' ); + return; + } + + var rows_html = ''; + $.each( data.logs, function( _, log ) { + var status_class = log.sync_status === 'success' + ? 'text-success' + : ( log.sync_status === 'error' ? 'text-danger' : 'text-muted' ); + + rows_html += '' + + '' + escape_html( log.date_add || '' ) + '' + + '' + escape_html( log.field_name || '' ) + '' + + '' + escape_html( log.sync_status || '' ) + '' + + '' + escape_html( log.sync_source || '' ) + '' + + '' + escape_html( log.old_value || '' ) + '' + + '' + escape_html( log.new_value || '' ) + '' + + '' + + ''; + } ); + + $wrap.html( + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + rows_html + '' + + '
    DataPoleStatusŹródłoStara wartośćNowa wartość
    ' + ); + }, + error: function() { - $wrap.html( '
    Nie udało się odczytać odpowiedzi serwera.
    ' ); - return; + $wrap.html( '
    Nie udało się pobrać logów.
    ' ); } + }); + } - if ( data.status !== 'ok' ) + load_logs(); + + $wrap.on( 'click', '.delete-merchant-log', function() + { + var $btn = $( this ); + var log_id = $btn.data( 'log-id' ); + + $btn.prop( 'disabled', true ); + + $.ajax({ + url: '/products/delete_product_merchant_sync_log/', + type: 'POST', + data: { log_id: log_id }, + success: function( response ) { - $wrap.html( '
    ' + escape_html( data.message || 'Błąd pobierania logów.' ) + '
    ' ); - return; - } + var data; - if ( !data.logs || !data.logs.length ) + try { data = JSON.parse( response ); } catch( e ) { return; } + + if ( data.status === 'ok' ) + { + load_logs(); + } + else + { + $btn.prop( 'disabled', false ); + } + }, + error: function() { - $wrap.html( '
    Brak logów synchronizacji dla tego produktu.
    ' ); - return; + $btn.prop( 'disabled', false ); } - - var rows_html = ''; - $.each( data.logs, function( _, log ) { - var status_class = log.sync_status === 'success' - ? 'text-success' - : ( log.sync_status === 'error' ? 'text-danger' : 'text-muted' ); - - rows_html += '' + - '' + escape_html( log.date_add || '' ) + '' + - '' + escape_html( log.field_name || '' ) + '' + - '' + escape_html( log.sync_status || '' ) + '' + - '' + escape_html( log.sync_source || '' ) + '' + - '' + escape_html( log.old_value || '' ) + '' + - '' + escape_html( log.new_value || '' ) + '' + - '' + escape_html( log.error_message || '' ) + '' + - ''; - } ); - - $wrap.html( - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + rows_html + '' + - '
    DataPoleStatusŹródłoStara wartośćNowa wartośćBłąd
    ' - ); - }, - error: function() - { - $wrap.html( '
    Nie udało się pobrać logów synchronizacji.
    ' ); - } + }); }); } }); diff --git a/templates/site/layout-logged.php b/templates/site/layout-logged.php index 9d7467a..ccd635e 100644 --- a/templates/site/layout-logged.php +++ b/templates/site/layout-logged.php @@ -37,7 +37,7 @@ current_module; - $google_ads_modules = [ 'campaigns', 'campaign_terms', 'products', 'campaign_alerts', 'clients' ]; + $google_ads_modules = [ 'campaigns', 'campaign_terms', 'products', 'campaign_alerts', 'clients', 'feeds' ]; $is_google_ads_module = in_array( $module, $google_ads_modules, true ); $facebook_ads_modules = [ 'facebook_ads' ]; $is_facebook_ads_module = in_array( $module, $facebook_ads_modules, true ); @@ -95,6 +95,12 @@ Klienci
  • +
  • + + + Supplemental Feeds + +