:root {
  --ink: #0e0a07;        /* lamp-black */
  --night: #141a2e;      /* prairie night sky */
  --panel: #2a1d14;      /* weathered plank wood */
  --cream: #f4e8d0;      /* main text */
  --paper: #ecdcb4;      /* wanted posters, ledgers, telegrams */
  --brass: #d6a34a;      /* star badge, lamp brass, highlights */
  --rust: #b0472a;       /* barn red, rust, warnings */
  --sage: #8fa37a;       /* sagebrush green */
  --dawn: #f08a4b;       /* the sunrise that's coming */
  --star: #fff4c8;       /* lamplight / starlight */
  --leather: #6b4226;    /* saddle leather */
  --muted: #9c8c78;
  --font-display: 'Rye', 'Georgia', serif;
  --font-body: 'Spectral', Georgia, serif;
  --font-type: 'Special Elite', 'Courier New', monospace;
}
* { box-sizing: border-box; }
html, body { background: var(--ink); color: var(--cream); font-family: var(--font-body); }
button { font-family: inherit; cursor: pointer; }

/* Close-up panel that puzzles render into */
.modal-panel {
  position: relative;
  width: min(920px, 96vw);
  height: min(660px, 86vh);
  background:
    repeating-linear-gradient(90deg, rgba(0,0,0,0) 0 118px, rgba(0,0,0,.22) 118px 121px),
    radial-gradient(ellipse at 50% 25%, #4a3424 0%, var(--panel) 55%, #120c08 100%);
  border: 3px solid #8a6a3a;
  border-radius: 10px;
  box-shadow: 0 0 0 6px #1a120c, 0 0 50px rgba(240, 138, 75, .18), inset 0 0 80px rgba(0,0,0,.6);
  overflow: hidden;
}
.puzzle-root { position: absolute; inset: 0; overflow: auto; }

/* Shared helpers puzzles may use */
.west-btn {
  background: linear-gradient(#8a5a32, #4e2f18);
  color: var(--cream);
  border: 1px solid #d6a34a;
  border-radius: 6px;
  padding: .5em 1.1em;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 1.02rem;
  letter-spacing: .02em;
  box-shadow: 0 3px 0 #23140a, inset 0 1px 0 rgba(255,255,255,.2);
  transition: transform .08s, box-shadow .2s, color .2s;
}
.west-btn:hover { color: #fff; box-shadow: 0 3px 0 #23140a, 0 0 14px rgba(214, 163, 74, .6); }
.west-btn:active { transform: translateY(2px); box-shadow: 0 1px 0 #23140a; }
.west-btn:disabled { opacity: .5; cursor: default; }
.west-btn.small { padding: .3em .8em; font-size: .95rem; }
.west-btn.big { font-size: 1.3rem; padding: .6em 1.6em; }
.west-input {
  background: #140e09; color: var(--cream); border: 1px solid #8a6a3a; border-radius: 4px;
  padding: .5em .7em; font-family: var(--font-type); font-size: 1.05rem; letter-spacing: .08em;
  outline: none;
}
.west-input:focus { border-color: var(--brass); box-shadow: 0 0 10px rgba(214,163,74,.45); }
.shake { animation: shake .45s; }
@keyframes shake {
  10%, 90% { transform: translateX(-2px); } 20%, 80% { transform: translateX(4px); }
  30%, 50%, 70% { transform: translateX(-8px); } 40%, 60% { transform: translateX(8px); }
}
