/* Core variables */
:root {
  color-scheme: light;
  --page-bg: #f4f8fb;
  --card-shadow: 0 28px 60px rgba(20, 49, 70, 0.16);
  --shell-border: rgba(85, 122, 148, 0.16);
  --text-strong: #153248;
  --text-muted: #5f7484;
  --accent-strong: #0d6d8d;
  --scene-border: rgba(255, 255, 255, 0.48);
  --scene-shadow: 0 22px 54px rgba(22, 51, 70, 0.18);
  --scene-scale: 1;
  --scene-pan-x: 0px;
  --scene-pan-y: 0px;
  --scene-overscan-scale: 1;
  --engaged-zoom-scale: 1.014;
  --pulse-extra-scale: 0.0038;
  --pulse-duration: 210ms;
  --scene-transform-duration: 420ms;
  --lens-x: 63%;
  --lens-y: 56%;
  --lens-radius: 148px;
  --focus-clip-radius: 160px;
  --near-clear-outer: calc(var(--lens-radius) * 42 / 124);
  --intermediate-clear-inner: calc(var(--lens-radius) * 42 / 124);
  --intermediate-clear-outer: calc(var(--lens-radius) * 66 / 124);
  --distant-clear-inner: calc(var(--lens-radius) * 66 / 124);
  --distant-clear-outer: calc(var(--lens-radius) * 92 / 124);
  --clear-band-feather-inner: 5px;
  --clear-band-feather-outer: 12px;
  --inactive-inner-clarity: 0;
  --inactive-outer-clarity: 0.006;
  --carrier-band-clarity: 0;
  --inactive-ring-opacity-distant: 0.065;
  --inactive-ring-opacity-intermediate: 0.085;
  --inactive-ring-opacity-near: 0.12;
  --parallax-x: 0px;
  --parallax-y: 0px;
  --base-blur: 0.75px;
  --focus-contrast-boost: 0.24;
  --focus-brightness-boost: 0.11;
  --focus-saturation-boost: 0.15;
  --focus-presence: 0.5;
  --distance-weight: 0.32;
  --intermediate-weight: 0.54;
  --near-weight: 0.42;
  --distant-weight: 0.32;
  --ring-stroke-width: 2.68px;
  --active-ring-stroke-width: 3.58px;
  --active-ring-glow-strength: 1.8;
  --non-active-ring-opacity: 0.34;
}

/* Base layout */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  background:
    radial-gradient(circle at top left, rgba(152, 200, 218, 0.24), transparent 42%),
    linear-gradient(180deg, #f8fafc 0%, var(--page-bg) 100%);
  color: var(--text-strong);
  font-family: "Aptos", "Segoe UI", "Noto Sans TC", sans-serif;
}

body {
  min-height: 100%;
}

p {
  margin: 0;
  max-width: 100%;
  overflow-wrap: break-word;
}

.module-shell {
  width: 100%;
  max-width: 1280px;
  margin: 0 auto;
  padding: clamp(16px, 2.8vw, 30px);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.82), rgba(247, 250, 252, 0.92));
}

.module-header {
  display: grid;
  gap: 16px;
  margin-bottom: 18px;
}

.module-header > *,
.demo-card__topline > * {
  min-width: 0;
}

.eyebrow,
.section-label {
  margin: 0;
  color: var(--accent-strong);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.module-header h1,
.demo-card h2 {
  margin: 0;
  line-height: 1.08;
  letter-spacing: 0.01em;
  font-family: "Palatino Linotype", "Noto Serif TC", serif;
}

.module-header h1 {
  font-size: clamp(1.95rem, 3.3vw, 3.18rem);
  max-width: 30ch;
}

.intro,
.section-note,
.assist-copy,
.header-note p {
  color: var(--text-muted);
  line-height: 1.65;
  width: auto;
  max-width: 100%;
}

.intro {
  max-width: 62ch;
}

.section-note {
  max-width: 44ch;
}

.assist-copy {
  max-width: 68ch;
}

.assist-copy-tishi {
  margin: 14px 0 6px;
  color: var(--text-muted);
  line-height: 1.6;
  width: auto;
  max-width: 100%;
}

.header-note {
  padding: 16px 18px;
  border-radius: 24px;
  border: 1px solid rgba(97, 136, 158, 0.14);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.84), rgba(239, 247, 250, 0.72));
  box-shadow: 0 14px 26px rgba(41, 79, 100, 0.08);
}

.header-note__title {
  margin: 0 0 6px;
  color: var(--accent-strong);
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.demo-card {
  overflow: hidden;
  padding: clamp(18px, 3vw, 28px);
  border-radius: 30px;
  border: 1px solid var(--shell-border);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(247, 250, 252, 0.9));
  box-shadow: var(--card-shadow);
}

.demo-card__topline {
  display: grid;
  gap: 12px;
  margin-bottom: 18px;
}

.demo-card h2 {
  font-size: clamp(1.35rem, 2.25vw, 2rem);
}

/* Photo scene shell */
.scene-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  min-height: clamp(380px, 49vw, 470px);
  max-height: 900px;
  overflow: hidden;
  border-radius: 30px;
  border: 1px solid var(--scene-border);
  background: linear-gradient(180deg, #ebf2f7 0%, #e2ebf2 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.76), var(--scene-shadow);
  isolation: isolate;
  --scene-bg-position: 50% 50%;

  /* adjust anchor positions when replacing the background image */
  --anchor-distant-x: 57%;
  --anchor-distant-y: 18%;
  --anchor-distant-w: 29%;
  --anchor-distant-h: 15%;
  --anchor-intermediate-x: 75%;
  --anchor-intermediate-y: 53%;
  --anchor-intermediate-w: 23%;
  --anchor-intermediate-h: 29%;
  --anchor-near-x: 37.5%;
  --anchor-near-y: 71.5%;
  --anchor-near-w: 14%;
  --anchor-near-h: 25%;
}

.scene-frame.is-engaged {
  --scene-scale: var(--engaged-zoom-scale);
}

.scene-frame.is-pulsing {
  --scene-scale: calc(var(--engaged-zoom-scale) + var(--pulse-extra-scale));
}

.scene-frame::before,
.scene-frame::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 4;
}

.scene-frame::before {
  background:
    radial-gradient(circle at 18% 20%, rgba(255, 255, 255, 0.24), transparent 32%),
    radial-gradient(circle at 82% 76%, rgba(184, 227, 236, 0.16), transparent 28%);
  mix-blend-mode: screen;
}

.scene-frame::after {
  border-radius: inherit;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24);
}

.scene-copy {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.scene-copy--focus {
  z-index: 2;
  clip-path: circle(var(--focus-clip-radius) at var(--lens-x) var(--lens-y));
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}

.scene-frame[data-active-zone="near"] .scene-copy--focus {
  -webkit-mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--near-clear-outer),
      rgba(0, 0, 0, 0.22) calc(var(--near-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--near-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--distant-clear-outer) - var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
  mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--near-clear-outer),
      rgba(0, 0, 0, 0.22) calc(var(--near-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--near-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--distant-clear-outer) - var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
}

.scene-frame[data-active-zone="intermediate"] .scene-copy--focus {
  -webkit-mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--intermediate-clear-outer),
      rgba(0, 0, 0, 0.26) calc(var(--intermediate-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--intermediate-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--distant-clear-outer) - var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
  mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--intermediate-clear-outer),
      rgba(0, 0, 0, 0.26) calc(var(--intermediate-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--intermediate-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--inactive-outer-clarity)) calc(var(--distant-clear-outer) - var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
}

.scene-frame[data-active-zone="distant"] .scene-copy--focus {
  -webkit-mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--distant-clear-outer),
      rgba(0, 0, 0, 0.26) calc(var(--distant-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
  mask-image:
    radial-gradient(
      circle at var(--lens-x) var(--lens-y),
      rgba(0, 0, 0, 1) 0 var(--distant-clear-outer),
      rgba(0, 0, 0, 0.26) calc(var(--distant-clear-outer) + var(--clear-band-feather-inner)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--distant-clear-outer) + var(--clear-band-feather-outer)),
      rgba(0, 0, 0, var(--carrier-band-clarity)) calc(var(--lens-radius) - var(--clear-band-feather-outer)),
      transparent calc(var(--lens-radius) + var(--clear-band-feather-outer))
    );
}

.scene-image,
.scene-enhancement {
  position: absolute;
  inset: -3%;
  background-image: url("./japan_me_20260318_1.jpg");
  background-repeat: no-repeat;
  background-size: cover;
  background-position: var(--scene-bg-position);
  transform-origin: center center;
  will-change: transform, filter, opacity;
}

.scene-image,
.scene-enhancement,
.scene-wash {
  transition:
    transform var(--scene-transform-duration) cubic-bezier(0.2, 0.72, 0.22, 1),
    filter 260ms ease,
    opacity 240ms ease;
}

.scene-image--base {
  transform:
    translate3d(
      calc(var(--scene-pan-x) + (var(--parallax-x) * -0.07)),
      calc(var(--scene-pan-y) + (var(--parallax-y) * -0.05)),
      0
    )
    scale(calc(var(--scene-scale) * var(--scene-overscan-scale)));
  filter: blur(var(--base-blur)) contrast(0.986) brightness(0.986) saturate(0.975);
}

.scene-image--focus {
  transform:
    translate3d(
      calc(var(--scene-pan-x) + (var(--parallax-x) * 0.05)),
      calc(var(--scene-pan-y) + (var(--parallax-y) * 0.035)),
      0
    )
    scale(calc((var(--scene-scale) + 0.0015) * var(--scene-overscan-scale)));
  filter:
    contrast(calc(1 + var(--focus-contrast-boost)))
    brightness(calc(1 + var(--focus-brightness-boost)))
    saturate(calc(1 + var(--focus-saturation-boost)));
}

.scene-wash {
  position: absolute;
  inset: 0;
  pointer-events: none;
  transform:
    translate3d(var(--scene-pan-x), var(--scene-pan-y), 0)
    scale(var(--scene-overscan-scale));
  transform-origin: center center;
}

.scene-wash--base {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 26%, rgba(10, 27, 38, 0.05) 100%),
    radial-gradient(circle at 50% 88%, rgba(255, 255, 255, 0.07), transparent 46%);
  opacity: 0.78;
}

.scene-wash--focus {
  background: none;
  opacity: 0;
}

.scene-enhancement {
  clip-path: inset(50%);
  opacity: 0;
}

.scene-enhancement[data-region-zone="distant"] {
  opacity: calc(0.006 + (var(--distance-weight) * 0.14));
  transform:
    translate3d(
      calc(var(--scene-pan-x) + (var(--parallax-x) * 0.06)),
      calc(var(--scene-pan-y) + (var(--parallax-y) * 0.04)),
      0
    )
    scale(calc((var(--scene-scale) + 0.0015) * var(--scene-overscan-scale)));
  filter:
    contrast(calc(1.012 + (var(--distance-weight) * 0.22)))
    brightness(calc(1.001 + (var(--distance-weight) * 0.07)))
    saturate(calc(1.004 + (var(--distance-weight) * 0.07)));
}

.scene-enhancement[data-region-zone="intermediate"] {
  opacity: calc(0.008 + (var(--intermediate-weight) * 0.15));
  transform:
    translate3d(
      calc(var(--scene-pan-x) + (var(--parallax-x) * 0.065)),
      calc(var(--scene-pan-y) + (var(--parallax-y) * 0.045)),
      0
    )
    scale(calc((var(--scene-scale) + 0.0018) * var(--scene-overscan-scale)));
  filter:
    contrast(calc(1.014 + (var(--intermediate-weight) * 0.22)))
    brightness(calc(1.002 + (var(--intermediate-weight) * 0.08)))
    saturate(calc(1.005 + (var(--intermediate-weight) * 0.08)));
}

.scene-enhancement[data-region-zone="near"] {
  opacity: calc(0.009 + (var(--near-weight) * 0.16));
  transform:
    translate3d(
      calc(var(--scene-pan-x) + (var(--parallax-x) * 0.07)),
      calc(var(--scene-pan-y) + (var(--parallax-y) * 0.05)),
      0
    )
    scale(calc((var(--scene-scale) + 0.0022) * var(--scene-overscan-scale)));
  filter:
    contrast(calc(1.016 + (var(--near-weight) * 0.24)))
    brightness(calc(1.002 + (var(--near-weight) * 0.08)))
    saturate(calc(1.006 + (var(--near-weight) * 0.08)));
}

/* Lens */
.lens-handle {
  position: absolute;
  left: calc(var(--lens-x) - var(--lens-radius));
  top: calc(var(--lens-y) - var(--lens-radius));
  width: calc(var(--lens-radius) * 2);
  height: calc(var(--lens-radius) * 2);
  border: 0;
  padding: 0;
  border-radius: 50%;
  background:
    radial-gradient(circle at 28% 24%, rgba(255, 255, 255, 0.34), transparent 22%),
    radial-gradient(circle at 66% 64%, rgba(174, 242, 252, 0.08), transparent 42%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.015));
  backdrop-filter: blur(0.14px) saturate(1.02);
  -webkit-backdrop-filter: blur(0.14px) saturate(1.02);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    inset 0 -18px 28px rgba(166, 220, 234, 0.03);
  cursor: grab;
  z-index: 5;
  touch-action: none;
  transform: translateZ(0);
  transition: filter 240ms ease, box-shadow 240ms ease, transform 240ms ease;
}

.lens-handle:active {
  cursor: grabbing;
}

.lens-handle:focus-visible {
  outline: 2px solid rgba(38, 133, 163, 0.72);
  outline-offset: 6px;
}

.lens-handle::before {
  content: "";
  position: absolute;
  inset: -13px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(126, 219, 234, calc(0.08 + (var(--focus-presence) * 0.17))), transparent 68%);
  opacity: calc(0.14 + (var(--focus-presence) * 0.18));
  pointer-events: none;
}

.lens-handle::after {
  content: "";
  position: absolute;
  inset: 10px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.12);
  pointer-events: none;
}

.lens-diagram {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.lens-diagram circle:not(.lens-diagram__carrier-fill) {
  fill: none;
  vector-effect: non-scaling-stroke;
  transition: stroke 240ms ease, opacity 240ms ease, filter 240ms ease, stroke-width 240ms ease;
}

.lens-diagram__carrier-fill {
  fill: rgba(255, 255, 255, 0.012);
}

.lens-diagram__carrier {
  stroke: rgba(255, 255, 255, 0.28);
  stroke-width: 1.4;
}

.lens-diagram__distant,
.lens-diagram__intermediate,
.lens-diagram__near {
  stroke-width: var(--ring-stroke-width);
}

.lens-diagram__distant {
  stroke: rgba(129, 163, 175, 0.24);
  opacity: calc(var(--non-active-ring-opacity) * (0.2 + (var(--distant-weight) * 0.1)));
}

.lens-diagram__intermediate {
  stroke: rgba(122, 158, 172, 0.25);
  opacity: calc(var(--non-active-ring-opacity) * (0.22 + (var(--intermediate-weight) * 0.1)));
}

.lens-diagram__near {
  stroke: rgba(118, 156, 170, 0.27);
  opacity: calc(var(--non-active-ring-opacity) * (0.24 + (var(--near-weight) * 0.1)));
}

.lens-handle[data-active-zone="distant"] .lens-diagram__intermediate,
.lens-handle[data-active-zone="distant"] .lens-diagram__near {
  stroke: rgba(119, 156, 170, 0.44);
  opacity: var(--inactive-ring-opacity-distant);
  filter: none;
}

.lens-handle[data-active-zone="intermediate"] .lens-diagram__near {
  stroke: rgba(119, 156, 170, 0.46);
  opacity: var(--inactive-ring-opacity-intermediate);
  filter: none;
}

.lens-handle[data-active-zone="intermediate"] .lens-diagram__distant {
  stroke: rgba(123, 160, 173, 0.42);
  opacity: calc(var(--inactive-ring-opacity-intermediate) * 1.25);
  filter: none;
}

.lens-handle[data-active-zone="near"] .lens-diagram__intermediate,
.lens-handle[data-active-zone="near"] .lens-diagram__distant {
  stroke: rgba(123, 160, 173, 0.4);
  opacity: var(--inactive-ring-opacity-near);
  filter: none;
}

.lens-handle[data-active-zone="distant"] .lens-diagram__distant {
  stroke: rgba(214, 248, 252, 1);
  stroke-width: var(--active-ring-stroke-width);
  opacity: 1;
  filter:
    drop-shadow(0 0 4px rgba(246, 253, 253, calc(0.5 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 20px rgba(172, 234, 243, calc(0.4 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 42px rgba(132, 213, 227, calc(0.26 * var(--active-ring-glow-strength))));
}

.lens-handle[data-active-zone="intermediate"] .lens-diagram__intermediate {
  stroke: rgba(216, 248, 252, 1);
  stroke-width: var(--active-ring-stroke-width);
  opacity: 1;
  filter:
    drop-shadow(0 0 4px rgba(247, 253, 253, calc(0.52 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 20px rgba(174, 235, 244, calc(0.41 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 42px rgba(132, 213, 227, calc(0.27 * var(--active-ring-glow-strength))));
}

.lens-handle[data-active-zone="near"] .lens-diagram__near {
  stroke: rgba(220, 249, 252, 1);
  stroke-width: var(--active-ring-stroke-width);
  opacity: 1;
  filter:
    drop-shadow(0 0 4px rgba(248, 253, 253, calc(0.54 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 20px rgba(176, 236, 244, calc(0.42 * var(--active-ring-glow-strength))))
    drop-shadow(0 0 42px rgba(132, 213, 227, calc(0.28 * var(--active-ring-glow-strength))));
}

.lens-zone-label {
  position: absolute;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 4px 8px;
  border-radius: 999px;
  border: 1px solid transparent;
  background: transparent;
  color: transparent;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: none;
  pointer-events: none;
  transition: color 240ms ease, border-color 240ms ease, background 240ms ease, box-shadow 240ms ease, opacity 240ms ease;
}

.lens-zone-label--distant {
  left: 50%;
  top: 14%;
  transform: translateX(-50%);
  opacity: 0;
}

.lens-zone-label--intermediate {
  left: 50%;
  top: 30%;
  transform: translateX(-50%);
  opacity: 0;
}

.lens-zone-label--near {
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  opacity: 0;
}

.lens-handle[data-active-zone="distant"] .lens-zone-label--distant,
.lens-handle[data-active-zone="intermediate"] .lens-zone-label--intermediate,
.lens-handle[data-active-zone="near"] .lens-zone-label--near {
  opacity: 0.96;
  background: rgba(255, 255, 255, 0.62);
  border-color: rgba(94, 165, 190, 0.28);
  color: rgba(16, 77, 97, 0.95);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 10px 22px rgba(32, 97, 117, 0.14);
}

.scene-frame.is-dragging .lens-handle {
  filter: drop-shadow(0 24px 44px rgba(19, 57, 76, 0.2));
}

.assist-copy {
  margin-top: 16px;
}

.assist-copy--centered {
  max-width: min(100%, 68ch);
  margin-inline: auto;
  text-align: center;
}

/* No-JS fallback */
.fallback-panel {
  margin-top: 18px;
  padding: 20px;
  border-radius: 24px;
  border: 1px solid rgba(112, 148, 169, 0.16);
  background: rgba(255, 255, 255, 0.82);
}

.fallback-panel h2 {
  margin: 0 0 10px;
  font-size: 1.1rem;
}

.fallback-panel p {
  margin: 0 0 14px;
  color: var(--text-muted);
  line-height: 1.6;
}

.fallback-panel__image {
  display: block;
  width: 100%;
  height: auto;
  margin-bottom: 16px;
  border-radius: 20px;
  box-shadow: 0 20px 38px rgba(24, 54, 74, 0.12);
}

.fallback-grid {
  display: grid;
  gap: 12px;
}

.fallback-grid article {
  padding: 16px;
  border-radius: 20px;
  border: 1px solid rgba(121, 157, 177, 0.14);
  background: linear-gradient(180deg, rgba(230, 244, 248, 0.75), rgba(255, 255, 255, 0.92));
}

.fallback-grid span {
  display: block;
  margin-bottom: 6px;
  color: var(--accent-strong);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.fallback-grid strong {
  font-size: 1rem;
}

@media (min-width: 840px) {
  .module-header,
  .demo-card__topline {
    grid-template-columns: 1.18fr 0.82fr;
  }

  .fallback-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* Mobile adjustments */
@media (max-width: 839px) {
  .module-shell {
    padding: 12px;
  }

  .module-header {
    gap: 12px;
    margin-bottom: 14px;
  }

  .module-header h1 {
    max-width: none;
    font-size: clamp(1.72rem, 7.2vw, 2.34rem);
    line-height: 1.12;
  }

  .intro,
  .section-note,
  .assist-copy,
  .assist-copy--centered,
  .assist-copy-tishi,
  .fallback-panel p,
  .header-note p {
    max-width: 100%;
    margin-left: 0;
  }

  .demo-card {
    padding: 14px;
    border-radius: 24px;
  }

  .demo-card__topline {
    gap: 8px;
    margin-bottom: 14px;
  }

  .demo-card h2 {
    font-size: clamp(1.2rem, 5.5vw, 1.56rem);
    line-height: 1.18;
  }

  .header-note,
  .fallback-panel {
    padding: 16px;
    border-radius: 20px;
  }

  .scene-frame {
    aspect-ratio: 4 / 5;
    min-height: clamp(390px, 100vw, 500px);
    border-radius: 24px;
    --scene-bg-position: 53% 50%;

    /* adjust anchor positions when replacing the background image */
    --anchor-distant-x: 55%;
    --anchor-distant-y: 17%;
    --anchor-distant-w: 36%;
    --anchor-distant-h: 13%;
    --anchor-intermediate-x: 74%;
    --anchor-intermediate-y: 54%;
    --anchor-intermediate-w: 26%;
    --anchor-intermediate-h: 31%;
    --anchor-near-x: 29%;
    --anchor-near-y: 74%;
    --anchor-near-w: 18%;
    --anchor-near-h: 26%;
  }

  .assist-copy-tishi {
    margin: 12px 0 4px;
    text-align: center;
  }

  .assist-copy {
    margin-top: 10px;
    line-height: 1.7;
  }

  .lens-zone-label {
    padding: 3px 6px;
    font-size: 0.52rem;
    letter-spacing: 0.08em;
  }
}

/* Motion accessibility */
@media (prefers-reduced-motion: reduce) {
  .scene-frame.is-engaged,
  .scene-frame.is-pulsing {
    --scene-scale: 1;
  }

  .scene-image,
  .scene-enhancement,
  .scene-wash,
  .lens-handle,
  .lens-diagram circle,
  .lens-zone-label {
    transition: none;
  }
}
