/* Alenya's Guides - site styles
   ---------------------------------------------------------------------------
   Plain CSS. No build step, no framework. Every colour on the site comes from
   the custom properties below, so a skin change is one attribute on <html>.
   The four skins are the same four that ship in the addon.
*/

:root,
[data-skin="parchment"] {
  --bg: #16130d;
  --panel: #211a10;
  --rim: #6b5224;
  --text: #d2bd95;
  --acc: #f0cc6a;
  --cur: #3a2c10;
}

[data-skin="slate"] {
  --bg: #101519;
  --panel: #172029;
  --rim: #37505e;
  --text: #bcccd4;
  --acc: #8fd6e6;
  --cur: #173039;
}

[data-skin="crimson"] {
  --bg: #181010;
  --panel: #231413;
  --rim: #7a2a22;
  --text: #dbbab4;
  --acc: #d8422e;
  --cur: #3c1511;
}

/* The Class skin takes its accent from a CSS variable that the skin script
   rewrites as you cycle through the nine classes. */
[data-skin="class"] {
  --bg: #131313;
  --panel: #1c1c1c;
  --rim: var(--class-hex, #c79c6e);
  --text: #cfcfcf;
  --acc: var(--class-hex, #c79c6e);
  --cur: var(--class-cur, #2b2119);
}

:root {
  /* Headings stay the same warm off-white in every skin. */
  --head: #f2ead9;
  --display: Georgia, "Times New Roman", serif;
  --body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --wrap: 1160px;
  --pad: 48px;
  color-scheme: dark;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--body);
  font-size: 15px;
  line-height: 1.6;
  -webkit-text-size-adjust: 100%;
}

a { color: var(--acc); text-decoration: none; }
a:hover { text-decoration: underline; }
::selection { background: var(--cur); }

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

/* height:auto is load-bearing. The images carry width and height attributes so
   the page does not jump about while they load, but once CSS overrides the
   width those attributes go on supplying the height, and the picture gets
   stretched. Every screenshot on the page was squashed until this was here. */
img { max-width: 100%; height: auto; }

h1, h2, h3 {
  font-family: var(--display);
  color: var(--head);
  font-weight: 400;
  margin: 0;
  line-height: 1.15;
}

.wrap {
  max-width: var(--wrap);
  margin: 0 auto;
  padding-left: var(--pad);
  padding-right: var(--pad);
}

.skip {
  position: absolute;
  left: -9999px;
}
.skip:focus {
  left: 12px;
  top: 12px;
  z-index: 50;
  background: var(--acc);
  color: var(--bg);
  padding: 10px 16px;
  border-radius: 3px;
}

/* ---------------------------------------------------------------- nav ---- */

.nav {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 16px var(--pad);
  background: color-mix(in srgb, var(--bg) 87%, transparent);
  backdrop-filter: blur(6px);
  border-bottom: 1px solid color-mix(in srgb, var(--rim) 27%, transparent);
}

.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--display);
  font-size: 17px;
  color: var(--acc);
}
.brand:hover { text-decoration: none; }

.brand img {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  transform: scaleX(-1);
  box-shadow: 0 0 0 1px var(--rim);
}

.nav-links {
  display: flex;
  align-items: center;
  gap: 28px;
  font-size: 14px;
}
/* :not(.btn) matters here. Without it this rule outranks .btn on specificity
   and paints the "Get the addon" label gold on a gold background. */
.nav-links a:not(.btn) { color: var(--text); }

/* The announcement strip under the nav (design of 2026-09-17). One line,
   the whole strip is the link, wraps to two lines on a phone. */
.strip {
  display: block;
  background: linear-gradient(90deg, var(--acc), color-mix(in srgb, var(--acc) 80%, transparent));
  color: var(--bg);
  text-decoration: none;
}
.strip:hover { text-decoration: none; filter: brightness(1.05); }
.strip-inner {
  max-width: var(--wrap);
  margin: 0 auto;
  padding: 11px var(--pad);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  flex-wrap: wrap;
  text-align: center;
  font-size: 13.5px;
  font-weight: 600;
}
.strip-new {
  font-size: 11px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  font-weight: 800;
  background: var(--bg);
  color: var(--acc);
  padding: 3px 9px;
  border-radius: 100px;
}
.strip-cta { font-size: 13px; font-weight: 700; text-decoration: underline; }

/* The "Now released" badge above the hero eyebrow. */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  letter-spacing: 1px;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--bg);
  background: var(--acc);
  padding: 6px 12px;
  border-radius: 100px;
  margin-bottom: 16px;
}
.badge::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--bg);
}

/* ------------------------------------------------------------- buttons --- */

.btn {
  display: inline-block;
  padding: 13px 26px;
  border-radius: 3px;
  font-size: 15px;
  font-weight: 600;
  background: var(--acc);
  color: var(--bg);
  border: 1px solid var(--acc);
  cursor: pointer;
  font-family: inherit;
}
.btn:hover { text-decoration: none; filter: brightness(1.08); }

.btn-ghost {
  background: transparent;
  color: var(--text);
  border: 1px solid var(--rim);
  font-weight: 400;
}
.btn-ghost:hover { border-color: var(--acc); color: var(--acc); }

.btn-sm { padding: 9px 18px; font-size: 14px; }

/* -------------------------------------------------------------- layout --- */

.section {
  padding-top: 60px;
  padding-bottom: 90px;
  border-top: 1px solid color-mix(in srgb, var(--rim) 20%, transparent);
}

.section > h2 { font-size: 32px; text-align: center; }

.lede {
  text-align: center;
  max-width: 600px;
  margin: 14px auto 0;
  font-size: 15px;
}

.muted { color: color-mix(in srgb, var(--text) 60%, transparent); }
.small { font-size: 12.5px; }

.panel {
  background: var(--panel);
  border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent);
  border-radius: 8px;
}

/* ---------------------------------------------------------------- hero --- */

.hero {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 64px;
  align-items: center;
  padding-top: 88px;
  padding-bottom: 100px;
}

.eyebrow {
  font-size: 13px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: var(--acc);
  margin-bottom: 18px;
}

.hero h1 { font-size: 52px; }

/* Named rather than ".hero p". A bare element selector inside a section
   outranks a plain class, so styling every paragraph in the hero silently
   overrode .eyebrow, .small and .caption and painted all four at lead size. */
.hero-lead {
  font-size: 17px;
  line-height: 1.7;
  max-width: 480px;
  margin: 22px 0 0;
}

.cta-row { display: flex; gap: 14px; margin-top: 34px; flex-wrap: wrap; }

/* Screenshots are fixed-pixel captures out of the game. They shrink to fit a
   narrow window, but they never grow past the size they were taken at, because
   an upscaled game screenshot just goes soft. The frame shrink-wraps the
   picture so no border is left hanging off the edge of it. */
.shot {
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid var(--rim);
  display: block;
  width: fit-content;
  max-width: 100%;
}
.shot img { display: block; width: auto; max-width: 100%; }

.hero-shot { box-shadow: 0 20px 60px -20px #000; }

.caption {
  font-size: 11.5px;
  color: color-mix(in srgb, var(--text) 47%, transparent);
  margin-top: 6px;
}

/* ------------------------------------------------------------ features --- */

.grid-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 22px;
  margin-top: 48px;
}

.card {
  border-radius: 8px;
  background: color-mix(in srgb, var(--panel) 33%, transparent);
  overflow: hidden;
}

.card figure {
  margin: 0;
  height: 150px;
  background: var(--bg);
  border-bottom: 1px solid color-mix(in srgb, var(--rim) 33%, transparent);
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Same rule in the feature cards: centred in the 150px band, never enlarged
   past its own size. The crops vary a lot in shape, so they are sized to fit
   rather than made to fill. */
.card figure img { width: auto; height: auto; max-width: 100%; max-height: 100%; }

.card .mono {
  font-family: var(--display);
  font-size: 38px;
  color: var(--acc);
}

.card-body { padding: 22px; }
.card-body h3 { font-family: var(--body); font-size: 15.5px; font-weight: 600; }
.card-body p { font-size: 13.5px; margin: 6px 0 0; }

/* The difficulty key sits under the guide-list shot: it describes how guides
   are coloured in the picker, not how individual steps are coloured. */
.legend-strip {
  margin-top: 28px;
  padding: 16px 20px;
  border-radius: 8px;
  background: color-mix(in srgb, var(--panel) 33%, transparent);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  flex-wrap: wrap;
  font-size: 12px;
}
.legend-strip span { display: inline-flex; align-items: center; gap: 6px; }
.dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  display: inline-block;
  flex: none;
}

/* --------------------------------------------------------------- model --- */

.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; margin-top: 48px; }

.model-card { display: block; padding: 26px 22px; color: inherit; }
.model-card:hover { text-decoration: none; border-color: var(--acc); }
.model-card h3 { font-size: 17px; color: var(--acc); }
.model-card p { font-size: 13.5px; margin: 10px 0 0; }
.model-card .tag {
  display: inline-block;
  margin-top: 14px;
  font-size: 11.5px;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--text) 60%, transparent);
}

/* --------------------------------------------------------------- skins --- */

.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin-top: 44px; }

.skin-card {
  cursor: pointer;
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent);
  background: var(--panel);
  padding: 0;
  text-align: left;
  color: inherit;
  font: inherit;
  display: block;
  width: 100%;
}
.skin-card[aria-pressed="true"] { border-color: var(--swatch); }
/* These two are spans inside a <button>, so they need making blocks before
   height and padding mean anything. */
.skin-card .swatch-bar { display: block; height: 64px; background: var(--swatch); }
.skin-card .skin-body { display: block; padding: 14px; }
.skin-card h3 { font-family: var(--body); font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.skin-card p { font-size: 12.5px; margin: 8px 0 0; min-height: 38px; line-height: 1.5; }
.skin-card .dot { width: 10px; height: 10px; background: var(--swatch); }

/* -------------------------------------------------------------- writer --- */

.split { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: center; }
.split h2 { font-size: 32px; text-align: left; }
.split > div > p:not(.caption):not(.small) { font-size: 15px; line-height: 1.7; }

.steps-list { list-style: none; margin: 26px 0 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.steps-list li { display: flex; align-items: center; gap: 14px; font-size: 14px; }
.steps-list .n {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 1px solid var(--acc);
  color: var(--acc);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  flex: none;
}
.steps-list b { color: var(--head); font-weight: 600; }

/* No width here: it is also a .shot, and it shrink-wraps its picture. */
.flip { padding: 0; border: 1px solid var(--rim); background: none; cursor: pointer; }

/* ------------------------------------------------------------- roadmap --- */

.roadmap { display: grid; grid-template-columns: repeat(5, 1fr); row-gap: 40px; margin-top: 52px; }
.roadmap li { list-style: none; text-align: center; }
.roadmap .dot { width: 13px; height: 13px; margin: 0 auto; border: 1px solid var(--rim); background: var(--acc); }
.roadmap .planned .dot { background: var(--panel); }
.roadmap .name { font-size: 13.5px; font-weight: 600; color: var(--head); margin-top: 14px; }
.roadmap .now .name { color: var(--acc); }
.roadmap .planned .name { color: color-mix(in srgb, var(--text) 60%, transparent); }
.roadmap .status { font-size: 11.5px; color: color-mix(in srgb, var(--text) 53%, transparent); margin-top: 4px; }

/* ----------------------------------------------------------- community --- */

.community {
  padding: 52px;
  border-radius: 10px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
}
.community h3 { font-size: 26px; }
.community p:not(.caption):not(.small) { font-size: 14px; margin: 10px 0 0; }

.signup { display: flex; gap: 10px; margin-top: 22px; flex-wrap: wrap; }
.signup input {
  flex: 1 1 200px;
  background: var(--bg);
  border: 1px solid var(--rim);
  border-radius: 3px;
  padding: 12px 14px;
  color: var(--text);
  font-size: 14px;
  font-family: inherit;
}
.signup .btn { padding: 12px 22px; font-size: 14px; white-space: nowrap; }
.signup .btn:disabled { opacity: .6; cursor: default; filter: none; }

/* The honeypot. Off-screen rather than display:none, because some bots skip
   anything that is genuinely hidden and this one wants to be found. */
.signup .botcheck {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* flex-basis 100% pushes the status onto its own line under the field and the
   button, rather than squeezing in beside them. */
.signup-status { flex: 1 0 100%; font-size: 12.5px; margin: 0; }
.signup-status:empty { display: none; }
.signup-status.busy { color: color-mix(in srgb, var(--text) 60%, transparent); }
.signup-status.ok { color: var(--acc); }
.signup-status.err { color: #D9776A; }
.signup-status a { color: inherit; text-decoration: underline; }

.signup-done { font-size: 14px; color: var(--acc); margin: 22px 0 0; }
.signup-note { margin-top: 12px; }

/* The band at the foot of a guide page. Someone who has just levelled off the
   written route is the reader most likely to want the next stretch, and until
   this was here those four pages ended in a copyright line and nothing else. */
.endcap {
  max-width: 880px;
  margin: 0 auto 80px;
  padding: 36px 40px 40px;
}
.endcap h3 { font-size: 22px; }
.endcap > p { font-size: 14px; margin: 10px 0 0; }
.endcap .signup { max-width: 470px; }

.links { display: flex; flex-direction: column; gap: 12px; }
.links a {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 18px;
  background: var(--bg);
  border: 1px solid color-mix(in srgb, var(--rim) 27%, transparent);
  border-radius: 6px;
  color: var(--head);
  font-size: 14px;
}
.links a:hover { text-decoration: none; border-color: var(--acc); }
.links .meta { font-size: 12px; color: var(--acc); }

/* -------------------------------------------------------------- footer --- */

.foot {
  border-top: 1px solid color-mix(in srgb, var(--rim) 20%, transparent);
  padding: 36px var(--pad);
  max-width: var(--wrap);
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
  font-size: 12px;
  color: color-mix(in srgb, var(--text) 60%, transparent);
}

/* ------------------------------------------------------- guide reader --- */

.guide-head { max-width: 880px; margin: 0 auto; padding: 56px 32px 0; }
.guide-head h1 { font-size: 40px; text-align: center; line-height: 1.2; }
.guide-head > p { text-align: center; margin-top: 10px; }

.keybox { padding: 28px 32px; margin-top: 36px; }
.keybox h2 { font-size: 18px; color: var(--acc); text-align: left; }

.keygrid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 6px 24px;
  font-size: 13px;
  margin-top: 12px;
}
.keygrid div { display: flex; align-items: baseline; gap: 8px; }
.keygrid b { font-weight: 600; color: var(--head); }
.keygrid .dot { align-self: center; }

.pills { display: flex; gap: 10px; margin-top: 36px; justify-content: center; flex-wrap: wrap; }
.pill {
  padding: 8px 18px;
  border-radius: 20px;
  font-size: 13px;
  border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent);
  color: var(--text);
  background: none;
  cursor: pointer;
  font-family: inherit;
}
.pill[aria-current="true"], .pill[aria-pressed="true"] {
  border-color: var(--acc);
  color: var(--acc);
  background: var(--cur);
  font-weight: 600;
}
.pill:hover { text-decoration: none; border-color: var(--acc); }

.zonejump { display: flex; gap: 8px; margin-top: 24px; flex-wrap: wrap; justify-content: center; }
.zonejump a {
  font-size: 12px;
  padding: 6px 12px;
  border-radius: 14px;
  background: var(--panel);
  border: 1px solid color-mix(in srgb, var(--rim) 27%, transparent);
  color: var(--text);
}

.guide-body {
  max-width: 1180px;
  margin: 40px auto 0;
  padding: 0 32px 80px;
  display: grid;
  grid-template-columns: 320px 1fr;
  gap: 28px;
  align-items: start;
}

.mapcol { position: sticky; top: 76px; }
.mapcol img { display: block; width: 100%; border-radius: 8px; border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent); }
.mapcol .caption { text-align: center; }

.zones { display: flex; flex-direction: column; gap: 32px; }

.zone { padding: 28px 32px; scroll-margin-top: 80px; }
.zone h2 { font-size: 22px; color: var(--acc); text-align: left; }

.block { margin-top: 22px; }
.block h3 { font-family: var(--body); font-size: 14px; font-weight: 600; margin-bottom: 8px; }

/* On a phone the map appears in the flow of the guide, at the point the route
   moves onto it. On a desktop that copy is hidden and the sticky column does
   the same job. */
/* A zero-height marker the sticky map measures against. It stays in the layout
   on every screen size, which the inline map below it does not. */
.mapanchor { display: block; height: 0; scroll-margin-top: 80px; }

.inlinemap { display: none; margin: 14px 0 4px; }
.inlinemap img { display: block; width: 100%; border-radius: 6px; border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent); }

.step {
  font-size: 14.5px;
  line-height: 1.6;
  padding: 3px 0 3px 18px;
  position: relative;
}
.step::before { content: "\2022"; position: absolute; left: 0; color: var(--acc); }

.sub {
  font-size: 13.5px;
  color: color-mix(in srgb, var(--text) 60%, transparent);
  padding: 2px 0 2px 20px;
  position: relative;
}
.sub::before { content: "\25E6"; position: absolute; left: 0; color: var(--rim); }

.totop {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 30;
  padding: 10px 14px;
  font-size: 13px;
  border-radius: 20px;
  background: var(--panel);
  border: 1px solid var(--rim);
  color: var(--text);
  cursor: pointer;
  font-family: inherit;
}

/* ---------------------------------------------------------------- maps --- */

.mapgrid { max-width: 1100px; margin: 44px auto 0; padding: 0 32px 80px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.mapgrid a { display: block; border-radius: 8px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--rim) 33%, transparent); }
.mapgrid img { display: block; width: 100%; }
.mapgrid .name { padding: 8px 12px; font-size: 12.5px; background: var(--panel); color: var(--text); }

/* ---------------------------------------------------------- responsive --- */

@media (max-width: 860px) {
  :root { --pad: 20px; }
  .nav-links { display: none; }
  .hero, .grid-3, .split, .community { grid-template-columns: 1fr; }
  .hero { gap: 40px; padding-top: 56px; padding-bottom: 64px; }
  .hero h1 { font-size: 38px; }
  .section > h2, .split h2 { font-size: 26px; }
  .grid-4, .roadmap { grid-template-columns: repeat(2, 1fr); }
  .community { padding: 32px; gap: 32px; }

  /* The page title right below says which range this is, so the header label
     is redundant on a narrow screen where it costs two wrapped lines. */
  .nav .brand span { white-space: nowrap; font-size: 15px; }
  .nav > span { display: none; }

  .guide-head { padding: 36px 20px 0; }
  .guide-head h1 { font-size: 28px; }
  .keybox { padding: 20px; }
  .guide-body { grid-template-columns: 1fr; padding: 0 20px 80px; }
  .mapcol { display: none; }
  .inlinemap { display: block; }
  .zone { padding: 20px; }
  .mapgrid { grid-template-columns: repeat(2, 1fr); padding: 0 20px 80px; }
  .endcap { margin: 0 20px 60px; padding: 24px 20px 28px; }
  .endcap h3 { font-size: 19px; }
}

/* ------------------------------------------------------------- printing -- */
/* The 2019 PDF promised the route was printable. It still is. */

@media print {
  :root { --bg: #fff; --panel: #fff; --text: #000; --head: #000; --acc: #000; --rim: #999; }
  body { background: #fff; color: #000; font-size: 10pt; }
  .nav, .pills, .zonejump, .mapcol, .totop, .foot, .skip { display: none !important; }
  /* A form on paper is furniture nobody can use. */
  .endcap { display: none !important; }
  .inlinemap { display: block; }
  .inlinemap img { max-height: 9cm; width: auto; }
  .guide-body { display: block; padding: 0; }
  .zone { border: none; padding: 0; margin-bottom: 16pt; break-inside: auto; }
  .zone h2 { break-after: avoid; }
  .block h3 { break-after: avoid; }
  .step { break-inside: avoid; }
  a { color: #000; text-decoration: none; }
}
