/* ---------------------------------------------------------
   Law Office of Cameron P. Kockler, LLC — site stylesheet.
   Brand tokens, layout overrides, form styling, and small
   content-page utilities live here.
   --------------------------------------------------------- */

:root {
    --c-forest:    #0E3B26;
    --c-forest-2:  #143F2B;
    --c-gold:      #C9A24A;
    --c-champagne: #E2C77E;
    --c-ivory:     #F5EFE0;
    --c-ivory-2:   #FBF7EE;
    --c-ink:       #1B1B1B;
    --c-muted:     #6B6B68;
    --c-line:      #E5E1D7;
}

/* Bare pre-header band — thin Forest top border, no content */
.pre-header.pre-header--bare {
    height: 14px;
    min-height: 14px;
    padding: 0;
    background: var(--c-forest);
}

/* Skip-to-content link (a11y) */
.sr-only {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0,0,0,0);
    white-space: nowrap; border: 0;
}
.sr-only:focus {
    position: static; width: auto; height: auto;
    padding: 8px 14px; margin: 6px;
    background: var(--c-forest); color: var(--c-ivory);
    clip: auto; overflow: visible;
}

/* Call-out band — compact, centered (text + button stacked centered
   instead of the default left-text/right-button split). Half the
   default padding for a tighter row. */
.call-out {
    padding: 22px 0;
}
.call-out .flex-row {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 14px;
}

/* Forest-fill button variant — `.btn.btn-forest` paints the button
   in Forest with ivory text. Used where default gold button would
   clash (Ivory sections, Gold sections, or for secondary CTAs). */
.btn.btn-forest {
    background: var(--c-forest);
    border-color: var(--c-forest);
    color: var(--c-ivory);
}
.btn.btn-forest:hover {
    background: var(--c-forest-2);
    border-color: var(--c-forest-2);
    color: #fff;
}

/* Icon-box cards on forest sections — gold border so the three cards
   on "Beyond the Office" (and other forest icon-box sections) read as
   a distinct triptych against the forest background. All cards in a
   row stretch to the tallest card's height. */
.page-section-bg2 .icons-box .icons-item .item-box,
.page-section-bg2.green .icons-box .icons-item .item-box {
    height: 100%;
    padding: 32px 28px;
    border: 1px solid var(--c-gold);
    background: rgba(255, 255, 255, 0.02);
    transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
}
.page-section-bg2 .icons-box .icons-item:hover .item-box,
.page-section-bg2.green .icons-box .icons-item:hover .item-box {
    background: rgba(201, 162, 74, 0.08);
    transform: translateY(-3px);
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.20);
}
.page-section-bg2 .icons-box .icons-wrap,
.page-section-bg2 .icons-box .icons-item,
.page-section-bg2.green .icons-box .icons-wrap,
.page-section-bg2.green .icons-box .icons-item {
    height: 100%;
}
/* Style-2 variant (used inside "Built for Real People" Home section) —
   keep its inline-with-text layout, no boxed treatment. */
.page-section-bg2 .icons-box.style-2 .icons-item .item-box,
.page-section-bg2.green .icons-box.style-2 .icons-item .item-box {
    padding: 0;
    border: none;
    background: none;
    box-shadow: none;
    transform: none;
}
.page-section-bg2 .icons-box.style-2 .icons-item:hover .item-box,
.page-section-bg2.green .icons-box.style-2 .icons-item:hover .item-box {
    background: none;
    transform: none;
    box-shadow: none;
}

/* ---------------------------------------------------------
   Form integration — neutral input baseline.
   ASP.NET validation summary + per-field messages.
   All inputs and selects share the same height for visual
   rhythm; rows get consistent vertical breathing room.
   --------------------------------------------------------- */
.contact-form input[type=text],
.contact-form input[type=email],
.contact-form input[type=tel],
.contact-form select,
.contact-form textarea {
    width: 100%;
    height: 52px;
    padding: 0 18px;
    box-sizing: border-box;
    line-height: 1.4;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 1rem;
}
.contact-form textarea {
    height: auto;
    min-height: 160px;
    padding: 16px 18px;
    line-height: 1.6;
}
.contact-form select {
    /* Right padding for the chevron; remove native arrow on all browsers
       and paint a Gold chevron via background-image. */
    padding-right: 44px;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'><path d='M1 1l5 5 5-5' stroke='%23C9A24A' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/></svg>");
    background-repeat: no-repeat;
    background-position: right 18px center;
    background-size: 12px 8px;
}
/* Vertical rhythm between form rows */
.contact-form .flex-row.row {
    margin-bottom: 24px;
}
.contact-form .flex-row.row:last-of-type {
    margin-bottom: 0;
}
@media (max-width: 768px) {
    .contact-form .flex-row.row > [class*="col-"]:not(:last-child) {
        margin-bottom: 24px;
    }
}

/* Focus state — Forest green, not the browser-default blue */
.contact-form input:focus,
.contact-form select:focus,
.contact-form textarea:focus {
    outline: none;
    border-color: var(--c-forest);
    box-shadow: 0 0 0 3px rgba(14, 59, 38, 0.20);
}

/* Placeholder text — match between inputs and the "empty" select option
   so the form reads uniformly. Without this, the select's first option
   renders in the OS default ink color while input placeholders are muted. */
.contact-form input::placeholder,
.contact-form textarea::placeholder {
    color: rgba(27, 27, 27, 0.55);
    opacity: 1;
}
.contact-form select {
    color: rgba(27, 27, 27, 0.55);
}
.contact-form select:valid,
.contact-form select.has-value {
    color: var(--c-ink);
}
.contact-form select option {
    color: var(--c-ink);
    background-color: #fff;
}
.contact-form select option[value=""] {
    color: rgba(27, 27, 27, 0.55);
}
.contact-form,
.contact-form select,
.contact-form input[type="checkbox"],
.contact-form input[type="radio"] {
    accent-color: var(--c-forest);
}

/* ---------------------------------------------------------
   Custom <select> — overlay UI that replaces the native open
   dropdown so we can fully theme the selection highlight in
   forest green (native <option> styling is browser-controlled
   and unreliable, especially in Chromium and Safari). The
   native <select> stays in the DOM so model binding and
   validation work unchanged; JS keeps it in sync with the
   custom UI. See site.js → enhanceSelect.
   --------------------------------------------------------- */
.select-custom { position: relative; }
.select-custom__native {
    /* Visually hidden but still focusable so any external focus()
       calls (validation libs, screen-reader nav) keep working. */
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
    pointer-events: none;
}
.select-custom__trigger {
    width: 100%;
    height: 52px;
    padding: 0 44px 0 18px;
    box-sizing: border-box;
    text-align: left;
    line-height: 1.4;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 1rem;
    color: var(--c-ink);
    background: transparent;
    border: 1px solid var(--c-line);
    cursor: pointer;
    position: relative;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.select-custom__trigger:focus,
.select-custom.is-open .select-custom__trigger {
    outline: none;
    border-color: var(--c-forest);
    box-shadow: 0 0 0 3px rgba(14, 59, 38, 0.20);
}
.select-custom__value.is-placeholder {
    color: rgba(27, 27, 27, 0.55);
}
.select-custom__arrow {
    position: absolute;
    right: 18px;
    top: 50%;
    width: 12px;
    height: 8px;
    transform: translateY(-50%);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'><path d='M1 1l5 5 5-5' stroke='%23C9A24A' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 12px 8px;
    transition: transform 0.25s ease;
}
.select-custom.is-open .select-custom__arrow {
    transform: translateY(-50%) rotate(180deg);
}
.select-custom__menu {
    list-style: none;
    margin: 6px 0 0;
    padding: 6px 0;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid var(--c-line);
    box-shadow: 0 14px 36px rgba(14, 59, 38, 0.22);
    z-index: 60;
    max-height: 320px;
    overflow-y: auto;
}
.select-custom__menu[hidden] { display: none; }
.select-custom__menu > li {
    padding: 12px 18px;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 1rem;
    line-height: 1.4;
    color: var(--c-ink);
    cursor: pointer;
    outline: none;
    transition: background 0.12s ease, color 0.12s ease;
}
.select-custom__menu > li:hover,
.select-custom__menu > li:focus {
    background: var(--c-forest);
    color: var(--c-ivory);
}
.select-custom__menu > li[aria-selected="true"] {
    background: rgba(14, 59, 38, 0.08);
    font-weight: 600;
    color: var(--c-forest);
}
.select-custom__menu > li[aria-selected="true"]:hover,
.select-custom__menu > li[aria-selected="true"]:focus {
    background: var(--c-forest);
    color: var(--c-ivory);
}
/* Inside the white contact-form card the trigger gets an ivory-2 base
   that lifts to white on focus, matching the input/textarea pattern. */
.contact-form-card .select-custom__trigger {
    background: var(--c-ivory-2);
    border: 1px solid var(--c-line);
}
.contact-form-card .select-custom__trigger:focus,
.contact-form-card .select-custom.is-open .select-custom__trigger {
    background: #fff;
}

/* ---------------------------------------------------------
   Contact form box — wraps the Contact page form in a white
   card with padding and a title, separating the form from the
   forest section background and the left-column copy.
   --------------------------------------------------------- */
.contact-form-card {
    background: #fff;
    padding: 28px 26px 24px;
    border-top: 3px solid var(--c-gold);
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
}
/* Compact the form rows inside the card so the form doesn't extend
   past the left column's text. */
.contact-form-card .contact-form .flex-row.row {
    margin-bottom: 14px;
}
.contact-form-card .contact-form textarea {
    min-height: 110px;
}
.contact-form-card .contact-form-card__title,
.page-section-bg2 .contact-form-card .contact-form-card__title {
    color: var(--c-forest);
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.5rem;
    font-weight: 700;
    line-height: 1.2;
    margin: 0 0 4px;
}
.contact-form-card .contact-form-card__subtitle,
.page-section-bg2 .contact-form-card .contact-form-card__subtitle {
    color: var(--c-muted);
    font-size: 0.8125rem;
    letter-spacing: 0.02em;
    margin: 0 0 20px;
}
/* Inputs inside the white form card — ivory-2 background to separate
   them clearly from the card without losing the brand feel. */
.contact-form-card .contact-form input[type=text],
.contact-form-card .contact-form input[type=email],
.contact-form-card .contact-form input[type=tel],
.contact-form-card .contact-form select,
.contact-form-card .contact-form textarea {
    background: var(--c-ivory-2);
    border: 1px solid var(--c-line);
}
.contact-form-card .contact-form input:focus,
.contact-form-card .contact-form select:focus,
.contact-form-card .contact-form textarea:focus {
    background: #fff;
}

/* Compact contact strip — 3-up row of phone / email / location on a single
   thin band. Replaces the oversized .contact-info.style-3 cards. */
.contact-strip {
    padding: 22px 0;
    background: #fff;
    border-bottom: 1px solid var(--c-line);
}
.contact-info-compact {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 18px 32px;
}
.contact-info-compact > li {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    color: var(--c-ink);
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 1rem;
    line-height: 1.4;
}
.contact-info-compact > li > i {
    color: var(--c-gold);
    font-size: 22px;
    flex-shrink: 0;
}
.contact-info-compact > li a {
    color: var(--c-forest);
    font-weight: 600;
    border-bottom: 1px dotted rgba(14, 59, 38, 0.25);
    transition: color 0.2s ease, border-color 0.2s ease;
}
.contact-info-compact > li a:hover {
    color: var(--c-gold);
    border-bottom-color: var(--c-gold);
}
.contact-info-compact > li em {
    font-style: normal;
    color: var(--c-muted);
    font-size: 0.875rem;
}
@media (max-width: 768px) {
    .contact-info-compact { flex-direction: column; align-items: flex-start; gap: 14px; }
}

/* Contact sidebar value list — clean gold dash bullets, not Linearicons. */
.value-list {
    list-style: none;
    padding: 0;
    margin: 0;
}
.value-list > li {
    position: relative;
    padding-left: 28px;
    margin-bottom: 14px;
    line-height: 1.55;
    font-family: 'Roboto Condensed', sans-serif;
    font-weight: 300;
}
.value-list > li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 11px;
    width: 16px;
    height: 2px;
    background: var(--c-gold);
}
.value-list > li:last-child {
    margin-bottom: 0;
}

.field-validation-error {
    display: block;
    color: #b3261e;
    font-size: 0.8125rem;
    margin-top: 6px;
    letter-spacing: 0.02em;
}

.input-validation-error {
    border-color: #b3261e !important;
    background-color: #fdf6f6 !important;
}

.validation-summary-errors {
    background: #fde6e6;
    border-left: 3px solid #b3261e;
    color: #7a1c1c;
    padding: 14px 18px;
    margin: 0 0 24px;
    border-radius: 2px;
}
.validation-summary-errors ul { margin: 0; padding-left: 18px; }

.form-success {
    background: rgba(201, 162, 74, 0.10);
    border-left: 3px solid var(--c-gold);
    color: var(--c-forest);
    padding: 22px 26px;
    margin: 0 0 28px;
    border-radius: 2px;
}
.form-success strong {
    display: block;
    margin-bottom: 6px;
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.25rem;
}

.form-note {
    display: block;
    margin-top: 14px;
    color: var(--c-muted);
    font-size: 0.8125rem;
    line-height: 1.55;
}

.required-star { color: var(--c-gold); font-weight: 600; }

/* Honeypot field â€” reachable but invisible */
.honeypot {
    position: absolute;
    left: -10000px;
    top: auto;
    width: 1px; height: 1px;
    overflow: hidden;
}

/* ---------------------------------------------------------
   Footer logo treatment (Cameron's logo is a dark-on-light SVG;
   inverts cleanly on the dark footer)
   --------------------------------------------------------- */
/* Footer logo — uses the designer's white-on-dark variant so the brand colors
   stay correct (white wordmark + gold accent, designed for dark backgrounds).
   No CSS inversion needed. */
/* Footer phone/email links — pure white on the dark forest footer.
   Gold underline on hover. */
.footer .widget p a[href^="tel:"],
.footer .widget p a[href^="mailto:"] {
    color: #fff;
    border-bottom: 1px dotted rgba(255, 255, 255, 0.35);
    transition: color 0.2s ease, border-color 0.2s ease;
}
.footer .widget p a[href^="tel:"]:hover,
.footer .widget p a[href^="mailto:"]:hover {
    color: var(--c-gold);
    border-bottom-color: var(--c-gold);
}

/* Traditional bullets across the site — override the vendor Linearicons
   pin/check glyphs (which the brand owner dislikes) with a clean round bullet
   in gold. Applied globally to every .custom-list[type-*] used in articles,
   page sidebars, practice-area lists, About, Privacy, etc. */
.custom-list[class*="type-"] li::before {
    content: "\2022";          /* • bullet */
    font-family: inherit;
    font-size: 1.4em;
    line-height: 0;
    vertical-align: -0.18em;
    color: var(--c-gold);
    margin-right: 10px;
}

/* Areas Served — Forest bullets on the ivory band */
.areas-served .custom-list.type-1 li::before {
    color: var(--c-forest);
}
.areas-served__group-title {
    font-family: 'Roboto Condensed', sans-serif;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    font-size: 0.75rem;
    color: var(--c-gold);
    margin: 0 0 14px;
    padding-bottom: 10px;
    border-bottom: 1px solid rgba(14, 59, 38, 0.12);
}
.areas-served__how {
    max-width: 1040px;
    margin: 0 auto;
    padding-top: 32px;
    border-top: 1px solid rgba(14, 59, 38, 0.12);
}
.serve-card {
    background: #fff;
    padding: 32px 28px;
    height: 100%;
    text-align: center;
    border: 1px solid var(--c-line);
    border-top: 3px solid var(--c-gold);
    box-shadow: 0 2px 6px rgba(14, 59, 38, 0.04);
    transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.serve-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 24px rgba(14, 59, 38, 0.10);
    border-color: rgba(201, 162, 74, 0.4);
}
.serve-card__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 64px;
    height: 64px;
    margin-bottom: 18px;
    background: var(--c-forest);
    color: var(--c-gold);
    font-size: 26px;
    border-radius: 4px;
    box-shadow:
        inset 0 0 0 6px var(--c-forest),
        inset 0 0 0 7.5px var(--c-gold);
}
.serve-card__title {
    color: var(--c-forest);
    margin: 0 0 10px;
}
.serve-card p {
    color: var(--c-muted);
    font-size: 0.9375rem;
    line-height: 1.65;
    margin: 0;
}
.areas-served__how .row.flex-row > [class*="col-"] {
    margin-bottom: 24px;
}

/* On forest sections, switch the bullet to champagne for better contrast */
.page-section-bg2 .custom-list[class*="type-"] li::before,
.page-section-bg2.green .custom-list[class*="type-"] li::before {
    color: var(--c-champagne);
}

/* On gold sections, switch to forest */
.section-gold .custom-list[class*="type-"] li::before {
    color: var(--c-forest);
}

.footer .footer-logo { display: inline-block; margin-bottom: 18px; }
.footer .footer-logo img {
    height: 52px;
    width: auto;
    max-width: 100%;
    display: block;
}
.footer .widget p span { color: var(--c-champagne); font-weight: 500; }
.footer .copyright .disclaimer {
    color: rgba(245, 239, 224, 0.55);
    font-size: 0.75rem;
    max-width: 720px;
    margin: 0;
    text-align: right;
}

/* Header logo â€” Cameron's full-color wordmark sits in the top-header band.
   We give that band an ivory ground so the Forest+Gold mark shows in its
   natural colors; the pre-header above and menu-holder below remain forest
   and white respectively, creating a 3-band header. */
.header .logo { display: inline-block; line-height: 0; }
.header .logo img {
    height: 110px;
    width: auto;
    max-width: 100%;
    display: block;
}
.header .logo-wrap { flex-shrink: 0; }
.header.style-3 .top-header {
    background: var(--c-ivory);
    min-height: auto;
    /* Symmetric vertical padding so the visible logo mark sits with equal
       breathing room above and below inside the ivory band. */
    padding: 18px 0;
    border-top: 1px solid rgba(14, 59, 38, 0.08);
    border-bottom: 1px solid rgba(14, 59, 38, 0.08);
}

/* Logo + tagline grouped on the left of the top-header. The vertical
   pipe divider visually separates the two without competing with either. */
.header .logo-group {
    display: flex;
    align-items: center;
    gap: 56px;
}
.header .logo-group__divider {
    width: 1px;
    height: 72px;
    background: linear-gradient(
        to bottom,
        transparent 0%,
        rgba(14, 59, 38, 0.22) 18%,
        rgba(14, 59, 38, 0.22) 82%,
        transparent 100%
    );
}
.header-tagline {
    /* Ms Madi — monoline signature script. Thin uniform stroke, tall
       ascenders, casual one-pen flowing feel. Matches the "Phaley
       Signature Script" reference. */
    font-family: 'Ms Madi', 'Frank Ruhl Libre', cursive;
    font-size: 2.75rem;
    font-weight: 400;
    line-height: 1.1;
    color: var(--c-forest);
    letter-spacing: 0.01em;
    /* Ms Madi sits a little high on its baseline — small downward
       nudge centers it against the logo mark. */
    transform: translateY(2px);
}
@media (max-width: 1100px) {
    .header .logo-group { gap: 36px; }
    .header-tagline { font-size: 2.375rem; }
}
@media (max-width: 768px) {
    .header .logo img { height: 78px; }
    .header .logo-group { gap: 22px; }
    .header .logo-group__divider { height: 52px; }
    .header-tagline { font-size: 1.875rem; }
    .header.style-3 .top-header { padding: 14px 0; }
}
@media (max-width: 520px) {
    /* Hide tagline + divider on very narrow screens — logo alone is enough. */
    .header .logo-group__divider,
    .header-tagline { display: none; }
}
/* Top-header right-side CTA — "Schedule a Consultation" link
   (replaces the previous Call-today / phone CTA). */

/* ---------------------------------------------------------
   Service-card grid — equal heights so the three (or more)
   cards in a flex-row align cleanly regardless of copy length.
   The "Read more" link sits flush at the bottom of every card.
   --------------------------------------------------------- */
.row.flex-row {
    display: flex;
    flex-wrap: wrap;
}
.row.flex-row > [class*="col-"] {
    display: flex;
    flex-direction: column;
}
.service-item {
    height: 100%;
    width: 100%;
    display: flex;
    flex-direction: column;
}
/* White card treatment — only for plain .service-item cards (not the
   .services .service-item.dark photo-overlay variant on Practice Areas
   Index, which has its own treatment). */
.service-item:not(.dark) {
    background: #fff;
    border: 1px solid var(--c-line);
    box-shadow: 0 2px 6px rgba(14, 59, 38, 0.04);
    transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.service-item:not(.dark):hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 24px rgba(14, 59, 38, 0.10);
    border-color: rgba(201, 162, 74, 0.4);
}
.service-item .service-body {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
}
.service-item .service-body > p {
    flex: 1 1 auto;
}
.service-item .info-btn {
    margin-top: auto;
    align-self: flex-start;
}

/* ---------------------------------------------------------
   Photo-on-top service cards.
   The <figure> sits flush with the card top; the body has
   uniform padding. Photos use object-fit so any aspect ratio
   inside the 4:3 frame crops cleanly to center.
   --------------------------------------------------------- */
.service-item figure {
    margin: 0;
    overflow: hidden;
    aspect-ratio: 4 / 3;
    background: var(--c-forest);
    /* Honor the 4:3 aspect inside flex-column parents — without this,
       flex-shrink collapses figure height to whatever space remains
       after the body, distorting to ~2:1 and cropping heads. */
    flex-shrink: 0;
    width: 100%;
}
.service-item figure img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Bias toward the upper portion of the image so subjects' heads
       stay in frame even when residual cropping occurs (e.g., on
       narrower viewports where aspect drifts wider than 4:3). */
    object-position: center 20%;
    display: block;
    /* B&W default → snaps to color on hover. Keeps Forest/Gold palette
       dominant across the cards; hover gives a satisfying reveal.
       Scope: .service-item only — Cameron's portraits and section
       background images stay in full color always. */
    filter: grayscale(1) contrast(1.05);
    transition: filter 0.5s ease, transform 0.4s ease;
}
.service-item:hover figure img {
    filter: grayscale(0) contrast(1);
    transform: scale(1.04);
}
.service-item .service-body {
    padding: 28px 28px 32px;
    text-align: left;
}

/* Half-bg-col portrait variant — uses object-fit: contain logic
   (background-size: contain via inline) so the image doesn't get
   stretched and head-cropped. Section's own background fills the
   empty letterbox space. */
.col-bg.col-bg--portrait {
    background-color: transparent;
}

/* Top-anchor variant — when a tall portrait source is dropped into a
   wider half-col container, `cover` crops heavily from top and bottom.
   This modifier shifts the crop window upward so subjects' heads stay
   in frame. Pair with col-bg's inline background-image declaration. */
.col-bg.col-bg--top-anchor {
    background-position: center top;
}

/* ---------------------------------------------------------
   Half-bg-col placeholder — for sections where the .col-bg
   div would normally hold a background-image of a photo. Drop
   `col-bg--placeholder` on it (instead of inline background-image)
   and the column renders as a Forest panel with a tagged label
   and a gold inset frame. Matches the .photo-placeholder pattern.
   --------------------------------------------------------- */
.col-bg.col-bg--placeholder {
    background: var(--c-forest);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    box-shadow: inset 0 0 0 14px var(--c-forest), inset 0 0 0 15.5px var(--c-gold);
}
.col-bg--placeholder::before {
    content: "";
    position: absolute;
    inset: 18px;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.06) 0px,
        rgba(201, 162, 74, 0.06) 14px,
        transparent 14px,
        transparent 28px
    );
    pointer-events: none;
}
.col-bg__label {
    position: relative;
    z-index: 1;
    padding: 16px 24px;
    color: var(--c-champagne);
    max-width: 380px;
}
.col-bg__title {
    display: block;
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.5rem;
    font-weight: 700;
    line-height: 1.25;
    margin-bottom: 10px;
    color: var(--c-champagne);
}
.col-bg__hint {
    display: block;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: rgba(245, 239, 224, 0.5);
}

/* ---------------------------------------------------------
   Article feature image — wide banner photo that sits at the
   top of each resource article body, just under the page-hero.
   Use the bare class with an inner <img> for real photos:
     <figure class="article-feature-image"><img src=".." /></figure>
   Add `--placeholder` to render the tagged Forest/gold panel.
   --------------------------------------------------------- */
.article-feature {
    padding: 56px 0 0;
    background: #fff;
}
.article-feature + .page-section { padding-top: 36px; }
.article-feature-image {
    margin: 0;
    border-radius: 2px;
    overflow: hidden;
    position: relative;
    box-shadow: 0 8px 30px rgba(14, 59, 38, 0.10);
}
.article-feature-image img {
    display: block;
    width: 100%;
    height: auto;
    object-fit: cover;
}
.article-feature-image--placeholder {
    background: var(--c-forest);
    aspect-ratio: 16 / 7;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    box-shadow: inset 0 0 0 12px var(--c-forest), inset 0 0 0 13.5px var(--c-gold), 0 8px 30px rgba(14, 59, 38, 0.10);
}
.article-feature-image--placeholder::before {
    content: "";
    position: absolute;
    inset: 16px;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.06) 0px,
        rgba(201, 162, 74, 0.06) 14px,
        transparent 14px,
        transparent 28px
    );
    pointer-events: none;
}
.article-feature-image__label {
    position: relative;
    z-index: 1;
    padding: 20px 32px;
    color: var(--c-champagne);
    max-width: 560px;
}
.article-feature-image__title {
    display: block;
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.625rem;
    font-weight: 700;
    line-height: 1.25;
    margin-bottom: 10px;
    color: var(--c-champagne);
}
.article-feature-image__hint {
    display: block;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: rgba(245, 239, 224, 0.5);
}

/* ---------------------------------------------------------
   Text-on-forest fixes — the vendor stylesheet's auto-color rules cover
   .section-text, .sub-title, h3, etc., but several other text
   elements stay dark when a section flips to forest. Force ivory
   on the elements that the base stylesheet misses.
   --------------------------------------------------------- */
.page-section-bg2 .custom-list > li,
.page-section-bg2.green .custom-list > li {
    color: var(--c-ivory);
}
.page-section-bg2 .custom-list > li strong,
.page-section-bg2.green .custom-list > li strong {
    color: #fff;
}

/* Icon-box cards inside forest sections — card title (h5) and
   body paragraph need to flip to ivory. */
.page-section-bg2 .icons-box .icons-item .icons-box-title,
.page-section-bg2.green .icons-box .icons-item .icons-box-title {
    color: #fff;
}
/* ---------------------------------------------------------
   FAQ block — accordion list using semantic <details>/<summary>.
   Answer text is always in the DOM so Google indexes it whether
   the panel is opened or not. The companion FAQPage JSON-LD
   gives AI surfaces (Google AI Overviews, ChatGPT, Perplexity)
   a structured copy of the same content.
   --------------------------------------------------------- */
.faq-block { margin-top: 8px; }
.faq-block__item {
    border-bottom: 1px solid rgba(14, 59, 38, 0.14);
    padding: 22px 4px;
}
.faq-block__item:first-of-type { border-top: 1px solid rgba(14, 59, 38, 0.14); }
.faq-block__item > summary {
    list-style: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.25rem;
    line-height: 1.35;
    font-weight: 600;
    color: var(--c-forest);
    transition: color 0.2s ease;
}
.faq-block__item > summary:hover { color: var(--c-gold); }
.faq-block__item > summary::-webkit-details-marker { display: none; }
.faq-block__item > summary::after {
    content: '+';
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border: 1px solid var(--c-gold);
    border-radius: 50%;
    font-family: 'Roboto Condensed', sans-serif;
    font-weight: 400;
    font-size: 1.25rem;
    line-height: 1;
    color: var(--c-gold);
    flex-shrink: 0;
    transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.faq-block__item[open] > summary::after {
    content: '−';
    background: var(--c-gold);
    color: var(--c-ivory);
}
.faq-block__item > p {
    margin: 16px 0 0;
    line-height: 1.75;
    color: var(--c-ink);
    font-size: 1rem;
    max-width: 720px;
}

/* "A Note From Cameron" editorial block — first-person statement on forest.
   Slightly larger body type, generous leading, and a soft Champagne signoff
   that reads as a hand-signed close. */
.note-from-cameron p {
    color: var(--c-ivory);
    font-size: 1.0625rem;
    line-height: 1.85;
    margin-bottom: 2.2em;
}
.note-from-cameron p:last-of-type:not(.note-from-cameron__signoff) {
    margin-bottom: 0;
}
.note-from-cameron p.note-from-cameron__signoff {
    margin-top: 36px !important;
    margin-bottom: 0 !important;
    text-align: right;
    /* Same Ms Madi script used on the header tagline — monoline
       signature, tall ascenders, one-pen flowing feel. Keeps the
       site's hand-lettered moments unified to a single typeface. */
    font-family: 'Ms Madi', cursive;
    font-style: normal;
    font-weight: 400;
    font-size: 3.25rem;
    line-height: 1.05;
    color: var(--c-champagne);
    letter-spacing: 0.01em;
}

.page-section-bg2 .icons-box .icons-item .item-box p,
.page-section-bg2.green .icons-box .icons-item .item-box p {
    color: var(--c-ivory);
    opacity: 0.92;
}

/* Section intro / lead paragraphs (the description under a
   .section-title in .content-element5 or similar) — force ivory. */
.page-section-bg2 .content-element5 p,
.page-section-bg2.green .content-element5 p,
.page-section-bg2 .container > p,
.page-section-bg2 .align-center > p {
    color: var(--c-ivory);
    opacity: 0.92;
}

/* ---------------------------------------------------------
   Tagged photo placeholder.
   Drop-in replacement spot for a real image, with a clear
   on-screen label telling you what photo belongs there.
   Reusable pattern — use anywhere a future photo will land.
   --------------------------------------------------------- */
.photo-placeholder {
    margin: 0;
    aspect-ratio: 4 / 3;
    background: var(--c-forest);
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    box-shadow: inset 0 0 0 6px var(--c-forest), inset 0 0 0 7.5px var(--c-gold);
}
.photo-placeholder::before {
    /* faint diagonal stripe pattern to signal "placeholder" */
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.06) 0px,
        rgba(201, 162, 74, 0.06) 12px,
        transparent 12px,
        transparent 24px
    );
    pointer-events: none;
}
.photo-placeholder__label {
    position: relative;
    z-index: 1;
    padding: 16px 22px;
    color: var(--c-champagne);
}
.photo-placeholder__title {
    display: block;
    font-family: 'Frank Ruhl Libre', serif;
    font-size: 1.0625rem;
    font-weight: 700;
    line-height: 1.3;
    margin-bottom: 8px;
    letter-spacing: 0.02em;
}
.photo-placeholder__hint {
    display: block;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: rgba(245, 239, 224, 0.55);
}

/* ---------------------------------------------------------
   Icon-only service cards (no figure photo).
   Forest tile with a gold inset rule — mirrors the seal logo
   so the icons read as part of the brand mark family.
   --------------------------------------------------------- */
.service-item.no-image .service-body {
    padding: 40px 32px 32px;
    text-align: left;
}
.service-item.no-image .service-icon {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 72px;
    height: 72px;
    margin-bottom: 26px;
    background: var(--c-forest);
    color: var(--c-gold);
    font-size: 30px;
    border-radius: 4px;
    transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
}
.service-item.no-image .service-icon::before {
    content: "";
    position: absolute;
    inset: 5px;
    border: 1.5px solid var(--c-gold);
    border-radius: 2px;
    pointer-events: none;
    transition: border-color 0.25s ease;
}
.service-item.no-image .service-icon::after {
    content: "";
    position: absolute;
    left: 8px;
    right: -8px;
    top: 8px;
    bottom: -8px;
    border: 1.5px solid var(--c-gold);
    border-radius: 4px;
    z-index: -1;
    opacity: 0;
    transition: opacity 0.25s ease, transform 0.25s ease;
}
.service-item.no-image:hover .service-icon {
    transform: translateY(-3px);
    background: var(--c-forest-2);
    box-shadow: 0 12px 28px rgba(14, 59, 38, 0.22);
}
.service-item.no-image:hover .service-icon::before {
    border-color: var(--c-champagne);
}
.service-item.no-image:hover .service-icon::after {
    opacity: 0.8;
    transform: translate(-2px, -2px);
}

/* ---------------------------------------------------------
   Gold feature section — for occasional "stand-out" rows
   between alternating white and forest sections (e.g., the
   Revenue-to-Ministry callout on About). Forest type on Gold.
   --------------------------------------------------------- */
.section-gold {
    background: var(--c-gold);
    padding: 112px 0;
    color: var(--c-forest);
}
.section-gold .pre-title { color: var(--c-forest); opacity: 0.85; }
.section-gold .pre-title::before { background: var(--c-forest); }
.section-gold .section-title,
.section-gold h2,
.section-gold h3 { color: var(--c-forest); }
.section-gold p,
.section-gold .section-text { color: var(--c-forest); }
.section-gold .item-divider-3 { background: var(--c-forest); }
.section-gold .item-divider-3.style-3::before,
.section-gold .item-divider-3.style-3::after { background: var(--c-forest); }
.section-gold a:not(.btn) {
    color: var(--c-forest);
    border-bottom: 1px solid rgba(14, 59, 38, 0.4);
}
.section-gold a:not(.btn):hover { border-bottom-color: var(--c-forest); }

/* ---------------------------------------------------------
   Inner page hero (used on Practice Areas overview, etc.).
   Full-width forest section with optional photo background,
   forest overlay for legibility, centered title and breadcrumbs.
   Same tagged-placeholder treatment as elsewhere when no
   photo is provided yet.
   --------------------------------------------------------- */
.page-hero {
    position: relative;
    min-height: 320px;
    padding: 72px 0 56px;
    display: flex;
    align-items: center;
    background-color: var(--c-forest);
    background-size: cover;
    /* Top-biased crop — when a wider source is dropped into the
       narrower hero strip, this keeps subjects' heads in frame. */
    background-position: center 30%;
    color: #fff;
    overflow: hidden;
    text-align: center;
}
.page-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(120deg,
        rgba(14, 59, 38, 0.88) 0%,
        rgba(14, 59, 38, 0.62) 100%);
    pointer-events: none;
    z-index: 1;
}
.page-hero--placeholder::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.045) 0px,
        rgba(201, 162, 74, 0.045) 14px,
        transparent 14px,
        transparent 28px
    );
    pointer-events: none;
    z-index: 1;
}
.page-hero .container { position: relative; z-index: 2; width: 100%; }
.page-hero .pre-title {
    display: inline-block;
    color: var(--c-gold);
    font-family: 'Roboto Condensed', sans-serif;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    font-size: 0.875rem;
    margin-bottom: 18px;
}
.page-hero__title {
    font-family: 'Frank Ruhl Libre', serif;
    font-weight: 700;
    font-size: clamp(2.25rem, 3vw + 1rem, 3.25rem);
    line-height: 1.12;
    color: #fff;
    margin: 0 0 16px;
}
.page-hero__sub {
    font-size: 1.0625rem;
    line-height: 1.65;
    color: rgba(245, 239, 224, 0.88);
    max-width: 680px;
    margin: 0 auto 28px;
}
.page-hero .breadcrumbs {
    display: inline-flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    padding: 0;
    margin: 0;
    list-style: none;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 0.875rem;
    letter-spacing: 0.08em;
}
.page-hero .breadcrumbs > li {
    color: rgba(245, 239, 224, 0.75);
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.page-hero .breadcrumbs > li:not(:last-child)::after {
    content: "/";
    color: var(--c-gold);
    margin-left: 4px;
}
.page-hero .breadcrumbs > li > a {
    color: var(--c-champagne);
    border-bottom: 1px dotted rgba(226, 199, 126, 0.35);
}
.page-hero .breadcrumbs > li > a:hover {
    color: var(--c-gold);
    border-bottom-color: var(--c-gold);
}

/* ---------------------------------------------------------
   Photo-overlay service cards (large photo with green hover wash,
   pattern). The whole card is a link. Photo gets a forest
   gradient overlay; white title sits at the bottom. Hover
   reveals the photo (lower overlay) and slightly lifts.
   Brand recolor of the vendor's eggplant/green/grey rgba
   values to Forest variants.
   --------------------------------------------------------- */
.services {
    /* Lay out the cards on the same flex-grid as other service-item rows.
       Override the equal-height behavior we set elsewhere so the cards
       stay at a consistent aspect ratio. */
}
.services .service-item {
    position: relative;
    display: block;
    height: 100%;
    width: 100%;
    overflow: hidden;
    text-decoration: none;
    aspect-ratio: 4 / 3;
}
.services .service-item figure {
    margin: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
}
.services .service-item figure img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* See note on `.service-item figure img` — bias to upper portion so
       heads survive any residual vertical crop on smaller viewports. */
    object-position: center 20%;
    display: block;
    filter: grayscale(1) contrast(1.05);
    transition: filter 0.5s ease, transform 0.5s ease;
}
.services .service-item:hover figure img {
    filter: grayscale(0) contrast(1);
    transform: scale(1.06);
}
.services .service-item figure::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background: linear-gradient(to bottom,
        rgba(14, 59, 38, 0.45) 0%,
        rgba(14, 59, 38, 0.92) 100%);
    transition: opacity 0.4s ease;
}
.services .service-item.dark figure::after,
.services .service-item.green figure::after,
.services .service-item.grey figure::after {
    /* Same forest gradient regardless of legacy variant class — brand
       recolor of the vendor eggplant/green/grey overlays. */
    background: linear-gradient(to bottom,
        rgba(14, 59, 38, 0.45) 0%,
        rgba(14, 59, 38, 0.92) 100%);
}
.services .service-item:hover figure::after {
    opacity: 0.55;
}
.services .service-item .service-title {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
    padding: 22px 26px;
    color: #fff;
    font-family: 'Frank Ruhl Libre', serif;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.25;
    letter-spacing: 0;
    transition: padding-bottom 0.3s ease;
}
.services .service-item::after {
    /* Gold underline that grows on hover */
    content: "";
    position: absolute;
    bottom: 22px;
    left: 26px;
    width: 0;
    height: 2px;
    background: var(--c-gold);
    z-index: 3;
    transition: width 0.4s ease;
}
.services .service-item:hover::after {
    width: 48px;
}
.services .service-item:hover .service-title {
    padding-bottom: 34px;
}

/* Photo placeholder INSIDE a service-item (light-on-dark variant)
   sits below the gradient overlay, with the tagged label visible
   in the upper portion of the card so the title at the bottom
   still reads cleanly. */
.services .service-item .photo-placeholder {
    box-shadow: none;
    background: var(--c-forest);
}
.services .service-item .photo-placeholder::before {
    /* faint diagonal pattern, lighter than the standalone placeholder */
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.05) 0px,
        rgba(201, 162, 74, 0.05) 14px,
        transparent 14px,
        transparent 28px
    );
}
.services .service-item .photo-placeholder .photo-placeholder__label {
    position: absolute;
    top: 20px;
    left: 0;
    right: 0;
    color: rgba(245, 239, 224, 0.55);
}
.services .service-item .photo-placeholder__title {
    font-size: 0.875rem;
    font-weight: 600;
    margin-bottom: 4px;
    color: rgba(245, 239, 224, 0.65);
}
.services .service-item .photo-placeholder__hint {
    font-size: 0.625rem;
}

/* ---------------------------------------------------------
   Hero carousel (Home page).
   5-slide full-bleed Owl carousel with photo backgrounds,
   forest overlay for legibility, centered text + CTA, and
   fade transitions between slides. Placeholder slides show
   a subtle tag in the corner so it's clear which photo is
   pending. Pagination dots sit centered at the bottom.
   --------------------------------------------------------- */
.hero-carousel {
    position: relative;
    overflow: hidden;
    background: var(--c-forest);
}
.hero-carousel .hero-slider .owl-stage-outer { overflow: hidden; }

.hero-slide {
    position: relative;
    min-height: 620px;
    display: flex !important;
    align-items: center;
    background-color: var(--c-forest);
    background-size: cover;
    /* Bias upward — the slider stretches the 16:9 source into a 3.8:1
       letterbox, cropping ~27% off top and bottom. Subjects' heads are
       typically in the upper-third of stock photography, so we shift
       the crop window up to keep faces in frame. */
    background-position: center 28%;
    overflow: hidden;
}
.hero-slide::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(120deg,
        rgba(14, 59, 38, 0.88) 0%,
        rgba(14, 59, 38, 0.62) 60%,
        rgba(14, 59, 38, 0.48) 100%);
    pointer-events: none;
    z-index: 1;
}
.hero-slide--placeholder::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(201, 162, 74, 0.045) 0px,
        rgba(201, 162, 74, 0.045) 14px,
        transparent 14px,
        transparent 28px
    );
    pointer-events: none;
    z-index: 1;
}
.hero-slide__tag {
    position: absolute;
    top: 22px;
    right: 28px;
    z-index: 3;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 0.6875rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: rgba(245, 239, 224, 0.45);
}
.hero-slide__tag::before {
    content: "Photo Pending · ";
    color: var(--c-gold);
}

.hero-slide .container {
    position: relative;
    z-index: 2;
    text-align: center;
    padding: 60px 24px;
}
.hero-slide .pre-title {
    color: var(--c-gold);
    font-family: 'Roboto Condensed', sans-serif;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    font-size: 0.875rem;
    margin-bottom: 22px;
}
.hero-slide h1 {
    font-family: 'Frank Ruhl Libre', serif;
    font-weight: 700;
    font-size: clamp(2.25rem, 3.5vw + 1rem, 4rem);
    line-height: 1.12;
    color: #fff;
    max-width: 920px;
    margin: 0 auto 26px;
}
.hero-slide h1 em {
    color: var(--c-champagne);
    font-style: italic;
    font-weight: 400;
}
.hero-slide p {
    font-size: 1.125rem;
    line-height: 1.7;
    color: rgba(245, 239, 224, 0.92);
    max-width: 720px;
    margin: 0 auto 36px;
}
.hero-slide .hero-actions {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
    justify-content: center;
}

/* Hero pagination dots — centered at the bottom of the section */
.hero-carousel .owl-dots {
    position: absolute;
    bottom: 28px;
    left: 0;
    right: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 12px;
    z-index: 5;
    pointer-events: auto;
}
.hero-carousel .owl-dots .owl-dot,
[class*="carousel-type"] .hero-carousel .owl-dots .owl-dot:not(:last-child) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    margin: 0;
    padding: 0;
    line-height: 0;
}
.hero-carousel .owl-dots .owl-dot span {
    display: block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: transparent;
    border: 1.5px solid rgba(245, 239, 224, 0.55);
    transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.hero-carousel .owl-dots .owl-dot:hover span { border-color: var(--c-champagne); }
.hero-carousel .owl-dots .owl-dot.active span {
    background: var(--c-gold);
    border-color: var(--c-gold);
    transform: scale(1.15);
}

/* Hero nav arrows (Owl prev/next) */
.hero-carousel .owl-nav {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 4;
}
.hero-carousel .owl-nav > * {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 52px;
    height: 52px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: rgba(14, 59, 38, 0.4);
    color: var(--c-champagne);
    border: 1.5px solid var(--c-gold);
    border-radius: 2px;
    pointer-events: auto;
    cursor: pointer;
    transition: background 0.2s ease, color 0.2s ease;
}
.hero-carousel .owl-nav > *:hover {
    background: var(--c-gold);
    color: var(--c-forest);
}
.hero-carousel .owl-nav .owl-prev { left: 32px; }
.hero-carousel .owl-nav .owl-next { right: 32px; }
.hero-carousel .owl-nav .owl-prev::before,
.hero-carousel .owl-nav .owl-next::before {
    content: "";
    width: 12px;
    height: 12px;
    border-top: 1.5px solid currentColor;
    border-left: 1.5px solid currentColor;
}
.hero-carousel .owl-nav .owl-prev::before { transform: rotate(-45deg); margin-left: 6px; }
.hero-carousel .owl-nav .owl-next::before { transform: rotate(135deg); margin-right: 6px; }

@media (max-width: 768px) {
    .hero-slide { min-height: 520px; }
    .hero-carousel .owl-nav > * { width: 40px; height: 40px; }
    .hero-carousel .owl-nav .owl-prev { left: 12px; }
    .hero-carousel .owl-nav .owl-next { right: 12px; }
    .hero-slide__tag { top: 14px; right: 14px; font-size: 0.625rem; }
}

/* ---------------------------------------------------------
   Testimonials page — alternating sections per practice area
   (White / Ivory-2 / White), with a centered practice-area head.
   --------------------------------------------------------- */
.testimonials-section__head {
    margin-bottom: 32px;
}

/* ---------------------------------------------------------
   Testimonial carousel (Home page).
   Default stylesheet hides the decorative quote on carousels — restore it
   as a centered champagne flourish above each testimonial. Also
   move the Owl pagination dots from the right rail to a centered
   row below the testimonial.
   --------------------------------------------------------- */
.owl-carousel.testimonial-holder .testimonial blockquote {
    text-align: center;
}
.owl-carousel.testimonial-holder .testimonial blockquote p {
    font-style: italic;
    font-size: 1.25rem;
    line-height: 1.65;
    max-width: 820px;
    margin: 0 auto 18px;
}
.owl-carousel.testimonial-holder .testimonial blockquote p::before,
.owl-carousel.testimonial-holder .testimonial blockquote p::after {
    color: var(--c-champagne);
    font-style: normal;
    font-size: 5rem;
    line-height: 0;
    vertical-align: -0.45em;
}
.owl-carousel.testimonial-holder .testimonial blockquote p::before {
    content: "\201C"; /* left double quotation mark */
    margin-right: 4px;
}
.owl-carousel.testimonial-holder .testimonial blockquote p::after {
    content: "\201D"; /* right double quotation mark */
    margin-left: 4px;
}
.owl-carousel.testimonial-holder .testimonial .author {
    font-family: 'Roboto Condensed', sans-serif;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    font-size: 0.8125rem;
    color: var(--c-champagne);
}

/* Pagination dots: bottom-centered row, not right rail */
.testimonial-holder + .owl-dots,
.testimonial-holder .owl-dots,
.carousel-type-1.style-2 .testimonial-holder .owl-dots {
    position: static;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 10px;
    width: 100%;
    margin-top: 32px;
    flex-direction: row;
}
/* Fixed-size dot wrappers so the active dot's scale transform
   doesn't shift its baseline relative to the inactive dots.
   The :not(:last-child) override beats the vendor's
   [class*="carousel-type"] rule that adds margin-bottom: 10px
   (which was offsetting the row vertically). */
.testimonial-holder .owl-dots .owl-dot,
[class*="carousel-type"] .testimonial-holder .owl-dots .owl-dot:not(:last-child) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    margin: 0;
    padding: 0;
    line-height: 0;
}
.testimonial-holder .owl-dots .owl-dot span {
    display: block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: transparent;
    border: 1.5px solid rgba(245, 239, 224, 0.55);
    transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.testimonial-holder .owl-dots .owl-dot:hover span {
    border-color: var(--c-champagne);
}
.testimonial-holder .owl-dots .owl-dot.active span {
    background: var(--c-gold);
    border-color: var(--c-gold);
    transform: scale(1.15);
}

/* ---------------------------------------------------------
   Social icons — white square tile with the LinkedIn "in" mark inside.
   Reads cleanly on the forest pre-header and forest footer.
   Hovers to a champagne tile (still readable).
   --------------------------------------------------------- */
.social-icons.style-2 > li > a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    background: #fff;
    color: var(--c-forest);
    border-radius: 4px;
    font-size: 18px;
    line-height: 1;
    transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.social-icons.style-2 > li > a:hover {
    background: var(--c-champagne);
    color: var(--c-forest);
    transform: translateY(-1px);
}

/* ---------------------------------------------------------
   Icon-box tile standard.
   Every Linearicons (.licon-*) glyph inside .icons-box gets the
   same Forest+Gold tile treatment, matching the service-icon
   so all icon presentations across the site read as part of the
   brand mark family. Two contextual variants:
     * Default (light surfaces): Forest tile, Gold icon, Gold inset frame
     * Dark surfaces (.page-section-bg2): Champagne tile, Forest icon, Forest inset frame
   The inset frame is built with stacked inset box-shadows so it
   doesn't conflict with the icon's ::before glyph content.
   --------------------------------------------------------- */
.icons-box .icons-item .item-box > i[class*="licon-"] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 64px;
    height: 64px;
    margin-bottom: 22px;
    background: var(--c-forest);
    color: var(--c-gold);
    font-size: 26px;
    line-height: 1;
    border-radius: 4px;
    opacity: 1;
    box-shadow:
        inset 0 0 0 6px var(--c-forest),
        inset 0 0 0 7.5px var(--c-gold);
    transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
}
.icons-box .icons-item:hover .item-box > i[class*="licon-"] {
    background: var(--c-forest-2);
    transform: translateY(-2px);
    box-shadow:
        inset 0 0 0 6px var(--c-forest-2),
        inset 0 0 0 7.5px var(--c-champagne),
        0 10px 22px rgba(14, 59, 38, 0.20);
}

/* Inverse treatment on dark forest sections — gold/champagne tile reads
   against the forest, with a forest inset frame and forest icon. */
.page-section-bg2 .icons-box .icons-item .item-box > i[class*="licon-"] {
    background: var(--c-champagne);
    color: var(--c-forest);
    box-shadow:
        inset 0 0 0 6px var(--c-champagne),
        inset 0 0 0 7.5px var(--c-forest);
}
.page-section-bg2 .icons-box .icons-item:hover .item-box > i[class*="licon-"] {
    background: var(--c-gold);
    box-shadow:
        inset 0 0 0 6px var(--c-gold),
        inset 0 0 0 7.5px var(--c-forest),
        0 10px 22px rgba(0, 0, 0, 0.28);
}

/* style-2 variant (absolutely positioned icon, used in Home "Built for
   Real People" section). Smaller tile, repositioned, padding adjusted. */
.icons-box.style-2 .icons-item { padding-left: 92px; }
.icons-box.style-2 .item-box > i[class*="licon-"] {
    width: 60px;
    height: 60px;
    font-size: 22px;
    top: 38px;
    margin-bottom: 0;
    box-shadow:
        inset 0 0 0 5px var(--c-forest),
        inset 0 0 0 6.5px var(--c-gold);
}
.page-section-bg2 .icons-box.style-2 .item-box > i[class*="licon-"] {
    box-shadow:
        inset 0 0 0 5px var(--c-champagne),
        inset 0 0 0 6.5px var(--c-forest);
}

/* ---------------------------------------------------------
   Practice-area detail utilities + shaded service cards.
   Each service card sits on an Ivory tile with a thin gold
   accent on top — gives clear separation between cards on
   the practice-area detail pages (Employment Law, Business
   Law, Litigation).
   --------------------------------------------------------- */
.practice-detail h3 {
    color: var(--c-forest);
    margin-top: 1.6em;
}
.practice-detail ul.custom-list li::before { color: var(--c-gold); }

.icons-box.practice-detail .icons-wrap,
.icons-box.practice-detail .icons-item {
    height: 100%;
}
.icons-box.practice-detail .item-box {
    height: 100%;
    background: #fff;
    padding: 36px 30px 32px;
    border: 1px solid var(--c-line);
    border-top: 3px solid var(--c-gold);
    box-shadow: 0 2px 6px rgba(14, 59, 38, 0.04);
    cursor: pointer;
    transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.icons-box.practice-detail .icons-item:hover .item-box {
    transform: translateY(-3px);
    box-shadow: 0 10px 24px rgba(14, 59, 38, 0.12);
    border-color: rgba(201, 162, 74, 0.4);
}
/* Pull the col gutter to give cards visible breathing room */
.icons-box.practice-detail .row.flex-row > [class*="col-"] {
    margin-bottom: 24px;
}

/* Pointer cursor on non-anchor service / icon cards to signal interactivity */
.icons-box .icons-item,
.icons-box .item-box,
.service-item.no-image {
    cursor: pointer;
}

/* ---------------------------------------------------------
   Article body — long-form Resources pages.
   Constrained measure, generous rhythm, hierarchy that reads.
   --------------------------------------------------------- */
.article-body {
    max-width: 760px;
}
.article-body p { font-size: 1.0625rem; line-height: 1.8; margin: 0 0 1.2em; color: var(--c-ink); }
.article-body p.lead { font-size: 1.1875rem; line-height: 1.65; color: var(--c-forest); }
.article-body h2 {
    font-family: 'Frank Ruhl Libre', serif;
    color: var(--c-forest);
    font-size: 1.625rem;
    line-height: 1.25;
    margin: 2.4em 0 0.6em;
}
.article-body h2:first-of-type { margin-top: 0.6em; }
.article-body h3 {
    font-family: 'Frank Ruhl Libre', serif;
    color: var(--c-forest);
    font-size: 1.25rem;
    line-height: 1.3;
    margin: 1.8em 0 0.4em;
}
.article-body ul,
.article-body ol { margin: 0 0 1.4em; }
.article-body ul.custom-list li,
.article-body ol li {
    font-size: 1.0625rem;
    line-height: 1.75;
    margin-bottom: 0.6em;
    color: var(--c-ink);
}
.article-body strong { color: var(--c-forest); }
.article-body em { font-style: italic; }

/* "Coming soon" article stubs — visually muted so active ones lead */
.service-item.no-image.article-stub {
    opacity: 0.78;
}
.service-item.no-image.article-stub .service-title span {
    color: var(--c-forest);
}
.service-item.no-image.article-stub .service-icon {
    color: var(--c-muted);
    background: transparent;
}

/* Resources hub — vertical breathing room between rows of article cards
   so they don't run together on tall pages with 4 cards per practice area.
   At md+ width, col-md-4 = 3 cards per row, so 4-card sections wrap to a
   second row and need the gap. */
.resource-row > [class*="col-"] {
    margin-bottom: 36px;
}

/* ---------------------------------------------------------
   Static hero (replaces Revolution Slider on Home 3)
   Static, accessible slide layout
   --------------------------------------------------------- */
.static-hero {
    position: relative;
    background-color: var(--c-forest);
    color: #fff;
    overflow: hidden;
    padding: 80px 0;
}
.static-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background: radial-gradient(ellipse at 20% 30%, rgba(20,63,43,0.55) 0%, rgba(14,59,38,0) 60%);
    pointer-events: none;
}
.static-hero .container { position: relative; z-index: 2; }
.static-hero .hero-row { align-items: center; gap: 0; }
.static-hero .hero-copy { padding-right: 40px; }
.static-hero .pre-title {
    color: var(--c-gold);
    text-transform: uppercase;
    letter-spacing: 0.22em;
    font-size: 0.8125rem;
    font-weight: 600;
    margin-bottom: 18px;
}
.static-hero h1 {
    font-family: 'Frank Ruhl Libre', serif;
    font-weight: 700;
    font-size: clamp(2.25rem, 4vw + 0.5rem, 3.75rem);
    line-height: 1.12;
    color: #fff;
    margin: 0 0 24px;
}
.static-hero h1 em { color: var(--c-champagne); font-style: italic; font-weight: 400; }
.static-hero p {
    font-size: 1.125rem;
    line-height: 1.7;
    color: rgba(245, 239, 224, 0.92);
    max-width: 620px;
    margin: 0 0 32px;
}
.static-hero .hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }

/* Portrait frame â€” gold rule offset behind, no cropping. */
.static-hero .hero-portrait {
    position: relative;
}
.static-hero .hero-portrait img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 560px;
    object-fit: cover;
    object-position: center 20%;
    border-radius: 4px;
    box-shadow: 0 24px 56px rgba(0, 0, 0, 0.35);
    position: relative;
    z-index: 2;
}
.static-hero .hero-portrait::before {
    content: "";
    position: absolute;
    top: 18px;
    left: 18px;
    right: -18px;
    bottom: -18px;
    border: 1.5px solid var(--c-gold);
    border-radius: 4px;
    z-index: 1;
}

@media (max-width: 991px) {
    .static-hero { padding: 64px 0; }
    .static-hero .hero-copy { padding-right: 0; margin-bottom: 48px; }
    .static-hero .hero-portrait { max-width: 420px; margin: 0 auto; }
}
@media (max-width: 600px) {
    .static-hero { padding: 48px 0; }
}

/* ---------------------------------------------------------
   Reduced motion respect
   --------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        scroll-behavior: auto !important;
    }
}
