/* shared/ks4-lesson-batch-3.css — GENERATED by build_ks4.py --batch: every distinct <style> block found in the
   <helmet> of this batch's own lesson files, deduplicated (exact text match), first-seen order.
   Never hand-edit; re-run build_ks4.py --batch. */

/* from temperature-changes-shc.dc.html */
html, body { margin: 0; padding: 0; background: #FBF3E6; }
  a { color: var(--ks3-accent-text); }
  a:hover { color: var(--ks3-accent-hover); }
  @keyframes ks4-arrive { 0% { transform: translateY(6px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } }
  [data-arrive] { animation: ks4-arrive .34s ease-out both; }
  @media (prefers-reduced-motion: reduce) { [data-arrive] { animation: none !important; } * { transition: none !important; } }
  button:focus-visible, a:focus-visible, select:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid var(--ks3-accent-text); outline-offset: 2px; }

/* from microscopy.dc.html */
/* microscopy · the view in Resolve it fades in after the bet; the bench view zooms when the objective changes and slides when the field changes. */
  .mic-in { transform-box: view-box; transform-origin: 280px 170px; animation: mic-in .8s ease-out backwards; }
  @keyframes mic-in { from { opacity: 0; transform: scale(.7); } }
  .mic-zoom { transform-box: view-box; transform-origin: 220px 210px; animation: mic-zoom .8s cubic-bezier(.3, .7, .3, 1) backwards; }
  @keyframes mic-zoom { from { transform: scale(.4); opacity: .35; } }
  .mic-pan { animation: mic-pan .6s ease-out backwards; }
  @keyframes mic-pan { from { transform: translateX(60px); opacity: .2; } }
  @media (prefers-reduced-motion: reduce) { .mic-in, .mic-zoom, .mic-pan { animation: none !important; } }

/* from waves-detection-exploration.dc.html */
html, body { margin: 0; padding: 0; background: #FBF3E6; }
  a { color: var(--ks3-accent-text); }
  a:hover { color: var(--ks3-accent-hover); }
  @keyframes ks4-arrive { 0% { transform: translateY(6px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } }
  [data-arrive] { animation: ks4-arrive .34s ease-out both; }
  @media (prefers-reduced-motion: reduce) { [data-arrive] { animation: none !important; } * { transition: none !important; } }
  .wd-key { display: inline-block; width: 16px; height: 16px; border-radius: 50%; vertical-align: -2px; margin-right: 8px; box-sizing: border-box; }
  .wd-bar { display: inline-block; width: 26px; height: 10px; border-radius: 5px; vertical-align: 1px; margin-right: 8px; }
  button:focus-visible, a:focus-visible, select:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid var(--ks3-accent-text); outline-offset: 2px; }

/* from mixtures.dc.html */
/* mixtures · the separation desk. Each animated element is drawn in its END state; the keyframe supplies only the start. */
  .mix-fill { transform-box: fill-box; transform-origin: 50% 100%; animation: mix-fill 1.8s ease-out .4s backwards; }
  @keyframes mix-fill { from { transform: scaleY(0); } }
  .mix-drip { animation: mix-drip .9s ease-in 3; }
  @keyframes mix-drip { from { transform: translateY(0); opacity: 1; } to { transform: translateY(34px); opacity: 0; } }
  .mix-steam { animation: mix-steam 1.4s ease-out 3; }
  @keyframes mix-steam { from { transform: translateY(16px); opacity: 0; } 50% { opacity: 1; } }
  .mix-grow { transform-box: fill-box; transform-origin: center; animation: mix-grow .6s ease-out backwards; }
  @keyframes mix-grow { from { transform: scale(0); } }
  .mix-rise { animation: mix-rise 2.2s ease-out .3s backwards; }
  @keyframes mix-rise { from { transform: translateY(var(--d)); } }
  .mix-front { animation: mix-front 2.2s ease-out .3s backwards; }
  @keyframes mix-front { from { opacity: 0; } }
  @media (prefers-reduced-motion: reduce) { .mix-fill, .mix-drip, .mix-steam, .mix-grow, .mix-rise, .mix-front { animation: none !important; } }

/* from types-of-em-waves.dc.html */
html, body { margin: 0; padding: 0; background: #FBF3E6; }
  a { color: var(--ks3-accent-text); }
  a:hover { color: var(--ks3-accent-hover); }
  @keyframes ks4-arrive { 0% { transform: translateY(6px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } }
  [data-arrive] { animation: ks4-arrive .34s ease-out both; }
  @media (prefers-reduced-motion: reduce) { [data-arrive] { animation: none !important; } * { transition: none !important; } }
  button:focus-visible, a:focus-visible, select:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid var(--ks3-accent-text); outline-offset: 2px; }
  .emw-slot-num { flex: 0 0 34px; display: grid; place-items: center; border-radius: 10px; background: var(--ks3-band); border: 2px solid var(--ks3-ink); font-family: var(--ks3-font-mono); font-weight: 500; font-size: 16px; }
