/*! FocalShift Ai · Mission Control shell · MC-SHELL-DELIVERY (ruling 454, 11 Sep 2026).
    Generated by build/externalise.py from the shell's own inline block(s) — byte-for-byte the same
    rules/code, moved out of the document so the browser can cache them. The filename carries the
    content hash; a changed file is a new name, never an overwrite. */
/* ── from public_html/_mc_shellA.php: <style id=mc-rr-fabclear> ── */
/* ============================================================================================
   SHELL-LAUNCHER-OVERLAP — 11 September 2026.  The right rail and the Maven launcher stop
   sharing the same 70 px of screen.

   MEASURED ON THE RENDERED PAGE (guarded MC scratch tree, member seat, both cookies,
   getBoundingClientRect(), never a stylesheet):

       rail column    x = 100vw-320 .. 100vw-24     24 px body gutter + 296 px rail
       launcher hex   x = 100vw- 94 .. 100vw-22     right:22px (fs-pages.css) + 72 px .mvn-hex
       ------------------------------------------------------------------------------------
       horizontal overlap                            70 px, on every rail page, at every width

   So the collision is not a page's fault and no page can fix it: the launcher is
   position:fixed and the rail is a sticky column, and they are laid out from the same edge.
   Vertically it bites wherever the rail is taller than the band above the launcher.  At
   1280x900 on /money-flow (rail 1,036 px) the bird sat on two cards -- "List a Connect Call"
   70x9 px and "Launch a lead funnel" 70x52 px -- and the cards below them were off the bottom
   of the screen with no way to reach them, because a column pinned at top:84px never scrolls.

   THE LAUNCHER DOES NOT MOVE.  Ruling 424 owns its 48/72 mark box, ruling 411 its pink
   hexagon close, ruling 410 its pulse, WO-MVNFAB-0815 its absence on mobile, and pages with
   no rail must render byte-for-byte the same.  There is also nowhere for it to go: the gutter
   left of the rail is 22 px wide, and anything wider puts it on top of the body column.

   THE RAIL YIELDS, AND IT IS THE ONLY THING THAT CAN.  A fixed corner and an in-flow column
   meet at SOME scroll position no matter what padding either carries -- padding does not move
   content out of a band the page scrolls through.  A STICKY column with a CAPPED HEIGHT is
   the one shape that is clear at EVERY scroll position, so that is what the rail becomes.

   --mc-fabclear = 22 + 72 + 18 air = 112 px.  The 22 is the launcher's own bottom offset and
   the 72 its hexagon (fs-pages.css `.mvn-fab{right:22px;bottom:22px}`; `_maven.php`
   `.mvn-hex{width:72px;height:72px}` under ruling 424).  VERIFY.sh asserts all three literals,
   so the day a ruling moves the hexagon this fails loudly instead of drifting.  112 is also
   exactly the foot gutter WALLET-1280 reserved on /wallet, and a hair over the estate's own
   `.fs-fabclear{padding-bottom:108px}`.

   THE CAP ONLY BITES WHEN THE RAIL IS ACTUALLY TOO TALL.  /wallet (310 px), /billing (310),
   /plan-credits (456) and /settings (694) are untouched -- measured, not assumed -- and the
   8 px shadow gutter that gives the last card's hover shadow room inside the scroller is
   taken straight back off the flow by a matching negative margin, so no card moves.

   Direction-agnostic on purpose: in RTL the shell flips both the rail and the launcher to the
   left (`html[dir="rtl"] .mvn-fab{left:22px}`), and a height cap does not care which edge they
   share.
   ============================================================================================ */
:root{--mc-fabclear:112px}

/* --- desktop: the rail is a sticky column, so cap it above the launcher's corner ---------- */
@media(min-width:1100px){
  .mc-rightrail{
    max-height:calc(100vh - var(--mctop,64px) - 20px - var(--mc-fabclear));
    overflow-y:auto;                                    /* no overscroll-behavior: a rail that
                                                           does not overflow must never swallow
                                                           the page's own scroll */
    padding-bottom:8px;margin-bottom:-8px;              /* room for the last card's hover shadow,
                                                           given back to the flow immediately */
    scrollbar-width:thin;scrollbar-color:#dcdcec transparent}
  .mc-rightrail::-webkit-scrollbar{width:6px}
  .mc-rightrail::-webkit-scrollbar-thumb{background:#dcdcec;border-radius:3px}
  .mc-rightrail::-webkit-scrollbar-track{background:transparent}
  html.fs-dark .mc-rightrail{scrollbar-color:#33344c transparent}
  html.fs-dark .mc-rightrail::-webkit-scrollbar-thumb{background:#33344c}
}

/* --- 821..1099: the rail has folded under the content and is an ordinary block again.
       Nothing in flow can be clear of a fixed corner at every scroll position, so the honest
       guarantee here is the resting one: the page ENDS clear of the launcher instead of under
       it.  Below 821 the launcher is gone (WO-MVNFAB-0815) and there is nothing to clear. --- */
@media(min-width:821px) and (max-width:1099px){
  .mc-rightrail{padding-bottom:var(--mc-fabclear)}
}

/* ── from public_html/_mc_shellA.php: <style id=mc-mobile-bh10> ── */
/* bh10r4: mobile shell — additive, only applies <=820px; desktop untouched */
.mc-mobham{display:none}
@media(max-width:820px){
  html{overflow-x:hidden !important}
  .fscn-menu{max-width:calc(100vw - 16px) !important;left:8px !important;right:8px !important}
  .fslh-menu,.fsnh-menu,.fsmsg-pop,.fsnotif-pop,.fslh-langpop{max-width:calc(100vw - 16px) !important}
  /* WO-MCMOBILE2-0814 (Hans, 8/14) — the 12px side gutters read as grey rails down both
     edges with the white modules floating between them: "boxed in". The page now runs
     edge-to-edge and the modules take the full width. NOTE the margin-left:56px rule a
     few lines below is NOT a gutter — that is the fixed icon rail's own width. */
  .page-wrapper#admin-dashboard,.page-wrapper{margin-left:0 !important;padding-left:0 !important;padding-right:0 !important}
  /* ---- WO-MOBRAIL-V2-0811 · the rail stays put on a phone -------------------------
   * It used to be parked off-canvas and brought back only by #mcMobHam — a hamburger
   * rendered under the header logo and therefore unclickable, so the rail was simply
   * unreachable. Hans: "I'd like the left rail to still appear. With the slide-out." */
  .two-col-sidebar,.sidebar-twocol{transform:none !important;margin-left:0 !important;left:0 !important;transition:none !important}
  .two-col-sidebar,.sidebar-twocol,.sidebar-twocol.sidebar{width:56px !important;min-width:56px !important;border-radius:0 !important;border-left:0 !important;z-index:62}
  html body .sidebar-twocol.sidebar .sidebar-left,html body .two-col-sidebar .sidebar-left{width:56px !important;display:flex !important;padding-left:0 !important;padding-right:0 !important}
  html[dir="rtl"] .two-col-sidebar,html[dir="rtl"] .sidebar-twocol{left:auto !important;right:0 !important;border-right:0 !important;border-left:1px solid var(--sidebar-border) !important}
  .page-wrapper#admin-dashboard,.page-wrapper{margin-left:56px !important}
  html[dir="rtl"] .page-wrapper#admin-dashboard,html[dir="rtl"] .page-wrapper{margin-left:0 !important;margin-right:56px !important}

  /* The submenu is toggled with DISPLAY, never width. v1 tried to out-specify
   * fs-pages.css's `width:0 !important` plus the width the collapse routine writes
   * inline, and lost. There is no width to lose if the element is not displayed. */
  html body:not(.fsmr-open) .sidebar-twocol.sidebar .sidebar-right{display:none !important}
  html body.fsmr-open .sidebar-twocol.sidebar .sidebar-right{
    display:flex !important;position:fixed !important;left:56px !important;top:0 !important;bottom:0 !important;
    width:min(228px,calc(100vw - 72px)) !important;max-width:none !important;min-width:0 !important;
    flex:0 0 auto !important;opacity:1 !important;overflow:auto !important;pointer-events:auto !important;
    padding:.75rem !important;z-index:64 !important;border-radius:0 !important;
    background:var(--fs-shell-surface,#fff) !important;box-shadow:16px 0 44px -14px rgba(20,20,50,.45) !important}
  html[dir="rtl"] body.fsmr-open .sidebar-twocol.sidebar .sidebar-right{left:auto !important;right:56px !important}
  /* WO-MCMOBILE2-0814 — the scrim was 63, ABOVE the rail, and because .two-col-sidebar is a
     stacking context the panel's own z-index:64 resolves INSIDE it and can never climb out.
     Result: the drawer opened already dimmed and read as disabled.
     49 is chosen against the MEASURED rail z-index (getComputedStyle reads 50 live — the
     `z-index:62` a few lines up does NOT win the cascade, so trusting 62 left the scrim on
     top a second time). Under the rail, still above .page-wrapper content, which is what a
     scrim is for. Raising the rail instead would have covered the header. */
  .fsmr-bk{position:fixed;inset:0;background:rgba(12,12,26,.46);z-index:49;opacity:0;pointer-events:none;transition:opacity .18s}

  /* WO-WEBFIX-0815 -- the cookie reopen bubble covered Log out in the avatar dropdown.
     MEASURED: .fscc-reopen is position:fixed z-index 2147482000 at the document root;
     header.fslh is position:fixed and carries `.fslh{z-index:1100 !important}` (line ~357
     of this file), so it IS a stacking context and .fslh-menu's own z-index:12000 resolves
     INSIDE it and can never climb out -- the same trap documented for .fsmr-bk just above.
     The real capture has the panel at y 65.2-825.2 and the bubble at y 790-832, a 35px
     overlap right on the footer. Raising the HEADER (not the menu) is the only lever that
     works, and only while the dropdown is open. !important is required to beat the 1100.
     The bubble is NOT hidden -- it stays rendered, stays clickable everywhere the panel
     does not cover, and the consent CARD (.fscc-card, 2147483000) still outranks this.
     Verified at 390x844 light+dark: elementFromPoint at the bubble's centre goes from
     BUTTON.fscc-reopen to A.fslh-link. Inside the 820px query -- desktop is untouched. */
  header.fslh:has(.fslh-dd.open){z-index:2147482001 !important}
  body.fsmr-open .fsmr-bk{opacity:1;pointer-events:auto}

  /* WO-RAILHIDE-0815 (Hans 8/15): minimize the left rail ENTIRELY; it reappears on
     every page load (state is in memory only — never persisted). */
  body.fsmr-hide .two-col-sidebar,body.fsmr-hide .sidebar-twocol{display:none !important}
  body.fsmr-hide .page-wrapper#admin-dashboard,body.fsmr-hide .page-wrapper{margin-left:0 !important}
  html[dir="rtl"] body.fsmr-hide .page-wrapper#admin-dashboard,html[dir="rtl"] body.fsmr-hide .page-wrapper{margin-right:0 !important}
  .fsmr-hidebtn{margin-top:auto;width:56px;height:40px;display:flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--fsc-muted,#6a6a8b);cursor:pointer}
  .fsmr-hidebtn i,.fsmr-hidebtn svg{width:18px;height:18px}
  .fsmr-restore{display:none;position:fixed;left:0;bottom:96px;z-index:75;width:28px;height:44px;align-items:center;justify-content:center;border:0;border-radius:0 8px 8px 0;background:#615dfa;color:#fff;box-shadow:0 10px 24px -10px rgba(97,93,250,.65);cursor:pointer}
  .fsmr-restore i,.fsmr-restore svg{width:16px;height:16px}
  body.fsmr-hide .fsmr-restore{display:flex}
  html[dir="rtl"] .fsmr-restore{left:auto;right:0;border-radius:8px 0 0 8px}

  /* the hamburger is retired — unclickable under the logo, and hamburgers are banned.
   * the hover flyout/tooltip are meaningless on touch and covered the panel. */
  .mc-mobham{display:none !important}
  #fs-railtip,#fsRailFly{display:none !important}
  .mc-mobham{display:inline-flex !important;position:fixed;top:10px;left:10px;z-index:75;width:40px;height:40px;align-items:center;justify-content:center;border:1px solid #e4e4ea;border-radius:10px;background:#fff;color:#33334a;font-size:17px;cursor:pointer;box-shadow:0 6px 18px -8px rgba(20,20,50,.35)}
  html.fs-dark .mc-mobham{background:#1c1d2b;border-color:#2e2f44;color:#d2d3e2}
  .mc-mobbk{position:fixed;inset:0;background:rgba(12,12,26,.46);z-index:60;opacity:0;pointer-events:none;transition:opacity .2s}
  body.mc-mobnav .mc-mobbk{opacity:1;pointer-events:auto}
  .mc-shellflex{flex-direction:column}.mc-rightrail{width:100% !important;position:static !important}
  /* WO-MOBRAIL-V2-0811 — this inset existed only to dodge the hamburger, and it never
     worked (the logo still painted over the button). The hamburger is gone; reclaim it. */
  /* common two-column page grids collapse to one column on phones */
  .op-grid,.ac-grid,.au-grid,.pt-grid,.cl-grid,.fp-grid,.mfx-grid{grid-template-columns:1fr !important}
  /* dashboard hero + any flex card-rows wrap instead of forcing width */
  .hx-hero,.hx-row,.hx-stats,.hx-sec{max-width:100% !important;flex-wrap:wrap !important}
  .hx-stats>*{flex:1 1 42% !important;min-width:0 !important}
  .hx-row>*,.hx-sec>*{min-width:0 !important;max-width:100% !important}
  .fp-kpis{grid-template-columns:repeat(2,1fr) !important}
  [class*="-grid"]{grid-template-columns:1fr !important}

  /* ── WO-MCFULLBLEED-0814 (Hans, 8/14) · round 2 ────────────────────────────────────
   * Hans at phone width: "three layers of lines" — the rail, then a GREY band, then a
   * WHITE box with its own left/right empty space, then the module cards. Measured at
   * 390px, body inward, on index / focus-boards / conversations / my-sidekick /
   * opportunity-map / studio. The stack that produces it:
   *
   *   1. body            #f4f5fb (this file, line ~352) / #13131c dark. Full width,
   *                      painting grey beside, above, below and BETWEEN every module.
   *                      This is the "grey band" — it is the page surface itself.
   *   2. .page-wrapper   already flush (margin-left:56px = the rail, padding 0). NOT
   *                      an offender; the previous lane fixed it and it held.
   *   3. a page-level surface — .vk's direct child, or any *hero* — drawing its OWN
   *                      rounded, bordered, shadowed box 0-2px inside the rail's edge:
   *                        .hx-hero    pad 16/16  rad 16  +shadow   (index)
   *                        .sk1-card   pad 22/22  bord 1  rad 16    (my-sidekick)
   *                        .opm-hero   pad 24/24  rad 18            (opportunity-map)
   *                        .sd-hero    bord 1 rad 20 + .sd-hero-in pad 34/34 (studio)
   *                        .fscv       paints #f6f7fb                (conversations)
   *   4. that surface's side padding, insetting the module cards, which then add their
   *                      own border + radius + padding — the third line.
   *
   * Collapsed here: the surface goes white, the intermediate box dissolves entirely
   * (no side edge, no radius, no shadow, no side gutter), and ONE 12px gutter is
   * carried by .page-wrapper instead of three nested ones. Modules gain the width.
   * A grid TILE is never a direct child of .vk, so board tiles and stat cards keep
   * their own edges and stay distinguishable.
   *
   * Specificity is deliberate, not decorative: .page-wrapper#admin-dashboard is (1,1,0),
   * so a plain `html .page-wrapper` (0,1,1) would LOSE to the padding:0 rule above.
   * The id is carried here so this wins deterministically, and it was confirmed in live
   * pixels (content starts at x=68 = 56+12), not by specificity arithmetic alone.
   * Every rule is inside the 820px query — desktop cannot be reached. */
  html body{background:#fff !important}
  /* MEASURED, not grepped: the dark card surface reads rgb(29,30,43) live. The grep
     candidate #1a1b26 would have left a visible band in dark. */
  html.fs-dark body{background:#1d1e2b !important}
  html .page-wrapper#admin-dashboard,html .page-wrapper{padding-left:12px !important;padding-right:12px !important}
  html .page-wrapper>.vk>*,
  html .page-wrapper>.vk>[class*="hero"],
  html .page-wrapper>.vk>*>[class*="hero"],
  html .page-wrapper [class*="hero-in"]{
    margin-left:0 !important;margin-right:0 !important;
    padding-left:0 !important;padding-right:0 !important;
    border-left:0 !important;border-right:0 !important;
    border-radius:0 !important;box-shadow:none !important;max-width:none !important}
  /* conversations.php:620 overrides body itself (#f6f7fb) and .fscv-list overruns the
     viewport by 6px (w 340 at x 56). `html body` (0,0,2) beats its `body` (0,0,1). */
  html body .fscv{background:#fff !important}
  html.fs-dark body .fscv{background:#1d1e2b !important}
  html body .fscv-list{max-width:100% !important;border-right:0 !important}
  /* -mchero2-0814 (Hans): center the command-center hero text block at phone width —
     the kicker (MISSION CONTROL · COMMAND CENTER), greeting and level line. The XP bar
     stays full width; centering the text does not move it. */
  html .page-wrapper .hx-hero{text-align:center !important}
}

/* ══ WO-NAVRAIL-0827 (Hans, live instruction 8/27) · THE TABLET RAIL ══════════════════
 * "When I scale it down to an iPad size, the left menu icon rail goes away. I want that to
 *  stay on the page, but the pop-out sub-menu for the left rail main menu — I don't want it
 *  to appear unless specifically hovered over."
 *
 * MEASURED ROOT CAUSE (headless Chrome over this shell's own output, /focus-boards, light):
 *   the VENDOR theme style-mission-control-live.css carries
 *     @media not all and (min-width:992px){ .sidebar-twocol.sidebar{ margin-left:calc(var(--sidenav-width) * -1) } }
 *   and --sidenav-width computes to 298px. At 900px the sidebar's border box therefore sits
 *   at x = -298 — entirely off-canvas — and elementFromPoint(30,400) returns .page-wrapper,
 *   not a rail icon. The companion rule
 *     @media(min-width:992px){ .page-wrapper{ margin-left:var(--sidenav-width) } }
 *   hands the reclaimed width to the content, which is why nothing looks broken, only bare.
 *   WO-MOBRAIL-V2-0811 already counters BOTH of those rules — but only inside
 *   @media(max-width:820px). 821px–991px is countered by nothing at all, and that is exactly
 *   the band a desktop window lands in on the way down to iPad size.
 *   From 992px to 1099px the rail is back, but the sub-menu panel ships OPEN.
 *
 * This block runs 821px–1099px ONLY. 1100px and up — every desktop width — is not reached by
 * one rule here, so desktop rendering is unchanged. The 1099/1100 edge is the estate's own
 * existing "not a desktop any more" cut (.mc-shellflex 1099; .mc-railx, .fslh-search, .fp-grid
 * and .fp-kpis all 1100), not a new number invented for this change.
 *
 * The geometry is the desktop COLLAPSED rail, MEASURED, not redesigned: the icon column is
 * 64px (+ the sidebar's own 1px border = 65px, which is the value body.mc-collapsed already
 * gives .page-wrapper), and the flyout is 228px at left:65px with the same shadow as the
 * dormant `body.mc-collapsed .two-col-sidebar.peek .sidebar-right` rule further up this file.
 * No colour, font, radius, icon size or padding of the rail or the menu is touched — the
 * panel keeps its own 16px/12px padding and its own background.  ══════════════════════════ */
@media (min-width:821px) and (max-width:1099px){
  /* 1 · THE RAIL STAYS. Undo the vendor's off-canvas park; show the icon column only. */
  .two-col-sidebar,.sidebar-twocol,.sidebar-twocol.sidebar{margin-left:0 !important;margin-right:0 !important;transform:none !important;left:0 !important;width:65px !important;min-width:65px !important;transition:none !important}
  html[dir="rtl"] .two-col-sidebar,html[dir="rtl"] .sidebar-twocol,html[dir="rtl"] .sidebar-twocol.sidebar{left:auto !important;right:0 !important}
  html body .two-col-sidebar .sidebar-left,html body .sidebar-twocol.sidebar .sidebar-left{display:flex !important;width:64px !important;min-width:64px !important;flex:0 0 64px !important}
  /* the content gutter follows the rail — 65px is the collapsed-rail value already in use */
  .page-wrapper#admin-dashboard,.page-wrapper{margin-left:65px !important;transition:none !important}
  html[dir="rtl"] .page-wrapper#admin-dashboard,html[dir="rtl"] .page-wrapper{margin-left:0 !important;margin-right:65px !important}

  /* 2 · THE POP-OUT IS CLOSED UNTIL DELIBERATELY OPENED.
   * Toggled with DISPLAY, never width — the lesson WO-MOBRAIL-V2 recorded on this same panel:
   * there is no width to lose to fs-pages.css's `width:0 !important` (nor to the width the
   * desktop collapse routine writes inline) if the element is not displayed at all.
   * `.fsnr-open` is a NEW class: the phone's `.fsmr-open` rules live in @media(max-width:820px),
   * which is disjoint from this query, but a separate name means the two can never interact. */
  html body:not(.fsnr-open) .two-col-sidebar .sidebar-right,
  html body:not(.fsnr-open) .sidebar-twocol.sidebar .sidebar-right{display:none !important}
  html body.fsnr-open .two-col-sidebar .sidebar-right,
  html body.fsnr-open .sidebar-twocol.sidebar .sidebar-right{
    display:flex !important;position:fixed !important;left:65px !important;top:var(--mctop,64px) !important;bottom:0 !important;
    width:228px !important;max-width:none !important;min-width:0 !important;flex:0 0 auto !important;
    opacity:1 !important;pointer-events:auto !important;
    /* NO overflow override. MEASURED on the original at 1280px: .sidebar-right is
       overflow:VISIBLE and does not scroll itself — its inner .sidebar-scroll[data-simplebar]
       is the scroller (h=482, scrollHeight=535), with .mc-wshead and .sidebar-footer pinned
       around it. v1 forced overflow:auto here, which clipped .mc-railx — the pink X is
       position:absolute right:-11px, so it deliberately juts OUT of the panel's right edge
       and an auto/hidden ancestor cuts it in half. That is the "it doesn't have the pink
       close X" the founder saw. Inheriting the original's overflow restores both the X and
       the original's own scrolling behaviour. */
    z-index:60 !important;border-radius:0 !important;
    /* MEASURED: in dark the panel's own background is rgba(16,24,39,0.94). In flow that is
       invisible (the opaque sidebar sits behind it); as a flyout over page content the body
       text bled straight through. --fs-shell-surface is the SAME colour at full alpha —
       #ffffff light, #101827 dark — so this restores opacity without changing the hue. */
    background:var(--fs-shell-surface,#fff) !important;
    box-shadow:12px 0 30px -14px rgba(94,92,154,.45) !important}
  html.fs-dark body.fsnr-open .two-col-sidebar .sidebar-right,
  html.fs-dark body.fsnr-open .sidebar-twocol.sidebar .sidebar-right{box-shadow:12px 0 30px -14px rgba(0,0,0,.72) !important}
  html[dir="rtl"] body.fsnr-open .two-col-sidebar .sidebar-right,
  html[dir="rtl"] body.fsnr-open .sidebar-twocol.sidebar .sidebar-right{left:auto !important;right:65px !important;box-shadow:-12px 0 30px -14px rgba(94,92,154,.45) !important}

  /* 3 · the rail's hover DESCRIPTION card (#fsRailFly, z-index 12000) would paint straight on
   * top of the flyout that the very same hover now opens (z-index 60). The phone block hides
   * both for exactly this collision. In this band, hovering a rail icon means "show me the
   * sub-menu", so the card has nothing left to say. */
  #fs-railtip,#fsRailFly{display:none !important}
  /* 4 · THE PINK X STAYS — it is part of the original component.
   * Founder, 27 Aug: "It doesn't have the pink close X. That's not the original."
   * v1 hid it here. That was wrong: hover-gating changes WHEN the sub-menu appears, never
   * WHAT it is. `display:flex` is the value MEASURED on the original at 1280px, and
   * `html body` (0,1,2) is needed to clear two competing rules — fs-pages.css's
   * `@media(max-width:1100px){.mc-railx{display:none}}` and the shell's own later
   * `.p2c-x,.mc-railx,…{display:inline-flex !important}` group.
   * Its CLICK is intercepted in JS below so the desktop collapse routine never runs and
   * mc_rail_collapsed=1 is never persisted — the X closes the flyout, nothing more. */
  html body .mc-railx{display:flex !important}
}
/* ══ end WO-NAVRAIL-0827 ═══════════════════════════════════════════════════════════════ */
