/************************************************************** BASE NAVIGATION - Works for 80% of cases **************************************************************/ nav, nav ol, nav ul { --padding: 0 1rem; --wrap: nowrap; display: flex; flex-direction: var(--dir, row); justify-content: var(--justify, flex-start); align-items: var(--align, center); gap: var(--gap, 0); flex-wrap: var(--wrap, nowrap); height: var(--btn, 3rem); max-width: 100%; font-family: var(--heading); padding: 0; margin: 0; } /* Items fill parent */ nav li { display: flex; align-items: center; height: max(var(--btn), max-content); width: 100%; max-inline-size: none; padding: 0; } /* Links fill parent */ nav a, nav button { display: flex; text-decoration: none; align-items: center; justify-content: center; height: var(--btn); width: 100%; white-space: nowrap; text-transform: uppercase; transition: var(--trans-color); } nav a { height: var(--btn); padding: var(--padding); } /* Buttons */ nav button { justify-content: center; aspect-ratio: 1; padding: 0; border: 2px solid var(--base); color: var(--contrast); border-radius: 0; } /************************************************************** STATES - Apply to all navs **************************************************************/ /* Active/Focus states */ nav a:hover, nav .current a, nav a.current, nav a:focus, nav a:focus:visited, nav button:focus { background-color: var(--action-0); color: var(--action-contrast); } /* Icon rotation */ .toggle .icon { transform: rotate(0deg); transition: transform var(--trans-base); } .has-submenu.open > button .icon { transform: rotate(900deg); } /************************************************************** SUBMENUS - Generic pattern **************************************************************/ .has-submenu { position: relative; } ul.submenu { --dir: column; height: max-content; position: absolute; top: 100%; left: 0; max-height: 0; transform: scaleY(0); transform-origin: top; width: max(100%, max-content); background-color: rgba(var(--base-rgb),var(--op-3)); border: 2px solid rgba(var(--base-rgb),var(--op-3)); transition: all var(--trans-t) var(--trans-fn); box-shadow: var(--shdw-none); overflow: hidden; } .submenu li { background-color: rgba(var(--base-rgb),var(--op-6)); border: 1px solid var(--base-50); } /* Open state */ .open > ul.submenu { transform: scaleY(1); max-height: 1000%; box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw); } /************************************************************** ACCESSIBILITY - Universal **************************************************************/ .screen-reader-text { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } nav a:focus:not(:focus-visible) { outline: none; } nav a:focus-visible { outline: 2px solid var(--action-0); outline-offset: 2px; } /************************************************************** VARIANT: MOBILE NAV (.always) Only define what makes it different from base **************************************************************/ nav.always { /* Different positioning */ --dir: column; --wrap: nowrap; position: fixed; bottom: 0; right: 0; width: var(--btn); z-index: var(--z-10); } nav.always.open { --justify: flex-end; width: 100vw; height: 100vh; padding-bottom: var(--btn_); background-color: rgba(var(--base-rgb),var(--op-6)); backdrop-filter: blur(5px); } nav.always > ul { --dir: column; --align: center; --justify: flex-start; --gap: 0; height: 100%; position: relative; right: -300vw; width: 100vw; max-height: 100%; padding: 1rem 0 0; overflow: hidden auto; transition: right var(--trans-base); } nav.always.open > ul { right: 0; } nav.always li { flex-wrap: wrap; background-color: rgba(var(--base-rgb), var(--op-6)); } nav.always a { padding: 1rem; max-width: calc(100% - var(--btn)); text-align: center; } /* Split layout for items with submenus */ nav.always .has-submenu { display: flex; } nav.always .has-submenu > a { flex: 1; } nav.always .has-submenu > button { flex: 0 0 var(--btn); } /* Submenu adjustments */ nav.always .submenu { position: relative; padding-right: 4rem; height: max-content; top: 0; width: 100%; border: 2px solid var(--action-0); background-color: rgba(var(--contrast-rgb), var(--op-1)); } nav.always .submenu li { background-color: rgba(var(--base-rgb),var(--op-3)); } /* Toggle button */ nav.always > button { position: fixed; bottom: 0; right: 0; width: var(--btn); height: var(--btn); background-color: var(--base); color: var(--contrast); box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw); transition: width var(--trans-base); } nav.always > button:hover { background-color: var(--action-0); color: var(--action-contrast); } nav.always.open > button { width: 100%; background-color: rgba(var(--base-rgb),var(--op-6)); backdrop-filter: blur(5px); z-index: 1000000; } /* Icon toggle */ nav.always > button .icon-x, nav.always.open > button .icon-list { display: none; } nav.always > button .icon-list, nav.always.open > button .icon-x { display: block; width: 32px; height: 32px; } @media (min-width: 768px) { nav.always > ul { padding-top: var(--btn); } } /************************************************************** VARIANT: BREADCRUMBS (#breadcrumbs) **************************************************************/ nav#breadcrumbs { /* Different sizing */ height: max-content; --wrap: wrap; --gap: 0; width: max-content; max-width: var(--full); position: absolute; background-color: rgba(var(--base-rgb),var(--op-4)); font-size: var(--txt-x-small); padding: .125em; z-index: var(--z-7); } #breadcrumbs ol { height: max-content; --wrap: wrap!important; --justify: flex-start!important; } #breadcrumbs li { width: max-content; } #breadcrumbs a { height: var(--chip); } #breadcrumbs li::after { content: '/'; color: var(--contrast-200); padding: 0 .25rem; } #breadcrumbs li:last-of-type::after { display: none; } #breadcrumbs :is(a, span) { padding: 0 .125rem; color: var(--contrast); text-transform: none; } #breadcrumbs a:focus { background-color: transparent; color: var(--action-0); } /************************************************************** VARIANT: FIXED BOTTOM (nav.fixed.bottom) Only define what makes it different **************************************************************/ nav.fixed.bottom { /* Different positioning */ position: fixed; bottom: 0; left: 0; width: calc(100% - var(--btn)); box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw); z-index: var(--z-9); } nav.fixed.bottom ul { --justify: space-between; width: 100%; background-color: var(--base); padding: 0 .25rem; } nav.fixed.bottom li { flex: 1; justify-content: center; } nav.fixed.bottom a { gap: 1rem; --w: var(--chip_); color: var(--contrast); font-size: var(--txt-x-small); } @media (min-width: 768px) { nav.fixed.bottom a { font-size: var(--txt-medium); } } /************************************************************** VARIANT: ON THIS PAGE (nav.on-this-page) Only define what makes it different **************************************************************/ nav.on-this-page { --justify: space-between; position: fixed; bottom: 0; left: 0; width: calc(100% - var(--btn)); max-width: none; padding: 0 .5rem; background-color: rgba(var(--base-rgb),var(--op-4)); color: var(--base-200); box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw); z-index: var(--z-6); } .on-this-page li, .on-this-page a { width: 100%; height: 100%; } body:has(nav.fixed) nav.on-this-page { bottom: var(--btn); } body:has(.additional-actions button) nav.on-this-page{ width: calc(100vw - var(--btn_) - 1rem); } .on-this-page button { order: 3; padding: 0 1rem; width: max-content; aspect-ratio: unset; height: var(--btn); } .on-this-page.open button { order: 0; } .on-this-page ul { width: 100%; gap: 0; } .on-this-page li { justify-content: center; } .on-this-page .active a { background-color: rgba(var(--base-rgb),var(--op-6)); color: var(--action-contrast); } .on-this-page a { padding: 0; } .on-this-page #back-to-top span { display: none; } .on-this-page.open #back-to-top span { display: block; } /************************************************************** VARIANT: LETTERS (nav.letters) Only define what makes it different **************************************************************/ nav.letters li { height: var(--chip); max-width: calc(7.69% - 2px); /*Fit 26 letters over 2 rows) */ } nav.letters ul { --wrap: wrap; } nav.letters, nav.letters ul { height: var(--chipchip); } @media (min-width: 768px) { nav.letters, nav.letters ul { height: var(--chip); } nav.letters ul { --wrap: nowrap; } nav.letters li { max-width: none; } nav.letters a { padding: .25rem .66rem; } } /************************************************************** VARIANT: INDEX/TOC (nav.index) Only define what makes it different **************************************************************/ nav.index { --justify: space-between; --padding: 0; background-color: rgba(var(--base-rgb),var(--op-6)); } .index ul { width: 100%; } .index li { flex-shrink: 0; transform: scaleX(0); max-width: 0; overflow: hidden; } .index li.active, .index li.adj { transform: scaleX(1); width: calc(100% - var(--btn_)); flex-shrink: 1; max-width: none; } .index li:first-of-type { flex-shrink: 1; transform: scaleX(1); order: 9999; width: var(--btn); height: var(--btn); max-width: none; } @media (max-width: 767px) { .index li.adj { transform: scaleX(0); max-width: 0; } } .index a { border-bottom: 4px solid transparent; } .index .active a { border-color: var(--action-0); color: var(--contrast); } /* Index open state */ .index.open { --dir: column-reverse; height: var(--maxHeight); width: 100%; align-items: flex-end; background-color: rgba(var(--base-rgb),var(--op-6)); backdrop-filter: blur(5px); z-index: var(--z-10); } .index.open ul { --dir: column; --justify: flex-end; height: 100%; width: 100%; } .index.open li { width: 100%; height: var(--btn); max-width: 100%!important; transform: scaleX(1); overflow: visible; } .index.open a { justify-content: flex-end; padding: 0 2rem 0 0; background-color: transparent; } /************************************************************** VARIANT: CONDENSED (nav.condensed) Only define what makes it different **************************************************************/ nav.condensed { height: max-content; --wrap: wrap; --gap: 0 .25rem; } nav.condensed ul { min-height: var(--chip_); height: max-content; --justify: center; --wrap: wrap; } .condensed li { width: max-content; min-height: var(--chip); } .condensed li + li::before { content: 'ยท'; padding: 0 .25em; } .condensed a { height: max-content; min-height: var(--chip); font-size:var(--txt-x-small); padding: 0 .25rem; text-transform: none; border-bottom: 2px solid transparent; } .condensed a:focus { border-color: var(--action-0); } /************************************************************** VARIANT: SOCIALS (ul.socials) Only define what makes it different **************************************************************/ ul.socials { --dir: row; height: max-content; --gap: .5rem; --justify: stretch; --wrap:nowrap; overflow: auto hidden; touch-action: pan-x; } .always ul.socials, .always ul.socials li, .always ul.socials a { width: 100%; } ul.socials a { padding: .5rem; max-width: none; } ul.socials .icon { margin: 0; } /************************************************************** VARIANT: TABS (nav.tabs) Only define what makes it different **************************************************************/ nav.tabs { position: fixed; bottom: var(--btn); left: var(--btnbtn); right: var(--btnbtn); padding-bottom: 2px; z-index: var(--z-6); touch-action: pan-x pan-y; --wrap:nowrap; overflow: auto hidden; } nav.tabs button { aspect-ratio: unset; } nav.tabs button.active { cursor: default; } nav.tabs button.active:hover { background-color: var(--base-100); color: var(--contrast); } nav.tabs button h2 { --wrap: nowrap; margin: 0; font-size: var(--txt-x-small); } .tab-content nav.tabs button { height: var(--chip_); padding: .25rem .75rem; min-height: 0; } .tab-content.active { padding: 1rem 0; } .tab-content h2 { margin: 0 0 .5rem; } .tab-content nav.tabs { height: max-content; background-color: var(--base); --gap: 0; } .tab-content .tab-content nav.tabs { background-color: var(--base-100); } .tab-content .tab-content .tab-content nav.tabs { background-color: var(--base-200); } .tab-content nav.tabs button.active h2 { color: var(--action-0); } /************************************************************** VARIANT: MENU (nav.menu) Only define what makes it different **************************************************************/ nav.menu a { padding: .5rem .66rem; } /************************************************************** VARIANT: SHARE (nav.share) Only define what makes it different **************************************************************/ nav.share { height: max-content; margin: 1rem 0; } nav.share ul { overflow: visible; } nav.share h4 { display: inline-block; width: max-content; margin: .25rem .5rem .25rem 0; font-size: var(--txt-x-small); } /************************************************************** HEADER ELEMENTS **************************************************************/ :where(body > header, .wp-site-blocks > header) { --dir: row; --justify: space-between; position: sticky; top: 0; left: 0; right: 0; height: var(--btn); width: 100vw; display: flex; align-items: center; padding: 0 .5rem; background-color: var(--base); box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw); z-index: var(--z-9); } .wp-site-blocks > header img { width: var(--btn); } /************************************************************** CURRENT HOURS BANNER **************************************************************/ /*.current-hours {*/ /* position: sticky;*/ /* top: var(--nav-height);*/ /* padding: .25rem 1rem;*/ /* background-color: var(--action-0);*/ /* color: var(--action-contrast);*/ /* box-shadow: rgba(var(--base-rgb),var(--op-45)) var(--shdw);*/ /* display: flex;*/ /* justify-content: space-between;*/ /* z-index: 100;*/ /*}*/ /*.current-hours p {*/ /* margin: 0;*/ /* display: flex;*/ /* flex-wrap: wrap;*/ /* flex: 1;*/ /*}*/ /*.current-hours p + p {*/ /* justify-content: flex-end;*/ /*}*/ /*.current-hours a {*/ /* color: var(--action-contrast);*/ /*}*/ /*.current-hours b {*/ /* margin-right: .25rem;*/ /*}*/ /************************************************************** FIND US BUTTONS **************************************************************/ /*.find-us {*/ /* display: flex;*/ /* align-items: center;*/ /* gap: 0 .5rem;*/ /*}*/ /*.find-us a {*/ /* padding: .25rem 1rem;*/ /* border: 1px solid var(--action-contrast);*/ /* border-radius: var(--radius);*/ /*}*/ /************************************************************** UTILITIES **************************************************************/ /* Hide navigation when empty */ nav.term-navigation:has(*[hidden]) { display: none; } /* Dashboard nav */ .dashboard-nav { --justify: flex-start; width: 100%; } nav.filters { --dir: row; --justify: flex-start; overflow: auto hidden; } nav.filters .filter { width: auto; padding: .25rem .75rem; }