CINXE.COM

Growing African vegetables on buildings can save space and feed cities – new study

<!DOCTYPE html> <html lang="en-GLOBAL" class="no-js"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="theme-color" content="#d8352a"> <meta name="msapplication-navbutton-color" content="#d8352a"> <meta charset="utf-8"> <meta property="fb:app_id" content="127105130696839"> <meta name="current-region" content="global"> <meta http-equiv="Content-Language" content="en-GLOBAL"> <meta name="description" content="Growing traditional African vegetables on building facades is feasible and can improve food supply in cities." /> <meta name="pubdate" content="20231105" /> <meta name="commissioning-region" content="africa" /> <meta name="searchtype" content="analysis" /> <meta name="original-source" content="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" /> <meta name="news_keywords" content="Climate change, Irrigation, Pretoria, RandD, Soil, South Africa, Urban centres" /> <meta name="author" content="Karen Botes" /> <meta name="institution" content="University of Pretoria" /> <meta property="og:site_name" content="The Conversation" /> <meta property="og:title" content="Growing African vegetables on buildings can save space and feed cities – new study" /> <meta property="og:description" content="Growing traditional African vegetables on building facades is feasible and can improve food supply in cities." /> <meta property="og:type" content="article" /> <meta property="og:image" content="https://images.theconversation.com/files/554793/original/file-20231019-21-c6blch.jpg?ixlib=rb-4.1.0&amp;rect=7%2C0%2C4785%2C2392&amp;q=45&amp;auto=format&amp;w=1356&amp;h=668&amp;fit=crop" /> <meta property="og:updated_time" content="2024-10-14T13:27:04Z" /> <meta property="og:url" content="http://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" /> <meta property="article:publisher" content="https://facebook.com/ConversationAfrica" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@TC_Africa" /> <link rel="canonical" href="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" /> <meta property="fb:pages" content="755360694556328"> <script type="application/javascript"> window.PAGE_CONFIG = { content_id: 214970, content_slug: 'growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970', comments_closed_at: '2023-11-16T08:54:21Z', subscriptionOptions: {}, promos_context: { topic_ids: [27, 273, 1821, 5995, 28678, 49808, 102849, 147012, 147013], section_ids: [3276, 3279], collaborator_ids: [1333601, 1438550], content_language: 'en', } } </script> <script> window.GTM = window.GTM || {} window.GTM.pageType = "article" window.GTM.ArticleData = {"article_id":"214970","article_tags":"Building facades|Climate change|Irrigation|Pretoria|RandD|Soil|South Africa|Traditional African Vegetables|Urban centres","article_type":"free","author_id":"1438550","author_name":"Karen Botes","content_category":"Environment + Energy|Home Page","feature_type":"analysis","headline":"growing african vegetables on buildings can save space and feed cities new study","publish_date":"2023-11-05","publish_time":"09:27"} </script> <script> //<![CDATA[ window.public_path = "https://cdn.theconversation.com/static/tc/"; window.TC = {}; window.TC.Config = {"cookie_domain":".theconversation.com","image_cdn_domain":"images.theconversation.com","analytics_url":"https://analytics.theconversation.com","sharejs_init_delay_ms":0,"recaptcha":{"enabled":true,"siteKey":"6Lf3Oc0UAAAAAIbME3Lv7iS7EVeuQzpru1Jbij5N"}}; //]]> </script> <!-- refspec 503c63c8f36ef8cba41eb7f67299e769a555fb09 --> <title>Growing African vegetables on buildings can save space and feed cities – new study</title> <style media="screen"> @font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:100;src:local("Montserrat Thin "),local("Montserrat-Thin"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-100-a5bfe500a212b55e1d97ab22ec963cc2.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-100-f3fd3a8cda2788c9187834cf76d76d57.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:100;src:local("Montserrat Thin italic"),local("Montserrat-Thinitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-100italic-c4fd7303dedad09a44867a2c79296456.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-100italic-8545c5c9716e859e79c61d608b561504.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:200;src:local("Montserrat Extra Light "),local("Montserrat-Extra Light"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-200-11e53b4b006a3bacb5b027c6a9bb64ce.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-200-b6f663e2de4a8379688cdba1b954edbc.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:200;src:local("Montserrat Extra Light italic"),local("Montserrat-Extra Lightitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-200italic-32131f2a84c4a3abee7d2fd2b49850ad.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-200italic-cd7b7fa2da727185e9a74724658bcc65.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:300;src:local("Montserrat Light "),local("Montserrat-Light"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-300-c587fd5d56f85fb730092fc82551b5a1.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-300-46b5c290e8fd38b7639e3f9383c2ac56.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:300;src:local("Montserrat Light italic"),local("Montserrat-Lightitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-300italic-ca09533c023a3a9df2fb0167c26e0fdb.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-300italic-f56d740b2c209398b341cc025a9c77d6.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:400;src:local("Montserrat Regular "),local("Montserrat-Regular"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-400-504499c7e16ee847a32a7a8bf6923a79.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-400-7710fcbaccd9837e1c5e7e819bf1d230.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:400;src:local("Montserrat Regular italic"),local("Montserrat-Regularitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-400italic-920286bb1fd8ffb693ef17a42546ee3a.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-400italic-035e0faa25a71eeab032f07cf5490eef.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:500;src:local("Montserrat Medium "),local("Montserrat-Medium"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-500-6fd836a65acf6d59bd2f5e0be5717207.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-500-561e37f444fecedbe680a382e941392a.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:500;src:local("Montserrat Medium italic"),local("Montserrat-Mediumitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-500italic-44f475da8da3427ecc77a4450f00452c.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-500italic-4d2fdf6bcf6c74b893e69fec9c8907e5.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:600;src:local("Montserrat SemiBold "),local("Montserrat-SemiBold"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-600-c18b4ac34e93857f7437c28f94923dc0.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-600-010ceaeb92611d327450a647f8ce6017.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:600;src:local("Montserrat SemiBold italic"),local("Montserrat-SemiBolditalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-600italic-2dbbde16b836db7a390a71d3aa2a232e.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-600italic-045adf4940dd14d523350697cd984663.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:700;src:local("Montserrat Bold "),local("Montserrat-Bold"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-700-66fd2310725b78026454e50d0dd9effc.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-700-a7a97263d97c409f1a624f88d4f8f00e.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:700;src:local("Montserrat Bold italic"),local("Montserrat-Bolditalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-700italic-a9005293d3425d6e611c7c5f451d6f68.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-700italic-2413952457cc83b0bc6fe20b12ffa15b.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:800;src:local("Montserrat ExtraBold "),local("Montserrat-ExtraBold"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-800-abbac7439df45ab1a1e316d480a5c281.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-800-5e564db333b8b21c83b84ed531d94eb2.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:800;src:local("Montserrat ExtraBold italic"),local("Montserrat-ExtraBolditalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-800italic-4dac3f51b5a7a0609d210cc4fd4d5980.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-800italic-61120b3c6f076e91b0a7e86ac6966634.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:normal;font-weight:900;src:local("Montserrat Black "),local("Montserrat-Black"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-900-041d8fc07df6765187171717d5b810fb.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-900-c440708c3b73b3d9cea7e345718de728.woff) format("woff")}@font-face{font-display:swap;font-family:Montserrat;font-style:italic;font-weight:900;src:local("Montserrat Black italic"),local("Montserrat-Blackitalic"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-900italic-3028f5dd9ff9ce34cb18fac0f6ffbbda.woff2) format("woff2"),url(https://cdn.theconversation.com/static/tc/typeface-montserrat/files/montserrat-latin-900italic-1d7048d5048513c46705b15fb67a4379.woff) format("woff")}@keyframes (progress){to{background-position:-60px 0}}abbr,address,article,aside,audio,b,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,p,pre,q,samp,section,small,span,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,ul,var,video{background:transparent;border:0;font-size:100%;margin:0;outline:0;padding:0;vertical-align:baseline}body,html{height:100%;-webkit-overflow-scrolling:touch}table{border-collapse:separate;border-spacing:0}caption,td,th{font-weight:400;text-align:left}table,td,th{vertical-align:middle}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote,q{quotes:"" ""}img{-ms-interpolation-mode:bicubic}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}nav ol,nav ul{list-style:none}del{text-decoration:line-through}sup{vertical-align:super}sub,sup{font-size:smaller}sub{vertical-align:sub}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}input,select{vertical-align:middle}[class*=" icon-"],[class^=icon-],h1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@font-face{font-family:TCFont-Regular;font-style:normal;font-weight:400;src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/tcfont-regular-f612b8e50274f80fce402eb6dd5356ea.eot);src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/tcfont-regular-f612b8e50274f80fce402eb6dd5356ea.eot?#iefix) format("embedded-opentype"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/tcfont-regular-b820d37bb7b5e511344449a3bb688f10.woff) format("woff"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/tcfont-regular-f5cd784c207a3587678e5864b0e6a5ce.ttf) format("truetype")}[class*=" icon-"],[class^=icon-]{display:inline-block;font-family:TCFont-Regular;font-size:1.231em;font-style:normal!important;font-weight:400!important;position:relative;top:-.1em;vertical-align:middle;width:1.231em}[class*=" icon-"].icon-comments:before,[class^=icon-].icon-comments:before{content:""}[class*=" icon-"].icon-twitter:before,[class^=icon-].icon-twitter:before{color:#000;content:""}[class*=" icon-"].icon-email:before,[class^=icon-].icon-email:before{content:""}[class*=" icon-"].icon-facebook:before,[class^=icon-].icon-facebook:before{color:#3a5a93;content:""}[class*=" icon-"].icon-maximise:before,[class^=icon-].icon-maximise:before{content:""}[class*=" icon-"].icon-republish:before,[class^=icon-].icon-republish:before{content:""}[class*=" icon-"].icon-globe:before,[class^=icon-].icon-globe:before{content:""}[class*=" icon-"].icon-delete:before,[class^=icon-].icon-delete:before{content:""}[class*=" icon-"].icon-add:before,[class^=icon-].icon-add:before{content:""}[class*=" icon-"].icon-layout:before,[class^=icon-].icon-layout:before{content:""}[class*=" icon-"].icon-article-published:before,[class*=" icon-"].icon-article:before,[class^=icon-].icon-article-published:before,[class^=icon-].icon-article:before{content:""}[class*=" icon-"].icon-article-check:before,[class^=icon-].icon-article-check:before{content:""}[class*=" icon-"].icon-chart:before,[class^=icon-].icon-chart:before{content:""}[class*=" icon-"].icon-reader:before,[class^=icon-].icon-reader:before{content:""}[class*=" icon-"].icon-readers:before,[class^=icon-].icon-readers:before{content:""}[class*=" icon-"].icon-subtract:before,[class^=icon-].icon-subtract:before{content:""}[class*=" icon-"].icon-comment:before,[class^=icon-].icon-comment:before{content:""}[class*=" icon-"].icon-search:before,[class^=icon-].icon-search:before{content:""}[class*=" icon-"].icon-help:before,[class^=icon-].icon-help:before{content:""}[class*=" icon-"].icon-rss:before,[class^=icon-].icon-rss:before{color:#eb7f3e;content:""}[class*=" icon-"].icon-rss-non-coloured:before,[class^=icon-].icon-rss-non-coloured:before{content:""}[class*=" icon-"].icon-favourite:before,[class^=icon-].icon-favourite:before{content:""}[class*=" icon-"].icon-location:before,[class^=icon-].icon-location:before{content:""}[class*=" icon-"].icon-time:before,[class^=icon-].icon-time:before{content:""}[class*=" icon-"].icon-friend-of-tc:before,[class^=icon-].icon-friend-of-tc:before{content:""}[class*=" icon-"].icon-friend-of-tc-outer:before,[class^=icon-].icon-friend-of-tc-outer:before{content:""}[class*=" icon-"].icon-friend-of-tc-heart:before,[class^=icon-].icon-friend-of-tc-heart:before{content:""}[class*=" icon-"].icon-check:before,[class^=icon-].icon-check:before{content:""}[class*=" icon-"].icon-favourite-add:before,[class^=icon-].icon-favourite-add:before{content:""}[class*=" icon-"].icon-followed:before,[class^=icon-].icon-followed:before{content:""}[class*=" icon-"].icon-skype:before,[class^=icon-].icon-skype:before{content:""}[class*=" icon-"].icon-media-enquiries:before,[class*=" icon-"].icon-phone:before,[class*=" icon-"].icon-work-phone:before,[class^=icon-].icon-media-enquiries:before,[class^=icon-].icon-phone:before,[class^=icon-].icon-work-phone:before{content:""}[class*=" icon-"].icon-mobile:before,[class^=icon-].icon-mobile:before{content:""}[class*=" icon-"].icon-private:before,[class^=icon-].icon-private:before{content:""}[class*=" icon-"].icon-public:before,[class^=icon-].icon-public:before{content:""}[class*=" icon-"].icon-topics:before,[class^=icon-].icon-topics:before{content:""}[class*=" icon-"].icon-menu:before,[class^=icon-].icon-menu:before{content:""}[class*=" icon-"].icon-external-link:before,[class^=icon-].icon-external-link:before{content:""}[class*=" icon-"].icon-trash:before,[class^=icon-].icon-trash:before{content:""}[class*=" icon-"].icon-image:before,[class*=" icon-"].icon-picture:before,[class^=icon-].icon-image:before,[class^=icon-].icon-picture:before{content:""}[class*=" icon-"].icon-edit:before,[class^=icon-].icon-edit:before{content:""}[class*=" icon-"].icon-heading:before,[class^=icon-].icon-heading:before{content:""}[class*=" icon-"].icon-bold:before,[class^=icon-].icon-bold:before{content:""}[class*=" icon-"].icon-italic:before,[class^=icon-].icon-italic:before{content:""}[class*=" icon-"].icon-link:before,[class^=icon-].icon-link:before{content:""}[class*=" icon-"].icon-video:before,[class^=icon-].icon-video:before{content:""}[class*=" icon-"].icon-fullscreen:before,[class^=icon-].icon-fullscreen:before{content:""}[class*=" icon-"].icon-close-fullscreen:before,[class^=icon-].icon-close-fullscreen:before{content:""}[class*=" icon-"].icon-favourite-minus:before,[class^=icon-].icon-favourite-minus:before{content:""}[class*=" icon-"].icon-envelope:before,[class^=icon-].icon-envelope:before{content:""}[class*=" icon-"].icon-simple-check:before,[class^=icon-].icon-simple-check:before{content:""}[class*=" icon-"].icon-calendar:before,[class^=icon-].icon-calendar:before{content:""}[class*=" icon-"].icon-the-conversation:before,[class^=icon-].icon-the-conversation:before{content:""}[class*=" icon-"].icon-lock:before,[class^=icon-].icon-lock:before{content:""}[class*=" icon-"].icon-unlock:before,[class^=icon-].icon-unlock:before{content:""}[class*=" icon-"].icon-audio:before,[class^=icon-].icon-audio:before{content:""}[class*=" icon-"].icon-chevron-right:before,[class^=icon-].icon-chevron-right:before{content:""}[class*=" icon-"].icon-caret-down:before,[class^=icon-].icon-caret-down:before{content:""}[class*=" icon-"].icon-caret-left:before,[class^=icon-].icon-caret-left:before{content:""}[class*=" icon-"].icon-caret-right:before,[class^=icon-].icon-caret-right:before{content:""}[class*=" icon-"].icon-caret-up:before,[class^=icon-].icon-caret-up:before{content:""}[class*=" icon-"].icon-pastespecial:before,[class^=icon-].icon-pastespecial:before{content:""}[class*=" icon-"].icon-linkedin:before,[class^=icon-].icon-linkedin:before{color:#0181b2;content:""}[class*=" icon-"].icon-pause:before,[class^=icon-].icon-pause:before{content:""}[class*=" icon-"].icon-cog:before,[class^=icon-].icon-cog:before{content:""}[class*=" icon-"].icon-orcid:before,[class^=icon-].icon-orcid:before{color:#a6ce39;content:""}[class*=" icon-"].icon-music:before,[class^=icon-].icon-music:before{content:""}[class*=" icon-"].icon-print:before,[class^=icon-].icon-print:before{content:""}[class*=" icon-"].icon-google-plus:before,[class^=icon-].icon-google-plus:before{color:#de4931;content:""}[class*=" icon-"].icon-home:before,[class^=icon-].icon-home:before{content:""}[class*=" icon-"].icon-facebook-simple:before,[class^=icon-].icon-facebook-simple:before{color:#3a5a93;content:""}[class*=" icon-"].icon-tag:before,[class^=icon-].icon-tag:before{content:""}[class*=" icon-"].icon-left-guillemet:before,[class^=icon-].icon-left-guillemet:before{content:""}[class*=" icon-"].icon-input:before,[class^=icon-].icon-input:before{content:""}[class*=" icon-"].icon-whatsapp:before,[class^=icon-].icon-whatsapp:before{color:#455a64;content:""}[class*=" icon-"].icon-fb-messenger:before,[class^=icon-].icon-fb-messenger:before{color:#0084ff;content:""}[class*=" icon-"].icon-youtube:before,[class^=icon-].icon-youtube:before{color:red;content:""}[class*=" icon-"].icon-auth-facebook:before,[class^=icon-].icon-auth-facebook:before{color:#3a5a93;content:""}[class*=" icon-"].icon-auth-twitter:before,[class^=icon-].icon-auth-twitter:before{color:#000;content:""}[class*=" icon-"].icon-auth-linkedin:before,[class^=icon-].icon-auth-linkedin:before{color:#0181b2;content:""}[class*=" icon-"].icon-auth-google:before,[class^=icon-].icon-auth-google:before{color:#de4931;content:""}.icon-combine .icon-friend-of-tc-heart{margin-top:.045em;position:absolute}span.icon-combine-heart{display:inline-block;font-size:inherit;height:inherit;padding-left:10px;position:relative}span.icon-combine-heart i{left:0;position:absolute;text-align:center;top:0}i.icon-conversation-red{color:#d8372c}.vivus-icon-examples li{float:left;height:25px;list-style:none;padding:10px 0;width:25%}@font-face{font-family:Libre Baskerville;font-style:normal;font-weight:400;src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-regular-979b88dad081c654981a0c29d46e27bc.eot);src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-regular-979b88dad081c654981a0c29d46e27bc.eot?#iefix) format("embedded-opentype"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-regular-6fbec92a1e6cb891ff0da1af2e97a523.woff) format("woff"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-regular-116bba3f2aa32286b63c594118c67f74.ttf) format("truetype")}@font-face{font-family:Libre Baskerville;font-style:normal;font-weight:700;src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bold-9f88f945d8445fa58978dfbc4bce5ae9.eot);src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bold-9f88f945d8445fa58978dfbc4bce5ae9.eot?#iefix) format("embedded-opentype"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bold-98b8244fa821eed601d3d92165b098c6.woff) format("woff"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bold-1c63ea5a813372cc806d3885496b3308.ttf) format("truetype")}@font-face{font-family:Libre Baskerville;font-style:italic;font-weight:400;src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-italic-760c6e0b5a6ab858f15ea6cc6a864a40.eot);src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-italic-760c6e0b5a6ab858f15ea6cc6a864a40.eot?#iefix) format("embedded-opentype"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-italic-022309ef5c47fb36921851f730a90a84.woff) format("woff"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-italic-e6cc30071bd07d243648b875a10a6c02.ttf) format("truetype")}@font-face{font-family:Libre Baskerville;font-style:italic;font-weight:700;src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bolditalic-4fc9003b7c507a3909502ccc05a9cf2a.eot);src:url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bolditalic-4fc9003b7c507a3909502ccc05a9cf2a.eot?#iefix) format("embedded-opentype"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bolditalic-005508da94d530c4715b860b63e014bc.woff) format("woff"),url(https://cdn.theconversation.com/static/tc/stylesheets/carlton/fonts/librebaskerville-bolditalic-d0e7fc2079d2288a9c737a386bd46401.ttf) format("truetype")}@media only screen and (max-width:599px){body{font-size:16px;height:100%;line-height:22px;width:100%}body #page-wrapper.overlay-visible{height:100%;overflow:hidden}body .handheld{display:block}body p{padding:0}body.pages-show .highlight-panel{display:none}body.pages-show .page-layout.section .handheld-analysis,body.pages-show .page-layout.section .series{display:block}body.pages-show .page-layout.section .handheld-ad,body.pages-show .page-layout.section .handheld-briefs{display:none}body.pages-show .page-layout.section.handheld-display-research .handheld-briefs,body.pages-show .page-layout.section.handheld-display-research .handheld-research{display:block}body.pages-show .page-layout.section.handheld-display-research #special_section,body.pages-show .page-layout.section.handheld-display-research .handheld-ad,body.pages-show .page-layout.section.handheld-display-research .series,body.pages-show .page-layout.section.handheld-display-research section#research-news .bordered{display:none}body.pages-show .page-layout.section.handheld-display-columns .handheld-ad,body.pages-show .page-layout.section.handheld-display-columns .handheld-columnists{display:block}body #analysis-and-comment .bordered,body #columnists .bordered,body #eb,body #editors-picks,body #members-footer,body #misc-sidebar,body #partners-footer,body #primary-navigation,body #research-news .bordered,body .masthead-search,body.pages-show .page-layout.section.handheld-display-columns #special_section,body.pages-show .page-layout.section.handheld-display-columns .handheld-briefs,body.pages-show .page-layout.section.handheld-display-columns .series{display:none}body .wrapper{margin:0;padding-left:10px;padding-right:10px;width:auto}body.search-index #search_form #search-header{background:none;padding:0}body.search-index #search_form #search-header .search-form{padding-bottom:0}body.search-index #search_form #search-header .search-form label{box-sizing:border-box;padding:6px 0 0 8px}body.search-index #search_form #search-header .search-form input{-webkit-appearance:none;box-sizing:border-box;font-size:20px;min-width:100%;padding:4px 8px 4px 35px;width:100%}body.search-index #search_form #search-header .search-form input[type=submit]{left:-110%;position:absolute}body.search-index #search_form #search-header .search-form nav,body.search-index #search_form aside#search-sidebar{display:none}body.search-index #search_form section#search-results{margin-top:12px}body.search-index #search_form section#search-results h1{font-size:20px;text-align:left}body footer#footer{padding:5px 0}body footer#footer a{letter-spacing:normal;margin-right:10px}body footer#footer p.copyright{clear:both;float:none;font-size:12px;letter-spacing:normal;margin-bottom:0;padding:5px 0;text-align:center}body footer#footer p.copyright span{display:block}body footer#footer p.copyright span+span{margin-top:3px}body footer#footer p.copyright a{display:inline}body footer#footer p.copyright .comma{display:none}body #outer{padding-top:12px}body #outer>.wrapper{padding-bottom:0}body #outer .sidebar-link-list{display:none}body.pages .page-layout.section nav#tabbed-navigation{display:table}body h1.page-header{font-size:20px!important;line-height:1.3!important;width:100%}body h2{font-size:18px;line-height:1.3}body.partners.partners-index .partner article:after,body.partners.partners-index .partner:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}body.info.info-contact_us #email tr th{border:0!important;display:block;padding-bottom:10px!important}body.info.info-contact_us #email tr td{border-bottom:1px solid #d7d7db;border-top:0!important;display:block;margin:0!important;padding-top:0!important}body article aside.share{clear:both}body article aside.share li{float:left;margin-right:5px}body article aside.share li .button{font-size:10px;margin-bottom:0;padding-right:8px}body .content-list figure{display:none}body.columns-show article{margin-bottom:1em}body.columns-show .pagination{font-size:.9em;margin-bottom:1em}}@media only screen and (min-width:1466px){html body .article-section article h2{font-size:20px}html body .article-section .lead-story h2{font-size:30px}html body .article-section .c-format h2{font-size:12px}html body.profiles-dashboards-show .metrics-wrapper .metrics-column{width:50%}html body .donations-video iframe{height:279px}}.vivus-grid-example{background-color:#212121;color:#fff;display:block;margin-bottom:20px;padding:20px;text-align:center}body{min-width:992px}.wrapper{margin:0 auto;position:relative;width:972px}.wrapper:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}.wrapper [class*=" grid-"],.wrapper [class^=grid-]{float:left;margin-right:20px}.wrapper .grid-one{width:42px}.wrapper .grid-two{width:104px}.wrapper .grid-three{width:166px}.wrapper .grid-four{width:228px}.wrapper .grid-five{width:290px}.wrapper .grid-six{width:352px}.wrapper .grid-seven{width:414px}.wrapper .grid-eight{width:476px}.wrapper .grid-nine{width:538px}.wrapper .grid-ten{width:600px}.wrapper .grid-eleven{width:662px}.wrapper .grid-twelve{width:724px}.wrapper .grid-thirteen{width:786px}.wrapper .grid-fourteen{width:848px}.wrapper .grid-fifteen{width:910px}.wrapper .grid-sixteen{width:972px}.wrapper .grid-prepend-one{margin-left:62px}.wrapper .grid-prepend-two{margin-left:124px}.wrapper .grid-prepend-three{margin-left:186px}.wrapper .grid-prepend-four{margin-left:248px}.wrapper .grid-prepend-five{margin-left:310px}.wrapper .grid-prepend-six{margin-left:372px}.wrapper .grid-prepend-seven{margin-left:434px}.wrapper .grid-prepend-eight{margin-left:496px}.wrapper .grid-prepend-nine{margin-left:558px}.wrapper .grid-prepend-ten{margin-left:620px}.wrapper .grid-prepend-eleven{margin-left:682px}.wrapper .grid-prepend-twelve{margin-left:744px}.wrapper .grid-prepend-thirteen{margin-left:806px}.wrapper .grid-prepend-fourteen{margin-left:868px}.wrapper .grid-prepend-fifteen{margin-left:930px}.wrapper .grid-prepend-sixteen{margin-left:992px}.wrapper .grid-append-one{margin-right:62px}.wrapper .grid-append-two{margin-right:124px}.wrapper .grid-append-three{margin-right:186px}.wrapper .grid-append-four{margin-right:248px}.wrapper .grid-append-five{margin-right:310px}.wrapper .grid-append-six{margin-right:372px}.wrapper .grid-append-seven{margin-right:434px}.wrapper .grid-append-eight{margin-right:496px}.wrapper .grid-append-nine{margin-right:558px}.wrapper .grid-append-ten{margin-right:620px}.wrapper .grid-append-eleven{margin-right:682px}.wrapper .grid-append-twelve{margin-right:744px}.wrapper .grid-append-thirteen{margin-right:806px}.wrapper .grid-append-fourteen{margin-right:868px}.wrapper .grid-append-fifteen{margin-right:930px}.wrapper .grid-append-sixteen{margin-right:992px}.wrapper .grid-last{margin-right:0}.wrapper .grid-left{float:left}.wrapper .grid-right{float:right}@media only screen and (max-width:599px){body{min-width:100%}.wrapper,.wrapper .grid-eight,.wrapper .grid-eleven,.wrapper .grid-fifteen,.wrapper .grid-five,.wrapper .grid-four,.wrapper .grid-fourteen,.wrapper .grid-nine,.wrapper .grid-one,.wrapper .grid-seven,.wrapper .grid-six,.wrapper .grid-sixteen,.wrapper .grid-ten,.wrapper .grid-thirteen,.wrapper .grid-three,.wrapper .grid-twelve,.wrapper .grid-two{width:100%}.wrapper .grid-prepend-eight,.wrapper .grid-prepend-eleven,.wrapper .grid-prepend-fifteen,.wrapper .grid-prepend-five,.wrapper .grid-prepend-four,.wrapper .grid-prepend-fourteen,.wrapper .grid-prepend-nine,.wrapper .grid-prepend-one,.wrapper .grid-prepend-seven,.wrapper .grid-prepend-six,.wrapper .grid-prepend-sixteen,.wrapper .grid-prepend-ten,.wrapper .grid-prepend-thirteen,.wrapper .grid-prepend-three,.wrapper .grid-prepend-twelve,.wrapper .grid-prepend-two{margin-left:0}.wrapper .grid-append-eight,.wrapper .grid-append-eleven,.wrapper .grid-append-fifteen,.wrapper .grid-append-five,.wrapper .grid-append-four,.wrapper .grid-append-fourteen,.wrapper .grid-append-nine,.wrapper .grid-append-one,.wrapper .grid-append-seven,.wrapper .grid-append-six,.wrapper .grid-append-sixteen,.wrapper .grid-append-ten,.wrapper .grid-append-thirteen,.wrapper .grid-append-three,.wrapper .grid-append-twelve,.wrapper .grid-append-two{margin-right:0}}@media only screen and (min-width:1466px){body{min-width:1376px}.wrapper{width:1356px}.wrapper .grid-one{width:66px}.wrapper .grid-two{width:152px}.wrapper .grid-three{width:238px}.wrapper .grid-four{width:324px}.wrapper .grid-five{width:410px}.wrapper .grid-six{width:496px}.wrapper .grid-seven{width:582px}.wrapper .grid-eight{width:668px}.wrapper .grid-nine{width:754px}.wrapper .grid-ten{width:840px}.wrapper .grid-eleven{width:926px}.wrapper .grid-twelve{width:1012px}.wrapper .grid-thirteen{width:1098px}.wrapper .grid-fourteen{width:1184px}.wrapper .grid-fifteen{width:1270px}.wrapper .grid-sixteen{width:1356px}.wrapper .grid-prepend-one{margin-left:86px}.wrapper .grid-prepend-two{margin-left:172px}.wrapper .grid-prepend-three{margin-left:258px}.wrapper .grid-prepend-four{margin-left:344px}.wrapper .grid-prepend-five{margin-left:430px}.wrapper .grid-prepend-six{margin-left:516px}.wrapper .grid-prepend-seven{margin-left:602px}.wrapper .grid-prepend-eight{margin-left:688px}.wrapper .grid-prepend-nine{margin-left:774px}.wrapper .grid-prepend-ten{margin-left:860px}.wrapper .grid-prepend-eleven{margin-left:946px}.wrapper .grid-prepend-twelve{margin-left:1032px}.wrapper .grid-prepend-thirteen{margin-left:1118px}.wrapper .grid-prepend-fourteen{margin-left:1204px}.wrapper .grid-prepend-fifteen{margin-left:1290px}.wrapper .grid-prepend-sixteen{margin-left:1376px}.wrapper .grid-append-one{margin-right:86px}.wrapper .grid-append-two{margin-right:172px}.wrapper .grid-append-three{margin-right:258px}.wrapper .grid-append-four{margin-right:344px}.wrapper .grid-append-five{margin-right:430px}.wrapper .grid-append-six{margin-right:516px}.wrapper .grid-append-seven{margin-right:602px}.wrapper .grid-append-eight{margin-right:688px}.wrapper .grid-append-nine{margin-right:774px}.wrapper .grid-append-ten{margin-right:860px}.wrapper .grid-append-eleven{margin-right:946px}.wrapper .grid-append-twelve{margin-right:1032px}.wrapper .grid-append-thirteen{margin-right:1118px}.wrapper .grid-append-fourteen{margin-right:1204px}.wrapper .grid-append-fifteen{margin-right:1290px}.wrapper .grid-append-sixteen{margin-right:1376px}.wrapper .large-grid-one{width:66px}.wrapper .large-grid-two{width:152px}.wrapper .large-grid-three{width:238px}.wrapper .large-grid-four{width:324px}.wrapper .large-grid-five{width:410px}.wrapper .large-grid-six{width:496px}.wrapper .large-grid-seven{width:582px}.wrapper .large-grid-eight{width:668px}.wrapper .large-grid-nine{width:754px}.wrapper .large-grid-ten{width:840px}.wrapper .large-grid-eleven{width:926px}.wrapper .large-grid-twelve{width:1012px}.wrapper .large-grid-thirteen{width:1098px}.wrapper .large-grid-fourteen{width:1184px}.wrapper .large-grid-fifteen{width:1270px}.wrapper .large-grid-sixteen{width:1356px}.wrapper .large-grid-prepend-one{margin-left:86px}.wrapper .large-grid-prepend-two{margin-left:172px}.wrapper .large-grid-prepend-three{margin-left:258px}.wrapper .large-grid-prepend-four{margin-left:344px}.wrapper .large-grid-prepend-five{margin-left:430px}.wrapper .large-grid-prepend-six{margin-left:516px}.wrapper .large-grid-prepend-seven{margin-left:602px}.wrapper .large-grid-prepend-eight{margin-left:688px}.wrapper .large-grid-prepend-nine{margin-left:774px}.wrapper .large-grid-prepend-ten{margin-left:860px}.wrapper .large-grid-prepend-eleven{margin-left:946px}.wrapper .large-grid-prepend-twelve{margin-left:1032px}.wrapper .large-grid-prepend-thirteen{margin-left:1118px}.wrapper .large-grid-prepend-fourteen{margin-left:1204px}.wrapper .large-grid-prepend-fifteen{margin-left:1290px}.wrapper .large-grid-prepend-sixteen{margin-left:1376px}.wrapper .large-grid-append-one{margin-right:86px}.wrapper .large-grid-append-two{margin-right:172px}.wrapper .large-grid-append-three{margin-right:258px}.wrapper .large-grid-append-four{margin-right:344px}.wrapper .large-grid-append-five{margin-right:430px}.wrapper .large-grid-append-six{margin-right:516px}.wrapper .large-grid-append-seven{margin-right:602px}.wrapper .large-grid-append-eight{margin-right:688px}.wrapper .large-grid-append-nine{margin-right:774px}.wrapper .large-grid-append-ten{margin-right:860px}.wrapper .large-grid-append-eleven{margin-right:946px}.wrapper .large-grid-append-twelve{margin-right:1032px}.wrapper .large-grid-append-thirteen{margin-right:1118px}.wrapper .large-grid-append-fourteen{margin-right:1204px}.wrapper .large-grid-append-fifteen{margin-right:1290px}.wrapper .large-grid-append-sixteen{margin-right:1376px}}#header{background:#f2f2f3;border-bottom:5px solid #f2f2f3;border-top:1px solid #d7d7db;padding-top:24px}#header.condensed{border-bottom:1px solid #d7d7db;padding-top:17px}#header.condensed #masthead{margin-bottom:18px}#header.condensed .masthead-home-link{display:block;float:left;top:3px;width:260px}#header.condensed .masthead-home-link img{width:100%}#header.condensed .masthead-tagline{display:none}@media only screen and (max-width:599px){#header,#header.condensed{border:none;padding:0}#header .wrapper,#header.condensed .wrapper{position:static}#header #masthead,#header.condensed #masthead{margin:0}}#masthead{margin:0 0 24px;position:relative}#masthead .masthead-home-link{color:#4b4b4e;display:block;float:left;font-family:Helvetica Neue,sans-serif;font-size:32px;font-weight:700;height:29px;margin-bottom:0;position:relative;text-transform:uppercase;width:350px}#masthead .masthead-home-link img{display:block}html.no-svg #masthead .masthead-home-link{background:url(https://cdn.theconversation.com/static/tc/logos/logo-no-svg-44adbb10155a857a2ee142b13158122f.png) 0 0 no-repeat;height:30px;width:262px}html.no-svg #masthead .masthead-home-link img{display:none}#masthead .masthead-tagline{clear:left;color:#4b4b4e;float:left;font-size:12px;font-weight:400;height:18px;padding-top:4px;width:300px}#masthead .masthead-search{float:right;margin-left:20px;margin-top:-3px}#masthead .masthead-search input{background-color:#fff;border:1px solid #d7d7db;border-radius:2px;display:block;font-size:12px;line-height:16px;min-width:280px;padding:7px 6px 6px 26px;position:relative}#masthead .masthead-search input:focus{border-color:#d7d7db;outline:none}#masthead .masthead-search label{color:#4b4b4e;padding:8px 0 0 12px;position:absolute;z-index:3}#masthead .masthead-search label i:before{color:#4b4b4e;font-size:14px;left:-4px;position:relative;top:0}#masthead .masthead-search .button,#masthead .masthead-search legend{display:none}@media only screen and (max-width:599px){#masthead{display:none}}#topbar{background:#fff;height:46px;line-height:18px;position:relative;z-index:25}.topbar-module{float:left}.topbar-button-list{list-style:none}.topbar-button-list li{float:left;margin-right:8px}.topbar-button-list li:first-child{margin-left:8px}.topbar-button-list a{border-radius:16px;display:block;height:32px;line-height:32px;margin:7px 0;text-align:center;width:32px}.topbar-button-list i{font-size:16px;line-height:16px;margin:0 auto;top:2px;vertical-align:baseline}.topbar-button-list i:before{color:#fff}.topbar-stay-informed{float:right}.topbar-stay-informed .topbar-button-text{color:#fff;display:none;padding:0 6px 0 0}.topbar-stay-informed .topbar-button.with-label a{padding:0 6px;width:auto}.topbar-stay-informed .topbar-button i:before{color:#fff}.topbar-stay-informed .newsletter a{background:#d8372c}.topbar-stay-informed .newsletter a:hover{background:#b12a20}.topbar-stay-informed .facebook a{background:#3a5a93}.topbar-stay-informed .facebook a:hover{background:#4971b7}.topbar-stay-informed .twitter a{background:#00b0e9}.topbar-stay-informed .twitter a:hover{background:#1dc8ff}.topbar-stay-informed .rss a{background:#eb7f3e}.topbar-stay-informed .rss a:hover{background:#f09e6c}.topbar-stay-informed .linkedin a{background:#0181b2}.topbar-stay-informed .linkedin a:hover{background:#01a6e5}.topbar-stay-informed .googleplus a{background:#de4931}.topbar-stay-informed .googleplus a:hover{background:#e5705d}.topbar-item-list{list-style:none}.topbar-item-list li{border-left:1px solid #d7d7db;float:left}.topbar-item-list li:first-child{border-left:0;padding-left:0}.topbar-item-list li a{color:#4b4b4e;display:block;height:18px;padding:15px 10px 13px;transition:background .3s}.topbar-item-list li a:active,.topbar-item-list li a:focus,.topbar-item-list li a:hover{background:#f2f2f3;color:#000}.topbar-item-list .tc-donate{background-color:#d8372c}.topbar-item-list .tc-donate a{color:#fff;font-weight:700;padding:14px 10px}.topbar-item-list .tc-donate a:active,.topbar-item-list .tc-donate a:focus,.topbar-item-list .tc-donate a:hover{background:#990a00;color:#fff}.topbar-dropdown a{color:#4b4b4e;display:block;height:18px;padding:15px 15px 13px;position:relative;transition:background .3s;white-space:nowrap;z-index:200}.topbar-dropdown a:active,.topbar-dropdown a:focus,.topbar-dropdown a:hover{background:#f2f2f3;color:#000}.topbar-dropdown .menu-button-close,.topbar-dropdown .menu-button-open{bottom:0;display:none;left:0;position:absolute;right:0;text-indent:-10000px;top:0}.topbar-dropdown .menu-button-close,.topbar-dropdown .menu-button-close:focus,.topbar-dropdown .menu-button-close:hover,.topbar-dropdown .menu-button-open,.topbar-dropdown .menu-button-open:focus,.topbar-dropdown .menu-button-open:hover{background:url(https://cdn.theconversation.com/static/tc/"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") repeat 0 0}.topbar-dropdown .menu-button-contents{display:block;height:18px;padding:15px 6px 13px 15px;position:relative}.topbar-dropdown .menu-button-text{float:left;max-width:150px;overflow:hidden;padding-right:6px;position:relative;text-overflow:ellipsis;white-space:nowrap}.topbar-dropdown .drop-down-caret{color:transparent;font-size:1em;opacity:.6;top:-2px}.js .topbar-dropdown .drop-down-caret{color:inherit}.topbar-dropdown.open .menu{display:block;z-index:8}.topbar-dropdown.open .menu-button-contents{border-bottom:1px solid #fff;margin-bottom:-1px;position:relative;z-index:10}.topbar-dropdown .menu{background:#fff;border:1px solid #f1f1f2;border-radius:0 0 2px 2px;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);box-sizing:border-box;display:none;left:0;margin-right:-1px;min-width:100%;position:absolute;top:46px}.topbar-mobile-home-link{color:#4b4b4e;display:none;font-family:Helvetica Neue,sans-serif;font-size:18px;font-weight:700;height:46px;margin-left:25%;text-transform:uppercase;width:50%;z-index:100}.topbar-mobile-home-link img{position:relative;top:50%;transform:translateY(-50%);width:100%}.topbar-home-link{text-align:center}.topbar-dashboard-link{float:right}.topbar-dashboard-link a{border-left:1px solid #f2f2f3;border-right:1px solid #f2f2f3}.topbar-label{padding:15px 0 13px 10px}.topbar-edition-selector{border-right:1px solid #f2f2f3;height:46px;position:relative}.topbar-edition-selector .current-region{color:#d8372c}.topbar-account-nav{border-right:1px solid #f2f2f3;float:right;position:relative}.editing-page .topbar-account-nav{border-right:0}.topbar-account-nav img{border-radius:32px;display:inline;height:36px;margin-top:-10px;width:36px}.topbar-account-nav .dashboard{display:none}.topbar-account-nav .activity-count{background:#d8372c;border:1px solid #d8372c;border-radius:10px;color:#fff;font-size:11px;font-weight:700;height:14px;line-height:14px;padding:2px 6px;position:absolute;right:-11px;top:3px;z-index:12}@media only screen and (min-width:1466px){.topbar-stay-informed .topbar-button-text{display:inline}}@media only screen and (max-width:599px){.topbar-admin-shortcuts,.topbar-dashboard-link,.topbar-edition-selector,.topbar-edition-selector-title,.topbar-home-link,.topbar-promotional-links,.topbar-stay-informed{display:none}#topbar{border-bottom:1px solid #f2f2f3;font-size:12px}#topbar .wrapper{padding-left:10px;padding-right:10px}#topbar .topbar-mobile-home-link{display:block}#topbar .author-signup,#topbar .reader-signup{display:none}.topbar-account-nav{border-right:0;display:block;position:absolute;right:0;top:0}.topbar-account-nav .activity-count{right:33px}.topbar-account-nav.open .menu-button-contents{border-left:1px solid #f2f2f3}.topbar-account-nav .menu-button-contents{padding-left:6px}.topbar-account-nav .menu-button-name{display:none}.topbar-account-nav .menu{border-right:0;left:auto;right:1px}.topbar-account-nav .dashboard{display:block}.topbar-account-nav .menu-button{padding-left:0}}#page-wrapper,body,html{height:100%}body{background-color:#fff;line-height:18px}#page-wrapper{display:flex;flex-direction:column}#outer{flex:1;padding-top:48px}#outer>.wrapper{padding-bottom:48px}#footers{flex-shrink:0}.handheld{display:none}h1 a:hover{text-decoration:none}div.crop{overflow:hidden}table.grid td,table.grid tr{border-bottom:1px solid #000}input::-moz-placeholder{color:#62626a}input::placeholder{color:#62626a}input.placeholder{color:#62626a}input:focus::-moz-placeholder{color:#d7d7db}input:focus::placeholder{color:#d7d7db}input:focus.placeholder{color:#d7d7db}.fluid-width-video-wrapper{margin-bottom:18px}audio{display:none;height:0;visibility:hidden;width:0}.placeholder-container{background-color:var(--background-color);position:relative}.placeholder-container:before{content:"";float:left;height:0;margin-left:-1px;padding-top:var(--aspect-ratio-percent);width:1px}.placeholder-container:after{clear:both;content:"";display:table}.placeholder-container iframe,.placeholder-container img{bottom:0;height:100%;left:0;-o-object-fit:cover;object-fit:cover;opacity:.1;position:absolute!important;right:0;top:0;transition:opacity .5s;width:100%}.placeholder-container iframe.lazyloaded,.placeholder-container img.lazyloaded{filter:blur(0);opacity:1}.placeholder-container img{background-color:#fff}html{-webkit-text-size-adjust:100%}body,input,select,textarea{color:#000;font-family:Helvetica Neue,sans-serif;font-size:13px}.text-center{text-align:center}span.nobr{white-space:nowrap}p{margin-bottom:18px}p.fine-print{font-size:11px!important}strong{font-weight:700}blockquote,em{font-style:italic}blockquote{clear:both;color:#4b4b4e;margin-bottom:18px;padding:9px 18px 12px;text-align:center}blockquote p:last-child,blockquote>blockquote:last-child{margin-bottom:0}blockquote,blockquote.left{border-left:4px solid #d7d7db;text-align:left}blockquote.right{border-right:4px solid #d7d7db;text-align:right}blockquote.feature{border-bottom:4px solid #f2f2f3;border-left:none;border-top:4px solid #f2f2f3;color:#000;font-family:LeagueGothicRegular,League Gothic,Impact,sans-serif;font-size:32px;font-style:normal;font-weight:700;margin:18px 0 36px;padding:30px 0 24px;position:relative;text-align:left;text-transform:uppercase}blockquote.feature p:first-child{text-indent:50px}blockquote.feature:before{color:#d7d7db;content:"“";font-size:125px;left:0;position:absolute;top:62px}blockquote.feature,blockquote.feature p{line-height:36px}blockquote.feature cite{font-size:24px}blockquote.feature cite:before{content:"— "}blockquote cite{color:#4b4b4e;font-style:normal}blockquote,h1,h2,h3,h4,h5,h6{-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;-ms-text-rendering:optimizeLegibility;-o-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}h1.legacy.slammed,h2.slammed,h3.slammed,h4.legacy.slammed,h5.slammed,h6.slammed{margin-bottom:0}h1.legacy.border,h2.border,h3.border,h4.legacy.border,h5.border,h6.border{border-bottom:1px solid #d7d7db;padding-bottom:.33em}h1.legacy{font-size:28px;font-weight:700;line-height:36px;margin-bottom:18px}h1.legacy.page-header{border-bottom:1px solid #d7d7db;margin-bottom:36px;padding-bottom:9px}h1.legacy.page-header span{color:#d7d7db}h2{font-size:23px}h2,h3{font-weight:700;margin-bottom:12px}h3{color:#000;font-size:15px;line-height:18px}h4.legacy{color:#000;font-size:10px;letter-spacing:.12em;margin-bottom:10px;text-transform:uppercase}h6{color:#d7d7db}hr{border:none;border-top:1px solid #d7d7db;clear:both;margin-bottom:18px}.link,a{color:#085d91;outline:none;text-decoration:none}.link:hover,a:hover{color:#003461;text-decoration:none}.link:focus,a:focus{outline:none}.link:visited,a:visited{color:#4b4b4e}.link:visited:hover,a:visited:hover{color:#085d91}nav ol li,nav ul li{list-style:none;margin-left:0}ul li{margin-left:0}ul.fine-print li{font-size:11px}ul.semantic li{list-style-type:none;margin-left:0}ol li{margin-left:0}ol.fine-print li{font-size:11px}ol.semantic li{list-style-type:none;margin-left:0}dl dt{clear:left;float:left;font-weight:700}dl dd{float:left;margin-left:1em;text-align:left}.league-gothic{font-family:LeagueGothicRegular,League Gothic,Impact,sans-serif;font-size:30px;font-size-adjust:.455;font-weight:400;line-height:40px;text-rendering:optimizeLegibility}.meslo{font-family:MesloLGMDZ,Monaco,monospace}.figure,figure{display:block;position:relative}.figure:after,figure:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}.figure iframe,figure iframe{display:block}.figure .figcaption,.figure figcaption,figure .figcaption,figure figcaption{color:#212121;display:block;font-size:13px;line-height:18px;padding-top:6px}.figure .figcaption a,.figure figcaption a,figure .figcaption a,figure figcaption a{font-weight:400!important}.figure .figcaption .attribution,.figure .figcaption .attribution a,.figure figcaption .attribution,.figure figcaption .attribution a,figure .figcaption .attribution,figure .figcaption .attribution a,figure figcaption .attribution,figure figcaption .attribution a{color:#212121}.figure .figcaption .attribution a:focus,.figure .figcaption .attribution a:hover,.figure figcaption .attribution a:focus,.figure figcaption .attribution a:hover,figure .figcaption .attribution a:focus,figure .figcaption .attribution a:hover,figure figcaption .attribution a:focus,figure figcaption .attribution a:hover{color:#085d91}article header p.byline{color:#4b4b4e;font-size:11px;line-height:18px;margin-bottom:0;padding:2px 0}.callout{background:#f2f2f3;border-top:4px solid #d7d7db;color:#000;display:block;margin:1em 0;padding:.5em 1em}.right{float:right}.left{float:left}.clear{clear:both}.clear-left{clear:left}.clear-right{clear:right}.clearfix:after,.clearfix:before{content:" ";display:block;height:0;visibility:hidden}.clearfix:after{clear:both}.clearfix{zoom:1}@keyframes pulse{40%{transform:scale(1)}47%{transform:scale(1.03)}55%{transform:scale(1)}to{transform:scale(1)}}.information{background:#f2f2f3 url(https://cdn.theconversation.com/static/tc/icons/alert-instructions-76f48e944055d94f9ad902aca4ffe1f1.png) no-repeat 15px 13px;border-radius:2px;color:#4b4b4e;padding:12px 12px 12px 42px}.information a{color:inherit;font-weight:700}.information p{margin-bottom:0}.information p+p{margin-top:1em}.information .button{margin:-3px 6px}.information ul{list-style-position:inside}.information.prominent{background-color:#f2f2f3;border:1px solid #d7d7db}.information.success{background-color:#29a37a;background-image:url(https://cdn.theconversation.com/static/tc/icons/alert-success-cefcd0dc236e8d3c0a77863b29040399.png);color:#fff}.information.error{background-color:#d8372c;background-image:url(https://cdn.theconversation.com/static/tc/icons/alert-error-f95893328ecf3dd6c51eba085c089084.png);color:#fff}.information.warning{background-color:#ffda75;background-image:url(https://cdn.theconversation.com/static/tc/icons/alert-information-30e614f3f403049753170ccd98ce7053.png);color:#000}.formtastic .information{padding:12px 12px 12px 42px}p.flash{animation-duration:5s;animation-iteration-count:infinite;animation-name:pulse;animation-timing-function:ease-in-out;backface-visibility:hidden;background-color:#f2f2f3;border:1px solid #d7d7db;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top:none;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);color:#000;filter:url(https://cdn.theconversation.com/static/tc/"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='grayscale'><feColorMatrix type='matrix' values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'/></filter></svg>#grayscale");font-size:13px;left:50%;margin-left:-240px;padding:10px 20px;position:fixed;text-align:center;top:0;transform-style:preserve-3d;width:440px;z-index:30000}@media only screen and (max-width:599px){p.flash{margin-left:-37%;padding:10px 2%;width:70%}}p.flash.hidden{top:-200px;transition:top .5s}p.flash.show{top:0;transition:top .5s}p.flash.notice{background-color:#29a37a;border-color:#29a37a;color:#fff;font-weight:700}p.flash.warning{background-color:#ffda75;border-color:#ffda75}p.flash.alert{background-color:#d8372c;border-color:#d8372c;color:#fff;font-weight:700}#masthead{padding-top:5px}#masthead a.masthead-home-link{height:40px;margin-top:-8px}#masthead .masthead-search #q{box-sizing:border-box}#primary-navigation{position:relative}#primary-navigation:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}#primary-navigation ol{float:left;list-style:none;margin-bottom:-4px;width:100%;z-index:3}#primary-navigation li{float:left;margin-right:.8em}#primary-navigation li:last-child{margin-right:0}#primary-navigation li.custom-nav-link{float:right;margin-left:20px}#primary-navigation a{border-bottom:5px solid transparent;color:#4b4b4e;display:block;float:left;font-size:13px;font-weight:700;line-height:26px;margin-bottom:-1px;padding-bottom:5px}#primary-navigation a.current,#primary-navigation a:hover{border-color:#d8372c;text-decoration:none}#primary-navigation a:hover{color:#4b4b4e}#primary-navigation a.current{color:#212121}#primary-navigation span span{color:#4b4b4e}@media only screen and (min-width:1466px){#primary-navigation li{margin-right:1.2em}#primary-navigation a{font-size:14px}}.region-select{background:#fff;border:1px solid #d7d7db;border-radius:.25rem;float:left;height:28px;margin:10px 10px 0 0;overflow:hidden;position:relative;width:140px}.region-select:after{bottom:0;color:#d7d7db;content:"";font-family:TCFont-Regular;line-height:2;position:absolute;right:10px;top:0}.region-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;-moz-outline:none;-moz-user-focus:none;background:transparent;border:none;box-shadow:none;color:#383838;display:block;font-size:inherit;height:28px;outline:none;padding:5px 7px;position:absolute;text-indent:.01px;text-overflow:"";width:120%;z-index:1}.region-select select:-moz-focusring{color:transparent}.region-select select::-ms-expand{display:none}.search-form legend{display:none}.search-form .input-wrapper{position:relative}.search-form .input-wrapper input[type=text],.search-form .input-wrapper label{display:block;font-size:12px;line-height:16px}.search-form .input-wrapper label{color:#4b4b4e;padding:8px 0 0 12px;position:absolute;z-index:3}.search-form .input-wrapper label i:before{color:#4b4b4e;font-size:14px;left:-4px;position:relative;top:0}.search-form .input-wrapper input[type=text]{background-color:#fff;border:1px solid #d7d7db;border-radius:2px;min-width:280px;padding:7px 6px 6px 26px;position:relative}.search-form .input-wrapper input[type=text]:focus{border-color:#293299;outline:none}#small-sidebar{background:#fff;background-clip:padding-box;border-top:46px solid transparent;box-sizing:border-box;display:none;font-family:Noto Sans,sans-serif;height:0;overflow-y:auto;position:absolute;top:0;transition:height .55s cubic-bezier(.32,.08,.24,1);width:100%;z-index:11;-webkit-overflow-scrolling:touch}#small-sidebar.visible{height:100%}#small-sidebar.visible .small-sidebar-group{opacity:1;top:0}.new-header #small-sidebar{border-top:96px solid transparent;z-index:9}#small-sidebar-close-button,#small-sidebar-open-button{color:#383838;display:none;font-family:Noto Sans,sans-serif;font-size:14px;font-weight:700;line-height:46px;padding:0 12px;position:absolute;top:auto;transition:opacity .275s}.new-header #small-sidebar-close-button,.new-header #small-sidebar-open-button{color:#000;font-family:Montserrat;line-height:57px;padding:0 16px;top:44px}#small-sidebar-open-button{opacity:1;z-index:101}#small-sidebar-close-button,#small-sidebar-open-button.visible{opacity:0;z-index:100}#small-sidebar-close-button.visible{opacity:1;z-index:101}.small-sidebar-editions .region-select{border:none;box-sizing:border-box;height:33px;margin:0;width:100%}.small-sidebar-editions .region-select:after{color:#727272;line-height:1em;padding:10px;pointer-events:none;right:0;top:0}.small-sidebar-editions select{font-size:15px;height:33px;padding:0 4px}#small-sidebar-search form{position:relative}#small-sidebar-search input{border:none;border-radius:.25rem;box-sizing:border-box;font-size:15px;height:33px;width:100%}#small-sidebar-search input::-moz-placeholder{color:#383838;opacity:1}#small-sidebar-search input::placeholder{color:#383838;opacity:1}#small-sidebar-search input:focus::-moz-placeholder{opacity:.2}#small-sidebar-search input:focus::placeholder{opacity:.2}#small-sidebar-search button{background:none;border:none;border-radius:2px;color:#fff;cursor:pointer;height:29px;padding:7px 0;position:absolute;right:2px;top:2px;transition:background .3s;width:33px}#small-sidebar-search button .icon-search{color:#727272;font-size:22px}#small-sidebar-search input,.small-sidebar-editions .region-select{border:1px solid #d7d7db;border-radius:.25rem;float:none;height:auto;width:100%}#small-region-select-dropdown,#small-sidebar-search input{font-family:Noto Sans,sans-serif;font-size:14px;height:auto;padding:10px 12px;position:static;width:100%}.small-sidebar-group{opacity:0;padding:12px;position:relative;top:-50px;transition:opacity 1.1s cubic-bezier(.32,.08,.24,1) .198s,top .55s cubic-bezier(.32,.08,.24,1)}.small-sidebar-group:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}.small-sidebar-group+.small-sidebar-group{margin-top:0}.small-sidebar-group h3{color:#383838;font-size:14px;font-weight:700;line-height:1;margin:0 0 8px;padding:0}.small-sidebar-group h3:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}.small-sidebar-group ul{list-style:none}.small-sidebar-group li{margin:5px 0 0}.small-sidebar-group a{color:#383838;display:block;font-size:20px;font-weight:700;line-height:1;margin:0 0 .8em;padding:.2em 0;position:relative}.small-sidebar-group a.active{border-left:6px solid #d7d7db;margin-left:-12px;padding-left:6px}.small-sidebar-group .icon-chevron-right{font-size:14px;line-height:1;position:absolute;right:2px;top:10px}.sections-sidebar-group a{font-family:Montserrat,sans-serif}@media only screen and (max-width:599px){#small-sidebar,#small-sidebar-close-button,#small-sidebar-open-button{display:block}}#topbar .topbar-stay-informed a{border-right:1px solid #f1f1f2}#topbar .topbar-dashboard-link a{border-left:0}#topbar .topbar-account-nav h4{padding:0 15px}#topbar .topbar-admin-shortcuts{border-right:1px solid #f1f1f2;float:right}#topbar .topbar-account-nav .menu{left:auto;min-width:125%;right:0}#topbar .menu-button-contents{cursor:pointer}@media only screen and (max-width:599px){#topbar{border-bottom:none}#topbar #topbar-dynamic-content.language-override-es .reader-signin{font-size:11px}#topbar .topbar-account-nav{font-family:Noto Sans,sans-serif;font-size:14px;font-weight:700}#topbar .topbar-account-nav li{border-left:none}#topbar .topbar-account-nav li a{color:#383838}#topbar .topbar-account-nav .metrics{display:none}}.content-authors{font-size:12px}.content-authors h3{font-size:11px}.content-authors a{font-weight:700}.content-authors .institution_name{color:#4b4b4e;font-weight:400}.content-authors-synopsis{display:none}.content-authors-synopsis i{border:1px solid #d7d7db;border-radius:50%;color:#4b4b4e;height:16px;line-height:16px;margin-right:6px;text-align:center;width:16px}.content-authors-synopsis .icon-caret-up{display:none}.content-authors-group{margin-bottom:36px}.content-authors-group ol{list-style:none;padding-top:6px}.content-authors-group li{clear:left}.content-authors-group li+li{margin-top:24px}.content-authors-group img{border-radius:50%;display:block;float:left;margin:0 12px 18px 0;width:48px}.content-post .team-blog .content-authors-group img{display:block}.content-post .content-authors-group img{display:none}.content-post .content-authors-group .role{margin-left:0}.content-authors-group .role{color:#4b4b4e;font-size:11px;line-height:1.4;margin-left:60px}@media only screen and (max-width:599px){.content-authors h3{margin-left:0}.content-authors-synopsis{display:block;margin-bottom:12px}.content-authors-group{display:none}.content-authors-group img{margin-left:0}.open .icon-caret-down{display:none}.open .icon-caret-up{display:inline-block}.open .content-authors-group{display:block}}@media only screen and (min-width:1466px){.content-authors-group .role{line-height:1.4}}.content-body{font-family:Libre Baskerville,serif;font-size:18px;line-height:1.6;padding-bottom:12px}.content-body .figcaption a,.content-body a,.content-body figcaption a{white-space:pre-wrap;word-wrap:break-word;color:#4b4b4e;text-decoration:underline}.content-body .figcaption a:hover,.content-body a:hover,.content-body figcaption a:hover{color:#293299}.content-body .figcaption a:visited,.content-body a:visited,.content-body figcaption a:visited{color:#4b4b4e}.content-body .figcaption a:visited:hover,.content-body a:visited:hover,.content-body figcaption a:visited:hover{color:#293299}.content-body blockquote{border-left:8px solid #d7d7db}.content-body ol,.content-body ul{margin-bottom:18px;padding-left:2em}.content-body table{border:1px solid #d7d7db;border-collapse:collapse;border-spacing:0;empty-cells:show;font-family:Helvetica Neue,sans-serif;font-size:13px;margin-bottom:18px;width:100%}.content-body table thead th{font-weight:700;vertical-align:top}.content-body table tbody td,.content-body table thead th{border:1px solid #d7d7db;padding:.5em 1em}.content-body figure{margin-bottom:18px}.content-body figure table{margin-bottom:0}.content-body figure.align-right{clear:right;float:right;margin-left:20px;width:237px}.content-body figure.align-left{clear:left;float:left;margin-right:20px;width:237px}.content-body figure.align-center img{width:100%}.content-body figure a,.content-body figure img{display:block;max-width:100%;text-decoration:none}.content-body figure figcaption{color:#4b4b4e;cursor:default;font-family:Helvetica Neue,sans-serif}.content-body figure figcaption a{display:inline}.content-topics{margin-bottom:12px}.content-topics ul{margin-left:25px}@media only screen and (max-width:599px){.content-body{font-size:16px;line-height:1.6}.content-body blockquote{margin-left:-10px}.content-body figure.align-left,.content-body figure.align-right{margin-bottom:12px;width:100%}.content-body figure.align-left img,.content-body figure.align-right img{width:100%}}.content-column-header{margin-top:1px;position:relative}.content-column-header .column-header{background-color:#f2f2f3;border-bottom:1px solid #e5e5e6;color:#383838;display:block;height:118px}.content-column-header .column-header:after{clear:both;content:".";display:block;font-size:0;height:0;visibility:hidden}.content-column-header .column-header:hover h3{text-decoration:underline}.content-column-header .content-column-feed{cursor:pointer;display:block;padding-top:5px;position:absolute;right:0;text-align:center;top:18px;z-index:7}.content-column-header .content-column-feed-itunes{top:54px}.content-column-header img{border:1px solid #fff;border-radius:50%;float:left;margin-top:15px;width:90px}.content-column-header h3{font-size:27px;padding-top:40px}@media only screen and (max-width:599px){.content-column-header .column-header{height:auto}.content-column-header .content-column-feed{right:10px}.content-column-header .content-column-feed span{display:none}.content-column-header .content-column-image{position:absolute}.content-column-header .content-column-image img{width:60px}.content-column-header .content-column-title{float:none;margin-left:80px;margin-right:45px;width:auto}.content-column-header h3{font-size:22px;line-height:1.2;margin-bottom:6px;padding-top:20px}.content-column-header .byline{font-size:12px;line-height:1.4;margin-bottom:20px}}.content-column-podcast-header{border-bottom:1px solid #d7d7db;color:#4b4b4e;font-size:18px;font-weight:700;padding:20px 0}.content-column-podcast-header a{color:inherit}.content-column-podcast-header a:hover{color:#212121;text-decoration:underline}.content-column-podcast-header .podcast-link-title{display:block;font-size:28px;line-height:28px;margin-top:18px}@media only screen and (max-width:599px){.podcast-info .image{display:none}}.content-disclosure-statement{margin-bottom:36px}.content-disclosure-statement h3{font-size:11px}.content-disclosure-statement p{margin-bottom:0}.content-disclosure-statement p+p{margin-top:18px}@media only screen and (max-width:599px){.content-disclosure-statement{display:none;line-height:1.4;margin-left:0}.open .content-disclosure-statement{display:block}}.content-header{padding-bottom:36px;padding-top:36px}.content-header-container h1{color:#383838;font-family:Montserrat,sans-serif;font-size:38px;line-height:normal;margin:0 0 12px}.content-header-container time{color:#4b4b4e;font-size:13px}.content-header-container .time-separator{color:#4b4b4e;font-size:11px;padding-left:2px;padding-right:4px}@media only screen and (max-width:599px){.content-header{padding-bottom:0;padding-top:12px}.content-header-container h1{font-size:28px;line-height:1.4;margin-bottom:0}.content-header-container .time-separator{display:none}.content-header-container .timestamps{padding:12px 0}.content-header-container time{display:block}}.content-lead-image{padding-bottom:36px}.content-lead-image img{display:block;width:100%}@media only screen and (max-width:599px){.content-lead-image{padding-bottom:0}}.content-partners{margin-bottom:36px}.content-partners h3{font-size:11px}.content-partners .disclosure-logo{display:table;text-align:center;width:100%}.content-partners .logo{display:table-cell;vertical-align:middle;width:120px}.content-partners .funding-statement,.content-partners .partners-jobs-links{border-bottom:1px solid #f2f2f3;margin-bottom:12px;padding-bottom:12px}.content-partners img{margin:0 auto;max-width:120px;width:100%}.conversation-partners{margin-bottom:36px}.conversation-partners h3{font-size:11px}@media only screen and (max-width:599px){.content-partners{display:none;line-height:1.4;margin-left:0}.content-partners .disclosure-logo{display:none}.open .content-partners{display:block}.conversation-partners{display:none}.open .conversation-partners{display:block}}.content-social-distribution{font-size:11px;padding-bottom:36px;padding-top:5px}.content-social-distribution div{padding-bottom:10px;position:relative}.content-social-distribution a{color:#4b4b4e}.content-social-distribution a:hover{color:#000}.content-social-distribution i{font-size:12px}.content-social-distribution .fb-messenger,.content-social-distribution .whatsapp{display:none}.content-social-distribution .data-count{border:1px solid #d7d7db;border-radius:2px;color:#4b4b4e;padding:0 3px;position:absolute;right:0;top:0}.gallery-content .content-social-distribution{display:none}@media only screen and (max-width:599px){.content-social-distribution{border-bottom:1px solid #d7d7db;border-top:1px solid #d7d7db;clear:both;display:flex;margin:0 0 12px;padding:6px 0;width:100%}.content-social-distribution div{flex:1;padding:3px 0;text-align:center}.content-social-distribution div+div{border-left:1px solid #d7d7db}.content-social-distribution .fb-messenger,.content-social-distribution .whatsapp{display:block}.content-social-distribution a{display:block;width:100%}.content-social-distribution i{font-size:20px;top:0}.content-social-distribution i.icon-facebook{top:.1em}.content-social-distribution span,.data-count,.print{display:none}}#article .content-sidebar{float:right;position:relative}.content-sidebar{font-size:11px;margin-bottom:60px}.content-sidebar section.column-authors,.content-sidebar section.column-banner{margin-left:0}.content-sidebar .related-topics a{font-weight:700}.content-sidebar .byline{color:#4b4b4e;font-size:13px;margin-bottom:12px;margin-top:12px}.column-banner{margin-bottom:36px}.column-banner .byline{color:#4b4b4e;font-size:11px;font-style:italic;margin-bottom:12px;margin-top:12px}.column-title{border-bottom:1px solid #f2f2f3;display:block;height:108px;margin-bottom:12px;margin-top:28px;position:relative}.column-title:after{border-bottom:1px solid #f2f2f3;bottom:-3px;content:"";position:absolute;width:100%}.column-title h3{bottom:1px;font-size:15px;margin:0;padding-bottom:12px;padding-right:80px;position:absolute}.column-title img{bottom:0;position:absolute;right:0}@media only screen and (max-width:599px){.content-sidebar{margin-bottom:0;margin-left:0}.content-sidebar section{margin-left:0}}.content-translations{margin-bottom:36px}.content-translations ul{list-style:none}.content-translations-toggle{display:none}@media only screen and (max-width:599px){.content-translations{position:absolute;right:0;top:0}.content-translations h3,.content-translations ul{display:none}.content-translations.open{background:#fff;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);min-width:50%;padding:10px;position:absolute;right:0;top:-10px;z-index:100}.content-translations.open h3,.content-translations.open ul{display:block}.content-translations.open .content-translations-toggle{top:0}.content-translations.open .content-translations-toggle .icon-caret-up{display:inline-block}.content-translations.open .content-translations-toggle .icon-caret-down{display:none}.content-translations-toggle{display:block;font-size:20px;height:40px;line-height:40px;position:absolute;right:0;text-align:center;top:-10px;width:60px}.content-translations-toggle img{vertical-align:middle;width:26px}.content-translations-toggle i{border:1px solid #b0b3ba;border-radius:50%;color:#b0b3ba;font-size:15px;height:16px;line-height:16px;text-align:center;width:16px}.content-translations-toggle .icon-caret-down{display:inline-block}.content-translations-toggle .icon-caret-up{display:none}}body.refresh-article #outer{padding:0}body.refresh-article .audio-player{margin-bottom:36px}body.refresh-article .has-desktop-magazine .content-header,body.refresh-article .has-desktop-magazine .content-lead-image{display:none}@media only screen and (max-width:599px){body.refresh-article .has-desktop-magazine .content-header,body.refresh-article .has-desktop-magazine .content-lead-image,body.refresh-article .normal .content-header,body.refresh-article .normal .content-lead-image{display:block}}.magazine{display:none;padding-bottom:24px}.has-desktop-magazine .magazine{display:block}.magazine .image{background-position:50%;background-repeat:no-repeat;background-size:cover;-ms-behavior:url(https://cdn.theconversation.com/static/tc/stylesheets/backgroundsize.min-fd1df32bcabf45d9ca0f1696b9e81652.htc);height:600px}.magazine .image .placeholder-container,.magazine .image img{display:none}.magazine .wrapper{height:100%}.magazine-title{bottom:0;position:absolute;width:100%}.magazine-title header{bottom:70px;position:absolute}.magazine-title .content-header-block{border-left:24px solid #fff;display:inline-block;left:-12px;line-height:normal;padding:4px 0 0;position:relative}.magazine-title h1{background-color:#fff;color:#383838;display:inline;left:-1px;line-height:normal;margin:0;padding:4px 0 6px;position:relative}.magazine-title strong{left:-12px;position:relative;z-index:10}.magazine-title time{background-color:#fff;color:#4b4b4e;display:inline-block;font-size:13px;margin:-1px 0 0 -12px;padding:6px 12px}.magazine-title .time-separator{display:none}@media only screen and (max-width:599px){.magazine{padding-bottom:0}.has-desktop-magazine .magazine{display:none}.has-mobile-magazine .magazine{display:block}.magazine .image{background-image:none!important;height:auto}.magazine .image img{display:block;width:100%}.magazine .image .placeholder-container{display:block}.magazine-header{height:auto}.magazine-title{position:relative}.magazine-title header{bottom:auto;position:relative}.magazine-title .content-header-block{border-left:none;display:block;left:auto}.magazine-title h1{background:transparent;display:block;padding-bottom:0}.magazine-title h1 strong{left:0}.magazine-title .timestamps{padding:12px 0}.magazine-title time{display:block;margin:0;padding:0}}.content-gallery-item{background:#f2f2f3;clear:both;margin:0 0 40px;padding:10px 10px 0}.content-gallery-item img{display:block;max-height:90%;max-width:100%}.content-gallery-item figcaption{color:#4b4b4e;font-size:15px;font-weight:700;line-height:1.4;padding:20px 20px 20px 50px;position:relative}.content-gallery-item figcaption .count{color:#4b4b4e;left:5px;position:absolute;text-align:right;width:35px}.content-gallery-item figcaption .source{color:#62626a;font-weight:700;padding-left:.75em}.content-gallery-item:last-child{cursor:n-resize}.content-gallery-cover.loading{background-color:rgba(0,0,0,.9)}.gallery-cover{background:rgba(0,0,0,.9);height:150%;left:0;transition:opacity .35s ease-out;z-index:1000}.gallery-content,.gallery-cover{bottom:0;opacity:1;position:fixed;top:0;width:100%}.gallery-content{overflow:scroll;padding-top:38px;transition:opacity .75s ease-in .3s;z-index:1001}.gallery-content .close-gallery{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);position:fixed;right:26px;top:10px}.gallery-content.hidden,.gallery-cover.hidden{opacity:0}.gallery-content-inner{color:#fff;margin:0 auto;width:75%}.gallery-content-inner header h1{color:#fff}.gallery-content-inner header time{color:#62626a}.gallery-content-inner .content-gallery-item{background:transparent;cursor:default}.gallery-content-inner .content-gallery-item img{background:#fff;margin:0;padding:5px}.gallery-content-inner .content-gallery-item:last-child{cursor:default}.gallery-content-inner .content-gallery-item:last-child img{cursor:n-resize}.gallery-content-inner .content-gallery-item figcaption{color:#fff}.gallery-content-inner .content-gallery-item figcaption .count,.gallery-content-inner .content-gallery-item figcaption .source{color:hsla(0,0%,100%,.6)}#article .post-navigation{clear:both;margin-bottom:20px}#article .post-navigation ol{display:flex;flex-wrap:wrap}#article .post-navigation li{display:flex;float:left;width:50%}#article .post-navigation li:first-child .post-navigation-option{margin-right:10px}#article .post-navigation li:first-child .post-navigation-option:before{content:"";left:-20px;padding-left:10px;text-align:left}#article .post-navigation li:last-child .post-navigation-option{margin-left:10px}#article .post-navigation li:last-child .post-navigation-option:before{content:"";padding-right:10px;right:-20px;text-align:right}#article .post-navigation .post-navigation-option{background:#fff;border:1px solid #d7d7db;position:relative;transform-style:preserve-3d;width:100%}#article .post-navigation .post-navigation-option:before{background:inherit;border:1px solid #d7d7db;border-radius:50%;font-family:TCFont-Regular;height:40px;line-height:40px;position:absolute;top:50%;transform:translateY(-50%);width:30px;z-index:1}#article .post-navigation .post-navigation-option .article{background:inherit;display:block;min-height:65px;padding:20px;position:relative;z-index:2}#article .post-navigation .empty{opacity:0}#article .post-navigation h4{letter-spacing:normal}#article .post-navigation time{color:#4b4b4e;display:block;font-size:11px}#article .content-sidebar.column-sidebar .content-authors{margin-top:60px}@media only screen and (max-width:599px){#article .content-sidebar.column-sidebar .content-authors{margin-top:12px}} /*# sourceMappingURL=webpacked-critical-d0f67762b617f895.css.map*/ </style> <link rel="preload" href="https://cdn.theconversation.com/static/tc/webpacked-core-58ad5155c495e18d.css" as="style" type="text/css" media="screen" onload="this.onload=null;this.rel=&#39;stylesheet&#39;"> <link rel="stylesheet" href="https://cdn.theconversation.com/static/tc/webpacked-print-53ada9a8162f5384.css" media="print" /> <link rel="icon" sizes="192x192" href="https://cdn.theconversation.com/static/tc/@theconversation/ui/dist/esm/logos/web-app-logo-192x192-2d05bdd6de6328146de80245d4685946.png"> <link rel="shortcut icon" href="https://cdn.theconversation.com/static/tc/@theconversation/ui/dist/esm/logos/favicon-cdcdc0dd51ffe5238483c3f27fd2eb57.ico"> <script> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-WX8PHK9'); </script> <script> window.GTM = window.GTM || {} window.GTM.CustomDimensions = {"UserType":"Reader","RegionCode":"global","CommissioningRegion":"africa","ContentType":"analysis"} </script> <script type="text/javascript" charset="utf-8"> window.didomiOnReady = window.didomiOnReady || []; window.DIDOMI = { ENABLED: false, THE_CONVERSATION_SDK_ID: "c:theconver-dUNGGyiP", THE_CONVERSATION_PROMOS_PURPOSE: "theconver-AA8pWL4T", } </script> <script> window.didomiEventListeners = window.didomiEventListeners || []; window.didomiEventListeners.push({ event: 'consent.changed', listener: function () { window.dispatchEvent(new CustomEvent('didomi:consent.changed')) } }); </script> <meta name="apple-mobile-web-app-title" content="The Conversation"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="default"> <link rel="apple-touch-icon" href="https://images.theconversation.com/files/581997/original/9275d5c0-7dd5-4ddf-b50b-98d537e016f4.png"> <link rel="manifest" href="/manifest.json"> </head> <body class="region_global content content-show refresh-article"> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WX8PHK9" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <div> <a id="small-sidebar-open-button" href="#"> Menu </a> <a id="small-sidebar-close-button" href="#"> Close </a> <div id="small-sidebar"> <nav id="small-sidebar-search" class="small-sidebar-group"> <form action="/search"> <input type="text" name="q" placeholder="Search analysis, academics…"> <button type="submit" aria-label="Search"><span class="icon-search"></span></button> </form> </nav> <nav class="small-sidebar-group sections-sidebar-group"> <ul> <li class="home-page "> <a class="" href="/global">Home</a> </li> </ul> </nav> <nav class="small-sidebar-group small-sidebar-editions"> <h3>Edition</h3> <fieldset class="region-select"> <select id="small-region-select-dropdown"> <option data-code="AFRICA" value="/africa"> Africa </option> <option data-code="AU" value="/au"> Australia </option> <option data-code="BR" value="/br"> Brasil </option> <option data-code="CA" value="/ca"> Canada </option> <option data-code="CA-FR" value="/ca-fr"> Canada (français) </option> <option data-code="ES" value="/es"> España </option> <option data-code="EUROPE" value="/europe"> Europe </option> <option data-code="FR" value="/fr"> France </option> <option data-code="GLOBAL" value="/global" selected="selected"> Global </option> <option data-code="ID" value="/id"> Indonesia </option> <option data-code="NZ" value="/nz"> New Zealand </option> <option data-code="UK" value="/uk"> United Kingdom </option> <option data-code="US" value="/us"> United States </option> </select> </fieldset> </nav> </div> </div> <div id="page-wrapper"> <section id="topbar"> <div class="wrapper clearfix"> <a class="topbar-mobile-home-link" href="/global"> <img alt="The Conversation" src="https://cdn.theconversation.com/static/tc/@theconversation/ui/dist/esm/logos/logo-en-b159aca2598f351db37072c75294e4c8.svg" /> </a> <nav class="topbar-module"> <ul class="topbar-item-list"> <li class="topbar-home-link"> <a aria-label="Home" href="/global"> <i class="icon-home"></i> </a> </li> <li class="topbar-edition-selector-title topbar-label">Edition:</li> </ul> </nav> <nav class="topbar-edition-selector topbar-dropdown topbar-module"> <a class="menu-button-open" href="/global">Available editions</a> <div class="menu-button-contents"> <span class="menu-button-text"> <span class="current-region">Global</span> </span> <i class="icon-caret-down drop-down-caret"></i> </div> <ul class="menu"> <li class="region africa"> <a title="Africa edition" href="/africa">Africa</a> </li> <li class="region au"> <a title="Australia edition" href="/au">Australia</a> </li> <li class="region br"> <a title="Brasil edition" href="/br">Brasil</a> </li> <li class="region ca"> <a title="Canada edition" href="/ca">Canada</a> </li> <li class="region ca-fr"> <a title="Canada (français) edition" href="/ca-fr">Canada (français)</a> </li> <li class="region es"> <a title="España edition" href="/es">España</a> </li> <li class="region europe"> <a title="Europe edition" href="/europe">Europe</a> </li> <li class="region fr"> <a title="France edition" href="/fr">France</a> </li> <li class="region id"> <a title="Indonesia edition" href="/id">Indonesia</a> </li> <li class="region nz"> <a title="New Zealand edition" href="/nz">New Zealand</a> </li> <li class="region uk"> <a title="United Kingdom edition" href="/uk">United Kingdom</a> </li> <li class="region us"> <a title="United States edition" href="/us">United States</a> </li> </ul> </nav> <nav class="topbar-promotional-links topbar-module"> <ul class="topbar-item-list"> <li> <a title="Sign up to receive our daily email newsletter" href="/global/newsletters/global-perspectives-6?utm_campaign=System&amp;utm_content=newsletter&amp;utm_medium=TopBar&amp;utm_source=theconversation.com"> Get newsletter </a> </li> </ul> </nav> <div id="topbar-dynamic-content" class="language-override-en"> <nav class="topbar-account-nav topbar-dropdown topbar-module"> <ul class="topbar-item-list auth"> <li class="author-signup"> <a href="/become-an-author">Become an author</a> </li> <li class="reader-signup"> <a href="/sign_up?return_to=%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970">Sign up as a reader</a> </li> <li class="reader-signin"> <a href="/sign_in?return_to=%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970">Sign in</a> </li> </ul> </nav> </div> </div> </section> <div class="slot" data-id="14"></div> <section id="header"> <div class="wrapper nocontent"> <header id="masthead" class="clearfix"> <a class="masthead-home-link" href="/global"> <img alt="The Conversation" src="https://cdn.theconversation.com/static/tc/@theconversation/ui/dist/esm/logos/logo-en-b159aca2598f351db37072c75294e4c8.svg" /> </a> <form class="masthead-search" action="/global/search" accept-charset="UTF-8" method="get"> <fieldset> <legend>Search</legend> <div class="row"> <div class="input-wrapper"> <label for="q"><i class="icon-search"></i></label> <input type="text" name="q" id="q" value="" placeholder="Search analysis, research, academics…" /> </div> <button type="submit" class="button" value="Search"></button> </div> </fieldset> </form> <div class="masthead-tagline"> Academic rigour, journalistic flair </div> </header> <nav id="primary-navigation" class=" nocontent"> <ol> </ol> </nav> </div> </section> <div id="outer"> <article id="article" class="clearfix has-desktop-magazine has-mobile-magazine" data-id="214970" itemscope itemtype="http://schema.org/Article"> <figure class="magazine"> <div class="image" style="background-image: url(https://images.theconversation.com/files/554793/original/file-20231019-21-c6blch.jpg?ixlib=rb-4.1.0&amp;rect=7%2C0%2C4785%2C2392&amp;q=45&amp;auto=format&amp;w=1356&amp;h=668&amp;fit=crop);"> <div class="placeholder-container" style="--aspect-ratio-percent:66.5625%;--background-color:#524d30"><img alt="Plants growing out of flower pots placed on a wall" class="lazyloaded" src="https://images.theconversation.com/files/554793/original/file-20231019-21-c6blch.jpg?ixlib=rb-4.1.0&amp;rect=0%2C0%2C4771%2C3183&amp;q=20&amp;auto=format&amp;w=320&amp;fit=clip&amp;dpr=2&amp;usm=12&amp;cs=strip" data-id="554793" itemprop="image"></div> </div> <div class="wrapper"> <figcaption> The Eco Green Wall is an example of a sustainable living wall system. <span class="attribution"><span class="source">Karen Botes</span></span> </figcaption> </div> <div class="magazine-title"> <div class="wrapper"> <header class="content-header-container grid-twelve large-grid-eleven"> <div> <div class="content-header-block"> <h1 class="legacy entry-title instapaper_title" itemprop="headline"> <strong> Growing African vegetables on buildings can save space and feed cities – new&nbsp;study </strong> </h1> </div> </div> <div class="timestamps"> <time datetime="2023-11-05T09:27:02Z" itemprop="datePublished" content="2023-11-05T09:27:02Z">Published: November 5, 2023 9.27am GMT</time> </div> </header> </div> </div> </figure> <div class="wrapper"> <div class="content-sidebar grid-four large-grid-four grid-last"> <section class="content-authors"> <div class="content-authors-synopsis"> <a href="#" class="content-authors-toggle"> <i class="icon-caret-down"></i> <i class="icon-caret-up"></i> <span class="nobr">Karen Botes</span>, <em class="institution_name">University of Pretoria</em> </a> </div> <div class="content-authors-group"> <h3 class="border">Author</h3> <ol> <li class="vcard" id="author-538861" itemprop="author" itemscope="" itemtype="http://schema.org/Person"> <a rel="author" itemprop="url" href="/profiles/karen-botes-1438550"> <img alt="" class="lazyload" data-src="https://cdn.theconversation.com/avatars/1438550/width170/file-20230511-11888-mu2hpj.jpg" src="https://cdn.theconversation.com/static/tc/author/width170_default-bea415b3a0223821a698f6e3f6d5ab99.jpg" itemprop="image"> <span class="fn author-name" itemprop="name"> Karen Botes </span> </a> <p class="role"> Lecturer in Landscape Architecture, University of Pretoria </p> </li> </ol> </div> </section> <section class="content-disclosure-statement"> <h3 class="border">Disclosure statement</h3> <p><span>Karen Botes does not work for, consult, own shares in or receive funding from any company or organisation that would benefit from this article, and has disclosed no relevant affiliations beyond their academic appointment.</span></p> </section> <section class="content-partners"> <h3 class="border">Partners</h3> <p class="disclosure-logo clearfix"><a class="logo" href="/institutions/university-of-pretoria-1645"><picture><source srcset="https://images.theconversation.com/institutions/1645/logos/logo-1430720298.jpg?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=170&amp;h=170" media="(min-width:600px)"></source><img alt="University of Pretoria" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" /></picture></a></p> <p class="funding-statement"><a href="https://theconversation.com/institutions/university-of-pretoria-1645">University of Pretoria</a> provides funding as a partner of The Conversation AFRICA.</p> <p><a href="/global/partners">View all partners</a></p> </section> <section class="slot" data-id="16"></section> </div> <div class="grid-twelve large-grid-eleven"> <div class="top"> <aside class="grid-two content-social-distribution"> <div class="email"> <a class="email-button" data-id="214970" target="_blank" rel="noopener" href="mailto:?subject=Growing%20African%20vegetables%20on%20buildings%20can%20save%20space%20and%20feed%20cities%20%E2%80%93%20new%20study%20%E2%80%94%20The%20Conversation&amp;body=Hi.%20I%20found%20an%20article%20that%20you%20might%20like%3A%20%22Growing%20African%20vegetables%20on%20buildings%20can%20save%20space%20and%20feed%20cities%20%E2%80%93%20new%20study%22%20%E2%80%94%20https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970"><i class="icon-email"></i> <span>Email</span></a> </div> <div class="twitter"> <a class="twitter-button" data-url="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" data-id="214970" target="_blank" rel="noopener" href="http://twitter.com/intent/tweet?text=Growing+African+vegetables+on+buildings+can+save+space+and+feed+cities+%E2%80%93+new+study&amp;url=https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970%3Futm_source%3Dtwitter%26utm_medium%3Dbylinetwitterbutton&amp;utm_campaign=none&amp;via=TC_Africa"><i class="icon-twitter"></i> <span>X (Twitter)</span></a> </div> <div class="facebook"> <a class="facebook-button" data-url="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" data-id="214970" target="_blank" rel="noopener" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970%3Futm_source%3Dfacebook%26utm_medium%3Dbylinefacebookbutton"><i class="icon-facebook"></i> <span>Facebook</span></a> </div> <div class="linkedin"> <a class="linkedin-button" data-url="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" data-id="214970" target="_blank" rel="noopener" href="http://www.linkedin.com/shareArticle?mini=true&amp;source=The+Conversation&amp;summary=_As+cities+grow%2C+more+people+%5Bneed%5D%28https%3A%2F%2Fglobalaffairs.org%2Fsites%2Fdefault%2Ffiles%2F2021-02%2Freport_growing-food-for-growing-cities.pdf%23page%3D13%29+food.+However%2C+space+for+farming+is+%5Blimited%5D%28https%3A%2F%2Fw...&amp;title=Growing+African+vegetables+on+buildings+can+save+space+and+feed+cities+%E2%80%93+new+study&amp;url=https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970%3Futm_source%3Dlinkedin%26utm_medium%3Dbylinelinkedinbutton"><i class="icon-linkedin"></i> <span>LinkedIn</span></a> </div> <div class="whatsapp"> <a class="whatsapp-button" data-href="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" data-action="share/whatsapp/share" data-id="214970" target="_blank" rel="noopener" href="whatsapp://send?text=Growing+African+vegetables+on+buildings+can+save+space+and+feed+cities+%E2%80%93+new+study+https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970%3Futm_source%3Dwhatsapp%26utm_medium%3Dbylinewhatsappbutton"><i class="icon-whatsapp"></i> <span>WhatsApp</span></a> </div> <div class="fb-messenger"> <a class="fb-messenger-button" data-href="https://theconversation.com/growing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970" data-action="share/fb-messenger/share" data-id="214970" target="_blank" rel="noopener" href="fb-messenger://share?link=https%3A%2F%2Ftheconversation.com%2Fgrowing-african-vegetables-on-buildings-can-save-space-and-feed-cities-new-study-214970%3Futm_source%3Dfb_messenger%26utm_medium%3Dbylinefb_messenger_button"><i class="icon-fb-messenger"></i> <span>Messenger</span></a> </div> </aside> </div> <div class="grid-ten large-grid-nine grid-last content-body content entry-content instapaper_body inline-promos" itemprop="articleBody"> <p><em>As cities grow, more people <a href="https://globalaffairs.org/sites/default/files/2021-02/report_growing-food-for-growing-cities.pdf#page=13">need</a> food. However, space for farming is <a href="https://www.focusingfuture.com/eco-city/urban-farming-solves-lack-of-agriculture-space/">limited</a> in cities. Building facades can offer a solution for growing food. We asked landscape architect Karen Botes to tell us about her research – cultivating traditional African vegetables on walls.</em> </p> <h2>What are ‘living wall systems’ and why did you study them?</h2> <p><a href="https://www.ajlajournal.org/articles/traditional-african-vegetables-living-walls">Living wall systems</a> are vertical growing platforms which usually form part of a building façade. Some are <a href="https://www.sciencedirect.com/science/article/pii/S1364032114006637">continuous, others modular</a>.</p> <p><a href="https://journals.ufs.ac.za/index.php/as/article/view/5801/4204#page=147">Continuous systems</a> are lightweight screens with pockets that can contain wet <a href="https://www.sciencedirect.com/science/article/pii/S0360132316305108">felted substrate layers</a>, or rock wool, for the plants to grow in, or the plants’ exposed roots are kept wet with nutrient-rich fluids. An example of a continuous system is <a href="https://www.nal.usda.gov/farms-and-agricultural-production-systems/hydroponics#:%7E:text=Hydroponics%20is%20the%20technique%20of,%2C%20coconut%20coir%2C%20or%20perlite.">hydroponics</a>.</p> <p><a href="https://journals.ufs.ac.za/index.php/as/article/view/5801/4204">Modular living wall systems</a> are irrigated plant trays or pots containing soil and fixed onto a supporting structure on the building’s vertical surface. Modular systems are widely used because they make an immediate aesthetic impact. The plants are pre-grown offsite and individual plants are easily replaced. </p><div class="slot clear" data-id="17"> <div class="inline-promos-skeleton"> <h5></h5> <button></button> </div> </div> <p>To learn more about which modular living wall systems work best, I compared two during the 2021/2022 growing season in Pretoria, South Africa. My <a href="https://www.ajlajournal.org/articles/traditional-african-vegetables-living-walls#:%7E:text=Living%20wall%20food%20systems%20involving,social%2Cenvironmental%20and%20educational%20benefits.">six-month study</a> also compared traditional African vegetable crops with a mainstream crop. </p> <h2>What are the benefits of living walls?</h2> <p>Benefits of living walls include <a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051">food production</a>, <a href="https://repository.up.ac.za/handle/2263/61145">biodiversity, cooling, air purification and noise reduction</a>. They also have aesthetic value and are known to <a href="https://www.sciencedirect.com/science/article/pii/S1618866719302894?casa_token=y4OCy-Fm0QYAAAAA:4Hw1JE3WdPN-jq2yt_7N_hN2-eYsWPvqLe99lWUuDpW2SkKxS0do0OjFmI5a8_qi3MckNMAN">reduce stress and improve productivity and wellbeing</a>. </p> <p>When households grow edible crops in living walls, it reduces the environmental impact of food because it doesn’t have to come from far away. And it reduces waste. Growing vegetables has also been found to encourage urban gardeners to eat a more balanced diet in <a href="https://journals.openedition.org/factsreports/5610">Honduras</a>, <a href="https://www.jstage.jst.go.jp/article/jrm/13/2/13_2960/_article/-char/ja/">Japan</a>, <a href="https://onlinelibrary.wiley.com/doi/full/10.1002/hpja.207?casa_token=RbOlOoyUaUoAAAAA%3AkFEtqYg4Q4KR5MfSlWne6LfeJZZjLb4VKiaU6TIv69QABUjGd7m55KQz-12bDaa1HxgxJpMX2NBuSYo">Australia and elsewhere</a>.</p> <p>I’m interested in whether <a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051">living walls with traditional African vegetables</a> could improve local household food production and contribute to dealing with climate change, <a href="https://theconversation.com/the-loss-of-vegetation-is-creating-a-dangerous-heat-island-over-nairobi-150622">urban heat islands</a> and urban <a href="https://theconversation.com/how-buildings-in-johannesburg-could-benefit-from-green-roofs-122877">microclimates</a>.</p> <h2>What did you discover in your study in Pretoria?</h2> <p>The study compared the performance of traditional African vegetable crops in two types of living wall system, the Vicinity wall and the Eco Green Wall, in terms of crop yields and health. </p> <p>The <a href="https://www.modularverticalgarden.com/">Vicinity</a> wall is an all-in-one system, with water tanks at the bottom, a pump and a filter. The top row of pots is drip irrigated and the water gravitates into each row, before circulating back to the top row. The Vicinity pots are clipped onto an aluminium rail fixed to the building. </p> <p>The <a href="https://journals.ufs.ac.za/index.php/as/article/view/5801/4204">Eco Green Wall</a> comprises interlocking, lightweight blocks made out of recycled polystyrene aggregate-and-cement mixture, and plant pots with a soil volume of roughly 1.5 litres. It is designed with economic feasibility and sustainability in mind. </p> <p>I compared the living wall systems’ performance to traditional soil-based agriculture. Variables included minimum and maximum daily temperatures, relative humidity, precipitation, soil temperature, water content and electrical conductivity, leaf biomass yield and plant stress. </p> <p>The <a href="https://iopscience.iop.org/articlesystem's%20components/10.1088/1755-1315/1101/2/022051">study</a> found that local production of the living wall components reduced their cost and carbon footprint. </p> <p><a href="https://www.ajlajournal.org/articles/traditional-african-vegetables-living-walls#:%7E:text=Living%20wall%20food%20systems%20involving,social%2Cenvironmental%20and%20educational%20benefits.">Low technology</a> that requires basic assembly, and a basic irrigation system to limit dependency on electricity and water, can enhance performance.</p> <figure class="align-right zoomable"> <a href="https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=1000&amp;fit=clip"><div class="placeholder-container" style="--aspect-ratio-percent:75.10548523206751%;--background-color:#4e4a34"><img alt="" class="lazyload" data-src="https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=237&amp;fit=clip" data-srcset="https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=600&amp;h=450&amp;fit=crop&amp;dpr=1 600w, https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=30&amp;auto=format&amp;w=600&amp;h=450&amp;fit=crop&amp;dpr=2 1200w, https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=15&amp;auto=format&amp;w=600&amp;h=450&amp;fit=crop&amp;dpr=3 1800w, https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=754&amp;h=566&amp;fit=crop&amp;dpr=1 754w, https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=30&amp;auto=format&amp;w=754&amp;h=566&amp;fit=crop&amp;dpr=2 1508w, https://images.theconversation.com/files/555142/original/file-20231022-29-ow433r.jpg?ixlib=rb-4.1.0&amp;q=15&amp;auto=format&amp;w=754&amp;h=566&amp;fit=crop&amp;dpr=3 2262w" sizes="(min-width: 1466px) 754px, (max-width: 599px) 100vw, (min-width: 600px) 600px, 237px"></div></a> <figcaption> <span class="caption">The Vicinity living wall system.</span> <span class="attribution"><span class="source">Karen Botes</span></span> </figcaption> </figure> <p>An <a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051/meta">appropriate plant selection</a> can further improve the living wall’s resilience, feasibility and sustainability. The study identified seven <a href="https://link.springer.com/article/10.1007/s12231-019-09448-1">traditional African vegetable</a> species suitable for household food production in living wall systems: creeping foxglove, Indian borage, jute plant, pink ribbons, water mint, dwarf elephant’s food and black-eyed pea. </p> <h2>How feasible is it? What are the biggest barriers?</h2> <p><a href="https://link.springer.com/article/10.1007/s11252-008-0063-x">Building facades</a> make up roughly double the area of building footprints in urban areas. This means that walls have more potential for local food production than traditional soil-based urban agriculture. They also have environmental benefits. </p> <p>But the efficiency, resilience and sustainability of current living wall systems have been <a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051">questioned</a> globally and need improvement. </p> <ul> <li><p>They are costly to install and maintain. </p></li> <li><p>They seldom provide optimal conditions for plants to flourish. </p></li> <li><p>They rely on electricity and water.</p></li> <li><p>Some systems require specialised skills and technology.</p></li> </ul> <h2>What could make it work for cities on the continent?</h2> <p>Sun exposure of plant pots should be limited so that the soil doesn’t get too hot. The <a href="https://journals.ufs.ac.za/index.php/as/article/view/5801/4204">Eco Green Wall</a> system is an example where sun exposure is limited and the structure protects the crops.</p> <p>Pots need to have at least three litres of <a href="https://www.publish.csiro.au/fp/FP12028">soil</a> with a depth of 200mm. This increases yield and reduces plant stress. The soil must be lightweight and meet the plant’s requirements. Aeration, texture and drainage must be right. The pots’ drainage holes must limit blockages. </p> <p>A drip or wick irrigation system for each plant level reduces maintenance and increases resilience.</p> <p>Selecting <a href="https://www.ajlajournal.org/articles/traditional-african-vegetables-living-walls#:%7E:text=Living%20wall%20food%20systems%20involving,social%2Cenvironmental%20and%20educational%20benefits.">traditional African vegetables</a> increases the feasibility and resilience of crop performance. These crops can tolerate sub-Saharan Africa’s harsh climate conditions. </p> <p><a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051">Traditional African vegetables</a> also have a high nutritional value, don’t need much irrigation or chemicals, and are resistant to disease. </p> <p>These vegetables prefer full sun and no frost. Well-drained, aerated potting soil that allows for movement of air, water and nutrients works well for them. They require moderate irrigation.</p> <p>The system should be positioned to avoid possible contamination of crops by <a href="https://iopscience.iop.org/article/10.1088/1755-1315/1101/2/022051">polluted environments</a>. It must be orientated to provide <a href="https://www.sciencedirect.com/science/article/abs/pii/S1618866717304156">efficient sun exposure</a> for the selected plants.</p> <h2>So, are living wall systems worth considering to grow vegetables?</h2> <p>I concluded from my research that growing traditional African vegetables in modular living walls saves space compared to standard soil-based food production on a household scale. Considering the horizontal footprint area occupied in terms of yield per square metre, living wall systems with larger pot volumes produced over four times the yield of conventional soil-based agriculture. And they use space that would otherwise not have been used productively.</p> <p>I also concluded that <a href="https://www.ajlajournal.org/articles/traditional-african-vegetables-living-walls#:%7E:text=Living%20wall%20food%20systems%20involving,social%2Cenvironmental%20and%20educational%20benefits.">outdoor modular living wall systems with selected traditional African vegetable crops</a> might be one way of improving food security and urban environments in sub-Saharan Africa.</p> </div> <div class="grid-ten grid-prepend-two large-grid-nine grid-last content-topics topic-list"> <i class="icon-tag"></i> <ul> <li class="topic-list-item"> <a href="/topics/climate-change-27">Climate change</a> </li> <li class="topic-list-item"> <a href="/topics/soil-273">Soil</a> </li> <li class="topic-list-item"> <a href="/topics/irrigation-1821">Irrigation</a> </li> <li class="topic-list-item"> <a href="/topics/south-africa-5995">South Africa</a> </li> <li class="topic-list-item"> <a href="/topics/pretoria-28678">Pretoria</a> </li> <li class="topic-list-item"> <a href="/topics/randd-49808">RandD</a> </li> <li class="topic-list-item"> <a href="/topics/urban-centres-102849">Urban centres</a> </li> </ul> </div> </div> <div class="slot grid-ten grid-prepend-two large-grid-nine grid-last mb5" data-id="15"></div> </div> <div class="wrapper"> <div class="react-content-related-container" data-article-id="214970"></div> </div> </article> <div id="comments-container"></div> <div class="page-addendum"> <div class="wrapper"> <div class="grid-eight"> <div id="addendum-events-list" class="addendum-block jobs-events-list events"> <h3 class="border slammed">Events</h3> <ul> </ul> <a class="view-more" href="/global/events"> <span class="action">More events</span> </a></div> </div> <div class="grid-eight grid-last"> <div id="addendum-jobs" class="addendum-block jobs jobs-events-list"> <h3 class="border slammed">Jobs</h3> <ul> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/352705703/logo-1520549009.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/352705703-allan-myers-chair-in-equity-and-trusts-at-university-of-melbourne?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Allan Myers Chair in Equity and Trusts</a></h5> </li> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/352362221/TC_rescaled_logo_for_Jobboard_copy_TRANSPARENT.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/352362221-head-of-it-operations-at-the-conversation-au-nz?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Head of IT Operations</a></h5> </li> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/351010396/3_monash.jpg" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/351010396-ardc-project-management-office-manager-at-monash-university?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">ARDC Project Management Office Manager</a></h5> </li> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/350024422/Murdoch_University_extended_logo.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/350024422-lecturer-senior-lecturer-in-indigenous-knowledges-at-murdoch-university?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Lecturer / Senior Lecturer in Indigenous Knowledges </a></h5> </li> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/347953720/UQ_Lockup-Stacked_Purple_RGB_WHITE.jpg" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/347953720-professor-in-physiotherapy-at-the-university-of-queensland?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Professor in Physiotherapy</a></h5> </li> </ul> <a class="view-more clearfix" href="https://jobs.theconversation.com?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article_call_to_action"> <span class="action">More jobs</span> </a></div> </div> </div> </div> <script src="https://theconversation.com/javascripts/lib/content_tracker_hook.js" id="theconversation_tracker_hook" data-counter="https://counter.theconversation.com/content/214970/count" async="async"></script> </div> <div id="footers"> <section class="footer-primary"> <div class="wrapper nocontent"> <section class="community footer-link-list grid-five large-grid-four"> <nav> <ul> <li> <a href="https://drive.google.com/file/d/1DUkhOcnF1Ef1MpuKtGr7rbBAawO4XV48">Editorial Policies</a> </li> <li> <a href="/global/community-standards">Community standards</a> </li> <li> <a href="/global/republishing-guidelines">Republishing guidelines</a> </li> <li> <a href="https://analytics.theconversation.com/global">Analytics</a> </li> <li> <a href="/global/feeds">Our feeds</a> </li> <li> <a title="Sign up to receive our daily email newsletter" href="/global/newsletters/global-perspectives-6?utm_campaign=System&amp;utm_content=newsletter&amp;utm_medium=Footer&amp;utm_source=theconversation.com">Get newsletter</a> </li> </ul> </nav> </section> <section class="company footer-link-list grid-five large-grid-seven"> <nav> <ul> <li> <a href="/global/who-we-are">Who we are</a> </li> <li> <a href="/global/charter">Our charter</a> </li> <li> <a href="/global/team">Our team</a> </li> <li> <a href="/global/partners">Partners and funders</a> </li> <li> <a href="/global/resources-for-media">Resource for media</a> </li> <li> <a href="/global/contact-us">Contact us</a> </li> </ul> </nav> </section> <section class="grid-six large-grid-five grid-last"> <div class="sitewide-social-media"> <ul> <li class="facebook"> <a title="The Conversation on Facebook" rel="me" href="https://facebook.com/TheConversationGlobal">&#8203;</a> </li> <li class="twitter"> <a title="The Conversation on X (formerly Twitter)" rel="me" href="https://twitter.com/_TCGlobal">&#8203;</a> </li> <li class="linkedin"> <a title="The Conversation on LinkedIn" rel="me" href="https://www.linkedin.com/company/the-conversation-media-group">&#8203;</a> </li> </ul> </div> </section> </div> </section> <footer id="footer"> <div class="wrapper flex flex-col mx-auto pt-4 text-2xs md:flex-row 2xl:text-xs"> <nav class="flex flex-col gap-4 text-center md:flex-row"> <a class="mb-2" href="/global/privacy-policy">Privacy policy</a> <a class="mb-2" href="/global/terms-and-conditions">Terms and conditions</a> <a class="mb-2" href="/global/corrections">Corrections</a> </nav> <p class="copyright mx-auto mt-4 md:mt-0 lg:mr-0 lg:ml-auto"> Copyright © 2010–2024, <a href="https://theconversation.com/global/who-we-are">The Conversation</a> </p> </div> </footer> </div> </div> <div class="slot" data-id="13"></div> <script src="https://cdn.theconversation.com/static/tc/content-5064b0c6a1c66395a639.js"></script> <script src="https://cdn.theconversation.com/static/tc/gtm_data_layer-2f5b94c0bf06c1289d2a.js"></script> <script> //<![CDATA[ TC.locale = "en-GLOBAL"; TC.env = "production"; TC.pageType = "content#show"; TC.localePath = "https://cdn.theconversation.com/static/tc/en-GLOBAL-ed4f7f5299604cb20356743faad128d3.json"; TC.bugsnagConfig = {"apiKey":"e6966b978008ed1612ea7793efb88e93","appVersion":"503c63c8f36ef8cba41eb7f67299e769a555fb09","collectUserIp":false,"releaseStage":"production","notifyReleaseStages":["development","staging","production"]}; TC.init = function() { TC.EntrypointInitializer() } //]]> </script> <script> //<![CDATA[ "use strict";(self.webpackChunktc=self.webpackChunktc||[]).push([[952],{51250:function(e,t,s){s(52146).A.init(TC.localePath,TC.locale,!1,TC.init)},52146:function(e,t,s){s.d(t,{A:function(){return P}});var i=s(23029),n=s(92901),o=[],r=o.forEach,a=o.slice;function l(e,t,s,i){var n=e.read.bind(e);if(2!==n.length)n(t,s,i);else try{var o=n(t,s);o&&"function"==typeof o.then?o.then((function(e){return i(null,e)})).catch(i):i(null,o)}catch(e){i(e)}}var c=function(){function e(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,i.A)(this,e),this.backends=[],this.type="backend",this.allOptions=n,this.init(t,s)}return(0,n.A)(e,[{key:"init",value:function(e){var t=this,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e,this.options=function(e){return r.call(a.call(arguments,1),(function(t){if(t)for(var s in t)void 0===e[s]&&(e[s]=t[s])})),e}(s,this.options||{},{handleEmptyResourcesAsFailed:!0,cacheHitMode:"none"}),this.allOptions=i,this.options.backends&&this.options.backends.forEach((function(s,n){var o;t.backends[n]=t.backends[n]||((o=s)?"function"==typeof o?new o:o:null),t.backends[n].init(e,t.options.backendOptions&&t.options.backendOptions[n]||{},i)})),this.services&&this.options.reloadInterval&&setInterval((function(){return t.reload()}),this.options.reloadInterval)}},{key:"read",value:function(e,t,s){var i=this,n=this.backends.length,o=function s(n,o){if(!(n<0)){var r=i.backends[n];r.save?(r.save(e,t,o),s(n-1,o)):s(n-1,o)}};!function r(a){if(a>=n)return s(new Error("non of the backend loaded data",!0));var c=a===n-1,u=i.options.handleEmptyResourcesAsFailed&&!c?0:-1,h=i.backends[a];h.read?l(h,e,t,(function(n,c,p){if(!n&&c&&Object.keys(c).length>u){if(s(null,c,a),o(a-1,c),h.save&&i.options.cacheHitMode&&["refresh","refreshAndUpdateStore"].indexOf(i.options.cacheHitMode)>-1){if(p&&i.options.refreshExpirationTime&&p+i.options.refreshExpirationTime>Date.now())return;var d=i.backends[a+1];d&&d.read&&l(d,e,t,(function(s,n){s||n&&(Object.keys(n).length<=u||(o(a,n),"refreshAndUpdateStore"===i.options.cacheHitMode&&i.services&&i.services.resourceStore&&i.services.resourceStore.addResourceBundle(e,t,n)))}))}}else r(a+1)})):r(a+1)}(0)}},{key:"create",value:function(e,t,s,i){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){},o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.backends.forEach((function(r){if(r.create){var a=r.create.bind(r);if(a.length<6)try{var l;(l=5===a.length?a(e,t,s,i,o):a(e,t,s,i))&&"function"==typeof l.then?l.then((function(e){return n(null,e)})).catch(n):n(null,l)}catch(e){n(e)}else a(e,t,s,i,n,o)}}))}},{key:"reload",value:function(){var e=this,t=this.services,s=t.backendConnector,i=t.languageUtils,n=t.logger,o=s.language;if(!o||"cimode"!==o.toLowerCase()){var r=[],a=function(e){i.toResolveHierarchy(e).forEach((function(e){r.indexOf(e)<0&&r.push(e)}))};a(o),this.allOptions.preload&&this.allOptions.preload.forEach((function(e){return a(e)})),r.forEach((function(t){e.allOptions.ns.forEach((function(e){s.read(t,e,"read",null,null,(function(i,o){i&&n.warn("loading namespace ".concat(e," for language ").concat(t," failed"),i),!i&&o&&n.log("loaded namespace ".concat(e," for language ").concat(t),o),s.loaded("".concat(t,"|").concat(e),i,o)}))}))}))}}}]),e}();c.type="backend";var u=s(72635),h=s(64467);function p(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}function d(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?p(Object(s),!0).forEach((function(t){(0,h.A)(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):p(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}var g=function(){function e(t){(0,i.A)(this,e),this.store=t.store}return(0,n.A)(e,[{key:"setItem",value:function(e,t){if(this.store)try{this.store.setItem(e,t)}catch(e){}}},{key:"getItem",value:function(e,t){if(this.store)try{return this.store.getItem(e,t)}catch(e){}}}]),e}();var f=function(){function e(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,i.A)(this,e),this.init(t,s),this.type="backend"}return(0,n.A)(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.services=e,this.options=d(d(d({},function(){var e=null;try{e=window.localStorage}catch(e){"undefined"!=typeof window&&console.log("Failed to load local storage.",e)}return{prefix:"i18next_res_",expirationTime:6048e5,defaultVersion:void 0,versions:{},store:e}}()),this.options),t),this.storage=new g(this.options)}},{key:"read",value:function(e,t,s){var i=Date.now();if(!this.storage.store)return s(null,null);var n=this.storage.getItem("".concat(this.options.prefix).concat(e,"-").concat(t));if(n){n=JSON.parse(n);var o=this.getVersion(e);if(n.i18nStamp&&n.i18nStamp+this.options.expirationTime>i&&o===n.i18nVersion){var r=n.i18nStamp;return delete n.i18nVersion,delete n.i18nStamp,s(null,n,r)}}return s(null,null)}},{key:"save",value:function(e,t,s){if(this.storage.store){s.i18nStamp=Date.now();var i=this.getVersion(e);i&&(s.i18nVersion=i),this.storage.setItem("".concat(this.options.prefix).concat(e,"-").concat(t),JSON.stringify(s))}}},{key:"getVersion",value:function(e){return this.options.versions[e]||this.options.defaultVersion}}]),e}();f.type="backend";var v=s(62046),m=s(80030),y=s(82284),b=[],x=b.forEach,k=b.slice;function S(e,t){if(t&&"object"===(0,y.A)(t)){var s="",i=encodeURIComponent;for(var n in t)s+="&"+i(n)+"="+i(t[n]);if(!s)return e;e=e+(-1!==e.indexOf("?")?"&":"?")+s.slice(1)}return e}function O(e,t,s,i,n){i&&"object"===(0,y.A)(i)&&(n||(i._t=new Date),i=S("",i).slice(1)),t.queryStringParams&&(e=S(e,t.queryStringParams));try{var o;(o=XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("MSXML2.XMLHTTP.3.0")).open(i?"POST":"GET",e,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,i&&o.setRequestHeader("Content-type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var r=t.customHeaders;if(r="function"==typeof r?r():r)for(var a in r)o.setRequestHeader(a,r[a]);o.onreadystatechange=function(){o.readyState>3&&s&&s(o.responseText,o)},o.send(i)}catch(e){console&&console.log(e)}}var w=function(){function e(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,i.A)(this,e),this.init(t,s),this.type="backend"}return(0,n.A)(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.services=e,this.options=function(e){return x.call(k.call(arguments,1),(function(t){if(t)for(var s in t)void 0===e[s]&&(e[s]=t[s])})),e}(t,this.options||{},{loadPath:"/locales/{{lng}}/{{ns}}.json",addPath:"/locales/add/{{lng}}/{{ns}}",allowMultiLoading:!1,parse:JSON.parse,parsePayload:function(e,t,s){return(0,h.A)({},t,s||"")},crossDomain:!1,ajax:O})}},{key:"readMulti",value:function(e,t,s){var i=this.options.loadPath;"function"==typeof this.options.loadPath&&(i=this.options.loadPath(e,t));var n=this.services.interpolator.interpolate(i,{lng:e.join("+"),ns:t.join("+")});this.loadUrl(n,s)}},{key:"read",value:function(e,t,s){var i=this.options.loadPath;"function"==typeof this.options.loadPath&&(i=this.options.loadPath([e],[t]));var n=this.services.interpolator.interpolate(i,{lng:e,ns:t});this.loadUrl(n,s)}},{key:"loadUrl",value:function(e,t){var s=this;this.options.ajax(e,this.options,(function(i,n){if(n.status>=500&&n.status<600)return t("failed loading "+e,!0);if(n.status>=400&&n.status<500)return t("failed loading "+e,!1);var o,r;try{o=s.options.parse(i,e)}catch(t){r="failed parsing "+e+" to json"}if(r)return t(r,!1);t(null,o)}))}},{key:"create",value:function(e,t,s,i){var n=this;"string"==typeof e&&(e=[e]);var o=this.options.parsePayload(t,s,i);e.forEach((function(e){var s=n.services.interpolator.interpolate(n.options.addPath,{lng:e,ns:t});n.options.ajax(s,n.options,(function(e,t){}),o)}))}}]),e}();w.type="backend";var L=w;function R(e,t){for(var s=0;s<t.length;s++){var i=t[s];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var P=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,s,i;return t=e,i=[{key:"init",value:function(e,t,s,i){var n,o,r,a=[];(0,v.A)()&&a.push(f),a.push(L),u.Ay.use(c).init({backend:{backends:a,backendOptions:[{versions:(n={},o=t,r=e,o in n?Object.defineProperty(n,o,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[o]=r,n)},{crossDomain:s,loadPath:e}]},lng:t},(function(e){e&&e.length&&(0,m.A)("/no_js_locale?message=".concat(e[0]));try{i()}catch(e){throw(0,m.A)("/js_init_failure?message=".concat(e)),e}}))}},{key:"t",value:function(){return u.Ay.t.apply(u.Ay,arguments)||(arguments.length<=0?void 0:arguments[0])}}],(s=null)&&R(t.prototype,s),i&&R(t,i),e}()},62046:function(e,t,s){function i(){var e="local-storage-availability-test";try{return window.localStorage.setItem(e,e),window.localStorage.getItem(e),window.localStorage.removeItem(e),!0}catch(e){return!1}}s.d(t,{A:function(){return i}})},80030:function(e,t){t.A=function(e){var t=!1;window.XMLHttpRequest?t=new XMLHttpRequest:window.ActiveXObject&&(t=new ActiveXObject("Microsoft.XMLHTTP")),!1!==t&&(t.open("GET",e,!0),t.send())}},23029:function(e,t,s){function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}s.d(t,{A:function(){return i}})},92901:function(e,t,s){s.d(t,{A:function(){return o}});var i=s(20816);function n(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,(0,i.A)(n.key),n)}}function o(e,t,s){return t&&n(e.prototype,t),s&&n(e,s),Object.defineProperty(e,"prototype",{writable:!1}),e}},64467:function(e,t,s){s.d(t,{A:function(){return n}});var i=s(20816);function n(e,t,s){return(t=(0,i.A)(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}},20816:function(e,t,s){s.d(t,{A:function(){return n}});var i=s(82284);function n(e){var t=function(e,t){if("object"!=(0,i.A)(e)||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var n=s.call(e,t||"default");if("object"!=(0,i.A)(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==(0,i.A)(t)?t:t+""}},82284:function(e,t,s){function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}s.d(t,{A:function(){return i}})},72635:function(e,t,s){s.d(t,{Ay:function(){return K}});const i=e=>"string"==typeof e,n=()=>{let e,t;const s=new Promise(((s,i)=>{e=s,t=i}));return s.resolve=e,s.reject=t,s},o=e=>null==e?"":""+e,r=/###/g,a=e=>e&&e.indexOf("###")>-1?e.replace(r,"."):e,l=e=>!e||i(e),c=(e,t,s)=>{const n=i(t)?t.split("."):t;let o=0;for(;o<n.length-1;){if(l(e))return{};const t=a(n[o]);!e[t]&&s&&(e[t]=new s),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++o}return l(e)?{}:{obj:e,k:a(n[o])}},u=(e,t,s)=>{const{obj:i,k:n}=c(e,t,Object);if(void 0!==i||1===t.length)return void(i[n]=s);let o=t[t.length-1],r=t.slice(0,t.length-1),a=c(e,r,Object);for(;void 0===a.obj&&r.length;)o=`${r[r.length-1]}.${o}`,r=r.slice(0,r.length-1),a=c(e,r,Object),a?.obj&&void 0!==a.obj[`${a.k}.${o}`]&&(a.obj=void 0);a.obj[`${a.k}.${o}`]=s},h=(e,t)=>{const{obj:s,k:i}=c(e,t);if(s)return s[i]},p=(e,t,s)=>{for(const n in t)"__proto__"!==n&&"constructor"!==n&&(n in e?i(e[n])||e[n]instanceof String||i(t[n])||t[n]instanceof String?s&&(e[n]=t[n]):p(e[n],t[n],s):e[n]=t[n]);return e},d=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var g={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const f=e=>i(e)?e.replace(/[&<>"'\/]/g,(e=>g[e])):e;const v=[" ",",","?","!",";"],m=new class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(void 0!==t)return t;const s=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,s),this.regExpQueue.push(e),s}}(20),y=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(!e)return;if(e[t])return e[t];const i=t.split(s);let n=e;for(let e=0;e<i.length;){if(!n||"object"!=typeof n)return;let t,o="";for(let r=e;r<i.length;++r)if(r!==e&&(o+=s),o+=i[r],t=n[o],void 0!==t){if(["string","number","boolean"].indexOf(typeof t)>-1&&r<i.length-1)continue;e+=r-e+1;break}n=t}return n},b=e=>e?.replace("_","-"),x={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console?.[e]?.apply?.(console,t)}};class k{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.init(e,t)}init(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||x,this.options=t,this.debug=t.debug}log(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.forward(t,"log","",!0)}warn(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.forward(t,"warn","",!0)}error(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.forward(t,"error","")}deprecate(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,s,n){return n&&!this.debug?null:(i(e[0])&&(e[0]=`${s}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new k(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return(e=e||this.options).prefix=e.prefix||this.prefix,new k(this.logger,e)}}var S=new k;class O{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach((e=>{this.observers[e]||(this.observers[e]=new Map);const s=this.observers[e].get(t)||0;this.observers[e].set(t,s+1)})),this}off(e,t){this.observers[e]&&(t?this.observers[e].delete(t):delete this.observers[e])}emit(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];if(this.observers[e]){Array.from(this.observers[e].entries()).forEach((e=>{let[t,i]=e;for(let e=0;e<i;e++)t(...s)}))}if(this.observers["*"]){Array.from(this.observers["*"].entries()).forEach((t=>{let[i,n]=t;for(let t=0;t<n;t++)i.apply(i,[e,...s])}))}}}class w extends O{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=t,void 0===this.options.keySeparator&&(this.options.keySeparator="."),void 0===this.options.ignoreJSONStructure&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,s){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,r=void 0!==n.ignoreJSONStructure?n.ignoreJSONStructure:this.options.ignoreJSONStructure;let a;e.indexOf(".")>-1?a=e.split("."):(a=[e,t],s&&(Array.isArray(s)?a.push(...s):i(s)&&o?a.push(...s.split(o)):a.push(s)));const l=h(this.data,a);return!l&&!t&&!s&&e.indexOf(".")>-1&&(e=a[0],t=a[1],s=a.slice(2).join(".")),!l&&r&&i(s)?y(this.data?.[e]?.[t],s,o):l}addResource(e,t,s,i){let n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1};const o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator;let r=[e,t];s&&(r=r.concat(o?s.split(o):s)),e.indexOf(".")>-1&&(r=e.split("."),i=t,t=r[1]),this.addNamespaces(t),u(this.data,r,i),n.silent||this.emit("added",e,t,s,i)}addResources(e,t,s){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(const n in s)(i(s[n])||Array.isArray(s[n]))&&this.addResource(e,t,n,s[n],{silent:!0});n.silent||this.emit("added",e,t,s)}addResourceBundle(e,t,s,i,n){let o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1,skipCopy:!1},r=[e,t];e.indexOf(".")>-1&&(r=e.split("."),i=s,s=t,t=r[1]),this.addNamespaces(t);let a=h(this.data,r)||{};o.skipCopy||(s=JSON.parse(JSON.stringify(s))),i?p(a,s,n):a={...a,...s},u(this.data,r,a),o.silent||this.emit("added",e,t,s)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return void 0!==this.getResource(e,t)}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find((e=>t[e]&&Object.keys(t[e]).length>0))}toJSON(){return this.data}}var L={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,s,i,n){return e.forEach((e=>{t=this.processors[e]?.process(t,s,i,n)??t})),t}};const R={};class P extends O{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),((e,t,s)=>{e.forEach((e=>{t[e]&&(s[e]=t[e])}))})(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=t,void 0===this.options.keySeparator&&(this.options.keySeparator="."),this.logger=S.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==e)return!1;const s=this.resolve(e,t);return void 0!==s?.res}extractFromKey(e,t){let s=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===s&&(s=":");const n=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator;let o=t.ns||this.options.defaultNS||[];const r=s&&e.indexOf(s)>-1,a=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||((e,t,s)=>{t=t||"",s=s||"";const i=v.filter((e=>t.indexOf(e)<0&&s.indexOf(e)<0));if(0===i.length)return!0;const n=m.getRegExp(`(${i.map((e=>"?"===e?"\\?":e)).join("|")})`);let o=!n.test(e);if(!o){const t=e.indexOf(s);t>0&&!n.test(e.substring(0,t))&&(o=!0)}return o})(e,s,n));if(r&&!a){const t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:i(o)?[o]:o};const r=e.split(s);(s!==n||s===n&&this.options.ns.indexOf(r[0])>-1)&&(o=r.shift()),e=r.join(n)}return{key:e,namespaces:i(o)?[o]:o}}translate(e,t,s){if("object"!=typeof t&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),"object"==typeof t&&(t={...t}),t||(t={}),null==e)return"";Array.isArray(e)||(e=[String(e)]);const n=void 0!==t.returnDetails?t.returnDetails:this.options.returnDetails,o=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,{key:r,namespaces:a}=this.extractFromKey(e[e.length-1],t),l=a[a.length-1],c=t.lng||this.language,u=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if("cimode"===c?.toLowerCase()){if(u){const e=t.nsSeparator||this.options.nsSeparator;return n?{res:`${l}${e}${r}`,usedKey:r,exactUsedKey:r,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(t)}:`${l}${e}${r}`}return n?{res:r,usedKey:r,exactUsedKey:r,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(t)}:r}const h=this.resolve(e,t);let p=h?.res;const d=h?.usedKey||r,g=h?.exactUsedKey||r,f=Object.prototype.toString.apply(p),v=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays,m=!this.i18nFormat||this.i18nFormat.handleAsObject,y=!i(p)&&"boolean"!=typeof p&&"number"!=typeof p;if(!(m&&p&&y&&["[object Number]","[object Function]","[object RegExp]"].indexOf(f)<0)||i(v)&&Array.isArray(p))if(m&&i(v)&&Array.isArray(p))p=p.join(v),p&&(p=this.extendTranslation(p,e,t,s));else{let n=!1,a=!1;const u=void 0!==t.count&&!i(t.count),d=P.hasDefaultValue(t),g=u?this.pluralResolver.getSuffix(c,t.count,t):"",f=t.ordinal&&u?this.pluralResolver.getSuffix(c,t.count,{ordinal:!1}):"",v=u&&!t.ordinal&&0===t.count,m=v&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${g}`]||t[`defaultValue${f}`]||t.defaultValue;!this.isValidLookup(p)&&d&&(n=!0,p=m),this.isValidLookup(p)||(a=!0,p=r);const y=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&a?void 0:p,b=d&&m!==p&&this.options.updateMissing;if(a||n||b){if(this.logger.log(b?"updateKey":"missingKey",c,l,r,b?m:p),o){const e=this.resolve(r,{...t,keySeparator:!1});e&&e.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let e=[];const s=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if("fallback"===this.options.saveMissingTo&&s&&s[0])for(let t=0;t<s.length;t++)e.push(s[t]);else"all"===this.options.saveMissingTo?e=this.languageUtils.toResolveHierarchy(t.lng||this.language):e.push(t.lng||this.language);const i=(e,s,i)=>{const n=d&&i!==p?i:y;this.options.missingKeyHandler?this.options.missingKeyHandler(e,l,s,n,b,t):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,l,s,n,b,t),this.emit("missingKey",e,l,s,p)};this.options.saveMissing&&(this.options.saveMissingPlurals&&u?e.forEach((e=>{const s=this.pluralResolver.getSuffixes(e,t);v&&t[`defaultValue${this.options.pluralSeparator}zero`]&&s.indexOf(`${this.options.pluralSeparator}zero`)<0&&s.push(`${this.options.pluralSeparator}zero`),s.forEach((s=>{i([e],r+s,t[`defaultValue${s}`]||m)}))})):i(e,r,m))}p=this.extendTranslation(p,e,t,h,s),a&&p===r&&this.options.appendNamespaceToMissingKey&&(p=`${l}:${r}`),(a||n)&&this.options.parseMissingKeyHandler&&(p=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${r}`:r,n?p:void 0))}else{if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(d,p,{...t,ns:a}):`key '${r} (${this.language})' returned an object instead of string.`;return n?(h.res=e,h.usedParams=this.getUsedParamsDetails(t),h):e}if(o){const e=Array.isArray(p),s=e?[]:{},i=e?g:d;for(const e in p)if(Object.prototype.hasOwnProperty.call(p,e)){const n=`${i}${o}${e}`;s[e]=this.translate(n,{...t,joinArrays:!1,ns:a}),s[e]===n&&(s[e]=p[e])}p=s}}return n?(h.res=p,h.usedParams=this.getUsedParamsDetails(t),h):p}extendTranslation(e,t,s,n,o){var r=this;if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...s},s.lng||this.language||n.usedLng,n.usedNS,n.usedKey,{resolved:n});else if(!s.skipInterpolation){s.interpolation&&this.interpolator.init({...s,interpolation:{...this.options.interpolation,...s.interpolation}});const a=i(e)&&(void 0!==s?.interpolation?.skipOnVariables?s.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let l;if(a){const t=e.match(this.interpolator.nestingRegexp);l=t&&t.length}let c=s.replace&&!i(s.replace)?s.replace:s;if(this.options.interpolation.defaultVariables&&(c={...this.options.interpolation.defaultVariables,...c}),e=this.interpolator.interpolate(e,c,s.lng||this.language||n.usedLng,s),a){const t=e.match(this.interpolator.nestingRegexp);l<(t&&t.length)&&(s.nest=!1)}!s.lng&&n&&n.res&&(s.lng=this.language||n.usedLng),!1!==s.nest&&(e=this.interpolator.nest(e,(function(){for(var e=arguments.length,i=new Array(e),n=0;n<e;n++)i[n]=arguments[n];return o?.[0]!==i[0]||s.context?r.translate(...i,t):(r.logger.warn(`It seems you are nesting recursively key: ${i[0]} in key: ${t[0]}`),null)}),s)),s.interpolation&&this.interpolator.reset()}const a=s.postProcess||this.options.postProcess,l=i(a)?[a]:a;return null!=e&&l?.length&&!1!==s.applyPostProcessor&&(e=L.handle(l,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...n,usedParams:this.getUsedParamsDetails(s)},...s}:s,this)),e}resolve(e){let t,s,n,o,r,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i(e)&&(e=[e]),e.forEach((e=>{if(this.isValidLookup(t))return;const l=this.extractFromKey(e,a),c=l.key;s=c;let u=l.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));const h=void 0!==a.count&&!i(a.count),p=h&&!a.ordinal&&0===a.count,d=void 0!==a.context&&(i(a.context)||"number"==typeof a.context)&&""!==a.context,g=a.lngs?a.lngs:this.languageUtils.toResolveHierarchy(a.lng||this.language,a.fallbackLng);u.forEach((e=>{this.isValidLookup(t)||(r=e,R[`${g[0]}-${e}`]||!this.utils?.hasLoadedNamespace||this.utils?.hasLoadedNamespace(r)||(R[`${g[0]}-${e}`]=!0,this.logger.warn(`key "${s}" for languages "${g.join(", ")}" won't get resolved as namespace "${r}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),g.forEach((s=>{if(this.isValidLookup(t))return;o=s;const i=[c];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(i,c,s,e,a);else{let e;h&&(e=this.pluralResolver.getSuffix(s,a.count,a));const t=`${this.options.pluralSeparator}zero`,n=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(i.push(c+e),a.ordinal&&0===e.indexOf(n)&&i.push(c+e.replace(n,this.options.pluralSeparator)),p&&i.push(c+t)),d){const s=`${c}${this.options.contextSeparator}${a.context}`;i.push(s),h&&(i.push(s+e),a.ordinal&&0===e.indexOf(n)&&i.push(s+e.replace(n,this.options.pluralSeparator)),p&&i.push(s+t))}}let r;for(;r=i.pop();)this.isValidLookup(t)||(n=r,t=this.getResource(s,e,r,a))})))}))})),{res:t,usedKey:s,exactUsedKey:n,usedLng:o,usedNS:r}}isValidLookup(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}getResource(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,s,i):this.resourceStore.getResource(e,t,s,i)}getUsedParamsDetails(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],s=e.replace&&!i(e.replace);let n=s?e.replace:e;if(s&&void 0!==e.count&&(n.count=e.count),this.options.interpolation.defaultVariables&&(n={...this.options.interpolation.defaultVariables,...n}),!s){n={...n};for(const e of t)delete n[e]}return n}static hasDefaultValue(e){const t="defaultValue";for(const s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&t===s.substring(0,12)&&void 0!==e[s])return!0;return!1}}class j{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=S.create("languageUtils")}getScriptPartFromCode(e){if(!(e=b(e))||e.indexOf("-")<0)return null;const t=e.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}getLanguagePartFromCode(e){if(!(e=b(e))||e.indexOf("-")<0)return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(i(e)&&e.indexOf("-")>-1){let t=Intl.getCanonicalLocales(e)[0];return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach((e=>{if(t)return;const s=this.formatLanguageCode(e);this.options.supportedLngs&&!this.isSupportedCode(s)||(t=s)})),!t&&this.options.supportedLngs&&e.forEach((e=>{if(t)return;const s=this.getLanguagePartFromCode(e);if(this.isSupportedCode(s))return t=s;t=this.options.supportedLngs.find((e=>e===s?e:e.indexOf("-")<0&&s.indexOf("-")<0?void 0:e.indexOf("-")>0&&s.indexOf("-")<0&&e.substring(0,e.indexOf("-"))===s||0===e.indexOf(s)&&s.length>1?e:void 0))})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if("function"==typeof e&&(e=e(t)),i(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let s=e[t];return s||(s=e[this.getScriptPartFromCode(t)]),s||(s=e[this.formatLanguageCode(t)]),s||(s=e[this.getLanguagePartFromCode(t)]),s||(s=e.default),s||[]}toResolveHierarchy(e,t){const s=this.getFallbackCodes(t||this.options.fallbackLng||[],e),n=[],o=e=>{e&&(this.isSupportedCode(e)?n.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return i(e)&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?("languageOnly"!==this.options.load&&o(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&o(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&o(this.getLanguagePartFromCode(e))):i(e)&&o(this.formatLanguageCode(e)),s.forEach((e=>{n.indexOf(e)<0&&o(this.formatLanguageCode(e))})),n}}const $={zero:0,one:1,two:2,few:3,many:4,other:5},C={select:e=>1===e?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class N{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=S.create("pluralResolver"),this.pluralRulesCache={}}addRule(e,t){this.rules[e]=t}clearCache(){this.pluralRulesCache={}}getRule(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=b("dev"===e?"en":e),i=t.ordinal?"ordinal":"cardinal",n=JSON.stringify({cleanedCode:s,type:i});if(n in this.pluralRulesCache)return this.pluralRulesCache[n];let o;try{o=new Intl.PluralRules(s,{type:i})}catch(s){if(!Intl)return this.logger.error("No Intl support, please use an Intl polyfill!"),C;if(!e.match(/-|_/))return C;const i=this.languageUtils.getLanguagePartFromCode(e);o=this.getRule(i,t)}return this.pluralRulesCache[n]=o,o}needsPlural(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=this.getRule(e,t);return s||(s=this.getRule("dev",t)),s?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(e,s).map((e=>`${t}${e}`))}getSuffixes(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=this.getRule(e,t);return s||(s=this.getRule("dev",t)),s?s.resolvedOptions().pluralCategories.sort(((e,t)=>$[e]-$[t])).map((e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${e}`)):[]}getSuffix(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=this.getRule(e,s);return i?`${this.options.prepend}${s.ordinal?`ordinal${this.options.prepend}`:""}${i.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix("dev",t,s))}}const E=function(e,t,s){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=((e,t,s)=>{const i=h(e,s);return void 0!==i?i:h(t,s)})(e,t,s);return!r&&o&&i(s)&&(r=y(e,s,n),void 0===r&&(r=y(t,s,n))),r},A=e=>e.replace(/\$/g,"$$$$");class T{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=S.create("interpolator"),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:s,useRawValueToEscape:i,prefix:n,prefixEscaped:o,suffix:r,suffixEscaped:a,formatSeparator:l,unescapeSuffix:c,unescapePrefix:u,nestingPrefix:h,nestingPrefixEscaped:p,nestingSuffix:g,nestingSuffixEscaped:v,nestingOptionsSeparator:m,maxReplaces:y,alwaysFormat:b}=e.interpolation;this.escape=void 0!==t?t:f,this.escapeValue=void 0===s||s,this.useRawValueToEscape=void 0!==i&&i,this.prefix=n?d(n):o||"{{",this.suffix=r?d(r):a||"}}",this.formatSeparator=l||",",this.unescapePrefix=c?"":u||"-",this.unescapeSuffix=this.unescapePrefix?"":c||"",this.nestingPrefix=h?d(h):p||d("$t("),this.nestingSuffix=g?d(g):v||d(")"),this.nestingOptionsSeparator=m||",",this.maxReplaces=y||1e3,this.alwaysFormat=void 0!==b&&b,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,t,s,n){let r,a,l;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(e.indexOf(this.formatSeparator)<0){const i=E(t,c,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(i,void 0,s,{...n,...t,interpolationkey:e}):i}const i=e.split(this.formatSeparator),o=i.shift().trim(),r=i.join(this.formatSeparator).trim();return this.format(E(t,c,o,this.options.keySeparator,this.options.ignoreJSONStructure),r,s,{...n,...t,interpolationkey:o})};this.resetRegExp();const h=n?.missingInterpolationHandler||this.options.missingInterpolationHandler,p=void 0!==n?.interpolation?.skipOnVariables?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>A(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?A(this.escape(e)):A(e)}].forEach((t=>{for(l=0;r=t.regex.exec(e);){const s=r[1].trim();if(a=u(s),void 0===a)if("function"==typeof h){const t=h(e,r,n);a=i(t)?t:""}else if(n&&Object.prototype.hasOwnProperty.call(n,s))a="";else{if(p){a=r[0];continue}this.logger.warn(`missed to pass in variable ${s} for interpolating ${e}`),a=""}else i(a)||this.useRawValueToEscape||(a=o(a));const c=t.safeValue(a);if(e=e.replace(r[0],c),p?(t.regex.lastIndex+=a.length,t.regex.lastIndex-=r[0].length):t.regex.lastIndex=0,l++,l>=this.maxReplaces)break}})),e}nest(e,t){let s,n,r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const l=(e,t)=>{const s=this.nestingOptionsSeparator;if(e.indexOf(s)<0)return e;const i=e.split(new RegExp(`${s}[ ]*{`));let n=`{${i[1]}`;e=i[0],n=this.interpolate(n,r);const o=n.match(/'/g),a=n.match(/"/g);((o?.length??0)%2==0&&!a||a.length%2!=0)&&(n=n.replace(/'/g,'"'));try{r=JSON.parse(n),t&&(r={...t,...r})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${s}${n}`}return r.defaultValue&&r.defaultValue.indexOf(this.prefix)>-1&&delete r.defaultValue,e};for(;s=this.nestingRegexp.exec(e);){let c=[];r={...a},r=r.replace&&!i(r.replace)?r.replace:r,r.applyPostProcessor=!1,delete r.defaultValue;let u=!1;if(-1!==s[0].indexOf(this.formatSeparator)&&!/{.*}/.test(s[1])){const e=s[1].split(this.formatSeparator).map((e=>e.trim()));s[1]=e.shift(),c=e,u=!0}if(n=t(l.call(this,s[1].trim(),r),r),n&&s[0]===e&&!i(n))return n;i(n)||(n=o(n)),n||(this.logger.warn(`missed to resolve ${s[1]} for nesting ${e}`),n=""),u&&(n=c.reduce(((e,t)=>this.format(e,t,a.lng,{...a,interpolationkey:s[1].trim()})),n.trim())),e=e.replace(s[0],n),this.regexp.lastIndex=0}return e}}const D=e=>{const t={};return(s,i,n)=>{let o=n;n&&n.interpolationkey&&n.formatParams&&n.formatParams[n.interpolationkey]&&n[n.interpolationkey]&&(o={...o,[n.interpolationkey]:void 0});const r=i+JSON.stringify(o);let a=t[r];return a||(a=e(b(i),n),t[r]=a),a(s)}};class I{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=S.create("formatter"),this.options=e,this.formats={number:D(((e,t)=>{const s=new Intl.NumberFormat(e,{...t});return e=>s.format(e)})),currency:D(((e,t)=>{const s=new Intl.NumberFormat(e,{...t,style:"currency"});return e=>s.format(e)})),datetime:D(((e,t)=>{const s=new Intl.DateTimeFormat(e,{...t});return e=>s.format(e)})),relativetime:D(((e,t)=>{const s=new Intl.RelativeTimeFormat(e,{...t});return e=>s.format(e,t.range||"day")})),list:D(((e,t)=>{const s=new Intl.ListFormat(e,{...t});return e=>s.format(e)}))},this.init(e)}init(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};this.formatSeparator=t.interpolation.formatSeparator||","}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=D(t)}format(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const n=t.split(this.formatSeparator);if(n.length>1&&n[0].indexOf("(")>1&&n[0].indexOf(")")<0&&n.find((e=>e.indexOf(")")>-1))){const e=n.findIndex((e=>e.indexOf(")")>-1));n[0]=[n[0],...n.splice(1,e)].join(this.formatSeparator)}return n.reduce(((e,t)=>{const{formatName:n,formatOptions:o}=(e=>{let t=e.toLowerCase().trim();const s={};if(e.indexOf("(")>-1){const i=e.split("(");t=i[0].toLowerCase().trim();const n=i[1].substring(0,i[1].length-1);"currency"===t&&n.indexOf(":")<0?s.currency||(s.currency=n.trim()):"relativetime"===t&&n.indexOf(":")<0?s.range||(s.range=n.trim()):n.split(";").forEach((e=>{if(e){const[t,...i]=e.split(":"),n=i.join(":").trim().replace(/^'+|'+$/g,""),o=t.trim();s[o]||(s[o]=n),"false"===n&&(s[o]=!1),"true"===n&&(s[o]=!0),isNaN(n)||(s[o]=parseInt(n,10))}}))}return{formatName:t,formatOptions:s}})(t);if(this.formats[n]){let t=e;try{const r=i?.formatParams?.[i.interpolationkey]||{},a=r.locale||r.lng||i.locale||i.lng||s;t=this.formats[n](e,a,{...o,...i,...r})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${n}`),e}),e)}}class V extends O{constructor(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=s,this.languageUtils=s.languageUtils,this.options=i,this.logger=S.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(s,i.backend,i)}queueLoad(e,t,s,i){const n={},o={},r={},a={};return e.forEach((e=>{let i=!0;t.forEach((t=>{const r=`${e}|${t}`;!s.reload&&this.store.hasResourceBundle(e,t)?this.state[r]=2:this.state[r]<0||(1===this.state[r]?void 0===o[r]&&(o[r]=!0):(this.state[r]=1,i=!1,void 0===o[r]&&(o[r]=!0),void 0===n[r]&&(n[r]=!0),void 0===a[t]&&(a[t]=!0)))})),i||(r[e]=!0)})),(Object.keys(n).length||Object.keys(o).length)&&this.queue.push({pending:o,pendingCount:Object.keys(o).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(n),pending:Object.keys(o),toLoadLanguages:Object.keys(r),toLoadNamespaces:Object.keys(a)}}loaded(e,t,s){const i=e.split("|"),n=i[0],o=i[1];t&&this.emit("failedLoading",n,o,t),!t&&s&&this.store.addResourceBundle(n,o,s,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&s&&(this.state[e]=0);const r={};this.queue.forEach((s=>{((e,t,s,i)=>{const{obj:n,k:o}=c(e,t,Object);n[o]=n[o]||[],n[o].push(s)})(s.loaded,[n],o),((e,t)=>{void 0!==e.pending[t]&&(delete e.pending[t],e.pendingCount--)})(s,e),t&&s.errors.push(t),0!==s.pendingCount||s.done||(Object.keys(s.loaded).forEach((e=>{r[e]||(r[e]={});const t=s.loaded[e];t.length&&t.forEach((t=>{void 0===r[e][t]&&(r[e][t]=!0)}))})),s.done=!0,s.errors.length?s.callback(s.errors):s.callback())})),this.emit("loaded",r),this.queue=this.queue.filter((e=>!e.done))}read(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.retryTimeout,o=arguments.length>5?arguments[5]:void 0;if(!e.length)return o(null,{});if(this.readingCalls>=this.maxParallelReads)return void this.waitingReads.push({lng:e,ns:t,fcName:s,tried:i,wait:n,callback:o});this.readingCalls++;const r=(r,a)=>{if(this.readingCalls--,this.waitingReads.length>0){const e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}r&&a&&i<this.maxRetries?setTimeout((()=>{this.read.call(this,e,t,s,i+1,2*n,o)}),n):o(r,a)},a=this.backend[s].bind(this.backend);if(2!==a.length)return a(e,t,r);try{const s=a(e,t);s&&"function"==typeof s.then?s.then((e=>r(null,e))).catch(r):r(null,s)}catch(e){r(e)}}prepareLoading(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),n&&n();i(e)&&(e=this.languageUtils.toResolveHierarchy(e)),i(t)&&(t=[t]);const o=this.queueLoad(e,t,s,n);if(!o.toLoad.length)return o.pending.length||n(),null;o.toLoad.forEach((e=>{this.loadOne(e)}))}load(e,t,s){this.prepareLoading(e,t,{},s)}reload(e,t,s){this.prepareLoading(e,t,{reload:!0},s)}loadOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const s=e.split("|"),i=s[0],n=s[1];this.read(i,n,"read",void 0,void 0,((s,o)=>{s&&this.logger.warn(`${t}loading namespace ${n} for language ${i} failed`,s),!s&&o&&this.logger.log(`${t}loaded namespace ${n} for language ${i}`,o),this.loaded(e,s,o)}))}saveMissing(e,t,s,i,n){let o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:()=>{};if(!this.services?.utils?.hasLoadedNamespace||this.services?.utils?.hasLoadedNamespace(t)){if(null!=s&&""!==s){if(this.backend?.create){const a={...o,isUpdate:n},l=this.backend.create.bind(this.backend);if(l.length<6)try{let n;n=5===l.length?l(e,t,s,i,a):l(e,t,s,i),n&&"function"==typeof n.then?n.then((e=>r(null,e))).catch(r):r(null,n)}catch(e){r(e)}else l(e,t,s,i,r,a)}e&&e[0]&&this.store.addResource(e[0],t,s,i)}}else this.logger.warn(`did not save key "${s}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")}}const F=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if("object"==typeof e[1]&&(t=e[1]),i(e[1])&&(t.defaultValue=e[1]),i(e[2])&&(t.tDescription=e[2]),"object"==typeof e[2]||"object"==typeof e[3]){const s=e[3]||e[2];Object.keys(s).forEach((e=>{t[e]=s[e]}))}return t},interpolation:{escapeValue:!0,format:e=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),M=e=>(i(e.ns)&&(e.ns=[e.ns]),i(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),i(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs?.indexOf?.("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),"boolean"==typeof e.initImmediate&&(e.initAsync=e.initImmediate),e),U=()=>{};class H extends O{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;var s;if(super(),this.options=M(e),this.services={},this.logger=S,this.modules={external:[]},s=this,Object.getOwnPropertyNames(Object.getPrototypeOf(s)).forEach((e=>{"function"==typeof s[e]&&(s[e]=s[e].bind(s))})),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout((()=>{this.init(e,t)}),0)}}init(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,"function"==typeof t&&(s=t,t={}),!t.defaultNS&&!1!==t.defaultNS&&t.ns&&(i(t.ns)?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));const o=F();this.options={...o,...this.options,...M(t)},this.options.interpolation={...o.interpolation,...this.options.interpolation},void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator);const r=e=>e?"function"==typeof e?new e:e:null;if(!this.options.isClone){let t;this.modules.logger?S.init(r(this.modules.logger),this.options):S.init(null,this.options),t=this.modules.formatter?this.modules.formatter:I;const s=new j(this.options);this.store=new w(this.options.resources,this.options);const i=this.services;i.logger=S,i.resourceStore=this.store,i.languageUtils=s,i.pluralResolver=new N(s,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!t||this.options.interpolation.format&&this.options.interpolation.format!==o.interpolation.format||(i.formatter=r(t),i.formatter.init(i,this.options),this.options.interpolation.format=i.formatter.format.bind(i.formatter)),i.interpolator=new T(this.options),i.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},i.backendConnector=new V(r(this.modules.backend),i.resourceStore,i,this.options),i.backendConnector.on("*",(function(t){for(var s=arguments.length,i=new Array(s>1?s-1:0),n=1;n<s;n++)i[n-1]=arguments[n];e.emit(t,...i)})),this.modules.languageDetector&&(i.languageDetector=r(this.modules.languageDetector),i.languageDetector.init&&i.languageDetector.init(i,this.options.detection,this.options)),this.modules.i18nFormat&&(i.i18nFormat=r(this.modules.i18nFormat),i.i18nFormat.init&&i.i18nFormat.init(this)),this.translator=new P(this.services,this.options),this.translator.on("*",(function(t){for(var s=arguments.length,i=new Array(s>1?s-1:0),n=1;n<s;n++)i[n-1]=arguments[n];e.emit(t,...i)})),this.modules.external.forEach((e=>{e.init&&e.init(this)}))}if(this.format=this.options.interpolation.format,s||(s=U),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&"dev"!==e[0]&&(this.options.lng=e[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach((t=>{this[t]=function(){return e.store[t](...arguments)}}));["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach((t=>{this[t]=function(){return e.store[t](...arguments),e}}));const a=n(),l=()=>{const e=(e,t)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),a.resolve(t),s(e,t)};if(this.languages&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?l():setTimeout(l,0),a}loadResources(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:U;const s=i(e)?e:this.language;if("function"==typeof e&&(t=e),!this.options.resources||this.options.partialBundledLanguages){if("cimode"===s?.toLowerCase()&&(!this.options.preload||0===this.options.preload.length))return t();const e=[],i=t=>{if(!t)return;if("cimode"===t)return;this.services.languageUtils.toResolveHierarchy(t).forEach((t=>{"cimode"!==t&&e.indexOf(t)<0&&e.push(t)}))};if(s)i(s);else{this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach((e=>i(e)))}this.options.preload?.forEach?.((e=>i(e))),this.services.backendConnector.load(e,this.options.ns,(e=>{e||this.resolvedLanguage||!this.language||this.setResolvedLanguage(this.language),t(e)}))}else t(null)}reloadResources(e,t,s){const i=n();return"function"==typeof e&&(s=e,e=void 0),"function"==typeof t&&(s=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),s||(s=U),this.services.backendConnector.reload(e,t,(e=>{i.resolve(),s(e)})),i}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&L.addPostProcessor(e),"formatter"===e.type&&(this.modules.formatter=e),"3rdParty"===e.type&&this.modules.external.push(e),this}setResolvedLanguage(e){if(e&&this.languages&&!(["cimode","dev"].indexOf(e)>-1))for(let e=0;e<this.languages.length;e++){const t=this.languages[e];if(!(["cimode","dev"].indexOf(t)>-1)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}}changeLanguage(e,t){var s=this;this.isLanguageChangingTo=e;const o=n();this.emit("languageChanging",e);const r=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},a=(e,i)=>{i?(r(i),this.translator.changeLanguage(i),this.isLanguageChangingTo=void 0,this.emit("languageChanged",i),this.logger.log("languageChanged",i)):this.isLanguageChangingTo=void 0,o.resolve((function(){return s.t(...arguments)})),t&&t(e,(function(){return s.t(...arguments)}))},l=t=>{e||t||!this.services.languageDetector||(t=[]);const s=i(t)?t:this.services.languageUtils.getBestMatchFromCodes(t);s&&(this.language||r(s),this.translator.language||this.translator.changeLanguage(s),this.services.languageDetector?.cacheUserLanguage?.(s)),this.loadResources(s,(e=>{a(e,s)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?0===this.services.languageDetector.detect.length?this.services.languageDetector.detect().then(l):this.services.languageDetector.detect(l):l(e):l(this.services.languageDetector.detect()),o}getFixedT(e,t,s){var n=this;const o=function(e,t){let i;if("object"!=typeof t){for(var r=arguments.length,a=new Array(r>2?r-2:0),l=2;l<r;l++)a[l-2]=arguments[l];i=n.options.overloadTranslationOptionHandler([e,t].concat(a))}else i={...t};i.lng=i.lng||o.lng,i.lngs=i.lngs||o.lngs,i.ns=i.ns||o.ns,""!==i.keyPrefix&&(i.keyPrefix=i.keyPrefix||s||o.keyPrefix);const c=n.options.keySeparator||".";let u;return u=i.keyPrefix&&Array.isArray(e)?e.map((e=>`${i.keyPrefix}${c}${e}`)):i.keyPrefix?`${i.keyPrefix}${c}${e}`:e,n.t(u,i)};return i(e)?o.lng=e:o.lngs=e,o.ns=t,o.keyPrefix=s,o}t(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.translator?.translate(...t)}exists(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return this.translator?.exists(...t)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const s=t.lng||this.resolvedLanguage||this.languages[0],i=!!this.options&&this.options.fallbackLng,n=this.languages[this.languages.length-1];if("cimode"===s.toLowerCase())return!0;const o=(e,t)=>{const s=this.services.backendConnector.state[`${e}|${t}`];return-1===s||0===s||2===s};if(t.precheck){const e=t.precheck(this,o);if(void 0!==e)return e}return!!this.hasResourceBundle(s,e)||(!(this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages))||!(!o(s,e)||i&&!o(n,e)))}loadNamespaces(e,t){const s=n();return this.options.ns?(i(e)&&(e=[e]),e.forEach((e=>{this.options.ns.indexOf(e)<0&&this.options.ns.push(e)})),this.loadResources((e=>{s.resolve(),t&&t(e)})),s):(t&&t(),Promise.resolve())}loadLanguages(e,t){const s=n();i(e)&&(e=[e]);const o=this.options.preload||[],r=e.filter((e=>o.indexOf(e)<0&&this.services.languageUtils.isSupportedCode(e)));return r.length?(this.options.preload=o.concat(r),this.loadResources((e=>{s.resolve(),t&&t(e)})),s):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language)),!e)return"rtl";const t=this.services?.languageUtils||new j(F());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(t.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){return new H(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}cloneInstance(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:U;const s=e.forkResourceStore;s&&delete e.forkResourceStore;const i={...this.options,...e,isClone:!0},n=new H(i);void 0===e.debug&&void 0===e.prefix||(n.logger=n.logger.clone(e));return["store","services","language"].forEach((e=>{n[e]=this[e]})),n.services={...this.services},n.services.utils={hasLoadedNamespace:n.hasLoadedNamespace.bind(n)},s&&(n.store=new w(this.store.data,i),n.services.resourceStore=n.store),n.translator=new P(n.services,i),n.translator.on("*",(function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];n.emit(e,...s)})),n.init(i,t),n.translator.options=i,n.translator.backendConnector.services.utils={hasLoadedNamespace:n.hasLoadedNamespace.bind(n)},n}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const K=H.createInstance();K.createInstance=H.createInstance;K.createInstance,K.dir,K.init,K.loadResources,K.reloadResources,K.use,K.changeLanguage,K.getFixedT,K.t,K.exists,K.setDefaultNamespace,K.hasLoadedNamespace,K.loadNamespaces,K.loadLanguages}},function(e){var t;t=51250,e(e.s=t)}]); //# sourceMappingURL=i18n_init-115e8b97572e00d91d6f.js.map //]]> </script> <script src="https://cdn.theconversation.com/static/tc/runtime-8563a1641acaeb567def.js"></script> <script type="text/javascript" data-vendor="c:smartocto-GJ7CA7CP"> var _ain = { access_level: "free", article_type: "analysis", authors: "University of Pretoria", id: "2743", maincontent: ".content-body", postid: "214970", pubdate: "2023-11-05T09:27:02Z", reader_type: "anonymous", sections: "africa>Environment + Energy", tags: "Climate change, Soil, Irrigation, South Africa, Pretoria, RandD, Urban centres, Building facades, Traditional African Vegetables", title: "Growing African vegetables on buildings can save space and feed cities – new study", }; (function (d, s) { var sf = d.createElement(s); sf.type = 'text/javascript'; sf.async = true; sf.src = (('https:' == d.location.protocol) ? 'https://d7d3cf2e81d293050033-3dfc0615b0fd7b49143049256703bfce.ssl.cf1.rackcdn.com' : 'http://t.contentinsights.com') + '/stf.js'; var t = d.getElementsByTagName(s)[0]; t.parentNode.insertBefore(sf, t); })(document, 'script'); </script> <script>window.tentacles = { apiToken: "zu0fth1pwaw4xbz53mh0yl3ik80ndct1" };</script> <script src="https://tentacles.smartocto.com/ten/tentacle.js" type="text/javascript" data-vendor="c:smartocto-GJ7CA7CP"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10