/* ════════════════════════════════════════════════════════════════════
   BLB THEME VARIABLES  —  FALLBACK DEFAULTS ONLY
   ════════════════════════════════════════════════════════════════════
   The live theme is controlled by /res/js/theme.js (loaded in the
   <head> of layout_1.astro). That file can override any variable
   below on a PER-PAGE basis.

   This :root block is a safety net: if theme.js ever fails to load,
   the site still renders in these default colors.

   To change a color site-wide or per-page, edit theme.js — NOT here.
   Only edit here if you are changing the emergency fallback palette.
   ════════════════════════════════════════════════════════════════════ */
:root {
    /* Brand greens */
    --blb-green-deep:      #0C2721;   /* page background, headers, dropdown bars */
    --blb-green:           #193C35;   /* mid green surfaces */
    --blb-green-border:    #195548;   /* green outline (search bar) */
    --blb-spruce:          #2F5D46;   /* dashed media placeholder border */

    /* Dark surfaces */
    --blb-card:            #12211C;   /* per-business page cards */
    --blb-card-border:     #2A4038;   /* per-business page card borders */
    --blb-surface:         #191919;   /* cards, modal content */
    --blb-surface-2:       #1b1b1b;   /* business modal background */
    --blb-surface-dark:    #171717;
    --blb-surface-3:       #262626;
    --blb-surface-4:       #2a2a2a;
    --blb-surface-5:       #555;

    /* Borders */
    --blb-border:          #303030;
    --blb-border-2:        #333;
    --blb-border-3:        #444;
    --blb-scrollbar:       #666;      /* scrollbar thumb */

    /* Text */
    --blb-text:            #E3D8BF;   /* cream body text */
    --blb-text-soft:       #F2E7D0;   /* lighter cream */
    --blb-text-muted:      #ddd;
    --blb-text-faint:      #aaa;
    --blb-unavailable:     #848484;   /* "<field> Unavailable" placeholders,
                                         business cards + business pages.
                                         Its own variable, not text-faint:
                                         that one also paints breadcrumb
                                         separators, "No Current Photos" and
                                         the related-business type lines. */
    --blb-white:           #FFFFFF;

    /* Accents */
    --blb-accent:          #36c8a7;   /* teal — links, glows, active borders */
    --blb-highlight:       #63ffa5;   /* mint highlight text */
    --blb-search-on:       #63ffa5;   /* ACTIVE search-mode toggle */
    --blb-search-off:      #193c35;   /* inactive search-mode toggle */
    --blb-gold:            #b1924e;   /* dropdown headers */
    --blb-heart:           #FF69B4;   /* heart button */
    --blb-error:           #ff6b6b;   /* search tooltip */

    /* Overlays & glows */
    --blb-overlay:         rgba(0, 0, 0, 0.6);
    --blb-overlay-modal:   rgba(12, 12, 12, 0.85);
    --blb-overlay-modal-2: rgba(12, 12, 12, 0.9);
    --blb-glow:            rgba(255, 255, 255, 0.2);
    --blb-glow-soft:       rgba(255, 255, 255, 0.15);

    /* Fonts */
    --blb-font-body:       Georgia, 'Times New Roman', Times, serif;
    --blb-font-serif:      serif;
    --blb-font-sans:       sans-serif;
}

.blb_logo {
    display: block;
    width: 6.2rem; /* 100px */
}
.menu_icon {
    display: block;
    width: 4rem; /* 64px */
}
/* ────────────────────────────────────────────────────────────────
   Navigation
   ───────────────────────────────────────────────────────────── */
.nav_main {
    position: sticky;
    top: 0;
    z-index: 9;
    transition: transform 0.75s ease-in-out;
    width: 100%;
    min-height: 20%;  /* ✅ set a realistic height for nav bar */
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0 3rem;
}

.nav_side_menu {
    position: relative;
}

/* The top bar is 10% of the page section on EVERY page, and must stay
   there. Each page section is a flex column, and these bands default to
   flex-shrink: 1 - so whenever the content below them wanted more room
   than the section had, flex shrank every band proportionally and the
   bar came out shorter. Under Construction lost 3px that way (87 instead
   of 90, the same 0.971 factor applied to all its bands), and How It
   Works lost 5px to its wrapper's padding.

   flex-shrink: 0 makes the bar hold its height and pushes the overflow
   onto the content area, which is where it belongs. Combined with the
   uniform 10% this keeps the logo at an identical position site-wide. */
.page_content_home:nth-child(1),
.page_content_calendar:nth-child(1),
.page_content_category:nth-child(1),
.page_content_about:nth-child(1),
.page_content_main_services:nth-child(1),
.page_content_underconstruction:nth-child(1),
.hiw-nav-band {
    flex-shrink: 0;
}

/* Search icon sits left of the hamburger in the top bar (all pages);
   plain icon, site-standard .menu_icon size, just spaced apart. */
.nav_search_btn {
    margin-right: 1.75rem;
}
.nav_search_btn .menu_icon {
    width: 3.5rem;   /* slightly under the 4rem hamburger so the pair reads equal */
}
.nav_side_menu:hover {
    top: 0.1rem;
}

.nav_main_links {
    font-size: 1.5rem;
}

.nav_left,
.nav_right {
    display: flex;
    align-items: center; /* ✅ vertical centering of inner content */
    height: auto;
    position: relative;
}

.nav_left {
    float: left;
}
.nav_right {
    float: right;
}

/* ────────────────────────────────────────────────────────────────
   Side Menu
   ───────────────────────────────────────────────────────────── */
#mySidenav { /* base state */
    width: 0; 
    transition: width .3s ease; 
}
.sidebar-open #mySidenav { /* drawer open on desktop */
    width: 15%; /* ≈ 250 px at 100 % DPI */
} 
.nav_side {
    height: 100%;
    width: 0;
    position: fixed;
    top: 0;
    right: 0;
    background-color: var(--blb-surface-2);
    border: 0.0625rem solid var(--blb-border-3);
    overflow: hidden;
    transition: 0.3s;
    display: flex;
    flex-direction: column;
    z-index: 1000;
    border-top-left-radius: 2.125rem;
    border-bottom-left-radius: 2.125rem;
}

.nav_content:nth-child(1) {
    display: flex;
    justify-content: space-between; /* space between left and right */
    align-items: center;
    height: 5%;
    padding: 1rem;
    font-size: 3rem;
}

.a_left, .a_right {
    display: flex;
    align-items: center;
    width: auto;
}

.a_left {
    justify-content: flex-start;
}

.a_right {
    display: flex;
    justify-content: flex-end;
    align-items: center;   /* ✅ vertical centering */
    height: 100%;          /* make sure it has height context */
}

.closebtn_side {
    color: var(--blb-white);
    padding-left: 0.5rem;
    text-decoration: none;
}

.heartbtn_side {
    color: var(--blb-heart);
    padding-right: 0.5rem;
    text-decoration: none;
}

.heartbtn_side img {
  display: block;
  height: 2rem;          /* or whatever size you want */
}

.nav_content:nth-child(2) { 
    height: 10%;
    width: 100%;
    align-content: center;
    justify-content: center;
    align-items: center;
    text-align: center;
}
.nav_content:nth-child(2) h1 {
    font-size: 3rem;
}
.nav_content:nth-child(3) { 
    color: var(--blb-text-soft); 
    height: 70%;
    width: 100%;
    align-items: flex-start;   /* Align items to the left*/
    flex-direction: column;
    justify-content: flex-start;
    gap: 0.75rem;
    padding: 1.5rem;
}

.nav_content:nth-child(3) a { 
    font-size: 2rem;
}

.nav_content:nth-child(4) { 
    height: 20%;
    width: 100%;
    align-items: center;
    justify-content: center;
}

/* Use flex-grow ratios — these will perfectly fill the height */
/* Shared style for all sections */
.nav_content {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
    border-bottom: 0.0625rem solid var(--blb-border-3);
    font-size: 1.5rem;
}
  
/* Remove border on last one */
.sidebar-section:last-child {
    border-bottom: none;
}

/* Social Media Links */
.face_btn_2 {
    position: relative;
    bottom: 0;
}
.face_img_2 {
    width: 4rem; /* 64px */
}

.face_btn, .insta_btn, .blank_img {
    padding-bottom: 0.625rem;
}

/* Touch target: the social icons render 21x29 on a phone, the smallest
   real controls on the listing. Grow only the tappable region, not the
   artwork. Measured safe: the next item in the social bar sits 46px
   away, so ~11px of growth per side cannot collide with it (and
   .blank_img, the placeholder for a missing account, is not a control
   at all). Same approach as .bp-promo-arrow. */
.face_btn, .insta_btn {
    position: relative;
}
.face_btn::after, .insta_btn::after {
    content: "";
    position: absolute;
    inset: -0.85rem -1.25rem;
}
.face_img, .insta_img, .blank_img {
    width: 2rem; /* 32px */
}

/* ────────────────────────────────────────────────────────────────
   MAIN
   ───────────────────────────────────────────────────────────── */
a,
button,
[role="button"],
[onclick],
input,
textarea,
select,
.carousel-dot {
  -webkit-tap-highlight-color: transparent;
}

html {
    font-size: 1rem; /* 16px */    
}

body {    
    background-color: var(--blb-green-deep);
    color: var(--blb-text);
    margin: 0;
    font-family: var(--blb-font-body);
}

h1, h2, h3, p {
    margin: 0;
}

article {
    color: var(--blb-text-soft);
    position: relative;
    text-align: center;
}

footer {
    margin: 0;
    text-align: center;
    vertical-align: text-bottom;
}

button{
    touch-action: manipulation;
    -webkit-tap-highlight-color: transparent;
}

a, a:link, a:visited {
    text-decoration: none;
    color: var(--blb-text);
}
a:hover {
    color: var(--blb-accent);
}

span, span:link, span:visited, span:hover {
    text-decoration: none;
}

/* Keyboard focus. The stylesheet had no focus styles at all, which left
   anyone navigating by keyboard, or by an Android/iOS switch or keyboard
   accessory, with no idea where they were. :focus-visible (not :focus)
   means mouse and touch users never see the ring - the browser only
   applies it for keyboard-style interaction, so nothing changes for the
   phone users this site is built for.
   outline-offset is in rem so it tracks the root scale like everything
   else, and outline (not border) is used so it never affects layout. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
    outline: 0.1875rem solid var(--blb-accent);
    outline-offset: 0.125rem;
    border-radius: 0.25rem;
}

.scale-down {
    font-size: 0.8em;   /* everything that uses rem/em just shrinks */
}

/* ────────────────────────────────────────────────────────────────
   Modal Overlay
   ───────────────────────────────────────────────────────────── */
.modal-overlay {
    display: none; /* hidden by default */
    position: fixed;
    z-index: 2000;
    /* inset beats left/top + 100vw/100vh: 100vw ignores a desktop
       scrollbar (stray horizontal scroll) and 100vh overshoots a mobile
       toolbar. `inset` is exactly the viewport, everywhere. */
    inset: 0;
    background-color: var(--blb-overlay-modal); /* dark smoke effect */
    backdrop-filter: blur(2px);
    justify-content: center;
    /* Top-aligned, not centred. Centring put the panel in the middle of
       the screen and it grew in both directions as results came in, so
       the input moved under the caret while you typed. Anchored to the
       top, the box only ever grows downward; the overlay scrolls if the
       panel outgrows the viewport. */
    align-items: flex-start;
    /* Symmetric, so a modal that does not fill the height is inset by
       the same amount top and bottom. */
    padding: 2rem 1rem;
    overflow-y: auto;
    overscroll-behavior: contain;
}

/* The search overlay is a window, not a scroller: the panel below is
   sized to the viewport and its results list scrolls internally, so the
   overlay itself never grows a scrollbar. That is also why there is no
   `scrollbar-gutter` here - with nothing to scroll there is no gutter
   to reserve, and reserving one would eat into the side inset and stop
   the four gaps from matching. */
#searchModal.modal-overlay {
    padding: var(--search-top, 2rem) var(--search-side, 1rem);
    overflow: hidden;
}

/* ── Shared modal shell ──────────────────────────────────────────
   Not search-specific: the business modal and the image preview on the
   listing page use these too (9 .modal-content and 10 .close-modal in
   the page markup). They must stay ABOVE the search panel's rules so
   .blb-s-panel can override them for the search modal only. */
.modal-content {
    position: relative;
    background-color: var(--blb-surface);
    padding: 2rem;
    border-radius: 1rem;
    box-shadow: 0 0 1rem var(--blb-glow);
    text-align: center;
    width: 90%;
    max-width: 39.0625rem;   /* 625px - rem so it scales on large displays */
    box-sizing: border-box;
}

.search-input {
    font-size: 1.5rem;
    padding: 0.75rem 1.25rem;
    width: 100%;
    border-radius: 0.5rem;
    border: none;
    outline: none;
}

.close-modal {
    position: absolute;
    top: 0.15rem;
    right: 0.55rem;
    background: none;
    border: none;
    color: var(--blb-text);
    font-size: 2rem;
    cursor: pointer;
    z-index: 10;
}

/* ====================================================================
   SEARCH PANEL
   ====================================================================
   Header, input wrapper, results block and footer are all built by
   search.js, not by markup: the modal is duplicated in every page file,
   so anything added to the HTML would have to be added seven times.
   The pages still carry only the input, the <ul> and the tooltip.

   Sizes hang off --search-* variables set per breakpoint further down.
   ==================================================================== */
.blb-s-panel {
    text-align: left;
    /* Fills the overlay's content box rather than growing with its
       results, so the window keeps the same inset on every side and the
       page behind it never scrolls. The children below are laid out as
       a column: header, input, tabs and the "can't find it?" prompt keep
       their natural height and the results block takes what is left. */
    height: 100%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: var(--search-pad, 1.6rem);
    background-color: var(--blb-surface);
    border: 0.0625rem solid var(--blb-border);
    border-radius: var(--search-radius, 1.5rem);
    box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.55);
    width: 100%;
    max-width: var(--search-max, 40rem);
    margin: 0 auto;
    box-sizing: border-box;
}
/* Every breakpoint block further down carries a
   `.<size> .modal-content { top: 2rem }` nudge that pushes all modals
   off the top edge. The search panel is placed by the overlay's padding
   instead, and that nudge stacked on top of it - which is why the gap
   above the panel was larger than the one below. Cancelling it needs
   three classes to outrank `.sm-phone .modal-content`, since those
   rules are defined AFTER this one. */
.modal-overlay .modal-content.blb-s-panel { top: 0; }

.blb-s-panel * { box-sizing: border-box; }
.blb-s-panel svg {
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* The panel is a fixed-height column, so everything except the results
   block holds its natural height instead of being squeezed. */
.blb-s-head,
.blb-s-inputwrap,
.search-modes,
.blb-s-cta { flex: 0 0 auto; }

/* -- Header row -- */
.blb-s-head {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
    margin-bottom: var(--search-gap, 1.2rem);
}
.blb-s-headicon {
    flex-shrink: 0;
    width: var(--search-headicon, 2.4rem);
    height: var(--search-headicon, 2.4rem);
    color: var(--blb-highlight);
}
.blb-s-headicon svg { width: 100%; height: 100%; stroke-width: 2.2; }
.blb-s-headtext { flex: 1 1 auto; min-width: 0; }
.blb-s-title {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--search-title, 1.9rem);
    font-weight: 800;
    color: var(--blb-text-soft);
    /* One line at every width - the per-breakpoint --search-title values
       are sized to fit the header row beside the icon and the close
       disc, so wrapping here would only mean the size is wrong. */
    white-space: nowrap;
}
.blb-s-sub {
    display: block;
    margin-top: 0.15rem;
    font-family: var(--blb-font-sans);
    font-size: var(--search-sub, 1.15rem);
    color: var(--blb-text-faint);
}

/* Close button - it comes from the page markup; search.js moves it into
   the header row and this restyles it into a disc. */
.blb-s-panel .close-modal {
    position: static;
    flex-shrink: 0;
    width: var(--search-close, 2.6rem);
    height: var(--search-close, 2.6rem);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border-radius: 50%;
    border: 0.0625rem solid var(--blb-border-3);
    background-color: var(--blb-surface-3);
    color: var(--blb-text-soft);
    font-size: var(--search-closefont, 1.6rem);
    line-height: 1;
}
.blb-s-panel .close-modal:hover {
    border-color: var(--blb-highlight);
    color: var(--blb-highlight);
}

/* -- Input -- */
.blb-s-inputwrap {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0 1rem;
    border-radius: 3rem;
    background-color: var(--blb-green-deep);
    border: 0.125rem solid var(--blb-highlight);
    box-shadow: 0 0 0.9rem color-mix(in srgb, var(--blb-highlight) 30%, transparent);
}
.blb-s-inputicon {
    flex-shrink: 0;
    width: var(--search-inputicon, 1.5rem);
    height: var(--search-inputicon, 1.5rem);
    color: var(--blb-text-faint);
}
.blb-s-inputicon svg { width: 100%; height: 100%; }

.blb-s-panel .search-input {
    flex: 1 1 auto;
    min-width: 0;
    max-width: none;
    padding: var(--search-inputpad, 0.9rem) 0;
    background: none;
    border: none;
    border-radius: 0;
    outline: none;
    color: var(--blb-text-soft);
    font-family: var(--blb-font-sans);
    font-size: var(--search-inputfont, 1.4rem);
}
.blb-s-panel .search-input::placeholder { color: var(--blb-text-faint); }

.blb-s-clear {
    flex-shrink: 0;
    width: 1.8rem;
    height: 1.8rem;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    cursor: pointer;
    background: none;
    color: var(--blb-text-faint);
    font-size: 1.5rem;
    line-height: 1;
}
.blb-s-clear.on { display: flex; }
.blb-s-clear:hover { color: var(--blb-text-soft); }

/* -- Mode tabs: icon over label --
   Buttons are generated by search.js from SEARCH_MODES, so this styles
   however many modes exist without needing to know them. Exactly one is
   active at a time; the active one is green with an underline. */
.search-modes {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 0.25rem;
    margin-top: var(--search-gap, 1.2rem);
    padding: 0.45rem;
    background-color: var(--blb-surface-2);
    border-radius: 1rem;
}
.search-mode-btn {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.3rem;
    padding: 0.55rem 0.15rem 0.7rem;
    background: none;
    border: none;
    border-radius: 0.7rem;
    cursor: pointer;
    font-family: var(--blb-font-sans);
    font-size: var(--search-mode-size, 1.05rem);
    color: var(--blb-text-faint);
    transition: color 0.2s ease, background-color 0.2s ease;
}
.search-mode-btn:hover { color: var(--blb-text-soft); }
.search-mode-btn.active { color: var(--blb-search-on, #63ffa5); }
.search-mode-btn.active::after {
    content: "";
    position: absolute;
    left: 22%;
    right: 22%;
    bottom: 0.15rem;
    height: 0.19rem;
    border-radius: 0.19rem;
    background-color: var(--blb-search-on, #63ffa5);
}
.blb-s-tabicon {
    width: var(--search-tabicon, 1.6rem);
    height: var(--search-tabicon, 1.6rem);
    display: flex;
    align-items: center;
    justify-content: center;
}
.blb-s-tabicon svg { width: 100%; height: 100%; }
/* "First Letter" is lettering rather than a glyph - it is the A-Z sort,
   and drawing that as a picture reads worse than saying it. */
.blb-s-az {
    font-size: 0.95em;
    font-weight: 800;
    letter-spacing: 0.02em;
}
.blb-s-tablabel {
    display: block;
    text-align: center;
    line-height: 1.15;
    overflow-wrap: anywhere;
}

/* -- Results block --
   The one part of the panel that flexes: it takes whatever height the
   fixed rows leave over, and the list inside it scrolls. min-height: 0
   is what lets it shrink below its content - without it a flex item
   refuses to go under its intrinsic size and the list would push the
   prompt below the panel's bottom edge. */
.blb-s-results {
    display: none;
    flex: 1 1 auto;
    min-height: 0;
    margin-top: var(--search-gap, 1.2rem);
    padding: var(--search-pad, 1.6rem) 0.75rem 0.75rem;
    background-color: var(--blb-surface-2);
    border: 0.0625rem solid var(--blb-border);
    border-radius: 1.1rem;
}
.blb-s-results.open {
    display: flex;
    flex-direction: column;
}

.blb-s-rhead {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 0.8rem;
    padding: 0 0.5rem;
    margin-bottom: 0.9rem;
}
.blb-s-rbadge {
    flex-shrink: 0;
    width: var(--search-rbadge, 2.6rem);
    height: var(--search-rbadge, 2.6rem);
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    border: 0.0625rem solid color-mix(in srgb, var(--blb-highlight) 45%, transparent);
    background-color: color-mix(in srgb, var(--blb-highlight) 14%, transparent);
    color: var(--blb-highlight);
}
.blb-s-rbadge svg { width: 55%; height: 55%; }
.blb-s-rtitle {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--search-rtitle, 1.35rem);
    font-weight: 700;
    color: var(--blb-text-soft);
}
.blb-s-rsub {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--search-sub, 1.15rem);
    color: var(--blb-text-faint);
}

/* The <ul> comes from the page markup. It used to be absolutely
   positioned under the input; these rules re-home it inside the results
   card as a plain column. */
.suggestions-list {
    list-style: none;
    position: static;
    margin: 0;
    padding: 0;
    width: 100%;
    max-width: none;
    max-height: 0;
    overflow: hidden;
    background: none;
    border: none;
    opacity: 0;
    display: flex;
    flex-direction: column;
    gap: 0.45rem;
    transition: max-height 0.25s ease, opacity 0.25s ease;
    scrollbar-width: thin;
    scrollbar-color: var(--blb-scrollbar) var(--blb-surface-2);
}
/* Open, the list fills the results block instead of running to a fixed
   --search-listmax: the panel is already capped by the viewport, so the
   cap belongs to the space that is actually left. */
.suggestions-list.open {
    flex: 1 1 auto;
    min-height: 0;
    max-height: none;
    overflow-y: auto;
    opacity: 1;
}
.suggestions-list::-webkit-scrollbar { width: 8px; }
.suggestions-list::-webkit-scrollbar-track { background: var(--blb-surface-2); }
.suggestions-list::-webkit-scrollbar-thumb {
    background-color: var(--blb-surface-5);
    border-radius: 4px;
}

.blb-s-row {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: var(--search-rowpad, 0.7rem) 0.85rem;
    cursor: pointer;
    user-select: none;
    background-color: var(--blb-surface);
    border: 0.0625rem solid var(--blb-border);
    border-radius: 0.8rem;
    transition: border-color 0.2s ease, background-color 0.2s ease;
}
.blb-s-row:hover {
    border-color: var(--blb-highlight);
    background-color: var(--blb-surface-3);
}
.blb-s-rowicon {
    flex-shrink: 0;
    width: var(--search-rowicon, 2.4rem);
    height: var(--search-rowicon, 2.4rem);
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 0.6rem;
    background-color: color-mix(in srgb, var(--blb-highlight) 15%, transparent);
    color: var(--blb-highlight);
}
.blb-s-rowicon svg { width: 55%; height: 55%; }
.blb-s-rowlabel {
    flex: 1 1 auto;
    min-width: 0;
    font-family: var(--blb-font-sans);
    font-size: var(--search-row, 1.25rem);
    font-weight: 700;
    color: var(--blb-text-soft);
}
.blb-s-chev {
    flex-shrink: 0;
    color: var(--blb-highlight);
    font-size: 1.5em;
    line-height: 0.6;
}

/* -- "Can't find it?" prompt -- */
.blb-s-cta {
    display: none;
    align-items: center;
    gap: 0.85rem;
    margin-top: var(--search-gap, 1.2rem);
    padding: var(--search-rowpad, 0.7rem) 0.9rem;
    text-decoration: none;
    background-color: var(--blb-surface-2);
    border: 0.0625rem solid var(--blb-border);
    border-radius: 1.1rem;
}
.blb-s-cta.open { display: flex; }
.blb-s-cta:hover { border-color: var(--blb-highlight); }
.blb-s-ctaicon {
    flex-shrink: 0;
    width: var(--search-rowicon, 2.4rem);
    height: var(--search-rowicon, 2.4rem);
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background-color: color-mix(in srgb, var(--blb-highlight) 14%, transparent);
    color: var(--blb-highlight);
}
.blb-s-ctaicon svg { width: 62%; height: 62%; }
.blb-s-ctatext { flex: 1 1 auto; min-width: 0; }
.blb-s-ctatitle {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--search-rtitle, 1.35rem);
    font-weight: 700;
    color: var(--blb-text-soft);
}
.blb-s-ctasub {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--search-sub, 1.15rem);
    color: var(--blb-text-faint);
}
.blb-s-ctasub em { font-style: normal; color: var(--blb-highlight); }

.search-tooltip {
    display: none;
    position: absolute;
    top: 48.5%;
    left: 50%;
    transform: translate(-50%, -130%); /* Center horizontally, float above modal */
    color: var(--blb-error);
    padding: 0.5rem 0.75rem;
    border-radius: 0.25rem;
    font-size: 1rem;
    z-index: 10000;
    white-space: nowrap;
}


/* ────────────────────────────────────────────────────────────────
   1A. HOME PAGE
   ───────────────────────────────────────────────────────────── */
.section_home {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* Home Page - Section 1 */
/* Navigation Menu Bar */
.page_content_home:nth-child(1) {
    height: 10%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--blb-surface-3);
}

/* Home Page - Section 2 */
/* Header */
.page_content_home:nth-child(2) {
    height: 20%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}
.page_content_home:nth-child(2) h1 {
    position: relative;
    font-size: 5rem;
    text-align: center;
    top: 20%;
}

/* Home Page - Section 3 */
/* Carousel Main Buttons */
.page_content_home:nth-child(3) {
    height: 60%;
    width: 100%;
}

.carousel-wrapper {
    position: relative;
    width: 100%;
    perspective: 2000px;
}

.carousel-container {
    display: flex;
    position: relative;
    transform-style: preserve-3d;
    transform: rotateY(0deg);
    transition: transform 0.4s ease;
    transform-origin: center center;
    width: 0;
    height: 0;
    margin: auto;
}
.carousel-item {
    position: absolute;
    top: 0;
    margin: -5.75rem; /* -92px */
    z-index: 4;

    /* Fixes the hairline of page-background colour that cut across a
       tile and moved to a different tile after rotating.

       The whole ring is ONE composited layer - .carousel-container is
       preserve-3d inside a perspective - and the compositor rasterises a
       layer that size in tiles. Every box here also lands on fractional
       device pixels: the tile measures 137.520 x 140.051 at x 562.369,
       y 354.369, because sizes are in rem and the root font-size is
       fluid (10.6667px on a 1280px window). Where a rasterisation tile
       boundary fell inside a button, the seam between tiles did not
       quite cover and the green behind showed through. Rotating changed
       the sub-pixel offsets, so the line moved to another button.

       will-change gives each item its own layer, rasterised on its own,
       so no shared tile boundary can cross one. Deliberately NOT
       backface-visibility: hidden - that also cures seams, but with 9
       items 40 degrees apart it would hide every tile turned past 90
       degrees, i.e. all the faded ones around the back of the ring. */
    will-change: transform;
}
.a_home_box_1 {
    padding: 2.5rem;
    background-color: var(--blb-surface);
    border: 0.125rem solid var(--blb-border);
    border-radius: 3.125rem;
}
.a_home_box_1 img {
    filter: invert();
    width: 6.25rem; /* 100px */
    height: 6.25rem;
}
.a_home_box_1_text {
    position: relative;
    bottom: 0;
    opacity: 33.4%;
    transition: opacity 1s ease-in-out;
    font-size: 1rem;
}
.a_home_box_1_text.visible {
    opacity: 1 !important;
}
.a_home_box_1_text p{
    color: var(--blb-text-soft); 
    text-align: center; 
    font-family: var(--blb-font-serif);
    margin-top: 0.25rem;
    font-size: 1.5rem; 
    position: relative;
}

/* Carousel Side Buttons */
.carousel-controls {
    position: absolute;
    width: 100%;
    display: flex;
    justify-content: space-between;
    top: 50%;
    transform: translateY(-50%);
}
.carousel-button {
    background-color: var(--blb-surface);
    text-align: center;
    height: 18.125rem; /* 290px */
    width: 60rem; /* 514px */
    cursor: pointer;
}
/* Home Page - Section 4 */
/* Footer */
.page_content_home:nth-child(4) {
    height: 10%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
}

.page_content_home {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* ────────────────────────────────────────────────────────────────
   1A. CALENDAR PAGE
   ───────────────────────────────────────────────────────────── */
.section_calendar {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* Calendar Page - Section 1 */
/* Navigation Menu Bar */
.page_content_calendar:nth-child(1) {
    /* 10%, matching every other page's nav band (home, categories, about,
       main services, under construction). At 13% this one page's top bar
       was 117px against everyone else's 90px. The phone breakpoints
       already used 10% - only the desktop/tablet base was out of step. */
    height: 10%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--blb-surface-3);
}

.page_content_calendar {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* ════════════════════════════════════════════════════════════════════
   EVENT CALENDAR PAGE
   ════════════════════════════════════════════════════════════════════
   The old page was one styled iframe in a percentage band. This one is
   hero -> toolbar -> two-column grid, so it needs a scroller: the nav
   band keeps its 10% and .cal-wrapper takes the other 90% and is the
   ONLY thing that scrolls, exactly like .category-wrapper.

   Sizes come from --cal-* variables set per breakpoint further down,
   for the usual reason: the root font-size is ~10.7px on desktop and
   ~9.1px on a phone, so one rem value cannot serve both.

   Each event carries its own colour as --ev-accent (from the Accent
   field in events.json); the stripe, the time label and the icon disc
   all tint from that one value.
   ════════════════════════════════════════════════════════════════════ */

/* [hidden] has to win here: .cal-event is display:grid and .cal-modal
   is display:flex, both of which beat the UA stylesheet's display:none
   for the attribute. Scoped to this page so nothing else is affected. */
.section_calendar [hidden] { display: none !important; }

/* border-box, scoped to this page.
   The site has no global box-sizing (deliberately deferred - it would
   shift every element with width:100% AND padding). Without it a
   flex-basis of calc(50% - 0.5rem) sizes the CONTENT box, so the two
   toolbar selects were 50% + 2.2rem of padding each and could never
   share a row: the toolbar came out five rows tall on a phone instead
   of four. Scoping it here fixes that without touching the other seven
   pages. Everything below is written expecting it. */
.cal-wrapper,
.cal-wrapper *,
.cal-modal,
.cal-modal * { box-sizing: border-box; }

.cal-wrapper {
    height: 90%;
    width: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    box-sizing: border-box;
    color: var(--blb-text);
}

/* The inline SVG icon sprite. Never rendered itself - only referenced
   by <use>. Not display:none, which some engines have been unreliable
   about for referenced content. */
.cal-sprite {
    position: absolute;
    width: 0;
    height: 0;
    overflow: hidden;
}

/* Every icon on this page is a line drawing that inherits the colour of
   whatever it sits in, so one rule covers all of them. */
.cal-wrapper svg,
.cal-modal svg {
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ── Hero ───────────────────────────────────────────────────────────
   The Belvidere photo is OPTIONAL and needs no code change: drop a file
   at /res/images/calendar/hero.jpg and it appears under the gradient.
   Until then the url() simply fails and the gradient over
   --blb-green-deep shows on its own, which is why it is opaque enough
   to stand alone. */
.cal-hero {
    position: relative;
    width: 100%;
    flex-shrink: 0;
    box-sizing: border-box;
    padding: var(--cal-hero-pad, 3rem 2.5rem 3.25rem);
    overflow: hidden;
    background-color: var(--blb-green-deep);
    background-image:
        linear-gradient(100deg,
            rgba(12, 39, 33, 0.98) 0%,
            rgba(12, 39, 33, 0.92) 38%,
            rgba(12, 39, 33, 0.45) 100%),
        url("/res/images/calendar/hero.jpg");
    background-size: cover;
    background-position: center;
}

/* The arc watermark that used to sit here (.cal-hero::after - a circle
   drawn with border-radius: 50% and a mint outline) has been removed at
   the owner's request. The hero still hides its overflow so a hero photo
   stays cropped to the section.

   NB: keep property names off the start of a line in these comments -
   the structure check in HANDOFF.md reads that as a declaration
   swallowed by a comment and reports a false positive. */

/* Bottom fade. Ramps the last 5% of the section into the page colour so
   it ends rather than stopping - it matters once a hero photo is added,
   which would otherwise finish in a hard horizontal cut.

   Kept as a positioned ::before rather than another background layer:
   the z-index ordering below is what put it above the old arc, and it
   still keeps the fade under .cal-hero-inner's content. */
.cal-hero::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 5%;
    z-index: 1;
    pointer-events: none;
    background-image: linear-gradient(to bottom,
        transparent 0%, var(--blb-green-deep) 100%);
}

.cal-hero-inner {
    position: relative;
    z-index: 2;
    max-width: 105rem;
    margin: 0 auto;
}

.cal-eyebrow {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    margin: 0 0 0.7rem;
    color: var(--blb-highlight);
    font-family: var(--blb-font-sans);
    font-size: var(--cal-eyebrow-size, 1.1rem);
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
.cal-eyebrow-rule {
    width: 3rem;
    height: 0.125rem;
    background-color: var(--blb-highlight);
    opacity: 0.8;
    flex-shrink: 0;
}

.cal-hero-title {
    margin: 0;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-hero-title, 6rem);
    font-weight: 800;
    line-height: 1;
    letter-spacing: -0.01em;
    text-transform: uppercase;
    color: var(--blb-text-soft);
}
.cal-hero-accent { color: var(--blb-highlight); }

.cal-hero-underline {
    display: block;
    width: 6rem;
    height: 0.3rem;
    margin: 1rem 0 0;
    border-radius: 0.3rem;
    background-color: var(--blb-highlight);
}

.cal-hero-sub {
    margin: 1.1rem 0 0;
    max-width: 42rem;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-hero-sub, 1.5rem);
    line-height: 1.5;
    color: var(--blb-text);
}

.cal-hero-points {
    list-style: none;
    margin: 1.75rem 0 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--cal-point-gap, 2.75rem);
}
.cal-hero-points li {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}
.cal-hero-point-icon {
    width: var(--cal-point-icon, 2.6rem);
    height: var(--cal-point-icon, 2.6rem);
    flex-shrink: 0;
    color: var(--blb-highlight);
}
.cal-hero-point-icon svg { width: 100%; height: 100%; }
.cal-hero-point-text {
    display: flex;
    flex-direction: column;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-point-size, 1.25rem);
    line-height: 1.3;
    color: var(--blb-text-faint);
}
.cal-hero-point-text strong {
    color: var(--blb-text-soft);
    font-weight: 600;
}

/* ── Toolbar ──────────────────────────────────────────────────────
   The DOCK sticks, not the bar. .cal-wrapper is the scrollport, so
   top:0 pins the dock's own top edge directly under the 10% nav band,
   and its padding then holds the bar 1.75rem clear of it - the same
   gap every other section on this page uses.

   The dock is full width and opaque because the cards scroll BEHIND
   it. Sticking the bar itself instead would leave that 1.75rem of
   clearance transparent, and event rows would slide through it. */
.cal-toolbar-dock {
    position: sticky;
    top: 0;
    z-index: 5;
    flex-shrink: 0;
    width: 100%;
    padding: 1.75rem 0;
    background-color: var(--blb-green-deep);
}

.cal-toolbar {
    box-sizing: border-box;
    width: min(105rem, 100% - 5rem);
    margin: 0 auto;
    padding: 0.9rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.9rem;
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 1rem;
}

.cal-btn,
.cal-round,
.cal-card-link {
    font-family: var(--blb-font-sans);
    cursor: pointer;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.cal-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.6rem;
    padding: var(--cal-btn-pad, 0.75rem 1.4rem);
    border-radius: 0.7rem;
    border: 0.0625rem solid transparent;
    font-size: var(--cal-tool-size, 1.25rem);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    white-space: nowrap;
}
.cal-btn svg { width: 1.6rem; height: 1.6rem; flex-shrink: 0; }

.cal-btn-solid {
    background-color: var(--blb-highlight);
    color: var(--blb-green-deep);
}
.cal-btn-solid:hover { filter: brightness(1.1); }

.cal-btn-ghost {
    background-color: transparent;
    border-color: var(--blb-highlight);
    color: var(--blb-highlight);
}
.cal-btn-ghost:hover,
.cal-btn-ghost.is-active {
    background-color: color-mix(in srgb, var(--blb-highlight) 18%, transparent);
}

.cal-nav-pair { display: flex; gap: 0.5rem; }
/* Sized from a variable rather than a fixed rem: 3.1rem is 33px on the
   desktop root but only 28px on a phone's, which is under any
   reasonable touch target. Same reason for the mini-calendar arrows,
   the day chip's clear button and the category pills below. */
.cal-round {
    width: var(--cal-round-size, 3.1rem);
    height: var(--cal-round-size, 3.1rem);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    border: 0.0625rem solid var(--blb-card-border);
    background-color: transparent;
    color: var(--blb-text);
}
.cal-round svg { width: 1.5rem; height: 1.5rem; }
.cal-round:hover {
    border-color: var(--blb-highlight);
    color: var(--blb-highlight);
}

/* Not sticky on a rotated phone: the viewport is ~326px tall there and
   the toolbar wraps to two rows, so pinning it would permanently spend
   a third of the screen on filters. */
.xs-phone-land .cal-toolbar-dock,
.sm-phone-land .cal-toolbar-dock { position: static; }

.cal-search {
    flex: 1 1 18rem;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0 1.1rem;
    background-color: var(--blb-green-deep);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.7rem;
}
.cal-search-icon {
    width: 1.6rem;
    height: 1.6rem;
    flex-shrink: 0;
    color: var(--blb-text-faint);
}
.cal-search-input {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.85rem 0;
    background: none;
    border: none;
    outline: none;
    color: var(--blb-text);
    font-family: var(--blb-font-sans);
    font-size: var(--cal-tool-size, 1.25rem);
}
.cal-search-input::placeholder { color: var(--blb-text-faint); }
.cal-search-input::-webkit-search-cancel-button { display: none; }

/* Native <select> keeps the phone's own picker, which is far better
   than anything a custom dropdown would do on a touch screen. */
.cal-select {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0 1.1rem;
    background-color: var(--blb-green-deep);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.7rem;
    color: var(--blb-text-faint);
}
.cal-select svg { width: 1.6rem; height: 1.6rem; flex-shrink: 0; }
.cal-select select {
    padding: 0.85rem 0.4rem 0.85rem 0;
    background: none;
    border: none;
    outline: none;
    cursor: pointer;
    color: var(--blb-text);
    font-family: var(--blb-font-sans);
    font-size: var(--cal-tool-size, 1.25rem);
}
.cal-select select option { background-color: var(--blb-surface); }
.cal-select:has(select:disabled) { opacity: 0.45; }
.cal-select select:disabled { cursor: not-allowed; }

/* Phone toolbar. Left to wrap on its own the six controls came out
   ragged - five rows with a lone half-width select on one of them.
   Pinning the flex-basis gives a predictable four rows:
       Today + < >   |   search   |   both selects   |   view toggle
   Portrait phones only: landscape has the width to wrap sensibly, and
   the tablet root is large enough that these would double-space it. */
.xs-phone .cal-search,
.sm-phone .cal-search,
.lg-phone .cal-search { flex: 1 1 100%; }

.xs-phone .cal-select,
.sm-phone .cal-select,
.lg-phone .cal-select { flex: 1 1 calc(50% - 0.5rem); min-width: 0; }

.xs-phone .cal-select select,
.sm-phone .cal-select select,
.lg-phone .cal-select select { flex: 1 1 auto; min-width: 0; }

.xs-phone .cal-btn-ghost,
.sm-phone .cal-btn-ghost,
.lg-phone .cal-btn-ghost { flex: 1 1 100%; }

/* ── Main grid ──────────────────────────────────────────────────── */
/* No top margin: the dock's bottom padding is already the 1.75rem gap.
   Adding one here would double it. */
.cal-main {
    box-sizing: border-box;
    width: min(105rem, 100% - 5rem);
    margin: 0 auto;
    display: grid;
    grid-template-columns: var(--cal-cols, 1.55fr 1fr);
    gap: 1.75rem;
    align-items: start;
}

/* NOT sticky. It was, back when the event list ran to 37 rows and
   ~3,700px beside a 730px sidebar. Now that the list scrolls inside its
   own card the whole layout is about one screen tall and the sidebar is
   the TALLER column - which made sticky actively wrong: a sticky box
   can never leave its containing block, so with .cal-side as tall as
   .cal-main it had no room to stick and simply got clamped, sliding
   under the sticky toolbar at the end of the scroll. */
.cal-side {
    display: flex;
    flex-direction: column;
    gap: 1.75rem;
    min-width: 0;
}

.cal-card {
    box-sizing: border-box;
    min-width: 0;
    padding: var(--cal-card-pad, 1.5rem);
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 1rem;
}

/* Applied by calendar_events.js ONLY when the sidebar would otherwise
   make the group taller than the screen - which is what pushes the
   cards down behind the sticky filter bar. It buys ~70px at a 16px
   root out of padding and margins alone, so the calendar's day cells
   keep their size. Nothing here changes a font size or a cell. */
/* Set by calendar_events.js to the exact height the group has to be.
   The group must fill the screen EXACTLY, not merely fit inside it: any
   shortfall is height the page can never scroll, so that much of the
   hero stays wedged above the filter bar for ever. Slack lands under
   the calendar grid, which reads as a card with roomier bottom
   padding. */
.cal-side.is-fitted                  { height: var(--cal-side-h); }
.cal-side.is-fitted .cal-mini        { display: flex; flex-direction: column; flex: 1 1 auto; }
.cal-side.is-fitted .cal-mini-grid   { margin-bottom: auto; }

.cal-side.is-compact .cal-card      { padding: 1.1rem; }
.cal-side.is-compact .cal-card-head { margin-bottom: 0.6rem; }
.cal-side.is-compact .cal-mini-nav  { margin-bottom: 0.5rem; }
.cal-side.is-compact .cal-mini-arrow{ width: 2rem; height: 2rem; }
.cal-side.is-compact .cal-mini-dow  { margin-bottom: 0.25rem; }
.cal-side.is-compact .cal-cat-grid  { gap: 0.5rem; }
.cal-side.is-compact .cal-cat-pill  { padding: 0.5rem 0.9rem; min-height: 0; }

.cal-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.25rem;
}
.cal-card-title {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    margin: 0;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-card-title, 1.4rem);
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--blb-text-soft);
}
.cal-card-title-icon {
    width: 1.7rem;
    height: 1.7rem;
    color: var(--blb-highlight);
}
/* The short accent bar to the left of "UPCOMING EVENTS". */
.cal-upcoming .cal-card-title::before {
    content: "";
    width: 0.25rem;
    height: 1.5rem;
    border-radius: 0.25rem;
    background-color: var(--blb-highlight);
}

.cal-card-link {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0;
    background: none;
    border: none;
    color: var(--blb-highlight);
    font-size: var(--cal-card-title, 1.4rem);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
}
.cal-card-link svg { width: 1.5rem; height: 1.5rem; }
.cal-card-link:hover { filter: brightness(1.15); }

/* Chip shown when a day is picked in the mini calendar. */
.cal-daychip {
    display: inline-flex;
    align-items: center;
    gap: 0.7rem;
    margin-bottom: 1rem;
    padding: 0.5rem 0.6rem 0.5rem 1rem;
    border-radius: 2rem;
    background-color: color-mix(in srgb, var(--blb-highlight) 16%, transparent);
    color: var(--blb-text-soft);
    font-family: var(--blb-font-sans);
    font-size: var(--cal-ev-meta, 1.15rem);
}
.cal-daychip button {
    width: var(--cal-chip-btn, 1.9rem);
    height: var(--cal-chip-btn, 1.9rem);
    border: none;
    border-radius: 50%;
    cursor: pointer;
    background-color: rgba(0, 0, 0, 0.35);
    color: var(--blb-text-soft);
    font-size: 1.3rem;
    line-height: 1;
}

/* ── Event list ─────────────────────────────────────────────────────
   Deliberately dense: the row WIDTH is the design, but its height is
   just padding and type, so both were tightened to fit more events on
   screen. The row's own small text uses --cal-ev-small rather than the
   shared --cal-ev-meta, so shrinking it here does not also shrink the
   category pills, the day chip and the footer. */
/* The list scrolls INSIDE its card rather than making the page as long
   as the directory. 37 events at ~82px each is a 3,000px page; capped,
   the whole layout stays roughly one screen and the mini calendar and
   category browser are reachable without scrolling past every event.

   overflow-x is hidden on purpose: .cal-event:hover nudges the row
   0.25rem to the right, which would otherwise trip a horizontal
   scrollbar inside this box on every hover. */
.cal-list {
    list-style: none;
    margin: 0;
    padding: 0 0.4rem 0 0;
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
    max-height: var(--cal-list-max, 65dvh);
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: thin;
    scrollbar-color: var(--blb-surface-5) var(--blb-surface-2);
}
.cal-list::-webkit-scrollbar { width: 8px; }
.cal-list::-webkit-scrollbar-track { background: var(--blb-surface-2); }
.cal-list::-webkit-scrollbar-thumb {
    background-color: var(--blb-surface-5);
    border-radius: 4px;
}

.cal-event {
    --ev-accent: var(--blb-highlight);
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 1rem;
    padding: 0.65rem 1.25rem;
    background-color: var(--blb-green-deep);
    border: 0.0625rem solid var(--blb-card-border);
    border-left: 0.25rem solid var(--ev-accent);
    border-radius: 0.75rem;
    transition: border-color 0.2s ease, transform 0.2s ease;
}
.cal-event:hover {
    border-color: var(--ev-accent);
    transform: translateX(0.25rem);
}

.cal-ev-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: var(--cal-date-w, 3.9rem);
    flex-shrink: 0;
    font-family: var(--blb-font-sans);
    line-height: 1.05;
}
.cal-ev-mon,
.cal-ev-dow {
    font-size: var(--cal-ev-small, 1.02rem);
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--ev-accent);
}
.cal-ev-dow { color: var(--blb-text-faint); }
.cal-ev-day {
    font-size: var(--cal-ev-day, 1.95rem);
    font-weight: 800;
    color: var(--blb-text-soft);
}

.cal-ev-body { min-width: 0; }
.cal-ev-time {
    display: block;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-ev-small, 1.02rem);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.3;
    text-transform: uppercase;
    color: var(--ev-accent);
}
.cal-ev-title {
    margin: 0.1rem 0 0;
    font-family: var(--blb-font-body);
    font-size: var(--cal-ev-title, 1.6rem);
    font-weight: 400;
    line-height: 1.2;
    color: var(--blb-text-soft);
}
.cal-ev-title a { color: inherit; text-decoration: none; }
.cal-ev-title a:hover { color: var(--ev-accent); }

.cal-ev-loc,
.cal-ev-desc {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0.15rem 0 0;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-ev-small, 1.02rem);
    line-height: 1.3;
    color: var(--blb-text-faint);
}
.cal-ev-loc svg { width: 1.2rem; height: 1.2rem; flex-shrink: 0; }
.cal-ev-desc { display: block; }

.cal-ev-icon {
    width: var(--cal-ev-icon, 3.1rem);
    height: var(--cal-ev-icon, 3.1rem);
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background-color: color-mix(in srgb, var(--ev-accent) 22%, transparent);
    color: var(--ev-accent);
}
.cal-ev-icon svg { width: 55%; height: 55%; }

.cal-empty {
    margin: 1.5rem 0 0;
    text-align: center;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-ev-meta, 1.15rem);
    color: var(--blb-text-faint);
}

/* ── Mini calendar ──────────────────────────────────────────────── */
.cal-mini-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.7rem;
}
/* The sidebar is sticky, so its two cards have to fit in one screen
   together - otherwise the bottom of Browse by Category is unreachable
   until you hit the very end of the event list. Tighter heads here buy
   most of what that needs; the capped calendar cells below buy the
   rest. */
.cal-mini .cal-card-head,
.cal-browse .cal-card-head { margin-bottom: 0.9rem; }
.cal-mini-month {
    font-family: var(--blb-font-sans);
    font-size: var(--cal-card-title, 1.4rem);
    font-weight: 700;
    letter-spacing: 0.1em;
    color: var(--blb-text-soft);
}
.cal-mini-arrow {
    width: var(--cal-arrow-size, 2.4rem);
    height: var(--cal-arrow-size, 2.4rem);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 0.5rem;
    cursor: pointer;
    background: none;
    color: var(--blb-text-faint);
}
.cal-mini-arrow svg { width: 1.4rem; height: 1.4rem; }
.cal-mini-arrow:hover { color: var(--blb-highlight); }

/* Cells are CAPPED squares, not `repeat(7, 1fr)` + aspect-ratio.
   With 1fr the cell height followed the column width, so the wider the
   sidebar the taller the calendar: 62px cells at 1440 became ~88px at
   1920, and six rows of those pushed Browse by Category off the bottom
   of the screen. Capping the track at --cal-mini-cell fixes the height
   to the root font size instead, and space-between spreads whatever
   width is left over. The two grids must stay identical or the weekday
   labels stop lining up with their columns. */
.cal-mini-dow,
.cal-mini-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, var(--cal-mini-cell, 2.7rem)));
    justify-content: space-between;
    gap: 0.2rem;
}
.cal-mini-dow {
    margin-bottom: 0.35rem;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-mini-dow, 1.05rem);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    text-align: center;
    color: var(--blb-text-faint);
}

.cal-mini-day {
    position: relative;
    aspect-ratio: 1 / 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 0.0625rem solid transparent;
    border-radius: 0.5rem;
    background: none;
    font-family: var(--blb-font-sans);
    font-size: var(--cal-mini-size, 1.2rem);
    color: var(--blb-text);
}
.cal-mini-day.is-outside { color: var(--blb-unavailable); }
.cal-mini-day.has-events { cursor: pointer; }
.cal-mini-day.has-events:hover { border-color: var(--blb-highlight); }
.cal-mini-day.is-today {
    background-color: var(--blb-highlight);
    color: var(--blb-green-deep);
    font-weight: 700;
}
.cal-mini-day.is-selected {
    border-color: var(--blb-highlight);
    background-color: color-mix(in srgb, var(--blb-highlight) 20%, transparent);
}

/* Dots sit under the number, so the number keeps the cell's centre. */
.cal-mini-dots {
    position: absolute;
    bottom: 0.15rem;
    left: 0;
    right: 0;
    display: flex;
    justify-content: center;
    gap: 0.15rem;
}
.cal-mini-dots i {
    width: 0.35rem;
    height: 0.35rem;
    border-radius: 50%;
    background-color: var(--blb-highlight);
}
.cal-mini-day.is-today .cal-mini-dots i { background-color: var(--blb-green-deep); }

/* ── Browse by category ─────────────────────────────────────────── */
.cal-cat-grid {
    display: grid;
    grid-template-columns: var(--cal-cat-cols, 1fr 1fr);
    gap: 0.6rem;
}
.cal-cat-pill {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    min-height: var(--cal-pill-h, 0);
    padding: 0.7rem 0.9rem;
    cursor: pointer;
    background-color: var(--blb-green-deep);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.7rem;
    color: var(--blb-text);
    font-family: var(--blb-font-sans);
    font-size: var(--cal-ev-meta, 1.15rem);
    text-align: left;
    transition: border-color 0.2s ease, color 0.2s ease;
}
.cal-cat-pill svg {
    width: 1.6rem;
    height: 1.6rem;
    flex-shrink: 0;
    color: var(--blb-highlight);
}
.cal-cat-name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.cal-cat-count {
    flex-shrink: 0;
    min-width: 1.9rem;
    padding: 0.1rem 0.4rem;
    border-radius: 0.4rem;
    background-color: var(--blb-card-border);
    text-align: center;
    font-weight: 700;
}
.cal-cat-pill:hover,
.cal-cat-pill.is-active { border-color: var(--blb-highlight); }
.cal-cat-pill.is-active .cal-cat-count {
    background-color: var(--blb-highlight);
    color: var(--blb-green-deep);
}
/* A category with nothing in the current window still shows - the zero
   is the answer to "is there any live music this month?". */
.cal-cat-pill.is-empty { opacity: 0.5; }

/* The "Get Your Event Featured" card that sat here was removed at the
   owner's request - event submissions are handled off-site. Its icon
   (#cal-i-calendar-plus) came out of the sprite with it. */

/* ── Footer ─────────────────────────────────────────────────────── */
/* The site-standard footer, identical to the home page's: centred
   "(c) year", 1.5rem, cream. 1.75rem above it, matching every other gap
   on this page, and the same again below so it does not end flush.
   Keep the numbers in step with .page_content_home:nth-child(4). */
.cal-footer {
    flex-shrink: 0;
    width: 100%;
    margin-top: 1.75rem;
    padding: 0 0 1.75rem;
    text-align: center;
    font-size: 1.5rem;
    color: var(--blb-text);
}
.cal-footer p { margin: 0; }

/* ── Full-calendar modal (the Google embed) ─────────────────────── */
.cal-modal {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 2rem;
    box-sizing: border-box;
    background-color: var(--blb-overlay-modal);
}
.cal-modal-box {
    position: relative;
    width: min(100rem, 100%);
    height: min(75rem, 90%);
    padding: 3.5rem 1.25rem 1.25rem;
    box-sizing: border-box;
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 1rem;
}
.cal-modal-close {
    position: absolute;
    top: 0.6rem;
    right: 0.9rem;
    width: 3rem;
    height: 3rem;
    border: none;
    border-radius: 50%;
    cursor: pointer;
    background: none;
    color: var(--blb-text-soft);
    font-size: 2.6rem;
    line-height: 1;
}
.cal-modal-close:hover { color: var(--blb-highlight); }
.cal-modal-frame { width: 100%; height: 100%; }
.cal-modal-frame iframe {
    width: 100%;
    height: 100%;
    border: 0;
    border-radius: 0.75rem;
    background-color: var(--blb-surface);
    filter: invert(0.9) hue-rotate(180deg);
}

/* ────────────────────────────────────────────────────────────────
   1B. CATEGORY PAGE
   ───────────────────────────────────────────────────────────── */
.section_category {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    margin-bottom: 1em;
}

/* Category Page - Section 1 */
/* Navigation Menu Bar */
.page_content_category:nth-child(1) {
    height: 10%;
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    flex-shrink: 0;
    background-color: var(--blb-surface-3);
}

/* Category Page - Section 2 */
/* Header */
.category-wrapper {
    height: 90%;
    width: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: overlay; /* nice if supported */
    overflow-y: auto;    /* fallback */
    padding-right: 1rem;
    box-sizing: content-box;
}

.category-wrapper .page_content_category:nth-child(1) {
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    padding: 5vh 0;
    background-color: var(--blb-green-deep);
}
.category-wrapper .page_content_category:nth-child(1) h1 {
    font-size: 5rem;
    text-align: center;
}

/* Category Page - Section 3 */
/* Categories Groups */
.category-wrapper .page_content_category:nth-child(2) {
    width: 100%;
}

/* Category Buttons */
.category-buttons-inline {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem; /* 16px */
    justify-content: center;
    margin-bottom: 2rem;
    padding: 0 5vw;
    flex-direction:unset;
}
  
.category-button {
    color: var(--blb-text);
    background-color: var(--blb-surface);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1rem; /* 20px */
    padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
    font-size: 1.25rem;
    font-family: var(--blb-font-serif);
    cursor: pointer;
    transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}

.dropdown-section:has(.dropdown-content.visible) > .dropdown-header {
  color: var(--blb-text);
}

.dropdown-header {
    color: var(--blb-gold);
    padding: 0.75em;
    cursor: pointer;
    width: 100%;
    border: none;
    font-size: 2.5rem;
    transition: color 0.3s ease;
    background-color: var(--blb-green-deep);
    
}
.dropdown-header.open {
    color: var(--blb-text);
}

/* "Food Services" on one line by default; "Food<br>Services" on phones.
   categories_only.js always emits the <br> and this decides whether it
   applies, so rotating the device can't leave the wrong form behind. */
.dropdown-header-br { display: none; }
.xs-phone .dropdown-header-br,
.sm-phone .dropdown-header-br,
.lg-phone .dropdown-header-br { display: block; }

.dropdown-content {
  display: none;
  padding: 1em;
  background-color: var(--blb-green-deep);
}

.dropdown-content.visible {
  display: block;
}

.category-button {
  display: inline-block;
  margin: 0.25em;
  padding: 0.5em 1em;
  border: none;
  cursor: pointer;
  font-size: 1.25rem;
}

.category-button:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
}

/* ════════════════════════════════════════════════════════════════════
   CATEGORIES PAGE  —  hero
   ════════════════════════════════════════════════════════════════════
   Headline block on the left, "Why Shop Local?" panel on the right.

   The Belvidere photo is OPTIONAL and needs no code change: drop a file
   at /res/images/categories/hero.jpg and it appears underneath the
   gradient. Until then the url() simply fails to load and the gradient
   over --blb-green-deep is what shows, which is why the gradient is
   opaque enough to stand on its own.

   Sizes come from --hero-* / --why-* variables set per breakpoint with
   the other page variables, for the usual reason: the root font-size is
   ~10.7px on desktop and ~9.1px on a phone.
   ════════════════════════════════════════════════════════════════════ */
/* --cat-hero-gap is the page's one vertical spacing unit inside and
   below the hero. It is BOTH the row gap between the headline block and
   the "Why Shop Local?" panel AND the hero's bottom padding, so the gap
   under the search pill and the gap above the first service card are
   the same by construction rather than by two numbers that happen to
   agree. The bottom padding used to be 3.5rem against a 2.5rem gap,
   which read as a bigger step below the hero than inside it. */
.cat-hero {
    --cat-hero-gap: 2.5rem;
    position: relative;
    width: 100%;
    flex-shrink: 0;
    box-sizing: border-box;
    padding: 3rem 2rem var(--cat-hero-gap);
    overflow: hidden;
    background-color: var(--blb-green-deep);
    background-image:
        linear-gradient(100deg,
            rgba(12, 39, 33, 0.97) 0%,
            rgba(12, 39, 33, 0.82) 45%,
            rgba(12, 39, 33, 0.55) 100%),
        url("/res/images/categories/hero.jpg");
    background-size: cover;
    background-position: center;
}

/* Bottom fade, matching the calendar hero - see the comments there.
   The arc watermark that used to accompany it (.cat-hero::after) has
   been removed at the owner's request, on both heroes. */
.cat-hero::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 5%;
    z-index: 1;
    pointer-events: none;
    background-image: linear-gradient(to bottom,
        transparent 0%, var(--blb-green-deep) 100%);
}

.cat-hero-inner {
    position: relative;
    z-index: 2;
    max-width: 105rem;
    margin: 0 auto;
    display: grid;
    grid-template-columns: var(--hero-cols, 1.7fr 1fr);
    /* Same unit as the hero's bottom padding - see --cat-hero-gap. */
    gap: var(--cat-hero-gap, 2.5rem);
    align-items: start;
}

.cat-hero-text { min-width: 0; }

.cat-eyebrow {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    margin: 0 0 0.6rem;
    color: var(--blb-highlight);
    font-family: var(--blb-font-sans);
    font-size: var(--hero-eyebrow-size, 1.1rem);
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
/* The short rule trailing the eyebrow in the design. */
.cat-eyebrow-rule {
    width: 3rem;
    height: 0.125rem;
    background-color: var(--blb-highlight);
    opacity: 0.8;
    flex-shrink: 0;
}

.cat-hero-title {
    margin: 0;
    font-family: var(--blb-font-body);
    font-size: var(--hero-title-size, 6rem);
    line-height: 1.05;
    color: var(--blb-text-soft);
}
.cat-hero-accent { color: var(--blb-highlight); }

.cat-hero-sub {
    margin: 1rem 0 0;
    font-family: var(--blb-font-sans);
    font-size: var(--hero-sub-size, 1.5rem);
    line-height: 1.5;
    color: var(--blb-text);
}

/* ── Search bar ── */
.cat-search {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-top: 1.75rem;
    padding: 0.4rem 0.4rem 0.4rem 1.25rem;
    max-width: 46rem;
    background-color: rgba(0, 0, 0, 0.45);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 3rem;
    box-sizing: border-box;
}
.cat-search-icon {
    width: 1.6rem;
    height: 1.6rem;
    flex-shrink: 0;
    color: var(--blb-text-faint);
}
.cat-search-input {
    flex: 1 1 auto;
    min-width: 0;
    background: none;
    border: none;
    outline: none;
    color: var(--blb-text);
    font-family: var(--blb-font-sans);
    font-size: var(--hero-search-size, 1.4rem);
    padding: 0.6rem 0;
}
.cat-search-input::placeholder { color: var(--blb-text-faint); }
/* Chrome/Safari draw their own clear button on type=search; it sits
   awkwardly inside a pill this size. */
.cat-search-input::-webkit-search-cancel-button { display: none; }

.cat-search-btn {
    flex-shrink: 0;
    border: none;
    cursor: pointer;
    padding: 0.7rem 2rem;
    border-radius: 3rem;
    background-color: var(--blb-highlight);
    color: var(--blb-green-deep);
    font-family: var(--blb-font-sans);
    font-size: var(--hero-search-size, 1.4rem);
    font-weight: 700;
    transition: filter 0.2s ease;
}
.cat-search-btn:hover { filter: brightness(1.1); }

/* ── "Why Shop Local?" panel ── */
.cat-why {
    background-color: rgba(0, 0, 0, 0.35);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 1.25rem;
    padding: 1.5rem;
    box-sizing: border-box;
}
/* "Why Shop" in heavy sans, "Local?" handwritten in the mint with a
   swash under it. The heart badge that used to sit to the left is gone -
   the headline is centred over the four points instead. */
.cat-why-title {
    display: block;
    text-align: center;
    margin: 0 0 1.1rem;
    font-family: var(--blb-font-sans);
    font-size: var(--why-title-size, 1.7rem);
    font-weight: 800;
    letter-spacing: -0.01em;
    color: var(--blb-text-soft);
}
.cat-why-script {
    position: relative;
    padding: 0 0.12em;
    font-family: var(--blb-font-script);
    font-weight: 400;
    color: var(--blb-highlight);
}
/* The underline is drawn rather than `text-decoration` so it clears the
   script's descenders and keeps its own weight. */
.cat-why-script::after {
    content: "";
    position: absolute;
    left: 0.08em;
    right: 0.08em;
    bottom: -0.1em;
    height: 0.08em;
    border-radius: 0.08em;
    background-color: var(--blb-highlight);
}
.cat-why-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
}
.cat-why-list li {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
}
.cat-why-text {
    font-family: var(--blb-font-sans);
    font-size: var(--why-text-size, 1.15rem);
    line-height: 1.45;
    color: var(--blb-text-faint);
}
.cat-why-text strong {
    display: block;
    color: var(--blb-text-soft);
    font-family: var(--blb-font-body);
    margin-bottom: 0.15rem;
}

/* Circular icon badges. Each one tints from --badge-tint so a single
   rule covers all four. */
.cat-why-badge {
    --badge-tint: var(--blb-highlight);
    flex-shrink: 0;
    width: var(--why-badge, 3.4rem);
    height: var(--why-badge, 3.4rem);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--badge-tint);
    background-color: rgba(255, 255, 255, 0.06);
    background-color: color-mix(in srgb, var(--badge-tint) 18%, transparent);
    border: 0.125rem solid var(--badge-tint);
    /* The soft halo each badge has in the mockup. */
    box-shadow: 0 0 0.9rem color-mix(in srgb, var(--badge-tint) 42%, transparent);
}
.cat-why-badge svg { width: 52%; height: 52%; }

/* One tint per point. Set here rather than in theme.js because they are
   decorative accents belonging to this panel, not site-wide colours -
   the same reasoning as --cat-accent on the service cards. */
.cat-why-badge-community { --badge-tint: #4ADE80; }
.cat-why-badge-star      { --badge-tint: #F5C518; }
.cat-why-badge-heart     { --badge-tint: #FF4D6D; }
.cat-why-badge-shop      { --badge-tint: #3B9EFF; }

/* Shown by the hero filter when nothing matches. */
.cat-empty {
    text-align: center;
    color: var(--blb-text-faint);
    font-family: var(--blb-font-sans);
    font-size: var(--cat-desc-size, 1.3rem);
    font-style: italic;
    padding: 2rem 0;
}

/* ════════════════════════════════════════════════════════════════════
   CATEGORIES PAGE  —  service cards
   ════════════════════════════════════════════════════════════════════
   One card per main service: accent stripe down the left, icon badge,
   title + one-line description, a "View All" pill, then a grid of
   category tiles. Markup is generated by categories_only.js.

   The accent colour is set per card as --cat-accent, read from the
   "Accent" field in category_mapping.json, so the stripe, the badge and
   every tile hover state tint from ONE value. Changing a service's
   colour is a single edit in the data file, not in this stylesheet.

   Sizes come from --cat-* variables set per breakpoint further up, for
   the usual reason: the root font-size is ~10.7px on desktop and
   ~9.1px on a phone, so a single rem value cannot serve both.
   ════════════════════════════════════════════════════════════════════ */
/* The <article> wrapping the cards is a flex ITEM of .page_content_category,
   so with flex-basis auto it shrank to its content - 576px inside a 1250px
   parent, which squeezed the tile grid to three columns instead of eight.
   Both it and the container need to claim the full width. */
.category-wrapper .page_content_category > article {
    width: 100%;
}

.category-dropdowns {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    width: 100%;
    max-width: 105rem;
    margin: 0 auto;
    padding: 0 2rem 3rem;
    box-sizing: border-box;
}

.cat-card {
    --cat-accent: var(--blb-accent);          /* overridden inline per card */
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-left: 0.375rem solid var(--cat-accent);
    border-radius: 1rem;
    padding: 1.5rem;
    text-align: left;
    box-sizing: border-box;
}

.cat-card-head {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-bottom: 1.25rem;
    flex-wrap: wrap;
}

.cat-badge {
    flex-shrink: 0;
    width: var(--cat-badge, 4.5rem);
    height: var(--cat-badge, 4.5rem);
    border-radius: 0.9rem;
    /* Plain fallback first: color-mix is well supported now, but an
       engine without it would otherwise leave the badge transparent. */
    background-color: var(--blb-surface-dark);
    background-color: color-mix(in srgb, var(--cat-accent) 18%, transparent);
    color: var(--cat-accent);
    display: flex;
    align-items: center;
    justify-content: center;
}
.cat-badge-img {
    width: 55%;
    height: 55%;
    object-fit: contain;
}

.cat-head-text {
    flex: 1 1 12rem;
    min-width: 0;
}
.cat-card-title {
    margin: 0;
    font-size: var(--cat-title-size, 2.6rem);
    color: var(--blb-text-soft);
    font-family: var(--blb-font-body);
}
.cat-card-desc {
    margin: 0.2rem 0 0;
    font-size: var(--cat-desc-size, 1.3rem);
    color: var(--blb-text-faint);
    font-family: var(--blb-font-sans);
}

.cat-viewall {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.5rem 1.2rem;
    border-radius: 2rem;
    border: 0.0625rem solid var(--cat-accent);
    color: var(--cat-accent);
    background-color: transparent;
    font-family: var(--blb-font-sans);
    font-size: var(--cat-desc-size, 1.3rem);
    text-decoration: none;
    white-space: nowrap;
    transition: background-color 0.2s ease, color 0.2s ease;
}
.cat-viewall:hover {
    background-color: var(--cat-accent);
    color: var(--blb-card);
}

/* auto-fill, not auto-fit: a service with three categories keeps
   tile-sized tiles instead of stretching them across the whole row. */
.cat-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(var(--cat-tile-min, 8.5rem), 1fr));
    gap: 0.75rem;
}

/* Desktop never builds .cat-page wrappers - categories_only.js reads
   the page size from --cat-page-cols / --cat-page-rows, which are only
   declared below desktop, and leaves the tiles flat in .cat-grid.

   `display: contents` is the safety net for the in-between frame: on a
   window dragged from phone width up to desktop, the wrappers still
   exist until the ResizeObserver re-flattens. Without this they would
   briefly become grid items themselves and stack the tiles into one
   column. With it, the wrapper generates no box and its tiles are
   direct grid items - the pre-pagination layout exactly.

   The dots belong to the phone layout only. */
.cat-page { display: contents; }
.cat-dots { display: none; }

.cat-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    min-height: var(--cat-tile-h, 6.5rem);
    padding: 0.75rem 0.5rem;
    background-color: var(--blb-surface-dark);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.8rem;
    color: var(--blb-text);
    cursor: pointer;
    font-family: var(--blb-font-sans);
    transition: border-color 0.2s ease, color 0.2s ease, background-color 0.2s ease;
}
.cat-tile:hover {
    border-color: var(--cat-accent);
    color: var(--cat-accent);
    background-color: var(--blb-card-border);
}
/* Icons are optional and removed by the script when absent, so the tile
   has to look deliberate with only a label in it. Centring both axes
   means it does. */
.cat-tile-img {
    width: var(--cat-tile-icon, 2.1rem);
    height: var(--cat-tile-icon, 2.1rem);
    object-fit: contain;
}
.cat-tile-label {
    font-size: var(--cat-tile-size, 0.95rem);
    text-align: center;
    line-height: 1.25;
    /* pre-line honours the newlines categories_only.js puts between words
       (one word per line) while still collapsing ordinary spaces and
       still wrapping a line that is too long on its own. */
    white-space: pre-line;
    /* "Telecommunications" is the longest single word in the data at 18
       characters and is wider than a tile at the smaller sizes. Hyphenate
       it in preference to breaking mid-word; anywhere is the last resort
       so it can never spill past the tile edge. */
    hyphens: auto;
    overflow-wrap: anywhere;
}

/* Category Page - Section 4 */
/* Footer */
.category-wrapper .page_content_category:nth-child(3) {
    width: 100%;
    height: 10%;
    flex-shrink: 0;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    font-size: 1.5rem;
}

.page_content_category {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* ────────────────────────────────────────────────────────────────
   1B. ABOUT PAGE
   ───────────────────────────────────────────────────────────── */
.section_about {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* About Page - Section 1 */
/* Navigation Menu Bar */
.page_content_about:nth-child(1) {
    height: 10%;
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    flex-shrink: 0;
    background-color: var(--blb-surface-3);
}

/* About Page - Section 2 */
/* Header */
.about-wrapper {
    height: 90%;
    width: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: overlay; /* nice if supported */
    overflow-y: auto;    /* fallback */
    padding-right: 1rem;
    box-sizing: content-box;
}
.about-wrapper .page_content_about:nth-child(1) {
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    padding: 10vh 0;
    background-color: var(--blb-green-deep);
}
.page_content_about {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* ════════════════════════════════════════════════════════════════════
   ABOUT PAGE
   ════════════════════════════════════════════════════════════════════
   Hero -> value cards -> "Rooted in Belvidere" -> footer.

   The old body was a centred "Welcome to BLB" column styled by
   `.section_about h1 / h2 / h3`. Those were ELEMENT selectors, so they
   outranked any single class and would have pinned this hero's h1 to
   5rem centred. They were deleted with the markup they styled - along
   with .about-wrapper-header, .about_p*, .contact_p* and the old
   :nth-child footer rule. Do not reintroduce bare element selectors
   under .section_about.

   Sizes come from --ab-* variables set per breakpoint further down;
   the root font-size is ~10.7px on desktop and ~9.1px on a phone, so
   one rem value cannot serve both.

   NB: keep property names off the start of a line in these comments -
   the structure check in HANDOFF.md reads that as a declaration
   swallowed by a comment and reports a false positive.
   ════════════════════════════════════════════════════════════════════ */

/* Same reason as the calendar page: .ab-value-card is display:flex, so
   the UA stylesheet's display:none for [hidden] would lose. */
.section_about [hidden] { display: none !important; }

/* border-box scoped to this page. The site has no global box-sizing
   (see PROJECT_OVERVIEW §12); every rule below assumes it. */
.ab-wrapper,
.ab-wrapper * { box-sizing: border-box; }

.ab-wrapper {
    height: 90%;
    width: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    color: var(--blb-text);
}

/* Every band holds its own height instead of being squeezed.
   .ab-wrapper is a FIXED-height flex column, and flex items default to
   flex-shrink: 1 - so with more content than 90% of the screen, flex
   crushed the bands rather than letting the wrapper scroll. It squashed
   "Rooted in Belvidere" from 199px to 53px, its own padding, with the
   badge and text overflowing it. Same family of bug as the nav band
   losing 3px (see HANDOFF.md §8). */
.ab-wrapper > * { flex-shrink: 0; }

/* Every icon on this page is line art that inherits its container's
   colour, so one rule covers all of them. Fills are set per-icon where
   a solid shape is wanted. */
.ab-wrapper svg {
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ── Hero ─────────────────────────────────────────────────────────
   The page is tuned to fit one screen, which leaves 135-274px spare
   depending on the window. That slack is shared out by flex-grow rather
   than dumped on one band - see the weights on .ab-values / .ab-rooted
   below - so every section gets a little taller instead of one gap
   opening up. On phones there is nothing spare, so none of this
   applies.

   .ab-hero is a FLEX container so .ab-hero-inner fills the height it is
   given. As a plain block it stayed at content height, and because the
   hero's background is --blb-green-deep - the same colour as the page -
   the grown-but-empty remainder read as a ~105px dead band under the
   hero rather than as the hero being taller. */
.ab-hero {
    position: relative;
    width: 100%;
    flex: 3 0 auto;
    display: flex;
    background-color: var(--blb-green-deep);
}

/* Bottom fade, same idea as the calendar and categories heroes: the
   angled photo panel ends in a hard horizontal cut at the section
   boundary, so the last 5% ramps into the page colour and the section
   ends rather than stopping.

   Absolute positioning is doing double duty here - it places the strip,
   and it keeps the pseudo-element OUT of the flex layout. .ab-hero is a
   flex container, so a statically positioned ::after would become a
   second flex item beside .ab-hero-inner and steal width from the hero
   content. (Property names are kept off the start of a line on purpose;
   see the note in the ABOUT PAGE banner.) */
.ab-hero::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 5%;
    z-index: 2;
    pointer-events: none;
    background-image: linear-gradient(to bottom,
        transparent 0%, var(--blb-green-deep) 100%);
}

/* The matching fade on the copy panel's TOP edge - every breakpoint.

   It belongs on .ab-hero-photo, not on .ab-hero. Stacked, the panel sits
   in the MIDDLE of the hero - under the email line - and the seam you
   see is where its lighter --blb-green surface meets the hero's
   --blb-green-deep. The top of .ab-hero is green-deep meeting green-deep
   with nothing between them, so a fade there ramps one colour into
   itself and is invisible; that is why the first attempt did nothing.

   DEPTH IS PER BREAKPOINT, via --ab-topfade, because this one is a
   percentage of the PANEL while the bottom fade is a percentage of the
   HERO. The two only match when the panel is as tall as the hero:
       desktop   panel == hero        ->  5%, same as the bottom
       tablet    panel ~= 40% of hero -> 12%
       phone     panel ~= half        -> 10%
   A single figure would come out half-depth on a phone or double on
   desktop.

   No z-index on purpose. The pseudo-element and .ab-hero-copy-inner are
   both positioned at z-index auto, so they paint in tree order and the
   copy lands on top - the fade softens the panel's background without
   washing over the first line of text.

   .ab-hero-photo needs `position: relative` for this, and it is set
   alongside so the two can't drift apart. */
.ab-hero-photo { position: relative; }
.ab-hero-photo::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    height: var(--ab-topfade, 5%);
    pointer-events: none;
    background-image: linear-gradient(to top,
        transparent 0%, var(--blb-green-deep) 100%);
}

.ab-hero-inner {
    flex: 1 1 auto;
    min-width: 0;
    max-width: 120rem;
    margin: 0 auto;
    display: grid;
    grid-template-columns: var(--ab-hero-cols, 1fr 1.1fr);
    align-items: stretch;
}

.ab-hero-text {
    min-width: 0;
    padding: var(--ab-hero-pad, 1.7rem 2.2rem);
    align-self: center;
}

.ab-eyebrow {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    margin: 0 0 0.6rem;
    color: var(--blb-highlight);
    font-family: var(--blb-font-sans);
    font-size: var(--ab-eyebrow, 1rem);
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
.ab-eyebrow-rule {
    width: 3rem;
    height: 0.125rem;
    background-color: var(--blb-highlight);
    opacity: 0.8;
    flex-shrink: 0;
}

.ab-hero-title {
    margin: 0;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-title, 3.4rem);
    font-weight: 800;
    line-height: 1;
    letter-spacing: -0.01em;
    text-transform: uppercase;
    color: var(--blb-text-soft);
}

/* The handwritten line. Not uppercase, not the sans - it is the one
   piece of the page that is meant to look drawn rather than set.
   The family is --blb-font-script in theme.js. */
.ab-hero-script {
    display: block;
    position: relative;
    margin-top: 0.1em;
    font-family: var(--blb-font-script);
    font-size: var(--ab-script, 0.86em);
    font-weight: 400;
    letter-spacing: 0.01em;
    text-transform: none;
    color: var(--blb-highlight);
}
.ab-hero-heart {
    width: 0.42em;
    height: 0.42em;
    fill: var(--blb-highlight);
    stroke: none;
    vertical-align: baseline;
}

.ab-hero-underline {
    display: block;
    width: 60%;
    max-width: 26rem;
    height: 0.125rem;
    margin: 0.7rem 0 0;
    background-color: var(--blb-highlight);
    opacity: 0.55;
}

.ab-hero-sub {
    margin: 0.7rem 0 0;
    max-width: 34rem;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-sub, 1.15rem);
    line-height: 1.5;
    color: var(--blb-text);
}

.ab-hero-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    margin-top: 1rem;
}

.ab-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.7rem;
    padding: var(--ab-btn-pad, 0.65rem 1.2rem);
    border-radius: 0.6rem;
    border: 0.0625rem solid transparent;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-btn, 1rem);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.ab-btn svg { width: 1.7rem; height: 1.7rem; flex-shrink: 0; }
.ab-btn-chev { margin-left: 0.4rem; font-size: 1.3em; line-height: 0; }

/* Both hero buttons use .ab-btn-ghost now - "Browse Businesses" was the
   only .ab-btn-solid on the site, so that pair of rules went with it.
   To put the filled treatment back, add the class to the markup again
   and give it a mint background with deep-green text. (Property names
   are kept off the start of a line here on purpose - the structure
   check in HANDOFF.md reads those as a swallowed declaration.) */
.ab-btn-ghost {
    background-color: transparent;
    border-color: var(--blb-highlight);
    color: var(--blb-highlight);
}
.ab-btn-ghost:hover {
    background-color: color-mix(in srgb, var(--blb-highlight) 18%, transparent);
}

.ab-hero-email {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    margin: 0.75rem 0 0;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-sub, 1.15rem);
    color: var(--blb-text-faint);
}
.ab-hero-email svg {
    width: 1.7rem;
    height: 1.7rem;
    flex-shrink: 0;
    color: var(--blb-highlight);
}
.ab-hero-email a { color: inherit; text-decoration: none; }
.ab-hero-email a:hover { color: var(--blb-highlight); }

/* The angled photo panel. Two clipped layers rather than an image with
   a baked-in edge: the green one underneath is cut at a slightly
   shallower angle than the photo on top, so what shows between the two
   edges IS the green diagonal accent. Changing --ab-slant moves both
   together and the accent stays parallel. */
/* The panel is a flex container and the photo layer is IN FLOW, not
   absolutely positioned. It used to be `position: absolute; inset: 0`,
   which is fine for a decorative wash but contributes no height - now
   that it carries three paragraphs, an absolute layer would have spilled
   out of a panel sized only by --ab-media-min. In flow, the panel takes
   its height from the copy and --ab-media-min becomes a floor. */
.ab-hero-media {
    position: relative;
    display: flex;
    min-height: var(--ab-media-min, 18rem);
    clip-path: polygon(var(--ab-slant, 9%) 0, 100% 0, 100% 100%, 0 100%);
    background-color: var(--blb-highlight);
}
.ab-hero-photo {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: stretch;
    padding: var(--ab-copy-pad, 2rem);
    clip-path: polygon(
        calc(var(--ab-slant, 9%) + var(--ab-edge, 0.5rem)) 0,
        100% 0,
        100% 100%,
        var(--ab-edge, 0.5rem) 100%);
    background-color: var(--blb-green);
    /* Darker and flatter than the old wash: this is a scrim behind body
       copy now, and the previous 0.05 alpha at the right-hand end would
       leave the last paragraph unreadable once a photo is dropped in. */
    background-image:
        linear-gradient(100deg,
            rgba(12, 39, 33, 0.88) 0%,
            rgba(12, 39, 33, 0.74) 45%,
            rgba(12, 39, 33, 0.68) 100%),
        url("/res/images/about/hero.jpg");
    background-size: cover;
    background-position: center;
}
/* The copy block. It stretches to the panel so the float below spans the
   same height as the green edge - that is what makes the text's left
   margin run PARALLEL to it rather than at its own angle.

   flow-root, not flex: a float is ignored inside a flex container, and
   the float is the whole mechanism here. (align-content: center would
   have centred the text and kept the block, but it does not apply once
   the block contains a float - measured, not assumed.) */
.ab-hero-copy {
    flex: 1 1 auto;
    min-width: 0;
    display: flow-root;
}

/* The diagonal itself. An empty float with a triangular shape-outside:
   widest at the top, nothing at the bottom, so each successive line
   starts a little further left, following the green edge down.

   Its width is the panel's slant plus the gap the text should keep off
   the line, so the two stay parallel at any width. Phones set
   --ab-slant to 0, which leaves just the gap and a vertical edge. */
.ab-hero-copy::before {
    content: "";
    float: left;
    width: calc(var(--ab-slant, 6%) + var(--ab-copy-gutter, 1.5rem));
    height: 100%;
    shape-outside: polygon(0 0, 100% 0, 0 100%);
}

/* No float where there is no diagonal to follow. Portrait phones and
   tablets set --ab-slant to 0, so the panel's edge is vertical and
   slanted text would just be a stray indent.

   It also avoids a sizing trap: the float's `height: 100%` is a
   percentage of a parent whose height is not definite while its
   intrinsic size is being worked out, so the extra lines the shape
   forces are not counted and the copy can overflow the panel. That is
   exactly what happened at 412px - 335px of text in a 310px box. */
.xs-phone .ab-hero-copy::before,
.sm-phone .ab-hero-copy::before,
.lg-phone .ab-hero-copy::before,
.tablet-portrait .ab-hero-copy::before { display: none; }

/* Centres the copy in the panel. The float above cannot live in a flex
   or grid container and align-content does not apply to a block that
   contains one, so the paragraphs are shifted as a group instead.

   Relative positioning is only a paint-time offset - the lines still lay
   out against the float, so they keep wrapping to the diagonal. The
   shape is a straight edge, so shifting every line by the same amount
   moves the text's left margin by a constant and it stays parallel;
   at 1920 that constant is about 6px. */
.ab-hero-copy-inner {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

.ab-hero-copy p {
    margin: 0 0 var(--ab-copy-gap, 0.8rem);
    font-family: var(--blb-font-sans);
    font-size: var(--ab-copy, 1.45rem);
    line-height: 1.6;
    color: var(--blb-text);
    text-wrap: pretty;
}
.ab-hero-copy p:last-child { margin-bottom: 0; }
/* Lead paragraph - same size as the rest, just brighter. */
.ab-hero-copy p:first-child {
    font-size: var(--ab-copy, 1.45rem);
    color: var(--blb-text-soft);
}

/* ── Value cards ──────────────────────────────────────────────────── */
/* Takes a share of the spare height along with the hero and the band.
   The cards stretch to the row (grid items stretch by default), so the
   growth lands in the cards themselves rather than as a gap. */
.ab-values {
    flex: 1 0 auto;
    width: min(120rem, 100% - 5rem);
    margin: var(--ab-gap, 1.1rem) auto 0;
    display: grid;
    grid-template-columns: var(--ab-value-cols, repeat(4, 1fr));
    gap: var(--ab-gap, 1.1rem);
}

/* Icon on the LEFT, text column beside it - the icon spans all three
   rows so the title, copy and "Learn more" all share one left edge to
   the right of it. Stacking the icon on top instead cost ~80px of card
   height, which is most of why the page did not fit one screen. */
.ab-value-card {
    --ab-accent: var(--blb-highlight);      /* overridden inline per card */
    display: grid;
    grid-template-columns: auto 1fr;
    /* centre, not start: the cards stretch to the row height now, and
       start-aligned content left the extra space pooled at the bottom. */
    align-content: center;
    column-gap: 0.9rem;
    row-gap: 0.3rem;
    /* The card is an <article>, and a legacy global rule sets
       `article { text-align: center }`. That is an element selector, so
       nothing here overrode it and the title and copy came out centred
       while "Learn more" (shrink-wrapped by justify-self) stayed left -
       the two disagreeing was the tell. */
    text-align: left;
    padding: var(--ab-card-pad, 1.05rem);
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.9rem;
    transition: border-color 0.2s ease, transform 0.2s ease;
}
.ab-value-card:hover {
    border-color: var(--ab-accent);
    transform: translateY(-0.25rem);
}

.ab-value-icon {
    grid-column: 1;
    grid-row: 1 / span 3;
    align-self: start;
    width: var(--ab-value-icon, 3.1rem);
    height: var(--ab-value-icon, 3.1rem);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0.0938rem solid var(--ab-accent);
    border-radius: 50%;
    color: var(--ab-accent);
}
.ab-value-icon svg { width: 50%; height: 50%; }

.ab-value-title,
.ab-value-text,
.ab-value-link { grid-column: 2; }

.ab-value-title {
    margin: 0;
    align-self: center;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-value-title, 1.15rem);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--blb-text-soft);
}
.ab-value-text {
    margin: 0;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-value-text, 1rem);
    line-height: 1.45;
    color: var(--blb-text-faint);
}
.ab-value-link {
    margin-top: 0.5rem;
    justify-self: start;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-value-text, 1rem);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--ab-accent);
}
.ab-value-link svg { width: 1.4rem; height: 1.4rem; }
.ab-value-link:hover { filter: brightness(1.2); }

/* ── Rooted in Belvidere ──────────────────────────────────────────── */
/* badge | copy | divider | thank-you | bridge, with the copy and the
   thank-you on equal 1fr tracks so the divider sits dead centre.

   The two OUTER tracks have to match for that to work: the divider is
   only mid-band when badge + copy equals thank-you + bridge, so equal
   1fr middles alone would still leave it off-centre by half the
   difference between the badge and the bridge. Both outer tracks are
   therefore --ab-side, with the badge pinned left inside its track and
   the bridge stretched to fill its own.

   The bridge is a real grid column, not an absolutely-positioned
   overlay: as an overlay it sat on top of the thank-you text (it began
   at x=1487 while that block ran to x=1822). In the flow it lands after
   it, at the right edge, which is where the mockup puts it. */
.ab-rooted {
    flex: 1 0 auto;
    position: relative;
    overflow: hidden;
    width: min(120rem, 100% - 5rem);
    margin: var(--ab-gap, 1.1rem) auto 0;
    padding: var(--ab-card-pad, 1.05rem);
    display: grid;
    grid-template-columns: var(--ab-rooted-cols,
        var(--ab-side, 10rem) minmax(0, 1fr) auto minmax(0, 1fr) var(--ab-side, 10rem));
    align-items: center;
    gap: var(--ab-card-pad, 1.05rem);
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.9rem;
}

/* Pinned to the left of its track - the track is sized for symmetry
   with the bridge, not for the badge, so the slack sits to its right. */
.ab-rooted-badge {
    justify-self: start;
    width: var(--ab-badge, 6.8rem);
    height: var(--ab-badge, 6.8rem);
    flex-shrink: 0;
    color: var(--blb-highlight);
}
.ab-rooted-badge svg { width: 100%; height: 100%; }
.ab-badge-text {
    fill: var(--blb-highlight);
    stroke: none;
    font-family: var(--blb-font-sans);
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.14em;
    opacity: 0.85;
}
.ab-badge-state {
    fill: color-mix(in srgb, var(--blb-highlight) 18%, transparent);
    stroke: var(--blb-highlight);
    stroke-width: 2.4;
}
.ab-badge-pin {
    fill: var(--blb-highlight);
    stroke: none;
}

.ab-rooted-text { min-width: 0; }
.ab-rooted-title {
    margin: 0 0 0.5rem;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-rooted-title, 1.8rem);
    font-weight: 800;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--blb-highlight);
}
.ab-rooted-text p {
    margin: 0;
    max-width: 38rem;
    font-family: var(--blb-font-sans);
    font-size: var(--ab-value-text, 1rem);
    line-height: 1.5;
    color: var(--blb-text-faint);
}

/* --blb-card-border (#2A4038) all but vanishes against the card; the
   mockup's rule is a visible hairline. */
.ab-rooted-divider {
    width: 0.0625rem;
    height: var(--ab-badge, 6.8rem);
    background-color: color-mix(in srgb, var(--blb-text-faint) 40%, transparent);
}

/* Centred in its track rather than hugging the divider. The block is
   already its own group, so it needs no extra wrapper element - just
   somewhere to sit. The track is a 1fr column matching the copy's, and
   justify-content puts the wording in the middle of it.

   The .ab-thanks-icon rules that used to follow were deleted with the
   storefront disc. Hiding it instead (blanking its border, radius and
   colour) would have left a 4.4rem box still taking part in this flex
   line, which is why it then needed a 10rem gap to shove the text
   clear - about 14rem of invisible spacer, in fixed rem units that do
   not track the breakpoints. */
.ab-rooted-thanks {
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 1;
}

/* Puts the wording on the band's 3/4 line.

   Centred in its own track it sat at ~70%, because the track stops
   short of the band's right edge - the bridge has a column of its own
   after it. The 3/4 point is the centre of the region running from the
   divider to that right edge, which is this track plus the gap and the
   bridge track beyond it.

   Padding a centred flex line shifts its contents by half the padding,
   so padding-left of (gap + bridge track) moves the centre by exactly
   half of that - landing it on 75% at any width, with no fixed offset
   to go stale. Desktop only: the other breakpoints stack the band into
   one column, where this would just push the wording off centre. */
.l-desktop .ab-rooted-thanks {
    padding-left: calc(var(--ab-side, 10rem) + var(--ab-card-pad, 1.05rem));
}

.ab-thanks-copy {
    margin: 0;
    font-family: var(--blb-font-sans);
    line-height: 1.15;
}
/* Green script over cream caps, matching the mockup. These two were the
   wrong way round in the first build. */
.ab-thanks-script {
    display: block;
    font-family: var(--blb-font-script);
    font-size: var(--ab-thanks-script, 2.1rem);
    color: var(--blb-highlight);
}
.ab-thanks-line {
    display: block;
    max-width: 11em;
    font-size: var(--ab-value-text, 1rem);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--blb-text-soft);
}
.ab-thanks-heart {
    width: 1.4rem;
    height: 1.4rem;
    margin-top: 0.25rem;
    fill: var(--blb-highlight);
    stroke: none;
}

/* Decorative bridge - fills its track, which is the same width as the
   badge's so the divider between them lands mid-band. */
.ab-rooted-bridge {
    justify-self: end;
    width: 100%;
    height: auto;
    align-self: end;
    opacity: 0.16;
    color: var(--blb-text-faint);
    stroke-width: 1.2;
    pointer-events: none;
}
/* Nothing to sit beside once the band stacks, and as a grid item it
   would claim a row of its own. */
.xs-phone .ab-rooted-bridge,
.sm-phone .ab-rooted-bridge,
.lg-phone .ab-rooted-bridge,
.xs-phone-land .ab-rooted-bridge,
.sm-phone-land .ab-rooted-bridge,
.tablet-portrait .ab-rooted-bridge { display: none; }

/* ── Stacked "Rooted in Belvidere" ────────────────────────────────
   Once the band is a single column the parts read top-to-bottom, so
   everything centres on the column axis and the rule lies ACROSS it.

   Left as-is the divider stayed a 1px-wide, 101px-tall hairline - a
   vertical rule with nothing either side of it, standing on its edge in
   the middle of a stack and eating ~100px of height for a line nobody
   could read as a separator. */
.xs-phone .ab-rooted,
.sm-phone .ab-rooted,
.lg-phone .ab-rooted,
.tablet-portrait .ab-rooted {
    justify-items: center;
    text-align: center;
}
.xs-phone .ab-rooted-badge,
.sm-phone .ab-rooted-badge,
.lg-phone .ab-rooted-badge,
.tablet-portrait .ab-rooted-badge { justify-self: center; }

.xs-phone .ab-rooted-divider,
.sm-phone .ab-rooted-divider,
.lg-phone .ab-rooted-divider,
.tablet-portrait .ab-rooted-divider {
    width: 100%;
    height: 0.0625rem;
}

/* The copy is centred here, so its desktop max-width would just pull it
   off the column's middle. */
.xs-phone .ab-rooted-text p,
.sm-phone .ab-rooted-text p,
.lg-phone .ab-rooted-text p,
.tablet-portrait .ab-rooted-text p { max-width: none; }

/* ── Footer ───────────────────────────────────────────────────────
   The site-standard footer, identical to the home page's: centred
   "(c) year", 1.5rem, cream. Kept as its own class only so the flex
   column can size it; the numbers must stay in step with
   .page_content_home:nth-child(4). */
.ab-footer {
    flex-shrink: 0;
    width: 100%;
    margin-top: var(--ab-gap, 1.1rem);
    padding: 1rem 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
    color: var(--blb-text);
}
.ab-footer p { margin: 0; }

/* ────────────────────────────────────────────────────────────────
   1B. UNDER CONSTRUCTION PAGE
   ───────────────────────────────────────────────────────────── */
.section_underconstruction {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* Under Construction Page - Section 1 */
/* Navigation Menu Bar */
.page_content_underconstruction:nth-child(1) {
    height: 10%;
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    background-color: var(--blb-surface-3);
}

/* Under Construction Page - Section 2 */
/* Header */
.page_content_underconstruction:nth-child(2) {
    height: 30%;
    width: 100%;
    align-content: center;
    justify-content: center;
    align-items: center;
}
.section_underconstruction h1 {
    font-size: 5rem;
}
.section_underconstruction h2 {
    font-size: 3.75rem;
}
.section_underconstruction h3 {
    font-size: 2.5rem;
}

/* Under Construction Page - Section 3 */
/* Content Description */
.page_content_underconstruction:nth-child(3) {
    flex: 1 1 auto;
    min-height: 0;   /* was height:50%; the landscape
                        header padding pushed the page past 100% */
    width: 100%;
    align-content: center;
    justify-content: center;
    align-items: center;
}

.underconstruction-wrapper-header {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
}
.underconstruction-wrapper-paragraphs {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    padding: 0 10vw;
    width: 100%;
    height: 53vh;
    height: 53dvh;
    box-sizing: border-box;
    /* 53vh can exceed the room available in landscape, so cap it
       to the space the flex parent actually has and let it scroll
       rather than be clipped away by the section overflow:hidden. */
    max-height: 100%;
    overflow-y: auto;
}


/* Description Section */

.underconstruction_p {
    font-family: var(--blb-font-serif);
    font-size: 1.5rem;
    padding: 0 5%; /* instead of 12.5rem / 200px */
    text-align: center;
}

.underconstruction_p1 {
    font-size: 1.625rem;
    text-align: center;
    padding: 0.5rem 3.5vw;
}
.underconstruction_p2 {
    font-size: 1.75rem;
    text-align: center;
    padding: 0.5rem 3vw;
}
.underconstruction_p3 {
    font-size: 2rem;
    text-align: center;
    padding: 0.5rem 2.5vw;
}

/* Call to Action Boxes */
.contact_underconstruction_p {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 0.5rem;
}

.contact_underconstruction_p_button {
    margin-top: 2rem; /* 50px */
    padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
    font-size: 1.25rem;
    color: var(--blb-text);
    background-color: var(--blb-surface);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1rem;
    cursor: pointer;
    transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
.contact_underconstruction_p_button:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
}
.contact_underconstruction_p1 {
    font-size: 1rem;
}
.contact_underconstruction_p2 {
    font-size: 1.25rem;
}

/* Under Construction Page - Section 4 */
/* Footer */
.page_content_underconstruction:nth-child(4) {
    height: 10%;
    width: 100%;
    align-content: center;
    justify-content: center;
    align-items: center;
    font-size: 1.5rem;
}

.page_content_underconstruction {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* ────────────────────────────────────────────────────────────────
   1B. MAIN SERVICES PAGE
    ───────────────────────────────────────────────────────────── */
.section_main_services {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* Main Services Page - Section 1 */
/* Navigation Menu Bar */
.page_content_main_services:nth-child(1) {
    height: 10%;
    width: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    flex-shrink: 0;
    background-color: var(--blb-surface-3);
}

/* Main Services Page - Section 2 */
/* Header */
.main-services-wrapper {
    height: 90%;
    width: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: overlay; /* nice if supported */
    overflow-y: auto;    /* fallback */
    padding-right: 1rem;
    box-sizing: content-box;
    background-color: var(--blb-green-deep);
    padding: 2rem 0;
}

.main-services-wrapper .page_content_main_services:nth-child(1) {
    width: 100%;
    padding: 5vh 0;
    
    background-color: var(--blb-green-deep);
}
.main-services-wrapper .page_content_main_services:nth-child(1) h1 {
    font-size: 4.5rem;
    text-align: center;
    word-wrap: break-word;
}

/* Main Services Page - Section 3 */
/* Categories Groups */
.main-services-wrapper .page_content_main_services:nth-child(2) {
    width: 100%;
}
/* List Layout */
.vertical-layout {
    display: flex;
    flex-direction: column;
    padding: 0 5vw;
}

.horizontal-layout {
    background-color: var(--blb-surface);
    color: var(--blb-white);
    display: flex;
    align-items: stretch;
    border: 0.0625rem solid var(--blb-green-border);
    border-radius: 3.125rem; /* 50px */
    padding: 0;
    margin: 4% 0 0 0;
    flex-wrap: wrap;      /* ⇦ NEW */
    opacity: 100%;
    
}
.horizontal-layout:hover {
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
}


/* ───────────  business logo  ─────────── */
.card-part-1 {
    flex: 2 1 8rem;
    border-top-left-radius: 3.125rem;
    border-bottom-left-radius: 3.125rem;
    border-right: 0;
    border-bottom: 0;
    overflow: hidden;
    min-width: 16rem; /* 256px */
    max-width: 16rem;
    min-height: 16rem;
    max-height: 16rem;
}

/* ───────────  Description  ──────────── */
.card-part-2 {
    flex: 3 1 33rem;
    /*background-color: var(--blb-green);*/
    background-color: var(--blb-green);
    border-left: 1px solid var(--blb-green-deep);
    flex-direction: column;
    padding: 0.5rem 0.5rem;
}

.card-part-2 .p1 {
    color: var(--blb-white);
    font-weight: bold;
    font-size: 1.4rem;
    text-align: left;
    margin: 1rem 0.5rem;
}
.card-part-2 .p2 {
    color: var(--blb-text);
    font-weight: bold;
    font-size: 1rem;
    text-align: left;
    margin: 1rem 0.5rem;
}
.card-part-2 .p3 {
    color: var(--blb-white);
    font-family: var(--blb-font-sans);
    font-size: 1.2rem;
    text-align: left;
    margin: 1rem 0.5rem;
}

.category-buttons-inline-ms {
    display: flex;
    flex-wrap: wrap;
    width: 100%;
}
.category-buttons-inline-ms .category-button-ms {
    background-color: var(--blb-surface);
    color: var(--blb-text);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1.25rem;
    padding: 0.375rem 0.875rem; /* 6px, 14px */
    font-size: 1rem;
    font-family: var(--blb-font-sans);
    cursor: pointer;
    transition: all 0.3s ease;
    margin: 0 0 0.5rem 0.5rem;
}
.category-buttons-inline-ms .category-button-ms:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
}

/* ───────────  Location  ─────────── */
.card-part-3 {
    flex: 1 1 18rem;
    /*background-color: var(--blb-green);*/
    color: var(--blb-white);
    background-color: var(--blb-green);
    border-top-left-radius: 0;
    border-right: 1px solid var(--blb-green-deep);
    align-items: flex-end;
    justify-content: flex-end;
}
.card-part-3-1 {
    text-align: right;
    font-size: 1.4rem;
    font-family: var(--blb-font-sans);
    align-items: flex-end;
    justify-content: flex-end;
    margin: 5% 5%;
}
.card-part-3-2 {
    text-align: right;
    font-size: 1.4rem;
    font-family: var(--blb-font-sans);
    align-items: flex-end;
    justify-content: flex-end;
    margin: 5% 5%;
}
.card-part-3-3 {
    text-align: right;
    font-size: 1.4rem;
    align-items: flex-end;
    justify-content: flex-end;
    margin: 5% 5%;
}
.card-part-3-3 p a {
    color: var(--blb-highlight);
}
/* "IL 61008" stays on one line. Without this the locality broke as
   "Belvidere, IL" / "61008" in the narrow landscape contact column,
   stranding the zip on a line of its own; the break now lands at the
   comma instead: "Belvidere," / "IL 61008". */
.locality-region {
    white-space: nowrap;
}

/* "<field> Unavailable" placeholder, shared by the business CARDS
   (.card-part-3o, set in main_services.js) and the business PAGE contact
   block (.bp-unavailable, set in business/[slug].astro). One rule for
   both so the two surfaces cannot drift apart in colour, style or size.

   The card version used to be color + background-color: <the card's own
   surface>, i.e. text painted invisible - which left an unexplained gap
   on cards missing data, and hid the city whenever the address was
   missing. It now reads as what it is: present, legible, clearly
   secondary. */
.card-part-3o,
.bp-unavailable {
    color: var(--blb-unavailable);
    font-style: italic;

    /* Georgia (the site body serif), stated explicitly rather than
       inherited. The three card rows disagree: .card-part-3-1 and
       .card-part-3-2 force --blb-font-sans, while .card-part-3-3 sets no
       family and inherits the body serif - so "Website Unavailable" came
       out Georgia italic and "Phone Number Unavailable" sans-serif italic,
       at the same size and colour. Georgia is the look being matched, so
       every placeholder now declares it and none inherit their row. */
    font-family: var(--blb-font-body);

    /* One size for EVERY placeholder, rather than a ratio of whatever row
       it sits in. The three contact rows are deliberately different sizes
       (phone largest, address smallest), so an em-based value made the
       three placeholders three different sizes - 14.1 / 11.5 / 12.8px on a
       412px phone - even though they are all the same kind of text.

       --unavailable-size is set once per breakpoint below, anchored to
       what the phone row used to produce, so "Website Unavailable" and
       "Address Unavailable" now match "Phone Number Unavailable" exactly.
       The 11.5px floor keeps the narrowest phones above the site's
       legibility minimum.

       min(1em, ...) caps it at the size of the text it stands in for. In
       font-size, 1em is the PARENT's size, so this can only ever shrink
       the placeholder, never grow it. It matters on the business page at
       desktop widths, where the contact rows are 10.1px and the 11.5px
       floor made the placeholder BIGGER than the address it replaced -
       a 17.25px line box against a 15.2px one, which pushed the row's
       icon and every row under it down by ~2px.

       Capping also removes the need for any line-height override: once
       the placeholder is no taller than its parent, the parent's own line
       box governs and an absent value occupies exactly the space a
       present one would. */
    font-size: min(1em, max(11.5px, var(--unavailable-size, 0.98rem)));
}

/* Per-breakpoint placeholder size. Set on <html> (these classes live
   there) so it inherits everywhere, which is also how the business page
   picks it up without repeating any of this. Values are 0.7x the phone
   row's font-size at that breakpoint - the size this text already had
   there, now applied uniformly instead of only to the phone row. */
.xs-phone        { --unavailable-size: 1.47rem; --search-mode-size: 1.5rem; --cat-title-size: 3rem; --cat-desc-size: 1.7rem; --cat-tile-size: 1.3rem; --cat-tile-min: 8.5rem; --cat-tile-h: 8.5rem; --cat-badge: 6rem; --cat-tile-icon: 2.8rem; --hero-cols: 1fr; --hero-title-size: 4.6rem; --hero-sub-size: 1.9rem; --hero-eyebrow-size: 1.5rem; --hero-search-size: 1.9rem; --why-title-size: 2.4rem; --why-text-size: 1.7rem; --why-badge: 3.4rem;  --cat-page-cols: 3; --cat-page-rows: 2; --cat-dot: 1.1rem; --why-h-gap: 0.45rem; --why-h-text: 1rem; --why-h-title: 1.15rem; --why-badge: 3.4rem; }
.sm-phone        { --unavailable-size: 1.54rem; --search-mode-size: 1.7rem; --cat-title-size: 3rem; --cat-desc-size: 1.7rem; --cat-tile-size: 1.3rem; --cat-tile-min: 8.5rem; --cat-tile-h: 8.5rem; --cat-badge: 6rem; --cat-tile-icon: 2.8rem; --hero-cols: 1fr; --hero-title-size: 4.6rem; --hero-sub-size: 1.9rem; --hero-eyebrow-size: 1.5rem; --hero-search-size: 1.9rem; --why-title-size: 2.4rem; --why-text-size: 1.7rem; --why-badge: 3.6rem;  --cat-page-cols: 3; --cat-page-rows: 2; --cat-dot: 1.1rem; --why-h-gap: 0.5rem; --why-h-text: 1.05rem; --why-h-title: 1.25rem; --why-badge: 3.6rem; }
.lg-phone        { --unavailable-size: 1.75rem; --search-mode-size: 1.7rem; --cat-title-size: 3rem; --cat-desc-size: 1.7rem; --cat-tile-size: 1.3rem; --cat-tile-min: 8.5rem; --cat-tile-h: 8.5rem; --cat-badge: 6rem; --cat-tile-icon: 2.8rem; --hero-cols: 1fr; --hero-title-size: 4.6rem; --hero-sub-size: 1.9rem; --hero-eyebrow-size: 1.5rem; --hero-search-size: 1.9rem; --why-title-size: 2.4rem; --why-text-size: 1.7rem; --why-badge: 3.8rem;  --cat-page-cols: 3; --cat-page-rows: 2; --cat-dot: 1.1rem; --why-h-gap: 0.55rem; --why-h-text: 1.1rem; --why-h-title: 1.3rem; --why-badge: 3.8rem; }
.xs-phone-land   { --unavailable-size: 1.75rem; --search-mode-size: 1.7rem; --cat-title-size: 3rem; --cat-desc-size: 1.7rem; --cat-tile-size: 1.3rem; --cat-tile-min: 8.5rem; --cat-tile-h: 8.5rem; --cat-badge: 6rem; --cat-tile-icon: 2.8rem; --hero-cols: 1fr; --hero-title-size: 4.6rem; --hero-sub-size: 1.9rem; --hero-eyebrow-size: 1.5rem; --hero-search-size: 1.9rem; --why-title-size: 2.4rem; --why-text-size: 1.7rem; --why-badge: 3.6rem;  --cat-page-cols: 5; --cat-page-rows: 2; --cat-dot: 1rem; --why-h-gap: 0.7rem; --why-h-text: 1.05rem; --why-h-title: 1.25rem; --why-badge: 3.6rem; }
.sm-phone-land   { --unavailable-size: 1.75rem; --search-mode-size: 1.7rem; --cat-title-size: 3rem; --cat-desc-size: 1.7rem; --cat-tile-size: 1.3rem; --cat-tile-min: 8.5rem; --cat-tile-h: 8.5rem; --cat-badge: 6rem; --cat-tile-icon: 2.8rem; --hero-cols: 1fr; --hero-title-size: 4.6rem; --hero-sub-size: 1.9rem; --hero-eyebrow-size: 1.5rem; --hero-search-size: 1.9rem; --why-title-size: 2.4rem; --why-text-size: 1.7rem; --why-badge: 3.6rem;  --cat-page-cols: 5; --cat-page-rows: 2; --cat-dot: 1rem; --why-h-gap: 0.7rem; --why-h-text: 1.05rem; --why-h-title: 1.25rem; --why-badge: 3.6rem; }
.tablet-portrait { --unavailable-size: 1.54rem; --search-mode-size: 1.7rem; --cat-title-size: 1.9rem; --cat-desc-size: 1.1rem; --cat-tile-size: 0.85rem; --cat-tile-min: 6.5rem; --cat-tile-h: 6rem; --cat-badge: 3.6rem; --cat-tile-icon: 1.8rem; --hero-cols: 1fr; --hero-title-size: 4rem; --hero-sub-size: 1.2rem; --hero-eyebrow-size: 0.95rem; --hero-search-size: 1.2rem; --why-title-size: 1.5rem; --why-text-size: 1rem; --why-badge: 2.4rem;  --cat-page-cols: 5; --cat-page-rows: 2; --cat-dot: 0.7rem; --why-h-gap: 0.6rem; --why-h-text: 0.8rem; --why-h-title: 0.95rem; --why-badge: 2.4rem; }

/* ════════════════════════════════════════════════════════════════════
   CATEGORIES PAGE  —  phone / tablet only
   ════════════════════════════════════════════════════════════════════
   Two layout swaps below desktop. Neither rule can reach a desktop
   viewport: every selector is prefixed with a breakpoint class that
   only exists under 1041px (or on a rotated phone).

   1. The tile grid becomes a swipeable, snapping carousel with dots.
   2. "Why Shop Local?" turns from a vertical list into a row.
   ════════════════════════════════════════════════════════════════════ */

/* ── 1. Tile carousel ──────────────────────────────────────────────
   .cat-grid stops being a grid and becomes the scroll track; each
   .cat-page is one snap-aligned screenful, itself a small grid. The
   page size is declared here as cols x rows and READ BY
   categories_only.js, so the two never disagree. */
.xs-phone .cat-grid,
.sm-phone .cat-grid,
.lg-phone .cat-grid,
.xs-phone-land .cat-grid,
.sm-phone-land .cat-grid,
.tablet-portrait .cat-grid {
    display: flex;
    grid-template-columns: none;
    gap: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    overscroll-behavior-x: contain;
    /* No scroll-behavior: smooth here. It applies to PROGRAMMATIC
       scrolls, so it would have quietly turned the dots' one-viewport
       jump into an animation - overriding what the dot handler asks
       for. Swiping is a user gesture and is unaffected either way. */
    /* The dots are the position indicator; a scrollbar under the tiles
       would just be a second, uglier one. */
    scrollbar-width: none;
    -ms-overflow-style: none;
}
.xs-phone .cat-grid::-webkit-scrollbar,
.sm-phone .cat-grid::-webkit-scrollbar,
.lg-phone .cat-grid::-webkit-scrollbar,
.xs-phone-land .cat-grid::-webkit-scrollbar,
.sm-phone-land .cat-grid::-webkit-scrollbar,
.tablet-portrait .cat-grid::-webkit-scrollbar { display: none; }

/* Rows are FIXED at the tile height, and there are always
   --cat-page-rows of them whether or not the page is full.

   Left to size themselves the rows were `auto`, and a .cat-page is a
   flex item stretched to the track height - so a page holding one row
   (Animal's last page, 3 tiles) had that row absorb the height of the
   two-row pages, and its tiles came out roughly double the size of
   every other card's. Pinning the rows makes every tile on the page
   identical, and align-content keeps the spare height at the bottom
   instead of feeding it back into the rows. */
.xs-phone .cat-page,
.sm-phone .cat-page,
.lg-phone .cat-page,
.xs-phone-land .cat-page,
.sm-phone-land .cat-page,
.tablet-portrait .cat-page {
    flex: 0 0 100%;
    display: grid;
    grid-template-columns: repeat(var(--cat-page-cols, 3), minmax(0, 1fr));
    grid-template-rows: repeat(var(--cat-page-rows, 2), var(--cat-tile-h, 6.5rem));
    align-content: start;
    gap: 0.75rem;
    scroll-snap-align: start;
    scroll-snap-stop: always;
}

.xs-phone .cat-dots,
.sm-phone .cat-dots,
.lg-phone .cat-dots,
.xs-phone-land .cat-dots,
.sm-phone-land .cat-dots,
.tablet-portrait .cat-dots {
    display: flex;
    justify-content: center;
    gap: 0.6rem;
    margin-top: 1rem;
}
.cat-dot {
    width: var(--cat-dot, 0.9rem);
    height: var(--cat-dot, 0.9rem);
    padding: 0;
    border: none;
    border-radius: 50%;
    cursor: pointer;
    background-color: var(--blb-card-border);
    transition: background-color 0.2s ease;
}
.cat-dot.active { background-color: var(--cat-accent, var(--blb-highlight)); }
/* Dots are small; give the tap target room without moving them apart,
   which would send taps to the neighbouring dot. */
.cat-dot::after {
    content: "";
    position: absolute;
    inset: -0.6rem;
}
.cat-dot { position: relative; }

/* ── 2. "Why Shop Local?" as a row ─────────────────────────────────
   Icon above centred text instead of beside left-aligned text, one
   equal column per point. */
.xs-phone .cat-why-list,
.sm-phone .cat-why-list,
.lg-phone .cat-why-list,
.xs-phone-land .cat-why-list,
.sm-phone-land .cat-why-list,
.tablet-portrait .cat-why-list {
    flex-direction: row;
    align-items: stretch;
    gap: var(--why-h-gap, 0.7rem);
}
.xs-phone .cat-why-list li,
.sm-phone .cat-why-list li,
.lg-phone .cat-why-list li,
.xs-phone-land .cat-why-list li,
.sm-phone-land .cat-why-list li,
.tablet-portrait .cat-why-list li {
    flex: 1 1 0;
    min-width: 0;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 0.5rem;
}
.xs-phone .cat-why-text,
.sm-phone .cat-why-text,
.lg-phone .cat-why-text,
.xs-phone-land .cat-why-text,
.sm-phone-land .cat-why-text,
.tablet-portrait .cat-why-text {
    font-size: var(--why-h-text, 1.15rem);
    line-height: 1.3;
}
.xs-phone .cat-why-text strong,
.sm-phone .cat-why-text strong,
.lg-phone .cat-why-text strong,
.xs-phone-land .cat-why-text strong,
.sm-phone-land .cat-why-text strong,
.tablet-portrait .cat-why-text strong {
    font-size: var(--why-h-title, 1.35rem);
    margin-bottom: 0.2rem;
}

/* Per-breakpoint sizes for the EVENT CALENDAR page.
   Its own block rather than six more entries on the lines above, which
   are already long enough to hide a typo. Same mechanism though: set on
   <html>, read by the .cal-* rules as var(--cal-name, desktop-default),
   so the desktop values live with the rules and only the deviations are
   listed here.

   Phones and portrait tablets go single column. Landscape phones keep
   the two columns - they are wide and short, so stacking would push the
   mini calendar an entire screen below the list. */
/* ── Search panel, per breakpoint ──────────────────────────────────
   --search-top is the gap between the top of the window and the panel.
   The panel is anchored to the TOP of the overlay rather than centred,
   and the default matches the overlay's bottom padding, so the box is
   inset by the same amount top and bottom.

   Phone roots are ~9.1px and the tablet root ~16.5px against the
   desktop's ~10.7px, which is why the tablet numbers look small and the
   phone numbers look large - they land at similar pixel sizes. */
.xs-phone, .sm-phone, .lg-phone {
    --search-max: 44rem;
    --search-pad: 1.7rem;
    --search-gap: 1.4rem;
    --search-radius: 2rem;
    /* Phones are the only width where the panel spans the screen, so the
       top gap is pulled down to the side gap and the window is inset by
       the same 1rem all the way round. */
    --search-top: 1rem;
    /* 2.4rem wrapped "What are you looking for?" onto a second line -
       the header row leaves ~275px beside the icon and the close disc,
       and the title needed ~306px. 2rem clears it, but only by 5px on a
       360px phone; 1.9rem leaves ~7% of margin, which the body font
       needs - it is the generic `sans-serif`, so the actual metrics are
       whatever the device happens to ship. */
    --search-title: 1.9rem;
    --search-sub: 1.35rem;
    --search-headicon: 3rem;
    --search-close: 3.6rem;
    --search-closefont: 2rem;
    --search-inputfont: 1.8rem;
    --search-inputpad: 1.15rem;
    --search-inputicon: 2rem;
    --search-mode-size: 1.15rem;
    --search-tabicon: 2rem;
    --search-rbadge: 3.4rem;
    --search-rtitle: 1.7rem;
    --search-row: 1.6rem;
    --search-rowicon: 3.2rem;
    --search-rowpad: 1rem;
}

.xs-phone-land, .sm-phone-land {
    --search-max: 52rem;
    --search-pad: 1.3rem;
    --search-gap: 1rem;
    --search-radius: 1.6rem;
    --search-title: 1.9rem;
    --search-sub: 1.2rem;
    --search-headicon: 2.4rem;
    --search-close: 3rem;
    --search-closefont: 1.8rem;
    --search-inputfont: 1.5rem;
    --search-inputpad: 0.9rem;
    --search-inputicon: 1.7rem;
    --search-mode-size: 1.05rem;
    --search-tabicon: 1.7rem;
    --search-rbadge: 2.8rem;
    --search-rtitle: 1.45rem;
    --search-row: 1.4rem;
    --search-rowicon: 2.7rem;
    --search-rowpad: 0.75rem;
}

.tablet-portrait {
    --search-max: 34rem;
    --search-pad: 1.1rem;
    --search-gap: 0.9rem;
    --search-radius: 1.2rem;
    --search-title: 1.5rem;
    --search-sub: 0.9rem;
    --search-headicon: 1.9rem;
    --search-close: 2.1rem;
    --search-closefont: 1.3rem;
    --search-inputfont: 1.1rem;
    --search-inputpad: 0.7rem;
    --search-inputicon: 1.2rem;
    --search-mode-size: 0.75rem;
    --search-tabicon: 1.2rem;
    --search-rbadge: 2rem;
    --search-rtitle: 1.05rem;
    --search-row: 1rem;
    --search-rowicon: 2rem;
    --search-rowpad: 0.6rem;
}

/* ── About page, per breakpoint ────────────────────────────────────
   Phones stack the hero (text over photo) and the value cards go one
   per row; the "Rooted" band and the footer stack too. The angled photo
   edge is flattened on phones - at 340px wide a 9% slant eats a corner
   of the picture for no visual gain. */
.xs-phone, .sm-phone, .lg-phone {
    --ab-hero-cols: 1fr;
    --ab-value-cols: 1fr;
    --ab-rooted-cols: 1fr;
    --ab-footer-cols: 1fr;
    --ab-hero-pad: 2.5rem 1.75rem;
    --ab-eyebrow: 1.5rem;
    --ab-title: 4.6rem;
    --ab-script: 0.8em;
    --ab-sub: 1.9rem;
    --ab-btn: 1.6rem;
    --ab-btn-pad: 1.3rem 1.7rem;
    --ab-value-title: 2rem;
    --ab-value-text: 1.7rem;
    --ab-value-icon: 5.6rem;
    --ab-rooted-title: 2.8rem;
    --ab-thanks-script: 3.2rem;
    --ab-badge: 11rem;
    --ab-bridge: 20rem;
    --ab-social: 4.6rem;
    --ab-card-pad: 1.8rem;
    --ab-gap: 1.8rem;
    --ab-media-min: 10rem;
    --ab-slant: 0%;
    --ab-edge: 0rem;
    --ab-copy: 1.5rem;
    --ab-copy-pad: 1.6rem;
    --ab-copy-gap: 0.9rem;
    --ab-topfade: 10%;
}

.xs-phone-land, .sm-phone-land {
    --ab-hero-cols: 1fr 1fr;
    --ab-value-cols: repeat(2, 1fr);
    --ab-footer-cols: 1fr;
    --ab-hero-pad: 2rem 1.75rem;
    --ab-eyebrow: 1.35rem;
    --ab-title: 3.6rem;
    --ab-sub: 1.6rem;
    --ab-btn: 1.4rem;
    --ab-btn-pad: 1.1rem 1.5rem;
    --ab-value-title: 1.7rem;
    --ab-value-text: 1.45rem;
    --ab-value-icon: 4.4rem;
    --ab-rooted-title: 2.3rem;
    --ab-thanks-script: 2.6rem;
    --ab-badge: 8rem;
    --ab-bridge: 16rem;
    --ab-social: 4rem;
    --ab-card-pad: 1.4rem;
    --ab-gap: 1.5rem;
    --ab-media-min: 18rem;
    --ab-copy: 1.3rem;
    --ab-copy-pad: 1.4rem;
    --ab-copy-gap: 0.7rem;
    --ab-topfade: 10%;
}

/* The tablet root is ~16.5px against the desktop's ~10.7px, so these
   numbers are SMALLER than the desktop defaults on purpose. */
.tablet-portrait {
    --ab-hero-cols: 1fr;
    --ab-value-cols: repeat(2, 1fr);
    /* Stacked, not `auto 1fr`. Two columns wrapped the four parts into a
       2x2, which put the divider in the left cell of the second row -
       a 107px stub of a rule next to the thank-you instead of a
       separator between the halves. There is not room for the full
       five-track band at this width either: the copy and thank-you
       tracks come out ~156px, against a thank-you block needing ~200. */
    --ab-rooted-cols: 1fr;
    --ab-footer-cols: 1fr;
    --ab-hero-pad: 2rem 1.5rem;
    --ab-eyebrow: 0.95rem;
    --ab-title: 3.4rem;
    --ab-sub: 1.2rem;
    --ab-btn: 1rem;
    --ab-btn-pad: 0.75rem 1.2rem;
    --ab-value-title: 1.15rem;
    --ab-value-text: 0.95rem;
    --ab-value-icon: 3rem;
    --ab-rooted-title: 1.7rem;
    --ab-thanks-script: 1.9rem;
    --ab-badge: 6.5rem;
    --ab-bridge: 13rem;
    --ab-social: 2.7rem;
    --ab-card-pad: 1.1rem;
    --ab-gap: 1.2rem;
    --ab-media-min: 12rem;
    --ab-slant: 0%;
    --ab-edge: 0rem;
    --ab-copy: 1rem;
    --ab-copy-pad: 1.3rem;
    --ab-copy-gap: 0.7rem;
    --ab-topfade: 12%;
}

.xs-phone,
.sm-phone,
.lg-phone {
    --cal-cols: 1fr;
    --cal-cat-cols: 1fr;
    /* Trimmed from 2.75/3: the hero plus the four-row toolbar was
       putting the first event 760px down a 844px phone screen. */
    --cal-hero-pad: 2.25rem 1.75rem 2.5rem;
    --cal-hero-title: 4.6rem;
    --cal-eyebrow-size: 1.5rem;
    --cal-hero-sub: 1.9rem;
    --cal-point-size: 1.6rem;
    --cal-point-icon: 3.2rem;
    --cal-point-gap: 1.3rem;
    --cal-tool-size: 1.7rem;
    --cal-card-pad: 1.4rem;
    --cal-card-title: 1.7rem;
    --cal-ev-title: 1.95rem;
    --cal-ev-meta: 1.5rem;
    --cal-ev-small: 1.35rem;
    --cal-ev-day: 2.6rem;
    --cal-ev-icon: 3.6rem;
    --cal-date-w: 4.5rem;
    --cal-mini-cell: 4.2rem;
    --cal-mini-size: 1.6rem;
    --cal-mini-dow: 1.3rem;
    /* Portrait phones stack the sidebar under the list, so the cap is
       what keeps the mini calendar reachable without thumbing past 37
       events. */
    --cal-list-max: 55dvh;
    /* ~45px, ~42px, ~36px, ~44px at the ~9.1px phone root. */
    --cal-round-size: 5rem;
    --cal-arrow-size: 4.6rem;
    --cal-chip-btn: 4rem;
    --cal-pill-h: 4.8rem;
    --cal-btn-pad: 1.25rem 1.6rem;
}

.xs-phone-land,
.sm-phone-land {
    --cal-cols: 1.5fr 1fr;
    --cal-cat-cols: 1fr;
    --cal-hero-pad: 2rem 1.75rem 2.25rem;
    --cal-hero-title: 3.6rem;
    --cal-eyebrow-size: 1.4rem;
    --cal-hero-sub: 1.7rem;
    --cal-point-size: 1.4rem;
    --cal-point-icon: 2.8rem;
    --cal-point-gap: 1.8rem;
    --cal-tool-size: 1.5rem;
    --cal-card-pad: 1.3rem;
    --cal-card-title: 1.5rem;
    --cal-ev-title: 1.7rem;
    --cal-ev-meta: 1.35rem;
    --cal-ev-small: 1.2rem;
    --cal-ev-day: 2.3rem;
    --cal-ev-icon: 3.2rem;
    --cal-date-w: 4rem;
    --cal-mini-cell: 3.6rem;
    --cal-mini-size: 1.4rem;
    --cal-mini-dow: 1.15rem;
    /* Short screens get a bigger share of the viewport. */
    --cal-list-max: 62dvh;
    --cal-round-size: 4.6rem;
    --cal-arrow-size: 4.2rem;
    --cal-chip-btn: 3.6rem;
    --cal-pill-h: 4.4rem;
    --cal-btn-pad: 1.1rem 1.5rem;
}

/* The tablet root is ~16.5px against the desktop's ~10.7px, so these
   numbers are SMALLER than the desktop defaults on purpose. */
.tablet-portrait {
    --cal-cols: 1fr;
    --cal-cat-cols: 1fr 1fr;
    --cal-hero-pad: 2.2rem 1.5rem 2.4rem;
    --cal-hero-title: 3.4rem;
    --cal-eyebrow-size: 0.95rem;
    --cal-hero-sub: 1.2rem;
    --cal-point-size: 1rem;
    --cal-point-icon: 1.9rem;
    --cal-point-gap: 1.6rem;
    --cal-tool-size: 1rem;
    --cal-card-pad: 1.1rem;
    --cal-card-title: 1.05rem;
    --cal-ev-title: 1.15rem;
    --cal-ev-meta: 0.9rem;
    --cal-ev-small: 0.8rem;
    --cal-ev-day: 1.4rem;
    --cal-ev-icon: 2.2rem;
    --cal-date-w: 2.8rem;
    /* Larger than the desktop cap on purpose: the tablet sidebar is
       full width and stacked (not sticky), so there is no height to
       save, and a small cell would leave the grid looking sparse in a
       608px-wide card. */
    --cal-mini-cell: 4.5rem;
    --cal-mini-size: 0.95rem;
    --cal-mini-dow: 0.8rem;
    --cal-list-max: 52dvh;
    /* The tablet root is ~16.5px, so these are ~45px on the screen. */
    --cal-round-size: 2.7rem;
    --cal-arrow-size: 2.7rem;
    --cal-chip-btn: 2.2rem;
    --cal-pill-h: 2.7rem;
    --cal-btn-pad: 0.75rem 1.1rem;
}

/* ───────────  Social Media  ─────────── */
.card-part-4 {
    display: flex;
    flex: 0 0  4rem;
    align-items: center;
    justify-content: flex-start;
    margin: 1% 0.5% 1% 0;
    flex-direction: column;
}
/* ───────────  Business Card Overlay (Base) ─────────── */
#businessModal.modal-overlay {
    display: none; /* hidden by default */
    position: fixed;
    z-index: 2000;
    /* inset beats left/top + 100vw/100vh: 100vw ignores a desktop
       scrollbar (stray horizontal scroll) and 100vh overshoots a mobile
       toolbar. `inset` is exactly the viewport, everywhere. */
    inset: 0;
    background-color: var(--blb-overlay-modal-2); /* slightly darker overlay */
    backdrop-filter: blur(2px);
    justify-content: center;
    align-items: center;
}

/* Modal Card Container */
#businessModal .modal-content {
    position: relative;
    background-color: var(--blb-surface-2);
    color: var(--blb-text);
    border-radius: 1.75rem; /* 50px */
    box-shadow: 0 0 1.5rem var(--blb-glow-soft);
    width: 90%;
    max-width: 90%;
    height: 90%;
    max-height: 90vh;
    max-height: 90dvh;

    padding: 0;
    margin: 0 1rem;
    
    box-sizing: border-box;
    text-align: left;
    overflow-y: auto;
    
    /* Scrollbar hidden but still scrollable */
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none; /* IE 10+ */
}

.modal-header-bar {
    position: sticky;
    top: 0;
    background: var(--blb-surface-dark);
    display: flex;
    justify-content: flex-end;
    z-index: 10;
}

.modal-header-bar .close-modal {
    background: none;
    border: none;
    color: var(--blb-text);
    font-size: 2rem;
    cursor: pointer;
    position: static; 
    padding: 0 1rem;
}

/* Modal Typography */
/* Optional: Divider Line */
#businessModal hr {
    border: none;
    border-top: 1px solid var(--blb-border-3);
    margin: 1.5rem 0;
}

/* ───────────  Business Card Layout Grid (Content) ─────────── */
.modal-business-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2rem;
    align-items: start;
    width: 100%;
    margin-bottom: 1rem;
}

 /* Business Info 1 */
.modal-business-info-1 {
    color: var(--blb-text);
    padding: 1rem 0 0 1rem;
}
.modal-business-header {
    color: var(--blb-white);
    font-size: 2rem;
    font-weight: bold;
}
.modal-business-services {
    font-size: 1.2rem;
    font-style: italic;
    margin-bottom: 0.5rem;
}
.modal-business-info-headings {
    font-family: var(--blb-font-sans);
    color: var(--blb-white);
    font-size: 1.2rem;
}
.modal-business-info-address {
    font-size: 1.4rem;
    color: var(--blb-white);
}
.modal-business-info-phone {
    font-size: 1.4rem;
    color: var(--blb-white);
}

 /* Business Website Link */
.modal-business-info-website {
    margin: 1rem 0;
    padding: 0.5rem 1.25rem;
    color: var(--blb-surface-3);
    background-color: var(--blb-surface);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1rem;
    font-weight: bold;
    cursor: pointer;
    font-size: 1.6rem;
    text-decoration: none;
    font-size: 1.25rem;
    transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
.modal-business-info-website:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
}

 /* Business Image Gallery */
/* Carousel Container With Arrows */
.modal-carousel-wrapper {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    padding: 1rem 0 0 0;
}

/* Modal Image Gallery Scroll Strip */
.modal-business-gallery {
    display: flex;
    flex-direction: row;
    overflow-x: auto;
    overflow-y: hidden;
    gap: 0.75rem;
    padding: 1.5rem 0 0 0;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
    margin: 1rem 0;
    max-width: 50%; /* 4 images * 64px + spacing */

    /* Scrollbar hidden but still scrollable */
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none; /* IE 10+ */
    scroll-padding-left: 0.5rem; /* or try 8px or 1rem */
}

.modal-business-gallery img,
.modal-thumb {
  width: 64px;
  height: 64px;
  object-fit: cover;
  border-radius: 0.5rem;
  flex-shrink: 0;
  scroll-snap-align: start;
  border: 1px solid var(--blb-border-2);
  transition: transform 0.2s ease, border 0.2s ease;
  cursor: pointer;
}

.modal-business-gallery img:hover,
.modal-thumb:hover {
  transform: scale(1.05);
}

/* Highlight Active Thumbnail */
.modal-thumb.active {
  border: 2px solid var(--blb-accent);
  transform: scale(1.05);
}

/* Carousel Navigation Arrows */
.carousel-nav-left {
  background: none;
  border: none;
  font-size: 2rem;
  color: var(--blb-text);
  cursor: pointer;
  transition: color 0.2s ease;
  margin: 0 1rem 0 0;
}

.carousel-nav-right {
  background: none;
  border: none;
  font-size: 2rem;
  color: var(--blb-text);
  cursor: pointer;
  transition: color 0.2s ease;
  margin: 0 0 0 1rem;
}

.carousel-nav:hover {
  color: var(--blb-white);
}

/* Main Zoomable Image */
.modal-carousel {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 1rem;
}

#modal-carousel-img {
  max-height: 300px;
  border-radius: 0.75rem;
  transition: transform 0.35s ease;
}

.zoom-bounce {
  animation: zoomBounce 0.35s ease;
}

@keyframes zoomBounce {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.12); }
  100% { transform: scale(1); }
}

/* Image Preview Modal */
.image-preview-modal {
  padding: 0;
  background-color: transparent;
  box-shadow: none;
  max-width: 80vw;
  max-height: 95vh;
  max-height: 95dvh;
}

#imagePreviewModal img {
  max-width: 75%;
  max-height: 75%;
  border-radius: 1rem;
  box-shadow: 0 0 1rem var(--blb-overlay);
}

/* Scrollbar for WebKit browsers */
.modal-business-gallery::-webkit-scrollbar {
    height: 8px;
}
.modal-business-gallery::-webkit-scrollbar-track {
    background: var(--blb-surface-2);
}
.modal-business-gallery::-webkit-scrollbar-thumb {
    background-color: var(--blb-surface-5);
    border-radius: 4px;
}

/* Business Hours */
.modal-business-hours {
  margin-top: 0;
}
.modal-business-hours p {
  font-weight: bold;
  margin-bottom: 0.5rem;
}
.hours-table {
  width: 50%;
  border-collapse: collapse;
  font-size: 1rem;
  color: var(--blb-text-muted);
}
.hours-table td {
  padding: 0.3rem 0.5rem;
}
.hours-table .day {
  font-weight: 600;
  color: var(--blb-text);
  width: 40%;
}
.hours-table .time {
  color: var(--blb-text-faint);
  text-align: right;
}

 /* Business Info 2 */
 /* Business Map */
.modal-business-info-2 {
    color: var(--blb-text);
    padding: 1rem 0 0 1rem;
}
.modal-business-map {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    margin: 0.25rem 0 0 0.25rem;
    padding-right: 1rem; /* prevents overlap with close button */
}
.modal-business-map hr,
.modal-business-map p,
.modal-business-map ul {
    margin: 0;
    gap: 0;
    padding: 0;
}

 /* Business Description */
.modal-business-info-description {
    font-size: 1.4rem;
    color: var(--blb-white);
    margin: 0.5rem 0 0.5rem 0;
}

 /* Business Category Buttons */
 .modal-business-category-buttons-inline-ms {
    display: flex;
    flex-wrap: wrap;
    width: 100%;
}

.modal-business-category-button {
    color: var(--blb-text);
    background-color: var(--blb-surface);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1rem; /* 20px */
    padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
    font-size: 1.25rem;
    font-family: var(--blb-font-serif);
    cursor: pointer;
    transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
.modal-business-category-button:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
}

.modal-business-category-buttons-inline-ms .modal-business-category-button {
    background-color: var(--blb-surface);
    color: var(--blb-text);
    border: 0.125rem solid var(--blb-border);
    border-radius: 1.25rem;
    padding: 0.375rem 0.875rem; /* 6px, 14px */
    font-size: 1rem;
    font-family: var(--blb-font-sans);
    cursor: pointer;
    transition: all 0.3s ease;
    margin: 0.5rem 0.5rem 0.5rem 0;
}
.modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
    background-color: var(--blb-surface-2);
    color: var(--blb-accent);
    box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
}

/* Main Services Page - Section 4 */
/* Footer */
.main-services-wrapper .page_content_main_services:nth-child(3) {
    width: 100%;
    height: 10%;
    flex-shrink: 0;
    display: flex;
    align-content: center;
    justify-content: center;
    align-items: center;
    font-size: 1.5rem;
}

.page_content_main_services {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blb-text);
}

/* #################### 2. ROOT SCALE #################### */
/* The site is sized in rem, so scaling the root font-size scales every
   component at once. Reference design: 1920px viewport @ 16px root (1080p).

   PHONE WIDTHS (<=1040px): unchanged current behavior. The DPI rules shrink
   the root on high-DPR devices (a DPR-3 phone matches 168dpi -> 57.143%),
   and the phone breakpoint blocks below were tuned WITH that in effect.

   DESKTOP WIDTHS (>=1041px): root scales proportionally with the viewport:
   16px x (viewport / 1920) = 100vw / 120. One formula covers 720p (66.67%),
   1080p (100%), 2K (133.33%), 4K (200%), 8K (400%) and every laptop width
   in between. It also REPLACES DPI compensation on desktop, because OS
   display scaling shrinks the CSS viewport (1080p @ 125% -> 1536px ->
   1536/120 = 12.8px = the old 80% rule). Do NOT re-apply --dpi-scale here
   or scaled desktops would be compensated twice.

   NOTE: dpr_fix.js must be removed from layout_1.astro - its inline style
   would override all of this. */

/* Each tier is paired with a -webkit-min-device-pixel-ratio fallback:
   Safari only learned the `resolution` media feature in v16, and without
   a match --dpi-scale stays 1, which renders the whole phone design at
   1.75x and overflows every screen. dppx = dpi / 96. */
:root { --dpi-scale: 1; }
@media (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { :root { --dpi-scale: 0.8; } }      /* 125% / DPR 1.25 */
@media (-webkit-min-device-pixel-ratio: 1.5),  (min-resolution: 144dpi) { :root { --dpi-scale: 0.66667; } }  /* 150% / DPR 1.5  */
@media (-webkit-min-device-pixel-ratio: 1.75), (min-resolution: 168dpi) { :root { --dpi-scale: 0.57143; } }  /* 175% / DPR 1.75+ (phones are DPR 2-4) */

/* Phone / tablet widths - identical to the old dpr_fix behavior */
html {
    font-size: calc(100% * var(--dpi-scale));

    /* With a ~9.14px root, iOS text autosizing inflates copy in some
       blocks and not others. Pin it so every phone agrees. */
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

/* PHONE PORTRAIT WIDTHS: fluid, same idea as the tablet and desktop rules
   below. Before this, every phone from 344px (Fold5 cover) to 448px
   (Pixel 9 Pro XL) got the SAME 9.14px root, so a band tuned at one width
   was fixed-pixel at every other width in that band - a 14% spread in the
   xs band and 11% in the sm band, absorbed by nothing.

   Each band scales from its own reference, so the widths the design was
   actually authored against come out bit-identical to before:
     xs (301-400): 393px (moto g stylus 5G) -> 393 / 9.14288 = 43
     sm (401-600): 412px (the same reference the tablet rule below uses,
                   already documented there) -> 412 / 9.14288 = 45.063

   Note these do NOT read --dpi-scale. That is deliberate: a viewport this
   narrow gets phone styling regardless of the device's DPR, so the layout
   no longer depends on the resolution media query resolving correctly.
   A pre-16 Safari, or a desktop window dragged down to phone width, now
   renders the phone design properly instead of at 1.75x.

   The min() caps the root at 9.14288px, the fixed value everything was
   tuned at, so the rule can only ever scale DOWN. Measured reason: the
   page sections are percentage-height bands, and letting type grow past
   the tuned size on a big phone (448px wide, 448px tall in landscape)
   pushed content out of those bands - up to 40px of fresh clipping on
   /about and /under_construction. Scaling down on a narrow phone has the
   opposite effect and removed up to 59px of existing clipping. Capped, it
   is a strict improvement at every width in the device table.
   To let large phones scale up too, the percentage bands have to become
   content-sized first; then raise or drop the cap.

   If min() is unsupported the whole declaration is dropped and the root
   falls back to the calc(100% * var(--dpi-scale)) above - the exact
   behaviour this replaces, so there is no broken intermediate state. */
@media (min-width: 301px) and (max-width: 400px) {
    html { font-size: min(9.14288px, calc(100vw / 43)); }
}
@media (min-width: 401px) and (max-width: 600px) {
    html { font-size: min(9.14288px, calc(100vw / 45.063)); }
}

/* PHONE LANDSCAPE (601-1040px wide, landscape): same idea, but driven by
   the SHORT edge. Two reasons it is height and not width here:

     1. The landscape layout is height-constrained - 100dvh sections split
        into percentage bands - so the scarce axis is the one to scale by.
     2. The short edge is the same physical dimension the portrait rule
        uses, so a phone lands on the same root in both orientations.
        Divisor 43 is the portrait xs divisor: the moto g reference is
        393px wide in portrait and 393px TALL in landscape -> 9.14px,
        exactly what this range rendered at before.

   Landscape spanned 667-1006px at one fixed root, a 51% spread with
   nothing absorbing it. A taller landscape viewport (Pixel Pro XL, 448)
   now gets proportionally more type than a short one (budget 16:9, 360).

   vh first, dvh second: the pair keeps older engines working, and the
   body never scrolls here so the toolbar never moves the dvh value.
   Foldables opened flat land here too and scale sensibly (Fold5 open,
   829x690 landscape -> 690 / 43 = 16.0px, tablet-like, as it should be). */
@media (min-width: 601px) and (max-width: 1040px) and (orientation: landscape) {
    html { font-size: min(9.14288px, calc(100vh / 43)); }
    html { font-size: min(9.14288px, calc(100dvh / 43)); }
}

/* TABLET PORTRAIT (601-1040px, portrait): renders the sm-phone (401-600)
   design proportionally scaled up. Reference: 412px phone at DPR 3, where
   root = 16px x 0.57143 = 9.143px. For width w: root = 9.143 x (w / 412)
   = 100vw / 45.063. iPad Mini 744 -> 16.51px (1.81x phone), iPad Air 834
   -> 18.51px (2.02x), iPad Pro portrait 1024 -> 22.72px (2.49x).
   Fixed formula on purpose - it ignores the tablet's own DPR so every
   tablet gets the same look as the approved phone reference. The sm-phone
   block's media query is extended to also cover this range (see below);
   the lg-phone block is landscape-only so it doesn't compete here. */
@media (min-width: 601px) and (max-width: 1040px) and (orientation: portrait) {
    html {
        font-size: calc(100vw / 45.063);
    }
}

/* Desktop widths - proportional to the 1920px reference design */
@media (min-width: 1041px) {
    html {
        font-size: calc(100vw / 120);
    }
}

/* #################### 3. VIEW-PORT HELPER CLASSES #################### */
/* Classes are toggled by viewport-scale.js */
/* ──  Narrow laptops / split-screen  ─────────────────────────────── */
/* laptop split-screen / narrow 1280-px layouts */
.vw-1280 .sidebar-open #mySidenav { 
    width: 20%;
}
.vw-1280 .carousel-button {
    width: 26rem;
    height: 14rem;
}
.vw-1280 .a_home_box_1 img {
    width: 5rem;
    height: 5rem;
}
/* .category-wrapper h1 dropped for the same reason as the h2 below it:
   the categories h1 is now .cat-hero-title, and this rule (0,2,1) beat
   it (0,1,0) at every width up to 1280 - phones included - pinning the
   headline to 4rem whatever --hero-title-size said. */
.vw-1280 .about-wrapper-header h1,
.vw-1280 .underconstruction-wrapper-header h1 {
    font-size: 4rem;
}
/* .category-wrapper h2 deliberately dropped from this list. It was
   written for the old categories layout, where the only h2 was a section
   heading. The h2s there now are .cat-card-title, and this rule (0,2,1)
   outranked it (0,1,0) at every width up to 1280 - phones included -
   pinning every card title to 2.2rem regardless of --cat-title-size.
   The other two pages still use their headers, so they stay. */
.vw-1280 .about-wrapper-header h2,
.vw-1280 .underconstruction-wrapper-header h2 {
    font-size: 2.2rem;
}
.vw-1280 .category-button-ms,
.vw-1280 .contact_p_button,
.vw-1280 .contact_underconstruction_p_button {
    font-size: 1.125rem;
    padding: .5rem 1.2rem;
}

/* ──  ≤ 400 px  “tiny” phones  ─────────────────────────────────── */
@media (min-width: 301px) and (max-width: 400px) {
    /* ────────────────────────────────────────────────────────────────
    00. NAVIGATION MENU BAR
    ───────────────────────────────────────────────────────────── */
    .xs-phone .blb_logo {
        width: 7.8rem; /* 105.6px */
    }
    .xs-phone .menu_icon {    
        width: 5.4rem; /* 64px */
    }

    /* ────────────────────────────────────────────────────────────────
    Navigation
    ───────────────────────────────────────────────────────────── */
    /* Side Menu */
    .xs-phone .nav_main {
        padding: 2rem 2.55rem;
    }

    /* Side Menu */
    .xs-phone .sidebar-open #mySidenav {
        width: 75%; 
    }
    .xs-phone .nav_side {
        border-top-left-radius: 3rem;
        border-bottom-left-radius: 3rem;
    }

    .xs-phone .nav_content:nth-child(1) {
        align-items: center;
        justify-content: space-between; /* space between left and right */
        padding: 1.5rem;
        font-size: 5rem;
    }

    .xs-phone .a_left, .xs-phone .a_right {
        display: flex;
        align-items: center;
        width: auto;
    }

    .xs-phone .a_left {
        justify-content: flex-start;
    }

    .xs-phone .a_right {
        display: flex;
        justify-content: flex-end;
        align-items: center;   /* ✅ vertical centering */
        height: 100%;          /* make sure it has height context */
    }

    .xs-phone .closebtn_side {
        color: var(--blb-white);
        padding-left: 1rem;
        text-decoration: none;
    }

    .xs-phone .heartbtn_side {
        position: relative;
        color: var(--blb-heart);
        padding-right: 1.5rem;
        text-decoration: none;
        top: 0.15rem;
    }

    .xs-phone .heartbtn_side img {
        display: block;
        height: 2.5rem;          /* or whatever size you want */
        }

    .xs-phone .nav_content:nth-child(2) { 
        height: 10%;
        width: 100%;
        align-content: center;
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    .xs-phone .nav_content:nth-child(2) h1 {
        font-size: 4rem; 
    }
    .xs-phone .nav_content:nth-child(3) { 
        align-items: flex-start;   /* Align items to the left*/
        flex-direction: column;
        justify-content: flex-start;
        gap: 1rem;
        padding: 2rem;
    }

    .xs-phone .nav_content:nth-child(3) a {
        font-size: 3rem;
    }

    .xs-phone .nav_content:nth-child(4) { 
        align-items: center;
        justify-content: center;
    }

    /* Use flex-grow ratios — these will perfectly fill the height */
    /* Shared style for all sections */
    .xs-phone .nav_content {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 3rem;
    }

    /* Social Media */
    .xs-phone .face_img_2 {
        width: 6rem; /* 64px */
    }

    .xs-phone .face_btn, .xs-phone .insta_btn, .xs-phone .blank_img {
        padding-bottom: 0.75rem;
    }
    .xs-phone .face_img, .xs-phone .insta_img, .xs-phone .blank_img {
        width: 2.25rem; /* 32px */
    }

    /* ────────────────────────────────────────────────────────────────
    Modal Overlay
    ───────────────────────────────────────────────────────────── */
    .xs-phone .modal-overlay {
        justify-content:center;
        align-items: flex-start;
    }

    /* Modal Content */
    .xs-phone .modal-content {
        top: 2rem;
        padding: 2rem;
    }

    /* Search Input */
    .xs-phone .search-input {
        font-size: 2rem;
        width: 100%;
        max-width: 90%;
    }

    /* Close Button */
    .xs-phone .close-modal {
        top: -0.75rem;
        right: -0.25rem;
        font-size: 3rem;
    }

    .xs-phone .suggestions-list {
        font-size: 1.75rem;
    }

    .xs-phone .suggestions-list li:hover {
        background-color: var(--blb-surface-4);
    }

    .xs-phone .suggestions-list img {
        height: 1.2rem;
        width: auto;
        flex-shrink: 0;
    }

    .xs-phone .suggestions-list::-webkit-scrollbar {
        width: 8px;
    }
    .xs-phone .suggestions-list::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .xs-phone .suggestions-list::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    .xs-phone .search-tooltip {
        top: 5rem;
        font-size: 1.25rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1A. HOME PAGE
    ───────────────────────────────────────────────────────────── */

    /* Home Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_home:nth-child(1) {
        height: 10%;
        align-items: center;
        justify-content: center;
    }

    /* Home Page - Section 2 */
    /* Header */
    .xs-phone .page_content_home:nth-child(2) {
        align-items: center;
        justify-content: center;
    }
    .xs-phone .page_content_home:nth-child(2) h1 {
        font-size: 5.5rem;
        padding: 0 2rem
    }

    /* Home Page - Section 3 */
    /* Carousel Main Buttons */
    .xs-phone .page_content_home:nth-child(3) {
        height: 60%;
        width: 100%;
    }

    .xs-phone .carousel-wrapper {
        perspective: 1600px;
    }

    .xs-phone .carousel-item {
        margin: -8.15rem; /* -84px */
    }

    .xs-phone .a_home_box_1 img {
        filter: invert();
        width: 11rem; /* 100px */
        height: 11rem;
    }

    .xs-phone .a_home_box_1_text p{
        margin-top: 1rem;
        font-size: 2.25rem; 
    }

    /* Carousel Side Buttons */
    .xs-phone .carousel-button {
        height: 20.125rem; /* 290px */
        width: 15.125rem; /* 514px */
    }
    /* Home Page - Section 4 */
    /* Footer */
    .xs-phone .page_content_home:nth-child(4) {
        align-items: center;
        justify-content: center;
        font-size: 2rem;
    }

    /* ────────────────────────────────────────────────────────────────
   1A. CALENDAR PAGE
    ───────────────────────────────────────────────────────────── */
    .xs-phone .section_calendar {
        height: 100vh;
        height: 100dvh;
        width: 100%;
        overflow: hidden;
        display: flex;
        flex-direction: column;
    }

    /* Calendar Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_calendar:nth-child(1) {
        height: 10%;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: var(--blb-surface-3);
    }

    /* Sections 2-4 of this page used to be a header band, an iframe band
       and a footer band. The page is now hero + toolbar + cards inside
       .cal-wrapper, so those rules matched nothing and were removed;
       their replacements are the --cal-* variables set on <html>.
       Only the nav band above and the shared rule below still apply. */

    .xs-phone .page_content_calendar {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--blb-text);
    }

    /* ────────────────────────────────────────────────────────────────
    1B. CATEGORY PAGE
    ───────────────────────────────────────────────────────────── */

    /* Category Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_category:nth-child(1) {
        align-items: center;
        justify-content: center;
    }

    /* Category Page - Section 2 */
    /* Header */
    .xs-phone .category-wrapper {
        padding-right: 0.25rem;
    }

    .xs-phone .category-wrapper .page_content_category:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Category Page - Section 3 */
    /* Categories Groups */
    .xs-phone .category-wrapper .page_content_category:nth-child(2) {
        width: 100%;
    }

    /* Category Buttons */
    .xs-phone .category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    
    .xs-phone .category-button {
        border-radius: 1.5rem; /* 20px */
        font-size: 3rem;
    }

     .xs-phone .dropdown-header {
        padding: 0.75em;
        cursor: pointer;
        width: 100%;
        border: none;
        font-size: 3em;
        font-weight: bold;
        transition: background-color 0.3s ease;
        background-color: var(--blb-green-deep);
    }

    .xs-phone .dropdown-content {
        display: none;
        padding: 1em;
        background-color: var(--blb-green-deep);
    }

     .xs-phone .dropdown-content.visible {
        display: block;
    }

     .xs-phone .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }

     .xs-phone .category-button:hover {
            background-color: var(--blb-surface-2);
            color: var(--blb-accent);
            box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }

    /* Category Page - Section 4 */
    /* Footer */
    .xs-phone .category-wrapper .page_content_category:nth-child(3) {
        align-items: center;
        justify-content: center;
        font-size: 2rem;
    }

    /* ################# About Page - Start ################ */
    /* About Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_about:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* About Page - Section 2 */
    /* Header */
    .xs-phone .about-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 1rem;
        box-sizing: content-box;
    }
    .xs-phone .about-wrapper .page_content_about:nth-child(1) {
        width: 100%;
        display: flex;
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 7.5vh 0 5vh 0;
    }

    /* The three .section_about h1/h2/h3 rules that were here styled the
       old "Welcome / to / BLB" stack. They were ELEMENT selectors, so
       they outranked every .ab-* class and pinned the new hero headline
       centred at 6rem on phones. Removed with the markup they styled. */

    /* About Page - Section 3 */
    /* Content Description */
    .xs-phone .about-wrapper .page_content_about:nth-child(2) {
        width: 100%;
    }

    .xs-phone .about-wrapper-paragraphs {
        padding: 0 2.5vw 20vw 2.5vw;
    }

    /* Description Section */
    .xs-phone .about_p {
        padding: 0 1.5%; /* instead of 12.5rem / 200px */
        text-align: left;
        font-size: 2.25rem;
    }

    .xs-phone .about_p1 {
        text-align: left;
        padding: 2vh 3.5vw 0.75vh 3.5vw;
    }
    .xs-phone .about_p2 {
        text-align: left;
    }
    .xs-phone .about_p3 {
        text-align: left;
    }

    /* Call to Action Boxes */
    .xs-phone .contact_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.25rem;
        border-radius: 1.5rem;
    }
    .xs-phone .contact_p1 {
        font-size: 1.5rem;
    }
    .xs-phone .contact_p2 {
        font-size: 2rem;
        padding: 0 1rem;
    }

    /* About Page - Section 4 */
    /* Footer */
    .xs-phone .about-wrapper .page_content_about:nth-child(3) {
        position: relative;
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2rem;
        padding: 1vh 0 0 0;
        bottom: 3.5vh;
    }

    /* ################# Under Construction Page - Start ################ */
    /* Under Construction Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_underconstruction:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Under Construction Page - Section 2 */
    /* Header */
    .xs-phone .page_content_underconstruction:nth-child(2) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .xs-phone .section_underconstruction h1 {
        font-size: 5rem;
    }
    .xs-phone .section_underconstruction h2 {
        font-size: 3.75rem;
    }
    .xs-phone .section_underconstruction h3 {
        font-size: 2.5rem;
    }

    /* Under Construction Page - Section 3 */
    /* Content Description */
    .xs-phone .page_content_underconstruction:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .xs-phone .underconstruction-wrapper-header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
    .xs-phone .underconstruction-wrapper-paragraphs {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        padding: 0 5vw;
        width: 100%;
        height: 63vh;
        height: 63dvh;
        box-sizing: border-box;
        /* 63vh can exceed the room available in landscape, so cap it
           to the space the flex parent actually has and let it scroll
           rather than be clipped away by the section overflow:hidden. */
        max-height: 100%;
        overflow-y: auto;
    }

    /* Description Section */
    .xs-phone .underconstruction_p {
        padding: 0 1.25%; /* instead of 12.5rem / 200px */
        text-align: center;
    }

    .xs-phone .underconstruction_p1 {
        font-size: 2rem;
    }
    .xs-phone .underconstruction_p2 {
        font-size: 2.25rem;
    }
    .xs-phone .underconstruction_p3 {
        font-size: 2.5rem;
    }

    /* Call to Action Boxes */
    .xs-phone .contact_underconstruction_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.25rem;
        border-radius: 1.5rem;
    }
    .xs-phone .contact_underconstruction_p1 {
        font-size: 1.5rem;
    }
    .xs-phone .contact_underconstruction_p2 {
        font-size: 1.75rem;
    }

    /* Under Construction Page - Section 4 */
    /* Footer */
    .xs-phone .page_content_underconstruction:nth-child(4) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. MAIN SERVICES PAGE
        ───────────────────────────────────────────────────────────── */
    /* Main Services Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Main Services Page - Section 2 */
    .xs-phone .main-services-wrapper {
        padding: 4rem 0;
    }
    /* Header */
    .xs-phone .main-services-wrapper .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;

    }
    .xs-phone .main-services-wrapper .page_content_main_services:nth-child(1) h1 {
        font-size: 3.25rem;
    }

    /* Main Services Page - Section 3 */
    /* Categories Groups */
    .xs-phone .main-services-wrapper .page_content_main_services:nth-child(2) {
        width: 100%;
    }
    /* List Layout */
    .xs-phone .vertical-layout {
        display: flex;
        flex-direction: column;
        padding: 2rem 5vw;
    }
    .xs-phone .horizonal-layout {
        display: flex;
        margin: 4% 0 0 0;
    }

    /* ───────────  business logo  ─────────── */
    .xs-phone .card-part-1 {
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 14rem; /* 192px */
        max-width: 14rem;
        min-height: 14rem;
        max-height: 14rem;
    }

    /* ───────────  Description  ──────────── */
    .xs-phone .card-part-2 .p1 {
        font-size: 2rem;
    }
    .xs-phone .card-part-2 .p2 {
        font-size: 1.6rem;
    }
    .xs-phone .card-part-2 .p3 {
        font-size: 1.8rem;
        margin: 1.5rem 0.5rem;
    }
    .xs-phone .category-buttons-inline-ms .category-button-ms {
        font-size: 1.4rem;
    }

    /* ───────────  Location  ─────────── */
    .xs-phone .card-part-3 {
        background-color: var(--blb-surface);
        border-top-right-radius: 3.125rem;
        border-right: 0;
    }
    .xs-phone .card-part-3-1 {
        font-size: 2.1rem;
        margin: 5% 7.5%;
    }
    .xs-phone .card-part-3-2 {
        font-size: 1.5rem;
        margin: 5% 7.5%;
    }
    .xs-phone .card-part-3-3 {
        font-size: 1.7rem;
        margin: 5% 7.5%;
    }
    .xs-phone .card-part-3-3 p a {
        color: var(--blb-highlight);
    }

    /* ───────────  Social Media  ─────────── */
    .xs-phone .card-part-4 {
        align-items: center;
        justify-content: center;
        gap: 5rem;
        margin: 3.5% 20% 1% 20%;
        flex-direction: row;
    }

    /* ───────────  Business Card Overlay (Base) ─────────── */
    /* Modal Card Container */
    .xs-phone #businessModal .modal-content {
        padding: 0;
        margin: 0 1rem;
        top: 0rem;
        width: 90%;
        max-width: 90vw;
        height: 90%;
        max-height: 90vh;
        max-height: 90dvh;
    }

    .xs-phone .modal-header-bar {
        padding: 0.5rem 1rem;
        border-bottom: 1px solid var(--blb-border-3);
        align-items: center;
    }

    .xs-phone .modal-header-bar .close-modal {
        font-size: 3rem;
        padding: 0 0.25rem;
    }

    /* Modal Typography */

    /* Optional: Divider Line */
    .xs-phone #businessModal hr {
        border: none;
        border-top: 1px solid var(--blb-border-3);
        margin: 1.5rem 0;
    }

    /* ───────────  Business Card Layout Grid (Content) ─────────── */
    .xs-phone .modal-business-grid {
        grid-template-columns: 1fr;
    }

     /* Business Info 1 */
     .xs-phone .modal-business-info-1 {
        color: var(--blb-text);
        padding: 1rem 0 0 1rem;
        max-width: 330px;
    }
    .xs-phone .modal-business-header {
        font-size: 4rem;
        padding-top: 1rem;
    }
    .xs-phone .modal-business-services {
        font-size: 2.5rem;
        font-style: italic;
        margin-bottom: 0.5rem;
    }
    .xs-phone .modal-business-info-headings {
        color: var(--blb-text);
        font-size: 1.6rem;
        padding-top: 1rem;
    }
    .xs-phone .modal-business-info-address {
        font-size: 2rem;
    }
    .xs-phone .modal-business-info-phone {
        font-size: 2rem;
    }

     /* Business Website Link */
    .xs-phone .modal-business-info-website {
        margin: 2rem 0rem;
        padding: 0.5rem 1.25rem;
        background-color: var(--blb-accent);
        font-size: 1.8rem;
    }
    .xs-phone .modal-business-info-website:hover {
        color: var(--blb-highlight);
        text-shadow: 0 0 0.5rem var(--blb-highlight);
    }
    
     /* Business Image Gallery */
    .xs-phone .modal-business-gallery {
        max-width: 100%; /* 4 images * 64px + spacing */
        margin: 1rem 0;
    }
    .xs-phone .modal-business-gallery img {
        scroll-snap-align: start;
    }

    .xs-phone .modal-business-gallery img,
    .xs-phone .modal-thumb {
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: 0.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    border: 0 solid var(--blb-border-2);
    transition: transform 0.2s ease, border 0.2s ease;
    cursor: pointer;
    }
    .xs-phone .modal-thumb {
        padding: 1rem;
    }

    .xs-phone .modal-business-gallery img:hover,
    .xs-phone .modal-thumb:hover {
    transform: scale(1);
    }

    /* Highlight Active Thumbnail */
    .xs-phone .modal-thumb.active {
    border: 2px solid var(--blb-accent);
    transform: scale(1);
    }

    /* Carousel Navigation Arrows */
    .xs-phone .carousel-nav-left {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 2rem 0 0;
    }

    .xs-phone .carousel-nav-right {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 0 0 2rem;
    }

    .xs-phone .carousel-nav:hover {
        color: var(--blb-white);
    }

    /* Main Zoomable Image */
    .xs-phone .modal-carousel {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 1rem;
    }

    .xs-phone #modal-carousel-img {
        max-height: 300px;
        border-radius: 0.75rem;
        transition: transform 0.35s ease;
    }

    .xs-phone .zoom-bounce {
        animation: zoomBounce 0.35s ease;
    }

    @keyframes zoomBounce {
        0%   { transform: scale(1); }
        50%  { transform: scale(1.12); }
        100% { transform: scale(1); }
    }

    /* Image Preview Modal */
    .xs-phone .image-preview-modal {
        padding: 0;
        background-color: transparent;
        box-shadow: none;
        max-width: 90vw;
        max-height: 90vh;
        max-height: 90dvh;
        padding-top: 75%;
    }
    
    /* The actual preview image */
    .xs-phone #imagePreviewContent {
        max-width: 100%;
        max-height: 100%;
        width: auto;
        height: auto;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        justify-content: center;
        align-items: center;
    }
    
    .xs-phone #imagePreviewModal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }

    .xs-phone #imagePreviewModal img {
        max-width: 100%;
        max-height: 100%;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        
    }
    /* Scrollbar for WebKit browsers */
    .xs-phone .modal-business-gallery::-webkit-scrollbar {
        height: 8px;
    }
    .xs-phone .modal-business-gallery::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .xs-phone .modal-business-gallery::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    /* Business Hours */
    .xs-phone .modal-business-hours {
        margin-top: 1rem;
    }

    .xs-phone .modal-business-hours p {
        font-weight: bold;
        margin-bottom: 0.5rem;
    }

    .xs-phone .hours-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 2rem;
        color: var(--blb-text-muted);
    }

    .xs-phone .hours-table td {
        padding: 0.3rem 0.5rem;
    }

    .xs-phone .hours-table .day {
        font-weight: 600;
        color: var(--blb-white);
        width: 40%;
    }

    .xs-phone .hours-table .time {
        color: var(--blb-text-faint);
        text-align: right;
    }

    /* Business Info 2 */
    /* Business Map */
    .xs-phone .modal-business-map {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-right: 1rem; /* prevents overlap with close button */
        height: 250px;
    }
    .xs-phone .modal-business-map hr,
    .xs-phone .modal-business-map p,
    .xs-phone .modal-business-map ul {
        margin-left: 0.25rem;
    }

    
     /* Business Description */
    .xs-phone .modal-business-info-description {
        color: var(--blb-white);
        font-size: 2rem;
    }

    /* Modal Business Category Buttons */

    .xs-phone .modal-business-category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    .xs-phone .modal-business-info-headings-services {
        padding-bottom: 1rem;
    }
    .xs-phone .modal-business-category-button {
        color: var(--blb-text);
        background-color: var(--blb-surface);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1rem; /* 20px */
        padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
        font-size: 1.6rem;
        font-family: var(--blb-font-serif);
        cursor: pointer;
        transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    }
    .xs-phone .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }
    .xs-phone .modal-business-category-buttons-inline-ms .modal-business-category-button {
        background-color: var(--blb-surface);
        color: var(--blb-text);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1.25rem;
        padding: 0.375rem 0.875rem; /* 6px, 14px */
        font-size: 1.6rem;
        font-family: var(--blb-font-sans);
        cursor: pointer;
        transition: all 0.3s ease;
        margin: 0 0 0.5rem 0.5rem;
    }
    .xs-phone .modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }

    /* Main Services Page - Section 4 */
    /* Footer */
    .xs-phone .main-services-wrapper .page_content_main_services:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2rem;
    }
}

/* ─────────────────────────────────────────────────────────────
   ─────────────────────────────────────────────────────────────
    NAVIGATION MENU BAR
   ───────────────────────────────────────────────────────────── 
   ───────────────────────────────────────────────────────────── */

@media(min-width: 401px) and (max-width: 600px) {
    /* ────────────────────────────────────────────────────────────────
   00. NAVIGATION MENU BAR
   ───────────────────────────────────────────────────────────── */
    .sm-phone .blb_logo {
        width: 8.5rem; /* 105.6px */
    }
    .sm-phone .menu_icon {    
        width: 5.8rem; /* 64px */
    }

    /* ────────────────────────────────────────────────────────────────
    Navigation
    ───────────────────────────────────────────────────────────── */
    .sm-phone .nav_main {
        padding: 2rem 2.75rem;
    }

    /* Side Menu */
    .sm-phone .sidebar-open #mySidenav {
        width: 75%; 
    }
    .sm-phone .nav_side {
        border-top-left-radius: 3rem;
        border-bottom-left-radius: 3rem;
    }

    .sm-phone .nav_content:nth-child(1) {
        align-items: center;
        justify-content: space-between; /* space between left and right */
        padding: 1.5rem;
        font-size: 5rem;
    }

    .sm-phone .a_left, .xs-phone .a_right {
        display: flex;
        align-items: center;
        width: auto;
    }

    .sm-phone .a_left {
        justify-content: flex-start;
    }

    .sm-phone .a_right {
        display: flex;
        justify-content: flex-end;
        align-items: center;   /* ✅ vertical centering */
        height: 100%;          /* make sure it has height context */
    }

    .sm-phone .closebtn_side {
        color: var(--blb-white);
        padding-left: 1.25rem;
        text-decoration: none;
    }

    .sm-phone .heartbtn_side {
        position: relative;
        color: var(--blb-heart);
        padding-right: 1.75rem;
        text-decoration: none;
        top: 0.15rem;
    }

    .sm-phone .heartbtn_side img {
    display: block;
    height: 2.75rem;          /* or whatever size you want */
    }

    .sm-phone .nav_content:nth-child(2) { 
        height: 10%;
        width: 100%;
        align-content: center;
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    .sm-phone .nav_content:nth-child(2) h1 {
        font-size: 5rem;
    }
    .sm-phone .nav_content:nth-child(3) { 
        align-items: flex-start;   /* Align items to the left*/
        flex-direction: column;
        justify-content: flex-start;
        gap: 1rem;
        padding: 2rem;
        font-size: 3.5rem;
    }
    .sm-phone .nav_content:nth-child(4) { 
        align-items: center;
        justify-content: center;
    }

    .sm-phone .nav_content:nth-child(3) a {
        font-size: 3rem;
    }

    /* Use flex-grow ratios — these will perfectly fill the height */
    /* Shared style for all sections */
    .sm-phone .nav_content {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 3.5rem;
    }

    /* Social Media */
    .sm-phone .face_img_2 {
        width: 7rem; /* 64px */
    }

    .sm-phone .face_btn, .xs-phone .insta_btn, .xs-phone .blank_img {
        padding-bottom: 0.75rem;
    }
    .sm-phone .face_img, .xs-phone .insta_img, .xs-phone .blank_img {
        width: 2.5rem; /* 32px */
    }

    /* ────────────────────────────────────────────────────────────────
    Modal Overlay
    ───────────────────────────────────────────────────────────── */
    .sm-phone .modal-overlay {
        justify-content:center;
        align-items: flex-start;
    }

    /* Modal Content */
    .sm-phone .modal-content {
        top: 2.25rem;
        padding: 2.25rem;
    }

    /* Search Input */
    .sm-phone .search-input {
        font-size: 2.25rem;
        width: 100%;
        max-width: 90%;
    }

    /* Close Button */
    .sm-phone .close-modal {
        top: -0.75rem;
        right: -0.25rem;
        font-size: 3rem;
    }

    .sm-phone .suggestions-list {
        font-size: 2.25rem;
    }

    .sm-phone .suggestions-list li:hover {
        background-color: var(--blb-surface-4);
    }

    .sm-phone .suggestions-list img {
        height: 1.4rem;
        width: auto;
        flex-shrink: 0;
    }

    .sm-phone .suggestions-list::-webkit-scrollbar {
        width: 8px;
    }
    .sm-phone .suggestions-list::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .sm-phone .suggestions-list::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    .sm-phone .search-tooltip {
        top: 5.5rem;
        font-size: 1.4rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1A. HOME PAGE
    ───────────────────────────────────────────────────────────── */

    /* Home Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_home:nth-child(1) {
        align-items: center;
        justify-content: center;
    }

    /* Home Page - Section 2 */
    /* Header */
    .sm-phone .page_content_home:nth-child(2) {
        align-items: center;
        justify-content: center;
    }
    .sm-phone .section_home h1 {
        font-size: 6rem;
    }

    /* Home Page - Section 3 */
    /* Carousel Main Buttons */
    .sm-phone .page_content_home:nth-child(3) {
        height: 60%;
        width: 100%;
    }

    .sm-phone .carousel-wrapper {
        perspective: 1600px;
    }

    .sm-phone .carousel-item {
        margin: -8.40rem; /* -84px */
    }

    .sm-phone .a_home_box_1 img {
        filter: invert();
        width: 11.75rem; /* 100px */
        height: 11.75rem;
    }

    .sm-phone .a_home_box_1_text p{
        margin-top: 1rem;
        font-size: 2.25rem; 
    }

    /* Carousel Side Buttons */
    .sm-phone .carousel-button {
        height: 18.125rem; /* 290px */
        width: 32.125rem; /* 514px */
    }
    /* Home Page - Section 4 */
    /* Footer */
    .sm-phone .page_content_home:nth-child(4) {
        align-items: center;
        justify-content: center;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
   1A. CALENDAR PAGE
    ───────────────────────────────────────────────────────────── */
    .sm-phone .section_calendar {
        height: 100vh;
        height: 100dvh;
        width: 100%;
        overflow: hidden;
        display: flex;
        flex-direction: column;
    }

    /* Calendar Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_calendar:nth-child(1) {
        height: 10%;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: var(--blb-surface-3);
    }

    /* Calendar Page - Section 2 */
    /* Header */
    /* Sections 2-4 removed with the iframe layout - see the note in the
       .xs-phone block above. */

    .sm-phone .page_content_calendar {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--blb-text);
    }

    /* ────────────────────────────────────────────────────────────────
    1B. CATEGORY PAGE
    ───────────────────────────────────────────────────────────── */

    /* Category Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_category:nth-child(1) {
        align-items: center;
        justify-content: center;
    }

    /* Category Page - Section 2 */
    /* Header */
    .sm-phone .category-wrapper {
        padding-right: 0.25rem;
    }

    .sm-phone .category-wrapper .page_content_category:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .sm-phone .category-wrapper .page_content_category:nth-child(1) h1 {
        font-size: 6rem;
    }

    /* Category Page - Section 3 */
    /* Categories Groups */
    .sm-phone .category-wrapper .page_content_category:nth-child(2) {
        width: 100%;
    }

    /* Category Buttons */
    .sm-phone .category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    
    .sm-phone .category-button {
        border-radius: 1.5rem; /* 20px */
        font-size: 3rem;
    }

     .sm-phone .dropdown-header {
        padding: 0.75em;
        cursor: pointer;
        width: 100%;
        border: none;
        font-size: 3em;
        font-weight: bold;
        transition: background-color 0.3s ease;
        background-color: var(--blb-green-deep);
    }

    .sm-phone .dropdown-content {
        display: none;
        padding: 1em;
        background-color: var(--blb-green-deep);
    }

     .sm-phone .dropdown-content.visible {
        display: block;
    }

     .sm-phone .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }

     .sm-phone .category-button:hover {
            background-color: var(--blb-surface-2);
            color: var(--blb-accent);
            box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }

    /* Category Page - Section 4 */
    /* Footer */
    .sm-phone .category-wrapper .page_content_category:nth-child(3) {
        align-items: center;
        justify-content: center;
        font-size: 2.5rem;
    }

    /* ################# About Page - Start ################ */
    /* About Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_about:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* About Page - Section 2 */
    /* Header */
    .sm-phone .about-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 1rem;
        box-sizing: content-box;
    }
    .sm-phone .about-wrapper .page_content_about:nth-child(1) {
        width: 100%;
        display: flex;
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 7.5vh 0 5vh 0;
    }

    /* Old About headings removed - see the note in the .xs-phone block. */

    /* About Page - Section 3 */
    /* Content Description */
    .sm-phone .about-wrapper .page_content_about:nth-child(2) {
        width: 100%;
    }

    .sm-phone .about-wrapper-paragraphs {
        padding: 0 2.5vw 20vw 2.5vw;
    }

    /* Description Section */
    .sm-phone .about_p {
        padding: 0 1.5%; /* instead of 12.5rem / 200px */
        text-align: left;
        font-size: 2.7rem;
    }

    .sm-phone .about_p1 {
        text-align: left;
        padding: 2vh 3.5vw 0.75vh 3.5vw;
    }
    .sm-phone .about_p2 {
        text-align: left;
    }
    .sm-phone .about_p3 {
        text-align: left;
    }

    /* Call to Action Boxes */
    .sm-phone .contact_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .sm-phone .contact_p1 {
        font-size: 2rem;
    }
    .sm-phone .contact_p2 {
        font-size: 2.25rem;
        padding: 0 3rem;
    }

    /* About Page - Section 4 */
    /* Footer */
    .sm-phone .about-wrapper .page_content_about:nth-child(3) {
        position: relative;
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
        padding: 1vh 0 0 0;
        bottom: 3.5vh;
    }

    /* ################# Under Construction Page - Start ################ */
    /* Under Construction Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_underconstruction:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Under Construction Page - Section 2 */
    /* Header */
    .sm-phone .page_content_underconstruction:nth-child(2) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .sm-phone .section_underconstruction h1 {
        font-size: 6rem;
    }
    .sm-phone .section_underconstruction h2 {
        font-size: 4.75rem;
    }
    .sm-phone .section_underconstruction h3 {
        font-size: 3.5rem;
    }

    /* Under Construction Page - Section 3 */
    /* Content Description */
    .sm-phone .page_content_underconstruction:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .sm-phone .underconstruction-wrapper-header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
    .sm-phone .underconstruction-wrapper-paragraphs {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        padding: 0 5vw;
        width: 100%;
        height: 63vh;
        height: 63dvh;
        box-sizing: border-box;
        /* 63vh can exceed the room available in landscape, so cap it
           to the space the flex parent actually has and let it scroll
           rather than be clipped away by the section overflow:hidden. */
        max-height: 100%;
        overflow-y: auto;
    }

    /* Description Section */
    .sm-phone .underconstruction_p {
        padding: 0 1.25%; /* instead of 12.5rem / 200px */
        text-align: center;
    }

    .sm-phone .underconstruction_p1 {
        font-size: 3rem;
    }
    .sm-phone .underconstruction_p2 {
        font-size: 3.25rem;
    }
    .sm-phone .underconstruction_p3 {
        font-size: 3.5rem;
    }

    /* Call to Action Boxes */
    .sm-phone .contact_underconstruction_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .sm-phone .contact_underconstruction_p1 {
        font-size: 2rem;
    }
    .sm-phone .contact_underconstruction_p2 {
        font-size: 2.25rem;
    }

    /* Under Construction Page - Section 4 */
    /* Footer */
    .sm-phone .page_content_underconstruction:nth-child(4) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. MAIN SERVICES PAGE
        ───────────────────────────────────────────────────────────── */
    /* Main Services Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .xs-phone .main-services-wrapper {
        padding: 4rem 0;
    }

    /* Main Services Page - Section 2 */
    /* Header */
    .sm-phone .main-services-wrapper .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .sm-phone .main-services-wrapper .page_content_main_services:nth-child(1) h1 {
        font-size: 3.5rem;
    }

    /* Main Services Page - Section 3 */
    /* Categories Groups */
    .sm-phone .main-services-wrapper .page_content_main_services:nth-child(2) {
        width: 100%;
    }
        /* List Layout */
    .sm-phone .vertical-layout {
        display: flex;
        flex-direction: column;
        padding: 2rem 5vw;
    }
    .sm-phone .horizonal-layout {
        display: flex;
        margin: 4% 0 0 0;
    }

    /* ───────────  business logo  ─────────── */
    .sm-phone .card-part-1 {
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 15rem; /* 192px */
        max-width: 15rem;
        min-height: 15rem;
        max-height: 15rem;
    }

    /* ───────────  Description  ──────────── */
    .sm-phone .card-part-2 .p1 {
        font-size: 2rem;
    }
    .sm-phone .card-part-2 .p2 {
        font-size: 1.6rem;
    }
    .sm-phone .card-part-2 .p3 {
        font-size: 1.8rem;
        margin: 1.5rem 0.5rem;
    }
    .sm-phone .category-buttons-inline-ms .category-button-ms {
        font-size: 1.6rem;
    }

    /* ───────────  Location  ─────────── */
    .sm-phone .card-part-3 {
        background-color: var(--blb-surface);
        border-top-right-radius: 3.125rem;
        border-right: 0;
    }
    .sm-phone .card-part-3-1 {
        font-size: 2.2rem;
        margin: 5% 7.5%;
    }
    .sm-phone .card-part-3-2 {
        font-size: 1.6rem;
        margin: 5% 7.5%;
    }
    .sm-phone .card-part-3-3 {
        font-size: 2rem;
        margin: 5% 7.5%;
    }
    .sm-phone .card-part-3-3 p a {
        color: var(--blb-highlight);
    }

    /* ───────────  Social Media  ─────────── */
    .sm-phone .card-part-4 {
        align-items: center;
        justify-content: center;
        gap: 5rem;
        margin: 3.5% 20% 1% 20%;
        flex-direction: row;
    }

    /* ───────────  Business Card Overlay (Base) ─────────── */
    /* Modal Card Container */
    .sm-phone #businessModal .modal-content {
        padding: 0;
        margin: 0 1rem;
        top: 0rem;
        width: 90%;
        max-width: 90vw;
        height: 90%;
        max-height: 90vh;
        max-height: 90dvh;
    }

    .sm-phone .modal-header-bar {
        padding: 0.5rem 1rem;
        border-bottom: 1px solid var(--blb-border-3);
        align-items: center;
    }

    .sm-phone .modal-header-bar .close-modal {
        font-size: 3rem;
        padding: 0 0.25rem;
    }

    /* Modal Typography */

    /* Optional: Divider Line */
    .sm-phone #businessModal hr {
        border: none;
        border-top: 1px solid var(--blb-border-3);
        margin: 1.5rem 0;
    }

    /* ───────────  Business Card Layout Grid (Content) ─────────── */
    .sm-phone .modal-business-grid {
        grid-template-columns: 1fr;
    }

     /* Business Info 1 */
    .sm-phone .modal-business-info-1 {
        color: var(--blb-text);
        padding: 1rem 0 0 1rem;
        max-width: 368px;
    }
    .sm-phone .modal-business-header {
        font-size: 4.25rem;
        padding-top: 1rem;
    }
    .sm-phone .modal-business-services {
        font-size: 2.75rem;
        font-style: italic;
        margin-bottom: 0.5rem;
    }
    .sm-phone .modal-business-info-headings {
        color: var(--blb-text);
        font-size: 1.85rem;
        padding-top: 1rem;
    }
    .sm-phone .modal-business-info-address {
        font-size: 2.25rem;
    }
    .sm-phone .modal-business-info-phone {
        font-size: 2.25rem;
    }

     /* Business Website Link */
    .sm-phone .modal-business-info-website {
        margin: 2rem 0;
        padding: 0.5rem 1.25rem;
        background-color: var(--blb-accent);
        font-size: 1.8rem;
    }
    .sm-phone .modal-business-info-website:hover {
        color: var(--blb-highlight);
        text-shadow: 0 0 0.5rem var(--blb-highlight);
    }
    
     /* Business Image Gallery */
    .sm-phone .modal-business-gallery {
        max-width: 100%; /* 4 images * 64px + spacing */
        margin: 1rem 0;
    }
    .sm-phone .modal-business-gallery img {
        scroll-snap-align: start;
    }

    .sm-phone .modal-business-gallery img,
    .sm-phone .modal-thumb {
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: 0.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    border: 0 solid var(--blb-border-2);
    transition: transform 0.2s ease, border 0.2s ease;
    cursor: pointer;
    }
    .sm-phone .modal-thumb {
        padding: 1rem;
    }

    .sm-phone .modal-business-gallery img:hover,
    .sm-phone .modal-thumb:hover {
    transform: scale(1);
    }

    /* Highlight Active Thumbnail */
    .sm-phone .modal-thumb.active {
    border: 2px solid var(--blb-accent);
    transform: scale(1);
    }

    /* Carousel Navigation Arrows */
    .sm-phone .carousel-nav-left {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 2rem 0 0;
    }

    .sm-phone .carousel-nav-right {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 0 0 2rem;
    }

    .sm-phone .carousel-nav:hover {
        color: var(--blb-white);
    }

    /* Main Zoomable Image */
    .sm-phone .modal-carousel {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 1rem;
    }

    .sm-phone #modal-carousel-img {
        max-height: 340px;
        border-radius: 0.75rem;
        transition: transform 0.35s ease;
    }

    .sm-phone .zoom-bounce {
        animation: zoomBounce 0.35s ease;
    }

    @keyframes zoomBounce {
        0%   { transform: scale(1); }
        50%  { transform: scale(1.12); }
        100% { transform: scale(1); }
    }

    /* Image Preview Modal */
    .sm-phone .image-preview-modal {
        padding: 0;
        background-color: transparent;
        box-shadow: none;
        max-width: 90vw;
        max-height: 90vh;
        max-height: 90dvh;
        padding-top: 75%;
    }
    
    /* The actual preview image */
    .sm-phone #imagePreviewContent {
        max-width: 100%;
        max-height: 100%;
        width: auto;
        height: auto;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        justify-content: center;
        align-items: center;
    }
    
    .sm-phone #imagePreviewModal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }

    .sm-phone #imagePreviewModal img {
        max-width: 100%;
        max-height: 100%;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        
    }
    /* Scrollbar for WebKit browsers */
    .sm-phone .modal-business-gallery::-webkit-scrollbar {
        height: 8px;
    }
    .sm-phone .modal-business-gallery::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .sm-phone .modal-business-gallery::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    /* Business Hours */
    .sm-phone .modal-business-hours {
        margin-top: 1rem;
    }

    .sm-phone .modal-business-hours p {
        font-weight: bold;
        margin-bottom: 0.5rem;
    }

    .sm-phone .hours-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 2rem;
        color: var(--blb-text-muted);
    }

    .sm-phone .hours-table td {
        padding: 0.3rem 0.5rem;
    }

    .sm-phone .hours-table .day {
        font-weight: 600;
        color: var(--blb-white);
        width: 40%;
    }

    .sm-phone .hours-table .time {
        color: var(--blb-text-faint);
        text-align: right;
    }

    /* Business Info 2 */
    /* Business Map */
    .sm-phone .modal-business-map {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-right: 1rem; /* prevents overlap with close button */
        height: 250px;
    }
    .sm-phone .modal-business-map hr,
    .sm-phone .modal-business-map p,
    .sm-phone .modal-business-map ul {
        margin-left: 0.25rem;
    }

    
     /* Business Description */
    .sm-phone .modal-business-info-description {
        color: var(--blb-white);
        font-size: 2rem;
    }

    /* Modal Business Category Buttons */

    .sm-phone .modal-business-category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    .sm-phone .modal-business-info-headings-services {
        padding-bottom: 1rem;
    }
    .sm-phone .modal-business-category-button {
        color: var(--blb-text);
        background-color: var(--blb-surface);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1rem; /* 20px */
        padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
        font-size: 1.6rem;
        font-family: var(--blb-font-serif);
        cursor: pointer;
        transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    }
    .sm-phone .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }
    .sm-phone .modal-business-category-buttons-inline-ms .modal-business-category-button {
        background-color: var(--blb-surface);
        color: var(--blb-text);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1.25rem;
        padding: 0.375rem 0.875rem; /* 6px, 14px */
        font-size: 1.6rem;
        font-family: var(--blb-font-sans);
        cursor: pointer;
        transition: all 0.3s ease;
        margin: 0 0 0.5rem 0.5rem;
    }
    .sm-phone .modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }

    /* Main Services Page - Section 4 */
    /* Footer */
    .sm-phone .main-services-wrapper .page_content_main_services:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
    }
}

/* lg-phone: landscape only - portrait 601-767 now uses the scaled
   sm-phone styles above (tablet-portrait treatment) */
@media (min-width: 601px) and (max-width: 767px) and (orientation: landscape) {
   /* ────────────────────────────────────────────────────────────────
   00. NAVIGATION MENU BAR
   ───────────────────────────────────────────────────────────── */
    .lg-phone .blb_logo {
        width: 8.5rem; /* 105.6px */
    }
    .lg-phone .menu_icon {    
        width: 5.8rem; /* 64px */
    }

    /* ────────────────────────────────────────────────────────────────
    Navigation
    ───────────────────────────────────────────────────────────── */
    .lg-phone .nav_main {
        padding: 2rem 2.75rem;
    }

    /* Side Menu */
    .lg-phone .sidebar-open #mySidenav {
        width: 33%; 
    }
    .lg-phone .nav_side {
        border-top-left-radius: 3rem;
        border-bottom-left-radius: 3rem;
    }

    .lg-phone .nav_content:nth-child(1) {
        align-items: center;
        justify-content: space-between; /* space between left and right */
        padding: 1.5rem;
        font-size: 5rem;
    }

    .lg-phone .a_left, .xs-phone .a_right {
        display: flex;
        align-items: center;
        width: auto;
    }

    .lg-phone .a_left {
        justify-content: flex-start;
    }

    .lg-phone .a_right {
        display: flex;
        justify-content: flex-end;
        align-items: center;   /* ✅ vertical centering */
        height: 100%;          /* make sure it has height context */
    }

    .lg-phone .closebtn_side {
        color: var(--blb-white);
        padding-left: 1.25rem;
        text-decoration: none;
    }

    .lg-phone .heartbtn_side {
        position: relative;
        color: var(--blb-heart);
        padding-right: 1.75rem;
        text-decoration: none;
        top: 0.15rem;
    }

    .lg-phone .heartbtn_side img {
        display: block;
        height: 2.75rem;          /* or whatever size you want */
    }

    .lg-phone .nav_content:nth-child(2) { 
        height: 10%;
        width: 100%;
        align-content: center;
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    .lg-phone .nav_content:nth-child(2) h1 {
        font-size: 5rem;
    }
    .lg-phone .nav_content:nth-child(3) { 
        align-items: flex-start;   /* Align items to the left*/
        flex-direction: column;
        justify-content: flex-start;
        gap: 1rem;
        padding: 2rem;
    }
    .lg-phone .nav_content:nth-child(4) { 
        align-items: center;
        justify-content: center;
    }

    /* Use flex-grow ratios — these will perfectly fill the height */
    /* Shared style for all sections */
    .lg-phone .nav_content {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 3.5rem;
    }

    /* Social Media */
    .lg-phone .face_img_2 {
        width: 7rem; /* 64px */
    }

    .lg-phone .face_btn, .lg-phone .insta_btn, .lg-phone .blank_img {
        padding: 1rem;
    }
    .lg-phone .face_img, .lg-phone .insta_img, .lg-phone .blank_img {
        width: 2.5rem; /* 32px */
    }

    /* ────────────────────────────────────────────────────────────────
    Modal Overlay
    ───────────────────────────────────────────────────────────── */
    .lg-phone .modal-overlay {
        justify-content:center;
        align-items: flex-start;
    }

    /* Modal Content */
    .lg-phone .modal-content {
        top: 2.25rem;
        padding: 2.25rem;
    }

    /* Search Input */
    .lg-phone .search-input {
        font-size: 2.25rem;
        width: 100%;
        max-width: 90%;
    }

    /* Close Button */
    .lg-phone .close-modal {
        top: -0.75rem;
        right: -0.25rem;
        font-size: 3rem;
    }

    .lg-phone .suggestions-list {
        font-size: 2.25rem;
    }

    .lg-phone .suggestions-list li:hover {
        background-color: var(--blb-surface-4);
    }

    .lg-phone .suggestions-list img {
        height: 1.4rem;
        width: auto;
        flex-shrink: 0;
    }

    .lg-phone .suggestions-list::-webkit-scrollbar {
        width: 8px;
    }
    .lg-phone .suggestions-list::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .lg-phone .suggestions-list::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    .lg-phone .search-tooltip {
        top: 5.5rem;
        font-size: 1.4rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1A. HOME PAGE
    ───────────────────────────────────────────────────────────── */

    /* Home Page - Section 1 */
    /* Navigation Menu Bar */
    .lg-phone .page_content_home:nth-child(1) {
        height: 12.5%;
        align-items: center;
        justify-content: center;
    }

    /* Home Page - Section 2 */
    /* Header */
    .lg-phone .page_content_home:nth-child(2) {
        align-items: center;
        justify-content: center;
    }
    .lg-phone .section_home h1 {
        font-size: 6rem;
    }

    /* Home Page - Section 3 */
    /* Carousel Main Buttons */
    .lg-phone .page_content_home:nth-child(3) {
        height: 60%;
        width: 100%;
    }

    .lg-phone .carousel-wrapper {
        perspective: 1600px;
    }

    .lg-phone .carousel-item {
        margin: -8.40rem; /* -84px */
    }

    .lg-phone .a_home_box_1 img {
        filter: invert();
        width: 11.75rem; /* 100px */
        height: 11.75rem;
    }

    .lg-phone .a_home_box_1_text p{
        margin-top: 1rem;
        font-size: 2.25rem; 
    }

    /* Carousel Side Buttons */
    .lg-phone .carousel-button {
        height: 18.125rem; /* 290px */
        width: 32.125rem; /* 514px */
    }
    /* Home Page - Section 4 */
    /* Footer */
    .lg-phone .page_content_home:nth-child(4) {
        align-items: center;
        justify-content: center;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
   1A. CALENDAR PAGE
    ───────────────────────────────────────────────────────────── */
    .lg-phone .section_calendar {
        height: 100vh;
        height: 100dvh;
        width: 100%;
        overflow: hidden;
        display: flex;
        flex-direction: column;
    }

    /* Calendar Page - Section 1 */
    /* Navigation Menu Bar */
    .lg-phone .page_content_calendar:nth-child(1) {
        height: 12.5%;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: var(--blb-surface-3);
    }

    /* Calendar Page - Section 2 */
    /* Header */
    /* Sections 2-4 removed with the iframe layout - see the note in the
       .xs-phone block above. */

    .lg-phone .page_content_calendar {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--blb-text);
    }

    /* ────────────────────────────────────────────────────────────────
    1B. CATEGORY PAGE
    ───────────────────────────────────────────────────────────── */

    /* Category Page - Section 1 */
    /* Navigation Menu Bar */
    .lg-phone .page_content_category:nth-child(1) {
        height: 12.5%;
        align-items: center;
        justify-content: center;
    }

    /* Category Page - Section 2 */
    /* Header */
    .lg-phone .category-wrapper {
        padding-right: 0.25rem;
    }

    .lg-phone .category-wrapper .page_content_category:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .lg-phone .category-wrapper .page_content_category:nth-child(1) h1 {
        font-size: 6rem;
    }

    /* Category Page - Section 3 */
    /* Categories Groups */
    .lg-phone .category-wrapper .page_content_category:nth-child(2) {
        width: 100%;
    }

    /* Category Buttons */
    .lg-phone .category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    
    .lg-phone .category-button {
        border-radius: 1.5rem; /* 20px */
        font-size: 3rem;
    }

     .lg-phone .dropdown-header {
        padding: 0.75em;
        cursor: pointer;
        width: 100%;
        border: none;
        font-size: 3em;
        font-weight: bold;
        transition: background-color 0.3s ease;
        background-color: var(--blb-green-deep);
    }

    .lg-phone .dropdown-content {
        display: none;
        padding: 1em;
        background-color: var(--blb-green-deep);
    }

     .lg-phone .dropdown-content.visible {
        display: block;
    }

     .lg-phone .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }

     .lg-phone .category-button:hover {
            background-color: var(--blb-surface-2);
            color: var(--blb-accent);
            box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }

    /* Category Page - Section 4 */
    /* Footer */
    .lg-phone .category-wrapper .page_content_category:nth-child(3) {
        align-items: center;
        justify-content: center;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. ABOUT PAGE
    ───────────────────────────────────────────────────────────── */
    /* About Page - Section 1 */
    /* Navigation Menu Bar */
    .lg-phone .page_content_about:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 12.5%;
    }

    /* About Page - Section 2 */
    /* Header */
    .lg-phone .about-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 1rem;
        box-sizing: content-box;
    }
    .lg-phone .about-wrapper .page_content_about:nth-child(1) {
        width: 100%;
        display: flex;
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 16vh 0 10vh 0;
    }

    /* Old About headings removed - see the note in the .xs-phone block. */

    /* About Page - Section 3 */
    /* Content Description */
    .lg-phone .about-wrapper .page_content_about:nth-child(2) {
        width: 100%;
    }

    .lg-phone .about-wrapper-paragraphs {
        padding: 0 2.5vw 20vw 2.5vw;
    }

    /* Description Section */
    .lg-phone .about_p {
        padding: 0 1.5%; /* instead of 12.5rem / 200px */
        text-align: left;
        font-size: 2.5rem;
    }

    .lg-phone .about_p1 {
        text-align: left;
        padding: 2vh 3.5vw 0.75vh 3.5vw;
    }
    .lg-phone .about_p2 {
        text-align: left;
    }
    .lg-phone .about_p3 {
        text-align: left;
    }

    /* Call to Action Boxes */
    .lg-phone .contact_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .lg-phone .contact_p1 {
        font-size: 2.25rem;
    }
    .lg-phone .contact_p2 {
        font-size: 2.5rem;
        padding: 0 2rem;
    }

    /* About Page - Section 4 */
    /* Footer */
    .lg-phone .about-wrapper .page_content_about:nth-child(3) {
        position: relative;
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
        padding: 1vh 0 0 0;
        bottom: 3.5vh;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. UNDER CONSTRUCTION PAGE
    ───────────────────────────────────────────────────────────── */
    /* Under Construction Page - Section 1 */
    /* Navigation Menu Bar */
    .lg-phone .page_content_underconstruction:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 12.5%;
    }

    /* Under Construction Page - Section 2 */
    /* Header */
    .lg-phone .page_content_underconstruction:nth-child(2) {
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 6vh 0 10vh 0;
        box-sizing: border-box;
    }
    .lg-phone .section_underconstruction h1 {
        font-size: 6rem;
    }
    .lg-phone .section_underconstruction h2 {
        font-size: 4.75rem;
    }
    .lg-phone .section_underconstruction h3 {
        font-size: 3.5rem;
    }

    /* Under Construction Page - Section 3 */
    /* Content Description */
    .lg-phone .page_content_underconstruction:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .lg-phone .underconstruction-wrapper-header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
    .lg-phone .underconstruction-wrapper-paragraphs {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        padding: 0 5vw;
        width: 100%;
        height: 63vh;
        height: 63dvh;
        box-sizing: border-box;
        /* 63vh can exceed the room available in landscape, so cap it
           to the space the flex parent actually has and let it scroll
           rather than be clipped away by the section overflow:hidden. */
        max-height: 100%;
        overflow-y: auto;
    }

    /* Description Section */
    .lg-phone .underconstruction_p {
        padding: 0 1.25%; /* instead of 12.5rem / 200px */
        text-align: center;
    }

    .lg-phone .underconstruction_p1 {
        font-size: 3rem;
    }
    .lg-phone .underconstruction_p2 {
        font-size: 3.25rem;
    }
    .lg-phone .underconstruction_p3 {
        font-size: 3.5rem;
    }

    /* Call to Action Boxes */
    .lg-phone .contact_underconstruction_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .lg-phone .contact_underconstruction_p1 {
        font-size: 2rem;
    }
    .lg-phone .contact_underconstruction_p2 {
        font-size: 2.25rem;
    }

    /* Under Construction Page - Section 4 */
    /* Footer */
    .lg-phone .page_content_underconstruction:nth-child(4) {
        align-content: flex-start;
        justify-content: flex-start;
        align-items: flex-start;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. MAIN SERVICES PAGE
        ───────────────────────────────────────────────────────────── */
    /* Main Services Page - Section 1 */
    /* Navigation Menu Bar */

    .lg-phone .main-services-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 0;
        box-sizing: content-box;
        background-color: var(--blb-green-deep);
    }
    .lg-phone .page_content_main_services:nth-child(1) {
        height: 12.5%;
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Main Services Page - Section 2 */
    /* Header */
    .lg-phone .main-services-wrapper .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .lg-phone .main-services-wrapper .page_content_main_services:nth-child(1) h1 {
        font-size: 5rem;
    }

    /* Main Services Page - Section 3 */
    /* Categories Groups */
    .lg-phone .main-services-wrapper .page_content_main_services:nth-child(2) {
        position: relative;
        display: flex;
        width: 80%;
        align-content: center;
        justify-content: center;
        align-items: center;
        margin: 0 auto;  
    }


    .lg-phone .vertical-layout {
        flex-direction: column;
        padding: 0 5vw;
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    /* List Layout */

    /* ───────────  business logo  ─────────── */
    .lg-phone .card-part-1 {
        flex: 2 1 6rem;
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 18rem;
        max-width: 18rem;
        min-height: 18rem;
        max-height: 18rem;
    }
    .lg-phone .card-part-2 {
        flex: 3 1 50rem;
        /*background-color: var(--blb-green);*/
        background-color: var(--blb-green);
        border-bottom: 1px solid var(--blb-green-deep);
        border-bottom-left-radius: 3.125rem;
        border-bottom-right-radius: 3.125rem;
        flex-direction: column;
        padding: 0.5rem 0.5rem;
    }

    /* ───────────  Description  ──────────── */
    .lg-phone .card-part-2 .p1 {
        font-size: 2rem;
    }
    .lg-phone .card-part-2 .p2 {
        font-size: 1.35rem;
    }
    .lg-phone .card-part-2 .p3 {
        font-size: 1.55rem;
        margin: 1.5rem 0.5rem;
    }
    .lg-phone .category-buttons-inline-ms .category-button-ms {
        font-size: 1.6rem;
    }

    /* ───────────  Location  ─────────── */
    .lg-phone .card-part-3 {
        flex: 1 1 16rem;
        background-color: var(--blb-surface);
        border-right: 0;
    }
    .lg-phone .card-part-3-1 {
        font-size: 2.5rem;
        margin: 5% 5%;
    }
    .lg-phone .card-part-3-2 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .lg-phone .card-part-3-3 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .lg-phone .card-part-3-3 p a {
        color: var(--blb-highlight);
    }

    /* ───────────  Social Media  ─────────── */
    .lg-phone .card-part-4 {
        border-top-right-radius: 3.125rem;
        align-items: flex-start;
        justify-content: flex-start;
        background-color: var(--blb-surface);
        flex: 0 0  2rem;
        padding: 1% 0 1% 0;

        gap: 0rem;
        flex-direction: column;
    }

    /* ───────────  Business Card Overlay (Base) ─────────── */
    /* Modal Card Container */
    .lg-phone #businessModal .modal-content {
        padding: 0;
        margin: 0 1rem;
        top: 0rem;
        width: 90%;
        max-width: 90vw;
        height: 90%;
        max-height: 90vh;
        max-height: 90dvh;
    }

    .lg-phone .modal-header-bar {
        padding: 0.5rem 1rem;
        border-bottom: 1px solid var(--blb-border-3);
        align-items: center;
    }

    .lg-phone .modal-header-bar .close-modal {
        font-size: 3rem;
        padding: 0 0.25rem;
    }

    /* Modal Typography */
    /* Optional: Divider Line */
    .lg-phone #businessModal hr {
        border: none;
        border-top: 1px solid var(--blb-border-3);
        margin: 1.5rem 0;
    }

    /* ───────────  Business Card Layout Grid (Content) ─────────── */
    .lg-phone .modal-business-grid {
        grid-template-columns: 1fr;
    }

     /* Business Info 1 */
    .lg-phone .modal-business-info-1 {
        color: var(--blb-text);
        padding: 1rem 2rem 0 2rem;
        max-width: 655px;
    }
    .lg-phone .modal-business-header {
        font-size: 4.25rem;
        padding-top: 1rem;
    }
    .lg-phone .modal-business-services {
        font-size: 2.75rem;
        font-style: italic;
        margin-bottom: 0.5rem;
    }
    .lg-phone .modal-business-info-headings {
        color: var(--blb-text);
        font-size: 1.85rem;
        padding-top: 1rem;
    }
    .lg-phone .modal-business-info-address {
        font-size: 2.25rem;
    }
    .lg-phone .modal-business-info-phone {
        font-size: 2.25rem;
    }

     /* Business Website Link */
    .lg-phone .modal-business-info-website {
        margin: 1rem 0;
        padding: 0.5rem 1.25rem;
        background-color: var(--blb-accent);
    }
    .lg-phone .modal-business-info-website:hover {
        color: var(--blb-highlight);
        text-shadow: 0 0 0.5rem var(--blb-highlight);
    }
    
     /* Business Image Gallery */
    .lg-phone .modal-business-gallery {
        max-width: 100%; /* 4 images * 64px + spacing */
        margin: 1rem 0;
    }
    .lg-phone .modal-business-gallery img {
        scroll-snap-align: start;
    }

    .lg-phone .modal-business-gallery img,
    .lg-phone .modal-thumb {
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: 0.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    border: 0 solid var(--blb-border-2);
    transition: transform 0.2s ease, border 0.2s ease;
    cursor: pointer;
    }
    .lg-phone .modal-thumb {
        padding: 1rem;
    }

    .lg-phone .modal-business-gallery img:hover,
    .lg-phone .modal-thumb:hover {
    transform: scale(1);
    }

    /* Highlight Active Thumbnail */
    .lg-phone .modal-thumb.active {
    border: 2px solid var(--blb-accent);
    transform: scale(1);
    }

    /* Carousel Navigation Arrows */
    .lg-phone .carousel-nav-left {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 2rem 0 0;
    }

    .lg-phone .carousel-nav-right {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 0 0 2rem;
    }

    .lg-phone .carousel-nav:hover {
        color: var(--blb-white);
    }

    /* Main Zoomable Image */
    .lg-phone .modal-carousel {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 1rem;
    }

    .lg-phone #modal-carousel-img {
        max-height: 340px;
        border-radius: 0.75rem;
        transition: transform 0.35s ease;
    }

    .lg-phone .zoom-bounce {
        animation: zoomBounce 0.35s ease;
    }

    @keyframes zoomBounce {
        0%   { transform: scale(1); }
        50%  { transform: scale(1.12); }
        100% { transform: scale(1); }
    }

    /* Image Preview Modal */
    .lg-phone .image-preview-modal {
        padding: 0;
        background-color: transparent;
        box-shadow: none;
        max-width: 90vw;
        max-height: 90vh;
        max-height: 90dvh;
        padding-top: 75%;
    }
    
    /* The actual preview image */
    .lg-phone #imagePreviewContent {
        max-width: 100%;
        max-height: 100%;
        width: auto;
        height: auto;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        justify-content: center;
        align-items: center;
    }
    
    .lg-phone #imagePreviewModal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }

    .lg-phone #imagePreviewModal img {
        max-width: 100%;
        max-height: 100%;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        
    }
    /* Scrollbar for WebKit browsers */
    .lg-phone .modal-business-gallery::-webkit-scrollbar {
        height: 8px;
    }
    .lg-phone .modal-business-gallery::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .lg-phone .modal-business-gallery::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    /* Business Hours */
    .lg-phone .modal-business-hours {
        margin-top: 1rem;
    }

    .lg-phone .modal-business-hours p {
        font-weight: bold;
        margin-bottom: 0.5rem;
    }

    .lg-phone .hours-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 2rem;
        color: var(--blb-text-muted);
    }

    .lg-phone .hours-table td {
        padding: 0.3rem 0.5rem;
    }

    .lg-phone .hours-table .day {
        font-weight: 600;
        color: var(--blb-white);
        width: 40%;
    }

    .lg-phone .hours-table .time {
        color: var(--blb-text-faint);
        text-align: right;
    }

    /* Business Info 2 */
    /* Business Map */
    .lg-phone .modal-business-map {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-right: 1rem; /* prevents overlap with close button */
        height: 250px;
    }
    .lg-phone .modal-business-map hr,
    .lg-phone .modal-business-map p,
    .lg-phone .modal-business-map ul {
        margin-left: 0.25rem;
    }

     /* Business Description */
    .lg-phone .modal-business-info-description {
        color: var(--blb-white);
        font-size: 2rem;
    }

    /* Modal Business Category Buttons */
    .lg-phone .modal-business-category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    .lg-phone .modal-business-info-headings-services {
        padding-bottom: 1rem;
    }
    .lg-phone .modal-business-category-button {
        color: var(--blb-text);
        background-color: var(--blb-surface);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1rem; /* 20px */
        padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
        font-size: 1.6rem;
        font-family: var(--blb-font-serif);
        cursor: pointer;
        transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    }
    .lg-phone .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }
    .lg-phone .modal-business-category-buttons-inline-ms .modal-business-category-button {
        background-color: var(--blb-surface);
        color: var(--blb-text);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1.25rem;
        padding: 0.375rem 0.875rem; /* 6px, 14px */
        font-size: 1.6rem;
        font-family: var(--blb-font-sans);
        cursor: pointer;
        transition: all 0.3s ease;
        margin: 0 0 0.5rem 0.5rem;
    }
    .lg-phone .modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }

    /* Main Services Page - Section 4 */
    /* Footer */
    .lg-phone .main-services-wrapper .page_content_main_services:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
    }
}

@media(min-width: 768px) and (max-width: 849px) {
   /* ────────────────────────────────────────────────────────────────
   00. NAVIGATION MENU BAR
   ───────────────────────────────────────────────────────────── */
    .xs-phone-land .blb_logo {
        width: 8.5rem; /* 105.6px */
    }
    .xs-phone-land .menu_icon {    
        width: 5.8rem; /* 64px */
    }

    /* ────────────────────────────────────────────────────────────────
    Navigation
    ───────────────────────────────────────────────────────────── */
    .xs-phone-land .nav_main {
        padding: 2rem 2.75rem;
    }

    /* Side Menu */
    .xs-phone-land .sidebar-open #mySidenav {
        width: 33%; 
    }
    .xs-phone-land .nav_side {
        border-top-left-radius: 3rem;
        border-bottom-left-radius: 3rem;
    }

    .xs-phone-land .nav_content:nth-child(1) {
        align-items: center;
        justify-content: space-between; /* space between left and right */
        padding: 1.5rem;
        font-size: 5rem;
    }

    .xs-phone-land .a_left, .xs-phone .a_right {
        display: flex;
        align-items: center;
        width: auto;
    }

    .xs-phone-land .a_left {
        justify-content: flex-start;
    }

    .xs-phone-land .a_right {
        display: flex;
        justify-content: flex-end;
        align-items: center;   /* ✅ vertical centering */
        height: 100%;          /* make sure it has height context */
    }

    .xs-phone-land .closebtn_side {
        color: var(--blb-white);
        padding-left: 1.25rem;
        text-decoration: none;
    }

    .xs-phone-land .heartbtn_side {
        position: relative;
        color: var(--blb-heart);
        padding-right: 1.75rem;
        text-decoration: none;
        top: 0.15rem;
    }

    .xs-phone-land .heartbtn_side img {
        display: block;
        height: 2.75rem;          /* or whatever size you want */
    }

    .xs-phone-land .nav_content:nth-child(2) { 
        height: 10%;
        width: 100%;
        align-content: center;
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    .xs-phone-land .nav_content:nth-child(2) h1 {
        font-size: 4rem;
    }
    .xs-phone-land .nav_content:nth-child(3) { 
        align-items: flex-start;   /* Align items to the left*/
        flex-direction: column;
        justify-content: flex-start;
        gap: 1rem;
        padding: 2rem;
    }

    .xs-phone-land .nav_content:nth-child(3) a { 
        font-size: 3rem;
    }

    .xs-phone-land .nav_content:nth-child(4) { 
        align-items: center;
        justify-content: center;
    }

    /* Use flex-grow ratios — these will perfectly fill the height */
    /* Shared style for all sections */
    .xs-phone-land .nav_content {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 3.5rem;
    }

    /* Social Media */
    .xs-phone-land .face_img_2 {
        width: 4.5rem; /* 64px */
    }

    .xs-phone-land .face_btn, .xs-phone-land .insta_btn, .xs-phone-land .blank_img {
        padding: 1rem;
    }
    .xs-phone-land .face_img, .xs-phone-land .insta_img, .xs-phone-land .blank_img {
        width: 2.5rem; /* 32px */
    }

    /* ────────────────────────────────────────────────────────────────
    Modal Overlay
    ───────────────────────────────────────────────────────────── */
    .xs-phone-land .modal-overlay {
        justify-content:center;
        align-items: flex-start;
    }

    /* Modal Content */
    .xs-phone-land .modal-content {
        top: 2.25rem;
        padding: 2.25rem;
    }

    /* Search Input */
    .xs-phone-land .search-input {
        font-size: 2.25rem;
        width: 100%;
        max-width: 90%;
    }

    /* Close Button */
    .xs-phone-land .close-modal {
        top: -0.75rem;
        right: -0.25rem;
        font-size: 3rem;
    }

    .xs-phone-land .suggestions-list {
        font-size: 2.25rem;
    }

    .xs-phone-land .suggestions-list li:hover {
        background-color: var(--blb-surface-4);
    }

    .xs-phone-land .suggestions-list img {
        height: 1.4rem;
        width: auto;
        flex-shrink: 0;
    }

    .xs-phone-land .suggestions-list::-webkit-scrollbar {
        width: 8px;
    }
    .xs-phone-land .suggestions-list::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .xs-phone-land .suggestions-list::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    .xs-phone-land .search-tooltip {
        top: 5.5rem;
        font-size: 1.4rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1A. HOME PAGE
    ───────────────────────────────────────────────────────────── */

    /* Home Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone-land .page_content_home:nth-child(1) {
        height: 16.5%;
        align-items: center;
        justify-content: center;
    }

    /* Home Page - Section 2 */
    /* Header */
    .xs-phone-land .page_content_home:nth-child(2) {
        align-items: center;
        justify-content: center;
    }
    .xs-phone-land .section_home h1 {
        font-size: 6rem;
    }

    /* Home Page - Section 3 */
    /* Carousel Main Buttons */
    .xs-phone-land .page_content_home:nth-child(3) {
        height: 60%;
        width: 100%;
    }

    .xs-phone-land .carousel-wrapper {
        perspective: 1600px;
    }

    .xs-phone-land .carousel-item {
        margin: -7.5rem; /* -84px */
    }

    .xs-phone-land .a_home_box_1 img {
        filter: invert();
        width: 9.75rem; /* 100px */
        height: 9.75rem;
    }

    .xs-phone-land .a_home_box_1_text p{
        margin-top: 0.5rem;
        font-size: 2.25rem; 
    }

    /* Carousel Side Buttons */
    .xs-phone-land .carousel-button {
        height: 18.125rem; /* 290px */
        width: 32.125rem; /* 514px */
    }
    /* Home Page - Section 4 */
    /* Footer */
    .xs-phone-land .page_content_home:nth-child(4) {
        align-items: center;
        justify-content: center;
        font-size: 1.5rem;
    }

        /* ────────────────────────────────────────────────────────────────
   1A. CALENDAR PAGE
    ───────────────────────────────────────────────────────────── */
    .xs-phone-land .section_calendar {
        height: 100vh;
        height: 100dvh;
        width: 100%;
        overflow: hidden;
        display: flex;
        flex-direction: column;
    }

    /* Calendar Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone-land .page_content_calendar:nth-child(1) {
        height: 16.5%;
        align-items: center;
        justify-content: center;
    }

    /* Calendar Page - Section 2 */
    /* Header */
    /* Sections 2-4 removed with the iframe layout - see the note in the
       .xs-phone block above. */

    .xs-phone-land .page_content_calendar {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--blb-text);
    }

    /* ────────────────────────────────────────────────────────────────
    1B. CATEGORY PAGE
    ───────────────────────────────────────────────────────────── */

    /* Category Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone-land .page_content_category:nth-child(1) {
        height: 16.5%;
        align-items: center;
        justify-content: center;
    }

    /* Category Page - Section 2 */
    /* Header */
    .xs-phone-land .category-wrapper {
        padding-right: 0.25rem;
    }

    .xs-phone-land .category-wrapper .page_content_category:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .xs-phone-land .category-wrapper .page_content_category:nth-child(1) h1 {
        font-size: 6rem;
    }

    /* Category Page - Section 3 */
    /* Categories Groups */
    .xs-phone-land .category-wrapper .page_content_category:nth-child(2) {
        width: 100%;
    }

    /* Category Buttons */
    .xs-phone-land .category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    
    .xs-phone-land .category-button {
        border-radius: 1.5rem; /* 20px */
        font-size: 3rem;
    }

     .xs-phone-land .dropdown-header {
        padding: 0.75em;
        cursor: pointer;
        width: 100%;
        border: none;
        font-size: 3em;
        font-weight: bold;
        transition: background-color 0.3s ease;
        background-color: var(--blb-green-deep);
    }

    .xs-phone-land .dropdown-content {
        display: none;
        padding: 1em;
        background-color: var(--blb-green-deep);
    }

     .xs-phone-land .dropdown-content.visible {
        display: block;
    }

     .xs-phone-land .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }

     .xs-phone-land .category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }


    /* Category Page - Section 4 */
    /* Footer */
    .xs-phone-land .category-wrapper .page_content_category:nth-child(3) {
        align-items: center;
        justify-content: center;
        font-size: 2rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. ABOUT PAGE
    ───────────────────────────────────────────────────────────── */
    /* About Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone-land .page_content_about:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 16.5%;
    }

    /* About Page - Section 2 */
    /* Header */
    .xs-phone-land .about-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 1rem;
        box-sizing: content-box;
    }
    .xs-phone-land .about-wrapper .page_content_about:nth-child(1) {
        width: 100%;
        display: flex;
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 24vh 0 18vh 0;
    }

    /* Old About headings removed - see the note in the .xs-phone block. */

    /* About Page - Section 3 */
    /* Content Description */
    .xs-phone-land .about-wrapper .page_content_about:nth-child(2) {
        width: 100%;
    }

    .xs-phone-land .about-wrapper-paragraphs {
        padding: 0 2.5vw 20vw 2.5vw;
    }

    /* Description Section */
    .xs-phone-land .about_p {
        padding: 0 1.5%; /* instead of 12.5rem / 200px */
        text-align: left;
        font-size: 2.5rem;
    }

    .xs-phone-land .about_p1 {
        text-align: left;
        padding: 2vh 3.5vw 0.75vh 3.5vw;
    }
    .xs-phone-land .about_p2 {
        text-align: left;
    }
    .xs-phone-land .about_p3 {
        text-align: left;
    }

    /* Call to Action Boxes */
    .xs-phone-land .contact_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .xs-phone-land .contact_p1 {
        font-size: 2rem;
    }
    .xs-phone-land .contact_p2 {
        font-size: 2.5rem;
        padding: 0 2rem;
    }

    /* About Page - Section 4 */
    /* Footer */
    .xs-phone-land .about-wrapper .page_content_about:nth-child(3) {
        position: relative;
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2rem;
        padding: 1vh 0 0 0;
        bottom: 3.5vh;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. UNDER CONSTRUCTION PAGE
    ───────────────────────────────────────────────────────────── */
    /* Under Construction Page - Section 1 */
    /* Navigation Menu Bar */
    .xs-phone-land .page_content_underconstruction:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 12.5%;
    }

    /* Under Construction Page - Section 2 */
    /* Header */
    .xs-phone-land .page_content_underconstruction:nth-child(2) {
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 6vh 0 10vh 0;
        box-sizing: border-box;
    }
    .xs-phone-land .section_underconstruction h1 {
        font-size: 6rem;
    }
    .xs-phone-land .section_underconstruction h2 {
        font-size: 4.75rem;
    }
    .xs-phone-land .section_underconstruction h3 {
        font-size: 3.5rem;
    }

    /* Under Construction Page - Section 3 */
    /* Content Description */
    .xs-phone-land .page_content_underconstruction:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .xs-phone-land .underconstruction-wrapper-header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
    .xs-phone-land .underconstruction-wrapper-paragraphs {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        padding: 0 5vw;
        width: 100%;
        height: 63vh;
        height: 63dvh;
        box-sizing: border-box;
        /* 63vh can exceed the room available in landscape, so cap it
           to the space the flex parent actually has and let it scroll
           rather than be clipped away by the section overflow:hidden. */
        max-height: 100%;
        overflow-y: auto;
    }

    /* Description Section */
    .xs-phone-land .underconstruction_p {
        padding: 0 1.25%; /* instead of 12.5rem / 200px */
        text-align: center;
    }

    .xs-phone-land .underconstruction_p1 {
        font-size: 3rem;
    }
    .xs-phone-land .underconstruction_p2 {
        font-size: 3.25rem;
    }
    .xs-phone-land .underconstruction_p3 {
        font-size: 3.5rem;
    }

    /* Call to Action Boxes */
    .xs-phone-land .contact_underconstruction_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .xs-phone-land .contact_underconstruction_p1 {
        font-size: 2rem;
    }
    .xs-phone-land .contact_underconstruction_p2 {
        font-size: 2.25rem;
    }

    /* Under Construction Page - Section 4 */
    /* Footer */
    .xs-phone-land .page_content_underconstruction:nth-child(4) {
        align-content: flex-start;
        justify-content: flex-start;
        align-items: flex-start;
        font-size: 2rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. MAIN SERVICES PAGE
        ───────────────────────────────────────────────────────────── */
    /* Main Services Page - Section 1 */
    /* Navigation Menu Bar */

    .main-services-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 0;
        box-sizing: content-box;
        background-color: var(--blb-green-deep);
    }
    .xs-phone-land .page_content_main_services:nth-child(1) {
        height: 16.5%;
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Main Services Page - Section 2 */
    /* Header */
    .xs-phone-land .main-services-wrapper .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .xs-phone-land .main-services-wrapper .page_content_main_services:nth-child(1) h1 {
        font-size: 5rem;
    }

    /* Main Services Page - Section 3 */
    /* Categories Groups */
    .xs-phone-land .main-services-wrapper .page_content_main_services:nth-child(2) {
        position: relative;
        display: flex;
        width: 80%;
        align-content: center;
        justify-content: center;
        align-items: center;
        margin: 0 auto;  
    }


    .xs-phone-land .vertical-layout {
        flex-direction: column;
        padding: 0 5vw;
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    /* List Layout */

    /* ───────────  business logo  ─────────── */
    .xs-phone-land .card-part-1 {
        flex: 2 1 6rem;
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 19rem;
        max-width: 19rem;
        min-height: 19rem;
        max-height: 19rem;
    }
    .xs-phone-land .card-part-2 {
        flex: 3 1 50rem;
        /*background-color: var(--blb-green);*/
        background-color: var(--blb-green);
        border-bottom: 1px solid var(--blb-green-deep);
        border-bottom-left-radius: 3.125rem;
        border-bottom-right-radius: 3.125rem;
        flex-direction: column;
        padding: 0.5rem 0.5rem;
    }

    /* ───────────  Description  ──────────── */
    .xs-phone-land .card-part-2 .p1 {
        font-size: 2rem;
    }
    .xs-phone-land .card-part-2 .p2 {
        font-size: 1.35rem;
    }
    .xs-phone-land .card-part-2 .p3 {
        font-size: 1.55rem;
        margin: 1.5rem 0.5rem;
    }
    .xs-phone-land .category-buttons-inline-ms .category-button-ms {
        font-size: 1.6rem;
    }

    /* ───────────  Location  ─────────── */
    .xs-phone-land .card-part-3 {
        flex: 1 1 16rem;
        background-color: var(--blb-surface);
        border-right: 0;
    }
    .xs-phone-land .card-part-3-1 {
        font-size: 2.5rem;
        margin: 5% 5%;
    }
    .xs-phone-land .card-part-3-2 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .xs-phone-land .card-part-3-3 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .xs-phone-land .card-part-3-3 p a {
        color: var(--blb-highlight);
    }

    /* ───────────  Social Media  ─────────── */
    .xs-phone-land .card-part-4 {
        border-top-right-radius: 3.125rem;
        align-items: flex-start;
        justify-content: flex-start;
        background-color: var(--blb-surface);
        flex: 0 0  2rem;
        padding: 1% 0 1% 0;

        gap: 0rem;
        flex-direction: column;
    }

    /* ───────────  Business Card Overlay (Base) ─────────── */
    /* Modal Card Container */
    .xs-phone-land #businessModal .modal-content {
        padding: 0;
        margin: 0 1rem;
        top: 0rem;
        width: 90%;
        max-width: 90vw;
        height: 90%;
        max-height: 90vh;
        max-height: 90dvh;
    }

    .xs-phone-land .modal-header-bar {
        padding: 0.5rem 1rem;
        border-bottom: 1px solid var(--blb-border-3);
        align-items: center;
    }

    .xs-phone-land .modal-header-bar .close-modal {
        font-size: 3rem;
        padding: 0 0.25rem;
    }

    /* Modal Typography */
    /* Optional: Divider Line */
    .xs-phone-land #businessModal hr {
        border: none;
        border-top: 1px solid var(--blb-border-3);
        margin: 1.5rem 0;
    }

    /* ───────────  Business Card Layout Grid (Content) ─────────── */
    .xs-phone-land .modal-business-grid {
        grid-template-columns: 1fr;
    }

     /* Business Info 1 */
    .xs-phone-land .modal-business-info-1 {
        color: var(--blb-text);
        padding: 1rem 2rem 0 2rem;
        max-width: 655px;
    }
    .xs-phone-land .modal-business-header {
        font-size: 4.25rem;
        padding-top: 1rem;
    }
    .xs-phone-land .modal-business-services {
        font-size: 2.75rem;
        font-style: italic;
        margin-bottom: 0.5rem;
    }
    .xs-phone-land .modal-business-info-headings {
        color: var(--blb-text);
        font-size: 1.85rem;
        padding-top: 1rem;
    }
    .xs-phone-land .modal-business-info-address {
        font-size: 2.25rem;
    }
    .xs-phone-land .modal-business-info-phone {
        font-size: 2.25rem;
    }

     /* Business Website Link */
    .xs-phone-land .modal-business-info-website {
        margin: 1rem 0;
        padding: 0.5rem 1.25rem;
        background-color: var(--blb-accent);
    }
    .xs-phone-land .modal-business-info-website:hover {
        color: var(--blb-highlight);
        text-shadow: 0 0 0.5rem var(--blb-highlight);
    }
    
     /* Business Image Gallery */
    .xs-phone-land .modal-business-gallery {
        max-width: 100%; /* 4 images * 64px + spacing */
        margin: 1rem 0;
    }
    .xs-phone-land .modal-business-gallery img {
        scroll-snap-align: start;
    }

    .xs-phone-land .modal-business-gallery img,
    .xs-phone-land .modal-thumb {
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: 0.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    border: 0 solid var(--blb-border-2);
    transition: transform 0.2s ease, border 0.2s ease;
    cursor: pointer;
    }
    .xs-phone-land .modal-thumb {
        padding: 1rem;
    }

    .xs-phone-land .modal-business-gallery img:hover,
    .xs-phone-land .modal-thumb:hover {
    transform: scale(1);
    }

    /* Highlight Active Thumbnail */
    .xs-phone-land .modal-thumb.active {
    border: 2px solid var(--blb-accent);
    transform: scale(1);
    }

    /* Carousel Navigation Arrows */
    .xs-phone-land .carousel-nav-left {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 2rem 0 0;
    }

    .xs-phone-land .carousel-nav-right {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 0 0 2rem;
    }

    .xs-phone-land .carousel-nav:hover {
        color: var(--blb-white);
    }

    /* Main Zoomable Image */
    .xs-phone-land .modal-carousel {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 1rem;
    }

    .xs-phone-land #modal-carousel-img {
        max-height: 340px;
        border-radius: 0.75rem;
        transition: transform 0.35s ease;
    }

    .xs-phone-land .zoom-bounce {
        animation: zoomBounce 0.35s ease;
    }

    @keyframes zoomBounce {
        0%   { transform: scale(1); }
        50%  { transform: scale(1.12); }
        100% { transform: scale(1); }
    }

    /* Image Preview Modal */
    .xs-phone-land .image-preview-modal {
        padding: 0;
        background-color: transparent;
        box-shadow: none;
        max-width: 90vw;
        max-height: 90vh;
        max-height: 90dvh;
        padding-top: 75%;
    }
    
    /* The actual preview image */
    .xs-phone-land #imagePreviewContent {
        max-width: 100%;
        max-height: 100%;
        width: auto;
        height: auto;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        justify-content: center;
        align-items: center;
    }
    
    .xs-phone-land #imagePreviewModal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }

    .xs-phone-land #imagePreviewModal img {
        max-width: 100%;
        max-height: 100%;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        
    }
    /* Scrollbar for WebKit browsers */
    .xs-phone-land .modal-business-gallery::-webkit-scrollbar {
        height: 8px;
    }
    .xs-phone-land .modal-business-gallery::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .xs-phone-land .modal-business-gallery::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    /* Business Hours */
    .xs-phone-land .modal-business-hours {
        margin-top: 1rem;
    }

    .xs-phone-land .modal-business-hours p {
        font-weight: bold;
        margin-bottom: 0.5rem;
    }

    .xs-phone-land .hours-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 2rem;
        color: var(--blb-text-muted);
    }

    .xs-phone-land .hours-table td {
        padding: 0.3rem 0.5rem;
    }

    .xs-phone-land .hours-table .day {
        font-weight: 600;
        color: var(--blb-white);
        width: 40%;
    }

    .xs-phone-land .hours-table .time {
        color: var(--blb-text-faint);
        text-align: right;
    }

    /* Business Info 2 */
    /* Business Map */
    .xs-phone-land .modal-business-map {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-right: 1rem; /* prevents overlap with close button */
        height: 250px;
    }
    .xs-phone-land .modal-business-map hr,
    .xs-phone-land .modal-business-map p,
    .xs-phone-land .modal-business-map ul {
        margin-left: 0.25rem;
    }

     /* Business Description */
    .xs-phone-land .modal-business-info-description {
        color: var(--blb-white);
        font-size: 2rem;
    }

    /* Modal Business Category Buttons */
    .xs-phone-land .modal-business-category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    .xs-phone-land .modal-business-info-headings-services {
        padding-bottom: 1rem;
    }
    .xs-phone-land .modal-business-category-button {
        color: var(--blb-text);
        background-color: var(--blb-surface);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1rem; /* 20px */
        padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
        font-size: 1.6rem;
        font-family: var(--blb-font-serif);
        cursor: pointer;
        transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    }
    .xs-phone-land .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }
    .xs-phone-land .modal-business-category-buttons-inline-ms .modal-business-category-button {
        background-color: var(--blb-surface);
        color: var(--blb-text);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1.25rem;
        padding: 0.375rem 0.875rem; /* 6px, 14px */
        font-size: 1.6rem;
        font-family: var(--blb-font-sans);
        cursor: pointer;
        transition: all 0.3s ease;
        margin: 0 0 0.5rem 0.5rem;
    }
    .xs-phone-land .modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }

    /* Main Services Page - Section 4 */
    /* Footer */
    .xs-phone-land .main-services-wrapper .page_content_main_services:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2rem;
    }
}

/* Upper bound raised 979 -> 1040: there was never a CSS block for the
   980-1040 landscape range, so flip phones (Z Flip5/6, razr, 1006px
   rotated) and the big Pixels (8/9/10 Pro XL, 998px rotated) fell
   through to the desktop layout at a 9.14px root. */
@media(min-width: 850px) and (max-width: 1040px) {
   /* ────────────────────────────────────────────────────────────────
   00. NAVIGATION MENU BAR
   ───────────────────────────────────────────────────────────── */
    .sm-phone-land .blb_logo {
        width: 8.5rem; /* 105.6px */
    }
    .sm-phone-land .menu_icon {    
        width: 5.8rem; /* 64px */
    }

    /* ────────────────────────────────────────────────────────────────
    Navigation
    ───────────────────────────────────────────────────────────── */
    .sm-phone-land .nav_main {
        padding: 2rem 2.75rem;
    }

    /* Side Menu */
    .sm-phone-land .sidebar-open #mySidenav {
        width: 33%; 
    }
    .sm-phone-land .nav_side {
        border-top-left-radius: 3rem;
        border-bottom-left-radius: 3rem;
    }

    .sm-phone-land .nav_content:nth-child(1) {
        align-items: center;
        justify-content: space-between; /* space between left and right */
        padding: 1.5rem;
        font-size: 5rem;
    }

    .sm-phone-land .a_left, .xs-phone .a_right {
        display: flex;
        align-items: center;
        width: auto;
    }

    .sm-phone-land .a_left {
        justify-content: flex-start;
    }

    .sm-phone-land .a_right {
        display: flex;
        justify-content: flex-end;
        align-items: center;   /* ✅ vertical centering */
        height: 100%;          /* make sure it has height context */
    }

    .sm-phone-land .closebtn_side {
        color: var(--blb-white);
        padding-left: 1.25rem;
        text-decoration: none;
    }

    .sm-phone-land .heartbtn_side {
        position: relative;
        color: var(--blb-heart);
        padding-right: 1.75rem;
        text-decoration: none;
        top: 0.15rem;
    }

    .sm-phone-land .heartbtn_side img {
        display: block;
        height: 2.75rem;          /* or whatever size you want */
    }

    .sm-phone-land .nav_content:nth-child(2) { 
        height: 10%;
        width: 100%;
        align-content: center;
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    .sm-phone-land .nav_content:nth-child(2) h1 {
        font-size: 4rem;
    }
    .sm-phone-land .nav_content:nth-child(3) { 
        align-items: flex-start;   /* Align items to the left*/
        flex-direction: column;
        justify-content: flex-start;
        gap: 1rem;
        padding: 2rem;
    }
    .sm-phone-land .nav_content:nth-child(3) a { 
        font-size: 3rem;
    }

    .sm-phone-land .nav_content:nth-child(4) { 
        align-items: center;
        justify-content: center;
    }

    /* Use flex-grow ratios — these will perfectly fill the height */
    /* Shared style for all sections */
    .sm-phone-land .nav_content {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 3.5rem;
    }

    /* Social Media */
    .sm-phone-land .face_img_2 {
        width: 4.5rem; /* 64px */
    }

    .sm-phone-land .face_btn, .sm-phone-land .insta_btn, .sm-phone-land .blank_img {
        padding: 1rem;
    }
    .sm-phone-land .face_img, .sm-phone-land .insta_img, .sm-phone-land .blank_img {
        width: 2.5rem; /* 32px */
    }

    /* ────────────────────────────────────────────────────────────────
    Modal Overlay
    ───────────────────────────────────────────────────────────── */
    .sm-phone-land .modal-overlay {
        justify-content:center;
        align-items: flex-start;
    }

    /* Modal Content */
    .sm-phone-land .modal-content {
        top: 2.25rem;
        padding: 2.25rem;
    }

    /* Search Input */
    .sm-phone-land .search-input {
        font-size: 2.25rem;
        width: 100%;
        max-width: 90%;
    }

    /* Close Button */
    .sm-phone-land .close-modal {
        top: -0.75rem;
        right: -0.25rem;
        font-size: 3rem;
    }

    .sm-phone-land .suggestions-list {
        font-size: 2.25rem;
    }

    .sm-phone-land .suggestions-list li:hover {
        background-color: var(--blb-surface-4);
    }

    .sm-phone-land .suggestions-list img {
        height: 1.4rem;
        width: auto;
        flex-shrink: 0;
    }

    .sm-phone-land .suggestions-list::-webkit-scrollbar {
        width: 8px;
    }
    .sm-phone-land .suggestions-list::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .sm-phone-land .suggestions-list::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    .sm-phone-land .search-tooltip {
        top: 5.5rem;
        font-size: 1.4rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1A. HOME PAGE
    ───────────────────────────────────────────────────────────── */

    /* Home Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone-land .page_content_home:nth-child(1) {
        height: 16.5%;
        align-items: center;
        justify-content: center;
    }

    /* Home Page - Section 2 */
    /* Header */
    .sm-phone-land .page_content_home:nth-child(2) {
        align-items: center;
        justify-content: center;
    }
    .sm-phone-land .section_home h1 {
        font-size: 6rem;
    }

    /* Home Page - Section 3 */
    /* Carousel Main Buttons */
    .sm-phone-land .page_content_home:nth-child(3) {
        height: 60%;
        width: 100%;
    }

    .sm-phone-land .carousel-wrapper {
        perspective: 1600px;
    }

    .sm-phone-land .carousel-item {
        margin: -8.40rem; /* -84px */
    }

    .sm-phone-land .a_home_box_1 img {
        filter: invert();
        width: 11.75rem; /* 100px */
        height: 11.75rem;
    }

    .sm-phone-land .a_home_box_1_text p{
        margin-top: 0.5rem;
        font-size: 2.25rem; 
    }

    /* Carousel Side Buttons */
    .sm-phone-land .carousel-button {
        height: 18.125rem; /* 290px */
        width: 32.125rem; /* 514px */
    }
    /* Home Page - Section 4 */
    /* Footer */
    .sm-phone-land .page_content_home:nth-child(4) {
        align-items: center;
        justify-content: center;
        font-size: 2rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. CATEGORY PAGE
    ───────────────────────────────────────────────────────────── */

    /* Category Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone-land .page_content_category:nth-child(1) {
        height: 16.5%;
        align-items: center;
        justify-content: center;
    }

    /* Category Page - Section 2 */
    /* Header */
    .sm-phone-land .category-wrapper {
        padding-right: 0.25rem;
    }

    .sm-phone-land .category-wrapper .page_content_category:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .sm-phone-land .category-wrapper .page_content_category:nth-child(1) h1 {
        font-size: 6rem;
    }

    /* Category Page - Section 3 */
    /* Categories Groups */
    .sm-phone-land .category-wrapper .page_content_category:nth-child(2) {
        width: 100%;
    }

    /* Category Buttons */
    .sm-phone-land .category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    
        .xs-phone-land .category-button {
        border-radius: 1.5rem; /* 20px */
        font-size: 3rem;
    }

     .sm-phone-land .dropdown-header {
        padding: 0.75em;
        cursor: pointer;
        width: 100%;
        border: none;
        font-size: 3em;
        font-weight: bold;
        transition: color 0.3s ease;
        background-color: var(--blb-green-deep);
    }

    .sm-phone-land .dropdown-content {
        display: none;
        padding: 1em;
        background-color: var(--blb-green-deep);
    }

     .sm-phone-land .dropdown-content.visible {
        display: block;
    }

     .sm-phone-land .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }

     .sm-phone-land .category-button:hover {
            background-color: var(--blb-surface-2);
            color: var(--blb-accent);
            box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }


    /* Category Page - Section 4 */
    /* Footer */
    .sm-phone-land .category-wrapper .page_content_category:nth-child(3) {
        align-items: center;
        justify-content: center;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. ABOUT PAGE
    ───────────────────────────────────────────────────────────── */
    /* About Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone-land .page_content_about:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 16.5%;
    }

    /* About Page - Section 2 */
    /* Header */
    .sm-phone-land .about-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 1rem;
        box-sizing: content-box;
    }
    .sm-phone-land .about-wrapper .page_content_about:nth-child(1) {
        width: 100%;
        display: flex;
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 16vh 0 10vh 0;
    }

    /* Old About headings removed - see the note in the .xs-phone block. */

    /* About Page - Section 3 */
    /* Content Description */
    .sm-phone-land .about-wrapper .page_content_about:nth-child(2) {
        width: 100%;
    }

    .sm-phone-land .about-wrapper-paragraphs {
        padding: 0 2.5vw 20vw 2.5vw;
    }

    /* Description Section */
    .sm-phone-land .about_p {
        padding: 0 1.5%; /* instead of 12.5rem / 200px */
        text-align: left;
        font-size: 2.5rem;
    }

    .sm-phone-land .about_p1 {
        text-align: left;
        padding: 2vh 3.5vw 0.75vh 3.5vw;
    }
    .sm-phone-land .about_p2 {
        text-align: left;
    }
    .sm-phone-land .about_p3 {
        text-align: left;
    }

    /* Call to Action Boxes */
    .sm-phone-land .contact_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .sm-phone-land .contact_p1 {
        font-size: 2rem;
    }
    .sm-phone-land .contact_p2 {
        font-size: 2.5rem;
        padding: 0 2rem;
    }

    /* About Page - Section 4 */
    /* Footer */
    .sm-phone-land .about-wrapper .page_content_about:nth-child(3) {
        position: relative;
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
        padding: 1vh 0 0 0;
        bottom: 3.5vh;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. UNDER CONSTRUCTION PAGE
    ───────────────────────────────────────────────────────────── */
    /* Under Construction Page - Section 1 */
    /* Navigation Menu Bar */
    .sm-phone-land .page_content_underconstruction:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
        height: 16.5%;
    }

    /* Under Construction Page - Section 2 */
    /* Header */
    .sm-phone-land .page_content_underconstruction:nth-child(2) {
        align-content: center;
        justify-content: center;
        align-items: center;
        padding: 6vh 0 10vh 0;
        box-sizing: border-box;
    }
    .sm-phone-land .section_underconstruction h1 {
        font-size: 6rem;
    }
    .sm-phone-land .section_underconstruction h2 {
        font-size: 4.75rem;
    }
    .sm-phone-land .section_underconstruction h3 {
        font-size: 3.5rem;
    }

    /* Under Construction Page - Section 3 */
    /* Content Description */
    .sm-phone-land .page_content_underconstruction:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    .sm-phone-land .underconstruction-wrapper-header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
    }
    .sm-phone-land .underconstruction-wrapper-paragraphs {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        padding: 0 5vw;
        width: 100%;
        height: 63vh;
        height: 63dvh;
        box-sizing: border-box;
        /* 63vh can exceed the room available in landscape, so cap it
           to the space the flex parent actually has and let it scroll
           rather than be clipped away by the section overflow:hidden. */
        max-height: 100%;
        overflow-y: auto;
    }

    /* Description Section */
    .sm-phone-land .underconstruction_p {
        padding: 0 1.25%; /* instead of 12.5rem / 200px */
        text-align: center;
    }

    .sm-phone-land .underconstruction_p1 {
        font-size: 3rem;
    }
    .sm-phone-land .underconstruction_p2 {
        font-size: 3.25rem;
    }
    .sm-phone-land .underconstruction_p3 {
        font-size: 3.5rem;
    }

    /* Call to Action Boxes */
    .sm-phone-land .contact_underconstruction_p_button {
        padding: 1.5vw 12.5vh; /* top-bottom 12px, sides 24px */
        font-size: 2.75rem;
        border-radius: 1.75rem;
    }
    .sm-phone-land .contact_underconstruction_p1 {
        font-size: 2rem;
    }
    .sm-phone-land .contact_underconstruction_p2 {
        font-size: 2.25rem;
    }

    /* Under Construction Page - Section 4 */
    /* Footer */
    .sm-phone-land .page_content_underconstruction:nth-child(4) {
        align-content: flex-start;
        justify-content: flex-start;
        align-items: flex-start;
        font-size: 2.5rem;
    }

    /* ────────────────────────────────────────────────────────────────
    1B. MAIN SERVICES PAGE
        ───────────────────────────────────────────────────────────── */
    /* Main Services Page - Section 1 */
    /* Navigation Menu Bar */

    .main-services-wrapper {
        height: 90%;
        width: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: overlay; /* nice if supported */
        overflow-y: auto;    /* fallback */
        padding-right: 0;
        box-sizing: content-box;
        background-color: var(--blb-green-deep);
    }
    .sm-phone-land .page_content_main_services:nth-child(1) {
        height: 16.5%;
        align-content: center;
        justify-content: center;
        align-items: center;
    }

    /* Main Services Page - Section 2 */
    /* Header */
    .sm-phone-land .main-services-wrapper .page_content_main_services:nth-child(1) {
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    .sm-phone-land .main-services-wrapper .page_content_main_services:nth-child(1) h1 {
        font-size: 5rem;
    }

    /* Main Services Page - Section 3 */
    /* Categories Groups */
    .sm-phone-land .main-services-wrapper .page_content_main_services:nth-child(2) {
        position: relative;
        display: flex;
        width: 80%;
        align-content: center;
        justify-content: center;
        align-items: center;
        margin: 0 auto;  
    }


    .sm-phone-land .vertical-layout {
        flex-direction: column;
        padding: 0 5vw;
        align-content: center;
        justify-content: center;
        align-items: center;
    }
    /* List Layout */

    /* ───────────  business logo  ─────────── */
    .sm-phone-land .card-part-1 {
        flex: 2 1 6rem;
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 20rem;
        max-width: 20rem;
        min-height: 20rem;
        max-height: 20rem;
    }
    .sm-phone-land .card-part-2 {
        flex: 3 1 50rem;
        /*background-color: var(--blb-green);*/
        background-color: var(--blb-green);
        border-bottom: 1px solid var(--blb-green-deep);
        border-bottom-left-radius: 3.125rem;
        border-bottom-right-radius: 3.125rem;
        flex-direction: column;
        padding: 0.5rem 0.25rem;
    }

    /* ───────────  Description  ──────────── */
    .sm-phone-land .card-part-2 .p1 {
        font-size: 2rem;
    }
    .sm-phone-land .card-part-2 .p2 {
        font-size: 1.35rem;
    }
    .sm-phone-land .card-part-2 .p3 {
        font-size: 1.55rem;
        margin: 1.5rem 0.5rem;
    }
    .sm-phone-land .category-buttons-inline-ms .category-button-ms {
        font-size: 1.6rem;
    }

    /* ───────────  Location  ─────────── */
    .sm-phone-land .card-part-3 {
        flex: 1 1 16rem;
        background-color: var(--blb-surface);
        border-right: 0;
        padding: 0 0;
    }
    .sm-phone-land .card-part-3-1 {
        font-size: 2.5rem;
        margin: 5% 5%;
    }
    .sm-phone-land .card-part-3-2 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .sm-phone-land .card-part-3-3 {
        font-size: 2.1rem;
        margin: 5% 5%;
    }
    .sm-phone-land .card-part-3-3 p a {
        color: var(--blb-highlight);
    }

    /* ───────────  Social Media  ─────────── */
    .sm-phone-land .card-part-4 {
        border-top-right-radius: 3.125rem;
        align-items: flex-start;
        justify-content: flex-start;
        background-color: var(--blb-surface);
        flex: 0 0  2rem;
        padding: 1% 0 1% 0;

        gap: 0rem;
        flex-direction: column;
    }

    /* ───────────  Business Card Overlay (Base) ─────────── */
    /* Modal Card Container */
    .sm-phone-land #businessModal .modal-content {
        padding: 0;
        margin: 0 1rem;
        top: 0rem;
        width: 90%;
        max-width: 90vw;
        height: 90%;
        max-height: 90vh;
        max-height: 90dvh;
    }

    .sm-phone-land .modal-header-bar {
        padding: 0.5rem 1rem;
        border-bottom: 1px solid var(--blb-border-3);
        align-items: center;
    }

    .sm-phone-land .modal-header-bar .close-modal {
        font-size: 3rem;
        padding: 0 0.25rem;
    }

    /* Modal Typography */
    /* Optional: Divider Line */
    .sm-phone-land #businessModal hr {
        border: none;
        border-top: 1px solid var(--blb-border-3);
        margin: 1.5rem 0;
    }

    /* ───────────  Business Card Layout Grid (Content) ─────────── */
    .sm-phone-land .modal-business-grid {
        grid-template-columns: 1fr;
    }

     /* Business Info 1 */
    .sm-phone-land .modal-business-info-1 {
        color: var(--blb-text);
        padding: 1rem 2rem 0 2rem;
        max-width: 655px;
    }
    .sm-phone-land .modal-business-header {
        font-size: 4.25rem;
        padding-top: 1rem;
    }
    .sm-phone-land .modal-business-services {
        font-size: 2.75rem;
        font-style: italic;
        margin-bottom: 0.5rem;
    }
    .sm-phone-land .modal-business-info-headings {
        color: var(--blb-text);
        font-size: 1.85rem;
        padding-top: 1rem;
    }
    .sm-phone-land .modal-business-info-address {
        font-size: 2.25rem;
    }
    .sm-phone-land .modal-business-info-phone {
        font-size: 2.25rem;
    }

     /* Business Website Link */
    .sm-phone-land .modal-business-info-website {
        margin: 1rem 0;
        padding: 0.5rem 1.25rem;
        background-color: var(--blb-accent);
    }
    .sm-phone-land .modal-business-info-website:hover {
        color: var(--blb-highlight);
        text-shadow: 0 0 0.5rem var(--blb-highlight);
    }
    
     /* Business Image Gallery */
    .sm-phone-land .modal-business-gallery {
        max-width: 100%; /* 4 images * 64px + spacing */
        margin: 1rem 0;
    }
    .sm-phone-land .modal-business-gallery img {
        scroll-snap-align: start;
    }

    .sm-phone-land .modal-business-gallery img,
    .sm-phone-land .modal-thumb {
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: 0.5rem;
    flex-shrink: 0;
    scroll-snap-align: start;
    border: 0 solid var(--blb-border-2);
    transition: transform 0.2s ease, border 0.2s ease;
    cursor: pointer;
    }
    .sm-phone-land .modal-thumb {
        padding: 1rem;
    }

    .sm-phone-land .modal-business-gallery img:hover,
    .sm-phone-land .modal-thumb:hover {
    transform: scale(1);
    }

    /* Highlight Active Thumbnail */
    .sm-phone-land .modal-thumb.active {
    border: 2px solid var(--blb-accent);
    transform: scale(1);
    }

    /* Carousel Navigation Arrows */
    .sm-phone-land .carousel-nav-left {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 2rem 0 0;
    }

    .sm-phone-land .carousel-nav-right {
        background: none;
        border: none;
        font-size: 2rem;
        color: var(--blb-text);
        cursor: pointer;
        transition: color 0.2s ease;
        margin: 0 0 0 2rem;
    }

    .sm-phone-land .carousel-nav:hover {
        color: var(--blb-white);
    }

    /* Main Zoomable Image */
    .sm-phone-land .modal-carousel {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 1rem;
    }

    .sm-phone-land #modal-carousel-img {
        max-height: 340px;
        border-radius: 0.75rem;
        transition: transform 0.35s ease;
    }

    .sm-phone-land .zoom-bounce {
        animation: zoomBounce 0.35s ease;
    }

    @keyframes zoomBounce {
        0%   { transform: scale(1); }
        50%  { transform: scale(1.12); }
        100% { transform: scale(1); }
    }

    /* Image Preview Modal */
    .sm-phone-land .image-preview-modal {
        padding: 0;
        background-color: transparent;
        box-shadow: none;
        max-width: 90vw;
        max-height: 90vh;
        max-height: 90dvh;
        padding-top: 75%;
    }
    
    /* The actual preview image */
    .sm-phone-land #imagePreviewContent {
        max-width: 100%;
        max-height: 100%;
        width: auto;
        height: auto;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        justify-content: center;
        align-items: center;
    }
    
    .sm-phone-land #imagePreviewModal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }

    .sm-phone-land #imagePreviewModal img {
        max-width: 100%;
        max-height: 100%;
        border-radius: 1rem;
        box-shadow: 0 0 1rem var(--blb-overlay);
        
    }
    /* Scrollbar for WebKit browsers */
    .sm-phone-land .modal-business-gallery::-webkit-scrollbar {
        height: 8px;
    }
    .sm-phone-land .modal-business-gallery::-webkit-scrollbar-track {
        background: var(--blb-surface-2);
    }
    .sm-phone-land .modal-business-gallery::-webkit-scrollbar-thumb {
        background-color: var(--blb-surface-5);
        border-radius: 4px;
    }

    /* Business Hours */
    .sm-phone-land .modal-business-hours {
        margin-top: 1rem;
    }

    .sm-phone-land .modal-business-hours p {
        font-weight: bold;
        margin-bottom: 0.5rem;
    }

    .sm-phone-land .hours-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 2rem;
        color: var(--blb-text-muted);
    }

    .sm-phone-land .hours-table td {
        padding: 0.3rem 0.5rem;
    }

    .sm-phone-land .hours-table .day {
        font-weight: 600;
        color: var(--blb-white);
        width: 40%;
    }

    .sm-phone-land .hours-table .time {
        color: var(--blb-text-faint);
        text-align: right;
    }

    /* Business Info 2 */
    /* Business Map */
    .sm-phone-land .modal-business-map {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-right: 1rem; /* prevents overlap with close button */
        height: 250px;
    }
    .sm-phone-land .modal-business-map hr,
    .sm-phone-land .modal-business-map p,
    .sm-phone-land .modal-business-map ul {
        margin-left: 0.25rem;
    }

     /* Business Description */
    .sm-phone-land .modal-business-info-description {
        color: var(--blb-white);
        font-size: 2rem;
    }

    /* Modal Business Category Buttons */
    .sm-phone-land .modal-business-category-buttons-inline {
        gap: 2rem; /* 16px */
        padding: 0 2.5vw;
        flex-direction: column;
    }
    .sm-phone-land .modal-business-info-headings-services {
        padding-bottom: 1rem;
    }
    .sm-phone-land .modal-business-category-button {
        color: var(--blb-text);
        background-color: var(--blb-surface);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1rem; /* 20px */
        padding: 0.5rem 1.5rem; /* top-bottom 12px, sides 24px */
        font-size: 1.6rem;
        font-family: var(--blb-font-serif);
        cursor: pointer;
        transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    }
    .sm-phone-land .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent); /* Soft glow */
    }
    .sm-phone-land .modal-business-category-buttons-inline-ms .modal-business-category-button {
        background-color: var(--blb-surface);
        color: var(--blb-text);
        border: 0.125rem solid var(--blb-border);
        border-radius: 1.25rem;
        padding: 0.375rem 0.875rem; /* 6px, 14px */
        font-size: 1.6rem;
        font-family: var(--blb-font-sans);
        cursor: pointer;
        transition: all 0.3s ease;
        margin: 0 0 0.5rem 0.5rem;
    }
    .sm-phone-land .modal-business-category-buttons-inline-ms .modal-business-category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }

    /* Main Services Page - Section 4 */
    /* Footer */
    .sm-phone-land .main-services-wrapper .page_content_main_services:nth-child(3) {
        align-content: center;
        justify-content: center;
        align-items: center;
        font-size: 2.5rem;
    }
}

/* #################### TABLET PORTRAIT SIDE MENU #################### */
/* Sidebar proportions by device: desktop ~15% (base), narrow laptops 20%
   (.vw-1280), phones 75% (.sm-phone). Tablets in portrait get ~1/3 of the
   screen. The second selector matches the specificity of the .vw-1280 rule
   (which also fires at these widths) so file order makes this one win. */
@media (min-width: 601px) and (max-width: 1040px) and (orientation: portrait) {
    .sidebar-open #mySidenav,
    .vw-1280 .sidebar-open #mySidenav {
        width: 33%;
    }
}

/* ────────────────────────────────────────────────────────────────
   TABLET PORTRAIT (768-1040px, portrait) — business cards only.
   Portrait tablets (iPad Mini / Air etc.) show the same stacked
   business card as phones: image + contact side by side on top,
   text below, social bar at the bottom. The rest of the page keeps
   the scaled desktop layout from the 601-1040 portrait root rule.
   Card rules are copied from the .sm-phone card section — if the
   phone card design changes, update both places.
   The .tablet-portrait class is added by viewport-scale.js.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 601px) and (max-width: 1040px) and (orientation: portrait) {
    .tablet-portrait .vertical-layout {
        display: flex;
        flex-direction: column;
        padding: 2rem 5vw;
    }
    .tablet-portrait .card-part-1 {
        border-bottom-left-radius: 0;
        border-right: 1px solid var(--blb-green-deep);
        border-bottom: 1px solid var(--blb-green-deep);
        min-width: 15rem;
        max-width: 15rem;
        min-height: 15rem;
        max-height: 15rem;
    }
    /* Tablets are wide enough that the text block and the social bar
       would otherwise share a row. flex-basis: 100% makes the text
       block claim a full row on its own (pushing the social bar to
       the bottom, matching the phone), and flex-shrink then fits it
       exactly inside the card - padding and border included. Do NOT
       use min-width: 100% here: .card-part-2 is content-box, so its
       padding gets ADDED to the 100% and overhangs the card edge. */
    .tablet-portrait .card-part-2 {
        flex-basis: 100%;
    }
    .tablet-portrait .card-part-2 .p1 {
        font-size: 2rem;
    }
    .tablet-portrait .card-part-2 .p2 {
        font-size: 1.6rem;
    }
    .tablet-portrait .card-part-2 .p3 {
        font-size: 1.8rem;
        margin: 1.5rem 0.5rem;
    }
    /* Category pills inside the card (phone card builder uses the
       .category-button class, same as .sm-phone) */
    .tablet-portrait .category-buttons-inline-ms .category-button {
        display: inline-block;
        margin: 0.25em;
        padding: 0.5em 1em;
        border: none;
        border-radius: 1.5rem;
        cursor: pointer;
        font-weight: bold;
        font-size: 1.75rem;
    }
    .tablet-portrait .category-buttons-inline-ms .category-button:hover {
        background-color: var(--blb-surface-2);
        color: var(--blb-accent);
        box-shadow: 0 0.125rem 0.125rem var(--blb-accent);
    }
    .tablet-portrait .card-part-3 {
        background-color: var(--blb-surface);
        border-top-right-radius: 3.125rem;
        border-right: 0;
    }
    .tablet-portrait .card-part-3-1 {
        font-size: 2.2rem;
        margin: 5% 7.5%;
    }
    .tablet-portrait .card-part-3-2 {
        font-size: 1.6rem;
        margin: 5% 7.5%;
    }
    .tablet-portrait .card-part-3-3 {
        font-size: 2rem;
        margin: 5% 7.5%;
    }
    .tablet-portrait .card-part-3-3 p a {
        color: var(--blb-highlight);
    }
    .tablet-portrait .card-part-4 {
        align-items: center;
        justify-content: center;
        gap: 5rem;
        margin: 3.5% 20% 1% 20%;
        flex-direction: row;
    }
    .tablet-portrait .face_btn,
    .tablet-portrait .insta_btn,
    .tablet-portrait .blank_img {
        padding-bottom: 0.75rem;
    }
    .tablet-portrait .face_img,
    .tablet-portrait .insta_img,
    .tablet-portrait .blank_img {
        width: 2.5rem;
    }

    /* ── Business info modal ──
       Keeps the desktop two-column look (info left, map/description
       right) but rebalanced for the ~690px-wide modal a portrait
       tablet gives us: slightly smaller headings so long names don't
       wrap badly, hours table uses the full column with times on one
       line, thumbnails and map fill their columns. */
    .tablet-portrait #businessModal .modal-content {
        width: 94%;
        max-width: 94%;
    }
    .tablet-portrait .modal-business-grid {
        gap: 1rem;
    }
    .tablet-portrait .modal-business-header {
        font-size: 1.6rem;
    }
    .tablet-portrait .modal-business-services {
        font-size: 1.1rem;
    }
    .tablet-portrait .modal-business-info-headings {
        font-size: 1.1rem;
    }
    .tablet-portrait .hours-table {
        width: 100%;
        font-size: 0.95rem;
    }
    .tablet-portrait .hours-table .time {
        white-space: nowrap;
    }
    .tablet-portrait .modal-business-gallery {
        max-width: 100%;
    }
    .tablet-portrait .modal-business-map iframe {
        height: 18rem;
    }
    .tablet-portrait .modal-business-info-description {
        font-size: 1.1rem;
    }
}

/* ────────────────────────────────────────────────────────────────
   CLICK-TO-CALL LINKS
   Phone numbers on cards and in the modal are now tel: links so a
   tap starts a call on phones/tablets. They inherit the exact color
   and style of the text they replaced - no visual change, just
   tappable. (Applies at every breakpoint.)
   ───────────────────────────────────────────────────────────── */
.tel-link {
    color: inherit;
    text-decoration: none;
}
.tel-link:hover {
    text-decoration: underline;
}

/* ────────────────────────────────────────────────────────────────
   REDUCED MOTION
   Users who set "reduce motion" in their OS accessibility settings
   (vestibular disorders, motion sensitivity) get near-instant
   transitions instead of animations. The carousel still rotates and
   dropdowns still open - they just snap instead of animating.
   ───────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ────────────────────────────────────────────────────────────────
   HOW IT WORKS PAGE
   Follows the site's page pattern: a 100vh locked section, the nav
   band on top (10%), and a scrollable content wrapper (90%) below,
   like the main services page. Content is a single centered column
   of sections so it works at every breakpoint without JS classes.
   Media placeholders are replaced with real images/videos as they
   are produced (see the HTML comment in how_it_works.astro).
   ───────────────────────────────────────────────────────────── */
.section_hiw {
    height: 100vh;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.hiw-nav-band {
    height: 10%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    /* Was transparent, so the body's green showed through and this page's
       top bar read as a different colour from every other page's. Same
       --blb-surface-3 the other six nav bands use. */
    background-color: var(--blb-surface-3);
}

.hiw-wrapper {
    height: 90%;
    width: 100%;
    overflow-y: auto;
    background-color: var(--blb-green-deep);
    padding: 2rem 0 3rem 0;
    /* Keeps the 5rem of vertical padding INSIDE the 90%. Without it the
       two bands added up to 90% + 10% + 5rem, i.e. more than the section
       could hold, and flex shrank BOTH to fit - dragging the nav band
       from 90px down to 85px and making this page's top bar shorter than
       every other page's. */
    box-sizing: border-box;
}

.hiw-header {
    max-width: 56rem;
    margin: 0 auto;
    padding: 0 5vw 1rem 5vw;
    text-align: center;
}

.hiw-header h1 {
    font-size: 3rem;
    margin-bottom: 0.75rem;
}

.hiw-header p {
    font-size: 1.25rem;
    line-height: 1.6;
}

.hiw-section {
    max-width: 56rem;
    margin: 2rem auto;
    padding: 1.5rem 2rem 2rem 2rem;
    background-color: var(--blb-green);
    border-radius: 1.5rem;
}

.hiw-section h2 {
    font-size: 2rem;
    margin: 0.5rem 0 0.5rem 0;
    border-bottom: 1px solid var(--blb-green-deep);
    padding-bottom: 0.75rem;
}

.hiw-step {
    margin-top: 1.75rem;
}

.hiw-step h3 {
    font-size: 1.4rem;
    margin-bottom: 0.5rem;
}

.hiw-step p {
    font-size: 1.15rem;
    line-height: 1.65;
    margin: 0.5rem 0;
}

.hiw-media {
    margin: 1rem 0 0 0;
}

/* Placeholder box until the real image/video is dropped in */
.hiw-media-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 16 / 9;
    background-color: var(--blb-green-deep);
    border: 2px dashed var(--blb-spruce);
    border-radius: 1rem;
    font-size: 1.1rem;
    font-style: italic;
    opacity: 0.75;
}

/* Real media, once added, fills the same space */
.hiw-media img,
.hiw-media video {
    width: 100%;
    border-radius: 1rem;
    display: block;
}

.hiw-media figcaption {
    font-size: 1rem;
    font-style: italic;
    text-align: center;
    margin-top: 0.5rem;
    opacity: 0.85;
}

.hiw-footer {
    text-align: center;
    padding: 1rem 0;
}

/* Phones get tighter side padding so the column breathes */
@media (max-width: 600px) {
    .hiw-section {
        margin: 1.5rem 4vw;
        padding: 1rem 1.25rem 1.5rem 1.25rem;
    }
}

/* PHONE TYPE SCALE.
   The sizes above are desktop values against a 16px root. On a phone the
   root is ~9.14px, so 1.15rem body copy rendered at 10.5px and the
   figcaption/footer at 8px - this whole page was effectively unreadable
   on every device in the phone matrix. The page has no breakpoint block
   and no --l-* variables, so nothing was compensating.

   These match the mobile scale layout.js already uses elsewhere on the
   site (body 1.9rem, titles ~2.1rem, name 3.2rem), so How It Works now
   reads at the same size as the business pages.

   The selector covers both phone situations, matching exactly where the
   phone root-scale rules apply: portrait phones (<=600px) and phones
   rotated into landscape (601-1040px wide AND short). Tablets and
   desktop are untouched - they keep the desktop values above. */
@media (max-width: 600px),
       (min-width: 601px) and (max-width: 1040px) and (orientation: landscape) {
    .hiw-header h1          { font-size: 3.2rem; }
    .hiw-header p           { font-size: 1.9rem; }
    .hiw-section h2         { font-size: 2.4rem; }
    .hiw-step h3            { font-size: 2rem; }
    .hiw-step p             { font-size: 1.9rem; }
    .hiw-media figcaption   { font-size: 1.7rem; }
    .hiw-media-placeholder  { font-size: 1.7rem; }
    .hiw-footer             { font-size: 1.8rem; }
}

/* ════════════════════════════════════════════════════════════════════
   CARD TAP HINT BUBBLE  +  MODAL "MORE ABOUT THE BUSINESS" LINK
   ════════════════════════════════════════════════════════════════════
   Bubble: fixed bottom-right so it stays put while the listing
   scrolls. z-index 1500 keeps it UNDER the modal overlays (2000),
   so an open modal covers it. Tapping adds .pop, and main_services.js
   removes the element when the animation ends.
   Link: sits between the name/type block and Address inside the
   business modal; per-breakpoint sizes mirror .modal-business-services. */

#card-hint-bubble {
    position: fixed;
    right: 1rem;
    bottom: 1rem;
    z-index: 1500;
    background-color: var(--blb-green);
    color: var(--blb-text);
    border: 0.0625rem solid var(--blb-accent);
    border-radius: 2rem;
    padding: 0.6rem 1.1rem;
    font-size: 1rem;
    font-family: var(--blb-font-body);
    cursor: pointer;
    box-shadow: 0 0.125rem 0.5rem var(--blb-overlay);
}

#card-hint-bubble.pop {
    animation: hint-pop 0.25s ease-in forwards;
}

@keyframes hint-pop {
    40%  { transform: scale(1.18); opacity: 1; }
    100% { transform: scale(0);    opacity: 0; }
}

.modal-business-more {
    margin: 0.6rem 0;
    text-align: center;
}

.more-about-link {
    color: var(--blb-accent);
    text-decoration: underline;
    font-size: 1.2rem;
}

.more-about-link:hover {
    color: var(--blb-highlight);
}

/* Phones: match the modal's body-text scale (~2rem, same as
   .modal-business-info-description) instead of the old oversized
   2.5-2.75rem headline scale. */
.xs-phone .more-about-link      { font-size: 2rem; }
.sm-phone .more-about-link      { font-size: 2rem; }
.lg-phone .more-about-link      { font-size: 2rem; }
.xs-phone-land .more-about-link { font-size: 2rem; }
.sm-phone-land .more-about-link { font-size: 2rem; }
.tablet-portrait .more-about-link { font-size: 1.1rem; }

/* Bubble reads comfortably on phone screens (rem scale is larger there). */
.xs-phone #card-hint-bubble,
.sm-phone #card-hint-bubble,
.lg-phone #card-hint-bubble,
.xs-phone-land #card-hint-bubble,
.sm-phone-land #card-hint-bubble {
    font-size: 2rem;
    padding: 1rem 1.6rem;
}

/* ════════════════════════════════════════════════════════════════════
   PER-BUSINESS STATIC PAGES  (/business/{slug}/)  —  card design v3
   ════════════════════════════════════════════════════════════════════
   4-column grid mirroring the design mockup:
     row 1:  About Us | Photos (span 2) | Current Promotions
     row 2:  Hours    | What We Do (span 2) | Find Us
     row 3:  Services chips (full width)
   Plus: photos/promotions overlays (.bp-modal) and the promotion
   carousel (5s auto-cycle; arrows + dots). .bp-scroll is the inner
   scroll container (the section is 100vh / overflow:hidden). */

.bp-scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
}

/* ─────────────────────────────────────────────────────────────────
   LAYOUT VARIABLES: every size / gap / column-count below reads a
   --l-* variable set by /res/js/layout.js (the layout control
   panel — sibling of theme.js). The fallback baked into each var()
   is the DESKTOP value, so the page still renders correctly if the
   script ever fails to load. Per-device values (tablet / mobile)
   live in layout.js, NOT in @media blocks — the old bp @media
   blocks were removed when this system was added. layout.js also
   puts l-desktop / l-tablet / l-mobile on <html> for the few
   structural rules at the bottom of this section.
   ───────────────────────────────────────────────────────────────── */

.bp-wrapper {
    max-width: 105rem;
    margin: 0 auto;
    padding: var(--l-wrapper-pad, 0.25rem 1.5rem 2.5rem);
    font-family: var(--blb-font-sans);
}

/* Top-bar icons — SITE-WIDE (all pages, not just business pages).
   These use the smaller business-page sizing and override the older
   per-breakpoint .menu_icon rules earlier in this file (same
   specificity, later position wins). Sizes come from layout.js:
   --l-menu-icon (3rem desktop/tablet, 4.6rem mobile) and
   --l-search-icon (2.6rem desktop). */
.l-desktop .menu_icon,
.l-tablet  .menu_icon,
.l-mobile  .menu_icon { width: var(--l-menu-icon, 3rem); }
.l-desktop .nav_search_btn .menu_icon,
.l-tablet  .nav_search_btn .menu_icon,
.l-mobile  .nav_search_btn .menu_icon { width: var(--l-search-icon, 2.6rem); }

/* Breadcrumb trail (replaces the old back link) */
.bp-crumbs {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.45rem;
    margin: 0.7rem 0;
    font-size: var(--l-crumbs-size, 0.9rem);
}
.bp-crumbs a { color: var(--blb-text); text-decoration: none; }
.bp-crumbs a:hover { color: var(--blb-accent); text-decoration: underline; }
.bp-crumb-sep { color: var(--blb-text-faint); }
.bp-crumb-here { color: var(--blb-text-faint); }

/* Open Now / Closed badge (filled in by page script from hours data) */
.bp-open-badge {
    display: inline-block;
    border-radius: 2rem;
    padding: 0.25rem 0.8rem;
    font-size: var(--l-badge-size, 0.72rem);
    font-weight: 600;
    letter-spacing: 0.05em;
    margin: 0 0 0.8rem 0;   /* left offset removed: the badge now
                               stands alone above the name */
}
.bp-open-badge:empty { display: none; }
.bp-open-badge.open {
    border: 0.0625rem solid var(--blb-highlight);
    color: var(--blb-highlight);
}
.bp-open-badge.closed {
    border: 0.0625rem solid var(--blb-gold);
    color: var(--blb-gold);
}

.bp-back {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0.6rem 0;
    color: var(--blb-text);
    text-decoration: none;
    font-size: 0.95rem;
}
.bp-back svg { width: 1rem; height: 1rem; }
.bp-back:hover { color: var(--blb-accent); }

/* ── Cards ── */
.bp-card {
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.9rem;
    padding: var(--l-card-pad, 1.2rem);
    margin-bottom: var(--l-card-gap, 1rem);
    text-align: left;   /* beats the global `article { text-align: center }` */
}

/* Row-1 cards (About Us / Photos / Current Promotions) get a minimum
   height so the row breathes like the mockup even with little content */
.bp-tall { min-height: var(--l-tall-min, 14rem); }

.bp-empty {
    color: var(--blb-text-faint);
    font-size: var(--l-body-size, 0.95rem);
    margin: 0;
}

/* ── Hero ── */
.bp-hero {
    display: grid;
    grid-template-columns: var(--l-hero-cols, 1.6fr 1fr);
    gap: var(--l-hero-gap, 2.5rem);
    /* stretch, not start: the info column has to fill the hero's full
       height for .bp-buttons to be able to sit on its bottom edge. With
       `start` the column was only as tall as its own text, so there was
       no space to push the buttons into. */
    align-items: stretch;
    padding: 1.5rem;
}

/* Left column. A flex column so the buttons can take margin-top: auto
   and settle against the bottom of the hero - the equivalent of a
   bottom-aligned cell. Everything above them keeps its normal order and
   stays hugged to the top. */
.bp-hero-info {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

/* Services type line under the name — same look as the business
   card / card overlay ("Animal Shelter" in gold italic serif).
   Replaces the old .bp-badge pill that sat above the name. */
.bp-services-line {
    font-family: var(--blb-font-body);
    font-style: italic;
    color: var(--blb-gold);
    font-size: var(--l-tagline-size, 1.05rem);
    margin: -0.35rem 0 0.8rem;
}

.bp-name {
    font-family: var(--blb-font-body);
    font-size: var(--l-name-size, 1.9rem);
    line-height: 1.2;
    margin: 0 0 0.8rem;
    color: var(--blb-white);
}

.bp-tagline {
    font-family: var(--blb-font-body);
    font-style: italic;
    color: var(--blb-gold);
    font-size: var(--l-tagline-size, 1.05rem);
    margin: -0.35rem 0 0.8rem;
}

.bp-desc {
    color: var(--blb-text);
    font-size: var(--l-body-size, 0.95rem);
    line-height: 1.55;
    margin: 0 0 1.1rem;
}

/* margin-top: auto pushes this row to the bottom of .bp-hero-info, which
   stretches to the hero's full height. The slack lands above the buttons
   instead of below them, so they sit on the hero's bottom edge however
   long the description above happens to run. */
.bp-buttons { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-top: auto; }

.bp-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    background-color: transparent;
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.55rem;
    padding: var(--l-btn-pad, 0.5rem 1rem);
    color: var(--blb-text);
    text-decoration: none;
    font-size: var(--l-btn-size, 0.9rem);
    white-space: nowrap;
    cursor: pointer;
}
.bp-btn:hover { border-color: var(--blb-accent); color: var(--blb-accent); }
.bp-btn svg { width: var(--l-btn-icon, 1rem); height: var(--l-btn-icon, 1rem); }
.bp-btn-img { width: var(--l-btn-img, 1.1rem); height: var(--l-btn-img, 1.1rem); }

/* Icon contact rows. Height needs no floor of its own - every row below
   is a fixed number of lines, so the column's height is deterministic and
   the hero it sits in is the same on all 374 pages. */
.bp-contact {
    display: flex;
    flex-direction: column;
}

/* THE fix for the hero resizing. Every other contact row is a known
   number of lines - address is always 2 (street + locality, each with a
   placeholder when absent), phone and email are always 1 - but the hours
   row ran 1 to 3 lines, so the column, and with it the whole hero, grew
   and shrank per business.

   Reserving the tallest case here makes all four rows fixed, so the
   column's height is deterministic and the rows always sit at the same
   y positions. A min-height on the CONTAINER was not enough on its own:
   with space-between the container stayed one size but redistributed the
   slack, sliding the phone and hours rows up and down instead.

   3 = HERO_HOURS_MAX_LINES in business/[slug].astro, the cap on the hero
   summary, so this is genuinely the worst case. 1.5 is the line-height
   from .bp-crow p above; --l-body-size makes it follow the per-device
   type scale on its own. Change --l-hours-lines and HERO_HOURS_MAX_LINES
   together.

   The reservation sits on the ROW, not on its <p>. Same overall height
   either way, but on the row it lets .bp-crow's own `align-items: center`
   centre the hours vertically in the reserved space - a 1-line business
   sits in the middle of the block rather than hanging from the top of it,
   level with its icon. */
.bp-crow-hours {
    min-height: calc(var(--l-hours-lines, 3) * 1.5 * var(--l-body-size, 0.95rem));
}

/* "Full hours below" pointer, shown only when a business keeps more
   distinct schedules than the hero summary has room for. Same muted
   treatment as the Unavailable placeholders, but a separate class - it
   points somewhere rather than reporting missing data. */
.bp-hours-more {
    color: var(--blb-unavailable);
    font-style: italic;
    font-family: var(--blb-font-body);
    font-size: min(1em, max(11.5px, var(--unavailable-size, 0.98rem)));
}
.bp-crow {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    padding: 0.75rem 0;
    border-bottom: 0.0625rem solid var(--blb-card-border);
}
.bp-crow:first-child { padding-top: 0; }
.bp-crow:last-child { border-bottom: none; padding-bottom: 0; }
.bp-crow p {
    margin: 0;
    color: var(--blb-text);
    font-size: var(--l-body-size, 0.95rem);
    line-height: 1.5;
}

.bp-icon {
    flex-shrink: 0;
    width: var(--l-icon-size, 2.3rem);
    height: var(--l-icon-size, 2.3rem);
    border-radius: 50%;
    background-color: var(--blb-green);
    color: var(--blb-accent);
    display: flex;
    align-items: center;
    justify-content: center;
}
.bp-icon svg { width: var(--l-icon-svg, 1.05rem); height: var(--l-icon-svg, 1.05rem); }

.bp-tel { color: var(--blb-text); text-decoration: underline; }
.bp-tel:hover { color: var(--blb-accent); }

/* ── Card grid (desktop: 4 columns; wide cards span 2) ── */
.bp-grid {
    display: grid;
    /* col 4 (Current Promotions / Find Us) is widest, like the mockup;
       cols 2+3 together form the wide Photos / What We Do slot */
    grid-template-columns: var(--l-grid-cols, 1fr 0.95fr 0.95fr 1.4fr);
    gap: var(--l-card-gap, 1rem);
}
.bp-grid .bp-card { margin-bottom: 0; }
/* The card grid itself needs the standard gap below it - its cards
   have margin-bottom:0, so without this the next section (More X
   Services, or the thank-you strip when that's hidden) sits flush
   against the Services card. */
.bp-grid { margin-bottom: var(--l-card-gap, 1rem); }
.bp-wide { grid-column: var(--l-wide-span, span 2); }
.bp-map-card { grid-column: var(--l-map-span, auto); }
.bp-services-card { grid-column: var(--l-services-span, 1 / -1); }

/* About Us / Hours placement. Values come from layout.js per device:
   desktop swaps them ("2 / 1" and "1 / 1" = row/column pins, the
   grid auto-flows everything else around them); tablet stretches
   About full-width ("auto / span 2"); mobile leaves both "auto"
   (normal stacking order). Fallback "auto" = original source order
   if layout.js ever fails to load. */
.bp-about-card { grid-area: var(--l-about-area, auto); }
.bp-hours-card { grid-area: var(--l-hours-area, auto); }

.bp-card-title {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    font-size: var(--l-title-size, 0.95rem);
    font-weight: 700;
    color: var(--blb-white);
    margin: 0 0 0.9rem;
}
.bp-card-title svg {
    width: var(--l-title-svg, 1.05rem);
    height: var(--l-title-svg, 1.05rem);
    color: var(--blb-accent);
    flex-shrink: 0;
}

.bp-card-title-link {
    margin-left: auto;
    font-size: var(--l-title-link, 0.8rem);
    font-weight: 400;
    color: var(--blb-accent);
    text-decoration: none;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    font-family: var(--blb-font-sans);
}
/* Touch target: renders 64x15 on a phone. Same technique as the promo
   arrow - the nearest other link is 554px away, so there is nothing for
   the grown hit area to collide with. */
.bp-card-title-link { position: relative; display: inline-block; }
.bp-card-title-link::after {
    content: "";
    position: absolute;
    inset: -1.6rem -0.8rem;
}

.bp-card-title-link:hover { color: var(--blb-highlight); }

.bp-text {
    color: var(--blb-text);
    font-size: var(--l-body-size, 0.95rem);
    line-height: 1.55;
    margin: 0;
}

/* Hours table */
.bp-hours { width: 100%; border-collapse: collapse; }
.bp-hours td { padding: 0.32rem 0; font-size: var(--l-hours-size, 0.9rem); }
.bp-day  { color: var(--blb-text); }
.bp-time { color: var(--blb-text-muted); text-align: right; }
.bp-closed { color: var(--blb-gold); }

/* Photos: horizontal strip */
.bp-photos {
    display: grid;
    grid-template-columns: var(--l-photos-cols, repeat(4, 1fr));
    gap: 0.7rem;
}
.bp-photos img {
    width: 100%;
    aspect-ratio: 1 / 1;
    object-fit: cover;
    border-radius: 0.55rem;
}

/* Promotions carousel */
.bp-promo { display: none; }

/* The promos card is a flex column: the carousel stretches to fill
   the card's height, the active promo box stretches to fill the
   carousel, and the arrows/dots row pins to the card's bottom edge
   instead of floating in the leftover space. */
.bp-promos-card { display: flex; flex-direction: column; }
.bp-promos-card .bp-card-title { flex-shrink: 0; }
.bp-promo-carousel {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    min-height: 0;
}
/* The track has a FIXED height (per device via layout.js) so the
   card never changes size as the carousel cycles between promos of
   different lengths - without this, every 5-second advance shifts
   all the sections below up or down on stacked (mobile/tablet)
   layouts. A promo longer than the window scrolls inside its box;
   the full text is always available under "View all". */
.bp-promo-track {
    flex: 0 0 auto;
    height: var(--l-promo-box-h, 10.5rem);
    display: flex;
    flex-direction: column;
}
.bp-promo.active {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
}

.bp-promo,
.bp-modal-promos .bp-promo {
    background: linear-gradient(120deg, var(--blb-green) 0%, var(--blb-green-deep) 100%);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.7rem;
    padding: 1rem 1.1rem;
}
.bp-modal-promos .bp-promo { display: block; margin-bottom: 0.9rem; }

.bp-promo-title {
    color: var(--blb-gold);
    font-family: var(--blb-font-body);
    font-weight: 700;
    font-size: var(--l-promo-title, 1.15rem);
    margin: 0 0 0.35rem;
}
.bp-promo-text {
    color: var(--blb-text);
    font-size: var(--l-promo-text, 0.9rem);
    margin: 0;
    line-height: 1.5;
}
/* In the stretched promo box the button anchors to the bottom;
   in the View-all modal (block layout) it keeps simple spacing. */
.bp-promo-btn { margin-top: auto; align-self: flex-start; }
.bp-modal-promos .bp-promo-btn { margin-top: 0.8rem; }

.bp-promo-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.8rem;
    margin-top: auto;       /* pins arrows + dots to the card bottom */
    padding-top: 0.8rem;
    flex-shrink: 0;
}
.bp-promo-arrow {
    background: none;
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 50%;
    width: var(--l-promo-arrow, 1.9rem);
    height: var(--l-promo-arrow, 1.9rem);
    color: var(--blb-text);
    font-size: var(--l-promo-arrow-font, 1.1rem);
    line-height: 1;
    cursor: pointer;
}
/* Touch target. The arrow renders at 31x31 on a phone, under the 44px
   guideline. Rather than resize it (which would change the design), grow
   only the region that receives the tap. Measured safe: the two arrows
   sit 53px apart, so 6.4px of growth per side cannot make their hit
   areas overlap. Not applied to .bp-promo-dot - those are only 4px
   apart, and overlapping dot targets would send taps to the wrong dot,
   which is worse than a small one. */
.bp-promo-arrow { position: relative; }
.bp-promo-arrow::after {
    content: "";
    position: absolute;
    inset: -0.7rem;
}

.bp-promo-arrow:hover { border-color: var(--blb-accent); color: var(--blb-accent); }

.bp-promo-dots { display: flex; gap: 0.45rem; }
.bp-promo-dot {
    width: var(--l-promo-dot, 0.55rem);
    height: var(--l-promo-dot, 0.55rem);
    border-radius: 50%;
    border: none;
    background-color: var(--blb-card-border);
    cursor: pointer;
    padding: 0;
}
.bp-promo-dot.active { background-color: var(--blb-accent); }

/* What We Do */
.bp-wwd {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
    gap: 1.1rem;
}
.bp-wwd-item .bp-icon { margin-bottom: 0.55rem; }
.bp-wwd-title {
    color: var(--blb-white);
    font-weight: 700;
    font-size: var(--l-wwd-title, 0.92rem);
    margin: 0 0 0.3rem;
}
.bp-wwd-text  {
    color: var(--blb-text);
    font-size: var(--l-wwd-text, 0.86rem);
    line-height: 1.5;
    margin: 0;
}
.bp-wwd-note {
    margin-top: 1rem;
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.6rem;
    background-color: var(--blb-green);
    padding: 0.65rem 1rem;
    text-align: center;
}
.bp-wwd-note p {
    margin: 0;
    color: var(--blb-text);
    font-size: var(--l-wwd-note, 0.88rem);
}

/* Service chips */
.bp-chips { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.bp-chip {
    display: inline-block;
    background-color: var(--blb-green);
    color: var(--blb-text);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 2rem;
    padding: var(--l-chip-pad, 0.4rem 0.95rem);
    text-decoration: none;
    font-size: var(--l-chip-size, 0.9rem);
}
.bp-chip:hover { border-color: var(--blb-accent); color: var(--blb-highlight); }

/* Stand-in for the map when a business has no street address. Matches the
   iframe's height exactly so the Find Us card - and the grid row it sits
   in - is the same size with or without a map. */
.bp-map-empty {
    height: var(--l-map-h, 16rem);
    /* border INSIDE the height, or the card ends up 2px taller than the
       one holding a real map and the grid row shifts again. */
    box-sizing: border-box;
    border-radius: 0.7rem;
    background-color: var(--blb-green-deep);
    border: 0.0625rem solid var(--blb-card-border);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}

.bp-map iframe {
    border: 0;
    border-radius: 0.7rem;
    display: block;
    height: var(--l-map-h, 16rem);
}

/* ── Overlays (photos / promotions), same pattern as the card modal ── */
.bp-modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 2000;
    background-color: var(--blb-overlay-modal);
    align-items: center;
    justify-content: center;
    padding: 1.5rem;
}
.bp-modal.open { display: flex; }

.bp-modal-content {
    position: relative;
    background-color: var(--blb-card);
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.9rem;
    padding: 1.5rem;
    max-width: 60rem;
    width: 100%;
    max-height: 85vh;
    max-height: 85dvh;
    overflow-y: auto;
    text-align: left;
}

.bp-modal-close {
    position: absolute;
    top: 0.6rem;
    right: 0.9rem;
    background: none;
    border: none;
    color: var(--blb-text);
    font-size: var(--l-modal-close, 1.8rem);
    cursor: pointer;
    line-height: 1;
}
.bp-modal-close:hover { color: var(--blb-accent); }

.bp-modal-photos {
    display: grid;
    grid-template-columns: var(--l-modal-photos-cols, repeat(3, 1fr));
    gap: 0.8rem;
}
.bp-modal-photos img {
    width: 100%;
    border-radius: 0.55rem;
}

/* Related businesses ("More X Services") — desktop: one row of 6
   small cards; tablet/mobile: 2-up, first 4 only (see the device
   rules at the bottom of this section). */
.bp-related {
    display: grid;
    grid-template-columns: repeat(var(--l-related-cols, 6), 1fr);
    gap: var(--l-card-gap, 1rem);
}
.bp-related-item {
    display: block;
    text-decoration: none;
    border: 0.0625rem solid var(--blb-card-border);
    border-radius: 0.7rem;
    padding: var(--l-related-pad, 0.6rem);
    background-color: var(--blb-green-deep);
}
.bp-related-item:hover { border-color: var(--blb-accent); }
.bp-related-item img {
    width: 100%;
    aspect-ratio: 1 / 1;
    object-fit: cover;
    border-radius: 0.55rem;
    margin-bottom: 0.6rem;
}
.bp-related-name {
    color: var(--blb-white);
    font-weight: 700;
    font-size: var(--l-related-name, 0.82rem);
    margin: 0 0 0.2rem;
}
.bp-related-type {
    color: var(--blb-text-faint);
    font-size: var(--l-related-type, 0.74rem);
    font-style: italic;
    margin: 0;
}

/* Legibility floor for the two smallest labels on the page, and ONLY on
   phones. The root scales down below the 393/412 reference widths, which
   is what keeps narrow phones from overflowing - but it also drags the
   smallest text with it: on a 344px Fold5 cover these landed at 10.4px
   and 11.2px. The floor lifts just those cases; at the reference widths
   both are already above it, so nothing changes on the phone the design
   was tuned against, and desktop/tablet never see this rule at all. */
@media (max-width: 600px),
       (min-width: 601px) and (max-width: 1040px) and (orientation: landscape) {
    .bp-related-type { font-size: max(11.5px, var(--l-related-type, 0.74rem)); }
    .bp-open-badge   { font-size: max(11.5px, var(--l-badge-size, 0.72rem)); }
}

/* Thank-you strip + footer */
.bp-thanks {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.8rem;
    margin-top: 1rem;
    margin-bottom: 0;
    padding: 1rem;
}
.bp-thanks svg {
    width: var(--l-thanks-svg, 1.3rem);
    height: var(--l-thanks-svg, 1.3rem);
    color: var(--blb-accent);
    flex-shrink: 0;
}
.bp-thanks p {
    margin: 0;
    font-family: var(--blb-font-body);
    font-style: italic;
    font-size: var(--l-thanks-size, 1rem);
    color: var(--blb-text);
}

/* font-size: this was the only text on the business page with no --l-*
   variable behind it, so it fell through to the base 1rem and rendered at
   the raw root - 9.1px on a 393px phone, 8.0px on a 344px one. Reuse the
   thank-you strip's size, which layout.js already scales per device. */
.bp-footer { text-align: center; margin-top: 1rem; color: var(--blb-text-faint); font-size: var(--l-thanks-size, 1rem); }

/* ── Device-class structural rules (classes set by layout.js) ──
   The page renders 6 related businesses; tablet and mobile show
   only the first 4 (best category matches) to keep the page short.
   nth-child can't read a CSS variable, so this one lives here
   instead of in layout.js. */
.l-tablet .bp-related-item:nth-child(n + 5),
.l-mobile .bp-related-item:nth-child(n + 5) {
    display: none;
}

/* Mobile & tablet: hide the top-bar search icon site-wide — only the
   hamburger shows below desktop widths. To bring search back on
   tablets, delete the .l-tablet line. */
.l-mobile .nav_search_btn,
.l-tablet .nav_search_btn {
    display: none;
}
