/* Nunito Sans (latin) — variable weight, embedded as a data URI because a
   published artifact's CSP blocks external font requests. */
@font-face {
  font-family: "Nunito Sans";
  font-style: normal;
  font-weight: 200 1000;
  font-display: swap;
  src: url(data:font/woff2;base64,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) format("woff2");
}

/* ============================================================
   TOKENS
   Light is the base and the portal always opens in it.
   Electric blue is the accent and only ever sits on a light
   ground — on black it drops to 2.6:1 and stops being readable.
   ============================================================ */
:root {
  --ec-blue:   #2C23F1;
  --ec-red:    #EB5147;
  --ec-soft:   #93D0ED;
  --ec-lime:   #BAE961;
  --ec-purple: #691BDD;
  --ec-lilac:  #B59AE9;
  --ec-lav:    #EDD1FC;
  --ec-grey:   #F0F0F1;

  --bg:        #FFFFFF;

  /* Chart chrome, on whatever surface the panel is. */
  --canvas:      #FFFFFF;
  --canvas-ink:  #82828F;
  --canvas-ink2: #4E4E5C;
  --canvas-grid: rgba(12, 12, 40, .08);
  --canvas-line: rgba(12, 12, 40, .22);
  --glass:      rgba(255, 255, 255, .62);
  --glass-nav:  rgba(255, 255, 255, .88);
  /* Panel edges. These were white highlights, which worked as a lit rim against
     the old coloured ground; on a white page a white border is simply invisible,
     so the edge is now a faint ink line and the top lip stays white (it does no
     harm and returns for free if a tinted background ever comes back). */
  --glass-edge: rgba(16, 16, 48, .10);
  --glass-lip:  rgba(255, 255, 255, .95);
  --surface-2: #F0F0F1;
  --border:    rgba(12, 12, 40, .10);
  --border-str:rgba(12, 12, 40, .20);

  --ink:       #08080C;
  --ink-2:     #4E4E5C;
  --ink-3:     #82828F;

  --accent:       #2C23F1;
  --accent-hover: #1E17C9;
  --accent-ink:   #2C23F1;
  --accent-soft:  rgba(44, 35, 241, .10);
  --on-accent:    #FFFFFF;

  --s1: #2C23F1;                     /* electric blue */
  --s2: #691BDD;                     /* purple */
  --s3: #EB5147;                     /* red */

  --grid: rgba(12, 12, 40, .08);

  --accent-glow: rgba(44, 35, 241, .75);

  --lift:   0 10px 30px -14px rgba(0, 0, 0, .30);
  --lift-2: 0 24px 60px -24px rgba(0, 0, 0, .40);
  --mast: rgba(0, 0, 0, .88);

  /* Nunito Sans only — 500 for everything, 900 for headings. */
  --font-display: "Nunito Sans", system-ui, sans-serif;
  --font-sans: "Nunito Sans", system-ui, sans-serif;
  --font-mono: "Nunito Sans", system-ui, sans-serif;

  --r-sm: 10px;
  --r-md: 14px;
  --r-lg: 20px;
}

/* ============================================================
   BASE
   ============================================================ */
* { box-sizing: border-box; }

html, body {
  /* Needed for .page-shell's min-height: 100vh to actually reach full height
     rather than just the height of its own content — without this, a short
     page can't tell "full viewport" from "however tall I happen to be". */
  height: 100%;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: 15px;
  font-weight: 500;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

:where(a) { color: var(--accent-ink); text-decoration: none; }

:where(button, input, a):focus-visible {
  outline: 2px solid var(--accent-ink);
  outline-offset: 2px;
  border-radius: var(--r-sm);
}

.mono { font-family: var(--font-mono); font-size: 10.5px; font-weight: 500; letter-spacing: .13em; text-transform: uppercase; font-variant-numeric: tabular-nums; }
.num { font-variant-numeric: tabular-nums; }

/* 2.43:1, matching the symbol's viewBox — change both numbers together or the
   cube distorts. Sized down from 148px: at that width it crowded the client's own
   logo next to it in the masthead. */
.ec-logo { width: 122px; height: 50px; display: block; color: currentColor; flex: none; }

/* The liquid-glass recipe: frosted fill, bright top lip, soft lift. */
.glass {
  background: var(--glass);
  backdrop-filter: blur(26px) saturate(180%);
  -webkit-backdrop-filter: blur(26px) saturate(180%);
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 var(--glass-lip), var(--lift);
}

/* ============================================================
   AUTH — electric-blue field, white signal
   ============================================================ */
.auth { display: grid; grid-template-columns: 1.05fr 1fr; min-height: 100vh; }

.auth-brand {
  position: relative;
  background: var(--ec-blue);
  color: #FFFFFF;
  padding: 40px 46px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  overflow: hidden;
}

.auth-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }

/* Must exclude the canvas — a bare `> *` would override its position:absolute
   at equal specificity and pull it into the flex flow. */
.auth-brand > :not(.auth-canvas) { position: relative; z-index: 1; }

.auth-pitch {
  max-width: 18ch;
  font-family: var(--font-display);
  font-size: clamp(46px, 6.2vw, 92px);
  font-weight: 900;
  /* Caps via CSS rather than typed capitals, so screen readers still say the
     words rather than spelling them out. Tracking eased off from -.03em:
     capitals sit tighter than lowercase, and the original value closed them up. */
  text-transform: uppercase;
  letter-spacing: -.015em;
  line-height: .98;
  /* Never wraps: at two words it doesn't need to, and letting it wrap put the
     title's rendered height at the mercy of exactly where the panel width
     happens to break the line — which (see .cube-3d below) fed straight into
     how big the cube next to it rendered. */
  white-space: nowrap;
  /* Tight to the strapline: the two read as one lockup rather than a heading with
     a paragraph under it. */
  margin: 0 0 8px;
}

/* No measure cap: the line is meant to read as one line on the blue panel. It
   still wraps naturally when the panel goes full-width on a phone. Sized to
   render at the same width as .auth-pitch above it — the tagline has far
   more characters, so it needs a smaller point size to match; the clamp here
   is .auth-pitch's clamp scaled by that measured ratio (~0.253), so the two
   stay matched across viewport widths rather than just at one size. */
.auth-sub { color: rgba(255,255,255,.78); font-size: clamp(12px, 1.57vw, 23px); margin: 0; }

/* Auto margins rather than the panel's space-between: with only the logo and this
   block left on the panel, space-between would pin the text to the bottom edge. */
.auth-lede-row { display: flex; align-items: center; gap: 14px; margin-block: auto; }

/* Sized in JS (cube3d.js measures .auth-lede and sets an explicit height and
   width here), not via aspect-ratio + align-items:stretch. Those two together
   are circular for a flex item with no intrinsic size of its own — the
   browser has to pick *something*, and in practice that resolved to filling
   the row's entire available cross-size rather than matching its sibling,
   ballooning the cube to hundreds of pixels. An explicit pixel size sidesteps
   the ambiguity entirely. */
.cube-3d { flex: none; }
.cube-3d canvas { display: block; }

@media (max-width: 480px) {
  /* Below this the panel gets too narrow for a square cube plus the text
     beside it without crushing both — drop the cube rather than let either
     shrink to nothing. */
  .cube-3d { display: none; }
}

.auth-panel { display: grid; place-items: center; padding: 44px 32px; }
.auth-form { width: 100%; max-width: 368px; }

.auth-title { font-family: var(--font-display); font-size: 28px; font-weight: 900; letter-spacing: -.024em; margin: 14px 0 6px; }
.auth-note { color: var(--ink-2); font-size: 14px; margin: 0 0 28px; }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  width: 100%;
  padding: 12.5px 16px;
  font-family: var(--font-sans);
  font-size: 14.5px;
  font-weight: 900;
  letter-spacing: -.01em;
  border-radius: var(--r-sm);
  border: 1px solid transparent;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: transform .12s cubic-bezier(.2,.7,.3,1), background .16s;
}
.btn:active { transform: scale(.985); }

.btn-primary {
  background: var(--accent);
  color: var(--on-accent);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.32), 0 12px 26px -12px var(--accent-glow);
}
.btn-primary:hover { background: var(--accent-hover); }

/* specular sweep */
.btn-primary::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(150deg, rgba(255,255,255,.34), rgba(255,255,255,0) 44%);
  pointer-events: none;
}

/* Microsoft's brand guidance: white field, its own logo, no recolouring. */
.btn-ms {
  background: #FFFFFF;
  color: #1B1B1F;
  border-color: rgba(0, 0, 0, .14);
  box-shadow: 0 10px 26px -14px rgba(0, 0, 0, .5);
}
.btn-ms:hover { background: var(--ec-grey); }

.auth-legal { margin: 26px 0 0; font-size: 12.5px; color: var(--ink-3); line-height: 1.55; }

/* ============================================================
   PORTAL
   ============================================================ */
/* The sticky-header/sticky-footer shell: a full-height flex column so the
   header group can stick to the top and InternalBar can stick to the bottom
   of the *viewport*, while both stay genuinely in flow (unlike
   position:fixed, which would need every page's content manually padded to
   avoid sitting underneath). */
.page-shell { display: flex; flex-direction: column; min-height: 100%; }
.top-sticky { position: sticky; top: 0; z-index: 50; flex: 0 0 auto; }
.page-body { flex: 1 0 auto; display: flex; flex-direction: column; }

.masthead {
  background: var(--mast);
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  color: #FFFFFF;
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 14px 30px;
  flex-wrap: wrap;
}

.mast-rule { width: 1px; align-self: stretch; background: rgba(255,255,255,.22); }
.mast-client { display: flex; flex-direction: column; gap: 1px; }
.mast-name { font-size: 15px; font-weight: 900; letter-spacing: -.01em; }
/* white, never blue — blue on black is unreadable */
.mast-spacer { flex: 1; }

.mast-btn {
  width: 34px; height: 34px;
  display: grid; place-items: center;
  border-radius: var(--r-sm);
  border: 1px solid rgba(255,255,255,.18);
  background: rgba(255,255,255,.08);
  color: rgba(255,255,255,.85);
  cursor: pointer;
  transition: background .14s, color .14s;
}
.mast-btn:hover { background: rgba(255,255,255,.18); color: #FFFFFF; }

/* The signed-in account, stated in full rather than as initials: on a shared
   screen the useful question is "whose session is this", and two initials don't
   answer it. Truncates rather than pushing the sign-out button off the edge. */
.mast-email {
  height: 34px;
  padding: 0 12px;
  border-radius: var(--r-sm);
  display: inline-flex;
  align-items: center;
  background: #FFFFFF;
  color: #000000;
  font-size: 12.5px;
  font-weight: 700;
  flex: 0 1 auto;
  min-width: 0;
  max-width: 320px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Sign-out carries its label, so it's a pill rather than a 34px square. */
.mast-btn.has-label {
  width: auto;
  gap: 8px;
  padding: 0 13px;
  display: inline-flex;
  align-items: center;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 700;
  color: #FFFFFF;
}

.tabs { display: flex; gap: 6px; margin-bottom: 14px; flex-wrap: wrap; }

.tab {
  padding: 8px 14px;
  border: none;
  background: none;
  border-radius: 999px;
  font-family: inherit;
  font-size: 14px;
  color: var(--ink-2);
  cursor: pointer;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: color .14s, background .14s;
}
.tab:hover { color: var(--ink); background: var(--surface-2); }
.tab.is-active {
  background: var(--accent);
  color: #FFFFFF;
  font-weight: 900;
  box-shadow: 0 6px 18px -6px var(--accent-glow);
}
.tab.is-active:hover { background: var(--accent); color: #FFFFFF; }
.tab.is-soon, .tab:disabled { color: var(--ink-3); cursor: default; opacity: 1; }
.tab.is-soon:hover, .tab:disabled:hover { color: var(--ink-3); background: none; }
.tab .mono {
  font-family: var(--font-mono);
  font-size: 9px;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 999px;
  border: 1px solid var(--border);
}

/* Full-width primary nav, directly under the masthead — edge to edge, unlike
   .content below it which is padded and centred. Reuses .tabs/.tab for the
   items themselves (the ".navbar.tabs" pair wins over .tabs's own
   margin-bottom on specificity), so a real SONAR link gets exactly the pill
   the in-page tab used to. */
.navbar {
  padding: 10px 30px;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
}
.navbar.tabs { margin-bottom: 0; }

/* Every item in the primary nav reads in caps — not just "Dashboard" today,
   but whatever gets added beside it later, since this is keyed off the
   container rather than each item's own markup. */
.navbar .tab { text-transform: uppercase; letter-spacing: .02em; }

/* margin-inline centres the column on wide screens instead of leaving it against
   the left edge with the space piling up on the right. */
/* width: 100% is load-bearing, not decorative, now that .page-body is a flex
   column (see .sonar-embed's comment): a flex item with margin-inline: auto
   and no explicit width doesn't behave like ordinary block "auto-margin
   centering" — flexbox treats an auto cross-axis margin as free space to
   absorb, so the item shrinks to its content's width instead of filling the
   container and then centering within max-width. An explicit width: 100%
   gives it a definite size for max-width to clamp, which is what makes the
   auto margins go back to centering the remainder, matching what this
   looked like before .page-body became a flex container. */
.content { width: 100%; padding: 32px 30px 96px; max-width: 1400px; margin-inline: auto; }

/* The report page is only the report. Less top padding than .content's
   default: the nav bar right above it already has its own edge (border and
   padding), so full .content spacing on top of that read as a gap rather
   than intentional breathing room. Bottom keeps padding rather than
   .content's 96px, which just hung empty beneath the report. */
.content-report { padding-top: 16px; padding-bottom: 32px; }

.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 24px; }
.page-title { font-family: var(--font-display); font-size: 33px; font-weight: 900; letter-spacing: -.028em; margin: 7px 0 5px; text-wrap: balance; }
.page-sub { color: var(--ink-2); font-size: 14.5px; margin: 0; }
@media (max-width: 1180px) { .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 580px)  { .kpis { grid-template-columns: 1fr; } }

.sec {
  display: flex; align-items: center; gap: 10px;
  margin: 0 0 14px;
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: .13em;
  text-transform: uppercase;
  flex-wrap: wrap;
}
.sec-tag {
  background: var(--accent);
  color: #FFFFFF;
  padding: 5px 11px;
  border-radius: 999px;
  box-shadow: 0 6px 16px -8px var(--accent-glow);
}
.sec-note { color: var(--ink-3); }

.panel { border-radius: var(--r-lg); overflow: hidden; }
.panel-head { display: flex; align-items: center; gap: 11px; padding: 15px 19px; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.panel-title { font-size: 15px; font-weight: 900; letter-spacing: -.012em; margin: 0; }

.chip {
  font-family: var(--font-mono);
  font-size: 9.5px;
  letter-spacing: .11em;
  text-transform: uppercase;
  padding: 4px 8px;
  border-radius: 999px;
  border: 1px solid var(--border-str);
  color: var(--ink-3);
}
.chip.brand { color: #FFFFFF; border-color: var(--accent); background: var(--accent); }

/* "Live" is a status, so it gets the same pill treatment as the Power BI chip,
   in brand lime. Black text — lime is far too light to carry white. Stays
   pushed to the right of the panel head, where the old plain-text stamp sat. */
.chip.live { margin-left: auto; color: #000000; border-color: var(--ec-lime); background: var(--ec-lime); }

.panel-body { padding: 18px 19px 8px; }

.panel-foot { padding: 13px 19px; border-top: 1px solid var(--border); font-size: 12.5px; color: var(--ink-3); display: flex; gap: 9px; align-items: center; }

.cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
@media (max-width: 1180px) { .cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 580px)  { .cards { grid-template-columns: 1fr; } }

.card { padding: 19px; border-radius: var(--r-lg); display: flex; flex-direction: column; gap: 10px; transition: transform .2s cubic-bezier(.2,.7,.3,1); }
.card:hover { transform: translateY(-3px); }
.card-ico { width: 34px; height: 34px; border-radius: var(--r-sm); display: grid; place-items: center; background: var(--accent); color: #FFFFFF; box-shadow: 0 6px 16px -8px var(--accent-glow); }

/* The client's own logo on a picker card. Height-constrained rather than width,
   so wordmarks of different proportions all sit on the same baseline, and capped
   in width so a very wide lockup can't stretch the card. Sits in the same slot
   the generic icon occupied, hence align-self rather than a block width. */
.card-logo {
  height: 38px;
  width: auto;
  max-width: 100%;
  align-self: flex-start;
  object-fit: contain;
  object-position: left center;
}
.card h3 { font-size: 14.5px; font-weight: 900; letter-spacing: -.012em; margin: 0; }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 1000px) {
  .auth { grid-template-columns: 1fr; }
  .auth-brand { min-height: 300px; padding: 28px 24px; gap: 40px; }
  .auth-pitch { font-size: clamp(36px, 9vw, 52px); }
  .auth-sub { font-size: clamp(9px, 2.28vw, 13px); }
  .masthead { padding: 12px 16px; gap: 14px; }
  .mast-meta, .mast-rule { display: none; }
  .intbar { padding: 10px 16px; }
  .navbar { padding: 9px 16px; }
  .content { padding: 24px 16px 96px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

/* ============================================================
   BLAZOR ERROR UI
   Hidden until Blazor unhides it. The default template styled this
   in app.css, which this stylesheet replaces — without the rule it
   sits visible at the foot of every page announcing a failure that
   hasn't happened.
   ============================================================ */
#blazor-error-ui {
  display: none;
  position: fixed;
  left: 0;
  bottom: 0;
  width: 100%;
  z-index: 1000;
  padding: 12px 18px;
  font-size: 13.5px;
  color: #FFFFFF;
  background: var(--ec-red);
  box-shadow: 0 -6px 20px -8px rgba(0, 0, 0, .35);
}
#blazor-error-ui .reload { color: #FFFFFF; text-decoration: underline; }
#blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 14px; top: 10px; }

/* ============================================================
   PROGRAMMATIC HEADING FOCUS
   Blazor's <FocusOnNavigate Selector="h1"> focuses the heading after
   navigation so screen readers announce the new page. Worth keeping —
   but it gives the h1 tabindex="-1" and browsers then draw their
   default focus ring around it, which reads as a visual glitch.
   A tabindex="-1" element can't be reached by tabbing, so hiding the
   ring here costs keyboard users nothing. Focus rings on real
   controls are defined above and untouched.
   ============================================================ */
h1:focus,
h1:focus-visible {
  outline: none;
}

/* ============================================================
   EMBEDDED REPORT
   ============================================================ */
.report-embed {
  width: 100%;
  /* Scales with the window instead of a fixed height, because the report is a
     16:9 canvas that Power BI fits to the width it's given: too short a box and
     it shrinks the whole report to fit, which is what made it feel small. The
     subtraction is everything around it — masthead, internal bar, panel head and
     foot, and the page's own padding, measured rather than guessed — so the whole
     dashboard fits without the page scrolling. Clamped so it stays usable on a
     short window and doesn't become absurd on a 5K display. */
  height: clamp(520px, calc(100vh - 356px), 1000px);
  border-radius: var(--r-md);
  overflow: hidden;
}
.report-embed iframe { border: 0; width: 100%; height: 100%; display: block; }

/* SONAR's full-bleed embed: edge to edge, with none of .report-embed's
   .content padding or panel head/foot around it.

   Not a calc(100vh - Npx) guess: that was written back when InternalBar sat
   above the content, and went stale the moment InternalBar moved to the
   bottom of the page (see .intbar) — the subtraction no longer accounted for
   its height, so the outer page ran a few dozen pixels taller than the
   viewport for internal staff specifically. That gave the page its own tiny
   scroll range sitting right on top of the iframe's much larger internal
   scroll, and scrolling near the boundary between the two let the browser
   hand wheel input to the wrong one — the iframe's content would still be
   scrolled from the last gesture even once the outer page was back at the
   top, reading as the SONAR header being cut off until you scrolled again.
   flex: 1 asks .page-body (a flex column) for however much space is
   actually left after the header and InternalBar, computed by the browser
   rather than guessed here, so the outer page never has its own scroll
   range and the iframe is the only thing that scrolls. */
/* flex-basis: 0 (not auto) plus position:relative + the iframe filling it via
   absolute inset:0 rather than height:100%: a flex-grown height, even once
   resolved to a real pixel value, isn't reliably "definite" enough in every
   browser for a percentage-height DESCENDANT to resolve against — which is
   exactly what height:100% on the iframe needed. That silently fell back to
   the iframe's UA-default 150px, clipping the SONAR page to just its header.
   Absolute positioning sidesteps the ambiguity: it sizes against this box's
   resolved padding box directly, not a percentage calculation. */
.sonar-embed { width: 100%; flex: 1 1 0; min-height: 480px; position: relative; }
.sonar-embed iframe { border: 0; position: absolute; inset: 0; width: 100%; height: 100%; display: block; }

.report-message {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 34px 20px;
  text-align: center;
  font-size: 14px;
  color: var(--ink-2);
}
.report-message strong { color: var(--ink); font-weight: 900; }

/* ============================================================
   INTERNAL VIEW
   Education Cubed staff only. Brand blue, which has to read as
   "not the client's portal" at a glance on a shared screen
   without borrowing the red that means something is wrong.

   Everything in here is white or near-white on purpose: blue this
   saturated only carries white type, and the same rule that keeps
   blue off black keeps black off blue.
   ============================================================ */
.intbar {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 10px 30px;
  background: var(--ec-blue);
  color: #FFFFFF;
  /* Sticky within .page-shell's flex column, not fixed: it stays a real
     flex child (flex: 0 0 auto), so its height is never something another
     element has to guess and pad for — position:fixed took it out of flow
     entirely, which is exactly what forced that guess, and a wrong guess
     read as a gap of bare page background once its content wrapped to a
     second line at some viewport width. Sticky needs no such compensation:
     .page-body's flex: 1 0 auto already pushes it to the bottom on a short
     page, and this bottom: 0 only pins it once the page actually scrolls. */
  flex: 0 0 auto;
  position: sticky;
  bottom: 0;
  z-index: 40;
  border-top: 1px solid rgba(255, 255, 255, .18);
  box-shadow: 0 -8px 20px -8px rgba(0, 0, 0, .30);
}

.intbar-tag {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: .13em;
  text-transform: uppercase;
  background: #FFFFFF;
  color: var(--ec-blue);
  padding: 4px 9px;
  border-radius: 999px;
  flex: none;
}

.intbar-text { flex: 1 1 auto; font-size: 13px; }
.intbar-text strong { font-weight: 900; }

/* A <details> menu of links, not a <select>: a stray mouse wheel over a select
   would load a different client's figures without anyone touching anything. */
.intbar-pick { position: relative; flex: none; }

/* A white chip on the blue, so its text is stated in literal near-black rather
   than var(--ink): the chip is always white, whatever the ink variable holds. */
.intbar-pick > summary {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 6px 11px;
  background: rgba(255, 255, 255, .92);
  color: #08080C;
  border: 1px solid rgba(255, 255, 255, .35);
  border-radius: var(--r-sm);
  cursor: pointer;
  list-style: none;   /* the default disclosure triangle, which we replace */
}
.intbar-pick > summary::-webkit-details-marker { display: none; }
.intbar-pick[open] > summary { background: #FFFFFF; }

.intbar-pick-lbl {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: rgba(0, 0, 0, .58);
}
.intbar-pick-now { font-size: 13px; font-weight: 900; letter-spacing: -.01em; }

.intbar-menu {
  position: absolute;
  right: 0;
  /* Opens upward, not down: InternalBar is pinned to the bottom of the
     viewport now, so a menu opening below it would render off-screen. */
  bottom: calc(100% + 6px);
  z-index: 30;
  min-width: 240px;
  display: flex;
  flex-direction: column;
  padding: 6px;
  background: var(--bg);
  border: 1px solid var(--border-str);
  border-radius: var(--r-md);
  box-shadow: var(--lift-2);
}

.intbar-menu a { padding: 8px 10px; border-radius: 8px; font-size: 13.5px; color: var(--ink); }
.intbar-menu a:hover { background: var(--surface-2); }
.intbar-menu a.is-on { font-weight: 900; background: var(--accent-soft); }

/* :where(a) sets the accent colour at zero specificity, so this wins plainly. */
/* A button rather than a bare link, but translucent rather than the solid white of
   the switcher chip beside it: the chip states which client you're in and should
   stay the loudest thing on the bar. Underline dropped — the shape carries it now. */
.intbar-link {
  color: #FFFFFF;
  text-decoration: none;
  font-size: 13px;
  font-weight: 700;
  flex: none;
  padding: 6px 12px;
  border-radius: var(--r-sm);
  background: rgba(255, 255, 255, .16);
  border: 1px solid rgba(255, 255, 255, .35);
  transition: background .14s;
}
.intbar-link:hover { background: rgba(255, 255, 255, .28); }

/* --- Client picker --- */
.card-pick { color: var(--ink); }
.card-go { color: var(--accent-ink); margin-top: 4px; }

/* ============================================================
   CLIENT LOGO IN THE MASTHEAD
   Sits on the black masthead, so client artwork wants to be
   white or light. Height-constrained rather than width, so logos
   of different aspect ratios sit on the same optical line.
   ============================================================ */
.mast-client-logo {
  height: 30px;
  width: auto;
  max-width: 190px;
  object-fit: contain;
  flex: none;
}

@media (max-width: 1000px) {
  .mast-client-logo { height: 26px; max-width: 140px; }
}
