/* Board retreat (docs/retreat/, tools/build_retreat.py). Loaded after shop.css and pond.css.
   Wide photos stay still while paper cards slide over them (her preference, 2026-10-15); the five nights ride a swan's
   line; every picture answers a tap; the buttons start something. */

.rt {
  --gold: #F2C14E; --leaf: #06C755; --ink: #121212; --paper: #FFFDF8;
  --rt: oklch(.42 .15 268); --rt-soft: oklch(.94 .035 268);
}
@media (prefers-color-scheme: dark) { .rt { --rt: oklch(.82 .09 268); --rt-soft: oklch(.32 .06 268) } }

/* ---------------------------------------------------------------- scenes: a photo that stays, paper that scrolls over */
.rt-scene { position: relative; width: 100vw; margin-left: calc(50% - 50vw); overflow: clip }
.rt-scene > .rt-bg { position: sticky; top: 0; height: 100vh; height: 100lvh; margin-bottom: -100vh; margin-bottom: -100lvh; overflow: hidden; z-index: 0; background: #1b1d22 }
.rt-bg img { display: block; width: 100%; height: 100%; object-fit: cover }
.rt-scene > .rt-over { position: relative; z-index: 1; max-width: 46rem; margin: 0 auto; padding: 50vh 1rem 30vh }
.rt-sec { padding: 3.5rem 0 2.5rem }

/* ---------------------------------------------------------------- hero */
.rt .top { position: relative; z-index: 3 }
.rt-hero { background: #1b1d22 center / cover no-repeat }
/* the shade sits on the text's own layer, full width, over the photo that stays */
.rt-hero .rt-over { max-width: none; min-height: 100svh; display: flex; flex-direction: column; justify-content: flex-end; color: #fff;
  padding: 6rem max(1rem, calc(50% - 22rem)) 2.5rem;
  background: linear-gradient(to top, rgb(8 10 18 / .9) 0%, rgb(8 10 18 / .74) 45%, rgb(8 10 18 / .3) 75%, rgb(8 10 18 / .45) 100%) }
.rt-kicker { margin: 0 0 .6rem; font: 700 .8rem/1.2 var(--font-d); letter-spacing: .2em; text-transform: uppercase; color: #fff }
.rt-hero h1 { margin: 0; font: 700 clamp(2.5rem, 9vw, 4.6rem)/1.02 var(--font-d); letter-spacing: -.03em; color: #fff }
.rt-hero h1 span { display: block }
.rt-b { color: var(--gold) }
.rt-lede { max-width: 30rem; margin: 1rem 0 .9rem; font-size: 1.15rem; color: #fff }
.rt-pilot { display: inline-flex; align-items: center; gap: .55rem; margin: 0 0 1.1rem; padding: .35rem .8rem; border: 2px solid #fff; border-radius: 999px; font: 700 .95rem/1.2 var(--font-d); color: #fff; background: rgb(8 10 18 / .55); align-self: flex-start }
.rt-dot { width: .6rem; height: .6rem; border-radius: 50%; background: var(--leaf); box-shadow: 0 0 0 0 rgb(6 199 85 / .7); animation: rt-pulse 2s infinite }
@keyframes rt-pulse { 70% { box-shadow: 0 0 0 .7rem rgb(6 199 85 / 0) } 100% { box-shadow: 0 0 0 0 rgb(6 199 85 / 0) } }

/* the swan and five ducklings: the board, afloat */
.rt-pond { display: flex; align-items: flex-end; gap: .2rem; margin: 1.6rem 0 0; height: 3.4rem; animation: rt-drift 14s ease-in-out infinite alternate }
.rt-pond button { padding: 0; border: 0; background: none; cursor: pointer; color: #fff; -webkit-tap-highlight-color: transparent; --db-look: ink; filter: drop-shadow(0 2px 3px rgb(0 0 0 / .5)) }
.rt-swan .db { font-size: 3.4rem }
.rt-duck .db { font-size: 1.9rem }
.rt-duck { animation: rt-bob 2.6s ease-in-out infinite; animation-delay: calc(var(--i) * -.45s) }
@keyframes rt-drift { from { transform: translateX(0) } to { transform: translateX(min(30vw, 12rem)) } }
@keyframes rt-bob { 50% { transform: translateY(-3px) } }

/* ---------------------------------------------------------------- buttons */
.rt-cta { display: flex; flex-wrap: wrap; gap: .6rem; margin: 1.2rem 0 0 }
.rt-btn, .rt .share.rt-btn { display: inline-flex; align-items: center; gap: .45rem; min-height: 2.9rem; padding: .6rem 1.1rem; border: 2px solid var(--fg); border-radius: var(--btn-r);
  background: var(--btn); color: var(--btn-fg); font: 700 1rem/1.15 var(--font-d); text-decoration: none; box-shadow: 3px 3px 0 var(--fg); cursor: pointer;
  transition: transform .12s var(--ease), box-shadow .12s var(--ease); -webkit-tap-highlight-color: transparent }
.rt-btn:hover { transform: translate(-1px, -1px); box-shadow: 4px 4px 0 var(--fg) }
.rt-btn:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--fg) }
.rt-btn.rt-line { background: var(--leaf); color: var(--ink); border-color: var(--ink); box-shadow: 3px 3px 0 var(--ink) }
.rt-btn.rt-ghost, .rt .share.rt-btn { background: var(--bg2); color: var(--fg) }
.rt .share.rt-btn span { text-decoration: none }
.rt-hero .rt-btn { background: var(--gold); color: var(--ink); border-color: var(--ink); box-shadow: 3px 3px 0 var(--ink) }
.rt-hero .rt-btn.rt-line { background: var(--leaf) }
.rt-hero .rt-btn.rt-ghost, .rt-hero .share.rt-btn { background: rgb(8 10 18 / .7); color: #fff; border-color: #fff; box-shadow: none }

/* ---------------------------------------------------------------- headings, cards */
.rt h2 { margin: 0 0 .35rem; font: 700 clamp(1.7rem, 6vw, 2.5rem)/1.08 var(--font-d); letter-spacing: -.02em }
.rt-sub { margin: 0 0 1rem; color: var(--mut); font-size: 1.05rem }
.rt-card { margin: 0 0 1.25rem; padding: 1.25rem 1.2rem; background: var(--bg2); color: var(--fg); border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow) }
.rt-head { margin-bottom: 1rem }

/* ---------------------------------------------------------------- the five nights */
.rt-job { margin: 1.3rem 0 1.6rem }
.rt-thread { position: relative; list-style: none; margin: 0; padding: 0 }
.rt-thread::before { content: ""; position: absolute; left: 1.45rem; top: 1rem; bottom: 1rem; width: 4px; border-radius: 2px;
  background: repeating-linear-gradient(160deg, #fff 0 5px, #d9d3c6 5px 8px); box-shadow: 0 0 0 1.5px var(--fg) }
.rt-day { position: relative; margin: 0 0 .7rem; padding-left: 3.6rem; animation: rt-in .5s var(--ease) both; animation-delay: calc(var(--i) * 60ms) }
.rt-dh { display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: 0 .7rem; width: 100%; padding: .75rem .9rem; text-align: left;
  background: var(--bg2); color: var(--fg); border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow); font: inherit; cursor: pointer }
.rt-dh[aria-expanded="true"] { box-shadow: 2px 2px 0 var(--fg); transform: translate(3px, 3px) }
.rt-dg { position: absolute; left: 0; top: .2rem; display: grid; place-items: center; width: 3rem; height: 3rem; border-radius: 50%; background: var(--bg2); border: 2px solid var(--fg) }
.rt-dg .db { font-size: 2rem }
.rt-dn { font: 700 .78rem/1.2 var(--font-d); letter-spacing: .16em; text-transform: uppercase; color: var(--rt) }
.rt-dt { font: 700 1.25rem/1.2 var(--font-d) }
.rt-db { margin: .5rem 0 .4rem; padding: .7rem .9rem .9rem; border-left: 3px solid var(--rt) }
.rt-db ul { list-style: none; margin: 0 0 .6rem; padding: 0 }
.rt-db li { margin: .25rem 0 }
.rt-db li b { display: inline-block; min-width: 5.5rem; font: 700 .8rem/1.2 var(--font-d); letter-spacing: .1em; text-transform: uppercase; color: var(--rt) }
.rt-want { font: 700 .95rem/1.2 var(--font-d); color: var(--fg); text-decoration: underline; text-decoration-color: var(--leaf); text-decoration-thickness: 3px; text-underline-offset: .2em }
@keyframes rt-in { from { opacity: 0; transform: translateY(10px) } }

/* ---------------------------------------------------------------- mornings */
.rt-ms { list-style: none; margin: 0 0 1.25rem; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(13.5rem, 1fr)); gap: 1rem }
.rt-m { padding: 1rem 1.1rem 1.1rem; background: var(--bg2); border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow) }
.rt-mg { padding: 0; border: 0; background: none; cursor: pointer; color: var(--fg) }
.rt-mg .db { font-size: 3rem }
.rt-mday { margin: .2rem 0 0; font: 700 .75rem/1.2 var(--font-d); letter-spacing: .16em; text-transform: uppercase; color: var(--rt) }
.rt-m h3 { margin: .1rem 0 .35rem; font: 700 1.2rem/1.2 var(--font-d) }
.rt-mr { margin: 0 0 .4rem; font: 600 1.08rem/1.35 var(--font-d) }
.rt-mf { margin: 0; font-size: .9rem; color: var(--mut) }

/* Troika, a timer for three people */
.rt-troika h3 { margin: 0 0 .2rem; font: 700 1.35rem/1.2 var(--font-d) }
.rt-clock { --p: 0; position: relative; display: grid; place-items: center; width: 11rem; height: 11rem; margin: .6rem auto 1rem; border-radius: 50%;
  background: conic-gradient(var(--rt) calc(var(--p) * 1turn), var(--rt-soft) 0); border: 2px solid var(--fg) }
.rt-clock::before { content: ""; position: absolute; inset: .7rem; border-radius: 50%; background: var(--bg2); border: 2px solid var(--fg) }
.rt-clock > * { position: relative }
.rt-swan2 .db { font-size: 3rem; transition: transform .5s var(--ease) }
.rt-clock.back .rt-swan2 .db { transform: scaleX(-1) }
.rt-mm { display: block; margin-top: -1.2rem; font: 700 1.9rem/1 var(--font-num); font-variant-numeric: tabular-nums }
.rt-now { position: absolute; bottom: 1.6rem; font: 700 .7rem/1 var(--font-d); letter-spacing: .12em; text-transform: uppercase; color: var(--rt) }
.rt-tps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: .6rem }
@media (min-width: 40rem) { .rt-tps { grid-template-columns: repeat(4, 1fr) } }
.rt-tp { display: grid; gap: .15rem; padding: .6rem .7rem; border: 2px solid var(--fg); border-radius: var(--r); background: var(--bg); cursor: pointer }
.rt-tp b { font: 700 .8rem/1.2 var(--font-d); color: var(--rt); letter-spacing: .08em; text-transform: uppercase }
.rt-tp span:last-child { font-size: .95rem; line-height: 1.3 }
.rt-tpg .db { font-size: 1.6rem }
.rt-tp.on { background: var(--rt-soft); box-shadow: 3px 3px 0 var(--fg) }
.rt-done { margin: .9rem 0 0; font: 700 1.1rem/1.3 var(--font-d) }

/* ---------------------------------------------------------------- afternoons */
.rt-count { margin: 0; min-height: 1.4em; font: 700 1rem/1.4 var(--font-d); color: var(--rt) }
.rt-pms { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem }
@media (min-width: 40rem) { .rt-pms { grid-template-columns: repeat(3, 1fr) } }
.rt-pm { position: relative; display: block; width: 100%; padding: 0; overflow: hidden; text-align: left; background: var(--bg2); color: var(--fg);
  border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow); font: inherit; cursor: pointer; transition: transform .15s var(--ease) }
.rt-pm img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 5; object-fit: cover; transition: transform .6s var(--ease) }
.rt-pm:hover img { transform: scale(1.04) }
.rt-pmg { position: absolute; top: .5rem; left: .5rem; display: grid; place-items: center; width: 2.4rem; height: 2.4rem; border-radius: 50%; background: var(--bg2); border: 2px solid var(--fg) }
.rt-pmg .db { font-size: 1.6rem }
.rt-pmt { display: grid; gap: .1rem; padding: .55rem .65rem .7rem }
.rt-pmt b { font: 700 1.05rem/1.2 var(--font-d) }
.rt-pmt span { font-size: .88rem; line-height: 1.3; color: var(--mut) }
.rt-tick { position: absolute; top: .45rem; right: .45rem; width: 2.2rem; height: 2.2rem; border-radius: 50%; background: var(--bg2) var(--bud) center 40% / 88% no-repeat; border: 2px solid var(--fg); transition: transform .3s var(--ease) }
.rt-pm[aria-pressed="true"] { transform: translate(2px, 2px); box-shadow: 2px 2px 0 var(--fg); outline: 4px solid var(--rt); outline-offset: -4px }
.rt-pm[aria-pressed="true"] .rt-tick { background-image: var(--lotus); transform: scale(1.15) rotate(-8deg) }

/* ---------------------------------------------------------------- little things */
.rt-perks { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .6rem }
@media (min-width: 40rem) { .rt-perks { grid-template-columns: repeat(3, minmax(0, 1fr)) } }
.rt-perk { display: flex; align-items: center; gap: .6rem; width: 100%; min-height: 3.6rem; padding: .5rem .7rem; text-align: left; background: var(--bg2); color: var(--fg);
  border: 2px solid var(--fg); border-radius: 1.1rem; font: 600 .92rem/1.25 var(--sys); cursor: pointer; transition: background .2s, transform .15s var(--ease); overflow-wrap: anywhere }
.rt-perk .db { flex: none; font-size: 2rem }
.rt-perk[aria-pressed="true"] { background: var(--rt-soft); box-shadow: 3px 3px 0 var(--fg); transform: translate(-1px, -1px) }
.rt-basket { position: sticky; bottom: .8rem; z-index: 5; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .8rem; margin: 1.2rem 0 0; padding: .6rem .8rem;
  background: var(--bg2); border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow) }
.rt-bk .db { font-size: 2.6rem }
.rt-bn { flex: 1; font: 700 1.05rem/1.2 var(--font-d) }
.rt-fly { position: fixed; z-index: 50; pointer-events: none }

/* ---------------------------------------------------------------- months */
.rt-months { list-style: none; margin: .4rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: .5rem }
@media (min-width: 34rem) { .rt-months { grid-template-columns: repeat(4, 1fr) } }
@media (min-width: 44rem) { .rt-months { grid-template-columns: repeat(6, 1fr) } }
.rt-mo { display: grid; justify-items: center; gap: .1rem; width: 100%; padding: .5rem .3rem .55rem; background: var(--bg); color: var(--fg); border: 2px solid var(--fg); border-radius: var(--r); font: inherit; cursor: pointer }
.rt-mo .db { font-size: 1.7rem }
.rt-mo b { font: 700 1.05rem/1.1 var(--font-d) }
.rt-mo span { font-size: .78rem; line-height: 1.2; text-align: center }
.rt-mo.rt-green { background: oklch(.95 .05 145) }
.rt-mo.rt-cool, .rt-mo.rt-early { background: oklch(.95 .04 85) }
@media (prefers-color-scheme: dark) { .rt-mo.rt-green { background: oklch(.3 .05 145) } .rt-mo.rt-cool, .rt-mo.rt-early { background: oklch(.3 .04 85) } }
.rt-mo[aria-disabled="true"] { opacity: .5; border-style: dashed; cursor: not-allowed }
.rt-mo[aria-pressed="true"] { outline: 4px solid var(--rt); outline-offset: 1px; box-shadow: 3px 3px 0 var(--fg) }

/* ---------------------------------------------------------------- where, price */
.rt-facts { list-style: none; margin: .4rem 0 0; padding: 0; display: grid; gap: .7rem }
.rt-facts li { display: flex; align-items: center; gap: .8rem; padding: .7rem .9rem; background: var(--bg2); border: 2px solid var(--fg); border-radius: var(--r); font-size: 1.05rem }
.rt-facts .db { flex: none; font-size: 2.2rem }
.rt-lanes { list-style: none; margin: 0; padding: 0; display: grid; gap: 1rem }
@media (min-width: 40rem) { .rt-lanes { grid-template-columns: 1fr 1fr } }
.rt-lane { padding: 1.1rem 1.2rem; background: var(--bg2); border: var(--card-bd); border-radius: var(--r); box-shadow: var(--card-shadow) }
.rt-ln { margin: 0; font: 700 1rem/1.3 var(--font-d) }
.rt-amt { margin: .3rem 0 .4rem; font: 700 clamp(2rem, 8vw, 2.6rem)/1 var(--font-num) }
.rt-pl { margin: 0; padding: .3rem .55rem; display: inline-block; background: var(--gold); color: var(--ink); border: 2px solid var(--ink); border-radius: var(--r); font: 700 .9rem/1.3 var(--font-d) }
.rt-pl .amt { color: var(--ink) }
.rt-note { margin: .8rem 0 0; color: var(--mut) }

/* ---------------------------------------------------------------- hold form */
.rt-form h2 { margin-bottom: .2rem }
.rt-f { display: grid; gap: .3rem; margin: .8rem 0 0; border: 0; padding: 0 }
.rt-f > span, .rt-f legend { font: 700 .85rem/1.2 var(--font-d); letter-spacing: .08em; text-transform: uppercase }
.rt-f input, .rt-f select, .rt-f textarea { width: 100%; min-height: 2.9rem; padding: .55rem .7rem; font: 1rem/1.4 var(--sys); color: var(--fg); background: var(--bg); border: 2px solid var(--fg); border-radius: var(--r) }
.rt-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0 .8rem }
.rt-kind { display: inline-flex; align-items: center; gap: .4rem; margin: .3rem .8rem 0 0; font-size: 1rem }
.rt-kind input { width: 1.2rem; height: 1.2rem; accent-color: var(--rt) }
.rt-chosen { margin: .8rem 0 0; display: flex; flex-wrap: wrap; gap: .35rem }
.rt-chosen span { padding: .2rem .55rem; border: 1.5px solid var(--fg); border-radius: 999px; background: var(--rt-soft); font-size: .88rem }
.rt-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden }
.rt-msg { min-height: 1.4em; margin: .7rem 0 0; font: 700 1rem/1.3 var(--font-d) }
.rt-msg.bad { color: oklch(.48 .19 25) }
@media (prefers-color-scheme: dark) { .rt-msg.bad { color: oklch(.78 .14 25) } }

/* ---------------------------------------------------------------- end */
.rt-end { text-align: left }
.rt-end details { margin: .9rem 0 0; padding: .7rem .9rem; background: var(--bg2); border: 2px solid var(--fg); border-radius: var(--r) }
.rt-end summary { cursor: pointer; font: 700 1.05rem/1.3 var(--font-d) }
.rt-end details p, .rt-end details li { font-size: .95rem }
.rt-creds { padding-left: 1.1rem }
.rt-creds a { color: var(--fg) }

/* ---------------------------------------------------------------- a picture answers a tap */
.rt-pop { animation: rt-pop .55s var(--ease) }
@keyframes rt-pop { 30% { transform: scale(1.25) rotate(-10deg) } 60% { transform: scale(.92) rotate(6deg) } }
.rt-no { animation: rt-no .4s var(--ease) }
@keyframes rt-no { 25% { transform: translateX(-4px) } 75% { transform: translateX(4px) } }
.rt-burst { position: fixed; z-index: 60; width: 1.6rem; height: 1.4rem; pointer-events: none; background: var(--lotus) center / contain no-repeat }

@media (prefers-reduced-motion: reduce) {
  .rt-pond, .rt-duck, .rt-dot, .rt-day { animation: none }
  .rt-pm img, .rt-btn, .rt-perk, .rt-swan2 .db { transition: none }
}
