/* Garden Galaxy chrome — one garden, bodies inside, arrow to the next galaxy.
   Layer, never delete. Art is a galaxy (music.html) and a garden of lights.
   Team is named later. Do not restyle mobile inner rings. Do not enable bloom on phones. */

html {
  background: #0c0a1a;
}

html.garden-enter body {
  opacity: 0;
}

html.garden-ready body {
  opacity: 1;
  transition: opacity 400ms ease;
}

html.garden-leaving body {
  opacity: 0;
  transition: opacity 400ms ease;
}

@media (prefers-reduced-motion: reduce) {
  html.garden-enter body,
  html.garden-ready body,
  html.garden-leaving body {
    opacity: 1;
    transition: none;
  }

  #galaxy-title,
  #galaxy-title.is-faded { opacity: 0; }

  #room-label,
  #room-label.is-shown,
  #room-label.is-fading {
    opacity: 0.92 !important;
    transition: none;
  }

  #garden-footing,
  #garden-footing.is-shown,
  #garden-footing.is-fading {
    opacity: 0.72 !important;
    transition: none;
  }
}

#galaxy-title {
  position: fixed;
  top: 48px;
  left: 0;
  right: 0;
  z-index: 12;
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  font-weight: normal;
  letter-spacing: 0.06em;
  color: #e8b019;
  opacity: 0.72;
  pointer-events: none;
  transition: opacity 1.2s ease;
}

#galaxy-title.is-faded { opacity: 0; }

#room-label {
  position: fixed;
  top: 74px;
  left: 0;
  right: 0;
  z-index: 1002;
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  font-weight: normal;
  letter-spacing: 0.05em;
  color: #e8b019;
  opacity: 0;
  pointer-events: none;
  text-shadow: 0 0 14px rgba(12, 10, 26, 0.95);
  transition: opacity 2.4s ease, top 1.2s ease;
}

#room-label.is-shown {
  opacity: 0.92;
  transition: opacity 2.4s ease, top 1.2s ease;
}

#room-label.is-fading {
  opacity: 0;
  transition: opacity 8s ease, top 1.2s ease;
}

#galaxy-title.is-faded + #room-label { top: 52px; }

#garden-footing {
  position: fixed;
  top: 98px;
  left: 0;
  right: 0;
  z-index: 12;
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  font-weight: normal;
  font-style: italic;
  letter-spacing: 0.03em;
  color: rgba(200, 210, 230, 0.48);
  opacity: 0;
  pointer-events: none;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.95);
  transition: opacity 2.4s ease, top 1.2s ease;
}

#garden-footing[hidden] { display: none !important; }

#garden-footing.is-shown {
  opacity: 0.72;
  transition: opacity 2.4s ease, top 1.2s ease;
}

#garden-footing.is-fading {
  opacity: 0;
  transition: opacity 8s ease, top 1.2s ease;
}

#galaxy-title.is-faded ~ #garden-footing { top: 76px; }

/* Bodies IN the garden — labels, not a second canvas, not a ring restyle. */
.place-label {
  position: fixed;
  z-index: 12;
  pointer-events: auto;
  padding: 0;
  border: 0;
  background: transparent;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: #e8b019;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.place-core {
  left: 7%;
  top: 46%;
  opacity: 0.7;
}

/* Visible word is The Gathering. .place-core stays so the layer is not deleted. */

.place-nursery {
  left: 50%;
  bottom: 96px;
  transform: translateX(-50%);
  opacity: 0.88;
  font-size: 0.86rem;
}

.place-settings {
  right: 7%;
  top: 46%;
  opacity: 0.55;
}

.place-settings.has-home {
  opacity: 0.88;
}

.place-settings.has-home::after {
  content: '';
  display: inline-block;
  width: 7px;
  height: 7px;
  margin-left: 8px;
  border-radius: 50%;
  background: #34d399;
  box-shadow: 0 0 10px rgba(52, 211, 153, 0.85);
  vertical-align: middle;
}

@media (prefers-reduced-motion: reduce) {
  .place-settings.has-home::after {
    box-shadow: 0 0 6px rgba(52, 211, 153, 0.55);
  }
}

.place-label:hover,
.place-label:focus-visible {
  opacity: 0.95;
  outline: none;
}

.place-core:hover { opacity: 0.95; }

/* Thread open: garden body words rest so remembered-light does not run over them.
   Labels stay in the DOM. Closing thread returns them. */
html.thread-open .place-label,
html.thread-open .place-label:hover,
html.thread-open .place-label:focus-visible,
html.thread-open .place-core,
html.thread-open .place-core:hover,
html.thread-open .place-settings,
html.thread-open .place-settings.has-home,
html.thread-open .place-nursery {
  opacity: 0;
  pointer-events: none;
}

/* Four garden luminos are the walk. Old place-label hooks stay as a layer
   (data-garden-place=core stays) but carry no names — luminos draw the words once.
   Do not invent a fifth canvas. Do not restore name text onto these hooks. */
html:has(.garden-lumino) .place-label,
html:has(.garden-lumino) .place-label:hover,
html:has(.garden-lumino) .place-label:focus-visible,
html:has(.garden-lumino) .place-core,
html:has(.garden-lumino) .place-core:hover,
html:has(.garden-lumino) .place-settings,
html:has(.garden-lumino) .place-settings.has-home,
html:has(.garden-lumino) .place-nursery {
  display: none;
}

html.thread-open #place-veil-close {
  opacity: 0;
  pointer-events: none;
}

#place-veil[hidden] { display: none !important; }

/* Later veil may dim the garden. Header stays above so galaxies, thread,
   and theLatticeTree stay reachable. Do not black out. */
#garden-header {
  z-index: 1010;
  pointer-events: auto;
}

#place-veil {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 88px 28px 72px;
  background: rgba(12, 10, 26, 0.22);
  opacity: 0;
  pointer-events: none;
  transition: opacity 400ms ease;
}

#place-veil.is-open {
  opacity: 1;
  pointer-events: auto;
}

#place-veil-line {
  max-width: 28em;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.82);
}

#place-veil-close {
  border: 0;
  background: transparent;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: #e8b019;
  opacity: 0.7;
  cursor: pointer;
}

#place-veil-close:hover,
#place-veil-close:focus-visible {
  opacity: 1;
  outline: none;
}

/* Nursery — light veil so the egg and garden stay visible. Never a 0.82 blackout. */
#place-veil.is-nursery {
  justify-content: flex-start;
  overflow-y: auto;
  background: linear-gradient(
    to bottom,
    rgba(12, 10, 26, 0.12) 0%,
    rgba(12, 10, 26, 0.28) 42%,
    rgba(12, 10, 26, 0.42) 100%
  );
}

#place-veil.is-core {
  background: rgba(12, 10, 26, 0.18);
}

#place-veil.is-settings {
  background: rgba(12, 10, 26, 0.28);
}

#place-veil.is-nursery #place-veil-close {
  position: sticky;
  bottom: 8px;
  margin-top: 16px;
  background: rgba(12, 10, 26, 0.85);
  padding: 6px 12px;
}

#nursery-trainer[hidden] { display: none !important; }

.nursery-face {
  width: min(32em, 100%);
  margin: 0 auto;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
}

.room-nursery {
  align-items: flex-start;
  padding-top: 96px;
}

.room-nursery #nursery-trainer,
.room-nursery #nursery-growth {
  width: min(32em, 100%);
}

.nursery-heart {
  font-size: 1.12rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.88);
  margin-bottom: 18px;
}

.nursery-keep {
  display: block;
  width: 100%;
  margin: 0 auto 12px;
  padding: 12px 18px;
  background: rgba(232, 176, 25, 0.1);
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1rem;
  cursor: pointer;
}

.nursery-keep:hover,
.nursery-keep:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.nursery-mode {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 0 0 12px;
  font-size: 0.72rem;
  color: rgba(200, 210, 230, 0.4);
  cursor: pointer;
  user-select: none;
}

.nursery-mode input { accent-color: #a78bfa; }

.nursery-status {
  min-height: 1.4em;
  margin: 0 0 10px;
  font-size: 0.82rem;
  line-height: 1.55;
  color: #34d399;
}

.nursery-status.is-warn { color: #f07068; }

.nursery-muted {
  font-size: 0.8rem;
  line-height: 1.6;
  color: rgba(200, 210, 230, 0.42);
  margin: 8px 0 12px;
}

.nursery-hashes {
  list-style: none;
  text-align: left;
  margin: 0 0 18px;
}

.nursery-hashes li {
  padding: 8px 0;
  border-bottom: 1px solid rgba(200, 210, 230, 0.08);
  font-size: 0.75rem;
  color: rgba(200, 210, 230, 0.4);
}

.nursery-hashes code {
  color: #e8b019;
  font-family: 'Courier New', monospace;
  font-size: 0.85em;
  word-break: break-all;
}

.nursery-reveal,
.nursery-more {
  text-align: left;
  margin: 14px 0;
  padding: 10px 14px;
  border: 1px solid rgba(200, 210, 230, 0.08);
  border-radius: 8px;
}

.nursery-reveal summary,
.nursery-more summary {
  cursor: pointer;
  color: #e8b019;
  font-size: 0.9rem;
}

.nursery-more h3 {
  margin: 14px 0 6px;
  font-size: 0.88rem;
  font-weight: normal;
  color: #34d399;
}

.nursery-secondary {
  display: inline-block;
  margin: 6px 8px 6px 0;
  padding: 8px 14px;
  background: transparent;
  border: 1px solid rgba(52, 211, 153, 0.4);
  border-radius: 8px;
  color: #34d399;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}

.nursery-secondary:hover,
.nursery-secondary:focus-visible {
  border-color: #34d399;
  outline: none;
}

.nursery-reveal input,
.nursery-more input[type="search"] {
  width: 100%;
  margin: 6px 0;
  padding: 8px 10px;
  background: #0c0a1a;
  border: 1px solid rgba(200, 210, 230, 0.12);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.82);
  font-family: Georgia, 'Times New Roman', serif;
}

.nursery-search-row {
  padding: 8px 0;
  border-bottom: 1px solid rgba(200, 210, 230, 0.06);
  font-size: 0.82rem;
  color: rgba(200, 210, 230, 0.75);
}

.nursery-gold { color: #e8b019; font-size: 0.72rem; }

.nursery-later {
  margin-top: 16px;
  font-size: 0.78rem;
  color: rgba(167, 139, 250, 0.7);
  line-height: 1.6;
}

.nursery-path-box {
  margin-top: 10px;
  padding: 12px;
  border-left: 2px solid #34d399;
  background: rgba(52, 211, 153, 0.06);
  font-size: 0.82rem;
}

.nursery-path-box ol {
  margin: 8px 0 0 18px;
  color: rgba(200, 210, 230, 0.7);
}

/* Bottom arrow: next galaxy. Sketch: right arrow at the bottom. */
.galaxy-nav {
  position: fixed;
  bottom: 52px;
  z-index: 13;
  pointer-events: auto;
  width: 48px;
  height: 48px;
  padding: 0;
  border: 0;
  background: transparent;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.55rem;
  line-height: 48px;
  text-align: center;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.galaxy-nav-next {
  right: 10px;
  opacity: 0.92;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  width: auto;
  min-width: 56px;
  height: auto;
  line-height: 1.15;
  padding: 6px 10px 4px;
}

.galaxy-nav-light {
  display: block;
  width: 14px;
  height: 14px;
  margin: 0 auto 6px;
  border-radius: 50%;
  background: #e8b019;
  box-shadow: 0 0 14px rgba(232, 176, 25, 0.85), 0 0 2px #e8b019;
  pointer-events: none;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.galaxy-nav-word {
  display: block;
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  color: #e8b019;
  text-transform: none;
  opacity: 1;
  pointer-events: none;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.95);
}

.galaxy-nav-arrow {
  display: block;
  font-size: 1.55rem;
  line-height: 1;
}

.galaxy-nav-prev {
  left: 10px;
  opacity: 0.4;
}

.galaxy-nav-prev:has(.galaxy-nav-word) {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  width: auto;
  min-width: 56px;
  height: auto;
  line-height: 1.15;
  padding: 6px 10px 4px;
  opacity: 0.78;
  /* Layer: hop-light made this stack taller. Sit above #galaxy-word
     so the quiet word and the hop-word do not share one light. */
  bottom: 8.75rem;
}

/* Play's seed cluster sits bottom-left. A labeled prev rests above it
   so the word is the arrow, not a seed name.
   Layer after PR 31: chips rest off the first sky. The hop is a light
   now. Garden quiet-word and Research hop no longer share 11.5rem. */
html[data-garden-galaxy="garden"] .galaxy-nav-prev:has(.galaxy-nav-word) {
  bottom: 8.75rem;
}

html[data-garden-galaxy="art"] .galaxy-nav-prev { opacity: 0.82; }
html[data-garden-galaxy="art"] .galaxy-nav-next { opacity: 0.4; }

.galaxy-nav:hover,
.galaxy-nav:focus-visible {
  opacity: 0.95;
  outline: none;
}

#shared-shoulder {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 10px;
  z-index: 8;
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.62rem;
  letter-spacing: 0.06em;
  color: rgba(200, 210, 230, 0.28);
  pointer-events: none;
}

#shared-shoulder a {
  pointer-events: auto;
  color: inherit;
  text-decoration: none;
}

#shared-shoulder a:hover,
#shared-shoulder a:focus-visible {
  color: rgba(167, 139, 250, 0.55);
  outline: none;
}

@media (min-width: 800px) {
  #galaxy-title { top: 44px; }
  #room-label { top: 70px; }
  #garden-footing { top: 94px; }
  #galaxy-title.is-faded ~ #garden-footing { top: 74px; }

  .galaxy-nav {
    bottom: 22px;
    opacity: 0.55;
  }

  .galaxy-nav-next { opacity: 0.88; }
  .galaxy-nav-prev { opacity: 0.28; }
  .galaxy-nav-prev:has(.galaxy-nav-word) {
    opacity: 0.72;
    bottom: 8rem;
  }
  html[data-garden-galaxy="garden"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8rem;
    opacity: 0.78;
  }

  html[data-garden-galaxy="art"] .galaxy-nav-prev { opacity: 0.7; }
  html[data-garden-galaxy="art"] .galaxy-nav-next { opacity: 0.45; }

  .galaxy-nav-next:hover,
  .galaxy-nav-next:focus-visible,
  .galaxy-nav-prev:hover,
  .galaxy-nav-prev:focus-visible { opacity: 0.85; }

  #shared-shoulder { bottom: 16px; }

  .place-nursery { bottom: 72px; }
}

/* Honest room stubs (Nursery, Settings, Team): same sky, no canvas. */
/* v-tree-glow-1-v0: this reset now has zero weight (:where), so every card's own
   padding and margin wins again on the room pages (Settings, Nursery, Team and the
   galaxy pages). It still zeroes the browser's default margins. Was:
   html.room-page *, html.room-page *::before, html.room-page *::after { ... } */
:where(html.room-page) *,
:where(html.room-page) *::before,
:where(html.room-page) *::after { box-sizing: border-box; margin: 0; padding: 0; }

html.room-page,
html.room-page body {
  min-height: 100%;
  height: auto;
  overflow: auto;
  background: #0c0a1a;
  color: rgba(200, 210, 230, 0.75);
  font-family: Georgia, 'Times New Roman', serif;
}

html.room-page #garden-header {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 0 16px;
  background: rgba(12, 10, 26, 0.92);
  border-bottom: 1px solid rgba(200, 210, 230, 0.08);
  z-index: 1010;
  pointer-events: auto;
  backdrop-filter: blur(8px);
}

html.room-page #garden-header h1 {
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.9rem;
  font-weight: normal;
  color: #e8b019;
  letter-spacing: 0.04em;
  white-space: nowrap;
}

html.room-page #garden-header h1 a {
  color: #e8b019;
  text-decoration: none;
}

html.room-page #garden-header nav {
  display: flex;
  align-items: center;
  gap: 16px;
  font-size: 0.75rem;
}

html.room-page #garden-header nav a,
html.room-page #garden-header nav summary {
  color: rgba(200, 210, 230, 0.35);
  text-decoration: none;
  cursor: pointer;
  list-style: none;
  font-family: Georgia, 'Times New Roman', serif;
}

html.room-page #garden-header nav summary::-webkit-details-marker { display: none; }
html.room-page #garden-header nav a:hover,
html.room-page #garden-header nav summary:hover,
html.room-page #garden-header nav .thread-word:hover { color: #a78bfa; }

html.room-page .galaxies { position: relative; }

html.room-page .galaxies-panel {
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  min-width: 148px;
  padding: 10px 12px;
  background: rgba(12, 10, 26, 0.96);
  border: 1px solid rgba(200, 210, 230, 0.08);
  border-radius: 8px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 12;
}

html.room-page .galaxies-panel .verb {
  font-size: 0.62rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #a78bfa;
}

html.room-page .galaxies-panel .name { color: #e8b019; }
html.room-page .galaxies-panel .later { color: rgba(200, 210, 230, 0.35); opacity: 0.72; }
html.room-page .galaxies-panel a.later { color: rgba(200, 210, 230, 0.45); }
html.room-page .galaxies-panel .here { color: #34d399; }
html.room-page .galaxies-panel a { color: #e8b019; text-decoration: none; }
html.room-page .galaxies-panel a.quiet-root {
  color: rgba(200, 210, 230, 0.35);
  font-size: 0.62rem;
  letter-spacing: 0.06em;
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid rgba(200, 210, 230, 0.08);
}
html.room-page .galaxies-panel a.quiet-root:hover { color: #a78bfa; }

html.room-page #room-label {
  top: 52px;
}

.room-stub {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 88px 28px 72px;
  text-align: center;
}

.room-stub .room-line {
  max-width: 28em;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.72);
}

@media (min-width: 800px) {
  html.room-page #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.78), transparent);
    border-bottom: none;
    backdrop-filter: none;
  }
}

/* ── Egg ceremony (star of Nursery). Transparent canvas. Garden shows through. */
#nursery-stage[hidden],
#nursery-ceremony[hidden],
#nursery-growth[hidden],
#settings-grandmother[hidden],
#core-gathering[hidden] { display: none !important; }

#nursery-stage {
  width: min(36em, 100%);
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

.nursery-ceremony {
  width: min(32em, 100%);
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
}

.nursery-egg-wrap {
  width: 300px;
  height: 360px;
  margin: 0 auto -8px;
  pointer-events: none;
}

.nursery-egg-wrap canvas {
  display: block;
  width: 300px;
  height: 360px;
  background: transparent;
}

.nursery-egg-home,
.nursery-egg-naming,
.nursery-egg-born {
  padding: 0 8px 8px;
}

.nursery-egg-home {
  opacity: 0;
  transition: opacity 1.6s ease;
}

.nursery-egg-home.is-ready { opacity: 1; }

.nursery-egg-text {
  font-size: 1.08rem;
  font-style: italic;
  color: rgba(226, 217, 200, 0.92);
  margin-bottom: 6px;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.8);
}

.nursery-egg-sub {
  font-size: 0.9rem;
  color: rgba(200, 210, 230, 0.62);
  margin-bottom: 18px;
}

.nursery-egg-actions,
.nursery-egg-choices,
.nursery-egg-inputwrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}

.nursery-egg-begin,
.nursery-egg-choice {
  padding: 12px 28px;
  border-radius: 12px;
  border: 1px solid rgba(232, 176, 25, 0.4);
  background: rgba(232, 176, 25, 0.1);
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
  cursor: pointer;
}

.nursery-egg-begin:hover,
.nursery-egg-choice:hover,
.nursery-egg-begin:focus-visible,
.nursery-egg-choice:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.nursery-egg-choice {
  width: min(20em, 100%);
  text-align: left;
  background: rgba(12, 10, 26, 0.35);
  border-color: rgba(200, 210, 230, 0.12);
  color: rgba(200, 210, 230, 0.82);
}

.nursery-egg-choice.is-chosen {
  border-color: #e8b019;
  color: #e8b019;
}

.nursery-egg-later {
  border: 0;
  background: transparent;
  color: rgba(200, 210, 230, 0.45);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}

.nursery-egg-later:hover { color: #e8b019; }

.nursery-egg-input {
  width: min(18em, 100%);
  padding: 12px 16px;
  border-radius: 10px;
  border: 1px solid rgba(232, 176, 25, 0.3);
  background: rgba(12, 10, 26, 0.45);
  color: rgba(200, 210, 230, 0.9);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1rem;
  text-align: center;
}

.nursery-egg-input:focus {
  border-color: #e8b019;
  outline: none;
}

.nursery-egg-listen {
  min-height: 1.4em;
  margin-top: 14px;
  font-style: italic;
  color: rgba(200, 210, 230, 0.7);
}

.nursery-egg-inscribe {
  margin-top: 8px;
  font-size: 1.2rem;
  letter-spacing: 0.06em;
  color: #e8b019;
  min-height: 1.4em;
}

.nursery-egg-fullname {
  font-size: 1.45rem;
  color: #e8b019;
  letter-spacing: 0.03em;
  text-shadow: 0 0 24px rgba(232, 176, 25, 0.25);
  margin-bottom: 8px;
}

.nursery-egg-borninfo,
.nursery-egg-firstwords {
  font-size: 0.82rem;
  color: rgba(200, 210, 230, 0.5);
  line-height: 1.6;
  margin-bottom: 10px;
}

.nursery-grow {
  width: min(32em, 100%);
  margin: 8px auto 0;
  text-align: left;
  border: 1px solid rgba(200, 210, 230, 0.08);
  border-radius: 10px;
  background: rgba(12, 10, 26, 0.42);
  padding: 8px 14px 12px;
}

.nursery-grow summary {
  cursor: pointer;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  letter-spacing: 0.04em;
  padding: 6px 0;
}

.nursery-grow .nursery-face { margin-top: 8px; }

@media (prefers-reduced-motion: reduce) {
  .nursery-egg-home { opacity: 1; transition: none; }
}

/* ── Core gathering: seven chairs, types not names ──
   Layer: +7% glass so a grandmother can find the seats.
   Layer again: +8% more opaque (0.39 → 0.47). Kirk: still too transparent.
   Lattice still shows through. Not a fill. Not a wall. Keep the glass. */
.core-gathering {
  width: min(36em, 100%);
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
}

.core-line {
  font-size: 1.05rem;
  color: rgba(200, 210, 230, 0.86);
  line-height: 1.7;
  margin-bottom: 18px;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.8);
}

.core-chairs {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
  margin: 0 auto 16px;
  max-width: 32em;
}

.core-chair {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 14px 8px 12px;
  border-radius: 12px;
  border: 1px solid rgba(232, 176, 25, 0.30);
  background: rgba(12, 10, 26, 0.47);
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  cursor: pointer;
  isolation: isolate;
}

/* Cortex keeps the gold ring. Others get a whisper more, not a wall. */
.core-chair[data-chair="cortex"] {
  border-color: rgba(232, 176, 25, 0.72);
}

/* Later seats stay dashed and quieter than cortex-memory-continuity-dream.
   They rest below the crystal. A whisper of letter halo remains — not a
   shadow fight, not a solid panel. Glass stays ~0.47.
   Layer: “labeled later” keeps a whisper more night-sky ink (0.54 → 0.62)
   so a stranger can read it on the dark field. Still quieter than
   “a seat, later” (0.68) and quieter than the first four gold types. */
.core-chair.is-later {
  border-style: dashed;
  border-color: rgba(200, 210, 230, 0.22);
  color: rgba(200, 210, 230, 0.68);
}

.core-chair-type,
.core-chair-unnamed {
  position: relative;
  z-index: 1;
}

.core-chair.is-later .core-chair-type {
  text-shadow:
    0 0 12px rgba(12, 10, 26, 1),
    0 0 5px rgba(12, 10, 26, 0.96),
    0 1px 2px rgba(12, 10, 26, 0.9);
}

.core-chair.is-later .core-chair-unnamed {
  color: rgba(200, 210, 230, 0.62);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.core-chair:hover,
.core-chair:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.core-chair-type {
  font-size: 0.82rem;
  letter-spacing: 0.04em;
}

.core-chair-unnamed {
  font-size: 0.68rem;
  color: rgba(200, 210, 230, 0.42);
}

.core-center,
.core-note {
  font-size: 0.82rem;
  color: rgba(200, 210, 230, 0.55);
  line-height: 1.6;
  margin-bottom: 8px;
}

/* Layer: founding-four + Family care sit on the spinning lattice
   the way later seats once did. Later seats already rest below.
   Keep the glass. Not a fill. Not a wall. Whisper more night-sky
   ink so lower lattice tips do not cut the letters. Family
   0.38 → 0.48. Founding-four matches labeled-later (0.62).
   Wording unchanged. */
.core-note {
  color: rgba(200, 210, 230, 0.62);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.core-family {
  margin-top: 16px;
  font-size: 0.72rem;
  letter-spacing: 0.02em;
  color: rgba(200, 210, 230, 0.48);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.core-family a {
  color: rgba(167, 139, 250, 0.7);
  text-decoration: none;
}

.core-family a:hover,
.core-family a:focus-visible {
  color: #a78bfa;
  outline: none;
}

/* Layer: router honesty is the same sentence. It wraps so a
   grandmother can finish it. Whisper halo so lattice tips do
   not cut the letters. Not a new promise.
   Layer after PR 35: a bright orbit still walked through
   “May I look?”. Same words. Same later-glass chip as Settings
   honesty — around the letters, not through them. Not a wall. */
.core-router {
  max-width: 36em;
  margin-left: auto;
  margin-right: auto;
  white-space: normal;
  box-sizing: border-box;
  padding: 0.25em 0.65em;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.72);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

/* They grow stays. Same words. Upper sky — not the unnamed center,
   not a later seat. The hide that cut it during Gathering / thread
   / sky portal is lifted: a stranger can still read it. On the
   garden it sits centered in the upper sky. While Gathering is
   open it leaves the centered stack and rests in a quiet pocket
   of that same sky. Layer, never delete. */
.gt-hint {
  position: fixed;
  top: 7.25rem;
  left: 50%;
  transform: translate(-50%, 0);
  z-index: 1001;
}

html.garden-door-open .gt-hint,
html.thread-open .gt-hint,
html.sky-portal-open .gt-hint {
  left: 1.15rem;
  transform: none;
}

@media (max-width: 640px) {
  html.garden-door-open .gt-hint,
  html.thread-open .gt-hint,
  html.sky-portal-open .gt-hint {
    top: 3.05rem;
    left: 0.75rem;
  }
}

/* Later seats leave the spinning lattice. First four stay the ring
   around/above the crystal. Letters rest below, not on the wireframe.
   Layout, not a fill. Phone two-column wrap stays.
   Layer: founding-four + Family care lift to sit with the later
   sentence, above the crystal — not down onto later seats. */
@media (min-width: 641px) {
  #place-veil.is-core {
    justify-content: flex-start;
    padding-top: 4.5rem;
  }

  .core-promise {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    top: 10.7rem;
    width: min(36em, 80vw);
    text-align: center;
  }

  .core-promise .core-family {
    margin-top: 8px;
  }

  /* Layer: Family care and the router line sat flush — one grey
     mush. Same two sentences. Room so a grandmother can tell them
     apart. Family care stays above the crystal. First four move a
     whisper so the router does not land on the chair ring. */
  .core-promise .core-router {
    margin-top: 1.35rem;
  }

  /* Layer: that wrap parked “look? — not in these chairs.” as a
     short centered second line on a bright orb. Same sentence.
     The 36em cap (of the 0.82rem router face) is what wrapped it
     onto the light. Widen the lifted band so the honesty stays
     one line, above the orb. Air between Family care and the
     router stays. Family care stays above the crystal. */
  .core-promise {
    width: min(48rem, 92vw);
  }

  .core-promise .core-router {
    max-width: none;
  }

  .core-chairs:not(.core-later-chairs) {
    margin-top: 7.85rem;
  }

  /* Layer: a garden lumino sat on the continuity chair — same
     chair, same lights, top-right edge of that glass. Continuity
     sat on the centerline the lights pass. Same four chairs.
     They rest a whisper lower and a little wider so the gold
     light sits in the sky, not on continuity / unnamed.
     Glass stays glass. Do not delete the orb. */
  #place-veil.is-core .core-gathering {
    width: min(40em, 92vw);
  }

  #place-veil.is-core .core-chairs:not(.core-later-chairs) {
    margin-top: 9.15rem;
    max-width: 40em;
    gap: 2.15rem;
  }

  .core-later-chairs {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 6.75rem;
    width: min(24em, 70vw);
    max-width: 24em;
    margin: 0;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (min-width: 800px) {
  .core-later-chairs {
    bottom: 6.25rem;
  }
}

/* Layer: on the wide Gathering the Chat card sat in the same
   band as the three later seats. Same card. Same later chairs.
   The card rests below the later seats. Later seats stay below
   the crystal. Family care stays above it. Not a fill. */
@media (min-width: 641px) {
  html:has(#place-veil.is-core.is-open) #lumino-menu {
    bottom: 2.5rem;
  }

  /* Layer: shared shoulder sat under the Chat panel edge.
     Same words. Same panel. The panel rests a pocket above
     the footer so a grandmother can read it. The footer
     stays; it is not behind the card. */
  html:has(#place-veil.is-core.is-open) #shared-shoulder {
    z-index: 1006;
    bottom: 0.5rem;
  }

  html:has(#place-veil.is-core.is-open) .core-later-chairs {
    bottom: 10rem;
  }

  /* Layer: “the garden” sat in the unnamed center after later
     seats left the flow. Same word. It rests above the later
     seats, not on the crystal.
     Layer after PR 31: room-label already named The Gathering.
     Same return word. It leaves the naming band — below the
     later seats, not a second you-are-here under the title.
     Chat card rests off the sky, so this pocket is free. */
  #place-veil.is-core #place-veil-close {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 3.75rem;
  }
}

@media (max-width: 640px) {
  .core-chairs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .core-chairs:not(.core-later-chairs) { margin-bottom: 0; }
  .core-later-chairs { margin-top: 10px; }
  .nursery-egg-wrap,
  .nursery-egg-wrap canvas {
    width: 240px;
    height: 288px;
  }

  /* Layer: on the phone Gathering, the Chat · Plant · Train · Save
     strip was fixed through the unnamed chair chips and the
     Garden / Research sky words. Same strip. Same words. Not a new
     menu. Not a solid bar wall. Chairs stay in flow from the top.
     The gathering scrolls in the band above the strip so Family
     care and founding-four do not paint through it. The strip
     rests above a reserved door pocket. Garden and Research
     keep that left door column. Seed chips stay in the pocket
     but not on those words. Wide sky stays. */
  #place-veil.is-core {
    justify-content: flex-start;
    overflow: hidden;
    padding-top: 4.25rem;
    padding-bottom: 19.75rem;
  }

  #place-veil.is-core #core-gathering {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    width: min(36em, 100%);
  }

  #place-veil.is-core #place-veil-close {
    flex: 0 0 auto;
  }

  html:has(#place-veil.is-core.is-open) #lumino-menu {
    bottom: 12.25rem;
  }

  html:has(#place-veil.is-core.is-open)[data-garden-galaxy="garden"] #galaxy-word {
    bottom: 88px;
  }

  html:has(#place-veil.is-core.is-open)[data-garden-galaxy="garden"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8.75rem;
  }

  /* Layer: PR 25 parked Garden / Research in the same left
     column as the seed chips. Chips stay. Words stay. The
     chips sit beside the door column, not on it. */
  html:has(#place-veil.is-core.is-open) .garden-evolution-indicator {
    left: 7.25rem;
    bottom: 10px;
  }

  /* Layer: phone Gathering still dropped the router sentence and
     “the garden” onto the spinning lattice, and clipped the
     sentence mid-thought. Same honesty. Same return word.
     Promise children join the gathering flow so the router sits
     with the later sentence, wraps to the end, and does not use
     a fixed top. Family care stays below the chairs. Close
     leaves the unnamed center. */
  #place-veil.is-core .core-gathering {
    display: flex;
    flex-direction: column;
  }

  #place-veil.is-core .core-line { order: 1; }
  #place-veil.is-core .core-gathering > .core-center:not(.core-router) { order: 2; }
  #place-veil.is-core .core-promise { display: contents; }
  #place-veil.is-core .core-router {
    order: 3;
    position: static;
    transform: none;
    width: min(28em, 100%);
  }
  #place-veil.is-core .core-chairs {
    width: 100%;
    align-self: stretch;
  }
  #place-veil.is-core .core-chairs:not(.core-later-chairs) {
    order: 4;
    margin-top: 10px;
  }
  #place-veil.is-core .core-later-chairs { order: 5; }
  #place-veil.is-core .core-note { order: 6; }
  #place-veil.is-core .core-family { order: 7; }

  #place-veil.is-core #place-veil-close {
    position: absolute;
    top: 3.2rem;
    right: 14px;
    left: auto;
    transform: none;
  }
}

/* Shorter hands: same pocket, less air, so later chairs are not
   eaten by the reserved band. Garden / Research stay below the strip. */
@media (max-width: 640px) and (max-height: 740px) {
  #place-veil.is-core {
    padding-bottom: 16.75rem;
  }

  html:has(#place-veil.is-core.is-open) #lumino-menu {
    bottom: 10.25rem;
    padding: 8px 12px 10px;
  }

  html:has(#place-veil.is-core.is-open)[data-garden-galaxy="garden"] #galaxy-word {
    bottom: 80px;
  }

  html:has(#place-veil.is-core.is-open)[data-garden-galaxy="garden"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8.25rem;
  }
}

/* ── Settings grandmother ── */

/* Gathering roster bind (layer, 2026-09-06). Choice, not a dump. */
.core-chair.is-bound {
  border-color: rgba(74, 159, 212, 0.45);
}
.core-chair.is-speaking {
  box-shadow: 0 0 0 1px rgba(110, 231, 183, 0.55), 0 0 18px rgba(110, 231, 183, 0.18);
}
.core-chair-bind {
  display: block;
  margin-top: 0.35rem;
  font-size: 0.72rem;
  letter-spacing: 0.02em;
  color: rgba(186, 214, 255, 0.82);
}
.core-bind-picker {
  margin: 12px auto 0;
  max-width: 28em;
  padding: 0.85rem 1rem;
  background: rgba(12, 10, 26, 0.72);
  border-radius: 10px;
  border: 1px solid rgba(74, 159, 212, 0.28);
  text-align: center;
}
.core-bind-title,
.core-bind-empty {
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.88rem;
  color: rgba(200, 210, 230, 0.78);
  margin: 0 0 0.65rem;
}
.core-bind-options {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin-bottom: 0.65rem;
}
.core-bind-option,
.core-bind-decline,
.core-bind-clear {
  min-height: 44px;
  padding: 8px 14px;
  border-radius: 8px;
  border: 1px solid rgba(200, 210, 230, 0.22);
  background: rgba(12, 10, 26, 0.45);
  color: rgba(200, 210, 230, 0.9);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}
.core-bind-option:hover,
.core-bind-decline:hover,
.core-bind-clear:hover {
  border-color: rgba(110, 231, 183, 0.55);
}
.core-find-minds {
  display: block;
  width: 100%;
  max-width: 22rem;
  margin: 0 auto 1rem;
  min-height: 44px;
  padding: 10px 16px;
  border-radius: 10px;
  border: 1px solid rgba(232, 176, 25, 0.4);
  background: rgba(232, 176, 25, 0.12);
  color: rgba(232, 176, 25, 0.95);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
  cursor: pointer;
}
.core-find-minds:hover { background: rgba(232, 176, 25, 0.2); }
.core-find-minds:disabled { opacity: 0.55; cursor: default; }
.core-chair-change {
  display: block;
  margin: 6px auto 0;
  min-height: 36px;
  padding: 4px 10px;
  border-radius: 8px;
  border: 1px solid rgba(200, 210, 230, 0.22);
  background: rgba(12, 10, 26, 0.4);
  color: rgba(200, 210, 230, 0.85);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  cursor: pointer;
}
.core-chair-change:hover { border-color: rgba(110, 231, 183, 0.5); }
.settings-roster {
  margin: 14px 0 8px;
  padding: 0.75rem 0.85rem;
  background: rgba(12, 10, 26, 0.42);
  border-radius: 10px;
  border: 1px solid rgba(232, 176, 25, 0.18);
}
.settings-roster-title {
  margin: 0 0 0.55rem;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  color: rgba(232, 176, 25, 0.9);
}
.settings-roster-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 0.55rem;
}
.settings-roster-chip {
  min-height: 44px;
  padding: 8px 14px;
  border-radius: 999px;
  border: 1px solid rgba(232, 176, 25, 0.35);
  background: transparent;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}
.settings-roster-chip:hover,
.settings-roster-chip:focus-visible {
  border-color: #e8b019;
  outline: none;
}
.settings-roster-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.settings-roster-item {
  font-size: 0.82rem;
  color: rgba(200, 210, 230, 0.72);
}

.settings-face {
  width: min(32em, 100%);
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
}

.settings-heart {
  font-size: 1.12rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.9);
  margin-bottom: 18px;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.8);
}

.settings-remembered {
  font-size: 0.82rem;
  color: #34d399;
  margin-bottom: 12px;
}

.settings-constellation[hidden] { display: none !important; }

.settings-constellation {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 18px 28px;
  margin: 4px 0 18px;
}

.settings-star {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  min-width: 4.5em;
}

.settings-star-light {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #34d399;
  box-shadow: 0 0 12px rgba(52, 211, 153, 0.9), 0 0 2px #e8b019;
}

.settings-star-name {
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: rgba(200, 210, 230, 0.78);
}

.settings-star-models {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px 12px;
  max-width: 12em;
}

.settings-star-tiny {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  min-width: 44px;
  min-height: 44px;
  padding: 6px 4px;
  margin: 0;
  background: transparent;
  border: 0;
  cursor: pointer;
  font-family: Georgia, 'Times New Roman', serif;
  color: inherit;
  -webkit-appearance: none;
  appearance: none;
}

html.room-page .settings-star-tiny,
.settings-face .settings-star-tiny {
  padding: 6px 4px;
  min-width: 44px;
  min-height: 44px;
}

.settings-star-tiny:focus-visible,
.settings-star-pick:focus-visible {
  outline: 2px solid rgba(232, 176, 25, 0.75);
  outline-offset: 2px;
  border-radius: 8px;
}

.settings-star-tiny-light {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: #e8b019;
  box-shadow: 0 0 8px rgba(232, 176, 25, 0.7);
}

.settings-star-tiny.is-chosen .settings-star-tiny-light,
.settings-star-tiny[aria-checked="true"] .settings-star-tiny-light {
  width: 8px;
  height: 8px;
  background: #fde68a;
  box-shadow: 0 0 16px rgba(232, 176, 25, 1), 0 0 4px #34d399;
}

.settings-star-tiny-name {
  font-size: 0.62rem;
  color: rgba(200, 210, 230, 0.45);
  letter-spacing: 0.02em;
}

.settings-star-tiny.is-chosen .settings-star-tiny-name,
.settings-star-tiny[aria-checked="true"] .settings-star-tiny-name {
  color: rgba(232, 210, 140, 0.95);
}

.settings-star-pick {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-width: 44px;
  min-height: 44px;
  padding: 6px;
  margin: 0;
  background: transparent;
  border: 0;
  cursor: pointer;
  font-family: Georgia, 'Times New Roman', serif;
  color: inherit;
  -webkit-appearance: none;
  appearance: none;
}

html.room-page .settings-star-pick,
.settings-face .settings-star-pick {
  padding: 6px;
  min-width: 44px;
  min-height: 44px;
}

.settings-star.is-primary .settings-star-light,
.settings-star-pick[aria-pressed="true"] .settings-star-light {
  width: 11px;
  height: 11px;
  box-shadow: 0 0 16px rgba(52, 211, 153, 1), 0 0 4px #e8b019;
}

.settings-speaks {
  flex-basis: 100%;
  width: 100%;
  margin: 8px 0 0;
  font-size: 0.82rem;
  line-height: 1.55;
  color: #34d399;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.8);
}

@media (prefers-reduced-motion: reduce) {
  .settings-star-light,
  .settings-star-tiny-light {
    box-shadow: none;
  }
}

.settings-ask {
  display: block;
  width: 100%;
  padding: 14px 18px;
  background: rgba(232, 176, 25, 0.1);
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 10px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1rem;
  cursor: pointer;
}

.settings-ask:hover,
.settings-ask:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.settings-ask:disabled { opacity: 0.6; cursor: wait; }

.settings-status {
  min-height: 1.5em;
  margin: 14px 0;
  font-size: 0.9rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.78);
}

.settings-status.is-ok { color: #34d399; }
.settings-status.is-warn { color: #e8b019; }

.settings-next {
  margin: 8px 0 12px;
}

.settings-paste {
  width: 100%;
  margin: 8px 0;
  padding: 12px 14px;
  background: rgba(12, 10, 26, 0.5);
  border: 1px solid rgba(200, 210, 230, 0.14);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.88);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  text-align: center;
}

.settings-paste:focus {
  border-color: #e8b019;
  outline: none;
}

.settings-secondary {
  display: inline-block;
  padding: 8px 16px;
  background: transparent;
  border: 1px solid rgba(52, 211, 153, 0.4);
  border-radius: 8px;
  color: #34d399;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}

.settings-secondary:hover,
.settings-secondary:focus-visible {
  border-color: #34d399;
  outline: none;
}

.settings-muted {
  font-size: 0.78rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.42);
  margin-top: 10px;
}

/* Layer after PR 35: Settings honesty was the thinnest grey, and an
   orbit walked through the letters. Same words. Later-glass /
   night-sky contrast so the spinning lattice and orbits may show
   around the letters, not through them. Same pattern as Family
   care later-glass: letter halo, not a fill, not a wall. Contrast
   alone still let a bright orbit write the glyphs — a later-seat
   glass chip hugs the words (0.62, not Chat-card 0.78). Inline so
   it is not a sky bar. Not on May I look. Paste-address muted
   stays quiet. Layer, never delete. */
.settings-honesty {
  display: inline-block;
  max-width: 100%;
  box-sizing: border-box;
  padding: 0.35em 0.7em;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.72);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

/* ── Thread: a conversation, not a kitchen ── */
.thread-word {
  background: transparent;
  border: 0;
  color: rgba(200, 210, 230, 0.35);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  padding: 0;
}

.thread-word:hover,
.thread-word:focus-visible,
.thread-word[aria-current="true"] {
  color: #a78bfa;
  outline: none;
}

#thread-veil[hidden] { display: none !important; }

#thread-veil {
  position: fixed;
  inset: 0;
  z-index: 1003;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 88px 28px 72px;
  background: rgba(12, 10, 26, 0.28);
  opacity: 0;
  pointer-events: none;
  transition: opacity 400ms ease;
}

#thread-veil.is-open {
  opacity: 1;
  pointer-events: auto;
}

#thread-close {
  position: relative;
  z-index: 1;
  flex-shrink: 0;
  margin-top: 4px;
  border: 0;
  background: transparent;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: #e8b019;
  opacity: 0.7;
  cursor: pointer;
}

#thread-close:hover,
#thread-close:focus-visible {
  opacity: 1;
  outline: none;
}

#thread-stage {
  position: relative;
  z-index: 1;
  width: min(28em, 70vw);
  max-width: 28em;
}

.thread-face {
  position: relative;
  z-index: 1;
  width: min(28em, 70vw);
  max-width: 28em;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
}

.thread-heart {
  font-size: 1.02rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.88);
  margin-bottom: 14px;
  text-shadow: 0 0 12px rgba(12, 10, 26, 0.8);
}

.thread-to-settings {
  display: inline-block;
  margin: 0 0 16px;
  padding: 8px 16px;
  background: transparent;
  border: 1px solid rgba(52, 211, 153, 0.4);
  border-radius: 8px;
  color: #34d399;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}

.thread-to-settings:hover,
.thread-to-settings:focus-visible {
  border-color: #34d399;
  outline: none;
}

.thread-messages {
  list-style: none;
  text-align: left;
  max-height: min(42vh, 22em);
  overflow-y: auto;
  margin: 0 0 14px;
  padding: 4px 2px;
}

.thread-line {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 0 0 14px;
}

.thread-who {
  font-size: 0.68rem;
  letter-spacing: 0.08em;
  text-transform: lowercase;
  color: rgba(200, 210, 230, 0.4);
}

.thread-line.is-human .thread-who { color: #e8b019; }
.thread-line.is-mind .thread-who { color: #34d399; }
.thread-line.is-garden .thread-who { color: #a78bfa; }

.thread-body {
  font-size: 0.98rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.86);
  white-space: pre-wrap;
}

.thread-line.is-garden .thread-body {
  color: rgba(200, 210, 230, 0.62);
  font-style: italic;
}

.thread-compose {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: stretch;
}

.thread-compose-row {
  display: flex;
  gap: 8px;
  align-items: stretch;
  min-width: 0;
}

.thread-input {
  flex: 1;
  padding: 12px 14px;
  background: rgba(12, 10, 26, 0.5);
  border: 1px solid rgba(200, 210, 230, 0.14);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.9);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
}

.thread-input:focus {
  border-color: #e8b019;
  outline: none;
}

.thread-send {
  padding: 10px 16px;
  background: rgba(232, 176, 25, 0.1);
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  cursor: pointer;
}

.thread-send:hover,
.thread-send:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.thread-send:disabled,
.thread-send[aria-disabled="true"] { opacity: 0.55; cursor: wait; }

.thread-compose.is-closed {
  opacity: 0.45;
}

/* Fail-closed: input sleeps with Send. A typeable box that cannot
   send is a grandmother bite. Same honesty. Pointer, caret, and
   gold focus ring rest until a mind is remembered. */
.thread-compose.is-closed .thread-input,
.thread-compose.is-closed .thread-input:disabled,
.thread-compose.is-closed .thread-input[aria-disabled="true"],
.thread-compose.is-closed .thread-input[readonly] {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
  border-color: rgba(200, 210, 230, 0.08);
  background: rgba(12, 10, 26, 0.28);
  color: rgba(200, 210, 230, 0.38);
  caret-color: transparent;
  user-select: none;
}

.thread-compose.is-closed .thread-input:focus,
.thread-compose.is-closed .thread-input:focus-visible {
  border-color: rgba(200, 210, 230, 0.08);
  box-shadow: none;
  outline: none;
  caret-color: transparent;
}

.thread-compose.is-closed .thread-send,
.thread-compose.is-closed .thread-send:disabled,
.thread-compose.is-closed .thread-send[aria-disabled="true"],
.thread-compose.is-closed .thread-send:hover,
.thread-compose.is-closed .thread-send:focus-visible {
  cursor: not-allowed;
  pointer-events: none;
  border-color: rgba(232, 176, 25, 0.28);
}

.thread-tools {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 4px;
  justify-content: center;
  align-items: center;
}

.thread-tools[hidden] { display: none !important; }

.thread-tool {
  margin: 0;
  padding: 10px 8px;
  min-height: 44px;
  background: transparent;
  border: 0;
  color: rgba(232, 176, 25, 0.82);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  cursor: pointer;
}

.thread-tool:hover,
.thread-tool:focus-visible {
  color: #e8b019;
  outline: none;
}

.thread-tool:disabled,
.thread-compose.is-closed .thread-tool {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.45;
}

.thread-file-input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.thread-file {
  font-size: 0.68rem;
  letter-spacing: 0.04em;
  color: rgba(167, 139, 250, 0.78);
}

.thread-later {
  margin: -4px 0 10px;
  font-size: 0.72rem;
  line-height: 1.55;
  font-style: italic;
  color: rgba(200, 210, 230, 0.42);
}

.thread-later[hidden] { display: none !important; }

.thread-status {
  min-height: 1.3em;
  margin-top: 10px;
  font-size: 0.78rem;
  color: rgba(200, 210, 230, 0.45);
}

.thread-status.is-warn { color: #e8b019; }

/* ── Chat in the room (Gathering, Settings). Layer after PR 32.
   Same fail-closed thread. Not a Chat / plant / go-to card on the first sky.
   Do not sit on later seats, “the garden” return, hops, or shared shoulder. */
#room-chat[hidden] { display: none !important; }

#room-chat {
  width: min(16.5em, 100%);
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  pointer-events: auto;
}

.room-chat-word {
  display: inline-block;
  margin: 0 0 8px;
  padding: 0;
  border: 0;
  background: transparent;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  color: #e8b019;
  cursor: pointer;
  opacity: 0.82;
}

.room-chat-word:hover,
.room-chat-word:focus-visible {
  opacity: 1;
  outline: none;
}

.thread-face.is-room {
  width: 100%;
  max-width: none;
}

.thread-face.is-room .thread-heart {
  font-size: 0.82rem;
  line-height: 1.55;
  margin-bottom: 10px;
}

.thread-face.is-room .thread-messages {
  max-height: min(22vh, 11em);
}

.thread-face.is-room .thread-input,
.thread-face.is-room .thread-send {
  font-size: 0.85rem;
  padding: 8px 12px;
}

.thread-face.is-room .thread-to-settings {
  margin-bottom: 10px;
  padding: 6px 12px;
  font-size: 0.78rem;
}

/* Layer: Send is a whole word. The input may shrink; Send does not. */
.thread-face.is-room .thread-compose {
  min-width: 0;
}

.thread-face.is-room .thread-compose-row {
  min-width: 0;
}

.thread-face.is-room .thread-input {
  min-width: 0;
}

.thread-face.is-room .thread-send {
  flex: 0 0 auto;
}

.thread-face.is-room .thread-tool {
  min-height: 36px;
  padding: 6px 6px;
  font-size: 0.68rem;
}

.thread-face.is-room .thread-later {
  font-size: 0.66rem;
  margin: -2px 0 8px;
}

/* Wide room Chat: file / keep stay with Send. Not a wall. */
@media (min-width: 641px) {
  #place-veil.is-core #room-chat .thread-compose,
  #place-veil.is-settings #room-chat .thread-compose {
    position: sticky;
    bottom: 0;
    z-index: 2;
    background: rgba(12, 10, 26, 0.88);
  }
}

/* Wide Gathering: Chat lives to the right of the chairs, above later
   seats and “the garden”, inward from the Art hop. Glass, not a wall. */
@media (min-width: 641px) {
  #place-veil.is-core #room-chat {
    position: absolute;
    right: 1.1rem;
    top: 15.25rem;
    bottom: 16.5rem;
    width: min(14.75em, 18vw);
    overflow: auto;
    padding: 8px 10px 10px;
    background: rgba(12, 10, 26, 0.42);
    border: 1px solid rgba(200, 210, 230, 0.1);
    border-radius: 12px;
    z-index: 2;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages {
    max-height: min(18vh, 9em);
  }
}

/* Phone Gathering: Chat is a sibling under the chair scroll, not
   an overlay on later seats. Padding below is the hop pocket —
   Garden / Research / Art stay lights. “the garden” stays top-right.
   Shared shoulder stays the footer. */
@media (max-width: 640px) {
  #place-veil.is-core {
    padding-bottom: 13.5rem;
  }

  #place-veil.is-core #room-chat {
    position: relative;
    left: auto;
    right: auto;
    bottom: auto;
    width: min(36em, calc(100% - 24px));
    max-height: 12rem;
    flex: 0 0 auto;
    margin: 12px auto 0;
    overflow: auto;
    padding: 6px 10px 8px;
    background: rgba(12, 10, 26, 0.55);
    border: 1px solid rgba(200, 210, 230, 0.1);
    border-radius: 12px;
    z-index: 2;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages {
    max-height: 2.8em;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart {
    font-size: 0.72rem;
    margin-bottom: 6px;
  }

  /* Layer after PR 33: phone card was short — Send slept below the
     glass. Same Send. It stays on the sky. */
  #place-veil.is-core #room-chat .thread-compose,
  #place-veil.is-settings #room-chat .thread-compose {
    position: sticky;
    bottom: 0;
    background: rgba(12, 10, 26, 0.82);
  }
}

@media (max-width: 640px) and (max-height: 740px) {
  #place-veil.is-core {
    padding-bottom: 12.25rem;
  }

  #place-veil.is-core #room-chat {
    max-height: 9.5rem;
    padding: 4px 8px 6px;
  }
}

/* Settings veil: Chat below May I look?, not a second kitchen. */
#place-veil.is-settings {
  justify-content: flex-start;
  overflow-y: auto;
  padding-top: 5.25rem;
  padding-bottom: 5.5rem;
}

#place-veil.is-settings #room-chat {
  position: relative;
  width: min(28em, 100%);
  margin-top: 8px;
  max-height: min(34vh, 16em);
  overflow: auto;
}

html.room-page .room-stub {
  flex-direction: column;
  gap: 28px;
}

html.room-page #room-chat {
  width: min(28em, 100%);
}

/* Layer: Hypha two leftover clips after PR 33 (Chat in the room).
   Wide Gathering #room-chat used right: 1.1rem and width
   min(14.75em, 18vw), so Send sat past the sky. Same card. Same
   words. The whole Send stays on the sky — not on later seats,
   “the garden”, Family care, Art hop, or shared shoulder.
   Settings Chat sat glass over the crystal. Same honesty. Same
   fail-closed. It leaves the orb. May I look? stays the
   grandmother door — no second Settings button. Lattice may
   show through glass around the card, not through the letters.
   Layer, never delete. */
#room-chat {
  box-sizing: border-box;
}

@media (min-width: 641px) {
  #place-veil.is-core #room-chat {
    right: 3.75rem;
    top: 24.25rem;
    bottom: 8.5rem;
    width: min(18em, calc(100vw - 28rem));
    max-width: 18em;
    overflow-x: hidden;
  }

  #place-veil.is-settings #room-chat {
    position: absolute;
    right: 3.75rem;
    top: 12.75rem;
    bottom: auto;
    width: min(18em, calc(100vw - 28rem));
    max-width: 18em;
    max-height: min(42vh, 22em);
    margin-top: 0;
    overflow: auto;
    overflow-x: hidden;
    padding: 8px 10px 10px;
    background: rgba(12, 10, 26, 0.78);
    border: 1px solid rgba(200, 210, 230, 0.1);
    border-radius: 12px;
    z-index: 2;
  }

  #place-veil.is-settings #place-veil-close {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 3.75rem;
  }
}

#place-veil.is-settings #room-chat .thread-heart {
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-width: 640px) {
  #place-veil.is-settings {
    padding-bottom: 13.5rem;
  }

  #place-veil.is-settings #room-chat {
    position: relative;
    left: auto;
    right: auto;
    top: auto;
    width: min(36em, calc(100% - 24px));
    max-width: none;
    max-height: 12rem;
    flex: 0 0 auto;
    margin: auto auto 0;
    overflow: auto;
    overflow-x: hidden;
    padding: 6px 10px 8px;
    background: rgba(12, 10, 26, 0.82);
    border: 1px solid rgba(200, 210, 230, 0.1);
    border-radius: 12px;
    z-index: 2;
  }

  #place-veil.is-settings #room-chat .thread-face.is-room .thread-messages {
    max-height: 2.8em;
  }

  #place-veil.is-settings #room-chat .thread-face.is-room .thread-heart {
    font-size: 0.72rem;
    margin-bottom: 6px;
  }

  #place-veil.is-settings #place-veil-close {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 3.75rem;
  }
}

@media (max-width: 640px) and (max-height: 740px) {
  #place-veil.is-settings {
    padding-bottom: 12.25rem;
  }

  #place-veil.is-settings #room-chat {
    max-height: 9.5rem;
    padding: 4px 8px 6px;
  }
}

/* ── Workshop garden of lights (first finishing chunk)
   Night sky, three named luminos. No fourth orb for the shared middle.
   Do not restyle Play bodies. Do not touch Gathering phone wrap.
   Bloom stays off — this page has no bloom stack. */
html[data-garden-galaxy="workshop"],
html[data-garden-galaxy="workshop"] body {
  height: 100%;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 42%, rgba(52, 211, 153, 0.07), transparent 46%),
    radial-gradient(ellipse at 16% 48%, rgba(167, 139, 250, 0.06), transparent 34%),
    radial-gradient(ellipse at 84% 48%, rgba(232, 176, 25, 0.05), transparent 34%),
    #0c0a1a;
}

html[data-garden-galaxy="workshop"] .room-stub { display: none; }

html[data-garden-galaxy="workshop"] #gardenContainer {
  position: fixed;
  top: 44px;
  left: 0; right: 0; bottom: 44px;
  overflow: hidden;
  z-index: 1;
}

html[data-garden-galaxy="workshop"] #gardenContainer canvas {
  display: block;
  width: 100%;
  height: 100%;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="workshop"] #gardenContainer {
    top: 0;
    bottom: 0;
  }
}

.workshop-heart {
  position: fixed;
  left: 50%;
  top: 46%;
  transform: translate(-50%, -50%);
  z-index: 11;
  width: min(28em, 72vw);
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.72);
  pointer-events: none;
  text-shadow: 0 0 16px rgba(12, 10, 26, 0.95);
}

.workshop-lumino {
  position: fixed;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  font-family: Georgia, 'Times New Roman', serif;
}

.workshop-lumino-light {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

@keyframes workshop-lumino-breath {
  0%, 100% { opacity: 0.72; }
  50% { opacity: 1; }
}

.workshop-lumino-word {
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  color: #e8b019;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.workshop-lumino.is-trainer {
  left: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.workshop-lumino.is-trainer .workshop-lumino-light {
  background: #a78bfa;
  box-shadow: 0 0 16px rgba(167, 139, 250, 0.85), 0 0 2px #a78bfa;
}

.workshop-lumino.is-trainer .workshop-lumino-word { color: #c4b5fd; }

.workshop-lumino.is-workshop {
  left: 50%;
  bottom: 22%;
  transform: translateX(-50%);
}

.workshop-lumino.is-workshop .workshop-lumino-light {
  background: #34d399;
  box-shadow: 0 0 16px rgba(52, 211, 153, 0.85), 0 0 2px #34d399;
}

.workshop-lumino.is-workshop .workshop-lumino-word { color: #6ee7b7; }

.workshop-lumino.is-skills {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.workshop-lumino.is-skills .workshop-lumino-light {
  background: #e8b019;
  box-shadow: 0 0 16px rgba(232, 176, 25, 0.85), 0 0 2px #e8b019;
}

.workshop-lumino:hover .workshop-lumino-word,
.workshop-lumino:focus-visible .workshop-lumino-word,
.workshop-lumino[aria-current="true"] .workshop-lumino-word {
  opacity: 1;
}

.workshop-lumino:focus-visible {
  outline: none;
}

.workshop-lumino:hover .workshop-lumino-light,
.workshop-lumino:focus-visible .workshop-lumino-light {
  transform: scale(1.12);
}

#galaxy-word {
  position: fixed;
  left: 16px;
  bottom: 64px;
  z-index: 12;
  margin: 0;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  color: rgba(200, 210, 230, 0.42);
  pointer-events: none;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

#place-veil.is-workshop-later,
#place-veil.is-open.is-workshop-later {
  opacity: 1;
  pointer-events: auto;
  transition: none;
  background: rgba(12, 10, 26, 0.22);
}

#place-veil.is-workshop-later #place-veil-line {
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

#place-veil.is-workshop-benches,
#place-veil.is-open.is-workshop-benches {
  justify-content: flex-start;
  overflow-y: auto;
  opacity: 1;
  pointer-events: auto;
  background: linear-gradient(
    to bottom,
    rgba(12, 10, 26, 0.12) 0%,
    rgba(12, 10, 26, 0.28) 42%,
    rgba(12, 10, 26, 0.42) 100%
  );
}

#place-veil.is-workshop-benches #place-veil-close {
  position: sticky;
  bottom: 8px;
  margin-top: 16px;
  background: rgba(12, 10, 26, 0.85);
  padding: 6px 12px;
}

#workshop-benches[hidden] { display: none !important; }

#workshop-benches {
  width: min(42em, 92vw);
  margin: 0 auto;
}

.workshop-benches-face {
  font-family: Georgia, 'Times New Roman', serif;
  color: rgba(200, 210, 230, 0.82);
  text-align: center;
}

.workshop-benches-heart {
  margin: 0 0 14px;
  font-size: 1.02rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

.workshop-benches-settings {
  display: inline-block;
  margin: 0 0 18px;
  padding: 10px 18px;
  min-height: 44px;
  background: transparent;
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  cursor: pointer;
}

.workshop-benches-settings:hover,
.workshop-benches-settings:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.workshop-git {
  margin: 0 auto 16px;
  padding: 12px 16px;
  max-width: 28em;
  border: 1px solid rgba(52, 211, 153, 0.28);
  border-radius: 10px;
  background: rgba(12, 10, 26, 0.42);
  text-align: left;
}

.workshop-git-label {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  cursor: pointer;
  color: #6ee7b7;
  font-size: 0.95rem;
  letter-spacing: 0.02em;
}

.workshop-git-toggle {
  width: 18px;
  height: 18px;
  accent-color: #34d399;
  flex-shrink: 0;
}

.workshop-git-help {
  margin: 0;
  font-size: 0.78rem;
  line-height: 1.55;
  color: rgba(200, 210, 230, 0.62);
}

.workshop-git-acts {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}

.workshop-git-acts[hidden] { display: none !important; }

.workshop-benches-later {
  margin: 0 0 14px;
  font-size: 0.72rem;
  line-height: 1.55;
  font-style: italic;
  color: rgba(200, 210, 230, 0.42);
}

.workshop-benches-later[hidden] { display: none !important; }

.workshop-pad {
  display: block;
  width: 100%;
  min-height: 10rem;
  margin: 0 0 10px;
  padding: 12px 14px;
  resize: vertical;
  background: rgba(12, 10, 26, 0.55);
  border: 1px solid rgba(200, 210, 230, 0.14);
  border-radius: 8px;
  color: rgba(110, 231, 183, 0.92);
  font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
  font-size: 0.82rem;
  line-height: 1.5;
}

.workshop-pad:focus,
.workshop-pad:focus-visible {
  outline: none;
  border-color: rgba(52, 211, 153, 0.55);
}

.workshop-ask {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0 0 10px;
}

.workshop-ask-input {
  flex: 1 1 12em;
  min-height: 44px;
  padding: 10px 12px;
  background: rgba(12, 10, 26, 0.55);
  border: 1px solid rgba(200, 210, 230, 0.14);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.88);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
}

.workshop-ask-input:focus,
.workshop-ask-input:focus-visible {
  outline: none;
  border-color: rgba(232, 176, 25, 0.55);
}

.workshop-benches-act {
  min-height: 44px;
  padding: 10px 16px;
  background: rgba(232, 176, 25, 0.1);
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.88rem;
  cursor: pointer;
}

.workshop-benches-act.is-ask {
  background: rgba(52, 211, 153, 0.1);
  border-color: rgba(52, 211, 153, 0.45);
  color: #6ee7b7;
}

.workshop-benches-act:hover,
.workshop-benches-act:focus-visible {
  outline: none;
  border-color: #e8b019;
}

.workshop-benches-act.is-ask:hover,
.workshop-benches-act.is-ask:focus-visible {
  border-color: #34d399;
}

.workshop-preview {
  display: block;
  width: 100%;
  min-height: 8rem;
  margin: 0 0 8px;
  border: 1px solid rgba(200, 210, 230, 0.1);
  border-radius: 8px;
  background: rgba(10, 10, 20, 0.65);
}

.workshop-preview[hidden] { display: none !important; }

.workshop-benches-status {
  min-height: 1.3em;
  margin: 0 0 8px;
  font-size: 0.78rem;
  color: rgba(200, 210, 230, 0.45);
}

.workshop-benches-status.is-warn {
  color: rgba(240, 112, 104, 0.82);
}

.workshop-benches-face.is-closed .workshop-pad,
.workshop-benches-face.is-closed .workshop-pad:disabled,
.workshop-benches-face.is-closed .workshop-ask-input,
.workshop-benches-face.is-closed .workshop-ask-input:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
  caret-color: transparent;
  user-select: none;
}

.workshop-benches-face.is-closed .workshop-ask .workshop-benches-act,
.workshop-benches-face.is-closed .workshop-ask .workshop-benches-act:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
}

.workshop-ask.is-closed {
  opacity: 0.45;
}

/* Layer: Hypha one leftover after PR 40 (Workshop benches).
   Ask and Run sat cramped on the right edge — two smudges, not
   two words. html.room-page * zeros padding, so the words shrank
   and wrapped into glyphs. Same words. Same benches. The pad and
   ask input may shrink; Ask and Run do not. The whole Ask and
   the whole Run stay on the sky — readable, not clipped, not
   overlapping each other, not off the right edge. Same pattern
   as Gathering Chat Send leftover after PR 33. Fail-closed still
   sleeps. Git toggle stays OFF by default. Do not un-sleep
   pad/Ask/Run. Layer, never delete. */
#place-veil.is-workshop-benches #workshop-benches {
  width: min(42em, 100%);
  max-width: 100%;
  box-sizing: border-box;
  padding: 0 14px 4px;
}

html.room-page .workshop-ask,
#place-veil.is-workshop-benches .workshop-ask {
  min-width: 0;
  box-sizing: border-box;
  align-items: stretch;
  margin: 0 0 10px;
}

html.room-page .workshop-ask-input,
#place-veil.is-workshop-benches .workshop-ask-input {
  min-width: 0;
  flex: 1 1 8em;
  padding: 10px 12px;
}

html.room-page .workshop-ask .workshop-benches-act,
#place-veil.is-workshop-benches .workshop-ask .workshop-benches-act {
  flex: 0 0 auto;
  white-space: nowrap;
  padding: 10px 16px;
  min-height: 44px;
  overflow: visible;
}

html.room-page .workshop-pad,
#place-veil.is-workshop-benches .workshop-pad {
  margin-bottom: 10px;
}

/* Layer: Hypha leftover after PR 42 (Workshop benches).
   Settings grandmother door sat on the Git commit/push card.
   html.room-page * zeros margin, so the door had no air.
   Same leftover pattern as Workshop Ask/Run after PR 40 and
   Gathering Chat Send after PR 33. Same door. Same Git card.
   Settings sits above the Git card, not on it. Git toggle
   stays OFF by default. Ask and Run stay whole words.
   Do not un-sleep pad/Ask/Run. Layer, never delete. */
html.room-page .workshop-benches-heart,
#place-veil.is-workshop-benches .workshop-benches-heart {
  margin: 0 0 14px;
}

html.room-page .workshop-benches-settings,
#place-veil.is-workshop-benches .workshop-benches-settings {
  display: inline-block;
  margin: 0 0 18px;
  padding: 10px 18px;
}

html.room-page .workshop-git,
#place-veil.is-workshop-benches .workshop-git {
  margin: 0 auto 16px;
  padding: 12px 16px;
}

/* Layer: Workshop Trainer working room (2026-08-31).
   The Trainer light opens a simple face. Fail-closed until a
   mind is remembered. Fail-closed if local-only cannot be proven.
   Train sleeps. Settings grandmother door present. No silent
   train. No invented progress. Nursery remains Grow. Same
   KeepReceipt toggle — not a second gate. Layer, never delete. */
#place-veil.is-workshop-trainer,
#place-veil.is-open.is-workshop-trainer {
  justify-content: flex-start;
  overflow-y: auto;
  opacity: 1;
  pointer-events: auto;
  background: linear-gradient(
    to bottom,
    rgba(12, 10, 26, 0.12) 0%,
    rgba(12, 10, 26, 0.28) 42%,
    rgba(12, 10, 26, 0.42) 100%
  );
}

#place-veil.is-workshop-trainer #place-veil-close {
  position: sticky;
  bottom: 8px;
  margin-top: 16px;
  background: rgba(12, 10, 26, 0.85);
  padding: 6px 12px;
}

#workshop-trainer[hidden] { display: none !important; }

#workshop-trainer {
  width: min(42em, 92vw);
  margin: 0 auto;
}

#place-veil.is-workshop-trainer #workshop-trainer {
  width: min(42em, 100%);
  max-width: 100%;
  box-sizing: border-box;
  padding: 0 14px 4px;
}

.workshop-trainer-face {
  font-family: Georgia, 'Times New Roman', serif;
  color: rgba(200, 210, 230, 0.82);
  text-align: center;
}

.workshop-trainer-heart {
  margin: 0 0 14px;
  font-size: 1.02rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

.workshop-trainer-settings {
  display: inline-block;
  margin: 0 0 18px;
  padding: 10px 18px;
  min-height: 44px;
  background: transparent;
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  cursor: pointer;
}

.workshop-trainer-settings:hover,
.workshop-trainer-settings:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.workshop-trainer-grow {
  margin: 0 0 14px;
  font-size: 0.78rem;
  line-height: 1.55;
  font-style: italic;
  color: rgba(196, 181, 253, 0.72);
}

.workshop-trainer-mode {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 0 auto 8px;
  max-width: 28em;
  min-height: 44px;
  color: rgba(196, 181, 253, 0.88);
  font-size: 0.88rem;
  cursor: pointer;
}

.workshop-trainer-mode-toggle {
  width: 18px;
  height: 18px;
  accent-color: #a78bfa;
  flex-shrink: 0;
}

.workshop-trainer-mode.is-closed {
  opacity: 0.55;
  cursor: not-allowed;
}

.workshop-trainer-mode-help,
.workshop-trainer-muted {
  margin: 0 0 12px;
  font-size: 0.75rem;
  line-height: 1.55;
  color: rgba(200, 210, 230, 0.48);
}

.workshop-trainer-hashes {
  list-style: none;
  margin: 0 0 14px;
  padding: 0;
  font-size: 0.78rem;
  color: rgba(196, 181, 253, 0.7);
}

.workshop-trainer-hashes li {
  margin: 0 0 4px;
}

.workshop-trainer-act {
  display: inline-block;
  flex: 0 0 auto;
  white-space: nowrap;
  min-height: 44px;
  padding: 10px 18px;
  margin: 0 0 12px;
  background: rgba(167, 139, 250, 0.1);
  border: 1px solid rgba(167, 139, 250, 0.45);
  border-radius: 8px;
  color: #c4b5fd;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  cursor: pointer;
  overflow: visible;
}

.workshop-trainer-act:hover,
.workshop-trainer-act:focus-visible {
  outline: none;
  border-color: #a78bfa;
}

.workshop-trainer-status {
  min-height: 1.3em;
  margin: 0 0 8px;
  font-size: 0.78rem;
  line-height: 1.55;
  color: rgba(200, 210, 230, 0.45);
}

.workshop-trainer-status.is-warn {
  color: rgba(240, 112, 104, 0.82);
}

.workshop-trainer-face.is-closed .workshop-trainer-act,
.workshop-trainer-face.is-closed .workshop-trainer-act:disabled,
.workshop-trainer-face.is-closed .workshop-trainer-mode-toggle,
.workshop-trainer-face.is-closed .workshop-trainer-mode-toggle:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
}

.workshop-trainer-muted[hidden],
.workshop-trainer-hashes[hidden],
.workshop-trainer-mode[hidden],
.workshop-trainer-mode-help[hidden] { display: none !important; }

/* v-tree-score-heals-v0.1: the refusal score card gets a readable backing, like the
   other Trainer items, so the sky and the Art galaxy light stay behind the words.
   Per-subject lines wrap at 390. Layer, never delete. */
#workshop-trainer .tree-refusal-score {
  position: relative;
  z-index: 1;
  margin: 18px 0 8px;
  padding: 14px 16px;
  text-align: left;
  background: rgba(12, 10, 26, 0.88);
  border: 1px solid rgba(167, 139, 250, 0.3);
  border-radius: 12px;
  box-shadow: 0 0 24px rgba(12, 10, 26, 0.9);
  font-family: Georgia, 'Times New Roman', serif;
  color: rgba(220, 226, 240, 0.92);
}
#workshop-trainer .tree-refusal-title {
  margin: 0 0 8px;
  font-size: 1.15rem;
  line-height: 1.35;
  color: rgba(232, 196, 104, 0.95);
}
#workshop-trainer .tree-refusal-honest,
#workshop-trainer .tree-refusal-limits,
#workshop-trainer .tree-refusal-note {
  margin: 0 0 10px;
  font-size: 0.95rem;
  line-height: 1.6;
}
#workshop-trainer .tree-refusal-status {
  margin: 0 0 10px;
  font-size: 1rem;
  line-height: 1.55;
  color: #fff;
}
#workshop-trainer .tree-refusal-out,
#workshop-trainer .tree-refusal-steps {
  margin: 0 0 10px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 0.9rem;
  line-height: 1.5;
}
#workshop-trainer .tree-refusal-run:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
#workshop-trainer .tree-refusal-more summary {
  display: flex;
  align-items: center;
  min-height: 44px;
  cursor: pointer;
}
@media (max-width: 480px) {
  #workshop-trainer .tree-refusal-score { padding: 12px; }
  #workshop-trainer .tree-refusal-run { display: block; width: 100%; }
}

/* Layer: Hypha two leftovers after PR 44 (Trainer face).
   Train sat as a tiny faint smudge — smaller than Settings,
   smaller than Ask and Run. html.room-page * zeros padding,
   and the sleeping opacity plus a disabled gray made it worse.
   Same leftover pattern as Workshop Ask/Run after PR 40 and
   Gathering Chat Send after PR 33. Same word. Same face.
   The whole Train stays on the sky — readable, same weight
   and air as Settings and as Ask/Run, not clipped, not
   shrunken. Train still sleeps. Resting is not broken.
   Never silent: the resting face says weights did not change
   once. Layer, never delete. */
html.room-page .workshop-trainer-heart,
#place-veil.is-workshop-trainer .workshop-trainer-heart {
  margin: 0 0 14px;
}

html.room-page .workshop-trainer-settings,
#place-veil.is-workshop-trainer .workshop-trainer-settings {
  display: inline-block;
  margin: 0 0 18px;
  padding: 10px 18px;
  min-height: 44px;
  font-size: 0.92rem;
}

html.room-page .workshop-trainer-grow,
#place-veil.is-workshop-trainer .workshop-trainer-grow {
  margin: 0 0 14px;
}

html.room-page .workshop-trainer-act,
html.room-page .workshop-trainer-act:disabled,
#place-veil.is-workshop-trainer .workshop-trainer-act,
#place-veil.is-workshop-trainer .workshop-trainer-act:disabled {
  display: inline-block;
  flex: 0 0 auto;
  white-space: nowrap;
  padding: 10px 18px;
  min-height: 44px;
  margin: 0 0 12px;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  color: #c4b5fd;
  -webkit-text-fill-color: #c4b5fd;
  overflow: visible;
}

html.room-page .workshop-trainer-status,
#place-veil.is-workshop-trainer .workshop-trainer-status {
  margin: 0 0 8px;
}

html.room-page .workshop-trainer-face.is-closed .workshop-trainer-act,
html.room-page .workshop-trainer-face.is-closed .workshop-trainer-act:disabled,
#place-veil.is-workshop-trainer .workshop-trainer-face.is-closed .workshop-trainer-act,
#place-veil.is-workshop-trainer .workshop-trainer-face.is-closed .workshop-trainer-act:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.82;
  color: #c4b5fd;
  -webkit-text-fill-color: #c4b5fd;
}

/* Layer: Nursery slow grow after hatch. After Trainer leftover styles.
   Trainer Train-whole-word CSS stays above. Layer, never delete. */
.nursery-growth-face {
  width: min(32em, 100%);
  margin: 4px auto 0;
  padding: 10px 14px 12px;
  text-align: left;
  font-family: Georgia, 'Times New Roman', serif;
  border: 1px solid rgba(52, 211, 153, 0.14);
  border-radius: 10px;
  background: rgba(12, 10, 26, 0.38);
}

.nursery-growth-line {
  font-size: 1.05rem;
  color: #e8b019;
  letter-spacing: 0.03em;
  margin: 0 0 8px;
  text-shadow: 0 0 16px rgba(232, 176, 25, 0.18);
}

.nursery-growth-heart {
  font-size: 0.92rem;
  font-style: italic;
  color: rgba(226, 217, 200, 0.88);
  margin: 0 0 8px;
  line-height: 1.55;
}

.nursery-growth-kept,
.nursery-growth-taught,
.nursery-growth-spoken,
.nursery-growth-arc {
  font-size: 0.82rem;
  color: rgba(200, 210, 230, 0.72);
  margin: 0 0 6px;
  line-height: 1.5;
}

.nursery-growth-taught.is-asleep,
.nursery-growth-spoken.is-asleep,
.nursery-growth-arc.is-asleep {
  color: rgba(200, 210, 230, 0.5);
}

.nursery-growth-muted {
  font-size: 0.78rem;
  color: rgba(200, 210, 230, 0.48);
  margin: 0 0 8px;
  line-height: 1.5;
}

.nursery-growth-hashes {
  list-style: none;
  margin: 0 0 10px;
  padding: 0;
  font-size: 0.75rem;
  color: rgba(200, 210, 230, 0.55);
}

.nursery-growth-hashes li {
  margin: 0 0 4px;
  font-family: 'Courier New', monospace;
}

.nursery-growth-stand {
  display: inline-block;
  margin: 4px 0 10px;
  padding: 8px 14px;
  border-radius: 10px;
  border: 1px solid rgba(200, 210, 230, 0.18);
  background: rgba(12, 10, 26, 0.4);
  color: rgba(200, 210, 230, 0.82);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  cursor: pointer;
}

.nursery-growth-stand:hover,
.nursery-growth-stand:focus-visible {
  border-color: #34d399;
  color: #34d399;
  outline: none;
}

.nursery-growth-stand.is-asleep,
.nursery-growth-stand:disabled {
  cursor: default;
  opacity: 0.45;
  color: rgba(200, 210, 230, 0.45);
  border-color: rgba(200, 210, 230, 0.1);
}

.nursery-growth-later {
  font-size: 0.75rem;
  color: rgba(200, 210, 230, 0.4);
  margin: 0;
  line-height: 1.5;
}

.nursery-growth-muted[hidden],
.nursery-growth-hashes[hidden] { display: none !important; }


@media (max-width: 799px) {
  .workshop-pad { min-height: 7rem; }
  .workshop-preview { min-height: 6rem; }
}

html.thread-open .workshop-lumino,
html.thread-open .workshop-lumino:hover,
html.thread-open .workshop-heart,
html.workshop-later-open .workshop-lumino,
html.workshop-later-open .workshop-lumino:hover,
html.workshop-later-open .workshop-heart {
  display: none !important;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.workshop-heart[hidden],
.workshop-lumino[hidden] { display: none !important; }

@media (min-width: 800px) {
  html[data-garden-galaxy="workshop"] #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.78), transparent);
    border-bottom: none;
    backdrop-filter: none;
  }

  #galaxy-word { bottom: 56px; }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="workshop"] #galaxy-word {
    left: 16px;
    bottom: 88px;
  }

  .workshop-heart {
    width: min(16em, 54vw);
    font-size: 0.92rem;
    top: 50%;
  }

  .workshop-lumino.is-trainer { left: 8%; top: 26%; }
  .workshop-lumino.is-skills { right: 8%; top: 26%; }
  .workshop-lumino.is-workshop { bottom: 30%; }
}

@media (prefers-reduced-motion: reduce) {
  .workshop-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Round Table garden of lights (Reed)
   Night sky, same as Workshop. Learning is gold, joy first.
   Round Table is the ground — no orb named Round Table.
   Chalkboard waits for Art. A question stays dark until someone sits.
   No fourth orb. Bloom stays off. Do not restyle Play bodies. */
html[data-garden-galaxy="round-table"],
html[data-garden-galaxy="round-table"] body {
  height: 100%;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 42%, rgba(232, 176, 25, 0.07), transparent 46%),
    radial-gradient(ellipse at 16% 48%, rgba(232, 176, 25, 0.05), transparent 34%),
    radial-gradient(ellipse at 84% 48%, rgba(200, 210, 230, 0.03), transparent 34%),
    #0c0a1a;
}

html[data-garden-galaxy="round-table"] .room-stub { display: none; }

html[data-garden-galaxy="round-table"] #gardenContainer {
  position: fixed;
  top: 44px;
  left: 0; right: 0; bottom: 44px;
  overflow: hidden;
  z-index: 1;
}

html[data-garden-galaxy="round-table"] #gardenContainer canvas {
  display: block;
  width: 100%;
  height: 100%;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="round-table"] #gardenContainer {
    top: 0;
    bottom: 0;
  }
}

.round-table-heart {
  position: fixed;
  left: 50%;
  top: 46%;
  transform: translate(-50%, -50%);
  z-index: 11;
  width: min(28em, 72vw);
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.72);
  pointer-events: none;
  text-shadow: 0 0 16px rgba(12, 10, 26, 0.95);
}

.round-table-lumino {
  position: fixed;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  font-family: Georgia, 'Times New Roman', serif;
}

.round-table-lumino-light {
  width: 16px;
  height: 16px;
  border-radius: 50%;
}

.round-table-lumino-word {
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  color: #e8b019;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.round-table-lumino.is-learning {
  left: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.round-table-lumino.is-learning .round-table-lumino-light {
  background: #e8b019;
  box-shadow: 0 0 16px rgba(232, 176, 25, 0.85), 0 0 2px #e8b019;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.round-table-lumino.is-learning .round-table-lumino-word { color: #f5d76e; }

.round-table-lumino.is-question {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.round-table-lumino.is-question .round-table-lumino-light {
  background: rgba(200, 210, 230, 0.18);
  box-shadow: none;
  opacity: 0.42;
}

.round-table-lumino.is-question .round-table-lumino-word {
  color: rgba(200, 210, 230, 0.38);
}

.round-table-lumino:hover .round-table-lumino-word,
.round-table-lumino:focus-visible .round-table-lumino-word,
.round-table-lumino[aria-current="true"] .round-table-lumino-word {
  opacity: 1;
}

.round-table-lumino:focus-visible {
  outline: none;
}

.round-table-lumino.is-learning:hover .round-table-lumino-light,
.round-table-lumino.is-learning:focus-visible .round-table-lumino-light {
  transform: scale(1.12);
}

#place-veil.is-round-table-later,
#place-veil.is-open.is-round-table-later {
  opacity: 1;
  pointer-events: auto;
  transition: none;
  background: rgba(12, 10, 26, 0.22);
}

#place-veil.is-round-table-later #place-veil-line {
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

/* Round Table sitting — working room. Fail-closed. Words only.
   No Sit button. Do not fake chairs filling. Speak is a whole word
   (same leftover pattern as Workshop Ask / Run). */
#place-veil.is-round-table-sitting,
#place-veil.is-open.is-round-table-sitting {
  justify-content: flex-start;
  overflow-y: auto;
  opacity: 1;
  pointer-events: auto;
  background: linear-gradient(
    to bottom,
    rgba(12, 10, 26, 0.12) 0%,
    rgba(12, 10, 26, 0.28) 42%,
    rgba(12, 10, 26, 0.42) 100%
  );
}

#place-veil.is-round-table-sitting #place-veil-close {
  position: sticky;
  bottom: 8px;
  margin-top: 16px;
  background: rgba(12, 10, 26, 0.85);
  padding: 6px 12px;
}

#round-table-sitting[hidden] { display: none !important; }

#round-table-sitting {
  width: min(42em, 92vw);
  margin: 0 auto;
}

.rt-sitting-face {
  font-family: Georgia, 'Times New Roman', serif;
  color: rgba(200, 210, 230, 0.82);
  text-align: center;
}

.rt-sitting-heart {
  margin: 0 0 14px;
  font-size: 1.02rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

.rt-sitting-settings {
  display: inline-block;
  margin: 0 0 18px;
  padding: 10px 18px;
  min-height: 44px;
  background: transparent;
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  cursor: pointer;
}

.rt-sitting-settings:hover,
.rt-sitting-settings:focus-visible {
  border-color: #e8b019;
  outline: none;
}

.rt-sitting-who,
.rt-sitting-who-list,
.rt-sitting-question {
  margin: 0 0 10px;
  font-size: 0.92rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.72);
  text-shadow:
    0 0 14px rgba(12, 10, 26, 0.96),
    0 0 6px rgba(12, 10, 26, 0.9);
}

.rt-sitting-who-list {
  color: #ead9c0;
}

.rt-sitting-later {
  margin: 0 0 14px;
  font-size: 0.72rem;
  line-height: 1.55;
  font-style: italic;
  color: rgba(200, 210, 230, 0.42);
}

.rt-sitting-later[hidden] { display: none !important; }

.rt-sitting-words {
  list-style: none;
  text-align: left;
  max-height: 12rem;
  overflow-y: auto;
  margin: 0 0 12px;
  padding: 0;
}

.rt-sitting-words[hidden] { display: none !important; }

.rt-sitting-line {
  display: flex;
  gap: 10px;
  padding: 8px 0;
  border-bottom: 1px solid rgba(200, 210, 230, 0.08);
  font-size: 0.88rem;
  line-height: 1.55;
}

.rt-sitting-line-who {
  flex: 0 0 auto;
  color: #ead9c0;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
}

.rt-sitting-line.is-human .rt-sitting-line-who { color: #e8b019; }
.rt-sitting-line.is-mind .rt-sitting-line-who { color: #34d399; }
.rt-sitting-line.is-garden .rt-sitting-line-who { color: #a78bfa; }

.rt-sitting-line-body {
  color: rgba(200, 210, 230, 0.82);
}

.rt-sitting-speak {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0 0 10px;
}

.rt-sitting-input {
  flex: 1 1 12em;
  min-height: 44px;
  padding: 10px 12px;
  background: rgba(12, 10, 26, 0.55);
  border: 1px solid rgba(200, 210, 230, 0.14);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.88);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
}

.rt-sitting-input:focus,
.rt-sitting-input:focus-visible {
  outline: none;
  border-color: rgba(232, 176, 25, 0.55);
}

.rt-sitting-act {
  min-height: 44px;
  padding: 10px 16px;
  background: rgba(232, 176, 25, 0.1);
  border: 1px solid rgba(232, 176, 25, 0.45);
  border-radius: 8px;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.88rem;
  cursor: pointer;
}

.rt-sitting-act:hover,
.rt-sitting-act:focus-visible {
  outline: none;
  border-color: #e8b019;
}

.rt-sitting-status {
  min-height: 1.3em;
  margin: 0 0 8px;
  font-size: 0.78rem;
  color: rgba(200, 210, 230, 0.45);
}

.rt-sitting-status.is-warn {
  color: rgba(240, 112, 104, 0.82);
}

.rt-sitting-face.is-closed .rt-sitting-input,
.rt-sitting-face.is-closed .rt-sitting-input:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
  caret-color: transparent;
  user-select: none;
}

.rt-sitting-face.is-closed .rt-sitting-act,
.rt-sitting-face.is-closed .rt-sitting-act:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.55;
}

.rt-sitting-speak.is-closed {
  opacity: 0.45;
}

html.room-page #place-veil.is-round-table-sitting #round-table-sitting {
  width: min(42em, 100%);
  max-width: 100%;
  box-sizing: border-box;
  padding: 0 14px 4px;
}

/* html.room-page * zeros margin. Honesty needs air so Speak is a
   whole word on its own row, not a smudge against the sitting copy.
   Same leftover pattern as Workshop Ask / Run after PR 40. */
html.room-page .rt-sitting-heart,
#place-veil.is-round-table-sitting .rt-sitting-heart {
  margin: 0 0 14px;
}

html.room-page .rt-sitting-settings,
#place-veil.is-round-table-sitting .rt-sitting-settings {
  margin: 0 0 18px;
  padding: 10px 18px;
}

html.room-page .rt-sitting-who,
html.room-page .rt-sitting-who-list,
html.room-page .rt-sitting-question,
#place-veil.is-round-table-sitting .rt-sitting-who,
#place-veil.is-round-table-sitting .rt-sitting-who-list,
#place-veil.is-round-table-sitting .rt-sitting-question {
  margin: 0 0 10px;
}

html.room-page .rt-sitting-speak,
#place-veil.is-round-table-sitting .rt-sitting-speak {
  display: flex;
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  align-items: stretch;
  margin: 12px 0 10px;
}

html.room-page .rt-sitting-input,
#place-veil.is-round-table-sitting .rt-sitting-input {
  min-width: 0;
  flex: 1 1 8em;
  padding: 10px 12px;
}

html.room-page .rt-sitting-speak .rt-sitting-act,
#place-veil.is-round-table-sitting .rt-sitting-speak .rt-sitting-act {
  flex: 0 0 auto;
  white-space: nowrap;
  padding: 10px 16px;
  min-height: 44px;
  overflow: visible;
}

html.thread-open .round-table-lumino,
html.thread-open .round-table-lumino:hover,
html.thread-open .round-table-heart,
html.round-table-later-open .round-table-lumino,
html.round-table-later-open .round-table-lumino:hover,
html.round-table-later-open .round-table-heart {
  display: none !important;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.round-table-heart[hidden],
.round-table-lumino[hidden] { display: none !important; }

html[data-garden-galaxy="round-table"] .galaxy-nav-prev:has(.galaxy-nav-word) {
  bottom: 8.75rem;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="round-table"] #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.78), transparent);
    border-bottom: none;
    backdrop-filter: none;
  }

  html[data-garden-galaxy="round-table"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="round-table"] #galaxy-word {
    left: 16px;
    bottom: 88px;
  }

  .round-table-heart {
    width: min(16em, 54vw);
    font-size: 0.92rem;
    top: 50%;
  }

  .round-table-lumino.is-learning { left: 8%; top: 26%; }
  .round-table-lumino.is-question { right: 8%; top: 26%; }
}

@media (prefers-reduced-motion: reduce) {
  .round-table-lumino.is-learning .round-table-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Art garden of lights (Reed)
   Night sky, same as Workshop and Round Table.
   Art is the ground — no orb named Art.
   Listen sings (coral — not Workshop green, not Learning gold,
   not Skills amber, not Trainer violet). Chalkboard is the studio.
   A who stays dark until a person making here.
   No fourth orb. Bloom stays off. Do not restyle Play bodies. */
html[data-garden-galaxy="art"],
html[data-garden-galaxy="art"] body {
  height: 100%;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 42%, rgba(240, 112, 104, 0.07), transparent 46%),
    radial-gradient(ellipse at 16% 48%, rgba(196, 192, 176, 0.05), transparent 34%),
    radial-gradient(ellipse at 84% 48%, rgba(200, 210, 230, 0.03), transparent 34%),
    #0c0a1a;
}

html[data-garden-galaxy="art"] #gardenContainer {
  position: fixed;
  top: 44px;
  left: 0; right: 0; bottom: 44px;
  overflow: hidden;
  z-index: 1;
}

html[data-garden-galaxy="art"] #gardenContainer canvas {
  display: block;
  width: 100%;
  height: 100%;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="art"] #gardenContainer {
    top: 0;
    bottom: 0;
  }
}

.art-heart {
  position: fixed;
  left: 50%;
  top: 46%;
  transform: translate(-50%, -50%);
  z-index: 11;
  width: min(28em, 72vw);
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.72);
  pointer-events: none;
  text-shadow: 0 0 16px rgba(12, 10, 26, 0.95);
}

.art-lumino {
  position: fixed;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  font-family: Georgia, 'Times New Roman', serif;
}

/* Layer: grandmother tap — padding around light+word, min ~44px.
   Visible orb stays 16px. No button chrome. Same family: Listen,
   Chalkboard, a who. Selector must beat html.room-page * { padding: 0 }. */
html[data-garden-galaxy="art"] .art-lumino {
  padding: 14px 16px;
  min-width: 44px;
  min-height: 44px;
}

.art-lumino-light {
  width: 16px;
  height: 16px;
  border-radius: 50%;
}

.art-lumino-word {
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  color: #f5a8a2;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.art-lumino.is-listen {
  left: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.art-lumino.is-listen .art-lumino-light {
  background: #f07068;
  box-shadow: 0 0 16px rgba(240, 112, 104, 0.85), 0 0 2px #f07068;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.art-lumino.is-listen .art-lumino-word { color: #f5a8a2; }

.art-lumino.is-chalkboard {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.art-lumino.is-chalkboard .art-lumino-light {
  background: #c9c4b5;
  box-shadow: 0 0 14px rgba(201, 196, 181, 0.55), 0 0 2px #c9c4b5;
  animation: workshop-lumino-breath 4.236s ease-in-out infinite;
}

.art-lumino.is-chalkboard .art-lumino-word { color: #e8e4d8; }

.art-lumino.is-who {
  left: 50%;
  bottom: 22%;
  transform: translateX(-50%);
}

/* Layer: a who stays dark (not coral, not gold, not filled) — same
   night ink as Round Table's question, raised just enough that a
   grandmother can find the word (0.38 → 0.62, the labeled-later
   stranger-readable whisper). Node stays an unfilled dark light
   (0.18/0.42 → 0.26/0.55), plus a tighter letter halo so phi-breath
   stars do not make the word a smudge. */
.art-lumino.is-who .art-lumino-light {
  background: rgba(200, 210, 230, 0.26);
  box-shadow: none;
  opacity: 0.55;
}

.art-lumino.is-who .art-lumino-word {
  color: rgba(200, 210, 230, 0.62);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.art-lumino:hover .art-lumino-word,
.art-lumino:focus-visible .art-lumino-word,
.art-lumino[aria-current="true"] .art-lumino-word {
  opacity: 1;
}

.art-lumino:focus-visible {
  outline: none;
}

.art-lumino.is-listen:hover .art-lumino-light,
.art-lumino.is-listen:focus-visible .art-lumino-light,
.art-lumino.is-chalkboard:hover .art-lumino-light,
.art-lumino.is-chalkboard:focus-visible .art-lumino-light {
  transform: scale(1.12);
}

#place-veil.is-art-later,
#place-veil.is-open.is-art-later {
  opacity: 1;
  pointer-events: auto;
  transition: none;
  background: rgba(12, 10, 26, 0.22);
}

#place-veil.is-art-later #place-veil-line {
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

#place-veil.is-art-listen,
#place-veil.is-open.is-art-listen {
  justify-content: flex-start;
  overflow-y: auto;
  opacity: 1;
  pointer-events: auto;
  background: linear-gradient(
    to bottom,
    rgba(12, 10, 26, 0.12) 0%,
    rgba(12, 10, 26, 0.28) 42%,
    rgba(12, 10, 26, 0.42) 100%
  );
}

#place-veil.is-art-listen #place-veil-close {
  position: sticky;
  bottom: 8px;
  margin-top: 16px;
  background: rgba(12, 10, 26, 0.85);
  padding: 6px 12px;
}

#art-listen[hidden] { display: none !important; }

html.thread-open .art-lumino,
html.thread-open .art-lumino:hover,
html.thread-open .art-heart,
html.art-door-open .art-lumino,
html.art-door-open .art-lumino:hover,
html.art-door-open .art-heart {
  display: none !important;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.art-heart[hidden],
.art-lumino[hidden] { display: none !important; }

html[data-garden-galaxy="art"] .galaxy-nav-prev:has(.galaxy-nav-word) {
  bottom: 8.75rem;
}

html[data-garden-galaxy="art"] .galaxy-nav-prev,
html[data-garden-galaxy="art"] .galaxy-nav-next {
  opacity: 0.82;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="art"] #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.78), transparent);
    border-bottom: none;
    backdrop-filter: none;
  }

  html[data-garden-galaxy="art"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="art"] #galaxy-word {
    left: 16px;
    bottom: 88px;
  }

  .art-heart {
    width: min(16em, 54vw);
    font-size: 0.92rem;
    top: 50%;
  }

  .art-lumino.is-listen { left: 8%; top: 26%; }
  .art-lumino.is-chalkboard { right: 8%; top: 26%; }
  .art-lumino.is-who { bottom: 30%; }

  html[data-garden-galaxy="art"] .galaxy-nav-prev { opacity: 0.72; }
  html[data-garden-galaxy="art"] .galaxy-nav-next { opacity: 0.88; }
}

@media (prefers-reduced-motion: reduce) {
  .art-lumino.is-listen .art-lumino-light,
  .art-lumino.is-chalkboard .art-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Spine layer: held lights stay in the file, not on the walk ── */
.workshop-lumino.is-held,
.round-table-lumino.is-held,
.art-lumino.is-held,
.garden-lumino.is-held,
.research-lumino.is-held {
  display: none !important;
}

/* ── Unnamed tending center (not Art / Workshop / Learn / Research) ── */
.tend-center {
  position: fixed;
  left: 50%;
  top: 38%;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  transform: translate(-50%, -50%);
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}

.tend-center-light {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: rgba(186, 214, 255, 0.72);
  box-shadow:
    0 0 18px rgba(147, 197, 253, 0.55),
    0 0 4px rgba(186, 214, 255, 0.9);
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

/* Garden lattice is busy. Keep the center unnamed — raise the glow so a
   grandmother can find the portal without a word on it. */
html[data-garden-galaxy="garden"] .tend-center,
html[data-garden-galaxy="art"] .tend-center,
html[data-garden-galaxy="workshop"] .tend-center {
  width: 52px;
  height: 52px;
}

html[data-garden-galaxy="garden"] .tend-center-light {
  width: 22px;
  height: 22px;
  box-shadow:
    0 0 28px rgba(147, 197, 253, 0.75),
    0 0 8px rgba(186, 214, 255, 0.95);
}

/* Art leftover: extra bead above the lattice was the leftover
   named-center CSS orb. The unnamed center is the 3D lattice.
   Skip the visible bead. Keep the hit target. Do not invent a door.
   Do not hang Art on the center. */
html[data-garden-galaxy="art"] .tend-center-light,
html[data-garden-galaxy="workshop"] .tend-center-light,
html[data-garden-galaxy="round-table"] .tend-center-light,
html[data-garden-galaxy="research"] .tend-center-light {
  opacity: 0;
  background: transparent;
  box-shadow: none;
  animation: none;
}

.tend-center:hover .tend-center-light,
.tend-center:focus-visible .tend-center-light {
  transform: scale(1.12);
}

.tend-center:focus-visible { outline: none; }

.tend-center[hidden] { display: none !important; }

html.thread-open .tend-center,
html.workshop-later-open .tend-center,
html.round-table-later-open .tend-center,
html.art-door-open .tend-center,
html.research-later-open .tend-center,
html.garden-door-open .tend-center,
html.sky-portal-open .tend-center {
  display: none !important;
  pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
  .tend-center-light {
    box-shadow: 0 0 8px rgba(147, 197, 253, 0.4);
    animation: none;
    opacity: 0.9;
  }
}

/* ── Shared lumino menu: Chat · Plant · Train · Save ── */
#lumino-menu[hidden] { display: none !important; }

#lumino-menu {
  position: fixed;
  left: 50%;
  bottom: 92px;
  transform: translateX(-50%);
  z-index: 1005;
  width: min(28em, 88vw);
  padding: 10px 14px 12px;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  background: rgba(12, 10, 26, 0.72);
  border: 1px solid rgba(200, 210, 230, 0.12);
  border-radius: 12px;
  pointer-events: auto;
}

.lumino-menu-attach {
  margin: 0 0 8px;
  font-size: 0.68rem;
  line-height: 1.5;
  letter-spacing: 0.02em;
  color: rgba(200, 210, 230, 0.48);
}

.lumino-menu-acts {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px 10px;
}

#lumino-menu button {
  padding: 8px 14px;
  min-height: 44px;
  border: 1px solid rgba(232, 176, 25, 0.35);
  border-radius: 8px;
  background: transparent;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.85rem;
  letter-spacing: 0.04em;
  cursor: pointer;
}

#lumino-menu button:hover,
#lumino-menu button:focus-visible {
  border-color: #e8b019;
  outline: none;
}

#lumino-menu-note {
  margin: 8px 0 0;
  font-size: 0.78rem;
  line-height: 1.55;
  color: rgba(200, 210, 230, 0.72);
}

#lumino-menu-note[hidden] { display: none !important; }

@media (min-width: 800px) {
  #lumino-menu { bottom: 72px; }
}

/* ── Quiet sky portal (unnamed center) ── */
#sky-portal[hidden] { display: none !important; }

#sky-portal {
  position: fixed;
  inset: 0;
  z-index: 1006;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 88px 28px 72px;
  background: rgba(12, 10, 26, 0.22);
  opacity: 0;
  pointer-events: none;
  transition: opacity 400ms ease;
}

#sky-portal.is-open {
  opacity: 1;
  pointer-events: auto;
}

.sky-portal-poem {
  display: flex;
  flex-direction: column;
  gap: 1.15em;
  max-width: 28em;
}

.sky-portal-line {
  max-width: 28em;
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.02rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.82);
  text-shadow: 0 0 16px rgba(12, 10, 26, 0.95);
}

#sky-portal-next {
  width: 48px;
  height: 48px;
  padding: 0;
  border: 0;
  background: transparent;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.55rem;
  line-height: 48px;
  cursor: pointer;
  opacity: 0.78;
}

#sky-portal-next:hover,
#sky-portal-next:focus-visible {
  opacity: 1;
  outline: none;
}

.sky-portal-skies {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 14px;
}

.sky-portal-sky {
  padding: 10px 16px;
  min-height: 44px;
  border: 1px solid rgba(232, 176, 25, 0.35);
  border-radius: 8px;
  background: transparent;
  color: #e8b019;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem;
  letter-spacing: 0.04em;
  cursor: pointer;
}

.sky-portal-sky[aria-current="true"] {
  border-color: #34d399;
  color: #34d399;
}

.sky-portal-sky:hover,
.sky-portal-sky:focus-visible {
  border-color: #e8b019;
  outline: none;
}

#sky-portal-close {
  border: 0;
  background: transparent;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  color: #e8b019;
  opacity: 0.7;
  cursor: pointer;
}

#sky-portal-close:hover,
#sky-portal-close:focus-visible {
  opacity: 1;
  outline: none;
}

/* ── Garden Galaxy four luminos (open existing bodies; no fifth canvas) ── */
.garden-lumino {
  position: fixed;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  min-width: 44px;
  min-height: 44px;
  border: 0;
  background: transparent;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  font-family: Georgia, 'Times New Roman', serif;
}

.garden-lumino-light {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.garden-lumino-word {
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  color: #e8b019;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.garden-lumino.is-gathering {
  left: 16%;
  top: 32%;
}

.garden-lumino.is-gathering .garden-lumino-light {
  background: #e8b019;
  box-shadow: 0 0 16px rgba(232, 176, 25, 0.85), 0 0 2px #e8b019;
}

.garden-lumino.is-nursery {
  left: 22%;
  bottom: 26%;
}

.garden-lumino.is-nursery .garden-lumino-light {
  background: #34d399;
  box-shadow: 0 0 16px rgba(52, 211, 153, 0.85), 0 0 2px #34d399;
}

.garden-lumino.is-nursery .garden-lumino-word { color: #6ee7b7; }

.garden-lumino.is-settings {
  right: 16%;
  top: 32%;
}

.garden-lumino.is-settings .garden-lumino-light {
  background: rgba(52, 211, 153, 0.45);
  box-shadow: 0 0 12px rgba(52, 211, 153, 0.4);
}

.garden-lumino.is-settings .garden-lumino-word { color: rgba(110, 231, 183, 0.7); }

.garden-lumino.is-settings.has-home .garden-lumino-light {
  background: #34d399;
  box-shadow: 0 0 16px rgba(52, 211, 153, 0.85), 0 0 2px #34d399;
}

.garden-lumino.is-settings.has-home .garden-lumino-word { color: #6ee7b7; }

.garden-lumino.is-thread {
  right: 22%;
  bottom: 26%;
}

.garden-lumino.is-thread .garden-lumino-light {
  background: #a78bfa;
  box-shadow: 0 0 16px rgba(167, 139, 250, 0.85), 0 0 2px #a78bfa;
}

.garden-lumino.is-thread .garden-lumino-word { color: #c4b5fd; }

.garden-lumino:hover .garden-lumino-word,
.garden-lumino:focus-visible .garden-lumino-word,
.garden-lumino[aria-current="true"] .garden-lumino-word { opacity: 1; }

.garden-lumino:focus-visible { outline: none; }

.garden-lumino:hover .garden-lumino-light,
.garden-lumino:focus-visible .garden-lumino-light { transform: scale(1.12); }

/* Layer after PR 31: chips rest off the first sky. Quiet word
   returns to the door footing so it does not sit on the Research
   hop-light. Same word. Art hop stays a light. */
html[data-garden-galaxy="garden"] #galaxy-word {
  bottom: 64px;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="garden"] #galaxy-word {
    bottom: 56px;
  }
}

/* Layer: unnamed · Evolved chips sat in the left door pocket
   under Research, cut by the rail and crowded by a galaxy.
   Same chips. They leave that column so a grandmother can
   read them — above Garden / Research, not under them,
   not on the rail. Phone Gathering still parks them in the
   reserved strip pocket (left: 7.25rem). */
@media (min-width: 641px) {
  html[data-garden-galaxy="garden"] .garden-evolution-indicator {
    left: 6.75rem;
    bottom: 16.75rem;
  }
}

html.thread-open .garden-lumino,
html.garden-door-open .garden-lumino,
html.sky-portal-open .garden-lumino {
  display: none !important;
  pointer-events: none;
}

.garden-lumino[hidden] { display: none !important; }

@media (max-width: 799px) {
  html[data-garden-galaxy="garden"] #galaxy-word {
    left: 16px;
    bottom: 88px;
  }

  .garden-lumino.is-gathering { left: 6%; top: 22%; }
  .garden-lumino.is-settings { right: 6%; top: 22%; }
  .garden-lumino.is-nursery { left: 10%; bottom: 32%; }
  .garden-lumino.is-thread { right: 10%; bottom: 32%; }
}

@media (prefers-reduced-motion: reduce) {
  .garden-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Workshop: Root + Agent layered; Skills held ── */
.workshop-lumino.is-root {
  left: 50%;
  top: 22%;
  transform: translateX(-50%);
}

.workshop-lumino.is-root .workshop-lumino-light {
  background: #c4a574;
  box-shadow: 0 0 16px rgba(196, 165, 116, 0.75), 0 0 2px #c4a574;
}

.workshop-lumino.is-root .workshop-lumino-word { color: #e6d3b0; }

.workshop-lumino.is-agent {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.workshop-lumino.is-agent .workshop-lumino-light {
  background: rgba(200, 210, 230, 0.26);
  box-shadow: none;
  opacity: 0.55;
}

.workshop-lumino.is-agent .workshop-lumino-word {
  color: rgba(200, 210, 230, 0.62);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-width: 799px) {
  .workshop-lumino.is-root { top: 18%; }
  .workshop-lumino.is-agent { right: 8%; top: 26%; }
}

/* ── Learn (Round Table page): four named lights ── */
.round-table-lumino.is-table {
  left: 50%;
  bottom: 22%;
  transform: translateX(-50%);
}

.round-table-lumino.is-table .round-table-lumino-light {
  background: #d4b896;
  box-shadow: 0 0 16px rgba(212, 184, 150, 0.7), 0 0 2px #d4b896;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.round-table-lumino.is-table .round-table-lumino-word { color: #ead9c0; }

.round-table-lumino.is-translator {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.round-table-lumino.is-translator .round-table-lumino-light {
  background: #7dd3fc;
  box-shadow: 0 0 16px rgba(125, 211, 252, 0.75), 0 0 2px #7dd3fc;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.round-table-lumino.is-translator .round-table-lumino-word { color: #bae6fd; }

.round-table-lumino.is-forge {
  left: 50%;
  top: 22%;
  transform: translateX(-50%);
}

.round-table-lumino.is-forge .round-table-lumino-light {
  background: #e07a5f;
  box-shadow: 0 0 16px rgba(224, 122, 95, 0.7), 0 0 2px #e07a5f;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.round-table-lumino.is-forge .round-table-lumino-word { color: #f4b8a8; }

@media (max-width: 799px) {
  .round-table-lumino.is-translator { right: 8%; top: 26%; }
  .round-table-lumino.is-table { bottom: 30%; }
  .round-table-lumino.is-forge { top: 18%; }
}

@media (prefers-reduced-motion: reduce) {
  .round-table-lumino.is-table .round-table-lumino-light,
  .round-table-lumino.is-translator .round-table-lumino-light,
  .round-table-lumino.is-forge .round-table-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Art: Image as the fourth. Keep a who. ── */
.art-lumino.is-image {
  left: 50%;
  top: 22%;
  transform: translateX(-50%);
}

.art-lumino.is-image .art-lumino-light {
  background: #93c5fd;
  box-shadow: 0 0 14px rgba(147, 197, 253, 0.65), 0 0 2px #93c5fd;
  animation: workshop-lumino-breath 4.236s ease-in-out infinite;
}

.art-lumino.is-image .art-lumino-word { color: #bfdbfe; }

@media (max-width: 799px) {
  .art-lumino.is-image { top: 18%; }
}

@media (prefers-reduced-motion: reduce) {
  .art-lumino.is-image .art-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

/* ── Research garden of lights ── */
html[data-garden-galaxy="research"],
html[data-garden-galaxy="research"] body {
  height: 100%;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 42%, rgba(251, 146, 60, 0.06), transparent 46%),
    radial-gradient(ellipse at 16% 48%, rgba(103, 232, 249, 0.05), transparent 34%),
    radial-gradient(ellipse at 84% 48%, rgba(249, 168, 212, 0.04), transparent 34%),
    #0c0a1a;
}

html[data-garden-galaxy="research"] .room-stub { display: none; }

html[data-garden-galaxy="research"] #gardenContainer {
  position: fixed;
  top: 44px;
  left: 0; right: 0; bottom: 44px;
  overflow: hidden;
  z-index: 1;
}

html[data-garden-galaxy="research"] #gardenContainer canvas {
  display: block;
  width: 100%;
  height: 100%;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="research"] #gardenContainer {
    top: 0;
    bottom: 0;
  }
}

.research-heart {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 11;
  width: min(28em, 72vw);
  margin: 0;
  text-align: center;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(200, 210, 230, 0.72);
  pointer-events: none;
  text-shadow: 0 0 16px rgba(12, 10, 26, 0.95);
}

.research-lumino {
  position: fixed;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  min-width: 44px;
  min-height: 44px;
  border: 0;
  background: transparent;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  font-family: Georgia, 'Times New Roman', serif;
}

.research-lumino-light {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  animation: workshop-lumino-breath 2.618s ease-in-out infinite;
}

.research-lumino-word {
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  color: #e8b019;
  text-shadow: 0 0 10px rgba(12, 10, 26, 0.95);
}

.research-lumino.is-gauge {
  left: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.research-lumino.is-gauge .research-lumino-light {
  background: #fb923c;
  box-shadow: 0 0 16px rgba(251, 146, 60, 0.75), 0 0 2px #fb923c;
}

.research-lumino.is-gauge .research-lumino-word { color: #fdba74; }

.research-lumino.is-chronal {
  left: 50%;
  top: 22%;
  transform: translateX(-50%);
}

.research-lumino.is-chronal .research-lumino-light {
  background: #94a3b8;
  box-shadow: 0 0 16px rgba(148, 163, 184, 0.7), 0 0 2px #94a3b8;
}

.research-lumino.is-chronal .research-lumino-word { color: #cbd5e1; }

.research-lumino.is-simulation {
  right: 13%;
  top: 46%;
  transform: translateY(-50%);
}

.research-lumino.is-simulation .research-lumino-light {
  background: #67e8f9;
  box-shadow: 0 0 16px rgba(103, 232, 249, 0.75), 0 0 2px #67e8f9;
}

.research-lumino.is-simulation .research-lumino-word { color: #a5f3fc; }

.research-lumino.is-love-logic {
  left: 50%;
  bottom: 22%;
  transform: translateX(-50%);
}

.research-lumino.is-love-logic .research-lumino-light {
  background: #f9a8d4;
  box-shadow: 0 0 16px rgba(249, 168, 212, 0.7), 0 0 2px #f9a8d4;
}

.research-lumino.is-love-logic .research-lumino-word { color: #fbcfe8; }

.research-lumino:hover .research-lumino-word,
.research-lumino:focus-visible .research-lumino-word,
.research-lumino[aria-current="true"] .research-lumino-word { opacity: 1; }

.research-lumino:focus-visible { outline: none; }

.research-lumino:hover .research-lumino-light,
.research-lumino:focus-visible .research-lumino-light { transform: scale(1.12); }

#place-veil.is-research-later,
#place-veil.is-open.is-research-later {
  opacity: 1;
  pointer-events: auto;
  transition: none;
  background: rgba(12, 10, 26, 0.22);
}

#place-veil.is-research-later #place-veil-line {
  text-shadow:
    0 0 18px rgba(12, 10, 26, 0.98),
    0 0 8px rgba(12, 10, 26, 0.95);
}

#place-veil-door {
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.88rem;
  letter-spacing: 0.03em;
  color: #e8b019;
  text-decoration: none;
  opacity: 0.86;
}

#place-veil-door[hidden] { display: none !important; }

#place-veil-door:hover,
#place-veil-door:focus-visible {
  opacity: 1;
  outline: none;
  text-decoration: underline;
}

html.thread-open .research-lumino,
html.thread-open .research-heart,
html.research-later-open .research-lumino,
html.research-later-open .research-heart,
html.sky-portal-open .research-lumino,
html.sky-portal-open .research-heart {
  display: none !important;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.research-heart[hidden],
.research-lumino[hidden] { display: none !important; }

html[data-garden-galaxy="research"] .galaxy-nav-prev:has(.galaxy-nav-word) {
  bottom: 8.75rem;
}

@media (min-width: 800px) {
  html[data-garden-galaxy="research"] #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.78), transparent);
    border-bottom: none;
    backdrop-filter: none;
  }

  html[data-garden-galaxy="research"] .galaxy-nav-prev:has(.galaxy-nav-word) {
    bottom: 8rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="research"] #galaxy-word {
    left: 16px;
    bottom: 88px;
  }

  .research-heart {
    width: min(16em, 54vw);
    font-size: 0.92rem;
    top: 54%;
  }

  .research-lumino.is-gauge { left: 8%; top: 26%; }
  .research-lumino.is-simulation { right: 8%; top: 26%; }
  .research-lumino.is-chronal { top: 18%; }
  .research-lumino.is-love-logic { bottom: 30%; }
}

@media (prefers-reduced-motion: reduce) {
  .research-lumino-light {
    box-shadow: none;
    animation: none;
    opacity: 0.9;
  }
}

html.sky-portal-open .workshop-lumino,
html.sky-portal-open .workshop-heart,
html.sky-portal-open .round-table-lumino,
html.sky-portal-open .round-table-heart,
html.sky-portal-open .art-lumino,
html.sky-portal-open .art-heart {
  display: none !important;
  pointer-events: none;
}

/* ── Layer: the light is the click (2026-08-30)
   Word-buttons rest. Doors are moving luminos. Garden attaches
   to the canvas lights. Other skies wander in place. Left chips
   stay a legend, not a second menu. Chat · plant · go to. */

@keyframes sky-lumino-wander {
  0%, 100% { translate: 0 0; }
  25% { translate: 14px -10px; }
  50% { translate: 4px 16px; }
  75% { translate: -12px 6px; }
}

.art-lumino,
.workshop-lumino,
.round-table-lumino,
.research-lumino {
  animation: sky-lumino-wander 13.09s ease-in-out infinite;
}

.art-lumino.is-chalkboard,
.workshop-lumino.is-workshop,
.round-table-lumino.is-learning,
.research-lumino.is-chronal {
  animation-delay: -2.618s;
}

.art-lumino.is-image,
.workshop-lumino.is-root,
.round-table-lumino.is-translator,
.research-lumino.is-simulation {
  animation-delay: -4.236s;
}

.art-lumino.is-who,
.workshop-lumino.is-agent,
.round-table-lumino.is-forge,
.research-lumino.is-love-logic {
  animation-delay: -6.854s;
}

.garden-lumino-light,
.art-lumino-light,
.workshop-lumino-light,
.round-table-lumino-light,
.research-lumino-light {
  width: 28px;
  height: 28px;
}

.art-lumino.is-who .art-lumino-light,
.workshop-lumino.is-agent .workshop-lumino-light,
.round-table-lumino.is-question .round-table-lumino-light {
  width: 22px;
  height: 22px;
}

.garden-lumino-word,
.art-lumino-word,
.workshop-lumino-word,
.round-table-lumino-word,
.research-lumino-word {
  pointer-events: none;
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
}

/* Weft: a who stays a readable honesty word. Not a word-button.
   The light is still the door. */
.art-lumino.is-who .art-lumino-word {
  position: static;
  width: auto;
  height: auto;
  overflow: visible;
  clip: auto;
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  color: rgba(200, 210, 230, 0.62);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.garden-lumino.is-attached,
.art-lumino.is-attached,
.workshop-lumino.is-attached,
.round-table-lumino.is-attached,
.research-lumino.is-attached {
  left: 0;
  top: 0;
  right: auto;
  bottom: auto;
  transform: translate(-50%, -50%);
  translate: 0 0;
  animation: none;
}

.garden-lumino.is-attached .garden-lumino-light,
.art-lumino.is-attached .art-lumino-light,
.workshop-lumino.is-attached .workshop-lumino-light,
.round-table-lumino.is-attached .round-table-lumino-light,
.research-lumino.is-attached .research-lumino-light {
  width: 52px;
  height: 52px;
  opacity: 0;
  box-shadow: none;
  animation: none;
}

/* Hypha: four times unnamed · Seed is not a legend. They look like
   doors and they are not. Rest off the first walk. Code stays. */
html[data-garden-galaxy="garden"] .garden-evolution-indicator,
html[data-garden-galaxy="art"] .garden-evolution-indicator,
html[data-garden-galaxy="workshop"] .garden-evolution-indicator,
html[data-garden-galaxy="round-table"] .garden-evolution-indicator,
html[data-garden-galaxy="research"] .garden-evolution-indicator {
  display: none !important;
}

/* Rest the sky card. Chat and plant live after you arrive.
   Layer after PR 36: the color chip is a quiet legend, not that card.
   #lumino-menu stays hidden. */
#lumino-menu {
  display: none !important;
}

/* Tiny quiet chip: which current color links to what.
   Words help. Not a wall. Not a second you-are-here.
   Not on the Research hop-light. Not covering Seed chips
   or “the garden” return. */
#lumino-legend {
  position: fixed;
  left: 16px;
  bottom: 14.75rem;
  z-index: 11;
  display: flex;
  flex-direction: column;
  gap: 3px;
  pointer-events: none;
}

.lumino-legend-row {
  display: flex;
  align-items: center;
  gap: 7px;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.68rem;
  letter-spacing: 0.04em;
  color: rgba(200, 210, 230, 0.58);
  background: none;
  border: 0;
  padding: 0;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.lumino-legend-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
  /* First paint is the static door hue. attachGardenLuminos then writes
     live hsl onto background + glow so each bead tracks its canvas body. */
  box-shadow: 0 0 8px currentColor;
}

.lumino-legend-word {
  letter-spacing: 0.04em;
}

html.garden-door-open #lumino-legend,
html.thread-open #lumino-legend,
html.workshop-later-open #lumino-legend,
html.round-table-later-open #lumino-legend,
html.art-door-open #lumino-legend,
html.art-listen-open #lumino-legend,
html.research-later-open #lumino-legend,
html.sky-portal-open #lumino-legend {
  display: none !important;
}

@media (min-width: 800px) {
  #lumino-legend { bottom: 13.75rem; }
}

/* Layer after PR 37: Thread sat on the Research hop-light halo.
   Same words — gold The Gathering, mint Nursery, dim mint Settings,
   violet Thread. Same hop. The whole legend leaves that halo —
   not a wall, not a second you-are-here, not on Seed chips,
   not on Garden word, not on the hop core. Do not hide. Do not cut. */
@media (min-width: 800px) {
  html[data-garden-galaxy="garden"] #lumino-legend {
    bottom: 17.5rem;
  }

  html[data-garden-galaxy="art"] #lumino-legend {
    bottom: 17.5rem;
  }
}

@media (max-width: 799px) {
  #lumino-legend {
    top: 3.25rem;
    bottom: auto;
    left: 12px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .art-lumino,
  .workshop-lumino,
  .round-table-lumino,
  .research-lumino,
  .galaxy-nav-light {
    animation: none;
  }
}

/* ── Hypha two leftovers after PR 36 (layer, 2026-08-31)
   Art / Workshop / Learn / Research read as little placeholder
   beads. Garden doors are living orbs with rings. Same night,
   moving luminos as doors with rings, quiet galaxy word
   bottom-left. Different links, same garden. No second Three.js
   canvas. Art hop stays a light. a who stays. Center unnamed.
   Layer, never delete. */

@keyframes lumino-ring-spin-near {
  from { transform: translate(-50%, -50%) rotateX(70deg) rotateZ(0deg); }
  to { transform: translate(-50%, -50%) rotateX(70deg) rotateZ(360deg); }
}

@keyframes lumino-ring-spin-far {
  from { transform: translate(-50%, -50%) rotateX(62deg) rotateZ(0deg); }
  to { transform: translate(-50%, -50%) rotateX(62deg) rotateZ(-360deg); }
}

.sky-field {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}

@keyframes sky-star-breath {
  0%, 100% { opacity: 0.28; }
  50% { opacity: 0.92; }
}

.sky-star {
  position: absolute;
  width: 2px;
  height: 2px;
  border-radius: 50%;
  background: rgba(200, 210, 230, 0.7);
  opacity: 0.5;
  animation: sky-star-breath 2.618s ease-in-out infinite;
}

.sky-star.is-gold {
  background: rgba(232, 176, 25, 0.75);
  animation-duration: 1.618s;
}

.sky-star.is-emerald {
  background: rgba(52, 211, 153, 0.75);
  animation-duration: 4.236s;
}

/* Living orbs without waiting on JS. Garden canvas doors stay
   opacity-0 hit targets — do not dress .garden-lumino-light. */
.art-lumino-light,
.workshop-lumino-light,
.round-table-lumino-light,
.research-lumino-light,
.galaxy-nav-light,
html:not([data-garden-galaxy="garden"]):not([data-garden-galaxy="art"]):not([data-garden-galaxy="workshop"]):not([data-garden-galaxy="round-table"]):not([data-garden-galaxy="research"]) .tend-center-light {
  position: relative;
  isolation: isolate;
  overflow: visible;
  transform-style: preserve-3d;
  width: 68px;
  height: 68px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 40% 34%,
      rgba(255, 255, 255, 0.98) 0 10%,
      var(--lumino, currentColor) 26%,
      transparent 72%);
  box-shadow:
    0 0 10px rgba(255, 255, 255, 0.7),
    0 0 28px var(--lumino, currentColor),
    0 0 64px var(--lumino, currentColor);
}

.art-lumino-light::before,
.workshop-lumino-light::before,
.round-table-lumino-light::before,
.research-lumino-light::before,
.galaxy-nav-light::before,
html:not([data-garden-galaxy="garden"]):not([data-garden-galaxy="art"]):not([data-garden-galaxy="workshop"]):not([data-garden-galaxy="round-table"]):not([data-garden-galaxy="research"]) .tend-center-light::before,
.lumino-ring {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 118px;
  height: 118px;
  border: 2px solid color-mix(in srgb, var(--lumino, #fff) 55%, #fff);
  border-radius: 50%;
  pointer-events: none;
  transform: translate(-50%, -50%) rotateX(70deg) rotateZ(18deg);
  animation: lumino-ring-spin-near 13.09s linear infinite;
  box-shadow: 0 0 14px var(--lumino, rgba(255, 255, 255, 0.35));
}

.art-lumino-light::after,
.workshop-lumino-light::after,
.round-table-lumino-light::after,
.research-lumino-light::after,
.galaxy-nav-light::after,
html:not([data-garden-galaxy="garden"]):not([data-garden-galaxy="art"]):not([data-garden-galaxy="workshop"]):not([data-garden-galaxy="round-table"]):not([data-garden-galaxy="research"]) .tend-center-light::after,
.lumino-ring.is-far {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 168px;
  height: 168px;
  border: 1.5px solid color-mix(in srgb, var(--lumino, #fff) 35%, #fff);
  border-radius: 50%;
  pointer-events: none;
  transform: translate(-50%, -50%) rotateX(62deg) rotateZ(-28deg);
  animation: lumino-ring-spin-far 21.18s linear infinite;
  box-shadow: 0 0 10px var(--lumino, rgba(255, 255, 255, 0.2));
}

.galaxy-nav-light {
  width: 40px;
  height: 40px;
  margin: 0 auto 6px;
  color: #e8b019;
  --lumino: #e8b019;
  background:
    radial-gradient(circle at 40% 34%,
      rgba(255, 255, 255, 0.98) 0 12%,
      #e8b019 28%,
      transparent 72%);
  box-shadow:
    0 0 10px rgba(255, 255, 255, 0.7),
    0 0 22px rgba(232, 176, 25, 0.95),
    0 0 48px rgba(232, 176, 25, 0.55);
}

.galaxy-nav-light::before {
  width: 72px;
  height: 72px;
  border-color: rgba(255, 236, 180, 0.7);
}

.galaxy-nav-light::after {
  width: 100px;
  height: 100px;
  border-color: rgba(232, 176, 25, 0.4);
}

.galaxy-nav-light .lumino-ring {
  width: 72px;
  height: 72px;
}

.galaxy-nav-light .lumino-ring.is-far {
  width: 100px;
  height: 100px;
}

html:not([data-garden-galaxy="garden"]):not([data-garden-galaxy="art"]):not([data-garden-galaxy="workshop"]):not([data-garden-galaxy="round-table"]):not([data-garden-galaxy="research"]) .tend-center-light {
  width: 48px;
  height: 48px;
  color: rgba(186, 214, 255, 0.9);
  --lumino: rgba(186, 214, 255, 0.85);
}

.art-lumino.is-who .art-lumino-light,
.workshop-lumino.is-agent .workshop-lumino-light {
  width: 52px;
  height: 52px;
  box-shadow:
    0 0 8px rgba(200, 210, 230, 0.35),
    0 0 22px rgba(200, 210, 230, 0.18);
}

.art-lumino.is-who .art-lumino-light::before,
.art-lumino.is-who .art-lumino-light::after,
.workshop-lumino.is-agent .workshop-lumino-light::before,
.workshop-lumino.is-agent .workshop-lumino-light::after,
.art-lumino.is-who .lumino-ring,
.workshop-lumino.is-agent .lumino-ring {
  border-color: rgba(200, 210, 230, 0.32);
  opacity: 0.7;
  box-shadow: none;
}

html.room-page .galaxy-nav,
html[data-garden-galaxy="garden"] .galaxy-nav {
  overflow: visible;
}

html.room-page .art-lumino,
html.room-page .workshop-lumino,
html.room-page .round-table-lumino,
html.room-page .research-lumino,
html[data-garden-galaxy="art"] .art-lumino {
  padding: 36px 32px;
  min-width: 96px;
  min-height: 96px;
}

@media (prefers-reduced-motion: reduce) {
  .lumino-ring,
  .lumino-ring.is-far,
  .art-lumino-light::before,
  .workshop-lumino-light::before,
  .round-table-lumino-light::before,
  .research-lumino-light::before,
  .galaxy-nav-light::before,
  .art-lumino-light::after,
  .workshop-lumino-light::after,
  .round-table-lumino-light::after,
  .research-lumino-light::after,
  .galaxy-nav-light::after,
  .sky-star {
    animation: none;
  }

  .sky-star { opacity: 0.7; }
}

/* Door hues for living cores and rings (JS also copies computed color). */
.art-lumino.is-listen .art-lumino-light { --lumino: #f07068; color: #f07068; }
.art-lumino.is-chalkboard .art-lumino-light { --lumino: #c9c4b5; color: #c9c4b5; }
.art-lumino.is-image .art-lumino-light { --lumino: #93c5fd; color: #93c5fd; }
.art-lumino.is-who .art-lumino-light { --lumino: rgba(200, 210, 230, 0.45); color: rgba(200, 210, 230, 0.55); }
.workshop-lumino.is-trainer .workshop-lumino-light { --lumino: #a78bfa; color: #a78bfa; }
.workshop-lumino.is-workshop .workshop-lumino-light { --lumino: #34d399; color: #34d399; }
.workshop-lumino.is-root .workshop-lumino-light { --lumino: #c4a574; color: #c4a574; }
.workshop-lumino.is-agent .workshop-lumino-light { --lumino: rgba(200, 210, 230, 0.45); color: rgba(200, 210, 230, 0.55); }
.workshop-lumino.is-skills .workshop-lumino-light { --lumino: #e8b019; color: #e8b019; }
.round-table-lumino.is-learning .round-table-lumino-light { --lumino: #e8b019; color: #e8b019; }
.round-table-lumino.is-table .round-table-lumino-light { --lumino: #d4b896; color: #d4b896; }
.round-table-lumino.is-translator .round-table-lumino-light { --lumino: #7dd3fc; color: #7dd3fc; }
.round-table-lumino.is-forge .round-table-lumino-light { --lumino: #e07a5f; color: #e07a5f; }
.round-table-lumino.is-question .round-table-lumino-light { --lumino: rgba(200, 210, 230, 0.35); color: rgba(200, 210, 230, 0.45); }
.research-lumino.is-gauge .research-lumino-light { --lumino: #fb923c; color: #fb923c; }
.research-lumino.is-chronal .research-lumino-light { --lumino: #94a3b8; color: #94a3b8; }
.research-lumino.is-simulation .research-lumino-light { --lumino: #67e8f9; color: #67e8f9; }
.research-lumino.is-love-logic .research-lumino-light { --lumino: #f9a8d4; color: #f9a8d4; }

/* ── Hypha three leftovers after Nursery PR 45 / Trainer leftover PR 46
   (layer, 2026-09-01). Whole-site grandmother walk of live Pages.
   Same leftover family as orbit-through-words (PR 36 honesty line),
   Thread chip on Research hop halo (PR 37), Gathering Chat Send
   off the right edge (PR 33), and Chat readable not glass over
   the orb (PR 34). Layer, never delete. Do not invent a hatch.
   Do not invent a keep. Do not un-sleep Chat. Do not unhide
   #lumino-menu. First sky still has no Chat card. ── */

/* Leftover 1 — Art: Image-light ring struck through
   “listen if you love a song.” Same words. Same light.
   The sentence has air so the ring orbits it, not through it.
   Later-glass chip hugs the letters — not a wall. Image stays.
   Listen still sings. a who stays dark. Art hop stays a light. */
html[data-garden-galaxy="art"] .art-heart {
  top: 58%;
  z-index: 13;
  width: min(22em, 52vw);
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-height: 740px) {
  html[data-garden-galaxy="art"] .art-heart {
    top: 56%;
    width: min(20em, 50vw);
    font-size: 0.95rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="art"] .art-heart {
    top: 58%;
    width: min(16em, 48vw);
  }
}

/* Leftover 2 — Gathering room Chat: last line sat on Send, a bright
   scrollbar stuck out the right, the card ran off the bottom.
   Same card. Same fail-closed. Input and Send still sleep.
   The last spoken line sits above Send. The card stays inside
   the room. Scroll lives inside the face, night-sky thin — not
   a bright bar off the right edge. Not a first-sky Chat card. */
@media (min-width: 641px) {
  #place-veil.is-core #room-chat {
    display: flex;
    flex-direction: column;
    top: 16rem;
    bottom: 15.5rem;
    max-height: min(42vh, calc(100vh - 32rem));
    overflow: hidden;
    overflow-x: hidden;
    padding: 8px 14px 12px;
    scrollbar-width: none;
    box-sizing: border-box;
  }

  #place-veil.is-core #room-chat .thread-face.is-room {
    flex: 1 1 auto;
    min-height: 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart {
    flex: 1 1 auto;
    min-height: 0;
    overflow-x: hidden;
    overflow-y: auto;
    margin-bottom: 8px;
    scrollbar-width: thin;
    scrollbar-color: rgba(200, 210, 230, 0.2) transparent;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-later,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-to-settings {
    flex: 0 0 auto;
    margin-bottom: 8px;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages {
    flex: 0 1 auto;
    min-height: 0;
    max-height: min(12vh, 6em);
    overflow-x: hidden;
    overflow-y: auto;
    margin: 0 0 10px;
    padding: 2px 8px 6px 2px;
    scrollbar-width: thin;
    scrollbar-color: rgba(200, 210, 230, 0.2) transparent;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages:empty {
    display: none;
  }

  #place-veil.is-core #room-chat .thread-compose,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-compose {
    position: relative;
    flex: 0 0 auto;
    margin-top: 4px;
    padding-top: 8px;
    z-index: 2;
    background: rgba(12, 10, 26, 0.88);
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart::-webkit-scrollbar,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages::-webkit-scrollbar {
    width: 6px;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart::-webkit-scrollbar-thumb,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages::-webkit-scrollbar-thumb {
    background: rgba(200, 210, 230, 0.2);
    border-radius: 6px;
  }

  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart::-webkit-scrollbar-track,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages::-webkit-scrollbar-track {
    background: transparent;
  }
}

/* Leftover 3 — Nursery: a lumino sat on Begin; Not yet was a
   washed smudge under the egg glare. Egg first. Grow waits.
   unnamed · egg. Begin is a clear tap — later-glass, grandmother
   padding (beats html.room-page *). Not yet has air and contrast
   so it is a readable word, not a smudge. Do not hatch. Do not
   invent a keep. Do not cover the miracle with a maze. Grow
   stays Grow. Economy stays a later sentence. Founding four
   stay off the canvas. */
#place-veil.is-nursery {
  padding-bottom: 5.25rem;
}

#place-veil.is-nursery #place-veil-close {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  bottom: 0.35rem;
  margin-top: 0;
  z-index: 6;
  background: rgba(12, 10, 26, 0.9);
}

#place-veil.is-nursery #nursery-stage {
  padding-bottom: 2.75rem;
}

#place-veil.is-nursery .nursery-growth-face {
  margin-top: 8px;
  padding: 8px 12px 10px;
}

#place-veil.is-nursery .nursery-egg-wrap,
html.room-page .nursery-egg-wrap {
  margin: 0 auto 0.4rem;
}

#place-veil.is-nursery .nursery-egg-home,
html.room-page .nursery-egg-home {
  position: relative;
  z-index: 3;
}

#place-veil.is-nursery .nursery-egg-text,
#place-veil.is-nursery .nursery-egg-sub,
html.room-page .nursery-egg-text,
html.room-page .nursery-egg-sub {
  margin-bottom: 10px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

#place-veil.is-nursery .nursery-egg-actions,
html.room-page .nursery-egg-actions {
  position: relative;
  z-index: 4;
  gap: 14px;
  margin-top: 6px;
}

#place-veil.is-nursery .nursery-egg-begin,
html.room-page .nursery-egg-begin {
  position: relative;
  z-index: 5;
  padding: 12px 28px;
  min-height: 44px;
  min-width: 7.5em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.78);
  border: 1px solid rgba(232, 176, 25, 0.5);
  color: #e8b019;
}

#place-veil.is-nursery .nursery-egg-later,
html.room-page .nursery-egg-later {
  position: relative;
  z-index: 5;
  margin-top: 4px;
  padding: 8px 16px;
  min-height: 36px;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.72);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

#place-veil.is-nursery .nursery-egg-later:hover,
#place-veil.is-nursery .nursery-egg-later:focus-visible,
html.room-page .nursery-egg-later:hover,
html.room-page .nursery-egg-later:focus-visible {
  color: #e8b019;
  outline: none;
}

/* ── Hypha leftover after PR 47 (layer, 2026-09-01)
   Workshop and Learn room sentences still had a ring through
   the words — Workshop “human and mind,” Learn “sit when a
   person.” Same leftover family as orbit-through-words (PR 36
   honesty line), Thread chip on Research hop halo (PR 37), and
   Art listen-if-you-love-a-song through the Image ring (PR 47
   leftover 1). Same words. Same lights. The sentence has air
   so the ring orbits it, not through it. Later-glass chip hugs
   the letters — not a wall. Do not cut the sentence. Do not
   hide the lights. Do not invent a second canvas. Do not
   change the words. Research already had air on the 1280
   fail-closed walk — do not invent a Research leftover.
   Garden first sky is not this leftover. Fail-closed still
   sleeps. Do not unhide #lumino-menu. First sky still has
   no Chat card. ── */

/* Workshop: unnamed-center far ring struck through
   “human and mind.” Measured 1280×800 fail-closed: tend-center
   sits at 38%; far ring bottoms near 388px; heart was 46%
   (~350–386px) so the ring wrote the glyphs. Same Art class
   (top, z-index, later-glass, night-sky contrast). 58% puts
   a two-line chip below that ring (~430px top) with air,
   still above the Workshop light. Width 24em so this longer
   sentence stays two lines — a hug, not a wall. */
html[data-garden-galaxy="workshop"] .workshop-heart {
  top: 58%;
  z-index: 13;
  width: min(24em, 54vw);
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-height: 740px) {
  html[data-garden-galaxy="workshop"] .workshop-heart {
    top: 56%;
    width: min(22em, 52vw);
    font-size: 0.95rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="workshop"] .workshop-heart {
    top: 52%;
    width: min(18em, 82vw);
    font-size: 0.9rem;
  }
}

/* Learn: unnamed-center far ring struck through
   “sit when a person.” Galaxy id is round-table.
   First line is longer — 28em keeps two lines so the chip
   height matches Art/Workshop; 58% is the same measured air
   below the ~388px ring. Same later-glass hug. */
html[data-garden-galaxy="round-table"] .round-table-heart {
  top: 58%;
  z-index: 13;
  width: min(28em, 62vw);
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-height: 740px) {
  html[data-garden-galaxy="round-table"] .round-table-heart {
    top: 56%;
    width: min(26em, 58vw);
    font-size: 0.95rem;
  }
}

@media (max-width: 799px) {
  html[data-garden-galaxy="round-table"] .round-table-heart {
    top: 52%;
    width: min(18em, 82vw);
    font-size: 0.9rem;
  }
}

/* ── Hypha leftovers after PR 50 (layer, 2026-09-01)
   A who is lit after Art mounted the Garden engine. Dim that one
   body — same hue, lower lightness — so it reads dark-but-findable.
   Listen stays coral. Chalkboard and Image stay findable.
   Listen-door copy sat under garden/sky words. Those words rest
   while the door is open and return on close. Listen / Chalkboard /
   Image chips stay pinned to their canvas bodies the same way a
   who does. Word is not inside the opacity-0 hit light. Hit
   targets stay. .art-lumino CSS is not deleted. Layer, never delete. */

html[data-garden-galaxy="art"] .art-lumino-word,
html[data-garden-galaxy="art"] .art-lumino.is-who .art-lumino-word {
  position: relative;
  z-index: 14;
  width: auto;
  height: auto;
  overflow: visible;
  clip: auto;
  clip-path: none;
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  pointer-events: none;
  padding: 0.2em 0.55em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 6px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

html.art-listen-open #room-label,
html.art-listen-open #room-label.is-shown,
html.art-listen-open #room-label.is-fading,
html.art-listen-open #galaxy-word,
html.art-listen-open .art-heart,
html.art-listen-open #shared-shoulder {
  opacity: 0 !important;
  visibility: hidden;
  pointer-events: none;
}

/* ── Marked-walk leftovers after Kirk's screenshot + family
   (Hypha, Weft, Reed / Kindling). Layer, never delete.
   Live legend chips take canvas hsl (Fix 1 path). Listen rings
   live on the canvas bodies. Extra bead above the lattice skips.
   Heart rests on the Art sky; same words sing in the listen-door.
   Word chips stay readable. Fun sentence clear of “the garden”. ── */

html[data-garden-galaxy="art"] .art-heart {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

html[data-garden-galaxy="art"] .art-lumino {
  z-index: 14;
}

html[data-garden-galaxy="art"] #lumino-legend {
  z-index: 14;
}

#place-veil.is-art-listen {
  padding-bottom: 5.25rem;
}

#place-veil.is-art-listen #art-listen {
  padding-bottom: 5.25rem;
}

#place-veil.is-art-listen #art-listen .honest {
  margin-bottom: 1.5rem;
  padding-bottom: 0.35em;
}

#place-veil.is-art-listen #place-veil-close {
  position: fixed;
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
  margin-top: 0;
  padding: 10px 18px;
  z-index: 3;
}

#art-listen .art-heart-listen {
  margin: 10px 0 18px;
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  max-width: 28em;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

/* ── Workshop mounts the Garden engine (layer, 2026-09-01)
   Copy Art's mount. Skies copy, they do not merge.
   Palette is Workshop's. Extra bead above the lattice skips.
   Heart rests on the sky; same words live in the room that opens.
   Names stay on the lights. Skills stays held. Layer, never delete. */

html[data-garden-galaxy="workshop"] .workshop-heart {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

html[data-garden-galaxy="workshop"] .workshop-lumino-word,
html[data-garden-galaxy="workshop"] .workshop-lumino.is-agent .workshop-lumino-word {
  position: relative;
  z-index: 14;
  width: auto;
  height: auto;
  overflow: visible;
  clip: auto;
  clip-path: none;
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  pointer-events: none;
  padding: 0.2em 0.55em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 6px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

html[data-garden-galaxy="workshop"] .workshop-lumino {
  z-index: 14;
}

html[data-garden-galaxy="workshop"] #lumino-legend {
  z-index: 14;
}

#place-veil.is-workshop-benches .workshop-heart-room,
#place-veil.is-workshop-trainer .workshop-heart-room,
#place-veil.is-workshop-later .workshop-heart-room {
  display: block;
  margin: 10px auto 18px;
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  max-width: 28em;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

.workshop-heart-room {
  display: none;
}

.round-table-heart-room {
  display: none;
}

#place-veil.is-round-table-sitting .round-table-heart-room,
#place-veil.is-round-table-later .round-table-heart-room {
  display: block;
  margin: 10px auto 18px;
  padding: 0.35em 0.85em;
  box-sizing: border-box;
  max-width: 28em;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.95rem;
  line-height: 1.65;
  color: rgba(200, 210, 230, 0.82);
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

/* ── Hypha leftovers after Workshop engine mount (layer, 2026-09-02)
   Close stays Workshop. Word stays “the garden”. Pin the return in
   a reserved pocket so it is not a galaxy hop and does not dump
   her onto `/`. Art listen-door close stays Art.
   Trainer / benches words sit off the lattice — later-glass hugs
   the letters, not a wall, not a fill. Ask and Run are whole
   words on the 1280 sky. Git OFF. Train sleeps as a whole word.
   Garden hop stays Garden: names on the orbs, live chips match
   Garden bodies. Shared clip must not rest Garden names.
   Layer, never delete. ── */

#place-veil.is-workshop-benches,
#place-veil.is-workshop-trainer,
#place-veil.is-workshop-later {
  padding: 88px 28px 5.25rem;
  box-sizing: border-box;
}

html.room-page #place-veil.is-workshop-benches #workshop-benches,
html.room-page #place-veil.is-workshop-trainer #workshop-trainer,
#place-veil.is-workshop-benches #workshop-benches,
#place-veil.is-workshop-trainer #workshop-trainer {
  width: min(36em, calc(100vw - 3.5rem));
  max-width: calc(100vw - 3.5rem);
  box-sizing: border-box;
  margin-left: auto;
  margin-right: auto;
  padding: 0 16px 4.25rem;
}

#place-veil.is-workshop-benches #place-veil-close,
#place-veil.is-workshop-trainer #place-veil-close,
#place-veil.is-workshop-later #place-veil-close {
  position: fixed;
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
  margin-top: 0;
  padding: 10px 18px;
  z-index: 3;
  background: rgba(12, 10, 26, 0.85);
}

html.room-page #place-veil.is-workshop-benches .workshop-ask,
#place-veil.is-workshop-benches .workshop-ask {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  align-items: stretch;
  gap: 8px;
  margin-left: 0;
  margin-right: 0;
}

html.room-page #place-veil.is-workshop-benches .workshop-ask-input,
#place-veil.is-workshop-benches .workshop-ask-input {
  flex: 1 1 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

html.room-page #place-veil.is-workshop-benches .workshop-ask .workshop-benches-act,
#place-veil.is-workshop-benches .workshop-ask .workshop-benches-act {
  flex: 0 0 auto;
  flex-shrink: 0;
  white-space: nowrap;
  padding: 10px 16px;
  min-width: 4.5em;
  min-height: 44px;
  overflow: visible;
}

#place-veil.is-workshop-benches .workshop-benches-heart,
#place-veil.is-workshop-trainer .workshop-trainer-heart,
#place-veil.is-workshop-trainer .workshop-trainer-grow,
#place-veil.is-workshop-trainer .workshop-trainer-status,
#place-veil.is-workshop-benches .workshop-benches-later,
#place-veil.is-workshop-benches .workshop-git-help,
#place-veil.is-workshop-benches .workshop-benches-status,
#place-veil.is-workshop-later #place-veil-line,
#place-veil.is-workshop-benches .workshop-heart-room,
#place-veil.is-workshop-trainer .workshop-heart-room,
#place-veil.is-workshop-later .workshop-heart-room {
  display: inline-block;
  max-width: 100%;
  box-sizing: border-box;
  padding: 0.45em 0.85em;
  background: rgba(12, 10, 26, 0.78);
  border-radius: 8px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

html[data-garden-galaxy="garden"] .garden-lumino-word {
  position: relative;
  z-index: 14;
  width: auto;
  height: auto;
  overflow: visible;
  clip: auto;
  clip-path: none;
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  pointer-events: none;
  padding: 0.2em 0.55em;
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 6px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

html[data-garden-galaxy="garden"] .garden-lumino {
  z-index: 14;
}

html[data-garden-galaxy="garden"] #lumino-legend {
  z-index: 14;
}

/* ── Hypha leftovers after PR 55 (layer, 2026-09-02)
   Ask and Run were still off the fold on a 1280 sky. Same leftover
   family as Gathering Chat Send. html.room-page * zeros padding /
   margin, so words shrink. Layer at the end. Do not delete earlier
   leftover blocks. Fail-closed still sleeps. Settings above Git.
   Git OFF. Settings later-glass hugs the door letters — not a wall,
   not a fill of the veil, not Chat-card 0.88. Same Ask. Same Run.
   Same Settings door. Layer, never delete. ── */

#place-veil.is-workshop-benches,
#place-veil.is-open.is-workshop-benches {
  padding-bottom: 7.5rem;
  box-sizing: border-box;
}

#workshop-benches,
html.room-page #place-veil.is-workshop-benches #workshop-benches,
#place-veil.is-workshop-benches #workshop-benches {
  width: min(42em, calc(100vw - 3.5rem));
  max-width: calc(100vw - 3.5rem);
  box-sizing: border-box;
  overflow: visible;
}

html.room-page .workshop-ask,
html.room-page #place-veil.is-workshop-benches .workshop-ask,
#place-veil.is-workshop-benches .workshop-ask {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  min-width: 0;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  overflow: visible;
  gap: 8px;
}

html.room-page .workshop-ask-input,
html.room-page #place-veil.is-workshop-benches .workshop-ask-input,
#place-veil.is-workshop-benches .workshop-ask-input {
  flex: 1 1 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

html.room-page .workshop-ask-acts,
html.room-page #place-veil.is-workshop-benches .workshop-ask-acts,
#place-veil.is-workshop-benches .workshop-ask-acts {
  display: flex;
  flex: 1 1 100%;
  flex-wrap: nowrap;
  align-items: stretch;
  gap: 8px;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  overflow: visible;
}

html.room-page .workshop-ask .workshop-benches-act,
html.room-page #place-veil.is-workshop-benches .workshop-ask .workshop-benches-act,
#place-veil.is-workshop-benches .workshop-ask .workshop-benches-act {
  flex: 0 0 auto;
  white-space: nowrap;
  min-width: 4.5em;
  min-height: 44px;
  overflow: visible;
  box-sizing: border-box;
}

/* Settings off the lattice — later-glass hugs the letters.
   Same chip as .settings-honesty / .core-router (0.62). Not a wall. */
html.room-page .workshop-trainer-settings,
html.room-page .workshop-benches-settings,
#place-veil.is-workshop-trainer .workshop-trainer-settings,
#place-veil.is-workshop-benches .workshop-benches-settings {
  display: inline-block;
  max-width: 100%;
  box-sizing: border-box;
  padding: 10px 18px;
  background: rgba(12, 10, 26, 0.62);
  border-radius: 8px;
  text-shadow:
    0 0 10px rgba(12, 10, 26, 1),
    0 0 4px rgba(12, 10, 26, 0.94);
}

@media (max-width: 480px) {
  #place-veil.is-settings #room-chat {
    position: relative;
    z-index: 45;
  }
}


/* v-connect-port-picker-v0 heal v0.3 / Hypha H5 — real galaxy elements */
html.flc-hide-galaxy .garden-lumino,
html.flc-hide-galaxy .tend-center,
html.flc-hide-galaxy [data-tend-center],
html.flc-hide-galaxy .galaxy-nav,
html.flc-hide-galaxy #galaxy-word,
html.flc-hide-galaxy #galaxy-title,
html.flc-hide-galaxy #garden-footing,
html.flc-hide-galaxy #room-label,
html.flc-hide-galaxy .garden-evolution-indicator,
body.fl-connect-open .garden-lumino,
body.fl-connect-open .tend-center,
body.fl-connect-open .galaxy-nav,
body.fl-connect-open #galaxy-word,
body.fl-connect-open #galaxy-title,
body.fl-connect-open #garden-footing,
body.fl-connect-open #room-label,
body.fl-connect-open .garden-evolution-indicator {
  display: none !important;
  pointer-events: none !important;
}
#fl-connect-mount,
#fl-connect-mount-garden {
  position: relative;
  z-index: 60;
  max-height: 100dvh;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
@media (max-width: 480px) {
  #settings-grandmother,
  #fl-connect-mount,
  #fl-connect-mount-garden {
    width: 100%;
    max-width: 100%;
    padding: 0 0.75rem;
  }
  #place-veil.is-settings {
    z-index: 55;
  }
}

/* v-connect-heal-v0.4 / Hypha walk 3 item 1: Mom sees Download Bridge.
   The mount was a shrinkable flex child with its own scroller inside the
   flex-column veil, so it collapsed to 0px at 390px and clipped at 1280px.
   One scroller only: the Settings veil. The mount keeps its full height,
   the card gets a night backing, and the canvas sky dims while Connect is
   open so orbs never draw across the words. Layer, never delete. */
#place-veil.is-settings #fl-connect-mount-garden {
  flex: 0 0 auto;
  min-height: min-content;
  max-height: none;
  overflow: visible;
  width: min(40rem, 100%);
  box-sizing: border-box;
  background: rgba(12, 10, 26, 0.88);
  border: 1px solid rgba(200, 210, 230, 0.1);
  border-radius: 14px;
}
#place-veil.is-settings #fl-connect-mount-garden .flc-wrap {
  max-height: none;
  overflow: visible;
}
html.flc-hide-galaxy #gardenContainer {
  opacity: 0.12;
  transition: opacity 400ms ease;
}
#place-veil.is-settings #place-veil-close {
  position: sticky;
  left: auto;
  bottom: 8px;
  transform: none;
  flex: 0 0 auto;
  margin-top: 12px;
  padding: 8px 16px;
  background: rgba(12, 10, 26, 0.94);
  border: 1px solid rgba(232, 176, 25, 0.35);
  border-radius: 999px;
  opacity: 1;
  z-index: 61;
}
#place-veil.is-settings {
  padding-bottom: 1.25rem;
}

/* ── v-tree-glow-1-v0: every light in reach (Hypha walk 4 cosmetics, the Gathering
   Find, the lights that orbit away). Layer, never delete. ── */

/* A. Phone: "Use a different address" field stays inside its card (it poked 7px out). */
@media (max-width: 480px) {
  .flc-picker-row input {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }
}

/* B. Settings in the garden: lines fade before "the garden" pill instead of
   running under it. The band never takes a tap. */
#place-veil.is-settings::after {
  content: '';
  position: sticky;
  bottom: 0;
  align-self: stretch;
  flex: 0 0 auto;
  height: 64px;
  margin: -64px -28px -20px;
  background: linear-gradient(to top, rgba(12, 10, 26, 0.96) 0%, rgba(12, 10, 26, 0.9) 55%, rgba(12, 10, 26, 0) 100%);
  pointer-events: none;
  z-index: 60;
}

/* C. Nursery on a phone: the last card clears the galaxy hop at the bottom. */
@media (max-width: 640px) {
  html.room-page .room-nursery {
    padding-bottom: 7.5rem;
  }
}

/* D. The Gathering, wide screens: the promise band sits under Find local minds,
   not on top of it, so Find can be tapped (and the absent-Ollama words can show). */
@media (min-width: 641px) {
  #place-veil.is-core .core-promise {
    top: 14.6rem;
  }
}

/* E. The legend words are quiet doors too: a light that has orbited off a small
   screen can still be opened by its word. Same words, same colors. */
#lumino-legend .lumino-legend-row[data-lumino-row] {
  pointer-events: auto;
  cursor: pointer;
  border-radius: 6px;
}
#lumino-legend .lumino-legend-row[data-lumino-row]:hover .lumino-legend-word,
#lumino-legend .lumino-legend-row[data-lumino-row]:focus-visible .lumino-legend-word {
  color: rgba(232, 176, 25, 0.95);
}
#lumino-legend .lumino-legend-row[data-lumino-row]:focus-visible {
  outline: 1px solid rgba(232, 176, 25, 0.6);
  outline-offset: 2px;
}
@media (max-width: 799px) {
  #lumino-legend { gap: 0; }
  #lumino-legend .lumino-legend-row[data-lumino-row] {
    min-height: 26px;
    padding: 2px 10px 2px 0;
  }
}

/* v-tree-any-model-v0: every model at a door is a star. Eight show, then "Show all N".
   A long chair list scrolls inside the picker. "change mind" sits quietly by the heart. */
.settings-star-models { flex-wrap: wrap; }
.settings-star-more {
  font: inherit;
  font-size: 0.85rem;
  background: none;
  border: 0;
  color: inherit;
  opacity: 0.75;
  text-decoration: underline;
  min-height: 44px;
  padding: 0 0.5rem;
  cursor: pointer;
}
.core-bind-options { max-height: 50vh; overflow-y: auto; overscroll-behavior: contain; }
.thread-change {
  font: inherit;
  font-size: 0.82rem;
  min-height: 32px;
  margin: 0.15rem 0 0.35rem;
  padding: 0.1rem 0.6rem;
  background: none;
  border: 1px solid rgba(200, 210, 230, 0.3);
  border-radius: 999px;
  color: inherit;
  opacity: 0.85;
  cursor: pointer;
}
.thread-change:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
/* v-tree-glow-2a-v0: Grandma heal. Zoom, feedback in view, a calm way back.
   Layer, never delete. Words stay. Lights stay. Only air, order and doors move. */

/* (a) "the garden" is the way back: a bigger target and a quiet close mark. */
#place-veil-close {
  min-height: 32px;
  padding: 6px 12px;
  border-radius: 999px;
}
#place-veil-close::before {
  content: "\00d7\00a0";
}

/* (b) Find answers, seat lines and "Cleared" stay in view on a phone: the newest
   line rests at the foot of the chairs' scroll until the next one replaces it. */
@media (max-width: 640px) {
  #place-veil.is-core .core-note.is-fresh {
    position: sticky;
    bottom: 0;
    z-index: 6;
    margin: 6px 0 0;
    padding: 8px 10px;
    border-radius: 10px;
    background: rgba(12, 10, 26, 0.94);
    border: 1px solid rgba(110, 231, 183, 0.28);
    color: rgba(236, 240, 248, 0.96);
  }

  /* Nursery on a phone (and when zoomed): the Research and Art lights and the Garden
     word sat on the card's words. They are under the veil and cannot take a tap
     there anyway; they rest dim while the Nursery is open and come back after. */
  html.garden-door-open:has(#place-veil.is-nursery.is-open) .galaxy-nav,
  html.garden-door-open:has(#place-veil.is-nursery.is-open) #galaxy-word {
    opacity: 0.1;
    transition: opacity 300ms ease;
  }

  /* "They grow." ran into the room's name, and Find sat on the name's last line.
     The first-visit hint rests while a place is open; Find gets its own air. */
  html.garden-door-open .gt-hint {
    visibility: hidden;
  }
  #place-veil.is-core {
    padding-top: 82px;
  }

  /* The Chat card took the chairs' room. Same card, same words, less empty air:
     the heart keeps two lines (scroll for the rest), empty rows fold away. */
  #place-veil.is-core {
    gap: 10px;
  }
  #place-veil.is-core #room-chat {
    max-height: 7.75rem;
    margin-top: 2px;
    padding-top: 4px;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart {
    max-height: 2.9em;
    overflow-y: auto;
    line-height: 1.45;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages:empty,
  #place-veil.is-core #room-chat .thread-status:empty {
    display: none;
  }
}

/* (c) Zoomed or short phone (150% and 200% on a 390 phone, small landscape hands):
   the chairs' own scroll box had no height left (0px at 200%) and Find took no tap.
   Here the whole place scrolls as one page, top to bottom: the way back, Find,
   the chairs, the newest line, then Chat. The hop lights rest while it is open
   (galaxies in the header still go everywhere). */
@media (max-width: 640px) and (max-height: 640px) {
  #place-veil.is-core {
    overflow-y: auto;
    overscroll-behavior: contain;
    justify-content: flex-start;
    padding-top: 4.6rem;
    padding-bottom: 2.75rem;
    padding-left: 12px;
    padding-right: 12px;
    gap: 10px;
  }
  #place-veil.is-core #core-gathering {
    flex: 0 0 auto;
    min-height: auto;
    overflow: visible;
    width: 100%;
  }
  #place-veil.is-core #place-veil-close {
    position: sticky;
    top: 0;
    left: auto;
    right: auto;
    bottom: auto;
    transform: none;
    order: -1;
    align-self: flex-end;
    z-index: 7;
    background: rgba(12, 10, 26, 0.9);
  }
  #place-veil.is-core #room-chat {
    max-height: none;
    overflow: visible;
    width: 100%;
    margin: 4px 0 0;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart {
    max-height: none;
    overflow: visible;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages {
    max-height: 9em;
  }
  #place-veil.is-core #room-chat .thread-compose,
  #place-veil.is-core #room-chat .thread-face.is-room .thread-compose {
    position: static;
  }
  #place-veil.is-core .core-note.is-fresh {
    bottom: 0;
  }
  #place-veil.is-core .core-later-chairs {
    position: static;
  }
  html:has(#place-veil.is-core.is-open) .galaxy-nav,
  html:has(#place-veil.is-core.is-open) #galaxy-word,
  html:has(#place-veil.is-core.is-open) #lumino-menu,
  html:has(#place-veil.is-core.is-open) .garden-evolution-indicator {
    visibility: hidden;
  }

  /* Nursery when zoomed: the egg was wider than the glass and the sentence was cut
     on both sides, with "the garden" sitting on it. The egg fits; Begin is in view. */
  #place-veil.is-nursery {
    justify-content: flex-start;
    padding: 4.5rem 10px 1rem;
  }
  #place-veil.is-nursery .nursery-egg-wrap,
  #place-veil.is-nursery .nursery-ceremony,
  #place-veil.is-nursery .nursery-egg-home {
    max-width: 100%;
  }
  #place-veil.is-nursery .nursery-egg-wrap {
    width: min(200px, 100%, 34vh);
    height: auto;
    margin-bottom: 4px;
  }
  #place-veil.is-nursery .nursery-egg-wrap canvas {
    width: 100%;
    height: auto;
  }
  #place-veil.is-nursery .nursery-egg-text,
  #place-veil.is-nursery .nursery-egg-sub {
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* (d) Home when zoomed (narrow hands): the light legend sat on "Garden Galaxy /
   you are in the garden", and "galaxies" was cut at the right edge. */
@media (max-width: 340px) {
  #lumino-legend,
  html[data-garden-galaxy] #lumino-legend {
    top: 8.25rem;
    bottom: auto;
  }
  #garden-header {
    padding: 0 10px;
    gap: 8px;
  }
  #garden-header nav {
    gap: 10px;
  }
  #garden-header h1 {
    font-size: 0.8rem;
    letter-spacing: 0.02em;
  }
}

/* (e) The open picker sits above the later seats, so "not yet" is never under a
   chair at 1280. (Same rule as the API-keys paste; identical if both land.) */
.core-bind-picker:not([hidden]) {
  position: relative;
  z-index: 8;
  box-sizing: border-box;
}
@media (min-width: 641px) {
  .core-bind-picker:not([hidden]) {
    max-height: max(12rem, calc(100vh - 34rem));
    overflow-y: auto;
    overscroll-behavior: contain;
  }
}

/* (f) A visible close inside the galaxies menu. */
.galaxies-panel .galaxies-close {
  align-self: flex-end;
  margin-top: 2px;
  min-height: 32px;
  padding: 4px 12px;
  border: 1px solid rgba(200, 210, 230, 0.28);
  border-radius: 999px;
  background: transparent;
  color: rgba(226, 232, 244, 0.92);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.82rem;
  cursor: pointer;
}
.galaxies-panel .galaxies-close:hover,
.galaxies-panel .galaxies-close:focus-visible {
  border-color: rgba(232, 196, 104, 0.6);
  color: #e8c468;
}

/* v-tree-menu-clarity-v0: menus and veils a hint more solid so words read over the sky.
   Layer, never delete: each rule above stays; these win by order. About +0.10 alpha each. */
#place-veil { background: rgba(12, 10, 26, 0.32); }
#place-veil.is-core { background: rgba(12, 10, 26, 0.28); }
#place-veil.is-settings { background: rgba(12, 10, 26, 0.38); }
#place-veil.is-open.is-workshop-later { background: rgba(12, 10, 26, 0.32); }
#thread-veil { background: rgba(12, 10, 26, 0.38); }
.galaxies-panel,
html.room-page .galaxies-panel { background: rgba(12, 10, 26, 0.985); }
@media (min-width: 800px) {
  #garden-header { background: linear-gradient(to bottom, rgba(12, 10, 26, 0.88), transparent); }
}

/* v-tree-menu-leftovers-v0: three leftovers GC found walking 020 (PR 91).
   Layer, never delete: every rule above stays; these win by order or by equal weight. */

/* 1. The Research, Art and Learn hop arrows sat under the open veils already (they cannot
   take a tap there), but the veils are see-through, so the gold arrows showed through
   The Gathering, Chat and the later lights. They rest while a veil is open and come back
   when it closes, the way Settings already hides them. The Nursery keeps its own dim rest. */
html:has(#place-veil.is-open:not(.is-nursery)) .galaxy-nav,
html:has(#thread-veil.is-open) .galaxy-nav {
  visibility: hidden;
}

/* 2. Room pages kept their header at 0.78 because older rules name the page
   (html.room-page / html[data-garden-galaxy="..."] #garden-header) and outweigh
   #garden-header. Same weight, later in the sheet, so 0.88 reaches every room. */
@media (min-width: 800px) {
  html.room-page #garden-header,
  html[data-garden-galaxy="workshop"] #garden-header,
  html[data-garden-galaxy="art"] #garden-header,
  html[data-garden-galaxy="round-table"] #garden-header,
  html[data-garden-galaxy="research"] #garden-header {
    background: linear-gradient(to bottom, rgba(12, 10, 26, 0.88), transparent);
  }
}

/* 3. Settings on a phone (and when zoomed): "the garden" pill stays where it is and
   stays in view. Behind it the fade band becomes a quiet solid lane, so the lower
   mind names and the Chat line slide under a footer instead of under a floating pill,
   and a focused row is scrolled clear of it. The band also reaches the very bottom
   edge (sticky stopped it 1.25rem short, at the veil's padding). Never takes a tap. */
@media (max-width: 640px) {
  #place-veil.is-settings {
    scroll-padding-bottom: 5.5rem;
  }
  #place-veil.is-settings::after {
    bottom: -1.25rem;
    height: 84px;
    margin: -84px -28px -20px;
    background: linear-gradient(to top, rgba(12, 10, 26, 0.97) 0%, rgba(12, 10, 26, 0.97) 72%, rgba(12, 10, 26, 0) 100%);
  }
  #place-veil.is-settings #place-veil-close {
    bottom: 0;
  }
}

/* v-tree-first-run-heals-v0.1: Hypha's walk #3 and #10, the first run a newcomer meets.
   Layer, never delete: every rule above stays; these win by order or by equal weight.
   Words stay. Lights stay. #place-veil-close is not touched. */

/* #3 (1280): the Chat card's middle layer (#room-chat-stage) was a plain block, so the
   face grew past the card and the input slid below the card's edge. The stage joins the
   card's column; the replies take the room; the input stays inside the card. The card
   may reach a little lower (it sits right of the chairs, clear of the later seats). */
@media (min-width: 641px) {
  #place-veil.is-core #room-chat {
    bottom: 5.5rem;
    max-height: min(56vh, calc(100vh - 20rem));
  }
  #place-veil.is-core #room-chat #room-chat-stage {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart {
    flex: 0 0 auto;
    max-height: 4.6em;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-change {
    flex: 0 0 auto;
  }
  #place-veil.is-core #room-chat .thread-face.is-room .thread-messages {
    flex: 1 1 auto;
    min-height: 3em;
    max-height: none;
  }
}

/* #3 (390): after the first Send, the card stayed 7.75rem tall and the input sat over
   the reply. Once the thread has a line (or the pool line shows, 019a), the card is a
   column: replies take the room, the input stays at its foot, and the hop pocket below
   gives some of its air. */
@media (max-width: 640px) and (min-height: 641px) {
  #place-veil.is-core:has(#room-chat .thread-messages:not(:empty), #room-chat [data-thread-pool]:not([hidden])) {
    padding-bottom: 7rem;
  }
  #place-veil.is-core #room-chat:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) {
    display: flex;
    flex-direction: column;
    max-height: min(40vh, 21rem);
    overflow: hidden;
  }
  #place-veil.is-core #room-chat:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) .room-chat-word {
    flex: 0 0 auto;
    align-self: center;
  }
  #place-veil.is-core #room-chat:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) #room-chat-stage {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
  }
  #place-veil.is-core #room-chat .thread-face.is-room:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }
  #place-veil.is-core #room-chat .thread-face.is-room:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) > * {
    flex: 0 0 auto;
  }
  #place-veil.is-core #room-chat .thread-face.is-room:has(.thread-messages:not(:empty)) .thread-messages {
    flex: 1 1 auto;
    min-height: 4.5em;
    max-height: none;
    overflow-y: auto;
    overscroll-behavior: contain;
  }
  #place-veil.is-core #room-chat .thread-face.is-room:has(.thread-messages:not(:empty), [data-thread-pool]:not([hidden])) .thread-compose {
    position: static;
  }
  /* The "later" line (deep research, a picture, a sound) rests while the thread has lines on a
     phone, so the reply has the room. It shows again before the first line, and on wider glass. */
  #place-veil.is-core #room-chat .thread-face.is-room:has(.thread-messages:not(:empty)) .thread-later {
    display: none;
  }
  /* The pool line (019a) shows whole; the older two-line heart cap stays for the heart. */
  #place-veil.is-core #room-chat .thread-face.is-room .thread-heart[data-thread-pool] {
    max-height: none;
    overflow: visible;
  }
}

/* 019a's note, Settings on a phone: the Chat card's input is a sticky foot over words that
   scroll; at 0.82 the words showed through it. A solid foot, same place, same words. */
@media (max-width: 640px) {
  #place-veil.is-settings #room-chat .thread-compose {
    background: rgba(12, 10, 26, 0.97);
  }
}

/* #10: the Gathering's quiet words were below 4.5:1 on the sky (Hypha counted 15 at 390).
   Same words, a little brighter, small ones a little larger. The asleep Send keeps its
   sleep look on purpose (a disabled control). "a seat, later" stays quieter than the four. */
#place-veil.is-core .core-center { color: rgba(200, 210, 230, 0.66); }
#place-veil.is-core .core-chair-unnamed {
  color: rgba(214, 222, 238, 0.74);
  font-size: 0.75rem;
}
#place-veil.is-core .core-chair.is-later .core-chair-unnamed { color: rgba(214, 222, 238, 0.66); }
#place-veil.is-core .core-family {
  color: rgba(214, 222, 238, 0.72);
  font-size: 0.8rem;
}
#place-veil.is-core .core-family a { color: rgba(196, 181, 253, 0.95); }
html:has(#place-veil.is-core.is-open) #thread-open,
html:has(#place-veil.is-core.is-open) details.galaxies > summary { color: rgba(214, 222, 238, 0.74); }
html:has(#place-veil.is-core.is-open) #galaxy-word { color: rgba(214, 222, 238, 0.7); }
html:has(#place-veil.is-core.is-open) #shared-shoulder,
html:has(#place-veil.is-core.is-open) #shared-shoulder a {
  color: rgba(214, 222, 238, 0.64);
  font-size: 0.72rem;
}
