From cdd04ee504d48ca418d2ad98606a6c18a51d28b8 Mon Sep 17 00:00:00 2001 From: Jacob Wilson <49299083+jdwjdwjdw@users.noreply.github.com> Date: Tue, 5 Sep 2023 11:13:48 -0700 Subject: [PATCH 1/5] D8CORE-6844 | Fixup mobile menu at medium breakpoint (#703) --- themes/stanford_basic/dist/css/components.css | 2 +- themes/stanford_basic/package-lock.json | 6 +++--- .../src/scss/components/masthead/_wrapper.scss | 3 ++- .../src/scss/components/multi-menu/_multi-menu.scss | 1 + 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/themes/stanford_basic/dist/css/components.css b/themes/stanford_basic/dist/css/components.css index d8f71559c..501236be3 100644 --- a/themes/stanford_basic/dist/css/components.css +++ b/themes/stanford_basic/dist/css/components.css @@ -1 +1 @@ -.js-pager__items .pager__item .button{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;display:inline-block;border:0;font-size:2rem;font-weight:400;line-height:1;text-align:center;text-decoration:none;width:auto;-webkit-transition:background-color .25s ease-in-out,color .25s ease-in-out;transition:background-color .25s ease-in-out,color .25s ease-in-out}.js-pager__items .pager__item .button a{font-weight:400;text-decoration:none}.js-pager__items .pager__item .button:active,.js-pager__items .pager__item .button:focus,.js-pager__items .pager__item .button:hover{text-decoration:underline}.js-pager__items{text-align:center}.js-pager__items .pager__item{display:inline-block}.js-pager__items .pager__item .button{padding:1rem 2rem 1.15rem;background-color:#b1040e;color:#fff}.js-pager__items .pager__item .button:after,.js-pager__items .pager__item .button:before{background-color:#fff;color:#b1040e}.js-pager__items .pager__item .button:focus,.js-pager__items .pager__item .button:hover{background-color:#2e2d29;color:#fff}.js-pager__items .pager__item .button:focus:after,.js-pager__items .pager__item .button:focus:before,.js-pager__items .pager__item .button:hover:after,.js-pager__items .pager__item .button:hover:before{background-color:#fff}.js-pager__items .pager__item .button:focus{-webkit-box-shadow:0 0 3px #53565a,0 0 7px #53565a;box-shadow:0 0 3px #53565a,0 0 7px #53565a}@media only screen and (min-width:0){.content .paragraph-item{margin-bottom:6.4rem}}@media only screen and (min-width:768px){.content .paragraph-item{margin-bottom:7.2rem}}@media only screen and (min-width:1500px){.content .paragraph-item{margin-bottom:7.6rem}}.filter-menu{border:1px solid #d2d3d4}@media only screen and (min-width:0){.filter-menu{padding:4rem}}@media only screen and (min-width:768px){.filter-menu{padding:4.5rem}}@media only screen and (min-width:1500px){.filter-menu{padding:4.75rem}}.filter-menu .topics__collapsable-menu{font-size:1em;padding:0;background-color:transparent;color:#006cb8;cursor:pointer;display:inline-block;font-weight:600;text-align:left;text-decoration:none;width:100%}@media only screen and (min-width:1200px) and (min-width:0){.filter-menu .topics__collapsable-menu{margin-bottom:3.2rem}}@media only screen and (min-width:1200px) and (min-width:768px){.filter-menu .topics__collapsable-menu{margin-bottom:3.6rem}}@media only screen and (min-width:1200px) and (min-width:1500px){.filter-menu .topics__collapsable-menu{margin-bottom:3.8rem}}@media only screen and (min-width:0){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.2rem}}@media only screen and (min-width:768px){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.6rem}}@media only screen and (min-width:1500px){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.8rem}}@media only screen and (min-width:1200px){.filter-menu .topics__collapsable-menu.show{margin-bottom:0}.filter-menu .topics__collapsable-menu.show+.menu>li.menu-item:last-of-type{padding-bottom:0}}.filter-menu .topics__collapsable-menu:focus,.filter-menu .topics__collapsable-menu:hover{text-decoration:underline}.filter-menu .topics__collapsable-menu .su-link--jump{float:right}@media (max-width:1199px){.filter-menu .topics__collapsable-menu:before{font-size:1.8rem;line-height:1.3;padding-right:15px;color:#006cb8;content:"\f1de";font-family:Font Awesome\ 5 Free;font-weight:600}}@media (max-width:1199px) and (max-width:767px){.filter-menu .topics__collapsable-menu:before{font-size:1.6rem}}.filter-menu .menu{margin:0;padding:0}.filter-menu .menu .menu-item{font-size:1.8rem;line-height:1.3}@media only screen and (min-width:0){.filter-menu .menu .menu-item{padding-bottom:3.2rem}}@media only screen and (min-width:768px){.filter-menu .menu .menu-item{padding-bottom:3.6rem}}@media only screen and (min-width:1500px){.filter-menu .menu .menu-item{padding-bottom:3.8rem}}@media only screen and (min-width:0){.filter-menu .menu .menu-item{padding-left:1.6rem}}@media only screen and (min-width:768px){.filter-menu .menu .menu-item{padding-left:1.8rem}}@media only screen and (min-width:1500px){.filter-menu .menu .menu-item{padding-left:1.9rem}}@media (max-width:767px){.filter-menu .menu .menu-item{font-size:1.6rem}}.filter-menu .menu .menu-item a{color:#2e2d29;text-decoration:none}.filter-menu .menu .menu-item a:focus,.filter-menu .menu .menu-item a:hover{text-decoration:underline}.filter-menu .menu>li.menu-item:last-of-type{padding-bottom:0}.filter-menu .menu .menu-item--active-trail:before{font-size:1.8rem;line-height:1.3;color:#006cb8;content:"\f00c";font-family:Font Awesome\ 5 Free;font-weight:600;left:35px;position:absolute}@media (max-width:767px){.filter-menu .menu .menu-item--active-trail:before{font-size:1.6rem}}.filter-menu .menu .menu-item--active-trail .is-active{color:#006cb8}@media (max-width:1199px){.filter-menu .menu{display:none}.filter-menu .topics__collapsable-menu.show+.menu{display:block}}@media only screen and (min-width:1200px){.filter-menu .menu{display:block}.filter-menu .topics__collapsable-menu.show+.menu{display:none}}@media (max-width:767px){.su-hero__media{aspect-ratio:30/11}}.su-link--action:active,.su-link--action:focus,.su-link--action:hover{text-decoration:underline}@media only screen and (min-width:768px){.su-lockup--option-a .su-lockup__line1{line-height:1.15em;margin-top:-8px;margin-bottom:-6px}}.su-lockup__custom-logo{max-width:150px}.su-lockup--option-none .su-lockup__cell1{border-right:0}.su-lockup--option-none .su-lockup__custom-logo{max-width:300px}.su-lockup--option-s .su-lockup__line4:after,.su-lockup--option-t .su-lockup__line4:after{width:auto}.su-lockup__cell2{max-width:475px}.su-lockup__cell1 .su-lockup__line4{overflow-wrap:break-word;word-break:break-all}.su-lockup--option-d .su-lockup__line3,.su-lockup--option-e .su-lockup__line3,.su-lockup--option-h .su-lockup__line3,.su-lockup--option-i .su-lockup__line3,.su-lockup--option-q .su-lockup__line3,.su-lockup--option-t .su-lockup__line3{line-height:1.5}.su-masthead{z-index:11}@media (max-width:991px){.su-masthead .su-multi-menu>ul{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2)}}.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}@media only screen and (min-width:992px){.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{width:100%;margin-left:auto;margin-right:auto}}@media only screen and (min-width:768px) and (max-width:991px){.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1+.su-site-search,.su-masthead .su-multi-menu>ul{width:40rem}}@media only screen and (min-width:992px){.su-masthead>section:last-of-type{padding-top:3.6rem}}@media only screen and (min-width:992px){.su-masthead .su-lockup{margin-bottom:2.2rem}}.su-masthead li.su-mobile-site-search{display:none}@media (max-width:991px){.su-masthead li.su-mobile-site-search{display:block}}.su-masthead .su-site-search__input{padding:.6rem 2rem .8rem;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;border:1px solid #d9d9d9}.su-masthead .su-site-search__submit{color:unset;opacity:1;right:1.6rem}@-webkit-keyframes pulse-dark{0%{-webkit-filter:drop-shadow(0 0 0 #b1040e);filter:drop-shadow(0 0 0 #b1040e)}70%{-webkit-filter:drop-shadow(0 0 6px rgba(177,4,14,.5));filter:drop-shadow(0 0 6px rgba(177,4,14,.5))}to{-webkit-filter:drop-shadow(0 0 10px rgba(177,4,14,0));filter:drop-shadow(0 0 10px rgba(177,4,14,0))}}@keyframes pulse-dark{0%{-webkit-filter:drop-shadow(0 0 0 #b1040e);filter:drop-shadow(0 0 0 #b1040e)}70%{-webkit-filter:drop-shadow(0 0 6px rgba(177,4,14,.5));filter:drop-shadow(0 0 6px rgba(177,4,14,.5))}to{-webkit-filter:drop-shadow(0 0 10px rgba(177,4,14,0));filter:drop-shadow(0 0 10px rgba(177,4,14,0))}}@-webkit-keyframes hoverboard{0%{top:calc(50% - 19px)}30%{top:calc(50% - 21px)}50%{top:calc(50% - 23px)}70%{top:calc(50% - 21px)}to{top:calc(50% - 19px)}}@keyframes hoverboard{0%{top:calc(50% - 19px)}30%{top:calc(50% - 21px)}50%{top:calc(50% - 23px)}70%{top:calc(50% - 21px)}to{top:calc(50% - 19px)}}.system-menu-block{width:100%}.su-multi-menu{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:relative;z-index:100;width:100%}@media (max-width:991px){.su-multi-menu .mobile-hidden{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(100%);clip-path:inset(100%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}}.su-multi-menu .su-multi-menu__menu{margin-top:0;margin-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;list-style:none;background-color:#2e2d29}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu{background-color:#fff}}.su-multi-menu .su-multi-menu__menu .su-multi-menu__item{margin-bottom:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link{text-decoration:none;position:relative;padding:1.6rem 0 1.6rem 2.4rem;margin-right:1.6rem;display:block;color:#fff;font-weight:600;font-size:1.8rem;border-bottom:1px solid #53565a;outline:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{content:"";position:absolute;visibility:hidden;-webkit-transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in,-webkit-transform .3s ease-in;z-index:1}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{text-decoration:none}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{visibility:visible;-webkit-transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{background-color:#fff}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before{background-color:#e50808}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{height:100%;width:6px;bottom:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{left:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{color:#fff;text-decoration:underline}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu .su-multi-menu__link{text-decoration:none;position:relative;padding:1.6rem 0;margin:0;color:#2e2d29;border-bottom:1px solid #d9d9d9}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{content:"";position:absolute;visibility:hidden;-webkit-transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in,-webkit-transform .3s ease-in;z-index:1}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{text-decoration:none}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{visibility:visible;-webkit-transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{background-color:#2e2d29}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before{background-color:#b1040e}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{height:100%;width:6px;bottom:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{left:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{color:#2e2d29;text-decoration:underline}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu .su-nav-toggle{display:none}}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=true]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=false],.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=true]{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=false]{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-multi-menu__menu{min-width:300px}.su-multi-menu .su-multi-menu__menu-lv1>li:last-child>.su-multi-menu__menu-lv2{right:0}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1{padding-left:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;background:transparent}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item{margin:0 36px 0 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link{font-size:1.9rem;border-bottom:0;font-weight:600;color:#b1040e}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:before{height:6px;width:100%;-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:scaleX(0);transform:scaleX(0)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:hover{font-weight:600;color:#2e2d29;text-decoration:underline}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:before{height:6px;-webkit-transform:scaleX(1);transform:scaleX(1);visibility:visible;background-color:#2e2d29}}@media only screen and (min-width:992px) and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:before{background-color:#b6b1a9}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:hover{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:hover:before{background:0}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link:before{background-color:#2e2d29;-webkit-transform:scaleX(1);transform:scaleX(1)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link:hover:before{display:none}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--expanded>a:before{height:6px;-webkit-transform:scaleX(1);transform:scaleX(1);visibility:visible}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv2{padding-top:1px;padding-left:1.2rem;margin-left:-1.7rem;-webkit-box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);z-index:101;position:absolute;top:58px;max-width:30rem}.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__link{width:98%}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link{padding-right:0;padding-bottom:2.4rem;padding-left:1rem;margin:0 1.8em 0 .5rem}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link:before{left:-6px}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper{display:inline-block;word-wrap:break-word;max-width:calc(100% - 10px)}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper{max-width:calc(100% - 50px)}.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv3 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv4 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv5 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link{border-bottom:0}}@media (max-width:991px){.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper{display:inline-block;word-wrap:break-word;max-width:calc(100% - 38px)}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu--buttons .su-multi-menu__menu-lv1>.su-multi-menu__item{display:contents}}.su-multi-menu .su-multi-menu__item--parent{position:relative}.su-multi-menu .su-multi-menu__item--parent>.su-multi-menu__menu{display:none}.su-multi-menu .su-multi-menu__item--expanded>.su-multi-menu__menu{display:-webkit-box;display:-ms-flexbox;display:flex}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link{font-weight:700}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:before{visibility:visible;height:100%;width:6px;-webkit-transform:scaleY(1);transform:scaleY(1);background-color:#e50808}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:before{background-color:#b1040e}}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:hover:before{-webkit-transition:left .1s ease-out;transition:left .1s ease-out;background-color:#e50808}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:hover:before{background-color:#b1040e}}.su-multi-menu .su-multi-menu__nav-toggle{position:absolute;top:-60px;right:0}@media (max-width:991px){.su-multi-menu .su-multi-menu__nav-toggle{padding:0 0 2rem;margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:center;-ms-flex-align:center;align-items:center;outline:none;width:40px;background-color:transparent;color:#2e2d29;font-size:1.6rem;line-height:.7}.su-multi-menu .su-multi-menu__nav-toggle:after{margin:0 auto;display:inline-block;width:30px;height:26px;background:url(../assets/svg/hamburger-black.svg) no-repeat 3px 0;content:""}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:before{visibility:visible;-webkit-transform:scaleX(1);transform:scaleX(1);background-color:#b6b1a9}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:after{width:22px;background:url(../assets/svg/close-black.svg) no-repeat 3px 0;background-size:16px 16px}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:focus:before,.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:hover:before{background-color:#b1040e}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:active:before{background-color:#e50808}.su-multi-menu .su-multi-menu__nav-toggle:active,.su-multi-menu .su-multi-menu__nav-toggle:focus,.su-multi-menu .su-multi-menu__nav-toggle:hover{background-color:transparent;color:#2e2d29;-webkit-box-shadow:none;box-shadow:none}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=false]+.su-multi-menu__menu-lv1{display:none}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{position:absolute}.su-multi-menu .su-multi-menu__nav-toggle--center{margin-right:auto;margin-left:auto}.su-multi-menu .su-multi-menu__nav-toggle--right{margin-right:0;margin-left:auto}}@media only screen and (min-width:768px) and (max-width:991px){.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{max-width:24em}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__nav-toggle{display:none}}@media only screen and (min-width:992px){.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle{padding:0;display:inline-block;right:0;text-align:center;font-size:0;overflow:hidden;z-index:10;background:transparent;outline:none;-webkit-box-shadow:none;box-shadow:none}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]{border:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]:active,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]:focus{border-top:1px solid #2e2d29;border-bottom:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:before{content:"";background:url(../assets/svg/caret-down-red.svg) no-repeat 50%/50%;background-size:15px;border-radius:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover[aria-expanded=false]{-webkit-transition:border-bottom .25s steps(1),-webkit-transform .3s ease-out;transition:border-bottom .25s steps(1),-webkit-transform .3s ease-out;transition:transform .3s ease-out,border-bottom .25s steps(1);transition:transform .3s ease-out,border-bottom .25s steps(1),-webkit-transform .3s ease-out;-webkit-transform:rotate(0deg);transform:rotate(0deg);border-bottom:1px solid #2e2d29}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover{background:transparent}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus:before,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover:before{background:url(../assets/svg/caret-down-black.svg) no-repeat 50%/50%;background-size:15px}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:active,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;font-weight:700;background:transparent;border-bottom:1px solid #2e2d29}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent{margin:0 43px 0 0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-nav-toggle{position:relative;width:15px;height:15px;top:calc(50% - 6px);left:6px}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-multi-menu__link:after{content:"";height:1em;margin-bottom:-5px;margin-left:12px;border-right:1px solid #766253;display:inline-block}}@media only screen and (min-width:992px){.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1,.su-multi-menu.su-multi-menu--right>ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item--parent:last-of-type,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item:last-child,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>li:last-of-type,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item--parent:last-of-type,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item:last-child,.su-multi-menu.su-multi-menu--right>ul>li:last-of-type{padding-right:0;margin-right:0}.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item--parent:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item:last-child>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>li:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item--parent:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item:last-child>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>li:last-of-type>.su-multi-menu__link{margin-right:0}}nav+.su-site-search,ul li .su-site-search{display:none}@media (max-width:991px){ul li .su-site-search.search-block-form{display:block}}@media only screen and (max-width:991px) and (min-width:0){ul li .su-site-search.search-block-form{margin:2.31rem 2.31rem 1.6rem 1.6rem}}@media only screen and (max-width:991px) and (min-width:768px){ul li .su-site-search.search-block-form{margin:2.6rem 2.6rem 1.8rem 1.8rem}}@media only screen and (max-width:991px) and (min-width:1500px){ul li .su-site-search.search-block-form{margin:2.74rem 2.74rem 1.9rem 1.9rem}}.stanford-people-grid .flex-container{-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left}@media only screen and (min-width:0){.su-secondary-nav{margin-bottom:11.2rem}}@media only screen and (min-width:768px){.su-secondary-nav{margin-bottom:12.6rem}}@media only screen and (min-width:1500px){.su-secondary-nav{margin-bottom:13.3rem}}.su-secondary-nav,.su-secondary-nav .su-secondary-nav__menu{background:transparent}.su-secondary-nav .su-secondary-nav__link{border-top:0}.su-secondary-nav>.su-secondary-nav__menu{margin-left:0;padding-left:0}.su-secondary-nav>.su-secondary-nav__menu>.su-secondary-nav__item{border-top:1px solid #d9d9d9;line-height:1.2em}.su-secondary-nav>.su-secondary-nav__menu>.su-secondary-nav__item:first-child{border:0}.su-secondary-nav--light .su-secondary-nav__link{color:#b1040e}.su-secondary-nav--light .su-secondary-nav__link:focus:before,.su-secondary-nav--light .su-secondary-nav__link:hover:before{background-color:#b1040e}.su-secondary-nav--light .su-secondary-nav__item--current>.su-secondary-nav__link{color:#2e2d29}.su-secondary-nav--light .su-secondary-nav__item--current>.su-secondary-nav__link:before{background-color:#2e2d29}@media only screen and (min-width:0){.block--page-title,.node-stanford-page-title{margin-top:8rem}}@media only screen and (min-width:768px){.block--page-title,.node-stanford-page-title{margin-top:9rem}}@media only screen and (min-width:1500px){.block--page-title,.node-stanford-page-title{margin-top:9.5rem}}.su-wysiwyg-text p{max-width:100ch}.su-wysiwyg-text p.text-align-right{text-align:right;margin-left:auto}.su-wysiwyg-text p.text-align-center{text-align:center;margin-left:auto;margin-right:auto}.su-wysiwyg-text .align-center img,.su-wysiwyg-text .align-center picture{margin:0 auto}.su-wysiwyg-text .align-center .media.file{text-align:center}.su-wysiwyg-text .align-center .media.video{aspect-ratio:16/9}.su-wysiwyg-text .align-center .media.video iframe{height:100%;width:100%}.su-wysiwyg-text .align-left .file.media{padding:.4em 1.5em 0 0}.su-wysiwyg-text .align-right .file.media{padding:.4em 0 0 1.5em}.paragraph.paragraph--type--stanford-spacer{margin-bottom:3rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer{margin-bottom:3.6rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer{margin-bottom:3.8rem}}.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2.6rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2.7rem}}.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.1rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.2rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.3rem}} \ No newline at end of file +.js-pager__items .pager__item .button{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;display:inline-block;border:0;font-size:2rem;font-weight:400;line-height:1;text-align:center;text-decoration:none;width:auto;-webkit-transition:background-color .25s ease-in-out,color .25s ease-in-out;transition:background-color .25s ease-in-out,color .25s ease-in-out}.js-pager__items .pager__item .button a{font-weight:400;text-decoration:none}.js-pager__items .pager__item .button:active,.js-pager__items .pager__item .button:focus,.js-pager__items .pager__item .button:hover{text-decoration:underline}.js-pager__items{text-align:center}.js-pager__items .pager__item{display:inline-block}.js-pager__items .pager__item .button{padding:1rem 2rem 1.15rem;background-color:#b1040e;color:#fff}.js-pager__items .pager__item .button:after,.js-pager__items .pager__item .button:before{background-color:#fff;color:#b1040e}.js-pager__items .pager__item .button:focus,.js-pager__items .pager__item .button:hover{background-color:#2e2d29;color:#fff}.js-pager__items .pager__item .button:focus:after,.js-pager__items .pager__item .button:focus:before,.js-pager__items .pager__item .button:hover:after,.js-pager__items .pager__item .button:hover:before{background-color:#fff}.js-pager__items .pager__item .button:focus{-webkit-box-shadow:0 0 3px #53565a,0 0 7px #53565a;box-shadow:0 0 3px #53565a,0 0 7px #53565a}@media only screen and (min-width:0){.content .paragraph-item{margin-bottom:6.4rem}}@media only screen and (min-width:768px){.content .paragraph-item{margin-bottom:7.2rem}}@media only screen and (min-width:1500px){.content .paragraph-item{margin-bottom:7.6rem}}.filter-menu{border:1px solid #d2d3d4}@media only screen and (min-width:0){.filter-menu{padding:4rem}}@media only screen and (min-width:768px){.filter-menu{padding:4.5rem}}@media only screen and (min-width:1500px){.filter-menu{padding:4.75rem}}.filter-menu .topics__collapsable-menu{font-size:1em;padding:0;background-color:transparent;color:#006cb8;cursor:pointer;display:inline-block;font-weight:600;text-align:left;text-decoration:none;width:100%}@media only screen and (min-width:1200px) and (min-width:0){.filter-menu .topics__collapsable-menu{margin-bottom:3.2rem}}@media only screen and (min-width:1200px) and (min-width:768px){.filter-menu .topics__collapsable-menu{margin-bottom:3.6rem}}@media only screen and (min-width:1200px) and (min-width:1500px){.filter-menu .topics__collapsable-menu{margin-bottom:3.8rem}}@media only screen and (min-width:0){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.2rem}}@media only screen and (min-width:768px){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.6rem}}@media only screen and (min-width:1500px){.filter-menu .topics__collapsable-menu.show{margin-bottom:3.8rem}}@media only screen and (min-width:1200px){.filter-menu .topics__collapsable-menu.show{margin-bottom:0}.filter-menu .topics__collapsable-menu.show+.menu>li.menu-item:last-of-type{padding-bottom:0}}.filter-menu .topics__collapsable-menu:focus,.filter-menu .topics__collapsable-menu:hover{text-decoration:underline}.filter-menu .topics__collapsable-menu .su-link--jump{float:right}@media (max-width:1199px){.filter-menu .topics__collapsable-menu:before{font-size:1.8rem;line-height:1.3;padding-right:15px;color:#006cb8;content:"\f1de";font-family:Font Awesome\ 5 Free;font-weight:600}}@media (max-width:1199px) and (max-width:767px){.filter-menu .topics__collapsable-menu:before{font-size:1.6rem}}.filter-menu .menu{margin:0;padding:0}.filter-menu .menu .menu-item{font-size:1.8rem;line-height:1.3}@media only screen and (min-width:0){.filter-menu .menu .menu-item{padding-bottom:3.2rem}}@media only screen and (min-width:768px){.filter-menu .menu .menu-item{padding-bottom:3.6rem}}@media only screen and (min-width:1500px){.filter-menu .menu .menu-item{padding-bottom:3.8rem}}@media only screen and (min-width:0){.filter-menu .menu .menu-item{padding-left:1.6rem}}@media only screen and (min-width:768px){.filter-menu .menu .menu-item{padding-left:1.8rem}}@media only screen and (min-width:1500px){.filter-menu .menu .menu-item{padding-left:1.9rem}}@media (max-width:767px){.filter-menu .menu .menu-item{font-size:1.6rem}}.filter-menu .menu .menu-item a{color:#2e2d29;text-decoration:none}.filter-menu .menu .menu-item a:focus,.filter-menu .menu .menu-item a:hover{text-decoration:underline}.filter-menu .menu>li.menu-item:last-of-type{padding-bottom:0}.filter-menu .menu .menu-item--active-trail:before{font-size:1.8rem;line-height:1.3;color:#006cb8;content:"\f00c";font-family:Font Awesome\ 5 Free;font-weight:600;left:35px;position:absolute}@media (max-width:767px){.filter-menu .menu .menu-item--active-trail:before{font-size:1.6rem}}.filter-menu .menu .menu-item--active-trail .is-active{color:#006cb8}@media (max-width:1199px){.filter-menu .menu{display:none}.filter-menu .topics__collapsable-menu.show+.menu{display:block}}@media only screen and (min-width:1200px){.filter-menu .menu{display:block}.filter-menu .topics__collapsable-menu.show+.menu{display:none}}@media (max-width:767px){.su-hero__media{aspect-ratio:30/11}}.su-link--action:active,.su-link--action:focus,.su-link--action:hover{text-decoration:underline}@media only screen and (min-width:768px){.su-lockup--option-a .su-lockup__line1{line-height:1.15em;margin-top:-8px;margin-bottom:-6px}}.su-lockup__custom-logo{max-width:150px}.su-lockup--option-none .su-lockup__cell1{border-right:0}.su-lockup--option-none .su-lockup__custom-logo{max-width:300px}.su-lockup--option-s .su-lockup__line4:after,.su-lockup--option-t .su-lockup__line4:after{width:auto}.su-lockup__cell2{max-width:475px}.su-lockup__cell1 .su-lockup__line4{overflow-wrap:break-word;word-break:break-all}.su-lockup--option-d .su-lockup__line3,.su-lockup--option-e .su-lockup__line3,.su-lockup--option-h .su-lockup__line3,.su-lockup--option-i .su-lockup__line3,.su-lockup--option-q .su-lockup__line3,.su-lockup--option-t .su-lockup__line3{line-height:1.5}.su-masthead{z-index:11}@media (max-width:991px){.su-masthead .su-multi-menu>ul{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2)}}.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}@media only screen and (min-width:768px){.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{width:100%;max-width:100%;margin-left:auto;margin-right:auto}}@media only screen and (min-width:768px) and (max-width:991px){.su-masthead .su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1+.su-site-search,.su-masthead .su-multi-menu>ul{width:40rem}}@media only screen and (min-width:992px){.su-masthead>section:last-of-type{padding-top:3.6rem}}@media only screen and (min-width:992px){.su-masthead .su-lockup{margin-bottom:2.2rem}}.su-masthead li.su-mobile-site-search{display:none}@media (max-width:991px){.su-masthead li.su-mobile-site-search{display:block}}.su-masthead .su-site-search__input{padding:.6rem 2rem .8rem;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;border:1px solid #d9d9d9}.su-masthead .su-site-search__submit{color:unset;opacity:1;right:1.6rem}@-webkit-keyframes pulse-dark{0%{-webkit-filter:drop-shadow(0 0 0 #b1040e);filter:drop-shadow(0 0 0 #b1040e)}70%{-webkit-filter:drop-shadow(0 0 6px rgba(177,4,14,.5));filter:drop-shadow(0 0 6px rgba(177,4,14,.5))}to{-webkit-filter:drop-shadow(0 0 10px rgba(177,4,14,0));filter:drop-shadow(0 0 10px rgba(177,4,14,0))}}@keyframes pulse-dark{0%{-webkit-filter:drop-shadow(0 0 0 #b1040e);filter:drop-shadow(0 0 0 #b1040e)}70%{-webkit-filter:drop-shadow(0 0 6px rgba(177,4,14,.5));filter:drop-shadow(0 0 6px rgba(177,4,14,.5))}to{-webkit-filter:drop-shadow(0 0 10px rgba(177,4,14,0));filter:drop-shadow(0 0 10px rgba(177,4,14,0))}}@-webkit-keyframes hoverboard{0%{top:calc(50% - 19px)}30%{top:calc(50% - 21px)}50%{top:calc(50% - 23px)}70%{top:calc(50% - 21px)}to{top:calc(50% - 19px)}}@keyframes hoverboard{0%{top:calc(50% - 19px)}30%{top:calc(50% - 21px)}50%{top:calc(50% - 23px)}70%{top:calc(50% - 21px)}to{top:calc(50% - 19px)}}.system-menu-block{width:100%}.su-multi-menu{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Source Sans\ 3,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:relative;z-index:100;width:100%}@media (max-width:991px){.su-multi-menu .mobile-hidden{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(100%);clip-path:inset(100%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}}.su-multi-menu .su-multi-menu__menu{margin-top:0;margin-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;list-style:none;background-color:#2e2d29}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu{background-color:#fff}}.su-multi-menu .su-multi-menu__menu .su-multi-menu__item{margin-bottom:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link{text-decoration:none;position:relative;padding:1.6rem 0 1.6rem 2.4rem;margin-right:1.6rem;display:block;color:#fff;font-weight:600;font-size:1.8rem;border-bottom:1px solid #53565a;outline:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{content:"";position:absolute;visibility:hidden;-webkit-transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in,-webkit-transform .3s ease-in;z-index:1}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{text-decoration:none}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{visibility:visible;-webkit-transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{background-color:#fff}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before{background-color:#e50808}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{height:100%;width:6px;bottom:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{left:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{color:#fff;text-decoration:underline}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu .su-multi-menu__link{text-decoration:none;position:relative;padding:1.6rem 0;margin:0;color:#2e2d29;border-bottom:1px solid #d9d9d9}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{content:"";position:absolute;visibility:hidden;-webkit-transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:background-color .3s ease-in,-webkit-transform .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in;transition:transform .3s ease-in,background-color .3s ease-in,-webkit-transform .3s ease-in;z-index:1}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{text-decoration:none}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{visibility:visible;-webkit-transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:background-color .3s ease-out,-webkit-transform .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out;transition:transform .3s ease-out,background-color .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{background-color:#2e2d29}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before{background-color:#b1040e}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{height:100%;width:6px;bottom:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:active:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:before{left:0}.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu .su-multi-menu__link:hover{color:#2e2d29;text-decoration:underline}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu .su-nav-toggle{display:none}}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=true]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=false],.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=true]{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.su-multi-menu .su-multi-menu__menu .su-nav-toggle[aria-expanded=false]{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-multi-menu__menu{min-width:300px}.su-multi-menu .su-multi-menu__menu-lv1>li:last-child>.su-multi-menu__menu-lv2{right:0}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1{padding-left:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;background:transparent}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item{margin:0 36px 0 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link{font-size:1.9rem;border-bottom:0;font-weight:600;color:#b1040e}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:before{height:6px;width:100%;-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:scaleX(0);transform:scaleX(0)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:active,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item>.su-multi-menu__link:hover{font-weight:600;color:#2e2d29;text-decoration:underline}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:before{height:6px;-webkit-transform:scaleX(1);transform:scaleX(1);visibility:visible;background-color:#2e2d29}}@media only screen and (min-width:992px) and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:before{background-color:#b6b1a9}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:focus,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:hover{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--active-trail>.su-multi-menu__link:hover:before{background:0}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link{color:#2e2d29}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link:before{background-color:#2e2d29;-webkit-transform:scaleX(1);transform:scaleX(1)}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--current>.su-multi-menu__link:hover:before{display:none}.su-multi-menu .su-multi-menu__menu-lv1>.su-multi-menu__item.su-multi-menu__item--expanded>a:before{height:6px;-webkit-transform:scaleX(1);transform:scaleX(1);visibility:visible}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv2{padding-top:1px;padding-left:1.2rem;margin-left:-1.7rem;-webkit-box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);box-shadow:0 10px 20px rgba(0,0,0,.15),0 6px 6px rgba(0,0,0,.2);z-index:101;position:absolute;top:58px;max-width:30rem}.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__link{width:98%}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link{padding-right:0;padding-bottom:2.4rem;padding-left:1rem;margin:0 1.8em 0 .5rem}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link:before,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link:before{left:-6px}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item>.su-multi-menu__link .su-multi-menu__link-text-wrapper{display:inline-block;word-wrap:break-word;max-width:calc(100% - 10px)}.su-multi-menu .su-multi-menu__menu-lv2>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5>.su-multi-menu__item.su-multi-menu__item--parent>.su-multi-menu__link .su-multi-menu__link-text-wrapper{max-width:calc(100% - 50px)}.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv3 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv4 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link,.su-multi-menu .su-multi-menu__menu-lv5 .su-multi-menu__item:not(.su-multi-menu__item--expanded):last-child .su-multi-menu__link{border-bottom:0}}@media (max-width:991px){.su-multi-menu .su-multi-menu__menu-lv2 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv3 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv4 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper,.su-multi-menu .su-multi-menu__menu-lv5 .su-multi-menu__item--parent .su-multi-menu__link-text-wrapper{display:inline-block;word-wrap:break-word;max-width:calc(100% - 38px)}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu--buttons .su-multi-menu__menu-lv1>.su-multi-menu__item{display:contents}}.su-multi-menu .su-multi-menu__item--parent{position:relative}.su-multi-menu .su-multi-menu__item--parent>.su-multi-menu__menu{display:none}.su-multi-menu .su-multi-menu__item--expanded>.su-multi-menu__menu{display:-webkit-box;display:-ms-flexbox;display:flex}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link{font-weight:700}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:before{visibility:visible;height:100%;width:6px;-webkit-transform:scaleY(1);transform:scaleY(1);background-color:#e50808}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:before{background-color:#b1040e}}.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:hover:before{-webkit-transition:left .1s ease-out;transition:left .1s ease-out;background-color:#e50808}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:focus:before,.su-multi-menu .su-multi-menu__item--current>.su-multi-menu__link:hover:before{background-color:#b1040e}}.su-multi-menu .su-multi-menu__nav-toggle{position:absolute;top:-60px;right:0}@media (max-width:991px){.su-multi-menu .su-multi-menu__nav-toggle{padding:0 0 2rem;margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:center;-ms-flex-align:center;align-items:center;outline:none;width:40px;background-color:transparent;color:#2e2d29;font-size:1.6rem;line-height:.7}.su-multi-menu .su-multi-menu__nav-toggle:after{margin:0 auto;display:inline-block;width:30px;height:26px;background:url(../assets/svg/hamburger-black.svg) no-repeat 3px 0;content:""}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:before{visibility:visible;-webkit-transform:scaleX(1);transform:scaleX(1);background-color:#b6b1a9}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:after{width:22px;background:url(../assets/svg/close-black.svg) no-repeat 3px 0;background-size:16px 16px}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:focus:before,.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:hover:before{background-color:#b1040e}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]:active:before{background-color:#e50808}.su-multi-menu .su-multi-menu__nav-toggle:active,.su-multi-menu .su-multi-menu__nav-toggle:focus,.su-multi-menu .su-multi-menu__nav-toggle:hover{background-color:transparent;color:#2e2d29;-webkit-box-shadow:none;box-shadow:none}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=false]+.su-multi-menu__menu-lv1{display:none}.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{position:absolute}.su-multi-menu .su-multi-menu__nav-toggle--center{margin-right:auto;margin-left:auto}.su-multi-menu .su-multi-menu__nav-toggle--right{margin-right:0;margin-left:auto}}@media only screen and (min-width:768px) and (max-width:991px){.su-multi-menu .su-multi-menu__nav-toggle[aria-expanded=true]+.su-multi-menu__menu-lv1{max-width:24em;right:0}}@media only screen and (min-width:992px){.su-multi-menu .su-multi-menu__nav-toggle{display:none}}@media only screen and (min-width:992px){.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle{padding:0;display:inline-block;right:0;text-align:center;font-size:0;overflow:hidden;z-index:10;background:transparent;outline:none;-webkit-box-shadow:none;box-shadow:none}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]{border:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]:active,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle[aria-expanded=true]:focus{border-top:1px solid #2e2d29;border-bottom:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:before{content:"";background:url(../assets/svg/caret-down-red.svg) no-repeat 50%/50%;background-size:15px;border-radius:0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover[aria-expanded=false]{-webkit-transition:border-bottom .25s steps(1),-webkit-transform .3s ease-out;transition:border-bottom .25s steps(1),-webkit-transform .3s ease-out;transition:transform .3s ease-out,border-bottom .25s steps(1);transition:transform .3s ease-out,border-bottom .25s steps(1),-webkit-transform .3s ease-out;-webkit-transform:rotate(0deg);transform:rotate(0deg);border-bottom:1px solid #2e2d29}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover{background:transparent}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus:before,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:hover:before{background:url(../assets/svg/caret-down-black.svg) no-repeat 50%/50%;background-size:15px}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:active,.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu>.su-multi-menu__item--parent>.su-nav-toggle:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;font-weight:700;background:transparent;border-bottom:1px solid #2e2d29}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent{margin:0 43px 0 0}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-nav-toggle{position:relative;width:15px;height:15px;top:calc(50% - 6px);left:6px}.su-multi-menu.su-multi-menu--dropdowns .su-multi-menu__menu-lv1>.su-multi-menu__item--parent>.su-multi-menu__link:after{content:"";height:1em;margin-bottom:-5px;margin-left:12px;border-right:1px solid #766253;display:inline-block}}@media only screen and (min-width:992px){.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1,.su-multi-menu.su-multi-menu--right>ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item--parent:last-of-type,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item:last-child,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>li:last-of-type,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item--parent:last-of-type,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item:last-child,.su-multi-menu.su-multi-menu--right>ul>li:last-of-type{padding-right:0;margin-right:0}.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item--parent:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>.su-multi-menu__item:last-child>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right .su-multi-menu__menu-lv1>li:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item--parent:last-of-type>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>.su-multi-menu__item:last-child>.su-multi-menu__link,.su-multi-menu.su-multi-menu--right>ul>li:last-of-type>.su-multi-menu__link{margin-right:0}}nav+.su-site-search,ul li .su-site-search{display:none}@media (max-width:991px){ul li .su-site-search.search-block-form{display:block}}@media only screen and (max-width:991px) and (min-width:0){ul li .su-site-search.search-block-form{margin:2.31rem 2.31rem 1.6rem 1.6rem}}@media only screen and (max-width:991px) and (min-width:768px){ul li .su-site-search.search-block-form{margin:2.6rem 2.6rem 1.8rem 1.8rem}}@media only screen and (max-width:991px) and (min-width:1500px){ul li .su-site-search.search-block-form{margin:2.74rem 2.74rem 1.9rem 1.9rem}}.stanford-people-grid .flex-container{-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left}@media only screen and (min-width:0){.su-secondary-nav{margin-bottom:11.2rem}}@media only screen and (min-width:768px){.su-secondary-nav{margin-bottom:12.6rem}}@media only screen and (min-width:1500px){.su-secondary-nav{margin-bottom:13.3rem}}.su-secondary-nav,.su-secondary-nav .su-secondary-nav__menu{background:transparent}.su-secondary-nav .su-secondary-nav__link{border-top:0}.su-secondary-nav>.su-secondary-nav__menu{margin-left:0;padding-left:0}.su-secondary-nav>.su-secondary-nav__menu>.su-secondary-nav__item{border-top:1px solid #d9d9d9;line-height:1.2em}.su-secondary-nav>.su-secondary-nav__menu>.su-secondary-nav__item:first-child{border:0}.su-secondary-nav--light .su-secondary-nav__link{color:#b1040e}.su-secondary-nav--light .su-secondary-nav__link:focus:before,.su-secondary-nav--light .su-secondary-nav__link:hover:before{background-color:#b1040e}.su-secondary-nav--light .su-secondary-nav__item--current>.su-secondary-nav__link{color:#2e2d29}.su-secondary-nav--light .su-secondary-nav__item--current>.su-secondary-nav__link:before{background-color:#2e2d29}@media only screen and (min-width:0){.block--page-title,.node-stanford-page-title{margin-top:8rem}}@media only screen and (min-width:768px){.block--page-title,.node-stanford-page-title{margin-top:9rem}}@media only screen and (min-width:1500px){.block--page-title,.node-stanford-page-title{margin-top:9.5rem}}.su-wysiwyg-text p{max-width:100ch}.su-wysiwyg-text p.text-align-right{text-align:right;margin-left:auto}.su-wysiwyg-text p.text-align-center{text-align:center;margin-left:auto;margin-right:auto}.su-wysiwyg-text .align-center img,.su-wysiwyg-text .align-center picture{margin:0 auto}.su-wysiwyg-text .align-center .media.file{text-align:center}.su-wysiwyg-text .align-center .media.video{aspect-ratio:16/9}.su-wysiwyg-text .align-center .media.video iframe{height:100%;width:100%}.su-wysiwyg-text .align-left .file.media{padding:.4em 1.5em 0 0}.su-wysiwyg-text .align-right .file.media{padding:.4em 0 0 1.5em}.paragraph.paragraph--type--stanford-spacer{margin-bottom:3rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer{margin-bottom:3.6rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer{margin-bottom:3.8rem}}.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2.6rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer.su-spacer-reduced{margin-bottom:2.7rem}}.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.1rem}@media only screen and (min-width:768px){.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.2rem}}@media only screen and (min-width:1500px){.paragraph.paragraph--type--stanford-spacer.su-spacer-minimal{margin-bottom:1.3rem}} \ No newline at end of file diff --git a/themes/stanford_basic/package-lock.json b/themes/stanford_basic/package-lock.json index 29b69e87e..384d5f6b7 100644 --- a/themes/stanford_basic/package-lock.json +++ b/themes/stanford_basic/package-lock.json @@ -3445,9 +3445,9 @@ "dev": true }, "decanter": { - "version": "6.2.16", - "resolved": "https://registry.npmjs.org/decanter/-/decanter-6.2.16.tgz", - "integrity": "sha512-O+A+dk6V1tTk0W7/1HdqVj1GmJwYnLDG7Nd9uz2MlM63z0JX9pujbujJFkRM7LmrcxgWrw1IK/Do0DX27S482Q==", + "version": "6.2.18", + "resolved": "https://registry.npmjs.org/decanter/-/decanter-6.2.18.tgz", + "integrity": "sha512-7vol5nB+CuXT6suyVhr1Sm9sxSYStbTAXscLhGOlfg8FguUHD1oLnHWaqvByvPvqMfWs1K+IuDclYzLTtqhmqQ==", "dev": true, "requires": { "@fortawesome/fontawesome-free": "^5.15.4", diff --git a/themes/stanford_basic/src/scss/components/masthead/_wrapper.scss b/themes/stanford_basic/src/scss/components/masthead/_wrapper.scss index 8a5e40d2b..88563c2a3 100644 --- a/themes/stanford_basic/src/scss/components/masthead/_wrapper.scss +++ b/themes/stanford_basic/src/scss/components/masthead/_wrapper.scss @@ -17,8 +17,9 @@ margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); - @include grid-media('lg') { + @include grid-media('md') { width: 100%; + max-width: 100%; margin-left: auto; margin-right: auto; } diff --git a/themes/stanford_basic/src/scss/components/multi-menu/_multi-menu.scss b/themes/stanford_basic/src/scss/components/multi-menu/_multi-menu.scss index 56ea8a536..6a2b667ab 100644 --- a/themes/stanford_basic/src/scss/components/multi-menu/_multi-menu.scss +++ b/themes/stanford_basic/src/scss/components/multi-menu/_multi-menu.scss @@ -479,6 +479,7 @@ &[aria-expanded="true"] + .su-multi-menu__menu-lv1 { max-width: 24em; + right: 0; } } From 4104b69c3347ea8c3b045e70b0246f2574536fbf Mon Sep 17 00:00:00 2001 From: pookmish Date: Thu, 7 Sep 2023 14:39:34 -0500 Subject: [PATCH 2/5] D8CORE-6842 Added and configured stanford_samlauth (#701) --- .github/workflows/tests.yml | 2 +- composer.json | 2 +- config/sync/autologout.settings.yml | 22 + .../sync/config_pages.type.stanford_saml.yml | 30 +- config/sync/core.extension.yml | 7 +- config/sync/r4032login.settings.yml | 18 + config/sync/samlauth.authentication.yml | 83 +++ config/sync/samlauth_user_fields.mappings.yml | 5 + config/sync/simplesamlphp_auth.settings.yml | 31 - config/sync/stanford_samlauth.settings.yml | 20 + config/sync/stanford_ssp.settings.yml | 16 - config/sync/views.view.content.yml | 1 + config/sync/views.view.files.yml | 1 + config/sync/views.view.redirect.yml | 2 +- config/sync/views.view.samlauth_map.yml | 530 ++++++++++++++++++ .../72f0069b-f1ec-4122-af73-6aa841faea90.yml | 2 +- src/Config/ConfigOverrides.php | 57 +- stanford_profile.info.yml | 2 - tests/codeception/acceptance/SubThemeCest.php | 8 - .../acceptance/Users/IntranetCest.php | 10 +- .../Plugin/InstallTask/SiteSettingsTest.php | 2 - tests/src/Unit/Config/ConfigOverridesTest.php | 37 +- 22 files changed, 793 insertions(+), 95 deletions(-) create mode 100644 config/sync/autologout.settings.yml create mode 100644 config/sync/r4032login.settings.yml create mode 100644 config/sync/samlauth.authentication.yml create mode 100644 config/sync/samlauth_user_fields.mappings.yml delete mode 100644 config/sync/simplesamlphp_auth.settings.yml create mode 100644 config/sync/stanford_samlauth.settings.yml delete mode 100644 config/sync/stanford_ssp.settings.yml create mode 100644 config/sync/views.view.samlauth_map.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 87dd4e850..7f67fd225 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -87,7 +87,7 @@ jobs: options: '--network-alias=drupal8ci' services: selenium: - image: selenium/standalone-chrome + image: selenium/standalone-chrome:115.0 options: '--shm-size="2g"' mysql: image: mysql:5.7 diff --git a/composer.json b/composer.json index 0e93ee69e..26281045c 100644 --- a/composer.json +++ b/composer.json @@ -162,7 +162,7 @@ "su-sws/stanford_media": "^9.0", "su-sws/stanford_migrate": "^8.3", "su-sws/stanford_profile_helper": "^9.2", - "su-sws/stanford_ssp": "^8.2" + "su-sws/stanford_samlauth": "^1.0" }, "config": { "sort-packages": true diff --git a/config/sync/autologout.settings.yml b/config/sync/autologout.settings.yml new file mode 100644 index 000000000..79e14f8a2 --- /dev/null +++ b/config/sync/autologout.settings.yml @@ -0,0 +1,22 @@ +_core: + default_config_hash: kwGGKvKSU7cPTEgTMWrbW0o9Jwe6FSDmpgdUWmIXCdg +enabled: true +timeout: 43200 +max_timeout: 172800 +padding: 20 +logout_regardless_of_activity: false +no_individual_logout_threshold: false +role_logout: false +role_logout_max: false +redirect_url: /user/login +no_dialog: false +message: 'Your session is about to expire. Do you want to reset it?' +inactivity_message: 'You have been logged out due to inactivity.' +inactivity_message_type: status +modal_width: 450 +enforce_admin: false +jstimer_format: '%hours%:%mins%:%secs%' +jstimer_js_load_option: false +use_alt_logout_method: false +use_watchdog: true +whitelisted_ip_addresses: '' diff --git a/config/sync/config_pages.type.stanford_saml.yml b/config/sync/config_pages.type.stanford_saml.yml index 9e32d00d6..6c4955717 100644 --- a/config/sync/config_pages.type.stanford_saml.yml +++ b/config/sync/config_pages.type.stanford_saml.yml @@ -6,51 +6,45 @@ dependencies: - config_pages_overrides third_party_settings: config_pages_overrides: - adb68721-a642-41a8-a15e-0f54da3f2dac: - field: su_simplesaml_roles - delta: 0 - column: value - config_name: simplesamlphp_auth.settings - config_item: role.population 2b719076-004b-4596-9f49-6987ce0b5a04: field: su_simplesaml_allowed delta: -1 column: value - config_name: stanford_ssp.settings + config_name: stanford_samlauth.settings config_item: allowed.groups 3c6bbd4f-d697-408a-b12e-544c6b740b8d: field: su_simplesaml_users delta: -1 column: value - config_name: stanford_ssp.settings + config_name: stanford_samlauth.settings config_item: allowed.users b4145a0d-796c-418e-b71a-83c365aa27e2: field: su_simplesaml_users delta: 0 column: value - config_name: stanford_ssp.settings - config_item: restriction + config_name: stanford_samlauth.settings + config_item: restrict 50bcbb65-445c-410a-9c93-5d5a88870d2c: field: su_simplesaml_allowed delta: 0 column: value - config_name: stanford_ssp.settings - config_item: restriction + config_name: stanford_samlauth.settings + config_item: restrict 2e223afa-8768-41f6-acdd-cfe15114b930: field: su_simplesaml_affil delta: 0 column: value - config_name: stanford_ssp.settings - config_item: restriction + config_name: stanford_samlauth.settings + config_item: restrict 576fa6f9-1295-4d86-b639-0e6cac675d35: field: su_simplesaml_affil delta: -1 column: value - config_name: stanford_ssp.settings + config_name: stanford_samlauth.settings config_item: allowed.affiliations id: stanford_saml -label: SimpleSAML -token: null +label: SAML +token: false context: show_warning: true group: @@ -58,6 +52,6 @@ context: fallback: language: '' menu: - path: /admin/config/people/simplesaml + path: /admin/config/people/stanford-saml weight: -10 description: '' diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 2befef5ba..3d11c9980 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -7,6 +7,7 @@ module: admin_toolbar_tools: 0 allowed_formats: 0 auto_entitylabel: 0 + autologout: 0 block: 0 block_content: 0 block_content_permissions: 0 @@ -143,6 +144,7 @@ module: pdb_react: 0 preprocess_event_dispatcher: 0 printable: 0 + r4032login: 0 rabbit_hole: 0 react_paragraphs: 0 react_paragraphs_behaviors: 0 @@ -156,6 +158,8 @@ module: rh_node: 0 rh_taxonomy: 0 role_delegation: 0 + samlauth: 0 + samlauth_user_fields: 0 scheduler: 0 search_api: 0 search_api_db: 0 @@ -164,7 +168,6 @@ module: shortcut: 0 shs: 0 simple_oauth: 0 - simplesamlphp_auth: 0 smart_date: 0 smart_trim: 0 sophron: 0 @@ -191,7 +194,7 @@ module: stanford_profile_drush: 0 stanford_profile_styles: 0 stanford_publication: 0 - stanford_ssp: 0 + stanford_samlauth: 0 subrequests: 0 syslog: 0 system: 0 diff --git a/config/sync/r4032login.settings.yml b/config/sync/r4032login.settings.yml new file mode 100644 index 000000000..e35ae9e13 --- /dev/null +++ b/config/sync/r4032login.settings.yml @@ -0,0 +1,18 @@ +_core: + default_config_hash: FtwnuCXmazPAh2H2i_gbDhMK1-eBmNy1dG4RBU4qt4o +langcode: en +display_denied_message: true +access_denied_message: 'Access denied. You must log in to view this page.' +access_denied_message_type: error +redirect_authenticated_users_to: '' +throw_authenticated_404: false +display_auth_denied_message: true +access_denied_auth_message: 'Access denied. Check with your site administrator if you need assistance.' +access_denied_auth_message_type: error +user_login_path: /user/login +default_redirect_code: 307 +add_noindex_header: true +destination_parameter_override: '' +match_noredirect_pages: "/jsonapi\r\n/jsonapi/*\r\n/subrequests" +match_noredirect_negate: 0 +redirect_to_destination: true diff --git a/config/sync/samlauth.authentication.yml b/config/sync/samlauth.authentication.yml new file mode 100644 index 000000000..64c169fad --- /dev/null +++ b/config/sync/samlauth.authentication.yml @@ -0,0 +1,83 @@ +_core: + default_config_hash: oDGEkhP0h5rXXqlDplxeBDre0goLigOJupHKMDMwcqM +login_menu_item_title: '' +logout_menu_item_title: '' +login_redirect_url: '' +logout_redirect_url: '' +error_redirect_url: '' +error_throw: false +local_login_saml_error: false +logout_different_user: false +drupal_login_roles: + administrator: '0' + authenticated: '0' + stanford_faculty: '0' + stanford_staff: '0' + stanford_student: '0' + contributor: '0' + site_manager: '0' + site_editor: '0' + site_builder: '0' + site_developer: '0' + layout_builder_user: '0' + decoupled_site_users: '0' +sp_entity_id: '' +sp_name_id_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient' +sp_x509_certificate: '' +sp_new_certificate: '' +sp_private_key: '' +metadata_valid_secs: 60 +metadata_cache_http: false +idp_entity_id: 'https://idp.stanford.edu/' +idp_single_sign_on_service: 'https://login.stanford.edu/idp/profile/SAML2/Redirect/SSO' +idp_single_log_out_service: '' +idp_change_password_service: '' +idp_certs: { } +idp_cert_encryption: '' +unique_id_attribute: uid +map_users: false +map_users_name: true +map_users_mail: true +map_users_roles: + administrator: administrator + stanford_faculty: stanford_faculty + stanford_staff: stanford_staff + stanford_student: stanford_student + contributor: contributor + site_manager: site_manager + site_editor: site_editor + site_builder: site_builder + site_developer: site_developer + layout_builder_user: layout_builder_user + decoupled_site_users: decoupled_site_users +create_users: true +sync_name: false +sync_mail: false +user_name_attribute: '' +user_mail_attribute: mail +request_set_name_id_policy: true +strict: true +security_metadata_sign: false +security_authn_requests_sign: true +security_logout_requests_sign: true +security_logout_responses_sign: true +security_nameid_encrypt: false +security_signature_algorithm: '' +security_encryption_algorithm: '' +security_messages_sign: true +security_assertions_signed: false +security_assertions_encrypt: false +security_nameid_encrypted: false +security_want_name_id: true +security_request_authn_context: true +security_lowercase_url_encoding: true +security_logout_reuse_sigs: false +security_allow_repeat_attribute_name: false +debug_display_error_details: false +debug_log_in: false +debug_log_saml_in: false +debug_log_saml_out: false +debug_phpsaml: false +use_proxy_headers: false +use_base_url: true +bypass_relay_state_check: false diff --git a/config/sync/samlauth_user_fields.mappings.yml b/config/sync/samlauth_user_fields.mappings.yml new file mode 100644 index 000000000..0c80585a7 --- /dev/null +++ b/config/sync/samlauth_user_fields.mappings.yml @@ -0,0 +1,5 @@ +field_mappings: + - + attribute_name: displayName + field_name: su_display_name + link_user_order: null diff --git a/config/sync/simplesamlphp_auth.settings.yml b/config/sync/simplesamlphp_auth.settings.yml deleted file mode 100644 index a641fe447..000000000 --- a/config/sync/simplesamlphp_auth.settings.yml +++ /dev/null @@ -1,31 +0,0 @@ -_core: - default_config_hash: BuLah1nwoT5oUjn6XIuKnXkjcvdt5tDIGQ6gAflOY0s -langcode: en -activate: true -auth_source: default-sp -login_link_display_name: 'SUNetID Login' -login_link_show: true -user_name: uid -unique_id: uid -mail_attr: mail -header_no_cache: true -role: - population: 'administrator:eduPersonEntitlement,=,uit:sws' - eval_every_time: 2 -register_users: true -allow: - set_drupal_pwd: false - default_login: true - default_login_roles: - decoupled_site_users: decoupled_site_users - default_login_users: '1' -logout_goto_url: '' -user_register_original: visitors_admin_approval -sync: - mail: true - user_name: true -autoenablesaml: true -debug: false -secure: true -httponly: false -default_langcode: en diff --git a/config/sync/stanford_samlauth.settings.yml b/config/sync/stanford_samlauth.settings.yml new file mode 100644 index 000000000..1083393c9 --- /dev/null +++ b/config/sync/stanford_samlauth.settings.yml @@ -0,0 +1,20 @@ +_core: + default_config_hash: Gg16MjldLejVucRsgAVxrnzR6CxV4zt94j_HnyyxQ3g +hide_local_login: true +local_login_fieldset_label: 'Drupal Login' +local_login_fieldset_open: false +allowed: + restrict: false + users: { } + affiliations: { } + groups: { } +role_mapping: + workgroup_api: + cert: '' + key: '' + reevaluate: new + mapping: + - + role: administrator + attribute: eduPersonEntitlement + value: 'uit:sws' diff --git a/config/sync/stanford_ssp.settings.yml b/config/sync/stanford_ssp.settings.yml deleted file mode 100644 index 0cdeef6f2..000000000 --- a/config/sync/stanford_ssp.settings.yml +++ /dev/null @@ -1,16 +0,0 @@ -_core: - default_config_hash: EENsVx8JYDmz1Vsf7oRgpbenOH3I5XbY23kjUBkW1gc -saml_attribute: eduPersonEntitlement -hide_local_login: true -use_workgroup_api: true -workgroup_api_cert: '' -workgroup_api_key: '' -restriction: all -allowed: - affiliations: { } - groups: { } - users: { } -exclude_redirect: - - /jsonapi - - '/jsonapi/*' - - /subrequests diff --git a/config/sync/views.view.content.yml b/config/sync/views.view.content.yml index ea368f15b..eec23c6d3 100644 --- a/config/sync/views.view.content.yml +++ b/config/sync/views.view.content.yml @@ -74,6 +74,7 @@ display: batch: true batch_size: 10 form_step: true + ajax_loader: false buttons: false action_title: Action clear_on_exposed: true diff --git a/config/sync/views.view.files.yml b/config/sync/views.view.files.yml index 23b13b057..c62906867 100644 --- a/config/sync/views.view.files.yml +++ b/config/sync/views.view.files.yml @@ -74,6 +74,7 @@ display: batch: true batch_size: 10 form_step: true + ajax_loader: false buttons: false action_title: Action clear_on_exposed: true diff --git a/config/sync/views.view.redirect.yml b/config/sync/views.view.redirect.yml index 291e0a149..ca0c8de2f 100644 --- a/config/sync/views.view.redirect.yml +++ b/config/sync/views.view.redirect.yml @@ -247,7 +247,7 @@ display: type: basic options: submit_button: Filter - reset_button: false + reset_button: true reset_button_label: Reset exposed_sorts_label: 'Sort by' expose_sort_order: true diff --git a/config/sync/views.view.samlauth_map.yml b/config/sync/views.view.samlauth_map.yml new file mode 100644 index 000000000..1d5fff8f5 --- /dev/null +++ b/config/sync/views.view.samlauth_map.yml @@ -0,0 +1,530 @@ +uuid: 46ee9057-96b1-46a0-a427-d453f14daaf9 +langcode: en +status: true +dependencies: + module: + - externalauth + - samlauth + - user +id: samlauth_map +label: 'SAML Authentication Links' +module: views +description: '' +tag: '' +base_table: authmap +base_field: '' +display: + default: + id: default + display_title: Master + display_plugin: default + position: 0 + display_options: + title: 'SAML Authentication Links' + fields: + authname: + id: authname + table: authmap + field: authname + relationship: none + group_type: group + admin_label: '' + plugin_id: standard + label: 'SAML IdP Unique ID' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + uid: + id: uid + table: authmap + field: uid + relationship: none + group_type: group + admin_label: '' + plugin_id: numeric + label: 'Drupal User ID' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: '' + format_plural: false + format_plural_string: !!binary MQNAY291bnQ= + prefix: '' + suffix: '' + name: + id: name + table: users_field_data + field: name + relationship: uid + group_type: group + admin_label: '' + entity_type: user + entity_field: name + plugin_id: field + label: 'Drupal User Name' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: user_name + settings: + link_to_entity: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + delete: + id: delete + table: authmap + field: delete + relationship: none + group_type: group + admin_label: '' + plugin_id: samlauth_link_delete + label: delete + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + text: delete + output_url_as_text: false + absolute: false + pager: + type: mini + options: + offset: 0 + items_per_page: 50 + total_pages: null + id: 0 + tags: + next: ›› + previous: ‹‹ + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + access: + type: perm + options: + perm: 'configure saml' + cache: + type: none + options: { } + empty: + area_text_custom: + id: area_text_custom + table: views + field: area_text_custom + relationship: none + group_type: group + admin_label: '' + plugin_id: text_custom + empty: true + content: 'No links (from SAML Authentication ID to Drupal user) found.' + tokenize: false + sorts: { } + arguments: { } + filters: + authname: + id: authname + table: authmap + field: authname + relationship: none + group_type: group + admin_label: '' + plugin_id: string + operator: starts + value: '' + group: 1 + exposed: true + expose: + operator_id: authname_op + label: 'SAML IdP Unique ID' + description: '' + use_operator: false + operator: authname_op + operator_limit_selection: false + operator_list: { } + identifier: authname + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + role3: '0' + role4: '0' + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + uid: + id: uid + table: users_field_data + field: uid + relationship: uid + group_type: group + admin_label: '' + entity_type: user + entity_field: uid + plugin_id: user_name + operator: in + value: { } + group: 1 + exposed: true + expose: + operator_id: uid_op + label: 'Drupal user' + description: '' + use_operator: false + operator: uid_op + operator_limit_selection: false + operator_list: { } + identifier: uid + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + role3: '0' + role4: '0' + reduce: false + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + provider_field: + id: provider_field + table: authmap + field: provider_field + relationship: none + group_type: group + admin_label: '' + plugin_id: string + operator: '=' + value: samlauth + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + columns: + authname: authname + uid: uid + name: name + delete: delete + default: authname + info: + authname: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + uid: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + name: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + delete: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + override: true + sticky: false + summary: '' + empty_table: false + caption: '' + description: '' + row: + type: fields + query: + type: views_query + options: + query_comment: '' + disable_sql_rewrite: false + distinct: false + replica: false + query_tags: { } + relationships: + uid: + id: uid + table: authmap + field: uid + relationship: none + group_type: group + admin_label: 'Linked Drupal user' + plugin_id: standard + required: false + show_admin_links: false + header: { } + footer: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { } + page: + id: page + display_title: Page + display_plugin: page + position: 1 + display_options: + display_extenders: { } + path: admin/config/people/saml/authmap + menu: + type: tab + title: Links + description: '' + weight: 7 + expanded: false + menu_name: admin + parent: samlauth.samlauth_configure_form + context: '0' + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { } diff --git a/content/node/72f0069b-f1ec-4122-af73-6aa841faea90.yml b/content/node/72f0069b-f1ec-4122-af73-6aa841faea90.yml index 163b91941..81e51df21 100644 --- a/content/node/72f0069b-f1ec-4122-af73-6aa841faea90.yml +++ b/content/node/72f0069b-f1ec-4122-af73-6aa841faea90.yml @@ -79,7 +79,7 @@ default: value: { } su_banner_body: - - value: "

To edit this page, log in with your SUNetID. After you log in, return to the homepage, and use it as a template to begin building your site.

\r\n" + value: "

To edit this page, log in with your SUNetID. After you log in, return to the homepage, and use it as a template to begin building your site.

\r\n" format: stanford_minimal_html su_banner_header: - diff --git a/src/Config/ConfigOverrides.php b/src/Config/ConfigOverrides.php index 7c097bee1..19d3d1327 100644 --- a/src/Config/ConfigOverrides.php +++ b/src/Config/ConfigOverrides.php @@ -38,11 +38,9 @@ class ConfigOverrides implements ConfigFactoryOverrideInterface { * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * Config factory service. */ - public function __construct(StateInterface $state, ConfigFactoryInterface $config_factory = NULL) { + public function __construct(StateInterface $state, ConfigFactoryInterface $config_factory) { $this->state = $state; - if ($config_factory) { - $this->configFactory = $config_factory; - } + $this->configFactory = $config_factory; } /** @@ -78,11 +76,60 @@ public function loadOverrides($names) { } } } - $this->setOverridesGoogleTag($names, $overrides); + $this->setOverridesGoogleTag($names, $overrides); + if (in_array('stanford_samlauth.settings', $names)) { + $this->setSamlOverrides($overrides); + } return $overrides; } + /** + * Set the saml config overrides. + * + * @param array $overrides + * Keyed array of config overrides. + */ + protected function setSamlOverrides(array &$overrides) { + $original_mapping = $this->configFactory->getEditable('stanford_samlauth.settings') + ->getOriginal('role_mapping.mapping'); + + $config_page_mapping = self::getConfigPageValue('stanford_saml', 'su_simplesaml_roles', 0, 'value', ''); + foreach (array_filter(explode('|', $config_page_mapping)) as $mapping) { + [$role, $conditions] = explode(':', $mapping, 2); + [$attribute, , $value] = explode(',', $conditions, 3); + $original_mapping[] = [ + 'role' => $role, + 'attribute' => $attribute, + 'value' => $value, + ]; + } + $overrides['stanford_samlauth.settings']['role_mapping']['mapping'] = $original_mapping; + } + + /** + * Get the field value from a config page. + * + * @param string $config_id + * Config page name. + * @param string $field_name + * Field on the config page. + * @param array|int $deltas + * Delta to fetch the field value. + * @param string|null $key + * Column key on the field. + * @param mixed|null $default + * Optional default value if the config page value is empty. + * + * @return array|mixed|null + * Config page field value. + */ + protected static function getConfigPageValue($config_id, $field_name, $deltas = [], $key = NULL, $default = NULL) { + /** @var \Drupal\config_pages\ConfigPagesLoaderServiceInterface $cp_loader */ + $cp_loader = \Drupal::service('config_pages.loader'); + return $cp_loader->getValue($config_id, $field_name, $deltas, $key) ?: $default; + } + /** * Disable google tag manager entities when not on prod environment. * diff --git a/stanford_profile.info.yml b/stanford_profile.info.yml index 179854349..463b60e59 100644 --- a/stanford_profile.info.yml +++ b/stanford_profile.info.yml @@ -101,7 +101,6 @@ install: - 'redirect:redirect' - 'role_delegation:role_delegation' - 'seckit:seckit' - - 'simplesamlphp_auth:simplesamlphp_auth' - 'stanford_date_formats:stanford_date_formats' - 'stanford_fields:stanford_fields' - 'stanford_image_styles:stanford_image_styles' @@ -110,7 +109,6 @@ install: - 'stanford_profile_helper:stanford_paragraph_card' - 'stanford_profile_helper:stanford_profile_helper' - 'stanford_profile_helper:stanford_profile_styles' - - 'stanford_ssp:stanford_ssp' - 'stanford_text_editor:stanford_text_editor' - 'token:token' - 'ui_patterns:ui_patterns' diff --git a/tests/codeception/acceptance/SubThemeCest.php b/tests/codeception/acceptance/SubThemeCest.php index 96ab157b0..3a187e4e4 100644 --- a/tests/codeception/acceptance/SubThemeCest.php +++ b/tests/codeception/acceptance/SubThemeCest.php @@ -113,18 +113,10 @@ public function testMinimalSubtheme(AcceptanceTester $I) { * If config ignore module should be disabled first. */ protected function runConfigImport(AcceptanceTester $I, $disable_config_ignore = FALSE) { - $drush_response = $I->runDrush('pm-list --filter=name=stanford_ssp --format=json'); - $drush_response = json_decode($drush_response, TRUE); - $saml_enabled = $drush_response['stanford_ssp']['status'] == 'Enabled'; - if ($disable_config_ignore) { $I->runDrush('pmu config_ignore'); } - $I->runDrush('config-import -y'); - if (!$saml_enabled) { - $I->runDrush('pm-uninstall simplesamlphp_auth -y'); - } } /** diff --git a/tests/codeception/acceptance/Users/IntranetCest.php b/tests/codeception/acceptance/Users/IntranetCest.php index d111c07e8..09c76957a 100644 --- a/tests/codeception/acceptance/Users/IntranetCest.php +++ b/tests/codeception/acceptance/Users/IntranetCest.php @@ -5,6 +5,7 @@ * * @group users * @group no-parallel + * @group intranet */ class IntranetCest { @@ -57,6 +58,7 @@ public function testIntranet(AcceptanceTester $I) { $I->canSeeResponseCodeIsBetween(301, 403); $I->canSeeNumberOfElements('.su-multi-menu__menu a', 0); + $I->startFollowingRedirects(); $I->logInWithRole('authenticated'); $I->amOnPage('/'); $I->canSeeResponseCodeIsSuccessful(); @@ -94,11 +96,11 @@ public function testAccess(AcceptanceTester $I) { $page_url = $I->grabFromCurrentUrl(); $I->amOnPage('/user/logout'); - // Anonymous users will get denied access. + // Anonymous users will get redirected to the login page. $I->amOnPage($page_url); - $I->canSeeResponseCodeIs(403); + $I->canSeeInCurrentUrl('/user/login?destination=' . $page_url); - // Staff will be denied access. + // Logged in staff will be denied access. $I->logInWithRole('stanford_staff'); $I->amOnPage($page_url); $I->canSeeResponseCodeIs(403); @@ -149,9 +151,11 @@ public function testSearchResults(AcceptanceTester $I) { public function testMediaAccess(AcceptanceTester $I) { $I->runDrush('sset stanford_intranet 1'); $I->runDrush('sset stanford_intranet.allow_file_uploads 1'); + $I->logInWithRole('site_manager'); $I->amOnPage('/media/add/file'); $I->canSeeResponseCodeIs(200); + $I->amOnPage('/user/logout'); $I->runDrush('sset stanford_intranet.allow_file_uploads 0'); $I->logInWithRole('site_manager'); diff --git a/tests/src/Kernel/Plugin/InstallTask/SiteSettingsTest.php b/tests/src/Kernel/Plugin/InstallTask/SiteSettingsTest.php index 678deb16a..18f00db36 100644 --- a/tests/src/Kernel/Plugin/InstallTask/SiteSettingsTest.php +++ b/tests/src/Kernel/Plugin/InstallTask/SiteSettingsTest.php @@ -32,8 +32,6 @@ class SiteSettingsTest extends KernelTestBase { 'config_pages', 'config_pages_overrides', 'externalauth', - 'simplesamlphp_auth', - 'stanford_ssp', 'path_alias', 'user', 'field', diff --git a/tests/src/Unit/Config/ConfigOverridesTest.php b/tests/src/Unit/Config/ConfigOverridesTest.php index ca829533c..a473e1e1b 100644 --- a/tests/src/Unit/Config/ConfigOverridesTest.php +++ b/tests/src/Unit/Config/ConfigOverridesTest.php @@ -2,9 +2,11 @@ namespace Drupal\Tests\stanford_profile\Unit\Config; +use Drupal\config_pages\ConfigPagesLoaderServiceInterface; use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\State\StateInterface; use Drupal\stanford_profile\Config\ConfigOverrides; use Drupal\Tests\UnitTestCase; @@ -28,16 +30,22 @@ class ConfigOverridesTest extends UnitTestCase { protected function setUp(): void { parent::setUp(); $state = $this->createMock(StateInterface::class); - $state->method('get')->will($this->returnCallback([ - $this, - 'getStateCallback', - ])); + $state->method('get') + ->will($this->returnCallback([$this, 'getStateCallback'])); $config_factory = $this->createMock(ConfigFactoryInterface::class); $config_factory->method('getEditable') ->will($this->returnCallback([$this, 'getConfigCallback'])); $this->overrideService = new ConfigOverrides($state, $config_factory); + + $config_page_loader = $this->createMock(ConfigPagesLoaderServiceInterface::class); + $config_page_loader->method('getValue') + ->will($this->returnCallback([$this, 'getConfigPageValue'])); + + $container = new ContainerBuilder(); + $container->set('config_pages.loader', $config_page_loader); + \Drupal::setContainer($container); } public function testConfigOverrides() { @@ -89,6 +97,20 @@ public function testGoogleTagOverrides() { $this->assertEquals($expected, $overrides); } + public function testSamlOverrides() { + $overrides = $this->overrideService->loadOverrides(['stanford_samlauth.settings']); + $expected = [ + 'stanford_samlauth.settings' => [ + 'role_mapping' => [ + 'mapping' => [ + ['role' => 'foo', 'attribute' => 'bar', 'value' => 'baz:bin'], + ], + ], + ], + ]; + $this->assertEquals($expected, $overrides); + } + /** * State callback. */ @@ -134,4 +156,11 @@ public function testConfigOverridesDuringInstall(){ $this->assertEquals($expected, $overrides); } + public function getConfigPageValue($page, $field, $deltas = [], $key = NULL) { + switch ($field) { + case 'su_simplesaml_roles': + return 'foo:bar,=,baz:bin'; + } + } + } From 553f3d9b71efa90ce4a215a1421e9389a2bd6858 Mon Sep 17 00:00:00 2001 From: Jen Breese Date: Mon, 11 Sep 2023 08:22:28 -0700 Subject: [PATCH 3/5] D8CORE-6896: changed the non discrimination link (#707) --- .../global-footer/global-footer.twig | 20 +++++++++---------- themes/stanford_basic/package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/themes/stanford_basic/dist/templates/decanter/components/global-footer/global-footer.twig b/themes/stanford_basic/dist/templates/decanter/components/global-footer/global-footer.twig index 89384b224..ebe5b1011 100644 --- a/themes/stanford_basic/dist/templates/decanter/components/global-footer/global-footer.twig +++ b/themes/stanford_basic/dist/templates/decanter/components/global-footer/global-footer.twig @@ -25,23 +25,23 @@