/* ===== Locator Lab ====================================================== */
.wrap{max-width:1240px;margin:0 auto;padding:26px 22px 60px;}
.head{margin-bottom:18px;}
.head .eyebrow{display:inline-block;font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--accent-deep);background:var(--accent-soft);border-radius:999px;padding:5px 12px;margin-bottom:10px;}
.head h1{font-family:var(--font-display);font-weight:800;font-size:clamp(26px,4vw,36px);letter-spacing:-.02em;margin:0 0 8px;}
.head .sub{color:var(--text-soft);font-size:14px;line-height:1.6;max-width:640px;margin:0;}
.head .sub b{color:var(--text);}

.lab{display:grid;grid-template-columns:minmax(0,430px) minmax(0,1fr);gap:18px;align-items:start;}
.lab>*{min-width:0;}

/* ----- controls ----- */
.lab-controls{display:flex;flex-direction:column;gap:14px;}
.engine-tabs{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:4px;}
.engine-tabs button{flex:1;font-family:var(--font-mono);font-size:12px;font-weight:700;padding:8px 6px;border:none;border-radius:7px;
  background:transparent;color:var(--text-soft);cursor:pointer;transition:all var(--t-fast) var(--ease);}
.engine-tabs button:hover{color:var(--text);}
.engine-tabs button.active{background:var(--grad-brand);color:#fff;box-shadow:var(--shadow-sm);}

.loc-input-row{position:relative;}
#locInput{width:100%;font-family:var(--font-mono);font-size:13.5px;padding:13px 14px;border-radius:10px;
  border:1px solid var(--border-strong);background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm);}
#locInput:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}

.loc-status{font-family:var(--font-mono);font-size:12px;color:var(--text-soft);min-height:18px;line-height:1.5;}
.loc-status.ok{color:var(--pass);} .loc-status.zero{color:var(--warn);}
.loc-status.err{color:var(--fail);} .loc-status.hint{color:var(--accent-deep);}
.loc-status b{color:inherit;}
.eng-pill{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--accent-deep);background:var(--accent-soft);border-radius:5px;padding:2px 7px;margin-left:4px;}

.loc-results{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto;}
.res-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;
  background:var(--surface);cursor:pointer;font-size:12px;transition:border-color var(--t-fast),background var(--t-fast);}
.res-item:hover{border-color:var(--accent);background:var(--surface-2);}
.res-n{flex:0 0 auto;width:20px;height:20px;border-radius:5px;display:flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:10.5px;font-weight:700;background:var(--accent-soft);color:var(--accent-deep);}
.res-sel{font-family:var(--font-mono);font-size:11.5px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;}
.res-role{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--mid);
  background:var(--mid-bg);border-radius:4px;padding:1px 6px;flex:0 0 auto;}
.res-text{color:var(--text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;}
.no-match{font-size:12px;color:var(--text-faint);padding:6px 2px;}

/* ----- cheat sheet ----- */
.cheat{border:1px solid var(--border);border-radius:10px;background:var(--surface);overflow:hidden;}
.cheat summary{list-style:none;cursor:pointer;padding:12px 14px;font-family:var(--font-display);font-size:13.5px;font-weight:600;
  display:flex;justify-content:space-between;align-items:center;}
.cheat summary::-webkit-details-marker{display:none;}
.cheat summary::after{content:"+";font-family:var(--font-mono);font-size:17px;color:var(--accent);}
.cheat[open] summary::after{content:"–";}
.cheat-body{padding:4px 12px 14px;display:flex;flex-direction:column;gap:12px;}
.cheat-g{font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--accent-deep);margin:4px 0 6px;}
.cheat-ex{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;border:1px solid var(--border);border-radius:7px;
  background:var(--surface-2);padding:8px 10px;margin-bottom:6px;cursor:pointer;transition:border-color var(--t-fast),transform var(--t-fast);}
.cheat-ex:hover{border-color:var(--accent);transform:translateX(2px);}
.cheat-lbl{font-size:11.5px;font-weight:600;color:var(--text-soft);}
.cheat-ex code{font-family:var(--font-mono);font-size:11.5px;color:var(--accent-deep);word-break:break-all;}

/* ----- challenges ----- */
.challenges{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:14px;box-shadow:var(--shadow-sm);}
.ch-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-display);font-weight:700;font-size:15px;margin-bottom:10px;}
.ch-progress{font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--accent-deep);background:var(--accent-soft);border-radius:999px;padding:3px 10px;}
.ch-item{border-radius:8px;}
.ch-row{display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:8px;cursor:pointer;font-size:13px;
  transition:background var(--t-fast);}
.ch-row:hover{background:var(--surface-2);}
.ch-box{flex:0 0 20px;width:20px;height:20px;border:2px solid var(--idle);border-radius:6px;display:flex;align-items:center;
  justify-content:center;font-size:12px;color:#fff;font-weight:700;}
.ch-item.done .ch-box{background:var(--pass);border-color:var(--pass);}
.ch-item.done .ch-title{color:var(--text-faint);text-decoration:line-through;}
.ch-title{line-height:1.4;flex:1;}
.ch-chev{flex:0 0 auto;font-size:10px;color:var(--text-faint);transition:transform var(--t-fast) var(--ease);}
.ch-item.open .ch-chev{transform:rotate(90deg);}
.ch-detail{display:none;padding:2px 8px 12px 38px;}
.ch-item.open .ch-detail{display:block;}
.ch-hint{font-size:12px;color:var(--text-soft);line-height:1.55;margin-bottom:9px;}
.ch-hint::before{content:"💡 ";}
.ch-reveal{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--accent-deep);background:var(--accent-soft);
  border:none;border-radius:6px;padding:5px 12px;cursor:pointer;transition:background var(--t-fast);}
.ch-reveal:hover{background:color-mix(in srgb,var(--accent) 22%,transparent);}
.ch-answers{display:none;flex-direction:column;gap:6px;margin-top:9px;}
.ch-answers.show{display:flex;}
.ans-ex{display:flex;align-items:center;gap:8px;text-align:left;width:100%;border:1px solid var(--border);border-radius:7px;
  background:var(--surface-2);padding:7px 9px;cursor:pointer;transition:border-color var(--t-fast),transform var(--t-fast);}
.ans-ex:hover{border-color:var(--accent);transform:translateX(2px);}
.ans-eng{flex:0 0 auto;font-family:var(--font-mono);font-size:8.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:#fff;background:var(--grad-brand);border-radius:4px;padding:2px 6px;}
.ans-ex code{font-family:var(--font-mono);font-size:11px;color:var(--accent-deep);word-break:break-all;}
.reset-ch{margin-top:8px;font-family:var(--font-mono);font-size:11px;background:none;border:none;color:var(--text-faint);cursor:pointer;}
.reset-ch:hover{color:var(--fail);}

/* ----- hard mode ----- */
.hard-panel{border-color:var(--border-strong);}
.hard-intro{font-size:12px;color:var(--text-soft);line-height:1.55;margin:0 0 10px;}
.hard-intro b{color:var(--text);}
.fr-compare{display:flex;flex-direction:column;gap:7px;margin:2px 0 11px;}
.fr-row{display:grid;grid-template-columns:auto 1fr;gap:6px 9px;align-items:center;text-align:left;width:100%;
  border:1px solid var(--border);border-radius:8px;background:var(--surface-2);padding:9px 11px;cursor:pointer;
  transition:border-color var(--t-fast),transform var(--t-fast);}
.fr-row:hover{border-color:var(--accent);transform:translateX(2px);}
.fr-tag{font-family:var(--font-mono);font-size:8.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  border-radius:4px;padding:2px 6px;white-space:nowrap;}
.fr-tag.bad{background:var(--fail-bg);color:var(--fail);}
.fr-tag.good{background:var(--pass-bg);color:var(--pass);}
.fr-row code{grid-column:2;font-family:var(--font-mono);font-size:11px;color:var(--accent-deep);word-break:break-all;}
.fr-why{grid-column:2;font-size:11px;color:var(--text-soft);line-height:1.45;}
.fr-test{font-family:var(--font-mono);font-size:11px;font-weight:700;color:#fff;background:var(--grad-brand);border:none;
  border-radius:7px;padding:8px 13px;cursor:pointer;box-shadow:var(--shadow-sm);}
.fr-test:hover{filter:brightness(1.06);}
.fr-result{font-size:11.5px;line-height:1.5;margin-top:9px;min-height:0;}
.fr-result.ok{color:var(--pass);} .fr-result.bad{color:var(--fail);}
.fr-result.warn{color:var(--warn);} .fr-result.err{color:var(--fail);}
.hard-item.done .ch-title{color:var(--text-faint);text-decoration:line-through;}

/* ----- target (iframe) ----- */
.lab-target{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--surface);
  box-shadow:var(--shadow);position:sticky;top:74px;}
.target-bar{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--surface-2);}
.target-lbl{font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--accent-deep);text-transform:uppercase;}
#reloadTarget{font-family:var(--font-mono);font-size:11px;background:var(--surface-3);color:var(--text-soft);border:none;
  border-radius:6px;padding:5px 11px;cursor:pointer;transition:background var(--t-fast);}
#reloadTarget:hover{background:var(--border-strong);color:var(--text);}
#target{width:100%;height:calc(100vh - 150px);min-height:520px;border:none;display:block;background:#fff;}

/* ----- toast ----- */
.loclab-toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(140%);z-index:200;
  background:var(--pass);color:#fff;font-size:13px;font-weight:600;padding:11px 20px;border-radius:10px;box-shadow:var(--shadow-lg);
  transition:transform .28s var(--ease);}
.loclab-toast.show{transform:translateX(-50%) translateY(0);}

/* footer */
footer{text-align:center;color:var(--text-faint);font-family:var(--font-mono);font-size:11.5px;padding:26px 16px;border-top:1px solid var(--border);margin-top:30px;}

/* ===== responsive ===== */
@media(max-width:900px){
  .lab{grid-template-columns:1fr;}
  .lab-target{position:static;order:-1;}     /* show the page first on mobile */
  #target{height:min(64vh,560px);}
}
@media(max-width:700px){
  .wrap{padding:20px 16px 50px;}
  .res-sel{max-width:110px;}
}
