Add BackPRO News theme and update database schema for article tracking
- Introduced a new WordPress theme "BackPRO News" with a lightweight magazine-style design. - Added columns for tracking retry attempts and timestamps for unpublished/generated articles in the articles table. - Included remote service metadata fields in the sites table for better management. - Created log files for image replacements, installer actions, OpenAI article generation, and publishing processes. - Implemented a dashboard template for site management, including permalink settings and theme installation options.
This commit is contained in:
28
assets/wp-theme-backpro-news/archive.php
Normal file
28
assets/wp-theme-backpro-news/archive.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
if (!defined('ABSPATH')) { exit; }
|
||||
get_header();
|
||||
?>
|
||||
|
||||
<div class="bp-page-head">
|
||||
<h1><?php the_archive_title(); ?></h1>
|
||||
<div class="bp-meta"><?php echo esc_html((string) get_the_archive_description()); ?></div>
|
||||
</div>
|
||||
|
||||
<?php if (have_posts()): ?>
|
||||
<?php while (have_posts()): the_post(); ?>
|
||||
<article class="bp-article-card">
|
||||
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
|
||||
<div class="bp-meta"><?php echo esc_html(get_the_date('Y-m-d')); ?></div>
|
||||
<p class="bp-excerpt"><?php echo esc_html(wp_trim_words(get_the_excerpt(), 35)); ?></p>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
<?php else: ?>
|
||||
<div class="bp-article-card"><p>Brak wpisow.</p></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="bp-pagination">
|
||||
<?php echo wp_kses_post(paginate_links(['type' => 'plain'])); ?>
|
||||
</div>
|
||||
|
||||
<?php get_footer(); ?>
|
||||
|
||||
16
assets/wp-theme-backpro-news/footer.php
Normal file
16
assets/wp-theme-backpro-news/footer.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php if (!defined('ABSPATH')) { exit; } ?>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="bp-footer">
|
||||
<div class="bp-shell">
|
||||
<div>
|
||||
<?php echo esc_html(get_bloginfo('name')); ?> © <?php echo esc_html(date('Y')); ?>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<?php wp_footer(); ?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
94
assets/wp-theme-backpro-news/front-page.php
Normal file
94
assets/wp-theme-backpro-news/front-page.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
if (!defined('ABSPATH')) { exit; }
|
||||
get_header();
|
||||
|
||||
$parents = backpro_news_parent_categories();
|
||||
?>
|
||||
|
||||
<?php if (!empty($parents)): ?>
|
||||
<div class="bp-grid">
|
||||
<?php foreach ($parents as $cat): ?>
|
||||
<?php
|
||||
$query = new WP_Query([
|
||||
'post_type' => 'post',
|
||||
'posts_per_page' => 5,
|
||||
'cat' => (int) $cat->term_id,
|
||||
'ignore_sticky_posts' => true,
|
||||
]);
|
||||
if (!$query->have_posts()) {
|
||||
wp_reset_postdata();
|
||||
continue;
|
||||
}
|
||||
$query->the_post();
|
||||
$lead_id = get_the_ID();
|
||||
$leadCats = get_the_category();
|
||||
$leadLabel = !empty($leadCats) ? $leadCats[0]->name : $cat->name;
|
||||
?>
|
||||
<section class="bp-section">
|
||||
<div class="bp-section-head">
|
||||
<h2><?php echo esc_html($cat->name); ?></h2>
|
||||
<a href="<?php echo esc_url(get_category_link($cat)); ?>">Wiecej</a>
|
||||
</div>
|
||||
<div class="bp-section-body">
|
||||
<article>
|
||||
<?php if (has_post_thumbnail()): ?>
|
||||
<a class="bp-lead-media" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
|
||||
<?php the_post_thumbnail('large', ['class' => 'bp-lead-image']); ?>
|
||||
<span class="bp-mini-label"><?php echo esc_html($leadLabel); ?></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<h3 class="bp-lead-title">
|
||||
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
||||
</h3>
|
||||
<p class="bp-lead-excerpt">
|
||||
<?php echo esc_html(wp_trim_words(get_the_excerpt(), 28)); ?>
|
||||
</p>
|
||||
</article>
|
||||
<ul class="bp-mini-grid">
|
||||
<?php while ($query->have_posts()): $query->the_post(); ?>
|
||||
<?php if ((int) get_the_ID() === (int) $lead_id) { continue; } ?>
|
||||
<?php
|
||||
$cardCats = get_the_category();
|
||||
$cardLabel = !empty($cardCats) ? $cardCats[0]->name : $cat->name;
|
||||
?>
|
||||
<li class="bp-mini-card">
|
||||
<a class="bp-mini-media" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
|
||||
<?php if (has_post_thumbnail()): ?>
|
||||
<?php the_post_thumbnail('medium_large', ['class' => 'bp-mini-image']); ?>
|
||||
<?php else: ?>
|
||||
<span class="bp-mini-image bp-mini-placeholder"></span>
|
||||
<?php endif; ?>
|
||||
<span class="bp-mini-label"><?php echo esc_html($cardLabel); ?></span>
|
||||
</a>
|
||||
<a class="bp-mini-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
||||
</li>
|
||||
<?php endwhile; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<?php wp_reset_postdata(); ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="bp-section">
|
||||
<div class="bp-section-head">
|
||||
<h2>Najnowsze wpisy</h2>
|
||||
</div>
|
||||
<div class="bp-section-body" style="grid-template-columns:1fr;">
|
||||
<ul class="bp-list">
|
||||
<?php
|
||||
$fallback = new WP_Query([
|
||||
'post_type' => 'post',
|
||||
'posts_per_page' => 10,
|
||||
'ignore_sticky_posts' => true,
|
||||
]);
|
||||
while ($fallback->have_posts()): $fallback->the_post();
|
||||
?>
|
||||
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
|
||||
<?php endwhile; wp_reset_postdata(); ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php get_footer(); ?>
|
||||
36
assets/wp-theme-backpro-news/functions.php
Normal file
36
assets/wp-theme-backpro-news/functions.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
function backpro_news_setup(): void
|
||||
{
|
||||
add_theme_support('title-tag');
|
||||
add_theme_support('post-thumbnails');
|
||||
add_theme_support('html5', ['search-form', 'comment-form', 'comment-list', 'gallery', 'caption']);
|
||||
}
|
||||
add_action('after_setup_theme', 'backpro_news_setup');
|
||||
|
||||
function backpro_news_enqueue_assets(): void
|
||||
{
|
||||
wp_enqueue_style(
|
||||
'backpro-news-style',
|
||||
get_stylesheet_uri(),
|
||||
[],
|
||||
wp_get_theme()->get('Version')
|
||||
);
|
||||
}
|
||||
add_action('wp_enqueue_scripts', 'backpro_news_enqueue_assets');
|
||||
|
||||
function backpro_news_parent_categories(): array
|
||||
{
|
||||
return get_categories([
|
||||
'taxonomy' => 'category',
|
||||
'hide_empty' => true,
|
||||
'parent' => 0,
|
||||
'orderby' => 'name',
|
||||
'order' => 'ASC',
|
||||
]);
|
||||
}
|
||||
|
||||
29
assets/wp-theme-backpro-news/header.php
Normal file
29
assets/wp-theme-backpro-news/header.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php if (!defined('ABSPATH')) { exit; } ?>
|
||||
<!doctype html>
|
||||
<html <?php language_attributes(); ?>>
|
||||
<head>
|
||||
<meta charset="<?php bloginfo('charset'); ?>">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<?php wp_head(); ?>
|
||||
</head>
|
||||
<body <?php body_class(); ?>>
|
||||
<?php wp_body_open(); ?>
|
||||
|
||||
<header class="bp-header">
|
||||
<div class="bp-shell bp-header-inner">
|
||||
<a class="bp-brand" href="<?php echo esc_url(home_url('/')); ?>">
|
||||
<?php echo esc_html(get_bloginfo('name')); ?>
|
||||
</a>
|
||||
<nav class="bp-nav" aria-label="Main categories">
|
||||
<?php foreach (backpro_news_parent_categories() as $cat): ?>
|
||||
<a href="<?php echo esc_url(get_category_link($cat)); ?>">
|
||||
<?php echo esc_html($cat->name); ?>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="bp-main">
|
||||
<div class="bp-shell">
|
||||
|
||||
34
assets/wp-theme-backpro-news/index.php
Normal file
34
assets/wp-theme-backpro-news/index.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
if (!defined('ABSPATH')) { exit; }
|
||||
get_header();
|
||||
?>
|
||||
|
||||
<div class="bp-page-head">
|
||||
<h1><?php echo esc_html(get_bloginfo('name')); ?></h1>
|
||||
<div class="bp-meta"><?php echo esc_html(get_bloginfo('description')); ?></div>
|
||||
</div>
|
||||
|
||||
<?php if (have_posts()): ?>
|
||||
<?php while (have_posts()): the_post(); ?>
|
||||
<article class="bp-article-card">
|
||||
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
|
||||
<div class="bp-meta">
|
||||
<?php echo esc_html(get_the_date('Y-m-d')); ?> | <?php the_category(', '); ?>
|
||||
</div>
|
||||
<p class="bp-excerpt"><?php echo esc_html(wp_trim_words(get_the_excerpt(), 35)); ?></p>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
|
||||
<div class="bp-pagination">
|
||||
<?php echo wp_kses_post(paginate_links([
|
||||
'type' => 'plain',
|
||||
])); ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="bp-article-card">
|
||||
<p>Brak wpisow.</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php get_footer(); ?>
|
||||
|
||||
23
assets/wp-theme-backpro-news/search.php
Normal file
23
assets/wp-theme-backpro-news/search.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
if (!defined('ABSPATH')) { exit; }
|
||||
get_header();
|
||||
?>
|
||||
|
||||
<div class="bp-page-head">
|
||||
<h1>Wyniki wyszukiwania</h1>
|
||||
<div class="bp-meta"><?php echo esc_html(get_search_query()); ?></div>
|
||||
</div>
|
||||
|
||||
<?php if (have_posts()): ?>
|
||||
<?php while (have_posts()): the_post(); ?>
|
||||
<article class="bp-article-card">
|
||||
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
|
||||
<p class="bp-excerpt"><?php echo esc_html(wp_trim_words(get_the_excerpt(), 30)); ?></p>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
<?php else: ?>
|
||||
<div class="bp-article-card"><p>Brak wynikow.</p></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php get_footer(); ?>
|
||||
|
||||
128
assets/wp-theme-backpro-news/single.php
Normal file
128
assets/wp-theme-backpro-news/single.php
Normal file
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
if (!defined('ABSPATH')) { exit; }
|
||||
get_header();
|
||||
?>
|
||||
|
||||
<?php if (have_posts()): while (have_posts()): the_post(); ?>
|
||||
<?php
|
||||
$post_id = get_the_ID();
|
||||
$post_categories = get_the_category();
|
||||
$primary_category = !empty($post_categories) ? $post_categories[0] : null;
|
||||
$clean_content = wp_strip_all_tags((string) get_post_field('post_content', $post_id));
|
||||
$word_count = str_word_count($clean_content);
|
||||
$reading_minutes = max(1, (int) ceil($word_count / 220));
|
||||
$excerpt = get_the_excerpt();
|
||||
|
||||
$related_args = [
|
||||
'post_type' => 'post',
|
||||
'posts_per_page' => 4,
|
||||
'post__not_in' => [$post_id],
|
||||
'ignore_sticky_posts' => true,
|
||||
];
|
||||
if ($primary_category instanceof WP_Term) {
|
||||
$related_args['cat'] = (int) $primary_category->term_id;
|
||||
}
|
||||
$related_query = new WP_Query($related_args);
|
||||
|
||||
$latest_query = new WP_Query([
|
||||
'post_type' => 'post',
|
||||
'posts_per_page' => 5,
|
||||
'post__not_in' => [$post_id],
|
||||
'ignore_sticky_posts' => true,
|
||||
]);
|
||||
?>
|
||||
<div class="bp-single-layout">
|
||||
<article class="bp-single-article">
|
||||
<header class="bp-single-head">
|
||||
<?php if (!empty($post_categories)): ?>
|
||||
<div class="bp-single-cats">
|
||||
<?php foreach ($post_categories as $cat): ?>
|
||||
<a href="<?php echo esc_url(get_category_link($cat)); ?>"><?php echo esc_html($cat->name); ?></a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<h1 class="bp-single-title"><?php the_title(); ?></h1>
|
||||
|
||||
<div class="bp-single-meta-row">
|
||||
<span><?php echo esc_html(get_the_date('Y-m-d')); ?></span>
|
||||
<span><?php echo esc_html(get_the_author()); ?></span>
|
||||
<span><?php echo esc_html($reading_minutes . ' min czytania'); ?></span>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($excerpt)): ?>
|
||||
<p class="bp-single-lead"><?php echo esc_html($excerpt); ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
|
||||
<?php if (has_post_thumbnail()): ?>
|
||||
<figure class="bp-single-hero">
|
||||
<?php the_post_thumbnail('full', ['class' => 'bp-single-hero-image']); ?>
|
||||
<?php if ($primary_category instanceof WP_Term): ?>
|
||||
<span class="bp-mini-label"><?php echo esc_html($primary_category->name); ?></span>
|
||||
<?php endif; ?>
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="bp-single-content">
|
||||
<?php the_content(); ?>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<aside class="bp-single-sidebar" aria-label="Dodatkowe sekcje artykulu">
|
||||
<section class="bp-side-box">
|
||||
<h3>Powiazane wpisy</h3>
|
||||
<?php if ($related_query->have_posts()): ?>
|
||||
<ul class="bp-side-list">
|
||||
<?php while ($related_query->have_posts()): $related_query->the_post(); ?>
|
||||
<li class="bp-side-item">
|
||||
<a class="bp-side-thumb" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
|
||||
<?php if (has_post_thumbnail()): ?>
|
||||
<?php the_post_thumbnail('thumbnail', ['class' => 'bp-side-thumb-image']); ?>
|
||||
<?php else: ?>
|
||||
<span class="bp-side-thumb-image bp-mini-placeholder"></span>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<div class="bp-side-copy">
|
||||
<a class="bp-side-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
||||
<div class="bp-side-date"><?php echo esc_html(get_the_date('Y-m-d')); ?></div>
|
||||
</div>
|
||||
</li>
|
||||
<?php endwhile; ?>
|
||||
</ul>
|
||||
<?php else: ?>
|
||||
<p class="bp-side-empty">Brak powiazanych wpisow.</p>
|
||||
<?php endif; ?>
|
||||
<?php wp_reset_postdata(); ?>
|
||||
</section>
|
||||
|
||||
<section class="bp-side-box">
|
||||
<h3>Najnowsze wpisy</h3>
|
||||
<?php if ($latest_query->have_posts()): ?>
|
||||
<ul class="bp-side-list">
|
||||
<?php while ($latest_query->have_posts()): $latest_query->the_post(); ?>
|
||||
<li class="bp-side-item">
|
||||
<a class="bp-side-thumb" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
|
||||
<?php if (has_post_thumbnail()): ?>
|
||||
<?php the_post_thumbnail('thumbnail', ['class' => 'bp-side-thumb-image']); ?>
|
||||
<?php else: ?>
|
||||
<span class="bp-side-thumb-image bp-mini-placeholder"></span>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<div class="bp-side-copy">
|
||||
<a class="bp-side-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
||||
<div class="bp-side-date"><?php echo esc_html(get_the_date('Y-m-d')); ?></div>
|
||||
</div>
|
||||
</li>
|
||||
<?php endwhile; ?>
|
||||
</ul>
|
||||
<?php else: ?>
|
||||
<p class="bp-side-empty">Brak wpisow.</p>
|
||||
<?php endif; ?>
|
||||
<?php wp_reset_postdata(); ?>
|
||||
</section>
|
||||
</aside>
|
||||
</div>
|
||||
<?php endwhile; endif; ?>
|
||||
|
||||
<?php get_footer(); ?>
|
||||
604
assets/wp-theme-backpro-news/style.css
Normal file
604
assets/wp-theme-backpro-news/style.css
Normal file
@@ -0,0 +1,604 @@
|
||||
/*
|
||||
Theme Name: BackPRO News
|
||||
Theme URI: https://backpro.projectpro.pl/
|
||||
Author: BackPRO
|
||||
Author URI: https://backpro.projectpro.pl/
|
||||
Description: Lightweight magazine-style blog theme for BackPRO with auto category sections on homepage.
|
||||
Version: 1.0.0
|
||||
Requires at least: 6.0
|
||||
Tested up to: 6.6
|
||||
Requires PHP: 7.4
|
||||
Text Domain: backpro-news
|
||||
*/
|
||||
|
||||
:root {
|
||||
--bp-bg: #f5f7fb;
|
||||
--bp-surface: #ffffff;
|
||||
--bp-text: #152033;
|
||||
--bp-muted: #63708a;
|
||||
--bp-accent: #0c6cf2;
|
||||
--bp-border: #dce2ec;
|
||||
--bp-radius: 14px;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
color: var(--bp-text);
|
||||
background: linear-gradient(180deg, #f7f8fc 0%, var(--bp-bg) 100%);
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.bp-shell {
|
||||
max-width: 1220px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.bp-header {
|
||||
background: var(--bp-surface);
|
||||
border-bottom: 1px solid var(--bp-border);
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.bp-header-inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
min-height: 78px;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.bp-brand {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.3px;
|
||||
color: var(--bp-accent);
|
||||
}
|
||||
|
||||
.bp-nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.bp-nav a {
|
||||
padding: 8px 12px;
|
||||
border-radius: 999px;
|
||||
color: var(--bp-muted);
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.bp-nav a:hover {
|
||||
background: #ecf3ff;
|
||||
color: var(--bp-accent);
|
||||
}
|
||||
|
||||
.bp-main {
|
||||
padding: 26px 0 46px;
|
||||
}
|
||||
|
||||
.bp-grid {
|
||||
display: grid;
|
||||
gap: 20px;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.bp-section {
|
||||
background: var(--bp-surface);
|
||||
border: 1px solid var(--bp-border);
|
||||
border-radius: var(--bp-radius);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.bp-section-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 14px 16px;
|
||||
border-bottom: 1px solid var(--bp-border);
|
||||
}
|
||||
|
||||
.bp-section-head h2 {
|
||||
margin: 0;
|
||||
font-size: 20px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.bp-section-head a {
|
||||
font-size: 13px;
|
||||
color: var(--bp-accent);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bp-section-body {
|
||||
padding: 16px;
|
||||
display: grid;
|
||||
gap: 14px;
|
||||
grid-template-columns: 1.2fr 1fr;
|
||||
}
|
||||
|
||||
.bp-lead-title {
|
||||
margin: 0 0 8px;
|
||||
font-size: 24px;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.bp-lead-media {
|
||||
display: block;
|
||||
margin-bottom: 12px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.bp-lead-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
border: 1px solid var(--bp-border);
|
||||
aspect-ratio: 16 / 9;
|
||||
object-fit: cover;
|
||||
background: #e9eef7;
|
||||
}
|
||||
|
||||
.bp-lead-excerpt {
|
||||
margin: 0;
|
||||
color: var(--bp-muted);
|
||||
font-size: 15px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.bp-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.bp-list a {
|
||||
display: block;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px dashed var(--bp-border);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bp-list li:last-child a {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.bp-mini-grid {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 14px;
|
||||
align-content: start;
|
||||
align-items: start;
|
||||
grid-auto-rows: max-content;
|
||||
}
|
||||
|
||||
.bp-mini-card {
|
||||
min-width: 0;
|
||||
align-self: start;
|
||||
}
|
||||
|
||||
.bp-mini-media {
|
||||
display: block;
|
||||
position: relative;
|
||||
aspect-ratio: 1 / 1;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--bp-border);
|
||||
background: #e9eef7;
|
||||
}
|
||||
|
||||
.bp-mini-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
object-fit: cover;
|
||||
aspect-ratio: auto;
|
||||
}
|
||||
|
||||
.bp-mini-placeholder {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(135deg, #e6ebf5 0%, #d9e2f1 100%);
|
||||
}
|
||||
|
||||
.bp-mini-label {
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
bottom: 8px;
|
||||
background: #1c2330;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
font-weight: 700;
|
||||
padding: 4px 7px;
|
||||
}
|
||||
|
||||
.bp-mini-title {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
font-size: 14px;
|
||||
line-height: 1.35;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.bp-page-head {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.bp-page-head h1 {
|
||||
margin: 0 0 6px;
|
||||
font-size: 34px;
|
||||
}
|
||||
|
||||
.bp-meta {
|
||||
color: var(--bp-muted);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.bp-article-card {
|
||||
background: var(--bp-surface);
|
||||
border: 1px solid var(--bp-border);
|
||||
border-radius: var(--bp-radius);
|
||||
padding: 22px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.bp-article-card h2 {
|
||||
margin: 0 0 8px;
|
||||
font-size: 28px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.bp-excerpt {
|
||||
margin: 10px 0 0;
|
||||
color: var(--bp-muted);
|
||||
}
|
||||
|
||||
.bp-single-layout {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.75fr) minmax(280px, 0.85fr);
|
||||
gap: 18px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.bp-single-article {
|
||||
background: var(--bp-surface);
|
||||
border: 1px solid var(--bp-border);
|
||||
border-radius: var(--bp-radius);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.bp-single-head {
|
||||
padding: 22px 22px 14px;
|
||||
border-bottom: 1px solid var(--bp-border);
|
||||
}
|
||||
|
||||
.bp-single-cats {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.bp-single-cats a {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.4px;
|
||||
color: var(--bp-accent);
|
||||
}
|
||||
|
||||
.bp-single-title {
|
||||
margin: 0;
|
||||
font-size: 42px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.bp-single-meta-row {
|
||||
margin-top: 14px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 14px;
|
||||
color: var(--bp-muted);
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bp-single-meta-row span {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.bp-single-meta-row span:not(:last-child)::after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
border-radius: 50%;
|
||||
margin-left: 14px;
|
||||
vertical-align: middle;
|
||||
background: #9da8bc;
|
||||
}
|
||||
|
||||
.bp-single-lead {
|
||||
margin: 16px 0 0;
|
||||
color: #33445f;
|
||||
font-size: 19px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.bp-single-hero {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
border-bottom: 1px solid var(--bp-border);
|
||||
}
|
||||
|
||||
.bp-single-hero-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
aspect-ratio: 16 / 9;
|
||||
object-fit: cover;
|
||||
background: #e9eef7;
|
||||
}
|
||||
|
||||
.bp-single-content {
|
||||
padding: 24px 22px 26px;
|
||||
font-size: 19px;
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
.bp-single-content > *:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.bp-single-content > *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.bp-single-content h2,
|
||||
.bp-single-content h3,
|
||||
.bp-single-content h4 {
|
||||
margin: 32px 0 12px;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.bp-single-content h2 {
|
||||
font-size: 31px;
|
||||
}
|
||||
|
||||
.bp-single-content h3 {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
.bp-single-content p {
|
||||
margin: 0 0 18px;
|
||||
}
|
||||
|
||||
.bp-single-content ul,
|
||||
.bp-single-content ol {
|
||||
margin: 0 0 20px;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.bp-single-content li {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.bp-single-content blockquote {
|
||||
margin: 28px 0;
|
||||
padding: 18px 20px;
|
||||
border-left: 4px solid var(--bp-accent);
|
||||
background: #f0f5ff;
|
||||
color: #1e2b42;
|
||||
font-size: 21px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.bp-single-content img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.bp-single-sidebar {
|
||||
display: grid;
|
||||
gap: 14px;
|
||||
align-content: start;
|
||||
}
|
||||
|
||||
.bp-side-box {
|
||||
background: var(--bp-surface);
|
||||
border: 1px solid var(--bp-border);
|
||||
border-radius: var(--bp-radius);
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.bp-side-box h3 {
|
||||
margin: 0 0 12px;
|
||||
font-size: 18px;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.bp-side-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
display: grid;
|
||||
gap: 11px;
|
||||
}
|
||||
|
||||
.bp-side-item {
|
||||
display: grid;
|
||||
grid-template-columns: 88px 1fr;
|
||||
gap: 10px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.bp-side-thumb {
|
||||
display: block;
|
||||
border: 1px solid var(--bp-border);
|
||||
overflow: hidden;
|
||||
aspect-ratio: 1 / 1;
|
||||
background: #e9eef7;
|
||||
}
|
||||
|
||||
.bp-side-thumb-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.bp-side-copy {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.bp-side-title {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
line-height: 1.35;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bp-side-date {
|
||||
margin-top: 4px;
|
||||
font-size: 12px;
|
||||
color: var(--bp-muted);
|
||||
}
|
||||
|
||||
.bp-side-plain {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.bp-side-plain li {
|
||||
padding: 10px 0;
|
||||
border-top: 1px dashed var(--bp-border);
|
||||
}
|
||||
|
||||
.bp-side-plain li:first-child {
|
||||
border-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.bp-side-plain a {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bp-side-plain span {
|
||||
display: block;
|
||||
margin-top: 4px;
|
||||
color: var(--bp-muted);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.bp-side-empty {
|
||||
margin: 0;
|
||||
color: var(--bp-muted);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.bp-pagination {
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.bp-pagination .page-numbers {
|
||||
display: inline-block;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid var(--bp-border);
|
||||
border-radius: 8px;
|
||||
background: var(--bp-surface);
|
||||
color: var(--bp-muted);
|
||||
}
|
||||
|
||||
.bp-pagination .current {
|
||||
color: #fff;
|
||||
background: var(--bp-accent);
|
||||
border-color: var(--bp-accent);
|
||||
}
|
||||
|
||||
.bp-footer {
|
||||
border-top: 1px solid var(--bp-border);
|
||||
padding: 28px 0;
|
||||
color: var(--bp-muted);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.bp-section-body {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.bp-single-layout {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.bp-mini-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.bp-page-head h1 {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.bp-single-title {
|
||||
font-size: 33px;
|
||||
}
|
||||
|
||||
.bp-single-content {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 520px) {
|
||||
.bp-mini-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.bp-single-head {
|
||||
padding: 18px 16px 12px;
|
||||
}
|
||||
|
||||
.bp-single-title {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.bp-single-content {
|
||||
padding: 18px 16px 20px;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.bp-single-content blockquote {
|
||||
font-size: 19px;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user