/* ============================================================================
   Eukhora — eukhora.com
   Written against design/WEBSITE_PLAN.md §6b in the game repo.

   THE RULE THIS FILE EXISTS TO KEEP: "dark mode with glowing accents" is itself
   a named AI-slop tell, and this site is dark with a warm accent. So the accent
   NEVER GLOWS. There is no box-shadow halo, no drop-shadow filter, no radial
   bloom, and no gradient anywhere in this stylesheet. A lantern in a night
   garden is warm and dim, not neon.

   Other rules held here, each one a named tell being avoided:
     - radius is 0 or 2px, never more
     - three surface levels, depth by VALUE not by border+shadow
     - never #000 (halation; worse for the ~30-60% with astigmatism)
     - no purple/indigo anywhere
     - section padding deliberately varies; monotonous rhythm is a tell
     - amber appears at most four times on the page
   ========================================================================= */

:root {
  /* Three surfaces, no more. Pushed blue-green for a night garden. */
  --base:    #0E1214;
  --raised:  #161B1D;
  --high:    #1E2426;

  /* Text. Not pure white — softens halation on a dark ground.
     Body clears AA with headroom; secondary targets ~7:1 rather than the 4.5
     floor, because dark mode eats apparent contrast and 4.5 reads muddy. */
  --ink:     #E8EAED;
  --ink-2:   #A8B2B4;
  --ink-3:   #7C8688;

  /* THE ONE ACCENT. Desaturated and darkened from the in-game lantern value:
     a saturated accent that behaves at 10% coverage on light BURNS on dark. */
  --amber:   #C8913F;
  --amber-i: #E0A855;   /* interaction only */

  /* Signage only — small caps labels. Never a button, never a heading. */
  --mint:    #6FA88C;

  --rule:    #2B3336;   /* hairlines */
  --rule-2:  #3E4A4D;   /* >=3:1 for input borders — the rule most dark sites break */

  --measure: 66ch;
}

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

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--base);
  color: var(--ink);
  /* Fraunces/Plex are self-hosted once the WOFF2 files are added (see README).
     Until then this degrades to a serviceable serif/sans rather than to Inter. */
  font-family: "IBM Plex Sans", ui-sans-serif, "Helvetica Neue", Arial, sans-serif;
  font-size: 18px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; height: auto; display: block; }

a { color: var(--ink); text-decoration-color: var(--rule-2); text-underline-offset: 3px; }
a:hover { color: var(--amber-i); }                       /* amber use 1 of 4 */
a:focus-visible, button:focus-visible, input:focus-visible {
  outline: 2px solid var(--amber-i);
  outline-offset: 2px;
}

/* Type scale. The 40 -> 132 discontinuity is deliberate: a clean 1.25 ratio all
   the way up IS the flat-hierarchy tell. */
.h2 {
  font-family: "Fraunces", ui-serif, Georgia, serif;
  font-size: clamp(30px, 4.2vw, 40px);
  line-height: 1.15;
  letter-spacing: -0.015em;
  font-weight: 600;
  margin: 0 0 1rem;
}
.h3 {
  font-family: "Fraunces", ui-serif, Georgia, serif;
  font-size: 26px; line-height: 1.3; font-weight: 600;
  margin: 0 0 .5rem;
}
p { max-width: var(--measure); margin: 0 0 1.1rem; }

.tick {
  display: block;
  font-size: 12px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--mint);                                     /* signage only */
  margin-bottom: .35rem;
}
.aside { color: var(--ink-2); font-size: 16px; }

/* ---------------------------------------------------------------- hero
   NOT the centered badge/headline/subhead/two-buttons stack. The world image
   is the page's first argument; the form sits low-left over it. */
.hero { position: relative; min-height: 88vh; display: flex; align-items: flex-end; }
.hero__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* A flat scrim, not a gradient — gradients are on the tell list. Two stacked
   flat layers give the falloff without one. */
.hero__veil {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(14,18,20,.94) 0%, rgba(14,18,20,.86) 28%, rgba(14,18,20,.25) 62%, rgba(14,18,20,.35) 100%);
}
.hero__body { position: relative; padding: 0 6vw 7vh; width: min(680px, 92vw); }

.wordmark {
  font-family: "Fraunces", ui-serif, Georgia, serif;
  font-variation-settings: "WONK" 1, "SOFT" 0;
  font-size: clamp(56px, 8vw, 132px);
  line-height: .95;
  letter-spacing: -0.03em;
  font-weight: 600;
  margin: 0 0 .5rem;
}
.hero__line { font-size: 22px; line-height: 1.5; color: var(--ink); margin-bottom: 2rem; }

/* ---------------------------------------------------------------- signup */
.signup__label {
  display: block; font-size: 12px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--ink-2); margin-bottom: .6rem;
}
.signup__row { display: flex; gap: 8px; max-width: 480px; }
.signup__input {
  flex: 1; min-width: 0;
  background: var(--raised);
  border: 1px solid var(--rule-2);                        /* >=3:1 */
  border-radius: 2px;
  color: var(--ink);
  font: inherit; font-size: 17px;
  padding: 13px 14px;
}
.signup__input::placeholder { color: var(--ink-3); }
.signup__go {
  background: var(--amber);                               /* amber use 2 of 4 */
  color: #17120A;
  border: 0; border-radius: 2px;
  font: inherit; font-weight: 600; font-size: 16px;
  padding: 13px 22px;
  cursor: pointer;
  transition: background 140ms ease;                      /* eased, not bouncy */
}
.signup__go:hover { background: var(--amber-i); }
.signup__go[disabled] { opacity: .55; cursor: default; }
.signup__note { font-size: 14px; color: var(--ink-3); margin: .7rem 0 0; }
.signup__msg { font-size: 15px; color: var(--mint); margin: .5rem 0 0; min-height: 1.2em; }
.signup__msg[data-err] { color: #E08A7A; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }

/* ---------------------------------------------------------------- sections
   Padding varies on purpose (96 / 200 / 56 rhythm), keyed to content weight.
   Content sits off-centre and moves between sections; nothing is centred. */
section { padding-inline: 6vw; }

.what { padding-block: 120px 96px; max-width: 1200px; }
.what .lede { font-size: 22px; line-height: 1.5; }

.places { padding-block: 56px 140px; }
.place--wide { margin: 0 0 40px; max-width: 1100px; }
.place--wide img { border-radius: 2px; }
.place figcaption { color: var(--ink-2); font-size: 16px; margin-top: .8rem; max-width: 60ch; }
.place-list {
  display: grid; gap: 28px 48px;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  max-width: 1100px;
  margin-left: 8%;                                        /* deliberate offset */
}
.place-item { color: var(--ink-2); font-size: 16px; border-top: 1px solid var(--rule); padding-top: .8rem; }

.battles { padding-block: 200px 120px; background: var(--raised); }
.battles__cols {
  display: grid; gap: 56px;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  max-width: 980px; margin-bottom: 64px;
}
.rules { max-width: 760px; margin: 0; margin-left: auto; }  /* pushed right */
.rules dt {
  font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--amber);                                    /* amber use 3 of 4 */
  margin-top: 1.6rem;
}
.rules dd { margin: .4rem 0 0; color: var(--ink-2); max-width: 62ch; }

.together { padding-block: 120px 88px; max-width: 780px; }

.status { padding-block: 56px 120px; max-width: 900px; }
.status__list { list-style: none; padding: 0; margin: 0; }
.status__list li {
  border-top: 1px solid var(--rule);
  padding: 1rem 0; color: var(--ink-2); max-width: 70ch;
}
.status__list span {
  display: inline-block; min-width: 108px;
  font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
}
.ok  { color: var(--mint); }
.wip { color: var(--ink-3); }
.no  { color: #C08070; }

.closer {
  padding-block: 96px; border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.closer__line { font-family: "Fraunces", ui-serif, Georgia, serif; font-size: clamp(26px, 3.4vw, 36px); line-height: 1.2; }
.closer__go {
  display: inline-block; margin-top: 1rem;
  border: 1px solid var(--amber);                         /* amber use 4 of 4 */
  border-radius: 2px; padding: 12px 24px;
  text-decoration: none; font-weight: 600;
}
.closer__go:hover { background: var(--amber); color: #17120A; }

.press { padding-block: 120px 88px; max-width: 900px; }
.facts { display: grid; grid-template-columns: 150px 1fr; gap: .5rem 1.5rem; margin: 1.5rem 0 2.5rem; max-width: 640px; }
.facts dt { color: var(--ink-3); font-size: 14px; }
.facts dd { margin: 0; }
.quotable { border-left: 1px solid var(--rule-2); padding-left: 1.2rem; color: var(--ink); }
.link { color: var(--ink-2); font-size: 15px; }

.foot { padding: 56px 6vw 72px; border-top: 1px solid var(--rule); color: var(--ink-3); font-size: 15px; }
.foot p { margin: 0 0 .4rem; }

@media (max-width: 700px) {
  body { font-size: 17px; }
  .place-list { margin-left: 0; }
  .rules { margin-left: 0; }
  .battles { padding-block: 96px 88px; }
  .what { padding-block: 72px 64px; }
  .signup__row { flex-wrap: wrap; }
  .signup__go { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
}
