/* =====================================================================
   Ad Agentur — Mobile App Navigation
   Ported from the approved interactive mockup.
   - Shows only at <= 1024px (tablet/phone). Desktop is untouched.
   - Uses transform/opacity/height only for animation (compositor-friendly).
   - Respects safe-area insets and prefers-reduced-motion.
   Icons: Font Awesome 4.7 (fas/fa-) + theme "Happy Icons" (hm hm-) —
   authors pick icons in the WP menu CSS-class field (see guide).
   ===================================================================== */

:root{
  /* Brand core */
  --aa-blue:#265E9A; --aa-blue-ink:#0C447C; --aa-blue-sub:#C2DCF6;
  --aa-blue-tint:#EEF4FA;
  /* Semantic accents — deliberately narrow:
     green = "live / available right now" (status dot only)
     star  = rating gold (trust line only) */
  --aa-green:#8ec047; --aa-star:#E8A93C;
  --aa-ink:#33434C; --aa-muted:#5F5E5A; --aa-line:#ECEBE7;
  --aa-bg:#F7F7F7; --aa-white:#fff;
  /* Bar/button theming — all overridable per-site from Appearance -> Mobile
     Nav -> Branding/Buttons; these are just the shipped defaults. */
  --aa-bar-bg:#fff; --aa-pill-text:#fff; --aa-hover-bg:#e8e8e5;
  --aa-radius-tile:16px; --aa-radius-pill:50px; --aa-btn-size:44px;
  --aa-ease:cubic-bezier(.16,1,.3,1);
  --aa-bar-h:84px;
  --aa-safe-b:env(safe-area-inset-bottom,0px);
}

/* Hide entire component on desktop */
@media (min-width:1025px){ #aa-mnav-root{ display:none !important; } }

/* The fixed .aa-bar sits on top of normal document flow, so without this the
   last ~84px of every page (footer content, last section) renders underneath
   it. Reserve that space at the same breakpoint the bar itself appears at. */
@media (max-width:1024px){
  body{ padding-bottom:calc(var(--aa-bar-h) + var(--aa-safe-b)); }
}

/* Borlabs Cookie's persistent "reopen consent settings" icon (shown after a
   choice is made, not just during the dialog) defaults to bottom:0;left:0 —
   a 72x72px hit area that lands almost exactly on top of our 44px menu
   button underneath it. This isn't a stacking-order problem (unlike the
   consent-blocking overlay handled above): the two occupy the same physical
   corner, so no z-index value fixes it, only moving one of them does.
   Floating it just above our bar (same corner, so it stays recognisable)
   rather than hiding it — a persistent way to reopen cookie settings is
   generally expected to stay reachable. .brlbs-cmpnt-widget.brlbs-bottom-0
   (two classes) is needed to outrank Borlabs' own single-class
   .brlbs-bottom-0 utility, which loads after this stylesheet. */
@media (max-width:1024px){
  .brlbs-cmpnt-widget.brlbs-bottom-0{ bottom:calc(var(--aa-bar-h) + var(--aa-safe-b) + 8px) !important; }
}
/* That repositioned spot sits right where our sheet's bottom edge lands when
   open — and Borlabs' widget (z-index 999998) is still above our sheet
   (999991), so it would float on top of the open sheet's content. While the
   sheet is open it should sit behind it instead, same as any other page
   content would. A CSS :has()-based override here (matching the pattern
   above) reliably failed to take effect even with !important against a
   single non-important Borlabs rule — behaviour that shouldn't happen on
   plain cascade rules, so something about how/when Borlabs applies this
   specific style resists a static CSS override. Handled in JS instead (see
   openNav()/closeNav()), which sets this only exactly when needed and can
   be verified immediately rather than relying on cascade timing. */

/* Root wrapper is fixed and does not affect page layout (no CLS) */
/* Inherits the theme's own body font by default -- matches whatever site
   this is installed on with zero configuration. A per-site override (if
   one is set in Appearance -> Mobile Nav -> Branding -> Typography) is
   printed as a later, equal-specificity #aa-mnav-root rule and wins. */
#aa-mnav-root{ font-family:inherit; }
#aa-mnav-root *{ box-sizing:border-box; }

/* ---- RESET BOUNDARY ----
   Themes (Kadence) and page builders (Elementor) ship blanket
   `button {}` / `a {}` rules that bleed into this component (e.g. a blue
   button background making the back-chevron invisible). Neutralise every
   interactive element here, then rebuild only what we style below.

   CRITICAL: the reset must carry ZERO specificity so every component class
   wins. `#aa-mnav-root :where(button, a)` still resolves to specificity
   (1,0,0) — the `#aa-mnav-root` ID sits outside the :where() — which still
   outranks single-class component rules like `.aa-morph` (0,1,0) and flattens
   them to display:inline/position:static. Wrapping `#aa-mnav-root` itself in
   :where() too drops the whole selector to (0,0,0) so component classes win. */
:where(#aa-mnav-root) :where(button, a){
  all:unset;
  box-sizing:border-box;
  -webkit-tap-highlight-color:transparent;
  cursor:pointer;
  font-family:inherit;
}
:where(#aa-mnav-root) :where(button){ background:transparent; }
/* all:unset resolves `appearance` to its initial value (auto), not none — it
   does NOT strip native OS widget chrome. Kadence explicitly ships
   `button{ appearance:button }` (specificity 0,0,1), which beats the
   zero-specificity :where() reset above, so iOS Safari kept rendering every
   <button>'s native rounded-rect press highlight on top of our own circular
   backgrounds (the darker-grey "square with rounded corners" behind
   .aa-x/.aa-back-shared on tap). This needs real specificity, not :where(),
   to win against that. */
#aa-mnav-root button,
#aa-mnav-root a{ appearance:none; -webkit-appearance:none; }
/* Same reasoning as appearance above, for the tap-highlight flash instead of
   the resting appearance: the :where() copy at the top only wins if nothing
   else touches this property with real specificity. Setting it again here
   with an ID guarantees it regardless of what any theme/plugin does. */
#aa-mnav-root button,
#aa-mnav-root a{ -webkit-tap-highlight-color:transparent; }
/* Restore accessible focus (all:unset removed it) */
#aa-mnav-root button:focus-visible,
#aa-mnav-root a:focus-visible{ outline:3px solid var(--aa-blue); outline-offset:2px; border-radius:8px; }

/* ---- Bundled SVG icons (no font dependency) ---- */
#aa-mnav-root .aa-svg{ width:1em; height:1em; display:block; flex-shrink:0; }
/* icon containers set the em-size; the svg inherits it */
.aa-tile .aa-ic .aa-svg{ width:21px; height:21px; }
.aa-srow .aa-ic .aa-svg{ width:18px; height:18px; }
.aa-chev .aa-svg{ width:15px; height:15px; }
.aa-x .aa-svg{ width:16px; height:16px; }
.aa-btn .aa-svg{ width:19px; height:19px; }
.aa-star .aa-svg{ width:13px; height:13px; }
.aa-m-icon .aa-svg{ width:23px; height:23px; }
.aa-open .aa-m-icon .aa-svg{ width:18px; height:18px; transition:width .34s var(--aa-ease),height .34s var(--aa-ease); }
.aa-m-arrow .aa-svg{ width:18px; height:18px; }

/* ---- Scrim ---- */
/* z-index was 2147483000-2147483002 (near the 32-bit max) on scrim/sheet/bar
   — high enough to render (and stay clickable) ON TOP of Borlabs Cookie's
   full-viewport consent-blocking overlay (z-index 999999, itself fully
   transparent — it's a click-shield, not a dim layer). That let visitors
   open the nav, call, or navigate before making a cookie choice, which
   defeats the consent gate, and also visually put our opaque bar on top of
   the consent dialog instead of the other way around. Dropped below
   Borlabs' 999998/999999 (still comfortably above ordinary page content) so
   Borlabs' dialog and blocking overlay correctly render above — and block —
   this component until a choice is made; same relative order preserved. */
.aa-scrim{
  position:fixed; left:0; right:0; top:0;
  bottom:calc(var(--aa-bar-h) + var(--aa-safe-b));
  background:rgba(20,30,45,.32); opacity:0; pointer-events:none;
  transition:opacity .28s var(--aa-ease); z-index:999990;
  -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px);
}
.aa-open .aa-scrim{ opacity:1; pointer-events:auto; }

/* ---- Sheet (height driven by content, capped) ---- */
.aa-sheet{
  position:fixed; left:0; right:0;
  bottom:calc(var(--aa-bar-h) + var(--aa-safe-b));
  background:var(--aa-white); border-radius:26px 26px 0 0;
  z-index:999991; box-shadow:0 -12px 40px rgba(0,0,0,.14);
  display:flex; flex-direction:column;
  transform:translateY(calc(102% + var(--aa-bar-h)));
  transition:transform .34s var(--aa-ease);
  max-height:calc(100dvh - var(--aa-bar-h) - var(--aa-safe-b) - 20px);
}
.aa-open .aa-sheet{ transform:translateY(0); }
/* Touch target is taller (20px) than the visible bar (4px) — the visible
   bar is a centred ::after so the drag handle stays easy to grab without
   looking oversized. touch-action:none hands the gesture fully to JS. */
.aa-grip{ width:100%; height:20px; position:relative; touch-action:none; }
.aa-grip::after{ content:""; position:absolute; top:9px; left:50%; transform:translateX(-50%); width:38px; height:4px; background:#d8dade; border-radius:3px; }

/* min-height:44px reserves the .aa-x/.aa-back-shared circles' full footprint
   inside this row — without it the 44px circles overflowed the ~32px row and
   the next section (.aa-viewport, opaque, later in paint order) clipped their
   bottom edge. */
.aa-sheet-head{ display:flex; align-items:center; justify-content:center; padding:4px 16px 8px; position:relative; min-height:44px; }
/* Trust line — colours set explicitly so no theme link colour leaks in.
   Text is ink (passes AA); the star keeps the amber/gold rating convention. */
.aa-trust{ display:inline-flex; align-items:center; gap:5px; font-size:12px; color:var(--aa-ink); text-decoration:none; }
.aa-trust b{ color:var(--aa-ink); font-weight:700; }
.aa-trust .aa-star{ color:var(--aa-star); }
/* #aa-mnav-root prefix (not just .aa-x) is required here, in every state:
   Kadence ships a global `button:hover, button:focus, button:active{ color:
   var(--global-palette-btn-hover); background:var(--global-palette-btn-bg-
   hover) }` rule (specificity 0,1,1) — the site's blue accent. A bare
   `.aa-x:active{ background:... }` (0,1,1) ties with it and Kadence wins the
   tie since it loads after this stylesheet; a bare `.aa-x{ color:... }`
   (0,1,0) loses outright. This is the same class of leak as .aa-srow/.aa-
   legal a — mobile-only, so tap alone (:active) is enough to trigger it,
   which is why it looked like an intermittent, ring-less flash of blue.
   Prefixing with the ID (1,1,0 / 1,1,1) beats Kadence's rule unconditionally
   in every state, close/back stay passive grey always. */
/* close (×) and the shared back control are <span role="button"> now, not
   <button> — after four rounds of overriding native <button> chrome
   (colour leak, focus ring, appearance:button, tap-highlight) on iOS Safari,
   the actual final holdout was border-radius: the back control (toggled
   display:none → flex via :has(), unlike .aa-x which is always in the
   flex flow) rendered as a native rounded-rect regardless of our
   border-radius:50%, a known WebKit quirk where a dynamically-shown native
   <button> doesn't fully recompute appearance/theming on first paint. A
   <span> has no native form-control theming to fight in the first place, so
   this is structural rather than another property to chase. cursor/
   tap-highlight/user-select, previously free from the button/a reset below,
   now need to be set explicitly since spans aren't part of that reset. */
#aa-mnav-root .aa-x{ position:absolute; right:10px; top:50%; transform:translateY(-50%); width:44px; height:44px; border-radius:50%; background:var(--aa-bg); display:flex; align-items:center; justify-content:center; color:var(--aa-ink); cursor:pointer; -webkit-tap-highlight-color:transparent; -webkit-user-select:none; user-select:none; transition:background .15s; }
#aa-mnav-root .aa-x:hover,
#aa-mnav-root .aa-x:focus,
#aa-mnav-root .aa-x:active{ background:var(--aa-hover-bg) !important; }
#aa-mnav-root .aa-x,
#aa-mnav-root .aa-x:focus,
#aa-mnav-root .aa-x:focus-visible{ outline:none !important; }
/* Shared back control for drill-down panels — mirrors .aa-x exactly (same
   grey circle, same ink colour, same active state) so both read as equally
   passive chrome controls. Neither is ever brand blue — blue is reserved for
   the CTA morph per the colour rules. Hidden unless a detail panel is open. */
#aa-mnav-root .aa-back-shared{ display:none; position:absolute; left:10px; top:50%; transform:translateY(-50%); width:44px; height:44px; border-radius:50%; background:var(--aa-bg); align-items:center; justify-content:center; color:var(--aa-ink); cursor:pointer; -webkit-tap-highlight-color:transparent; -webkit-user-select:none; user-select:none; transition:background .15s; }
#aa-mnav-root .aa-back-shared:hover,
#aa-mnav-root .aa-back-shared:focus,
#aa-mnav-root .aa-back-shared:active{ background:var(--aa-hover-bg) !important; }
#aa-mnav-root .aa-back-shared,
#aa-mnav-root .aa-back-shared:focus,
#aa-mnav-root .aa-back-shared:focus-visible{ outline:none !important; }
.aa-back-shared .aa-svg{ width:16px; height:16px; }
/* #aa-mnav-root prefix needed here too, now that the base .aa-back-shared
   rule above also carries the ID (both need it — an ID selector always beats
   a non-ID one regardless of how many classes/pseudo-classes it has, so
   without this the base rule's display:none would permanently win). */
#aa-mnav-root .aa-sheet:has(.aa-detail.aa-open-detail) .aa-back-shared{ display:flex; }

/* ---- Viewport / rail / panels ---- */
.aa-viewport{ position:relative; overflow:hidden; min-height:0; height:320px; transition:height .32s var(--aa-ease); }
.aa-rail{ display:flex; align-items:flex-start; width:200%; transition:transform .34s var(--aa-ease); touch-action:pan-y; }
.aa-rail.aa-dragging{ transition:none; }
.aa-panel{ width:50%; padding:6px 18px 4px; display:flex; flex-direction:column; gap:9px; max-height:100%; overflow-y:auto; -webkit-overflow-scrolling:touch; }

/* reassurance strip */
.aa-badges{ display:flex; gap:7px; overflow-x:auto; padding:2px 0 8px; scrollbar-width:none; -ms-overflow-style:none; touch-action:pan-x; overscroll-behavior-x:contain; }
.aa-badges::-webkit-scrollbar{ display:none; }
.aa-badge{ flex-shrink:0; display:inline-flex; align-items:center; gap:5px; font-size:10px; font-weight:500; color:var(--aa-blue-ink); background:var(--aa-blue-tint); padding:5px 11px; border-radius:20px; white-space:nowrap; }
.aa-badge-ic{ display:inline-flex; }
.aa-badge-ic .aa-svg{ width:11px; height:11px; }

/* tiles — #aa-mnav-root prefix required, same leak as .aa-btn above: a
   drill-down tile (one with children) renders as a real <button>, and a
   bare .aa-tile{border:none} (0,1,0) lost to a theme/Elementor Kit rule
   scoped to the button tag with higher specificity, showing as a stray
   coloured border around any "hero"/featured tile on a real site. */
#aa-mnav-root .aa-tile{ display:flex; align-items:center; gap:12px; padding:13px 15px; border-radius:var(--aa-radius-tile); background:var(--aa-bg); border:none; width:100%; text-align:left; cursor:pointer; font-family:inherit; text-decoration:none; color:var(--aa-ink); transition:transform .1s var(--aa-ease),background .15s; }
#aa-mnav-root .aa-tile:active{ transform:scale(.975); }
#aa-mnav-root .aa-tile.aa-hero{ background:var(--aa-blue); }
#aa-mnav-root .aa-tile .aa-ic{ font-size:21px; flex-shrink:0; width:24px; text-align:center; }
#aa-mnav-root .aa-tile.aa-hero .aa-ic{ color:var(--aa-blue-sub); }
#aa-mnav-root .aa-tile:not(.aa-hero) .aa-ic{ color:var(--aa-blue); }
#aa-mnav-root .aa-tile .aa-tx{ flex:1; min-width:0; }
#aa-mnav-root .aa-tile .aa-t1{ display:block; font-size:14.5px; font-weight:600; line-height:1.2; }
#aa-mnav-root .aa-tile.aa-hero .aa-t1{ color:#fff; }
#aa-mnav-root .aa-tile:not(.aa-hero) .aa-t1{ color:var(--aa-blue); }

/* subheading — one static, or several auto-animated */
.aa-subs{ display:block; height:15px; overflow:hidden; position:relative; margin-top:3px; }
.aa-subs-track{ position:absolute; left:0; top:0; width:100%; }
.aa-subs-track > span{ display:block; height:15px; font-size:11px; line-height:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.aa-tile.aa-hero .aa-subs-track > span{ color:var(--aa-blue-sub); }
.aa-tile:not(.aa-hero) .aa-subs-track > span{ color:var(--aa-muted); }
.aa-subs-track.aa-animated{ animation:aaSubFlip 9s infinite; }
@keyframes aaSubFlip{ 0%,26%{transform:translateY(0)} 33%,59%{transform:translateY(-15px)} 66%,92%{transform:translateY(-30px)} 100%{transform:translateY(0)} }
.aa-tile .aa-chev{ font-size:15px; flex-shrink:0; }
.aa-tile.aa-hero .aa-chev{ color:var(--aa-blue-sub); }
.aa-tile:not(.aa-hero) .aa-chev{ color:#b9c2cc; }

/* secondary rows
   #aa-mnav-root prefix (not just .aa-srow) is required here: this plugin loads
   before the theme/Elementor, and Elementor's kit CSS ships `.elementor-kit-N a`
   (specificity 0,1,1) which otherwise outranks a bare `.aa-srow` (0,1,0) and
   recolours every link row with the sitewide link-green — exactly the kind of
   leak the RESET BOUNDARY above exists to prevent. */
#aa-mnav-root .aa-srow{ display:flex; align-items:center; gap:11px; padding:11px 6px; border:none; background:none; width:100%; text-align:left; cursor:pointer; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--aa-ink); text-decoration:none; border-bottom:.5px solid var(--aa-line); }
.aa-srow:last-child{ border-bottom:none; }
.aa-srow .aa-ic{ font-size:18px; color:var(--aa-blue); width:22px; text-align:center; flex-shrink:0; }
.aa-srow .aa-thumb{ width:26px; height:26px; border-radius:6px; flex-shrink:0; background-size:cover; background-position:center; background-color:var(--aa-blue-tint); }
.aa-srow .aa-chev{ margin-left:auto; color:#b9c2cc; font-size:14px; }
.aa-srow:active{ background:var(--aa-bg); }
.aa-beliebt{ font-size:9px; font-weight:600; color:var(--aa-blue-ink); background:var(--aa-blue-tint); padding:2px 7px; border-radius:8px; margin-left:auto; }

/* legal row — centered, one line where it fits
   Same leak as .aa-srow above: needs #aa-mnav-root to beat `.elementor-kit-N a`. */
.aa-legal{ display:flex; flex-wrap:wrap; justify-content:center; gap:6px 12px; padding:14px 6px 4px; }
#aa-mnav-root .aa-legal a{ font-size:11px; color:#9aa2ab; text-decoration:none; white-space:nowrap; }
#aa-mnav-root .aa-legal a:active{ color:var(--aa-blue); }

/* dots */
.aa-dots{ display:flex; justify-content:center; gap:6px; padding:8px 0 4px; }
/* #aa-mnav-root prefix: real <button> element, same leak class as .aa-btn/.aa-tile above. */
#aa-mnav-root .aa-dot{ width:6px; height:6px; border-radius:50%; background:#d5d8dc; transition:all .25s; border:none; padding:0; cursor:pointer; }
#aa-mnav-root .aa-dot.aa-on{ background:var(--aa-blue); width:18px; border-radius:3px; }

/* ---- Detail panel (drill-down) ----
   No header of its own: back/trust-line/close all live in the persistent
   .aa-sheet-head row (see .aa-back-shared above), so this is just the
   sliding body. */
.aa-detail{ position:absolute; inset:0; background:var(--aa-white); transform:translateX(101%); transition:transform .3s var(--aa-ease),visibility 0s linear .3s; z-index:20; display:flex; flex-direction:column; visibility:hidden; pointer-events:none; }
.aa-detail.aa-open-detail{ transform:translateX(0); visibility:visible; pointer-events:auto; transition:transform .3s var(--aa-ease); }
.aa-detail-body{ overflow-y:auto; padding:10px 18px 4px; flex:1; -webkit-overflow-scrolling:touch; }

/* ---- Bottom bar: morphs circle <-> pill ---- */
.aa-bar{
  position:fixed; left:0; right:0; bottom:0; z-index:999992;
  height:calc(var(--aa-bar-h) + var(--aa-safe-b));
  padding:0 22px var(--aa-safe-b);
  background:var(--aa-bar-bg); border-top:.5px solid var(--aa-line);
}
.aa-side{ position:absolute; top:0; height:var(--aa-bar-h); display:flex; align-items:center; transition:opacity .18s ease,transform .24s var(--aa-ease); }
.aa-side.aa-left{ left:24px; }
.aa-side.aa-right{ right:24px; }
.aa-open .aa-side{ opacity:0; transform:scale(.8); pointer-events:none; }
/* #aa-mnav-root prefix required (not just .aa-btn) — same leak as .aa-srow
   etc: the old .aa-btn.aa-book (two classes, specificity 0,2,0) accidentally
   had enough specificity to beat Kadence/Elementor's colour rules, but the
   bare .aa-btn (0,1,0) used by #aa-menu and now #aa-home does not. Confirmed
   live: #aa-home rendered in the sitewide link-green instead of ink the
   moment the aa-book override was removed.
   border:none here for the same reason, confirmed live on a real Elementor
   site: its Kit CSS applies a default border to every <button> element
   (button{border:...}, specificity 0,0,1) -- lower than #aa-mnav-root .aa-btn
   ever needed to beat once this exists, but this rule never declared
   `border` at all before, so there was nothing here to win that fight; the
   theme's border simply fell through unchallenged, showing as an unwanted
   coloured ring around the menu button on real devices. */
#aa-mnav-root .aa-btn{ width:var(--aa-btn-size); height:var(--aa-btn-size); border-radius:50%; background:var(--aa-bg); border:none; display:flex; align-items:center; justify-content:center; color:var(--aa-ink); transition:transform .1s,background .15s; }
#aa-mnav-root .aa-btn:hover,
#aa-mnav-root .aa-btn:focus,
#aa-mnav-root .aa-btn:active{ color:var(--aa-ink); background:var(--aa-hover-bg); }
#aa-mnav-root .aa-btn:active{ transform:scale(.94); }

/* ---- THE morphing element — OPTION B ----
   Closed: a compact labelled pill (icon + short verb, e.g. "Anrufen"), raised.
   Open:   expands to the full-width CTA (status line + number/label + arrow).
   The closed label lives in .aa-m-short; the open text in .aa-m-tx. */
.aa-morph{
  position:absolute; top:50%; left:50%;
  height:52px; margin-top:-6px;
  transform:translate(-50%,-50%);
  display:flex; align-items:center; gap:9px; padding:0 16px 0 7px;
  border-radius:var(--aa-radius-pill); background:var(--aa-blue); color:var(--aa-pill-text); text-decoration:none;
  /* Fallback first for browsers without color-mix() support, then the
     brand-colour-derived version (same alpha, but the actual configured
     brand colour instead of a fixed blue) -- the second line simply isn't
     applied by browsers that don't understand color-mix(), leaving the
     fallback in effect. */
  box-shadow:0 8px 20px rgba(38,94,154,.4);
  box-shadow:0 8px 20px color-mix(in srgb, var(--aa-blue) 40%, transparent);
  white-space:nowrap;
  transition:left .34s var(--aa-ease),right .34s var(--aa-ease),width .34s var(--aa-ease),
             padding .34s var(--aa-ease),margin-top .34s var(--aa-ease),box-shadow .34s var(--aa-ease);
  will-change:width;
}
/* Closed: pill hugs its content, centred (width:auto via inline flex) */
/* Open: stretch edge-to-edge inside the bar */
.aa-open .aa-morph{
  left:18px; right:18px; transform:translateY(-50%); margin-top:0; padding:0 16px 0 8px;
  box-shadow:0 8px 22px rgba(38,94,154,.32);
  box-shadow:0 8px 22px color-mix(in srgb, var(--aa-blue) 32%, transparent);
}

.aa-morph .aa-m-icon{
  width:38px; height:38px; flex-shrink:0; border-radius:50%; display:flex; align-items:center; justify-content:center; position:relative;
  background:rgba(255,255,255,.16);
  background:color-mix(in srgb, var(--aa-pill-text) 16%, transparent);
}
.aa-morph .aa-m-icon .aa-svg{ width:19px; height:19px; }

/* status dot on the icon avatar's corner (consistent closed & open) */
.aa-morph .aa-m-dot{ position:absolute; top:-1px; right:-1px; width:12px; height:12px; border-radius:50%; background:var(--aa-green); border:2px solid var(--aa-blue); box-sizing:border-box; pointer-events:none; }
.aa-morph.aa-hours-open .aa-m-dot{ animation:aaPulse 2s infinite; }
.aa-morph:not(.aa-hours-open) .aa-m-dot{ display:none; }   /* no dot outside business hours */
@keyframes aaPulse{ 0%{box-shadow:0 0 0 0 rgba(142,192,71,.7)} 70%{box-shadow:0 0 0 6px rgba(142,192,71,0)} 100%{box-shadow:0 0 0 0 rgba(142,192,71,0)} }

/* Closed label (short verb) — visible only when collapsed */
.aa-m-short{ font-size:14.5px; font-weight:600; color:var(--aa-pill-text); letter-spacing:.2px; }
.aa-open .aa-m-short{ display:none; }

/* Open text block — hidden when collapsed */
.aa-morph .aa-m-tx{ display:none; flex:1; min-width:0; overflow:hidden; }
.aa-open .aa-morph .aa-m-tx{ display:block; }
.aa-morph .aa-m-status{ display:block; font-size:9.5px; font-weight:500; color:var(--aa-blue-sub); text-transform:uppercase; letter-spacing:.3px; line-height:1.2; overflow:hidden; text-overflow:ellipsis; }
.aa-morph .aa-m-main{ display:block; font-size:14.5px; font-weight:600; color:var(--aa-pill-text); line-height:1.25; margin-top:1px; overflow:hidden; text-overflow:ellipsis; }
.aa-morph .aa-m-arrow{ flex-shrink:0; color:var(--aa-pill-text); display:none; }
.aa-open .aa-morph .aa-m-arrow{ display:block; }
.aa-morph .aa-m-arrow .aa-svg{ width:18px; height:18px; }
.aa-morph:active{ filter:brightness(.96); }

/* Focus visibility for keyboard users */
#aa-mnav-root :focus-visible{ outline:3px solid var(--aa-blue); outline-offset:2px; border-radius:8px; }

/* ---- Reduced motion ---- */
@media (prefers-reduced-motion:reduce){
  #aa-mnav-root *{ animation:none !important; transition-duration:.01ms !important; }
}
