/* ==========================================================================
   Marketing chrome (PR-2 of the nav redesign) — the signed-out header, Apps
   disclosure menu, and mobile sheet. Gate-1B "SKELETON SHELF" design.

   Loaded AFTER atlas-retirement-analyzer.css and consumes its tokens
   (--atlas-navy/-blue/-cyan, --ink, --muted, --line, --surface, --page).
   Nothing in this file may style the signed-in platform chrome beyond the
   visibility contract below; add NOTHING for this chrome to the big CSS.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Visibility contract (one place, two rules):
   - Default (no JS ran — rung 0 — or JS confirmed a guest): the marketing
     chrome is the one header; the platform chrome (the signed-in shell's
     substrate, untouched markup) is display:none.
   - body.mkt-authed (set by src/shared/marketingNav.js when a session
     exists): flip — platform chrome back, marketing chrome gone.
   marketingNav.js also sets body.mkt-guest for the confirmed-guest state so
   tests and future CSS can key on it; visibility itself keys on .mkt-authed
   only, so a JS failure leaves a guest with a fully working menu (rung 0).
   -------------------------------------------------------------------------- */
body:not(.mkt-authed) > header.platform-chrome { display: none; }
body.mkt-authed > header.mkt-chrome { display: none; }

/* Skip link: first element in <body>, visually parked off-screen until it
   receives keyboard focus. Works signed in or out, so it is never hidden. */
.mkt-skip {
  position: absolute;
  left: 8px;
  top: -52px;
  z-index: 120;
  background: var(--atlas-navy);
  color: #fff;
  padding: 10px 16px;
  border-radius: 12px;
  font-weight: 600;
  font-size: 14px;
  text-decoration: none;
  transition: top 0.15s ease;
}
.mkt-skip:focus-visible { top: 8px; }

/* ---------------- Header bar (sticky; 64px desktop / 56px mobile) --------- */
header.mkt-chrome {
  position: sticky;
  top: 0;
  z-index: 60; /* above page content, below .modal-backdrop (100) */
  height: 64px;
  background: var(--surface);
  border-bottom: 1px solid var(--line);
}
.mkt-chrome-inner {
  max-width: 1200px;
  margin: 0 auto;
  height: 100%;
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 0 20px;
}

/* Compact brand: the existing globe raster cropped into a navy tile via
   object-fit (Gate 1B-Q3 "crop only" — no new asset; PR-8 ships the optimized
   file). Explicit width/height attrs live on the <img> for zero layout shift. */
.mkt-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  font-weight: 800;
  letter-spacing: 0.06em;
  font-size: 17px;
  color: var(--atlas-navy);
  text-decoration: none;
  border-radius: 10px;
}
.mkt-brand-mark {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: var(--atlas-navy);
  overflow: hidden;
  display: grid;
  place-items: center;
  flex: none;
}
.mkt-brand-mark img {
  width: 24px;
  height: 24px;
  object-fit: cover; /* crops the wide ring tips; globe stays centered */
  display: block;
}

/* ---------------- Primary nav links --------------------------------------- */
.mkt-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-left: 8px;
}
.mkt-navlink {
  padding: 9px 14px;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  text-decoration: none;
  position: relative;
}
.mkt-navlink:hover { background: var(--page); }
/* Current page reads as a LOCATION (dot + underline), not a filled pill. */
.mkt-navlink[aria-current="page"] { font-weight: 700; }
.mkt-navlink[aria-current="page"]::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 4px;
  height: 2px;
  background: var(--atlas-navy);
  border-radius: 2px;
}
.mkt-navlink[aria-current="page"]::before {
  content: "\00b7";
  position: absolute;
  left: 4px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--atlas-blue);
  font-weight: 800;
}

/* ---------------- Apps disclosure (native details/summary) ---------------- */
details.mkt-apps { position: relative; }
details.mkt-apps > summary {
  list-style: none;
  cursor: pointer;
  padding: 9px 14px;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  display: flex;
  align-items: center;
  gap: 6px;
}
details.mkt-apps > summary::-webkit-details-marker { display: none; }
details.mkt-apps > summary:hover { background: var(--page); }
.mkt-caret { transition: transform 0.15s ease; font-size: 11px; }
details.mkt-apps[open] > summary .mkt-caret { transform: rotate(180deg); }
details.mkt-apps[open] > summary {
  background: var(--page);
  box-shadow: inset 0 -2px 0 var(--atlas-cyan);
}
/* The Apps entry OWNS app routes (same rule as the platform nav): location
   underline on the summary while an app/overview/hub view is current. */
details.mkt-apps[data-current="true"]:not([open]) > summary {
  font-weight: 700;
  box-shadow: inset 0 -2px 0 var(--atlas-navy);
}

/* Desktop popover panel (same DOM becomes the mobile sheet below 820px). */
.mkt-panel {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  width: 460px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 14px;
  box-shadow: 0 16px 40px rgba(20, 41, 76, 0.14);
  padding: 10px;
  z-index: 61;
}

/* Spine masthead: ONE CLIENT PROFILE — {n} CONNECTED APPS (count = navConfig). */
.mkt-spine-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  letter-spacing: 0.08em;
  font-weight: 700;
  color: var(--atlas-blue);
}
.mkt-spine-node {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 3px solid var(--atlas-blue);
  flex: none;
}

/* Shelf: vertical rail + one row per visible app (markup = navConfig.renderMenuRows). */
.mkt-shelf { position: relative; margin: 6px 0; padding-left: 17px; }
.mkt-shelf::before {
  content: "";
  position: absolute;
  left: 15px;
  top: 6px;
  bottom: 6px;
  width: 2px;
  background: var(--line);
  border-radius: 2px;
}
.mkt-shelf .nav-app-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-radius: 12px;
  position: relative;
  text-decoration: none;
  color: var(--ink);
}
.mkt-shelf .nav-app-row:hover,
.mkt-shelf .nav-app-row:focus-visible { background: var(--app-wash, var(--page)); }
.mkt-shelf .nav-app-row:hover::before,
.mkt-shelf .nav-app-row:focus-visible::before {
  content: "";
  position: absolute;
  left: -2px;
  top: 8px;
  bottom: 8px;
  width: 3px;
  border-radius: 2px;
  background: var(--app-accent, var(--atlas-blue));
}
.nav-app-tile {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  background: var(--app-accent, var(--atlas-blue));
  color: #fff;
  display: grid;
  place-items: center;
  font-size: 12px;
  font-weight: 800;
  flex: none;
}
.nav-app-text { display: block; min-width: 0; }
.nav-app-name { display: block; font-weight: 600; font-size: 15px; }
.nav-app-sub { display: block; font-size: 13px; color: var(--muted); }

/* Panel exit row: All apps → + honest count line. */
.mkt-panel-exit {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-top: 1px solid var(--line);
  padding: 10px 12px 6px;
  font-size: 14px;
}
.mkt-panel-exit a {
  color: var(--atlas-navy);
  text-decoration: none;
  border-radius: 8px;
}
.mkt-panel-exit a:hover { color: var(--atlas-blue); }
.mkt-count-line { color: var(--muted); font-size: 13px; }

/* Sheet-only content (site links + pinned CTA) stays out of the desktop popover. */
.mkt-sheet-only { display: none; }

/* ---------------- CTA + quiet Log in -------------------------------------- */
.mkt-spacer { flex: 1; }
.mkt-cta {
  background: var(--atlas-navy);
  color: #fff;
  padding: 10px 18px;
  border-radius: 12px;
  font-weight: 700;
  font-size: 15px;
  text-decoration: none;
}
.mkt-cta:hover { background: var(--atlas-blue); }
.mkt-login {
  font-size: 15px;
  color: var(--muted);
  padding: 9px 10px;
  border-left: 1px solid var(--line);
  margin-left: 6px;
  text-decoration: none;
  border-radius: 8px;
}
.mkt-login:hover { color: var(--ink); }
.mkt-login[aria-current="page"] { color: var(--ink); font-weight: 700; }

/* Keyboard focus: the one visible ring, matching the platform's focus system
   (atlas-retirement-analyzer.css :focus-visible pattern — cyan, 2px, offset 2). */
.mkt-skip:focus-visible,
.mkt-brand:focus-visible,
.mkt-navlink:focus-visible,
details.mkt-apps > summary:focus-visible,
.mkt-shelf .nav-app-row:focus-visible,
.mkt-panel-exit a:focus-visible,
.mkt-cta:focus-visible,
.mkt-login:focus-visible,
.mkt-sheet-links a:focus-visible {
  outline: 2px solid var(--atlas-cyan);
  outline-offset: 2px;
}

/* ---------------- Mobile (≤820px): 56px bar + full-screen sheet ------------
   Bar order: brand | spacer | compact Get Started | ☰ (right-most, thumb
   corner). The SAME <details> panel becomes a fixed sheet under the bar. */
@media (max-width: 820px) {
  header.mkt-chrome { height: 56px; }
  .mkt-chrome-inner { gap: 10px; padding: 0 14px; }
  .mkt-nav { display: contents; }
  .mkt-navlink, .mkt-login { display: none; }
  .mkt-spacer { order: 1; }
  .mkt-chrome-inner > .mkt-cta { order: 2; margin-left: auto; padding: 8px 14px; font-size: 14px; }
  details.mkt-apps { order: 3; }
  details.mkt-apps > summary { padding: 8px 10px; font-size: 0; }
  .mkt-caret { display: none; }
  details.mkt-apps > summary::before { content: "\2630"; font-size: 22px; line-height: 1; }
  details.mkt-apps[open] > summary::before { content: "\2715"; }
  details.mkt-apps[open] > summary { box-shadow: none; }
  details.mkt-apps[data-current="true"]:not([open]) > summary { box-shadow: none; }
  .mkt-panel {
    position: fixed;
    inset: 56px 0 0 0;
    width: auto;
    border-radius: 0;
    border: none;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    padding: 14px 14px calc(96px + env(safe-area-inset-bottom, 0px));
  }
  .mkt-sheet-only { display: block; }
  .mkt-sheet-links {
    list-style: none;
    margin: 10px 0 0;
    padding: 8px 0 0;
    border-top: 1px solid var(--line);
    display: grid;
    font-size: 16px;
  }
  .mkt-sheet-links a {
    display: block;
    padding: 13px 12px;
    border-radius: 12px;
    text-decoration: none;
    color: var(--ink);
  }
  .mkt-sheet-links a:hover { background: var(--page); }
  .mkt-sheet-links a[aria-current="page"] { font-weight: 700; }
  .mkt-sheet-links a[aria-current="page"]::after {
    content: "\00b7 here";
    color: var(--atlas-blue);
    font-size: 13px;
    margin-left: 8px;
  }
  /* Pinned conversion CTA in the thumb zone, above the sheet scroll. */
  .mkt-sheet-cta {
    position: fixed;
    left: 14px;
    right: 14px;
    bottom: calc(14px + env(safe-area-inset-bottom, 0px));
    text-align: center;
    padding: 15px;
    font-size: 16px;
    z-index: 70;
  }
  /* Body scroll-lock while the sheet is open (class set by marketingNav.js). */
  body.mkt-menu-open { overflow: hidden; }
}

/* The "How it works" jump target must clear the sticky marketing bar
   (64px desktop / 56px mobile — the larger value + breathing room covers both).
   Guest-scoped: signed-in views use the platform chrome and its own spacing. */
body:not(.mkt-authed) [data-toc-section="How it works"] { scroll-margin-top: 76px; }

@media (prefers-reduced-motion: reduce) {
  .mkt-skip { transition: none; }
  .mkt-caret { transition: none; }
}

/* ==========================================================================
   Marketing footer (PR-3 of the nav redesign) — navy conversion band +
   config-rendered site map. Same skeleton-shelf language as the chrome above.

   The <footer> keeps .platform-footer so the platform's existing
   platform-route-* rules (big CSS) still hide it inside the full-screen app
   shells — display is deliberately NOT declared here. Everything visual is
   re-declared under .mkt-footer: the big CSS's 1680px cap, side padding and
   top border are overridden, the band goes full-bleed navy, and the inner
   containers own the 1100px measure (mock.html footer section).
   ========================================================================== */
footer.mkt-footer {
  /* On-navy palette, local to the footer (tokens are light-surface colors). */
  --foot-ink: #e7edf6;   /* link/body text */
  --foot-dim: #b9c7dd;   /* thesis + microcopy */
  --foot-head: #9fb3d1;  /* column headings + legal base */
  --foot-rule: rgba(255, 255, 255, 0.15);
  max-width: none;
  margin: clamp(48px, 6vw, 88px) 0 0;
  padding: 0;
  border-top: 0;
  background: var(--atlas-navy);
  color: var(--foot-ink);
}

/* ---------------- Conversion band ----------------------------------------- */
.mkt-convert {
  max-width: 1100px;
  margin: 0 auto;
  padding: 26px 20px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  border-bottom: 1px solid var(--foot-rule);
  text-align: left;
}
.mkt-convert h2 {
  margin: 0;
  font-size: 20px;
  color: #fff;
}
.mkt-convert-micro {
  flex-basis: 100%;
  margin: -4px 0 0;
  font-size: 13px;
  color: var(--foot-dim);
}
/* The band CTA sits on navy — the header's navy pill would vanish, so the same
   component wears the inverted costume (white pill, navy label). */
.mkt-cta.mkt-convert-cta { background: #fff; color: var(--atlas-navy); }
.mkt-cta.mkt-convert-cta:hover { background: #dcebfa; color: var(--atlas-navy); }

/* ---------------- Site-map columns ----------------------------------------- */
.mkt-foot-cols {
  max-width: 1100px;
  margin: 0 auto;
  padding: 34px 20px;
  display: grid;
  grid-template-columns: 1.4fr 1fr 1.6fr 1fr 0.8fr;
  gap: 28px;
  text-align: left;
}
/* The nav wrapper is semantic only; its four columns join the outer grid
   (same display:contents trick the mobile chrome bar uses). */
.mkt-foot-nav { display: contents; }

.mkt-foot-brand .mkt-brand { color: #fff; }
.mkt-foot-brand .mkt-brand-mark { background: rgba(255, 255, 255, 0.14); }
.mkt-foot-thesis {
  margin: 10px 0 0;
  max-width: 26ch;
  font-size: 14px;
  line-height: 1.5;
  color: var(--foot-dim);
}

.mkt-foot-col h2 {
  margin: 0 0 12px;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--foot-head);
}
.mkt-foot-col ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 9px;
  font-size: 14px;
}
.mkt-foot-col a,
.mkt-foot-link-btn {
  color: var(--foot-ink);
  font-weight: 500;
  text-decoration: none;
  border-radius: 8px;
}
.mkt-foot-col a:hover,
.mkt-foot-link-btn:hover { color: var(--atlas-cyan); }

/* Modal-trigger buttons dressed as footer links (Terms / Disclosures). */
.mkt-foot-link-btn {
  display: inline;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

/* Accent dot in the Apps rows (markup = navConfig.renderFooterApps). */
.mkt-footer .nav-app-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--app-accent, #fff);
  margin-right: 8px;
  vertical-align: 1px;
  flex: none;
}

/* ---------------- Legal base ----------------------------------------------- */
.mkt-foot-base {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 16px 20px;
  border-top: 1px solid var(--foot-rule);
  font-size: 13px;
  color: var(--foot-head);
}

/* Same cyan focus ring as the chrome (ring reads fine on navy). */
.mkt-footer a:focus-visible,
.mkt-foot-link-btn:focus-visible {
  outline: 2px solid var(--atlas-cyan);
  outline-offset: 2px;
}

/* ---------------- Mobile (≤820px): single-column stack --------------------- */
@media (max-width: 820px) {
  .mkt-convert { padding: 24px 16px; }
  .mkt-convert h2 { font-size: 18px; }
  .mkt-foot-cols {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 28px 16px;
  }
}

/* ==========================================================================
   404 site-map view (nav redesign PR-4) — rendered by marketingNav.js when
   the Worker serves the not-found boot (src/server/marketing.ts). body.mkt-404
   parks the platform's own pages and the injected section takes the stage;
   the marketing chrome + footer around it stay live, so the 404 IS a site map.
   ========================================================================== */
body.mkt-404 .platform-pages > .platform-page { display: none !important; }

.mkt-404-page {
  max-width: 760px;
  margin: 0 auto;
  padding: 56px 20px 72px;
}
.mkt-404-code {
  margin: 0 0 4px;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0.14em;
  color: var(--muted);
}
.mkt-404-page h1 {
  margin: 0 0 10px;
  font-size: 30px;
  color: var(--ink);
}
.mkt-404-lede {
  margin: 0 0 28px;
  font-size: 15px;
  color: var(--muted);
}
.mkt-404-cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 28px;
  margin-bottom: 32px;
}
.mkt-404-col h2 {
  margin: 0 0 12px;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
}
.mkt-404-col ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
  font-size: 14px;
}
.mkt-404-col a {
  color: var(--ink);
  font-weight: 500;
  text-decoration: none;
  border-radius: 8px;
}
.mkt-404-col a:hover { color: var(--atlas-blue); text-decoration: underline; }
.mkt-404-col a:focus-visible {
  outline: 2px solid var(--atlas-cyan);
  outline-offset: 2px;
}
.mkt-404-col .nav-app-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-right: 8px;
  border-radius: 50%;
  background: var(--app-accent, var(--atlas-blue));
}

/* ==========================================================================
   PR-5b — marketing forms: the footer band quick form, the /get-started
   request-access page, and the /contact page (both injected by
   src/shared/marketingNav.js off the server-stamped `view` boot flag, exactly
   like the 404 site-map view above). Gate-1B mock styling on the existing
   tokens.
   ========================================================================== */

/* Form pages park the platform's own pages the same way body.mkt-404 does. */
body.mkt-formpage .platform-pages > .platform-page { display: none !important; }

/* Screen-reader-only labels (inputs carry visible placeholders per the mock). */
.mkt-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  overflow: hidden;
  white-space: nowrap;
}

/* Honeypot: parked off-screen (never display:none — some fillers skip hidden
   fields, which would defeat the trap). aria-hidden keeps SRs out. */
.mkt-hp {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* ---------------- Footer band quick form (email + Request access) --------- */
.mkt-convert-action { display: flex; flex-direction: column; gap: 6px; }
.mkt-convert-form {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
}
.mkt-convert-form input[type="email"] {
  min-width: 240px;
  padding: 10px 14px;
  border-radius: 10px;
  border: 1px solid rgba(255, 255, 255, 0.35);
  background: rgba(255, 255, 255, 0.08);
  color: #fff;
  font-size: 14px;
}
.mkt-convert-form input[type="email"]::placeholder { color: #9fb3d1; }
.mkt-convert-form input[type="email"]:focus-visible {
  outline: 2px solid var(--atlas-cyan);
  outline-offset: 2px;
}
.mkt-convert-form .mkt-convert-cta { border: none; cursor: pointer; }
.mkt-convert-form .mkt-convert-cta:disabled { opacity: 0.6; cursor: default; }

/* ---------------- Form pages (/get-started, /contact) --------------------- */
.mkt-form-page {
  max-width: 560px;
  margin: 0 auto;
  padding: 56px 20px 72px;
}
.mkt-form-page h1 {
  margin: 0 0 14px;
  font-size: 30px;
  line-height: 1.15;
  color: var(--atlas-navy);
}
.mkt-form-lede {
  margin: 0 0 20px;
  font-size: 15px;
  color: var(--muted);
}
.mkt-promises {
  list-style: none;
  margin: 0 0 6px;
  padding: 0;
  display: grid;
  gap: 10px;
  font-size: 15px;
  color: var(--ink);
}
.mkt-promises li::before {
  content: "\2713\00a0\00a0";
  color: #16855f;
  font-weight: 800;
}
.mkt-page-form {
  display: grid;
  gap: 12px;
  margin-top: 18px;
  padding: 24px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 16px;
}
.mkt-page-form input,
.mkt-page-form textarea {
  padding: 11px 14px;
  border-radius: 10px;
  border: 1px solid var(--line);
  font-size: 15px;
  font-family: inherit;
  color: var(--ink);
  background: #fff;
}
.mkt-page-form input:focus-visible,
.mkt-page-form textarea:focus-visible {
  outline: 2px solid var(--atlas-cyan);
  outline-offset: 1px;
}
.mkt-cta.mkt-form-submit {
  border: none;
  cursor: pointer;
  padding: 12px;
  font-size: 15px;
  font-weight: 700;
}
.mkt-cta.mkt-form-submit:disabled { opacity: 0.6; cursor: default; }

/* ---------------- Status + confirmation ----------------------------------- */
.mkt-form-status {
  margin: 8px 0 0;
  font-size: 14px;
  color: var(--muted);
}
.mkt-form-status-error { color: #b3261e; font-weight: 600; }
/* Errors inside the navy band need the inverted palette to stay readable. */
.mkt-convert-action .mkt-form-status-error { color: #ffb4ab; }
.mkt-form-confirm {
  margin: 18px 0 0;
  padding: 16px 18px;
  border-radius: 12px;
  background: rgba(22, 133, 95, 0.1);
  border: 1px solid rgba(22, 133, 95, 0.35);
  font-size: 15px;
  color: var(--ink);
}
/* Band confirmation sits on navy: invert like the micro copy. */
.mkt-convert-action .mkt-form-confirm {
  margin: 0;
  background: rgba(255, 255, 255, 0.1);
  border-color: rgba(255, 255, 255, 0.3);
  color: #fff;
}

@media (max-width: 820px) {
  .mkt-convert-form input[type="email"] { min-width: 0; flex: 1 1 160px; }
  .mkt-form-page { padding: 36px 16px 56px; }
  .mkt-form-page h1 { font-size: 24px; }
}

/* ============================================================================
   PR-6 — home grid card tile + overview suite loop
   ========================================================================== */

/* The home grid reuses the shelf's accent tile at card scale (self-contained —
   no dependency on the platform's one-time icon painter for injected nodes). */
.mkt-card-tile {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--app-accent, #0f5f9f);
  color: #fff;
  display: inline-grid;
  place-items: center;
  font-size: 15px;
  font-weight: 800;
  letter-spacing: 0.02em;
  margin-bottom: 10px;
}

/* Wayfinding strip at the top of each app overview (breadcrumb · dots · prev/next). */
.mkt-suite-loop {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 10px 18px;
  padding: 12px 16px;
  margin: 0 0 18px;
  background: #fff;
  border: 1px solid var(--mkt-line, #dbe3ec);
  border-radius: 12px;
}
.mkt-loop-trail { font-size: 14px; color: var(--mkt-muted, #5b6b82); display: inline-flex; align-items: center; gap: 6px; }
.mkt-loop-crumb { color: var(--mkt-navy-2, #0f5f9f); }
.mkt-loop-crumb:hover { text-decoration: underline; }
.mkt-loop-here { color: var(--mkt-ink, #1b2b44); font-weight: 600; }
.mkt-loop-sep { color: var(--mkt-muted, #5b6b82); }
.mkt-loop-dots { display: inline-flex; gap: 6px; }
.mkt-loop-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--mkt-line, #dbe3ec);
}
.mkt-loop-dot.is-current { background: var(--app-accent, #0f5f9f); }
.mkt-loop-siblings { display: flex; gap: 14px; font-size: 14px; }
.mkt-loop-siblings a {
  color: var(--mkt-ink, #1b2b44);
  padding: 6px 10px;
  border-radius: 8px;
}
.mkt-loop-siblings a:hover { background: #eef4fb; }
@media (max-width: 820px) {
  .mkt-suite-loop { border-radius: 0; margin: 0 0 12px; }
  .mkt-loop-dots { order: 3; width: 100%; justify-content: center; }
}
