/* ═══ Checkup — body-part symptom triage (infirmary) ═══
   Education only. Never a medical diagnosis.
   Bilingual EN/ZH via data-en / data-zh. Self-contained; cache-pinned ?v=1. */

.checkup-wrap{max-width:820px;margin:0 auto}
.checkup-badge{display:inline-block;background:var(--accent-bg);border:1px solid var(--border2);color:var(--accent);border-radius:99px;padding:.35rem 1.1rem;font-size:.8rem;font-weight:700;letter-spacing:.02em;margin-bottom:.8rem}
.checkup-intro{font-size:.95rem;color:var(--text2);max-width:640px;margin:0 auto 1.5rem;line-height:1.6}

/* ── Step pills ── */
.checkup-steps{display:flex;gap:.4rem;justify-content:center;flex-wrap:wrap;margin-bottom:1.5rem}
.checkup-step{display:flex;align-items:center;gap:.45rem;padding:.4rem .9rem;border-radius:99px;border:1px solid var(--border);background:var(--surface);color:var(--text3);font-size:.8rem;font-weight:600;transition:all .2s}
.checkup-step .cdot{width:20px;height:20px;border-radius:50%;background:var(--border);color:var(--text3);display:inline-flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;flex:none}
.checkup-step.on{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}
.checkup-step.on .cdot{background:var(--accent);color:#fff}
.checkup-step.done{color:var(--green);border-color:var(--green)}
.checkup-step.done .cdot{background:var(--green);color:#fff}

/* ── Panel card ── */
.checkup-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.4rem;box-shadow:var(--shadow-sm)}
.checkup-panel h3{font-size:1.05rem;margin-bottom:.4rem;display:flex;align-items:center;gap:.5rem}
.checkup-panel .ch-ctx{font-size:.8rem;color:var(--text3);margin-bottom:1.1rem}
.checkup-stepbody{display:none}
.checkup-stepbody.active{display:block;animation:checkupFade .25s ease}

@keyframes checkupFade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* ── Step 1: body map ── */
.checkup-bodymap{display:flex;flex-direction:column;align-items:center;gap:1.1rem}
.checkup-map{position:relative;width:250px;max-width:78vw;
  --ck-body-hi:color-mix(in srgb,var(--surface) 92%,#fff);--ck-body-lo:color-mix(in srgb,var(--surface2) 80%,var(--accent-bg));
  --ck-edge:color-mix(in srgb,var(--text) 55%,transparent);--ck-line:color-mix(in srgb,var(--text) 22%,transparent);
  --ck-hot:color-mix(in srgb,var(--accent) 22%,transparent);--ck-sel:color-mix(in srgb,var(--red,#B3323A) 62%,transparent)}
body.dark .checkup-map{--ck-body-hi:#22406A;--ck-body-lo:#10223B;--ck-edge:rgba(214,229,247,.7);--ck-line:rgba(214,229,247,.2)}
.checkup-map svg{width:100%;height:auto;display:block;overflow:visible;filter:drop-shadow(0 10px 18px rgba(8,20,40,.18))}
.checkup-map .bp-body{fill:url(#ckShade)}
.checkup-map .bp-edge{fill:none;stroke:var(--ck-edge);stroke-width:1.3;stroke-linejoin:round;pointer-events:none}
.checkup-map .bp-line{fill:none;stroke:var(--ck-line);stroke-width:.9;stroke-linecap:round;pointer-events:none}
.checkup-map .bp-hot{fill:transparent;cursor:pointer;transition:fill .22s ease}
.checkup-map .bp-hot:hover{fill:var(--ck-hot)}
.checkup-map .bp-hot.sel{fill:var(--ck-sel);animation:ck-pulse 1.8s ease-in-out infinite}
@keyframes ck-pulse{50%{fill:color-mix(in srgb,var(--red,#B3323A) 40%,transparent)}}
.checkup-map svg{animation:ck-fog .5s cubic-bezier(.16,1,.3,1) both}
@keyframes ck-fog{from{opacity:0;filter:blur(8px)}}
/* front / back segmented control */
.checkup-view{position:relative;display:inline-grid;grid-template-columns:1fr 1fr;padding:4px;border-radius:999px;background:var(--surface2);
  box-shadow:inset 2px 2px 5px rgba(16,34,62,.14),inset -2px -2px 5px rgba(255,255,255,.7)}
body.dark .checkup-view{box-shadow:inset 2px 2px 6px rgba(0,0,0,.45),inset -2px -2px 6px rgba(120,160,210,.07)}
.checkup-view button{position:relative;z-index:1;border:0;background:none;padding:.4rem 1.2rem;font:inherit;font-size:.8rem;font-weight:600;color:var(--text3);cursor:pointer;border-radius:999px;transition:color .25s}
.checkup-view button.on{color:var(--text)}
.checkup-view .ck-thumb{position:absolute;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:999px;background:var(--surface);
  box-shadow:3px 3px 8px rgba(16,34,62,.16),-2px -2px 6px rgba(255,255,255,.8);transition:transform .35s cubic-bezier(.3,1.4,.5,1)}
body.dark .checkup-view .ck-thumb{background:var(--surface3);box-shadow:3px 3px 8px rgba(0,0,0,.45),-1px -1px 4px rgba(120,160,210,.08)}
.checkup-view button[data-view="back"].on ~ .ck-thumb{transform:translateX(100%)}
@media (prefers-reduced-motion:reduce){.checkup-map svg,.checkup-map .bp-hot.sel{animation:none}}
.checkup-map-hint{font-size:.78rem;color:var(--text3);text-align:center}

/* Camera chip */
.checkup-camrow{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;justify-content:center}
.checkup-cam{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .95rem;border-radius:99px;border:1px solid var(--border);background:var(--surface2);color:var(--text2);font-size:.82rem;font-weight:600;cursor:pointer;transition:all .18s}
.checkup-cam:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.checkup-cam.on{background:var(--green);color:#fff;border-color:var(--green)}
.checkup-cam-alt{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .95rem;border-radius:99px;border:1px dashed var(--border);background:transparent;color:var(--text3);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .18s}
.checkup-cam-alt:hover{border-color:var(--accent);color:var(--accent)}
.checkup-cam-err{font-size:.75rem;color:var(--danger,#c0392b);text-align:center;margin-top:.4rem;max-width:420px}
.checkup-cam-priv{font-size:.72rem;color:var(--muted,#6b7280);text-align:center;margin-top:.5rem;max-width:420px;line-height:1.35}

/* ── Live camera view (getUserMedia HUD) ── */
.checkup-camview{position:relative;width:min(340px,100%);aspect-ratio:4/3;margin:.9rem auto 0;border-radius:14px;overflow:hidden;background:#0b0f14;border:1px solid var(--border);box-shadow:var(--shadow);transform:translateZ(0)}
.checkup-camview video{width:100%;height:100%;object-fit:cover;display:block}
.checkup-camview .checkup-reticle{position:absolute;top:18%;left:18%;right:18%;bottom:18%;border:2px dashed rgba(255,255,255,.85);border-radius:50%;pointer-events:none;box-shadow:0 0 0 9999px rgba(0,0,0,.18);animation:checkupReticle 2.4s ease-in-out infinite}
@keyframes checkupReticle{0%,100%{transform:scale(1);opacity:.95}50%{transform:scale(1.03);opacity:.75}}
.checkup-camview .checkup-scanline{position:absolute;left:8%;right:8%;top:20%;height:2px;background:linear-gradient(90deg,transparent,var(--accent,#4fc3f7),transparent);filter:drop-shadow(0 0 4px var(--accent,#4fc3f7));pointer-events:none;animation:checkupScan 2.2s ease-in-out infinite}
@keyframes checkupScan{0%{top:18%;opacity:.2}50%{top:82%;opacity:1}100%{top:18%;opacity:.2}}
.checkup-camview .checkup-camstatus{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);padding:.3rem .8rem;border-radius:99px;background:rgba(0,0,0,.72);color:#fff;font-size:.75rem;font-weight:600;white-space:nowrap;max-width:88%;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.checkup-camview .checkup-camstop{position:absolute;top:8px;right:8px;width:28px;height:28px;border-radius:50%;border:1px solid rgba(255,255,255,.6);background:rgba(0,0,0,.55);color:#fff;font-size:.85rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}
.checkup-camview .checkup-camstop:hover{background:var(--danger,#c0392b);border-color:var(--danger,#c0392b)}
.checkup-camview.snap::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:#fff;opacity:0;pointer-events:none;animation:checkupSnap .32s ease-out forwards}
@keyframes checkupSnap{0%{opacity:.85}100%{opacity:0}}

/* Part legend chips */
.checkup-parts{display:flex;flex-wrap:wrap;gap:.4rem;justify-content:center;margin-top:.4rem}
.checkup-part{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .75rem;border-radius:99px;border:1px solid var(--border);background:var(--surface);color:var(--text2);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .18s}
.checkup-part:hover{background:var(--accent-bg);border-color:var(--accent)}
.checkup-part.sel{background:var(--accent);border-color:var(--accent);color:#fff}

/* ── Step 2: symptoms ── */
.checkup-sym{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.5rem;margin-top:.4rem}
.checkup-sym label{display:flex;align-items:flex-start;gap:.5rem;padding:.6rem .7rem;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s;background:var(--surface)}
.checkup-sym label:hover{border-color:var(--accent)}
.checkup-sym label.ticked{background:var(--accent-bg);border-color:var(--accent)}
.checkup-sym input{margin-top:.15rem;accent-color:var(--accent);flex:none}
.checkup-sym .sym-txt{font-size:.82rem;line-height:1.35;color:var(--text2)}
.checkup-sym .sym-zh{display:block;font-size:.72rem;color:var(--text3)}
.checkup-none{font-size:.8rem;color:var(--text3);text-align:center;padding:.6rem}

/* ── Step 3: analyze / output ── */
.checkup-out{font-size:.92rem;line-height:1.6;color:var(--text)}
.checkup-out>div{margin-bottom:.9rem;padding-bottom:.9rem;border-bottom:1px dashed var(--border)}
.checkup-out>div:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}
.checkup-out h4{font-size:.86rem;margin-bottom:.35rem;color:var(--accent);display:flex;align-items:center;gap:.4rem}
.checkup-out ol,.checkup-out ul{margin:.3rem 0 .3rem 1.1rem;padding:0}
.checkup-out li{margin:.25rem 0}
.checkup-red{background:var(--surface);border:1px solid rgba(192,57,43,.4);background:color-mix(in srgb,var(--danger,#c0392b) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--danger,#c0392b) 40%,transparent);border-radius:var(--radius-sm);padding:.7rem .8rem;margin-bottom:.9rem!important;font-size:.85rem}
.checkup-disclaimer{font-size:.72rem;color:var(--text3);text-align:center;margin-top:1rem;font-style:italic}

/* Buttons */
.checkup-btn{display:inline-flex;align-items:center;gap:.45rem;padding:.6rem 1.4rem;border-radius:var(--radius-sm);border:none;font-weight:600;font-size:.88rem;cursor:pointer;transition:all .18s;box-shadow:var(--shadow-sm)}
.checkup-btn.primary{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff}
.checkup-btn.primary:hover{transform:translateY(-1px);box-shadow:var(--shadow)}
.checkup-btn.ghost{background:var(--surface);border:1px solid var(--border);color:var(--text2)}
.checkup-btn.ghost:hover{border-color:var(--accent);color:var(--accent)}
.checkup-btn:disabled{opacity:.45;cursor:not-allowed;transform:none!important}
.checkup-btnrow{display:flex;gap:.6rem;justify-content:center;margin-top:1.1rem;flex-wrap:wrap}

/* Guarded chars */
.checkup-busy{display:flex;align-items:center;gap:.5rem;justify-content:center;color:var(--text3);font-size:.85rem;padding:1rem}
.checkup-spin{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:checkupSpin .7s linear infinite}
@keyframes checkupSpin{to{transform:rotate(360deg)}}

@media(max-width:600px){
  .checkup-sym{grid-template-columns:1fr}
  .checkup-panel{padding:1rem}
  .checkup-map{width:210px}
}
