/* ===== PK JOBS UI v3 ===== */

/* 1) Szerokość sekcji ofert */
body.page-id-62 .wp-block-post-content-is-layout-constrained,
body.page-id-62 .entry-content{
  max-width: 1220px !important;
  width: 100% !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

/* 2) Search bar (bardziej jak pracuj) */
body.page-id-62 .entry-content > form[method="get"]{
  position: sticky;
  top: 10px;
  z-index: 20;
  max-width: 1220px;
  margin: 10px auto 16px !important;
  padding: 10px !important;
  border: 1px solid #d9deea !important;
  border-radius: 14px;
  background: #ffffff;
  box-shadow: 0 10px 30px rgba(17,24,39,.08);
  display: grid;
  grid-template-columns: minmax(420px,1fr) 160px 130px;
  gap: 10px;
  align-items: end;
}
body.page-id-62 .entry-content > form[method="get"] label{
  display:block;
  margin:0 0 6px;
  font-size:12px;
  font-weight:600;
  color:#5b6477;
}
body.page-id-62 .entry-content > form[method="get"] input[type="text"],
body.page-id-62 .entry-content > form[method="get"] select{
  width:100% !important;
  height:46px;
  border:1px solid #cdd5e3;
  border-radius:10px;
  padding:0 12px;
  font-size:14px;
  color:#111827;
  background:#fff;
}
body.page-id-62 .entry-content > form[method="get"] button{
  height:46px;
  border:0;
  border-radius:999px;
  background:#4f46e5;
  color:#fff;
  font-size:15px;
  font-weight:700;
  padding:0 22px;
  cursor:pointer;
}
body.page-id-62 .entry-content > p{
  max-width:1220px;
  margin:0 auto 12px !important;
  color:#5f6b7a;
  font-size:13px;
}

/* 3) Lista */
body.page-id-62 .job_listings{max-width:1220px;margin:0 auto}
body.page-id-62 ul.job_listings{
  border:0 !important;
  background:transparent !important;
  margin:0 !important;
  padding:0 !important;
}
body.page-id-62 ul.job_listings li.job_listing{
  list-style:none;
  margin:0 0 12px !important;
  padding:0 !important;
  border:1px solid #e0e5ef !important;
  border-radius:12px;
  background:#fff;
  box-shadow:0 4px 16px rgba(15,23,42,.05);
  transition:all .15s ease;
}
body.page-id-62 ul.job_listings li.job_listing:hover{
  border-color:#c7d2fe !important;
  box-shadow:0 10px 24px rgba(79,70,229,.11);
  transform:translateY(-1px);
}
body.page-id-62 ul.job_listings li.job_listing > a{
  display:grid !important;
  grid-template-columns:56px minmax(420px,1fr) 190px 170px;
  gap:14px;
  align-items:center;
  padding:14px 16px !important;
  text-decoration:none !important;
  color:inherit !important;
}

/* logo */
body.page-id-62 .job_listings img.company_logo{
  width:50px !important;
  height:50px !important;
  border-radius:10px;
  object-fit:cover;
  border:1px solid #e5e7eb;
  background:#f8fafc;
}

/* tytuł + firma */
body.page-id-62 .job_listings .position{padding:0 !important}
body.page-id-62 .job_listings .position h3{
  margin:0 0 4px !important;
  font-size:28px !important;
  line-height:1.1 !important;
  font-weight:800 !important;
  letter-spacing:-0.02em;
  color:#111827 !important;
}
body.page-id-62 .job_listings .company{
  margin:0 !important;
  font-size:14px;
  color:#2f3a4a;
}
body.page-id-62 .job_listings .company strong{font-weight:700}
body.page-id-62 .job_listings .company .tagline{
  margin-left:8px;
  color:#6b7280;
}

/* lokalizacja */
body.page-id-62 .job_listings .location{
  margin:0 !important;
  font-size:14px !important;
  color:#475569 !important;
  text-align:left !important;
  font-weight:600;
}

/* meta prawa */
body.page-id-62 .job_listings ul.meta{
  margin:0 !important;
  padding:0 !important;
  border:0 !important;
  background:transparent !important;
  display:flex !important;
  flex-direction:column;
  gap:8px;
  align-items:flex-start;
}
body.page-id-62 .job_listings ul.meta li{
  margin:0 !important;
  padding:0 !important;
  border:0 !important;
  font-size:13px !important;
  color:#5f6b7a !important;
}
body.page-id-62 .job_listings ul.meta li.job-type{
  display:inline-flex !important;
  align-items:center;
  padding:5px 10px !important;
  border-radius:999px !important;
  border:1px solid #c7d2fe !important;
  background:#eef2ff !important;
  color:#3730a3 !important;
  font-weight:700 !important;
}
body.page-id-62 .job_listings ul.meta li.date{
  font-size:12px !important;
  color:#6b7280 !important;
}

/* 4) Submit page - uporządkowanie */
body.page-id-81 .job-manager-form{
  max-width:1020px;
  margin:0 auto;
  border:1px solid #e1e6f0;
  border-radius:14px;
  background:#fff;
  box-shadow:0 8px 24px rgba(15,23,42,.05);
  padding:14px;
}
body.page-id-81 .job-manager-form fieldset{
  border-bottom:1px solid #ecf0f6;
  padding:14px 8px !important;
}
body.page-id-81 .job-manager-form label{
  font-size:13px;
  color:#4b5563;
  font-weight:600;
}
body.page-id-81 .job-manager-form input[type="text"],
body.page-id-81 .job-manager-form input[type="email"],
body.page-id-81 .job-manager-form input[type="number"],
body.page-id-81 .job-manager-form textarea,
body.page-id-81 .job-manager-form select{
  border:1px solid #cfd6e3;
  border-radius:10px;
  min-height:44px;
  padding:10px 12px;
}
body.page-id-81 .job-manager-form input[type="
cd /var/www/pracakierowca.online

# backup
mkdir -p /root/pk-audit/layout-backup-$(date +%F-%H%M)
cp -a wp-content/mu-plugins /root/pk-audit/layout-backup-$(date +%F-%H%M)/mu-plugins-backup 2>/dev/null || true
cp -a wp-content/uploads/pk-custom /root/pk-audit/layout-backup-$(date +%F-%H%M)/pk-custom-backup 2>/dev/null || true

# 1) MU-plugin: custom board layout on page "oferty-pracy"
cat > wp-content/mu-plugins/pk-jobs-board-layout.php <<'PHP'
<?php
/**
 * Plugin Name: PK Jobs Board Layout
 * Description: Custom jobs board layout (search + sidebar filters + cards) for /oferty-pracy/
 */

if (!defined('ABSPATH')) exit;

function pkjb_get_page_id_by_slug($slug){
    $p = get_page_by_path($slug, OBJECT, 'page');
    return $p ? (int)$p->ID : 0;
}

function pkjb_current_page(){
    $paged = max(1, (int)get_query_var('paged'));
    if (isset($_GET['pg'])) $paged = max(1, (int)$_GET['pg']);
    return $paged;
}

function pkjb_build_query_args(){
    $s   = isset($_GET['q']) ? sanitize_text_field(wp_unslash($_GET['q'])) : '';
    $loc = isset($_GET['loc']) ? sanitize_text_field(wp_unslash($_GET['loc'])) : '';
    $cat = isset($_GET['cat']) ? array_map('sanitize_title', (array)$_GET['cat']) : [];
    $typ = isset($_GET['typ']) ? array_map('sanitize_title', (array)$_GET['typ']) : [];

    $tax_query = ['relation' => 'AND'];

    if (!empty($cat)) {
        $tax_query[] = [
            'taxonomy' => 'job_listing_category',
            'field'    => 'slug',
            'terms'    => $cat,
        ];
    }

    if (!empty($typ)) {
        $tax_query[] = [
            'taxonomy' => 'job_listing_type',
            'field'    => 'slug',
            'terms'    => $typ,
        ];
    }

    $meta_query = ['relation' => 'AND'];
    if ($loc !== '') {
        $meta_query[] = [
            'key'     => '_job_location',
            'value'   => $loc,
            'compare' => 'LIKE',
        ];
    }

    $args = [
        'post_type'      => 'job_listing',
        'post_status'    => 'publish',
        'posts_per_page' => 12,
        'paged'          => pkjb_current_page(),
        's'              => $s,
    ];

    if (count($tax_query) > 1) $args['tax_query'] = $tax_query;
    if (count($meta_query) > 1) $args['meta_query'] = $meta_query;

    return $args;
}

function pkjb_render_filters_sidebar($base_url){
    $selected_cats = isset($_GET['cat']) ? array_map('sanitize_title', (array)$_GET['cat']) : [];
    $selected_typs = isset($_GET['typ']) ? array_map('sanitize_title', (array)$_GET['typ']) : [];

    $cats = get_terms([
        'taxonomy'   => 'job_listing_category',
        'hide_empty' => false,
    ]);

    $types = get_terms([
        'taxonomy'   => 'job_listing_type',
        'hide_empty' => false,
    ]);

    ?>
    <aside class="pkjb-sidebar">
      <form method="get" action="<?php echo esc_url($base_url); ?>" class="pkjb-sidebar-form">
        <?php if (!empty($_GET['q'])): ?><input type="hidden" name="q" value="<?php echo esc_attr(sanitize_text_field(wp_unslash($_GET['q']))); ?>"><?php endif; ?>
        <?php if (!empty($_GET['loc'])): ?><input type="hidden" name="loc" value="<?php echo esc_attr(sanitize_text_field(wp_unslash($_GET['loc']))); ?>"><?php endif; ?>

        <div class="pkjb-filter-card">
          <h3>Kategorie prawa jazdy</h3>
          <div class="pkjb-checklist">
            <?php foreach ($cats as $c): ?>
              <label>
                <input type="checkbox" name="cat[]" value="<?php echo esc_attr($c->slug); ?>" <?php checked(in_array($c->slug, $selected_cats, true)); ?>>
                <span><?php echo esc_html($c->name); ?> <small>(<?php echo (int)$c->count; ?>)</small></span>
              </label>
            <?php endforeach; ?>
          </div>
        </div>

        <div class="pkjb-filter-card">
          <h3>Rodzaj umowy</h3>
          <div class="pkjb-checklist">
            <?php foreach ($types as $t): ?>
              <label>
                <input type="checkbox" name="typ[]" value="<?php echo esc_attr($t->slug); ?>" <?php checked(in_array($t->slug, $selected_typs, true)); ?>>
                <span><?php echo esc_html($t->name); ?> <small>(<?php echo (int)$t->count; ?>)</small></span>
              </label>
            <?php endforeach; ?>
          </div>
        </div>

        <button type="submit" class="pkjb-btn pkjb-btn-primary">Pokaż oferty</button>
      </form>
    </aside>
    <?php
}

function pkjb_render_top_search($base_url){
    $q   = isset($_GET['q']) ? sanitize_text_field(wp_unslash($_GET['q'])) : '';
    $loc = isset($_GET['loc']) ? sanitize_text_field(wp_unslash($_GET['loc'])) : '';
    ?>
    <form method="get" action="<?php echo esc_url($base_url); ?>" class="pkjb-top-search">
      <div>
        <label>Stanowisko / słowo kluczowe</label>
        <input type="text" name="q" value="<?php echo esc_attr($q); ?>" placeholder="np. Kierowca C+E">
      </div>
      <div>
        <label>Lokalizacja</label>
        <input type="text" name="loc" value="<?php echo esc_attr($loc); ?>" placeholder="np. Rzeszów">
      </div>
      <div class="pkjb-search-actions">
        <button type="submit" class="pkjb-btn pkjb-btn-primary">Szukaj</button>
      </div>
    </form>
    <?php
}

function pkjb_render_job_card($post_id){
    $title = get_the_title($post_id);
    $url   = get_permalink($post_id);
    $company = get_post_meta($post_id, '_company_name', true);
    $location = get_post_meta($post_id, '_job_location', true);
    $tagline  = get_post_meta($post_id, '_company_tagline', true);
    $posted   = human_time_diff(get_the_time('U', $post_id), current_time('timestamp')) . ' temu';
    $types    = wp_get_post_terms($post_id, 'job_listing_type', ['fields' => 'names']);
    $cats     = wp_get_post_terms($post_id, 'job_listing_category', ['fields' => 'names']);

    if (!$company) $company = 'Firma';
    ?>
    <article class="pkjb-card">
      <a href="<?php echo esc_url($url); ?>" class="pkjb-card-link">
        <div class="pkjb-logo"><?php echo esc_html(mb_substr($company, 0, 1)); ?></div>
        <div class="pkjb-main">
          <h3><?php echo esc_html($title); ?></h3>
          <p class="pkjb-company"><?php echo esc_html($company); ?></p>
          <p class="pkjb-meta-line">
            <?php if ($location): ?><span><?php echo esc_html($location); ?></span><?php endif; ?>
            <?php if (!empty($cats)): ?><span><?php echo esc_html(implode(' • ', array_slice($cats, 0, 2))); ?></span><?php endif; ?>
            <?php if ($tagline): ?><span><?php echo esc_html($tagline); ?></span><?php endif; ?>
          </p>
        </div>
        <div class="pkjb-right">
          <?php if (!empty($types)): ?>
            <span class="pkjb-pill"><?php echo esc_html($types[0]); ?></span>
          <?php endif; ?>
          <span class="pkjb-date">Opublikowano: <?php echo esc_html($posted); ?></span>
        </div>
      </a>
    </article>
    <?php
}

function pkjb_render_pagination($query, $base_url){
    if ((int)$query->max_num_pages < 2) return;
    $current = max(1, pkjb_current_page());
    ?>
    <div class="pkjb-pagination">
      <?php for ($i=1; $i <= (int)$query->max_num_pages; $i++): ?>
        <?php
          $url = add_query_arg(array_merge($_GET, ['pg' => $i]), $base_url);
          $cls = $i === $current ? 'is-active' : '';
        ?>
        <a class="<?php echo esc_attr($cls); ?>" href="<?php echo esc_url($url); ?>"><?php echo (int)$i; ?></a>
      <?php endfor; ?>
    </div>
    <?php
}

add_filter('the_content', function($content){
    if (is_admin() || !is_page()) return $content;

    $target_id = pkjb_get_page_id_by_slug('oferty-pracy');
    if (!$target_id || get_queried_object_id() !== $target_id) return $content;

    $base_url = get_permalink($target_id);
    $args = pkjb_build_query_args();
    $q = new WP_Query($args);

    ob_start();
    ?>
    <section class="pkjb-wrap">
      <?php pkjb_render_top_search($base_url); ?>

      <div class="pkjb-layout">
        <?php pkjb_render_filters_sidebar($base_url); ?>

        <div class="pkjb-results">
          <div class="pkjb-results-head">
            <strong>Oferty pracy</strong>
            <span><?php echo (int)$q->found_posts; ?> wyników</span>
          </div>

          <?php if ($q->have_posts()): ?>
            <?php while ($q->have_posts()): $q->the_post(); pkjb_render_job_card(get_the_ID()); endwhile; ?>
            <?php pkjb_render_pagination($q, $base_url); ?>
          <?php else: ?>
            <div class="pkjb-empty">Brak wyników dla wybranych filtrów.</div>
          <?php endif; ?>
        </div>
      </div>
    </section>
    <?php
    wp_reset_postdata();
    return ob_get_clean();
}, 99);

add_action('wp_enqueue_scripts', function(){
    if (is_admin()) return;
    if (!is_page()) return;

    $target_id = pkjb_get_page_id_by_slug('oferty-pracy');
    if (!$target_id || get_queried_object_id() !== $target_id) return;

    $css_file = WP_CONTENT_DIR . '/uploads/pk-custom/pk-jobs-board-layout.css';
    $css_url  = content_url('/uploads/pk-custom/pk-jobs-board-layout.css');
    if (file_exists($css_file)) {
        wp_enqueue_style('pk-jobs-board-layout', $css_url, [], filemtime($css_file));
    }
}, 40);
PHP

# 2) CSS: pracuj-like board (search + left filters + cards)
cat > wp-content/uploads/pk-custom/pk-jobs-board-layout.css <<'CSS'
.pkjb-wrap{max-width:1280px;margin:0 auto;padding:8px 0 32px}
.pkjb-top-search{
  position:sticky;top:10px;z-index:30;
  display:grid;grid-template-columns:1.1fr 1fr 140px;gap:10px;
  padding:10px;border:1px solid #d8ddea;border-radius:14px;background:#fff;
  box-shadow:0 10px 25px rgba(15,23,42,.07);margin-bottom:16px
}
.pkjb-top-search label{display:block;font-size:12px;color:#667085;margin-bottom:6px;font-weight:600}
.pkjb-top-search input{
  width:100%;height:44px;border:1px solid #cfd6e4;border-radius:10px;padding:0 12px;font-size:14px
}
.pkjb-search-actions{display:flex;align-items:end}
.pkjb-btn{height:44px;border:0;border-radius:999px;padding:0 20px;cursor:pointer;font-weight:700}
.pkjb-btn-primary{background:#4f46e5;color:#fff;width:100%}

.pkjb-layout{display:grid;grid-template-columns:320px 1fr;gap:16px}
.pkjb-sidebar{position:sticky;top:90px;align-self:start}
.pkjb-filter-card{
  background:#fff;border:1px solid #e0e6f2;border-radius:12px;padding:14px;margin-bottom:12px
}
.pkjb-filter-card h3{margin:0 0 10px;font-size:16px}
.pkjb-checklist{display:flex;flex-direction:column;gap:8px}
.pkjb-checklist label{display:flex;gap:8px;align-items:flex-start;font-size:14px;color:#1f2937}
.pkjb-checklist small{color:#64748b}

.pkjb-results-head{
  display:flex;justify-content:space-between;align-items:center;
  background:#fff;border:1px solid #e0e6f2;border-radius:12px;padding:12px 14px;margin-bottom:12px
}
.pkjb-results-head strong{font-size:18px}
.pkjb-results-head span{color:#64748b;font-size:14px}

.pkjb-card{
  background:#fff;border:1px solid #e0e6f2;border-radius:12px;margin-bottom:10px;
  box-shadow:0 4px 14px rgba(15,23,42,.04);transition:.15s
}
.pkjb-card:hover{border-color:#c7d2fe;box-shadow:0 8px 20px rgba(79,70,229,.12);transform:translateY(-1px)}
.pkjb-card-link{
  display:grid;grid-template-columns:56px 1fr 170px;gap:14px;align-items:center;
  padding:14px;color:inherit!important;text-decoration:none!important
}
.pkjb-logo{
  width:50px;height:50px;border:1px solid #e2e8f0;border-radius:10px;
  background:#f8fafc;display:grid;place-items:center;font-weight:800;color:#334155
}
.pkjb-main h3{margin:0 0 4px;font-size:26px;line-height:1.12;font-weight:800;color:#0f172a}
.pkjb-company{margin:0 0 4px;font-size:14px;font-weight:700;color:#111827}
.pkjb-meta-line{margin:0;font-size:13px;color:#667085;display:flex;gap:10px;flex-wrap:wrap}
.pkjb-right{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.pkjb-pill{
  display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;
  border:1px solid #c7d2fe;background:#eef2ff;color:#3730a3;font-size:12px;font-weight:700
}
.pkjb-date{font-size:12px;color:#64748b}
.pkjb-empty{background:#fff;border:1px solid #e0e6f2;border-radius:12px;padding:18px;color:#475467}

.pkjb-pagination{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.pkjb-pagination a{
  min-width:34px;height:34px;border:1px solid #d0d7e5;border-radius:8px;
  display:grid;place-items:center;text-decoration:none;color:#334155;background:#fff
}
.pkjb-pagination a.is-active{background:#4f46e5;color:#fff;border-color:#4f46e5}

@media (max-width: 980px){
  .pkjb-top-search{position:static;grid-template-columns:1fr}
  .pkjb-layout{grid-template-columns:1fr}
  .pkjb-sidebar{position:static}
  .pkjb-card-link{grid-template-columns:52px 1fr}
  .pkjb-right{align-items:flex-start}
}
