/* Nicecard demo — "Midnight Hall" (夜宴) invitation style. Everything is scoped under .nci--hall,
   .nci-cover--hall and .nci-float--hall so the other styles are untouched; new classes use the hal-
   prefix. The page is a size container, so every measurement is in cqw and the layout keeps its
   proportions in the 372px phone frame, the 390px editor canvas and a 390px phone.
   One ground (near-black), one type colour (ivory), one accent (champagne gold) spent on hairlines,
   numerals and nothing else. */

.nci--hall,
.nci-cover--hall,
.nci-float--hall {
  --hal-night: #0e0f12;
  --hal-deep: #15181e;
  --hal-ivory: #f1ece2;
  --hal-dim: #9c968a;
  --hal-gold: #c8a567;
  --hal-gold-2: #a8874a;
  --hal-hair: rgba(200, 165, 103, 0.34);
  --hal-hair-2: rgba(241, 236, 226, 0.14);
  --hal-g: 8.5cqw;
  --hal-disp: 'Cormorant Garamond', 'Noto Serif SC', Georgia, serif;
  --hal-caps: 'Cinzel', 'Cormorant Garamond', Georgia, serif;
  --hal-serif: 'Noto Serif SC', 'Cormorant Garamond', Georgia, serif;
  --hal-body: 'Jost', 'Noto Sans SC', 'PingFang SC', system-ui, sans-serif;
}

.nci--hall {
  container-type: inline-size;
  overflow-x: clip;
  overflow-y: visible;
  background: var(--hal-night);
  color: var(--hal-ivory);
  font-family: var(--hal-body);
  --nci-bg: #0e0f12;
  --nci-soft: #1b1f26;
  --nci-slot-line: rgba(200, 165, 103, 0.45);
  --nci-slot-ink: #9c968a;
  --nci-hint: rgba(200, 165, 103, 0.5);
}

/* flow-root keeps a section's first and last child margins inside it, so a text-first section still
   opens with air and a text-last one does not run into the next photograph. */
.nci--hall .nci-section {
  display: flow-root;
  padding: 0;
  background: var(--hal-night);
}

.nci--hall .nci-s-countdown,
.nci--hall .nci-s-story,
.nci--hall .nci-s-schedule,
.nci--hall .nci-s-gallery,
.nci--hall .nci-s-venue,
.nci--hall .nci-s-faq,
.nci--hall .nci-s-rsvp,
.nci--hall .nci-s-wishes {
  padding-bottom: 15cqw;
}

/* The guest book closes with a photograph, so the page's last breath belongs to the picture. */
.nci--hall .nci-s-wishes {
  padding-bottom: 0;
}

/* Ivory type sitting on a photograph keeps a lighter edit hint. */
.nci--hall .hal-cover-body .nci-f--hint,
.nci--hall .hal-band-body .nci-f--hint {
  border-bottom-color: rgba(241, 236, 226, 0.6);
}

/* ═════════════ Shared type ═════════════ */

/* A rule cut by its own label: the only section heading this page has. */
.nci--hall .hal-rule {
  display: flex;
  align-items: center;
  gap: 3.4cqw;
  margin: 14cqw var(--hal-g) 0;
}

.nci--hall .hal-rule-line {
  flex: 1 1 auto;
  height: 1px;
  background: var(--hal-hair);
}

.nci--hall .hal-rule-text {
  flex: 0 1 auto;
  font-family: var(--hal-caps);
  font-size: 2.6cqw;
  line-height: 1.4;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  color: var(--hal-gold);
}

.nci--hall .hal-kicker {
  font-family: var(--hal-caps);
  font-size: 2.6cqw;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  color: var(--hal-gold);
}

.nci--hall .hal-title {
  margin: 5cqw var(--hal-g) 0;
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 7.4cqw;
  line-height: 1.25;
  letter-spacing: 0.04em;
  text-align: center;
  color: var(--hal-ivory);
}

/* 中文 sets in the CJK serif at a smaller size and wider tracking: Cormorant has no CJK glyphs, and a
   line that falls back mid-word ends up two sizes at once. */
.nci--hall.nci--lang-zh .hal-title {
  font-family: var(--hal-serif);
  font-weight: 400;
  font-size: 5.8cqw;
  letter-spacing: 0.22em;
  text-indent: 0.22em;
}

.nci--hall .hal-note {
  margin: 7cqw var(--hal-g) 0;
  font-size: 3cqw;
  line-height: 2;
  letter-spacing: 0.06em;
  text-align: center;
  text-wrap: pretty;
  color: var(--hal-dim);
}

.nci--hall .hal-quote {
  margin: 12cqw var(--hal-g);
  font-family: var(--hal-disp);
  font-weight: 300;
  font-style: italic;
  font-size: 5cqw;
  line-height: 1.85;
  letter-spacing: 0.02em;
  text-align: center;
  text-wrap: pretty;
  color: var(--hal-ivory);
}

.nci--hall.nci--lang-zh .hal-quote {
  font-family: var(--hal-serif);
  font-style: normal;
  font-size: 3.8cqw;
  line-height: 2.2;
  letter-spacing: 0.16em;
  text-indent: 0.16em;
}

/* Device: an art-deco hollow stroke, in gold, for one or two words only. The fill is dropped only
   where the stroke is actually painted, so an engine without it still shows solid gold letters. */
.nci--hall .hal-outline,
.nci-cover--hall .hal-outline {
  margin: 6cqw var(--hal-g) 0;
  font-family: var(--hal-caps);
  font-weight: 600;
  font-size: 8.2cqw;
  line-height: 1.15;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  text-align: center;
  color: var(--hal-gold);
}

.nci--hall .hal-outline--sm {
  font-size: 6.6cqw;
}

@supports (-webkit-text-stroke: 1px #000) {
  .nci--hall .hal-outline,
  .nci-cover--hall .hal-outline {
    -webkit-text-stroke: 0.9px var(--hal-gold);
    color: transparent;
  }
}

/* Device: a caps label rotated down the far margin, read as a spine. */
.nci--hall .hal-spine {
  position: absolute;
  top: 6cqw;
  z-index: 3;
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  line-height: 1;
  letter-spacing: 0.42em;
  text-indent: 0.42em;
  white-space: nowrap;
  color: var(--hal-gold);
  writing-mode: vertical-rl;
}

.nci--hall.nci--lang-zh .hal-spine {
  font-family: var(--hal-serif);
  font-size: 3cqw;
  letter-spacing: 0.34em;
}

.nci--hall .hal-spine--r {
  right: 1.6cqw;
}

.nci--hall .hal-spine--l {
  left: 1.6cqw;
}

.nci--hall .hal-cap {
  margin: 3cqw var(--hal-g) 0;
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  line-height: 1.6;
  letter-spacing: 0.24em;
  text-indent: 0.24em;
  color: var(--hal-dim);
}

.nci--hall .hal-cap--right {
  text-align: right;
}

.nci--hall .hal-role {
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  color: var(--hal-gold);
}

.nci--hall.nci--lang-zh .hal-role {
  font-family: var(--hal-serif);
  font-size: 2.9cqw;
}

/* A real link, kept to a hairline: the gold belongs to the rules, not to the buttons. */
.nci--hall .hal-link {
  display: inline-block;
  padding-bottom: 1cqw;
  border-bottom: 1px solid var(--hal-hair);
  font-family: var(--hal-caps);
  font-size: 2.6cqw;
  letter-spacing: 0.22em;
  text-indent: 0.22em;
  color: var(--hal-gold);
  transition: border-color 160ms, color 160ms;
}

.nci--hall a.hal-link:hover {
  border-bottom-color: var(--hal-gold);
  color: var(--hal-ivory);
}

.nci--hall .hal-maps,
.nci--hall .hal-run + .hal-run-close + .hal-link {
  display: flex;
}

/* ═════════════ Cover ═════════════ */

.nci--hall .hal-cover {
  position: relative;
  overflow: hidden;
  aspect-ratio: 62 / 115;
  min-height: 108cqw;
  background: #101216;
}

.nci--hall .hal-cover-img {
  position: absolute;
  inset: 0;
}

/* Measured, not hoped for: the caps row sits on a scrim that keeps the top band under 0.18 luminance,
   and the name block on a deeper one, because the foot of this photograph is a lit staircase. */
.nci--hall .hal-cover-veil {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10, 11, 14, 0.82) 0%, rgba(10, 11, 14, 0.34) 14%, rgba(10, 11, 14, 0) 30%),
    linear-gradient(0deg, rgba(10, 11, 14, 0.92) 0%, rgba(10, 11, 14, 0.78) 24%, rgba(10, 11, 14, 0.3) 44%, rgba(10, 11, 14, 0) 62%);
}

.nci--hall .hal-cover-body {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  height: 100%;
  /* The top padding clears the floating music and share buttons, which this style parks in the
     top-right corner — the caps row starts under them and keeps the full width of the page. */
  padding: 16.5cqw 0 9cqw;
  pointer-events: none;
}

/* Blank areas of the overlay fall through, so the photograph underneath stays selectable in the
   editor; only the type and the buttons take the pointer. */
.nci--hall .hal-cover-body .nci-f,
.nci--hall .hal-band-body .nci-f,
.nci--hall .hal-cover-body button {
  pointer-events: auto;
}

/* Device: three caps phrases spread across the very top; the right end is left clear for the music
   button, which this style parks in the top-right corner. */
.nci--hall .hal-capsrow,
.nci-cover--hall .hal-capsrow {
  display: flex;
  justify-content: space-between;
  gap: 2cqw;
  padding: 0 var(--hal-g);
  font-family: var(--hal-caps);
  font-size: 2.4cqw;
  line-height: 1.4;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  color: rgba(241, 236, 226, 0.92);
}

.nci--hall.nci--lang-zh .hal-capsrow,
.nci-cover--hall .hal-capsrow--zh {
  font-family: var(--hal-serif);
  font-size: 2.7cqw;
  letter-spacing: 0.24em;
}

.nci--hall .hal-cover-foot,
.nci-cover--hall .hal-cv-foot {
  padding: 0 var(--hal-g);
  text-align: center;
}

.nci--hall .hal-cover-line,
.nci-cover--hall .hal-cover-line {
  font-family: var(--hal-serif);
  font-size: 2.8cqw;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  color: rgba(241, 236, 226, 0.78);
}

.nci--hall .hal-cover-names,
.nci-cover--hall .hal-cover-names {
  margin-top: 4cqw;
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 11cqw;
  line-height: 1.12;
  letter-spacing: 0.02em;
  color: #fff;
  overflow-wrap: anywhere;
}

.nci--hall.nci--lang-zh .hal-cover-names,
.nci-cover--hall .hal-cover-names--zh {
  font-family: var(--hal-serif);
  font-weight: 400;
  font-size: 9cqw;
  letter-spacing: 0.14em;
}

.nci--hall .hal-cover-amp,
.nci-cover--hall .hal-cover-amp {
  margin: 0 2.6cqw;
  font-size: 0.62em;
  vertical-align: 0.2em;
  color: var(--hal-gold);
}

.nci--hall .hal-cover-rule,
.nci-cover--hall .hal-cover-rule {
  width: 26cqw;
  height: 1px;
  margin: 5cqw auto;
  background: linear-gradient(90deg, transparent, var(--hal-gold), transparent);
}

.nci--hall .hal-cover-date,
.nci-cover--hall .hal-cover-date {
  font-family: var(--hal-caps);
  font-size: 4cqw;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  color: var(--hal-gold);
}

.nci--hall .hal-cover-place {
  margin-top: 2.6cqw;
  font-size: 2.9cqw;
  letter-spacing: 0.18em;
  color: rgba(241, 236, 226, 0.82);
}

.nci--hall .hal-cover-caps {
  margin-top: 6cqw;
  font-family: var(--hal-caps);
  font-size: 2.4cqw;
  letter-spacing: 0.26em;
  text-indent: 0.26em;
  color: rgba(241, 236, 226, 0.6);
}

/* ═════════════ The hour — clock, grid, dateline ═════════════ */

.nci--hall .hal-clock {
  margin: 9cqw var(--hal-g) 0;
  text-align: center;
}

.nci--hall .hal-dial {
  position: relative;
  width: 52cqw;
  margin: 0 auto;
  aspect-ratio: 1;
  color: var(--hal-gold);
}

/* Every stroke is the block's own colour at some strength, so a tint on the dial repaints the whole face. */
.nci--hall .hal-dial-svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
  fill: none;
  stroke: color-mix(in srgb, currentColor 34%, transparent);
  stroke-width: 0.5;
}

.nci--hall .hal-dial-inner {
  stroke: color-mix(in srgb, currentColor 16%, transparent);
}

.nci--hall .hal-dial-tick {
  stroke: color-mix(in srgb, currentColor 40%, transparent);
  stroke-width: 0.5;
}

.nci--hall .hal-dial-tick--q {
  stroke: currentColor;
  stroke-width: 0.9;
}

.nci--hall .hal-dial-hand {
  stroke: currentColor;
  stroke-linecap: round;
}

.nci--hall .hal-dial-hand--h {
  stroke-width: 1.6;
}

.nci--hall .hal-dial-hand--m {
  stroke-width: 1;
}

.nci--hall .hal-dial-disc {
  fill: var(--hal-night);
  stroke: color-mix(in srgb, currentColor 26%, transparent);
  stroke-width: 0.5;
}

.nci--hall .hal-dial-mid {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

.nci--hall .hal-dial-n {
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 10cqw;
  line-height: 1;
  letter-spacing: 0.02em;
  color: var(--hal-ivory);
  font-variant-numeric: lining-nums;
}

.nci--hall .hal-dial-u {
  margin-top: 1cqw;
  font-family: var(--hal-caps);
  font-size: 2cqw;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
  color: var(--hal-dim);
}

.nci--hall .hal-dial-at {
  margin-top: 5cqw;
  font-family: var(--hal-caps);
  font-size: 2.7cqw;
  letter-spacing: 0.26em;
  text-indent: 0.26em;
  color: var(--hal-gold);
}

.nci--hall .hal-hms {
  display: flex;
  justify-content: center;
  gap: 9cqw;
  margin-top: 6cqw;
  padding-top: 5cqw;
  border-top: 1px solid var(--hal-hair);
}

.nci--hall .hal-hms-cell b {
  display: block;
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 7cqw;
  line-height: 1;
  color: var(--hal-ivory);
}

.nci--hall .hal-hms-cell i {
  display: block;
  margin-top: 1.4cqw;
  font-family: var(--hal-caps);
  font-style: normal;
  font-size: 2.2cqw;
  letter-spacing: 0.28em;
  text-indent: 0.28em;
  color: var(--hal-dim);
}

.nci--hall .hal-cd-done {
  margin-top: 6cqw;
  padding-top: 5cqw;
  border-top: 1px solid var(--hal-hair);
  font-family: var(--hal-disp);
  font-size: 6.4cqw;
  color: var(--hal-gold);
}

/* Device: the month grid with the wedding day ringed, the month large beside it, the year in dashes. */
.nci--hall .hal-cal {
  display: grid;
  grid-template-columns: 27cqw minmax(0, 1fr);
  gap: 5cqw;
  align-items: center;
  margin: 11cqw var(--hal-g) 0;
  padding: 6cqw 5cqw;
  border: 1px solid var(--hal-hair);
}

.nci--hall .hal-cal-side {
  text-align: center;
}

.nci--hall .hal-cal-m {
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 15cqw;
  line-height: 0.9;
  color: var(--hal-ivory);
}

.nci--hall .hal-cal-d {
  margin-top: 1cqw;
  font-family: var(--hal-disp);
  font-size: 5cqw;
  line-height: 1;
  color: var(--hal-gold);
}

.nci--hall .hal-cal-y {
  margin-top: 2.4cqw;
  font-family: var(--hal-caps);
  font-size: 2.4cqw;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  color: var(--hal-dim);
}

.nci--hall .hal-cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 1.2cqw 0;
  font-family: var(--hal-body);
  font-size: 2.5cqw;
  text-align: center;
  color: rgba(241, 236, 226, 0.66);
}

.nci--hall .hal-cal-h {
  padding-bottom: 1.6cqw;
  font-family: var(--hal-caps);
  font-size: 2.1cqw;
  letter-spacing: 0.06em;
  color: var(--hal-gold);
}

.nci--hall .hal-cal-c {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1;
  border-radius: 50%;
  line-height: 1;
}

.nci--hall .hal-cal-c.is-day {
  border: 1px solid var(--hal-gold);
  color: var(--hal-ivory);
}

.nci--hall .hal-dateline {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: baseline;
  gap: 2cqw;
  margin: 6cqw var(--hal-g) 0;
  font-family: var(--hal-serif);
  font-size: 2.9cqw;
  letter-spacing: 0.16em;
  color: var(--hal-dim);
}

.nci--hall .hal-dateline i {
  font-style: normal;
  color: var(--hal-gold);
}

/* ═════════════ The hosts — two facing plates ═════════════ */

.nci--hall .hal-hosts {
  position: relative;
  margin-top: 12cqw;
}

.nci--hall .hal-host {
  display: grid;
  align-items: end;
  column-gap: 5cqw;
}

.nci--hall .hal-host + .hal-host {
  margin-top: 11cqw;
}

.nci--hall .hal-host--a {
  grid-template-columns: 54cqw minmax(0, 1fr);
  padding-right: 8cqw;
}

.nci--hall .hal-host--b {
  grid-template-columns: minmax(0, 1fr) 54cqw;
  padding-left: var(--hal-g);
}

.nci--hall .hal-host-img {
  aspect-ratio: 3 / 4.3;
}

.nci--hall .hal-host--b .hal-host-img {
  grid-column: 2;
  grid-row: 1;
}

.nci--hall .hal-host--b .hal-host-body {
  grid-column: 1;
  grid-row: 1;
  text-align: right;
}

.nci--hall .hal-host-body {
  padding-bottom: 3cqw;
}

.nci--hall .hal-host-name {
  margin-top: 2.6cqw;
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 8cqw;
  line-height: 1.1;
  color: var(--hal-ivory);
  overflow-wrap: anywhere;
}

.nci--hall.nci--lang-zh .hal-host-name {
  font-family: var(--hal-serif);
  font-size: 6cqw;
  letter-spacing: 0.1em;
}

.nci--hall .hal-host-line {
  margin-top: 3.4cqw;
  font-size: 2.9cqw;
  line-height: 2;
  letter-spacing: 0.04em;
  text-wrap: pretty;
  color: var(--hal-dim);
}

/* ═════════════ The running order ═════════════ */

/* A full-bleed band opening a section adds only a little of its own air: the section above it has
   already paid 15cqw of near-black, and two photographs should not drift that far apart. */
.nci--hall .hal-band {
  position: relative;
  overflow: hidden;
  aspect-ratio: 5 / 4;
  margin-top: 4cqw;
  background: #101216;
}

.nci--hall .hal-band-img {
  position: absolute;
  inset: 0;
}

.nci--hall .hal-band-veil {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(0deg, rgba(10, 11, 14, 0.9) 0%, rgba(10, 11, 14, 0.5) 26%, rgba(10, 11, 14, 0.04) 58%);
}

.nci--hall .hal-band-body {
  position: absolute;
  right: var(--hal-g);
  bottom: 6cqw;
  left: var(--hal-g);
  z-index: 2;
  text-align: center;
  pointer-events: none;
}

.nci--hall .hal-band-title {
  margin-top: 3cqw;
  font-family: var(--hal-disp);
  font-weight: 300;
  font-size: 8cqw;
  line-height: 1.15;
  color: #fff;
}

.nci--hall.nci--lang-zh .hal-band-title {
  font-family: var(--hal-serif);
  font-weight: 400;
  font-size: 6.2cqw;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
}

.nci--hall .hal-run {
  margin: 10cqw var(--hal-g) 0;
}

.nci--hall .hal-run-row {
  display: grid;
  grid-template-columns: 9cqw 17cqw minmax(0, 1fr);
  align-items: baseline;
  gap: 0 3cqw;
  padding: 4.6cqw 0;
  border-top: 1px solid var(--hal-hair);
}

.nci--hall .hal-run-row:last-child {
  border-bottom: 1px solid var(--hal-hair);
}

.nci--hall .hal-run-no {
  font-family: var(--hal-caps);
  font-size: 2.8cqw;
  letter-spacing: 0.1em;
  color: var(--hal-gold);
}

.nci--hall .hal-run-at {
  font-family: var(--hal-caps);
  font-size: 3cqw;
  letter-spacing: 0.08em;
  color: rgba(241, 236, 226, 0.78);
}

.nci--hall .hal-run-t {
  font-family: var(--hal-disp);
  font-weight: 400;
  font-size: 5cqw;
  line-height: 1.25;
  color: var(--hal-ivory);
}

.nci--hall.nci--lang-zh .hal-run-t {
  font-family: var(--hal-serif);
  font-size: 4cqw;
  letter-spacing: 0.08em;
}

.nci--hall .hal-run-d {
  grid-column: 2 / -1;
  margin-top: 1.8cqw;
  font-size: 2.8cqw;
  line-height: 1.9;
  color: var(--hal-dim);
}

.nci--hall .hal-run-close {
  margin: 6cqw var(--hal-g) 0;
  font-family: var(--hal-disp);
  font-style: italic;
  font-size: 4.6cqw;
  text-align: center;
  color: var(--hal-gold);
}

.nci--hall.nci--lang-zh .hal-run-close {
  font-family: var(--hal-serif);
  font-style: normal;
  font-size: 3.6cqw;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
}

.nci--hall .hal-run-close + .hal-link {
  display: block;
  width: fit-content;
  margin: 7cqw auto 0;
}

/* ═════════════ The plates ═════════════ */

.nci--hall .hal-plates {
  position: relative;
  margin-top: 10cqw;
}

.nci--hall .hal-plate--tall {
  margin-left: 20cqw;
  aspect-ratio: 3 / 4;
}

.nci--hall .hal-plate--wide {
  aspect-ratio: 5 / 3;
  margin-top: 4cqw;
}

/* ═════════════ The hall ═════════════ */

/* The photograph is a stacked pair; at this ratio the frame crops vertically only, so the slot's own
   object-position of 100% lands exactly on the lower frame. */
.nci--hall .hal-wide {
  aspect-ratio: 8 / 5;
  margin-top: 4cqw;
}

.nci--hall .hal-venue {
  margin: 6cqw var(--hal-g) 0;
  font-family: var(--hal-disp);
  font-weight: 400;
  font-size: 6.4cqw;
  line-height: 1.3;
  text-align: center;
  color: var(--hal-ivory);
}

.nci--hall.nci--lang-zh .hal-venue {
  font-family: var(--hal-serif);
  font-size: 5cqw;
  letter-spacing: 0.14em;
  text-indent: 0.14em;
}

.nci--hall .hal-addr {
  margin: 2.6cqw var(--hal-g) 0;
  font-size: 2.8cqw;
  line-height: 1.8;
  letter-spacing: 0.08em;
  text-align: center;
  color: var(--hal-dim);
}

.nci--hall .hal-mapwrap {
  margin: 7cqw var(--hal-g) 0;
}

.nci--hall .nci-map {
  height: 40cqw;
  overflow: hidden;
  border: 1px solid var(--hal-hair);
  background-color: #14171c;
  background-image: linear-gradient(rgba(200, 165, 103, 0.12) 1px, transparent 1px),
    linear-gradient(90deg, rgba(200, 165, 103, 0.12) 1px, transparent 1px);
  background-size: 7cqw 7cqw;
}

.nci--hall .nci-map-road {
  top: 58%;
  height: 2.2cqw;
  background: rgba(200, 165, 103, 0.22);
}

.nci--hall .nci-map-pin {
  top: 38%;
  left: 46%;
  width: 3.4cqw;
  height: 3.4cqw;
  background: var(--hal-gold);
}

.nci--hall .hal-maps {
  justify-content: center;
  gap: 7cqw;
  margin-top: 6cqw;
}

.nci--hall .hal-ledger {
  margin: 10cqw var(--hal-g) 0;
}

.nci--hall .hal-ledger-row {
  display: grid;
  grid-template-columns: 22cqw minmax(0, 1fr);
  gap: 3cqw;
  padding: 4cqw 0;
  border-top: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-ledger-row:last-child {
  border-bottom: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-ledger-row--gold {
  border-top-color: var(--hal-hair);
}

.nci--hall .hal-ledger-k {
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  line-height: 1.9;
  letter-spacing: 0.2em;
  color: var(--hal-gold);
}

.nci--hall.nci--lang-zh .hal-ledger-k {
  font-family: var(--hal-serif);
  font-size: 2.8cqw;
  letter-spacing: 0.16em;
}

/* The music and share discs sit in the top right corner of the screen, and a ledger row scrolls
   through that band; the value wraps before it rather than running underneath. */
.nci--hall .hal-ledger-v {
  padding-right: 13cqw;
  font-size: 2.8cqw;
  line-height: 1.9;
  color: var(--hal-dim);
}

/* ═════════════ Notes (off by default) ═════════════ */

.nci--hall .hal-faq {
  margin: 7cqw var(--hal-g) 0;
}

.nci--hall .hal-faq-item {
  padding: 4.4cqw 0;
  border-top: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-faq-item:last-child {
  border-bottom: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-faq-q {
  font-family: var(--hal-disp);
  font-size: 4.6cqw;
  color: var(--hal-ivory);
}

.nci--hall.nci--lang-zh .hal-faq-q {
  font-family: var(--hal-serif);
  font-size: 3.6cqw;
  letter-spacing: 0.08em;
}

.nci--hall .hal-faq-a {
  margin-top: 1.6cqw;
  font-size: 2.8cqw;
  line-height: 1.95;
  color: var(--hal-dim);
}

/* ═════════════ The reply card ═════════════ */

.nci--hall .hal-rsvp-by {
  margin: 5cqw var(--hal-g) 0;
  font-family: var(--hal-serif);
  font-size: 2.9cqw;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  text-align: center;
  color: var(--hal-dim);
}

/* A card tipped into the programme: a gold rule with a second hairline just inside it. */
.nci--hall .hal-card {
  margin: 8cqw var(--hal-g) 0;
  padding: 7cqw 6cqw;
  border: 1px solid var(--hal-hair);
  background: var(--hal-deep);
  box-shadow: inset 0 0 0 1.6cqw var(--hal-deep), inset 0 0 0 calc(1.6cqw + 1px) rgba(200, 165, 103, 0.22);
}

.nci--hall .hal-line {
  display: flex;
  align-items: baseline;
  gap: 3cqw;
  padding: 3cqw 0 2cqw;
  border-bottom: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-line.is-bad {
  border-bottom-color: rgba(200, 165, 103, 0.85);
}

.nci--hall .hal-line-label {
  flex: 0 0 auto;
  font-family: var(--hal-caps);
  font-size: 2.4cqw;
  letter-spacing: 0.24em;
  color: var(--hal-gold);
}

.nci--hall.nci--lang-zh .hal-line-label {
  font-family: var(--hal-serif);
  font-size: 2.8cqw;
  letter-spacing: 0.18em;
}

.nci--hall .hal-line-field {
  flex: 1 1 auto;
  min-width: 0;
  padding: 0;
  border: 0;
  background: transparent;
  font-family: var(--hal-serif);
  font-size: 3.4cqw;
  color: var(--hal-ivory);
  outline: none;
}

.nci--hall .hal-line--seats {
  border-bottom: 0;
}

.nci--hall .hal-choice {
  display: flex;
  flex-direction: column;
  gap: 3cqw;
  margin-top: 6cqw;
}

.nci--hall .hal-check {
  display: flex;
  align-items: center;
  gap: 3cqw;
  padding: 0;
  border: 0;
  background: none;
  font-family: var(--hal-caps);
  font-size: 2.9cqw;
  letter-spacing: 0.2em;
  color: rgba(241, 236, 226, 0.72);
  text-align: left;
}

.nci--hall.nci--lang-zh .hal-check {
  font-family: var(--hal-serif);
  font-size: 3.2cqw;
  letter-spacing: 0.16em;
}

.nci--hall .hal-check-box {
  flex: 0 0 auto;
  width: 3.6cqw;
  height: 3.6cqw;
  border: 1px solid var(--hal-hair);
  transition: background 160ms, border-color 160ms;
}

.nci--hall .hal-check[aria-pressed='true'] {
  color: var(--hal-ivory);
}

.nci--hall .hal-check[aria-pressed='true'] .hal-check-box {
  border-color: var(--hal-gold);
  background: var(--hal-gold);
  box-shadow: inset 0 0 0 1px var(--hal-deep);
}

.nci--hall .hal-step {
  display: flex;
  align-items: center;
  gap: 3.4cqw;
  margin-left: auto;
  font-family: var(--hal-disp);
  font-size: 4.6cqw;
  /* Cormorant's default figures are old-style, and its 1 is then a lower-case roman I. */
  font-variant-numeric: lining-nums;
  color: var(--hal-ivory);
}

.nci--hall .hal-step button {
  width: 6.8cqw;
  height: 6.8cqw;
  padding: 0;
  border: 1px solid var(--hal-hair);
  background: transparent;
  color: var(--hal-gold);
  font-size: 3.2cqw;
  line-height: 1;
}

.nci--hall .hal-step button:disabled {
  opacity: 0.4;
}

.nci--hall .hal-diet {
  margin-top: 5cqw;
}

.nci--hall .hal-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 2cqw;
  margin-top: 3cqw;
}

.nci--hall .hal-tag {
  padding: 2cqw 3.4cqw;
  border: 1px solid var(--hal-hair-2);
  background: transparent;
  font-size: 2.7cqw;
  letter-spacing: 0.06em;
  color: var(--hal-dim);
  transition: border-color 160ms, color 160ms;
}

.nci--hall .hal-tag[aria-pressed='true'] {
  border-color: var(--hal-gold);
  color: var(--hal-ivory);
}

.nci--hall .hal-err {
  margin-top: 2cqw;
  font-size: max(12px, 2.6cqw);
  color: #e3b98a;
}

.nci--hall .hal-submit {
  display: block;
  width: 100%;
  margin-top: 7cqw;
  padding: 4.4cqw;
  border: 1px solid var(--hal-gold);
  background: var(--hal-gold);
  color: #14161a;
  font-family: var(--hal-caps);
  font-weight: 600;
  font-size: 3cqw;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  transition: background 160ms, color 160ms;
}

.nci--hall .hal-submit:hover:not(:disabled) {
  background: transparent;
  color: var(--hal-gold);
}

.nci--hall .hal-done {
  text-align: center;
}

.nci--hall .hal-done-t {
  font-family: var(--hal-disp);
  font-size: 6.4cqw;
  line-height: 1.2;
  color: var(--hal-gold);
}

.nci--hall.nci--lang-zh .hal-done-t {
  font-family: var(--hal-serif);
  font-size: 4.8cqw;
  letter-spacing: 0.16em;
  text-indent: 0.16em;
}

.nci--hall .hal-done-b {
  margin-top: 3cqw;
  font-size: 2.9cqw;
  line-height: 1.95;
  color: var(--hal-dim);
}

.nci--hall .hal-req {
  margin-left: 1.2cqw;
  color: var(--hal-gold);
}

.nci--hall .hal-err--server {
  margin-top: 5cqw;
}

.nci--hall .hal-submit[aria-busy='true'],
.nci--hall .hal-book-post[aria-busy='true'] {
  opacity: 0.7;
  cursor: progress;
}

.nci--hall .hal-done-when {
  margin-top: 2cqw;
  font-size: 2.5cqw;
  color: var(--hal-dim);
}

.nci--hall .hal-done-edit {
  margin-top: 5cqw;
  padding: 0 0 1cqw;
  border: 0;
  border-bottom: 1px solid var(--hal-hair);
  background: none;
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  letter-spacing: 0.2em;
  color: var(--hal-gold);
}

/* ═════════════ The guest book ═════════════ */

.nci--hall .hal-bookform {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 2.4cqw;
  margin: 7cqw var(--hal-g) 0;
}

.nci--hall .hal-book-in {
  padding: 3.4cqw 4cqw;
  border: 1px solid var(--hal-hair-2);
  background: var(--hal-deep);
  font-family: var(--hal-body);
  font-size: 3cqw;
  color: var(--hal-ivory);
  outline: none;
}

.nci--hall .hal-book-in::placeholder {
  color: #6f6a62;
}

.nci--hall .hal-book-in:focus {
  border-color: var(--hal-hair);
}

/* The name runs the full width above the line the guest actually writes. */
.nci--hall .hal-book-in:not(.hal-book-in--text) {
  grid-column: 1 / -1;
}

.nci--hall .hal-wish-err {
  grid-column: 1 / -1;
  margin-top: 0;
}

.nci--hall .hal-book-post {
  padding: 0 5cqw;
  border: 1px solid var(--hal-gold);
  background: transparent;
  color: var(--hal-gold);
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  letter-spacing: 0.24em;
  text-indent: 0.24em;
  transition: background 160ms, color 160ms;
}

.nci--hall .hal-book-post:hover:not(:disabled) {
  background: var(--hal-gold);
  color: #14161a;
}

.nci--hall .hal-book {
  margin: 9cqw var(--hal-g) 0;
}

.nci--hall .hal-book-row {
  padding: 4.4cqw 0;
  border-top: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-book-row:last-child {
  border-bottom: 1px solid var(--hal-hair-2);
}

.nci--hall .hal-book-text {
  font-family: var(--hal-disp);
  font-style: italic;
  font-size: 4.4cqw;
  line-height: 1.6;
  text-wrap: pretty;
  color: var(--hal-ivory);
}

.nci--hall.nci--lang-zh .hal-book-text {
  font-family: var(--hal-serif);
  font-style: normal;
  font-size: 3.4cqw;
  line-height: 1.95;
  letter-spacing: 0.06em;
}

.nci--hall .hal-book-from {
  margin-top: 2cqw;
  font-family: var(--hal-caps);
  font-size: 2.4cqw;
  letter-spacing: 0.24em;
  color: var(--hal-gold);
}

.nci--hall .hal-book-empty {
  padding: 4cqw 0;
  font-size: 2.9cqw;
  text-align: center;
  color: var(--hal-dim);
}

.nci--hall .hal-finale {
  aspect-ratio: 5 / 3;
  margin-top: 13cqw;
}

/* ═════════════ Guest cover overlay ═════════════ */

.nci-cover--hall {
  container-type: inline-size;
  display: block;
  padding: 0;
  overflow: hidden;
  background: #0e0f12;
  color: var(--hal-ivory);
  font-family: var(--hal-body);
}

.nci-cover--hall .hal-cv-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 32%;
}

.nci-cover--hall .hal-cv-veil {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10, 11, 14, 0.8) 0%, rgba(10, 11, 14, 0.3) 14%, rgba(10, 11, 14, 0) 32%),
    linear-gradient(0deg, rgba(10, 11, 14, 0.94) 0%, rgba(10, 11, 14, 0.8) 26%, rgba(10, 11, 14, 0.32) 48%, rgba(10, 11, 14, 0) 66%);
}

.nci-cover--hall .hal-cv-body {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  height: 100%;
  padding: 7cqw 0 12cqw;
}

.nci-cover--hall .hal-cover-names {
  font-size: 12cqw;
}

.nci-cover--hall .hal-cv-open {
  margin-top: 9cqw;
  padding: 3.8cqw 9cqw;
  border: 1px solid var(--hal-gold);
  background: transparent;
  color: var(--hal-gold);
  font-family: var(--hal-caps);
  font-size: 3cqw;
  letter-spacing: 0.32em;
  text-indent: 0.32em;
  transition: background 200ms, color 200ms;
}

.nci-cover--hall .hal-cv-open:hover {
  background: var(--hal-gold);
  color: #14161a;
}

.nci-cover--hall .hal-cv-open:focus-visible {
  outline: 2px solid var(--hal-gold);
  outline-offset: 4px;
}

.nci-cover--hall .hal-cv-hint {
  margin-top: 4cqw;
  font-family: var(--hal-caps);
  font-size: 2.5cqw;
  letter-spacing: 0.26em;
  text-indent: 0.26em;
  color: rgba(241, 236, 226, 0.6);
  animation: hal-hint 2.8s ease-in-out infinite;
}

.nci-cover--hall.hal-cover--opening {
  pointer-events: none;
  animation: hal-cover-out 500ms cubic-bezier(0.2, 0.7, 0.2, 1) forwards;
}

@keyframes hal-hint {
  0%,
  100% {
    opacity: 0.5;
  }
  50% {
    opacity: 1;
  }
}

@keyframes hal-cover-out {
  to {
    opacity: 0;
    transform: scale(1.04);
  }
}

/* ═════════════ Floating bar — gold hairlines, top right ═════════════ */

.nci-float--hall {
  top: 14px;
  right: 14px;
  bottom: auto;
  left: auto;
  justify-content: flex-end;
  gap: 8px;
}

.nci-float--hall button {
  gap: 0;
  padding: 0;
  font-family: var(--hal-caps);
}

.nci-float--hall .nci-float-music {
  width: 36px;
  height: 36px;
  justify-content: center;
  border: 1px solid rgba(200, 165, 103, 0.7);
  background: rgba(14, 15, 18, 0.55);
  color: var(--hal-gold);
  font-size: 0;
  letter-spacing: 0;
  backdrop-filter: blur(6px);
}

.nci-float--hall .nci-float-dot {
  width: auto;
  height: auto;
  border-radius: 0;
  background: none;
  font-size: 14px;
  line-height: 1;
  color: var(--hal-gold);
}

/* Escaped, so the note survives however the sheet is decoded. */
.nci-float--hall .nci-float-dot::before {
  content: '\266A';
}

.nci-float--hall .nci-float-music[aria-pressed='true'] {
  background: var(--hal-gold);
}

.nci-float--hall .nci-float-music[aria-pressed='true'] .nci-float-dot {
  color: #14161a;
  animation: hal-spin 3.6s linear infinite;
}

/* A mark, not a labelled pill: the two together are 80px of the screen's width instead of 104, which
   is 24px less of every line that scrolls through this corner. */
.nci-float--hall .nci-float-share {
  width: 36px;
  height: 36px;
  justify-content: center;
  padding: 0;
  border: 1px solid rgba(200, 165, 103, 0.7);
  background: rgba(14, 15, 18, 0.55);
  color: var(--hal-gold);
  font-size: 0;
  letter-spacing: 0;
  backdrop-filter: blur(6px);
}

/* Escaped, so the mark survives however the sheet is decoded. */
.nci-float--hall .nci-float-share::before {
  content: '\2197';
  font-size: 15px;
  line-height: 1;
  color: var(--hal-gold);
}

@keyframes hal-spin {
  to {
    transform: rotate(360deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  .nci-cover--hall .hal-cv-hint,
  .nci-float--hall .nci-float-music[aria-pressed='true'] .nci-float-dot {
    animation: none;
  }

  .nci-cover--hall .hal-cv-open {
    transition: none;
  }

  .nci-cover--hall.hal-cover--opening {
    animation-duration: 1ms;
  }
}
