:root{
  --bg:#05070a;
  --panel:#080c12;
  --line:#18202c;
  --ink:#e8f0fb;
  --dim:#5d7089;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--bg);color:var(--ink);
  font:400 15px/1.4 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  overflow:hidden;
}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

#field-lab{
  height:100dvh;display:grid;
  grid-template-rows:1fr auto auto;
  gap:12px;padding:12px;
}

.nihongo-link{
  position:fixed;top:10px;right:12px;z-index:20;
  color:var(--dim);text-decoration:none;font-size:12px;letter-spacing:.06em;
  padding:4px 8px;border:1px solid var(--line);border-radius:6px;
  transition:color .2s,border-color .2s;
}
.nihongo-link:hover{color:var(--ink);border-color:#2c3a4d}

/* ---- panels ---- */
.visual-stage{
  display:grid;gap:10px;min-height:0;
  grid-template-columns:2fr 1fr;
  grid-template-rows:1fr 1fr 1fr;
  grid-template-areas:"c a" "c b" "c d";
}
.panel{
  position:relative;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;overflow:hidden;min-height:0;
}
.panel-composite{grid-area:c}
.panel-slice:nth-of-type(2){grid-area:a}
.panel-slice:nth-of-type(3){grid-area:b}
.panel-slice:nth-of-type(4){grid-area:d}
.panel canvas{display:block;width:100%;height:100%;touch-action:none}
.panel-composite canvas{cursor:grab}
.panel-composite canvas:active{cursor:grabbing}
.panel-label{
  position:absolute;left:8px;bottom:6px;font-size:10px;letter-spacing:.14em;
  color:var(--dim);pointer-events:none;
}

/* ---- ratio readout: the only number on the page ---- */
.ratio-readout{
  position:absolute;left:14px;top:12px;
  font:300 30px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
  color:var(--dim);letter-spacing:.02em;pointer-events:none;
  transition:color .25s,text-shadow .25s;
}
.ratio-readout[data-exact="true"]{
  color:#7ff0d4;text-shadow:0 0 22px rgba(95,240,207,.35);
}

/* ---- sliders ---- */
.control-stack{display:flex;flex-direction:column;gap:9px}
.edge-control{display:flex;align-items:center;gap:11px}
.edge-swatch{
  width:9px;height:9px;border-radius:50%;flex:0 0 auto;
  background:var(--edge-color);box-shadow:0 0 12px var(--edge-color);
}
.edge-slider{
  -webkit-appearance:none;appearance:none;flex:1;height:26px;background:transparent;cursor:pointer;
}
.edge-slider::-webkit-slider-runnable-track{
  height:3px;border-radius:2px;
  background:linear-gradient(90deg,var(--line),#26313f 50%,var(--line));
}
.edge-slider::-moz-range-track{
  height:3px;border-radius:2px;
  background:linear-gradient(90deg,var(--line),#26313f 50%,var(--line));
}
.edge-slider::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:17px;height:17px;border-radius:50%;
  margin-top:-7px;background:var(--edge-color);border:2px solid var(--bg);
  box-shadow:0 0 14px var(--edge-color);
}
.edge-slider::-moz-range-thumb{
  width:17px;height:17px;border-radius:50%;
  background:var(--edge-color);border:2px solid var(--bg);
  box-shadow:0 0 14px var(--edge-color);
}
.edge-slider:focus-visible{outline:2px solid var(--edge-color);outline-offset:4px;border-radius:6px}

/* ---- progress ---- */
.stage-nav{display:flex;align-items:center;justify-content:center;gap:16px}
.stage-dots{display:flex;gap:7px;align-items:center}
.stage-dot{
  width:6px;height:6px;border-radius:50%;background:var(--line);
  transition:background .3s,transform .3s,box-shadow .3s;
}
.stage-dot.is-done{background:#2f4256}
.stage-dot.is-active{background:var(--ink);transform:scale(1.45);box-shadow:0 0 12px rgba(232,240,251,.45)}
.icon-button{
  width:34px;height:34px;border-radius:50%;
  background:transparent;border:1px solid var(--line);color:var(--dim);
  font-size:15px;line-height:1;cursor:pointer;
  transition:opacity .3s,color .3s,border-color .3s,box-shadow .3s,transform .3s;
}
.icon-button:hover{color:var(--ink);border-color:#2c3a4d}
.icon-button.next{opacity:.16;pointer-events:none}
.icon-button.next.is-ready{
  opacity:1;pointer-events:auto;color:#7ff0d4;border-color:#2c6a5c;
  box-shadow:0 0 18px rgba(95,240,207,.22);
  animation:nudge 2.4s ease-in-out infinite;
}
@keyframes nudge{0%,100%{transform:translateX(0)}50%{transform:translateX(3px)}}

@media (max-width:820px){
  .visual-stage{
    grid-template-columns:1fr 1fr 1fr;
    grid-template-rows:1.5fr 1fr;
    grid-template-areas:"c c c" "a b d";
  }
  .ratio-readout{font-size:24px}
}
@media (prefers-reduced-motion:reduce){
  .icon-button.next.is-ready{animation:none}
  *{transition:none!important}
}
