/* ====================================================================
   Composite quest card — the outer container that holds nested quests.

   The composite is a quest that contains sub-quests. Its outer chrome
   (chevron + title-row + meta + description-block + body) lives here.
   Sub-quests inside its `__body` render as plain `.quest-card`s (see
   the "Nested .quest-card" block lower in this file).
   ==================================================================== */

.composite-quest-card {
  background: var(--color-card);
  padding: 1.25rem;
  display: grid;
  grid-template-columns: 1.5rem 1fr;
  column-gap: 0.5rem;
  row-gap: 0.4rem;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
  position: relative;
  user-select: none;
  -webkit-user-select: none;
}

.composite-quest-card__chevron {
  grid-column: 1;
  grid-row: 1;
  width: 1.5rem;
  height: 1.5rem;
  align-self: center;
  color: var(--pad, var(--color-primary));
  transition: transform 200ms ease;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.composite-quest-card__chevron.is-collapsed {
  transform: rotate(-90deg);
}

.composite-quest-card__title-row {
  grid-column: 2;
  grid-row: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  cursor: pointer;
}

.composite-quest-card__title {
  margin: 0;
  font-size: 1rem;
  font-weight: 500;
  line-height: 1.4;
  color: var(--pad, var(--color-fg));
}

.composite-quest-card.is-done {
  opacity: 0.85;
}

.composite-quest-card.is-done .composite-quest-card__title {
  color: var(--pad, var(--color-muted-fg));
  text-decoration: line-through;
}

/* ---- Meta row ---- */

.composite-quest-card__meta {
  grid-column: 2;
  grid-row: 2;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
  font-size: 0.75rem;
  color: var(--color-muted-fg);
}

.composite-quest-card__meta-sep { opacity: 0.5; }

.composite-quest-card__meta-category {
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--pad, var(--color-muted-fg));
}

.composite-quest-card__meta-assignment {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  opacity: 0.7;
}

.composite-quest-card__assignee {
  color: var(--color-muted-fg);
  display: inline-flex;
  align-items: center;
}

/* ---- Description block (reuses description-toggle controller) ---- */

.composite-quest-card__description-block {
  grid-column: 2;
  grid-row: 3;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.composite-quest-card__description-toggle {
  appearance: none;
  border: none;
  background: none;
  padding: 0;
  margin: 0;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font: inherit;
  font-size: 0.75rem;
  color: var(--color-muted-fg);
  transition: opacity 160ms ease;
}

.composite-quest-card__description-toggle:hover { opacity: 0.8; }

.composite-quest-card__description-chevron {
  width: 0.75rem;
  height: 0.75rem;
  transition: transform 200ms ease;
}

.composite-quest-card__description-block.is-expanded .composite-quest-card__description-chevron {
  transform: rotate(180deg);
}

.composite-quest-card__description-body {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 220ms ease;
  width: 100%;
}

.composite-quest-card__description-block.is-expanded .composite-quest-card__description-body {
  grid-template-rows: 1fr;
}

.composite-quest-card__description-body > * { overflow: hidden; }

.composite-quest-card__description {
  margin: 0.4rem 0 0;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-muted-fg);
  letter-spacing: 0.02em;
}

.composite-quest-card__description > p { margin: 0.5em 0; }
.composite-quest-card__description > :first-child { margin-top: 0; }
.composite-quest-card__description > :last-child  { margin-bottom: 0; }

/* ---- Body (holds the nested .quest-cards) ---- */

.composite-quest-card__body {
  grid-column: 2;
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  margin-left: -0.25rem; /* nudge so nested marker visually aligns with the composite's title-row left edge */
}

.composite-quest-card__body[hidden] { display: none; }

/* ---- Closer divider ---- */

.composite-quest-card__divider {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 1.25rem 0.5rem 0;
  color: var(--color-muted-fg);
}

.composite-quest-card__divider::before,
.composite-quest-card__divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--color-border, rgba(0, 0, 0, 0.08));
}

.composite-quest-card__divider-label {
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--pad, var(--color-muted-fg));
  flex-shrink: 0;
}

/* ====================================================================
   Nested .quest-card — a sub-quest is just a quest, rendered smaller
   and frame-less when it lives inside a composite card's body.

   We only override what genuinely differs from a top-level card; the
   rest (marker, ring, check, xp-display, title-row, description block,
   text-box trims, descender nudges) is inherited verbatim.
   ==================================================================== */

.composite-quest-card__body .quest-card {
  /* Smaller marker stack (shared `.marker` block reads these vars). */
  --marker-size: 1.25rem;
  --circle-size: 1.25rem;
  --ring-size:   1.75rem;
  --check-size:  0.75rem;

  /* No card chrome inside the composite — sub-quests sit flush. */
  background: transparent;
  box-shadow: none;
  padding: 0.5rem 0;
  /* Match the smaller marker so col 1 hugs the circle. */
  grid-template-columns: 1.25rem 1fr;
  row-gap: 0.4rem;
  cursor: default;
}

/* The press-and-hold controller is only wired on available sub-quests,
   so only those should advertise as clickable. */
.composite-quest-card__body .quest-card[data-controller~="quest-card"] {
  cursor: pointer;
}

/* Title is smaller than top-level (1rem → 0.875rem). */
.composite-quest-card__body .quest-card__title {
  font-size: 0.875rem;
}

/* ---- Shared state classes for nested cards (and applied wherever the
   markup carries them; only sub-quests currently use locked/closer). ---- */

.quest-card.is-locked {
  opacity: 0.5;
  cursor: default;
}

.quest-card.is-locked .marker { pointer-events: none; }

/* Nested .is-done is gentler than the top-level card's 0.85, because
   the sub already has no chrome and reads "less prominent" by default. */
.composite-quest-card__body .quest-card.is-done {
  opacity: 0.75;
}

/* Disabled-button visual dim — only for nested cards. The top-level
   card already dims its whole article on .is-done so a marker-only dim
   there would compound badly. */
.composite-quest-card__body button.marker[disabled] {
  opacity: 0.45;
}

/* XP block muted on locked/completed nested cards. */
.composite-quest-card__body .quest-card.is-done .xp-display,
.composite-quest-card__body .quest-card.is-locked .xp-display {
  opacity: 0.5;
}

/* ====================================================================
   Sub-quest editor — form layout (inside the quest form). Unrelated to
   the dashboard rendering above; lives here because it edits the same
   domain entity. Uses `.sub-quest-row` as the form-row container.
   ==================================================================== */

.sub-quest-editor {
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 1rem;
  background: var(--color-muted-bg);
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  margin-top: 0.5rem;
}

.sub-quest-editor .sub-quest-row {
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
}

.sub-quest-row__fields {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  padding: 0.75rem;
  align-items: flex-end;
}

.sub-quest-row__field {
  display: flex;
  flex-direction: column;
  flex: 1 1 12rem;
  min-width: 0;
}

.sub-quest-row__field--narrow { flex: 0 1 6rem; }

.sub-quest-row__field--checkbox {
  flex: 0 1 auto;
  flex-direction: row;
  align-items: center;
  gap: 0.4rem;
  padding-bottom: 0.2rem;
}

.sub-quest-row__field--checkbox label {
  margin: 0;
  font-weight: 400;
  font-size: 0.875rem;
}

.sub-quest-row__field--checkbox input[type="checkbox"] {
  width: auto;
  accent-color: var(--color-primary);
}

.sub-quest-row__field label {
  font-size: 0.8rem;
  font-weight: 500;
  color: var(--color-muted-fg);
  margin-bottom: 0.2rem;
}

.sub-quest-row__field input,
.sub-quest-row__field textarea,
.sub-quest-row__field select {
  font-size: 0.9rem;
  padding: 0.45rem 0.65rem;
}

.sub-quest-editor .btn-remove {
  display: block;
  width: 100%;
  padding: 0.3rem 0.75rem;
  background: none;
  border: none;
  border-top: 1px solid var(--color-border);
  color: var(--color-destructive);
  font: inherit;
  font-size: 0.8rem;
  cursor: pointer;
  text-align: right;
  transition: background 120ms ease;
}

.sub-quest-editor .btn-remove:hover {
  background: color-mix(in srgb, var(--color-destructive) 6%, transparent);
}

.btn-add-sub-quest {
  align-self: flex-start;
  padding: 0.45rem 1rem;
  border-radius: var(--radius);
  border: 1px dashed var(--color-primary);
  background: transparent;
  color: var(--color-primary);
  font: inherit;
  font-size: 0.875rem;
  cursor: pointer;
  transition: background 120ms ease, color 120ms ease;
}

.btn-add-sub-quest:hover {
  background: color-mix(in srgb, var(--color-primary) 8%, transparent);
}
