CINXE.COM

Worried about housing shortages and soaring prices? Your community’s zoning laws could be part of the problem

<!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="More than one-third of U.S. households pay more than 30% of their income for housing." /> <meta name="pubdate" content="20240417" /> <meta name="commissioning-region" content="us" /> <meta name="searchtype" content="analysis" /> <meta name="original-source" content="https://theconversation.com/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" /> <meta name="news_keywords" content="Affordable housing, Gentrification, Housing, Housing costs, SciLine" /> <meta name="author" content="Jessica Trounstine" /> <meta name="institution" content="Vanderbilt University" /> <meta property="og:site_name" content="The Conversation" /> <meta property="og:title" content="Worried about housing shortages and soaring prices? Your community’s zoning laws could be part of the problem" /> <meta property="og:description" content="More than one-third of U.S. households pay more than 30% of their income for housing." /> <meta property="og:type" content="article" /> <meta property="og:image" content="https://images.theconversation.com/files/585957/original/file-20240403-18-9ib6o8.jpg?ixlib=rb-4.1.0&amp;rect=0%2C77%2C5192%2C2592&amp;q=45&amp;auto=format&amp;w=1356&amp;h=668&amp;fit=crop" /> <meta property="og:updated_time" content="2024-05-22T09:06:47Z" /> <meta property="og:url" content="http://theconversation.com/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" /> <meta property="article:publisher" content="https://facebook.com/theConversationUS" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@ConversationUS" /> <link rel="canonical" href="https://theconversation.com/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" /> <meta property="fb:pages" content="1453112561595308"> <script type="application/javascript"> window.PAGE_CONFIG = { content_id: 227119, content_slug: 'worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119', comments_closed_at: '2024-04-17T12:17:16Z', subscriptionOptions: {}, promos_context: { topic_ids: [376, 3413, 8659, 28114, 118755, 155453, 155454, 155455, 155456], section_ids: [3232, 3237], collaborator_ids: [180511, 950960, 1524655], content_language: 'en', } } </script> <script> window.GTM = window.GTM || {} window.GTM.pageType = "article" window.GTM.ArticleData = {"article_id":"227119","article_tags":"Affordable housing|Gentrification|Housing|Housing costs|Housing shortages|Land-use regulations|Rising home prices|SciLine|Zoning laws","article_type":"free","author_id":"1524655","author_name":"Jessica Trounstine","content_category":"Health|Home","feature_type":"analysis","headline":"worried about housing shortages and soaring prices your community s zoning laws could be part of the problem","publish_date":"2024-04-17","publish_time":"12:17"} </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 39bb155e1fcf00099c87c61b2593cfc93847fdf7 --> <title>Worried about housing shortages and soaring prices? Your community’s zoning laws could be part of the problem</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":"us","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=%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119">Sign up as a reader</a> </li> <li class="reader-signin"> <a href="/sign_in?return_to=%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119">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="227119" itemscope itemtype="http://schema.org/Article"> <figure class="magazine"> <div class="image" style="background-image: url(https://images.theconversation.com/files/585957/original/file-20240403-18-9ib6o8.jpg?ixlib=rb-4.1.0&amp;rect=0%2C77%2C5192%2C2592&amp;q=45&amp;auto=format&amp;w=1356&amp;h=668&amp;fit=crop);"> <div class="placeholder-container" style="--aspect-ratio-percent:55.93749999999999%;--background-color:#464a25"><img alt="A bird&#39;s-eye view of a relatively new suburban neighborhood." class="lazyloaded" src="https://images.theconversation.com/files/585957/original/file-20240403-18-9ib6o8.jpg?ixlib=rb-4.1.0&amp;rect=0%2C7%2C5200%2C2903&amp;q=20&amp;auto=format&amp;w=320&amp;fit=clip&amp;dpr=2&amp;usm=12&amp;cs=strip" data-id="585957" itemprop="image"></div> </div> <div class="wrapper"> <figcaption> Many cities prohibit duplexes and high-rises. Although residents enjoy the extra space, it contributes to housing costs. <span class="attribution"><a class="source" href="https://www.gettyimages.com/detail/news-photo/modern-row-houses-in-suburbs-of-delaware-seen-from-elevated-news-photo/1558576007?adppopup=true">Joe Sohm/Visions of America/Universal Images Group via Getty Images</a></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> Worried about housing shortages and soaring prices? Your community’s zoning laws could be part of the&nbsp;problem </strong> </h1> </div> </div> <div class="timestamps"> <time datetime="2024-04-17T12:17:16Z" itemprop="datePublished" content="2024-04-17T12:17:16Z">Published: April 17, 2024 1.17pm BST</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">Jessica Trounstine</span>, <em class="institution_name">Vanderbilt University</em> </a> </div> <div class="content-authors-group"> <h3 class="border">Author</h3> <ol> <li class="vcard" id="author-568867" itemprop="author" itemscope="" itemtype="http://schema.org/Person"> <a rel="author" itemprop="url" href="/profiles/jessica-trounstine-1524655"> <img alt="" class="lazyload" data-src="https://cdn.theconversation.com/avatars/1524655/width170/image-20240403-18-6i2w5d.jpg" src="https://cdn.theconversation.com/static/tc/author/width170_default-bea415b3a0223821a698f6e3f6d5ab99.jpg" itemprop="image"> <span class="fn author-name" itemprop="name"> Jessica Trounstine </span> </a> <p class="role"> Professor of Political Science, Vanderbilt University </p> </li> </ol> </div> </section> <section class="content-disclosure-statement"> <h3 class="border">Disclosure statement</h3> <p><span>Jessica Trounstine receives funding from the Carnegie Corporation of New York. </span></p> </section> <section class="content-partners"> <h3 class="border">Partners</h3> <p class="disclosure-logo clearfix"><a class="logo" href="/institutions/vanderbilt-university-1293"><picture><source srcset="https://images.theconversation.com/partners/765/logos/logo-1664988303.png?ixlib=rb-4.1.0&amp;q=45&amp;auto=format&amp;w=170&amp;h=170" media="(min-width:600px)"></source><img alt="Vanderbilt University" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" /></picture></a></p> <p class="funding-statement"><a href="https://theconversation.com/institutions/vanderbilt-university-1293">Vanderbilt University</a> provides funding as a founding partner of The Conversation US.</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="227119" target="_blank" rel="noopener" href="mailto:?subject=Worried%20about%20housing%20shortages%20and%20soaring%20prices%3F%20Your%20community%E2%80%99s%20zoning%20laws%20could%20be%20part%20of%20the%20problem%20%E2%80%94%20The%20Conversation&amp;body=Hi.%20I%20found%20an%20article%20that%20you%20might%20like%3A%20%22Worried%20about%20housing%20shortages%20and%20soaring%20prices%3F%20Your%20community%E2%80%99s%20zoning%20laws%20could%20be%20part%20of%20the%20problem%22%20%E2%80%94%20https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119"><i class="icon-email"></i> <span>Email</span></a> </div> <div class="twitter"> <a class="twitter-button" data-url="https://theconversation.com/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" data-id="227119" target="_blank" rel="noopener" href="http://twitter.com/intent/tweet?text=Worried+about+housing+shortages+and+soaring+prices%3F+Your+community%E2%80%99s+zoning+laws+could+be+part+of+the+problem&amp;url=https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119%3Futm_source%3Dtwitter%26utm_medium%3Dbylinetwitterbutton&amp;utm_campaign=none&amp;via=ConversationUS"><i class="icon-twitter"></i> <span>X (Twitter)</span></a> </div> <div class="facebook"> <a class="facebook-button" data-url="https://theconversation.com/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" data-id="227119" target="_blank" rel="noopener" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119%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/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" data-id="227119" target="_blank" rel="noopener" href="http://www.linkedin.com/shareArticle?mini=true&amp;source=The+Conversation&amp;summary=_Local+governments+often+try+to+combat+housing+costs+and+create+affordable+housing+by+passing+legislation+that+%5Bchanges+current+zoning+and+land-use+regulations%5D%28https%3A%2F%2Fwww.brookings.edu%2Farticles%2Fi...&amp;title=Worried+about+housing+shortages+and+soaring+prices%3F+Your+community%E2%80%99s+zoning+laws+could+be+part+of+the+problem&amp;url=https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119%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/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" data-action="share/whatsapp/share" data-id="227119" target="_blank" rel="noopener" href="whatsapp://send?text=Worried+about+housing+shortages+and+soaring+prices%3F+Your+community%E2%80%99s+zoning+laws+could+be+part+of+the+problem+https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119%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/worried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119" data-action="share/fb-messenger/share" data-id="227119" target="_blank" rel="noopener" href="fb-messenger://share?link=https%3A%2F%2Ftheconversation.com%2Fworried-about-housing-shortages-and-soaring-prices-your-communitys-zoning-laws-could-be-part-of-the-problem-227119%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>Local governments often try to combat housing costs and create affordable housing by passing legislation that <a href="https://www.brookings.edu/articles/in-california-statewide-housing-reforms-brush-against-local-resistance/">changes current zoning and land-use regulations</a>. But the changes are not without controversy. SciLine interviewed <a href="https://as.vanderbilt.edu/political-science/bio/jessica-trounstine/">Jessica Trounstine</a>, the centennial chair and professor of political science at Vanderbilt University, who discussed why rising housing prices and shortages are happening at the same time, how some zoning policies still lead to segregation, and why many zoning changes that are environmentally friendly are unpopular with the public.</em> </p> <figure> <div class="placeholder-container" style="--aspect-ratio-percent:56.25%;--background-color:#fff"><iframe class="lazyload" data-src="https://player.vimeo.com/video/927184307" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" width="100%" height="400"></iframe></div> <figcaption><span class="caption">Jessica Trounstine discusses zoning and land-use reforms.</span></figcaption> </figure> <p><em>The Conversation has collaborated with SciLine to bring you highlights from the discussion, which have been edited for brevity and clarity.</em></p> <p><strong>What’s causing the current housing shortages and high housing costs in the U.S.?</strong></p> <p><strong>Jessica Trounstine:</strong> Most metropolitan areas have seen <a href="https://www.cnn.com/2024/03/21/economy/existing-home-sales-february/index.html">housing shortages and skyrocketing prices</a> over the last decade, both for rentals and for mortgages. And as those prices have gone up, tax assessments <a href="https://www.corelogic.com/intelligence/property-taxes-balloon-after-pandemic-home-price-gains/#:%7E">have also gone up</a>, leading to higher property tax bills. So the total amount of money that residents are paying for their housing is higher than it used to be. </p><div class="slot clear" data-id="17"> <div class="inline-promos-skeleton"> <h5></h5> <button></button> </div> </div> <p>When households pay more than 30% of their income toward housing, the census calls those households “cost burdened.” And according to some recent data, more than <a href="https://www.jchs.harvard.edu/blog/more-42-million-us-households-were-cost-burdened-2022#:%7E">a third of households in the U.S. are cost burdened</a>, and the figures are even higher for renters than for owners. In some metropolitan areas, greater than <a href="https://www.lendingtree.com/home/mortgage/largest-metros-ranked-by-share-of-housing-cost-burdened-households/">50% of renters are cost burdened</a>.</p> <p><strong>How do local governments influence housing availability?</strong></p> <p><strong>Jessica Trounstine:</strong> Local governments can make it difficult to build housing, which contributes in a fundamental way to housing shortages and skyrocketing prices. They do things like <a href="https://calmatters.org/housing/2024/01/impact-fees-supreme-court/">charge high fees for development</a> or put in place cumbersome review processes. They can <a href="https://apps.bostonglobe.com/2023/10/special-projects/spotlight-boston-housing/brookline-identity-crisis/">implement historical overlays</a> or <a href="https://www.mass.gov/doc/smart-growthsmart-energy-slideshowsopen-space-design-osdnatural-resource-protection-zoning-nrpz/download">create open-space requirements</a>. </p> <p>But the most important way local governments affect housing shortages is by <a href="https://www.mercurynews.com/2023/08/08/elias-californias-rebellion-against-housing-density-mandates-has-begun/">prohibiting density</a> and allowing only <a href="https://theconversation.com/americas-love-affair-with-the-single-family-house-is-cooling-but-it-wont-be-a-quick-breakup-120719">single-family, detached units to be built</a>. Many cities explicitly prohibit multifamily housing. Anything from duplexes to high-rises might be prohibited by a city’s zoning or regulatory code.</p> <p>They can also do things like have requirements for large setbacks from the street. They can enact minimum lot sizes for every unit. Because higher density and smaller housing units are less expensive, these regulations that limit density are <a href="https://www.nahro.org/journal_article/rethinking-zoning-to-increase-affordable-housing/">correlated with higher housing costs</a>.</p> <p><strong>Many local land-use regulations have been in effect for a long time. Why are they causing such problems now?</strong></p> <p><strong>Jessica Trounstine:</strong> It’s true that these regulations were <a href="https://reason.com/2023/06/10/a-brief-history-of-single-family-zoning/">first used 100 years ago</a>, but the current pattern of restrictive zoning did not really take off across the U.S. until the 1970s. Land-use regulations tend to get layered over time. Once a local government enacts land-use regulations, they don’t tend to roll them back. So over time, land-use regulations frequently get more and more exclusionary. </p> <p>At the same time, population has <a href="https://www.census.gov/newsroom/press-releases/2024/population-estimates-more-counties-population-gains-2023.html#:%7E">increased in major metropolitan areas</a> for a variety of different reasons. But <a href="https://www.newsweek.com/us-housing-shortage-millions-single-family-homes-missing-construction-gap-population-growth-1874020">housing development has slowed</a>. The market gets squeezed over time. It is only in recent decades that we’ve really seen the confluence of all of these events, so that even the price of housing for middle-income families can be very high.</p> <p><strong>How have zoning and land-use policies contributed to racial segregation?</strong></p> <p><strong>Jessica Trounstine:</strong> Segregation for many decades was driven predominantly by private market decisions: <a href="https://doi.org/10.1177/23780231231197024">racial steering</a>, blockbusting, <a href="https://www.npr.org/2021/11/17/1049052531/racial-covenants-housing-discrimination">restrictive covenants</a>, and violence, even, to defend the color line. But those tactics became at least technically illegal in the middle of the 20th century through court cases, state laws and the <a href="https://www.hud.gov/program_offices/fair_housing_equal_opp/aboutfheo/history">federal Fair Housing Act of 1968</a>.</p> <p>Restrictive zoning essentially arose to <a href="https://nlihc.org/resource/restrictive-zoning-and-political-opposition-development-linked-high-housing-costs-and">take the place of these kinds of tactics</a>. The U.S. is much more segregated today than it would be <a href="https://doi.org/10.1017/S0003055419000844">if it weren’t for restrictive zoning</a>. On top of that, restrictive zoning freezes in place segregation patterns that were created by overt racist actions decades ago. We are about twice as segregated as we would otherwise be if we didn’t have these kinds of regulations in place. </p> <p><strong>What strategies can municipalities use to address housing shortages and segregation?</strong></p> <p><strong>Jessica Trounstine:</strong> They can think about having <a href="https://streets.mn/2015/12/15/chart-of-the-day-housing-types-for-different-us-cities/">all kinds of housing in every neighborhood</a> – all forms of housing to appeal to different kinds of people at different income levels. </p> <p>They can do things like eliminate parking minimums and expand height restrictions. Even more dramatically, they can create public funds for low-income developments. </p> <figure> <div class="placeholder-container" style="--aspect-ratio-percent:56.25%;--background-color:#fff"><iframe class="lazyload" data-src="https://www.youtube.com/embed/4ngelr9h2jM?wmode=transparent&amp;start=0" frameborder="0" allowfullscreen="" width="100%" height="400"></iframe></div> <figcaption><span class="caption">Racial covenants are intended to keep people of color out of a community.</span></figcaption> </figure> <p><strong>What strategies make zoning and land-use reforms more effective?</strong></p> <p><strong>Jessica Trounstine:</strong> No single reform can work on its own. Simply allowing duplexes to be built is frequently not enough. But we do know that packages of reforms can work together. </p> <p>You can permit duplexes but also be attentive to floor-area ratios and minimum lot sizes at the same time. And addressing all of these different regulatory restrictions in some way can expand opportunity in the housing market. There is also evidence that something happening in California <a href="https://www.archpaper.com/2023/08/california-affordable-housing-boom-builders-remedy-law-tested-local-developers/#google_vignette">called “the builders remedy”</a> is working to increase development. It allows developers to overrule, essentially, local regulations because of state-level policy. </p> <p>Some of my work also shows that <a href="https://doi.org/10.1017/S0003055419000844">lawsuits can be effective</a> at addressing segregation patterns and long-standing regulatory constriction in the housing market.</p> <p><strong>How do zoning and land-use decisions affect the environment?</strong></p> <p><strong>Jessica Trounstine:</strong> Sprawl, or <a href="https://doi.org/10.2105/AJPH.2009.182501">expanding development farther and farther away</a> from population density, is in itself harmful to the environment. It causes long commutes and changes the built environment in ways that can be costly for the environment. Increasing density, pulling people back toward the center, is <a href="https://archive.curbed.com/2018/12/11/18136188/city-density-climate-change-zoning">an environmentally friendly kind of policy</a>. </p> <p><strong>What is the connection between zoning reforms and gentrification?</strong></p> <p><strong>Jessica Trounstine:</strong> It is true, historically, that when neighborhoods witness economic and racial transition, marginalized communities <a href="https://www.vox.com/22629826/gentrification-definition-housing-racism-segregation-cities">are harmed in the process</a>. So, one response to the concerns about gentrification is to ensure that marginalized communities are at the table and participating in the conversations about the built environment and about development. </p> <p>What’s not clear in the gentrification research more generally is whether new development <a href="https://doi.org/10.3386/w26170">causes gentrification</a>. And so before we limit development in order to prevent gentrification, we need more research and a better understanding of the interaction between those two mechanisms.</p> <p><em>Watch the <a href="https://www.sciline.org/social-sciences/zoning-and-land-use-reforms/">full interview</a> to hear more.</em></p> <p><em><a href="https://www.sciline.org/">SciLine</a> is a free service based at the nonprofit American Association for the Advancement of Science that helps journalists include scientific evidence and experts in their news stories.</em></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/housing-376">Housing</a> </li> <li class="topic-list-item"> <a href="/topics/affordable-housing-3413">Affordable housing</a> </li> <li class="topic-list-item"> <a href="/topics/gentrification-8659">Gentrification</a> </li> <li class="topic-list-item"> <a href="/topics/housing-costs-28114">Housing costs</a> </li> <li class="topic-list-item"> <a href="/topics/sciline-118755">SciLine</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="227119"></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/351283348/logo-1520549009.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/351283348-deputy-director-of-medical-student-education-at-university-of-melbourne?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Deputy Director of Medical Student Education</a></h5> </li> <li class="with-logo"> <img alt="" class="lazyload" data-src="https://jobs.theconversation.com/uploads/job/logo/351070310/TC_Horizontal-ENG__1_.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/351070310-public-policy-editor-at-the-conversation-au-nz?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Public Policy Editor</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/348233907/New_Logo.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> <h5><a href="https://jobs.theconversation.com/jobs/348233907-commissioning-editor-nigeria-at-the-conversation-africa?utm_source=theconversation.com&amp;utm_medium=website&amp;utm_campaign=article">Commissioning Editor Nigeria</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/227119/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-cf7bae48ba0cf801b6fd.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":"39bb155e1fcf00099c87c61b2593cfc93847fdf7","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 R}});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 g=i.backends[a+1];g&&g.read&&l(g,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 g(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 d=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=g(g(g({},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 d(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 m=s(62046),y=s(80030),v=s(82284),b=[],x=b.forEach,k=b.slice;function S(e,t){if(t&&"object"===(0,v.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,v.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 P(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 R=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,m.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,y.A)("/no_js_locale?message=".concat(e[0]));try{i()}catch(e){throw(0,y.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)&&P(t.prototype,s),i&&P(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 q}});const i={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class n{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||i,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,i){return i&&!this.debug?null:("string"==typeof e[0]&&(e[0]=`${s}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new n(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return(e=e||this.options).prefix=e.prefix||this.prefix,new n(this.logger,e)}}var o=new n;class r{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])}))}}}const a=()=>{let e,t;const s=new Promise(((s,i)=>{e=s,t=i}));return s.resolve=e,s.reject=t,s},l=e=>null==e?"":""+e,c=/###/g,u=e=>e&&e.indexOf("###")>-1?e.replace(c,"."):e,h=e=>!e||"string"==typeof e,p=(e,t,s)=>{const i="string"!=typeof t?t:t.split(".");let n=0;for(;n<i.length-1;){if(h(e))return{};const t=u(i[n]);!e[t]&&s&&(e[t]=new s),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++n}return h(e)?{}:{obj:e,k:u(i[n])}},g=(e,t,s)=>{const{obj:i,k:n}=p(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=p(e,r,Object);for(;void 0===a.obj&&r.length;)o=`${r[r.length-1]}.${o}`,r=r.slice(0,r.length-1),a=p(e,r,Object),a&&a.obj&&void 0!==a.obj[`${a.k}.${o}`]&&(a.obj=void 0);a.obj[`${a.k}.${o}`]=s},d=(e,t)=>{const{obj:s,k:i}=p(e,t);if(s)return s[i]},f=(e,t,s)=>{for(const i in t)"__proto__"!==i&&"constructor"!==i&&(i in e?"string"==typeof e[i]||e[i]instanceof String||"string"==typeof t[i]||t[i]instanceof String?s&&(e[i]=t[i]):f(e[i],t[i],s):e[i]=t[i]);return e},m=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var y={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const v=e=>"string"==typeof e?e.replace(/[&<>"'\/]/g,(e=>y[e])):e;const b=[" ",",","?","!",";"],x=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),k=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},S=e=>e&&e.replace("_","-");class O extends r{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 i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const n=void 0!==i.keySeparator?i.keySeparator:this.options.keySeparator,o=void 0!==i.ignoreJSONStructure?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let r;e.indexOf(".")>-1?r=e.split("."):(r=[e,t],s&&(Array.isArray(s)?r.push(...s):"string"==typeof s&&n?r.push(...s.split(n)):r.push(s)));const a=d(this.data,r);return!a&&!t&&!s&&e.indexOf(".")>-1&&(e=r[0],t=r[1],s=r.slice(2).join(".")),a||!o||"string"!=typeof s?a:k(this.data&&this.data[e]&&this.data[e][t],s,n)}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),g(this.data,r,i),n.silent||this.emit("added",e,t,s,i)}addResources(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(const i in s)("string"==typeof s[i]||Array.isArray(s[i]))&&this.addResource(e,t,i,s[i],{silent:!0});i.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=d(this.data,r)||{};o.skipCopy||(s=JSON.parse(JSON.stringify(s))),i?f(a,s,n):a={...a,...s},g(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),"v1"===this.options.compatibilityAPI?{...this.getResource(e,t)}: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 w={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,s,i,n){return e.forEach((e=>{this.processors[e]&&(t=this.processors[e].process(t,s,i,n))})),t}};const L={};class P extends r{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=o.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 s&&void 0!==s.res}extractFromKey(e,t){let s=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===s&&(s=":");const i=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator;let n=t.ns||this.options.defaultNS||[];const o=s&&e.indexOf(s)>-1,r=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||((e,t,s)=>{t=t||"",s=s||"";const i=b.filter((e=>t.indexOf(e)<0&&s.indexOf(e)<0));if(0===i.length)return!0;const n=x.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,i));if(o&&!r){const t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:n};const o=e.split(s);(s!==i||s===i&&this.options.ns.indexOf(o[0])>-1)&&(n=o.shift()),e=o.join(i)}return"string"==typeof n&&(n=[n]),{key:e,namespaces:n}}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 i=void 0!==t.returnDetails?t.returnDetails:this.options.returnDetails,n=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,{key:o,namespaces:r}=this.extractFromKey(e[e.length-1],t),a=r[r.length-1],l=t.lng||this.language,c=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(l&&"cimode"===l.toLowerCase()){if(c){const e=t.nsSeparator||this.options.nsSeparator;return i?{res:`${a}${e}${o}`,usedKey:o,exactUsedKey:o,usedLng:l,usedNS:a,usedParams:this.getUsedParamsDetails(t)}:`${a}${e}${o}`}return i?{res:o,usedKey:o,exactUsedKey:o,usedLng:l,usedNS:a,usedParams:this.getUsedParamsDetails(t)}:o}const u=this.resolve(e,t);let h=u&&u.res;const p=u&&u.usedKey||o,g=u&&u.exactUsedKey||o,d=Object.prototype.toString.apply(h),f=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays,m=!this.i18nFormat||this.i18nFormat.handleAsObject;if(m&&h&&("string"!=typeof h&&"boolean"!=typeof h&&"number"!=typeof h)&&["[object Number]","[object Function]","[object RegExp]"].indexOf(d)<0&&("string"!=typeof f||!Array.isArray(h))){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(p,h,{...t,ns:r}):`key '${o} (${this.language})' returned an object instead of string.`;return i?(u.res=e,u.usedParams=this.getUsedParamsDetails(t),u):e}if(n){const e=Array.isArray(h),s=e?[]:{},i=e?g:p;for(const e in h)if(Object.prototype.hasOwnProperty.call(h,e)){const o=`${i}${n}${e}`;s[e]=this.translate(o,{...t,joinArrays:!1,ns:r}),s[e]===o&&(s[e]=h[e])}h=s}}else if(m&&"string"==typeof f&&Array.isArray(h))h=h.join(f),h&&(h=this.extendTranslation(h,e,t,s));else{let i=!1,r=!1;const c=void 0!==t.count&&"string"!=typeof t.count,p=P.hasDefaultValue(t),g=c?this.pluralResolver.getSuffix(l,t.count,t):"",d=t.ordinal&&c?this.pluralResolver.getSuffix(l,t.count,{ordinal:!1}):"",f=c&&!t.ordinal&&0===t.count&&this.pluralResolver.shouldUseIntlApi(),m=f&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${g}`]||t[`defaultValue${d}`]||t.defaultValue;!this.isValidLookup(h)&&p&&(i=!0,h=m),this.isValidLookup(h)||(r=!0,h=o);const y=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&r?void 0:h,v=p&&m!==h&&this.options.updateMissing;if(r||i||v){if(this.logger.log(v?"updateKey":"missingKey",l,a,o,v?m:h),n){const e=this.resolve(o,{...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=p&&i!==h?i:y;this.options.missingKeyHandler?this.options.missingKeyHandler(e,a,s,n,v,t):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(e,a,s,n,v,t),this.emit("missingKey",e,a,s,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&c?e.forEach((e=>{const s=this.pluralResolver.getSuffixes(e,t);f&&t[`defaultValue${this.options.pluralSeparator}zero`]&&s.indexOf(`${this.options.pluralSeparator}zero`)<0&&s.push(`${this.options.pluralSeparator}zero`),s.forEach((s=>{i([e],o+s,t[`defaultValue${s}`]||m)}))})):i(e,o,m))}h=this.extendTranslation(h,e,t,u,s),r&&h===o&&this.options.appendNamespaceToMissingKey&&(h=`${a}:${o}`),(r||i)&&this.options.parseMissingKeyHandler&&(h="v1"!==this.options.compatibilityAPI?this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${a}:${o}`:o,i?h:void 0):this.options.parseMissingKeyHandler(h))}return i?(u.res=h,u.usedParams=this.getUsedParamsDetails(t),u):h}extendTranslation(e,t,s,i,n){var o=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...s},s.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!s.skipInterpolation){s.interpolation&&this.interpolator.init({...s,interpolation:{...this.options.interpolation,...s.interpolation}});const r="string"==typeof e&&(s&&s.interpolation&&void 0!==s.interpolation.skipOnVariables?s.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let a;if(r){const t=e.match(this.interpolator.nestingRegexp);a=t&&t.length}let l=s.replace&&"string"!=typeof s.replace?s.replace:s;if(this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),e=this.interpolator.interpolate(e,l,s.lng||this.language||i.usedLng,s),r){const t=e.match(this.interpolator.nestingRegexp);a<(t&&t.length)&&(s.nest=!1)}!s.lng&&"v1"!==this.options.compatibilityAPI&&i&&i.res&&(s.lng=this.language||i.usedLng),!1!==s.nest&&(e=this.interpolator.nest(e,(function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return n&&n[0]===i[0]&&!s.context?(o.logger.warn(`It seems you are nesting recursively key: ${i[0]} in key: ${t[0]}`),null):o.translate(...i,t)}),s)),s.interpolation&&this.interpolator.reset()}const r=s.postProcess||this.options.postProcess,a="string"==typeof r?[r]:r;return null!=e&&a&&a.length&&!1!==s.applyPostProcessor&&(e=w.handle(a,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(s)},...s}:s,this)),e}resolve(e){let t,s,i,n,o,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach((e=>{if(this.isValidLookup(t))return;const a=this.extractFromKey(e,r),l=a.key;s=l;let c=a.namespaces;this.options.fallbackNS&&(c=c.concat(this.options.fallbackNS));const u=void 0!==r.count&&"string"!=typeof r.count,h=u&&!r.ordinal&&0===r.count&&this.pluralResolver.shouldUseIntlApi(),p=void 0!==r.context&&("string"==typeof r.context||"number"==typeof r.context)&&""!==r.context,g=r.lngs?r.lngs:this.languageUtils.toResolveHierarchy(r.lng||this.language,r.fallbackLng);c.forEach((e=>{this.isValidLookup(t)||(o=e,!L[`${g[0]}-${e}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(o)&&(L[`${g[0]}-${e}`]=!0,this.logger.warn(`key "${s}" for languages "${g.join(", ")}" won't get resolved as namespace "${o}" 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;n=s;const o=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(o,l,s,e,r);else{let e;u&&(e=this.pluralResolver.getSuffix(s,r.count,r));const t=`${this.options.pluralSeparator}zero`,i=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(o.push(l+e),r.ordinal&&0===e.indexOf(i)&&o.push(l+e.replace(i,this.options.pluralSeparator)),h&&o.push(l+t)),p){const s=`${l}${this.options.contextSeparator}${r.context}`;o.push(s),u&&(o.push(s+e),r.ordinal&&0===e.indexOf(i)&&o.push(s+e.replace(i,this.options.pluralSeparator)),h&&o.push(s+t))}}let a;for(;a=o.pop();)this.isValidLookup(t)||(i=a,t=this.getResource(s,e,a,r))})))}))})),{res:t,usedKey:s,exactUsedKey:i,usedLng:n,usedNS:o}}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&&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&&"string"!=typeof e.replace;let i=s?e.replace:e;if(s&&void 0!==e.count&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!s){i={...i};for(const e of t)delete i[e]}return i}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}}const R=e=>e.charAt(0).toUpperCase()+e.slice(1);class C{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=o.create("languageUtils")}getScriptPartFromCode(e){if(!(e=S(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=S(e))||e.indexOf("-")<0)return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if("string"==typeof e&&e.indexOf("-")>-1){if("undefined"!=typeof Intl&&void 0!==Intl.getCanonicalLocales)try{let t=Intl.getCanonicalLocales(e)[0];if(t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t)return t}catch(e){}const t=["hans","hant","latn","cyrl","cans","mong","arab"];let s=e.split("-");return this.options.lowerCaseLng?s=s.map((e=>e.toLowerCase())):2===s.length?(s[0]=s[0].toLowerCase(),s[1]=s[1].toUpperCase(),t.indexOf(s[1].toLowerCase())>-1&&(s[1]=R(s[1].toLowerCase()))):3===s.length&&(s[0]=s[0].toLowerCase(),2===s[1].length&&(s[1]=s[1].toUpperCase()),"sgn"!==s[0]&&2===s[2].length&&(s[2]=s[2].toUpperCase()),t.indexOf(s[1].toLowerCase())>-1&&(s[1]=R(s[1].toLowerCase())),t.indexOf(s[2].toLowerCase())>-1&&(s[2]=R(s[2].toLowerCase()))),s.join("-")}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)),"string"==typeof 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),i=[],n=e=>{e&&(this.isSupportedCode(e)?i.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return"string"==typeof e&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?("languageOnly"!==this.options.load&&n(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&n(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&n(this.getLanguagePartFromCode(e))):"string"==typeof e&&n(this.formatLanguageCode(e)),s.forEach((e=>{i.indexOf(e)<0&&n(this.formatLanguageCode(e))})),i}}let N=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],j={1:e=>Number(e>1),2:e=>Number(1!=e),3:e=>0,4:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),5:e=>Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5),6:e=>Number(1==e?0:e>=2&&e<=4?1:2),7:e=>Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),8:e=>Number(1==e?0:2==e?1:8!=e&&11!=e?2:3),9:e=>Number(e>=2),10:e=>Number(1==e?0:2==e?1:e<7?2:e<11?3:4),11:e=>Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3),12:e=>Number(e%10!=1||e%100==11),13:e=>Number(0!==e),14:e=>Number(1==e?0:2==e?1:3==e?2:3),15:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2),16:e=>Number(e%10==1&&e%100!=11?0:0!==e?1:2),17:e=>Number(1==e||e%10==1&&e%100!=11?0:1),18:e=>Number(0==e?0:1==e?1:2),19:e=>Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3),20:e=>Number(1==e?0:0==e||e%100>0&&e%100<20?1:2),21:e=>Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0),22:e=>Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)};const $=["v1","v2","v3"],A=["v4"],E={zero:0,one:1,two:2,few:3,many:4,other:5};class I{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=o.create("pluralResolver"),this.options.compatibilityJSON&&!A.includes(this.options.compatibilityJSON)||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=(()=>{const e={};return N.forEach((t=>{t.lngs.forEach((s=>{e[s]={numbers:t.nr,plurals:j[t.fc]}}))})),e})(),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]:{};if(this.shouldUseIntlApi())try{const s=S("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];const o=new Intl.PluralRules(s,{type:i});return this.pluralRulesCache[n]=o,o}catch(e){return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=this.getRule(e,t);return this.shouldUseIntlApi()?s&&s.resolvedOptions().pluralCategories.length>1:s&&s.numbers.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]:{};const s=this.getRule(e,t);return s?this.shouldUseIntlApi()?s.resolvedOptions().pluralCategories.sort(((e,t)=>E[e]-E[t])).map((e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${e}`)):s.numbers.map((s=>this.getSuffix(e,s,t))):[]}getSuffix(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=this.getRule(e,s);return i?this.shouldUseIntlApi()?`${this.options.prepend}${s.ordinal?`ordinal${this.options.prepend}`:""}${i.select(t)}`:this.getSuffixRetroCompatible(i,t):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,t){const s=e.noAbs?e.plurals(t):e.plurals(Math.abs(t));let i=e.numbers[s];this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]&&(2===i?i="plural":1===i&&(i=""));const n=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return"v1"===this.options.compatibilityJSON?1===i?"":"number"==typeof i?`_plural_${i.toString()}`:n():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]?n():this.options.prepend&&s.toString()?this.options.prepend+s.toString():s.toString()}shouldUseIntlApi(){return!$.includes(this.options.compatibilityJSON)}}const T=function(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",n=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=((e,t,s)=>{const i=d(e,s);return void 0!==i?i:d(t,s)})(e,t,s);return!o&&n&&"string"==typeof s&&(o=k(e,s,i),void 0===o&&(o=k(t,s,i))),o},D=e=>e.replace(/\$/g,"$$$$");class F{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=o.create("interpolator"),this.options=e,this.format=e.interpolation&&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:d,nestingOptionsSeparator:f,maxReplaces:y,alwaysFormat:b}=e.interpolation;this.escape=void 0!==t?t:v,this.escapeValue=void 0===s||s,this.useRawValueToEscape=void 0!==i&&i,this.prefix=n?m(n):o||"{{",this.suffix=r?m(r):a||"}}",this.formatSeparator=l||",",this.unescapePrefix=c?"":u||"-",this.unescapeSuffix=this.unescapePrefix?"":c||"",this.nestingPrefix=h?m(h):p||m("$t("),this.nestingSuffix=g?m(g):d||m(")"),this.nestingOptionsSeparator=f||",",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&&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,i){let n,o,r;const a=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=e=>{if(e.indexOf(this.formatSeparator)<0){const n=T(t,a,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(n,void 0,s,{...i,...t,interpolationkey:e}):n}const n=e.split(this.formatSeparator),o=n.shift().trim(),r=n.join(this.formatSeparator).trim();return this.format(T(t,a,o,this.options.keySeparator,this.options.ignoreJSONStructure),r,s,{...i,...t,interpolationkey:o})};this.resetRegExp();const u=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,h=i&&i.interpolation&&void 0!==i.interpolation.skipOnVariables?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>D(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?D(this.escape(e)):D(e)}].forEach((t=>{for(r=0;n=t.regex.exec(e);){const s=n[1].trim();if(o=c(s),void 0===o)if("function"==typeof u){const t=u(e,n,i);o="string"==typeof t?t:""}else if(i&&Object.prototype.hasOwnProperty.call(i,s))o="";else{if(h){o=n[0];continue}this.logger.warn(`missed to pass in variable ${s} for interpolating ${e}`),o=""}else"string"==typeof o||this.useRawValueToEscape||(o=l(o));const a=t.safeValue(o);if(e=e.replace(n[0],a),h?(t.regex.lastIndex+=o.length,t.regex.lastIndex-=n[0].length):t.regex.lastIndex=0,r++,r>=this.maxReplaces)break}})),e}nest(e,t){let s,i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=(e,t)=>{const s=this.nestingOptionsSeparator;if(e.indexOf(s)<0)return e;const i=e.split(new RegExp(`${s}[ ]*{`));let o=`{${i[1]}`;e=i[0],o=this.interpolate(o,n);const r=o.match(/'/g),a=o.match(/"/g);(r&&r.length%2==0&&!a||a.length%2!=0)&&(o=o.replace(/'/g,'"'));try{n=JSON.parse(o),t&&(n={...t,...n})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${s}${o}`}return n.defaultValue&&n.defaultValue.indexOf(this.prefix)>-1&&delete n.defaultValue,e};for(;s=this.nestingRegexp.exec(e);){let a=[];n={...o},n=n.replace&&"string"!=typeof n.replace?n.replace:n,n.applyPostProcessor=!1,delete n.defaultValue;let c=!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(),a=e,c=!0}if(i=t(r.call(this,s[1].trim(),n),n),i&&s[0]===e&&"string"!=typeof i)return i;"string"!=typeof i&&(i=l(i)),i||(this.logger.warn(`missed to resolve ${s[1]} for nesting ${e}`),i=""),c&&(i=a.reduce(((e,t)=>this.format(e,t,o.lng,{...o,interpolationkey:s[1].trim()})),i.trim())),e=e.replace(s[0],i),this.regexp.lastIndex=0}return e}}const V=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(S(i),n),t[r]=a),a(s)}};class U{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=o.create("formatter"),this.options=e,this.formats={number:V(((e,t)=>{const s=new Intl.NumberFormat(e,{...t});return e=>s.format(e)})),currency:V(((e,t)=>{const s=new Intl.NumberFormat(e,{...t,style:"currency"});return e=>s.format(e)})),datetime:V(((e,t)=>{const s=new Intl.DateTimeFormat(e,{...t});return e=>s.format(e)})),relativetime:V(((e,t)=>{const s=new Intl.RelativeTimeFormat(e,{...t});return e=>s.format(e,t.range||"day")})),list:V(((e,t)=>{const s=new Intl.ListFormat(e,{...t});return e=>s.format(e)}))},this.init(e)}init(e){const t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||","}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=V(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&&i.formatParams&&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 M extends r{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=o.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&&this.backend.init&&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}=p(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]:{},i=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."),i&&i();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);const n=this.queueLoad(e,t,s,i);if(!n.toLoad.length)return n.pending.length||i(),null;n.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&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t))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!!!");else if(null!=s&&""!==s){if(this.backend&&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)}}}const H=()=>({debug:!1,initImmediate:!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]),"string"==typeof e[1]&&(t.defaultValue=e[1]),"string"==typeof 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}}),K=e=>("string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e),J=()=>{};class z extends r{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=K(e),this.services={},this.logger=o,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.initImmediate)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&&("string"==typeof t.ns?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));const i=H();this.options={...i,...this.options,...K(t)},"v1"!==this.options.compatibilityAPI&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator);const n=e=>e?"function"==typeof e?new e:e:null;if(!this.options.isClone){let t;this.modules.logger?o.init(n(this.modules.logger),this.options):o.init(null,this.options),this.modules.formatter?t=this.modules.formatter:"undefined"!=typeof Intl&&(t=U);const s=new C(this.options);this.store=new O(this.options.resources,this.options);const r=this.services;r.logger=o,r.resourceStore=this.store,r.languageUtils=s,r.pluralResolver=new I(s,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!t||this.options.interpolation.format&&this.options.interpolation.format!==i.interpolation.format||(r.formatter=n(t),r.formatter.init(r,this.options),this.options.interpolation.format=r.formatter.format.bind(r.formatter)),r.interpolator=new F(this.options),r.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},r.backendConnector=new M(n(this.modules.backend),r.resourceStore,r,this.options),r.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&&(r.languageDetector=n(this.modules.languageDetector),r.languageDetector.init&&r.languageDetector.init(r,this.options.detection,this.options)),this.modules.i18nFormat&&(r.i18nFormat=n(this.modules.i18nFormat),r.i18nFormat.init&&r.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=J),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 r=a(),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),r.resolve(t),s(e,t)};if(this.languages&&"v1"!==this.options.compatibilityAPI&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initImmediate?l():setTimeout(l,0),r}loadResources(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;const s="string"==typeof e?e:this.language;if("function"==typeof e&&(t=e),!this.options.resources||this.options.partialBundledLanguages){if(s&&"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&&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=a();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=J),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&&w.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 i=a();this.emit("languageChanging",e);const n=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},o=(e,o)=>{o?(n(o),this.translator.changeLanguage(o),this.isLanguageChangingTo=void 0,this.emit("languageChanged",o),this.logger.log("languageChanged",o)):this.isLanguageChangingTo=void 0,i.resolve((function(){return s.t(...arguments)})),t&&t(e,(function(){return s.t(...arguments)}))},r=t=>{e||t||!this.services.languageDetector||(t=[]);const s="string"==typeof t?t:this.services.languageUtils.getBestMatchFromCodes(t);s&&(this.language||n(s),this.translator.language||this.translator.changeLanguage(s),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(s)),this.loadResources(s,(e=>{o(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(r):this.services.languageDetector.detect(r):r(e):r(this.services.languageDetector.detect()),i}getFixedT(e,t,s){var i=this;const n=function(e,t){let o;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];o=i.options.overloadTranslationOptionHandler([e,t].concat(a))}else o={...t};o.lng=o.lng||n.lng,o.lngs=o.lngs||n.lngs,o.ns=o.ns||n.ns,""!==o.keyPrefix&&(o.keyPrefix=o.keyPrefix||s||n.keyPrefix);const c=i.options.keySeparator||".";let u;return u=o.keyPrefix&&Array.isArray(e)?e.map((e=>`${o.keyPrefix}${c}${e}`)):o.keyPrefix?`${o.keyPrefix}${c}${e}`:e,i.t(u,o)};return"string"==typeof e?n.lng=e:n.lngs=e,n.ns=t,n.keyPrefix=s,n}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}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=a();return this.options.ns?("string"==typeof 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=a();"string"==typeof e&&(e=[e]);const i=this.options.preload||[],n=e.filter((e=>i.indexOf(e)<0&&this.services.languageUtils.isSupportedCode(e)));return n.length?(this.options.preload=i.concat(n),this.loadResources((e=>{s.resolve(),t&&t(e)})),s):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const t=this.services&&this.services.languageUtils||new C(H());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 z(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]:J;const s=e.forkResourceStore;s&&delete e.forkResourceStore;const i={...this.options,...e,isClone:!0},n=new z(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 O(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 q=z.createInstance();q.createInstance=z.createInstance;q.createInstance,q.dir,q.init,q.loadResources,q.reloadResources,q.use,q.changeLanguage,q.getFixedT,q.t,q.exists,q.setDefaultNamespace,q.hasLoadedNamespace,q.loadNamespaces,q.loadLanguages}},function(e){var t;t=51250,e(e.s=t)}]); //# sourceMappingURL=i18n_init-9f062a0de30195f0d756.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: "Vanderbilt University", id: "2743", maincontent: ".content-body", postid: "227119", pubdate: "2024-04-17T12:17:16Z", reader_type: "anonymous", sections: "us>Health", tags: "Housing, Affordable housing, Gentrification, Housing costs, SciLine, Zoning laws, Land-use regulations, Housing shortages, Rising home prices", title: "Worried about housing shortages and soaring prices? Your community&#39;s zoning laws could be part of the problem", }; (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