/* rl-site.css: audit layer for woodburytech.com (BBA 2026-10-15).
   Loaded by include-head.php after the theme and plugin sheets and BEFORE rl-rhythm.css (which stays last).
   Theme: static export of the "woodbury" WordPress theme (Oswald headings, Open Sans body), wp-responsive-menu plugin.
   Sections: rhythm constants, sticky footer, utilities, skip link, button-links, typography, legal pages, link icons,
   content link underlines, mobile menu, RL Consent sizing, 404, focus rings (LAST). */

/* Universal vertical rhythm (FRAMEWORK/css/rl-rhythm.css). Open Sans ink constants (ascent 1.070, descent 0.290,
   cap 0.714, measured with scripts/check-rule-spacing.js --fonts); Oswald headings re-measured after the first render. */
:root {
  --rl-rhythm: 48px;
  --rl-ink-top-head: 0.360em;  --rl-ink-bottom-head: 0.450em; /* Oswald 400: ascent 1.190 descent 0.290 cap 0.810 */
  --rl-ink-top-body: 0.324em;  --rl-ink-bottom-body: 0.390em;
}

/* Sticky footer (AUDIT Step 3): #page wraps header, main and footer. */
#page.site { min-height: 100vh; min-height: 100svh; display: flex; flex-direction: column; }
#page.site > main { flex: 1 0 auto; }

/* Visually hidden utility (consent cues) */
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* Skip link: the theme's screen-reader-text pattern hides it until focused; make the focused state unmistakable. */
.skip-link.screen-reader-text:focus { position: absolute !important; left: 8px; top: 8px; z-index: 10001; width: auto; height: auto; clip: auto; clip-path: none; background: #fff; color: #000; padding: 10px 14px; font-size: 15px; font-weight: 600; text-decoration: underline; border: 2px solid #285786; }

/* Button-links: the export wrapped links in <button> elements (nested interactive controls). They are now plain links
   carrying the theme's button classes; the theme's selectors were rewritten from button.X to a.X in style.css. */
a.cta-1, a.cta-2, a.about-button, a.cap-button, a.careers-button, a.employ-read-more { display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; text-decoration: none; cursor: pointer; }

/* Body copy: Open Sans regular at 17px with 1.6 leading on desktop, 16px on phones (owner typography standard 2026-10-14).
   The theme asked for a font named "Open Sans Light" that no browser has, so every visitor saw the system fallback. */
body, .page { font-family: "Open Sans", sans-serif; font-weight: 400; font-size: 17px; line-height: 1.6; }
.entry-content p, .entry-content li { font-size: 17px; line-height: 1.6; }
@media (max-width: 736px) { body, .page, .entry-content p, .entry-content li { font-size: 16px; } }

/* About page tagline (was an h3 out of heading order under the h1) */
.tagline { font-family: "Oswald", sans-serif; font-weight: 400; color: #285786; font-size: 22px; line-height: 1.3; margin: 0 0 1em; }
/* Measured with check-rule-spacing (2026-10-15): the About tagline and the rule under it, and the contact section's two
   layouts, sat uneven against their containers; these margins bring each pair level. */
.about-page-container { padding: 26px 0; }
.page-about .about-page-container { padding: 27px 0 23px; } /* About: Oswald tagline first, button row last */
.about-buttons-container { padding-top: 0; padding-bottom: 0; }
.about-page-container > div.about-buttons-container:last-child { margin-bottom: 0; } /* a row of boxes, not text: no ink pull */
/* Below the theme's 830px breakpoint the button row loses its 1.5em padding */

/* Why Woodbury: the two check-lists carried 1em list padding and .5em icon padding; the section owns the inset instead */
.why-container { padding: 19px 0; }
.why-container .why-col ul { padding-top: 0; padding-bottom: 0; }
.why-container ul li i { padding-top: 0; padding-bottom: 0; }
.about-page-container .tagline { margin-bottom: 20px; }
.about-page-container hr.rmf-hr { margin-top: 0; margin-bottom: 0; }
.about-container { padding: 26px 0; }
/* Contract Vehicles: the bordered boxes were a fixed 200px tall with the text at the top; equal-height boxes with centred, evenly inset text */
.contract-container { align-items: stretch; gap: 2em; }
/* Contact: the two columns start level and the section owns a 26px inset */
.contact-us-container { padding: 26px 0; align-items: flex-start; }
@media screen and (min-width: 1000px) { .contact-us-container .contact-col-1:nth-last-child(1) { margin: 0 0 0 1em; } .contact-us-container .contact-col-1:nth-last-child(1) h2 { margin-top: calc(var(--rl-ink-top-head, 0.363em) - 0.5lh); } /* the theme's h2 { margin: 0 } outranks the rhythm ink pull */ }
.map-embed iframe, #mf_iframe { display: block; max-width: 100%; }
/* Capabilities cards: even inset top and bottom (the theme had 0 top / 1.5em bottom) */
.cap-col-1 { padding: 26px 1em; margin: 0; }
.cap-content { gap: 1.5em; align-items: stretch; }
/* Sub-capability pages: the list carried 1em padding on every side, so the section bottom read looser than its top */
.sub-capabil-container { padding: 26px 0; }
.sub-capabil-container ul { padding-bottom: 0; }
.sub-capabil-container ul li i, .two-col-container ul li i { padding-top: 0; padding-bottom: 0; }
.two-col-container ul, .two-col-container ul.sub-ul { padding-bottom: 0; margin-bottom: 0; }
.two-col-container ul.sub-ul > li:last-child { margin-bottom: 0; } /* nested list items carry 1em margins from the theme */
.two-col-container { align-items: flex-start; }
/* RMF Experts: the 35px WordPress spacer above the rule is gone; the rule carries the inset itself */
hr.rmf-hr { margin: 0 auto 26px; }
.two-col-container { row-gap: 33px; }
.contract-col { margin: 0 1em; }
.contract-col { height: auto; min-height: 200px; max-width: calc(100% - 2em); display: flex; flex-direction: column; justify-content: center; padding: 26px 1em; box-sizing: border-box; }
.careers-container { padding-bottom: 11px; }
.leadership-card { padding-top: 2em; }   /* the theme's 6em top pad left the name 102px under the card edge against 34px at the bottom */

/* Text fills its container (owner rule): the theme capped paragraphs and the hero heading to a narrower measure. */
.about-page-container p, .careers-container, .hero h1 { max-width: none; }

/* Leadership names (were h4 directly under the h1) */
h2.person { font-size: 20px; margin: 1.2em 0 .3em; }

/* Native legal pages (privacy policy, website terms of use, accessibility statement) */
.wt-legal { padding: 26px 1.5em; }
.wt-legal h1 { margin-bottom: .35em; }
.wt-legal h2 { font-size: 1.35em; margin: 1.6em 0 .4em; clear: both; }
.wt-legal p, .wt-legal li { line-height: 1.6; }
.wt-legal ul { list-style: disc; padding-left: 1.4em; margin-bottom: 1em; }
.wt-legal li { margin-bottom: .3em; }
.wt-legal .doc-meta { color: #555; margin-bottom: 1.5em; }

/* External and PDF link icons (Font Awesome 5 glyphs), applied by include-footer.php */
.external-link-icon::after { content: "\f35d"; font-family: 'Font Awesome 5 Free'; font-weight: 900; font-size: .75em; margin-left: 4px; text-decoration: none !important; color: inherit; display: inline-block; }
.pdf-link-icon::after { content: "\f1c1"; font-family: 'Font Awesome 5 Free'; font-weight: 900; font-size: .9em; margin-left: 4px; color: #ea4335; text-decoration: none !important; display: inline-block; }

/* Content links are distinguishable by more than color (WCAG link-in-text-block); button-links excluded */
.entry-content a:not(.cta-1):not(.cta-2):not(.about-button):not(.cap-button):not(.careers-button):not(.employ-read-more) { text-decoration: underline; }
.entry-content a:hover { text-decoration: none; }
.site-info a { text-decoration: underline; }
.site-info a:hover { text-decoration: none; }
/* Site version stamp: inline at the end of the copyright line as "ver: YYMMA", same type as the line (owner standard 2026-10-14). */

/* Phone menu bar: the plugin's inline rule (show the bar below 978px) followed wprmenu.css in WordPress; in wp-inline.css it
   loads before wprmenu.css, whose display:none then won and left phones with no header or menu. Restated here, after both. */
@media only screen and (max-width: 978px) { #wprmenu_bar, #mg-wprm-wrap { display: block; } }
/* Phone menu "you are here" item: the plugin's blue-on-gray was about 1.9:1; white on a navy darker than the menu (#285786) keeps
   the highlight and reads at about 13:1 (WCAG 1.4.3). The plugin's color carries !important, so this one must too. */
#mg-wprm-wrap li.current-menu-item > a { background: #163452; }
#mg-wprm-wrap li.current-menu-item > a, #mg-wprm-wrap li.current-menu-item span.wprmenu_icon { color: #fff !important; }

/* Footer: the copyright line sits inside the footer landmark now (it was a stray block after it).
   The theme's 1.5em footer padding moves onto the column grid, so the copyright bar runs full width and
   flush with the page bottom, and the last column row (social icons) keeps its space above the bar. */
.site-footer { padding: 0; }
.grid-container-footer { padding: 1.5em; }
.site-footer .site-info { margin: 0; }
/* Below 900px the four footer columns stack with no gap, so each heading sat on the list above it */
@media (max-width: 899.98px) { .grid-container-footer { row-gap: 30px; } }

/* 404 page */
.wt-404 { padding: 2em 1.5em 3em; text-align: center; }
.wt-404 .actions a { margin: .5em .25em; }

/* ---------------------------------------------------------------- RL Consent (sizes in px: legacy theme) */
.rl-consent-banner { position: fixed; left: 0; right: 0; bottom: 0; z-index: 10090; background: #fff; color: #2b3644; border-top: 1px solid #e3e7ed; box-shadow: 0 -6px 24px rgba(15, 23, 42, .10); padding: 14px clamp(16px, 3vw, 40px); display: flex; flex-wrap: wrap; gap: 10px 20px; align-items: center; font-weight: 400; }
.rl-consent-banner { animation: rl-consent-rise .45s cubic-bezier(.22,.7,.3,1); }
@keyframes rl-consent-rise { from { transform: translateY(100%); } to { transform: translateY(0); } }
.rl-consent-banner[hidden] { display: none; }
.rl-consent-cookie { width: 26px; height: 26px; color: #285786; flex: none; }
.rl-consent-fab .rl-consent-cookie { width: 24px; height: 24px; }
.rl-consent-banner p { margin: 0; font-size: 15px; line-height: 1.5; flex: 1 1 340px; text-align: left; }
.rl-consent-banner p a { color: #285786; text-decoration: underline; }
.rl-consent-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-left: auto; }
.rl-btn, .rl-btn-outline { display: inline-block; font-family: inherit; font-size: 14px !important; font-weight: 600; line-height: 1.2; padding: 9px 16px !important; border-radius: 4px; cursor: pointer; text-decoration: none; }
.rl-btn { background: #285786; color: #fff; border: 1px solid #285786; }
.rl-btn:hover { background: #1f4568; border-color: #1f4568; }
.rl-btn-outline { background: #fff; color: #285786; border: 1px solid #285786; }
.rl-btn-outline:hover { background: #eef2f7; }
.rl-consent-link { background: none; border: 0; color: #285786; text-decoration: underline; font-family: inherit; font-size: 14px; padding: 8px 4px; cursor: pointer; }
.rl-consent-fab { position: fixed; bottom: 16px; left: 16px; z-index: 10080; width: 52px; height: 52px; display: inline-flex; align-items: center; justify-content: center; background: #fff; color: #285786; border: 1px solid #e3e7ed; border-radius: 50%; box-shadow: 0 2px 10px rgba(0,0,0,.16); cursor: pointer; padding: 0; }
.rl-consent-fab[hidden] { display: none; }
.rl-consent-dialog { border: 0; border-radius: 12px; padding: 0; max-width: 980px; width: calc(100% - 32px); max-height: min(86vh, 960px); color: #2b3644; font-weight: 400; }
.rl-consent-dialog::backdrop { background: rgba(15, 23, 42, .55); }
.rl-consent-dialog-inner { padding: 28px 32px 24px; overflow-y: auto; max-height: min(86vh, 960px); box-sizing: border-box; }
.rl-consent-dlg-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 18px; }
.rl-consent-dlg-head img { height: 44px; width: auto; }
.rl-consent-close { background: none; border: 0; font-size: 28px; line-height: 1; color: #2b3644; cursor: pointer; padding: 4px 8px; }
.rl-consent-intro, .rl-consent-google { font-size: 16px; line-height: 1.6; margin: 0 0 8px; text-align: left; }
.rl-consent-google { margin-bottom: 24px; }
.rl-consent-intro a, .rl-consent-google a { color: #285786; text-decoration: underline; }
.rl-consent-cat { margin: 22px 0 0; }
.rl-consent-cat-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 6px; }
.rl-consent-cat h3 { font-size: 17px !important; margin: 0 !important; line-height: 1.3 !important; }
.rl-consent-cat-desc { font-size: 15px; line-height: 1.55; color: #5c6672; margin: 0 0 12px; text-align: left; }
.rl-consent-always { font-size: 14px; font-weight: 600; white-space: nowrap; }
.rl-switch { position: relative; display: inline-block; width: 46px; height: 26px; flex: none; }
.rl-switch input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; z-index: 1; }
.rl-switch-track { position: absolute; inset: 0; background: #c3cad3; border-radius: 13px; transition: background .2s; }
.rl-switch-track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; background: #fff; border-radius: 50%; transition: transform .2s; }
.rl-switch input:checked + .rl-switch-track { background: #285786; }
.rl-switch input:checked + .rl-switch-track::after { transform: translateX(20px); }
.rl-switch input:focus-visible + .rl-switch-track { outline: 3px solid #ffbf47; outline-offset: 2px; }
.rl-consent-table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 0; }
.rl-consent-table caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.rl-consent-table th { text-align: left; font-weight: 600; background: #eef1f4; padding: 8px 12px; }
.rl-consent-table td { padding: 9px 12px; border-bottom: 1px solid #e3e7ed; vertical-align: top; }
.rl-consent-table code { font-size: 12px; background: none; color: #5c6672; }
.rl-consent-table td strong { font-weight: 600; display: block; }
.rl-consent-dialog-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-top: 26px; }
.rl-consent-dialog-actions .rl-btn { margin-left: auto; }
.rl-consent-credit { margin: 18px 0 0; text-align: center; font-size: 12px; color: #5a6572; }
.rl-consent-credit a { color: inherit; text-decoration: underline; }
@media (max-width: 736px) {
  .rl-consent-dialog-inner { padding: 20px 16px 18px; }
  .rl-consent-actions { margin-left: 0; width: 100%; }
  .rl-consent-actions .rl-btn, .rl-consent-actions .rl-btn-outline { flex: 1 1 auto; text-align: center; }
}

/* ---------------------------------------------------------------- Focus rings (KEYBOARD NAVIGATION ONLY) - MUST stay last.
   Gated behind html.kbd-nav (detector in include-footer.php): Tab shows the ring, a click or Back never does. */
html:not(.kbd-nav) a:focus,
html:not(.kbd-nav) button:focus,
html:not(.kbd-nav) input:focus,
html:not(.kbd-nav) select:focus,
html:not(.kbd-nav) textarea:focus,
html:not(.kbd-nav) iframe:focus,
html:not(.kbd-nav) summary:focus,
html:not(.kbd-nav) [tabindex]:focus {
    outline: none !important;
}
html.kbd-nav a:focus-visible,
html.kbd-nav .main-navigation a:focus-visible,
html.kbd-nav button:focus-visible,
html.kbd-nav input:focus-visible,
html.kbd-nav select:focus-visible,
html.kbd-nav textarea:focus-visible,
html.kbd-nav iframe:focus-visible,
html.kbd-nav summary:focus-visible,
html.kbd-nav [tabindex]:focus-visible {
    outline: 3px solid #ffbf47 !important;
    outline-offset: 2px !important;
}
html.kbd-nav a:focus-visible:has(img) {
    display: inline-block !important;
}
html.kbd-nav a:focus-visible:not(:has(img)),
html.kbd-nav .main-navigation a:focus-visible,
html.kbd-nav button:focus-visible,
html.kbd-nav input[type="submit"]:focus-visible {
    background: #fff !important;
    color: #000 !important;
    box-shadow: inset 0 0 0 1px #000 !important;
    text-shadow: none !important;
}
