/* Canonical topbar typography for pages that adopted the shared renderer
   (assets/js/bo-topbar.js). Scoped to [data-bo-topbar] so it can never reach a
   page that has not opted in - the other ~146 pages keep their current sheets.

   WHAT IT LOCKS (and only this): the three type sizes the owner asked to unify.
   Nothing here touches height, padding, background or colour - those stay owned by
   the per-theme sheets, so real variants (e.g. `.admin-page-topbar{min-height:62px}`)
   keep working.

   Chosen values - these are the majority in this repo and what the adopted pages
   already compute, so adopting the sheet is a no-op for them:
     h1                22px / 900     (was: 26px/900 in reports*.css, 20px/800,
                                       18px/800 in main-admin-detail, 28px/800 in
                                       bo-charcoal-cms, 17px in the *-md.css suite)
     .user-title-icon  36x36 box, 20px glyph
                                      (was: 40x40/18px, 38x38/19px, 36x36/18px)
     theme button      36x36 box, 18px glyph
                                      (was: 40x40/17px, 44x44)

   Values are written with !important because every one of those sheets also
   declares them with !important; the specificity here adds the [data-bo-topbar]
   attribute so this wins on adopted pages only.

   The reference geometry the component renders into (measured, unchanged by this
   sheet, kept here so phase 3 has the spec in one place):
     .report-topbar      display:flex  gap:12px  padding:0 20px  min-height:64px
                         border-bottom:1px solid  background:#FFF8EB
     .user-title-wrap    display:flex  gap:12px  align-items:center
     .report-actions     display:flex  gap:12px  align-items:center  margin-left:auto
*/

/* 0. Same horizontal padding everywhere. A few page families inset the header 18px
   instead of 20px, which moves the whole right-hand cluster 2px sideways on a page
   switch. Desktop only - the narrow layout has its own padding and is deliberately
   left alone. */
/* The id-guard is the same idiom the theme sheets use (`:not(#bo-charcoal-off)`). A
   plain class chain tied with a later sheet here and lost, so this rule needs to sit
   above them rather than beside them. */
@media (min-width:1024px){
  html:not(#bo-charcoal-off) body.report-body .report-shell .report-main .report-topbar[data-bo-topbar]{
    padding-left:20px!important;
    padding-right:20px!important;
  }
}

/* 0b. Reserve the scrollbar gutter so a page that happens to scroll does not shift the
   whole header sideways. vip-level-edit measured clientWidth 1568 against 1574
   elsewhere purely because its content is taller than the viewport, and that 6px moved
   the cluster with it. Reserving the gutter makes the usable width the same on every
   adopted page whether or not it scrolls. */
html:has(.report-topbar[data-bo-topbar]){
  scrollbar-gutter:stable;
}

/* 0c. Same content frame width everywhere. The page body was inset 18px on most BO
   pages, 22px on the referral / member-deposit family and 16px on promotion / game, so
   the whole frame measured 1272px / 1264px / 1276px and looked narrower on some pages
   when paging. 18px is the majority. Desktop only, like the header inset above.
   The id-guard again out-ranks the referral family's own inset. */
@media (min-width:1024px){
  /* Two id-guards, not one. `.report-content`'s inset is the one shell metric a page sheet
     also states: bo-charcoal-cms.css sets `padding: 10px 16px` for `.promotion-bonus-page`
     and `12px 16px 16px` for `.page-bonus-category-title` (promotion.html carries both body
     classes), and those selectors tie this rule exactly - 1 id / 4 classes / 2 elements. A
     tie is broken by order, and the order is not always the file order: the SPA router ADDS
     a swapped-in page's sheets and never re-inserts them, so a page entered from a swap can
     have bo-charcoal-cms.css AFTER bo-shell.css. Measured: with that sheet moved
     to the end of <head>, the frame came back 16px inset (card left 276 vs 278, width 1239
     vs 1235) - the owner's "整个设计会跑掉" screenshot measures the same 16px. The second
     id-guard makes the inset order-independent; it is the idiom this file already uses for
     the referral family's two-id guard below. */
  html:not(#bo-charcoal-off):not(#bo-charcoal-legacy) body.report-body .report-shell .report-main .report-content{
    padding-left:18px!important;
    padding-right:18px!important;
  }
  /* The referral family sets its own inset through a two-id guard, so a plain class
     chain ties with it; mirroring that selector and loading later wins the tie. */
  html:not([data-bo-theme="dark"]) body:not(#bo-charcoal-off):not(#bo-charcoal-legacy).referral-page.report-body.bo-charcoal .report-content,
  html[data-bo-theme="dark"] body:not(#bo-charcoal-off):not(#bo-charcoal-legacy).referral-page.report-body.bo-charcoal .report-content{
    padding-left:18px!important;
    padding-right:18px!important;
  }
}

/* 0c-1. The module row (auth.js MODULE_TABS) is the first child of .report-content, and it
   is drawn as a 1:1 copy of Admin Management's .mad-chrome row - so it takes the same 8px
   inset under the header that Admin Management's workspace carries. Left to the pages it
   inherited whatever .report-content padding they happened to declare: 18px on the Member
   and Transaction listing pages, 12px on referral, i.e. the same row at two heights on one
   page switch. This replaces the per-page rule that retired bo-group-tabs.css used to carry
   for the Member pages, and covers the Transaction module row with it. Desktop only, like
   the two insets above. */
@media (min-width:1024px){
  html:not(#bo-charcoal-off) body.report-body .report-shell .report-main .report-content:has(> .bo-module-tabs){
    padding-top:8px!important;
  }
  /* Referral's two-id guard again, mirrored for the same reason as 0c. */
  html:not([data-bo-theme="dark"]) body:not(#bo-charcoal-off):not(#bo-charcoal-legacy).referral-page.report-body.bo-charcoal .report-content:has(> .bo-module-tabs),
  html[data-bo-theme="dark"] body:not(#bo-charcoal-off):not(#bo-charcoal-legacy).referral-page.report-body.bo-charcoal .report-content:has(> .bo-module-tabs){
    padding-top:8px!important;
  }
}

/* 0c-2. The module row's BOTTOM spacing, on the pages whose content column has no gap of
   its own. 0c-1 nailed the row to the same 8px under the header everywhere, but its
   distance to the first content block still came from the page: the Member, Transaction,
   Promotion, VIP and Agent content columns are `display:flex; flex-direction:column`
   with a 16px gap, so there the row sat 16px above the first block, while the Design
   pages declare no gap at all - Banner Management's column is even `display:block` - so
   the row was welded to the card below it.

   16px is what the majority already computes and what User Management shows, so every page
   that computed 0 gets exactly that: the six Design pages, Livechat Template when the Setting
   module joined (Setting measured again: Timezone 16, Duplicate IP 12, Compliance Policy 12,
   Livechat Template 0), and five of the seven Game Management pages - Provider, Provider
   Sessions, Game Category, Game Sub Category and Game all compute 0, while Provider
   Transactions and Provider Bet Report carry 16 of their own. The rule is scoped by page class
   on purpose - a container-level `gap` would also re-space every OTHER sibling on those pages,
   which is a different change nobody asked for. A page that already resolves to a gap of its
   own keeps it: Page Customize 14px (the same rhythm as Deposit Approval), Image To URL 16px,
   and Duplicate IP / Compliance Policy 12px.

   Desktop only, like the insets above; bo-module-tabs.css already carries 12px of its own
   Promotion Bonus (`promotion-workspace-page promotion-bonus-page`) joined the list after the
   owner reported its row welded to the card below - "图一tab的间距设计与图二不相符" against
   Promotion Debug, which already sat at 16px. It had never been measured: it appears in none of
   the lists above, and its column is `display:flex; flex-direction:column` with `row-gap:0px`. The
   other ten module pages DESIGN.md never recorded were measured at the same time and all already
   compute 16px of their own (the six Report-family pages, promotion-report, transaction-report,
   win-lose-report, agent-performance-report), so this is the only class the whitelist was missing.
   Measured with the row painted: gap = row bottom -> first block top.

   Desktop only, like the insets above; bo-module-tabs.css already carries 12px of its own
   for the narrow layout. */

@media (min-width:1024px){
  html:not(#bo-charcoal-off) body.report-body:is(.banner-management-page,.site-customize-page,.advertisement-popup-page,.frontend-display-page,.social-page,.layout-section-page,.livechat-template-page,.page-game-provider,.provider-session-page,.page-game-category,.page-game-sub-category,.page-game,.promotion-bonus-page) .report-shell .report-main .report-content:has(> .bo-module-tabs) > .bo-module-tabs{
    margin-bottom:16px!important;
  }
}

/* 0d. Sidebar rows. The BO rail drifts the same way the header did: the wallet family
   (member-wallet / wallet-ledger / member-deposit) ships its own rail metrics, so the
   same category sat 5px higher there than on User Management and the row text rendered
   at weight 800 instead of 900. Measured across 11 BO pages, 8 already resolve to the
   values pinned below, so this is the majority rather than a new opinion.
     .report-nav          padding 12px 10px 10px, gap 3px   (== the row drift source)
     top-level row        weight 900, line-height 21px
     sub item             weight 600, line-height 15.6px, padding 9px 38px 9px 10px
   The id-guard matches the idiom the theme sheets use so this wins on BO pages only. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav{
  padding:12px 10px 10px!important;
  gap:3px!important;
}
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav > a,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .nav-group-btn{
  font-size:14px!important;
  font-weight:900!important;
  line-height:21px!important;
}
/* Some themes put a -0.01em tracking on the OPEN group's button
   (bo-charcoal-shell.css: `.report-sidebar .nav-group.open > .nav-group-btn`), which the
   label span inherits as -0.14px at 14px. The wallet family never had it, so the very
   same row read cramped on one page and loose on another. Normalise the whole rail to
   no tracking - label spans included, since that is where it was actually inherited. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav > a,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav > a span,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .nav-group-btn,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .nav-group-btn span,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .report-sub,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .report-sub span,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .bo-sidebar-logout span{
  letter-spacing:normal!important;
}

html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .report-sub{
  font-size:13px!important;
  font-weight:600!important;
  line-height:15.6px!important;
  padding:9px 38px 9px 10px!important;
}
/* casino-overview-report resolved the sub label to 17.55px line-height against 15.6px
   everywhere else; pin the span too so the sub rows keep the same rhythm. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .report-sub span{
  line-height:15.6px!important;
}

/* One rail width for the whole BO: 230px - the owner's value, carried in the tree by 1e87f664
   (Security & Audit panel) and re-applied from their working tree after the sync. The tree
   briefly read 260px because reports.css and reports-dashboard-original.css each declare it
   twice in a :root block that came in with a stale-snapshot WIP commit (0da8f81d, "must not be
   merged as-is"); a first pass of this fix then read 250px off a live deployment that predates
   1e87f664. Measured: 260x804 before, 230 after, on dashboard.html and member-wallet.html. The
   lock keeps the value here (the shell owns the rail's metrics) - `width` and custom properties
   sit outside the drift guard's metric list. */
html:not(#bo-charcoal-off) body.report-body{
  --sidebar-w:230px;
}

/* 0e-pre. Rail rows: one padding for every row, and the pin's space reserved only where a pin
   can actually appear.
   bo-global-quicknav.css reserved `.report-nav a[data-menu-key]{padding-right:38px}` for the
   `.bo-sidebar-pin` button (26px wide at right:9px). Only <a> rows get a pin - auth.js emits
   data-menu-key on plain links and on the nav-group-direct anchors, never on the group
   <button>s - so one rail read 38px on a row and 12px on the next. Measured on index.html
   before this block: a.nav-group-btn = `10px 38px 10px 12px`, button.nav-group-btn =
   `11px 12px`, both 209x44. The value to unify on is not the module sheets' one: the rail's
   own row rule is reports.css:49 `.report-nav a{...padding:9px 10px...}` - what every page
   shows where no sheet overrode it, and the value the user pointed at in DevTools (red-circled
   `padding: 9px 10px` under "padding 与其他页面不一样"). The sub rows already sit on that
   rhythm (`.report-sub`: 9px 38px 9px 10px). Stated once here as the shell's own metric:
   every row 9px 10px, and a row that can carry a pin keeps its 38px. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav > a,
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav .nav-group-btn{
  padding:9px 10px!important;
}
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .report-nav a[data-menu-key]{
  padding-right:38px!important;
}
/* The collapsed rail (sidebar-mini) centres its icons with `padding:12px 0`. The module
   sheets that pin row padding at 10px 12px!important outrank reports.css's own
   `body.sidebar-mini .nav-group-btn{padding:12px 0}` (and its justify-content), so the mini
   rows lost their centring on exactly those pages. Same guard, so both states hold.
   `a[data-menu-key]` is in the list for the second half of the same problem: the 38px
   `padding-right` that reserves room for the pin (rule just above) has no pin to reserve in the
   collapsed state - bo-global-quicknav.css hides it there
   (`body.sidebar-mini .report-sidebar .report-nav > a[data-menu-key] > .bo-sidebar-pin{display:none}`)
   - so `justify-content:center` was centring the icon inside the 0..13px that were left, and every
   rail icon sat off-centre. Measured on bonus-category-item.html collapsed: row 10..61 (cx 36),
   icon 6..28 (cx 17), i.e. 19px left of its own row; the owner reported it off the active cell,
   whose box is the whole row and so made the offset visible (选中框格和Icon 没对齐). The expanded
   rail keeps the 38px: the pin is a real control there. */
html:not(#bo-charcoal-off) body.sidebar-mini .report-shell .report-sidebar .report-nav > a,
html:not(#bo-charcoal-off) body.sidebar-mini .report-shell .report-sidebar .report-nav a[data-menu-key],
html:not(#bo-charcoal-off) body.sidebar-mini .report-shell .report-sidebar .report-nav .nav-group-btn{
  padding:12px 0!important;
  justify-content:center!important;
}

/* 0e. Logout block. The wallet family pads the sidebar footer 10px 10px 12px, which
   makes it 3px taller and lifts the Logout button 2px versus every other BO page.
   8 of 11 sampled pages use the flat 10px. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .bo-sidebar-account-footer{
  padding:10px!important;
  /* The wallet family lays the footer out as a block, which rounds the Logout row to
     68.5px against 68.0px everywhere else - a 1px lift of the button. flex is the
     majority and the exact 68px. */
  display:flex!important;
  flex-direction:column!important;
  height:68px!important;
  box-sizing:border-box!important;
}
/* The Logout row is content-sized, and its icon/text rounding lands on 47.0px on some
   pages and 47.5px on others - the half pixel that kept the button 1px apart. Both boxes
   are pinned so the rounding cannot move it: 68px footer (majority) + 47px row. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-sidebar .bo-sidebar-logout{
  height:47px!important;
  box-sizing:border-box!important;
}

/* 0f-pre-a. brand-overview: the full frame chain the report and agent families carry. Measured
   pinned into the dashboard workspace (1440x900): .report-main computed block and the bottom
   content ended 395px above the frame bottom, so the card and its footer floated mid-frame.
   Both ends of the chain are needed: a flex column on .report-main with a definite height, a
   flex:1 content, then the page own card classes - they are brand-exec-*, not .table-card. */
html:not(#bo-charcoal-off) body.report-body.brand-exec-page .report-shell .report-main{
  display:flex!important;flex-direction:column!important;height:100dvh!important;min-height:0!important;
}
html:not(#bo-charcoal-off) body.report-body.brand-exec-page .report-shell .report-content{
  display:flex!important;flex-direction:column!important;flex:1 1 auto!important;min-height:0!important;
}
html:not(#bo-charcoal-off) body.report-body.brand-exec-page .report-shell .report-content > .brand-exec-card{
  flex:1 1 auto!important;min-height:0!important;display:flex!important;flex-direction:column!important;
}
html:not(#bo-charcoal-off) body.report-body.brand-exec-page .report-shell .report-content .brand-exec-table-wrap{
  flex:1 1 auto!important;min-height:0!important;
}
html:not(#bo-charcoal-off) body.report-body.brand-exec-page .report-shell .report-content .brand-exec-footer{
  margin-top:auto!important;
}

/* 0f-pre. The Online Users frame. The page's card stopped at its content height (measured
   626px of an 844px frame at 1568x940), so the pagination row hung mid-page and everything
   under it was empty frame - the owner's "下面一大片空白". Same three-step recipe the report
   family uses, stated here because the drift guard rightly refuses layout metrics on shell
   selectors in a theme sheet: the content column is a flex column, the card takes the slack,
   the table area takes the slack inside the card, and the footer lands on the frame bottom. */
html:not(#bo-charcoal-off) body.report-body.online-users-page .report-shell .report-content{
  display:flex!important;
  flex-direction:column!important;
  min-height:0!important;
}
html:not(#bo-charcoal-off) body.report-body.online-users-page .report-shell .report-content > .table-card{
  flex:1 1 auto!important;
  min-height:0!important;
  display:flex!important;
  flex-direction:column!important;
}
html:not(#bo-charcoal-off) body.report-body.online-users-page .report-shell .report-content > .table-card .table-wrap{
  flex:1 1 auto!important;
  min-height:0!important;
}

/* 0f. The app-style content frame (Live Chat). That page is a fixed-height app: the
   inbox and the room are sized from the frame, so the frame has to be exactly the space
   left under the topbar - the workspace scrolls, the frame does not.

   The height used to be a guess: `height: calc(100vh - 60px)` while every page pins the
   topbar to `--bo-header-h` (64px, bo-charcoal-shell.css). It was therefore 4px taller
   than the box it sits in - `.report-main` clipped the excess silently and the card came
   out 10px off the bottom of the viewport, against an 18px inset on the other three
   sides. Nothing ties the number 60 to the header, so the two were free to drift apart
   again the moment a theme changed the header height.

   The frame is instead the remainder of a column: the topbar takes its own height and
   the frame takes what is left, so it can not disagree with the header. Same idea the
   Live Chat template page already uses for its frame.

   The frame's four insets are then all 18px, which is the value the sides already
   resolve to from 1024px up (0c above) and the top elsewhere. They are declared as one
   `padding` rather than only a bottom because `reports.css` insets the frame to
   16px / 14px below 1200px in a media query of its own - pinning just the bottom would
   have left the frame lopsided the other way in that band. Below 1024px the page sheets
   keep their own, smaller, insets and only the height is fixed here.

   Both halves live here rather than one here and one in reports.css: below 992px the
   workspace unstacks and the page scrolls again. */
@media (min-width:992px){
  body.report-body.livechat-bo-page .report-main{
    display:flex!important;
    flex-direction:column!important;
    height:100vh!important;
    overflow:hidden!important;
  }
  body.report-body.livechat-bo-page .report-main .report-topbar[data-bo-topbar]{
    flex:0 0 auto!important;
  }
  body.report-body.livechat-bo-page .report-main .report-content{
    display:flex!important;
    flex-direction:column!important;
    flex:1 1 auto!important;
    height:auto!important;
    min-height:0!important;
    overflow:hidden!important;
  }
}
@media (min-width:1024px){
  body.report-body.livechat-bo-page .report-main .report-content{
    padding:18px!important;
  }
}
@media (max-width:991.98px){
  body.report-body.livechat-bo-page .report-main{
    display:block!important;
    height:auto!important;
    overflow:visible!important;
  }
  body.report-body.livechat-bo-page .report-main .report-content{
    display:block!important;
    height:auto!important;
    overflow:visible!important;
  }
}

/* 1. Page title */
.report-topbar[data-bo-topbar] .user-title-wrap h1{
  font-size:22px!important;
  font-weight:900!important;
  line-height:1.2!important;
}

/* 1b. Let a long title shrink and ellipsize instead of colliding with the account /
   counter chips. Without this the title box cannot shrink (the inner div defaults to
   min-width:auto), so "Member Wallet Listing" at 22px overlapped the action chips by
   103px on a narrow window while the shorter "User Management" sat exactly on the edge.

   Narrow widths only: the clip box lands on the last glyph's antialiased column, so
   enabling it at every width shaved 1 pixel column off "User Management" on desktop
   (6 pixels of 208000). Truncation is only needed where the title can actually run out
   of room, which is what this breakpoint gates; the 22px size itself is unchanged at
   every width. */
@media (max-width:1023.98px){
  .report-topbar[data-bo-topbar] .user-title-wrap{min-width:0}
  .report-topbar[data-bo-topbar] .user-title-wrap > div{min-width:0}
  .report-topbar[data-bo-topbar] .user-title-wrap h1{
    white-space:nowrap!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
  }
}

/* 2. Title icon: the round slot and the glyph inside it. The id-guard is needed because
   a couple of page families set an 18px glyph through their own guarded chain. */
html:not(#bo-charcoal-off) body.report-body .report-shell .report-main .report-topbar[data-bo-topbar] .user-title-icon{
  width:36px!important;
  height:36px!important;
  flex:0 0 36px!important;
  font-size:20px!important;
}
html:not(#bo-charcoal-off) body.report-body .report-shell .report-main .report-topbar[data-bo-topbar] .user-title-icon i{
  font-size:20px!important;
}

/* Selector prefix used by the block below. The sheets that fight these values reach
   id-guarded chains such as
     html body.referral-page.report-body.bo-charcoal .report-actions > [data-bo-profile]
       .bo-account-link::before                                        -> (0,6,2)
   or the executive page scopes, so the prefix walks shell > main > header to reach
   (0,7,2) before the property-specific part. */

/* 2b. The right-hand cluster must not move when the page changes.
   Only the title differs between pages, so the counters and the account chip have to
   measure the same on every one of them. Today they do not, because each theme sheet
   dresses the same markup differently and the block is right-aligned, so every pixel of
   difference slides the whole cluster sideways (measured: the theme button sat at x=943
   on User Management and x=928 on Member Wallet - a 15px jump on every page switch).
   Two causes, both pinned here:
     .bo-header-counter-text  padding-right 0 vs 2px   -> 2px per counter
     .bo-account-link         min-width 0 vs 132px,
                              height 40 vs 44px          -> up to 13px
   Geometry only: colours and the sun/moon artwork stay with the theme sheets. */
/* The selector walks the whole host chain on purpose: the sheets that fight this use
   `body.bo-account-chip .report-actions > [data-bo-profile] .bo-account-link` (0,4,1)
   with !important, so a shorter selector loses no matter what it declares. Five
   class-level parts plus the attribute out-rank it. */
/* The counter also has a compact variant in the executive sheets (icon 30px, gap 8,
   padding 5px 9px, min-width 126) which made those pages 394px wide against 411px
   elsewhere. Pin the reference box so all of them measure the same. */
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counters{
  gap:10px!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter{
  gap:10px!important;
  padding:5px 14px 5px 5px!important;
  min-width:118px!important;
  height:48px!important;
  border-radius:10px!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon{
  width:38px!important;
  height:38px!important;
  font-size:18px!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-text{
  padding-right:0!important;
  gap:1px!important;
  justify-content:center!important;
}

/* Line heights decide where the label and the number sit. Left to the themes they came
   out as 19.8px / 18px / 18.9px for the number and the stack ended up 32.3px / 30.5px /
   34.4px tall, so the chip's vertical centring put "MEMBERS 0" at a different height on
   each page (roughly 1px, which is what the eye catches when paging). 1.1 and 1.05 are
   the majority values - User Management, Referral, Brand, Promotion, Game, Casino,
   Livechat and VIP Level all already resolve to them. */
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-text small{
  line-height:1.05!important;
  margin-top:0!important;
  margin-bottom:0!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-text b{
  line-height:1.1!important;
  /* The executive sheets add margin-top:3px to the number, which pushed the stack down
     by 3px on those pages. */
  margin-top:0!important;
  margin-bottom:0!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-text small{
  font-size:11px!important;
  font-weight:800!important;
  letter-spacing:.66px!important;
  /* The executive sheets left the label in title case ("Members"), the rest use the
     locked uppercase treatment; besides looking different it is 4.5px narrower per
     counter, which moved the cluster on those pages. */
  text-transform:uppercase!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-text b{
  font-size:18px!important;
  font-weight:800!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-account-link{
  min-width:132px!important;
  height:44px!important;
  border-radius:14px!important;
  padding:0!important;
  /* The wallet theme adds margin-left:4px here and the charcoal theme does not, so the
     whole cluster sat 4px further left on those pages. */
  margin:0!important;
}

/* 2c. One divider slot, always reserved. The sheets already do this for the provider
   family - "Divider slot always reserved - only tint changes by theme (prevents cluster
   shift)" - so the rule is established, it just was not applied everywhere. Referral
   moved the same divider inside the account link (host ::before set to content:none),
   which adds a second flex gap inside the link and silently shifted the whole cluster.
   Put it back on the host with the same 1px/28px box the other sheets use; only the tint
   stays theme-owned. */
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions > [data-bo-profile]::before{
  content:""!important;
  display:block!important;
  width:1px!important;
  height:28px!important;
  flex:0 0 1px!important;
  margin:0!important;
  align-self:center!important;
  background:rgba(24,25,28,.12)!important;
}
html[data-bo-theme="dark"] .report-shell .report-main .report-topbar[data-bo-topbar] .report-actions > [data-bo-profile]::before{
  background:rgba(255,255,255,.12)!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions > [data-bo-profile] .bo-account-link::before{
  content:none!important;
}

/* auth.js renders a hidden gear after the avatar. Bootstrap's `.bi` sets
   display:inline-block, which out-ranks the UA sheet's [hidden]{display:none}, so on the
   themes that never re-hide it the gear still eats a flex gap + margin (14px) and makes
   the account chip wider than on the themes that do. Re-hide it so every adopted page
   measures the same. */
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-account-setting-icon[hidden]{
  display:none!important;
}

/* 2d. Counter icon slot: every counter carries a 1px outline in its own hue, and the
   fill is the same hue a step lighter. Only the wallet theme shipped the outline, so on
   the other pages the three icon squares looked flat - that is the "边框" difference.
   Tints are pinned per counter type for light and dark so the three read identically on
   every adopted page; box-sizing keeps the 38px slot unchanged when the border lands. */
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon{
  box-sizing:border-box!important;
  border-radius:8px!important;
  border-width:1px!important;
  border-style:solid!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.members{
  background:rgba(24,25,28,.08)!important;
  border-color:rgba(24,25,28,.12)!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.deposit{
  background:rgba(217,119,6,.18)!important;
  border-color:rgba(217,119,6,.28)!important;
}
.report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.withdraw{
  background:rgba(180,83,9,.14)!important;
  border-color:rgba(180,83,9,.28)!important;
}
html[data-bo-theme="dark"] .report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.members{
  background:rgba(245,245,244,.10)!important;
  border-color:rgba(245,245,244,.18)!important;
}
html[data-bo-theme="dark"] .report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.deposit{
  background:rgba(245,158,11,.20)!important;
  border-color:rgba(245,158,11,.34)!important;
}
html[data-bo-theme="dark"] .report-shell .report-main .report-topbar[data-bo-topbar] .report-actions [data-bo-profile] .bo-header-counter-icon.withdraw{
  background:rgba(217,119,6,.18)!important;
  border-color:rgba(217,119,6,.32)!important;
}

/* 3. Theme toggle slot + glyph (bo-theme.js keeps the sun/moon state) */
.report-topbar[data-bo-topbar] .bo-theme-btn{
  width:36px!important;
  height:36px!important;
  min-width:36px!important;
  max-width:36px!important;
  flex:0 0 36px!important;
}
.report-topbar[data-bo-topbar] .bo-theme-btn i[data-theme-icon]{
  font-size:18px!important;
  line-height:1!important;
}

/* Deliberately no mobile step: one size at every width is what makes the header
   consistent, and 1b above removes the reason the sheets used to shrink it (an
   unshrinkable title). If a smaller phone size is preferred, add one breakpoint here -
   it is a one-line change. */
