/********* Dashboard Brand Deconstructed Animation ************/

/* Add alongside your existing gd/css/demos.css rules, or append to that
   file directly — these are namespaced bd- so they won't collide with the
   ggplot2-deconstructed gd- rules already in there. */

.bd-slide .gd-stage-wrap,
.bd-slide #bd-stage { perspective: 1600px; }

#bd-stage {
  display: flex; gap: 48px; align-items: flex-start;
}
/* .bd-code is deliberately NOT a `.codewindow` element (see the comment in
   brand-deconstructed.html for why); `.bd-codewindow`/`.bd-codewindow-dark`
   below duplicate the visual chrome from
   _extensions/emilhvitfeldt/codewindow/codewindow.css under their own
   namespaced selectors so this dynamically-built panel matches the deck's
   other code windows without ever being touched by that extension's JS. */
.bd-code {
  flex: 0 0 380px; margin-bottom: 0;
  font-size: 14.5px; line-height: 1.55;
  overflow-wrap: anywhere;
  font-family: monospace;
}
.bd-codewindow {
  border-radius: var(--codewindow-radius, 10px);
  box-shadow: var(--codewindow-shadow-color, #26394d) 0px 20px 30px -10px;
  color: var(--codewindow-color, inherit);
  background: var(--codewindow-bg, white);
}
.bd-codewindow .header {
  display: flex;
  background: var(--codewindow-header-bg, #e2e8f0);
  border-top-left-radius: var(--codewindow-radius, 10px);
  border-top-right-radius: var(--codewindow-radius, 10px);
  padding-left: 16px;
  gap: 16px;
  height: 30px;
}
.bd-codewindow .header .buttons {
  display: flex;
  align-items: center;
  flex: none;
}
.bd-codewindow .header .file {
  margin-top: 5px;
  padding-left: 20px;
  padding-right: 20px;
  display: flex;
  align-items: center;
  gap: 4px;
  background: var(--codewindow-tab-active-bg, var(--codewindow-bg, white));
  border-radius: 10px 10px 0 0;
  height: 90%;
}
.bd-codewindow .textarea {
  padding: 21px;
  overflow-x: auto;
}
.bd-codewindow .textarea .sourceCode {
  background: unset;
  border: unset;
  font-size: unset;
}
.bd-codewindow .textarea pre {
  font-size: unset;
  margin: 0;
}

.bd-codewindow.bd-codewindow-dark {
  --codewindow-bg: #2D2D2D;
  --codewindow-header-bg: #252525;
  --codewindow-tab-active-bg: #2D2D2D;
  --codewindow-color: #cccccc;
  --codewindow-shadow-color: #93a1a1;
}

.reveal pre code {
    max-height: none;
}

code.sourceCode.r {
    color: #cccccc;
    span {
        color: #cccccc;
    }

    /* Named function arguments (e.g. `title =`) — plain foreground */
    span.va,
    span.at {
        color: #cccccc;
    }

    /* R package namespace before `::`/`:::` — Tomorrow's Class/Support
    group (yellow, matching "entity.name.namespace.r" in the theme JSON) */
    span.dt {
        color: #FFCC66;
    }

    /* Keywords, control flow, "other" tokens — Tomorrow's Keyword/Storage group */
    span.cf,
    span.kw {
        color: #CC99CC;
    }

    /* Functions and imports — Tomorrow's Function/Special Method group */
    span.gd-fn {
        color: #6699CC;
    }

    /* Strings, chars, special strings — Tomorrow's String group */
    span.gd-str {
        color: #99CC99;
    }

    /* Numbers, constants, preprocessor — Tomorrow's Number/Constant group */
    span.bn,
    span.pp,
    span.fl,
    span.dv,
    span.cn {
        color: #F2777A;
    }

    /* Operators — Tomorrow's Operator/Misc group */
    span.ot,
    span.op,
    span.sc {
        color: #66CCCC;
    }

    /* Variables, attributes, alerts, errors — Tomorrow's Variable group */
    span.al,
    span.er {
        color: #F2777A;
    }

    /* Comments, annotations, documentation — muted grey */
    span.an,
    span.in,
    span.wa,
    span.do,
    span.cv,
    span.co {
        color: $theme-comment;
    }
}

/* Quarto's .code-copy-outer-scaffold/.code-copy-button rules already ship in
   the deck's bundled CSS; position=relative here is what they rely on for
   the button's position:absolute placement, same as Quarto's own fenced
   code blocks. */
.bd-code .code-copy-outer-scaffold {
  position: relative;
}
.bd-code span[data-blk] {
  display: block; padding: 3px 8px; margin: 0 -8px; border-radius: 6px;
  transition: background .3s, opacity .3s;
}
.bd-code span[data-blk].bd-hot { background: rgba(125,211,192,.14); }

#bd-plot {
  position: relative; width: 600px; height: 380px; flex: 0 0 600px;
  transform-style: preserve-3d;
}
.bd-plane { position: absolute; inset: 0; transform-style: preserve-3d; }
.bd-tilt {
  position: absolute; inset: 0; transform-style: preserve-3d;
  transform-origin: center center;
}
.bd-card {
  position: absolute; inset: -10px; border-radius: 14px;
  background: #0e1016; box-shadow: 0 20px 46px rgba(0,0,0,.5);
  opacity: 0;
}
.bd-mockup {
  position: absolute; inset: 0; border-radius: 10px; overflow: hidden;
  box-shadow: 0 1px 0 rgba(0,0,0,.06);
}

/* ================= the four stages of the mockup skin =================
   Swap these hex values / fonts for your talk's real bootswatch choice and
   your real _brand.yml — the point is the SAME markup restyled by variables,
   which is the whole "brand.yml doesn't touch your app code" argument. */
.bd-mockup {
  --primary: #0d6efd; --accent: #6c757d;
  --navbar-bg: #f8f9fa; --navbar-fg: #212529;
  --body-font: -apple-system, "Segoe UI", Roboto, sans-serif;
  --heading-font: var(--body-font);
  --radius: .375rem; --card-bg: #fff; --card-border: #dee2e6;
  --shadow: none; --bar-radius: 0; --logo-display: none;
  background: #fff; font-family: var(--body-font); color: #212529;
}
.bd-mockup.s-bootswatch {
  --primary: #18BC9C; --navbar-bg: #2C3E50; --navbar-fg: #fff;
  --body-font: 'Lato', -apple-system, sans-serif; --heading-font: var(--body-font);
  --radius: 0; --card-bg: #fff; --card-border: #ecf0f1;
}
.bd-mockup.s-brand {
  --primary: #7B2D46; --accent: #C9A227;
  --navbar-bg: #7B2D46; --navbar-fg: #fff;
  --body-font: 'Georgia', serif; --heading-font: 'Georgia', serif;
  --radius: .25rem; --card-bg: #fff; --card-border: #eee; --logo-display: flex;
}
.bd-mockup.s-polish {
  --primary: #7B2D46; --accent: #C9A227;
  --navbar-bg: #7B2D46; --navbar-fg: #fff;
  --body-font: 'Georgia', serif; --heading-font: 'Georgia', serif;
  --radius: .75rem; --card-bg: #fff; --card-border: #f1eceb; --logo-display: flex;
  --shadow: 0 10px 24px rgba(123,45,70,.16); --bar-radius: 6px 6px 0 0;
  background: linear-gradient(180deg,#fff 0%,#fbf5f3 100%);
}

.bd-mockup .navbar {
  height: 52px; display: flex; align-items: center; justify-content: space-between;
  padding: 0 20px; background: var(--navbar-bg); color: var(--navbar-fg);
  font-family: var(--heading-font); border-bottom: 1px solid rgba(0,0,0,.05);
}
.bd-mockup .brandmark { display: flex; align-items: center; gap: 9px; font-weight: 700; font-size: 15px; }
.bd-mockup .logo-dot { display: var(--logo-display); width: 18px; height: 18px; border-radius: 50%; background: var(--accent); }
.bd-mockup .navlinks { display: flex; align-items: center; gap: 18px; font-size: 13px; }
.bd-mockup .navlinks a { color: var(--navbar-fg); opacity: .85; text-decoration: none; }
.bd-mockup .btn-primary {
  background: var(--primary); border: 1px solid var(--primary); color: #fff;
  border-radius: var(--radius); padding: 6px 14px; font-size: 12.5px; font-family: var(--body-font);
}
.bd-mockup .content { padding: 22px 24px; }
.bd-mockup .stats { display: flex; gap: 16px; margin-bottom: 18px; }
.bd-mockup .stat-card {
  flex: 1; background: var(--card-bg); border: 1px solid var(--card-border);
  border-radius: var(--radius); box-shadow: var(--shadow); padding: 14px 16px;
}
.bd-mockup .stat-card .label { font-size: 11.5px; color: #8a8f98; margin-bottom: 6px; }
.bd-mockup .stat-card .value { font-family: var(--heading-font); font-size: 22px; font-weight: 700; color: var(--primary); }
.bd-mockup .stat-card .delta { font-size: 11px; color: #4caf7d; margin-top: 4px; }
.bd-mockup .chart-card {
  background: var(--card-bg); border: 1px solid var(--card-border);
  border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px 18px;
}
.bd-mockup .chart-title { font-family: var(--heading-font); font-size: 13px; font-weight: 700; margin-bottom: 12px; color: #333; }
.bd-mockup .bars { display: flex; align-items: flex-end; gap: 10px; height: 90px; }
.bd-mockup .bar { flex: 1; background: var(--primary); border-radius: var(--bar-radius); opacity: .92; }

/********* Report Brand Deconstructed Animation ************/

/* Add alongside your existing gd/css/demos.css and brand-deconstructed.css
   rules, or append to demos.css directly. Namespaced bdr- (brand-deconstructed
   report) so it can't collide with the bd- ids/classes used by your Shiny
   dashboard deconstruction slide — both slides sit in the DOM at once in
   reveal.js, so #bd-stage / #bd-plot must not be reused here. */

.bdr-slide .gd-stage-wrap,
.bdr-slide #bdr-stage { perspective: 1600px; }

#bdr-stage {
  display: flex; gap: 40px; align-items: flex-start;
  width: 1000px; max-width: 100%;
  transform: scale(1.5); /* deck is 1920x1080 (1.5x the 1280x720 this was built for) */
}

.bdr-codewindows { flex: 0 0 320px; display: flex; flex-direction: column; gap: 14px; }
.bdr-codewindows .codewindow {
  background: #1b1e27; border-radius: 10px; overflow: hidden;
  box-shadow: 0 1px 0 rgba(255,255,255,.03) inset, 0 6px 18px rgba(0,0,0,.18);
  opacity: .78; transform: scale(.99);
  transition: opacity .3s, transform .3s, box-shadow .3s;
}
.bdr-codewindows .cw-header {
  display: flex; align-items: center; height: 30px; padding: 0 12px;
  background: #20232c; border-bottom: 1px solid rgba(255,255,255,.05);
}
.bdr-codewindows .cw-dots { display: flex; gap: 6px; flex: 0 0 auto; }
.bdr-codewindows .cw-dots span { width: 9px; height: 9px; border-radius: 50%; display: block; }
.bdr-codewindows .cw-dots span:nth-child(1) { background: #ff5f56; }
.bdr-codewindows .cw-dots span:nth-child(2) { background: #ffbd2e; }
.bdr-codewindows .cw-dots span:nth-child(3) { background: #27c93f; }
.bdr-codewindows .cw-file { flex: 1; text-align: center; font: 11.5px "SFMono-Regular", Consolas, monospace; color: #8b93a7; }
.bdr-codewindows .cw-spacer { flex: 0 0 auto; width: 36px; }
.bdr-codewindows .cw-body {
  margin: 0; padding: 14px 16px; font: 13.5px/1.55 "SFMono-Regular", Consolas, monospace;
  color: #c7cbd6; white-space: pre; overflow-x: auto;
}
.bdr-codewindows .codewindow.bdr-hot {
  opacity: 1; transform: scale(1);
  box-shadow: 0 0 0 2px rgba(125,211,192,.55), 0 10px 26px rgba(0,0,0,.28);
}
.bdr-codewindows .codewindow.bdr-dim { opacity: .32; }
.gd-key { color: #8ec9ff; } .gd-str { color: #a8e6b0; }

#bdr-plot {
  position: relative; width: 640px; height: 530px; flex: 0 0 640px;
  transform-style: preserve-3d;
}
.bdr-plane { position: absolute; inset: 0; transform-style: preserve-3d; }
.bdr-tilt {
  position: absolute; inset: 0; transform-style: preserve-3d;
  transform-origin: center center;
}
.bdr-card {
  position: absolute; inset: -10px; border-radius: 14px;
  background: #0e1016; box-shadow: 0 20px 40px rgba(0,0,0,.35);
  opacity: 0;
}
.bdr-mockup {
  position: absolute; inset: 0; border-radius: 10px; overflow: hidden;
  box-shadow: 0 1px 0 rgba(0,0,0,.06);
}

/* ---- the three real transformations: bootswatch preset, brand.yml, polish ---- */
.bdr-mockup {
  --primary: #0d6efd; --link: #0d6efd;
  --navbar-bg: #0d6efd; --navbar-fg: #fff;
  --body-font: -apple-system, "Segoe UI", Roboto, sans-serif;
  --heading-font: var(--body-font);
  --radius: .375rem; --border: #dee2e6; --toc-active: #0d6efd;
  --callout-bg: #e7f1ff; --callout-border: #0d6efd; --logo-display: none;
  background: #fff; font-family: var(--body-font); color: #212529;
}
.bdr-mockup.s-bootswatch {
  /* format.html.theme: lux */
  --primary: #1a1a1a; --link: #1a1a1a;
  --navbar-bg: #1a1a1a; --navbar-fg: #fff;
  --body-font: 'Nunito Sans', -apple-system, sans-serif; --heading-font: var(--body-font);
  --radius: .5rem; --border: #ececec; --toc-active: #1a1a1a;
  --callout-bg: #f5f5f5; --callout-border: #1a1a1a;
}
.bdr-mockup.s-brand {
  /* + brand: brand.yml, layered on top of the same preset */
  --primary: #7B2D46; --link: #7B2D46;
  --navbar-bg: #7B2D46; --navbar-fg: #fff;
  --body-font: 'Georgia', serif; --heading-font: 'Georgia', serif;
  --radius: .5rem; --border: #f1eceb; --toc-active: #7B2D46;
  --callout-bg: #fbf1f0; --callout-border: #C9A227; --logo-display: flex;
}
.bdr-mockup.s-polish {
  /* + custom.scss on top of the same brand */
  --primary: #7B2D46; --link: #7B2D46;
  --navbar-bg: #7B2D46; --navbar-fg: #fff;
  --body-font: 'Georgia', serif; --heading-font: 'Georgia', serif;
  --radius: .75rem; --border: #f1eceb; --toc-active: #7B2D46;
  --callout-bg: #fbf1f0; --callout-border: #C9A227; --logo-display: flex;
  background: linear-gradient(180deg,#fff 0%,#fdf8f7 100%);
}
.bdr-mockup.s-polish .masthead { box-shadow: 0 1px 0 rgba(123,45,70,.06); }
.bdr-mockup.s-polish .doc-title { letter-spacing: .01em; }
.bdr-mockup.s-polish .callout { box-shadow: 0 8px 20px rgba(123,45,70,.14); }
.bdr-mockup.s-polish .margin-table table { border-radius: var(--radius); overflow: hidden; }
.bdr-mockup.s-polish .margin-table tr:nth-child(even) td { background: rgba(123,45,70,.045); }

.bdr-mockup .site-nav {
  height: 28px; display: flex; align-items: center; gap: 14px;
  padding: 0 16px; background: var(--navbar-bg); color: var(--navbar-fg);
  font-family: var(--heading-font); font-size: 11.5px; font-weight: 700;
}
.bdr-mockup .site-nav .site-brand { display: flex; align-items: center; gap: 7px; }
.bdr-mockup .site-nav .logo-dot { width: 10px; height: 10px; }
.bdr-mockup .site-nav .site-links { display: flex; align-items: center; gap: 14px; font-weight: 400; opacity: .9; }
.bdr-mockup .site-nav .site-search { margin-left: auto; opacity: .85; }

.bdr-mockup .masthead {
  padding: 18px 24px 14px; border-bottom: 1px solid var(--border);
  display: flex; align-items: center; gap: 10px;
}
.bdr-mockup .logo-dot { display: var(--logo-display); width: 15px; height: 15px; border-radius: 50%; background: var(--primary); flex: 0 0 auto; }
.bdr-mockup .masthead-text { font-family: var(--heading-font); }
.bdr-mockup .doc-title { font-size: 19px; font-weight: 700; color: #1d2433; }
.bdr-mockup .doc-sub { font-size: 12px; color: #6c757d; margin-top: 3px; font-family: var(--body-font); }
.bdr-mockup .doc-body { display: flex; gap: 18px; padding: 16px 24px 20px; align-items: flex-start; }

.bdr-mockup .sidenav {
  flex: 0 0 84px; font-family: var(--body-font); font-size: 11.5px;
}
.bdr-mockup .sidenav div { padding: 3px 0; color: #6c757d; line-height: 1.3; }
.bdr-mockup .sidenav div.active { color: var(--toc-active); font-weight: 600; }

.bdr-mockup .main { flex: 1; min-width: 0; font-family: var(--body-font); }
.bdr-mockup .main h2 {
  font-family: var(--heading-font); font-size: 15px; margin: 0 0 7px; color: #1d2433;
}
.bdr-mockup .main p { font-size: 12px; line-height: 1.5; color: #3c4249; margin: 0 0 10px; }
.bdr-mockup .main a { color: var(--link); }
.bdr-mockup .callout {
  border: 1px solid var(--callout-border); border-left: 4px solid var(--callout-border);
  border-radius: var(--radius); overflow: hidden; margin-bottom: 12px; background: #fff;
}
.bdr-mockup .callout-header {
  background: var(--callout-bg); padding: 6px 10px; display: flex; align-items: center;
  gap: 6px; font-weight: 700; font-size: 11px; color: #1d2433; font-family: var(--heading-font);
}
.bdr-mockup .callout-body { padding: 8px 10px 10px; font-size: 11.5px; color: #3c4249; }
.bdr-mockup .chart-wrap { margin-top: 4px; }
.bdr-mockup .chart-cap { font-size: 10.5px; color: #6c757d; font-family: var(--body-font); margin-top: 4px; margin-bottom: 20px; }

.bdr-mockup .margin {
  flex: 0 0 148px; font-family: var(--body-font);
}
.bdr-mockup .margin-toc-title { font-size: 10.5px; font-weight: 700; color: #212529; margin-bottom: 6px; }
.bdr-mockup .margin-toc { font-size: 11.5px; border-left: 2px solid var(--border); padding-left: 10px; margin-bottom: 60px; }
.bdr-mockup .margin-toc div { padding: 3px 0; color: #6c757d; }
.bdr-mockup .margin-toc div.active { color: var(--toc-active); font-weight: 600; }
.bdr-mockup .margin-table table { width: 100%; border-collapse: collapse; font-size: 10.5px; }
.bdr-mockup .margin-table th, .bdr-mockup .margin-table td {
  text-align: left; padding: 4px 6px; border-bottom: 1px solid var(--border);
  font-family: var(--body-font);
}
.bdr-mockup .margin-table th { color: #6c757d; font-weight: 600; font-size: 9.5px; }
.bdr-mockup .margin-table td:last-child, .bdr-mockup .margin-table th:last-child {
  text-align: right; color: var(--primary); font-weight: 600;
}

/* ==========================================================
   Dashboard Brand Deconstructed
   1920 x 1080 reveal.js layout
   ========================================================== */

.bd-slide {
  position: relative;
  height: 100%;
  /* visible so the 3D-rotated dashboard's right corner (and the plane
     fan when exploded) isn't cropped at the slide edge — the .gd-frag
     markers are self-clipped, so nothing else relied on this. */
  overflow: visible;
}

/* Keep the title compact so the animation gets most of the canvas. */
.bd-slide h2 {
  margin: 0 0 24px 0;
  line-height: 1.05;
}

/* Fragment markers control the animation but should occupy no layout space. */
.bd-slide > .gd-frag,
.bd-slide .gd-frag {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  pointer-events: none;
}

/* Main animation viewport. */
.bd-slide .gd-stage-wrap {
  position: relative;
  width: 100%;
  height: 820px;
  margin: 0;
  overflow: visible;
  perspective: 2200px;
}

/* Two-column composition:
   590 px code + 74 px gap + 900 px dashboard = 1564 px */
.bd-slide #bd-stage {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 74px;

  width: 100%;
  height: 100%;
  margin: 0 auto;

  perspective: 2200px;
  transform-style: preserve-3d;
}

/* ---------------- Code panel ---------------- */

/* 710px so the polish state's box-shadow line (~46 chars at 24px) fits;
   #bd-plot gives up the same 120px. */
.bd-slide .bd-code {
  flex: 0 0 710px;
  width: 710px;
  max-width: 710px;
  margin: 0;

  font-family:
    "Fira Code",
    "Cascadia Code",
    "Source Code Pro",
    monospace;
  font-size: 24px;
  line-height: 1.32;

  overflow-wrap: normal;
  word-break: normal;
}

.bd-slide .bd-codewindow {
  border-radius: 14px;
  overflow: hidden;
}

.bd-slide .bd-codewindow .header {
  height: 42px;
  padding-left: 20px;
  gap: 18px;
}

.bd-slide .bd-codewindow .header .file {
  height: 90%;
  margin-top: 5px;
  padding-left: 22px;
  padding-right: 22px;
  gap: 7px;
  border-radius: 12px 12px 0 0;
}

.bd-slide .bd-codewindow .textarea {
  box-sizing: border-box;
  padding: 18px 22px 20px;
  overflow: hidden;
}

.bd-slide .bd-codewindow .textarea pre {
  margin: 0;
  white-space: pre;
}

/* One code state visible at a time, crossfaded, with the stack height
   set/animated from JS (brand-deconstructed.html) — same pattern as
   .btd-slide .btd-code-stack and .qbd-code-stack. min-height must be 0 so
   JS-set heights aren't floored; pres are pinned top/left/right only so
   their offsetHeight reflects natural content height at opacity 0. */
.bd-slide .bd-code-stack {
  position: relative;
  min-height: 0;
  overflow: hidden;
}

.bd-slide .bd-code-stack pre {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  overflow: hidden;
}

/* Only the lines that changed between states flash (wrapped in
   .bd-flash-line spans in brand-deconstructed.html). display: block so the
   wash covers the whole line; the negative margin + padding bleed it to
   the textarea edge, same as btd's .btd-theme-line. --bd-flash is set on
   the parent pre by JS and inherits down. */
.bd-slide .bd-flash-line {
  /* display: block; */
  padding: 2px 9px;
  margin: 0 -9px;
  border-radius: 7px;
  transition: background .5s ease;
}

.bd-slide .bd-flash-line.bd-flash {
  background: var(--bd-flash, rgba(125, 211, 192, 0.18));
}

.bd-slide .bd-code span[data-blk] {
  display: block;
  padding: 3px 9px;
  margin: 0 -9px;
  border-radius: 7px;
}

/* ---------------- Dashboard planes ---------------- */

.bd-slide #bd-plot {
  position: relative;

  /* 1050px = 1170px minus the 120px the code column gained. */
  flex: 0 0 1050px;
  width: 1050px;
  height: 570px;

  transform-style: preserve-3d;
}

.bd-slide .bd-plane,
.bd-slide .bd-tilt {
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
}

.bd-slide .bd-card {
  inset: -14px;
  border-radius: 20px;
  box-shadow: 0 28px 64px rgba(0, 0, 0, 0.5);
}

.bd-slide .bd-mockup {
  border-radius: 15px;
}

/* Scale the internal dashboard UI with the larger mockup. */
.bd-slide .bd-mockup .navbar {
  height: 78px;
  padding: 0 30px;
}

.bd-slide .bd-mockup .brandmark {
  gap: 13px;
  font-size: 22px;
}

.bd-slide .bd-mockup .logo-dot {
  width: 27px;
  height: 27px;
}

.bd-slide .bd-mockup .navlinks {
  gap: 27px;
  font-size: 19px;
}

.bd-slide .bd-mockup .btn-primary {
  padding: 9px 21px;
  font-size: 18px;
}

.bd-slide .bd-mockup .content {
  padding: 32px 36px;
}

.bd-slide .bd-mockup .stats {
  gap: 24px;
  margin-bottom: 27px;
}

.bd-slide .bd-mockup .stat-card {
  padding: 20px 23px;
}

.bd-slide .bd-mockup .stat-card .label {
  margin-bottom: 8px;
  font-size: 17px;
}

.bd-slide .bd-mockup .stat-card .value {
  font-size: 32px;
}

.bd-slide .bd-mockup .stat-card .delta {
  margin-top: 6px;
  font-size: 16px;
}

.bd-slide .bd-mockup .chart-card {
  padding: 22px 27px;
}

.bd-slide .bd-mockup .chart-title {
  margin-bottom: 18px;
  font-size: 19px;
}

.bd-slide .bd-mockup .bars {
  gap: 15px;
  height: 135px;
}

/* Slightly stronger emphasis at the larger slide size. */
.bd-slide .bd-code span[data-blk].bd-hot {
  background: rgba(125, 211, 192, 0.18);
}

/* ==========================================================
   Shared transition-slide styling
   ========================================================== */

.design-choice-slide,
.combined-design-slide,
.default-slide,
.bootswatch-gallery-slide,
.brand-recognition-slide {
  position: relative;
  height: 100%;
  overflow: hidden;
}

.design-choice-slide h2,
.combined-design-slide h2,
.default-slide h2,
.bootswatch-gallery-slide h2,
.brand-recognition-slide h2 {
  margin-bottom: 38px;
}

.design-choice-card,
.combined-product,
.default-browser,
.theme-browser,
.brand-product {
  box-shadow: 0 18px 45px rgba(37, 77, 86, 0.12);
}

/* ==========================================================
   Two Design Choices
   ========================================================== */

.design-choice-stage {
  display: grid;
  grid-template-columns: 1fr 100px 1fr;
  align-items: center;
  gap: 32px;
  width: 1500px;
  margin: 75px auto 0;
}

.design-choice-card {
  display: grid;
  grid-template-columns: 46% 54%;
  align-items: center;
  min-height: 430px;
  padding: 55px;
  background: #fff;
  border: 3px solid #d3dfdd;
  border-radius: 34px;
}

.design-choice-card h3 {
  margin: 0 0 24px;
  font-size: 68px;
  color: #254d56;
}

.choice-copy {
  font-size: 35px;
  line-height: 1.45;
  color: #64635e;
}

.design-choice-plus {
  font-size: 92px;
  font-weight: 300;
  text-align: center;
  color: #45767a;
}

.choice-visual {
  position: relative;
  min-height: 260px;
}

.palette-dot {
  position: absolute;
  top: 18px;
  width: 74px;
  height: 74px;
  border-radius: 50%;
  border: 8px solid #fff;
  box-shadow: 0 8px 20px rgba(37, 77, 86, 0.18);
}

.palette-dot-1 {
  left: 25px;
  background: #45767a;
}

.palette-dot-2 {
  left: 84px;
  background: #7fa6ad;
}

.palette-dot-3 {
  left: 143px;
  background: #59224a;
}

.choice-chart {
  position: absolute;
  bottom: 16px;
  left: 30px;
  display: flex;
  align-items: end;
  gap: 18px;
  width: 270px;
  height: 145px;
  padding-bottom: 8px;
  border-bottom: 4px solid #c7d6d7;
}

.choice-chart span {
  width: 42px;
  height: 65px;
  background: #b3c2c9;
  border-radius: 8px 8px 0 0;
}

.choice-chart span:nth-child(2) {
  height: 105px;
}

.choice-chart span:nth-child(3) {
  height: 138px;
}

.choice-chart span:nth-child(4) {
  height: 82px;
}

.choice-chart .chart-focus {
  background: #59224a;
}

.type-specimen {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-left: 35px;
}

.type-heading {
  font-family: "Nunito Sans", sans-serif;
  font-size: 150px;
  font-weight: 600;
  line-height: 0.85;
  color: #254d56;
}

.type-line {
  display: block;
  height: 14px;
  margin-top: 18px;
  border-radius: 10px;
  background: #b3c2c9;
}

.type-line-1 {
  width: 260px;
  height: 20px;
  background: #45767a;
}

.type-line-2 {
  width: 220px;
}

.type-line-3 {
  width: 170px;
}

.choice-result {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 34px;
  margin-top: 55px;
  font-size: 42px;
  color: #64635e;
}

.choice-result strong {
  color: #59224a;
}

.choice-arrow {
  color: #7fa6ad;
}

/* ==========================================================
   Combined color and typography
   ========================================================== */

.combined-stage {
  position: relative;
  width: 1450px;
  margin: 42px auto 0;
}

.combined-product {
  overflow: hidden;
  width: 1120px;
  margin: auto;
  background: #fff;
  border: 3px solid #d3dfdd;
  border-radius: 28px;
}

.combined-nav {
  display: flex;
  align-items: center;
  gap: 48px;
  padding: 26px 42px;
  color: #fff;
  background: #254d56;
  font-size: 25px;
}

.combined-brand {
  margin-right: auto;
  font-family: "Nunito Sans", sans-serif;
  font-size: 31px;
  font-weight: 600;
}

.combined-body {
  display: grid;
  grid-template-columns: 56% 44%;
  min-height: 500px;
  padding: 60px;
  background: #ecf1f2;
}

.combined-copy {
  padding-right: 55px;
}

.combined-eyebrow {
  font-size: 20px;
  font-weight: 600;
  letter-spacing: 0.12em;
  color: #45767a;
}

.combined-title {
  margin-top: 16px;
  font-family: "Nunito Sans", sans-serif;
  font-size: 59px;
  font-weight: 600;
  line-height: 1.08;
  color: #254d56;
}

.combined-subtitle {
  width: 80%;
  margin-top: 22px;
  font-size: 28px;
  color: #64635e;
}

.combined-metric-row {
  display: flex;
  gap: 54px;
  margin-top: 55px;
}

.combined-metric strong,
.combined-metric span {
  display: block;
}

.combined-metric strong {
  font-family: "Nunito Sans", sans-serif;
  font-size: 52px;
  color: #59224a;
}

.combined-metric span {
  width: 180px;
  font-size: 20px;
  line-height: 1.25;
}

.combined-chart {
  position: relative;
  display: flex;
  align-items: end;
  gap: 30px;
  min-height: 350px;
  padding: 20px 30px 45px;
  border-left: 3px solid #d3dfdd;
  border-bottom: 3px solid #b3c2c9;
}

.combined-bar {
  position: relative;
  width: 62px;
  border-radius: 10px 10px 0 0;
  background: #7fa6ad;
}

.combined-bar span {
  display: block;
}

.combined-bar-1 {
  height: 145px;
}

.combined-bar-2 {
  height: 220px;
}

.combined-bar-3 {
  height: 300px;
  background: #59224a;
}

.combined-bar-4 {
  height: 185px;
}

.combined-annotation {
  position: absolute;
  top: 24px;
  right: 20px;
  padding: 10px 18px;
  border-radius: 10px;
  color: #fff;
  background: #59224a;
  font-size: 18px;
}

.combined-label {
  position: absolute;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 17px 25px;
  border-radius: 50px;
  background: #fff;
  box-shadow: 0 10px 30px rgba(37, 77, 86, 0.15);
  font-size: 27px;
  font-weight: 600;
  color: #254d56;
}

.combined-label-color {
  top: 245px;
  left: -80px;
}

.combined-label-type {
  top: 365px;
  right: -80px;
}

.label-swatch {
  width: 29px;
  height: 29px;
  border-radius: 50%;
  background: #59224a;
}

.label-aa {
  font-family: "Nunito Sans", sans-serif;
  font-size: 31px;
  color: #45767a;
}

.combined-result {
  margin-top: 38px;
  text-align: center;
  font-size: 36px;
  line-height: 1.35;
  color: #64635e;
}

.combined-result strong {
  color: #59224a;
}

/* ==========================================================
   Bootstrap default
   ========================================================== */

.default-product-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 44px;
  width: 1580px;
  margin: 70px auto 0;
}

.default-product-label {
  margin-bottom: 16px;
  text-align: center;
  font-size: 25px;
  font-weight: 600;
  color: #64635e;
}

.default-browser {
  overflow: hidden;
  height: 410px;
  border: 2px solid #d8d5ce;
  border-radius: 18px;
  background: #fff;
}

.default-browser-bar {
  display: flex;
  gap: 8px;
  padding: 14px 18px;
  background: #eceae7;
}

.default-browser-bar span {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #b3c2c9;
}

.default-navbar {
  padding: 22px;
  color: #fff;
  background: #0d6efd;
  font-size: 22px;
  font-weight: 600;
}

.default-dashboard-body {
  display: grid;
  grid-template-columns: 25% 75%;
  height: 330px;
}

.default-sidebar {
  background: #f1f3f5;
  border-right: 1px solid #dee2e6;
}

.default-main {
  padding: 30px;
}

.default-heading,
.default-report-title,
.default-slide-title {
  width: 58%;
  height: 18px;
  margin-bottom: 26px;
  border-radius: 4px;
  background: #495057;
}

.default-cards {
  display: flex;
  gap: 13px;
}

.default-cards span {
  width: 29%;
  height: 55px;
  border: 1px solid #dee2e6;
  border-radius: 6px;
}

.default-graph,
.default-table,
.default-slide-chart {
  margin-top: 24px;
  height: 145px;
  border-radius: 6px;
  background:
    linear-gradient(
      to top right,
      transparent 48%,
      #0d6efd 49%,
      #0d6efd 52%,
      transparent 53%
    ),
    #f8f9fa;
}

.default-report-body,
.default-presentation-body {
  padding: 42px;
}

.default-report-line {
  width: 78%;
  height: 10px;
  margin: 15px 0;
  background: #adb5bd;
  border-radius: 3px;
}

.default-report-line.wide {
  width: 100%;
}

.default-report-line.short {
  width: 55%;
}

.default-table {
  height: 120px;
  background: repeating-linear-gradient(
    #f1f3f5 0,
    #f1f3f5 25px,
    #dee2e6 26px
  );
}

.default-presentation-body {
  text-align: center;
}

.default-slide-title {
  width: 70%;
  margin: 12px auto 30px;
}

.default-slide-chart {
  width: 65%;
  height: 175px;
  margin: auto;
}

.default-slide-footer {
  width: 36%;
  height: 9px;
  margin: 30px auto;
  background: #adb5bd;
}

.default-verdict {
  display: flex;
  justify-content: center;
  gap: 52px;
  margin-top: 55px;
  font-size: 30px;
  color: #727e70;
}

.default-verdict strong {
  color: #59224a;
}

/* ==========================================================
   Bootswatch gallery
   ========================================================== */

.bootswatch-gallery {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 32px;
  width: 1660px;
  margin: 68px auto 0;
}

.theme-preview-name {
  margin-bottom: 14px;
  text-align: center;
  font-size: 28px;
  font-weight: 600;
  color: #254d56;
}

.theme-browser {
  overflow: hidden;
  height: 470px;
  border-radius: 18px;
  background: #fff;
}

.theme-navbar {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 22px 24px;
  font-size: 16px;
}

.theme-navbar strong {
  margin-right: auto;
  font-size: 21px;
}

.theme-hero {
  padding: 35px 24px;
  font-size: 29px;
  font-weight: 600;
}

.theme-preview-body {
  display: flex;
  gap: 13px;
  padding: 28px 24px;
}

.theme-card {
  width: 31%;
  height: 100px;
  border-radius: 8px;
}

.theme-button {
  width: fit-content;
  margin: 10px 24px;
  padding: 12px 22px;
  border-radius: 6px;
  font-size: 17px;
}

.theme-lux .theme-navbar {
  color: #fff;
  background: #1a1a1a;
}

.theme-lux .theme-hero {
  color: #1a1a1a;
  background: #f5f5f5;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.theme-lux .theme-card {
  border: 1px solid #ddd;
}

.theme-lux .theme-button {
  color: #fff;
  background: #1a1a1a;
  border-radius: 0;
}

.theme-minty .theme-navbar {
  color: #fff;
  background: #78c2ad;
}

.theme-minty .theme-hero {
  color: #2f6f62;
  background: #dff4ee;
}

.theme-minty .theme-card {
  background: #effaf7;
  border: 2px solid #78c2ad;
  border-radius: 14px;
}

.theme-minty .theme-button {
  color: #fff;
  background: #78c2ad;
  border-radius: 20px;
}

.theme-sandstone .theme-navbar {
  color: #fff;
  background: #325d88;
}

.theme-sandstone .theme-hero {
  color: #3e3f3a;
  background: #f4f1ea;
}

.theme-sandstone .theme-card {
  background: #f8f5ee;
  border: 1px solid #d4c7b0;
}

.theme-sandstone .theme-button {
  color: #fff;
  background: #93c54b;
}

.theme-darkly .theme-browser {
  background: #222;
}

.theme-darkly .theme-navbar {
  color: #fff;
  background: #375a7f;
}

.theme-darkly .theme-hero {
  color: #fff;
  background: #303030;
}

.theme-darkly .theme-card {
  background: #444;
  border: 1px solid #666;
}

.theme-darkly .theme-button {
  color: #fff;
  background: #00bc8c;
}

.bootswatch-caption {
  margin-top: 48px;
  text-align: center;
  font-size: 34px;
  color: #64635e;
}

/* Brand.yml File slide: the two yaml sections as separate side-by-side
   code windows instead of tabs, sized so every line is visible without
   scrolling. */
.brandyml-windows {
  display: flex;
  gap: 44px;
  align-items: flex-start;
}
.brandyml-windows .codewindow {
  flex: 1 1 0;
  min-width: 0;
  margin-bottom: 0;
  /* Fixed 24px to match the other slides' code panels (the extension
     default is a relative 0.45em). */
  font-size: 24px;
}

/* No internal scrolling — the windows grow to fit every line. Quarto sets
   div.sourceCode { overflow: auto } deck-wide, and the deck's 1.4
   line-height made the 28-line color section taller than the slide, so the
   window showed a scrollbar. Tighter line-height + padding keeps all of it
   on screen at 24px. */
.brandyml-windows .codewindow .textarea {
  padding: 14px 18px;
  overflow: visible;
}
.brandyml-windows .codewindow .sourceCode,
.brandyml-windows .codewindow pre,
.brandyml-windows .codewindow code {
  overflow: visible !important;
  max-height: none !important;
}
.brandyml-windows .codewindow pre > code.sourceCode > span {
  line-height: 1.25;
}

.bootswatch-tool-hint {
  margin-top: 20px;
  text-align: center;
  font-size: 22px;
  color: #727e70;
}

/* ==========================================================
   Applying Bootswatch Themes: Shiny
   Same TM.gate/TM.anime architecture as brand-deconstructed.js —
   namespaced btd- so it can't collide with #bd-stage/#bd-plot or
   #bdr-stage/#bdr-plot, since all three slides sit in the DOM at once.
   ========================================================== */

.btd-slide {
  position: relative;
  height: 100%;
  /* overflow must stay visible so #btd-preview's 80px-blur box-shadow
     isn't cropped at the slide edge. The .gd-frag markers are already
     self-clipped (1px + their own overflow: hidden), so nothing else
     relied on this. */
  overflow: visible;
}
/* Match .qbd-slide h2 spacing so both demo slides compose identically. */
.btd-slide h2 { margin-bottom: 0.35em; }

.btd-slide > .gd-frag,
.btd-slide .gd-frag {
  position: absolute; width: 1px; height: 1px;
  overflow: hidden; pointer-events: none;
}

/* Two-column composition, matching #qbd-stage: no wrapper, fixed 820px
   height, items vertically centered. The browserbar variant overrides
   this flex layout with a grid (780px code + 46px gap + fluid preview);
   these flex values are the fallback for the non-browserbar variant. */
.btd-slide #btd-stage {
  position: relative; display: flex; align-items: center; justify-content: center;
  gap: 74px; width: 100%; height: 820px; margin: 0 auto;
}

/* ---------------- Code panel (reuses .bd-codewindow chrome) ---------------- */

/* Width matches the 780px code column the browserbar variant's grid
   gives #btd-stage; max-width must not be smaller or the grid track
   would overflow the window chrome. */
.btd-slide .bd-code {
  flex: 0 0 780px; width: 780px; max-width: 780px; margin: 0;
  font-family: "Fira Code", "Cascadia Code", "Source Code Pro", monospace;
  font-size: 24px; line-height: 1.5;
  overflow-wrap: normal; word-break: normal;
}
.btd-slide .bd-codewindow { border-radius: 14px; overflow: hidden; }
.btd-slide .bd-codewindow .header { height: 42px; padding-left: 20px; gap: 18px; }
.btd-slide .bd-codewindow .header .file {
  height: 90%; margin-top: 5px; padding-left: 22px; padding-right: 22px;
  gap: 7px; border-radius: 12px 12px 0 0;
}
.btd-slide .bd-codewindow .textarea {
  box-sizing: border-box; padding: 22px 26px 24px; overflow: hidden;
}
.btd-slide .bd-codewindow .textarea pre { margin: 0; white-space: pre; }

/* The two code states crossfade in place rather than reflowing the window
   when the theme line appears — sized to the taller (themed) variant so
   nothing jumps. */
/* min-height must be 0 (like .qbd-code-stack) so JS-set heights below
   145px aren't floored — sizing always comes from the JS measurement. */
.btd-slide .btd-code-stack { position: relative; min-height: 0; overflow: hidden; }
/* Pin only top/left/right (not bottom: 0) so each pre's offsetHeight
   reflects its natural content height — the JS in
   bootswatch-theme-demo.html reads offsetHeight to resize the stack,
   same as quarto-brand-demo's setCode(). */
.btd-slide .btd-code-stack pre {
  position: absolute; top: 0; left: 0; right: 0;
  overflow: hidden; /* belt-and-suspenders: never show a horizontal scrollbar */
  transition: opacity .45s ease;
}
.btd-slide .btd-theme-line {
  /* display: block;  */
  padding: 2px 9px; margin: 0 -9px; border-radius: 7px;
  transition: background .5s ease;
}
.btd-slide .btd-theme-line.btd-flash { background: var(--btd-flash, rgba(125,211,192,.18)); }

/* ---------------- Preview panel (real screenshots, crossfaded) ---------------- */

.btd-slide #btd-preview {
  position: relative;
  /* flex: 0 0 900px; width: 900px; */
  border-radius: 15px; overflow: hidden;
  background: #0d0f14;
  box-shadow: 0 28px 64px rgba(0, 0, 0, .5);
}
.btd-slide .btd-shot {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity .55s ease;
}
.btd-slide .btd-shot.btd-on { opacity: 1; }

/* ==========================================================
   Applying Bootswatch + brand.yml: Quarto
   ========================================================== */

/* quarto-brand-demo.css */
.qbd-slide h2 {
  margin-bottom: 0.35em;
}

#qbd-stage {
  position: relative;
  display: grid;
  grid-template-columns: minmax(520px, 0.78fr) minmax(0, 1.62fr);
  gap: 46px;
  align-items: center;
  width: 100%;
  height: 820px;
}

.qbd-fragments {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
}

/* ---------- Code window (reuses .bd-codewindow chrome, same mac-button +
   file-tab shell and dark palette as the btd-slide code panel — see
   .btd-slide .bd-code / .bd-codewindow overrides above) ---------- */
.qbd-slide .bd-code {
  flex: none; width: 100%; margin: 0; align-self: center;
  font-family: "Fira Code", "Cascadia Code", "Source Code Pro", monospace;
  font-size: 24px; line-height: 1.5;
  overflow-wrap: normal; word-break: normal;
}
.qbd-slide .bd-codewindow { border-radius: 14px; overflow: hidden; }
.qbd-slide .bd-codewindow .header { height: 42px; padding-left: 20px; gap: 18px; }
.qbd-slide .bd-codewindow .header .file {
  height: 90%; margin-top: 5px; padding-left: 22px; padding-right: 22px;
  gap: 7px; border-radius: 12px 12px 0 0;
}
.qbd-slide .bd-codewindow .textarea {
  box-sizing: border-box; padding: 22px 26px 24px; overflow: hidden;
}
.qbd-slide .bd-codewindow .textarea pre { margin: 0; white-space: pre-wrap; }

/* Height is set/animated from JS (see quarto-brand-demo.html) to match the
   current stage's code exactly — clipped by overflow so a growing block
   reveals its new lines rather than jumping. */
/* !important here specifically guards against a leftover duplicate
   .qbd-code-stack rule (min-height/padding) surviving elsewhere in the
   merged stylesheet — those two properties must always come from JS. */
.qbd-code-stack {
  position: relative;
  overflow: hidden;
  min-height: 0 !important;
  padding: 0 !important;
}

.qbd-code-state {
  margin: 0;
  white-space: pre-wrap;
  color: #c0caf5;
}

/* !important guards these against the same kind of stray duplicate rule
   elsewhere in the merged stylesheet that was overriding qbd-code-stack's
   sizing — without it a same-specificity rule loaded later could silently
   win and flatten the syntax highlighting back to the inherited grey. */
.qbd-yaml-key { color: #F2777A; }
.qbd-yaml-value { color: #cccccc; }
.qbd-yaml-string { color: #99CC99; }

.qbd-focus {
  display: inline-block;
  margin-left: -10px;
  padding: 0 10px;
  border-radius: 8px;
  transition: background .5s ease;
}

.qbd-focus.qbd-flash {
  background: var(--qbd-flash, rgba(125, 207, 255, 0.34));
}

.qbd-stage-label,
.btd-stage-label,
.bd-stage-label {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin: 0 30px 26px;
  padding: 9px 14px;
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.055);
  color: #c0caf5;
  font: 650 17px/1 system-ui, sans-serif;
}

.qbd-stage-label::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--qbd-accent, #7dcfff);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--qbd-accent, #7dcfff) 20%, transparent);
}

/* btd twin of the qbd dot — separate rule so each demo reads its own
   --*-accent variable. */
.btd-stage-label::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--btd-accent, #9aa5b1);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--btd-accent, #9aa5b1) 20%, transparent);
}

/* bd twin — accent tracks the focused mockup layer's palette. */
.bd-stage-label::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--bd-accent, #0d6efd);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--bd-accent, #0d6efd) 20%, transparent);
}

/* ---------- Screenshot window ---------- */
#qbd-preview {
  position: relative;
  min-width: 0;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  border: 1px solid rgba(17, 24, 39, 0.12);
  border-radius: 18px;
  background: #f7f7f7;
  box-shadow: 0 28px 80px rgba(16, 24, 40, 0.20);
  transform: translateZ(0);
}

.qbd-browserbar {
  position: absolute;
  z-index: 5;
  top: 0;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  height: 46px;
  padding: 0 17px;
  background: #eef0f3;
  border-bottom: 1px solid #d8dbe0;
}

.qbd-browserbar .qbd-dot {
  width: 11px;
  height: 11px;
  margin-right: 7px;
  border-radius: 50%;
}

.qbd-browserbar .qbd-dot:nth-child(1) { background: #ff5f57; }
.qbd-browserbar .qbd-dot:nth-child(2) { background: #febc2e; }
.qbd-browserbar .qbd-dot:nth-child(3) { background: #28c840; }

.qbd-address {
  width: 58%;
  height: 22px;
  margin: 0 auto;
  border-radius: 999px;
  background: #fff;
  border: 1px solid #d9dde3;
}

.qbd-shot {
  position: absolute;
  inset: 46px 0 0;
  width: 100%;
  height: calc(100% - 46px);
  object-fit: cover;
  object-position: center center;
  /* Reveal's default `section img` margins/padding otherwise push the
     absolutely-positioned shot off-center inside the preview frame —
     same resets as .btd-slide .btd-shot above. */
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0;
  transform: scale(1.012);
}

.qbd-shot.qbd-on {
  opacity: 1;
  transform: scale(1);
}

.qbd-missing {
  position: absolute;
  inset: 46px 0 0;
  display: grid;
  place-items: center;
  padding: 60px;
  background: linear-gradient(135deg, #f7f8fb, #edf1f7);
  color: #303846;
  text-align: center;
  font: 650 27px/1.35 system-ui, sans-serif;
}

.qbd-missing code {
  display: block;
  margin-top: 14px;
  color: #8a1538;
  font-size: 21px;
}

.qbd-missing[hidden] { display: none; }

@media (max-width: 1200px) {
  #qbd-stage {
    grid-template-columns: 0.9fr 1.4fr;
    gap: 28px;
  }
  .qbd-slide .bd-code { font-size: 19px; }
}

.reveal img {
  max-width: 100%;
}
/* ---- One Brand Across Multiple Products slide ------------------------- */
/* Wraps the two screenshots in tilted browser windows so the composition
   reads as designed rather than pasted-on. */
/* Chrome matches the qbd "visual identity" slide: same flat bar, dot
   size, address pill, frame border/radius/shadow. */
.obmp-slide .obmp-browser {
  position: absolute;
  border-radius: 18px;
  overflow: hidden;
  border: 1px solid rgba(17, 24, 39, 0.12);
  background: #f7f7f7;
  box-shadow: 0 28px 80px rgba(16, 24, 40, 0.20);
}

.obmp-slide .obmp-browser img {
  display: block;
  width: 100%;
  margin: 0;
}

.obmp-slide .obmp-browserbar {
  display: flex;
  align-items: center;
  height: 34px;
  padding: 0 14px;
  background: #eef0f3;
  border-bottom: 1px solid #d8dbe0;
}

.obmp-slide .obmp-browserbar .obmp-dot {
  width: 9px;
  height: 9px;
  margin-right: 6px;
  border-radius: 50%;
}

.obmp-slide .obmp-browserbar .obmp-dot:nth-child(1) { background: #ff5f57; }
.obmp-slide .obmp-browserbar .obmp-dot:nth-child(2) { background: #febc2e; }
.obmp-slide .obmp-browserbar .obmp-dot:nth-child(3) { background: #28c840; }

.obmp-slide .obmp-address {
  width: 58%;
  height: 16px;
  margin: 0 auto;
  border-radius: 999px;
  background: #fff;
  border: 1px solid #d9dde3;
}

.obmp-slide .obmp-dash {
  transform: rotate(-2deg);
}

.obmp-slide .obmp-report {
  transform: rotate(1.5deg);
}
