:root {
  --ink: #08090d;        /* soot black */
  --night: #111827;      /* London fog at night */
  --panel: #1c1a1f;      /* dark counting-house wood */
  --cream: #f4ecd8;      /* main text */
  --paper: #ece0bf;      /* ledger parchment, letters */
  --brass: #b8913f;      /* door knockers, cash-box fittings */
  --gold: #e8c065;       /* candle gold, gilt */
  --ember: #ff9a3a;      /* firelight */
  --holly: #2f6b3a;      /* holly leaves, the Ghost's robe */
  --berry: #b3202a;      /* holly berries, red ribbon */
  --frost: #cfe6f2;      /* window frost, snow */
  --ghost: #9fd8ec;      /* the silvery light of Christmas Past */
  --muted: #8f897d;
  --font-display: 'IM Fell English SC', 'Georgia', serif;
  --font-body: 'EB Garamond', Georgia, serif;
  --font-type: 'IM Fell DW Pica', 'Georgia', serif;
}
* { 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: radial-gradient(ellipse at 50% 25%, #2e2a2a 0%, var(--panel) 55%, #0b0a0c 100%);
  border: 3px solid var(--brass);
  border-radius: 14px;
  box-shadow: 0 0 0 6px #17120e, 0 0 50px rgba(232, 192, 101, .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 */
.carol-btn {
  background: linear-gradient(#3a6e45, #1d4127);
  color: var(--cream);
  border: 1px solid var(--gold);
  border-radius: 8px;
  padding: .45em 1.1em;
  font-family: var(--font-display);
  font-size: 1.08rem;
  letter-spacing: .02em;
  box-shadow: 0 3px 0 #0e2214, inset 0 1px 0 rgba(255,255,255,.2);
  transition: transform .08s, box-shadow .2s, color .2s;
}
.carol-btn:hover { color: #fff; box-shadow: 0 3px 0 #0e2214, 0 0 14px rgba(232, 192, 101, .6); }
.carol-btn:active { transform: translateY(2px); box-shadow: 0 1px 0 #0e2214; }
.carol-btn:disabled { opacity: .5; cursor: default; }
.carol-btn.small { padding: .28em .8em; font-size: .95rem; }
.carol-btn.big { font-size: 1.3rem; padding: .6em 1.6em; }
.carol-input {
  background: #110f10; color: var(--cream); border: 1px solid var(--brass); border-radius: 6px;
  padding: .5em .7em; font-family: var(--font-type); font-size: 1.1rem; letter-spacing: .08em;
  outline: none;
}
.carol-input:focus { border-color: var(--gold); box-shadow: 0 0 10px rgba(232,192,101,.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); }
}
