Changeset 3736416
- Timestamp:
- 10/09/2026 10:35:13 AM (4 weeks ago)
- Location:
- launchmind-blog/trunk
- Files:
-
- 1 added
- 8 edited
-
includes/class-launchmind-talent-blocks.php (modified) (3 diffs)
-
includes/class-launchmind-talent-feed.php (modified) (1 diff)
-
includes/class-launchmind-talent-motif.php (added)
-
includes/class-launchmind-talent-render.php (modified) (10 diffs)
-
includes/class-launchmind-talent-sections.php (modified) (8 diffs)
-
includes/class-launchmind-talent-style.php (modified) (2 diffs)
-
launchmind-blog.php (modified) (3 diffs)
-
public/css/launchmind-blog.css (modified) (6 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
launchmind-blog/trunk/includes/class-launchmind-talent-blocks.php
r3734683 r3736416 72 72 $heeft_verhaal = !empty($story['about']) || !empty($story['featured']); 73 73 $careers = isset($site['careers']) && is_array($site['careers']) ? $site['careers'] : array(); 74 $team = isset($site['team']) ? $site['team'] : array(); 74 75 // Volgorde van de pagina; elke sectie alleen als hij aan staat en er inhoud is. 75 76 $secties = array( … … 90 91 'hub' => function () use ($site, $heeft_verhaal) { return $heeft_verhaal || $site['hubHtml'] === '' ? '' : self::hub($site['hubHtml']); }, 91 92 '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)); }, 93 94 '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); }, 95 96 'process' => function () use ($careers, $lang) { return Launchmind_Talent_Sections::process($careers, $lang); }, 96 97 'faq' => function () use ($story, $lang) { return empty($story['faq']) ? '' : self::faq($story['faq'], $lang); }, … … 229 230 230 231 /** Staat de URL op deze site (met of zonder www)? */ 231 p rivatestatic function own_host($url) {232 public static function own_host($url) { 232 233 $host = strtolower((string) wp_parse_url((string) $url, PHP_URL_HOST)); 233 234 $eigen = strtolower((string) wp_parse_url((string) home_url('/'), PHP_URL_HOST)); -
launchmind-blog/trunk/includes/class-launchmind-talent-feed.php
r3734865 r3736416 316 316 $uit = array('images' => array()); 317 317 $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) { 319 319 $beeld = isset($beelden[$plek]) && is_array($beelden[$plek]) ? $beelden[$plek] : null; 320 320 $url = $beeld ? self::clean_url(isset($beeld['url']) ? $beeld['url'] : '') : ''; -
launchmind-blog/trunk/includes/class-launchmind-talent-render.php
r3734683 r3736416 33 33 const STRINGS = array( 34 34 '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', 35 36 'vacancies' => 'Vacatures', 'stories' => 'Verhalen van onze mensen', 36 37 'no_vacancies' => 'Er staan op dit moment geen vacatures open.', … … 50 51 ), 51 52 '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', 52 54 'vacancies' => 'Open positions', 'stories' => 'Stories from our people', 53 55 'no_vacancies' => 'There are no open positions at the moment.', … … 67 69 ), 68 70 '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', 69 72 'vacancies' => 'Offene Stellen', 'stories' => 'Geschichten unserer Mitarbeitenden', 70 73 'no_vacancies' => 'Derzeit sind keine Stellen offen.', … … 84 87 ), 85 88 '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', 86 90 'vacancies' => 'Postes ouverts', 'stories' => 'Histoires de nos équipes', 87 91 'no_vacancies' => 'Aucun poste n\'est ouvert pour le moment.', … … 101 105 ), 102 106 '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', 103 108 'vacancies' => 'Vacantes', 'stories' => 'Historias de nuestro equipo', 104 109 'no_vacancies' => 'En este momento no hay vacantes abiertas.', … … 118 123 ), 119 124 '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', 120 126 'vacancies' => 'Posizioni aperte', 'stories' => 'Storie dal nostro team', 121 127 'no_vacancies' => 'Al momento non ci sono posizioni aperte.', … … 135 141 ), 136 142 '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', 137 144 'vacancies' => 'Vagas abertas', 'stories' => 'Histórias da nossa equipe', 138 145 'no_vacancies' => 'No momento não há vagas abertas.', … … 152 159 ), 153 160 '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', 154 162 'vacancies' => 'Ledige stillinger', 'stories' => 'Historier fra vores medarbejdere', 155 163 'no_vacancies' => 'Der er ingen ledige stillinger i øjeblikket.', … … 169 177 ), 170 178 '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', 171 180 'vacancies' => 'Oferty pracy', 'stories' => 'Historie naszych ludzi', 172 181 'no_vacancies' => 'Obecnie nie ma otwartych ofert.', … … 186 195 ), 187 196 'hi' => array( 197 'join_title' => 'क्या आप हमारे नए साथी बनेंगे?', 'join_cta' => 'रिक्तियाँ देखें', 'role_with' => 'आप %s के साथ काम करेंगे', 'list_and' => 'और', 'n_others' => '%d अन्य', 188 198 'vacancies' => 'खुले पद', 'stories' => 'हमारे लोगों की कहानियाँ', 189 199 'no_vacancies' => 'इस समय कोई खुला पद नहीं है।', -
launchmind-blog/trunk/includes/class-launchmind-talent-sections.php
r3734865 r3736416 121 121 * vanaf drie collega's: een team van een of twee is geen overzicht. 122 122 */ 123 public static function team($team, $lang ) {123 public static function team($team, $lang, $open = 0) { 124 124 $team = is_array($team) ? $team : array(); 125 125 if (count($team) < 3) { … … 131 131 $url = !empty($p['storyId']) && method_exists('Launchmind_Talent_Stories', 'url_for') ? Launchmind_Talent_Stories::url_for($p['storyId'], '') : ''; 132 132 // 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'; 134 137 $groot += $uitgelicht ? 1 : 0; 135 138 $kaarten[] = self::team_card($p, $uitgelicht ? $url : '', $lang); … … 142 145 ); 143 146 } 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 } 144 151 return Launchmind_Talent_Blocks::group( 145 152 Launchmind_Talent_Blocks::section_head(Launchmind_Talent_Render::t('eyebrow_team', $lang), Launchmind_Talent_Render::t('team_heading', $lang)) 146 153 . "\n\n" . Launchmind_Talent_Blocks::group(implode("\n\n", $kaarten), array('className' => 'lm-talent-team__grid')), 147 154 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') 148 165 ); 149 166 } … … 392 409 $items = array(); 393 410 foreach ($stappen as $i => $stap) { 411 // 6.6: nummer en titel in een pijl, de pijlen samen een route. 394 412 $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 ), 397 418 ); 398 419 if (!empty($stap['duration'])) { … … 404 425 $items[] = Launchmind_Talent_Blocks::group(implode("\n\n", $binnen), array('className' => 'lm-talent-step')); 405 426 } 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 } 406 431 $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 ); 413 435 return Launchmind_Talent_Blocks::group(implode("\n\n", $delen), array('align' => 'wide', 'className' => 'lm-talent-process lm-talent-section', 'anchor' => 'lm-solliciteren')); 414 436 } … … 454 476 * linkstructuur. 455 477 */ 456 public static function roles_links($roles, $lang ) {478 public static function roles_links($roles, $lang, $team = array()) { 457 479 $kaarten = array(); 458 480 foreach (is_array($roles) ? $roles : array() as $role) { … … 467 489 $binnen[] = Launchmind_Talent_Blocks::paragraph(esc_html(trim($meta . ($role['city'] !== '' ? ', ' . $role['city'] : ''), ', ')), array('className' => 'lm-talent-card__meta')); 468 490 } 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 } 469 496 $kaarten[] = Launchmind_Talent_Blocks::group(implode("\n\n", $binnen), array('className' => 'lm-talent-card lm-talent-role-card')); 470 497 } … … 472 499 return ''; 473 500 } 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'); 474 505 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') 478 566 ); 479 567 } -
launchmind-blog/trunk/includes/class-launchmind-talent-style.php
r3734683 r3736416 131 131 } 132 132 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() : '')); 134 135 } 135 136 if (self::is_talent_view() && function_exists('wp_enqueue_script')) { … … 168 169 foreach (self::elementor_fonts() as $naam => $font) { 169 170 $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()); 170 175 } 171 176 $breedte = self::container_width(); -
launchmind-blog/trunk/launchmind-blog.php
r3734865 r3736416 3 3 * Plugin Name: Launchmind Blog 4 4 * Description: Display AI-powered Launchmind blog content on your WordPress site. 5 * Version: 6. 5.15 * Version: 6.6.0 6 6 * Author: Launchmind.io 7 7 * Author URI: https://launchmind.io … … 20 20 21 21 // Define plugin constants 22 define('LAUNCHMIND_BLOG_VERSION', '6. 5.1');22 define('LAUNCHMIND_BLOG_VERSION', '6.6.0'); 23 23 define('LAUNCHMIND_BLOG_PLUGIN_DIR', plugin_dir_path(__FILE__)); 24 24 define('LAUNCHMIND_BLOG_PLUGIN_URL', plugin_dir_url(__FILE__)); … … 111 111 require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-i18n.php'; 112 112 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'; 113 114 require_once LAUNCHMIND_BLOG_PLUGIN_DIR . 'includes/class-launchmind-talent-style.php'; 114 115 // 4.0 SEO classes — coexist with the host's SEO plugin instead of -
launchmind-blog/trunk/public/css/launchmind-blog.css
r3734865 r3736416 1674 1674 border-radius: var(--lm-radius); 1675 1675 } 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 } 1676 1683 .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); 1678 1698 } 1679 1699 } … … 2024 2044 opacity: .7; 2025 2045 } 2046 /* Telefoon: twee kolommen in plaats van een lange lijst onder elkaar. */ 2026 2047 @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 } 2027 2057 .lm-talent-scope .lm-talent-fact + .lm-talent-fact { 2028 2058 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; 2029 2069 } 2030 2070 } … … 2425 2465 } 2426 2466 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 2427 2475 /* Uitgelicht: dubbel zo groot, met een link naar het verhaal. */ 2428 2476 .lm-talent-scope .lm-talent-team__card.is-featured { … … 2466 2514 justify-content: center; 2467 2515 } 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; 2471 2523 } 2472 2524 .lm-talent-scope .lm-talent-team__card.is-tile-initials .lm-talent-portrait-panel { … … 2507 2559 transition: none; 2508 2560 } 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; 2509 2585 } 2510 2586 … … 2925 3001 margin-bottom: clamp(3rem, 7vw, 6rem); 2926 3002 } 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 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 6. 5.17 Stable tag: 6.6.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 12 12 13 13 == 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. 14 22 15 23 = 6.5.1 =
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)