@charset "UTF-8";
/* ==========================================================================
   PAGE HERO + THE SKAGIT VALLEY MOTIF
   --------------------------------------------------------------------------
   Two things live here: the photographic page hero, and a quiet background
   motif that roots the site in the Skagit Valley.

   ON THE MOTIF, AND WHAT IT DELIBERATELY IS NOT
   The resort sits on the land of the Upper Skagit Indian Tribe, and the brief
   was to reflect that. This motif is drawn from the PLACE — the braided
   channels of the Skagit River, the Cascade ridgeline behind the valley, and
   the rows of the tulip fields.

   It is NOT Coast Salish design, and that is on purpose. The crescent, the
   trigon and the wedge are a living visual language belonging to the Tribe,
   carrying specific meaning and ownership. Approximating them in CSS for a
   commercial site would be appropriation, however well intended. Landscape
   forms say "this is the Skagit Valley" honestly and are free to use. If the
   Tribe's own iconography is ever wanted here, it should come from the Tribe.

   Everything below is pure CSS gradients — no image requests, and it scales
   to any viewport without tiling seams. Maximum ink is about 4%, so it never
   competes with body copy.
   ========================================================================== */


/* ==========================================================================
   1. PAGE HERO
   ========================================================================== */
.skagit-page-hero {
  position: relative;
  isolation: isolate;
  display: flex;
  align-items: flex-end;
  min-height: clamp(260px, 34vw, 460px);
  overflow: hidden;
  background: var(--sk-ink, #061627);
}

.skagit-page-hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}

.skagit-page-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* THE HOUSE RULE (see skagit-components.css): clear at the top so the photo
   is readable as a photo, opaque only under the words. */
.skagit-page-hero__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
      rgba(4, 16, 28, 0.10) 0%,
      rgba(4, 16, 28, 0.05) 34%,
      rgba(4, 16, 28, 0.55) 70%,
      rgba(4, 16, 28, 0.92) 100%);
}

.skagit-page-hero__inner {
  position: relative;
  z-index: 1;
  width: 100%;
  padding-block: clamp(1.75rem, 3.4vw, 3rem);
}

.skagit-page-hero__title {
  margin: 0;
  color: #FFFFFF;
  font-size: clamp(1.9rem, 1.2rem + 2.6vw, 3.4rem);
  line-height: 1.08;
  letter-spacing: -0.015em;
  text-wrap: balance;
  text-shadow: 0 2px 18px rgba(3, 10, 18, 0.55);
}

.skagit-page-hero__lede {
  max-width: 60ch;
  margin-block-start: 0.6rem;
  color: #E9EFF5;                        /* 13.8:1 on the 0.92 scrim */
  font-size: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
  line-height: 1.55;
  text-shadow: 0 1px 10px rgba(3, 10, 18, 0.6);
}

.header-gold-divider--on-dark {
  margin-block-start: clamp(0.9rem, 1.8vw, 1.4rem);
}

@media (prefers-reduced-motion: no-preference) {
  .skagit-page-hero__title,
  .skagit-page-hero__lede {
    animation: sk-hero-rise 620ms cubic-bezier(0.22, 1, 0.36, 1) both;
  }
  .skagit-page-hero__lede { animation-delay: 90ms; }

  @keyframes sk-hero-rise {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: none; }
  }
}


/* ==========================================================================
   2. THE VALLEY MOTIF
   --------------------------------------------------------------------------
   Applied to the light page body. Three layers, all extremely low contrast:

     RIVER    two wide, soft diagonal bands crossing the page, echoing the
              braided channels of the Skagit where it meets the flats.
     RIDGE    a low angular silhouette along the bottom edge, standing in for
              the Cascade foothills that close the valley to the east.
     ROWS     very faint vertical striping, the tulip and daffodil field rows
              that the valley is known for.
   ========================================================================== */
/* THE LIGHT BANDS THIS APPLIES TO.
   `.skagit-page-body` only exists on three templates (page.php, the calendar
   and Local Attractions), so the motif stopped at those and every archive,
   single and dining/hotel page stayed flat white. Rather than edit eleven
   templates, the motif is attached to the light wrappers those templates
   already use. Adding a page means adding its wrapper here, not new markup. */
.skagit-page-body,
.sno-promo-archive,
.entertainment-archive-body,
.skagit-ra-archive,
.sno-single-wrapper {
  position: relative;

  /* NO `overflow: hidden`.
     It was here to contain the two pseudo-elements, which is unnecessary —
     both are absolutely positioned to the box's own inset and cannot escape
     it. What it DID do was clip anything a child deliberately overflows: the
     calendar's day popup lost 313px off its bottom, taking the second event's
     links with it.

     NO `isolation: isolate` EITHER.
     `.site-footer` is also `position: relative; isolation: isolate`, so the
     two were sibling stacking contexts sorted by document order — the footer
     always won. Any child that escapes this band, the calendar popup being
     the one that does, was painted over by the footer even though its own
     z-index was 5. Without isolation here that popup lives in the root
     stacking context and z-index 5 means what it says. The motif does not
     need isolation: its layers sit at z-index 0 with the content at 1, and
     nothing here uses a negative z-index. */
}

.skagit-page-body > *,
.sno-promo-archive > *,
.entertainment-archive-body > *,
.skagit-ra-archive > *,
.sno-single-wrapper > * {
  position: relative;
  z-index: 1;
}

/* ---- 2.1 River + field rows -------------------------------------------- */
.skagit-page-body::before,
.sno-promo-archive::before,
.entertainment-archive-body::before,
.skagit-ra-archive::before,
.sno-single-wrapper::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image:
    /* THE ARC. An oversized ring cropped by the band, so only a segment of it
       shows — the device from the promotions header, which was the one bit of
       the old design worth carrying across. Drawn as a gradient rather than a
       third pseudo-element because ::before and ::after are both already
       spoken for here. Alpha 0.06: the brief was "there but not noticeable". */
    radial-gradient(circle 560px at 4% -12%,
        rgba(11, 61, 104, 0) 0 66.4%,
        rgba(11, 61, 104, 0.06) 66.4% 66.6%,
        rgba(11, 61, 104, 0) 66.6%),
    /* river channel, upper */
    linear-gradient(104deg,
        rgba(11, 61, 104, 0) 34%,
        rgba(11, 61, 104, 0.045) 42%,
        rgba(11, 61, 104, 0.045) 46%,
        rgba(11, 61, 104, 0) 54%),
    /* river channel, lower — narrower, as a braid separating */
    linear-gradient(99deg,
        rgba(11, 61, 104, 0) 56%,
        rgba(11, 61, 104, 0.03) 61%,
        rgba(11, 61, 104, 0.03) 63%,
        rgba(11, 61, 104, 0) 68%),
    /* field rows */
    repeating-linear-gradient(90deg,
        rgba(11, 61, 104, 0.018) 0px,
        rgba(11, 61, 104, 0.018) 1px,
        rgba(11, 61, 104, 0) 1px,
        rgba(11, 61, 104, 0) 46px),
    /* a warm wash so the page is never flat white */
    radial-gradient(70% 60% at 88% 4%,
        rgba(212, 175, 55, 0.05) 0%,
        rgba(212, 175, 55, 0) 62%);
}

/* ---- 2.2 Ridgeline ------------------------------------------------------
   A clip-path silhouette pinned to the bottom of the band. The polygon is a
   simplified east-facing profile: two peaks and a saddle, not a literal
   survey of anything. Height is capped so it never reaches the text. */
.skagit-page-body::after,
.sno-promo-archive::after,
.entertainment-archive-body::after,
.skagit-ra-archive::after,
.sno-single-wrapper::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: clamp(60px, 9vw, 130px);
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(180deg,
      rgba(11, 61, 104, 0.05) 0%,
      rgba(11, 61, 104, 0.09) 100%);
  clip-path: polygon(
      0% 100%,
      0% 62%,
      8% 48%,
      16% 66%,
      24% 40%,
      33% 58%,
      41% 30%,
      52% 55%,
      61% 38%,
      70% 60%,
      79% 44%,
      88% 64%,
      100% 46%,
      100% 100%
  );
}

/* The motif is decorative and must never cost legibility. Anyone who has
   asked for reduced motion or higher contrast gets the plain ground. */
@media (prefers-contrast: more) {
  .skagit-page-body::before,
  .skagit-page-body::after,
  .sno-promo-archive::before,
  .sno-promo-archive::after,
  .entertainment-archive-body::before,
  .entertainment-archive-body::after,
  .skagit-ra-archive::before,
  .skagit-ra-archive::after,
  .sno-single-wrapper::before,
  .sno-single-wrapper::after { display: none; }
}

/* ==========================================================================
   3. THE ARC ON THE PAGE-HEADER LOCKUP — WHERE IT ACTUALLY LIVES
   --------------------------------------------------------------------------
   This section used to declare `.promo-text-header { background-image: ... }`
   with a pair of arcs. It never rendered. `skagit-components.css` sets
   `body .promo-text-header { background: ... }` — a higher specificity (0,1,1
   vs 0,1,0) AND the shorthand, which resets background-image outright. The
   rule sat in the file looking correct and did nothing, which is worse than
   not having written it.

   It was also redundant: components.css line 507 already draws the arc on the
   lockup as `body .promo-text-header::before` — a 1px ring at
   rgba(11,61,104,0.07), cropped by the block's own `overflow: hidden`. That is
   the effect being asked for, and it is already on every page carrying the
   lockup.

   So the header keeps its arc from components.css, and the matching arc for
   the light page BANDS is folded into the §2.1 motif above rather than
   overriding it here. One declaration, every light wrapper, no cascade fight.
   Change the arc in §2.1; change the header's in skagit-components.css.
   ========================================================================== */


/* ==========================================================================
   4. IN-BODY PAGE FIGURES
   --------------------------------------------------------------------------
   Photography threaded through the copy on the pages that were several
   hundred words of unbroken text under a hero. Inserted into post_content by
   tools/place-page-imagery.php, so these stay editable in the editor rather
   than being locked inside a template.

   Full bleed of the reading measure, not of the page: page.php constrains body
   copy to about 72 characters, and an image wider than its column reads as a
   different section rather than as part of the argument.
   ========================================================================== */

.skagit-page-figure {
  margin-block: clamp(1.75rem, 3.5vw, 2.75rem);
  margin-inline: 0;
}

.skagit-page-figure img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--sk-radius-md, 10px);
  /* A hairline rather than a shadow: several of these are night shots that
     bleed into a light page without an edge to stop them. */
  box-shadow: 0 1px 0 rgba(11, 61, 104, 0.16), 0 14px 30px -18px rgba(6, 25, 43, 0.5);
}

.skagit-page-figure figcaption {
  margin-block-start: 0.6rem;
  color: var(--sk-text-muted, #56616E);
  font-size: 0.875rem;
  line-height: 1.5;
  /* Left, not centred: the caption belongs to the column of text it sits in,
     and a centred line under a left-aligned paragraph reads as a stray. */
  text-align: start;
}

/* Two figures in a row happens where the copy runs short between them. Side by
   side is better than a stack that pushes the remaining words off the screen. */
@media (min-width: 48em) {
  .skagit-page-figure + .skagit-page-figure {
    margin-block-start: calc(clamp(1.75rem, 3.5vw, 2.75rem) * -0.35);
  }
}


/* ==========================================================================
   5. SECTION CARDS
   --------------------------------------------------------------------------
   inc/page-sections.php turns a run of <h3> sections into these. Pages like
   Our Resort carried five unrelated subjects — Travel, Local Attractions, the
   gas station, event space, the tobacco shop — stacked in one 700px column,
   which implied a reading order that does not exist and made a short page feel
   long. Side by side, all of it is on one screen and any one of them can be
   found without reading past the others.
   ========================================================================== */

.skagit-page-content--wide {
  /* The reading measure is for prose. Cards are not prose. */
  max-width: none;
}

.skagit-sections__intro {
  max-width: 68ch;
  margin-block-end: clamp(1.5rem, 3vw, 2.5rem);
}

.skagit-sections {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1rem, 2.2vw, 1.75rem);

  /* A full-width card cannot start mid-row, so without this it leaves the rest
     of the row it interrupted standing empty — on Casino that was one lone card
     with two thirds of its row blank. `dense` lets the short cards that follow
     back-fill the gap.

     This changes VISUAL order but not DOM order, so tab and screen-reader order
     stay as authored. Acceptable here specifically because these cards are
     independent signposts — no card depends on the one before it, and none is
     a step in a sequence. Do NOT copy this onto a grid whose order carries
     meaning. */
  grid-auto-flow: dense;
}

/* Two up from tablet, three on a wide desktop. Not four: past three columns a
   card is narrower than its own heading. */
@media (min-width: 48em) {
  .skagit-sections { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 82em) {
  .skagit-sections { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.skagit-section-card {
  /*
   * Published as a variable because a full-bleed child has to cancel exactly
   * this much padding to reach the card's edge. Anything that hard-codes the
   * number, or reuses a similar-looking spacing token, drifts out of step the
   * moment the viewport changes: --sk-space-md is a different clamp and is
   * ~3px wider than this one at most desktop widths, which is enough for a
   * bled band to hang visibly past the card's rounded border.
   */
  --sk-card-pad: clamp(1.25rem, 2.4vw, 1.9rem);

  display: flex;
  flex-direction: column;
  padding: var(--sk-card-pad);
  border: 1px solid var(--sk-border, rgba(11, 61, 104, 0.14));
  border-radius: var(--sk-radius-lg, 14px);
  background: rgba(255, 255, 255, 0.78);
  transition: border-color 200ms ease, transform 200ms ease, box-shadow 200ms ease;
}

@media (prefers-reduced-motion: no-preference) {
  .skagit-section-card:hover {
    transform: translateY(-3px);
    border-color: rgba(212, 175, 55, 0.55);
    box-shadow: 0 18px 36px -22px rgba(6, 25, 43, 0.55);
  }
}

/* A brass rule above the heading rather than a coloured panel behind it: these
   cards sit on a light ground and a filled header would turn the grid into a
   row of boxes competing with the page hero. */
.skagit-section-card__title {
  position: relative;
  margin: 0 0 0.85rem;
  padding-block-start: 0.85rem;
  font-size: clamp(1.05rem, 0.95rem + 0.35vw, 1.3rem);
  line-height: 1.25;
  color: var(--sk-navy-900, #0B2036);
}

.skagit-section-card__title::before {
  content: "";
  position: absolute;
  top: 0;
  inset-inline-start: 0;
  width: 42px;
  height: 3px;
  border-radius: 2px;
  background: var(--sk-grad-brass, linear-gradient(90deg, #B08D28, #F0D480));
}

.skagit-section-card__body {
  color: var(--sk-text-muted, #56616E);
  font-size: 0.9375rem;
  line-height: 1.65;
}

.skagit-section-card__body > *:first-child { margin-block-start: 0; }
.skagit-section-card__body > *:last-child { margin-block-end: 0; }

/* A figure that happens to fall inside a section still behaves. */
.skagit-section-card .skagit-page-figure {
  margin-block: 1rem 0;
}


/* ==========================================================================
   6. THE LEDE BLOCK
   --------------------------------------------------------------------------
   Copy on one side, one supporting photograph on the other, both starting on
   the same line. This is the shape the large resort sites use to open a
   section page, and it exists here for a specific reason: the intro used to be
   a 660px column with a 471px image sitting between two 86px paragraphs, so
   the picture dominated the block it was meant to support and split a single
   thought in half.

   Copy first in the DOM, so it is also what a screen reader and a phone get
   first — the photograph supports the words, not the other way round.
   ========================================================================== */

.skagit-lede {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1.25rem, 3vw, 2.75rem);
  margin-block-end: clamp(2rem, 4vw, 3.25rem);
}

@media (min-width: 62em) {
  .skagit-lede {
    /* Copy slightly wider than the image: the text is the substance, and a
       50/50 split makes a short lede look like a caption. */
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
    align-items: start;
  }
}

.skagit-lede--no-media { grid-template-columns: minmax(0, 1fr); }

.skagit-lede__text {
  /* The measure still applies to prose even though the page is wide. */
  max-width: 62ch;
  font-size: clamp(1.02rem, 0.98rem + 0.2vw, 1.15rem);
  line-height: 1.7;
}

.skagit-lede__text > *:first-child { margin-block-start: 0; }
.skagit-lede__text > *:last-child { margin-block-end: 0; }

/* The lede image owns its own spacing — the in-body figure's block margins
   would push it out of line with the first line of copy beside it. */
.skagit-page-figure--lede {
  margin-block: 0;
}

.skagit-page-figure--lede img {
  /* A consistent landscape crop. These come from a mixed library — some 3:2,
     some square — and an uncropped set makes the top of every page a different
     height for no reason. */
  aspect-ratio: 4 / 3;
  object-fit: cover;
}


/* ==========================================================================
   7. THE GALLERY STRIP
   Figures the lede did not use, below the cards, at the full width of the
   page rather than squeezed into the reading column.
   ========================================================================== */

.skagit-page-gallery {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1rem, 2vw, 1.5rem);
  margin-block-start: clamp(2rem, 4vw, 3.25rem);
}

@media (min-width: 62em) {
  .skagit-page-gallery:has(.skagit-page-figure + .skagit-page-figure) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.skagit-page-gallery .skagit-page-figure { margin-block: 0; }

.skagit-page-gallery .skagit-page-figure img {
  aspect-ratio: 16 / 9;
  object-fit: cover;
}


/* ==========================================================================
   8. NAME GRID
   --------------------------------------------------------------------------
   An index, not prose. Slot Machines listed ~200 game titles as one paragraph
   of line breaks: a single column of two-word lines running 7,599px down the
   page. The list is a catalogue of what is on the floor, and a catalogue wants
   columns.

   Auto-fill rather than a fixed count, so the same rule serves a 12-name list
   and a 200-name one without either looking sparse.
   ========================================================================== */

.skagit-namegrid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 13.5rem), 1fr));
  gap: 0.4rem 0.75rem;
  margin-block: clamp(1.25rem, 2.5vw, 2rem);
  padding: 0;
  list-style: none;
}

.skagit-namegrid__item {
  position: relative;
  margin: 0;
  padding: 0.42rem 0.6rem 0.42rem 1.35rem;
  border-radius: var(--sk-radius-sm, 7px);
  color: var(--sk-text, #2B3038);
  font-size: 0.9rem;
  line-height: 1.35;
  /* Zebra by cell would fight the column flow, so the separation is a hairline
     under each chip: enough to keep two-word names from running together,
     invisible enough not to become a table. */
  border-block-end: 1px solid rgba(11, 61, 104, 0.09);
}

/* A small brass lozenge instead of a bullet — a list this long needs a rhythm
   to scan down, and disc bullets at this density read as noise. */
.skagit-namegrid__item::before {
  content: "";
  position: absolute;
  inset-inline-start: 0.35rem;
  top: 0.95em;
  width: 5px;
  height: 5px;
  border-radius: 1px;
  transform: rotate(45deg);
  background: var(--sk-gold-500, #C9A227);
  opacity: 0.75;
}

/* NO HOVER HIGHLIGHT: THESE ARE NOT LINKS.
   Each tile is a bare <li> of escaped text -- inc/page-sections.php:112 emits
   `<li class="skagit-namegrid__item">5 Dragons</li>` and nothing else. Measured
   on /slot-machines/ (2026-08-15, rendered HTML off dev): 175 items, 0 anchors,
   0 buttons, 0 handlers, computed cursor `auto`. The brass wash under the
   pointer was the only thing on that page that behaved like an affordance, so
   guests aimed at game names and got nothing back. A game title is a fact about
   the floor, not a destination.

   This is the same call already made for the jackpot board tiles in
   skagit-jackpot-feed.css section 5 ("no lift, no scale on hover -- these tiles
   are not links, and a card that rises under the cursor promises a click that
   is not there"). Kept consistent on purpose.

   The reduced-motion transition block went with it: its only job was to soften
   this background-colour change, and a transition with nothing to transition is
   a rule that outlives its reason. No colour is left undefined by the deletion
   -- the tile's own `color` and its `border-block-end` are set unconditionally
   in the base rule above, and the background was never set outside :hover, so
   the resting state is exactly what it already was. The scanning rhythm is
   unaffected: the brass lozenge (::before) and the hairline rule both stay, and
   they are what actually separate one two-word name from the next. */


/* A section that needed more than ~120 words spans the whole grid rather than
   being squeezed into one column beside short ones — see skagit_sectionise().
   Without this it would set the row height for every card next to it. */
.skagit-section-card--wide {
  grid-column: 1 / -1;
}

/* --------------------------------------------------------------------------
   AT THREE COLUMNS A LONG CARD TAKES TWO OF THEM, NOT ALL THREE.
   --------------------------------------------------------------------------
   Full width is right at two columns, where "all of the row" and "two cards
   wide" are the same thing. At three it is too much: a 110-word section
   stretched across 1400px either runs at an unreadable line length or, once the
   body splits into text columns, leaves the second column holding a single
   sentence beside a large empty area. Both read as a mistake rather than as
   emphasis.

   Spanning two columns keeps the card in proportion to its neighbours and lets
   `grid-auto-flow: dense` drop a short card into the third. A gallery card is
   exempt below — an image grid genuinely wants the whole row.
   -------------------------------------------------------------------------- */
@media (min-width: 82em) {
  .skagit-section-card--wide:not(.skagit-section-card--gallery) {
    grid-column: span 2;
  }

  /* With the card no longer full width its body is ~900px, which is one
     comfortable column of type. Forcing two here would reintroduce the stranded
     short paragraph this rule exists to remove. */
  .skagit-section-card--wide:not(.skagit-section-card--gallery) .skagit-section-card__body {
    column-count: 1;
    column-width: auto;
    max-width: none;
  }
}

.skagit-section-card--wide .skagit-section-card__body {
  /* Full width is for the CARD, not for the line length. Prose at 1200px is
     unreadable, so the copy inside keeps a measure. */
  max-width: 74ch;
}

/* --------------------------------------------------------------------------
   A GALLERY CARD KEEPS THE MEASURE FOR ITS WORDS AND DROPS IT FOR ITS IMAGES.
   --------------------------------------------------------------------------
   The 74ch cap above is why a gallery inside a wide card still rendered small:
   the card spanned the grid, the body did not, and the image grid inherited a
   text measure it has no use for. Photographs are not lines of type and get no
   benefit from a comfortable reading length — they get smaller.

   So the body is released and the measure is re-applied to the text inside it,
   which is the only thing that wanted it. Doing it this way rather than
   widening every wide card keeps the reason for the 74ch rule intact: it is
   still enforced everywhere prose appears, including in this card.
   -------------------------------------------------------------------------- */
.skagit-section-card--gallery .skagit-section-card__body {
  max-width: none;

  /* THE COLUMNS ARE THE REAL CULPRIT, not the measure above.
     A wide card body is a multi-column container (`columns: 480px`, set further
     down for long prose). Every child therefore gets ONE 480-650px column —
     which is why a gallery in a 1400px card still drew 150px thumbnails. A
     photo grid has its own columns and must not be poured into type columns. */
  column-count: 1;
  column-width: auto;
}

.skagit-section-card--gallery .skagit-section-card__body > p,
.skagit-section-card--gallery .skagit-section-card__body > ul,
.skagit-section-card--gallery .skagit-section-card__body > ol {
  max-width: 74ch;
}

/* The grid already sits at the foot of the page, so the space a card normally
   keeps below itself is doing nothing but adding a gap before the footer. */
.skagit-section-card--gallery .skagit-gallery {
  margin-block-end: 0;
}

/* ==========================================================================
   DISCLOSURE PANELS  --  [skagit_details]
   --------------------------------------------------------------------------
   Native <details>, so the open/closed state, the keyboard and the screen
   reader are all the browser's responsibility and there is no aria to fall out
   of step. The only thing styled here is the summary row; the triangle marker
   is replaced with a chevron that rotates on open.

   The rotation is a transition on a transform, which the global reduced-motion
   block at the top of skagit-design-system.css already neutralises -- the
   chevron still ends up pointing the right way, it just gets there instantly.
   ========================================================================== */
.skagit-details {
  margin-block-start: var(--sk-space-sm, 1rem);
}

.skagit-details__box {
  border-block-start: 1px solid var(--sk-rule, rgba(11, 61, 104, 0.15));
}

.skagit-details__summary {
  display: flex;
  align-items: center;
  gap: 0.5em;
  padding-block: var(--sk-space-xs, 0.6rem);
  font-family: var(--sk-font-ui, inherit);
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--sk-navy-700, #0B3D68);
  cursor: pointer;
  list-style: none;          /* Firefox */
}

/* WebKit draws its own triangle through a pseudo-element that `list-style`
   does not reach. */
.skagit-details__summary::-webkit-details-marker { display: none; }

.skagit-details__summary::after {
  content: "";
  width: 0.5em;
  height: 0.5em;
  border-inline-end: 2px solid currentColor;
  border-block-end: 2px solid currentColor;
  transform: rotate(45deg) translate(-0.1em, -0.1em);
  transition: transform 160ms ease;
}

.skagit-details__box[open] > .skagit-details__summary::after {
  transform: rotate(-135deg) translate(-0.15em, -0.15em);
}

/* The summary is a real focus target and must show it — it is the only control
   in the card. */
.skagit-details__summary:focus-visible {
  outline: 2px solid var(--sk-gold, #C8A44D);
  outline-offset: 3px;
}

.skagit-details__summary:hover { color: var(--sk-gold-700, #8A6D1F); }

.skagit-details__body > *:first-child { margin-block-start: 0; }
.skagit-details__body > *:last-child  { margin-block-end: var(--sk-space-xs, 0.6rem); }

/* --------------------------------------------------------------------------
   SPLIT GALLERY CARD -- words on the left, photographs on the right.
   --------------------------------------------------------------------------
   Only when the section HAS introductory prose; a gallery on its own keeps the
   full width. The text column is capped rather than fluid because a short
   paragraph stretched to half of 1400px is worse than the narrow card this
   layout replaced.

   Two columns only from 62em. Below that the wrapper is a plain block and the
   images fall underneath the text, which is the correct reading order on a
   phone and needs no rule of its own.
   -------------------------------------------------------------------------- */
@media (min-width: 62em) {
  .skagit-section-card--gallery .skagit-section-card__body:has(.skagit-gallery-split__text) {
    display: grid;
    grid-template-columns: minmax(0, 22rem) minmax(0, 1fr);
    gap: var(--sk-space-lg, 2rem);
    align-items: start;
  }

  /* The measure is already enforced by the column width, so the 74ch cap the
     gallery card applies to loose paragraphs must not also apply here — it
     would leave the text hugging the left of its own column. */
  .skagit-gallery-split__text > p,
  .skagit-gallery-split__text > ul,
  .skagit-gallery-split__text > ol {
    max-width: none;
  }

  .skagit-gallery-split__text > *:first-child { margin-block-start: 0; }
  .skagit-gallery-split__text > *:last-child  { margin-block-end: 0; }
}

/* ==========================================================================
   9. OPENING HOURS  --  THE TABLE STYLES THAT WERE HERE HAVE BEEN REMOVED.
   --------------------------------------------------------------------------
   The hours page no longer renders a <table>; inc/hours.php now emits a status
   board of venue cards, styled by assets/css/skagit-hours.css.

   The old block had to go rather than simply stop being used, because it reused
   the SAME class names the new markup uses -- .skagit-hours, .skagit-hours__when
   and .skagit-hours__time. Left in place it kept styling the new cards: the
   venue names rendered as bullets, the times lost their scale, and a
   `.skagit-hours__when::after { content: " --" }` rule appended a stray dash
   after every day label.

   Do not reintroduce table styles under these class names.
   ========================================================================== */


/* ==========================================================================
   10. FACT BOX
   --------------------------------------------------------------------------
   Phone, email, address, check-in times and the booking link, lifted out of
   the prose they were buried in (see skagit_factbox()). A phone number set in
   bold mid-paragraph is the hardest possible way to present the one thing
   somebody opened the page for.

   Floated beside the copy on desktop so it reads as a reference panel rather
   than another block in the stack; full width on a phone, where it is the
   first thing after the hero and the number is tappable.
   ========================================================================== */

.skagit-factbox {
  margin-block: 0 clamp(1.5rem, 3vw, 2.25rem);
  padding: clamp(1.1rem, 2.2vw, 1.6rem);
  border: 1px solid rgba(212, 175, 55, 0.45);
  border-radius: var(--sk-radius-lg, 14px);
  background: rgba(255, 255, 255, 0.85);
}

@media (min-width: 62em) {
  .skagit-factbox {
    float: inline-end;
    width: min(340px, 38%);
    margin-inline-start: clamp(1.5rem, 3vw, 2.5rem);
  }

  /* The float must not escape into whatever follows the content. */
  .skagit-page-content::after {
    content: "";
    display: block;
    clear: both;
  }
}

.skagit-factbox__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.skagit-factbox__row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.15rem 0.75rem;
  align-items: baseline;
  justify-content: space-between;
  margin: 0;
  padding-block: 0.55rem;
}

.skagit-factbox__row + .skagit-factbox__row {
  border-block-start: 1px solid rgba(11, 61, 104, 0.12);
}

.skagit-factbox__k {
  color: var(--sk-text-faint, #6B7684);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  white-space: nowrap;
}

.skagit-factbox__v {
  color: var(--sk-navy-900, #0B2036);
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.4;
  text-align: end;
  /* Long emails and addresses wrap rather than forcing the panel wider. */
  overflow-wrap: anywhere;
}

a.skagit-factbox__v { text-decoration: none; }

a.skagit-factbox__v:hover,
a.skagit-factbox__v:focus-visible { text-decoration: underline; }

.skagit-factbox__cta {
  display: block;
  margin-block-start: 1rem;
  text-align: center;
}


/* ==========================================================================
   11. HOURS ON A VENUE CARD
   The dining cards said "View Menu & Hours", so the one question a hungry
   visitor has — is it open? — cost a page load. Pulled from the hours data,
   so nothing is typed twice.
   ========================================================================== */

.ent-card-hours {
  margin: 0.65rem 0 0;
  padding: 0.65rem 0 0;
  border-block-start: 1px solid rgba(11, 61, 104, 0.12);
  list-style: none;
}

.ent-card-hours li {
  display: flex;
  flex-wrap: wrap;
  gap: 0.15rem 0.45rem;
  align-items: baseline;
  margin: 0;
  padding-block: 0.15rem;
  font-size: 0.85rem;
  line-height: 1.45;
}

.ent-card-hours i {
  color: var(--sk-gold-600, #B08D28);
  font-size: 0.78rem;
}

.ent-card-hours__when { color: var(--sk-text-muted, #56616E); }

.ent-card-hours__time {
  margin-inline-start: auto;
  color: var(--sk-navy-900, #0B2036);
  font-weight: 600;
  white-space: nowrap;
}


/* ==========================================================================
   12. LAYOUT CORRECTIONS — reported from screenshots, 2026-07-25
   --------------------------------------------------------------------------
   Five faults, all systemic rather than per-page.
   ========================================================================== */

/* ---- 12.1 THE FACT BOX MUST NOT FLOAT INTO THE LEDE ---------------------
   The float was set on `.skagit-factbox` unconditionally. On a page that also
   has a lede — Player Development, Hotel Packages — the floated panel took
   ~215px out of the line box, the lede's two grid columns then divided what
   was left, and the copy ended up in a ~170px column that hyphenated the
   HEADING: "Player Developme / nt Team".

   A float and a grid should never be asked to share a row. Where both exist,
   the fact box stops floating and becomes a normal block under the lede. */
@media (min-width: 62em) {
  .skagit-page-content:has(.skagit-lede) .skagit-factbox {
    float: none;
    width: auto;
    max-width: 34rem;
    margin-inline: 0 0;
  }
}

/* ---- 12.2 THE LEDE NEEDS A FLOOR ----------------------------------------
   Even without the float, `minmax(0, …)` let the text column collapse below
   readability when the media column had a small intrinsic image. A lede whose
   copy is narrower than its own heading is not a lede. */
@media (min-width: 62em) {
  .skagit-lede {
    grid-template-columns: minmax(22rem, 1.15fr) minmax(16rem, 0.85fr);
  }
}

/* Below that, one column — better a stack than two cramped ones. */
@media (min-width: 62em) and (max-width: 74.99em) {
  .skagit-lede { grid-template-columns: minmax(0, 1fr); }
  .skagit-lede__media { max-width: 32rem; }
}

/* ---- 12.3 FIGURES NEED A CEILING ----------------------------------------
   `.skagit-page-content--wide` removed the reading measure, and the figures
   inherited that: the Casino floor shot rendered 1203px wide and a full
   screen tall, and In-Room Dining opened on an image before any text. A
   photograph supporting copy should never be larger than the copy. */
.skagit-page-content .skagit-page-figure,
.skagit-page-gallery .skagit-page-figure {
  max-width: 52rem;
}

.skagit-page-figure img {
  /* Cap the height too. A 4:3 image at 52rem is still ~620px tall, which is
     most of a laptop screen for something that is not the subject. */
  max-height: 30rem;
  object-fit: cover;
}

/* The lede's own image is already constrained by its grid column, and must
   not be capped again or it stops filling that column. */
.skagit-lede__media .skagit-page-figure { max-width: none; }
.skagit-lede__media .skagit-page-figure img { max-height: none; }

/* ---- 12.4 THE HOURS BOARD GETS THE MIDDLE -------------------------------
   Written when this was a table that sat hard left in a 1203px container at its
   intrinsic width, leaving two thirds of the row empty. The board that replaced
   it still wants centring, but a little more room: 46rem left the two-up card
   grid at about 355px a card, and 58rem gives each one roughly 450px, which is
   where the large time values stop feeling cramped.

   `.skagit-hours__table { width: 100% }` was removed with it — there is no
   table any more. */
.skagit-hours {
  max-width: 58rem;
  margin-inline: auto;
}

/* ---- 12.5 CENTRED PAGE INTROS -------------------------------------------
   A lede with no media rendered as one narrow column pinned left under a
   centred page title, which reads as a layout failure rather than a choice. */
.skagit-lede--no-media .skagit-lede__text {
  max-width: 68ch;
  margin-inline: auto;
}


/* ==========================================================================
   13. NEUTRALISING MIGRATED STYLES
   --------------------------------------------------------------------------
   The copy was pasted out of the old site and brought its presentation with
   it: inline `style` attributes, and links still painted in the old theme's
   magenta. Bow Hill shows it plainly — "The Skagit Casino Resort" and
   "Cruisin' Coffee" render pink against a navy-and-brass page.

   Scoped to page content, so nothing here can reach a template's own markup.
   ========================================================================== */

.skagit-page-content a:not(.sk-btn):not([class*="skagit-"]):not([class*="rc-"]) {
  color: var(--sk-navy-700, #0B3D68);
  text-decoration-color: rgba(11, 61, 104, 0.35);
  text-underline-offset: 0.15em;
  transition: color 140ms ease, text-decoration-color 140ms ease;
}

.skagit-page-content a:not(.sk-btn):hover,
.skagit-page-content a:not(.sk-btn):focus-visible {
  color: var(--sk-gold-600, #B08D28);
  text-decoration-color: currentColor;
}

/* Migrated inline colour and sizing. `revert` rather than a fixed value, so
   the element falls back to the design system instead of to a second
   hard-coded guess. */
.skagit-page-content [style*="color"],
.skagit-page-content [style*="font-family"],
.skagit-page-content [style*="font-size"] {
  color: revert-layer;
  font-family: inherit !important;
  font-size: inherit !important;
}

/* The old copy centres headings with an inline style; the standard aligns
   everything to the start of the measure. */
.skagit-page-content [style*="text-align: center"],
.skagit-page-content [style*="text-align:center"] {
  text-align: start !important;
}


/* ==========================================================================
   14. THE FULL-WIDTH CARD READS IN COLUMNS
   --------------------------------------------------------------------------
   A `--wide` card spans the whole grid, but its copy was capped at 74ch — so
   Bow Hill's pump-hours card was 1700px of box holding a 630px column of text
   with a thousand pixels of nothing beside it.

   Columns rather than a wider measure: the line length stays readable and the
   card stops looking half-empty.
   ========================================================================== */

@media (min-width: 62em) {
  .skagit-section-card--wide .skagit-section-card__body {
    max-width: none;
    column-width: 30rem;
    column-gap: clamp(1.75rem, 3vw, 3rem);
    column-rule: 1px solid rgba(11, 61, 104, 0.10);
  }

  /* A paragraph split across a column break is unreadable. */
  .skagit-section-card--wide .skagit-section-card__body p {
    break-inside: avoid;
    margin-block: 0 0.85rem;
  }
}

/* CARDS IN A ROW SHARE A HEIGHT — this is deliberate, and was asked for.
   I briefly set `align-items: start` so each card sized to its own content;
   that reintroduced exactly the ragged row the owner reported on Casino.
   Uniform rows are the point of a grid, and the small amount of extra air in
   a short card costs far less than a row that looks broken. */
.skagit-sections { align-items: stretch; }

/* ==========================================================================
   15. HOURS PAGE — NOTES AND EXPLORATION STRIPS

   Hours was the most dead-ended page on the site: a table, and nothing to do
   afterwards. The notes block carries the things a table cannot say (holidays,
   weather, private events) and the two strips below it offer somewhere to go
   next. Both strips reuse the offer-card carousel, so nothing here restyles
   the cards themselves.
   ========================================================================== */
.skagit-hours__notes {
  max-width: var(--sk-measure);
  margin: var(--sk-space-xl) auto 0;
}

.skagit-hours__notes h2 {
  margin: var(--sk-space-lg) 0 var(--sk-space-2xs);
  font-family: var(--sk-font-display);
  font-size: var(--sk-fs-lg);
  color: var(--sk-navy-900);
}

.skagit-hours__notes h2:first-child { margin-top: 0; }
.skagit-hours__notes p { margin: 0 0 var(--sk-space-sm); }

.skagit-hours__strip {
  /* One seam, same as every other section boundary on the site. This used
     --sk-space-3xl (72-120px), which was half again as much space as anything
     else and made the strips read as detached from the page. */
  margin-top: var(--sk-section-seam);
  padding-top: calc(var(--sk-section-seam) / 2);
  border-top: 1px solid var(--sk-border);
}

.skagit-hours__strip-title {
  margin: 0;
  font-family: var(--sk-font-display);
  font-size: var(--sk-fs-2xl, var(--sk-fs-xl));
  line-height: var(--sk-lh-tight);
  color: var(--sk-navy-900);
  text-align: center;
}

.skagit-hours__strip-sub {
  margin: var(--sk-space-2xs) 0 var(--sk-space-md);
  font-size: var(--sk-fs-sm);
  color: var(--sk-text-faint);
  text-align: center;
}

.skagit-hours__strip-more {
  margin: var(--sk-space-md) 0 0;
  text-align: center;
}

/* 16. ELECTRONIC TABLE GAMES -- removed 2026-08-09.
   The section, its 190 lines of CSS and assets/js/skagit-etg.js were one
   dead unit: the only markup emitting `.skagit-etg__*` was
   retired/page-electronic-table-games.php, which WordPress never loaded
   (locate_template does not search theme subdirectories). Measured before
   removal: 0 occurrences of skagit-etg__ across all 85 rendered urls and 0
   in a full database dump. The live /casino/electronic-table-games/ page
   uses `skagit-etg-craps` / `-roulette` from post content, and
   `.skagit-etg-pair__img` below is still in use -- both are untouched.
   The numbering gap is deliberate; sections were not renumbered. */

/* ==========================================================================
   17. A SECTION CARD HOLDING A FORM SPANS THE GRID

   skagit_sectionise() puts each <h3> section in a card, and the card grid is
   two or three columns wide. The self-barring form landed in one of those
   columns and rendered 525px wide on a 1270px viewport — its own two-column
   field grid then had about 240px per field. A form is not a card-sized thing.

   `:has()` is already used elsewhere in this stylesheet, so this needs no
   fallback: a browser without it simply leaves the card in its column, which
   is the current behaviour rather than a broken one.
   ========================================================================== */
.skagit-sections .skagit-section-card:has(form),
.skagit-sections .skagit-section-card:has(.skagit-funnel) {
  grid-column: 1 / -1;
}

/* And the card must not impose its own padding box on a full-width grid of
   cards — the funnel came out 525px wide inside one, which is the identical
   number the form hit for the identical reason. */
.skagit-sections .skagit-section-card:has(.skagit-funnel) {
  padding-inline: 0;
  border: 0;
  background: none;
  box-shadow: none;
}

/* The form still keeps a readable measure inside that full-width card — the
   fields should not stretch to 1200px just because the card now can. */
.skagit-sections .skagit-section-card:has(form) .skagit-sbf {
  max-width: 44rem;
}

/* ==========================================================================
   18. HOURS — TABLE AND NOTES SIDE BY SIDE

   The notes used to sit under the table, which is the one place a reader who
   has just found their venue's opening time will not look. Two columns keeps
   the caveats (holidays, weather, private events) on screen next to the times
   they qualify.

   Table first in the source, so the single-column phone layout puts the times
   at the top without any order juggling.
   ========================================================================== */
.skagit-hours__split { display: grid; gap: var(--sk-section-seam); }

@media (min-width: 62em) {
  .skagit-hours__split {
    /* Table gets the wider column: it has fixed content and cannot reflow,
       whereas prose is happy at any measure. */
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
    gap: clamp(2rem, 4vw, 3.5rem);
    align-items: start;
  }

  /* The notes track the table rather than running the page's full height. */
  .skagit-hours__col--notes { position: sticky; top: calc(96px + var(--sk-space-md)); }
}

.skagit-hours__col--table .skagit-hours,
/* Inside the two-column split the board already sits in a sized column, so it
   drops the centring and the 58rem cap it uses when it is the whole page.
   This targeted `.skagit-hours__table` until the table was removed, at which
   point it silently stopped matching anything and the board was being capped
   twice. */
.skagit-hours__col--table .skagit-hours { margin-inline: 0; max-width: none; }

.skagit-hours__col--notes .skagit-hours__notes {
  margin-top: 0;
  max-width: none;
  padding: var(--sk-space-md) var(--sk-space-lg);
  border: 1px solid var(--sk-border);
  border-radius: var(--sk-radius-lg);
  background: var(--sk-white);
  box-shadow: var(--sk-shadow-sm);
}

.skagit-hours__col--notes .skagit-hours__notes h2:first-child { margin-top: 0; }

/* ---- 18.1 NO NOTES, NO SECOND COLUMN ------------------------------------
   page-hours.php opens the notes column only when the page body still holds
   something after the legacy hours markup is stripped out of it — and on this
   site that comes back empty, so `.skagit-hours__split` renders ONE child
   while the block above still declares two tracks. Measured at 1440px: a 696px
   board with a 605px column of nothing beside it, 45% of the row.

   `:only-child` rather than a class from PHP: the template already states this
   by emitting or not emitting the second div, and a class would be the same
   fact stored twice, free to disagree with the markup.

   The board takes back the centring and the 58rem cap that section 12.4 gives
   it when it IS the whole page, which is exactly what it is here. Left at
   `max-width: none` it ran the full 1358px and the two-up venue cards came out
   660px wide — the stretched card hours.css was written to avoid. With the cap
   it is a 928px board of 444px cards, centred.

   Deliberately NOT inside a media query. Below 62em `.skagit-hours__split`
   declares no explicit tracks, so `1 / -1` has both lines resolve to line 1 and
   degenerates to ordinary single-column placement; and a 58rem cap cannot bite
   on a container that never reaches 928px down there. Measured identical at
   375px, no overflow either way.
   ------------------------------------------------------------------------ */
.skagit-hours__col--table:only-child { grid-column: 1 / -1; }

.skagit-hours__col--table:only-child .skagit-hours {
  max-width: 58rem;
  margin-inline: auto;
}

@media (max-width: 61.99em) {
  .skagit-hours__col--notes { position: static; }
}

/* ==========================================================================
   19. ROOM FUNNEL  ([skagit_room_funnel])

   The Skagit and The Ridge described their rooms and then left the visitor to
   find the archive alone. These cards put the actual rooms on the page with a
   route into each one.

   Built on `.skagit-ra-grid > .skagit-ra-card`, which is already in the motion
   layer's reveal list and already carries the site-wide hover lift — so this
   block adds no animation code and cannot drift from the other card families.
   ========================================================================== */
.skagit-funnel { margin-top: var(--sk-section-seam); }

.skagit-funnel__title {
  margin: 0 0 var(--sk-space-2xs);
  font-family: var(--sk-font-display);
  font-size: var(--sk-fs-2xl, var(--sk-fs-xl));
  line-height: var(--sk-lh-tight);
  color: var(--sk-navy-900);
  text-align: center;
}

.skagit-funnel__intro {
  max-width: var(--sk-measure);
  margin: 0 auto var(--sk-space-lg);
  font-size: var(--sk-fs-sm);
  color: var(--sk-text-faint);
  text-align: center;
}

/* `.skagit-funnel .skagit-funnel__grid` — TWO classes on purpose. The element
   also carries `.skagit-ra-grid` so it inherits the card family's reveal and
   hover treatment, and that rule is declared at a specificity this cannot beat
   with one class: the funnel rendered a single 505px column at 1280px because
   `.skagit-ra-grid` was still setting the tracks. */
.skagit-funnel .skagit-funnel__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
  gap: var(--sk-space-md);
  margin: 0;
  padding: 0;
  list-style: none;
}

.skagit-funnel__card {
  display: flex;
  flex-direction: column;
  margin: 0;
  overflow: hidden;
  border: 1px solid var(--sk-border);
  border-radius: var(--sk-radius-lg);
  background: var(--sk-white);
  box-shadow: var(--sk-shadow-sm);
}

/* The image is a decorative second route to the same page — aria-hidden and
   out of the tab order in the markup, so a keyboard user gets ONE stop per
   card (the heading link) rather than two that go to the same place. */
.skagit-funnel__media {
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--sk-mist);
}

.skagit-funnel__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--sk-dur-base) var(--sk-ease-out);
}

.skagit-funnel__card:hover .skagit-funnel__media img { transform: scale(1.04); }

.skagit-funnel__body {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  padding: var(--sk-space-md);
  /* Pushes the actions to the bottom so buttons line up across a row whatever
     the blurb length. */
  flex: 1 1 auto;
}

.skagit-funnel__eyebrow {
  margin: 0;
  font-size: var(--sk-fs-xs);
  font-weight: var(--sk-weight-black, 800);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--sk-bronze-700);
}

.skagit-funnel__name {
  margin: 0;
  font-family: var(--sk-font-display);
  font-size: var(--sk-fs-lg);
  line-height: var(--sk-lh-snug);
}

.skagit-funnel__name a { color: var(--sk-navy-900); text-decoration: none; }
.skagit-funnel__name a:hover { text-decoration: underline; }

.skagit-funnel__blurb {
  margin: 0;
  font-size: var(--sk-fs-sm);
  line-height: 1.55;
  color: var(--sk-text-faint);
}

.skagit-funnel__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sk-space-2xs);
  margin: auto 0 0;
  padding-top: var(--sk-space-xs);
}

.skagit-funnel__all { margin: var(--sk-space-md) 0 0; text-align: center; }

@media (prefers-reduced-motion: reduce) {
  .skagit-funnel__media img { transition: none; }
  .skagit-funnel__card:hover .skagit-funnel__media img { transform: none; }
}

/* ==========================================================================
   20. EVENT SPACE GALLERY

   A simple masonry-ish grid: the first frame spans two columns so the block
   opens on one large image rather than a uniform contact sheet.

   THE `ul` IN THE SELECTOR IS LOAD-BEARING — DO NOT DROP IT.

   This block is the OLD gallery, where `.skagit-gallery` is the grid itself:
   a <ul> of `.skagit-gallery__item` children, hence `list-style: none` and
   `padding: 0`. The NEWER [skagit_gallery] shortcode (inc/shortcode-gallery.php)
   reuses the same class name for a completely different thing — a <section>
   WRAPPER holding `__title`, `__intro` and a separate `__grid` that does its own
   columns.

   Unscoped, this rule turned that wrapper into a three-column grid and dealt
   the title, the intro and the whole photo grid one column each. The photo grid
   then had only ~389px of a 1203px page to work in, so its own three columns
   came out at 105px — thumbnails SMALLER on a 1280px desktop than on a phone,
   where `auto-fit` collapses to one column and the bug hides itself.

   Restricting this to `ul` means it can only ever match the old markup; the
   shortcode's <section> is untouched.
   ========================================================================== */
ul.skagit-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
  gap: var(--sk-space-sm);
  margin: var(--sk-space-lg) 0 0;
  padding: 0;
  list-style: none;
}

.skagit-gallery__item {
  margin: 0;
  overflow: hidden;
  border-radius: var(--sk-radius-md);
  background: var(--sk-mist);
  aspect-ratio: 3 / 2;
}

@media (min-width: 48em) {
  .skagit-gallery__item:first-child { grid-column: span 2; grid-row: span 2; aspect-ratio: 3 / 2.05; }
}

.skagit-gallery__item img,
.skagit-gallery__item button {
  display: block;
  width: 100%;
  height: 100%;
  padding: 0;
  border: 0;
  cursor: zoom-in;
  object-fit: cover;
  background: transparent !important;
  color: inherit !important;
  border-color: transparent !important;
}

.skagit-gallery__item img { transition: transform var(--sk-dur-base) var(--sk-ease-out); }
.skagit-gallery__item button:hover img,
.skagit-gallery__item button:focus-visible img { transform: scale(1.05); }
.skagit-gallery__item button:focus-visible { outline: 3px solid var(--sk-bronze-700); outline-offset: -3px; }

@media (prefers-reduced-motion: reduce) {
  .skagit-gallery__item img { transition: none; }
  .skagit-gallery__item button:hover img { transform: none; }
}

/* A page holding a room funnel needs the FULL container, not the reading
   measure. The funnel is a card grid; inside a 700px measure it collapsed to a
   single 505px column at 1280px, which is the same trap the self-barring form
   hit. Same fix, same reason: a grid of cards is not a paragraph. */
.skagit-page-content:has(.skagit-funnel),
.skagit-page-body:has(.skagit-funnel) .skagit-page-content {
  max-width: none;
}

/* ==========================================================================
   BARE SECTION CARDS
   --------------------------------------------------------------------------
   A card that wraps other cards must not itself be a card.

   inc/page-sections.php adds `--bare` to any section whose body is essentially
   one self-contained block: the Featured Spaces rows, the gallery strip, the
   capacity chart, an enquiry form, a restaurant menu, the room funnel. Each of
   those already ships its own finished chrome, so the section frame was drawing
   a second border around a border — and, worse, the whole page-width wrapper
   lifted on hover, so pointing at one inner card moved every one of them.

   Bare keeps the heading and the spacing and drops everything that made it look
   like a container: border, background, radius, shadow, padding and the hover
   lift. Only genuine small content cards keep the frame.
   ========================================================================== */

.skagit-sections > .skagit-section-card--bare {
  /* NO grid-column here. Bare is about the frame, not the footprint — see the
     note in page-sections.php. Whatever width the card had before, it keeps. */
  border: 0;
  background: none;
  box-shadow: none;
  border-radius: 0;
  padding-inline: 0;
  padding-block: clamp(0.5rem, 1.5vw, 1rem);
}

.skagit-sections > .skagit-section-card--bare > .skagit-section-card__body {
  padding: 0;
  /* A bare wrapper never multi-columns: the block inside owns its own layout. */
  columns: auto;
  column-count: 1;
}

/* No lift, no shadow, no transform — on hover or otherwise. The inner cards do
   their own hovering, and a page-width box shifting under the pointer is what
   made this look wrong in the first place. */
.skagit-sections > .skagit-section-card--bare:hover,
.skagit-sections > .skagit-section-card--bare:focus-within {
  transform: none;
  box-shadow: none;
  border-color: transparent;
}

/* The heading keeps its brass rule so the section is still announced. */
.skagit-sections > .skagit-section-card--bare > .skagit-section-card__title {
  padding-inline: 0;
}

/* ==========================================================================
   SECTION CARDS RISE IN ON SCROLL
   --------------------------------------------------------------------------
   The reveal itself is the site's shared `sk-in` system (skagit-motion.*).
   This only adds the stagger: cards in a grid row arriving in unison reads as
   a page repainting, while a short offset between them reads as the row
   assembling. Keyed off nth-child rather than an inline custom property
   because these cards are generated by the section builder and carry no index.

   Capped at six. Past that the last card in a long grid would wait most of a
   second after the first, which stops feeling like a stagger and starts
   feeling like a slow page.
   ========================================================================== */

@media (prefers-reduced-motion: no-preference) {

  .skagit-sections > .skagit-section-card:nth-child(6n + 1) { transition-delay: 0ms; }
  .skagit-sections > .skagit-section-card:nth-child(6n + 2) { transition-delay: 70ms; }
  .skagit-sections > .skagit-section-card:nth-child(6n + 3) { transition-delay: 140ms; }
  .skagit-sections > .skagit-section-card:nth-child(6n + 4) { transition-delay: 210ms; }
  .skagit-sections > .skagit-section-card:nth-child(6n + 5) { transition-delay: 280ms; }
  .skagit-sections > .skagit-section-card:nth-child(6n)     { transition-delay: 350ms; }

  /* A bare wrapper must not delay the cards inside it — they run their own. */
  .skagit-sections > .skagit-section-card--bare { transition-delay: 0ms !important; }
}

/* ==========================================================================
   ELECTRONIC TABLE GAMES — the paired floor photographs
   --------------------------------------------------------------------------
   Two portrait shots (1536x1920) of the actual machines, sitting in the lede's
   media column beside the opening copy.

   THE HOOK IS .skagit-page-figure--lede, NOT A CLASS OF OUR OWN.
   skagit_lede_html() only lifts a figure whose class attribute is exactly
   "skagit-page-figure", then re-tags it with --lede on the way into
   .skagit-lede__media. Adding a second class to the figure in the content stops
   it being lifted at all; adding a wrapper div inside it gets that div rewritten
   to a <p> by skagit_unwrap_legacy_divs(), which is inline-only-div behaviour.
   So the figure carries the plain class and the two <img> are direct children.

   Side by side rather than stacked: the media column is ~384px, and two 4:5
   frames stacked would run ~960px tall against three paragraphs of copy.
   ========================================================================== */

.skagit-lede__media .skagit-page-figure--lede {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.5rem;
  margin: 0;
}

/* Specificity: the theme sets an aspect-ratio on figure images generally, and
   it was winning — the 4:5 sources rendered as 4:3 and cropped the tops off two
   tall subjects (a lit dice dome and a roulette sign, where the height IS the
   subject). Matched through the lede chain so this rule is the specific one. */
.skagit-lede__media .skagit-page-figure--lede img.skagit-etg-pair__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--sk-radius-sm, 8px);
  /* The floor is dark and neon-lit; a hairline stops the photographs bleeding
     into a light page background at their edges. */
  box-shadow: 0 0 0 1px rgba(11, 61, 104, 0.1), 0 8px 22px -16px rgba(11, 39, 68, 0.55);
}

.skagit-lede__media .skagit-page-figure--lede figcaption {
  grid-column: 1 / -1;
  margin-top: 0.2rem;
  font-size: 0.8rem;
  line-height: 1.4;
  color: #5c6470;
  text-transform: none;
  letter-spacing: normal;
}

@media (prefers-reduced-motion: no-preference) {
  .skagit-etg-pair__img { transition: transform 320ms cubic-bezier(0.22, 0.61, 0.36, 1); }
  .skagit-etg-pair__img:hover { transform: translateY(-3px); }
}


/* ==========================================================================
   PORTRAIT PHOTOGRAPHS IN THE GALLERY GRID
   --------------------------------------------------------------------------
   Every cell is 4:3 landscape, which is what keeps the rows even — and what
   cost a portrait source about half its frame. Measured at ~50% on three
   images site-wide (Star Lounge, the event centrepiece, a single slot machine),
   each of them a tall subject.

   A portrait cell spans two rows instead. The row rhythm survives because it
   is a whole number of rows, and the photograph keeps roughly its own shape
   rather than being cropped to somebody else's.

   Only applied where the grid has rows to give: below 48em the gallery is one
   or two columns and a double-height cell would dominate the screen.
   ========================================================================== */

/* The SHAPE applies at every width. Below 48em the gallery is a single column
   — `gridTemplateColumns` computes to `none` — so there is no row rhythm to
   protect and no reason to keep cropping a tall photograph to a wide box. This
   was scoped to >= 48em on the first pass, which left the phone showing the
   same 50% crop the fix was written to remove. */
.skagit-gallery__cell--portrait img {
  aspect-ratio: 3 / 4;
  height: 100%;
  object-fit: cover;
}

/* The ROW SPAN only applies where there are rows: the multi-column grid. */
@media (min-width: 48em) {
  .skagit-gallery__cell--portrait {
    grid-row: span 2;
  }
}
