@import url('https://fonts.googleapis.com/css2?family=Courier+Prime:ital,wght@0,400;0,700;1,400;1,700&display=swap');

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  /* Base tokens */
  --yellow:       #FFD400;
  --yellow-dark:  #D4A900;
  --teal:         #1B998B;
  --teal-light:   rgba(27,153,139,0.12);
  --pink:         #CC3366;
  --hot-pink:     #FE00C1;
  --dark:         #33373D;
  --darker:       #2A2A2A;
  --near-black:   #111111;
  --body-text:    #333333;
  --mid-text:     #444444;
  --light-text:   #888888;
  --white:        #FFFFFF;
  --off-white:    #F8F7F2;
  --border:       #DDDDDD;

  --font: 'Courier Prime', 'Courier New', monospace;

  --shadow-offset: -3px 3px 0px 0px rgba(0,0,0,0.45);
  --shadow-offset-lg: -5px 5px 0px 0px rgba(0,0,0,0.45);

  --radius-sm: 2px;
  --radius: 3px;
  --radius-md: 6px;

  /* Theme overrides — set by per-adventure theme */
  --theme-primary:     var(--yellow);
  --theme-secondary:   var(--teal);
  --theme-surface:     var(--white);
  --theme-text:        var(--near-black);
}

html, body {
  height: 100%;
  overflow-x: hidden;
}

body {
  font-family: var(--font);
  background: var(--off-white);
  color: var(--body-text);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

#root {
  min-height: 100%;
  display: flex;
  flex-direction: column;
}

/* ─── Crossword BG ─── */
.crossword-bg-dark {
  background-color: #3A3A3A;
  background-image:
    linear-gradient(rgba(255,255,255,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.06) 1px, transparent 1px);
  background-size: 36px 36px;
}
.crossword-bg-light {
  background-color: #E8E5DC;
  background-image:
    linear-gradient(rgba(0,0,0,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,0,0,0.06) 1px, transparent 1px);
  background-size: 36px 36px;
}

/* ─── Buttons ─── */
.btn {
  display: inline-block;
  font-family: var(--font);
  font-size: 15px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding: 12px 28px;
  border-radius: var(--radius);
  text-decoration: none;
  cursor: pointer;
  border: 2px solid transparent;
  transition: transform 0.1s, box-shadow 0.1s;
  -webkit-tap-highlight-color: transparent;
}
.btn:active { transform: translate(3px, -3px); box-shadow: none !important; }
.btn-primary {
  background: var(--theme-primary);
  color: var(--near-black);
  border-color: var(--near-black);
  box-shadow: var(--shadow-offset);
}
.btn-secondary {
  background: var(--near-black);
  color: var(--white);
  border-color: var(--near-black);
  box-shadow: var(--shadow-offset);
}
.btn-teal {
  background: var(--teal);
  color: var(--white);
  border-color: var(--teal);
  box-shadow: var(--shadow-offset);
}
.btn-outline {
  background: transparent;
  color: var(--near-black);
  border-color: var(--near-black);
  box-shadow: var(--shadow-offset);
}
.btn-full { display: block; width: 100%; text-align: center; }
.btn-lg { font-size: 17px; padding: 16px 36px; }

/* ─── Cards ─── */
.card {
  background: var(--white);
  border: 2px solid var(--near-black);
  border-radius: var(--radius);
  padding: 24px;
  box-shadow: var(--shadow-offset-lg);
}

/* ─── Inputs ─── */
.input {
  display: block; width: 100%;
  font-family: var(--font); font-size: 15px; color: var(--near-black);
  background: var(--white);
  border: 2px solid var(--near-black);
  border-radius: var(--radius);
  padding: 10px 14px;
  outline: none;
  transition: box-shadow 0.15s;
}
.input:focus { box-shadow: var(--shadow-offset); }
.input::placeholder { color: var(--light-text); }

/* ─── Tiles ─── */
.tile {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px;
  background: var(--theme-primary);
  border: 2px solid var(--near-black);
  box-shadow: var(--shadow-offset);
  font-family: var(--font);
  font-size: 20px; font-weight: 700;
  color: var(--near-black);
  text-transform: uppercase;
  flex-shrink: 0;
}
.tile-word { display: flex; gap: 3px; flex-wrap: wrap; }

/* ─── Badge ─── */
.badge {
  display: inline-block;
  font-family: var(--font); font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.5px;
  padding: 3px 8px;
  border-radius: var(--radius-sm);
  border: 1.5px solid transparent;
}
.badge-teal { background: var(--teal); color: var(--white); }
.badge-yellow { background: var(--yellow); color: var(--near-black); border-color: var(--near-black); }

/* ─── Progress bar ─── */
.progress-bar-outer {
  height: 10px; background: rgba(0,0,0,0.1);
  border-radius: 5px; overflow: hidden; border: 1.5px solid var(--near-black);
}
.progress-bar-fill { height: 100%; background: var(--theme-primary); border-radius: 3px; transition: width 0.5s ease; }

/* ─── Toast ─── */
.toast {
  display: flex; align-items: flex-start; gap: 12px;
  background: var(--white); border: 2px solid var(--near-black);
  border-radius: var(--radius); padding: 16px 20px;
  box-shadow: var(--shadow-offset);
}

/* ─── Animations ─── */
@keyframes stepIn {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}
.step-enter { animation: stepIn 0.4s ease forwards; }

@keyframes correctFlash {
  0%   { background: var(--theme-primary); }
  50%  { background: var(--teal); }
  100% { background: var(--theme-primary); }
}
.correct-flash { animation: correctFlash 0.6s ease; }

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20%, 60% { transform: translateX(-6px); }
  40%, 80% { transform: translateX(6px); }
}
.shake { animation: shake 0.4s ease; }

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.5; }
}
.pulse { animation: pulse 1s ease infinite; }

/* ─── Safe area ─── */
.safe-bottom { padding-bottom: max(16px, env(safe-area-inset-bottom)); }
.safe-top    { padding-top: max(16px, env(safe-area-inset-top)); }
