IOL
Train hard, recover well, and let HUAWEI Physical Readiness connect the dots
HUAWEI WATCH GT 7 Pro’s Physical Readiness Score combines sleep, heart-rate variability and activity data to offer a daily view of recovery before your next workout.
IOL
Northern Cape man convicted after police seize R77 000 worth of illegal diamonds
A Northern Cape man, 40, has pleaded guilty after police discovered unpolished diamonds worth R77,016 in his vehicle during a search in Springbok in 2021. He received a suspended sentence, while the diamonds were forfeited to the State.
The Citizen
Recipe of the day: Summer cheese & fruit board
Looking for an easy way to entertain guests this summer? This summer cheese & fruit board combines assorted cheeses, fresh fruit, Italian cold meats and olives with homemade peach and ginger compote and grilled nectarines. Served with crostini or baguette slices, it makes a colourful sharing platter for summer gatherings. Summer cheese & fruit board Ingredients Peach and ginger compote 4 peaches (about 550g), peeled, pitted and cut into chunks 30ml (2 Tbsp) brown sugar 15ml (1 Tbsp) honey 15ml (1 Tbsp) lemon juice 3 slices of fresh ginger 4 sprigs fresh thyme Grilled nectarines 4 nectarines, halved and pitted 10ml (2 tsp) olive oil Balsamic reduction, for drizzling To assemble 250g plain chunky cottage cheese Mixed olives Assorted cheeses – white cheddar, gouda, mozzarella, camembert and chevin 3 plums, cut into wedges Crostini or baguette slices Italian cold meats like prosciutto and coppa Fresh thyme, to garnish Method To make the peach compote, place all the ingredients into a saucepan. Stir over a medium heat to dissolve the sugar. Bring to the boil, then lower the heat and simmer for 10 minutes, stirring occasionally, until the peaches are tender and the liquid is syrupy. Set aside to cool. Brush the cut side of the nectarines lightly with some olive oil. Heat a griddle pan and cook the nectarines cut side down for 5 minutes until charred and slightly softened. Transfer to the cheeseboard and drizzle with balsamic reduction just before serving. Remove the ginger from the peach compote and transfer to a small bowl. Scoop the cottage cheese into a bowl. Place the olives in a small bowl and arrange on a large serving board with the cottage cheese and compote. Arrange the cheeses on the board around the bowls. Add the fresh plum wedges, crostini and cold meats. Garnish with fresh thyme and serve immediately. Print Summer cheese and fruit board Author: Teresa Ulyate Ingredients Peach and ginger compote 4 peaches (about 550 g), peeled, pitted and cut into chunks 30 ml (2 Tbsp) brown sugar 15 ml (1 Tbsp) honey 15 ml (1 Tbsp) lemon juice 3 slices of fresh ginger 4 sprigs fresh thyme Grilled nectarines 4 nectarines, halved and pitted 10 ml (2 tsp) olive oil Balsamic reduction, for drizzling To assemble 250 g plain chunky cottage cheese Mixed olives Assorted cheeses – white cheddar, gouda, mozzarella, camembert and chevin 3 plums, cut into wedges Crostini or baguette slices Italian cold meats like prosciutto and coppa Fresh thyme, to garnish Instructions To make the peach compote place all of the ingredients into a saucepan. Stir over a medium heat to dissolve the sugar. Bring to the boil, then lower the heat and simmer for 10 minutes, stirring occasionally, until the peaches are tender and the liquid is syrupy. Set aside to cool. Brush the cut side of the nectarines lightly with some olive oil. Heat a griddle pan and cook the nectarines cut side down for 5 minutes until charred and slightly softened. Transfer to the cheeseboard and drizzle with balsamic reduction just before serving. Remove the ginger from the peach compote and transfer to a small bowl. Scoop the cottage cheese into a bowl. Place the olives in a small bowl and arrange on a large serving board with the cottage cheese and compote. Arrange the cheeses on the board around the bowls. Add the fresh plum wedges, crostini and cold meats. Garnish with fresh thyme and serve immediately. window.trCommon={"minRating":6,"ajaxurl":"https:\/\/www.citizen.co.za\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":4711081}; window.TastyRecipes = window.TastyRecipes || {}; window.TastyRecipes.smoothScroll = { init() { document.addEventListener( 'click', ( e ) => { let anchor = e.target; if ( anchor.tagName !== 'A' ) { anchor = anchor.closest( 'a.tasty-recipes-scrollto' ); } if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) { return; } const elementHref = anchor.getAttribute( 'href' ); if ( ! elementHref ) { return; } e.preventDefault(); this.goToSelector( elementHref ); }); }, goToSelector( selector ) { const element = document.querySelector( selector ); if ( ! element ) { return; } element.scrollIntoView( { behavior: 'smooth' } ); } }; document.addEventListener( 'DOMContentLoaded', () => window.TastyRecipes.smoothScroll.init() ); window.TastyRecipes = window.TastyRecipes || {}; window.TastyRecipes.staticTooltip = { element: null, tooltipElement: null, deleting: false, init( element ) { if ( this.deleting ) { return; } this.element = element; this.buildElements(); }, destroy() { if ( ! this.tooltipElement || this.deleting ) { return; } this.deleting = true; this.tooltipElement.classList.remove( 'opened' ); setTimeout( () => { this.tooltipElement.remove(); this.deleting = false; }, 500 ); }, buildElements() { const tooltipElement = document.createElement( 'div' ); tooltipElement.classList.add( 'tasty-recipes-static-tooltip'); tooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' ); const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' ); if ( currentTooltipElement ) { document.body.replaceChild( tooltipElement, currentTooltipElement ); } else { document.body.appendChild( tooltipElement ); } this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' ); }, show() { if ( ! this.tooltipElement ) { return; } const tooltipTop = this.element.getBoundingClientRect().top + window.scrollY - 10 // 10px offset. - this.tooltipElement.getBoundingClientRect().height; const tooltipLeft = this.element.getBoundingClientRect().left - ( this.tooltipElement.getBoundingClientRect().width / 2 ) + ( this.element.getBoundingClientRect().width / 2 ) - 1; const posLeft = Math.max( 10, tooltipLeft ); this.maybeRemoveTail( posLeft !== tooltipLeft ); this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' ); this.tooltipElement.classList.add( 'opened' ); }, maybeRemoveTail( removeTail ) { if ( removeTail ) { this.tooltipElement.classList.add( 'tr-hide-tail' ); } else { this.tooltipElement.classList.remove( 'tr-hide-tail' ); } }, changeMessage( message ) { if ( ! this.tooltipElement ) { return; } this.tooltipElement.innerHTML = message; } }; window.TastyRecipes.ajax = { sendPostRequest( url, data, success, failure ) { const xhr = new XMLHttpRequest(); xhr.open( 'POST', url, true ); xhr.send( this.preparePostData( data ) ); xhr.onreadystatechange = () => { if ( 4 !== xhr.readyState ) { return; } if ( xhr.status === 200 ) { success( JSON.parse( xhr.responseText ) ); return; } failure( xhr ); }; xhr.onerror = () => { failure( xhr ); }; }, preparePostData( data ) { const formData = new FormData(); for ( const key in data ) { formData.append( key, data[key] ); } return formData; }, }; window.TastyRecipes.ratings = { defaultRating: 0, currentRatingPercentage: 100, savingRating: false, init( minRating ) { this.minRating = minRating; this.formWatchRating(); this.closeTooltipWhenClickOutside(); this.addBodyClassBasedOnSelectedRating(); this.backwardCompFormRatingPosition(); }, formWatchRating() { const ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]'); if ( ratings.length { event.preventDefault(); this.defaultRating = event.target.closest( '.checked' ).dataset.rating; this.setCheckedStar( event.target ); this.maybeSendRating( this.defaultRating, event.target ); this.setRatingInForm( this.defaultRating ); } ); } }, closeTooltipWhenClickOutside() { window.addEventListener( 'click', e => { // Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself. if ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) { return; } window.TastyRecipes.staticTooltip.destroy(); } ); }, setRatingInForm( rating ) { const ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value="' + rating + '"]' ); if ( ! ratingInput ) { return; } ratingInput.click(); }, addBodyClassBasedOnSelectedRating() { const ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' ); if ( ! ratingInputs ) { return; } for ( const ratingInput of ratingInputs ) { ratingInput.addEventListener( 'click', currentEvent => { const selectedRating = currentEvent.target.getAttribute( 'value' ); this.handleBodyClassByRating( selectedRating ); this.toggleCommentTextareaRequired( selectedRating ); } ); } }, handleBodyClassByRating( rating ) { if ( rating < this.minRating ) { document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' ); return; } document.body.classList.add( 'tasty-recipes-selected-minimum-rating' ); }, toggleCommentTextareaRequired( rating ) { const commentTextarea = document.getElementById( 'comment' ); if ( ! commentTextarea ) { return; } if ( rating < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { window.TastyRecipes.staticTooltip.changeMessage( response.data.message ); window.TastyRecipes.staticTooltip.show(); this.updateAverageText( response.data, recipeCardElement ); this.maybeFillCommentForm( response.data ); // Hide the tooltip after 5 seconds. setTimeout( () => { this.maybeResetTooltip( recipeCardElement, response.data, rating ); }, 5000 ); }, () => { this.resetTooltip( recipeCardElement ); } ); }, updateAverageText( data, recipeCardElement ) { if ( ! data.average ) { return; } this.setRatingPercent( data ); if ( ! data.count ) { return; } const quickLink = document.querySelector( '.tasty-recipes-rating-link' ); if ( quickLink ) { this.setTextInContainer( quickLink, data ); this.setPartialStar( quickLink ); } const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' ); cardStars.dataset.trDefaultRating = data.average; this.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data ); }, setTextInContainer( container, data ) { if ( ! container ) { return; } if ( data.label ) { const ratingLabelElement = container.querySelector( '.rating-label' ); if ( ratingLabelElement ) { ratingLabelElement.innerHTML = data.label; } return; } const averageElement = container.querySelector( '.average' ); if ( averageElement ) { averageElement.textContent = data.average; } const countElement = container.querySelector( '.count' ); if ( countElement ) { countElement.textContent = data.count; } }, setPartialStar( container ) { const highestStar = container.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' ); if ( highestStar ) { highestStar.dataset.trClip = this.currentRatingPercentage; } }, setRatingPercent( data ) { this.defaultRating = data.average.toFixed( 1 ); const parts = data.average.toFixed( 2 ).toString().split( '.' ); this.currentRatingPercentage = parts[1] ? parts[1] : 100; if ( this.currentRatingPercentage === '00' ) { this.currentRatingPercentage = 100; } }, setCheckedStar( target ) { const cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' ); const selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' ); if ( selectedRatingElement ) { delete selectedRatingElement.dataset.trChecked; } const thisStar = target.closest( '.tasty-recipes-rating' ); thisStar.dataset.trChecked = 1; thisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100; }, maybeFillCommentForm( data ) { if ( ! data.comment || ! data.comment.content ) { return; } const commentForm = document.querySelector( '#commentform' ); if ( ! commentForm ) { return; } const commentBox = commentForm.querySelector( '[name=comment]' ); if ( ! commentBox || commentBox.value ) { return; } // Add comment details for editing. commentBox.innerHTML = data.comment.content; if ( data.comment.name ) { commentForm.querySelector( '[name=author]' ).value = data.comment.name; commentForm.querySelector( '[name=email]' ).value = data.comment.email; } }, maybeResetTooltip( recipeCardElement, data, rating ) { if ( this.savingRating === rating ) { this.resetTooltip( recipeCardElement, data ); } }, resetTooltip( recipeCardElement, data ) { window.TastyRecipes.staticTooltip.destroy(); this.savingRating = false; // Reset the default rating. const cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' ); if ( cardRatingContainer ) { this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating; cardRatingContainer.dataset.trDefaultRating = this.defaultRating; this.resetSelectedStar( cardRatingContainer, data ); } }, resetSelectedStar( cardRatingContainer ) { const selectedRatingElement = cardRatingContainer.querySelector( '[data-rating="' + Math.ceil( this.defaultRating ) + '"]' ); if ( selectedRatingElement ) { selectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage; selectedRatingElement.parentNode.dataset.trChecked = 1; } const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' ); if ( previousSelectedElement ) { const currentSelectedRating = previousSelectedElement.querySelector('[data-rating]'); if ( currentSelectedRating !== selectedRatingElement ) { delete previousSelectedElement.dataset.trChecked; } } }, backwardCompFormRatingPosition() { const ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' ); if ( ! ratingsButtons ) { return; } const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons); if ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) { ratingsButtons.style.direction = 'rtl'; } if ( typeof tastyRecipesRating !== 'undefined' ) { // Select the rating that was previously selected in admin. ratingsButtons.querySelector( '.tasty-recipes-rating[value="' + tastyRecipesRating + '"]' ).checked = true; } const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' ); for (const ratingSpan of ratingSpans) { ratingSpan.addEventListener( 'click', event => { if ( ratingSpan === event.target ) { return; } ratingSpan.previousElementSibling.click(); } ); } } }; (function(callback) { if (document.readyState !== "loading") { callback(); } else { window.addEventListener( 'load', callback ); } })(() => { window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 ); });
The Citizen
Eskom powers up EV drive with new Durban charging hubs
As fuel prices continue to squeeze motorists’ pockets, South Africa’s shift to electric vehicles is gaining momentum, putting growing pressure on the country to expand charging infrastructure. Against this backdrop, Eskom has unveiled new public electric vehicle (EV) charging stations at Durban’s Gateway and Pavilion malls as it expands its charging network amid growing interest in electric vehicles. Charging facilities The launch coincided with National Transport Month, which focuses attention on developments in South Africa’s transport sector, including emerging electric mobility initiatives. The new charging facilities support efforts to expand South Africa’s EV charging network as interest in electric vehicles grows. It forms part of Eskom Distribution’s broader e-Mobility programme, focused on electrifying its fleet, deploying charging infrastructure and progressively expanding a public charging network across the country. New energy solutions Speaking at the official opening, Zuhdi Hamza, Eskom Distribution’s acting general manager of operations enablement, said the facility reflects Eskom’s evolving role in enabling new energy solutions that respond to changing customer needs and support the country’s economic and developmental priorities. “This launch marks another important step towards building a modern, accessible and connected electric mobility ecosystem for South Africa. It is particularly fitting that we opened these public charging facilities during National Transport Month, when attention is focused on the future of mobility in South Africa. “By investing in charging infrastructure and electrifying our own fleet, Eskom is not simply talking about the energy transition; we are actively participating in it while enabling the broader transition to electric mobility,” said Hamza. Eskom Distribution has deployed 92 electric vehicles and 104 charging stations across 68 Eskom and partner sites, including 19 publicly accessible charging stations across 14 sites. In KwaZulu-Natal, 15 sites and 15 charging stations have been commissioned. EV adoption To encourage greater EV adoption and help stimulate the developing market, Eskom is offering customers a 20% introductory discount for the first six months at its charging facilities. Eskom has identified a further 84 potential public charging sites across its five clusters, with engagements with property owners at various stages. Eskom said the planned expansion would extend charging infrastructure to strategic locations, underserved areas and priority transport corridors While vehicles still make up a relatively small share of South Africa’s vehicle market, high purchase prices and limited charging infrastructure remain key barriers to wider adoption. However, the EV and hybrid market is shifting significantly as fuel and diesel costs rise, with demand for pre-owned hybrids surging and consumer interest in alternative-energy vehicles climbing despite high import taxes and the infrastructure gap.
The South African
R300m drug bust: Key Madlanga Commission witness DIES
Gauteng Traffic Police Chief Inspector Samuel Mashaba, who faced intense questioning over a R300 million cocaine bust at the Madlanga Commission, has died. Mashaba died at Milpark Hospital in Johannesburg on Tuesday, 13 October, while on precautionary suspension following his testimony before the commission. The Gauteng government confirmed his death but has not disclosed the cause. His death comes four months after commissioners questioned him about his involvement in the seizure of more than 715kg of cocaine and his financial relationship with an alleged police informant. R300 MILLION COCAINE BUST UNDER SCRUTINY Mashaba testified in June about a July 2021 police operation at a Scania warehouse in Aeroton, south of Johannesburg. Officers seized cocaine worth approximately R300 million after the shipment reportedly entered South Africa through Durban Harbour. However, the commission questioned Mashaba about how he obtained information about the shipment and why he had not reported the intelligence through the required police channels. Commissioners also scrutinised his relationship with businessman Tumelo Nku, who allegedly provided information about the drugs. Mashaba acknowledged receiving money from Nku but insisted the payments were loans or financial assistance from a friend. He denied any wrongdoing. Commission chairperson Justice Mbuyiseli Madlanga challenged his version during questioning. “You are being untruthful,” Madlanga told Mashaba. The testimony raised questions about Mashaba’s conduct and his dealings with individuals connected to the operation. MASHABA SUSPENDED AFTER TESTIMONY The Gauteng government subsequently suspended Mashaba as authorities investigated possible misconduct. The investigation focused on alleged breaches of departmental policies, the possible misuse of state resources and his financial dealings. Officials ordered Mashaba to surrender government-issued equipment, including firearms, cellphones and laptops. They also barred him from entering government premises and contacting certain employees while the investigation continued. Authorities had not publicly announced the outcome of the disciplinary process before his death. LESUFI CONFIRMS MASHABA’S DEATH Gauteng Premier Panyaza Lesufi extended condolences to Mashaba’s family and colleagues. “On behalf of the Gauteng Provincial Government, I wish to convey our deepest condolences to the Mashaba family following the passing of Chief Inspector Samuel Mashaba,” Lesufi said. “We also extend our condolences to his colleagues in the Gauteng Traffic Police and the broader law enforcement fraternity, who are mourning the loss of a colleague.” MEDIA STATEMENT | The @GautengProvince, through the @GP_CommSafety, announces with deep sadness the passing of Gauteng Traffic Police Chief Inspector Samuel Mashaba, who passed away today, 13 October 2026,at Milpark Hospital while receiving medical care. pic.twitter.com/iizKwLpoQU— Gauteng Provincial Gov (@GautengProvince) October 13, 2026 The government has not disclosed what caused Mashaba’s death. There is no verified evidence linking his death to the cocaine investigation, his suspension or his testimony before the Madlanga Commission.
The South African
Pirates match appears on FNB Stadium big screen during Chiefs game [VIDEO]
Social media users were left in stitches after videos emerged showing Kaizer Chiefs supporters watching Orlando Pirates on the big screen at FNB Stadium while Amakhosi were in action against Stellenbosch FC. Both Soweto giants were in action on Tuesday evening, with Chiefs hosting Stellenbosch at FNB Stadium and Pirates taking on TS Galaxy in Orlando. During the match between Chiefs and Stellenbosch, the stadium’s big screens briefly displayed the Pirates game before switching back to the action involving Amakhosi. A Pirates game being shown at FNB to remind them of how close they are to the defending champions 😭😭😭😭😭😭😭 pic.twitter.com/uYY9YEQiju— THIRD TIME TREBLE CHAMPION 🏆🏆🏆 : MissPalulu❤️ (@MissPalulu) October 14, 2026 Videos of the incident quickly circulated on social media, particularly on X, where users shared their reactions to the unexpected moment. Some supporters joked that the stadium operators wanted Chiefs fans to enjoy the goals being scored in Orlando rather than watch Amakhosi struggle to find a winner against Stellenbosch. Chiefs were held to a 1-1 draw by Stellies, while Pirates’ match provided an alternative spectacle for those following the action on the big screen.The Buccaneers put three past Galaxy to remain second in the Betway Premiership. The incident sparked a mixture of humour, teasing and criticism, with some users praising whoever was responsible for showing the Pirates match, while others felt it was disrespectful to Chiefs and their supporters. They made them watch Pirates game on the big screen at FNB stadium yesterday 🤣🤣🤣 pic.twitter.com/WjBsqTe9HC— Marks wa le Buccaneer 🏴☠️ (@Marks_Bucs11) October 14, 2026 Pirates fans mock the Chiefs crowd at FNB Here is what some social media users had to say: @Marks_Bucs11 wrote: “They made them watch Pirates game on the big screen at FNB stadium yesterday.” @Firstofhisnames wrote: “It’s called product delivery..getting your money’s worth.” @yanga_gqwetha wrote: “But this is not the first match this is happening, why celebrating like you won MTN 8 last weekend.” @Luwi_Mbuyazi wrote: “Chiefs fans went to FNB to watch their team play and ended up watching Pirates.” @WonderMahlobo tweeted: “The person who played Orlando Pirates at FNB stadium during the chiefs game deserves a raise. What a legend.” Some Chiefs supporters were not happy watching Pirates cause havoc However, not everyone found the incident amusing, with some questioning the message it sent to the Chiefs players and supporters. @SbuGrosso98031 wrote: “Can imagine the disrespect that the players especially of Chiefs felt. Chiefs should take actions against those responsible. This is mocking them, that’s like saying, Chiefs fans and players watch and learn, that’s real football, goals are there, your game is just ok.” What’s your take on this?
TechCentral
iOCO CEO Rhys Summerton’s naartjie theory of share buybacks
iOCO will not pay a dividend for as long as Rhys Summerton is at the helm of the company.
TechCentral
Google’s Gemini 4 Argon is finally here
Google has released Gemini 4 Argon to developers and businesses after months of delays and upheaval.