Make WordPress Themes

Changeset 357536


Ignore:
Timestamp:
11/06/2026 04:58:43 AM (33 hours ago)
Author:
themedropbox
Message:

New version of Stackwise - 1.2.1

Location:
stackwise/1.2.1
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • stackwise/1.2.1/404.php

    r351334 r357536  
    1212?>
    1313
    14 <main id="primary" class="site-main" role="main">
     14<main id="primary" class="site-main" role="main" tabindex="-1">
    1515        <div class="sw-container">
    1616                <section class="error-404 not-found">
    … …  
    2727                                <div class="sw-404-actions">
    2828                                        <a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="sw-btn sw-btn-primary">
    29                                                 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     29                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    3030                                                        <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
    3131                                                        <polyline points="9 22 9 12 15 12 15 22"></polyline>
  • stackwise/1.2.1/archive.php

    r351334 r357536  
    1212?>
    1313
    14 <main id="primary" class="site-main" role="main">
     14<main id="primary" class="site-main" role="main" tabindex="-1">
    1515        <div class="sw-container">
    1616                <?php get_template_part( 'template-parts/archive-header' ); ?>
  • stackwise/1.2.1/assets/css/editor-style.css

    r351334 r357536  
    484484}
    485485
    486 /* Button: Outline */
    487 .wp-block-button.is-style-sw-outline .wp-block-button__link {
     486/* Button: Outline Accent (stackwise-outline) */
     487.wp-block-button.is-style-stackwise-outline .wp-block-button__link {
    488488    border: 1px solid currentColor;
    489489    background-color: transparent;
    … …  
    491491}
    492492
    493 .wp-block-button.is-style-sw-outline .wp-block-button__link:hover,
    494 .wp-block-button.is-style-sw-outline .wp-block-button__link:focus {
     493.wp-block-button.is-style-stackwise-outline .wp-block-button__link:hover,
     494.wp-block-button.is-style-stackwise-outline .wp-block-button__link:focus {
    495495    background-color: var(--sw-color-bg-secondary);
    496496    color: var(--sw-color-accent);
    … …  
    498498
    499499/* Paragraph: Terminal */
    500 p.is-style-sw-terminal {
     500p.is-style-stackwise-terminal {
    501501    padding: 0.5em 1em;
    502502    border-left: 3px solid var(--sw-color-accent);
    … …  
    509509
    510510/* Group: Card */
    511 .wp-block-group.is-style-sw-card {
     511.wp-block-group.is-style-stackwise-card {
    512512    padding: var(--sw-spacing-lg);
    513513    border: 1px solid var(--sw-color-border);
    … …  
    517517
    518518/* Quote: Accent Border */
    519 .wp-block-quote.is-style-sw-accent {
     519.wp-block-quote.is-style-stackwise-accent {
    520520    padding: var(--sw-spacing-md) var(--sw-spacing-lg);
    521521    border-left: 4px solid var(--sw-color-accent);
    … …  
    525525}
    526526
    527 .wp-block-quote.is-style-sw-accent cite {
     527.wp-block-quote.is-style-stackwise-accent cite {
    528528    font-size: var(--sw-font-size-sm);
    529529    color: var(--sw-color-text-muted);
  • stackwise/1.2.1/assets/js/navigation.js

    r351334 r357536  
    66 *  - Updating aria-expanded on the toggle button
    77 *  - Closing the menu when the Escape key is pressed
     8 *  - Keeping keyboard focus inside the open toggle menu and the dark mode toggle
    89 *  - Closing the menu when a click occurs outside the nav
    910 *  - Collapsing the desktop menu into the toggle when its items do not fit
    … …  
    8384
    8485        // -------------------------------------------------------------------------
     86        // Keep keyboard focus inside the open toggle menu
     87        //
     88        // The cycle is: menu toggle, the visible menu links, then the dark mode
     89        // toggle (it stays visible in the header while the menu is open). Tab on
     90        // the last control goes back to the menu toggle and Shift+Tab on the menu
     91        // toggle goes to the last control, so focus never moves into the page
     92        // behind the menu.
     93        // -------------------------------------------------------------------------
     94        var themeToggle = document.getElementById( 'theme-toggle' );
     95
     96        function isVisible( el ) {
     97                return el.offsetWidth > 0 || el.offsetHeight > 0;
     98        }
     99
     100        document.addEventListener( 'keydown', function ( event ) {
     101                if ( 'Tab' !== event.key || ! isOpen() ) {
     102                        return;
     103                }
     104
     105                var controls = [ menuToggle ].concat(
     106                        Array.prototype.filter.call(
     107                                primaryMenu.querySelectorAll( 'a[href], button:not([disabled])' ),
     108                                isVisible
     109                        )
     110                );
     111
     112                if ( themeToggle && isVisible( themeToggle ) ) {
     113                        controls.push( themeToggle );
     114                }
     115
     116                var first = controls[ 0 ];
     117                var last = controls[ controls.length - 1 ];
     118                var active = document.activeElement;
     119
     120                if ( event.shiftKey && active === first ) {
     121                        event.preventDefault();
     122                        last.focus();
     123                } else if ( ! event.shiftKey && active === last ) {
     124                        event.preventDefault();
     125                        first.focus();
     126                } else if ( -1 === controls.indexOf( active ) ) {
     127                        event.preventDefault();
     128                        first.focus();
     129                }
     130        } );
     131
     132        // -------------------------------------------------------------------------
    85133        // Close when clicking outside the nav
    86134        // -------------------------------------------------------------------------
    … …  
    101149
    102150                document.body.classList.remove( 'sw-nav-collapsed' );
     151                document.body.classList.add( 'sw-nav-measuring' );
     152
     153                // Hidden sub-menus are positioned outside the header and would add to
     154                // its scroll width, so take them out of the layout while measuring.
     155                // Nothing is painted in between, so this causes no flicker.
     156                var subMenus = primaryMenu.querySelectorAll( '.sub-menu, .children' );
     157
     158                Array.prototype.forEach.call( subMenus, function ( subMenu ) {
     159                        subMenu.style.display = 'none';
     160                } );
    103161
    104162                var overflows = wideScreen.matches && headerInner.scrollWidth > headerInner.clientWidth;
     163
     164                Array.prototype.forEach.call( subMenus, function ( subMenu ) {
     165                        subMenu.style.display = '';
     166                } );
     167                document.body.classList.remove( 'sw-nav-measuring' );
    105168
    106169                if ( overflows ) {
  • stackwise/1.2.1/assets/js/theme-toggle.js

    r315795 r357536  
    5353
    5454        /**
     55         * Return a translated fallback label passed from PHP (stackwiseToggle).
     56         *
     57         * @param {string} key  'labelDark' or 'labelLight'.
     58         * @return {string}
     59         */
     60        function getLabel( key ) {
     61                return ( window.stackwiseToggle && window.stackwiseToggle[ key ] ) || '';
     62        }
     63
     64        /**
    5565         * Apply a theme by setting / removing data-theme on <html>.
    5666         *
    … …  
    7080                                        'aria-label',
    7181                                        toggleButton.getAttribute( 'data-label-dark' ) ||
    72                                         'Switch to dark mode'
     82                                        getLabel( 'labelDark' )
    7383                                );
    7484                        } else {
    … …  
    7686                                        'aria-label',
    7787                                        toggleButton.getAttribute( 'data-label-light' ) ||
    78                                         'Switch to light mode'
     88                                        getLabel( 'labelLight' )
    7989                                );
    8090                        }
    … …  
    93103        }
    94104
    95         // Apply saved preference immediately (before the first paint).
     105        // Apply the saved preference. An inline script in wp_head already set
     106        // data-theme before the first paint; this also updates the button label.
    96107        var savedTheme = getSavedTheme();
    97108        if ( savedTheme ) {
  • stackwise/1.2.1/front-page.php

    r351334 r357536  
    2121?>
    2222
    23 <main id="primary" class="site-main sw-front-page" role="main">
     23<main id="primary" class="site-main sw-front-page" role="main" tabindex="-1">
    2424
    2525        <?php
  • stackwise/1.2.1/functions.php

    r351334 r357536  
    1616 * Define theme constants
    1717 */
    18 define( 'STACKWISE_VERSION', '1.2.0' );
     18define( 'STACKWISE_VERSION', '1.2.1' );
    1919define( 'STACKWISE_DIR', get_template_directory() );
    2020define( 'STACKWISE_URI', get_template_directory_uri() );
    … …  
    4646        set_post_thumbnail_size( 1200, 750, true );
    4747
    48         // Add custom image sizes.
     48        // Add custom image sizes. stackwise-project is used by the Projects section of the Stackwise Companion plugin.
    4949        add_image_size( 'stackwise-project', 800, 500, true );
    5050        add_image_size( 'stackwise-blog', 600, 400, true );
    … …  
    229229        );
    230230
     231        // Fallback labels for the toggle button, used if its data attributes are missing.
     232        wp_localize_script(
     233                'stackwise-theme-toggle',
     234                'stackwiseToggle',
     235                array(
     236                        'labelDark'  => __( 'Switch to dark mode', 'stackwise' ),
     237                        'labelLight' => __( 'Switch to light mode', 'stackwise' ),
     238                )
     239        );
     240
    231241        // Typing effect (only on front page).
    232242        if ( is_front_page() ) {
    … …  
    257267
    258268/**
     269 * Apply the saved or system light mode before the first paint.
     270 *
     271 * The theme-toggle.js script loads in the footer, so without this script visitors
     272 * who chose light mode would briefly see the dark default. The script is a
     273 * fixed string and contains no user data.
     274 */
     275function stackwise_print_theme_mode_script() {
     276        wp_print_inline_script_tag(
     277                "(function(){try{var t=localStorage.getItem('stackwise-theme');if('light'===t||(!t&&window.matchMedia&&window.matchMedia('(prefers-color-scheme: light)').matches)){document.documentElement.setAttribute('data-theme','light');}}catch(e){}}());"
     278        );
     279}
     280add_action( 'wp_head', 'stackwise_print_theme_mode_script', 1 );
     281
     282/**
    259283 * Get Google Fonts URL
    260284 *
    … …  
    280304
    281305/**
     306 * Default lines for the hero typing effect, one per line.
     307 *
     308 * @return string Translated default lines separated by new lines.
     309 */
     310function stackwise_get_default_typing_text() {
     311        return implode(
     312                "\n",
     313                array(
     314                        __( 'Full Stack Developer', 'stackwise' ),
     315                        __( 'Frontend Engineer', 'stackwise' ),
     316                        __( 'Backend Developer', 'stackwise' ),
     317                        __( 'UI/UX Enthusiast', 'stackwise' ),
     318                )
     319        );
     320}
     321
     322/**
    282323 * Get typing effect strings from customizer
    283324 *
    … …  
    285326 */
    286327function stackwise_get_typing_strings() {
    287         $strings = get_theme_mod( 'stackwise_hero_typing_text', "Full Stack Developer\nFrontend Engineer\nBackend Developer\nUI/UX Enthusiast" );
     328        $strings = get_theme_mod( 'stackwise_hero_typing_text', stackwise_get_default_typing_text() );
    288329        return array_map( 'trim', explode( "\n", $strings ) );
    289330}
    … …  
    500541}
    501542add_filter( 'excerpt_more', 'stackwise_excerpt_more' );
    502 
    503 /**
    504  * Enqueue block editor assets
    505  */
    506 function stackwise_block_editor_assets() {
    507         wp_enqueue_style(
    508                 'stackwise-editor-style',
    509                 STACKWISE_URI . '/assets/css/editor-style.css',
    510                 array(),
    511                 STACKWISE_VERSION
    512         );
    513 }
    514 add_action( 'enqueue_block_editor_assets', 'stackwise_block_editor_assets' );
  • stackwise/1.2.1/header.php

    r351334 r357536  
    7272
    7373                        <button class="theme-toggle" id="theme-toggle" aria-label="<?php esc_attr_e( 'Toggle dark/light mode', 'stackwise' ); ?>" data-label-dark="<?php esc_attr_e( 'Switch to dark mode', 'stackwise' ); ?>" data-label-light="<?php esc_attr_e( 'Switch to light mode', 'stackwise' ); ?>">
    74                                 <svg class="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     74                                <svg class="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    7575                                        <circle cx="12" cy="12" r="5"></circle>
    7676                                        <line x1="12" y1="1" x2="12" y2="3"></line>
    … …  
    8383                                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
    8484                                </svg>
    85                                 <svg class="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     85                                <svg class="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    8686                                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
    8787                                </svg>
  • stackwise/1.2.1/inc/block-patterns.php

    r351334 r357536  
    3939                $items = '';
    4040                foreach ( $group['items'] as $item ) {
    41                         $items .= '<li>' . esc_html( $item ) . '</li>';
     41                        $items .= '<!-- wp:list-item --><li>' . esc_html( $item ) . '</li><!-- /wp:list-item -->';
    4242                }
    4343                $columns .= '<!-- wp:column {"className":"sw-skill-card"} --><div class="wp-block-column sw-skill-card">'
    … …  
    8686                        'categories'  => array( 'stackwise' ),
    8787                        'content'     => '<!-- wp:group {"className":"sw-pattern-intro","layout":{"type":"constrained"}} --><div class="wp-block-group sw-pattern-intro">'
    88                                 . '<!-- wp:paragraph {"className":"is-style-sw-terminal"} --><p class="is-style-sw-terminal">' . esc_html__( '> Hello, world', 'stackwise' ) . '</p><!-- /wp:paragraph -->'
     88                                . '<!-- wp:paragraph {"className":"is-style-stackwise-terminal"} --><p class="is-style-stackwise-terminal">' . esc_html__( '> Hello, world', 'stackwise' ) . '</p><!-- /wp:paragraph -->'
    8989                                . '<!-- wp:heading --><h2 class="wp-block-heading">' . esc_html__( 'I build fast, accessible websites', 'stackwise' ) . '</h2><!-- /wp:heading -->'
    9090                                . '<!-- wp:paragraph {"className":"sw-lead"} --><p class="sw-lead">' . esc_html__( 'Full stack developer working with WordPress, PHP and JavaScript. I care about clean code and interfaces that work for everyone.', 'stackwise' ) . '</p><!-- /wp:paragraph -->'
    9191                                . '<!-- wp:buttons --><div class="wp-block-buttons">'
    9292                                . '<!-- wp:button --><div class="wp-block-button"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'See my work', 'stackwise' ) . '</a></div><!-- /wp:button -->'
    93                                 . '<!-- wp:button {"className":"is-style-sw-outline"} --><div class="wp-block-button is-style-sw-outline"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'Contact me', 'stackwise' ) . '</a></div><!-- /wp:button -->'
     93                                . '<!-- wp:button {"className":"is-style-stackwise-outline"} --><div class="wp-block-button is-style-stackwise-outline"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'Contact me', 'stackwise' ) . '</a></div><!-- /wp:button -->'
    9494                                . '</div><!-- /wp:buttons -->'
    9595                                . '</div><!-- /wp:group -->',
    … …  
    115115                        'description' => esc_html__( 'A card with a project name, a short description, technology tags and a link.', 'stackwise' ),
    116116                        'categories'  => array( 'stackwise' ),
    117                         'content'     => '<!-- wp:group {"className":"is-style-sw-card sw-project-card-pattern"} --><div class="wp-block-group is-style-sw-card sw-project-card-pattern">'
     117                        'content'     => '<!-- wp:group {"className":"is-style-stackwise-card sw-project-card-pattern"} --><div class="wp-block-group is-style-stackwise-card sw-project-card-pattern">'
    118118                                . '<!-- wp:heading {"level":3} --><h3 class="wp-block-heading">' . esc_html__( 'Project name', 'stackwise' ) . '</h3><!-- /wp:heading -->'
    119119                                . '<!-- wp:paragraph --><p>' . esc_html__( 'What the project does, the problem it solves and your role in it.', 'stackwise' ) . '</p><!-- /wp:paragraph -->'
    120120                                . '<!-- wp:paragraph {"className":"sw-tech-tags"} --><p class="sw-tech-tags"><code>React</code> <code>Node.js</code> <code>PostgreSQL</code></p><!-- /wp:paragraph -->'
    121121                                . '<!-- wp:buttons --><div class="wp-block-buttons">'
    122                                 . '<!-- wp:button {"className":"is-style-sw-outline"} --><div class="wp-block-button is-style-sw-outline"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'View project', 'stackwise' ) . '</a></div><!-- /wp:button -->'
     122                                . '<!-- wp:button {"className":"is-style-stackwise-outline"} --><div class="wp-block-button is-style-stackwise-outline"><a class="wp-block-button__link wp-element-button">' . esc_html__( 'View project', 'stackwise' ) . '</a></div><!-- /wp:button -->'
    123123                                . '</div><!-- /wp:buttons -->'
    124124                                . '</div><!-- /wp:group -->',
    … …  
    179179                        'description' => esc_html__( 'A quote from a client or colleague with their name.', 'stackwise' ),
    180180                        'categories'  => array( 'stackwise' ),
    181                         'content'     => '<!-- wp:quote {"className":"is-style-sw-accent"} --><blockquote class="wp-block-quote is-style-sw-accent">'
     181                        'content'     => '<!-- wp:quote {"className":"is-style-stackwise-accent"} --><blockquote class="wp-block-quote is-style-stackwise-accent">'
    182182                                . '<!-- wp:paragraph --><p>' . esc_html__( 'Add a short quote from someone you have worked with.', 'stackwise' ) . '</p><!-- /wp:paragraph -->'
    183183                                . '<cite>' . esc_html__( 'Name, role and company', 'stackwise' ) . '</cite></blockquote><!-- /wp:quote -->',
    … …  
    195195                'core/button',
    196196                array(
    197                         'name'  => 'sw-outline',
    198                         'label' => esc_html__( 'Outline', 'stackwise' ),
     197                        'name'  => 'stackwise-outline',
     198                        'label' => esc_html__( 'Outline Accent', 'stackwise' ),
    199199                )
    200200        );
    … …  
    203203                'core/paragraph',
    204204                array(
    205                         'name'  => 'sw-terminal',
     205                        'name'  => 'stackwise-terminal',
    206206                        'label' => esc_html__( 'Terminal', 'stackwise' ),
    207207                )
    … …  
    211211                'core/group',
    212212                array(
    213                         'name'  => 'sw-card',
     213                        'name'  => 'stackwise-card',
    214214                        'label' => esc_html__( 'Card', 'stackwise' ),
    215215                )
    … …  
    219219                'core/quote',
    220220                array(
    221                         'name'  => 'sw-accent',
     221                        'name'  => 'stackwise-accent',
    222222                        'label' => esc_html__( 'Accent Border', 'stackwise' ),
    223223                )
  • stackwise/1.2.1/inc/customizer.php

    r351334 r357536  
    184184                'stackwise_hero_typing_text',
    185185                array(
    186                         'default'           => "Full Stack Developer\nFrontend Engineer\nBackend Developer\nUI/UX Enthusiast",
     186                        'default'           => stackwise_get_default_typing_text(),
    187187                        'sanitize_callback' => 'sanitize_textarea_field',
    188188                )
    … …  
    506506                array(
    507507                        'default'           => 3,
    508                         'sanitize_callback' => 'absint',
     508                        'sanitize_callback' => 'stackwise_sanitize_blog_posts_count',
    509509                )
    510510        );
    … …  
    518518                        'input_attrs' => array(
    519519                                'min' => 1,
    520                                 'max' => 6,
     520                                'max' => 20,
    521521                        ),
    522522                )
    … …  
    600600
    601601/**
    602  * Sanitize checkbox values.
    603  *
    604  * @param bool $checked Whether the checkbox is checked.
     602 * Sanitize checkbox values. Accepts true, 1, '1' and 'true' as checked.
     603 *
     604 * @param mixed $checked Whether the checkbox is checked.
    605605 * @return bool
    606606 */
    607607function stackwise_sanitize_checkbox( $checked ) {
    608         return ( ( isset( $checked ) && true === $checked ) ? true : false );
     608        return rest_sanitize_boolean( $checked );
    609609}
    610610
    … …  
    630630        return in_array( $value, array( 3, 6, 9 ), true ) ? $value : 3;
    631631}
     632
     633/**
     634 * Sanitize the number of posts in the Latest Articles section: 1 to 20.
     635 *
     636 * @param mixed $value Number of posts.
     637 * @return int
     638 */
     639function stackwise_sanitize_blog_posts_count( $value ) {
     640        return min( 20, max( 1, absint( $value ) ) );
     641}
  • stackwise/1.2.1/inc/template-functions.php

    r351334 r357536  
    3131}
    3232add_filter( 'nav_menu_css_class', 'stackwise_nav_menu_item_classes', 10, 3 );
    33 
    34 /**
    35  * Display the archive description or term description.
    36  *
    37  * Used in archive.php and search.php.
    38  *
    39  * @return void
    40  */
    41 function stackwise_archive_description() {
    42         if ( is_search() ) {
    43                 printf(
    44                         /* translators: %s: search query. */
    45                         '<p>' . esc_html__( 'Search results for: %s', 'stackwise' ) . '</p>',
    46                         '<strong>' . esc_html( get_search_query() ) . '</strong>'
    47                 );
    48                 return;
    49         }
    50 
    51         $description = get_the_archive_description();
    52         if ( $description ) {
    53                 echo '<div class="archive-description">' . wp_kses_post( $description ) . '</div>';
    54         }
    55 }
    56 
    57 /**
    58  * Return a human-readable relative date for recent posts (e.g. "3 days ago")
    59  * and a formatted date for older posts.
    60  *
    61  * @return string Formatted date string.
    62  */
    63 function stackwise_get_relative_date() {
    64         $post_date = get_the_time( 'U' );
    65         $now       = current_time( 'timestamp' ); // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp.Requested
    66         $diff      = $now - $post_date;
    67         $days      = floor( $diff / DAY_IN_SECONDS );
    68 
    69         if ( $days < 1 ) {
    70                 return esc_html__( 'Today', 'stackwise' );
    71         } elseif ( $days < 7 ) {
    72                 /* translators: %d: number of days */
    73                 return sprintf( esc_html( _n( '%d day ago', '%d days ago', $days, 'stackwise' ) ), $days );
    74         }
    75 
    76         return esc_html( get_the_date() );
    77 }
    78 
    79 /**
    80  * Get post reading time estimate.
    81  *
    82  * Alias kept for templates that may call this directly. Prints the value.
    83  *
    84  * @return void
    85  */
    86 function stackwise_reading_time() {
    87         echo esc_html( stackwise_get_reading_time() );
    88 }
  • stackwise/1.2.1/inc/template-tags.php

    r351334 r357536  
    219219                        'twitter'   => array(
    220220                                'label' => __( 'Twitter', 'stackwise' ),
    221                                 'icon'  => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4l11.733 16h4.267l-11.733 -16z"></path><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path></svg>',
     221                                'icon'  => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4l11.733 16h4.267l-11.733 -16l-4.267 0"></path><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path></svg>',
    222222                        ),
    223223                        'instagram' => array(
    … …  
    231231                        'devto'     => array(
    232232                                'label' => __( 'Dev.to', 'stackwise' ),
    233                                 'icon'  => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M7.42 10.05c-.18-.16-.46-.23-.84-.23H6v4.36h.58c.37 0 .65-.08.84-.23.21-.17.31-.45.31-.87v-2.15c0-.43-.1-.71-.31-.88zM20.57 3H3.43C2.64 3 2 3.64 2 4.43v15.14c0 .79.64 1.43 1.43 1.43h17.14c.79 0 1.43-.64 1.43-1.43V4.43c0-.79-.64-1.43-1.43-1.43zM8.93 14.27c0 .9-.56 2.27-2.34 2.27H4.68V7.46h1.98c1.67 0 2.27 1.3 2.27 2.23v4.58zm4.09-4.2H10.9v1.81h1.29v1.4H10.9v1.81h2.12v1.4H10.2a.66.66 0 01-.66-.66V8.12c0-.36.3-.66.66-.66h2.82v1.4h-.01zm5.69 5.54c-.55 1.2-1.27 1.38-2.06 1.38-.79 0-1.49-.44-1.86-1.38l-1.62-6.14h1.62l1.11 4.81 1.11-4.81h1.6l-1.62 6.14h.72z"/></svg>',
     233                                'icon'  => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M7.42 10.05c-.18-.16-.46-.23-.84-.23H6l.02 2.44.04 2.45.56-.02c.41 0 .63-.07.83-.26.24-.24.26-.36.26-2.2 0-1.91-.02-1.96-.29-2.18zM0 4.94v14.12h24V4.94H0zM8.56 15.3c-.44.58-1.06.77-2.53.77H4.71V8.53h1.4c1.67 0 2.16.18 2.6.9.27.43.29.6.32 2.57.05 2.23-.02 2.73-.47 3.3zm5.09-5.47h-2.47v1.77h1.52v1.28l-.72.04-.75.03v1.77l1.22.03 1.2.04v1.28h-1.6c-1.53 0-1.6-.01-1.87-.3l-.3-.28v-3.16c0-3.02.01-3.18.25-3.48.23-.31.25-.31 1.88-.31h1.64v1.3zm4.68 5.45c-.17.43-.64.79-1 .79-.18 0-.45-.15-.67-.39-.32-.32-.45-.63-.82-2.08l-.9-3.39-.45-1.67h.76c.4 0 .75.02.75.05 0 .06 1.16 4.54 1.26 4.83.04.15.32-.7.73-2.3l.66-2.52.74-.04c.4-.02.73 0 .73.04 0 .14-1.67 6.38-1.8 6.68z"></path></svg>',
    234234                        ),
    235235                        'codepen'   => array(
  • stackwise/1.2.1/index.php

    r351334 r357536  
    1616?>
    1717
    18 <main id="primary" class="site-main" role="main">
     18<main id="primary" class="site-main" role="main" tabindex="-1">
    1919        <div class="sw-container">
    2020                <?php get_template_part( 'template-parts/archive-header' ); ?>
  • stackwise/1.2.1/languages/stackwise.pot

    r351334 r357536  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Stackwise 1.2.0\n"
     5"Project-Id-Version: Stackwise 1.2.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/stackwise\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-09-29T05:40:47+00:00\n"
     12"POT-Creation-Date: 2026-10-12T06:13:38+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    7373#: footer.php:40
    7474#: functions.php:56
    75 #: functions.php:386
     75#: functions.php:427
    7676msgid "Footer Menu"
    7777msgstr ""
    … …  
    108108
    109109#: functions.php:55
    110 #: functions.php:369
     110#: functions.php:410
    111111#: header.php:53
    112112msgid "Primary Menu"
    … …  
    121121msgstr ""
    122122
    123 #: functions.php:326
     123#: functions.php:236
     124#: header.php:73
     125msgid "Switch to dark mode"
     126msgstr ""
     127
     128#: functions.php:237
     129#: header.php:73
     130msgid "Switch to light mode"
     131msgstr ""
     132
     133#: functions.php:314
     134#: inc/customizer.php:150
     135#: template-parts/homepage/hero.php:12
     136msgid "Full Stack Developer"
     137msgstr ""
     138
     139#: functions.php:315
     140msgid "Frontend Engineer"
     141msgstr ""
     142
     143#: functions.php:316
     144msgid "Backend Developer"
     145msgstr ""
     146
     147#: functions.php:317
     148msgid "UI/UX Enthusiast"
     149msgstr ""
     150
     151#: functions.php:367
    124152msgctxt "Theme starter content"
    125153msgid "Home"
    126154msgstr ""
    127155
    128 #: functions.php:331
     156#: functions.php:372
    129157msgctxt "Theme starter content"
    130158msgid "About Me"
    131159msgstr ""
    132160
    133 #: functions.php:332
     161#: functions.php:373
    134162msgctxt "Theme starter content"
    135163msgid "I am a developer who builds fast, accessible websites. Use this page to tell visitors who you are, what you work on and what you care about."
    136164msgstr ""
    137165
    138 #: functions.php:333
     166#: functions.php:374
    139167msgctxt "Theme starter content"
    140168msgid "Add a featured image to this page to show a photo next to this text on the front page."
    141169msgstr ""
    142170
    143 #: functions.php:337
     171#: functions.php:378
    144172msgctxt "Theme starter content"
    145173msgid "What I Do"
    146174msgstr ""
    147175
    148 #: functions.php:342
     176#: functions.php:383
    149177msgctxt "Theme starter content"
    150178msgid "Blog"
    151179msgstr ""
    152180
    153 #: functions.php:346
    154 #: functions.php:380
     181#: functions.php:387
     182#: functions.php:421
    155183msgctxt "Theme starter content"
    156184msgid "Contact"
    157185msgstr ""
    158186
    159 #: functions.php:348
     187#: functions.php:389
    160188msgctxt "Theme starter content"
    161189msgid "Have a project in mind or just want to say hello? Add a contact form block from your form plugin here, and set your email address and location in Appearance > Customize > Theme Options."
    162190msgstr ""
    163191
    164 #: functions.php:374
     192#: functions.php:415
    165193msgctxt "Theme starter content"
    166194msgid "About"
    … …  
    179207msgstr ""
    180208
    181 #: header.php:73
    182 msgid "Switch to dark mode"
    183 msgstr ""
    184 
    185 #: header.php:73
    186 msgid "Switch to light mode"
    187 msgstr ""
    188 
    189209#: inc/block-patterns.php:24
    190210msgid "Frontend"
    … …  
    384404
    385405#: inc/block-patterns.php:198
    386 msgid "Outline"
     406msgid "Outline Accent"
    387407msgstr ""
    388408
    … …  
    436456msgstr ""
    437457
    438 #: inc/customizer.php:150
    439 #: template-parts/homepage/hero.php:12
    440 msgid "Full Stack Developer"
    441 msgstr ""
    442 
    443458#: inc/customizer.php:158
    444459msgid "Subtitle / Job Title"
    … …  
    626641msgid "Dribbble URL"
    627642msgstr ""
    628 
    629 #. translators: %s: search query.
    630 #: inc/template-functions.php:45
    631 #, php-format
    632 msgid "Search results for: %s"
    633 msgstr ""
    634 
    635 #: inc/template-functions.php:70
    636 msgid "Today"
    637 msgstr ""
    638 
    639 #. translators: %d: number of days
    640 #: inc/template-functions.php:73
    641 #, php-format
    642 msgid "%d day ago"
    643 msgid_plural "%d days ago"
    644 msgstr[0] ""
    645 msgstr[1] ""
    646643
    647644#: inc/template-tags.php:56
    … …  
    778775#. translators: %s: page title, only visible to screen readers.
    779776#: template-contact.php:55
    780 #: template-parts/homepage/page-section.php:67
     777#: template-parts/homepage/page-section.php:77
    781778#, php-format
    782779msgid "Edit %s"
  • stackwise/1.2.1/page.php

    r351334 r357536  
    1717?>
    1818
    19 <main id="primary" class="site-main" role="main">
     19<main id="primary" class="site-main" role="main" tabindex="-1">
    2020        <div class="sw-container">
    2121                <div class="sw-singular">
  • stackwise/1.2.1/readme.txt

    r351334 r357536  
    3333* Seven block patterns: Intro, Skills Columns, Project Card, Experience
    3434  Timeline Item, Call to Action, Code Showcase and Testimonial
    35 * Four block styles: Outline button, Terminal paragraph, Card group and
     35* Four block styles: Outline Accent button, Terminal paragraph, Card group and
    3636  Accent Border quote
    3737* Responsive layouts for phones, tablets, laptops and desktops, in dark and
    … …  
    103103
    104104== Changelog ==
     105
     106= 1.2.1 =
     107* Fixed: keyboard focus stays inside the open mobile menu.
     108* Fixed: form fields show a visible focus outline.
     109* Fixed: the skip link moves focus to the main content.
     110* Fixed: floated images in posts no longer push the post navigation aside.
     111* Fixed: the default hero typing text is translatable.
     112* Changed: block style names use the stackwise- prefix.
     113* Removed: unused template functions.
     114* Fixed: the About, Services and Contact sections stay hidden when no page is chosen, instead of repeating the front page content.
     115* Fixed: the search field shows a visible focus outline.
     116* Fixed: the block editor no longer loads the editor stylesheet twice (console warning).
     117* Fixed: the desktop menu no longer collapses into the menu button because of hidden third-level sub-menus.
     118* Changed: third-level and deeper menu items are listed inside their parent dropdown, indented, so deep menus stay on the screen.
     119* Fixed: the dark mode toggle is part of the keyboard focus cycle of the open mobile menu.
     120* Fixed: front page sections from the starter content show in the Customizer preview.
     121* Fixed: light mode is applied before the page is painted, so there is no dark flash.
     122* Fixed: long comment author names wrap between words.
     123* Fixed: the Number of Posts option is limited to 1-20 and checkbox options accept any checked value.
     124* Changed: the X, Dev.to and mail icons now come from Tabler Icons and Simple Icons, and decorative icons are hidden from screen readers.
     125* Changed: the Outline button style is named "Outline Accent" so it differs from the core Outline style.
     126* Changed: the Skills Columns pattern uses the current list block markup.
     127* Changed: the dark mode toggle's fallback labels are translatable.
     128* Added: a Privacy section and a Resources section with the license of every bundled resource in the readme.
     129* Fixed: a long site title no longer breaks out of the header; it uses at most two lines, and the menu collapses into the menu button when it does not fit next to the title.
     130* Fixed: long menu item names wrap in the mobile menu instead of being cut off.
     131* Changed: the menu button shows a close (X) icon while the menu is open.
    105132
    106133= 1.2.0 =
    … …  
    129156* Initial release
    130157
     158== Privacy ==
     159
     160Stackwise does not collect, store or send any personal data.
     161
     162* The dark mode toggle saves the visitor's choice ("light" or "dark") in the browser's localStorage under the key `stackwise-theme`. It stays in the visitor's browser and is never sent to the site or to anyone else.
     163* The theme loads the Inter and JetBrains Mono fonts from Google Fonts (https://fonts.google.com). When a page loads, the visitor's browser requests the fonts from Google's servers, which receive the visitor's IP address. See the Google Privacy Policy: https://policies.google.com/privacy
     164
    131165== Copyright ==
    132166
    … …  
    145179GNU General Public License for more details.
    146180
     181== Resources ==
     182
    147183This theme uses the following third-party resources:
    148184
    149 Inter Typeface, Copyright 2020 The Inter Project Authors
     185Inter
     186Copyright 2016 The Inter Project Authors
    150187License: SIL Open Font License, version 1.1
    151 Source: https://rsms.me/inter/
    152 
    153 JetBrains Mono, Copyright 2020 JetBrains s.r.o.
     188Source: https://github.com/rsms/inter
     189Loaded from Google Fonts: https://fonts.google.com/specimen/Inter
     190
     191JetBrains Mono
     192Copyright 2020 The JetBrains Mono Project Authors
    154193License: SIL Open Font License, version 1.1
    155 Source: https://www.jetbrains.com/legalnotice/
    156 
    157 Both fonts are loaded from Google Fonts (https://fonts.google.com) over HTTPS.
    158 No font files are bundled locally in the theme package.
    159 
    160 SVG icons used in the social links section are from Feather Icons.
    161 License: MIT License
    162 Source: https://feathericons.com/
    163 
    164 All images bundled with this theme (screenshot.png) are original works
    165 created for this theme and are released under GPL v2 or later.
     194Source: https://github.com/JetBrains/JetBrainsMono
     195Loaded from Google Fonts: https://fonts.google.com/specimen/JetBrains+Mono
     196
     197Both fonts are loaded from Google Fonts over HTTPS. No font files are
     198bundled in the theme package.
     199
     200Feather Icons
     201Copyright (c) 2013-2023 Cole Bemis
     202License: MIT License, https://opensource.org/licenses/MIT
     203Source: https://feathericons.com/ (https://github.com/feathericons/feather)
     204Icons used: sun, moon, search, home, folder, download, arrow-right, github,
     205linkedin, instagram, youtube, codepen, dribbble.
     206
     207Tabler Icons
     208Copyright (c) 2020-2026 Paweł Kuna
     209License: MIT License, https://opensource.org/licenses/MIT
     210Source: https://tabler.io/icons (https://github.com/tabler/tabler-icons)
     211Icons used: brand-x (X social link), mail (Contact section email button).
     212
     213Simple Icons
     214Copyright: Simple Icons contributors, dedicated to the public domain
     215License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/
     216Source: https://simpleicons.org/ (https://github.com/simple-icons/simple-icons)
     217Icons used: devdotto (Dev.to social link).
     218
     219Screenshot (screenshot.png)
     220Copyright 2026 Rahul Tank
     221License: GPLv2 or later, https://www.gnu.org/licenses/gpl-2.0.html
     222Source: an original screenshot of the theme, created for this theme. It
     223contains no third-party photos; the fonts and icons shown are listed above.
  • stackwise/1.2.1/search.php

    r351334 r357536  
    1212?>
    1313
    14 <main id="primary" class="site-main" role="main">
     14<main id="primary" class="site-main" role="main" tabindex="-1">
    1515        <div class="sw-container">
    1616                <?php get_template_part( 'template-parts/archive-header' ); ?>
  • stackwise/1.2.1/searchform.php

    r351334 r357536  
    1818                <button type="submit" class="search-submit">
    1919                        <span class="screen-reader-text"><?php echo esc_html_x( 'Search', 'submit button', 'stackwise' ); ?></span>
    20                         <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     20                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    2121                                <circle cx="11" cy="11" r="8"></circle>
    2222                                <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
  • stackwise/1.2.1/single.php

    r351334 r357536  
    1212?>
    1313
    14 <main id="primary" class="site-main" role="main">
     14<main id="primary" class="site-main" role="main" tabindex="-1">
    1515        <div class="sw-container">
    1616                <?php
  • stackwise/1.2.1/style.css

    r351334 r357536  
    44Author URI: https://profiles.wordpress.org/rahultank/
    55Description: A clean, modern portfolio and blog theme for developers and tech professionals. Stackwise ships with a dark/light mode toggle, a customizable hero section with an optional typing effect, a latest posts preview, social links, a footer widget area and seven block patterns. It is built for keyboard navigation and fast loading, and it works with the block editor.
    6 Version: 1.2.0
     6Version: 1.2.1
    77Requires at least: 6.0
    88Tested up to: 7.1
    … …  
    410410    align-items: center;
    411411    justify-content: space-between;
     412    gap: var(--sw-spacing-md);
    412413    height: 100%;
    413414}
    414415
     416/*
     417 * A long site title uses at most two lines and is then shortened with an
     418 * ellipsis, so the header keeps its height. While navigation.js measures
     419 * whether the menu fits, the title keeps its full width (.sw-nav-measuring),
     420 * so a menu that does not fit next to the full title collapses into the toggle.
     421 */
    415422.site-branding {
    416423    display: flex;
    417424    align-items: center;
    418425    gap: var(--sw-spacing-sm);
     426    min-width: 0;
     427}
     428
     429.sw-nav-measuring .site-branding {
     430    flex-shrink: 0;
    419431}
    420432
    421433.site-title {
     434    min-width: 0;
    422435    margin: 0;
    423436    font-family: var(--sw-font-mono);
    … …  
    427440
    428441.site-title a {
     442    display: -webkit-box;
     443    -webkit-box-orient: vertical;
     444    -webkit-line-clamp: 2;
     445    line-clamp: 2;
     446    overflow: hidden;
     447    padding-block: 1px;
    429448    color: var(--sw-color-text-primary);
     449    line-height: 1.3;
    430450    text-decoration: none;
     451    overflow-wrap: anywhere;
    431452}
    432453
    … …  
    449470.main-navigation {
    450471    display: flex;
     472    flex-shrink: 0;
    451473    align-items: center;
    452474    gap: var(--sw-spacing-lg);
    … …  
    507529}
    508530
     531/*
     532 * Third and deeper levels are listed inside their parent dropdown, indented,
     533 * instead of flying out to the side. Deep menus then never run off the
     534 * right edge of the screen.
     535 */
    509536.nav-menu .sub-menu .sub-menu,
    510537.nav-menu .children .children {
    511     top: 0;
    512     left: 100%;
     538    position: static;
     539    min-width: 0;
     540    padding: 0 0 0 var(--sw-spacing-md);
     541    background: none;
     542    border: 0;
     543    box-shadow: none;
     544    opacity: 1;
     545    visibility: inherit;
     546    transform: none;
     547}
     548
     549.nav-menu .sub-menu .menu-item-has-children > a::after,
     550.nav-menu .children .page_item_has_children > a::after {
     551    display: none;
    513552}
    514553
    … …  
    566605.sw-nav-collapsed .nav-menu.nav-menu--open {
    567606    display: flex;
     607}
     608
     609/* In the toggle menu, long item names wrap instead of running off the screen. */
     610.sw-nav-collapsed .nav-menu a {
     611    white-space: normal;
     612    overflow-wrap: break-word;
    568613}
    569614
    … …  
    634679@media (prefers-reduced-motion: reduce) {
    635680    .nav-menu .sub-menu,
    636     .nav-menu .children {
     681    .nav-menu .children,
     682    .menu-toggle .bar {
    637683        transition: none;
    638684    }
    … …  
    659705    margin: 4px 0;
    660706    background-color: currentColor;
    661     transition: color var(--sw-transition-fast), background-color var(--sw-transition-fast), border-color var(--sw-transition-fast);
     707    transition: background-color var(--sw-transition-fast), opacity var(--sw-transition-fast), transform var(--sw-transition-fast);
     708}
     709
     710/* The open menu toggle shows a close (X) icon. */
     711.menu-toggle--open .bar:nth-last-child(3) {
     712    transform: translateY(6px) rotate(45deg);
     713}
     714
     715.menu-toggle--open .bar:nth-last-child(2) {
     716    opacity: 0;
     717}
     718
     719.menu-toggle--open .bar:last-child {
     720    transform: translateY(-6px) rotate(-45deg);
    662721}
    663722
    … …  
    14061465.sw-contact-form input:focus,
    14071466.sw-contact-form textarea:focus {
    1408     outline: none;
     1467    outline: 2px solid var(--sw-color-accent);
     1468    outline-offset: 2px;
    14091469    border-color: var(--sw-color-accent);
    14101470}
    … …  
    14831543}
    14841544
     1545/* The ring sits on the wrapper because overflow: hidden would clip an outline on the field. */
    14851546.search-form-wrapper:focus-within {
    14861547    border-color: var(--sw-color-accent);
     1548    outline: 2px solid var(--sw-color-accent);
     1549    outline-offset: 2px;
    14871550}
    14881551
    … …  
    15011564.search-form .search-field:focus {
    15021565    outline: none;
    1503     box-shadow: none;
    15041566}
    15051567
    … …  
    17771839textarea:focus,
    17781840select:focus {
    1779     outline: none;
     1841    outline: 2px solid var(--sw-color-accent);
     1842    outline-offset: 2px;
    17801843    border-color: var(--sw-color-accent);
    17811844}
    … …  
    18461909}
    18471910
     1911/* The skip link target receives focus programmatically; it is not a control. */
     1912#primary[tabindex="-1"]:focus {
     1913    outline: 0;
     1914}
     1915
    18481916/*--------------------------------------------------------------
    18491917# Alignments
    … …  
    29763044}
    29773045
     3046/* Contain floated images (alignleft, alignright) inside the post content. */
     3047.entry-content::after {
     3048    content: "";
     3049    display: table;
     3050    clear: both;
     3051}
     3052
    29783053/* Previous / next post */
    29793054.post-navigation {
     3055    clear: both;
    29803056    margin-top: var(--sw-spacing-2xl);
    29813057    padding: 0;
    … …  
    30463122}
    30473123
     3124/*
     3125 * Names and dates wrap between words. "anywhere" would let the flex items
     3126 * shrink to one character wide, so it is only used for the comment text;
     3127 * here a word is broken only when it is longer than the whole line.
     3128 */
     3129.comment-meta {
     3130    flex-wrap: wrap;
     3131    row-gap: var(--sw-spacing-xs);
     3132    overflow-wrap: break-word;
     3133}
     3134
    30483135.comment-author {
    30493136    display: flex;
    30503137    align-items: center;
    30513138    gap: var(--sw-spacing-sm);
     3139    min-width: 0;
     3140}
     3141
     3142.comment-author .fn {
     3143    min-width: 0;
    30523144}
    30533145
    … …  
    31643256}
    31653257
    3166 .sw-blog-title a,
    3167 .site-title a {
     3258.sw-blog-title a {
    31683259    display: inline-block;
    31693260    padding-block: 1px;
    … …  
    32333324}
    32343325
    3235 /* Button: Outline */
    3236 .wp-block-button.is-style-sw-outline .wp-block-button__link {
     3326/* Button: Outline Accent (stackwise-outline) */
     3327.wp-block-button.is-style-stackwise-outline .wp-block-button__link {
    32373328    border: 1px solid currentColor;
    32383329    background-color: transparent;
    … …  
    32403331}
    32413332
    3242 .wp-block-button.is-style-sw-outline .wp-block-button__link:hover,
    3243 .wp-block-button.is-style-sw-outline .wp-block-button__link:focus {
     3333.wp-block-button.is-style-stackwise-outline .wp-block-button__link:hover,
     3334.wp-block-button.is-style-stackwise-outline .wp-block-button__link:focus {
    32443335    background-color: var(--sw-color-bg-secondary);
    32453336    color: var(--sw-color-accent);
    … …  
    32473338
    32483339/* Paragraph: Terminal */
    3249 p.is-style-sw-terminal {
     3340p.is-style-stackwise-terminal {
    32503341    padding: 0.5em 1em;
    32513342    border-left: 3px solid var(--sw-color-accent);
    … …  
    32583349
    32593350/* Group: Card */
    3260 .wp-block-group.is-style-sw-card {
     3351.wp-block-group.is-style-stackwise-card {
    32613352    padding: var(--sw-spacing-lg);
    32623353    border: 1px solid var(--sw-color-border);
    … …  
    32663357
    32673358/* Quote: Accent Border */
    3268 .wp-block-quote.is-style-sw-accent {
     3359.wp-block-quote.is-style-stackwise-accent {
    32693360    padding: var(--sw-spacing-md) var(--sw-spacing-lg);
    32703361    border-left: 4px solid var(--sw-color-accent);
    … …  
    32743365}
    32753366
    3276 .wp-block-quote.is-style-sw-accent cite {
     3367.wp-block-quote.is-style-stackwise-accent cite {
    32773368    font-size: var(--sw-font-size-sm);
    32783369    color: var(--sw-color-text-muted);
    … …  
    33963487    .nav-menu a {
    33973488        padding: var(--sw-spacing-md);
     3489        white-space: normal;
     3490        overflow-wrap: break-word;
    33983491    }
    33993492
  • stackwise/1.2.1/template-contact.php

    r351334 r357536  
    1919?>
    2020
    21 <main id="primary" class="site-main" role="main">
     21<main id="primary" class="site-main" role="main" tabindex="-1">
    2222        <div class="sw-container">
    2323                <?php
  • stackwise/1.2.1/template-parts/homepage/blog-preview.php

    r351334 r357536  
    1515$stackwise_args = array(
    1616        'post_type'           => 'post',
    17         'posts_per_page'      => absint( $stackwise_posts_count ),
     17        'posts_per_page'      => stackwise_sanitize_blog_posts_count( $stackwise_posts_count ),
    1818        'ignore_sticky_posts' => true,
    1919        'no_found_rows'       => true,
  • stackwise/1.2.1/template-parts/homepage/hero.php

    r351334 r357536  
    5757                                <?php if ( $stackwise_btn_primary_text && $stackwise_btn_primary_url ) : ?>
    5858                                        <a href="<?php echo esc_url( $stackwise_btn_primary_url ); ?>" class="sw-btn sw-btn-primary">
    59                                                 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     59                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    6060                                                        <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
    6161                                                </svg>
    … …  
    6666                                <?php if ( $stackwise_btn_secondary_text && $stackwise_btn_secondary_url ) : ?>
    6767                                        <a href="<?php echo esc_url( $stackwise_btn_secondary_url ); ?>" class="sw-btn sw-btn-secondary">
    68                                                 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
     68                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    6969                                                        <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
    7070                                                        <polyline points="7 10 12 15 17 10"></polyline>
  • stackwise/1.2.1/template-parts/homepage/page-section.php

    r351334 r357536  
    1616 */
    1717
    18 $stackwise_section_page = isset( $args['page_id'] ) ? get_post( absint( $args['page_id'] ) ) : null;
     18$stackwise_page_id = isset( $args['page_id'] ) ? absint( $args['page_id'] ) : 0;
    1919
    20 if ( ! $stackwise_section_page || 'page' !== $stackwise_section_page->post_type || 'publish' !== $stackwise_section_page->post_status || post_password_required( $stackwise_section_page ) ) {
     20// No page chosen: hide the section. get_post( 0 ) would return the current global post.
     21if ( ! $stackwise_page_id ) {
     22        return;
     23}
     24
     25$stackwise_section_page = get_post( $stackwise_page_id );
     26
     27// Starter content pages stay auto-drafts until the Customizer changes are published.
     28$stackwise_allowed_statuses = is_customize_preview() ? array( 'publish', 'auto-draft' ) : array( 'publish' );
     29
     30if ( ! $stackwise_section_page || 'page' !== $stackwise_section_page->post_type || ! in_array( $stackwise_section_page->post_status, $stackwise_allowed_statuses, true ) || post_password_required( $stackwise_section_page ) ) {
    2131        return;
    2232}
    … …  
    5464                                                <div class="sw-fp-contact-links">
    5565                                                        <a class="sw-btn sw-btn-secondary" href="<?php echo esc_url( 'mailto:' . antispambot( $stackwise_contact_email ) ); ?>">
    56                                                                 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="3" y="5" width="18" height="14" rx="2"></rect><polyline points="3 7 12 13 21 7"></polyline></svg>
     66                                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10"></path><path d="M3 7l9 6l9 -6"></path></svg>
    5767                                                                <?php echo esc_html( antispambot( $stackwise_contact_email ) ); ?>
    5868                                                        </a>
Note: See TracChangeset for help on using the changeset viewer.