{"id":130646,"date":"2025-07-23T16:48:32","date_gmt":"2025-07-23T16:48:32","guid":{"rendered":"https:\/\/bestratefinders.com\/blog\/?p=130646"},"modified":"2025-07-28T11:00:04","modified_gmt":"2025-07-28T11:00:04","slug":"true-food-tuscan-kale-salad-recipe","status":"publish","type":"post","link":"https:\/\/bestratefinders.com\/blog\/everything-else\/true-food-tuscan-kale-salad-recipe\/","title":{"rendered":"True Food Tuscan Kale Salad Recipe"},"content":{"rendered":"<p><em>Sharing a copycat recipe for one of my favorite restaurant salads of all time: the Tuscan Kale Sald from True Food Kitchen.\u00a0<\/em><\/p>\n<p>Hi friends! How are you? I hope you\u2019re having a lovely morning so far. Today, I\u2019m heading to F45 and the chiropractor (bless it) and then we\u2019re meeting up with friends for pizza and bowling.<\/p>\n<p>For today\u2019s post, I wanted to share one of my all-time favorite simple salad recipes.<\/p>\n<p><a href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/true-food-kale-salad-recipe-3\/\" rel=\"attachment wp-att-205773 follow noopener noreferrer\" data-wpel-link=\"internal\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-205773\" src=\"https:\/\/bestratefinders.com\/blog\/wp-content\/uploads\/2025\/07\/true-food-kale-salad-recipe-3-768x1024-1.jpg\" data-fslightbox=\"gallery1\"><\/a><\/p>\n<p>If you\u2019ve ever dined at True Food Kitchen, you know the magic that happens when fresh, seasonal ingredients are combined with intentional flavors and a wellness-focused approach. It\u2019s one of my favorite spots for a casual meal out, especially because their menu is filled with gluten-free, vegetarian, and vegan options that are flavorful and nutritious. They prioritize nutrient-dense produce from organic growers and it\u2019s a frequently spot for us. \ud83d\ude09 One of the first dishes I ever ordered there was the True Food Kitchen Tuscan kale salad, and I\u2019ve been hooked ever since.<\/p>\n<p>This isn\u2019t your average sad side salad. The True Food Tuscan kale salad is savory, bright, perfectly textured, and full of flavor. It hits all the right notes: bright lemon, sharp garlic, the warmth of red pepper flakes, and that nutty, umami hit from grana padano or parmigiano reggiano cheese. It\u2019s crave-worthy and simple enough to recreate at home. Today, I wanted to share a version of the True Food Tuscan Kale Salad Recipe that you can easily whip up in your own kitchen.<\/p>\n<h2>True Food Tuscan Kale Salad Recipe<\/h2>\n<p>Let\u2019s talk about what makes this salad so special. While many kale salads rely on heavy dressings or tons of toppings to make the leafy greens palatable, this one takes a minimalist approach that\u2019s all about balance and technique. The secret? <strong>Letting the salad sit at room temperature after massaging the kale and dressing it with oil, lemon juice, garlic, and seasonings.<\/strong> This softens the kale and deepens the flavor. Add the grated cheese and bread crumbs just before serving for that perfect crunch and salty bite.<\/p>\n<p><a href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/true-food-kale-salad-recipe\/\" rel=\"attachment wp-att-205774 follow noopener noreferrer\" data-wpel-link=\"internal\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-205774\" src=\"https:\/\/bestratefinders.com\/blog\/wp-content\/uploads\/2025\/07\/true-food-kale-salad-recipe-768x1024-1.jpg\" data-fslightbox=\"gallery1\"><\/a><\/p>\n<p>Whether you\u2019re a seasoned kale lover or still figuring out how to make kale taste good, this recipe is a total game changer.<\/p>\n<h3>What Is True Food Kitchen<\/h3>\n<p>True Food Kitchen is a health-driven restaurant chain founded by Dr. Andrew Weil, a pioneer in integrative medicine. The first location opened in Phoenix, Arizona (yay AZ!), and they\u2019ve since expanded across the U.S. Their philosophy is rooted in the anti-inflammatory food pyramid, featuring whole, nutrient-dense foods that support overall wellness. Every item on their menu is made from scratch using high-quality, seasonal ingredients.<\/p>\n<h3>Is True Food Kitchen Healthy<\/h3>\n<p>Absolutely. True Food Kitchen designs their menu around wholesome ingredients sourced from sustainable and organic farms whenever possible. Their meals are rich in vegetables, lean proteins, healthy fats, and whole grains. The balance of macronutrients, vibrant produce, and minimal processed ingredients makes their meals nourishing and energizing.<\/p>\n<p>If you\u2019re ever in my neck of the woods, here are some of my favorite <a href=\"https:\/\/fitnessista.com\/healthy-restaurants-in-tucson\/\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\">healthy places to eat in Tucson<\/a>. (I need to update it since we FINALLY got a Flower Child!)<\/p>\n<p><a href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/true-food-tuscan-kale-salad\/\" rel=\"attachment wp-att-205775 follow noopener noreferrer\" data-wpel-link=\"internal\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-205775\" src=\"https:\/\/bestratefinders.com\/blog\/wp-content\/uploads\/2025\/07\/true-food-tuscan-kale-salad-768x1024-1.jpg\" data-fslightbox=\"gallery1\"><\/a><\/p>\n<h3>How To Make Tuscan Kale Salad<\/h3>\n<p>Recreating the True Food Tuscan kale salad at home is easier than you might think. The key is using fresh ingredients and taking a few simple prep steps to elevate the flavor and texture.<\/p>\n<h4>Ingredients<\/h4>\n<p>2 bunches of Tuscan kale (also known as lacinato kale), de-stemmed and finely chopped<\/p>\n<p>3 lemons, freshly squeezed<\/p>\n<p>1\/2 cup extra virgin olive oil (<a href=\"https:\/\/amzn.to\/46VKj5W\" data-wpel-link=\"external\">this is my all-time fave<\/a>)<\/p>\n<p>2 cloves of garlic, grated into the olive oil<\/p>\n<p>Salt, pepper, and red pepper flakes (adjust to taste)<\/p>\n<p>1\/2 cup finely grated grana padano or parmigiano reggiano cheese<\/p>\n<p>1\/2 cup toasted whole wheat bread crumbs (or gluten-free bread crumbs)<\/p>\n<p>Salt and red pepper to taste<\/p>\n<h4>Instructions<\/h4>\n<p>In a salad bowl whisk together the lemon juice, cup extra virgin olive oil, and garlic salt and red pepper flakes.<\/p>\n<p>Add the chopped kale to the bowl and toss well until evenly coated. Massage the kale gently for 2\u20133 minutes to help break down the fibers.<\/p>\n<p>Let the salad sit at room temperature for at least 30 minutes to allow the flavors to meld and soften the greens.<\/p>\n<p>Just before serving, add the grated cheese and bread crumbs and toss to combine.<\/p>\n<p>Taste and adjust salt and red pepper if needed. Garnish with the cheese shavings before serving.<\/p>\n<p><svg aria-hidden=\"true\" style=\"position: absolute;width: 0;height: 0;overflow: hidden\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<defs>\n<symbol viewbox=\"9 9 46 42\" id=\"wpt-star-full\">\n\t<path d=\"m46.3 52-14.4-9.5-14.4 9.4L22 35.3 8.7 24.5l17.1-.9 6.2-16 6 16 17.2 1-13.4 10.7z\" \/>\n<\/symbol>\n<\/defs>\n<\/svg><br \/>\n<a class=\"button tasty-recipes-print-button tasty-recipes-no-print tasty-recipes-print-above-card\" href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/print\/205776\/\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\">Print<\/a><span class=\"tasty-recipes-jump-target\" id=\"tasty-recipes-205776-jump-target\" style=\"display:block;padding-top:2px;margin-top:-2px;\"><\/span><\/p>\n<div id=\"tasty-recipes-205776\" data-tr-id=\"205776\" class=\"tasty-recipes tasty-recipes-205776 tasty-recipes-display tasty-recipes-has-image\" data-tasty-recipes-customization=\"primary-color.background-color secondary-color.border-color\">\n<h2 class=\"tasty-recipes-title\" data-tasty-recipes-customization=\"h2-color.color h2-transform.text-transform\">True Food Tuscan Kale Salad Recipe<\/h2>\n<div class=\"tasty-recipes-image-button-container\">\n<div class=\"tasty-recipes-image\">\n\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/bestratefinders.com\/blog\/wp-content\/uploads\/2025\/07\/true-food-tuscan-kale-salad-300x300-1.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" data-pin-nopin=\"true\" \/>\t\t<\/div>\n<div class=\"tasty-recipes-buttons\">\n<div class=\"tasty-recipes-button-wrap\">\n<p><a class=\"button tasty-recipes-print-button tasty-recipes-no-print\" href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/print\/205776\/\" target=\"_blank\" data-tasty-recipes-customization=\"\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\"><br \/>\n\t\t\t<img decoding=\"async\" class=\"svg-print\" data-pin-nopin=\"true\" src=\"https:\/\/fitnessista.com\/wp-content\/plugins\/tasty-recipes\/templates\/buttons\/images\/icon-print.png\" \/><br \/>\n\t\tPrint Recipe<\/a>\n\t\t<\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"tasty-recipes-rating\" data-tasty-recipes-customization=\"body-color.color\">\n<p><svg aria-hidden=\"true\" style=\"position: absolute;width: 0;height: 0;overflow: hidden\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<defs>\n<symbol viewbox=\"9 9 46 42\" id=\"wpt-star-full\">\n\t<path d=\"m46.3 52-14.4-9.5-14.4 9.4L22 35.3 8.7 24.5l17.1-.9 6.2-16 6 16 17.2 1-13.4 10.7z\" \/>\n<\/symbol>\n<\/defs>\n<\/svg><br \/>\n<span class=\"tasty-recipes-ratings-buttons tasty-recipes-no-ratings-buttons\" data-tr-default-rating=\"0\">\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"5\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t5 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"4\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t4 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"3\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t3 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"2\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t2 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"1\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t1 Star\t\t\t<\/span>\t\t<\/i>\t<\/span><\/span><\/p>\n<p><span data-tasty-recipes-customization=\"detail-label-color.color\" class=\"rating-label\">No reviews<\/span><\/p>\n<\/p><\/div>\n<div class=\"tasty-recipes-description\" data-tasty-recipes-customization=\"body-color.color\">\n<p>The True Food Tuscan kale salad is savory, bright, perfectly textured, and full of flavor. It hits all the right notes: bright lemon, sharp garlic, the warmth of red pepper flakes, and that nutty, umami hit from grana padano or parmigiano reggiano cheese. It\u2019s crave-worthy and simple enough to recreate at home.<\/p>\n<\/p><\/div>\n<div class=\"tasty-recipes-details\" data-tasty-recipes-customization=\"body-color.color\">\n<ul>\n<li class=\"author\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Author:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-author-name\">Gina Harney \/\/ fitnessista.com<\/span><\/li>\n<\/ul><\/div>\n<div class=\"tasty-recipes-ingredients\">\n<div class=\"tasty-recipes-ingredients-header\">\n<div class=\"tasty-recipes-ingredients-clipboard-container\">\n<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Ingredients<\/h3>\n<\/p><\/div>\n<div class=\"tasty-recipes-units-scale-container\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/p><\/div>\n<div class=\"tasty-recipes-ingredients-body\" data-tasty-recipes-customization=\"body-color.color\">\n<p><span data-amount=\"2\">2<\/span> bunches of Tuscan kale (also known as lacinato kale), de-stemmed and finely chopped<\/p>\n<p><span data-amount=\"3\">3<\/span> lemons, freshly squeezed<\/p>\n<p><span data-amount=\"0.5\" data-unit=\"cup\">1\/2 cup<\/span> extra virgin olive oil<\/p>\n<p><span data-amount=\"2\">2<\/span> cloves of garlic, minced<\/p>\n<p><span data-amount=\"0.5\" data-unit=\"teaspoon\">1\/2 teaspoon<\/span> garlic salt and red pepper flakes (adjust to taste)<\/p>\n<p><span data-amount=\"0.5\" data-unit=\"cup\">1\/2 cup<\/span> finely grated grana padano or parmigiano reggiano cheese<\/p>\n<p><span data-amount=\"0.5\" data-unit=\"cup\">1\/2 cup<\/span> toasted whole wheat bread crumbs (or gluten-free bread crumbs)<\/p>\n<p>Salt and red pepper to taste<\/p>\n<p><!--INSIDE_INGREDIENTS-->\t\t<\/div>\n<div class=\"tasty-recipes-cook-mode\">\n<div class=\"tasty-recipes-cook-mode__container\">\n\t\t<label class=\"tasty-recipes-cook-mode__switch\"><br \/>\n\t\t\t<input type=\"checkbox\" id=\"tasty_recipes_68875825082fd_cookmode\" \/><br \/>\n\t\t\t<span class=\"tasty-recipes-cook-mode__switch-slider tasty-recipes-cook-mode__switch-round\" data-tasty-recipes-customization=\"button-color.background button-text-color.color\"><\/span><br \/>\n\t\t<\/label><br \/>\n\t\t<label for=\"tasty_recipes_68875825082fd_cookmode\"><br \/>\n\t\t\t<span class=\"tasty-recipes-cook-mode__label\">Cook Mode<\/span><br \/>\n\t\t\t<span class=\"tasty-recipes-cook-mode__helper\"><br \/>\n\t\t\t\tPrevent your screen from going dark\t\t\t<\/span><br \/>\n\t\t<\/label>\n\t<\/div>\n<\/div><\/div>\n<div class=\"tasty-recipe-instructions\">\n<div class=\"tasty-recipes-instructions-header\">\n<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Instructions<\/h3>\n<\/p><\/div>\n<div class=\"tasty-recipes-instructions-body\" data-tasty-recipes-customization=\"body-color.color\">\n<p id=\"instruction-step-1\">In a salad bowl whisk together the lemon juice, cup extra virgin olive oil, and garlic salt and red pepper flakes.<\/p>\n<p id=\"instruction-step-2\">Add the chopped kale to the bowl and toss well until evenly coated. Massage the kale gently for 2\u20133 minutes to help break down the fibers.<\/p>\n<p id=\"instruction-step-3\">Let the salad sit at room temperature for at least 30 minutes to allow the flavors to meld and soften the greens.<\/p>\n<p id=\"instruction-step-4\">Just before serving, add the grated cheese and bread crumbs and toss to combine.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<footer class=\"tasty-recipes-entry-footer\">\n<h3 data-tasty-recipes-customization=\"footer-heading-color.color h3-transform.text-transform footer-heading.innerText\">Did you make this recipe?<\/h3>\n<div data-tasty-recipes-customization=\"footer-description-color.color footer-description.innerHTML\">\n<p>Tag <a href=\"https:\/\/www.instagram.com\/fitnessista\" target=\"_blank\" rel=\"noreferrer noopener\" data-wpel-link=\"external\">@fitnessista<\/a> on Instagram<\/p>\n<\/div>\n<\/footer>\n<p><script>\nwindow.trCommon={\"minRating\":6,\"ajaxurl\":\"https:\/\/fitnessista.com\/wp-admin\/admin-ajax.php\",\"ratingNonce\":\"\",\"postId\":205772};\nwindow.TastyRecipes = window.TastyRecipes || {};<\/p>\n<p>window.TastyRecipes.smoothScroll = {\ninit() {\ndocument.addEventListener( 'click', ( e ) => {\nlet anchor = e.target;\nif ( anchor.tagName !== 'A' ) {\nanchor = anchor.closest( 'a.tasty-recipes-scrollto' );\n}<\/p>\n<p>if ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {\nreturn;\n}<\/p>\n<p>const elementHref = anchor.getAttribute( 'href' );\nif ( ! elementHref ) {\nreturn;\n}<\/p>\n<p>e.preventDefault();\nthis.goToSelector( elementHref );\n});\n},\ngoToSelector( selector ) {\nconst element = document.querySelector( selector );\nif ( ! element ) {\nreturn;\n}\nelement.scrollIntoView( { behavior: 'smooth' } );\n}\n};<\/p>\n<p>document.addEventListener(\n'DOMContentLoaded',\n() => window.TastyRecipes.smoothScroll.init()\n);<\/p>\n<p>window.TastyRecipes = window.TastyRecipes || {};\nwindow.TastyRecipes.cookMode = {\nwakeLockApi: false,\nwakeLock: false,\ncookModeSelector: '.tasty-recipes-cook-mode',\ninit() {\nif (\"wakeLock\" in navigator && \"request\" in navigator.wakeLock) {\nthis.wakeLockApi = navigator.wakeLock;\n}<\/p>\n<p>const cookModes = document.querySelectorAll(this.cookModeSelector);<\/p>\n<p>if (cookModes.length > 0) {\nfor (const cookMode of cookModes) {\nif (this.wakeLockApi) {\ncookMode.querySelector('input[type=\"checkbox\"]').addEventListener(\"change\", event => {\nthis.checkboxChange(event.target);\n}, false);\n} else {\ncookMode.style.display = \"none\";\n}\n}\n}\n},\ncheckboxChange(checkbox) {\nif (checkbox.checked) {\nthis.lock();\n} else {\nthis.unlock();\n}\n},\nsetCheckboxesState(state) {\nconst checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type=\"checkbox\"]');\nfor (const checkbox of checkboxes) {\ncheckbox.checked = state;\n}\n},\nasync lock() {\ntry {\nthis.wakeLock = await this.wakeLockApi.request(\"screen\");\nthis.wakeLock.addEventListener(\"release\", () => {\nthis.wakeLock = false;\nthis.setCheckboxesState(false);\n});\nthis.setCheckboxesState(true);\n} catch (error) {\nthis.setCheckboxesState(false);\n}\n},\nunlock() {\nif (this.wakeLock) {\nthis.wakeLock.release();\nthis.wakeLock = false;\n}\nthis.setCheckboxesState(false);\n}\n};<\/p>\n<p>(function(callback) {\nif (document.readyState !== \"loading\") {\ncallback();\n} else {\ndocument.addEventListener(\"DOMContentLoaded\", callback);\n}\n})(() => {\nwindow.TastyRecipes.cookMode.init();\n});<\/p>\n<p>window.TastyRecipes = window.TastyRecipes || {};<\/p>\n<p>window.TastyRecipes.staticTooltip = {\nelement: null,\ntooltipElement: null,\ndeleting: false,\ninit( element ) {\nif ( this.deleting ) {\nreturn;\n}\nthis.element = element;\nthis.buildElements();\n},\ndestroy() {\nif ( ! this.tooltipElement || this.deleting ) {\nreturn;\n}<\/p>\n<p>this.deleting = true;\nthis.tooltipElement.classList.remove( 'opened' );<\/p>\n<p>setTimeout( () => {\nthis.tooltipElement.remove();\nthis.deleting = false;\n}, 500 );\n},\nbuildElements() {\nconst tooltipElement = document.createElement( 'div' );\ntooltipElement.classList.add( 'tasty-recipes-static-tooltip');\ntooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );<\/p>\n<p>const currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );\nif ( currentTooltipElement ) {\ndocument.body.replaceChild( tooltipElement, currentTooltipElement );\n} else {\ndocument.body.appendChild( tooltipElement );\n}<\/p>\n<p>this.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );\n},\nshow() {\nif ( ! this.tooltipElement ) {\nreturn;\n}<\/p>\n<p>const tooltipTop = this.element.getBoundingClientRect().top\n+ window.scrollY\n- 10 \/\/ 10px offset.\n- this.tooltipElement.getBoundingClientRect().height;\nconst tooltipLeft = this.element.getBoundingClientRect().left\n- ( this.tooltipElement.getBoundingClientRect().width \/ 2 )\n+ ( this.element.getBoundingClientRect().width \/ 2 ) - 1;\nconst posLeft = Math.max( 10, tooltipLeft );\nthis.maybeRemoveTail( posLeft !== tooltipLeft );<\/p>\n<p>this.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );\nthis.tooltipElement.classList.add( 'opened' );<\/p>\n<p>},\nmaybeRemoveTail( removeTail ) {\nif ( removeTail ) {\nthis.tooltipElement.classList.add( 'tr-hide-tail' );\n} else {\nthis.tooltipElement.classList.remove( 'tr-hide-tail' );\n}\n},\nchangeMessage( message ) {\nif ( ! this.tooltipElement ) {\nreturn;\n}\nthis.tooltipElement.innerHTML = message;\n}\n};<\/p>\n<p>window.TastyRecipes.ajax = {\nsendPostRequest( url, data, success, failure ) {\nconst xhr = new XMLHttpRequest();\nxhr.open( 'POST', url, true );\nxhr.send( this.preparePostData( data ) );<\/p>\n<p>xhr.onreadystatechange = () => {\nif ( 4 !== xhr.readyState ) {\nreturn;\n}\nif ( xhr.status === 200 ) {\nsuccess( JSON.parse( xhr.responseText ) );\nreturn;\n}<\/p>\n<p>failure( xhr );\n};<\/p>\n<p>xhr.onerror = () => {\nfailure( xhr );\n};\n},\npreparePostData( data ) {\nconst formData = new FormData();<\/p>\n<p>for ( const key in data ) {\nformData.append( key, data[key] );\n}\nreturn formData;\n},\n};<\/p>\n<p>window.TastyRecipes.ratings = {\ndefaultRating: 0,\ncurrentRatingPercentage: 100,\nsavingRating: false,\ninit( minRating ) {\nthis.minRating = minRating;<\/p>\n<p>this.formWatchRating();\nthis.closeTooltipWhenClickOutside();\nthis.addBodyClassBasedOnSelectedRating();\nthis.backwardCompFormRatingPosition();\n},\nformWatchRating() {\nconst ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');\nif ( ratings.length <= 0 ) {\nreturn;\n}\nfor ( const rating of ratings ) {\nrating.addEventListener( 'click', event => {\nevent.preventDefault();\nthis.defaultRating = event.target.closest( '.checked' ).dataset.rating;\nthis.setCheckedStar( event.target );\nthis.maybeSendRating( this.defaultRating, event.target );\nthis.setRatingInForm( this.defaultRating );\n} );\n}\n},\ncloseTooltipWhenClickOutside() {\nwindow.addEventListener( 'click', e => {\n\/\/ Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.\nif ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {\nreturn;\n}<\/p>\n<p>window.TastyRecipes.staticTooltip.destroy();\n} );\n},\n setRatingInForm( rating ) {\nconst ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value=\"' + rating + '\"]' );\nif ( ! ratingInput ) {\nreturn;\n}\nratingInput.click();\n},\naddBodyClassBasedOnSelectedRating() {\nconst ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );\nif ( ! ratingInputs ) {\nreturn;\n}\nfor ( const ratingInput of ratingInputs ) {\nratingInput.addEventListener( 'click', currentEvent => {\nconst selectedRating = currentEvent.target.getAttribute( 'value' );\nthis.handleBodyClassByRating( selectedRating );\nthis.toggleCommentTextareaRequired( selectedRating );\n} );\n}\n},\nhandleBodyClassByRating( rating ) {\nif ( rating < this.minRating ) {\ndocument.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );\nreturn;\n}\ndocument.body.classList.add( 'tasty-recipes-selected-minimum-rating' );\n},\ntoggleCommentTextareaRequired( rating ) {\nconst commentTextarea = document.getElementById( 'comment' );\nif ( ! commentTextarea ) {\nreturn;\n}\n\nif ( rating < this.minRating ) {\ncommentTextarea.setAttribute( 'required', '' );\nreturn;\n}\n\ncommentTextarea.removeAttribute( 'required' );\n},\nmaybeSendRating( rating, element ) {\nif ( this.savingRating === rating ) {\nreturn;\n}\n\nthis.savingRating = rating;\nwindow.TastyRecipes.staticTooltip.init( element );\n\nconst recipeCardElement = element.closest( '.tasty-recipes' );\nif ( ! recipeCardElement ) {\nwindow.TastyRecipes.staticTooltip.destroy();\nreturn;\n}\n\nwindow.TastyRecipes.ajax.sendPostRequest(\nwindow.trCommon.ajaxurl,\n{\naction: 'tasty_recipes_save_rating',\nrating,\nnonce: window.trCommon.ratingNonce,\npost_id: window.trCommon.postId,\nrecipe_id: recipeCardElement.dataset.trId,\n},\n( response ) => {\nwindow.TastyRecipes.staticTooltip.changeMessage( response.data.message );\nwindow.TastyRecipes.staticTooltip.show();\nthis.updateAverageText( response.data, recipeCardElement );\nthis.maybeFillCommentForm( response.data );<\/p>\n<p>\/\/ Hide the tooltip after 5 seconds.\nsetTimeout( () => {\nthis.maybeResetTooltip( recipeCardElement, response.data, rating );\n}, 5000 );\n},\n() => {\nthis.resetTooltip( recipeCardElement );\n}\n);\n},\nupdateAverageText( data, recipeCardElement ) {\nif ( ! data.average ) {\nreturn;\n}\nthis.setRatingPercent( data );<\/p>\n<p>if ( ! data.count ) {\nreturn;\n}<\/p>\n<p>const quickLink = document.querySelector( '.tasty-recipes-rating-link' );\nif ( quickLink ) {\nthis.setTextInContainer( quickLink, data );\nthis.setPartialStar( quickLink );\n}<\/p>\n<p>const cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );\ncardStars.dataset.trDefaultRating = data.average;\nthis.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );\n},\nsetTextInContainer( container, data ) {\nif ( ! container ) {\nreturn;\n}<\/p>\n<p>if ( data.label ) {\nconst ratingLabelElement = container.querySelector( '.rating-label' );\nif ( ratingLabelElement ) {\nratingLabelElement.innerHTML = data.label;\n}\nreturn;\n}<\/p>\n<p>const averageElement = container.querySelector( '.average' );\nif ( averageElement ) {\naverageElement.textContent = data.average;\n}<\/p>\n<p>const countElement = container.querySelector( '.count' );\nif ( countElement ) {\ncountElement.textContent = data.count;\n}\n},\nsetPartialStar( container ) {\nconst highestStar = container.querySelector( '[data-rating=\"' + Math.ceil( this.defaultRating ) + '\"]' );\nif ( highestStar ) {\nhighestStar.dataset.trClip = this.currentRatingPercentage;\n}\n},\nsetRatingPercent( data ) {\nthis.defaultRating = data.average.toFixed( 1 );\nconst parts = data.average.toFixed( 2 ).toString().split( '.' );\nthis.currentRatingPercentage = parts[1] ? parts[1] : 100;\nif ( this.currentRatingPercentage === '00' ) {\nthis.currentRatingPercentage = 100;\n}\n},\nsetCheckedStar( target ) {\nconst cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );\nconst selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );\nif ( selectedRatingElement ) {\ndelete selectedRatingElement.dataset.trChecked;\n}<\/p>\n<p>const thisStar = target.closest( '.tasty-recipes-rating' );\nthisStar.dataset.trChecked = 1;\nthisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;\n},\nmaybeFillCommentForm( data ) {\nif ( ! data.comment || ! data.comment.content ) {\nreturn;\n}<\/p>\n<p>const commentForm = document.querySelector( '#commentform' );\nif ( ! commentForm ) {\nreturn;\n}<\/p>\n<p>const commentBox = commentForm.querySelector( '[name=comment]' );\nif ( ! commentBox || commentBox.value ) {\nreturn;\n}<\/p>\n<p>\/\/ Add comment details for editing.\ncommentBox.innerHTML = data.comment.content;\nif ( data.comment.name ) {\ncommentForm.querySelector( '[name=author]' ).value = data.comment.name;\ncommentForm.querySelector( '[name=email]' ).value = data.comment.email;\n}\n},\nmaybeResetTooltip( recipeCardElement, data, rating ) {\nif ( this.savingRating === rating ) {\nthis.resetTooltip( recipeCardElement, data );\n}\n},\nresetTooltip( recipeCardElement, data ) {\nwindow.TastyRecipes.staticTooltip.destroy();\nthis.savingRating = false;<\/p>\n<p>\/\/ Reset the default rating.\nconst cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );\nif ( cardRatingContainer ) {\nthis.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;\ncardRatingContainer.dataset.trDefaultRating = this.defaultRating;<\/p>\n<p>this.resetSelectedStar( cardRatingContainer, data );\n}\n},\nresetSelectedStar( cardRatingContainer ) {\nconst selectedRatingElement = cardRatingContainer.querySelector( '[data-rating=\"' + Math.ceil( this.defaultRating ) + '\"]' );\nif ( selectedRatingElement ) {\nselectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;\nselectedRatingElement.parentNode.dataset.trChecked = 1;\n}<\/p>\n<p>const previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );\nif ( previousSelectedElement ) {\nconst currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');\nif ( currentSelectedRating !== selectedRatingElement ) {\ndelete previousSelectedElement.dataset.trChecked;\n}\n}\n},\nbackwardCompFormRatingPosition() {\nconst ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );\nif ( ! ratingsButtons ) {\nreturn;\n}\nconst ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);\nif ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {\nratingsButtons.style.direction = 'rtl';\n}<\/p>\n<p>if ( typeof tastyRecipesRating !== 'undefined' ) {\n\/\/ Select the rating that was previously selected in admin.\nratingsButtons.querySelector( '.tasty-recipes-rating[value=\"' + tastyRecipesRating + '\"]' ).checked = true;\n}<\/p>\n<p>const ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );\nfor (const ratingSpan of ratingSpans) {\nratingSpan.addEventListener( 'click', event => {\nif ( ratingSpan === event.target ) {\nreturn;\n}\nratingSpan.previousElementSibling.click();\n} );\n}\n}\n};<\/p>\n<p>(function(callback) {\nif (document.readyState !== \"loading\") {\ncallback();\n} else {\nwindow.addEventListener( 'load', callback );\n}\n})(() => {\nwindow.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );\n});\n<\/script><\/div>\n<p>If you love this, you might also enjoy my <a href=\"https:\/\/fitnessista.com\/italian-kale-salad\/\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\">Italian kale salad<\/a> or this post on <a href=\"https:\/\/fitnessista.com\/veg-intimidation-make-kale-taste-delicious\/\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\">how to make kale taste good<\/a>.<\/p>\n<p>This True Food Tuscan Kale Salad Recipe is light, flavorful, and easy to prep in advance. Whether you\u2019re serving it as a side dish or adding some protein to turn it into a full meal, I think you will looooooove it.<\/p>\n<p>So, tell me friend: have you been to True Food? What\u2019s your favorite menu item? I always get the tulsi tea (SO good) and will usually get the Tuscan Kale Salad with salmon. Simple and delicious. I always love their seasonal chopped salad.<\/p>\n<p>xoxo<\/p>\n<p>Gina<\/p>\n<p>The post <a href=\"https:\/\/fitnessista.com\/true-food-tuscan-kale-salad-recipe\/\">True Food Tuscan Kale Salad Recipe<\/a> appeared first on <a href=\"https:\/\/fitnessista.com\">The Fitnessista<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sharing a copycat recipe for one of my favorite restaurant salads of all time: the Tuscan Kale Sald from True Food Kitchen.\u00a0 Hi friends! How are you? I hope you\u2019re having a lovely morning so far. Today, I\u2019m heading to F45 and the chiropractor (bless it) and then we\u2019re meeting up with friends for pizza\u2026<br \/>\nThe post True Food Tuscan Kale Salad Recipe appeared first on The Fitnessista.<\/p>\n","protected":false},"author":1,"featured_media":130640,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wprm-recipe-roundup-name":"","wprm-recipe-roundup-description":""},"categories":[20,1,21,22,19],"tags":[],"_links":{"self":[{"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/posts\/130646"}],"collection":[{"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/comments?post=130646"}],"version-history":[{"count":3,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/posts\/130646\/revisions"}],"predecessor-version":[{"id":130652,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/posts\/130646\/revisions\/130652"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/media\/130640"}],"wp:attachment":[{"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/media?parent=130646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/categories?post=130646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestratefinders.com\/blog\/wp-json\/wp\/v2\/tags?post=130646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}