/* ============================================================
   TOKENS
   ============================================================ */
:root{
  --ivory:#FBF7F1;
  --cream:#F4ECE1;
  --blush:#F1DDD7;
  --rose:#C99A93;
  --rose-deep:#A9716B;
  --gold:#C2A15E;
  --gold-soft:#E0C88E;
  --brown:#3B2F2A;
  --brown-mid:#6E5A50;
  --brown-soft:#9C887C;
  --ink:#2C2320;
  --line:rgba(59,47,42,0.10);
  --glass:rgba(255,255,255,0.55);
  --shadow-sm:0 1px 2px rgba(59,47,42,.05), 0 4px 14px rgba(59,47,42,.05);
  --shadow-md:0 2px 6px rgba(59,47,42,.06), 0 18px 44px rgba(59,47,42,.09);
  --shadow-lg:0 30px 80px rgba(59,47,42,.14);
  --radius-sm:10px;
  --radius:16px;
  --radius-lg:24px;
  --ease:cubic-bezier(.22,.9,.28,1);
  --ease-soft:cubic-bezier(.4,0,.2,1);
  --serif:'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --sans:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --hand:'Caveat', 'Segoe Script', cursive;
}

/* ============================================================
   BASE
   ============================================================ */
*,*::before,*::after{ box-sizing:border-box; }

html,body{
  height:100%;
  margin:0;
  padding:0;
}

body{
  font-family:var(--sans);
  font-weight:400;
  color:var(--ink);
  background:var(--ivory);
  overflow:hidden;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  -webkit-tap-highlight-color:transparent;
  text-rendering:optimizeLegibility;
}

button{ font-family:inherit; color:inherit; }

:focus-visible{
  outline:2px solid var(--gold);
  outline-offset:3px;
  border-radius:6px;
}

/* ---------- Background ---------- */
.bg-base{
  position:fixed; inset:0; z-index:0;
  background:
    radial-gradient(120% 80% at 12% 0%, #FFFBF5 0%, rgba(255,251,245,0) 55%),
    radial-gradient(90% 70% at 88% 8%, #F7E6E0 0%, rgba(247,230,224,0) 60%),
    radial-gradient(120% 90% at 50% 110%, #F0DCD2 0%, rgba(240,220,210,0) 62%),
    linear-gradient(168deg, #FCF8F2 0%, #F7EDE3 42%, #F3E3DA 100%);
}

.bg-glow{
  position:fixed; inset:-20%; z-index:0;
  pointer-events:none;
  background:
    radial-gradient(38% 30% at 78% 22%, rgba(226,196,140,.22), transparent 70%),
    radial-gradient(34% 28% at 18% 76%, rgba(212,164,158,.20), transparent 70%);
  animation:driftGlow 26s var(--ease-soft) infinite alternate;
}

@keyframes driftGlow{
  0%{ transform:translate3d(0,0,0) scale(1); }
  100%{ transform:translate3d(-2%,1.5%,0) scale(1.06); }
}

#fx{
  position:fixed; inset:0; z-index:5;
  pointer-events:none;
  display:block;
}

/* ============================================================
   SCREENS
   ============================================================ */
.screen{
  position:fixed; inset:0;
  z-index:10;
  display:flex;
  flex-direction:column;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .62s var(--ease-soft), visibility .62s;
  overflow:hidden;
}
.screen.is-active{
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}

/* ============================================================
   LANDING
   ============================================================ */
#screen-landing{
  align-items:center;
  justify-content:center;
  padding:max(28px, env(safe-area-inset-top)) 22px max(28px, env(safe-area-inset-bottom));
  text-align:center;
}

.landing-inner{
  max-width:620px;
  width:100%;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:0;
}

.landing-mark{
  width:118px; height:118px;
  color:var(--gold);
  margin-bottom:26px;
  animation:markFloat 9s ease-in-out infinite;
  opacity:.9;
}
.landing-mark svg{ width:100%; height:100%; display:block; }

@keyframes markFloat{
  0%,100%{ transform:translateY(0) rotate(0deg); }
  50%{ transform:translateY(-10px) rotate(2deg); }
}

.landing-title{
  font-family:var(--serif);
  font-weight:400;
  font-size:clamp(2rem, 8.4vw, 3.55rem);
  line-height:1.08;
  letter-spacing:-0.015em;
  margin:0 0 14px;
  color:var(--brown);
  background:linear-gradient(180deg,#3B2F2A 0%, #6B5248 100%);
  -webkit-background-clip:text;
  background-clip:text;
  -webkit-text-fill-color:transparent;
  animation:riseIn .95s var(--ease) both;
}

.landing-sub{
  font-size:clamp(.86rem, 3.4vw, .98rem);
  font-weight:300;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--brown-soft);
  margin:0 0 44px;
  animation:riseIn .95s .12s var(--ease) both;
}

@keyframes riseIn{
  from{ opacity:0; transform:translateY(16px); }
  to{ opacity:1; transform:translateY(0); }
}

.landing-actions{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:14px;
  width:100%;
  animation:riseIn .95s .24s var(--ease) both;
}

.landing-footer{
  position:absolute;
  bottom:max(20px, env(safe-area-inset-bottom));
  left:0; right:0;
  text-align:center;
  font-size:.72rem;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--brown-soft);
  opacity:.65;
}

/* ============================================================
   BUTTONS
   ============================================================ */
.btn-primary{
  position:relative;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:12px;
  min-height:56px;
  padding:0 34px;
  border:none;
  border-radius:100px;
  font-size:.94rem;
  font-weight:500;
  letter-spacing:.04em;
  color:#FFFBF6;
  background:linear-gradient(135deg, #4A3830 0%, #6B4F42 46%, #8A6650 100%);
  box-shadow:
    0 1px 0 rgba(255,255,255,.24) inset,
    0 10px 26px rgba(74,56,48,.26),
    0 2px 6px rgba(74,56,48,.16);
  cursor:pointer;
  overflow:hidden;
  transition:transform .34s var(--ease), box-shadow .34s var(--ease), filter .34s var(--ease);
  -webkit-user-select:none; user-select:none;
  touch-action:manipulation;
}
.btn-primary::after{
  content:"";
  position:absolute; inset:0;
  background:linear-gradient(110deg, transparent 30%, rgba(255,255,255,.28) 50%, transparent 70%);
  transform:translateX(-130%);
  transition:transform .85s var(--ease);
}
.btn-primary:hover{
  transform:translateY(-2px);
  box-shadow:
    0 1px 0 rgba(255,255,255,.28) inset,
    0 16px 34px rgba(74,56,48,.30),
    0 3px 8px rgba(74,56,48,.18);
}
.btn-primary:hover::after{ transform:translateX(130%); }
.btn-primary:active{ transform:translateY(0) scale(.985); }

.btn-primary .arrow{
  display:inline-block;
  transition:transform .34s var(--ease);
  font-size:1.05em;
}
.btn-primary:hover .arrow{ transform:translateX(4px); }

.btn-primary[disabled]{
  opacity:.45; pointer-events:none;
}

.btn-ghost{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:50px;
  padding:0 28px;
  border-radius:100px;
  border:1px solid rgba(59,47,42,.16);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  color:var(--brown);
  font-size:.88rem;
  font-weight:500;
  letter-spacing:.05em;
  cursor:pointer;
  transition:all .3s var(--ease);
  touch-action:manipulation;
}
.btn-ghost:hover{
  background:rgba(255,255,255,.82);
  border-color:rgba(194,161,94,.5);
  transform:translateY(-1px);
}

.btn-text{
  background:none;
  border:none;
  padding:10px 16px;
  font-size:.82rem;
  letter-spacing:.06em;
  color:var(--brown-soft);
  cursor:pointer;
  border-radius:8px;
  transition:color .25s var(--ease);
  touch-action:manipulation;
}
.btn-text:hover{ color:var(--rose-deep); }

/* ============================================================
   HUD
   ============================================================ */
#screen-game{
  padding:0;
}

.hud{
  flex:0 0 auto;
  display:grid;
  grid-template-columns:auto 1fr auto;
  align-items:center;
  gap:14px;
  padding:calc(env(safe-area-inset-top) + 12px) 16px 12px;
  z-index:12;
}

.hud-side{ display:flex; align-items:center; gap:6px; }
.hud-side--right{ justify-content:flex-end; }

.icon-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:42px; height:42px;
  border-radius:50%;
  border:1px solid rgba(59,47,42,.10);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  color:var(--brown-mid);
  cursor:pointer;
  transition:all .28s var(--ease);
  touch-action:manipulation;
  flex:0 0 auto;
}
.icon-btn:hover{
  background:rgba(255,255,255,.85);
  color:var(--brown);
  border-color:rgba(194,161,94,.45);
  transform:translateY(-1px);
}
.icon-btn.is-off{ opacity:.4; }
.icon-btn.is-off .wave{ opacity:0; }

.hud-center{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:8px;
  min-width:0;
}

.level-label{
  font-family:var(--serif);
  font-size:.94rem;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:var(--brown-mid);
  white-space:nowrap;
}

.progress-track{
  width:min(230px, 46vw);
  height:3px;
  border-radius:100px;
  background:rgba(59,47,42,.10);
  overflow:hidden;
}
.progress-fill{
  height:100%;
  width:0%;
  border-radius:100px;
  background:linear-gradient(90deg, var(--rose) 0%, var(--gold) 100%);
  transition:width .7s var(--ease);
}

/* ---------- Stage ---------- */
.stage-scroll{
  flex:1 1 auto;
  overflow-y:auto;
  overflow-x:hidden;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  display:flex;
  align-items:flex-start;
  justify-content:center;
  padding:6px 16px 12px;
}

.stage{
  width:100%;
  max-width:640px;
  margin:0 auto;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:18px;
  padding-bottom:16px;
}

.hint-bar{
  flex:0 0 auto;
  display:flex;
  justify-content:center;
  padding:6px 16px calc(env(safe-area-inset-bottom) + 14px);
}

.btn-hint{
  background:none;
  border:none;
  font-size:.78rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--brown-soft);
  padding:10px 18px;
  border-radius:100px;
  cursor:pointer;
  position:relative;
  transition:color .3s var(--ease);
  touch-action:manipulation;
}
.btn-hint::after{
  content:"";
  position:absolute;
  left:50%; bottom:6px;
  width:0; height:1px;
  background:var(--gold);
  transform:translateX(-50%);
  transition:width .35s var(--ease);
}
.btn-hint:hover{ color:var(--brown); }
.btn-hint:hover::after{ width:46%; }

/* ============================================================
   SHARED PUZZLE PIECES
   ============================================================ */
.puzzle-title{
  font-family:var(--serif);
  font-size:clamp(1.35rem, 5.6vw, 1.75rem);
  font-weight:400;
  letter-spacing:.005em;
  color:var(--brown);
  text-align:center;
  margin:0;
  line-height:1.2;
}
.puzzle-sub{
  font-size:.8rem;
  letter-spacing:.06em;
  color:var(--brown-soft);
  text-align:center;
  margin:-8px 0 0;
  font-weight:300;
  max-width:44ch;
  line-height:1.6;
}

.panel{
  width:100%;
  background:var(--glass);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border:1px solid rgba(255,255,255,.72);
  border-radius:var(--radius-lg);
  box-shadow:var(--shadow-md);
  padding:18px;
}

.stat-row{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:22px;
  flex-wrap:wrap;
}
.stat{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:2px;
  min-width:56px;
}
.stat-value{
  font-family:var(--serif);
  font-size:1.22rem;
  color:var(--brown);
  font-variant-numeric:tabular-nums;
  line-height:1;
}
.stat-label{
  font-size:.62rem;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--brown-soft);
}

.ctrl-row{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  flex-wrap:wrap;
}

.mini-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  min-height:42px;
  padding:0 20px;
  border-radius:100px;
  border:1px solid rgba(59,47,42,.14);
  background:rgba(255,255,255,.62);
  color:var(--brown-mid);
  font-size:.78rem;
  font-weight:500;
  letter-spacing:.07em;
  text-transform:uppercase;
  cursor:pointer;
  transition:all .28s var(--ease);
  touch-action:manipulation;
}
.mini-btn:hover{
  background:#fff;
  color:var(--brown);
  border-color:rgba(194,161,94,.5);
  transform:translateY(-1px);
}
.mini-btn:active{ transform:translateY(0) scale(.97); }

/* ============================================================
   LEVEL 1 — SLIDING PUZZLE
   ============================================================ */
.sp-wrap{ width:100%; display:flex; flex-direction:column; align-items:center; gap:16px; }

.sp-frame{
  position:relative;
  width:min(86vw, 380px);
  aspect-ratio:1/1;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.75);
  box-shadow:var(--shadow-md);
  padding:8px;
  touch-action:none;
}
.sp-frame.is-solved{
  animation:solvedPulse 1.1s var(--ease);
  box-shadow:0 0 0 2px rgba(194,161,94,.4), 0 0 46px rgba(194,161,94,.36), var(--shadow-md);
}
@keyframes solvedPulse{
  0%{ transform:scale(1); }
  38%{ transform:scale(1.03); }
  100%{ transform:scale(1); }
}

.sp-grid{
  position:relative;
  width:100%; height:100%;
  border-radius:16px;
  overflow:hidden;
  background:rgba(59,47,42,.05);
}

.sp-tile{
  position:absolute;
  top:0; left:0;
  width:25%; height:25%;
  padding:3px;
  border:none;
  background:none;
  cursor:pointer;
  transition:transform .3s var(--ease);
  will-change:transform;
  touch-action:none;
}
.sp-tile-inner{
  width:100%; height:100%;
  border-radius:9px;
  background-size:400% 400%;
  background-repeat:no-repeat;
  box-shadow:0 2px 6px rgba(59,47,42,.14), 0 0 0 1px rgba(255,255,255,.5) inset;
  transition:box-shadow .3s var(--ease), filter .3s var(--ease);
}
.sp-tile:hover .sp-tile-inner{
  box-shadow:0 6px 18px rgba(59,47,42,.20), 0 0 0 1px rgba(255,255,255,.7) inset;
  filter:brightness(1.05);
}
.sp-tile:active .sp-tile-inner{ filter:brightness(.95); }

/* ============================================================
   LEVEL 2 — ROTATING PATH
   ============================================================ */
.pipe-grid{
  display:grid;
  gap:6px;
  width:min(88vw, 380px);
  aspect-ratio:1/1;
  padding:12px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.75);
  box-shadow:var(--shadow-md);
  touch-action:manipulation;
}

.pipe-cell{
  position:relative;
  border:none;
  padding:0;
  border-radius:9px;
  background:rgba(59,47,42,.035);
  cursor:pointer;
  overflow:hidden;
  transition:background .3s var(--ease), box-shadow .3s var(--ease);
  touch-action:manipulation;
}
.pipe-cell:hover{ background:rgba(194,161,94,.10); }

.pipe-cell svg{
  position:absolute; inset:0;
  width:100%; height:100%;
  transition:transform .34s var(--ease);
  color:var(--brown-soft);
}
.pipe-cell.is-start,
.pipe-cell.is-end{
  background:rgba(194,161,94,.14);
}
.pipe-cell.is-start svg,
.pipe-cell.is-end svg{ color:var(--gold); }

.pipe-cell.is-linked svg{
  color:var(--gold);
  filter:drop-shadow(0 0 6px rgba(194,161,94,.8));
}
.pipe-cell.is-linked{
  background:rgba(194,161,94,.16);
  box-shadow:0 0 18px rgba(194,161,94,.28) inset;
}

.pipe-cell.is-solved svg{
  color:var(--rose-deep);
  filter:drop-shadow(0 0 8px rgba(169,113,107,.9));
  animation:pathGlow 1.6s ease-in-out infinite alternate;
}
@keyframes pathGlow{
  from{ filter:drop-shadow(0 0 4px rgba(169,113,107,.6)); }
  to{ filter:drop-shadow(0 0 12px rgba(194,161,94,.95)); }
}

/* ============================================================
   LEVEL 3 — LIGHTS
   ============================================================ */
.lo-grid{
  display:grid;
  grid-template-columns:repeat(5, 1fr);
  gap:9px;
  width:min(84vw, 330px);
  padding:14px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.75);
  box-shadow:var(--shadow-md);
  touch-action:manipulation;
}

.lo-cell{
  aspect-ratio:1/1;
  border-radius:11px;
  border:1px solid rgba(59,47,42,.10);
  background:rgba(59,47,42,.045);
  cursor:pointer;
  position:relative;
  transition:all .3s var(--ease);
  touch-action:manipulation;
  padding:0;
}
.lo-cell::after{
  content:"";
  position:absolute; inset:0;
  border-radius:inherit;
  background:radial-gradient(circle at 50% 40%, rgba(255,255,255,.5), transparent 70%);
  opacity:0;
  transition:opacity .35s var(--ease);
}
.lo-cell.on{
  background:linear-gradient(150deg, #E8CE93 0%, #C2A15E 100%);
  border-color:rgba(194,161,94,.7);
  box-shadow:0 0 16px rgba(194,161,94,.45), 0 2px 6px rgba(160,124,60,.3);
}
.lo-cell.on::after{ opacity:1; }
.lo-cell:hover{ transform:translateY(-1px); }
.lo-cell.on:hover{ box-shadow:0 0 22px rgba(194,161,94,.6), 0 3px 9px rgba(160,124,60,.35); }
.lo-cell.pop{ animation:cellPop .3s var(--ease); }
@keyframes cellPop{
  0%{ transform:scale(1); }
  45%{ transform:scale(.9); }
  100%{ transform:scale(1); }
}
.lo-grid.is-solved .lo-cell{
  animation:lightsWin 1.1s var(--ease) both;
}
@keyframes lightsWin{
  0%{ transform:scale(1); }
  40%{ transform:scale(1.09); box-shadow:0 0 30px rgba(194,161,94,.75); }
  100%{ transform:scale(1); }
}

/* ============================================================
   LEVEL 4 — LASER
   ============================================================ */
.laser-frame{
  width:min(90vw, 400px);
  aspect-ratio:1/1;
  padding:10px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.75);
  box-shadow:var(--shadow-md);
  touch-action:manipulation;
}
.laser-svg{ width:100%; height:100%; display:block; touch-action:manipulation; }

.laser-cell{
  cursor:pointer;
  transition:fill .3s var(--ease);
}
.laser-cell--mirror:hover{ fill:rgba(194,161,94,.22); }
.laser-beam{
  fill:none;
  stroke:#E0574E;
  stroke-width:3;
  stroke-linecap:round;
  stroke-linejoin:round;
  filter:drop-shadow(0 0 5px rgba(224,87,78,.75));
}
.laser-beam--idle{
  stroke:rgba(224,87,78,.35);
  stroke-dasharray:6 8;
  animation:beamFlow 1.4s linear infinite;
}
@keyframes beamFlow{ to{ stroke-dashoffset:-28; } }

.laser-target{ transition:all .4s var(--ease); }
.laser-target.hit{
  fill:rgba(194,161,94,.85);
  filter:drop-shadow(0 0 16px rgba(194,161,94,.95));
  animation:targetHit .9s var(--ease);
}
@keyframes targetHit{
  0%{ transform:scale(1); }
  45%{ transform:scale(1.22); }
  100%{ transform:scale(1); }
}

/* ============================================================
   LEVEL 5 — PATTERN
   ============================================================ */
.pat-matrix{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:10px;
  width:min(78vw, 300px);
  padding:14px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.55);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.78);
  box-shadow:var(--shadow-md);
}
.pat-cell{
  aspect-ratio:1/1;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:12px;
  background:rgba(59,47,42,.035);
  color:var(--brown-mid);
  padding:8px;
  animation:cellIn .5s var(--ease) both;
}
@keyframes cellIn{
  from{ opacity:0; transform:scale(.9); }
  to{ opacity:1; transform:scale(1); }
}
.pat-cell.is-missing{
  background:rgba(194,161,94,.10);
  border:1px dashed rgba(194,161,94,.55);
  color:var(--gold);
  font-family:var(--serif);
  font-size:1.8rem;
}
.pat-cell.is-correct{
  background:rgba(194,161,94,.22);
  box-shadow:0 0 22px rgba(194,161,94,.4);
  animation:cellIn .5s var(--ease) both, correctPulse .9s var(--ease) .3s;
}
@keyframes correctPulse{
  0%{ transform:scale(1); }
  40%{ transform:scale(1.12); }
  100%{ transform:scale(1); }
}

.pat-options{
  display:grid;
  grid-template-columns:repeat(4, 1fr);
  gap:10px;
  width:min(88vw, 340px);
}
.pat-opt{
  aspect-ratio:1/1;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:10px;
  border-radius:14px;
  border:1px solid rgba(59,47,42,.12);
  background:rgba(255,255,255,.6);
  color:var(--brown-mid);
  cursor:pointer;
  transition:all .28s var(--ease);
  touch-action:manipulation;
}
.pat-opt:hover{
  transform:translateY(-3px);
  border-color:rgba(194,161,94,.55);
  box-shadow:0 10px 24px rgba(59,47,42,.10);
  color:var(--brown);
}
.pat-opt.is-wrong{ animation:shakeX .42s var(--ease); border-color:rgba(200,90,80,.5); }
.pat-opt.is-right{
  border-color:rgba(194,161,94,.8);
  box-shadow:0 0 24px rgba(194,161,94,.4);
  background:rgba(255,251,240,.95);
}
.pat-opt[disabled]{ pointer-events:none; opacity:.45; }

@keyframes shakeX{
  0%,100%{ transform:translateX(0); }
  20%{ transform:translateX(-7px); }
  45%{ transform:translateX(6px); }
  70%{ transform:translateX(-4px); }
}

.stage-dots{
  display:flex; gap:8px; align-items:center; justify-content:center;
}
.stage-dot{
  width:7px; height:7px; border-radius:50%;
  background:rgba(59,47,42,.16);
  transition:all .4s var(--ease);
}
.stage-dot.is-done{ background:var(--gold); box-shadow:0 0 8px rgba(194,161,94,.7); }
.stage-dot.is-active{ background:var(--rose-deep); transform:scale(1.35); }

/* ============================================================
   LEVEL 6 — BLOCK FIT
   ============================================================ */
.bf-wrap{ width:100%; display:flex; flex-direction:column; align-items:center; gap:16px; }

.bf-board{
  position:relative;
  display:grid;
  grid-template-columns:repeat(4, 1fr);
  gap:5px;
  width:min(72vw, 260px);
  aspect-ratio:1/1;
  padding:12px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.55);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.78);
  box-shadow:var(--shadow-md);
  touch-action:none;
}
.bf-cell{
  border-radius:9px;
  background:rgba(59,47,42,.05);
  border:1px solid rgba(59,47,42,.06);
  transition:background .35s var(--ease), box-shadow .35s var(--ease);
}
.bf-cell.filled{
  border-color:transparent;
  animation:pieceSnap .42s var(--ease);
}
@keyframes pieceSnap{
  0%{ transform:scale(.82); opacity:.4; }
  60%{ transform:scale(1.06); }
  100%{ transform:scale(1); opacity:1; }
}

.bf-tray{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:center;
  gap:14px;
  width:100%;
  min-height:92px;
  padding:14px;
  border-radius:var(--radius);
  background:rgba(255,255,255,.4);
  border:1px dashed rgba(59,47,42,.12);
}

.bf-piece{
  display:grid;
  gap:3px;
  cursor:grab;
  touch-action:none;
  transition:transform .28s var(--ease), opacity .28s var(--ease);
  padding:4px;
  border-radius:10px;
}
.bf-piece:hover{ transform:translateY(-3px) scale(1.04); }
.bf-piece.is-taken{ opacity:.18; pointer-events:none; }
.bf-piece .bf-pcell{
  width:22px; height:22px;
  border-radius:5px;
  box-shadow:0 2px 5px rgba(59,47,42,.16), 0 0 0 1px rgba(255,255,255,.4) inset;
}
.bf-piece .bf-pcell.empty{ background:none; box-shadow:none; }

.bf-ghost{
  position:fixed;
  z-index:200;
  pointer-events:none;
  opacity:.9;
  transform:translate(-50%,-50%) scale(1.06);
  filter:drop-shadow(0 14px 26px rgba(59,47,42,.28));
  display:grid;
  gap:3px;
  padding:4px;
  border-radius:10px;
}
.bf-ghost .bf-pcell{
  width:44px; height:44px;
  border-radius:8px;
  box-shadow:0 0 0 1px rgba(255,255,255,.5) inset;
}
.bf-ghost .bf-pcell.empty{ background:none; box-shadow:none; }

/* ============================================================
   LEVEL 7 — MAZE
   ============================================================ */
.maze-wrap{
  width:100%;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:16px;
}
.maze-frame{
  width:min(88vw, 400px);
  aspect-ratio:1/1;
  padding:10px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.75);
  box-shadow:var(--shadow-md);
}
#maze-canvas{
  width:100%; height:100%;
  display:block;
  border-radius:14px;
  touch-action:none;
}

.dpad{
  display:grid;
  grid-template-columns:repeat(3, 54px);
  grid-template-rows:repeat(3, 54px);
  gap:8px;
  justify-content:center;
  touch-action:none;
}
.dpad-btn{
  border-radius:14px;
  border:1px solid rgba(59,47,42,.12);
  background:rgba(255,255,255,.62);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  color:var(--brown-mid);
  font-size:1.1rem;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  transition:all .2s var(--ease);
  touch-action:none;
  user-select:none;
  -webkit-user-select:none;
}
.dpad-btn:hover{ background:#fff; border-color:rgba(194,161,94,.5); }
.dpad-btn:active{ transform:scale(.93); background:rgba(194,161,94,.2); }
.dpad-up{ grid-area:1/2; }
.dpad-left{ grid-area:2/1; }
.dpad-right{ grid-area:2/3; }
.dpad-down{ grid-area:3/2; }
.dpad-center{
  grid-area:2/2;
  border-radius:50%;
  background:radial-gradient(circle, rgba(194,161,94,.35), transparent 70%);
  border:1px solid rgba(194,161,94,.25);
}

/* ============================================================
   LEVEL 8 — CIPHER
   ============================================================ */
.cipher-wrap{ width:100%; display:flex; flex-direction:column; align-items:center; gap:18px; }

.cipher-msg{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:10px 14px;
  width:100%;
  padding:20px 16px;
  border-radius:var(--radius-lg);
  background:rgba(255,255,255,.55);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.78);
  box-shadow:var(--shadow-md);
}
.cipher-word{ display:flex; gap:9px; }
.cipher-sym{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:5px;
  color:var(--brown-mid);
}
.cipher-sym svg{ width:30px; height:30px; display:block; }
.cipher-sym .sym-letter{
  font-family:var(--serif);
  font-size:.86rem;
  letter-spacing:.08em;
  color:var(--gold);
  min-height:1.1em;
  line-height:1.1;
}
.cipher-sym.is-hidden .sym-letter{ color:var(--rose-deep); }

.cipher-key{
  display:grid;
  grid-template-columns:repeat(13, 1fr);
  gap:5px;
  width:100%;
  max-width:520px;
  padding:14px;
  border-radius:var(--radius);
  background:rgba(255,255,255,.45);
  border:1px solid rgba(255,255,255,.7);
}
.key-item{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:2px;
  color:var(--brown-mid);
  padding:3px 0;
}
.key-item svg{ width:22px; height:22px; }
.key-item .key-letter{
  font-size:.64rem;
  letter-spacing:.08em;
  font-weight:500;
  color:var(--brown);
}
.key-item.is-unknown{ opacity:.4; }
.key-item.is-unknown .key-letter{ color:var(--rose-deep); }

.cipher-input-row{
  display:flex;
  gap:10px;
  width:100%;
  max-width:420px;
}
.cipher-input{
  flex:1;
  min-height:52px;
  padding:0 18px;
  border-radius:100px;
  border:1px solid rgba(59,47,42,.14);
  background:rgba(255,255,255,.75);
  font-family:var(--serif);
  font-size:1.05rem;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--brown);
  outline:none;
  transition:all .3s var(--ease);
  text-align:center;
  -webkit-appearance:none;
}
.cipher-input::placeholder{
  color:var(--brown-soft);
  letter-spacing:.14em;
  font-size:.8rem;
  text-transform:none;
  font-family:var(--sans);
}
.cipher-input:focus{
  border-color:rgba(194,161,94,.65);
  box-shadow:0 0 0 4px rgba(194,161,94,.13);
  background:#fff;
}
.cipher-input.is-wrong{ animation:shakeX .42s var(--ease); border-color:rgba(200,90,80,.55); }
.cipher-input.is-right{ border-color:rgba(194,161,94,.8); box-shadow:0 0 0 4px rgba(194,161,94,.18); }

.cipher-feedback{
  font-size:.8rem;
  letter-spacing:.06em;
  color:var(--brown-soft);
  min-height:1.2em;
  text-align:center;
}
.cipher-feedback.ok{ color:var(--gold); }

/* ============================================================
   LEVEL 9 — MASTER
   ============================================================ */
.master-wrap{ width:100%; display:flex; flex-direction:column; align-items:center; gap:18px; }

.master-stages{
  display:flex; gap:10px; align-items:center; justify-content:center;
}
.ms-pill{
  display:flex; align-items:center; gap:7px;
  padding:7px 14px;
  border-radius:100px;
  border:1px solid rgba(59,47,42,.12);
  background:rgba(255,255,255,.5);
  font-size:.68rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--brown-soft);
  transition:all .4s var(--ease);
}
.ms-pill.is-active{
  border-color:rgba(194,161,94,.6);
  background:rgba(255,251,240,.95);
  color:var(--brown);
  box-shadow:0 0 18px rgba(194,161,94,.22);
}
.ms-pill.is-done{ color:var(--gold); border-color:rgba(194,161,94,.4); }
.ms-pill.is-done::before{ content:"✓"; font-size:.8em; }

/* Rings */
.ring-stage{
  position:relative;
  width:min(84vw, 340px);
  aspect-ratio:1/1;
  touch-action:manipulation;
}
.ring-stage svg{ width:100%; height:100%; display:block; }

.ring-group{
  cursor:pointer;
  transition:transform .45s var(--ease);
  transform-origin:170px 170px;
  transform-box:view-box;
}
.ring-group:hover .ring-track{ stroke:rgba(194,161,94,.45); }
.ring-track{
  fill:none;
  stroke:rgba(59,47,42,.14);
  stroke-width:1.4;
  transition:stroke .3s var(--ease);
}
.ring-glyph{
  fill:var(--brown-soft);
  transition:fill .35s var(--ease);
}
.ring-glyph.is-key{ fill:var(--rose-deep); }
.ring-group.is-locked .ring-glyph.is-key{
  fill:var(--gold);
  filter:drop-shadow(0 0 6px rgba(194,161,94,.9));
}

.ring-marker{
  fill:var(--gold);
  filter:drop-shadow(0 0 8px rgba(194,161,94,.8));
}

/* Hidden hunt */
.hunt-field{
  position:relative;
  width:min(88vw, 380px);
  aspect-ratio:1.15/1;
  border-radius:var(--radius-lg);
  background:linear-gradient(160deg, rgba(43,35,40,.94), rgba(28,24,32,.98));
  overflow:hidden;
  box-shadow:var(--shadow-md);
  touch-action:manipulation;
  border:1px solid rgba(255,255,255,.1);
}
.hunt-star{
  position:absolute;
  width:3px; height:3px;
  border-radius:50%;
  background:rgba(255,255,255,.55);
  pointer-events:none;
  animation:twinkle 3s ease-in-out infinite;
}
@keyframes twinkle{
  0%,100%{ opacity:.25; }
  50%{ opacity:.9; }
}
.hunt-target{
  position:absolute;
  width:26px; height:26px;
  margin:-13px 0 0 -13px;
  border-radius:50%;
  border:none;
  background:none;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  color:rgba(194,161,94,.28);
  transition:all .4s var(--ease);
  touch-action:manipulation;
  padding:0;
}
.hunt-target svg{ width:22px; height:22px; }
.hunt-target:hover{ color:rgba(194,161,94,.6); }
.hunt-target.found{
  color:var(--gold);
  filter:drop-shadow(0 0 14px rgba(194,161,94,1));
  animation:targetHit .9s var(--ease);
  pointer-events:none;
}
.hunt-hint-pulse{
  position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(circle 60px at var(--hx) var(--hy), rgba(194,161,94,.16), transparent 70%);
  opacity:0;
  transition:opacity .6s var(--ease);
}
.hunt-hint-pulse.show{ opacity:1; animation:hintPulse 1.6s ease-out; }
@keyframes hintPulse{
  0%{ opacity:0; }
  40%{ opacity:1; }
  100%{ opacity:0; }
}

/* Fragments collected */
.fragments-row{
  display:flex;
  gap:12px;
  align-items:center;
  justify-content:center;
  flex-wrap:wrap;
}
.fragment{
  width:52px; height:52px;
  border-radius:14px;
  display:flex;
  align-items:center;
  justify-content:center;
  background:rgba(255,255,255,.65);
  border:1px solid rgba(194,161,94,.35);
  box-shadow:0 4px 14px rgba(59,47,42,.08);
  color:var(--gold);
  opacity:0;
  transform:scale(.6);
  transition:all .6s var(--ease);
}
.fragment.is-shown{ opacity:1; transform:scale(1); }
.fragment svg{ width:28px; height:28px; }

/* ============================================================
   LEVEL 10 — ARRANGE
   ============================================================ */
.arrange-wrap{
  width:100%;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:18px;
}
.arrange-circle{
  position:relative;
  width:min(86vw, 380px);
  aspect-ratio:1/1;
  border-radius:50%;
  background:radial-gradient(circle at 50% 50%, rgba(255,255,255,.7), rgba(255,255,255,.25) 70%, transparent 75%);
  border:1px solid rgba(194,161,94,.22);
  box-shadow:inset 0 0 60px rgba(194,161,94,.10), var(--shadow-sm);
  touch-action:none;
}
.arrange-core{
  position:absolute;
  left:50%; top:50%;
  width:34%; height:34%;
  transform:translate(-50%,-50%);
  border-radius:50%;
  background:radial-gradient(circle, rgba(194,161,94,.22), rgba(194,161,94,0) 70%);
  border:1px dashed rgba(194,161,94,.4);
  display:flex;
  align-items:center;
  justify-content:center;
  font-family:var(--serif);
  font-size:.72rem;
  letter-spacing:.22em;
  text-transform:uppercase;
  color:rgba(160,124,60,.75);
  text-align:center;
  padding:8px;
  transition:all .6s var(--ease);
}
.arrange-core.is-filled{
  border-style:solid;
  border-color:rgba(194,161,94,.7);
  background:radial-gradient(circle, rgba(194,161,94,.35), rgba(194,161,94,0) 72%);
  box-shadow:0 0 40px rgba(194,161,94,.35);
}

.arr-slot{
  position:absolute;
  width:56px; height:56px;
  margin:-28px 0 0 -28px;
  border-radius:16px;
  border:1px dashed rgba(59,47,42,.18);
  background:rgba(255,255,255,.4);
  display:flex;
  align-items:center;
  justify-content:center;
  color:rgba(59,47,42,.16);
  transition:all .4s var(--ease);
}
.arr-slot svg{ width:28px; height:28px; }
.arr-slot.is-hover{
  border-color:rgba(194,161,94,.7);
  background:rgba(194,161,94,.12);
  transform:scale(1.06);
}
.arr-slot.is-filled{
  border-style:solid;
  border-color:rgba(194,161,94,.55);
  background:rgba(255,251,240,.9);
  box-shadow:0 0 24px rgba(194,161,94,.35);
  color:var(--gold);
  animation:pieceSnap .5s var(--ease);
}

.arr-tray{
  display:flex;
  gap:14px;
  align-items:center;
  justify-content:center;
  flex-wrap:wrap;
  min-height:78px;
  padding:14px 18px;
  border-radius:var(--radius);
  background:rgba(255,255,255,.42);
  border:1px dashed rgba(59,47,42,.12);
  width:100%;
  max-width:420px;
}
.arr-frag{
  width:56px; height:56px;
  border-radius:16px;
  border:1px solid rgba(194,161,94,.4);
  background:rgba(255,255,255,.85);
  color:var(--gold);
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:grab;
  box-shadow:0 6px 16px rgba(59,47,42,.10);
  transition:transform .3s var(--ease), box-shadow .3s var(--ease), opacity .3s var(--ease);
  touch-action:none;
  user-select:none;
  -webkit-user-select:none;
}
.arr-frag svg{ width:30px; height:30px; }
.arr-frag:hover{ transform:translateY(-4px) scale(1.05); box-shadow:0 12px 26px rgba(59,47,42,.16); }
.arr-frag.is-taken{ opacity:.2; pointer-events:none; }
.arr-frag.is-wrong{ animation:shakeX .42s var(--ease); }

.arr-ghost{
  position:fixed;
  z-index:300;
  width:56px; height:56px;
  margin:-28px 0 0 -28px;
  border-radius:16px;
  border:1px solid rgba(194,161,94,.6);
  background:rgba(255,251,240,.95);
  color:var(--gold);
  display:flex;
  align-items:center;
  justify-content:center;
  pointer-events:none;
  box-shadow:0 16px 36px rgba(59,47,42,.24);
  transform:scale(1.08);
}
.arr-ghost svg{ width:30px; height:30px; }

/* ============================================================
   REVEAL
   ============================================================ */
#screen-reveal{
  align-items:center;
  justify-content:center;
  padding:0;
  overflow-y:auto;
}

.reveal-art-wrap{
  position:absolute;
  inset:0;
  z-index:0;
  overflow:hidden;
  opacity:0;
  transform:scale(1.14);
  transition:opacity 2.4s var(--ease-soft), transform 3.4s var(--ease-soft);
}
.reveal-art-wrap.is-shown{
  opacity:1;
  transform:scale(1);
}
#reveal-canvas{
  width:100%; height:100%;
  display:block;
}
.reveal-vignette{
  position:absolute; inset:0;
  background:
    radial-gradient(80% 60% at 50% 42%, transparent 0%, rgba(20,14,26,.35) 100%),
    linear-gradient(180deg, rgba(16,12,22,.45) 0%, rgba(16,12,22,.15) 30%, rgba(16,12,22,.6) 100%);
}

.reveal-content{
  position:relative;
  z-index:2;
  width:100%;
  max-width:640px;
  padding:max(48px, env(safe-area-inset-top)) 26px max(48px, env(safe-area-inset-bottom));
  display:flex;
  flex-direction:column;
  align-items:center;
  text-align:center;
  gap:30px;
  min-height:100%;
  justify-content:center;
}

.reveal-lines{
  display:flex;
  flex-direction:column;
  gap:20px;
  align-items:center;
}

.rline{
  font-family:var(--serif);
  font-weight:300;
  font-size:clamp(1.35rem, 6vw, 2.2rem);
  line-height:1.42;
  letter-spacing:.005em;
  color:#FBF4EA;
  text-shadow:0 2px 26px rgba(10,6,16,.6);
  opacity:0;
  transform:translateY(18px);
  animation:revealLine 1.5s var(--ease) forwards;
  max-width:22ch;
}
.rline--small{
  font-size:clamp(1rem, 4.2vw, 1.28rem);
  font-family:var(--sans);
  font-weight:300;
  letter-spacing:.1em;
  color:rgba(251,244,234,.86);
  max-width:30ch;
}
.rline--message{
  font-family:var(--serif);
  font-style:italic;
  font-size:clamp(1.1rem, 4.6vw, 1.5rem);
  line-height:1.62;
  color:#FFF8EE;
  max-width:26ch;
  white-space:pre-line;
  text-shadow:0 2px 30px rgba(10,6,16,.7);
}
.rline--sign{
  font-size:clamp(.74rem, 3.2vw, .86rem);
  letter-spacing:.24em;
  text-transform:uppercase;
  color:rgba(224,200,142,.92);
  font-family:var(--sans);
  font-weight:400;
}

@keyframes revealLine{
  to{ opacity:1; transform:translateY(0); }
}

.reveal-quote{
  max-width:44ch;
  opacity:0;
  animation:revealLine 1.6s var(--ease) forwards;
  padding:22px 20px;
  border-top:1px solid rgba(224,200,142,.22);
  border-bottom:1px solid rgba(224,200,142,.22);
  transition:opacity .8s var(--ease);
}
.quote-text{
  font-family:var(--serif);
  font-style:italic;
  font-size:clamp(.98rem, 4vw, 1.18rem);
  line-height:1.68;
  color:rgba(255,248,238,.92);
  margin:0 0 12px;
  min-height:3.4em;
  transition:opacity .5s var(--ease);
}
.quote-author{
  font-size:.72rem;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:rgba(224,200,142,.8);
  margin:0;
  transition:opacity .5s var(--ease);
}
.quote-text.fading, .quote-author.fading{ opacity:0; }

.reveal-sign{
  opacity:0;
  animation:revealLine 1.6s var(--ease) forwards;
}

.reveal-actions{
  opacity:0;
  animation:revealLine 1.6s var(--ease) forwards;
}

/* ============================================================
   LETTER
   ============================================================ */
#screen-letter{
  align-items:center;
  justify-content:center;
  padding:24px;
  overflow-y:auto;
}

.letter-scene{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:32px;
  transition:opacity .7s var(--ease), transform .7s var(--ease);
}
.letter-scene.is-hidden{
  opacity:0;
  transform:scale(.94);
  pointer-events:none;
  position:absolute;
}

.envelope{
  position:relative;
  width:min(78vw, 300px);
  aspect-ratio:1.55/1;
  cursor:pointer;
  perspective:900px;
  filter:drop-shadow(0 24px 44px rgba(59,47,42,.20));
  transition:transform .5s var(--ease);
}
.envelope:hover{ transform:translateY(-6px); }

.env-back{
  position:absolute; inset:0;
  border-radius:10px;
  background:linear-gradient(155deg, #F3E4D6, #E6D0BE);
  box-shadow:inset 0 0 0 1px rgba(59,47,42,.08);
}

.env-letter-peek{
  position:absolute;
  left:6%; right:6%;
  bottom:6%;
  height:82%;
  border-radius:6px;
  background:linear-gradient(180deg,#FFFDF8,#FBF4E8);
  box-shadow:0 -3px 12px rgba(59,47,42,.10);
  transition:transform .8s var(--ease) .25s;
}
.envelope.is-open .env-letter-peek{
  transform:translateY(-42%);
}

.env-front{
  position:absolute; inset:0;
  border-radius:10px;
  background:linear-gradient(155deg, #F7EADC 0%, #EBD6C4 100%);
  clip-path:polygon(0 0, 0 100%, 100% 100%, 100% 0, 50% 54%);
  box-shadow:inset 0 0 0 1px rgba(59,47,42,.07);
}

.env-flap{
  position:absolute;
  left:0; right:0; top:0;
  height:62%;
  background:linear-gradient(180deg, #F0DFCF, #E2CBB6);
  clip-path:polygon(0 0, 100% 0, 50% 100%);
  border-radius:10px 10px 0 0;
  transform-origin:top center;
  transition:transform .8s var(--ease);
  z-index:3;
  box-shadow:0 3px 10px rgba(59,47,42,.10);
}
.envelope.is-open .env-flap{
  transform:rotateX(-172deg);
}

.env-seal{
  position:absolute;
  left:50%; top:52%;
  transform:translate(-50%,-50%);
  width:44px; height:44px;
  border-radius:50%;
  background:radial-gradient(circle at 35% 30%, #C08B84, #8E5B55);
  color:rgba(255,245,238,.92);
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:1.05rem;
  z-index:4;
  box-shadow:0 3px 10px rgba(59,47,42,.22), inset 0 1px 0 rgba(255,255,255,.3);
  transition:opacity .4s var(--ease), transform .5s var(--ease);
}
.envelope.is-open .env-seal{
  opacity:0;
  transform:translate(-50%,-50%) scale(.5);
}

.letter-card{
  width:100%;
  max-width:560px;
  animation:riseIn .9s var(--ease) both;
}
.letter-card[hidden]{ display:none; }

.letter-paper{
  position:relative;
  border-radius:var(--radius-lg);
  padding:clamp(28px, 7vw, 52px) clamp(22px, 6vw, 48px);
  background:
    linear-gradient(180deg, rgba(255,255,255,.92), rgba(253,248,240,.96));
  border:1px solid rgba(255,255,255,.9);
  box-shadow:var(--shadow-lg);
  overflow:hidden;
}
.letter-paper::before{
  content:"";
  position:absolute; inset:0;
  background:
    repeating-linear-gradient(180deg, transparent 0 33px, rgba(59,47,42,.035) 33px 34px);
  pointer-events:none;
  opacity:.6;
}

.letter-lines{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:18px;
}
.lline{
  font-family:var(--hand);
  font-size:clamp(1.18rem, 4.8vw, 1.5rem);
  line-height:1.55;
  color:#3E312B;
  opacity:0;
  transform:translateY(10px);
  animation:letterLine 1s var(--ease) forwards;
  margin:0;
  white-space:pre-line;
}
.lline--opening{
  font-family:var(--serif);
  font-size:clamp(1.3rem, 5vw, 1.7rem);
  letter-spacing:.01em;
  color:var(--brown);
}
@keyframes letterLine{
  to{ opacity:1; transform:translateY(0); }
}

.letter-sign{
  margin-top:34px;
  text-align:right;
  font-family:var(--hand);
  font-size:clamp(1.3rem, 5.4vw, 1.75rem);
  color:var(--brown);
  opacity:0;
  animation:letterLine 1.2s var(--ease) forwards;
}

.letter-back{
  display:block;
  margin:22px auto 0;
}

/* ============================================================
   OVERLAY
   ============================================================ */
.overlay{
  position:fixed;
  inset:0;
  z-index:60;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:rgba(43,35,32,.28);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  opacity:0;
  transition:opacity .55s var(--ease);
}
.overlay[hidden]{ display:none; }
.overlay.is-shown{ opacity:1; }

.overlay-card{
  width:100%;
  max-width:400px;
  padding:38px 28px 32px;
  border-radius:var(--radius-lg);
  background:linear-gradient(170deg, rgba(255,252,247,.98), rgba(250,242,234,.98));
  border:1px solid rgba(255,255,255,.9);
  box-shadow:var(--shadow-lg);
  text-align:center;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:14px;
  transform:translateY(20px) scale(.96);
  opacity:0;
  transition:transform .6s var(--ease), opacity .6s var(--ease);
}
.overlay.is-shown .overlay-card{
  transform:translateY(0) scale(1);
  opacity:1;
}

.overlay-mark{
  display:flex;
  gap:7px;
  margin-bottom:4px;
}
.overlay-mark span{
  width:7px; height:7px;
  border-radius:50%;
  background:var(--gold);
  opacity:.35;
  animation:markDot 1.5s ease-in-out infinite;
}
.overlay-mark span:nth-child(2){ animation-delay:.18s; }
.overlay-mark span:nth-child(3){ animation-delay:.36s; }
@keyframes markDot{
  0%,100%{ opacity:.28; transform:scale(1); }
  50%{ opacity:1; transform:scale(1.28); }
}

.overlay-title{
  font-family:var(--serif);
  font-weight:400;
  font-size:clamp(1.5rem, 6vw, 1.95rem);
  line-height:1.25;
  color:var(--brown);
  margin:0;
  letter-spacing:-.005em;
}
.overlay-text{
  font-size:.9rem;
  font-weight:300;
  line-height:1.7;
  color:var(--brown-mid);
  margin:0;
  max-width:30ch;
}
.overlay-text:empty{ display:none; }

/* ============================================================
   POPOVERS
   ============================================================ */
.popover{
  position:fixed;
  z-index:70;
  left:50%;
  bottom:calc(env(safe-area-inset-bottom) + 78px);
  transform:translate(-50%, 12px);
  width:min(92vw, 380px);
  border-radius:var(--radius);
  background:rgba(255,252,247,.97);
  backdrop-filter:blur(20px);
  -webkit-backdrop-filter:blur(20px);
  border:1px solid rgba(255,255,255,.9);
  box-shadow:var(--shadow-lg);
  padding:18px;
  opacity:0;
  transition:opacity .4s var(--ease), transform .4s var(--ease);
}
.popover[hidden]{ display:none; }
.popover.is-shown{ opacity:1; transform:translate(-50%, 0); }

.popover--menu{
  left:16px;
  transform:translate(0, 12px);
  bottom:auto;
  top:calc(env(safe-area-inset-top) + 66px);
  width:min(78vw, 280px);
}
.popover--menu.is-shown{ transform:translate(0,0); }

.popover-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  margin-bottom:12px;
  font-size:.68rem;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--brown-soft);
}
.popover-close{
  border:none;
  background:none;
  font-size:1.3rem;
  line-height:1;
  color:var(--brown-soft);
  cursor:pointer;
  padding:0 4px;
  border-radius:6px;
}
.popover-close:hover{ color:var(--brown); }

.popover-body{
  display:flex;
  flex-direction:column;
  gap:10px;
  max-height:44vh;
  overflow-y:auto;
}
.hint-item{
  display:flex;
  gap:10px;
  font-size:.85rem;
  line-height:1.6;
  color:var(--brown-mid);
  animation:riseIn .5s var(--ease) both;
}
.hint-item .hint-num{
  flex:0 0 auto;
  width:20px; height:20px;
  border-radius:50%;
  background:rgba(194,161,94,.18);
  color:var(--gold);
  font-size:.66rem;
  display:flex;
  align-items:center;
  justify-content:center;
  font-weight:600;
  margin-top:1px;
}
.hint-empty{
  font-size:.85rem;
  color:var(--brown-soft);
  font-style:italic;
}
.popover-more{ width:100%; margin-top:14px; }

.menu-item{
  width:100%;
  text-align:left;
  padding:13px 16px;
  border-radius:12px;
  border:1px solid rgba(59,47,42,.08);
  background:rgba(255,255,255,.6);
  font-size:.86rem;
  color:var(--brown-mid);
  cursor:pointer;
  transition:all .25s var(--ease);
}
.menu-item:hover{
  background:#fff;
  border-color:rgba(194,161,94,.4);
  color:var(--brown);
}
.menu-item--danger:hover{
  border-color:rgba(200,90,80,.4);
  color:#A8503F;
}

/* ============================================================
   FADE LAYER
   ============================================================ */
.fade-layer{
  position:fixed;
  inset:0;
  z-index:80;
  background:var(--ivory);
  opacity:0;
  pointer-events:none;
  transition:opacity .5s var(--ease);
}
.fade-layer.is-on{ opacity:1; pointer-events:auto; }

/* ============================================================
   TOAST
   ============================================================ */
.toast{
  position:fixed;
  left:50%;
  bottom:calc(env(safe-area-inset-bottom) + 100px);
  transform:translate(-50%, 14px);
  z-index:90;
  padding:12px 22px;
  border-radius:100px;
  background:rgba(59,47,42,.92);
  color:#FBF4EA;
  font-size:.8rem;
  letter-spacing:.05em;
  opacity:0;
  pointer-events:none;
  transition:opacity .4s var(--ease), transform .4s var(--ease);
  backdrop-filter:blur(10px);
  white-space:nowrap;
  max-width:88vw;
  overflow:hidden;
  text-overflow:ellipsis;
}
.toast.is-shown{ opacity:1; transform:translate(-50%, 0); }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (min-width:720px){
  .stage{ max-width:700px; }
  .sp-frame{ width:min(60vw, 400px); }
  .pipe-grid{ width:min(58vw, 400px); }
  .lo-grid{ width:min(50vw, 350px); }
  .laser-frame{ width:min(56vw, 420px); }
  .bf-board{ width:min(46vw, 280px); }
  .bf-ghost .bf-pcell{ width:52px; height:52px; }
  .maze-frame{ width:min(58vw, 420px); }
  .hunt-field{ width:min(56vw, 420px); }
  .ring-stage{ width:min(52vw, 380px); }
  .arrange-circle{ width:min(52vw, 400px); }
}

@media (max-height:620px) and (orientation:landscape){
  .landing-mark{ width:74px; height:74px; margin-bottom:14px; }
  .landing-sub{ margin-bottom:24px; }
  .hud{ padding-top:calc(env(safe-area-inset-top) + 6px); padding-bottom:6px; }
}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
  .bg-glow{ animation:none; }
  .landing-mark{ animation:none; }
  .rline, .lline{ opacity:1 !important; transform:none !important; }
  }
