Plugin Directory

Changeset 3736416


Ignore:
Timestamp:
10/09/2026 10:35:13 AM (4 weeks ago)
Author:
launchmind
Message:

Release 6.6.0: see the changelog in readme.txt

Location:
launchmind-blog/trunk
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • launchmind-blog/trunk/includes/class-launchmind-talent-blocks.php

    r3734683 r3736416  
    7272        $heeft_verhaal = !empty($story['about']) || !empty($story['featured']);
    7373        $careers = isset($site['careers']) && is_array($site['careers']) ? $site['careers'] : array();
     74        $team = isset($site['team']) ? $site['team'] : array();
    7475        // Volgorde van de pagina; elke sectie alleen als hij aan staat en er inhoud is.
    7576        $secties = array(
    … …  
    9091            'hub'       => function () use ($site, $heeft_verhaal) { return $heeft_verhaal || $site['hubHtml'] === '' ? '' : self::hub($site['hubHtml']); },
    9192            'stories'   => function () use ($verhalen, $lang) { return empty($verhalen) ? '' : self::stories_section($verhalen, $lang); },
    92             'team'      => function () use ($site, $lang) { return Launchmind_Talent_Sections::team(isset($site['team']) ? $site['team'] : array(), $lang); },
     93            'team'      => function () use ($team, $lang, $vacatures) { return Launchmind_Talent_Sections::team($team, $lang, count($vacatures)); },
    9394            'vacancies' => function () use ($vacatures, $site, $lang, $stopped) { return self::vacancies_section($vacatures, $site, $lang, $stopped); },
    94             'roles'     => function () use ($site, $lang, $stopped) { return $stopped ? '' : Launchmind_Talent_Sections::roles_links(isset($site['roles']) ? $site['roles'] : array(), $lang); },
     95            'roles'     => function () use ($site, $lang, $stopped, $team) { return $stopped ? '' : Launchmind_Talent_Sections::roles_links(isset($site['roles']) ? $site['roles'] : array(), $lang, $team); },
    9596            'process'   => function () use ($careers, $lang) { return Launchmind_Talent_Sections::process($careers, $lang); },
    9697            'faq'       => function () use ($story, $lang) { return empty($story['faq']) ? '' : self::faq($story['faq'], $lang); },
    … …  
    229230
    230231    /** Staat de URL op deze site (met of zonder www)? */
    231     private static function own_host($url) {
     232    public static function own_host($url) {
    232233        $host = strtolower((string) wp_parse_url((string) $url, PHP_URL_HOST));
    233234        $eigen = strtolower((string) wp_parse_url((string) home_url('/'), PHP_URL_HOST));
  • launchmind-blog/trunk/includes/class-launchmind-talent-feed.php

    r3734865 r3736416  
    316316        $uit = array('images' => array());
    317317        $beelden = is_array($design) && isset($design['images']) && is_array($design['images']) ? $design['images'] : array();
    318         foreach (array('hero', 'about', 'culture', 'cta') as $plek) {
     318        foreach (array('hero', 'about', 'culture', 'cta', 'process', 'roles') as $plek) {
    319319            $beeld = isset($beelden[$plek]) && is_array($beelden[$plek]) ? $beelden[$plek] : null;
    320320            $url = $beeld ? self::clean_url(isset($beeld['url']) ? $beeld['url'] : '') : '';
  • launchmind-blog/trunk/includes/class-launchmind-talent-render.php

    r3734683 r3736416  
    3333    const STRINGS = array(
    3434        'nl' => array(
     35            'join_title' => 'Word jij onze nieuwe collega?', 'join_cta' => 'Bekijk de vacatures', 'role_with' => 'Je werkt samen met %s', 'list_and' => 'en', 'n_others' => '%d anderen',
    3536            'vacancies' => 'Vacatures', 'stories' => 'Verhalen van onze mensen',
    3637            'no_vacancies' => 'Er staan op dit moment geen vacatures open.',
    … …  
    5051        ),
    5152        'en' => array(
     53            'join_title' => 'Could you be our next colleague?', 'join_cta' => 'See the vacancies', 'role_with' => 'You work alongside %s', 'list_and' => 'and', 'n_others' => '%d others',
    5254            'vacancies' => 'Open positions', 'stories' => 'Stories from our people',
    5355            'no_vacancies' => 'There are no open positions at the moment.',
    … …  
    6769        ),
    6870        'de' => array(
     71            'join_title' => 'Wirst du Teil unseres Teams?', 'join_cta' => 'Zu den Stellen', 'role_with' => 'Du arbeitest mit %s', 'list_and' => 'und', 'n_others' => '%d weiteren',
    6972            'vacancies' => 'Offene Stellen', 'stories' => 'Geschichten unserer Mitarbeitenden',
    7073            'no_vacancies' => 'Derzeit sind keine Stellen offen.',
    … …  
    8487        ),
    8588        'fr' => array(
     89            'join_title' => 'Et si tu devenais notre prochain collègue ?', 'join_cta' => 'Voir les offres', 'role_with' => 'Tu travailles avec %s', 'list_and' => 'et', 'n_others' => '%d autres',
    8690            'vacancies' => 'Postes ouverts', 'stories' => 'Histoires de nos équipes',
    8791            'no_vacancies' => 'Aucun poste n\'est ouvert pour le moment.',
    … …  
    101105        ),
    102106        'es' => array(
     107            'join_title' => '¿Serás nuestro próximo compañero?', 'join_cta' => 'Ver las vacantes', 'role_with' => 'Trabajas con %s', 'list_and' => 'y', 'n_others' => '%d más',
    103108            'vacancies' => 'Vacantes', 'stories' => 'Historias de nuestro equipo',
    104109            'no_vacancies' => 'En este momento no hay vacantes abiertas.',
    … …  
    118123        ),
    119124        'it' => array(
     125            'join_title' => 'Sarai tu il nostro nuovo collega?', 'join_cta' => 'Vedi le posizioni', 'role_with' => 'Lavori con %s', 'list_and' => 'e', 'n_others' => 'altri %d',
    120126            'vacancies' => 'Posizioni aperte', 'stories' => 'Storie dal nostro team',
    121127            'no_vacancies' => 'Al momento non ci sono posizioni aperte.',
    … …  
    135141        ),
    136142        'pt' => array(
     143            'join_title' => 'Vais ser o nosso próximo colega?', 'join_cta' => 'Ver as vagas', 'role_with' => 'Trabalhas com %s', 'list_and' => 'e', 'n_others' => 'mais %d',
    137144            'vacancies' => 'Vagas abertas', 'stories' => 'Histórias da nossa equipe',
    138145            'no_vacancies' => 'No momento não há vagas abertas.',
    … …  
    152159        ),
    153160        'da' => array(
     161            'join_title' => 'Bliver du vores nye kollega?', 'join_cta' => 'Se de ledige stillinger', 'role_with' => 'Du arbejder sammen med %s', 'list_and' => 'og', 'n_others' => '%d andre',
    154162            'vacancies' => 'Ledige stillinger', 'stories' => 'Historier fra vores medarbejdere',
    155163            'no_vacancies' => 'Der er ingen ledige stillinger i øjeblikket.',
    … …  
    169177        ),
    170178        'pl' => array(
     179            'join_title' => 'Zostaniesz naszym nowym współpracownikiem?', 'join_cta' => 'Zobacz oferty', 'role_with' => 'Pracujesz razem z %s', 'list_and' => 'i', 'n_others' => '%d innymi',
    171180            'vacancies' => 'Oferty pracy', 'stories' => 'Historie naszych ludzi',
    172181            'no_vacancies' => 'Obecnie nie ma otwartych ofert.',
    … …  
    186195        ),
    187196        'hi' => array(
     197            'join_title' => 'क्या आप हमारे नए साथी बनेंगे?', 'join_cta' => 'रिक्तियाँ देखें', 'role_with' => 'आप %s के साथ काम करेंगे', 'list_and' => 'और', 'n_others' => '%d अन्य',
    188198            'vacancies' => 'खुले पद', 'stories' => 'हमारे लोगों की कहानियाँ',
    189199            'no_vacancies' => 'इस समय कोई खुला पद नहीं है।',
  • launchmind-blog/trunk/includes/class-launchmind-talent-sections.php

    r3734865 r3736416  
    121121     * vanaf drie collega's: een team van een of twee is geen overzicht.
    122122     */
    123     public static function team($team, $lang) {
     123    public static function team($team, $lang, $open = 0) {
    124124        $team = is_array($team) ? $team : array();
    125125        if (count($team) < 3) {
    … …  
    131131            $url = !empty($p['storyId']) && method_exists('Launchmind_Talent_Stories', 'url_for') ? Launchmind_Talent_Stories::url_for($p['storyId'], '') : '';
    132132            // Hoogstens drie grote kaarten: anders is groot het nieuwe normaal.
    133             $uitgelicht = $url !== '' && $groot < 3;
     133            // Groot alleen met een echte foto: initialen of een uitgeknipte
     134            // PNG op dubbele grootte is een leeg of wazig vlak.
     135            list(, $soort) = self::team_photo($p);
     136            $uitgelicht = $url !== '' && $groot < 3 && $soort === 'is-photo';
    134137            $groot += $uitgelicht ? 1 : 0;
    135138            $kaarten[] = self::team_card($p, $uitgelicht ? $url : '', $lang);
    … …  
    142145            );
    143146        }
     147        // 6.6: een open plek in het team, met een link naar de vacatures.
     148        if ($open > 0) {
     149            $kaarten[] = self::join_tile($lang);
     150        }
    144151        return Launchmind_Talent_Blocks::group(
    145152            Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_team', $lang), Launchmind_Talent_Render::t('team_heading', $lang))
    146153                . "\n\n" . Launchmind_Talent_Blocks::group(implode("\n\n", $kaarten), array('className' => 'lm-talent-team__grid')),
    147154            array('align' => 'wide', 'className' => 'lm-talent-team lm-talent-section', 'anchor' => 'lm-team')
     155        );
     156    }
     157
     158    /** "Word jij onze nieuwe collega?": een lege plek in het raster, op het merkvlak. */
     159    private static function join_tile($lang) {
     160        return Launchmind_Talent_Blocks::group(
     161            Launchmind_Talent_Blocks::paragraph('', array('className' => 'lm-talent-join__icon'))
     162                . "\n\n" . Launchmind_Talent_Blocks::paragraph('<strong>' . esc_html(Launchmind_Talent_Render::t('join_title', $lang)) . '</strong>', array('className' => 'lm-talent-join__title'))
     163                . "\n\n" . Launchmind_Talent_Blocks::paragraph('<a href="#lm-vacatures">' . esc_html(Launchmind_Talent_Render::t('join_cta', $lang)) . '</a>', array('className' => 'lm-talent-join__cta')),
     164            array('className' => 'lm-talent-team__card is-join')
    148165        );
    149166    }
    … …  
    392409        $items = array();
    393410        foreach ($stappen as $i => $stap) {
     411            // 6.6: nummer en titel in een pijl, de pijlen samen een route.
    394412            $binnen = array(
    395                 Launchmind_Talent_Blocks::paragraph(sprintf('%02d', $i + 1), array('className' => 'lm-talent-step__num')),
    396                 Launchmind_Talent_Blocks::heading(esc_html($stap['title']), 3),
     413                Launchmind_Talent_Blocks::group(
     414                    Launchmind_Talent_Blocks::paragraph(sprintf('%02d', $i + 1), array('className' => 'lm-talent-step__num'))
     415                        . "\n\n" . Launchmind_Talent_Blocks::heading(esc_html($stap['title']), 3),
     416                    array('className' => 'lm-talent-step__arrow')
     417                ),
    397418            );
    398419            if (!empty($stap['duration'])) {
    … …  
    404425            $items[] = Launchmind_Talent_Blocks::group(implode("\n\n", $binnen), array('className' => 'lm-talent-step'));
    405426        }
     427        $kop = Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_process', $lang), Launchmind_Talent_Render::t('process_heading', $lang));
     428        if (!empty($careers['processDays'])) {
     429            $kop .= "\n\n" . Launchmind_Talent_Blocks::paragraph(esc_html(sprintf(Launchmind_Talent_Render::t('process_days', $lang), (int) $careers['processDays'])), array('className' => 'lm-talent-lead lm-talent-steps__days'));
     430        }
    406431        $delen = array(
    407             Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_process', $lang), Launchmind_Talent_Render::t('process_heading', $lang)),
    408             Launchmind_Talent_Blocks::group(implode("\n\n", $items), array('className' => 'lm-talent-steps')),
    409         );
    410         if (!empty($careers['processDays'])) {
    411             $delen[] = Launchmind_Talent_Blocks::paragraph(esc_html(sprintf(Launchmind_Talent_Render::t('process_days', $lang), (int) $careers['processDays'])), array('className' => 'lm-talent-lead lm-talent-steps__days'));
    412         }
     432            Launchmind_Talent_Blocks::split($kop, Launchmind_Talent_Blocks::site_image('process', 'large'), false, '55%'),
     433            Launchmind_Talent_Blocks::group(implode("\n\n", $items), array('className' => 'lm-talent-steps lm-talent-steps--flow')),
     434        );
    413435        return Launchmind_Talent_Blocks::group(implode("\n\n", $delen), array('align' => 'wide', 'className' => 'lm-talent-process lm-talent-section', 'anchor' => 'lm-solliciteren'));
    414436    }
    … …  
    454476     * linkstructuur.
    455477     */
    456     public static function roles_links($roles, $lang) {
     478    public static function roles_links($roles, $lang, $team = array()) {
    457479        $kaarten = array();
    458480        foreach (is_array($roles) ? $roles : array() as $role) {
    … …  
    467489                $binnen[] = Launchmind_Talent_Blocks::paragraph(esc_html(trim($meta . ($role['city'] !== '' ? ', ' . $role['city'] : ''), ', ')), array('className' => 'lm-talent-card__meta'));
    468490            }
     491            // 6.6: wie dit werk al doet, met gezicht.
     492            $collegas = self::role_colleagues($team, $role['title']);
     493            if (!empty($collegas)) {
     494                $binnen[] = self::role_team($collegas, $lang);
     495            }
    469496            $kaarten[] = Launchmind_Talent_Blocks::group(implode("\n\n", $binnen), array('className' => 'lm-talent-card lm-talent-role-card'));
    470497        }
    … …  
    472499            return '';
    473500        }
     501        $tekst = Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_roles', $lang), Launchmind_Talent_Render::t('roles_heading', $lang))
     502            . "\n\n" . Launchmind_Talent_Blocks::grid(implode("\n\n", $kaarten), 'lm-talent-roles__grid');
     503        // 6.6: een foto van het werk ernaast, als Launchmind er een koos.
     504        $beeld = Launchmind_Talent_Blocks::site_image('roles', 'large');
    474505        return Launchmind_Talent_Blocks::group(
    475             Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_roles', $lang), Launchmind_Talent_Render::t('roles_heading', $lang))
    476                 . "\n\n" . Launchmind_Talent_Blocks::grid(implode("\n\n", $kaarten), 'lm-talent-roles__grid'),
    477             array('align' => 'wide', 'className' => 'lm-talent-roles lm-talent-section', 'anchor' => 'lm-functies')
     506            $beeld !== '' ? Launchmind_Talent_Blocks::split($tekst, $beeld, true, '58%') : $tekst,
     507            array('align' => 'wide', 'className' => 'lm-talent-roles lm-talent-section' . ($beeld !== '' ? ' has-image' : ''), 'anchor' => 'lm-functies')
     508        );
     509    }
     510
     511    /**
     512     * Collega's met deze functie (titel gelijk of de een bevat de ander),
     513     * met foto voorop.
     514     */
     515    public static function role_colleagues($team, $titel) {
     516        $titel = strtolower(trim((string) $titel));
     517        $uit = array();
     518        foreach (is_array($team) ? $team : array() as $p) {
     519            $rol = strtolower(trim(isset($p['role']) ? (string) $p['role'] : ''));
     520            if ($titel === '' || $rol === '' || (strpos($rol, $titel) === false && strpos($titel, $rol) === false)) {
     521                continue;
     522            }
     523            $uit[] = $p;
     524        }
     525        usort($uit, function ($a, $b) {
     526            return (self::avatar_url($b) !== '') - (self::avatar_url($a) !== '');
     527        });
     528        return $uit;
     529    }
     530
     531    /** Portret voor een rondje: liever de portretfoto, anders de sfeerfoto. */
     532    private static function avatar_url($p) {
     533        foreach (array('photo', 'scene') as $veld) {
     534            $u = isset($p[$veld]) ? (string) $p[$veld] : '';
     535            if (stripos($u, 'https://') === 0) {
     536                return $u;
     537            }
     538        }
     539        return '';
     540    }
     541
     542    /** Drie gezichtjes en "Je werkt samen met Dim, Jens en 3 anderen". */
     543    private static function role_team($collegas, $lang) {
     544        $gezichten = '';
     545        foreach (array_slice($collegas, 0, 3) as $p) {
     546            $u = self::avatar_url($p);
     547            // Een PNG van de teampagina is vaak een hele persoon: inzoomen op het hoofd.
     548            $gezichten .= $u !== ''
     549                ? '<span class="lm-talent-face' . (preg_match('/\.png(\?|$)/i', $u) ? ' is-cutout' : '') . '"><img src="' . esc_url($u) . '" alt="" loading="lazy"/></span>'
     550                : '<span class="lm-talent-face">' . esc_html(self::initials($p['name'])) . '</span>';
     551        }
     552        $namen = array();
     553        // Bij drie collega's gewoon drie namen: "en 1 anderen" leest raar.
     554        foreach (array_slice($collegas, 0, count($collegas) === 3 ? 3 : 2) as $p) {
     555            $namen[] = esc_html(strtok((string) $p['name'], ' '));
     556        }
     557        $rest = count($collegas) - count($namen);
     558        if ($rest > 0) {
     559            $namen[] = esc_html(sprintf(Launchmind_Talent_Render::t('n_others', $lang), $rest));
     560        }
     561        $laatste = array_pop($namen);
     562        $lijst = empty($namen) ? $laatste : implode(', ', $namen) . ' ' . esc_html(Launchmind_Talent_Render::t('list_and', $lang)) . ' ' . $laatste;
     563        return Launchmind_Talent_Blocks::paragraph(
     564            '<span class="lm-talent-faces" aria-hidden="true">' . $gezichten . '</span>' . sprintf(esc_html(Launchmind_Talent_Render::t('role_with', $lang)), $lijst),
     565            array('className' => 'lm-talent-role-card__team')
    478566        );
    479567    }
  • launchmind-blog/trunk/includes/class-launchmind-talent-style.php

    r3734683 r3736416  
    131131        }
    132132        if (!empty($regels) && function_exists('wp_add_inline_style')) {
    133             wp_add_inline_style('launchmind-blog', '.' . Launchmind_Talent_Blocks::SCOPE_CLASS . '{' . implode(';', $regels) . ';}');
     133            wp_add_inline_style('launchmind-blog', '.' . Launchmind_Talent_Blocks::SCOPE_CLASS . '{' . implode(';', $regels) . ';}'
     134                . (class_exists('Launchmind_Talent_Motif') ? Launchmind_Talent_Motif::css() : ''));
    134135        }
    135136        if (self::is_talent_view() && function_exists('wp_enqueue_script')) {
    … …  
    168169        foreach (self::elementor_fonts() as $naam => $font) {
    169170            $uit[$naam] = $font;
     171        }
     172        // 6.6: het icoon van de site (pijltje, chevron, vinkje) voor lijsten en links.
     173        if (class_exists('Launchmind_Talent_Motif')) {
     174            $uit = array_merge($uit, Launchmind_Talent_Motif::tokens());
    170175        }
    171176        $breedte = self::container_width();
  • launchmind-blog/trunk/launchmind-blog.php

    r3734865 r3736416  
    33 * Plugin Name: Launchmind Blog
    44 * Description: Display AI-powered Launchmind blog content on your WordPress site.
    5  * Version: 6.5.1
     5 * Version: 6.6.0
    66 * Author: Launchmind.io
    77 * Author URI: https://launchmind.io
    … …  
    2020
    2121// Define plugin constants
    22 define('LAUNCHMIND_BLOG_VERSION', '6.5.1');
     22define('LAUNCHMIND_BLOG_VERSION', '6.6.0');
    2323define('LAUNCHMIND_BLOG_PLUGIN_DIR', plugin_dir_path(__FILE__));
    2424define('LAUNCHMIND_BLOG_PLUGIN_URL', plugin_dir_url(__FILE__));
    … …  
    111111        require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-i18n.php';
    112112        require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-media.php';
     113        require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-motif.php';
    113114        require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-style.php';
    114115        // 4.0 SEO classes — coexist with the host's SEO plugin instead of
  • launchmind-blog/trunk/public/css/launchmind-blog.css

    r3734865 r3736416  
    16741674        border-radius: var(--lm-radius);
    16751675    }
     1676    /* Telefoon: eerst de mensen, dan de tekst. Een lage foto onder de
     1677       header, zodat de kop meteen in beeld blijft. */
     1678    .lm-talent-scope .lm-talent-hero.is-bleed .lm-talent-split {
     1679        flex-direction: column-reverse;
     1680        gap: 1.5rem;
     1681        min-height: 0;
     1682    }
    16761683    .lm-talent-scope .lm-talent-hero.is-bleed .lm-talent-split > .wp-block-column:last-child {
    1677         padding-bottom: var(--lm-pad-y);
     1684        padding-top: calc(1.25rem + var(--lm-header-offset, 0px));
     1685    }
     1686    .lm-talent-scope .lm-talent-hero.is-bleed .lm-talent-split > .wp-block-column:first-child {
     1687        padding-block: 0 calc(var(--lm-pad-y) + clamp(2rem, 4vw, 3rem));
     1688    }
     1689    .lm-talent-scope .lm-talent-hero.is-bleed .lm-talent-photo--hero {
     1690        min-height: 0;
     1691    }
     1692    .lm-talent-scope .lm-talent-hero.is-bleed .lm-talent-photo--hero img {
     1693        height: auto;
     1694        aspect-ratio: 16 / 10;
     1695    }
     1696    .lm-talent-scope .lm-talent-hero.is-bleed h1 {
     1697        font-size: clamp(2rem, 9vw, 2.6rem);
    16781698    }
    16791699}
    … …  
    20242044    opacity: .7;
    20252045}
     2046/* Telefoon: twee kolommen in plaats van een lange lijst onder elkaar. */
    20262047@media (max-width: 600px) {
     2048    .lm-talent-scope .lm-talent-facts {
     2049        display: grid;
     2050        grid-template-columns: 1fr 1fr;
     2051        gap: 1rem .5rem;
     2052        padding: 1.25rem 1rem;
     2053    }
     2054    .lm-talent-scope .lm-talent-fact {
     2055        padding: 0 .5rem;
     2056    }
    20272057    .lm-talent-scope .lm-talent-fact + .lm-talent-fact {
    20282058        border-left: 0;
     2059    }
     2060    .lm-talent-scope .lm-talent-fact:last-child:nth-child(odd) {
     2061        grid-column: 1 / -1;
     2062    }
     2063    .lm-talent-scope .lm-talent-fact .lm-talent-fact__value {
     2064        font-size: 1.6rem;
     2065    }
     2066    .lm-talent-scope .lm-talent-fact .lm-talent-fact__label {
     2067        font-size: .7rem;
     2068        letter-spacing: .06em;
    20292069    }
    20302070}
    … …  
    24252465}
    24262466
     2467/* Telefoon: kleinere kaarten, dus een lager naamvlak dat het gezicht vrijlaat. */
     2468@media (max-width: 600px) {
     2469    .lm-talent-scope .lm-talent-team__card.has-photo:not(.is-featured) .lm-talent-team__who {
     2470        padding: 2.25rem .75rem .75rem;
     2471        font-size: .8rem;
     2472    }
     2473}
     2474
    24272475/* Uitgelicht: dubbel zo groot, met een link naar het verhaal. */
    24282476.lm-talent-scope .lm-talent-team__card.is-featured {
    … …  
    24662514    justify-content: center;
    24672515}
    2468 .lm-talent-scope .lm-talent-team__card.is-tile-cutout img {
    2469     object-fit: contain;
    2470     object-position: 50% 100%;
     2516/* Een PNG is lang niet altijd uitgeknipt (Broadwick: gewone foto's als PNG).
     2517   Daarom ook hier vullend: een echte uitsnede staat dan op het merkvlak, een
     2518   gewone foto vult de kaart, zonder randen. */
     2519.lm-talent-scope .lm-talent-team__card.is-tile-cutout .lm-talent-portrait-panel img {
     2520    object-fit: cover;
     2521    object-position: 50% 20%;
     2522    max-height: none;
    24712523}
    24722524.lm-talent-scope .lm-talent-team__card.is-tile-initials .lm-talent-portrait-panel {
    … …  
    25072559        transition: none;
    25082560    }
     2561}
     2562
     2563/* Een pagina met de opbouw van voor 6.5.1 (nog niet opnieuw opgebouwd, of
     2564   uit een paginacache) met deze CSS: elke kaart een vierkante foto met naam
     2565   eronder. Zonder dit trekt het paneel van de verhaalkaarten (negatieve
     2566   marge) over de vorige rij en vallen namen weg. */
     2567.lm-talent-scope .lm-talent-team__card:not(.has-photo):not(.is-more) .lm-talent-portrait-panel {
     2568    position: relative;
     2569    margin: 0 0 .75rem !important;
     2570    border-radius: var(--lm-radius);
     2571    aspect-ratio: 1;
     2572    overflow: hidden;
     2573}
     2574.lm-talent-scope .lm-talent-team__card:not(.has-photo) .lm-talent-portrait-panel:is(.is-cutout, .is-photo) figure {
     2575    width: 100%;
     2576    height: 100%;
     2577}
     2578.lm-talent-scope .lm-talent-team__card:not(.has-photo) .lm-talent-portrait-panel:is(.is-cutout, .is-photo) img {
     2579    width: 100%;
     2580    height: 100%;
     2581    max-height: none;
     2582    object-fit: cover;
     2583    object-position: 50% 20%;
     2584    border-radius: 0;
    25092585}
    25102586
    … …  
    29253001    margin-bottom: clamp(3rem, 7vw, 6rem);
    29263002}
     3003
     3004/* ============================================
     3005   Werken bij (6.6): branding van de site, pijlenroute,
     3006   functies met gezichten, een open plek in het team
     3007   ============================================ */
     3008
     3009/* Het icoon van de site (Launchmind_Talent_Motif) in --lm-motif; zonder
     3010   herkend icoon een neutrale chevron. Altijd als masker, in de merkkleur. */
     3011.lm-talent-scope {
     3012    --lm-motif-default: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M8.6%203.4%2017.2%2012l-8.6%208.6-2.1-2.1L13%2012%206.5%205.5z%22%2F%3E%3C%2Fsvg%3E");
     3013}
     3014.lm-talent-scope :is(.lm-talent-role-card h3 a, .lm-talent-join__cta a, .lm-talent-team__story a)::after {
     3015    content: "";
     3016    display: inline-block;
     3017    width: .8em;
     3018    height: .8em;
     3019    margin-left: .4em;
     3020    vertical-align: -.05em;
     3021    background: currentColor;
     3022    -webkit-mask: var(--lm-motif, var(--lm-motif-default)) center / contain no-repeat;
     3023    mask: var(--lm-motif, var(--lm-motif-default)) center / contain no-repeat;
     3024    transition: transform .25s ease;
     3025}
     3026.lm-talent-scope :is(.lm-talent-role-card h3 a, .lm-talent-join__cta a, .lm-talent-team__story a):hover::after {
     3027    transform: translateX(3px);
     3028}
     3029
     3030/* Zo verloopt solliciteren als route: elke stap een pijl, samen een rij. */
     3031.lm-talent-scope .lm-talent-process .lm-talent-split {
     3032    align-items: center;
     3033}
     3034.lm-talent-scope .lm-talent-process .lm-talent-photo img {
     3035    aspect-ratio: 16 / 10;
     3036}
     3037.lm-talent-scope .lm-talent-steps--flow {
     3038    grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
     3039    gap: 1.25rem .35rem;
     3040}
     3041.lm-talent-scope .lm-talent-steps--flow .lm-talent-step {
     3042    padding: 0;
     3043    border: 0;
     3044    border-radius: 0;
     3045    background: none;
     3046}
     3047.lm-talent-scope .lm-talent-steps--flow .lm-talent-step > * + * {
     3048    margin-top: .75rem;
     3049}
     3050.lm-talent-scope .lm-talent-steps--flow .lm-talent-step > :not(.lm-talent-step__arrow) {
     3051    margin-inline: .25rem 1rem;
     3052}
     3053.lm-talent-scope .lm-talent-step__arrow {
     3054    display: flex;
     3055    flex-direction: column;
     3056    justify-content: center;
     3057    gap: .2rem;
     3058    min-height: 5.5rem;
     3059    margin: 0;
     3060    padding: .9rem 2.1rem .9rem 1.9rem;
     3061    background: var(--lm-band-bg);
     3062    color: var(--lm-on);
     3063    clip-path: polygon(0 0, calc(100% - 1.1rem) 0, 100% 50%, calc(100% - 1.1rem) 100%, 0 100%, 1.1rem 50%);
     3064}
     3065.lm-talent-scope .lm-talent-step:first-child .lm-talent-step__arrow {
     3066    padding-left: 1.25rem;
     3067    clip-path: polygon(0 0, calc(100% - 1.1rem) 0, 100% 50%, calc(100% - 1.1rem) 100%, 0 100%);
     3068    border-radius: var(--lm-radius) 0 0 var(--lm-radius);
     3069}
     3070/* Van licht naar vol: je ziet de route vorderen. */
     3071.lm-talent-scope .lm-talent-step:nth-child(4n + 1) .lm-talent-step__arrow { background: color-mix(in srgb, var(--lm-band-bg) 70%, #ffffff); }
     3072.lm-talent-scope .lm-talent-step:nth-child(4n + 2) .lm-talent-step__arrow { background: color-mix(in srgb, var(--lm-band-bg) 80%, #ffffff); }
     3073.lm-talent-scope .lm-talent-step:nth-child(4n + 3) .lm-talent-step__arrow { background: color-mix(in srgb, var(--lm-band-bg) 90%, #ffffff); }
     3074.lm-talent-scope .lm-talent-step__arrow > * {
     3075    margin: 0;
     3076}
     3077.lm-talent-scope .lm-talent-step__arrow h3 {
     3078    font-size: clamp(1.02rem, 1.3vw, 1.15rem);
     3079    line-height: 1.2;
     3080    color: inherit !important;
     3081}
     3082.lm-talent-scope .lm-talent-step__arrow .lm-talent-step__num {
     3083    font-size: .85rem;
     3084    letter-spacing: .08em;
     3085    color: inherit !important;
     3086    opacity: .8;
     3087}
     3088@media (max-width: 719px) {
     3089    /* Telefoon: de route loopt naar beneden. */
     3090    .lm-talent-scope .lm-talent-steps--flow {
     3091        grid-template-columns: 1fr;
     3092        gap: 1rem;
     3093    }
     3094    .lm-talent-scope .lm-talent-step__arrow,
     3095    .lm-talent-scope .lm-talent-step:first-child .lm-talent-step__arrow {
     3096        min-height: 0;
     3097        padding: .9rem 1.25rem 1.6rem;
     3098        border-radius: var(--lm-radius) var(--lm-radius) 0 0;
     3099        clip-path: polygon(0 0, 100% 0, 100% calc(100% - .8rem), 50% 100%, 0 calc(100% - .8rem));
     3100    }
     3101}
     3102
     3103/* Functies: foto van het werk ernaast, en wie het werk al doet. */
     3104.lm-talent-scope .lm-talent-roles.has-image .lm-talent-split {
     3105    align-items: center;
     3106}
     3107/* Naast de foto: de functies onder elkaar. */
     3108.lm-talent-scope .lm-talent-roles.has-image .lm-talent-split .lm-talent-roles__grid {
     3109    flex-direction: column;
     3110}
     3111.lm-talent-scope .lm-talent-roles.has-image .lm-talent-split .lm-talent-roles__grid > * {
     3112    flex: none;
     3113}
     3114.lm-talent-scope .lm-talent-roles .lm-talent-photo img {
     3115    aspect-ratio: 4 / 5;
     3116}
     3117@media (max-width: 781px) {
     3118    .lm-talent-scope .lm-talent-roles .lm-talent-photo img {
     3119        aspect-ratio: 16 / 10;
     3120    }
     3121}
     3122.lm-talent-scope .lm-talent-role-card {
     3123    border-left: 4px solid var(--lm-band-bg);
     3124}
     3125.lm-talent-scope .lm-talent-role-card h3 a {
     3126    color: inherit;
     3127}
     3128.lm-talent-scope .lm-talent-role-card__team {
     3129    display: flex;
     3130    align-items: center;
     3131    gap: .75rem;
     3132    margin: .25rem 0 0;
     3133    font-size: .9rem;
     3134    line-height: 1.4;
     3135}
     3136.lm-talent-scope .lm-talent-faces {
     3137    display: inline-flex;
     3138    flex: none;
     3139}
     3140.lm-talent-scope .lm-talent-faces > * {
     3141    width: 2.5rem;
     3142    height: 2.5rem;
     3143    overflow: hidden;
     3144    border: 2px solid #ffffff;
     3145    border-radius: 50%;
     3146    background: var(--lm-band-bg);
     3147    color: var(--lm-on);
     3148    font-size: .7rem;
     3149    font-weight: 700;
     3150    display: inline-flex;
     3151    align-items: center;
     3152    justify-content: center;
     3153}
     3154.lm-talent-scope .lm-talent-faces img {
     3155    width: 100%;
     3156    height: 100%;
     3157    margin: 0;
     3158    border-radius: 0;
     3159    object-fit: cover;
     3160    object-position: 50% 20%;
     3161}
     3162.lm-talent-scope .lm-talent-face.is-cutout img {
     3163    object-position: 50% 0;
     3164    transform: scale(2.2);
     3165    transform-origin: 50% 4%;
     3166}
     3167.lm-talent-scope .lm-talent-faces > * + * {
     3168    margin-left: -.6rem;
     3169}
     3170
     3171/* Een open plek in het team: "Word jij onze nieuwe collega?" */
     3172.lm-talent-scope .lm-talent-team__card.is-join {
     3173    display: flex;
     3174    flex-direction: column;
     3175    align-items: center;
     3176    justify-content: center;
     3177    gap: .9rem;
     3178    aspect-ratio: 4 / 5;
     3179    padding: 1.25rem;
     3180    border: 2px dashed color-mix(in srgb, var(--lm-band-bg) 55%, #ffffff);
     3181    border-radius: var(--lm-radius);
     3182    background: color-mix(in srgb, var(--lm-band-bg) 10%, #ffffff);
     3183    text-align: center;
     3184}
     3185.lm-talent-scope .lm-talent-join__icon {
     3186    width: 3.5rem;
     3187    height: 3.5rem;
     3188    border-radius: 50%;
     3189    background: var(--lm-band-bg);
     3190    position: relative;
     3191}
     3192.lm-talent-scope .lm-talent-join__icon::after {
     3193    content: "";
     3194    position: absolute;
     3195    inset: 22%;
     3196    background: var(--lm-on);
     3197    -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M9%2012a4%204%200%201%200%200-8%204%204%200%200%200%200%208zm0%202c-3.3%200-7%201.7-7%204v2h11.5a6%206%200%200%201-.5-2.4c0-1.3.4-2.5%201-3.4-1.5-.2-3-.2-5-.2zm9-1v3h3v2h-3v3h-2v-3h-3v-2h3v-3z%22%2F%3E%3C%2Fsvg%3E") center / contain no-repeat;
     3198    mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M9%2012a4%204%200%201%200%200-8%204%204%200%200%200%200%208zm0%202c-3.3%200-7%201.7-7%204v2h11.5a6%206%200%200%201-.5-2.4c0-1.3.4-2.5%201-3.4-1.5-.2-3-.2-5-.2zm9-1v3h3v2h-3v3h-2v-3h-3v-2h3v-3z%22%2F%3E%3C%2Fsvg%3E") center / contain no-repeat;
     3199}
     3200.lm-talent-scope .lm-talent-join__title {
     3201    margin: 0;
     3202    font-family: var(--lm-heading-font, inherit);
     3203    font-size: clamp(1.05rem, 1.6vw, 1.25rem);
     3204    line-height: 1.25;
     3205    color: var(--lm-ink);
     3206}
     3207.lm-talent-scope .lm-talent-join__cta {
     3208    margin: 0;
     3209}
     3210.lm-talent-scope .lm-talent-join__cta a {
     3211    display: inline-block;
     3212    padding: .5rem 1rem;
     3213    border-radius: 999px;
     3214    background: var(--lm-accent-color);
     3215    color: #ffffff;
     3216    font-size: .85rem;
     3217    font-weight: 700;
     3218    text-decoration: none;
     3219    white-space: nowrap;
     3220}
     3221@media (max-width: 600px) {
     3222    .lm-talent-scope .lm-talent-join__icon {
     3223        width: 2.75rem;
     3224        height: 2.75rem;
     3225    }
     3226    .lm-talent-scope .lm-talent-join__cta a {
     3227        padding: .45rem .8rem;
     3228        font-size: .78rem;
     3229    }
     3230}
  • launchmind-blog/trunk/readme.txt

    r3734865 r3736416  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 6.5.1
     7Stable tag: 6.6.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    1212
    1313== Changelog ==
     14
     15= 6.6.0 =
     16* **Your site's own touch.** The careers page picks up the icon your site uses in lists and buttons (a chevron, arrow or check, or your own SVG) and uses it for bullets and links, in your brand colour.
     17* **Applying as a route.** The application steps are shown as arrows in your brand colours, with a photo next to them; on phones the route runs downwards.
     18* **Roles with faces.** Each role shows the colleagues who already do that work, and the roles get a photo of the work next to them.
     19* **An open spot in the team.** When there are vacancies, the team overview ends with an open tile: "Could you be our next colleague?", linking to the vacancies.
     20* **Careers page on phones.** The page now opens with a photo of your people, followed by the heading, and the key figures sit in two columns instead of one long list.
     21* **Team overview that holds up everywhere.** Team photos saved as PNG fill their card without coloured bands, a large card is only used with a real photo, and pages built with an earlier version (or served from a page cache) no longer show overlapping rows or cut-off names.
    1422
    1523= 6.5.1 =
Note: See TracChangeset for help on using the changeset viewer.