Make WordPress Themes

Changeset 355971


Ignore:
Timestamp:
10/28/2026 11:18:27 AM (13 hours ago)
Author:
themedropbox
Message:

New version of QuickPress - 2.0

Location:
quickpress/2.0
Files:
3 added
2 deleted
17 edited
1 copied

Legend:

Unmodified
Added
Removed
  • quickpress/2.0/404.php

    r183335 r355971  
    11<?php get_header(); ?>
     2
    23<div id="content" class="content column left">
     4        <main>
    35
    4     <main>
    5         <section>
    6             <article id="post-404">
    7                
    8                 <h1><?php _e( 'Page Not Found', 'quickpress' ); ?></h1>
     6                <article id="post-404" class="no-results">
     7                        <h1 class="page-title"><?php esc_html_e( 'Page Not Found', 'quickpress' ); ?></h1>
     8                        <p><?php esc_html_e( 'The page you were looking for is not here. Try a search, or go to the home page.', 'quickpress' ); ?></p>
     9                        <?php get_search_form(); ?>
     10                        <p><a href="<?php echo esc_url( home_url( '/' ) ); ?>">&larr; <?php esc_html_e( 'Home', 'quickpress' ); ?></a></p>
     11                </article>
    912
    10                 <?php get_search_form(); ?>
     13        </main>
     14</div>
    1115
    12             </article>
    13         </section>
    14     </main>
    15 
    16 </div>
    1716<?php get_sidebar(); ?>
    1817<?php get_footer(); ?>
  • quickpress/2.0/archive.php

    r183335 r355971  
    11<?php get_header(); ?>
     2
    23<div id="content" class="content column left">
     4        <main>
    35
    4     <main>
    5         <section>
     6                <header class="page-header">
     7                        <?php the_archive_title( '<h1 class="page-title">', '</h1>' ); ?>
     8                        <?php the_archive_description( '<div class="archive-description">', '</div>' ); ?>
     9                </header>
    610
    7             <h1>
    8                 <?php _e( 'Archives: ', 'quickpress' ); single_cat_title(); ?>
    9             </h1>
    10             <?php get_template_part('loop'); ?>
    11             <?php get_template_part('pagination'); ?>
     11                <?php get_template_part( 'loop' ); ?>
     12                <?php get_template_part( 'pagination' ); ?>
    1213
    13         </section>
    14     </main>
     14        </main>
     15</div>
    1516
    16 </div>
    1717<?php get_sidebar(); ?>
    1818<?php get_footer(); ?>
  • quickpress/2.0/comments.php

    r128061 r355971  
     1<?php
     2/**
     3 * Comments list and comment form.
     4 *
     5 * @package QuickPress
     6 */
     7
     8// Password-protected post: WordPress shows the password form in the post, so stop here.
     9if ( post_password_required() ) {
     10        return;
     11}
     12?>
     13
    114<div id="comments" class="comments">
    2     <?php if (post_password_required()) : ?>
    3     <p>
    4         <?php _e( 'Post is password protected. Enter the password to view any comments.', 'quickpress' ); ?>
    5     </p>
    615
    7 <?php return; endif; ?>
     16        <?php if ( have_comments() ) : ?>
     17                <h2 class="comments-title">
     18                        <?php
     19                        printf(
     20                                /* translators: 1: number of comments, 2: post title */
     21                                esc_html( _nx( 'One comment on &ldquo;%2$s&rdquo;', '%1$s comments on &ldquo;%2$s&rdquo;', get_comments_number(), 'comments title', 'quickpress' ) ),
     22                                esc_html( number_format_i18n( get_comments_number() ) ),
     23                                '<span>' . esc_html( get_the_title() ) . '</span>'
     24                        );
     25                        ?>
     26                </h2>
     27
     28                <?php the_comments_navigation(); ?>
     29
     30                <ol class="commentlist">
     31                        <?php
     32                        wp_list_comments( array(
     33                                'style'       => 'ol',
     34                                'avatar_size' => 32,
     35                                'short_ping'  => true,
     36                        ) );
     37                        ?>
     38                </ol>
     39
     40                <?php the_comments_navigation(); ?>
     41        <?php endif; ?>
     42
     43        <?php if ( ! comments_open() && get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : ?>
     44                <p class="no-comments"><?php esc_html_e( 'Comments are closed here.', 'quickpress' ); ?></p>
     45        <?php endif; ?>
     46
     47        <?php comment_form(); ?>
     48
    849</div>
    9 
    10 <?php if (have_comments()) : ?>
    11 <h3 id="comments">
    12     <?php
    13         printf( _nx( 'One comment on &ldquo;%2$s&rdquo;', '%1$s comments on &ldquo;%2$s&rdquo;', get_comments_number(), 'comments title', 'quickpress' ), number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
    14         ?>
    15 </h3>
    16 <div class="navigation">
    17     <div class="alignleft">
    18         <?php previous_comments_link() ?>
    19     </div>
    20     <div class="alignright">
    21         <?php next_comments_link() ?>
    22     </div>
    23 </div>
    24 
    25 <ol class="commentlist">
    26     <?php wp_list_comments(); ?>
    27 </ol>
    28 
    29 <div class="navigation">
    30     <div class="alignleft">
    31         <?php previous_comments_link() ?>
    32     </div>
    33     <div class="alignright">
    34         <?php next_comments_link() ?>
    35     </div>
    36 </div>
    37 
    38 <?php elseif ( ! comments_open() && ! is_page() && post_type_supports( get_post_type(), 'comments' ) ) : ?>
    39 <p>
    40     <?php _e( 'Comments are closed here.', 'quickpress' ); ?>
    41 </p>
    42 <?php endif; ?>
    43 
    44 <?php comment_form(); ?>
  • quickpress/2.0/custom-editor-style.css

    r128061 r355971  
     1/*
     2QuickPress editor style: posts look in the editor the way they will on the site.
     3WordPress scopes these rules to the editor, so they never load on the front end.
     4*/
     5
     6body {
     7        --qp-brand: #2a6496;
     8        --qp-accent: #c32364;
     9        --qp-text: #333;
     10        --qp-muted: #666;
     11        --qp-border: #ddd;
     12        --qp-soft: #f6f6f6;
     13        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
     14        font-size: 14.5px; /* the post text size on the site */
     15        line-height: 1.6;
     16        color: var(--qp-text);
     17        background: #fff;
     18}
     19
     20h1,
     21h2,
     22h3,
     23h4,
     24h5,
     25h6 {
     26        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
     27        font-weight: bold;
     28        line-height: 1.25;
     29        margin: 1.2em 0 0.4em;
     30}
     31
     32h1 { font-size: 1.9em; }
     33h2 { font-size: 1.6em; }
     34h3 { font-size: 1.3em; }
     35h4 { font-size: 1.1em; }
     36
     37/* The post title */
     38.editor-post-title,
     39.editor-post-title__input {
     40        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
     41        font-size: 1.9em;
     42        font-weight: bold;
     43        line-height: 1.25;
     44}
     45
     46a {
     47        color: var(--qp-brand);
     48        text-decoration: underline;
     49        text-underline-offset: 2px;
     50}
     51
     52blockquote {
     53        margin: 1.5em 0;
     54        padding: 0 0 0 20px;
     55        border-left: 4px solid color-mix(in srgb, var(--qp-brand) 50%, #fff);
     56        color: var(--qp-muted);
     57}
     58
     59blockquote cite {
     60        display: block;
     61        margin-top: 5px;
     62        font-size: 0.9em;
     63}
     64
     65pre {
     66        background: var(--qp-soft);
     67        border: 1px solid var(--qp-border);
     68        padding: 10px 12px;
     69        line-height: 1.5;
     70        white-space: pre-wrap;
     71}
     72
     73code {
     74        background: var(--qp-soft);
     75        padding: 1px 4px;
     76        border-radius: 3px;
     77        font-size: 0.9em;
     78}
     79
     80pre code {
     81        background: none;
     82        padding: 0;
     83}
     84
     85hr {
     86        border: 0;
     87        border-top: 1px solid var(--qp-border);
     88        margin: 2em 0;
     89}
     90
     91table th,
     92table td {
     93        padding: 6px 8px;
     94        border: 1px solid var(--qp-border);
     95        text-align: left;
     96}
     97
     98table th {
     99        background: var(--qp-soft);
     100}
     101
     102figcaption,
     103.wp-caption-text {
     104        font-size: 0.85em;
     105        color: var(--qp-muted);
     106        text-align: center;
     107}
     108
     109.wp-block-button__link,
     110.wp-element-button {
     111        background: var(--qp-accent);
     112        color: #fff;
     113        border-radius: 6px;
     114        text-decoration: none;
     115}
     116
     117.wp-block-pullquote {
     118        border-top: 3px solid var(--qp-accent);
     119        border-bottom: 3px solid var(--qp-accent);
     120}
     121
     122.wp-block-pullquote blockquote {
     123        border: 0;
     124        padding: 0;
     125}
     126
     127/* Block styles from the editor's Styles panel */
     128.is-style-qp-accent,
     129.wp-block-quote.is-style-qp-accent {
     130        margin: 1.5em 0;
     131        padding: 2px 0 2px 16px;
     132        border-left: 4px solid var(--qp-accent);
     133        color: #333;
     134        font-size: 1.1em;
     135}
     136
     137.is-style-qp-soft-box {
     138        margin: 1.5em 0;
     139        padding: 14px 18px;
     140        background: #f6f6f6;
     141        border-left: 3px solid var(--qp-accent);
     142        border-radius: 0 6px 6px 0;
     143}
     144
     145.is-style-qp-soft-box > :first-child {
     146        margin-top: 0;
     147}
     148
     149.is-style-qp-soft-box > :last-child {
     150        margin-bottom: 0;
     151}
     152
     153/* Same width as the post column on the site */
     154.wp-block {
     155        max-width: 620px;
     156}
     157
     158.wp-block[data-align="wide"],
     159.wp-block[data-align="full"] {
     160        max-width: 620px;
     161}
     162
     163/* Classic editor */
    1164body#tinymce.wp-editor {
    2     margin: 10px;
     165        max-width: 620px;
     166        margin: 10px;
    3167}
  • quickpress/2.0/footer.php

    r183335 r355971  
    1 </div> <!-- end row -->
     1        </div> <!-- end row -->
    22
     3        <footer id="footer">
    34
    4 <footer id="footer">
     5                <?php if ( is_active_sidebar( 'footer-1' ) || is_active_sidebar( 'footer-2' ) || is_active_sidebar( 'footer-3' ) ) : ?>
     6                        <div class="footer-widgets">
     7                                <?php for ( $quickpress_i = 1; $quickpress_i <= 3; $quickpress_i++ ) : ?>
     8                                        <?php if ( is_active_sidebar( 'footer-' . $quickpress_i ) ) : ?>
     9                                                <div class="footer-column">
     10                                                        <?php dynamic_sidebar( 'footer-' . $quickpress_i ); ?>
     11                                                </div>
     12                                        <?php endif; ?>
     13                                <?php endfor; ?>
     14                        </div>
     15                <?php endif; ?>
    516
    6     <p>
    7         &copy;
    8         <?php _e('Copyright', 'quickpress'); ?>
    9         <?php echo date('Y'); ?> -
    10         <?php bloginfo('name'); ?>
    11     </p>
    12     <?php wp_footer(); ?>
     17                <div class="site-info">
    1318
    14 </footer>
    15 </div> <!-- end page -->
     19                <?php
     20                if ( has_nav_menu( 'footer' ) ) {
     21                        wp_nav_menu( array(
     22                                'theme_location'       => 'footer',
     23                                'container'            => 'nav',
     24                                'container_class'      => 'footer-menu',
     25                                'container_aria_label' => __( 'Footer menu', 'quickpress' ),
     26                                'depth'                => 1,
     27                        ) );
     28                }
     29                ?>
     30
     31                <p>
     32                        &copy; <?php esc_html_e( 'Copyright', 'quickpress' ); ?>
     33                        <?php echo esc_html( wp_date( 'Y' ) ); ?> &ndash;
     34                        <?php bloginfo( 'name' ); ?>
     35                </p>
     36
     37                <p class="credits">
     38                        <a href="https://wordpress.org/themes/quickpress/" rel="nofollow">QuickPress Theme</a> &bull; <?php esc_html_e( 'Powered by WordPress', 'quickpress' ); ?>
     39                </p>
     40
     41                </div>
     42
     43        </footer>
     44
     45</div>
     46<!-- /page -->
     47
     48<?php wp_footer(); ?>
    1649</body>
    1750
  • quickpress/2.0/functions.php

    r183335 r355971  
    11<?php
    2 
    3 // Content width
    4 if ( ! isset( $content_width ) )
    5         $content_width = 540;
     2/**
     3 * QuickPress functions and setup.
     4 *
     5 * Kept deliberately small: no JavaScript, no options panel,
     6 * just the theme supports WordPress needs.
     7 *
     8 * @package QuickPress
     9 */
     10
     11// Icons for social links in the Footer Menu.
     12require get_template_directory() . '/inc/social-icons.php';
     13
     14// Width of the main content column, used by WordPress for embeds and large images.
     15if ( ! isset( $content_width ) ) {
     16        $content_width = 620;
     17}
    618
    719// Setup
    820if ( ! function_exists( 'quickpress_setup' ) ) :
    9 function quickpress_setup() {
    10 
    11         // Register menus
    12         register_nav_menus( array(
    13         'header-nav' => 'Header Menu',
    14         ) );
    15 
    16         // add title tag
    17         add_theme_support( 'title-tag' );
    18 
    19         // add text domain
    20         load_theme_textdomain( 'quickpress', get_template_directory() . '/languages' );
    21 
    22         // Custom Background
    23         add_theme_support( 'custom-background', apply_filters( 'quickpress_custom_background_args', array(
    24                 'default-color' => 'ffffff',
    25                 'default-image' => '',
    26         ) ) );
    27          
    28  
    29         // more theme support
    30         add_theme_support('post-thumbnails');
    31         add_theme_support('automatic-feed-links');
    32         add_theme_support( "wp-block-styles");
    33         add_theme_support( "responsive-embeds");
    34         add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script' ) );
    35         add_theme_support( "align-wide"); 
    36 
    37 }
     21        function quickpress_setup() {
     22
     23                // Let WordPress write the <title> tag.
     24                add_theme_support( 'title-tag' );
     25
     26                // Custom background colour or image (Appearance > Customize).
     27                add_theme_support( 'custom-background', apply_filters( 'quickpress_custom_background_args', array(
     28                        'default-color' => 'ede8e2',
     29                        'default-image' => '',
     30                ) ) );
     31
     32                // Optional logo beside the site title (Appearance > Customize > Site Identity).
     33                add_theme_support( 'custom-logo', array(
     34                        'height'      => 100,
     35                        'width'       => 300,
     36                        'flex-height' => true,
     37                        'flex-width'  => true,
     38                ) );
     39
     40                // Menus: the menu bar under the header, and one in the footer (Appearance > Menus).
     41                // The header id stays 'header-nav' so existing sites keep their menu.
     42                register_nav_menus( array(
     43                        'header-nav' => __( 'Main Menu', 'quickpress' ),
     44                        'footer'     => __( 'Footer Menu', 'quickpress' ),
     45                ) );
     46
     47                // More theme support
     48                add_theme_support( 'post-thumbnails' );
     49                add_theme_support( 'automatic-feed-links' );
     50                add_theme_support( 'wp-block-styles' );
     51                add_theme_support( 'responsive-embeds' );
     52                add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script', 'navigation-widgets' ) );
     53                add_theme_support( 'align-wide' );
     54
     55                // Starter content: on a brand-new site, the Customizer offers ready
     56                // widgets (as blocks), a few pages and a main menu, so the whole design
     57                // shows. Nothing is saved until the owner clicks Publish, and existing
     58                // sites never see it.
     59                $quickpress_heading = function ( $text ) {
     60                        return '<!-- wp:heading --><h2 class="wp-block-heading">' . esc_html( $text ) . '</h2><!-- /wp:heading -->';
     61                };
     62                add_theme_support( 'starter-content', array(
     63                        'widgets'   => array(
     64                                'sidebar-1' => array(
     65                                        'recent' => array( 'block', array( 'content' => $quickpress_heading( __( 'Recent Posts', 'quickpress' ) ) . '<!-- wp:latest-posts /-->' ) ),
     66                                ),
     67                                'sidebar-2' => array(
     68                                        'categories' => array( 'block', array( 'content' => $quickpress_heading( __( 'Categories', 'quickpress' ) ) . '<!-- wp:categories {"className":"qp-short"} /-->' ) ),
     69                                ),
     70                                'sidebar-3' => array(
     71                                        'comments' => array( 'block', array( 'content' => $quickpress_heading( __( 'Recent Comments', 'quickpress' ) ) . '<!-- wp:latest-comments {"displayAvatar":false,"displayDate":false,"displayExcerpt":false} /-->' ) ),
     72                                ),
     73                                // Footer columns, so a new site shows the footer too.
     74                                'footer-1'  => array(
     75                                        'about_site' => array( 'block', array( 'content' => $quickpress_heading( __( 'About This Site', 'quickpress' ) ) . '<!-- wp:paragraph --><p>' . esc_html__( 'A few words about you and what you write about. Change this in Appearance > Widgets.', 'quickpress' ) . '</p><!-- /wp:paragraph -->' ) ),
     76                                ),
     77                                'footer-2'  => array(
     78                                        'pages' => array( 'block', array( 'content' => $quickpress_heading( __( 'Pages', 'quickpress' ) ) . '<!-- wp:page-list {"className":"qp-short"} /-->' ) ),
     79                                ),
     80                        ),
     81                        'posts'     => array( 'about', 'contact' ),
     82                        'nav_menus' => array(
     83                                'header-nav' => array(
     84                                        'name'  => __( 'Main Menu', 'quickpress' ),
     85                                        'items' => array( 'link_home', 'page_about', 'page_contact' ),
     86                                ),
     87                        ),
     88                ) );
     89        }
    3890endif; // quickpress_setup
    3991add_action( 'after_setup_theme', 'quickpress_setup' );
    4092
    41 // Register sidebar widgets
     93// Register sidebar widgets. The ids stay the same so existing widgets stay put.
    4294function quickpress_widgets_init() {
    43 register_sidebar(array(
    44         'name' => __( 'Sidebar Full', 'quickpress' ),
    45         'id' => 'sidebar-1',
    46         'before_widget' => '',
    47         'after_widget' => '',
    48         'before_title' => '<h4>',
    49         'after_title' => '</h4>',
    50     ));
    51 register_sidebar(array(
    52 
    53         'name' => __( 'Sidebar Split Left', 'quickpress' ),
    54         'id' => 'sidebar-2',
    55         'before_widget' => '',
    56         'after_widget' => '',
    57         'before_title' => '<h4>',
    58         'after_title' => '</h4>',
    59 ));
    60 register_sidebar(array(
    61         'name' => __( 'Sidebar Split Right', 'quickpress' ),
    62         'id' => 'sidebar-3',
    63         'before_widget' => '',
    64         'after_widget' => '',
    65         'before_title' => '<h4>',
    66         'after_title' => '</h4>',
    67 ));
     95        $areas = array(
     96                'sidebar-1' => array( __( 'Sidebar Full', 'quickpress' ), __( 'Across the whole right column, at the top.', 'quickpress' ) ),
     97                'sidebar-2' => array( __( 'Sidebar Split Left', 'quickpress' ), __( 'The left half of the right column, below Sidebar Full.', 'quickpress' ) ),
     98                'sidebar-3' => array( __( 'Sidebar Split Right', 'quickpress' ), __( 'The right half of the right column, below Sidebar Full.', 'quickpress' ) ),
     99        );
     100        foreach ( $areas as $id => $area ) {
     101                register_sidebar( array(
     102                        'name'          => $area[0],
     103                        'id'            => $id,
     104                        'description'   => $area[1],
     105                        'before_widget' => '<section id="%1$s" class="widget %2$s">',
     106                        'after_widget'  => '</section>',
     107                        'before_title'  => '<h2 class="widget-title">',
     108                        'after_title'   => '</h2>',
     109                ) );
     110        }
     111
     112        // Below each post: newsletter sign-up, author note, related links, an ad.
     113        register_sidebar( array(
     114                'name'          => __( 'Below Posts', 'quickpress' ),
     115                'id'            => 'after-post',
     116                'description'   => __( 'Shown under the post on each single post, before the comments. Empty means hidden.', 'quickpress' ),
     117                'before_widget' => '<section id="%1$s" class="widget %2$s">',
     118                'after_widget'  => '</section>',
     119                'before_title'  => '<h2 class="widget-title">',
     120                'after_title'   => '</h2>',
     121        ) );
     122
     123        // Footer: up to three columns. Only the ones with widgets are shown.
     124        for ( $i = 1; $i <= 3; $i++ ) {
     125                register_sidebar( array(
     126                        /* translators: %d: footer column number, 1 to 3 */
     127                        'name'          => sprintf( __( 'Footer %d', 'quickpress' ), $i ),
     128                        'id'            => 'footer-' . $i,
     129                        'description'   => __( 'A column at the bottom of every page. Leave all three empty for no footer widgets.', 'quickpress' ),
     130                        'before_widget' => '<section id="%1$s" class="widget %2$s">',
     131                        'after_widget'  => '</section>',
     132                        'before_title'  => '<h2 class="widget-title">',
     133                        'after_title'   => '</h2>',
     134                ) );
     135        }
    68136}
    69137add_action( 'widgets_init', 'quickpress_widgets_init' );
    70138
    71 // add editor style
     139/*
     140 * Default sidebar, shown only while all three sidebar areas are empty.
     141 * Built from WordPress's own blocks, so it needs no plugin and looks the same
     142 * as the block widgets people add later in Appearance > Widgets.
     143 * Search is left out because the header already has a search box.
     144 * As soon as any widget is added, this steps aside.
     145 * A child theme can switch it off: add_filter( 'quickpress_show_default_sidebar', '__return_false' );
     146 */
     147function quickpress_default_sidebar() {
     148        if ( ! apply_filters( 'quickpress_show_default_sidebar', true ) ) {
     149                return;
     150        }
     151
     152        $full  = array(
     153                'widget_recent_entries' => array( __( 'Recent Posts', 'quickpress' ), '<!-- wp:latest-posts /-->' ),
     154        );
     155        $split = array(
     156                'widget_categories'      => array( __( 'Categories', 'quickpress' ), '<!-- wp:categories {"className":"qp-short"} /-->' ),
     157                'widget_recent_comments' => array( __( 'Recent Comments', 'quickpress' ), '<!-- wp:latest-comments {"displayAvatar":false,"displayDate":false,"displayExcerpt":false} /-->' ),
     158        );
     159
     160        echo '<div class="sidebar-full">';
     161        quickpress_default_widgets( $full );
     162        echo '</div><div class="sidebar-split">';
     163        foreach ( $split as $class => $section ) {
     164                echo '<div class="subcol">';
     165                quickpress_default_widgets( array( $class => $section ) );
     166                echo '</div>';
     167        }
     168        echo '</div>';
     169}
     170
     171// Prints default widgets with the same wrappers as real ones.
     172function quickpress_default_widgets( $sections ) {
     173        foreach ( $sections as $class => $section ) {
     174                echo '<section class="widget ' . esc_attr( $class ) . '">';
     175                echo '<h2 class="widget-title">' . esc_html( $section[0] ) . '</h2>';
     176                echo do_blocks( $section[1] ); // phpcs:ignore WordPress.Security.EscapeOutput -- core blocks escape their own output.
     177                echo '</section>';
     178        }
     179}
     180
     181// Editor style: posts look in the editor much like they do on the site.
    72182function quickpress_add_editor_styles() {
    73         add_editor_style( 'custom-editor-style.css' );
    74 }
    75 add_action( 'admin_init', 'quickpress_add_editor_styles' );
    76 
    77 // read more
     183        add_theme_support( 'editor-styles' );
     184        add_editor_style( 'custom-editor-style.css' );
     185
     186        // The theme's own colours in the block editor's colour picker,
     187        // instead of WordPress's general rainbow.
     188        $colors = quickpress_colors();
     189        add_theme_support( 'editor-color-palette', array(
     190                array( 'name' => __( 'Header blue', 'quickpress' ), 'slug' => 'brand', 'color' => $colors['brand'] ),
     191                array( 'name' => __( 'Accent', 'quickpress' ), 'slug' => 'accent', 'color' => $colors['accent'] ),
     192                array( 'name' => __( 'Text', 'quickpress' ), 'slug' => 'text', 'color' => '#333333' ),
     193                array( 'name' => __( 'Grey', 'quickpress' ), 'slug' => 'grey', 'color' => '#707070' ),
     194                array( 'name' => __( 'Light grey', 'quickpress' ), 'slug' => 'light-grey', 'color' => '#f6f6f6' ),
     195                array( 'name' => __( 'White', 'quickpress' ), 'slug' => 'white', 'color' => '#ffffff' ),
     196        ) );
     197
     198        // Text sizes in the editor, in step with the theme's 14.5px post text.
     199        add_theme_support( 'editor-font-sizes', array(
     200                array( 'name' => __( 'Small', 'quickpress' ), 'slug' => 'small', 'size' => 12.5 ),
     201                array( 'name' => __( 'Normal', 'quickpress' ), 'slug' => 'normal', 'size' => 14.5 ),
     202                array( 'name' => __( 'Large', 'quickpress' ), 'slug' => 'large', 'size' => 19 ),
     203                array( 'name' => __( 'Extra large', 'quickpress' ), 'slug' => 'x-large', 'size' => 25 ),
     204        ) );
     205
     206        // No gradient presets: they don't suit the theme's flat look.
     207        add_theme_support( 'editor-gradient-presets', array() );
     208}
     209add_action( 'after_setup_theme', 'quickpress_add_editor_styles' );
     210
     211/*
     212 * Block styles: extra looks in the block editor's Styles panel.
     213 * The CSS lives in style.css and custom-editor-style.css, so nothing extra loads.
     214 */
     215function quickpress_block_styles() {
     216        register_block_style( 'core/quote', array(
     217                'name'  => 'qp-accent',
     218                'label' => __( 'Accent bar', 'quickpress' ),
     219        ) );
     220        register_block_style( 'core/group', array(
     221                'name'  => 'qp-soft-box',
     222                'label' => __( 'Soft box', 'quickpress' ),
     223        ) );
     224}
     225add_action( 'init', 'quickpress_block_styles' );
     226
     227/*
     228 * Block patterns: ready-made boxes in the editor's Patterns tab, under QuickPress.
     229 * Handy in a post or in the Below Posts widget area.
     230 */
     231function quickpress_block_patterns() {
     232        register_block_pattern_category( 'quickpress', array( 'label' => __( 'QuickPress', 'quickpress' ) ) );
     233
     234        register_block_pattern( 'quickpress/newsletter-box', array(
     235                'title'       => __( 'Newsletter sign-up box', 'quickpress' ),
     236                'description' => __( 'A soft box asking readers to subscribe, with a button.', 'quickpress' ),
     237                'categories'  => array( 'quickpress' ),
     238                'content'     => '<!-- wp:group {"className":"is-style-qp-soft-box"} --><div class="wp-block-group is-style-qp-soft-box">'
     239                        . '<!-- wp:heading {"level":3} --><h3 class="wp-block-heading">' . esc_html__( 'Enjoyed this post?', 'quickpress' ) . '</h3><!-- /wp:heading -->'
     240                        . '<!-- wp:paragraph --><p>' . esc_html__( 'Get new posts by email. No spam, unsubscribe any time.', 'quickpress' ) . '</p><!-- /wp:paragraph -->'
     241                        . '<!-- wp:buttons --><div class="wp-block-buttons"><!-- wp:button --><div class="wp-block-button"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'Subscribe', 'quickpress' ) . '</a></div><!-- /wp:button --></div><!-- /wp:buttons -->'
     242                        . '</div><!-- /wp:group -->',
     243        ) );
     244
     245        register_block_pattern( 'quickpress/about-author', array(
     246                'title'       => __( 'About the author', 'quickpress' ),
     247                'description' => __( 'A soft box with a short note about the writer.', 'quickpress' ),
     248                'categories'  => array( 'quickpress' ),
     249                'content'     => '<!-- wp:group {"className":"is-style-qp-soft-box"} --><div class="wp-block-group is-style-qp-soft-box">'
     250                        . '<!-- wp:heading {"level":3} --><h3 class="wp-block-heading">' . esc_html__( 'About the author', 'quickpress' ) . '</h3><!-- /wp:heading -->'
     251                        . '<!-- wp:paragraph --><p>' . esc_html__( 'A few words about you: what you write about, and why readers should come back.', 'quickpress' ) . '</p><!-- /wp:paragraph -->'
     252                        . '</div><!-- /wp:group -->',
     253        ) );
     254}
     255add_action( 'init', 'quickpress_block_patterns' );
     256
     257// The owner's colours in the editor too.
     258function quickpress_editor_colors( $settings ) {
     259        $colors = quickpress_colors_css();
     260        if ( $colors && isset( $settings['styles'] ) && is_array( $settings['styles'] ) ) {
     261                $settings['styles'][] = array( 'css' => str_replace( ':root', 'body', $colors ) );
     262        }
     263        return $settings;
     264}
     265add_filter( 'block_editor_settings_all', 'quickpress_editor_colors' );
     266
     267/*
     268 * Long lists in the theme's own starter widgets (Categories in the sidebar,
     269 * Pages in the footer): show the first 10 items, then "12 more" that opens
     270 * the rest in place. Plain HTML <details>, so no JavaScript.
     271 * Only blocks with the CSS class "qp-short" are shortened, so lists an
     272 * owner adds themselves always show in full. (Owners can opt in by adding
     273 * qp-short under the block's Advanced > Additional CSS class.)
     274 * Change the number in a child theme: add_filter( 'quickpress_list_limit', fn() => 15 );
     275 */
     276function quickpress_shorten_long_lists( $block_content, $block ) {
     277        $blocks = array( 'core/categories', 'core/page-list', 'core/archives' );
     278        if ( empty( $block['blockName'] ) || ! in_array( $block['blockName'], $blocks, true ) ) {
     279                return $block_content;
     280        }
     281        $classes = isset( $block['attrs']['className'] ) ? ' ' . $block['attrs']['className'] . ' ' : '';
     282        // qc-short is QuickChic's name for the same thing, so lists set up under
     283        // QuickChic keep shortening after switching to QuickPress.
     284        $marked = false !== strpos( $classes, ' qp-short ' ) || false !== strpos( $classes, ' qc-short ' );
     285        if ( is_admin() || ! $marked || ! empty( $block['attrs']['displayAsDropdown'] ) ) {
     286                return $block_content;
     287        }
     288
     289        $limit = (int) apply_filters( 'quickpress_list_limit', 10 );
     290        if ( $limit < 1 || substr_count( $block_content, '<li' ) <= $limit || ! class_exists( 'DOMDocument' ) ) {
     291                return $block_content;
     292        }
     293
     294        $doc       = new DOMDocument();
     295        $old_state = libxml_use_internal_errors( true );
     296        $doc->loadHTML( '<?xml encoding="utf-8"?><div id="qp-list">' . $block_content . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
     297        libxml_clear_errors();
     298        libxml_use_internal_errors( $old_state );
     299
     300        $xpath = new DOMXPath( $doc );
     301        $wrap  = $xpath->query( '//div[@id="qp-list"]' )->item( 0 );
     302        $list  = $wrap ? $xpath->query( './/ul', $wrap )->item( 0 ) : null;
     303        if ( ! $list ) {
     304                return $block_content;
     305        }
     306
     307        // Count every line, sub-items included, but never split an item from its own
     308        // sub-items: show whole top-level items until the next would pass the limit.
     309        $items = array();
     310        foreach ( $list->childNodes as $node ) {
     311                if ( XML_ELEMENT_NODE === $node->nodeType && 'li' === $node->nodeName ) {
     312                        $items[] = $node;
     313                }
     314        }
     315        $shown_lines = 0;
     316        $keep        = 0;
     317        foreach ( $items as $item ) {
     318                $lines = 1 + $item->getElementsByTagName( 'li' )->length;
     319                if ( $keep > 0 && $shown_lines + $lines > $limit ) {
     320                        break;
     321                }
     322                $shown_lines += $lines;
     323                $keep++;
     324        }
     325        $hidden = array_slice( $items, $keep );
     326        if ( ! $hidden ) {
     327                return $block_content;
     328        }
     329        $extra = 0;
     330        foreach ( $hidden as $item ) {
     331                $extra += 1 + $item->getElementsByTagName( 'li' )->length;
     332        }
     333
     334        $more_item = $doc->createElement( 'li' );
     335        $more_item->setAttribute( 'class', 'qp-more' );
     336        $details = $doc->createElement( 'details' );
     337        $summary = $doc->createElement( 'summary' );
     338        /* translators: %d: number of hidden list items */
     339        $summary->appendChild( $doc->createTextNode( sprintf( _n( '%d more', '%d more', $extra, 'quickpress' ), $extra ) ) );
     340        $rest = $doc->createElement( 'ul' );
     341        foreach ( $hidden as $item ) {
     342                $rest->appendChild( $item ); // Moves the item into the hidden list.
     343        }
     344        $details->appendChild( $summary );
     345        $details->appendChild( $rest );
     346        $more_item->appendChild( $details );
     347        $list->appendChild( $more_item );
     348
     349        $html = '';
     350        foreach ( $wrap->childNodes as $node ) {
     351                $html .= $doc->saveHTML( $node );
     352        }
     353        return $html;
     354}
     355add_filter( 'render_block', 'quickpress_shorten_long_lists', 10, 2 );
     356
     357// The "Read More" link used after excerpts.
     358function quickpress_read_more_link() {
     359        return ' &bull; <a class="read-more" href="' . esc_url( get_permalink( get_the_ID() ) ) . '">' . esc_html__( 'Read More', 'quickpress' ) . ' &raquo;</a>';
     360}
     361
     362// After an automatic excerpt that was cut short.
    78363function quickpress_excerpt_more( $more ) {
    79         return ' &bull;  <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __(' Read More &raquo;', 'quickpress') . '</a>';
    80         }
    81         add_filter( 'excerpt_more', 'quickpress_excerpt_more' );
    82 
    83 // credits
    84 function quickpress_credits() {
    85     echo '<div class="center">
    86         <a href="https://wordpress.org/themes/quickpress/" target="_blank" rel="nofollow noopener noreferrer">QuickPress Theme</a> &bull; Powered by WordPress
    87         </div>';
    88         }
    89         add_action('wp_footer', 'quickpress_credits');
    90 
    91 
    92 // load javascript
    93         function quickpress_scripts() {
    94                
    95                 wp_enqueue_style( 'quickpress-normalize',
    96                         get_template_directory_uri() . '/css/normalize.css',
    97                         array(),
    98                         '8.0.1'
    99                         );
    100                
    101         wp_enqueue_style( 'quickpress',
    102                                          get_stylesheet_uri(),
    103                                          array(),
    104                                  '1.9.2'
    105                                         );
    106 
    107         wp_enqueue_style( 'quickpress-quickgrid',
    108                         get_template_directory_uri() . '/css/quickgrid.css',
    109                         array(),
    110                         '1.0'
    111                         );             
    112                
    113         if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ){
    114         wp_enqueue_script( 'comment-reply' );
    115         }
    116         }
    117         add_action( 'wp_enqueue_scripts', 'quickpress_scripts' );
    118 ?>
     364        return quickpress_read_more_link();
     365}
     366add_filter( 'excerpt_more', 'quickpress_excerpt_more' );
     367
     368// WordPress leaves out the link in two cases where the post does go on:
     369// a hand-written excerpt (the Excerpt box in the editor), and a post with a
     370// More block early on, whose excerpt stops there. Add it in both, so every
     371// post that continues ends with Read More.
     372function quickpress_manual_excerpt_more( $excerpt ) {
     373        if ( is_admin() || is_feed() || ! in_the_loop() || false !== strpos( $excerpt, 'class="read-more"' ) ) {
     374                return $excerpt;
     375        }
     376        if ( has_excerpt() || false !== strpos( get_post_field( 'post_content', get_the_ID() ), '<!--more' ) ) {
     377                return $excerpt . quickpress_read_more_link();
     378        }
     379        return $excerpt;
     380}
     381add_filter( 'get_the_excerpt', 'quickpress_manual_excerpt_more', 20 );
     382
     383// Post date, author, comments and categories line, used in lists and single posts
     384function quickpress_post_meta( $show_comments = true ) {
     385        echo '<p class="post-meta">';
     386
     387        printf(
     388                '<time datetime="%1$s">%2$s</time>',
     389                esc_attr( get_the_date( 'c' ) ),
     390                esc_html( get_the_date() )
     391        );
     392
     393        // On a post's own page, show when it was last updated (if a day or more after publishing).
     394        if ( is_singular() && get_the_modified_time( 'U' ) - get_the_time( 'U' ) >= DAY_IN_SECONDS ) {
     395                printf(
     396                        ' | <span class="updated-date">%1$s <time datetime="%2$s">%3$s</time></span>',
     397                        esc_html__( 'Updated', 'quickpress' ),
     398                        esc_attr( get_the_modified_date( 'c' ) ),
     399                        esc_html( get_the_modified_date() )
     400                );
     401        }
     402
     403        /* translators: %s: post author name */
     404        echo ' | ' . sprintf( esc_html__( 'By %s', 'quickpress' ), esc_html( get_the_author() ) );
     405
     406        if ( $show_comments && ! post_password_required() && ( comments_open() || get_comments_number() ) ) {
     407                echo ' | ';
     408                comments_popup_link( __( 'No Comments', 'quickpress' ), __( '1 Comment', 'quickpress' ), __( '% Comments', 'quickpress' ) );
     409        }
     410
     411        $categories = get_the_category_list( ', ' );
     412        if ( $categories ) {
     413                /* translators: %s: list of categories */
     414                echo ' | ' . sprintf( esc_html__( 'Filed in: %s', 'quickpress' ), $categories ); // phpcs:ignore WordPress.Security.EscapeOutput -- WordPress builds this list.
     415        }
     416
     417        edit_post_link( __( 'Edit', 'quickpress' ), ' | ', '' );
     418
     419        echo '</p>';
     420}
     421
     422/*
     423 * Customizer: Appearance > Customize > Colours
     424 * - Header colour: the blue of the header band, menu bar, footer and links.
     425 * - Accent colour: the pink of widget headings, buttons and highlights.
     426 * - Dark mode: follow the reader's device setting (on by default) or stay light.
     427 */
     428function quickpress_customize_register( $wp_customize ) {
     429
     430        $wp_customize->add_setting( 'quickpress_brand_color', array(
     431                'default'           => '#2a6496',
     432                'sanitize_callback' => 'sanitize_hex_color',
     433        ) );
     434        $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'quickpress_brand_color', array(
     435                'label'       => __( 'Header colour', 'quickpress' ),
     436                'description' => __( 'The header band, menu bar, footer and links. Pick a darker colour so white text stays readable on it.', 'quickpress' ),
     437                'section'     => 'colors',
     438        ) ) );
     439
     440        $wp_customize->add_setting( 'quickpress_accent_color', array(
     441                'default'           => '#c32364',
     442                'sanitize_callback' => 'sanitize_hex_color',
     443        ) );
     444        $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'quickpress_accent_color', array(
     445                'label'       => __( 'Accent colour', 'quickpress' ),
     446                'description' => __( 'Widget headings, buttons and page numbers.', 'quickpress' ),
     447                'section'     => 'colors',
     448        ) ) );
     449
     450        $wp_customize->add_setting( 'quickpress_dark_mode', array(
     451                'default'           => true,
     452                'sanitize_callback' => 'wp_validate_boolean',
     453        ) );
     454        $wp_customize->add_control( 'quickpress_dark_mode', array(
     455                'type'        => 'checkbox',
     456                'label'       => __( 'Dark mode for readers who use it', 'quickpress' ),
     457                'description' => __( 'Turns the site dark when the reader\'s phone or computer is set to dark. Untick to always stay light.', 'quickpress' ),
     458                'section'     => 'colors',
     459        ) );
     460}
     461add_action( 'customize_register', 'quickpress_customize_register' );
     462
     463/*
     464 * Customizer: Appearance > Customize > Post Lists
     465 * - Show excerpts (default) or full posts on the home page and archives.
     466 * - Excerpt length in words (WordPress's default is 55).
     467 * Search results always show excerpts.
     468 */
     469function quickpress_customize_post_lists( $wp_customize ) {
     470
     471        $wp_customize->add_section( 'quickpress_post_lists', array(
     472                'title'       => __( 'Post Lists', 'quickpress' ),
     473                'description' => __( 'How posts appear on the home page and in category, tag, date and author archives.', 'quickpress' ),
     474                'priority'    => 45,
     475        ) );
     476
     477        $wp_customize->add_setting( 'quickpress_list_display', array(
     478                'default'           => 'excerpt',
     479                'sanitize_callback' => 'quickpress_sanitize_list_display',
     480        ) );
     481        $wp_customize->add_control( 'quickpress_list_display', array(
     482                'type'        => 'radio',
     483                'label'       => __( 'Show', 'quickpress' ),
     484                'description' => __( 'With full posts, add a More block in a post to choose where it breaks.', 'quickpress' ),
     485                'section'     => 'quickpress_post_lists',
     486                'choices'     => array(
     487                        'excerpt' => __( 'A short excerpt with Read More', 'quickpress' ),
     488                        'full'    => __( 'The full post', 'quickpress' ),
     489                ),
     490        ) );
     491
     492        $wp_customize->add_setting( 'quickpress_excerpt_length', array(
     493                'default'           => 55,
     494                'sanitize_callback' => 'quickpress_sanitize_excerpt_length',
     495        ) );
     496        $wp_customize->add_control( 'quickpress_excerpt_length', array(
     497                'type'        => 'number',
     498                'label'       => __( 'Excerpt length (words)', 'quickpress' ),
     499                'description' => __( 'Between 10 and 200. WordPress uses 55.', 'quickpress' ),
     500                'section'     => 'quickpress_post_lists',
     501                'input_attrs' => array( 'min' => 10, 'max' => 200, 'step' => 5 ),
     502        ) );
     503}
     504add_action( 'customize_register', 'quickpress_customize_post_lists' );
     505
     506function quickpress_sanitize_list_display( $value ) {
     507        return 'full' === $value ? 'full' : 'excerpt';
     508}
     509
     510function quickpress_sanitize_excerpt_length( $value ) {
     511        return max( 10, min( 200, absint( $value ) ) );
     512}
     513
     514// Should this post list show full posts? Search results always use excerpts.
     515function quickpress_show_full_posts() {
     516        return ! is_search() && 'full' === get_theme_mod( 'quickpress_list_display', 'excerpt' );
     517}
     518
     519// The excerpt length chosen in Customize > Post Lists.
     520function quickpress_excerpt_length( $length ) {
     521        if ( is_admin() ) {
     522                return $length;
     523        }
     524        return quickpress_sanitize_excerpt_length( get_theme_mod( 'quickpress_excerpt_length', 55 ) );
     525}
     526add_filter( 'excerpt_length', 'quickpress_excerpt_length' );
     527
     528// The theme's two colours: the saved one, or the default.
     529function quickpress_colors() {
     530        $brand  = sanitize_hex_color( get_theme_mod( 'quickpress_brand_color', '#2a6496' ) );
     531        $accent = sanitize_hex_color( get_theme_mod( 'quickpress_accent_color', '#c32364' ) );
     532        return array(
     533                'brand'  => $brand ? $brand : '#2a6496',
     534                'accent' => $accent ? $accent : '#c32364',
     535        );
     536}
     537
     538// The owner's colours as CSS, or '' when both are the defaults.
     539function quickpress_colors_css() {
     540        $colors = quickpress_colors();
     541        $css    = '';
     542        if ( '#2a6496' !== strtolower( $colors['brand'] ) ) {
     543                $css .= '--qp-brand:' . $colors['brand'] . ';';
     544        }
     545        if ( '#c32364' !== strtolower( $colors['accent'] ) ) {
     546                $css .= '--qp-accent:' . $colors['accent'] . ';';
     547        }
     548        return $css ? ':root{' . $css . '}' : '';
     549}
     550
     551// Is this post or page using the Full width template?
     552function quickpress_is_full_width() {
     553        return is_singular() && is_page_template( 'template-full-width.php' );
     554}
     555
     556// Full width pages get a wider content area for embeds and large images.
     557function quickpress_full_width_content_width() {
     558        if ( quickpress_is_full_width() ) {
     559                $GLOBALS['content_width'] = 950;
     560        }
     561}
     562add_action( 'template_redirect', 'quickpress_full_width_content_width' );
     563
     564// Body classes: dark mode switched off, Full width template.
     565function quickpress_body_classes( $classes ) {
     566        if ( ! get_theme_mod( 'quickpress_dark_mode', true ) ) {
     567                $classes[] = 'qp-light-only';
     568        }
     569        if ( quickpress_is_full_width() ) {
     570                $classes[] = 'qp-full-width';
     571        }
     572        return $classes;
     573}
     574add_filter( 'body_class', 'quickpress_body_classes' );
     575
     576// Load stylesheets
     577function quickpress_scripts() {
     578
     579        // Theme version plus the file's last change time, so browsers fetch fresh CSS
     580        // after every update, even when the version number stays the same.
     581        $version = wp_get_theme( get_template() )->get( 'Version' ) . '.' . filemtime( get_template_directory() . '/style.css' );
     582
     583        // The whole theme is one small stylesheet.
     584        wp_enqueue_style( 'quickpress', get_stylesheet_uri(), array(), $version );
     585
     586        // The owner's colours, if they picked any (a few bytes, no extra file).
     587        $colors = quickpress_colors_css();
     588        if ( $colors ) {
     589                wp_add_inline_style( 'quickpress', $colors );
     590        }
     591
     592        // WordPress's own script for threaded comment replies, only where needed.
     593        if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
     594                wp_enqueue_script( 'comment-reply' );
     595        }
     596}
     597add_action( 'wp_enqueue_scripts', 'quickpress_scripts' );
  • quickpress/2.0/header.php

    r183335 r355971  
    33
    44<head>
    5     <meta charset="utf-8">
    6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7     <?php wp_head(); ?>
     5        <meta charset="<?php bloginfo( 'charset' ); ?>">
     6        <meta name="viewport" content="width=device-width, initial-scale=1">
     7        <?php wp_head(); ?>
    88</head>
    99
    1010<body <?php body_class(); ?>>
    11         <?php wp_body_open(); ?>
    12     <div id="page">
     11<?php wp_body_open(); ?>
     12<a class="skip-link screen-reader-text" href="#content"><?php esc_html_e( 'Skip to content', 'quickpress' ); ?></a>
    1313
    14     <header id="header">
    15                        
    16             <div class="searchform header-search">
    17                 <!-- Search -->
    18                 <?php get_search_form(); ?>
    19             </div>
    20                        
    21             <div class="blog-top">
    22                 <?php if (is_home()) { ?>
    23                 <h1>
    24                     <?php } ?>
    25                     <a class="blogtitle" href="<?php echo esc_url( home_url() ); ?>">
    26                         <?php bloginfo('name'); ?>
    27                     </a>
    28                     <?php if (is_home()) { ?>
    29                 </h1>
    30                 <?php } ?>
    31                 <div class="description">
    32                     <?php bloginfo('description'); ?>
    33                 </div>
    34             </div>
    35                        
    36                          <div class="searchform header-search-mobile">
    37                 <!-- Search -->
    38                 <?php get_search_form(); ?>
    39             </div>
    40                        
    41         </header>
     14<div id="page">
    4215
    43         <nav id="menu-header">
    44             <!-- Header Menu -->
    45             <?php wp_nav_menu( array(
    46         'theme_location' => 'header-nav',
    47         'menu_class' => 'nav navbar-nav',
    48         'container' => false,
    49         'depth' => 1,
    50         // do not fall back to wp_page_menu()
    51         'fallback_cb' => false
    52  ) ); ?>
    53         </nav>
     16        <header id="header">
    5417
    55                 <div class="row"> <!-- start row -->
     18                <div class="site-branding">
     19                        <?php the_custom_logo(); ?>
     20
     21                        <?php if ( is_front_page() && is_home() ) : ?>
     22                                <h1 class="site-title"><a class="blogtitle" href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
     23                        <?php else : ?>
     24                                <p class="site-title"><a class="blogtitle" href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></p>
     25                        <?php endif; ?>
     26
     27                        <?php if ( get_bloginfo( 'description' ) ) : ?>
     28                                <p class="description"><?php bloginfo( 'description' ); ?></p>
     29                        <?php endif; ?>
     30                </div>
     31
     32                <div class="header-search">
     33                        <?php get_search_form(); ?>
     34                </div>
     35
     36        </header>
     37
     38        <?php
     39        if ( has_nav_menu( 'header-nav' ) ) {
     40                wp_nav_menu( array(
     41                        'theme_location'       => 'header-nav',
     42                        'container'            => 'nav',
     43                        'container_id'         => 'menu-header',
     44                        'container_class'      => 'main-menu',
     45                        'container_aria_label' => __( 'Main menu', 'quickpress' ),
     46                        'depth'                => 1,
     47                ) );
     48        }
     49        ?>
     50
     51        <div class="row"> <!-- start row -->
  • quickpress/2.0/index.php

    r183335 r355971  
    11<?php get_header(); ?>
     2
    23<div id="content" class="content column left">
     4        <main>
    35
    4     <main>
    5         <section>
     6                <?php if ( is_home() && ! is_front_page() ) : ?>
     7                        <h1 class="page-title"><?php single_post_title(); ?></h1>
     8                <?php endif; ?>
    69
    7             <?php get_template_part('loop'); ?>
    8             <?php get_template_part('pagination'); ?>
     10                <?php get_template_part( 'loop' ); ?>
     11                <?php get_template_part( 'pagination' ); ?>
    912
    10         </section>
    11     </main>
     13        </main>
     14</div>
    1215
    13 </div>
    1416<?php get_sidebar(); ?>
    1517<?php get_footer(); ?>
  • quickpress/2.0/loop.php

    r183320 r355971  
    1 <?php if (have_posts()): while (have_posts()) : the_post(); ?>
     1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    22
    3 <article <?php post_class() ?> id="post-<?php the_ID(); ?>">
     3<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    44
    5     <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    6        
    7     <small><?php the_time(get_option('date_format')); ?> |
    8         <?php _e( 'By ', 'quickpress' ); the_author(); ?> |
    9         <?php comments_popup_link('No Comments', '1 Comment', '% Comments'); ?>
    10         | <?php _e( 'Filed in: ', 'quickpress' ); the_category(', '); ?>. <?php edit_post_link('Edit'); ?>  </small>
     5        <h2 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
    116
    12     <div class="entry">
     7        <?php quickpress_post_meta(); ?>
    138
    14         <!-- post thumbnail -->
    15         <?php if ( has_post_thumbnail()) : // Check if Thumbnail exists ?>
    16         <p class="alignright">
    17             <a class="thumbnail" href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
    18                 <?php the_post_thumbnail( 'thumbnail' );  ?>
    19             </a>
    20         </p>
    21         <?php endif; ?>
    22         <!-- /post thumbnail -->
     9        <div class="entry">
    2310
    24         <?php the_excerpt(); ?>
    25     </div>
    26  
     11                <?php if ( has_post_thumbnail() ) : ?>
     12                        <a class="post-thumb alignright" href="<?php the_permalink(); ?>" aria-hidden="true" tabindex="-1">
     13                                <?php the_post_thumbnail( 'thumbnail' ); ?>
     14                        </a>
     15                <?php endif; ?>
     16
     17                <?php
     18                if ( quickpress_show_full_posts() ) {
     19                        // Full post, up to a More block if the post has one.
     20                        the_content( esc_html__( 'Read More', 'quickpress' ) . ' &raquo;' );
     21                } else {
     22                        the_excerpt();
     23                }
     24                ?>
     25
     26        </div>
     27
    2728</article>
    2829
    29 <?php endwhile; ?>
    30 <?php else: ?>
     30<?php endwhile; else : ?>
    3131
    32 <article>
    33     <h2>
    34         <?php _e( 'Content Not Found', 'quickpress'); ?>
    35     </h2>
     32<article class="no-results">
     33        <h2><?php esc_html_e( 'Nothing Found', 'quickpress' ); ?></h2>
     34        <p><?php esc_html_e( 'Nothing matched here. Try a search instead.', 'quickpress' ); ?></p>
     35        <?php get_search_form(); ?>
    3636</article>
    3737
  • quickpress/2.0/page.php

    r183335 r355971  
    22
    33<div id="content" class="content column left">
    4     <main>
    5         <section>
    6             <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    7             <article class="post" id="post-<?php the_ID(); ?>">
    8                 <h1><?php the_title(); ?></h1>
    9                
    10                 <div class="entry">
    11                     <?php the_content(); ?>
    12                     <?php wp_link_pages(array(
    13                 'before' => '<div class="page-links"><span class="page-links-title">' . __( '<b>Pages:</b>', 'quickpress' ) . '</span>',
    14                 'after' => '</div>',
    15                 'link_before' => '<span>',
    16                 'link_after'  => '</span>',
    17                 'next_or_number' => 'number'
    18                 ));
    19                 ?>
     4        <main>
    205
    21                 </div>
     6                <?php while ( have_posts() ) : the_post(); ?>
     7                <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    228
    23                 <?php comments_template(); ?>
    24             </article>
     9                        <h1 class="entry-title"><?php the_title(); ?></h1>
    2510
    26             <?php endwhile; ?>
    27             <?php else: ?>
    28             <article>
    29                 <h2>
    30                     <?php _e( 'Content Not Found', 'quickpress'); ?>
    31                 </h2>
    32             </article>
    33             <?php endif; ?>
     11                        <div class="entry">
     12                                <?php the_content(); ?>
    3413
    35             <?php edit_post_link(); ?>
     14                                <?php
     15                                wp_link_pages( array(
     16                                        'before'      => '<div class="page-links"><span class="page-links-title">' . esc_html__( 'Pages:', 'quickpress' ) . '</span>',
     17                                        'after'       => '</div>',
     18                                        'link_before' => '<span>',
     19                                        'link_after'  => '</span>',
     20                                ) );
     21                                ?>
     22                        </div>
    3623
    37         </section>
    38     </main>
     24                        <?php edit_post_link( __( 'Edit', 'quickpress' ), '<p class="post-meta">', '</p>' ); ?>
     25
     26                        <?php
     27                        if ( comments_open() || get_comments_number() ) {
     28                                comments_template();
     29                        }
     30                        ?>
     31
     32                </article>
     33                <?php endwhile; ?>
     34
     35        </main>
    3936</div>
     37
    4038<?php get_sidebar(); ?>
    4139<?php get_footer(); ?>
  • quickpress/2.0/pagination.php

    r128061 r355971  
    1 <nav class="navigation">
    2     <div class="alignleft mainnav">
    3         <?php previous_posts_link(); ?>
    4     </div>
    5     <div class="alignright mainnav">
    6         <?php next_posts_link(); ?>
    7     </div>
    8 </nav>
     1<?php
     2// Numbered page links: « Newer 1 2 3 … Older »
     3the_posts_pagination( array(
     4        'mid_size'  => 1,
     5        'prev_text' => '&laquo; ' . __( 'Newer', 'quickpress' ),
     6        'next_text' => __( 'Older', 'quickpress' ) . ' &raquo;',
     7) );
  • quickpress/2.0/readme.txt

    r128061 r355971  
    1 === QuickPress Theme ===
     1=== QuickPress ===
     2Contributors: quickonlinetips
     3Requires at least: 6.0
     4Tested up to: 7.1
     5Requires PHP: 7.4
     6Stable tag: 2.0
     7License: GPLv2 or later
     8License URI: https://www.gnu.org/licenses/gpl-2.0.html
    29
    3 Theme Name: QuickPress
    4 Theme URI: https://www.quickonlinetips.com/archives/quickpress-wordpress-theme/
    5 Description: A lightweight, 2-3 columns, widget ready, SEO optimized, fast loading, easy to customize wordpress theme.
     10A fast three-column blog theme with room for widgets: one small stylesheet, no JavaScript, nothing to set up. Activate it and start writing.
    611
    7 Author: QuickOnlineTips
    8 Author URI: https://www.quickonlinetips.com/
    9 Tags: white, blue, gray, silver, light, two-columns, three-columns, right-sidebar, fixed-width, threaded-comments, sticky-post
     12== Description ==
    1013
    11 License: GNU General Public License v2.0
    12 License URI: http://www.gnu.org/licenses/gpl-2.0.html
     14QuickPress is for bloggers and growing sites that want room for widgets (recent posts, categories, a newsletter box, an ad or two) without a slow, cluttered page. Your readers get your posts first and fast, and you spend your time writing instead of learning a page builder.
    1315
    14  
     16* **Ultra light and fast.** One small stylesheet, no JavaScript, no web fonts, no frameworks.
     17* **Plug and play.** Activate it and start writing. There is no options panel to learn.
     18* **Familiar and simple.** Set up widgets and menus in the usual Appearance > Widgets and Menus screens. Posts written in the block editor look just right.
     19* **Room for widgets.** Posts on the left; on the right a full-width widget area with two narrow columns below it, so the sidebar can be one, two or three columns. On phones the posts come first, then the widgets.
     20* **Custom-coded.** Every file is hand-written and easy to read if you want to change something in a child theme.
     21* **Modern touches.** Automatic dark mode, text that scales smoothly from phone to desktop, an editor that looks like your site, and clean printouts.
     22
     23Features: header colour and accent colour pickers, dark mode (can be switched off), Full width template for posts and pages, widget areas in the sidebar (full width plus two split columns), below posts and in three footer columns, search box in the header, main menu bar and footer menu with social icons, custom logo, custom background, featured images, Updated date on edited posts, sticky posts, threaded comments, numbered pagination, theme colours and text sizes in the block editor, block styles and patterns, starter content for new sites, Skip to content link, print styles, translation ready.
     24
     25To change the blue header or the pink accent, go to Appearance > Customize > Colours and pick your own. The same screen lets you turn off dark mode if you want the site to always stay light.
     26
     27More about the theme: https://www.quickonlinetips.com/archives/quickpress-wordpress-theme/
     28
     29== Frequently Asked Questions ==
     30
     31= Does QuickPress support the block editor? =
     32
     33Yes for writing posts and pages: block content is styled to match the theme. QuickPress itself is a classic theme, so the site layout is set with widgets and menus, not with the Site Editor.
     34
     35= Where do I add my menu? =
     36
     37Go to Appearance > Menus, create a menu and tick Main Menu (the bar under the header) or Footer Menu.
     38
     39= Why does a new site already show widgets and a menu? =
     40
     41On a brand-new WordPress install, QuickPress offers starter content in Appearance > Customize: sidebar widgets (Recent Posts, Categories, Recent Comments), two footer columns (About, Pages), About and Contact pages and a main menu, so you see the whole design straight away. Nothing is saved until you click Publish, and sites that already have content never see it. Edit or remove any of it in Appearance > Widgets.
     42
     43= Do I need the Classic Widgets plugin? =
     44
     45No. QuickPress uses the block widgets WordPress gives every site. Add any block (Latest Posts, Categories, Paragraph, Image and more) in Appearance > Widgets.
     46
     47= What shows in the sidebar before I add widgets? =
     48
     49Recent Posts across the top, then Categories and Recent Comments side by side, so a new site never looks empty. As soon as you add your own widgets, they take over. If your old widgets were moved to Inactive when you switched themes, drag them into the sidebar areas in Appearance > Widgets.
     50
     51= How do the sidebar areas work? =
     52
     53Sidebar Full runs across the whole right column. Sidebar Split Left and Sidebar Split Right sit side by side under it. Use only Sidebar Full for a two-column site, or all three for three columns. A split area on its own takes the full width.
     54
     55= How do I make a page without the sidebar? =
     56
     57In the editor, open the Post (or Page) settings, find Template and pick "Full width, no sidebar".
     58
     59= Where can I add widgets? =
     60
     61Appearance > Widgets has seven areas: Sidebar Full, Sidebar Split Left, Sidebar Split Right, Below Posts (under each single post, before the comments) and Footer 1, 2 and 3. Empty areas are hidden, so add only what you need.
     62
     63= Can I show full posts on the home page, or shorter excerpts? =
     64
     65Yes. Appearance > Customize > Post Lists lets you show a short excerpt with Read More (the default) or the full post, and set the excerpt length in words. With full posts, add a More block in a post to choose where it breaks. Search results always show excerpts.
     66
     67= How do I add social icons? =
     68
     69Create a menu in Appearance > Menus with links to your profiles (for example https://www.instagram.com/yourname) and assign it to Footer Menu. Links to well-known networks show as small icons; other links stay as text.
     70
     71= Can I turn off dark mode? =
     72
     73Yes. Appearance > Customize > Colours, untick "Dark mode for readers who use it".
     74
     75== Changelog ==
     76
     77= 2.0 - October 2026 =
     78* Automatic dark mode that follows the reader's device, with an off switch
     79* Header colour and accent colour pickers in Customize > Colours
     80* Full width template for posts and pages
     81* New widget areas: Below Posts and three footer columns
     82* Editor looks like the site; theme colours and text sizes in the block editor
     83* Text sizes scale smoothly from phone to desktop
     84* Updated date shown on edited posts
     85* Customize > Post Lists: excerpts or full posts, and the excerpt length
     86* Read More also shows after hand-written excerpts
     87* Print styles
     88* Social links in the Footer Menu show as small icons (X, Facebook, Instagram, LinkedIn, YouTube, GitHub, Pinterest, TikTok, Threads, Bluesky, Mastodon, Reddit, WhatsApp, Telegram, email, RSS)
     89* Block styles (Accent bar for quotes, Soft box for groups) and two block patterns (newsletter sign-up box, about the author)
     90* Block widgets work out of the box; no Classic Widgets plugin needed
     91* Sidebar shows Recent Posts, Categories and Recent Comments until you add widgets
     92* Starter content for new sites: sidebar widgets, footer columns, About and Contact pages, main menu
     93* One stylesheet instead of three; normalize.css replaced by a much smaller reset
     94* One search box in the header instead of two copies; the page no longer scrolls sideways on tablets
     95* Footer Menu, custom logo; the Main Menu keeps its place on existing sites
     96* Numbered pagination, featured image on single posts
     97* Accessibility: Skip to content link, proper screen reader text, visible keyboard focus, underlined links in posts
     98* Styles for block editor content: tables, code, buttons, separators, captions
     99* Archive titles work for tags, authors and dates; search form on empty results and the 404 page
     100* Comments: tighter layout, fixes for password-protected posts and a duplicate id
     101* wp_footer() moved to just before </body>; all text translatable and escaped
     102* Tested up to WordPress 7.1, requires PHP 7.4
     103
     104= 1.9.2 =
     105* Earlier release.
     106
     107== Copyright ==
     108
     109QuickPress WordPress Theme, Copyright 2026 QuickOnlineTips.com
     110QuickPress is distributed under the terms of the GNU GPL v2 or later.
     111
     112== Resources ==
     113
     114* Social icons in inc/social-icons.php: Simple Icons (https://simpleicons.org), CC0 1.0; LinkedIn and Email icons from the Twenty Twenty theme by the WordPress team, GPLv2 or later.
     115* screenshot.png, theme screenshot by QuickOnlineTips, GPLv2 or later. Photos shown in the screenshot:
     116* City skyline above a green park, by Joel Peralta, CC0, https://wordpress.org/photos/photo/8766a7044c/
     117* Green mountain hills under a cloudy sky, by gaby21, CC0, https://wordpress.org/photos/photo/1226a7538f/
     118* Wooden desk with a mug, notebook and plants, by Tawhid Sadman, CC0, https://wordpress.org/photos/photo/19869638f8/
  • quickpress/2.0/search.php

    r183335 r355971  
    11<?php get_header(); ?>
     2
    23<div id="content" class="content column left">
     4        <main>
    35
    4     <main>
    5         <section>
     6                <header class="page-header">
     7                        <h1 class="page-title">
     8                                <?php
     9                                /* translators: %s: search words */
     10                                printf( esc_html__( 'Search Results for: %s', 'quickpress' ), '<span>' . esc_html( get_search_query() ) . '</span>' );
     11                                ?>
     12                        </h1>
     13                </header>
    614
    7             <h1><?php printf( __( 'Search Results for: %s', 'quickpress' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
    8            
    9             <?php get_template_part('loop'); ?>
    10             <?php get_template_part('pagination'); ?>
     15                <?php get_template_part( 'loop' ); ?>
     16                <?php get_template_part( 'pagination' ); ?>
    1117
    12         </section>
    13     </main>
     18        </main>
     19</div>
    1420
    15 </div>
    1621<?php get_sidebar(); ?>
    1722<?php get_footer(); ?>
  • quickpress/2.0/sidebar.php

    r183335 r355971  
    1 <div id="sidebar" class="sidebar column right">
    2     <aside>
     1<?php
     2// The Full width template has no sidebar.
     3if ( quickpress_is_full_width() ) {
     4        return;
     5}
     6?>
     7<aside id="sidebar" class="sidebar column right" aria-label="<?php esc_attr_e( 'Sidebar', 'quickpress' ); ?>">
    38
    4         <!-- Remove this box for pure 3-columns -->
    5         <div id="adbox">
    6             <ul>
    7                 <li>
    8                     <?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
    9                     <?php dynamic_sidebar( 'sidebar-1' ); ?>
    10                                             <?php else : ?>                                             
    11                     <?php endif; ?>
    12                 </li>
    13             </ul>
    14         </div>
    15         <!-- /Remove this box for pure 3-columns -->
     9        <?php
     10        // No widgets yet (a new site, or widgets parked in Inactive): show a few useful blocks.
     11        if ( ! is_active_sidebar( 'sidebar-1' ) && ! is_active_sidebar( 'sidebar-2' ) && ! is_active_sidebar( 'sidebar-3' ) ) {
     12                quickpress_default_sidebar();
     13        }
     14        ?>
    1615
    17         <!-- Start sub-columns -->
    18                 <div class="row">
    19                
    20         <!-- Left_sidebar starts -->
    21         <div id="" class="column subcol">
    22             <ul>
    23                 <li>
    24                     <?php if ( is_active_sidebar( 'sidebar-2' ) ) : ?>
    25                     <?php dynamic_sidebar( 'sidebar-2' ); ?>
    26                                        
    27                     <?php endif; ?>
    28                 </li>
    29             </ul>
    30         </div>
    31         <!-- /l_sidebar-->
     16        <?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
     17                <div class="sidebar-full">
     18                        <?php dynamic_sidebar( 'sidebar-1' ); ?>
     19                </div>
     20        <?php endif; ?>
    3221
    33         <!-- Right_sidebar starts -->
    34         <div id="" class="column subcol">
    35             <ul>
    36                 <li>
    37                     <?php if ( is_active_sidebar( 'sidebar-3' ) ) : ?>
    38                                         <?php dynamic_sidebar( 'sidebar-3' ); ?>
    39                                        
    40                     <?php endif; ?>
    41                 </li>
    42             </ul>
    43         </div>
    44         <!-- /r_sidebar-->
     22        <?php if ( is_active_sidebar( 'sidebar-2' ) || is_active_sidebar( 'sidebar-3' ) ) : ?>
     23                <div class="sidebar-split">
     24                        <?php if ( is_active_sidebar( 'sidebar-2' ) ) : ?>
     25                                <div class="subcol">
     26                                        <?php dynamic_sidebar( 'sidebar-2' ); ?>
     27                                </div>
     28                        <?php endif; ?>
     29                        <?php if ( is_active_sidebar( 'sidebar-3' ) ) : ?>
     30                                <div class="subcol">
     31                                        <?php dynamic_sidebar( 'sidebar-3' ); ?>
     32                                </div>
     33                        <?php endif; ?>
     34                </div>
     35        <?php endif; ?>
    4536
    46                 </div>   <!-- End sub-columns -->
    47 
    48     </aside>
    49 </div>
    50 <!-- /sidebar-->
     37</aside>
     38<!-- /sidebar -->
  • quickpress/2.0/single.php

    r183335 r355971  
    11<?php get_header(); ?>
     2
    23<div id="content" class="content column left">
    3     <main>
    4         <section>
     4        <main>
    55
    6             <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    7             <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    8                
    9                 <h1><?php the_title(); ?></h1>
    10                
    11                 <small><a href="<?php the_permalink() ?>"><?php the_time(get_option('date_format')); ?></a> | <?php _e( 'By ', 'quickpress' ); the_author(); ?> | <?php _e( 'Filed in: ', 'quickpress' ); the_category(', '); ?>. <?php edit_post_link('Edit'); ?>  </small>
     6                <?php while ( have_posts() ) : the_post(); ?>
     7                <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    128
    13                 <div class="entry">
    14                     <?php the_content(); ?>
     9                        <h1 class="entry-title"><?php the_title(); ?></h1>
    1510
    16                     <?php if (is_attachment()) { ?>
    17                     <span class="alignleft"><?php previous_image_link( false, '&larr; Previous' ); ?></span>
    18                     <span class="alignright"><?php next_image_link( false, 'Next &rarr;'); ?></span>
    19                     <?php } ?>
    20                     <br />
     11                        <?php quickpress_post_meta( false ); ?>
    2112
    22                     <?php wp_link_pages(array(
    23                 'before' => '<div class="page-links"><span class="page-links-title">' . __( '<b>Pages:</b>', 'quickpress' ) . '</span>',
    24                 'after' => '</div>',
    25                 'link_before' => '<span>',
    26                 'link_after'  => '</span>',
    27                 'next_or_number' => 'number'
    28                 ));
    29                 ?>
     13                        <div class="entry">
    3014
    31                     <p>
    32                         <?php the_tags( __( 'Tags: ', 'quickpress' ), ', ', ''); ?>
    33                     </p>
     15                                <?php if ( has_post_thumbnail() && ! is_attachment() ) : ?>
     16                                        <figure class="post-image"><?php the_post_thumbnail( 'large' ); ?></figure>
     17                                <?php endif; ?>
    3418
    35                     <div class="navigation">
    36                         <div class="alignleft">
    37                             <?php previous_post_link('&laquo; %link') ?>
    38                         </div>
    39                         <div class="alignright">
    40                             <?php next_post_link('%link &raquo;') ?>
    41                         </div>
    42                     </div>
     19                                <?php the_content(); ?>
    4320
    44                     <?php comments_template(); ?>
    45                 </div>
    46             </article>
    47            
    48             <?php endwhile; ?>
    49             <?php else: ?>
    50             <article>
    51                 <h2>
    52                     <?php _e( 'Content Not Found', 'quickpress'); ?>
    53                 </h2>
    54             </article>
    55             <?php endif; ?>
     21                                <?php if ( is_attachment() ) : ?>
     22                                        <nav class="navigation image-nav">
     23                                                <span class="alignleft"><?php previous_image_link( false, '&larr; ' . __( 'Previous', 'quickpress' ) ); ?></span>
     24                                                <span class="alignright"><?php next_image_link( false, __( 'Next', 'quickpress' ) . ' &rarr;' ); ?></span>
     25                                        </nav>
     26                                <?php endif; ?>
    5627
     28                                <?php
     29                                wp_link_pages( array(
     30                                        'before'      => '<div class="page-links"><span class="page-links-title">' . esc_html__( 'Pages:', 'quickpress' ) . '</span>',
     31                                        'after'       => '</div>',
     32                                        'link_before' => '<span>',
     33                                        'link_after'  => '</span>',
     34                                ) );
     35                                ?>
    5736
    58         </section>
    59     </main>
    60     </div>
    61     <?php get_sidebar(); ?>
    62     <?php get_footer(); ?>
     37                                <?php the_tags( '<p class="post-tags">' . esc_html__( 'Tags: ', 'quickpress' ), ', ', '</p>' ); ?>
     38
     39                        </div>
     40
     41                        <?php if ( ! is_attachment() && is_active_sidebar( 'after-post' ) ) : ?>
     42                                <aside class="after-post widget-area" aria-label="<?php esc_attr_e( 'Below post', 'quickpress' ); ?>">
     43                                        <?php dynamic_sidebar( 'after-post' ); ?>
     44                                </aside>
     45                        <?php endif; ?>
     46
     47                        <?php if ( ! is_attachment() ) : ?>
     48                                <nav class="navigation post-nav" aria-label="<?php esc_attr_e( 'Posts', 'quickpress' ); ?>">
     49                                        <div class="alignleft"><?php previous_post_link( '&laquo; %link' ); ?></div>
     50                                        <div class="alignright"><?php next_post_link( '%link &raquo;' ); ?></div>
     51                                </nav>
     52                        <?php endif; ?>
     53
     54                        <?php
     55                        if ( comments_open() || get_comments_number() ) {
     56                                comments_template();
     57                        }
     58                        ?>
     59
     60                </article>
     61                <?php endwhile; ?>
     62
     63        </main>
     64</div>
     65
     66<?php get_sidebar(); ?>
     67<?php get_footer(); ?>
  • quickpress/2.0/style.css

    r183335 r355971  
    22Theme Name: QuickPress
    33Theme URI: https://www.quickonlinetips.com/archives/quickpress-wordpress-theme/
    4 Description: A lightweight, 2-3 columns, widget ready, SEO optimized, fast loading, easy to customize WordPress theme.
    5 Version: 1.9.2
    6 Requires at least: 5.0
    7 Tested up to: 6.1
    8 Requires PHP: 7.0
     4Description: QuickPress is a fast three-column blog theme for bloggers and growing sites that want room for widgets without slowing down. One small stylesheet, no JavaScript and no web fonts, so pages load instantly, and there is nothing to set up: activate it and start writing. A coloured header with your site title and a search box, a menu bar, posts on the left, and on the right a full-width widget area with two narrow columns below it. Includes automatic dark mode, header and accent colour pickers, a full width template, footer widgets, featured images and print styles. Uses the familiar Widgets and Menus screens and works with the block editor.
     5Version: 2.0
     6Requires at least: 6.0
     7Tested up to: 7.1
     8Requires PHP: 7.4
    99Author: QuickOnlineTips
    1010Author URI: https://www.quickonlinetips.com/
    11 Tags: two-columns, three-columns, right-sidebar, threaded-comments, sticky-post, custom-background
     11Tags: blog, two-columns, three-columns, right-sidebar, custom-background, custom-colors, custom-logo, custom-menu, editor-style, featured-images, footer-widgets, full-width-template, block-styles, sticky-post, threaded-comments, translation-ready
    1212Text Domain: quickpress
    13 License: GNU General Public License v2.0
    14 License URI: http://www.gnu.org/licenses/gpl-2.0.html
    15 QuickPress WordPress Theme, Copyright 2019 QuickOnlineTips.com
    16 QuickPress is distributed under the terms of the GNU GPL
     13License: GNU General Public License v2 or later
     14License URI: https://www.gnu.org/licenses/gpl-2.0.html
     15
     16QuickPress WordPress Theme, Copyright 2026 QuickOnlineTips.com
     17QuickPress is distributed under the terms of the GNU GPL.
    1718*/
    1819
    19 
    20 /* Begin Typography &amp; Colors
    21 ------------------------------------- */
     20/* Contents
     21-------------------------------------
     221. Settings (colours and fonts), dark mode
     232. QuickReset (replaces normalize.css)
     243. QuickGrid (page layout)
     254. Typography
     265. Header and menu bar
     276. Posts and pages
     287. Images and block content
     298. Sidebar
     309. Comments and forms
     3110. Navigation
     3211. Footer
     3312. Accessibility
     3413. Phones and tablets
     3514. Print
     36------------------------------------- */
     37
     38
     39/* 1. Settings
     40   Change these few values to recolour the whole theme.
     41------------------------------------- */
     42
     43:root {
     44        --qp-brand: #2a6496;   /* header band, footer band, menu bar, links */
     45        --qp-accent: #c32364;  /* widget headings, buttons, highlights */
     46        --qp-text: #333;
     47        --qp-muted: #707070;
     48        --qp-border: #ddd;
     49        --qp-line: #eee;
     50        --qp-soft: #f6f6f6;
     51        --qp-bg: #fff;
     52        --qp-page-bg: #ede8e2; /* around the page on wide screens */
     53        --qp-link: color-mix(in srgb, var(--qp-brand) 60%, #0050b4); /* a richer blue than the header */
     54        --qp-band: var(--qp-brand); /* the header band */
     55        --qp-on-brand: #fff;
     56        --qp-on-accent: #fff;
     57        --qp-accent-text: var(--qp-accent); /* accent-coloured words */
     58        --qp-menu: color-mix(in srgb, var(--qp-brand) 20%, #fff);
     59        --qp-footer: color-mix(in srgb, var(--qp-brand) 80%, #000);
     60        --qp-footer-tint: color-mix(in srgb, var(--qp-brand) 8%, #fff); /* behind footer widgets */
     61        --qp-page-edge: rgba(0, 0, 0, 0.07); /* hairline around the page on wide screens */
     62        --qp-field: #fff;
     63        --qp-field-border: #bbb;
     64        --qp-alt: #f9f9f9;
     65        --qp-author: #f5fafa;
     66        --qp-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
     67        --qp-heading-font: var(--qp-font); /* the same system font, in bold */
     68        --qp-mono: ui-monospace, Menlo, Consolas, "Courier New", monospace;
     69}
     70
     71
     72/* Dark mode
     73   Follows the reader's device setting. The blue is deepened for the bands
     74   and lightened for links, so any colour the owner picks stays readable.
     75   Owners can switch this off in Customize > Colours.
     76------------------------------------- */
     77
     78@media (prefers-color-scheme: dark) {
     79        body:not(.qp-light-only) {
     80                --qp-text: #e4e4e4;
     81                --qp-muted: #a3a3a3;
     82                --qp-border: #3a3a3a;
     83                --qp-line: #2a2a2a;
     84                --qp-soft: #262626;
     85                --qp-bg: #171717;
     86                --qp-page-bg: #0d0d0d;
     87                --qp-link: color-mix(in srgb, var(--qp-brand) 55%, #fff);
     88                --qp-accent-text: color-mix(in srgb, var(--qp-accent) 65%, #fff);
     89                --qp-band: color-mix(in srgb, var(--qp-brand) 70%, #000);
     90                --qp-menu: color-mix(in srgb, var(--qp-brand) 25%, #1c1c1c);
     91                --qp-footer: color-mix(in srgb, var(--qp-brand) 45%, #000);
     92                --qp-footer-tint: color-mix(in srgb, var(--qp-brand) 14%, #171717);
     93                --qp-page-edge: rgba(255, 255, 255, 0.08);
     94                --qp-field: #1f1f1f;
     95                --qp-field-border: #555;
     96                --qp-alt: #1d1d1d;
     97                --qp-author: #17252b;
     98                color-scheme: dark;
     99        }
     100}
     101
     102
     103/* 2. QuickReset
     104   The few fixes modern browsers still need.
     105------------------------------------- */
     106
     107*,
     108*::before,
     109*::after {
     110        box-sizing: border-box;
     111}
     112
     113html {
     114        -webkit-text-size-adjust: 100%;
     115        text-size-adjust: 100%;
     116}
    22117
    23118body {
    24         font-size: 82.5%;
    25     font-family: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next",
    26     "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
    27     "Droid Sans", "Helvetica Neue", sans-serif;
    28     background: #EDE8E2;
    29     color: #333;
    30 }
     119        margin: 0;
     120}
     121
     122img,
     123svg,
     124video,
     125iframe {
     126        max-width: 100%;
     127}
     128
     129img,
     130video {
     131        height: auto;
     132}
     133
     134button,
     135input,
     136select,
     137textarea {
     138        font: inherit;
     139        color: inherit;
     140}
     141
     142pre,
     143code,
     144kbd {
     145        font-family: var(--qp-mono);
     146        font-size: 0.9em;
     147}
     148
     149sub,
     150sup {
     151        font-size: 75%;
     152        line-height: 0;
     153        position: relative;
     154}
     155
     156sup {
     157        top: -0.5em;
     158}
     159
     160sub {
     161        bottom: -0.25em;
     162}
     163
     164table {
     165        border-collapse: collapse;
     166}
     167
     168
     169/* 3. QuickGrid
     170   Wide screens: posts on the left (2/3), widgets on the right (1/3).
     171   The right column has a full-width area on top, then two narrow columns.
     172   Phones: posts, then widgets.
     173------------------------------------- */
    31174
    32175#page {
    33     background-color: #FFF;
    34     text-align: left;
    35 }
    36 
    37 #header {
    38     background: #2a6496;
     176        max-width: 1000px;
     177        margin: 0 auto;
     178        background: var(--qp-bg);
     179        box-shadow: 0 0 0 1px var(--qp-page-edge), 0 2px 14px var(--qp-page-edge); /* lifts the page off the background */
     180}
     181
     182.row {
     183        display: grid;
     184        grid-template-columns: 2fr 1fr;
     185        grid-template-areas: "content sidebar";
    39186}
    40187
    41188#content {
    42     font-size: 1.1em;
    43     background: #fff;
    44 }
    45 
    46 .content .entry {
    47     line-height: 1.6em;
    48 }
    49 
    50 .content .postmetadata {}
    51 
    52 .thread-alt {
    53     background-color: #f3f3f3;
    54 }
    55 
    56 .thread-even {
    57     background-color: white;
    58 }
    59 
    60 .depth-1 {
    61     border: 1px solid #ddd;
    62 }
    63 
    64 .even,
    65 .alt {
    66     border-left: 1px solid #ddd;
    67 }
    68 
    69 #footer {
    70     background: #14568A;
    71     border: none;
    72 }
    73 
    74 small {
    75     font-size: 0.9em;
    76     line-height: 2em;
     189        grid-area: content;
     190        min-width: 0;
     191}
     192
     193#sidebar {
     194        grid-area: sidebar;
     195        min-width: 0;
     196}
     197
     198.column {
     199        padding: 20px 25px;
     200}
     201
     202.sidebar-split {
     203        display: grid;
     204        grid-template-columns: 1fr 1fr;
     205        gap: 0 18px;
     206}
     207
     208/* Full width template: no right column, the post runs across the page */
     209.qp-full-width .row {
     210        grid-template-columns: 1fr;
     211        grid-template-areas: "content";
     212}
     213
     214/* One split column alone takes the full width */
     215.sidebar-split > .subcol:only-child {
     216        grid-column: 1 / -1;
     217}
     218
     219.subcol {
     220        min-width: 0;
     221}
     222
     223
     224/* 4. Typography
     225------------------------------------- */
     226
     227body {
     228        font-family: var(--qp-font);
     229        font-size: 0.825rem; /* about 13px: compact, like the original QuickPress */
     230        line-height: 1.5;
     231        color: var(--qp-text);
     232        background: var(--qp-page-bg);
    77233}
    78234
    … …  
    80236h2,
    81237h3,
     238h4,
     239h5,
     240h6 {
     241        font-family: var(--qp-heading-font);
     242        font-weight: bold;
     243        line-height: 1.25;
     244        margin: 1.2em 0 0.4em;
     245}
     246
     247/* Headings grow smoothly from phone to desktop */
     248h1 {
     249        font-size: clamp(1.55em, 1.3em + 1vw, 1.9em);
     250}
     251
     252h2 {
     253        font-size: clamp(1.35em, 1.2em + 0.7vw, 1.6em);
     254}
     255
     256h3 {
     257        font-size: clamp(1.15em, 1.08em + 0.35vw, 1.3em);
     258}
     259
    82260h4 {
    83     font-weight: bold;
    84         margin: 0;
    85 }
    86 
    87 #content h1 {
    88     font-size: 1.9em;
    89     text-align: left;
    90 }
    91 
    92 #header td {
    93     font-size: 1em;
    94 }
    95 
    96 #header h1 {
    97     font-size: 1em;
    98     font-weight: bold;
    99     margin: 0px 0;
    100     padding: 0;
    101 }
    102 
    103 .blogtitle {
    104     font-size: 2.5em !important;
    105     text-align: left;
    106     font-weight: bold;
    107     margin: 10px 0 0 0;
    108     padding: 0;
    109 }
    110 
    111 .description {
    112     padding: 5px;
    113     color: #ccc;
    114     font-size: 1.1em;
    115     text-align: left;
    116 }
    117 
    118 h2 {
    119     font-size: 1.8em;
    120     text-align: left;
    121 }
    122 
    123 h2.pagetitle {
    124     font-size: 1.6em;
    125 }
    126 
    127 #sidebar h2 {
    128     font-size: 1.2em;
    129 }
    130 
    131 h3 {
    132     font-size: 1.3em;
    133 }
    134 
    135 #header h1,
     261        font-size: 1.1em;
     262}
     263
     264a {
     265        color: var(--qp-link);
     266        text-decoration: none;
     267}
     268
     269a:hover {
     270        color: var(--qp-accent-text);
     271        text-decoration: underline;
     272}
     273
    136274h1 a,
     275h2 a,
     276h3 a {
     277        color: var(--qp-text);
     278}
     279
    137280h1 a:hover,
    138 h1 a:visited {
    139     text-decoration: none;
    140     color: white;
    141 }
    142 
    143 h1,
    144 h1 a,
    145 h1 a:hover,
    146 h1 a:visited {
    147     text-decoration: none;
    148     color: #333;
    149 }
    150 
    151 h2,
    152 h2 a,
    153 h2 a:visited,
    154 h3,
    155 h3 a,
    156 h3 a:visited {
    157     color: #333;
    158 }
    159 
    160 h2,
    161 h2 a,
    162 h2 a:hover,
    163 h2 a:visited,
    164 h3,
    165 h3 a,
    166 h3 a:hover,
    167 h3 a:visited,
    168 #sidebar h2,
    169 #sidebar h4,
    170 #wp-calendar caption,
    171 cite {
    172     text-decoration: none;
    173 }
    174 
    175 #sidebar h4 {
    176     font-size: 1.1em;
    177 }
    178 
    179 .commentlist li,
    180 #commentform input,
    181 #commentform textarea {
    182     }
    183 
    184 .commentlist li {
    185     font-weight: normal;
    186 }
    187 
    188 .commentlist li .avatar {
    189     float: left;
    190     padding: 0 12px 0 0;
    191 }
    192 
    193 .commentlist cite,
    194 .commentlist cite a {
    195     font-weight: bold;
    196     font-style: normal;
    197     font-size: 1.1em;
    198 }
    199 
    200 .commentlist p {
    201     font-weight: normal;
    202     line-height: 1.5em;
    203     text-transform: none;
    204 }
    205 
    206 #commentform p {
    207     }
    208 
    209 .commentmetadata {
    210     font-weight: normal;
    211 }
    212 
    213 small,
    214 #sidebar ul ul li,
    215 #sidebar ul ol li,
    216 .nocomments,
    217 .postmetadata,
    218 blockquote,
    219 strike {
    220     color: #777;
    221 }
    222 
    223 pre {
    224     font: 1em 'Courier New', Courier, Fixed;
    225     color: #666;
    226     background: #F8F8F8;
    227     padding: 5px;
    228     line-height: 1.5em;
    229     border: 1px solid #ddd;
    230     overflow-x: auto;
    231     /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */
    232     white-space: pre-wrap;
    233     /* css-3 */
    234     white-space: -moz-pre-wrap !important;
    235     /* Mozilla, since 1999 */
    236     white-space: -pre-wrap;
    237     /* Opera 4-6 */
    238     white-space: -o-pre-wrap;
    239     /* Opera 7 */
    240     /* width: 99%; */
    241     word-wrap: break-word;
    242     /* Internet Explorer 5.5+ */
    243 }
    244 
    245 code {
    246     font: 1.1em 'Courier New', Courier, Fixed;
    247     color: #008000;
    248     padding: 0 2px;
    249     background: #fff;
    250     line-height: 1.5em;
    251     overflow: auto;
    252 }
    253 
    254 acronym,
    255 abbr,
    256 span.caps {
    257     font-size: 0.9em;
    258     letter-spacing: .07em;
    259 }
    260 
    261 a,
    262 a:visited,
    263281h2 a:hover,
    264282h3 a:hover {
    265     color: #06C;
    266     text-decoration: none;
    267 }
    268 
    269 a:hover {
    270     color: #C32364;
     283        color: var(--qp-link);
     284        text-decoration: none;
     285}
     286
     287small {
     288        font-size: 0.85em;
     289}
     290
     291blockquote {
     292        margin: 1.5em 0;
     293        padding: 0 0 0 20px;
     294        border-left: 4px solid color-mix(in srgb, var(--qp-brand) 50%, var(--qp-bg));
     295        color: var(--qp-muted);
     296}
     297
     298blockquote cite {
     299        display: block;
     300        margin-top: 5px;
     301        font-size: 0.9em;
     302}
     303
     304pre {
     305        background: var(--qp-soft);
     306        border: 1px solid var(--qp-border);
     307        padding: 10px 12px;
     308        line-height: 1.5;
     309        overflow-x: auto;
     310        white-space: pre-wrap;
     311        word-wrap: break-word;
     312}
     313
     314code {
     315        background: var(--qp-soft);
     316        padding: 1px 4px;
     317        border-radius: 3px;
     318}
     319
     320pre code {
     321        background: none;
     322        padding: 0;
     323}
     324
     325abbr[title] {
     326        cursor: help;
     327        text-decoration: underline dotted;
     328}
     329
     330hr {
     331        border: 0;
     332        border-top: 1px solid var(--qp-border);
     333        margin: 2em 0;
     334}
     335
     336dt {
     337        font-weight: bold;
     338}
     339
     340dd {
     341        margin: 0 0 10px 20px;
     342}
     343
     344.center {
     345        text-align: center;
     346}
     347
     348
     349/* 5. Header and menu bar
     350------------------------------------- */
     351
     352/* The coloured header band: site title on the left, search on the right */
     353#header {
     354        display: flex;
     355        align-items: center;
     356        justify-content: space-between;
     357        gap: 15px 30px;
     358        padding: 25px 30px;
     359        background: var(--qp-band);
     360        color: var(--qp-on-brand);
     361}
     362
     363.site-branding {
     364        min-width: 0;
     365}
     366
     367/* The site title: bigger and heavier than any post heading,
     368   with a short accent bar underneath so it reads as the name of the site */
     369.site-title {
     370        font-family: var(--qp-heading-font);
     371        font-size: clamp(1.9em, 1.5em + 1.4vw, 2.5em);
     372        font-weight: 800;
     373        letter-spacing: -0.03em;
     374        line-height: 1.1;
     375        margin: 0;
     376        overflow-wrap: anywhere;
     377}
     378
     379.site-title::after {
     380        content: "";
     381        display: block;
     382        width: 42px;
     383        height: 4px;
     384        margin-top: 9px;
     385        border-radius: 2px;
     386        background: var(--qp-accent);
     387}
     388
     389.site-title a,
     390.site-title a:hover {
     391        color: var(--qp-on-brand);
     392        text-decoration: none;
     393}
     394
     395.site-title a:hover {
     396        opacity: 0.85;
     397}
     398
     399.custom-logo-link {
     400        display: inline-block;
     401        margin-bottom: 10px;
     402}
     403
     404.custom-logo {
     405        display: block;
     406        max-height: 100px;
     407        width: auto;
     408}
     409
     410.description {
     411        margin: 8px 0 0;
     412        font-size: 1.05em;
     413        line-height: 1.4;
     414        color: color-mix(in srgb, var(--qp-on-brand) 80%, var(--qp-band));
     415}
     416
     417.header-search {
     418        flex: 0 1 270px;
     419}
     420
     421.header-search .search-form {
     422        margin: 0;
     423}
     424
     425/* The light menu bar under the header */
     426.main-menu {
     427        background: var(--qp-menu);
     428        padding: 9px 30px;
     429        border-bottom: 1px solid var(--qp-border);
     430}
     431
     432.main-menu ul {
     433        list-style: none;
     434        margin: 0;
     435        padding: 0;
     436        display: flex;
     437        flex-wrap: wrap;
     438        gap: 4px 22px;
     439}
     440
     441.main-menu a {
     442        color: var(--qp-text);
     443        font-weight: bold;
     444        text-transform: uppercase;
     445        letter-spacing: 0.02em;
     446}
     447
     448.main-menu a:hover,
     449.main-menu .current-menu-item > a {
     450        color: var(--qp-accent-text);
     451}
     452
     453/* The page you are on: a short accent bar under its menu link,
     454   the same mark as under the site title */
     455.main-menu li {
     456        position: relative;
     457}
     458
     459.main-menu .current-menu-item > a::after {
     460        content: "";
     461        position: absolute;
     462        left: 0;
     463        bottom: -6px;
     464        width: 22px;
     465        height: 3px;
     466        border-radius: 2px;
     467        background: var(--qp-accent);
     468}
     469
     470
     471/* 6. Posts and pages
     472------------------------------------- */
     473
     474#content {
     475        font-size: 1.1em; /* about 14.5px, like the original */
     476}
     477
     478#content main > :first-child,
     479.entry-title,
     480.page-title {
     481        margin-top: 0;
     482}
     483
     484/* Space between posts (not comments, which are also <article>s) */
     485#content main > article {
     486        margin: 0 0 30px;
     487}
     488
     489.page-header {
     490        margin-bottom: 20px;
     491}
     492
     493.archive-description {
     494        color: var(--qp-muted);
     495}
     496
     497.entry-title {
     498        margin-bottom: 2px;
     499}
     500
     501/* Post titles in lists: as large as the original QuickPress (1.8em, about 26px) */
     502#content main > article > h2.entry-title {
     503        font-size: clamp(1.4em, 1.2em + 0.9vw, 1.8em);
     504}
     505
     506.post-meta {
     507        margin: 0 0 6px;
     508        line-height: 1.4;
     509        font-size: 0.85em;
     510        color: var(--qp-muted);
     511}
     512
     513.entry {
     514        border-top: 1px solid var(--qp-border);
     515        line-height: 1.6;
     516        display: flow-root; /* keeps floated images inside the post */
    271517}
    272518
    273519.entry a {
    274     text-decoration: none;
     520        text-decoration: underline;
     521        text-underline-offset: 2px;
    275522}
    276523
    277524.entry a:hover {
    278     text-decoration: underline;
    279 }
    280 
    281 #sidebar a {
    282     text-decoration: none;
    283 }
    284 
    285 #sidebar a:hover {
    286     text-decoration: underline;
    287 }
    288 
    289 .sticky {}
    290 
    291 
    292 /* Begin Structure
    293 ------------------------------------- */
    294 
    295 body {
    296     margin: 0 0;
    297     padding: 0 0 0 0;
    298 }
    299 
    300 #page {
    301     background-color: white;
    302     margin: 0px auto 0;
    303     padding: 0;
    304     width: 1000px;
    305 }
    306 
    307 #header {
    308     padding: 25px 30px;
    309 }
    310 
    311 #header a {
    312     color: #f3f3f3;
    313     text-decoration: none;
    314 }
    315 
    316 #header a:hover {
    317     color: #ccc;
    318 }
    319 
    320 #adsbar {
    321     font-family: Arial, Helvetica, Sans-Serif;
    322     font-size: 1.0em;
    323     background: #D1E5EE;
    324     font-weight: bold;
    325     line-height: 1.9em;
    326     color: #333;
    327     margin: 0 0 10px 0;
    328     border-bottom: 1px solid #DDD;
    329     padding: 10px 0px 10px 30px;
    330     text-align: left;
    331 }
    332 
    333 #adsbar a {
    334     text-transform: uppercase;
    335     text-decoration: underline;
    336     margin-right: 5px;
    337     border: 0px solid #DDD;
    338     padding: 5px;
    339     color: #333;
    340 }
    341 
    342 #adsbar a:hover {
    343     text-decoration: none;
    344 }
    345 
    346 .post {
    347     margin: 10px 0;
    348     text-align: left;
    349     background: #ffffff;
    350     padding: 0;
    351 }
    352 
    353 .post hr {
    354     display: block;
    355 }
    356 
    357 .entry {
    358     border-top: 1px solid #ddd;
    359     overflow: hidden;
    360 }
    361 
    362 .entry p {}
    363 
    364 .column .postmetadata {
    365     padding-top: 5px;
    366 }
    367 
     525        text-decoration-thickness: 2px;
     526}
     527
     528.entry > :first-child {
     529        margin-top: 10px;
     530}
     531
     532.read-more,
     533.more-link {
     534        white-space: nowrap;
     535}
     536
     537.sticky {
     538        border-left: 3px solid var(--qp-accent);
     539        padding-left: 15px;
     540}
     541
     542.post-tags {
     543        font-size: 0.9em;
     544        color: var(--qp-muted);
     545}
     546
     547.page-links {
     548        margin: 1.5em 0;
     549}
     550
     551.page-links > span,
     552.page-links > a {
     553        margin-right: 5px;
     554}
     555
     556
     557/* 7. Images and block content
     558------------------------------------- */
     559
     560.alignleft {
     561        float: left;
     562        margin: 5px 20px 10px 0;
     563}
     564
     565.alignright {
     566        float: right;
     567        margin: 5px 0 10px 20px;
     568}
     569
     570.aligncenter {
     571        display: block;
     572        margin-left: auto;
     573        margin-right: auto;
     574        text-align: center;
     575}
     576
     577.alignwide,
     578.alignfull {
     579        max-width: 100%;
     580}
     581
     582.post-thumb img {
     583        display: block;
     584}
     585
     586.post-image {
     587        margin: 15px 0;
     588}
     589
     590.post-image img {
     591        display: block;
     592}
     593
     594figure {
     595        margin: 1.5em 0;
     596}
     597
     598.wp-caption {
     599        max-width: 100%;
     600}
     601
     602.wp-caption-text,
     603.gallery-caption,
     604figcaption {
     605        font-size: 0.85em;
     606        color: var(--qp-muted);
     607        text-align: center;
     608        margin-top: 5px;
     609}
     610
     611.gallery {
     612        display: grid;
     613        grid-template-columns: repeat(3, 1fr);
     614        gap: 10px;
     615        margin: 1.5em 0;
     616}
     617
     618.gallery-columns-1 { grid-template-columns: 1fr; }
     619.gallery-columns-2 { grid-template-columns: repeat(2, 1fr); }
     620.gallery-columns-4 { grid-template-columns: repeat(4, 1fr); }
     621.gallery-columns-5 { grid-template-columns: repeat(5, 1fr); }
     622
     623.gallery-item {
     624        margin: 0;
     625        text-align: center;
     626}
     627
     628.entry table,
     629.wp-block-table table {
     630        width: 100%;
     631        margin: 1.5em 0;
     632}
     633
     634.entry th,
    368635.entry td {
    369     padding: 5px;
    370     border: 1px solid #DDD;
    371 }
    372 
    373 .postmetadata {
    374     clear: left;
    375 }
     636        padding: 6px 8px;
     637        border: 1px solid var(--qp-border);
     638        text-align: left;
     639}
     640
     641.entry th {
     642        background: var(--qp-soft);
     643}
     644
     645.wp-block-button__link,
     646.wp-element-button {
     647        background: var(--qp-accent);
     648        color: var(--qp-on-accent);
     649        border-radius: 6px;
     650        text-decoration: none;
     651}
     652
     653.entry .wp-block-button__link {
     654        text-decoration: none;
     655}
     656
     657.wp-block-pullquote {
     658        border-top: 3px solid var(--qp-accent);
     659        border-bottom: 3px solid var(--qp-accent);
     660}
     661
     662.wp-block-pullquote blockquote {
     663        border: 0;
     664        padding: 0;
     665}
     666
     667/* Query Loop and post blocks inside a post: a compact list in a light box,
     668   so the listed posts don't look like the page's own post titles */
     669.entry .wp-block-query {
     670        margin: 1.5em 0;
     671        padding: 12px 16px;
     672        border: 1px solid var(--qp-border);
     673        border-radius: 6px;
     674}
     675
     676.entry .wp-block-post-template {
     677        list-style: none;
     678        margin: 0;
     679        padding: 0;
     680}
     681
     682.entry .wp-block-post-template > li {
     683        margin: 0 0 12px;
     684}
     685
     686.entry .wp-block-query .wp-block-post-title {
     687        font-size: 1.1em;
     688        margin: 0 0 2px;
     689}
     690
     691.entry .wp-block-post-date {
     692        font-size: 0.85em;
     693        color: var(--qp-muted);
     694}
     695
     696.entry .wp-block-query-pagination {
     697        margin-top: 10px;
     698        gap: 6px;
     699}
     700
     701.entry .wp-block-query-pagination a {
     702        text-decoration: none;
     703}
     704
     705/* Block styles from the editor's Styles panel */
     706.is-style-qp-accent,
     707.wp-block-quote.is-style-qp-accent {
     708        margin: 1.5em 0;
     709        padding: 2px 0 2px 16px;
     710        border-left: 4px solid var(--qp-accent);
     711        color: var(--qp-text);
     712        font-size: 1.1em;
     713}
     714
     715.is-style-qp-soft-box {
     716        margin: 1.5em 0;
     717        padding: 14px 18px;
     718        background: var(--qp-soft);
     719        border-left: 3px solid var(--qp-accent);
     720        border-radius: 0 6px 6px 0;
     721}
     722
     723.is-style-qp-soft-box > :first-child {
     724        margin-top: 0;
     725}
     726
     727.is-style-qp-soft-box > :last-child {
     728        margin-bottom: 0;
     729}
     730
     731/* Blocks with their own background colour: keep text off the edges */
     732.entry :is(p, h2, h3, h4, .wp-block-group, .wp-block-column, .wp-block-columns).has-background {
     733        padding: 1em 1.25em;
     734        border-radius: 6px;
     735}
     736
     737
     738/* 8. Sidebar
     739------------------------------------- */
     740
     741#sidebar {
     742        line-height: 1.45;
     743}
     744
     745.widget {
     746        margin: 0 0 22px;
     747}
     748
     749/* Widget headings, sidebar and footer alike: capitals in the accent colour
     750   over a thin line, the QuickPress look since the first version */
     751.widget-title,
     752#sidebar h2,
     753.footer-widgets h2 {
     754        display: block;
     755        font-size: 1.05em;
     756        text-transform: uppercase;
     757        letter-spacing: 0.03em;
     758        color: var(--qp-accent-text);
     759        margin: 0 0 6px;
     760        padding-bottom: 3px;
     761        border-bottom: 1px solid var(--qp-accent);
     762}
     763
     764#sidebar ul,
     765#sidebar ol {
     766        list-style: none;
     767        margin: 0;
     768        padding: 0;
     769}
     770
     771/* Sidebar lists: one line per item with a light rule between */
     772#sidebar li {
     773        padding: 3px 0;
     774        border-bottom: 1px solid var(--qp-line);
     775}
     776
     777#sidebar li li:last-child {
     778        border-bottom: 0;
     779}
     780
     781/* "12 more" at the end of a long list (sidebar and footer): opens in place, no JavaScript */
     782.qp-more summary {
     783        cursor: pointer;
     784        color: var(--qp-link);
     785        font-weight: 600;
     786        list-style-position: inside;
     787}
     788
     789.qp-more summary::marker {
     790        color: var(--qp-accent);
     791}
     792
     793.qp-more details[open] summary {
     794        margin-bottom: 3px;
     795}
     796
     797/* The opened items line up with the first ten (sub-items keep their indent) */
     798#sidebar .qp-more > details > ul,
     799.footer-widgets .qp-more > details > ul {
     800        margin: 0;
     801}
     802
     803/* The "more" line has no rule of its own; the opened items keep theirs */
     804#sidebar li.qp-more {
     805        border-bottom: 0;
     806}
     807
     808#sidebar .qp-more li:last-child {
     809        border-bottom: 0;
     810}
     811
     812/* Block widgets (the default in Appearance > Widgets) */
     813
     814#sidebar .wp-block-group__inner-container > * {
     815        margin-top: 0;
     816}
     817
     818#sidebar .wp-block-search__label {
     819        display: block;
     820        font-weight: bold;
     821        margin: 0 0 6px;
     822}
     823
     824#sidebar .wp-block-latest-comments {
     825        font-size: inherit;
     826        padding: 0;
     827}
     828
     829#sidebar .wp-block-latest-comments__comment {
     830        margin: 0;
     831        line-height: 1.4;
     832}
     833
     834#sidebar .wp-block-latest-comments__comment-meta {
     835        font-size: 1em;
     836}
     837
     838#sidebar .wp-block-latest-posts__post-date {
     839        font-size: 0.9em;
     840        color: var(--qp-muted);
     841}
     842
     843#sidebar ul ul {
     844        margin: 3px 0 0 12px;
     845}
     846
     847#sidebar select {
     848        max-width: 100%;
     849}
     850
     851
     852/* Below Posts widgets: a soft box under the post */
     853
     854.after-post {
     855        margin: 25px 0;
     856        padding: 14px 18px;
     857        background: var(--qp-soft);
     858        border-left: 3px solid var(--qp-accent);
     859        border-radius: 0 6px 6px 0;
     860}
     861
     862.after-post .widget {
     863        margin: 0 0 14px;
     864}
     865
     866.after-post .widget:last-child {
     867        margin-bottom: 0;
     868}
     869
     870/* Below Posts headings stay plain: the box already has an accent edge */
     871.after-post h2,
     872.after-post .widget-title {
     873        display: block;
     874        font-size: 1.15em;
     875        text-transform: none;
     876        letter-spacing: 0;
     877        color: var(--qp-text);
     878        margin: 0 0 6px;
     879        padding-bottom: 0;
     880        border-bottom: 0;
     881}
     882
     883
     884/* 9. Comments and forms
     885------------------------------------- */
     886
     887/* Text fields: same height as the buttons, soft accent ring when typing */
     888input[type="text"],
     889input[type="email"],
     890input[type="url"],
     891input[type="password"],
     892input[type="search"],
     893input[type="number"],
     894input[type="tel"],
     895select,
     896textarea,
     897.wp-block-search__input {
     898        max-width: 100%;
     899        padding: 8px 11px;
     900        line-height: 1.4;
     901        border: 1px solid var(--qp-field-border);
     902        border-radius: 6px;
     903        background: var(--qp-field);
     904        color: var(--qp-text);
     905}
     906
     907input:focus,
     908select:focus,
     909textarea:focus {
     910        outline: none;
     911        border-color: var(--qp-accent);
     912        box-shadow: 0 0 0 3px color-mix(in srgb, var(--qp-accent) 20%, transparent);
     913}
     914
     915textarea {
     916        width: 100%;
     917}
     918
     919/* Buttons: accent colour, a touch darker on hover */
     920button,
     921input[type="submit"],
     922.search-submit,
     923.wp-block-search__button {
     924        cursor: pointer;
     925        background: var(--qp-accent);
     926        color: var(--qp-on-accent);
     927        border: 1px solid var(--qp-accent);
     928        border-radius: 6px;
     929        padding: 8px 16px;
     930        line-height: 1.4;
     931        font-weight: 600;
     932}
     933
     934button:hover,
     935input[type="submit"]:hover,
     936.wp-block-search__button:hover {
     937        filter: brightness(0.9);
     938}
     939
     940/* Search: box and button side by side, same height */
     941.search-form,
     942.wp-block-search__inside-wrapper {
     943        display: flex;
     944        align-items: stretch;
     945        gap: 6px;
     946}
     947
     948.search-form {
     949        margin: 15px 0;
     950}
     951
     952.search-form label,
     953.wp-block-search__input {
     954        flex: 1;
     955        min-width: 0;
     956}
     957
     958.search-field {
     959        width: 100%;
     960}
     961
     962.wp-block-search__button {
     963        margin: 0;
     964}
     965
     966.comments {
     967        clear: both;
     968        margin-top: 40px;
     969}
     970
     971.comments-title {
     972        font-size: 1.3em;
     973        margin-bottom: 10px;
     974}
     975
     976.commentlist,
     977.commentlist .children {
     978        list-style: none;
     979        margin: 0;
     980        padding: 0;
     981}
     982
     983.commentlist .children {
     984        margin: 6px 0 0 14px;
     985        border-left: 1px solid var(--qp-border);
     986        padding-left: 10px;
     987}
     988
     989/* Each comment: a compact box, 6px apart */
     990.commentlist .comment-body {
     991        border: 1px solid var(--qp-border);
     992        border-radius: 6px;
     993        padding: 8px 12px;
     994        margin: 0 0 6px;
     995}
     996
     997.comment-content p {
     998        margin: 0 0 6px;
     999}
     1000
     1001.comment-content p:last-child {
     1002        margin-bottom: 0;
     1003}
     1004
     1005.commentlist > .comment:nth-child(even) > .comment-body {
     1006        background: var(--qp-alt);
     1007}
     1008
     1009.commentlist .bypostauthor > .comment-body {
     1010        background: var(--qp-author);
     1011}
     1012
     1013.comment-author .avatar {
     1014        float: left;
     1015        margin: 0 8px 0 0;
     1016        border-radius: 50%;
     1017}
     1018
     1019.comment-author .fn {
     1020        font-style: normal;
     1021        font-weight: bold;
     1022}
     1023
     1024.comment-meta {
     1025        display: flow-root; /* holds the small avatar */
     1026        font-size: 0.8em;
     1027        line-height: 1.35;
     1028        margin-bottom: 4px;
     1029}
     1030
     1031.comment-meta a {
     1032        color: var(--qp-muted);
     1033}
     1034
     1035.reply {
     1036        margin-top: 3px;
     1037        font-size: 0.85em;
     1038}
     1039
     1040.comment-respond {
     1041        margin: 24px 0 20px;
     1042}
     1043
     1044.comment-form label {
     1045        display: block;
     1046        margin-bottom: 3px;
     1047        font-size: 0.9em;
     1048        font-weight: 600;
     1049}
     1050
     1051.comment-form p {
     1052        margin: 0 0 14px;
     1053}
     1054
     1055.comment-form-cookies-consent label {
     1056        display: inline;
     1057}
     1058
     1059.comment-form input[type="text"],
     1060.comment-form input[type="email"],
     1061.comment-form input[type="url"] {
     1062        width: 100%;
     1063        max-width: 420px;
     1064}
     1065
     1066.no-comments {
     1067        color: var(--qp-muted);
     1068}
     1069
     1070
     1071/* 10. Navigation
     1072------------------------------------- */
     1073
     1074.navigation {
     1075        display: flow-root;
     1076        margin: 20px 0;
     1077}
     1078
     1079.post-nav .alignleft,
     1080.post-nav .alignright,
     1081.image-nav .alignleft,
     1082.image-nav .alignright {
     1083        margin: 0;
     1084        max-width: 48%;
     1085}
     1086
     1087.pagination .nav-links,
     1088.comment-navigation .nav-links {
     1089        display: flex;
     1090        flex-wrap: wrap;
     1091        gap: 6px;
     1092        align-items: center;
     1093}
     1094
     1095.comment-navigation .nav-next {
     1096        margin-left: auto;
     1097}
     1098
     1099/* Page numbers: outlined boxes; the current page is filled in */
     1100.page-numbers {
     1101        display: inline-block;
     1102        min-width: 2.4em;
     1103        padding: 5px 11px;
     1104        line-height: 1.4;
     1105        text-align: center;
     1106        border: 1px solid var(--qp-border);
     1107        border-radius: 6px;
     1108        color: var(--qp-link);
     1109}
     1110
     1111a.page-numbers:hover {
     1112        text-decoration: none;
     1113        background: var(--qp-accent);
     1114        border-color: var(--qp-accent);
     1115        color: var(--qp-on-accent);
     1116}
     1117
     1118.page-numbers.current {
     1119        background: var(--qp-accent);
     1120        border-color: var(--qp-accent);
     1121        color: var(--qp-on-accent);
     1122        font-weight: bold;
     1123}
     1124
     1125.page-numbers.dots {
     1126        min-width: 0;
     1127        padding-left: 2px;
     1128        padding-right: 2px;
     1129        border-color: transparent;
     1130        color: var(--qp-muted);
     1131}
     1132
     1133
     1134/* 11. Footer
     1135------------------------------------- */
    3761136
    3771137#footer {
    378     color: #FFF;
    379     padding: 15px 0 20px;
    380     font-size: 1em;
    381     clear: both;
    382         margin-top:20px;
    383 }
    384 
    385 #footer p {
    386     margin: 0;
    387     padding: 5px 0;
    388     text-align: center;
    389 }
    390 
    391 #footer a {
    392     color: #FFF;
    393     text-decoration: none;
    394     border-bottom: 1px solid #999;
    395 }
    396 
    397 #footer a:hover {
    398         color: #CCC;
    399     border-bottom: 0px dotted #CCC;
    400 }
    401 
    402 
    403 /* Begin Headers
    404 ------------------------------------- */
    405 
    406 #content h1 {
    407     margin: 0;
    408 }
    409 
    410 h2 {
    411 }
    412 
    413 h2.pagetitle,
    414 h2.pagetitle {
    415     text-align: center;
    416 }
    417 
    418 #sidebar h2 {
    419     padding: 0;
    420 }
    421 
    422 #sidebar h4 {
    423     color: #C32364;
    424     border-bottom: 1px solid #C32364;
    425     text-transform: uppercase;
    426         margin-top: 20px;
    427 }
    428 
    429 h3 {
    430     padding: 0;
    431     margin: 30px 0 0;
    432 }
    433 
    434 h3.comments {
    435     padding: 0;
    436     margin: 40px auto 20px;
    437 }
    438 
    439 
    440 /* Begin Menu Headers
    441 ------------------------------------- */
    442 
    443 #menu-header {
    444     clear: both;
    445     line-height: 1.5em;
    446     font-weight: bold;
    447     margin: 0 auto 15px;
    448     overflow: hidden;
    449     padding: 0 20px;
    450     text-transform: uppercase;
    451     color: #333;
    452     background: #D1E5EE;
    453 }
    454 
    455 #menu-header ul {
    456     float: left;
    457     width: 100%;
    458     padding: 0 10px;
    459 }
    460 
    461 #menu-header li {
    462     float: left;
    463     list-style-type: none;
    464     display: block;
    465     margin-right: 20px;
    466     position: relative;
    467     padding: 0;
    468 }
    469 
    470 #menu-header a {
    471     color: #333;
    472     text-decoration: none;
    473 }
    474 
    475 #menu-header a:hover {
    476     color: #C32364;
    477     text-decoration: underline;
    478 }
    479 
    480 
    481 /* Begin Images
    482 ------------------------------------- */
    483 
    484 p img {
    485     padding: 0;
    486     max-width: 100%;
    487 }
    488 
    489 .entry img {
    490     padding: 5px;
    491     height: auto;
    492 }
    493 
    494 .rssicon {
    495     vertical-align: middle;
    496     border: 0;
    497     padding-right: 5px;
    498 }
    499 
    500 img.centered {
    501     display: block;
    502     margin-left: auto;
    503     margin-right: auto;
    504 }
    505 
    506 img.alignright {
    507     padding-left: 10px;
    508     display: inline;
    509 }
    510 
    511 img.alignleft {
    512     padding-right: 10px;
    513     display: inline;
    514 }
    515 
    516 .thumb {
    517     float: left !important;
    518     margin: 10px 5px 0 0;
    519 }
    520 
    521 .alignright {
    522     float: right;
    523 }
    524 
    525 .alignleft {
    526     float: left
    527 }
    528 
    529 
    530 /* Begin Lists
    531 ------------------------------------- */
    532 
    533 .entry ol {
    534     padding: 0 0 0 35px;
    535     margin: 0;
    536 }
    537 
    538 .entry ol li {
    539     margin: 0;
    540     padding: 0;
    541 }
    542 
    543 .postmetadata ul,
    544 .postmetadata li {
    545     display: inline;
    546     list-style-type: none;
    547     list-style-image: none;
    548 }
    549 
    550 #sidebar ul,
    551 #sidebar ul ol {
    552     margin: 0;
    553     padding: 0;
    554 }
    555 
    556 #sidebar ul li {
    557     list-style-type: none;
    558     list-style-image: none;
    559     margin-bottom: 15px;
    560 }
    561 
    562 #sidebar ul p,
    563 #sidebar ul select {
    564     margin: 5px 0 8px;
    565 }
    566 
    567 #sidebar ul ul,
    568 #sidebar ul ol {
    569     margin: 5px 0 0 10px;
    570 }
    571 
    572 #sidebar ul ul ul,
    573 #sidebar ul ol {
    574     margin: 0 0 0 10px;
    575 }
    576 
    577 ol li,
    578 #sidebar ul ol li {
    579     list-style: decimal outside;
    580 }
    581 
    582 #sidebar ul ul li,
    583 #sidebar ul ol li {
    584     margin: 3px 0 0;
    585     padding: 3px 0;
    586     border-bottom: 1px solid #eee;
    587 }
    588 
    589 
    590 /* Begin Form Elements
    591 ------------------------------------- */
    592 
    593 .header-search {
    594     float: right;
    595        
    596 }
    597 .header-search-mobile {
    598                 display:none;
    599     }
    600 
    601 
    602 input {
    603     border-radius: 5px;
    604 }
    605 
    606 #searchform {}
    607 
    608 .search-field {
    609     border: 1px solid #999;
    610     padding: 7px;
    611     margin: 15px 0;
    612     min-width: 200px;
    613     max-width: 90%;
    614 }
    615 
    616 .search-submit {
    617     cursor: pointer;
    618     background: #C32364;
    619     border: 1px solid #C32364;
    620     color: #fff;
    621     font-weight: bold;
    622     padding: 7px;
    623     text-transform: uppercase;
    624 }
    625 
    626 #searchsubmit:hover {
    627     background: #ac2925;
    628 }
    629 
     1138        margin: 20px 0 0;
     1139        font-size: 0.95em;
     1140}
     1141
     1142/* Footer widgets: up to three columns on a very light tint of the header
     1143   colour, so they read as part of the footer. The box is only printed
     1144   when a footer area has widgets, so with none the tint disappears too. */
     1145.footer-widgets {
     1146        display: grid;
     1147        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
     1148        gap: 20px 30px;
     1149        padding: 22px 25px 25px;
     1150        background: var(--qp-footer-tint);
     1151        line-height: 1.45;
     1152}
     1153
     1154.footer-widgets .widget {
     1155        margin: 0 0 18px;
     1156}
     1157
     1158.footer-widgets .widget:last-child {
     1159        margin-bottom: 0;
     1160}
     1161
     1162.footer-widgets ul,
     1163.footer-widgets ol {
     1164        list-style: none;
     1165        margin: 0;
     1166        padding: 0;
     1167}
     1168
     1169.footer-widgets li {
     1170        margin: 0 0 4px;
     1171}
     1172
     1173.footer-widgets ul ul {
     1174        margin: 4px 0 0 12px;
     1175}
     1176
     1177.footer-widgets p {
     1178        margin: 0 0 8px;
     1179}
     1180
     1181.footer-widgets .wp-block-latest-comments {
     1182        font-size: inherit;
     1183        padding: 0;
     1184}
     1185
     1186/* The dark band at the bottom, in the header's colour */
     1187.site-info {
     1188        padding: 15px 20px 20px;
     1189        background: var(--qp-footer);
     1190        color: var(--qp-on-brand);
     1191        text-align: center;
     1192}
     1193
     1194.site-info p {
     1195        margin: 3px 0;
     1196}
     1197
     1198.site-info a {
     1199        color: var(--qp-on-brand);
     1200        text-decoration: underline;
     1201        text-decoration-color: color-mix(in srgb, var(--qp-on-brand) 45%, transparent);
     1202        text-underline-offset: 3px;
     1203}
     1204
     1205.site-info a:hover {
     1206        text-decoration-color: var(--qp-on-brand);
     1207}
     1208
     1209.footer-menu ul {
     1210        list-style: none;
     1211        margin: 0 0 10px;
     1212        padding: 0;
     1213        display: flex;
     1214        flex-wrap: wrap;
     1215        justify-content: center;
     1216        gap: 5px 18px;
     1217}
     1218
     1219/* Social links in the footer menu show as small white icons */
     1220.footer-menu .qp-social a {
     1221        display: inline-flex;
     1222        padding: 4px;
     1223        border-radius: 6px;
     1224        text-decoration: none;
     1225}
     1226
     1227.footer-menu .qp-social a:hover {
     1228        background: color-mix(in srgb, var(--qp-on-brand) 15%, transparent);
     1229}
     1230
     1231.qp-icon {
     1232        display: block;
     1233        width: 20px;
     1234        height: 20px;
     1235        fill: currentColor;
     1236}
     1237
     1238.credits {
     1239        opacity: 0.8;
     1240}
     1241
     1242
     1243/* 12. Accessibility
     1244------------------------------------- */
     1245
     1246/* Hidden on screen but read aloud by screen readers */
    6301247.screen-reader-text {
    631     display: none;
    632 }
    633 
    634 select {
    635     width: 130px;
    636 }
    637 
    638 .formbutton {
    639     cursor: pointer;
    640 }
    641 
    642 #commentform input {
    643     width: 170px;
    644     padding: 5px;
    645     margin: 5px 5px 1px 0;
    646     border: 1px solid #DDD;
    647 }
    648 
    649 #commentform textarea {
    650     width: 90%;
    651     padding: 5px;
    652     border: 1px solid #DDD;
    653 }
    654 
    655 #respond:after {
    656     content: ".";
    657     display: block;
    658     height: 0;
    659     clear: both;
    660     visibility: hidden;
    661 }
    662 
    663 #commentform #submit {
    664     background: #3276b1;
    665     padding: 10px;
    666     color: #fff;
    667     margin: 0;
    668     border: 0px;
    669     font-size: 0.9em;
    670     text-transform: uppercase;
    671     border-radius: 8px;
    672     -moz-border-radius: 8px;
    673 }
    674 
    675 #commentform #submit:hover {
    676     background: #C32364;
    677 }
    678 
    679 
    680 /* Begin Comments
    681 ------------------------------------- */
    682 .comments {
    683     clear: both;
    684 }
    685 
    686 .alt {
    687     margin: 0;
    688     padding: 10px;
    689 }
    690 
    691 .commentlist {
    692     padding: 0;
    693     margin: 0;
    694     text-align: justify;
    695 }
    696 
    697 .commentlist li {
    698     margin: 15px 0 10px;
    699     padding: 5px 5px 10px 10px;
    700     list-style: none;
    701 }
    702 
    703 .commentlist li ul li {
    704     margin-right: -5px;
    705     margin-left: 10px;
    706 }
    707 
    708 .commentlist p {
    709     margin: 10px 5px 10px 0;
    710 }
    711 
    712 #commentform p {
    713     margin: 5px 0;
    714 }
    715 
    716 .nocomments {
    717     text-align: center;
    718     margin: 0;
    719     padding: 0;
    720     display: none;
    721 }
    722 
    723 .commentmetadata {
    724     margin: 0;
    725     font-size: 0.9em;
    726     display: block;
    727 }
    728 
    729 img.avatar {
    730     float: left;
    731     margin: 0;
    732     padding: 0 4px 0 0;
    733     vertical-align: middle;
    734 }
    735 
    736 #respond {
    737     margin-bottom: 20px;
    738 }
    739 
    740 #reply-title a {
    741     color: #06c !important;
    742 }
    743 
    744 .bypostauthor {
    745     background: #F5FAFA !important;
    746 }
    747 
    748 ol.commentlist li div.comment-meta {
    749     font-size: 9px;
    750     margin-bottom: 10px;
    751 }
    752 
    753 ol.commentlist li div.comment-meta a {
    754     color: #999 !important;
    755 }
    756 
    757 ol.commentlist li div.comment-meta a:hover {
    758     color: #06c !important;
    759     text-decoration: underline;
    760 }
    761 
    762 ol.commentlist li p {
    763     font-size: 1em;
    764     margin: 0 0 1em;
    765 }
    766 
    767 ol.commentlist li ul {
    768     font-size: 1em;
    769     margin: 0;
    770 }
    771 
    772 ol.commentlist li ul li {
    773     font-size: 1em;
    774     list-style: square;
    775     margin: 0;
    776 }
    777 
    778 ol.commentlist li ol li {
    779     font-size: 1em;
    780     margin: 0;
    781     list-style: upper-roman;
    782 }
    783 
    784 ol.commentlist li div.reply {
    785     font-size: 1em;
    786 }
    787 
    788 ol.commentlist li div.reply a {
    789     text-decoration: none;
    790     padding: 5px;
    791 }
    792 
    793 ol.commentlist li ul.children {
    794     list-style: none;
    795     margin: 1em 0 0;
    796     text-indent: 0;
    797 }
    798 
    799 ol.commentlist {
    800     list-style: none;
    801     margin: 0 0 1em;
    802     padding: 0;
    803     text-indent: 0;
    804 }
    805 
    806 ol.commentlist li.comment {
    807     padding: 1em;
    808     border-radius: 8px;
    809     -moz-border-radius: 8px;
    810 }
    811 
    812 ol.commentlist li.even {
    813     background: #fff;
    814 }
    815 
    816 ol.commentlist li.odd {
    817     background: #f9f9f9;
    818 }
    819 
    820 ol.commentlist li ul.children li.depth-2 {
    821     list-style: none;
    822     border-left: 1px solid #ccc;
    823     margin: 0 0 .25em .25em;
    824 }
    825 
    826 ol.commentlist li ul.children li.depth-3 {
    827     list-style: none;
    828     border-left: 1px solid #ccc;
    829     margin: 0 0 .25em .25em;
    830 }
    831 
    832 ol.commentlist li ul.children li.depth-4 {
    833     list-style: none;
    834     border-left: 1px solid #ccc;
    835     margin: 0 0 .25em .25em;
    836 }
    837 
    838 ol.commentlist li ul.children li.depth-5 {
    839     list-style: none;
    840     border-left: 1px solid #ccc;
    841     margin: 0 0 .25em .25em;
    842 }
    843 
    844 .commentlist table td {
    845     background: #FFF;
    846     border: 1px solid #CCC;
    847     padding: 10px;
    848 }
    849 
    850 dl,
    851 dt,
    852 dd {
    853     list-style: none;
    854     padding: 0;
    855     margin: 0 ;
    856         outline: 0;
    857     vertical-align: baseline;
    858 }
    859 
    860 dt {
    861     font-weight: bold;
    862     padding-top: 5px;
    863 }
    864 
    865 dd {
    866     padding-bottom: 15px;
    867 }
    868 
    869 
    870 /* Begin Sidebar
    871 ------------------------------------- */
    872 
    873 #xxxsidebar {
    874     padding: 10px 40px 10px 0;
    875     float: right;
    876     width: 360px;
    877     background: #fff;
    878     font-size: 1.2em;
    879     line-height: 1.6em;
    880     overflow: hidden;
    881 }
    882 
    883 #adbox {
    884     padding: 5px;
    885     margin: 0 0;
    886     background: #ffffff;
    887     overflow: hidden;
    888 }
    889 
    890 #sidebar_low {
    891     clear: both;
    892 }
    893 
    894 #xxxl_sidebar {
    895     width: 170px;
    896     float: left;
    897     margin: 0 0 10px 0;
    898     padding: 10px;
    899     background: #fff;
    900     overflow: hidden;
    901 }
    902 
    903 #xxxr_sidebar {
    904     width: 140px;
    905     float: right;
    906     padding: 10px;
    907     margin: 0 0 10px 0;
    908     background: #fff;
    909     overflow: hidden;
    910 }
    911 
    912 #sidebar form {
    913     margin: 0;
    914 }
    915 
    916 .emptybox {
    917         border: 2px solid #CCC;
    918         background-color: #fff;
    919         padding: 5px;
    920         text-align: center;
    921         text-transform: uppercase;
    922 }
    923 
    924 /* Begin Tags &amp; Classes
    925 ------------------------------------- */
    926 
    927 acronym,
    928 abbr,
    929 span.caps {
    930     cursor: help;
    931 }
    932 
    933 acronym,
    934 abbr {
    935     border-bottom: 1px dashed #999;
    936 }
    937 
    938 blockquote {
    939     margin: 15px 30px 0 10px;
    940     padding-left: 20px;
    941     border-left: 5px solid #85B8E3;
    942 }
    943 
    944 blockquote cite {
    945     margin: 5px 0 0;
    946     display: block;
    947 }
    948 
    949 .center {
    950     text-align: center;
    951 }
    952 
    953 .hidden {
    954     display: none;
    955 }
    956 
    957 hr {
    958     display: none;
    959 }
    960 
    961 a img {
    962     border: none;
    963 }
    964 
    965 .navigation {
    966     display: block;
    967     text-align: center;
    968     margin-top: 10px;
    969     margin-bottom: 20px;
    970     font-weight: bold;
    971     font-size: 1em;
    972 }
    973 
    974 .mainnav a {
    975     background: #C32364;
    976     color: #FFF !important;
    977     padding: 10px;
    978     border-radius: 8px;
    979     -moz-border-radius: 8px;
    980 }
    981 
    982 .mainnav a:hover {
    983     background: #AC2925;
    984 }
    985 
    986 
    987 /* Captions
    988 ------------------------------------- */
    989 
    990 .aligncenter,
    991 div.aligncenter {
    992     display: block;
    993     margin-left: auto;
    994     margin-right: auto;
    995 }
    996 
    997 .wp-caption {
    998     text-align: center;
    999     padding-top: 4px;
    1000     margin: 10px;
    1001     -moz-border-radius: 3px;
    1002     -khtml-border-radius: 3px;
    1003     -webkit-border-radius: 3px;
    1004     border-radius: 3px;
    1005     max-width: 100%;
    1006 }
    1007 
    1008 .wp-caption img {
    1009     margin: 0;
    1010     padding: 5px;
    1011     border: 0 none;
    1012 }
    1013 
    1014 .wp-caption p.wp-caption-text {
    1015     font-size: 11px;
    1016     line-height: 17px;
    1017     padding: 0 4px 5px;
    1018     margin: 0;
    1019 }
    1020 
    1021 #content .gallery {
    1022     margin: 0 auto 18px;
    1023 }
    1024 
    1025 #content .gallery .gallery-item {
    1026     float: left;
    1027     margin-top: 5px;
    1028     text-align: center;
    1029     width: 33%;
    1030 }
    1031 
    1032 #content .gallery img {
    1033     border: 0px solid #cfcfcf;
    1034 }
    1035 
    1036 #content .gallery .gallery-caption {
    1037     color: #888;
    1038     font-size: 11px;
    1039     margin: 0 0 12px;
    1040 }
    1041 
    1042 #content .gallery dl {
    1043     margin: 0;
    1044 }
    1045 
    1046 #content .gallery img {
    1047     border: 0px solid #f1f1f1;
    1048 }
    1049 
    1050 #content .gallery br+br {
    1051     display: none;
    1052 }
    1053 
    1054 #content .attachment img {
    1055     /* single attachment images should be centered */
    1056     display: block;
    1057     margin: 0 auto;
    1058 }
    1059 
    1060 
    1061 /* Responsive Design
    1062 ------------------------------------- */
    1063 
    1064 @media screen and (max-width: 800px) {
    1065     body {
    1066         background: #FFF;
    1067     }
    1068     body.custom-background {
    1069         background-color: #FFF !important;
    1070     }
    1071     #page {
    1072         width: 100%;
    1073         border: 0;
    1074     }
    1075     #menu-header {
    1076         margin: 0;
    1077     }
    1078 }
    1079 
    1080 @media screen and (max-width: 600px) {
    1081     .header-search {
    1082         display:none;
    1083     }
    1084         .header-search-mobile {
    1085         float: none;
    1086                 display:block;
    1087                 margin: 5px 0;
    1088     }
    1089 }
     1248        border: 0;
     1249        clip: rect(1px, 1px, 1px, 1px);
     1250        clip-path: inset(50%);
     1251        height: 1px;
     1252        width: 1px;
     1253        margin: -1px;
     1254        overflow: hidden;
     1255        padding: 0;
     1256        position: absolute !important;
     1257        word-wrap: normal !important;
     1258}
     1259
     1260/* The Skip to content link appears when reached with the Tab key */
     1261.skip-link:focus {
     1262        clip: auto;
     1263        clip-path: none;
     1264        height: auto;
     1265        width: auto;
     1266        margin: 0;
     1267        top: 10px;
     1268        left: 10px;
     1269        z-index: 100000;
     1270        padding: 10px 15px;
     1271        background: var(--qp-bg);
     1272        color: var(--qp-link);
     1273        font-weight: bold;
     1274        box-shadow: 0 0 4px rgba(0, 0, 0, 0.3);
     1275}
     1276
     1277a:focus-visible,
     1278button:focus-visible {
     1279        outline: 2px solid var(--qp-accent);
     1280        outline-offset: 2px;
     1281}
     1282
     1283
     1284/* 13. Phones and tablets
     1285------------------------------------- */
     1286
     1287@media (max-width: 820px) {
     1288
     1289        .row {
     1290                grid-template-columns: 1fr;
     1291                grid-template-areas:
     1292                        "content"
     1293                        "sidebar";
     1294        }
     1295
     1296        /* Title on top, search under it */
     1297        #header {
     1298                flex-direction: column;
     1299                align-items: stretch;
     1300                padding: 18px 16px;
     1301        }
     1302
     1303        .header-search {
     1304                flex: none;
     1305        }
     1306
     1307        .main-menu {
     1308                padding: 8px 16px;
     1309        }
     1310
     1311        .main-menu ul {
     1312                gap: 4px 16px;
     1313        }
     1314
     1315        .column {
     1316                padding: 20px 16px;
     1317        }
     1318
     1319        #sidebar {
     1320                border-top: 4px solid var(--qp-menu);
     1321        }
     1322
     1323        body,
     1324        body.custom-background {
     1325                background: var(--qp-bg) !important;
     1326        }
     1327
     1328        /* 16px fields stop iPhones zooming in when someone taps to type */
     1329        input,
     1330        select,
     1331        textarea {
     1332                font-size: 16px;
     1333        }
     1334
     1335        .gallery {
     1336                grid-template-columns: repeat(2, 1fr);
     1337        }
     1338}
     1339
     1340@media (max-width: 480px) {
     1341
     1342        .sidebar-split {
     1343                grid-template-columns: 1fr;
     1344        }
     1345
     1346        .alignleft,
     1347        .alignright {
     1348                float: none;
     1349                margin: 10px 0;
     1350        }
     1351
     1352        .post-thumb {
     1353                float: right;
     1354                margin: 5px 0 10px 15px;
     1355        }
     1356
     1357        .post-thumb img {
     1358                width: 80px;
     1359        }
     1360}
     1361
     1362
     1363/* 14. Print
     1364   Printing a post gives clean text: no menu, sidebar, widgets or comment form.
     1365------------------------------------- */
     1366
     1367@media print {
     1368
     1369        body {
     1370                color: #000;
     1371                background: #fff;
     1372                font-size: 12pt;
     1373        }
     1374
     1375        #page {
     1376                max-width: none;
     1377                box-shadow: none;
     1378        }
     1379
     1380        .row {
     1381                display: block;
     1382        }
     1383
     1384        #header {
     1385                display: block;
     1386                padding: 0 0 10px;
     1387                background: none;
     1388                color: #000;
     1389                border-bottom: 1px solid #000;
     1390        }
     1391
     1392        .site-title a,
     1393        .description {
     1394                color: #000;
     1395        }
     1396
     1397        #content {
     1398                padding: 0;
     1399        }
     1400
     1401        .header-search,
     1402        .main-menu,
     1403        #sidebar,
     1404        .after-post,
     1405        .footer-widgets,
     1406        .footer-menu,
     1407        .post-nav,
     1408        .pagination,
     1409        .comment-respond,
     1410        .reply,
     1411        .skip-link,
     1412        .credits {
     1413                display: none;
     1414        }
     1415
     1416        .site-info {
     1417                background: none;
     1418                color: #000;
     1419        }
     1420
     1421        a {
     1422                color: #000;
     1423        }
     1424
     1425        /* Show where links in the post go */
     1426        .entry a[href^="http"]::after {
     1427                content: " (" attr(href) ")";
     1428                font-size: 0.85em;
     1429                word-break: break-all;
     1430        }
     1431
     1432        img,
     1433        figure,
     1434        pre,
     1435        blockquote {
     1436                break-inside: avoid;
     1437        }
     1438
     1439        h1,
     1440        h2,
     1441        h3 {
     1442                break-after: avoid;
     1443        }
     1444}
Note: See TracChangeset for help on using the changeset viewer.