/**
 * The release demos, on the website.
 *
 * The app has shown a moving picture on every release note for a while; the website's releases
 * page had none — the same shipped feature, described in prose on one surface and demonstrated on
 * the other. These are the SAME demos, ported: CSS-animated DOM, not video and not GIFs. A few
 * hundred bytes each, they inherit the page's theme, they translate with the rest of the site
 * (the words inside them are plain text, so glance-lang.js's raw pass picks them up), and they
 * can't be a 4MB download on a phone.
 *
 * Two bridges from the app's stylesheet — the only differences from it:
 *   · the app calls its accent --brand; this site calls it --gc-brand.
 *   · the app themes on html[data-theme]; this site themes on :root[data-theme].
 */
:root {
  --brand: var(--gc-brand, #2f62d6)
}


/* ── Play on sight, not on load ────────────────────────────────────────────────
   A CSS animation starts when the element is PAINTED, not when it's seen. Every demo on the
   releases page — fifteen of them, most below the fold — began animating the moment the page
   loaded, and `forwards` holds the last frame. So each one played to an empty room and you
   scrolled down to a frozen final still.

   Nothing runs until glance-demos.js adds .in (the demo is on screen); it comes off again when
   the demo scrolls away, so coming back replays it instead of showing the same dead frame. */
.rd:not(.in),
.rd:not(.in) * {
  animation: none !important
}

/* Reduced motion is the exception that overrides the gate: those users get the finished picture
   immediately, and never the blank pre-animation state. See the block at the end of this file. */

.rd-wrap {
  margin-top: 14px
}

/* No border, no fake title bar. The demo is the content — it was wearing a costume of browser
   chrome that fought every page it sat on. */
.rd {
  overflow: hidden
}

.rd-body {
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 9px
}

/* The demo is evidence for the sentence directly above it, so it's indented under that sentence
   and set on a quieter surface — a picture floating flush against the prose read as a separate
   thing that had landed there by accident. */
.rd {
  margin: 14px 0 2px;
  padding: 14px 16px;
  border-radius: 12px;
  background: var(--bg);
  border: 1px solid var(--line)
}

@media (max-width:600px) {
  .rd {
    padding: 12px
  }
}

.rd-ask {
  align-self: flex-end;
  max-width: 88%;
  background: var(--brand);
  color: #fff;
  font-size: 13px;
  border-radius: 13px 13px 4px 13px;
  padding: 8px 12px;
  opacity: 0;
  animation: rdIn .4s ease-out forwards
}

@keyframes rdIn {
  to {
    opacity: 1;
    transform: none
  }
}

.rd-typed {
  display: inline-block;
  overflow: hidden;
  white-space: nowrap;
  border-right: 2px solid rgba(255, 255, 255, .8);
  width: 0;
  animation: rdType 1.4s steps(34, end) .3s forwards, rdCaret .7s step-end 5
}

@keyframes rdType {
  to {
    width: 100%
  }
}

@keyframes rdCaret {
  50% {
    border-color: transparent
  }
}

.rd-think {
  display: flex;
  gap: 4px;
  padding: 2px;
  opacity: 0;
  animation: rdIn .3s ease-out .5s forwards, rdOut .3s ease-out 1.15s forwards
}

@keyframes rdOut {
  to {
    opacity: 0;
    height: 0;
    padding: 0;
    margin: -5px 0
  }
}

.rd-think i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--muted);
  animation: rdBounce 1s ease-in-out infinite
}

.rd-think i:nth-child(2) {
  animation-delay: .14s
}

.rd-think i:nth-child(3) {
  animation-delay: .28s
}

@keyframes rdBounce {

  0%,
  60%,
  100% {
    transform: translateY(0);
    opacity: .45
  }

  30% {
    transform: translateY(-4px);
    opacity: 1
  }
}

.rd-said {
  align-self: flex-start;
  max-width: 94%;
  border: 1px solid var(--line);
  background: var(--panel);
  border-radius: 13px 13px 13px 4px;
  padding: 9px 12px;
  font-size: 13px;
  line-height: 1.55;
  opacity: 0;
  animation: rdIn .45s ease-out 1.2s forwards
}

.rd-said.left {
  align-self: flex-start;
  animation-delay: 0ms
}

.rd-none,
.rd-sent {
  font-size: 11.5px;
  color: var(--muted);
  border: 1px dashed var(--line);
  border-radius: 9px;
  padding: 7px 10px;
  opacity: 0;
  animation: rdIn .4s ease-out 1.8s forwards
}

.rd-bars {
  display: flex;
  align-items: flex-end;
  gap: 5px;
  height: 66px;
  opacity: 1
}

.rd-bars.tall {
  height: 110px
}

.rd-bars.small {
  height: 44px
}

.rd-bars span {
  flex: 1;
  height: 0;
  border-radius: 4px 4px 2px 2px;
  background: #c9d4ea;
  display: block;
  animation: rdRise .7s cubic-bezier(.22, 1, .36, 1) forwards;
  animation-delay: var(--d)
}

.rd-bars span.hot {
  background: var(--brand)
}

@keyframes rdRise {
  to {
    height: var(--h)
  }
}

:root[data-theme="dark"] .rd-bars span {
  background: #39435a
}

:root[data-theme="dark"] .rd-bars span.hot {
  background: var(--brand)
}

.rd-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  align-items: stretch;
  position: relative
}

.rd-cursor {
  position: absolute;
  width: 0;
  height: 0;
  border-left: 9px solid var(--text);
  border-bottom: 6px solid transparent;
  border-top: 6px solid transparent;
  left: 6%;
  top: 10%;
  opacity: 0;
  animation: rdMove 1.3s cubic-bezier(.5, 0, .2, 1) .7s forwards
}

@keyframes rdMove {
  0% {
    opacity: 0;
    left: 6%;
    top: 10%
  }

  25% {
    opacity: 1
  }

  100% {
    opacity: 1;
    left: 58%;
    top: 38%
  }
}

.rd-rows {
  display: flex;
  flex-direction: column;
  gap: 5px;
  justify-content: center
}

.rd-row {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 11.5px;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 6px 8px;
  background: var(--panel);
  opacity: 0;
  transform: translateX(-8px);
  animation: rdSlide .45s cubic-bezier(.22, 1, .36, 1) forwards;
  animation-delay: var(--d)
}

@keyframes rdSlide {
  to {
    opacity: 1;
    transform: none
  }
}

.rd-row.tick::after {
  content: "✓";
  color: #12775a;
  font-weight: 800;
  margin-left: 4px
}

:root[data-theme="dark"] .rd-row.tick::after {
  color: #43e0b0
}

.rd-note {
  margin: 6px 0 0;
  font-size: 11px;
  color: var(--muted);
  font-style: italic
}

.rd-doc {
  position: relative;
  border: 1px solid var(--line);
  border-radius: 9px;
  background: var(--panel);
  padding: 11px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  overflow: hidden
}

.rd-doc span {
  height: 6px;
  border-radius: 3px;
  background: var(--line);
  display: block
}

.rd-doc em {
  font-size: 10px;
  color: var(--muted);
  font-style: normal;
  text-align: center;
  margin-top: 4px
}

.rd-scan {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 36%;
  background: linear-gradient(180deg, rgba(91, 140, 255, 0), rgba(91, 140, 255, .35));
  border-bottom: 2px solid var(--brand);
  animation: rdScan 1.5s cubic-bezier(.5, 0, .5, 1) 2
}

@keyframes rdScan {
  0% {
    opacity: 0;
    transform: translateY(-40%)
  }

  20% {
    opacity: 1
  }

  85% {
    opacity: 1
  }

  100% {
    opacity: 0;
    transform: translateY(210%)
  }
}

.rd-langs {
  position: relative;
  height: 74px
}

.rd-lang {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  gap: 5px;
  justify-content: center;
  opacity: 0;
  animation: rdCycle 12s linear infinite;
  animation-delay: calc(var(--i) * 2s)
}

@keyframes rdCycle {

  0%,
  1% {
    opacity: 0
  }

  3%,
  14% {
    opacity: 1
  }

  17%,
  100% {
    opacity: 0
  }
}

.rd-lang span {
  font-size: 11px;
  color: var(--muted);
  font-weight: 650
}

.rd-lang b {
  font-size: 14.5px;
  line-height: 1.5
}

.rd-fields {
  display: flex;
  flex-direction: column;
  gap: 6px
}

.rd-field {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  font-size: 12px;
  border: 1px solid var(--line);
  border-radius: 9px;
  padding: 8px 10px;
  background: var(--panel);
  opacity: 0;
  animation: rdIn .45s ease-out forwards;
  animation-delay: var(--d)
}

.rd-field span {
  color: var(--muted)
}

.rd-field.on {
  border-color: var(--brand)
}

.rd-drop {
  border: 1px dashed var(--line);
  border-radius: 9px;
  padding: 10px;
  font-size: 12px;
  color: var(--muted);
  text-align: center;
  opacity: 0;
  animation: rdIn .45s ease-out forwards;
  animation-delay: var(--d)
}

.rd-prices {
  display: flex;
  gap: 7px;
  flex-wrap: wrap
}

.rd-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 6px 11px;
  background: var(--panel);
  font-size: 12.5px;
  opacity: 0;
  transform: translateY(6px);
  animation: rdSlide .45s cubic-bezier(.22, 1, .36, 1) forwards;
  animation-delay: var(--d)
}

.rd-price em {
  font-style: normal;
  color: var(--muted);
  font-size: 11px
}

.rd-goal {
  display: flex;
  flex-direction: column;
  gap: 7px
}

.rd-goalhead {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px
}

.rd-goalhead span {
  color: var(--muted)
}

.rd-goalbar {
  position: relative;
  height: 10px;
  border-radius: 999px;
  background: var(--bg);
  border: 1px solid var(--line)
}

.rd-goalbar i {
  position: absolute;
  inset: 0 auto 0 0;
  width: 0;
  border-radius: 999px;
  background: linear-gradient(90deg, #c76a1e, #f5b042);
  animation: rdFill 1.1s cubic-bezier(.22, 1, .36, 1) .2s forwards
}

@keyframes rdFill {
  to {
    width: var(--pct)
  }
}

.rd-goalbar em {
  position: absolute;
  top: -4px;
  bottom: -4px;
  left: 0;
  width: 2px;
  background: var(--text);
  opacity: 0;
  animation: rdPace .7s cubic-bezier(.22, 1, .36, 1) 1s forwards
}

@keyframes rdPace {
  to {
    left: var(--pace);
    opacity: .85
  }
}

.rd-verdict {
  font-size: 12px;
  font-weight: 650;
  color: #b4530f;
  opacity: 0;
  animation: rdIn .5s ease-out 1.6s forwards
}

:root[data-theme="dark"] .rd-verdict {
  color: #f5b042
}

.rd-alert {
  border: 1px solid #f0b357;
  background: rgba(245, 176, 66, .09);
  border-radius: 10px;
  padding: 11px 12px
}

.rd-alert b {
  display: block;
  font-size: 12.5px;
  margin-bottom: 4px
}

.rd-alert p {
  margin: 0 0 8px;
  font-size: 11.5px;
  color: var(--muted)
}

.rd-acts {
  display: flex;
  gap: 6px;
  flex-wrap: wrap
}

.rd-acts span {
  font-size: 11px;
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 5px 9px;
  background: var(--panel)
}

.rd-acts .go {
  background: var(--brand);
  color: #fff;
  border-color: var(--brand)
}

.rd-faq {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px;
  border: 1px solid var(--line);
  border-radius: 9px;
  padding: 9px 11px;
  background: var(--panel);
  opacity: 0;
  animation: rdIn .45s ease-out forwards;
  animation-delay: var(--d)
}

.rd-faq em {
  color: var(--muted);
  font-style: normal
}

.rd-home {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 8px 0
}

.rd-appicon {
  width: 52px;
  height: 52px;
  border-radius: 14px;
  background: linear-gradient(135deg, #5b8cff, #43e0b0);
  box-shadow: 0 8px 20px rgba(47, 98, 214, .25);
  animation: rdPop .6s cubic-bezier(.34, 1.56, .64, 1) both
}

@keyframes rdPop {
  from {
    opacity: 0;
    transform: scale(.6)
  }
}

.rd-home span {
  font-size: 11.5px;
  color: var(--muted)
}

.rd-inbox {
  display: flex;
  align-items: center;
  gap: 11px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  padding: 10px 12px;
  opacity: 0;
  animation: rdSlide .5s cubic-bezier(.22, 1, .36, 1) .3s both
}

.rd-envelope {
  width: 30px;
  height: 22px;
  border-radius: 4px;
  background: var(--brand);
  flex: 0 0 auto;
  position: relative
}

.rd-envelope::after {
  content: "";
  position: absolute;
  inset: 0;
  border-top: 11px solid rgba(255, 255, 255, .35);
  border-left: 15px solid transparent;
  border-right: 15px solid transparent;
  box-sizing: border-box
}

.rd-inboxmeta {
  display: flex;
  flex-direction: column;
  min-width: 0
}

.rd-inboxmeta b {
  font-size: 13px;
  color: var(--text)
}

.rd-inboxmeta span {
  font-size: 11px;
  color: var(--muted)
}

.rd-watch {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 12.5px;
  color: var(--muted);
  border: 1px dashed var(--line);
  border-radius: 9px;
  padding: 8px 11px
}

.rd-pulse {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--brand);
  flex: 0 0 auto;
  animation: rdPulse 1.6s ease-out infinite
}

@keyframes rdPulse {
  0% {
    box-shadow: 0 0 0 0 rgba(91, 140, 255, .55)
  }

  70% {
    box-shadow: 0 0 0 8px rgba(91, 140, 255, 0)
  }

  100% {
    box-shadow: 0 0 0 0 rgba(91, 140, 255, 0)
  }
}

.rd-quote {
  font-size: 12px;
  color: var(--muted);
  font-style: italic;
  border-left: 3px solid var(--brand);
  padding: 4px 0 4px 10px;
  opacity: 0;
  animation: rdIn .5s ease-out forwards;
  animation-delay: var(--d)
}

.rd-theme {
  display: flex;
  align-items: center;
  gap: 12px
}

.rd-thpreview {
  width: 38px;
  height: 38px;
  border-radius: 9px;
  border: 1px solid var(--line);
  flex: 0 0 auto;
  background: #eef2f8;
  animation: rdTheme 1.8s ease-in-out .4s infinite alternate
}

@keyframes rdTheme {

  0%,
  40% {
    background: #eef2f8
  }

  60%,
  100% {
    background: #0b0d12
  }
}

.rd-thopts {
  display: flex;
  flex-direction: column;
  gap: 5px
}

.rd-thopts span {
  font-size: 11.5px;
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 5px 9px;
  opacity: 0;
  animation: rdIn .4s ease-out forwards;
  animation-delay: var(--d)
}

.rd-thopts span.on {
  border-color: var(--brand);
  color: var(--text);
  font-weight: 650
}

@media (prefers-reduced-motion:reduce) {

  .rd *,
  .rd {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important
  }

  .rd-bars span {
    height: var(--h) !important
  }

  .rd-goalbar i {
    width: var(--pct) !important
  }

  .rd-goalbar em {
    left: var(--pace) !important;
    opacity: .85 !important
  }

  .rd-typed {
    width: auto !important;
    border-right: 0
  }

  .rd-scan,
  .rd-cursor,
  .rd-think {
    display: none
  }

  .rd-lang {
    position: relative;
    opacity: 1 !important;
    margin-bottom: 8px
  }

  .rd-langs {
    height: auto
  }
}


/* Some releases carry seven demos. Stacked one per row that's a mineshaft; two-up on anything
   wider than a phone, one-up on a phone, where two would be unreadable. */
.rd-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 12px;
  margin-top: 14px
}

@media (max-width:600px) {
  .rd-grid {
    grid-template-columns: 1fr
  }
}
/* ── Position-based reveal ──────────────────────────────────────────────────────────────────
 * The demo elements used to carry a per-element inline `--d` (animation delay) and
 * `animation-fill-mode:both`. That's fine functionally but trips the "no inline styles" lint on
 * every row. The delay is really just "stagger by position", so it belongs here as nth-child
 * rules — the markup then needs no inline style at all. (Bar heights and doc-line widths stay
 * inline: those are genuine per-element DATA, not styling, and can't live in a stylesheet.) */
.rd-row,.rd-field,.rd-lang,.rd-price,.rd-drop,.rd-quote{animation-fill-mode:both}
.rd-rows>.rd-row:nth-child(1){--d:200ms}
.rd-rows>.rd-row:nth-child(2){--d:460ms}
.rd-rows>.rd-row:nth-child(3){--d:720ms}
.rd-rows>.rd-row:nth-child(4){--d:980ms}
.rd-rows>.rd-row:nth-child(5){--d:1240ms}
.rd-fields>.rd-field:nth-child(1){--d:120ms}
.rd-fields>.rd-field:nth-child(2){--d:460ms}
.rd-fields>.rd-field:nth-child(3){--d:800ms}
.rd-langs>.rd-lang:nth-child(1){--i:0}
.rd-langs>.rd-lang:nth-child(2){--i:1}
.rd-langs>.rd-lang:nth-child(3){--i:2}
.rd-langs>.rd-lang:nth-child(4){--i:3}
.rd-langs>.rd-lang:nth-child(5){--i:4}
.rd-langs>.rd-lang:nth-child(6){--i:5}
.rd-prices>.rd-price:nth-child(1){--d:0ms}
.rd-prices>.rd-price:nth-child(2){--d:140ms}
.rd-prices>.rd-price:nth-child(3){--d:280ms}
.rd-prices>.rd-price:nth-child(4){--d:420ms}
.rd-prices>.rd-price:nth-child(5){--d:560ms}
.rd-drop{--d:900ms}
.rd-quote{--d:800ms}

.rd-row em{opacity:.6}
