diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 0e9f631..c2ad339 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -21,7 +21,8 @@ "Bash(python3:*)", "Bash(py --version)", "Bash(where:*)", - "Bash(python:*)" + "Bash(python:*)", + "Bash(ls -la \"c:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\docs\"\" 2>/dev/null || echo \"docs dir not found \")" ] } } diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index 9e28af5..5f7620a 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -20,6 +20,54 @@ "modified": false }, "autoload": { + "class.Cache.php": { + "type": "-", + "size": 1006, + "lmtime": 0, + "modified": false + }, + "class.Chunk.php": { + "type": "-", + "size": 7304, + "lmtime": 0, + "modified": false + }, + "class.Cron.php": { + "type": "-", + "size": 8901, + "lmtime": 0, + "modified": false + }, + "class.DbModel.php": { + "type": "-", + "size": 1392, + "lmtime": 0, + "modified": false + }, + "class.Excel.php": { + "type": "-", + "size": 4319, + "lmtime": 0, + "modified": false + }, + "class.Html.php": { + "type": "-", + "size": 2105, + "lmtime": 0, + "modified": false + }, + "class.S.php": { + "type": "-", + "size": 8418, + "lmtime": 0, + "modified": false + }, + "class.Tpl.php": { + "type": "-", + "size": 1839, + "lmtime": 0, + "modified": false + }, "controls": { "class.Allegro.php": { "type": "-", @@ -29,14 +77,20 @@ }, "class.Api.php": { "type": "-", - "size": 19358, + "size": 19626, "lmtime": 1744498273470, "modified": true }, + "class.CampaignAlerts.php": { + "type": "-", + "size": 2232, + "lmtime": 0, + "modified": false + }, "class.Campaigns.php": { "type": "-", - "size": 5378, - "lmtime": 1771486264591, + "size": 6153, + "lmtime": 1771626580811, "modified": false }, "class.CampaignTerms.php": { @@ -47,21 +101,27 @@ }, "class.Clients.php": { "type": "-", - "size": 3143, - "lmtime": 1771494823776, + "size": 11854, + "lmtime": 1771619242656, "modified": false }, "class.Cron.php": { "type": "-", - "size": 116612, - "lmtime": 1771511676177, + "size": 198900, + "lmtime": 1771619004019, + "modified": false + }, + "class.FacebookAds.php": { + "type": "-", + "size": 4162, + "lmtime": 1771619366367, "modified": false }, "class.Products.php": { "type": "-", - "size": 39363, + "size": 44261, "lmtime": 1771440055487, - "modified": false + "modified": true }, "class.Site.php": { "type": "-", @@ -71,8 +131,8 @@ }, "class.Users.php": { "type": "-", - "size": 13549, - "lmtime": 1771493809548, + "size": 19292, + "lmtime": 1771617570626, "modified": false }, "class.XmlFiles.php": { @@ -83,10 +143,16 @@ } }, "factory": { + "class.CampaignAlerts.php": { + "type": "-", + "size": 3222, + "lmtime": 0, + "modified": false + }, "class.Campaigns.php": { "type": "-", - "size": 10980, - "lmtime": 1771486281723, + "size": 11156, + "lmtime": 1771626553779, "modified": false }, "class.Clients.php": { @@ -101,9 +167,15 @@ "lmtime": 0, "modified": false }, + "class.FacebookAds.php": { + "type": "-", + "size": 29620, + "lmtime": 1771619061605, + "modified": false + }, "class.Products.php": { "type": "-", - "size": 27192, + "size": 32530, "lmtime": 1771170224109, "modified": true }, @@ -127,11 +199,17 @@ "lmtime": 1771198088093, "modified": true }, + "class.FacebookAdsApi.php": { + "type": "-", + "size": 11724, + "lmtime": 1771619153702, + "modified": false + }, "class.GoogleAdsApi.php": { "type": "-", - "size": 99181, + "size": 114140, "lmtime": 1771444236566, - "modified": false + "modified": true }, "class.OpenAiApi.php": { "type": "-", @@ -139,13 +217,39 @@ "lmtime": 1771171891986, "modified": true } + }, + "view": { + "class.Clients.php": { + "type": "-", + "size": 192, + "lmtime": 0, + "modified": false + }, + "class.Cron.php": { + "type": "-", + "size": 164, + "lmtime": 0, + "modified": false + }, + "class.Site.php": { + "type": "-", + "size": 649, + "lmtime": 0, + "modified": false + }, + "class.Users.php": { + "type": "-", + "size": 415, + "lmtime": 0, + "modified": false + } } }, ".claude": { "settings.local.json": { "type": "-", - "size": 549, - "lmtime": 1771493868314, + "size": 730, + "lmtime": 1771617115553, "modified": false } }, @@ -157,9 +261,9 @@ }, "config.php": { "type": "-", - "size": 624, + "size": 921, "lmtime": 1771497460705, - "modified": false + "modified": true }, "cron.php": { "type": "-", @@ -405,17 +509,77 @@ "lmtime": 1771489966129, "modified": false }, - "demo_data.sql": { - "type": "-", - "size": 22351, - "lmtime": 0, - "modified": true - }, "012_cron_sync_status.sql": { "type": "-", "size": 1830, "lmtime": 1771493459924, "modified": false + }, + "013_campaign_alerts.sql": { + "type": "-", + "size": 880, + "lmtime": 0, + "modified": false + }, + "014_campaign_search_terms_history.sql": { + "type": "-", + "size": 1343, + "lmtime": 0, + "modified": false + }, + "015_campaign_alerts_unseen.sql": { + "type": "-", + "size": 337, + "lmtime": 0, + "modified": false + }, + "016_products_model_unification.sql": { + "type": "-", + "size": 5857, + "lmtime": 0, + "modified": false + }, + "017_drop_products_data.sql": { + "type": "-", + "size": 161, + "lmtime": 0, + "modified": false + }, + "018_products_merchant_url_flags.sql": { + "type": "-", + "size": 1104, + "lmtime": 0, + "modified": false + }, + "019_campaign_alerts_product_id.sql": { + "type": "-", + "size": 813, + "lmtime": 0, + "modified": false + }, + "020_facebook_ads_base.sql": { + "type": "-", + "size": 6195, + "lmtime": 0, + "modified": false + }, + "021_facebook_ads_conversion_metrics.sql": { + "type": "-", + "size": 2479, + "lmtime": 0, + "modified": false + }, + "demo_data.sql": { + "type": "-", + "size": 21146, + "lmtime": 0, + "modified": true + }, + "022_facebook_ads_roas_all_time.sql": { + "type": "-", + "size": 478, + "lmtime": 1771616256503, + "modified": false } }, "robots.txt": { @@ -424,6 +588,36 @@ "lmtime": 1744488227849, "modified": false }, + "temp_fb_authentication.html": { + "type": "-", + "size": 1167861, + "lmtime": 0, + "modified": false + }, + "temp_fb_authorization.html": { + "type": "-", + "size": 1182404, + "lmtime": 0, + "modified": false + }, + "temp_fb_get_started.html": { + "type": "-", + "size": 1160708, + "lmtime": 0, + "modified": false + }, + "temp_fb_insights_async.html": { + "type": "-", + "size": 1190062, + "lmtime": 0, + "modified": false + }, + "temp_fb_system_users.html": { + "type": "-", + "size": 1172574, + "lmtime": 0, + "modified": false + }, "templates": { "products": { "main_view.php": { @@ -462,8 +656,8 @@ "campaigns": { "main_view.php": { "type": "-", - "size": 17073, - "lmtime": 1771497969444, + "size": 20532, + "lmtime": 1771626632932, "modified": false } }, @@ -496,6 +690,14 @@ "lmtime": 1771494851645, "modified": false } + }, + "facebook_ads": { + "main_view.php": { + "type": "-", + "size": 10785, + "lmtime": 1771619352316, + "modified": false + } } }, "tmp": {}, diff --git a/autoload/controls/class.Cron.php b/autoload/controls/class.Cron.php index 8ec805a..23c368f 100644 --- a/autoload/controls/class.Cron.php +++ b/autoload/controls/class.Cron.php @@ -2,12 +2,15 @@ namespace controls; class Cron { + static private $current_cron_action = 'cron'; + // Uniwersalny CRON pipeline. // Jedno wywolanie = jeden klient + jeden dzien: kampanie -> produkty. static public function cron_universal() { global $mdb; + self::$current_cron_action = __FUNCTION__; self::touch_cron_invocation( __FUNCTION__ ); $clients_not_deleted_sql = self::sql_clients_not_deleted(); @@ -484,6 +487,7 @@ class Cron static public function cron_products_urls() { global $mdb, $settings; + self::$current_cron_action = __FUNCTION__; self::touch_cron_invocation( __FUNCTION__ ); $api = new \services\GoogleAdsApi(); @@ -1091,24 +1095,6 @@ class Cron $campaigns_by_db_id[ $db_campaign_id ] = $campaign_data; } - $existing_campaign_histories = $mdb -> query( - 'SELECT ch.campaign_id - FROM campaigns_history AS ch - INNER JOIN campaigns AS c ON c.id = ch.campaign_id - WHERE c.client_id = :client_id - AND ch.date_add = :date_add', - [ - ':client_id' => $client_id, - ':date_add' => $date - ] - ) -> fetchAll( \PDO::FETCH_COLUMN ); - - $campaign_history_exists = []; - foreach ( (array) $existing_campaign_histories as $history_campaign_id ) - { - $campaign_history_exists[ (int) $history_campaign_id ] = true; - } - $existing_ad_groups_rows = $mdb -> query( 'SELECT ag.id, ag.campaign_id, ag.ad_group_id, ag.ad_group_name FROM campaign_ad_groups AS ag @@ -1166,7 +1152,7 @@ class Cron ]; } - $resolve_scope_ids = function( $campaign_external_id, $campaign_name, $ad_group_external_id, $ad_group_name ) use ( &$campaigns_by_external_id, &$campaigns_by_db_id, &$campaign_history_exists, &$ad_groups_by_scope, $client_id, $date, $mdb ) + $resolve_scope_ids = function( $campaign_external_id, $campaign_name, $ad_group_external_id, $ad_group_name ) use ( &$campaigns_by_external_id, &$campaigns_by_db_id, &$ad_groups_by_scope, $client_id, $date, $mdb ) { $campaign_external_id = (int) $campaign_external_id; $campaign_name = trim( (string) $campaign_name ); @@ -1213,22 +1199,6 @@ class Cron $db_campaign_id = (int) ( $campaign_data['id'] ?? 0 ); - if ( $db_campaign_id > 0 && !isset( $campaign_history_exists[ $db_campaign_id ] ) ) - { - $mdb -> insert( 'campaigns_history', [ - 'campaign_id' => $db_campaign_id, - 'roas_30_days' => 0, - 'roas_all_time' => 0, - 'budget' => 0, - 'money_spent' => 0, - 'conversion_value' => 0, - 'bidding_strategy' => '', - 'date_add' => $date - ] ); - - $campaign_history_exists[ $db_campaign_id ] = true; - } - if ( $db_campaign_id <= 0 ) { return [ 'campaign_id' => 0, 'ad_group_id' => 0 ]; @@ -1546,23 +1516,6 @@ class Cron $db_campaign_id = (int) $mdb -> id(); - if ( $db_campaign_id > 0 && $date_sync ) - { - if ( !$mdb -> count( 'campaigns_history', [ 'AND' => [ 'campaign_id' => $db_campaign_id, 'date_add' => $date_sync ] ] ) ) - { - $mdb -> insert( 'campaigns_history', [ - 'campaign_id' => $db_campaign_id, - 'roas_30_days' => 0, - 'roas_all_time' => 0, - 'budget' => 0, - 'money_spent' => 0, - 'conversion_value' => 0, - 'bidding_strategy' => '', - 'date_add' => $date_sync - ] ); - } - } - return $db_campaign_id; } @@ -1961,211 +1914,11 @@ class Cron } } - // ARCHIWUM: stara wersja cron_campaigns pozostawiona do porownan i ewentualnego rollbacku. - static public function cron_campaigns_archive() - { - global $mdb, $settings; - self::touch_cron_invocation( __FUNCTION__ ); - - $api = new \services\GoogleAdsApi(); - - if ( !$api -> is_configured() ) - { - echo json_encode( [ 'result' => 'Google Ads API nie jest skonfigurowane. Uzupelnij dane w Ustawieniach.' ] ); - exit; - } - - $sync_date = \S::get( 'date' ) ? date( 'Y-m-d', strtotime( \S::get( 'date' ) ) ) : date( 'Y-m-d' ); - $conversion_window_days = self::get_conversion_window_days(); - $sync_dates = self::build_backfill_dates( $sync_date, $conversion_window_days ); - $client_id = (int) \S::get( 'client_id' ); - - if ( $client_id > 0 ) - { - $client = $mdb -> get( 'clients', '*', [ 'AND' => [ - 'id' => $client_id, - 'google_ads_customer_id[!]' => null, - 'deleted' => 0 - ] ] ); - - if ( !$client ) - { - echo json_encode( [ 'result' => 'Nie znaleziono klienta z poprawnym Google Ads Customer ID.', 'client_id' => $client_id ] ); - exit; - } - - $sync = self::sync_campaigns_for_client( $client, $api, $sync_date, true ); - - echo json_encode( [ - 'result' => empty( $sync['errors'] ) ? 'Synchronizacja kampanii zakonczona.' : 'Synchronizacja kampanii zakonczona z bledami.', - 'client_id' => (int) $client['id'], - 'date' => $sync_date, - 'active_date' => $sync_date, - 'processed_records' => (int) $sync['processed_records'], - 'ad_groups_synced' => (int) ( $sync['ad_groups_synced'] ?? 0 ), - 'search_terms_synced' => (int) ( $sync['search_terms_synced'] ?? 0 ), - 'keywords_synced' => (int) ( $sync['keywords_synced'] ?? 0 ), - 'negative_keywords_synced' => (int) ( $sync['negative_keywords_synced'] ?? 0 ), - 'alerts_synced' => (int) ( $sync['alerts_synced'] ?? 0 ), - 'errors' => $sync['errors'] - ] ); - exit; - } - - self::cleanup_old_sync_rows( 30 ); - - $client_ids = $mdb -> query( "SELECT id FROM clients WHERE deleted = 0 AND google_ads_customer_id IS NOT NULL AND google_ads_customer_id <> '' ORDER BY id ASC" ) -> fetchAll( \PDO::FETCH_COLUMN ); - $client_ids = array_values( array_unique( array_map( 'intval', $client_ids ) ) ); - - if ( empty( $client_ids ) ) - { - echo json_encode( [ 'result' => 'Brak klientow z ustawionym Google Ads Customer ID.' ] ); - exit; - } - - $clients_map = []; - $clients = $mdb -> select( 'clients', '*', [ - 'AND' => [ - 'google_ads_customer_id[!]' => null, - 'deleted' => 0 - ], - 'ORDER' => [ 'id' => 'ASC' ] - ] ); - foreach ( $clients as $c ) - { - $clients_map[ (int) $c['id'] ] = $c; - } - - self::ensure_sync_rows( 'campaigns', $sync_dates, $client_ids ); - - $active_client_id = self::get_active_client( 'campaigns' ); - - if ( !$active_client_id ) - { - echo json_encode( [ - 'result' => 'Wszyscy klienci kampanii zostali juz przetworzeni dla calego okna dat.', - 'date' => $sync_date, - 'active_date' => $sync_date, - 'conversion_window_days' => $conversion_window_days, - 'dates_synced' => $sync_dates, - 'processed_clients' => count( $client_ids ), - 'total_clients' => count( $client_ids ) - ] ); - exit; - } - - $dates_per_run_default = (int) ( $settings['cron_campaigns_clients_per_run'] ?? 2 ); - if ( $dates_per_run_default <= 0 ) - { - $dates_per_run_default = 2; - } - - $dates_per_run = (int) \S::get( 'clients_per_run' ); - if ( $dates_per_run <= 0 ) - { - $dates_per_run = $dates_per_run_default; - } - $dates_per_run = min( 20, $dates_per_run ); - - $dates_batch = self::get_pending_dates_for_client( 'campaigns', $active_client_id, 'pending', $dates_per_run ); - - if ( empty( $dates_batch ) ) - { - echo json_encode( [ - 'result' => 'Wszystkie daty klienta przetworzone. Kolejne wywolanie przejdzie do nastepnego klienta.', - 'date' => $sync_date, - 'active_client_id' => $active_client_id, - 'conversion_window_days' => $conversion_window_days, - 'dates_synced' => $sync_dates, - 'processed_clients' => count( $client_ids ), - 'total_clients' => count( $client_ids ) - ] ); - exit; - } - - $selected_client = $clients_map[ $active_client_id ] ?? null; - if ( !$selected_client ) - { - echo json_encode( [ - 'result' => 'Nie udalo sie znalezc klienta do synchronizacji kampanii. ID: ' . $active_client_id, - 'active_client_id' => $active_client_id, - 'errors' => [ 'Klient ID ' . $active_client_id . ' nie znaleziony w clients_map.' ] - ] ); - exit; - } - - $dates_processed_in_call = []; - $errors = []; - $processed_records_total = 0; - $ad_groups_synced_total = 0; - $search_terms_synced_total = 0; - $keywords_synced_total = 0; - $negative_keywords_synced_total = 0; - $alerts_synced_total = 0; - - foreach ( $dates_batch as $active_date ) - { - $sync_details = ( $active_date === $sync_date ); - - $sync = self::sync_campaigns_for_client( $selected_client, $api, $active_date, $sync_details ); - $processed_records_total += (int) ( $sync['processed_records'] ?? 0 ); - $ad_groups_synced_total += (int) ( $sync['ad_groups_synced'] ?? 0 ); - $search_terms_synced_total += (int) ( $sync['search_terms_synced'] ?? 0 ); - $keywords_synced_total += (int) ( $sync['keywords_synced'] ?? 0 ); - $negative_keywords_synced_total += (int) ( $sync['negative_keywords_synced'] ?? 0 ); - $alerts_synced_total += (int) ( $sync['alerts_synced'] ?? 0 ); - - $error_msg = null; - if ( !empty( $sync['errors'] ) ) - { - $errors = array_merge( $errors, (array) $sync['errors'] ); - $error_msg = implode( '; ', (array) $sync['errors'] ); - } - - self::mark_sync_phase( 'campaigns', $active_date, $active_client_id, 'done', $error_msg ); - $dates_processed_in_call[] = $active_date; - } - - $done_count = (int) $mdb -> query( - "SELECT COUNT(*) FROM cron_sync_status WHERE pipeline = 'campaigns' AND client_id = :client_id AND phase = 'done' - AND sync_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)", - [ ':client_id' => $active_client_id ] - ) -> fetchColumn(); - $total_count = (int) $mdb -> query( - "SELECT COUNT(*) FROM cron_sync_status WHERE pipeline = 'campaigns' AND client_id = :client_id - AND sync_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)", - [ ':client_id' => $active_client_id ] - ) -> fetchColumn(); - - $remaining_dates = max( 0, $total_count - $done_count ); - $estimated_calls_remaining = (int) ceil( $remaining_dates / max( 1, $dates_per_run ) ); - - echo json_encode( [ - 'result' => empty( $errors ) ? 'Synchronizacja kampanii zakonczona.' : 'Synchronizacja kampanii zakonczona z bledami.', - 'active_client_id' => $active_client_id, - 'dates_per_run' => $dates_per_run, - 'dates_processed_in_call' => count( $dates_processed_in_call ), - 'processed_dates' => $dates_processed_in_call, - 'remaining_dates' => $remaining_dates, - 'estimated_calls_remaining' => $estimated_calls_remaining, - 'date' => $sync_date, - 'conversion_window_days' => $conversion_window_days, - 'dates_synced' => $sync_dates, - 'processed_records' => $processed_records_total, - 'ad_groups_synced' => $ad_groups_synced_total, - 'search_terms_synced' => $search_terms_synced_total, - 'keywords_synced' => $keywords_synced_total, - 'negative_keywords_synced' => $negative_keywords_synced_total, - 'alerts_synced' => $alerts_synced_total, - 'total_clients' => count( $client_ids ), - 'errors' => $errors - ] ); - exit; - } static public function cron_campaigns_product_alerts_merchant() { global $mdb, $settings; + self::$current_cron_action = __FUNCTION__; self::touch_cron_invocation( __FUNCTION__ ); $api = new \services\GoogleAdsApi(); @@ -2693,284 +2446,7 @@ class Cron ]; } - static private function count_pending_campaign_dates_for_client( $client_id ) - { - global $mdb; - return (int) $mdb -> query( - "SELECT COUNT(*) - FROM cron_sync_status - WHERE pipeline = 'campaigns' - AND client_id = :client_id - AND phase = 'pending' - AND sync_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)", - [ ':client_id' => (int) $client_id ] - ) -> fetchColumn(); - } - - static private function sync_campaigns_for_client( $client, $api, $as_of_date = null, $sync_details = true ) - { - global $mdb; - - $as_of_date = $as_of_date ? date( 'Y-m-d', strtotime( $as_of_date ) ) : date( 'Y-m-d' ); - $sync_details = (bool) $sync_details; - $processed = 0; - $errors = []; - $customer_id = $client['google_ads_customer_id']; - $campaigns_db_map = []; - - $campaigns_30 = $api -> get_campaigns_30_days( $customer_id, $as_of_date ); - if ( $campaigns_30 === false ) - { - $last_err = \services\GoogleAdsApi::get_setting( 'google_ads_last_error' ); - $errors[] = 'Blad API dla klienta ' . $client['name'] . ' (ID: ' . $customer_id . '): ' . $last_err; - - return [ - 'processed_records' => 0, - 'ad_groups_synced' => 0, - 'search_terms_synced' => 0, - 'keywords_synced' => 0, - 'negative_keywords_synced' => 0, - 'alerts_synced' => 0, - 'errors' => $errors - ]; - } - - if ( !is_array( $campaigns_30 ) ) - { - $campaigns_30 = []; - } - - $campaigns_all_time = $api -> get_campaigns_all_time( $customer_id, $as_of_date ); - if ( $campaigns_all_time === false ) - { - $last_err = \services\GoogleAdsApi::get_setting( 'google_ads_last_error' ); - $errors[] = 'Blad pobierania danych all time dla klienta ' . $client['name'] . ' (ID: ' . $customer_id . '): ' . $last_err; - - return [ - 'processed_records' => 0, - 'ad_groups_synced' => 0, - 'search_terms_synced' => 0, - 'keywords_synced' => 0, - 'negative_keywords_synced' => 0, - 'alerts_synced' => 0, - 'errors' => $errors - ]; - } - - $all_time_map = []; - $all_time_totals = [ - 'cost' => 0.0, - 'conversion_value' => 0.0, - ]; - - if ( is_array( $campaigns_all_time ) ) - { - foreach ( $campaigns_all_time as $cat ) - { - $all_time_map[ (string) ( $cat['campaign_id'] ?? '' ) ] = (float) ( $cat['roas_all_time'] ?? 0 ); - $all_time_totals['cost'] += (float) ( $cat['cost_all_time'] ?? 0 ); - $all_time_totals['conversion_value'] += (float) ( $cat['conversion_value_all_time'] ?? 0 ); - } - } - - $account_30_totals = [ - 'budget' => 0.0, - 'money_spent' => 0.0, - 'conversion_value' => 0.0, - ]; - - foreach ( $campaigns_30 as $campaign ) - { - $external_campaign_id = isset( $campaign['campaign_id'] ) ? (string) $campaign['campaign_id'] : ''; - if ( $external_campaign_id === '' ) - { - continue; - } - - $advertising_channel_type = strtoupper( trim( (string) ( $campaign['advertising_channel_type'] ?? '' ) ) ); - - $account_30_totals['budget'] += (float) ( $campaign['budget'] ?? 0 ); - $account_30_totals['money_spent'] += (float) ( $campaign['money_spent'] ?? 0 ); - $account_30_totals['conversion_value'] += (float) ( $campaign['conversion_value'] ?? 0 ); - - if ( !$mdb -> count( 'campaigns', [ 'AND' => [ - 'client_id' => $client['id'], - 'campaign_id' => $external_campaign_id - ] ] ) ) - { - $mdb -> insert( 'campaigns', [ - 'client_id' => $client['id'], - 'campaign_id' => $external_campaign_id, - 'campaign_name' => $campaign['campaign_name'], - 'advertising_channel_type' => $advertising_channel_type !== '' ? $advertising_channel_type : null - ] ); - $db_campaign_id = $mdb -> id(); - } - else - { - $db_campaign_id = $mdb -> get( 'campaigns', 'id', [ 'AND' => [ - 'client_id' => $client['id'], - 'campaign_id' => $external_campaign_id - ] ] ); - - $mdb -> update( 'campaigns', [ - 'campaign_name' => $campaign['campaign_name'], - 'advertising_channel_type' => $advertising_channel_type !== '' ? $advertising_channel_type : null - ], [ 'id' => $db_campaign_id ] ); - } - - $bidding_strategy = self::format_bidding_strategy( - $campaign['bidding_strategy'], - $campaign['target_roas'] ?? 0 - ); - - $history_data = [ - 'roas_30_days' => $campaign['roas_30_days'], - 'roas_all_time' => $all_time_map[ $external_campaign_id ] ?? 0, - 'budget' => $campaign['budget'], - 'money_spent' => $campaign['money_spent'], - 'conversion_value' => $campaign['conversion_value'], - 'bidding_strategy' => $bidding_strategy, - ]; - - if ( $mdb -> count( 'campaigns_history', [ 'AND' => [ - 'campaign_id' => $db_campaign_id, - 'date_add' => $as_of_date - ] ] ) ) - { - $mdb -> update( 'campaigns_history', $history_data, [ 'AND' => [ - 'campaign_id' => $db_campaign_id, - 'date_add' => $as_of_date - ] ] ); - } - else - { - $history_data['campaign_id'] = $db_campaign_id; - $history_data['date_add'] = $as_of_date; - $mdb -> insert( 'campaigns_history', $history_data ); - } - - $campaigns_db_map[ $external_campaign_id ] = (int) $db_campaign_id; - $processed++; - } - - $account_roas_30 = ( $account_30_totals['money_spent'] > 0 ) - ? round( ( $account_30_totals['conversion_value'] / $account_30_totals['money_spent'] ) * 100, 2 ) - : 0; - - $account_roas_all_time = ( $all_time_totals['cost'] > 0 ) - ? round( ( $all_time_totals['conversion_value'] / $all_time_totals['cost'] ) * 100, 2 ) - : 0; - - if ( !$mdb -> count( 'campaigns', [ 'AND' => [ - 'client_id' => $client['id'], - 'campaign_id' => 0 - ] ] ) ) - { - $mdb -> insert( 'campaigns', [ - 'client_id' => $client['id'], - 'campaign_id' => 0, - 'campaign_name' => '--- konto ---', - 'advertising_channel_type' => null - ] ); - $db_account_campaign_id = $mdb -> id(); - } - else - { - $db_account_campaign_id = $mdb -> get( 'campaigns', 'id', [ 'AND' => [ - 'client_id' => $client['id'], - 'campaign_id' => 0 - ] ] ); - - $mdb -> update( 'campaigns', [ - 'campaign_name' => '--- konto ---', - 'advertising_channel_type' => null - ], [ 'id' => $db_account_campaign_id ] ); - } - - $account_history_data = [ - 'roas_30_days' => $account_roas_30, - 'roas_all_time' => $account_roas_all_time, - 'budget' => $account_30_totals['budget'], - 'money_spent' => $account_30_totals['money_spent'], - 'conversion_value' => $account_30_totals['conversion_value'], - 'bidding_strategy' => 'Konto (agregacja wszystkich kampanii)', - ]; - - if ( $mdb -> count( 'campaigns_history', [ 'AND' => [ - 'campaign_id' => $db_account_campaign_id, - 'date_add' => $as_of_date - ] ] ) ) - { - $mdb -> update( 'campaigns_history', $account_history_data, [ 'AND' => [ - 'campaign_id' => $db_account_campaign_id, - 'date_add' => $as_of_date - ] ] ); - } - else - { - $account_history_data['campaign_id'] = $db_account_campaign_id; - $account_history_data['date_add'] = $as_of_date; - $mdb -> insert( 'campaigns_history', $account_history_data ); - } - - $processed++; - - if ( !$sync_details ) - { - // Daty historyczne: buduj ad_group_db_map z bazy i pobierz search terms za te date - $ad_group_db_map = self::build_ad_group_db_map_from_db( $campaigns_db_map ); - - $search_terms_daily = self::sync_campaign_search_terms_daily( $campaigns_db_map, $ad_group_db_map, $customer_id, $api, $as_of_date ); - $errors = array_merge( $errors, $search_terms_daily['errors'] ); - - return [ - 'processed_records' => $processed, - 'ad_groups_synced' => 0, - 'search_terms_synced' => (int) $search_terms_daily['count'], - 'keywords_synced' => 0, - 'negative_keywords_synced' => 0, - 'alerts_synced' => 0, - 'errors' => $errors - ]; - } - - // Dzisiejsza data: najpierw sync ad_groups (DELETE + INSERT), potem search terms daily ze swiezym mapem - $ad_groups_sync = self::sync_campaign_ad_groups_for_client( $campaigns_db_map, $customer_id, $api, $as_of_date ); - $errors = array_merge( $errors, $ad_groups_sync['errors'] ); - - $search_terms_daily = self::sync_campaign_search_terms_daily( $campaigns_db_map, $ad_groups_sync['ad_group_map'], $customer_id, $api, $as_of_date ); - $errors = array_merge( $errors, $search_terms_daily['errors'] ); - - $aggregate_count = self::aggregate_campaign_search_terms_for_client( (int) $client['id'], $as_of_date ); - $keywords_sync = self::sync_campaign_keywords_for_client( $campaigns_db_map, $ad_groups_sync['ad_group_map'], $customer_id, $api, $as_of_date ); - $negative_keywords_sync = self::sync_campaign_negative_keywords_for_client( $campaigns_db_map, $ad_groups_sync['ad_group_map'], $customer_id, $api, $as_of_date ); - $alerts_sync = self::sync_product_campaign_alerts_for_client( - $client, - $campaigns_db_map, - $ad_groups_sync['ad_group_map'], - $customer_id, - $api, - $as_of_date, - [ - 'run_missing_mapping_alerts' => true, - 'run_merchant_validation_alerts' => false - ] - ); - - $errors = array_merge( $errors, $keywords_sync['errors'], $negative_keywords_sync['errors'], $alerts_sync['errors'] ); - - return [ - 'processed_records' => $processed, - 'ad_groups_synced' => (int) $ad_groups_sync['count'], - 'search_terms_synced' => (int) $search_terms_daily['count'] + $aggregate_count, - 'keywords_synced' => (int) $keywords_sync['count'], - 'negative_keywords_synced' => (int) $negative_keywords_sync['count'], - 'alerts_synced' => (int) ( $alerts_sync['count'] ?? 0 ), - 'errors' => $errors - ]; - } static private function sync_product_campaign_alerts_for_client( $client, $campaigns_db_map, $ad_group_db_map, $customer_id, $api, $date_sync, $options = [] ) { @@ -4868,6 +4344,7 @@ class Cron static public function cron_facebook_ads() { + self::$current_cron_action = __FUNCTION__; self::touch_cron_invocation( __FUNCTION__ ); self::output_cron_response( self::run_facebook_ads_sync_payload( (int) \S::get( 'client_id' ) ) ); } @@ -5243,6 +4720,23 @@ class Cron { $payload = is_array( $payload ) ? $payload : [ 'result' => (string) $payload ]; + // --- Logowanie do tabeli logs --- + try + { + $has_errors = !empty( $payload['errors'] ); + $log_level = $has_errors ? 'error' : 'info'; + $log_source = self::$current_cron_action ?? 'cron'; + $log_client_id = $payload['active_client_id'] ?? $payload['client_id'] ?? null; + $log_message = (string) ( $payload['result'] ?? 'Brak komunikatu' ); + + \factory\Logs::add( $log_level, $log_source, $log_message, $payload, $log_client_id ); + \factory\Logs::cleanup_old( 30 ); + } + catch ( \Throwable $e ) + { + $payload['_log_error'] = $e -> getMessage(); + } + if ( self::is_debug_requested() ) { header( 'Content-Type: text/html; charset=utf-8' ); diff --git a/autoload/controls/class.Logs.php b/autoload/controls/class.Logs.php new file mode 100644 index 0000000..7e393de --- /dev/null +++ b/autoload/controls/class.Logs.php @@ -0,0 +1,151 @@ + 'info', + 'error' => 'error', + 'warning' => 'warning' + ]; + + $data = []; + foreach ( $rows as $row ) + { + $message = (string) ( $row['message'] ?? '' ); + if ( mb_strlen( $message ) > 120 ) + { + $message = mb_substr( $message, 0, 120 ) . '...'; + } + + $client_label = ''; + if ( !empty( $row['client_name'] ) ) + { + $client_label = htmlspecialchars( (string) $row['client_name'], ENT_QUOTES, 'UTF-8' ); + } + else if ( !empty( $row['client_id'] ) ) + { + $client_label = 'ID: ' . (int) $row['client_id']; + } + else + { + $client_label = '-'; + } + + $data[] = [ + (string) ( $row['date_add'] ?? '' ), + $level_badges[ $row['level'] ] ?? htmlspecialchars( (string) $row['level'], ENT_QUOTES, 'UTF-8' ), + htmlspecialchars( (string) ( $row['source'] ?? '' ), ENT_QUOTES, 'UTF-8' ), + $client_label, + htmlspecialchars( $message, ENT_QUOTES, 'UTF-8' ), + '' + ]; + } + + echo json_encode( [ + 'draw' => $draw, + 'recordsTotal' => $total, + 'recordsFiltered' => $total, + 'data' => $data + ] ); + exit; + } + + static public function get_detail() + { + $id = (int) \S::get( 'id' ); + + if ( $id <= 0 ) + { + echo json_encode( [ 'success' => false, 'message' => 'Nieprawidlowe ID.' ] ); + exit; + } + + $log = \factory\Logs::get_one( $id ); + + if ( !$log ) + { + echo json_encode( [ 'success' => false, 'message' => 'Wpis nie znaleziony.' ] ); + exit; + } + + $context = null; + if ( !empty( $log['context_json'] ) ) + { + $decoded = json_decode( $log['context_json'], true ); + if ( $decoded !== null ) + { + $context = json_encode( $decoded, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_INVALID_UTF8_SUBSTITUTE ); + } + else + { + $context = $log['context_json']; + } + } + + $response = json_encode( [ + 'success' => true, + 'log' => [ + 'id' => (int) $log['id'], + 'level' => $log['level'], + 'source' => $log['source'], + 'client_name' => $log['client_name'] ?? '', + 'client_id' => $log['client_id'], + 'message' => $log['message'], + 'context' => $context, + 'date_add' => $log['date_add'] + ] + ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR ); + + if ( $response === false ) + { + echo json_encode( [ 'success' => false, 'message' => 'Blad kodowania JSON: ' . json_last_error_msg() ] ); + exit; + } + + echo $response; + exit; + } +} diff --git a/autoload/controls/class.Users.php b/autoload/controls/class.Users.php index e0ec600..b74d4a1 100644 --- a/autoload/controls/class.Users.php +++ b/autoload/controls/class.Users.php @@ -330,7 +330,6 @@ class Users [ '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 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 archiwum kampanii', 'path' => '/cron/cron_campaigns_archive', 'action' => 'cron_campaigns_archive', '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' ], ]; diff --git a/autoload/factory/class.Logs.php b/autoload/factory/class.Logs.php new file mode 100644 index 0000000..0e02808 --- /dev/null +++ b/autoload/factory/class.Logs.php @@ -0,0 +1,156 @@ + json_last_error_msg(), '_type' => gettype( $context ) ] ); + } + } + + $mdb -> insert( 'logs', [ + 'level' => $level, + 'source' => trim( (string) $source ), + 'client_id' => $client_id !== null ? (int) $client_id : null, + 'message' => (string) $message, + 'context_json' => $context_json + ] ); + + return (int) $mdb -> id(); + } + + static public function get_data( $start, $length, $filters = [] ) + { + global $mdb; + + $start = max( 0, (int) $start ); + $length = max( 1, min( 100, (int) $length ) ); + + $where_parts = []; + $params = []; + + if ( !empty( $filters['level'] ) ) + { + $where_parts[] = 'l.level = :level'; + $params[':level'] = (string) $filters['level']; + } + + if ( !empty( $filters['source'] ) ) + { + $where_parts[] = 'l.source = :source'; + $params[':source'] = (string) $filters['source']; + } + + if ( !empty( $filters['date_from'] ) ) + { + $where_parts[] = 'l.date_add >= :date_from'; + $params[':date_from'] = (string) $filters['date_from'] . ' 00:00:00'; + } + + if ( !empty( $filters['date_to'] ) ) + { + $where_parts[] = 'l.date_add <= :date_to'; + $params[':date_to'] = (string) $filters['date_to'] . ' 23:59:59'; + } + + $where_sql = ''; + if ( !empty( $where_parts ) ) + { + $where_sql = 'WHERE ' . implode( ' AND ', $where_parts ); + } + + $sql = "SELECT l.*, c.name AS client_name + FROM logs AS l + LEFT JOIN clients AS c ON c.id = l.client_id + {$where_sql} + ORDER BY l.date_add DESC + LIMIT {$start}, {$length}"; + + return $mdb -> query( $sql, $params ) -> fetchAll( \PDO::FETCH_ASSOC ); + } + + static public function get_records_total( $filters = [] ) + { + global $mdb; + + $where_parts = []; + $params = []; + + if ( !empty( $filters['level'] ) ) + { + $where_parts[] = 'level = :level'; + $params[':level'] = (string) $filters['level']; + } + + if ( !empty( $filters['source'] ) ) + { + $where_parts[] = 'source = :source'; + $params[':source'] = (string) $filters['source']; + } + + if ( !empty( $filters['date_from'] ) ) + { + $where_parts[] = 'date_add >= :date_from'; + $params[':date_from'] = (string) $filters['date_from'] . ' 00:00:00'; + } + + if ( !empty( $filters['date_to'] ) ) + { + $where_parts[] = 'date_add <= :date_to'; + $params[':date_to'] = (string) $filters['date_to'] . ' 23:59:59'; + } + + $where_sql = ''; + if ( !empty( $where_parts ) ) + { + $where_sql = 'WHERE ' . implode( ' AND ', $where_parts ); + } + + $row = $mdb -> query( "SELECT COUNT(*) AS cnt FROM logs {$where_sql}", $params ) -> fetch( \PDO::FETCH_ASSOC ); + return (int) ( $row['cnt'] ?? 0 ); + } + + static public function get_one( $id ) + { + global $mdb; + + return $mdb -> query( + "SELECT l.*, c.name AS client_name + FROM logs AS l + LEFT JOIN clients AS c ON c.id = l.client_id + WHERE l.id = :id", + [ ':id' => (int) $id ] + ) -> fetch( \PDO::FETCH_ASSOC ); + } + + static public function cleanup_old( $days = 30 ) + { + global $mdb; + + $days = max( 1, (int) $days ); + $mdb -> query( "DELETE FROM logs WHERE date_add < DATE_SUB( NOW(), INTERVAL {$days} DAY )" ); + } + + static public function get_sources() + { + global $mdb; + + $rows = $mdb -> query( "SELECT DISTINCT source FROM logs WHERE source != '' ORDER BY source ASC" ) -> fetchAll( \PDO::FETCH_COLUMN ); + return is_array( $rows ) ? $rows : []; + } +} diff --git a/autoload/services/class.GoogleAdsApi.php b/autoload/services/class.GoogleAdsApi.php index fa5acc0..69cfa63 100644 --- a/autoload/services/class.GoogleAdsApi.php +++ b/autoload/services/class.GoogleAdsApi.php @@ -1952,6 +1952,7 @@ class GoogleAdsApi . "segments.product_link, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "ad_group.id, " . "ad_group.name, " @@ -1962,6 +1963,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM shopping_performance_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'SHOPPING'"; $gaql_with_ad_group = "SELECT " @@ -1970,6 +1972,7 @@ class GoogleAdsApi . "segments.product_title, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "ad_group.id, " . "ad_group.name, " @@ -1980,6 +1983,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM shopping_performance_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'SHOPPING'"; $gaql_pmax_asset_group_with_url = "SELECT " @@ -1989,6 +1993,7 @@ class GoogleAdsApi . "segments.product_link, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "asset_group.id, " . "asset_group.name, " @@ -1999,6 +2004,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM asset_group_product_group_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'"; $gaql_pmax_asset_group = "SELECT " @@ -2007,6 +2013,7 @@ class GoogleAdsApi . "segments.product_title, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "asset_group.id, " . "asset_group.name, " @@ -2017,6 +2024,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM asset_group_product_group_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'"; $gaql_pmax_campaign_level_fallback_with_url = "SELECT " @@ -2026,6 +2034,7 @@ class GoogleAdsApi . "segments.product_link, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "metrics.impressions, " . "metrics.clicks, " @@ -2034,6 +2043,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM shopping_performance_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'"; $gaql_pmax_campaign_level_fallback = "SELECT " @@ -2042,6 +2052,7 @@ class GoogleAdsApi . "segments.product_title, " . "campaign.id, " . "campaign.name, " + . "campaign.status, " . "campaign.advertising_channel_type, " . "metrics.impressions, " . "metrics.clicks, " @@ -2050,6 +2061,7 @@ class GoogleAdsApi . "metrics.conversions_value " . "FROM shopping_performance_view " . "WHERE segments.date = '" . $date . "' " + . "AND campaign.status = 'ENABLED' " . "AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'"; $search_with_optional_url = function( $query_with_url, $query_without_url ) use ( $customer_id ) diff --git a/autoload/view/class.Logs.php b/autoload/view/class.Logs.php new file mode 100644 index 0000000..1e951e9 --- /dev/null +++ b/autoload/view/class.Logs.php @@ -0,0 +1,12 @@ + $sources, + ] ); + } +} diff --git a/index.php b/index.php index 80653a1..ea4240d 100644 --- a/index.php +++ b/index.php @@ -49,6 +49,9 @@ $route_aliases = [ 'settings/save_claude' => ['users', 'settings_save_claude'], 'products/ai_suggest' => ['products', 'ai_suggest'], 'clients/save' => ['clients', 'save'], + 'logs' => ['logs', 'main_view'], + 'logs/get_data_table' => ['logs', 'get_logs_data_table'], + 'logs/get_detail' => ['logs', 'get_detail'], ]; $path = implode('/', $segments); diff --git a/layout/style.css b/layout/style.css index fbee538..dcae6c8 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}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.clients-page .clients-table-wrap .table{margin:0}.clients-page .clients-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:14px 20px}.clients-page .clients-table-wrap .table tbody td{padding:14px 20px;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-page .clients-table-wrap .table tbody tr:hover{background:#f8fafc}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;max-width:100%}.campaigns-page .campaigns-table-wrap::-webkit-scrollbar{display:none}.campaigns-page .campaigns-table-wrap .table{margin:0;width:100% !important}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .table tbody td{padding:10px 16px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:13px}.campaigns-page .campaigns-table-wrap .table tbody tr:hover{background:#f8fafc}.campaigns-page .campaigns-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.campaigns-page .campaigns-table-wrap .dt-layout-row:first-child{display:none}.campaigns-page .campaigns-table-wrap .dt-info{font-size:13px;color:#8899a6}.campaigns-page .campaigns-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.campaigns-page .campaigns-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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-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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.products-page .products-table-wrap .table{margin:0;width:100% !important}.products-page .products-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#8899a6;padding:10px 8px;white-space:nowrap}.products-page .products-table-wrap .table tbody td{padding:6px 8px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:12px}.products-page .products-table-wrap .table tbody tr:hover{background:#f8fafc}.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 .products-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.products-page .products-table-wrap .dt-layout-row:first-child{display:none}.products-page .products-table-wrap .dt-info{font-size:13px;color:#8899a6}.products-page .products-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;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}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.products-page .products-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.products-page .products-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.products-page .products-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}.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;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-negative-toolbar{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{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{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{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.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 .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}.products-page table#products>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}.products-page #products thead th .dt-column-order{display:none !important}.products-page #products thead th.dt-orderable-asc,.products-page #products thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.products-page #products thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.products-page #products thead th.dt-orderable-asc::after,.products-page #products 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}.products-page #products thead th.dt-ordering-asc::after,.products-page #products thead th[aria-sort=ascending]::after{content:"▲";color:#fff;background:#2563eb}.products-page #products thead th.dt-ordering-desc::after,.products-page #products thead th[aria-sort=descending]::after{content:"▼";color:#fff;background:#2563eb}/*# 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}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.clients-page .clients-table-wrap .table{margin:0}.clients-page .clients-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:14px 20px}.clients-page .clients-table-wrap .table tbody td{padding:14px 20px;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-page .clients-table-wrap .table tbody tr:hover{background:#f8fafc}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;max-width:100%}.campaigns-page .campaigns-table-wrap::-webkit-scrollbar{display:none}.campaigns-page .campaigns-table-wrap .table{margin:0;width:100% !important}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .table tbody td{padding:10px 16px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:13px}.campaigns-page .campaigns-table-wrap .table tbody tr:hover{background:#f8fafc}.campaigns-page .campaigns-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.campaigns-page .campaigns-table-wrap .dt-layout-row:first-child{display:none}.campaigns-page .campaigns-table-wrap .dt-info{font-size:13px;color:#8899a6}.campaigns-page .campaigns-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.campaigns-page .campaigns-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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-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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.products-page .products-table-wrap .table{margin:0;width:100% !important}.products-page .products-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#8899a6;padding:10px 8px;white-space:nowrap}.products-page .products-table-wrap .table tbody td{padding:6px 8px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:12px}.products-page .products-table-wrap .table tbody tr:hover{background:#f8fafc}.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 .products-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.products-page .products-table-wrap .dt-layout-row:first-child{display:none}.products-page .products-table-wrap .dt-info{font-size:13px;color:#8899a6}.products-page .products-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;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}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.products-page .products-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.products-page .products-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.products-page .products-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}.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;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-negative-toolbar{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{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{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{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.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 .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}.products-page table#products>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}.products-page #products thead th .dt-column-order{display:none !important}.products-page #products thead th.dt-orderable-asc,.products-page #products thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.products-page #products thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.products-page #products thead th.dt-orderable-asc::after,.products-page #products 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}.products-page #products thead th.dt-ordering-asc::after,.products-page #products thead th[aria-sort=ascending]::after{content:"▲";color:#fff;background:#2563eb}.products-page #products thead th.dt-ordering-desc::after,.products-page #products thead th[aria-sort=descending]::after{content:"▼";color:#fff;background:#2563eb}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.logs-page .logs-table-wrap .table{margin:0}.logs-page .logs-table-wrap .table thead th{background:#f0f4fa;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 14px;white-space:nowrap}.logs-page .logs-table-wrap .table tbody td{padding:10px 14px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #eef2f7}.logs-page .logs-table-wrap .table tbody tr:hover td{background:#f8fafd}.logs-page .logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.logs-page .logs-table-wrap .dt-layout-row:first-child{display:none}.logs-page .logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.logs-page .logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.logs-page .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}.logs-page .logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.logs-page .logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.logs-page .logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.logs-page .logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/layout/style.css.map b/layout/style.css.map index 76a7cb6..f244c3d 100644 --- a/layout/style.css.map +++ b/layout/style.css.map @@ -1 +1 @@ -{"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}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.clients-page .clients-table-wrap .table{margin:0}.clients-page .clients-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:14px 20px}.clients-page .clients-table-wrap .table tbody td{padding:14px 20px;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-page .clients-table-wrap .table tbody tr:hover{background:#f8fafc}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;max-width:100%}.campaigns-page .campaigns-table-wrap::-webkit-scrollbar{display:none}.campaigns-page .campaigns-table-wrap .table{margin:0;width:100% !important}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .table tbody td{padding:10px 16px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:13px}.campaigns-page .campaigns-table-wrap .table tbody tr:hover{background:#f8fafc}.campaigns-page .campaigns-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.campaigns-page .campaigns-table-wrap .dt-layout-row:first-child{display:none}.campaigns-page .campaigns-table-wrap .dt-info{font-size:13px;color:#8899a6}.campaigns-page .campaigns-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.campaigns-page .campaigns-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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-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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.products-page .products-table-wrap .table{margin:0;width:100% !important}.products-page .products-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#8899a6;padding:10px 8px;white-space:nowrap}.products-page .products-table-wrap .table tbody td{padding:6px 8px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:12px}.products-page .products-table-wrap .table tbody tr:hover{background:#f8fafc}.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 .products-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.products-page .products-table-wrap .dt-layout-row:first-child{display:none}.products-page .products-table-wrap .dt-info{font-size:13px;color:#8899a6}.products-page .products-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;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}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.products-page .products-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.products-page .products-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.products-page .products-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}.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;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-negative-toolbar{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{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{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{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.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 .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}.products-page table#products>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}.products-page #products thead th .dt-column-order{display:none !important}.products-page #products thead th.dt-orderable-asc,.products-page #products thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.products-page #products thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.products-page #products thead th.dt-orderable-asc::after,.products-page #products 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}.products-page #products thead th.dt-ordering-asc::after,.products-page #products thead th[aria-sort=ascending]::after{content:\"▲\";color:#fff;background:#2563eb}.products-page #products thead th.dt-ordering-desc::after,.products-page #products thead th[aria-sort=descending]::after{content:\"▼\";color:#fff;background:#2563eb}","@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// --- 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 background: $cWhite;\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 .table {\r\n margin: 0;\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: 14px 20px;\r\n }\r\n\r\n tbody td {\r\n padding: 14px 20px;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n\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 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 -ms-overflow-style: none;\r\n scrollbar-width: none;\r\n max-width: 100%;\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 vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 13px;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n }\r\n\r\n // DataTables 2.x overrides\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 // Ukryj wiersz z search/length jeśli pusty\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 .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-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 background: $cWhite;\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 .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: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n color: #8899A6;\r\n padding: 10px 8px;\r\n white-space: nowrap;\r\n }\r\n\r\n tbody td {\r\n padding: 6px 8px;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 12px;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\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 // DataTables 2.x overrides (identyczne z campaigns)\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 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 // 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\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 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-negative-toolbar {\r\n display: flex;\r\n align-items: center;\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 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 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 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 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 .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.products-page table#products>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.products-page #products thead th .dt-column-order {\r\n display: none !important;\r\n}\r\n\r\n.products-page #products thead th.dt-orderable-asc,\r\n.products-page #products thead th.dt-orderable-desc {\r\n cursor: pointer;\r\n padding-right: 34px;\r\n overflow: hidden;\r\n}\r\n\r\n.products-page #products 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.products-page #products thead th.dt-orderable-asc::after,\r\n.products-page #products 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.products-page #products thead th.dt-ordering-asc::after,\r\n.products-page #products thead th[aria-sort=\"ascending\"]::after {\r\n content: '\\25B2';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n}\r\n\r\n.products-page #products thead th.dt-ordering-desc::after,\r\n.products-page #products thead th[aria-sort=\"descending\"]::after {\r\n content: '\\25BC';\r\n color: #FFFFFF;\r\n background: #2563EB;\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}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.clients-page .clients-table-wrap .table{margin:0}.clients-page .clients-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:14px 20px}.clients-page .clients-table-wrap .table tbody td{padding:14px 20px;vertical-align:middle;border-bottom:1px solid #f1f5f9}.clients-page .clients-table-wrap .table tbody tr:hover{background:#f8fafc}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;max-width:100%}.campaigns-page .campaigns-table-wrap::-webkit-scrollbar{display:none}.campaigns-page .campaigns-table-wrap .table{margin:0;width:100% !important}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .table tbody td{padding:10px 16px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:13px}.campaigns-page .campaigns-table-wrap .table tbody tr:hover{background:#f8fafc}.campaigns-page .campaigns-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.campaigns-page .campaigns-table-wrap .dt-layout-row:first-child{display:none}.campaigns-page .campaigns-table-wrap .dt-info{font-size:13px;color:#8899a6}.campaigns-page .campaigns-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.campaigns-page .campaigns-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}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.campaigns-page .campaigns-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.campaigns-page .campaigns-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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-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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.products-page .products-table-wrap .table{margin:0;width:100% !important}.products-page .products-table-wrap .table thead th{background:#f8fafc;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#8899a6;padding:10px 8px;white-space:nowrap}.products-page .products-table-wrap .table tbody td{padding:6px 8px;vertical-align:middle;border-bottom:1px solid #f1f5f9;font-size:12px}.products-page .products-table-wrap .table tbody tr:hover{background:#f8fafc}.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 .products-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.products-page .products-table-wrap .dt-layout-row:first-child{display:none}.products-page .products-table-wrap .dt-info{font-size:13px;color:#8899a6}.products-page .products-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link{display:inline-flex;align-items:center;justify-content:center;min-width:36px;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}.products-page .products-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.products-page .products-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.products-page .products-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.products-page .products-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}.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;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-negative-toolbar{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eef2f7;background:#fff}.campaign-terms-page .terms-negative-bulk-btn{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{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{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.campaigns-extra-table .terms-remove-negative-btn:hover{background:#dc2626;color:#fff;border-color:#dc2626}.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 .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}.products-page table#products>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}.products-page #products thead th .dt-column-order{display:none !important}.products-page #products thead th.dt-orderable-asc,.products-page #products thead th.dt-orderable-desc{cursor:pointer;padding-right:34px;overflow:hidden}.products-page #products thead th .dt-column-title{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:2px}.products-page #products thead th.dt-orderable-asc::after,.products-page #products 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}.products-page #products thead th.dt-ordering-asc::after,.products-page #products thead th[aria-sort=ascending]::after{content:\"▲\";color:#fff;background:#2563eb}.products-page #products thead th.dt-ordering-desc::after,.products-page #products thead th[aria-sort=descending]::after{content:\"▼\";color:#fff;background:#2563eb}.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{background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow:hidden}.logs-page .logs-table-wrap .table{margin:0}.logs-page .logs-table-wrap .table thead th{background:#f0f4fa;border-bottom:2px solid #e2e8f0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#8899a6;padding:12px 14px;white-space:nowrap}.logs-page .logs-table-wrap .table tbody td{padding:10px 14px;font-size:13px;color:#2d3748;vertical-align:middle;border-bottom:1px solid #eef2f7}.logs-page .logs-table-wrap .table tbody tr:hover td{background:#f8fafd}.logs-page .logs-table-wrap .dt-layout-row{padding:14px 20px;margin:0 !important;border-top:1px solid #f1f5f9}.logs-page .logs-table-wrap .dt-layout-row:first-child{display:none}.logs-page .logs-table-wrap .dt-info{font-size:13px;color:#8899a6}.logs-page .logs-table-wrap .dt-paging .pagination{margin:0;padding:0;list-style:none;display:flex;align-items:center;gap:6px}.logs-page .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}.logs-page .logs-table-wrap .dt-paging .pagination .page-item .page-link:hover{background:#eef2ff;color:#6690f4;border-color:#6690f4}.logs-page .logs-table-wrap .dt-paging .pagination .page-item.active .page-link{background:#6690f4;color:#fff;border-color:#6690f4;font-weight:600}.logs-page .logs-table-wrap .dt-paging .pagination .page-item.disabled .page-link{opacity:.35;cursor:default;pointer-events:none}.logs-page .logs-table-wrap .dt-processing{background:hsla(0,0%,100%,.9);color:#4e5e6a;font-size:14px}.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}","@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// --- 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 background: $cWhite;\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 .table {\r\n margin: 0;\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: 14px 20px;\r\n }\r\n\r\n tbody td {\r\n padding: 14px 20px;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n\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 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 -ms-overflow-style: none;\r\n scrollbar-width: none;\r\n max-width: 100%;\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 vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 13px;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\r\n }\r\n\r\n // DataTables 2.x overrides\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 // Ukryj wiersz z search/length jeśli pusty\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 .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-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 background: $cWhite;\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 .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: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.3px;\r\n color: #8899A6;\r\n padding: 10px 8px;\r\n white-space: nowrap;\r\n }\r\n\r\n tbody td {\r\n padding: 6px 8px;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #F1F5F9;\r\n font-size: 12px;\r\n }\r\n\r\n tbody tr:hover {\r\n background: #F8FAFC;\r\n }\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 // DataTables 2.x overrides (identyczne z campaigns)\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 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 // 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\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 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-negative-toolbar {\r\n display: flex;\r\n align-items: center;\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 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 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 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 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 .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.products-page table#products>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.products-page #products thead th .dt-column-order {\r\n display: none !important;\r\n}\r\n\r\n.products-page #products thead th.dt-orderable-asc,\r\n.products-page #products thead th.dt-orderable-desc {\r\n cursor: pointer;\r\n padding-right: 34px;\r\n overflow: hidden;\r\n}\r\n\r\n.products-page #products 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.products-page #products thead th.dt-orderable-asc::after,\r\n.products-page #products 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.products-page #products thead th.dt-ordering-asc::after,\r\n.products-page #products thead th[aria-sort=\"ascending\"]::after {\r\n content: '\\25B2';\r\n color: #FFFFFF;\r\n background: #2563EB;\r\n}\r\n\r\n.products-page #products thead th.dt-ordering-desc::after,\r\n.products-page #products thead th[aria-sort=\"descending\"]::after {\r\n content: '\\25BC';\r\n color: #FFFFFF;\r\n background: #2563EB;\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 background: $cWhite;\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 .table {\r\n margin: 0;\r\n\r\n thead th {\r\n background: #F0F4FA;\r\n border-bottom: 2px solid $cBorder;\r\n font-size: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: #8899A6;\r\n padding: 12px 14px;\r\n white-space: nowrap;\r\n }\r\n\r\n tbody td {\r\n padding: 10px 14px;\r\n font-size: 13px;\r\n color: $cTextDark;\r\n vertical-align: middle;\r\n border-bottom: 1px solid #EEF2F7;\r\n }\r\n\r\n tbody tr:hover td {\r\n background: #F8FAFD;\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 .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}"]} \ No newline at end of file diff --git a/layout/style.scss b/layout/style.scss index b53d150..8e577f4 100644 --- a/layout/style.scss +++ b/layout/style.scss @@ -3531,4 +3531,214 @@ table#products { content: '\25BC'; color: #FFFFFF; background: #2563EB; +} + +// =========================== +// LOGS PAGE +// =========================== +.logs-page { + .logs-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; + + h2 { + margin: 0; + font-size: 20px; + font-weight: 600; + color: $cTextDark; + } + } + + .logs-filters { + display: flex; + flex-wrap: wrap; + align-items: flex-end; + gap: 14px; + margin-bottom: 16px; + + .filter-group { + flex: 1 1 160px; + min-width: 0; + max-width: 220px; + + label { + display: block; + font-size: 12px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #8899A6; + margin-bottom: 6px; + } + + .form-control { + width: 100%; + padding: 8px 12px; + border: 1px solid $cBorder; + border-radius: 8px; + font-size: 14px; + color: $cTextDark; + background: $cWhite; + transition: border-color 0.2s; + + &:focus { + outline: none; + border-color: $cPrimary; + box-shadow: 0 0 0 3px rgba($cPrimary, 0.1); + } + } + + 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; + } + + &.filter-group-buttons { + flex: 0 0 auto; + display: flex; + gap: 6px; + max-width: none; + } + } + } + + .logs-table-wrap { + background: $cWhite; + border-radius: 10px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06); + overflow: hidden; + + .table { + margin: 0; + + thead th { + background: #F0F4FA; + border-bottom: 2px solid $cBorder; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #8899A6; + padding: 12px 14px; + white-space: nowrap; + } + + tbody td { + padding: 10px 14px; + font-size: 13px; + color: $cTextDark; + vertical-align: middle; + border-bottom: 1px solid #EEF2F7; + } + + tbody tr:hover td { + background: #F8FAFD; + } + } + + .dt-layout-row { + padding: 14px 20px; + margin: 0 !important; + border-top: 1px solid #F1F5F9; + + &:first-child { + display: none; + } + } + + .dt-info { + font-size: 13px; + color: #8899A6; + } + + .dt-paging { + .pagination { + margin: 0; + padding: 0; + list-style: none; + display: flex; + align-items: center; + gap: 6px; + + .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 $cBorder; + background: $cWhite; + color: $cText; + cursor: pointer; + transition: all 0.2s; + text-decoration: none; + line-height: 1; + white-space: nowrap; + + &:hover { + background: #EEF2FF; + color: $cPrimary; + border-color: $cPrimary; + } + } + + &.active .page-link { + background: $cPrimary; + color: $cWhite; + border-color: $cPrimary; + font-weight: 600; + } + + &.disabled .page-link { + opacity: 0.35; + cursor: default; + pointer-events: none; + } + } + } + } + + .dt-processing { + background: rgba($cWhite, 0.9); + color: $cText; + font-size: 14px; + } + } + + .badge { + display: inline-block; + padding: 3px 8px; + border-radius: 4px; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.3px; + } + + .badge-success { + background: #D1FAE5; + color: #065F46; + } + + .badge-danger { + background: #FEE2E2; + color: #991B1B; + } + + .badge-warning { + background: #FEF3C7; + color: #92400E; + } } \ No newline at end of file diff --git a/libraries/adspro-dialog.js b/libraries/adspro-dialog.js index 6fedacb..e7fb346 100644 --- a/libraries/adspro-dialog.js +++ b/libraries/adspro-dialog.js @@ -383,4 +383,15 @@ return new AdsProDialog( options ); }; + $.dialog = function( options ) + { + options = options || {}; + options.closeIcon = true; + if ( !options.buttons ) + { + options.buttons = {}; + } + return new AdsProDialog( options ); + }; + })( jQuery ); diff --git a/migrations/023_logs.sql b/migrations/023_logs.sql new file mode 100644 index 0000000..6fc5102 --- /dev/null +++ b/migrations/023_logs.sql @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS `logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `level` varchar(20) NOT NULL DEFAULT 'info', + `source` varchar(120) NOT NULL DEFAULT '', + `client_id` int(11) DEFAULT NULL, + `message` text NOT NULL, + `context_json` longtext DEFAULT NULL, + `date_add` datetime NOT NULL DEFAULT current_timestamp(), + PRIMARY KEY (`id`), + KEY `idx_logs_level` (`level`), + KEY `idx_logs_source` (`source`), + KEY `idx_logs_client` (`client_id`), + KEY `idx_logs_date` (`date_add`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; diff --git a/templates/campaigns/main_view.php b/templates/campaigns/main_view.php index a58bdbc..674fa0b 100644 --- a/templates/campaigns/main_view.php +++ b/templates/campaigns/main_view.php @@ -44,7 +44,7 @@
| + | Data | ROAS (30 dni) | ROAS (all time) | @@ -61,11 +61,80 @@ + + diff --git a/templates/site/layout-logged.php b/templates/site/layout-logged.php index c6c2f14..bfd0822 100644 --- a/templates/site/layout-logged.php +++ b/templates/site/layout-logged.php @@ -123,6 +123,12 @@ Allegro import +
|---|