/* =========================================================================
   Adreama Forge — PLAY wizard + sessions/achievements styles.
   Loaded only by templates/layout-app.php, after php-app.css and before the
   card-db.css overlay, so the shared Gaslight tokens (from the marketing root
   site.css) are available here.

   Phase 2, surface 3 (the Forge redesign): this file used to ship a parallel
   off-white palette (#fff / #f7f4ef / teal / green) that bypassed the
   --arcana-* remap and left the Forge bright on a dark page. That parallel
   palette is now RETIRED — every rule is re-authored onto the Gaslight tokens.
   Layout, the responsive grid, the sticky rails and the 100vh pane-scroll
   logic are unchanged; only the skin moved.

   Forge is the COLD "machine" surface (DESIGN_SYSTEM §4.3):
   verdigris (--verd) is the structural accent — current step, selection,
   progress, the cold lamp pool, machine readouts, and "earned". Amber is kept
   only for the player's warm actions (the primary advance/complete button and
   the header "you" pill) and the lamp glow. Oxblood is danger/horror only
   (discard, loss, the after-game gate, validation). Square corners throughout.
   ========================================================================= */

.forge-wizard {
  max-width: 78rem;
  margin: 0 auto;
}

.forge-hidden-form {
  display: none;
}

.forge-home {
  width: min(100%, 72rem);
  margin: 0 auto;
}

.forge-account,
.forge-login,
.forge-register {
  width: min(100%, 48rem);
}

.forge-account__form,
.forge-login__form,
.forge-register__form {
  max-width: 44rem;
}

.forge-account .comment-form__actions,
.forge-login .comment-form__actions,
.forge-register .comment-form__actions {
  justify-content: space-between;
  flex-wrap: wrap;
}

.forge-hub {
  display: grid;
  gap: 1.25rem;
  padding: clamp(1.35rem, 3vw, 2.25rem);
  background:
    radial-gradient(80% 180px at 50% 0, rgba(86, 168, 143, 0.16), transparent 70%),
    linear-gradient(180deg, var(--panel), var(--panel-2));
}

.forge-hub--public {
  background:
    radial-gradient(80% 180px at 50% 0, rgba(228, 160, 74, 0.14), transparent 70%),
    linear-gradient(180deg, var(--panel), var(--panel-2));
}

.forge-hub__lead {
  display: grid;
  gap: 0.55rem;
  max-width: 48rem;
}

.forge-hub__lead .lead,
.forge-hub__lead .page-title {
  margin: 0;
}

.forge-hub__stats {
  justify-content: flex-start;
  gap: 1.5rem;
}

.forge-hub__stats .stat b {
  color: var(--verd);
  text-shadow: 0 0 26px rgba(86, 168, 143, 0.28);
}

.forge-hub--public .forge-hub__stats .stat b {
  color: var(--amber);
  text-shadow: 0 0 26px rgba(228, 160, 74, 0.28);
}

.forge-hub__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem;
}

.forge-shortcuts {
  display: grid;
  gap: 0.75rem;
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
}

.forge-shortcut {
  display: grid;
  gap: 0.25rem;
  padding: 1rem;
  border: 1px solid var(--line);
  background: var(--black-2);
  color: var(--bone);
  text-decoration: none;
}

.forge-shortcut:hover {
  border-color: rgba(86, 168, 143, 0.45);
  background: rgba(86, 168, 143, 0.08);
}

.forge-shortcut span {
  color: var(--verd);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.forge-shortcut strong {
  color: var(--bone);
  font-family: var(--font-display);
  font-size: 1.15rem;
  font-weight: 500;
}

/* The descent tile is the player's one warm primary action on the cold
   surface — it carries the amber weight of the retired duplicate button row. */
.forge-shortcut--primary {
  border-color: rgba(228, 160, 74, 0.42);
  background:
    radial-gradient(120% 130% at 12% 0%, rgba(228, 160, 74, 0.12), transparent 62%),
    var(--black-2);
}

.forge-shortcut--primary span {
  color: var(--amber);
}

.forge-shortcut--primary:hover {
  border-color: var(--amber);
  background:
    radial-gradient(120% 130% at 12% 0%, rgba(228, 160, 74, 0.18), transparent 66%),
    var(--black-2);
  box-shadow: var(--glow);
}

.forge-form {
  display: grid;
  gap: 1rem;
  grid-template-columns: 1fr;
  align-items: start;
}

/* Left rail — the stage gauge */
.forge-rail {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.forge-rail__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

.forge-rail__step {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  width: 100%;
  padding: 0.6rem 0.75rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
  color: var(--bone-2);
  text-align: left;
  font-weight: 600;
  transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
}

.forge-rail__step:hover {
  border-color: rgba(86, 168, 143, 0.4);
  background: rgba(86, 168, 143, 0.08);
}

.forge-rail__num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 1.65rem;
  height: 1.65rem;
  border-radius: 0;
  background: rgba(232, 221, 198, 0.08);
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.8rem;
  font-weight: 700;
}

.forge-rail__step--complete {
  color: var(--bone);
  font-weight: 700;
}

.forge-rail__step--complete .forge-rail__num {
  background: rgba(86, 168, 143, 0.22);
  color: var(--verd);
}

.forge-rail__step--current {
  border-color: rgba(86, 168, 143, 0.55);
  background: rgba(86, 168, 143, 0.12);
  color: var(--bone);
}

.forge-rail__step--current .forge-rail__num {
  background: var(--verd);
  color: var(--black);
}

.forge-rail__step--report {
  margin-top: 0.5rem;
  border-style: dashed;
}

.forge-rail__step--report .forge-rail__num {
  background: rgba(124, 38, 32, 0.28);
  color: var(--oxblood-l);
}

.forge-rail__label {
  font-family: var(--font-mono);
  font-size: 0.82rem;
  letter-spacing: 0.04em;
}

.forge-rail__discard {
  width: 100%;
  margin-top: 0.35rem;
}

/* Right pane — the instrument console, with a cold verdigris lamp pool at the
   top edge so each step's title fades up out of near-black like the section
   system on the marketing site. */
.forge-pane {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 1.5rem;
  background:
    radial-gradient(75% 120px at 50% 0, rgba(86, 168, 143, 0.12), transparent 70%),
    linear-gradient(180deg, var(--panel), var(--panel-2));
  border: 1px solid var(--line-2);
  border-radius: 0;
  box-shadow: var(--arcana-shadow);
}

.forge-step {
  display: flex;
  flex-direction: column;
  gap: 1.1rem;
}

.forge-step__head {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

/* Stage kicker above each step title (presentational markup added to the step
   heads): mono, verdigris, the machine announcing which stage you're on. */
.forge-stage {
  margin: 0;
  color: var(--verd);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.28em;
  text-transform: uppercase;
}

.forge-hint {
  margin: 0;
}

.forge-help {
  margin: 0;
  font-size: 0.85rem;
}

/* Fields */
.forge-field {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}

.forge-field__label {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bone-2);
}

.forge-field__optional {
  color: var(--bone-2);
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
}

.forge-input {
  width: 100%;
  padding: 0.7rem 0.9rem;
  border: 1px solid var(--line-2);
  border-radius: 0;
  background: rgba(0, 0, 0, 0.28);
  color: var(--bone);
  font-family: var(--font-body);
}

.forge-input:focus {
  outline: 2px solid rgba(86, 168, 143, 0.4);
  outline-offset: 1px;
  border-color: rgba(86, 168, 143, 0.55);
}

.forge-textarea {
  min-height: 8rem;
  resize: vertical;
}

.forge-field-row {
  display: grid;
  gap: 1rem;
  grid-template-columns: 1fr;
}

/* Boxes */
.forge-boxes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.forge-box {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.55rem 0.85rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
  color: var(--bone);
  font-weight: 600;
  cursor: pointer;
}

.forge-box.is-on {
  border-color: rgba(86, 168, 143, 0.5);
  background: rgba(86, 168, 143, 0.14);
}

.forge-box input {
  accent-color: var(--verd);
}

.forge-box__lock {
  font-family: var(--font-mono);
  font-size: 0.66rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bone-2);
}

/* Segmented control (explorer count, outcome) */
.forge-seg {
  display: inline-flex;
  align-self: flex-start;
  border: 1px solid var(--line-2);
  border-radius: 0;
  overflow: hidden;
}

.forge-seg input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.forge-seg label {
  padding: 0.55rem 1.15rem;
  border-left: 1px solid var(--line);
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-weight: 600;
  letter-spacing: 0.04em;
  cursor: pointer;
}

.forge-seg label:first-of-type {
  border-left: 0;
}

.forge-seg input:checked + label {
  background: var(--verd);
  color: var(--black);
}

.forge-seg input:focus-visible + label {
  outline: 2px solid rgba(86, 168, 143, 0.5);
  outline-offset: -2px;
}

/* Outcome is the one segmented control with its own semantics: a win is the
   lamp surviving (amber), a loss is danger (oxblood), abandonment is grey. */
#forge-outcome-win:checked + label {
  background: var(--amber);
  color: var(--black);
}

#forge-outcome-loss:checked + label {
  background: var(--oxblood);
  color: var(--bone);
}

#forge-outcome-abandoned:checked + label {
  background: rgba(232, 221, 198, 0.16);
  color: var(--bone);
}

.forge-radio-list {
  display: grid;
  gap: 0.45rem;
  align-self: start;
}

.forge-radio-option {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  color: var(--bone);
  font-weight: 600;
  cursor: pointer;
}

.forge-radio-option input {
  accent-color: var(--verd);
}

.forge-report-fields--plain-outcome:has(input[name="outcome"][value="loss"]:checked) .forge-ach-report__locked-note,
.forge-report-fields--plain-outcome:has(input[name="outcome"][value="abandoned"]:checked) .forge-ach-report__locked-note {
  display: block;
}

.forge-report-fields--plain-outcome:has(input[name="outcome"][value="loss"]:checked) .forge-ach-category,
.forge-report-fields--plain-outcome:has(input[name="outcome"][value="abandoned"]:checked) .forge-ach-category {
  opacity: 0.5;
}

.forge-report-fields--plain-outcome:has(input[name="outcome"][value="loss"]:checked) .forge-ach__pick,
.forge-report-fields--plain-outcome:has(input[name="outcome"][value="abandoned"]:checked) .forge-ach__pick {
  cursor: not-allowed;
  pointer-events: none;
}

/* Shared bits */
.forge-subhead {
  margin: 0;
  font-family: var(--font-mono);
  font-size: 0.85rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--bone-2);
}

.forge-flavor {
  font-style: italic;
  color: var(--bone-2);
}

.forge-rule {
  padding-left: 0.85rem;
  border-left: 3px solid rgba(86, 168, 143, 0.5);
}

.markdown-body table {
  border-collapse: collapse;
  margin: 0.5rem 0;
  font-size: 0.9rem;
}

.markdown-body th,
.markdown-body td {
  padding: 0.3rem 0.65rem;
  border: 1px solid var(--line-2);
  text-align: left;
}

.markdown-body th {
  background: rgba(86, 168, 143, 0.12);
  color: var(--bone);
  font-weight: 700;
}

.forge-chip {
  display: inline-flex;
  align-items: center;
  padding: 0.2rem 0.6rem;
  border-radius: 0;
  background: rgba(232, 221, 198, 0.08);
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* Scenario-length severity rides the warm/cold/danger axis. */
.forge-chip--short {
  background: rgba(86, 168, 143, 0.16);
  color: var(--verd);
}

.forge-chip--medium {
  background: rgba(228, 160, 74, 0.16);
  color: var(--amber);
}

.forge-chip--long {
  background: rgba(124, 38, 32, 0.22);
  color: var(--oxblood-l);
}

.forge-softnote {
  margin: 0;
  color: var(--bone-2);
  font-style: italic;
}

/* Scenario step */
.forge-scenario {
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
}

.forge-scenario__head {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  flex-wrap: wrap;
}

.forge-scenario__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 500;
  font-size: 1.35rem;
  letter-spacing: 0.02em;
  color: var(--bone);
}

.forge-table {
  width: 100%;
  border-collapse: collapse;
}

.forge-table th,
.forge-table td {
  border-top: 1px solid var(--line);
  padding: 0.55rem 0.6rem;
  text-align: left;
  vertical-align: top;
  font-size: 0.92rem;
}

.forge-table thead th {
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.forge-variant-table__pick {
  width: 2.5rem;
  text-align: center;
}

.forge-variant-table input {
  accent-color: var(--verd);
  width: 1.1rem;
  height: 1.1rem;
}

.forge-variant-table__label {
  font-weight: 700;
  color: var(--bone);
  cursor: pointer;
}

.forge-variant-note {
  margin: 0.35rem 0 0;
  color: var(--oxblood-l);
  font-size: 0.82rem;
}

/* Selected summary chips */
.forge-selected {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem;
}

.forge-selected__label {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bone-2);
}

.forge-selected__chip {
  display: inline-flex;
  padding: 0.25rem 0.6rem;
  border: 1px solid rgba(86, 168, 143, 0.4);
  border-radius: 0;
  background: rgba(86, 168, 143, 0.16);
  color: var(--bone);
  font-size: 0.8rem;
  font-weight: 600;
}

.forge-selected__empty {
  color: var(--bone-2);
  font-style: italic;
}

.forge-points strong {
  font-family: var(--font-display);
  font-size: 1.25rem;
  color: var(--verd);
}

/* Machinations step — a specimen gallery of mods. */
.forge-family {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  padding-top: 0.6rem;
  border-top: 1px solid var(--line);
}

.forge-family__head {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}

.forge-family__desc {
  margin: 0;
  font-size: 0.85rem;
  color: var(--bone-2);
}

.forge-mach-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}

.forge-mach {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  padding: 0.75rem 0.9rem;
  border: 1px solid var(--line);
  border-left: 3px solid transparent;
  border-radius: 0;
  background: var(--black-2);
  transition: border-color 150ms ease, background 150ms ease;
}

/* The machine engages the selected mod: verdigris edge + faint wash. */
.forge-mach:has(input:checked) {
  border-color: rgba(86, 168, 143, 0.4);
  border-left-color: var(--verd);
  background: rgba(86, 168, 143, 0.08);
}

.forge-mach__pick {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  cursor: pointer;
}

.forge-mach__pick input {
  accent-color: var(--verd);
  width: 1.15rem;
  height: 1.15rem;
}

.forge-mach__name {
  font-weight: 700;
  color: var(--bone);
}

.forge-mach__flavor {
  margin: 0;
  font-size: 0.9rem;
}

.forge-disclosure summary {
  cursor: pointer;
  color: var(--verd);
  font-family: var(--font-mono);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.forge-disclosure[open] summary {
  margin-bottom: 0.5rem;
}

/* Achievements step */
.forge-ach-category {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding-top: 0.6rem;
  border-top: 1px solid var(--line);
}

.forge-ach-category__desc {
  margin: 0;
  font-size: 0.85rem;
  color: var(--bone-2);
}

.forge-ach-group__head {
  margin: 0.3rem 0 0;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--bone-2);
}

.forge-ach-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.4rem;
}

/* Two-column grid so points sit top-right, level with the name. */
.forge-ach {
  display: grid;
  grid-template-columns: 1fr auto;
  column-gap: 0.75rem;
  row-gap: 0.2rem;
  align-items: start;
  padding: 0.55rem 0.75rem;
  border: 1px solid var(--line);
  border-left: 3px solid transparent;
  border-radius: 0;
  background: var(--black-2);
  transition: border-color 150ms ease, background 150ms ease;
}

.forge-ach:has(.forge-ach__pick input:checked) {
  border-color: rgba(86, 168, 143, 0.4);
  border-left-color: var(--verd);
  background: rgba(86, 168, 143, 0.08);
}

.forge-ach__pick,
.forge-ach__name {
  grid-column: 1;
  grid-row: 1;
}

.forge-ach__name {
  margin: 0;
  color: var(--bone);
}

.forge-ach__pick {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-weight: 700;
  color: var(--bone);
  cursor: pointer;
}

.forge-ach__pick input {
  accent-color: var(--verd);
}

.forge-ach__condition {
  grid-column: 1;
  grid-row: 2;
  margin: 0;
  font-size: 0.85rem;
  color: var(--bone-2);
}

.forge-ach__points {
  grid-column: 2;
  grid-row: 1;
  justify-self: end;
  align-self: center;
  font-family: var(--font-mono);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--verd);
}

/* Review step */
.forge-summary {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  padding: 1rem 1.1rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-summary__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
}

.forge-summary__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  gap: 0.6rem;
  margin: 0;
}

.forge-summary__grid dt {
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bone-2);
}

.forge-summary__grid dd {
  margin: 0.15rem 0 0;
  font-weight: 600;
  color: var(--bone);
}

.forge-summary__lead {
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.6rem;
  flex-wrap: wrap;
  color: var(--bone);
}

.forge-summary__variant {
  margin: 0;
  color: var(--bone);
}

.forge-print {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  padding-top: 0.5rem;
}

.forge-print__toggle {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--bone);
  font-weight: 600;
}

.forge-print__toggle input {
  accent-color: var(--verd);
}

.forge-print__open {
  align-self: flex-start;
}

.forge-softvalidation {
  margin: 0;
}

/* Report step — "once the dark has had its say". The after-game gate carries a
   faint oxblood wash: this is the horror beat, the only place danger reads. */
.forge-report-gate {
  padding: 1rem 1.1rem;
  border: 1px dashed rgba(124, 38, 32, 0.4);
  border-radius: 0;
  background: rgba(124, 38, 32, 0.07);
}

.forge-duration-options {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.forge-duration-options input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.forge-duration-options label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 3.4rem;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--line-2);
  border-radius: 0;
  background: rgba(0, 0, 0, 0.28);
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-weight: 600;
  cursor: pointer;
}

.forge-duration-options input:checked + label {
  border-color: rgba(86, 168, 143, 0.5);
  background: rgba(86, 168, 143, 0.18);
  color: var(--bone);
}

.forge-duration-options input:focus-visible + label {
  outline: 2px solid rgba(86, 168, 143, 0.4);
  outline-offset: 2px;
}

.forge-duration-other {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  padding: 0.75rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-duration-other[hidden] {
  display: none;
}

.forge-duration-other label {
  display: grid;
  gap: 0.35rem;
  min-width: 7rem;
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.forge-ach-report {
  display: grid;
  gap: 0.75rem;
}

.forge-ach-report__head {
  display: grid;
  gap: 0.25rem;
}

/* Shown only while the earned section is locked (loss/abandoned outcome). */
.forge-ach-report__locked-note {
  display: none;
  color: var(--oxblood-l);
}

.forge-ach-report.is-locked .forge-ach-report__locked-note {
  display: block;
}

.forge-ach-report.is-locked .forge-ach-category {
  opacity: 0.5;
}

.forge-ach-report.is-locked .forge-ach__pick {
  cursor: not-allowed;
}

/* Earned: the machine logs a victory in verdigris. */
.forge-ach.is-earned,
.forge-ledger-card.is-complete {
  border-color: rgba(86, 168, 143, 0.4);
  border-left-color: var(--verd);
  background: rgba(86, 168, 143, 0.1);
}

.forge-ach__tag {
  grid-column: 2;
  grid-row: 2;
  justify-self: end;
  align-self: start;
  padding: 0.12rem 0.45rem;
  border-radius: 0;
  background: rgba(86, 168, 143, 0.16);
  color: var(--verd);
  font-family: var(--font-mono);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* Sessions and ledger two-pane pages */
.forge-two-pane {
  max-width: 86rem;
  margin: 0 auto;
  display: grid;
  gap: 1rem;
  grid-template-columns: 1fr;
  align-items: start;
}

.forge-list,
.forge-detail {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.forge-list__head {
  display: grid;
  gap: 0.2rem;
}

.forge-list__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 500;
  font-size: 1.5rem;
  letter-spacing: 0.02em;
  color: var(--bone);
}

.forge-session-list,
.forge-ach-outline {
  display: grid;
  gap: 0.5rem;
}

.forge-session-item {
  display: grid;
  gap: 0.15rem;
  padding: 0.7rem 0.8rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
  color: var(--bone);
  text-decoration: none;
}

.forge-session-item:hover,
.forge-session-item:focus-visible,
.forge-session-item.is-current {
  border-color: rgba(86, 168, 143, 0.48);
  background: rgba(86, 168, 143, 0.1);
}

/* A draft is unfinished — still warm, the lamp not yet logged. */
.forge-session-item.is-draft {
  border: 1px dashed rgba(228, 160, 74, 0.45);
  background: rgba(228, 160, 74, 0.08);
}

.forge-session-item__name {
  font-weight: 800;
  color: var(--bone);
}

.forge-session-item__scenario {
  color: var(--bone-2);
  font-size: 0.82rem;
  font-weight: 600;
}

.forge-session-item__meta {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  flex-wrap: wrap;
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.76rem;
}

.forge-session-item__meta strong {
  padding: 0.08rem 0.4rem;
  border-radius: 0;
  background: rgba(228, 160, 74, 0.18);
  color: var(--amber);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.forge-detail__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
  flex-wrap: wrap;
}

.forge-detail__actions {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
}

.forge-detail__actions form {
  margin: 0;
}

.forge-detail-meta {
  padding: 1rem 1.1rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-detail-group {
  display: grid;
  gap: 0.5rem;
}

.forge-detail-card {
  padding: 0.75rem 0.85rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-detail-card h4,
.forge-ledger-card h4 {
  margin: 0 0 0.25rem;
  color: var(--bone);
}

.forge-empty {
  display: grid;
  gap: 0.75rem;
  justify-items: start;
}

.forge-edit-form {
  display: grid;
  gap: 1rem;
}

/* Achievements ledger — the completion gauge + trophy ledger. */
.forge-ledger-total {
  display: grid;
  gap: 0.5rem;
  padding: 0.75rem 0.85rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-ledger-total__stats {
  display: flex;
  justify-content: space-between;
  gap: 0.75rem;
}

.forge-ledger-total__stat {
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-weight: 600;
  font-size: 0.8rem;
  white-space: nowrap;
}

.forge-ledger-total__stat strong {
  color: var(--bone);
  font-size: 0.95rem;
}

.forge-ledger-total__bar {
  position: relative;
  height: 0.5rem;
  border-radius: 0;
  background: rgba(232, 221, 198, 0.1);
  overflow: hidden;
}

.forge-ledger-total__fill {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #3f8a72, var(--verd));
  box-shadow: 0 0 10px rgba(86, 168, 143, 0.45);
  transform-origin: left center;
  animation: forge-fill-grow 800ms cubic-bezier(0.22, 1, 0.36, 1) both;
}

@keyframes forge-fill-grow {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}

@media (prefers-reduced-motion: reduce) {
  .forge-ledger-total__fill {
    animation: none;
  }
}

.forge-ach-outline__group {
  display: grid;
  gap: 0.35rem;
}

.forge-ach-outline__group h2 {
  display: flex;
  justify-content: space-between;
  gap: 0.75rem;
  margin: 0;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bone-2);
}

.forge-ach-outline__group ol {
  display: grid;
  gap: 0.25rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.forge-ach-outline__group a {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.35rem 0.45rem;
  border-radius: 0;
  color: var(--bone);
  text-decoration: none;
  font-size: 0.82rem;
}

.forge-ach-outline__group a:hover,
.forge-ach-outline__group a:focus-visible {
  background: rgba(86, 168, 143, 0.12);
}

.forge-ach-outline li.is-complete a {
  color: var(--verd);
}

.forge-ach-outline strong {
  color: var(--verd);
  font-family: var(--font-mono);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.forge-ledger-stats {
  display: grid;
  gap: 0.6rem;
  grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
}

.forge-ledger-stats div {
  padding: 0.85rem;
  border: 1px solid var(--line);
  border-radius: 0;
  background: var(--black-2);
}

.forge-ledger-stats strong {
  display: block;
  font-family: var(--font-display);
  font-size: 1.6rem;
  color: var(--bone);
}

.forge-ledger-stats span {
  color: var(--bone-2);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.forge-ledger-category {
  display: grid;
  gap: 0.7rem;
  padding-top: 0.8rem;
  border-top: 1px solid var(--line);
}

/* Space the TRIGGERED / Finish-with-a-Condition label off its first card. */
.forge-ledger-group {
  display: grid;
  gap: 0.5rem;
}

.forge-ledger-cards {
  display: grid;
  gap: 0.55rem;
}

.forge-ledger-card {
  display: grid;
  gap: 0.35rem;
  padding: 0.8rem 0.9rem;
  border: 1px solid var(--line);
  border-left: 3px solid transparent;
  border-radius: 0;
  background: var(--black-2);
}

/* Open (not yet earned) reads dim and dashed — locked until the table delivers. */
.forge-ledger-card.is-open {
  border-style: dashed;
  opacity: 0.82;
}

.forge-ledger-card__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.6rem;
}

.forge-ledger-card__head h4 {
  margin: 0;
  min-width: 0;
}

.forge-ledger-card__condition {
  margin: 0;
  color: var(--bone-2);
}

.forge-ledger-card__meta {
  display: flex;
  gap: 0.5rem;
  align-items: baseline;
  justify-content: flex-end;
  flex-wrap: wrap;
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: 0.76rem;
  font-weight: 600;
}

.forge-ledger-card__meta a {
  color: var(--verd);
}

/* The "X pts earned" stamp on a completed trophy reads as a verdigris seal. */
.forge-ledger-card.is-complete .forge-ledger-card__meta strong {
  color: var(--verd);
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

/* Prev / Next */
.forge-nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-top: 0.5rem;
}

@media (max-width: 899px) {
  .forge-nav {
    position: sticky;
    bottom: 0;
    z-index: 5;
    margin: 0.5rem -1.5rem -1.5rem;
    padding: 0.75rem 1.5rem;
    background: linear-gradient(180deg, var(--black-2), var(--black));
    border-top: 1px solid var(--line-2);
  }
}

@media (min-width: 640px) {
  .forge-field-row {
    grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
  }
}

@media (min-width: 900px) {
  .forge-form {
    grid-template-columns: minmax(13rem, 17rem) minmax(0, 1fr);
  }

  .forge-two-pane {
    grid-template-columns: minmax(15rem, 19rem) minmax(0, 1fr);
  }

  .forge-rail {
    position: sticky;
    top: 1.5rem;
  }

  .forge-list {
    position: sticky;
    top: 1.5rem;
  }
}

/* At >=1100px the catalog's php-app.css pins the body to a 100vh grid with
   overflow:hidden and scrolls its columns internally. The Forge wizard has no
   such columns, so restore normal document scrolling here (the sticky rail
   keeps the step list visible while the page scrolls). */
@media (min-width: 1100px) {
  body.forge-body {
    display: block;
    height: auto;
    min-height: 100vh;
    min-height: 100dvh;
    overflow: visible;
  }

  body.forge-body .app-shell {
    min-height: 0;
    overflow: visible;
  }

  /* The two-pane list+detail pages (Sessions, Achievements) have a tall left
     list and a tall right detail. With document scrolling (above) the sticky
     left list made the wheel act on the whole page, so the right column moved
     even when the pointer was over the left. Re-pin the viewport for these
     pages and give each pane its own scroll region, so the wheel acts on
     whichever pane the pointer is over. overscroll-behavior: contain stops a
     pane reaching its end from chaining to its neighbour. (The PLAY wizard uses
     .forge-form, not .forge-two-pane, so it keeps normal document scrolling.)
     Keyed off a body class set server-side rather than :has(.forge-two-pane):
     a root-level :has() forces a whole-document restyle on every descendant
     mutation, which Firefox repaints badly (blank page) when the report
     outcome toggle flips classes on the achievements section. */
  body.forge-body--panes {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    height: 100vh;
    height: 100dvh;
    min-height: 0;
    overflow: hidden;
  }

  body.forge-body--panes .app-shell {
    min-height: 0;
    overflow: hidden;
  }

  .forge-two-pane {
    height: 100%;
    grid-template-rows: minmax(0, 1fr);
    align-items: stretch;
  }

  .forge-two-pane > .forge-list,
  .forge-two-pane > .forge-detail {
    position: static;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
  }
}

/* =========================================================================
   GAMIFICATION LAYER — operator console, charge gauge, open pacts, the vault
   rarity/seals, the chronicle records, and the post-session VERDICT reveal.
   Built on the shared Gaslight tokens: verdigris = the machine / "accepted",
   amber = the player's warmth, oxblood = loss / the dark feeding. Square
   corners throughout, matching the rest of the cold Forge surface.
   ========================================================================= */

/* --- Operator console (dashboard) ------------------------------------- */
.forge-console { --machine-charge: 40; }
.forge-console__top {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: clamp(1rem, 3vw, 2rem);
  align-items: center;
}
@media (max-width: 40rem) {
  .forge-console__top { grid-template-columns: 1fr; justify-items: center; text-align: center; }
}

/* The core: a cold lamp whose glow scales with --machine-charge (0–100). */
.forge-core {
  position: relative;
  display: grid;
  place-items: center;
  width: 8.5rem;
  height: 8.5rem;
  flex: none;
}
.forge-core__ring {
  position: absolute;
  inset: 0;
  border: 1px solid var(--line-2);
  border-radius: 50%;
}
.forge-core__glow {
  position: absolute;
  inset: 12%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%,
    rgba(86, 168, 143, calc(0.12 + var(--machine-charge) / 180)) 0%,
    rgba(86, 168, 143, 0.05) 45%,
    transparent 70%);
  animation: forge-core-pulse 4.5s ease-in-out infinite;
}
.forge-core__state {
  position: relative;
  font-family: var(--mono, 'Spline Sans Mono', monospace);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--verd);
}
.forge-console.is-cold .forge-core__glow {
  background: radial-gradient(circle at 50% 50%, rgba(200, 184, 148, 0.10), transparent 70%);
  animation: none;
}
.forge-console.is-cold .forge-core__state { color: var(--bone-2); }
.forge-console__rank { margin: 0 0 0.35rem; }
.forge-console__stats { margin-top: 0.4rem; }

@keyframes forge-core-pulse {
  0%, 100% { opacity: 0.78; transform: scale(0.99); }
  50% { opacity: 1; transform: scale(1.02); }
}

/* --- Rank meter (dashboard + reveal) ---------------------------------- */
.forge-rank-meter { margin-top: 0.75rem; max-width: 30rem; }
.forge-rank-meter__bar {
  height: 0.5rem;
  background: rgba(0, 0, 0, 0.35);
  border: 1px solid var(--line);
  overflow: hidden;
}
.forge-rank-meter__fill {
  display: block;
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, var(--verd), #7fd0b6);
  box-shadow: 0 0 12px rgba(86, 168, 143, 0.5);
  transition: width 900ms cubic-bezier(.2, .8, .2, 1);
}
.forge-rank-meter__caption { margin: 0.4rem 0 0; font-size: 0.85rem; color: var(--bone-2); }
.forge-rank-meter__caption em { color: var(--verd); font-style: normal; }

/* --- Open pacts (dashboard quest log) --------------------------------- */
.forge-pacts {
  border: 1px solid var(--line);
  border-left: 2px solid var(--verd);
  background: rgba(0, 0, 0, 0.18);
  padding: 0.9rem 1.1rem;
}
.forge-pacts__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.75rem;
  flex-wrap: wrap;
  margin-bottom: 0.5rem;
}
.forge-pacts__head .forge-subhead { margin: 0; }
.forge-pacts__draft { font-size: 0.82rem; color: var(--bone-2); }
.forge-pacts__list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.forge-pacts__item {
  display: inline-flex; align-items: baseline; gap: 0.5rem;
  border: 1px solid var(--line-2); padding: 0.25rem 0.6rem; font-size: 0.85rem;
}
.forge-pacts__points { color: var(--verd); font-family: var(--mono, 'Spline Sans Mono', monospace); font-size: 0.72rem; }
.forge-pacts__empty { margin: 0; }
.forge-selected__unit { color: var(--bone-2); font-size: 0.8rem; }

/* --- Charge gauge on the wizard rail ---------------------------------- */
.forge-charge { margin: 0 0 0.85rem; }
.forge-charge__track {
  display: block; height: 0.35rem;
  background: rgba(0, 0, 0, 0.35); border: 1px solid var(--line); overflow: hidden;
}
.forge-charge__fill {
  display: block; height: 100%;
  background: linear-gradient(90deg, var(--verd), #7fd0b6);
  box-shadow: 0 0 10px rgba(86, 168, 143, 0.45);
  transition: width 500ms ease;
}
.forge-charge__count {
  display: block; margin-top: 0.35rem;
  font-family: var(--mono, 'Spline Sans Mono', monospace);
  font-size: 0.66rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--bone-2);
}

/* --- The chronicle records ------------------------------------------- */
.forge-records {
  border: 1px solid var(--line); background: rgba(0, 0, 0, 0.18);
  padding: 0.85rem 1rem; margin-bottom: 1rem;
}
.forge-records__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; }
.forge-record { text-align: center; }
.forge-record b {
  display: block; font-family: var(--mono, 'Spline Sans Mono', monospace);
  font-size: 1.15rem; color: var(--verd); line-height: 1;
}
.forge-record span {
  display: block; margin-top: 0.25rem;
  font-size: 0.62rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bone-2);
}
.forge-records__line {
  margin: 0.7rem 0 0; font-size: 0.8rem; color: var(--bone-2);
  font-family: var(--mono, 'Spline Sans Mono', monospace);
}
.forge-records__best { color: var(--amber); }

/* --- Session outcome seals (chronicle list) --------------------------- */
.forge-session-item { position: relative; }
.forge-session-item__seal {
  position: absolute; top: 0.9rem; right: 0.9rem;
  width: 0.6rem; height: 0.6rem; border-radius: 50%;
}
.forge-session-item__seal--win { background: var(--verd); box-shadow: 0 0 8px rgba(86, 168, 143, 0.6); }
.forge-session-item__seal--loss { background: var(--oxblood-l); }
.forge-session-item__seal--abandoned { background: var(--bone-2); opacity: 0.5; }
.forge-session-item__verdict { font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase; }
.forge-session-item__verdict--win { color: var(--verd); }
.forge-session-item__verdict--loss { color: var(--oxblood-l); }
.forge-session-item__verdict--abandoned { color: var(--bone-2); }

/* --- The vault: category completion cue ------------------------------ */
.forge-ach-outline__group.is-complete > h2 span { color: var(--verd); }

/* --- Seal element (the reveal) --------------------------------------- */
.forge-seal__mark {
  display: inline-block; width: 1rem; height: 1rem; flex: none;
  border: 1px solid var(--line-2); border-radius: 50%;
  position: relative; background: rgba(0, 0, 0, 0.25);
}
.forge-seal.is-broken .forge-seal__mark {
  border-color: var(--verd);
  background: radial-gradient(circle, rgba(86, 168, 143, 0.4), transparent 70%);
  box-shadow: 0 0 8px rgba(86, 168, 143, 0.5);
}
.forge-seal.is-broken .forge-seal__mark::after {
  content: ""; position: absolute; inset: 30%; background: var(--verd); border-radius: 50%;
}

/* --- The VERDICT reveal ---------------------------------------------- */
body.forge-body--reveal .app-shell {
  display: grid; place-items: start center; padding: clamp(1.5rem, 5vw, 4rem) 1rem;
}
.forge-reveal { width: min(100%, 46rem); display: grid; gap: 1.5rem; justify-items: center; text-align: center; }
.forge-reveal__core { position: relative; width: 7rem; height: 7rem; display: grid; place-items: center; }
.forge-reveal__core-ring { position: absolute; inset: 0; border: 1px solid var(--line-2); border-radius: 50%; }
.forge-reveal__core-glow { position: absolute; inset: 0; border-radius: 50%; animation: forge-core-pulse 4s ease-in-out infinite; }
.forge-reveal--win .forge-reveal__core-glow { background: radial-gradient(circle, rgba(86, 168, 143, 0.5), transparent 70%); }
.forge-reveal--loss .forge-reveal__core-glow { background: radial-gradient(circle, rgba(124, 38, 32, 0.55), transparent 70%); }
.forge-reveal--abandoned .forge-reveal__core-glow { background: radial-gradient(circle, rgba(200, 184, 148, 0.18), transparent 70%); }
.forge-reveal--sealed .forge-reveal__core-glow { background: radial-gradient(circle, rgba(228, 160, 74, 0.3), transparent 70%); }
.forge-reveal__verdict { font-family: 'Cinzel', serif; margin: 0; font-size: clamp(1.8rem, 5vw, 2.8rem); }
.forge-reveal--win .forge-reveal__verdict { color: var(--verd); }
.forge-reveal--loss .forge-reveal__verdict { color: var(--oxblood-l); }
.forge-reveal__sub { margin: 0.5rem auto 0; max-width: 44ch; color: var(--bone-2); }
.forge-reveal__scenario { color: var(--bone); }
.forge-reveal__section-title { font-family: 'Cinzel', serif; font-size: 1rem; letter-spacing: 0.05em; margin: 0 0 0.75rem; color: var(--bone); }
.forge-reveal__section-title--quiet { color: var(--bone-2); }
.forge-reveal__grant,
.forge-reveal__broken,
.forge-reveal__standing { width: 100%; border: 1px solid var(--line); background: rgba(0, 0, 0, 0.2); padding: 1.1rem 1.25rem; }
.forge-reveal__tally { margin: 0 0 1rem; display: flex; gap: 0.5rem; align-items: baseline; justify-content: center; }
.forge-reveal__tally strong { font-family: var(--mono, 'Spline Sans Mono', monospace); font-size: 1.8rem; color: var(--verd); }
.forge-reveal__tally span { color: var(--bone-2); font-size: 0.85rem; }
.forge-reveal__empty { margin: 0; color: var(--bone-2); }
.forge-reveal__seals { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; text-align: left; }
.forge-seal { display: flex; align-items: center; gap: 0.75rem; border: 1px solid var(--line); padding: 0.6rem 0.75rem; background: rgba(0, 0, 0, 0.15); }
.forge-seal__body { display: grid; flex: 1; }
.forge-seal__name { color: var(--bone); }
.forge-seal__condition { font-size: 0.78rem; color: var(--bone-2); }
.forge-seal__points { font-family: var(--mono, 'Spline Sans Mono', monospace); font-size: 0.72rem; color: var(--verd); flex: none; }
.forge-reveal__seals--unkept .forge-seal { opacity: 0.6; }
.forge-reveal__seals--unkept .forge-seal__points { color: var(--bone-2); }
.forge-reveal__grant .forge-seal.is-broken { animation: forge-seal-break 600ms cubic-bezier(.2, .8, .2, 1) both; animation-delay: var(--seal-delay, 0ms); }
@keyframes forge-seal-break {
  0% { opacity: 0; transform: translateY(8px) scale(0.97); }
  60% { opacity: 1; }
  100% { opacity: 1; transform: none; }
}
.forge-reveal__rank { font-family: 'Cinzel', serif; margin: 0.2rem 0 0; color: var(--verd); }
.forge-reveal__standing .forge-rank-meter { margin-left: auto; margin-right: auto; }
.forge-reveal__actions { display: flex; flex-wrap: wrap; gap: 0.6rem; justify-content: center; }

/* --- Pacts step: bulk toggle + earned (set-aside) rows ---------------- */
.forge-pacts-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-bottom: 1rem;
}
.forge-pacts-bar .forge-selected { margin: 0; }

/* Already earned: dimmed, disabled, put aside — not part of this pledge. */
.forge-ach--earned {
  opacity: 0.55;
  background: var(--black-2);
  border-left-color: transparent;
}
.forge-ach--earned .forge-ach__pick { cursor: not-allowed; }
.forge-ach--earned .forge-ach__name { color: var(--bone-2); font-weight: 600; }
.forge-ach__tag--kept { background: rgba(86, 168, 143, 0.12); color: var(--verd); }

/* Report step: pacts you never swore can't be kept — greyed and disabled. */
.forge-ach--unsworn { opacity: 0.45; }
.forge-ach--unsworn .forge-ach__pick { cursor: not-allowed; }
.forge-ach--unsworn .forge-ach__name { color: var(--bone-2); }
.forge-ach__tag--unsworn { background: transparent; color: var(--bone-2); border: 1px solid var(--line-2); }

@media (prefers-reduced-motion: reduce) {
  .forge-core__glow,
  .forge-reveal__core-glow { animation: none; }
  .forge-reveal__grant .forge-seal.is-broken { animation: none; }
  .forge-rank-meter__fill,
  .forge-charge__fill { transition: none; }
}
