/* Chế độ "Chơi bằng camera": nút bật, con trỏ bàn tay, gương nhỏ, căn vùng, bảng cho người lớn,
   hình minh hoạ động tác trong bài và bảng vỗ tay theo số. Tông màu theo app (xanh dương, vàng, nền cyan). */
#lesson{--cam-cursor:calc(clamp(64px,11vmin,140px) * var(--cam-cursor-scale,1));--cam-yellow:#ffd43b;--cam-green:#2fbf5b;--cam-orange:#ff9f2e;--cam-ink:#002a93}

/* ---------- Nút bật camera (cạnh nút toàn màn hình) ---------- */
.camera-control{position:absolute;z-index:60;top:max(2.5vh,env(safe-area-inset-top));right:calc(max(2.5vw,env(safe-area-inset-right)) + 54px);width:44px;height:44px;border:2px solid #fff;border-radius:14px;background:#f1ffffde;box-shadow:0 3px 0 #0096bc55;padding:8px;color:#075bc3}
.camera-control svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.camera-control::after{content:'';position:absolute;right:-4px;top:-4px;width:14px;height:14px;border-radius:50%;border:2px solid #fff;background:var(--cam-green);transform:scale(0);transition:transform .2s ease}
.camera-control[aria-pressed="true"]{background:#e6ffe9;color:#087a35}
.camera-control[aria-pressed="true"]::after{transform:scale(1)}
.toolbar{right:max(calc(2.5vw + 112px),env(safe-area-inset-right))}

/* ---------- Con trỏ bàn tay ---------- */
.cam-cursor{position:absolute;left:0;top:0;z-index:70;width:var(--cam-cursor);height:var(--cam-cursor);margin:calc(var(--cam-cursor) / -2) 0 0 calc(var(--cam-cursor) / -2);pointer-events:none;will-change:transform;transition:opacity .25s ease}
.cam-cursor.is-hidden{opacity:0}
.cam-cursor.is-lost{opacity:.35}
.cam-cursor-ring{position:absolute;left:-6%;top:-6%;width:112%;height:112%;transform:rotate(-90deg);overflow:visible}
.cam-cursor-ring .ring-bg{fill:rgba(0,42,147,.22);stroke:#fff;stroke-width:4}
.cam-cursor-ring .ring-fg{fill:none;stroke:var(--cam-yellow);stroke-width:8;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100}
.cam-cursor.is-hover .cam-cursor-ring .ring-bg{stroke:var(--cam-yellow)}
.cam-cursor.is-paused .cam-cursor-ring .ring-fg{stroke:#c9d2dc}
.cam-cursor.is-waiting .cam-cursor-ring .ring-bg{stroke-dasharray:6 7;stroke:#ffffffcc}
.cam-cursor-hand{position:absolute;left:13%;top:13%;width:74%;height:74%;filter:drop-shadow(0 .5vmin .6vmin rgba(0,30,90,.45))}
.cam-cursor .hand-outline{fill:#fff;stroke:#fff;stroke-width:7;stroke-linejoin:round}
.cam-cursor .hand-fill{fill:#ffcf5a}

/* Nút đang được giữ tay và hiệu ứng khi được chọn */
#lesson [data-cam-hover]{outline:clamp(4px,.9vh,9px) solid var(--cam-yellow)!important;outline-offset:clamp(2px,.5vh,6px)}
#lesson .cam-pressed{animation:cam-press .5s ease-out}
@keyframes cam-press{0%{box-shadow:0 0 0 0 rgba(255,212,59,.95)}100%{box-shadow:0 0 0 clamp(14px,3vh,32px) rgba(255,212,59,0)}}

/* ---------- Gương nhỏ ---------- */
.cam-pip{position:absolute;z-index:62;right:max(1.5vw,env(safe-area-inset-right));bottom:max(2.5vh,env(safe-area-inset-bottom));width:clamp(140px,15vw,280px);aspect-ratio:var(--ar,16 / 9);margin:0;overflow:hidden;border-radius:clamp(10px,2vmin,22px);border:clamp(3px,.5vmin,6px) solid var(--cam-orange);background:#001a5c;box-shadow:0 1vmin 3vmin rgba(0,30,90,.35);pointer-events:none;transition:border-color .2s ease,width .3s ease}
.cam-pip[data-track="ok"]{border-color:var(--cam-green)}
.cam-pip.is-focus{width:clamp(200px,26vw,460px)}
.cam-pip video,.cam-pip canvas{position:absolute;inset:0;display:block;width:100%;height:100%}
.cam-pip video{transform:scaleX(-1);object-fit:fill}
#lesson[data-cam="calib"] .cam-pip{z-index:67;top:50%;left:4vw;right:auto;bottom:auto;transform:translateY(-50%);width:min(56vw,calc(80vh * var(--ar,1.7778)));border-width:.8vmin}

/* ---------- Gợi ý khi mất dấu ---------- */
.cam-hint{position:absolute;z-index:64;top:14vh;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:.5em;max-width:80vw;padding:.4em 1.2em;border-radius:999px;background:var(--cam-orange);color:#2b1700;font-size:clamp(18px,4vh,40px);font-weight:800;text-align:center;box-shadow:0 1vmin 3vmin rgba(0,30,90,.3);pointer-events:none}
.cam-hint-icon{font-size:1.3em;line-height:1}

/* ---------- Căn vùng với tay ---------- */
.cam-calib{position:absolute;inset:0;z-index:66;display:flex;align-items:center;justify-content:flex-end;padding:0 4vw;background:rgba(0,36,128,.96);color:#fff}
.cam-calib-card{width:min(32vw,480px);min-width:260px;text-align:center}
.cam-calib-step{display:inline-block;margin:0 0 .6em;padding:.15em .9em;border-radius:999px;background:rgba(255,255,255,.16);font-size:clamp(15px,2.8vh,28px);font-weight:700}
.cam-calib-title{margin:0 0 .3em;font-size:clamp(28px,7vh,64px);line-height:1.1}
.cam-calib-hint{min-height:3.2em;margin:.6em 0 1em;font-size:clamp(18px,3.6vh,36px);line-height:1.3}
.cam-calib .cam-pose{width:min(100%,36vh);margin:0 auto;color:#fff}
.cam-calib .cam-pose[data-ok="1"]{color:#7dff9e}
.cam-calib-skip{border:0;background:none;color:#cfe0ff;text-decoration:underline;font-size:clamp(14px,2.4vh,22px);padding:6px 10px}

/* Hình người que và hình minh hoạ lượt tự làm (.turn-chip) nằm trong styles.css, dùng chung với bài học. */
.turn-chip[data-place="clap"]{left:56%;right:auto;top:27%}

/* Vỗ tay theo số (Toán): mỗi tiếng vỗ một chấm tròn, như "mỗi đồ vật một chấm tròn" */
.clap-board{position:absolute;left:3%;top:19%;width:50%;height:61%;display:flex;align-items:center;justify-content:center;border:clamp(3px,.7vh,7px) solid #edffff;border-radius:22%}
.clap-dots{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:5%;width:88%;height:60%}
.clap-dot{position:relative;width:13%;aspect-ratio:1;border:3px solid #0049df;border-radius:50%;background:radial-gradient(circle at 30% 25%,#9af1ff 0 11%,#0777f8 15% 65%,#0554df 100%);animation:cam-pop .35s ease-out}
.clap-dot .count-tag{right:-30%;top:-30%}
.clap-board.is-model .clap-dot{border-style:dashed}
@keyframes cam-pop{0%{transform:scale(.2);opacity:0}70%{transform:scale(1.15)}100%{transform:scale(1);opacity:1}}

/* ---------- Camera settings, adult area ---------- */
.cam-panel{position:absolute;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:3vh 3vw;background:rgba(0,36,110,.45);backdrop-filter:blur(4px)}
.cam-sheet{position:relative;width:min(760px,96vw);max-height:94vh;overflow:auto;overscroll-behavior:contain;padding:24px 28px;border:1px solid #dce6ef;border-radius:24px;background:#f8fbfe;color:#203956;box-shadow:0 12px 40px rgba(0,30,90,.25);font-size:clamp(15px,2.1vh,18px);line-height:1.4;text-align:left;user-select:text;-webkit-user-select:text}
.cam-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.cam-head h2{margin:0;font-size:clamp(24px,3.5vh,32px);line-height:1.15}
.cam-head h2:focus{outline:none}
.cam-close{width:44px;height:44px;flex:none;border:1px solid #dce6ef;border-radius:50%;background:#fff;color:#45617a;font-size:18px}
.cam-status{display:flex;align-items:center;gap:.5em;margin:10px 0 18px;color:#647b8f;font-size:.9em;font-weight:700}
.cam-dot{width:12px;height:12px;border-radius:50%;background:#9aa7b8}
.cam-status[data-state="play"] .cam-dot,.cam-status[data-state="calib"] .cam-dot{background:var(--cam-green);box-shadow:0 0 0 4px #2fbf5b33}
.cam-status[data-state="starting"] .cam-dot{background:var(--cam-orange)}
.cam-lead{margin:12px 0;text-align:center;color:#657d90;font-size:.85em}
.cam-visual-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;list-style:none;padding:0;margin:0 0 20px}
.cam-visual-steps li{display:flex;flex-direction:column;align-items:center;text-align:center;padding:16px 8px;border:1px solid #dce6ef;border-radius:18px;background:#fff;gap:5px}
.cam-visual-steps li>strong{font-size:1em}.cam-visual-steps li>span:not(.cam-step-picture){font-size:.8em;color:#697f92}
.cam-step-picture{display:block;width:90px;max-width:85%;height:76px;margin-bottom:6px;color:#3489b6}
.cam-step-picture svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.cam-visual-steps li:nth-child(2) .cam-step-picture{color:#bc8a37}.cam-visual-steps li:nth-child(3) .cam-step-picture{color:#3f957d}
.cam-privacy{margin:14px 0;padding:10px 14px;border:0;border-radius:12px;background:#eaf5ef;color:#3d765e;text-align:center;font-size:.8em}
.cam-privacy::before{content:'🔒 '}
.cam-error{margin:8px 0;padding:10px 14px;border:1px solid #ff9b9b;border-radius:14px;background:#ffecec;color:#8a1010;font-weight:600}
.cam-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:12px 0}
.cam-btn{padding:11px 20px;min-height:44px;border:1px solid #c9dce8;border-radius:12px;background:#fff;color:#315e7e;font-size:inherit;font-weight:700}
.cam-btn.primary{border-color:#1769a8;background:#1769a8;color:#fff;box-shadow:none}
.cam-btn.danger{border-color:#ffb3b3;color:#a01616}
.cam-btn:disabled{opacity:.6;cursor:progress}
.cam-quick{display:grid;gap:14px;margin:12px 0;padding:12px 0;background:#fff}
.cam-row{display:grid;gap:4px}
.cam-row-top{display:flex;justify-content:space-between;gap:10px;font-weight:700}
.cam-row select,.cam-quick select{padding:.35em .5em;border:2px solid #9fdcec;border-radius:10px;background:#fff;color:var(--cam-ink);font:inherit}
.cam-row input[type="range"]{width:100%;accent-color:#0788ff}
.cam-val{font-variant-numeric:tabular-nums;white-space:nowrap}
.cam-check{display:flex;align-items:center;gap:.4em}
.cam-check input{width:20px;height:20px;accent-color:#0788ff}
.cam-help{margin:2px 0 0;color:#2b4f9e;font-size:.88em}
.cam-advanced{margin:16px 0 10px;padding:14px 18px;border:1px solid #dce6ef;border-radius:16px;background:#fff}
.cam-advanced summary{cursor:pointer;font-weight:800}
.cam-detail-settings{margin-top:8px;padding-top:14px;border-top:1px solid #e1ebf2;font-size:.9em}.cam-detail-settings>summary{color:#59758b}
.cam-group{margin-top:14px;padding-top:10px;border-top:1px solid #d5eef5}
.cam-group h3{margin:0 0 6px;font-size:1.02em;color:#0758bd}
.cam-group .cam-row{margin:10px 0}
.cam-restart{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:6px 0;padding:8px 10px;border:1px solid #ffc98a;border-radius:10px;background:#fff4e3}
.cam-json{width:100%;margin-top:8px;padding:8px;border:2px solid #c9f1f8;border-radius:10px;background:#f4fbff;color:#123;font:12px/1.4 Consolas,monospace;resize:vertical}
.cam-tech{margin:6px 0;color:#4a6aa8;font-size:.85em}
.cam-done{display:block;margin:12px auto 0}
.cam-panel :focus-visible{outline:3px solid #2578bd;outline-offset:3px}
.cam-debug{position:absolute;z-index:90;left:8px;top:8px;margin:0;padding:8px 10px;border-radius:6px;background:rgba(0,0,0,.65);color:#9f9;font:12px/1.45 Consolas,monospace;pointer-events:none;white-space:pre}

@media(max-aspect-ratio:4/3){
  .cam-calib{align-items:flex-end;justify-content:center;padding:0 4vw 6vh}
  .cam-calib-card{width:min(92vw,520px)}
  .cam-calib .cam-pose{width:min(40%,16vh)}
  #lesson[data-cam="calib"] .cam-pip{top:3vh;left:50%;transform:translateX(-50%);width:min(88vw,calc(40vh * var(--ar,1.7778)))}
}
@media(max-width:500px){.cam-sheet{padding:18px 16px}.cam-visual-steps{gap:7px}.cam-visual-steps li{padding:12px 5px}.cam-step-picture{height:58px}.cam-visual-steps li>strong{font-size:.9em}.cam-visual-steps li>span:not(.cam-step-picture){font-size:.75em}.cam-privacy{font-size:.76em}.cam-advanced{padding:12px}}
@media(prefers-reduced-motion:reduce){
  .cam-cursor,.cam-pip{transition:none}
  #lesson .cam-pressed,.clap-dot{animation:none}
}
