/* ============ SOS CORE · version 15.26, 29 Sep 2026 · never edit for a new theme ============ */
/* Everything here reads its colours from the THEME block below.
   Nothing in this block names a colour, a year or a theme. */

/* 0 · The rhythm (v15, Meg 28 Sep: "too loose"). One set of values that every section, the header,
   the footer and the archives read: side gutter, section padding, gap between groups.
   Desktop, then tablet (up to 1180), then phone. */
:root{--sos-gutter:64px;--sos-pad:64px;--sos-gap:32px}
@media (max-width:1180px){:root{--sos-gutter:48px;--sos-pad:48px}}
@media (max-width:767px){:root{--sos-gutter:24px;--sos-pad:40px;--sos-gap:24px}}

/* Jump links land below the sticky header */
html{scroll-padding-top:96px}
@media (max-width:1024px){html{scroll-padding-top:72px}}

/* The two scales, for reference while building.
   Spacing: 4 8 16 24 32 40 48 64.
   Type: 12 14 16 20 24 40 56, page titles 168 / 120 / 96 (mobile 72 / 56 / 40). */

/* 1 · Keyboard focus, visible on light and dark grounds. :root lifts the ring over Kadence's input[type]:focus and
   .wp-block-button__link:focus rules, which had set fields to no outline and buttons to a white-only ring (v15.26, W9) */
:root :is(a,button,input,select,textarea,summary):focus-visible{
  outline:3px solid var(--sos-on-dark);
  outline-offset:0;
  box-shadow:0 0 0 6px var(--sos-deep);
}

/* 2 · Tap heights: text links 32, chips and tags 44, buttons and fields 48. Nothing else. */
.site-footer a,.main-navigation a,.sos-link a,a.sos-link{
  display:inline-flex;
  align-items:center;
  min-height:32px;
}
.sos-chips > *{min-height:44px}
.wp-block-button__link,.kb-button,button,
input:not([type=checkbox]):not([type=radio]),select,textarea{min-height:48px}
input[type=checkbox]{width:24px;height:24px}

/* 3 · The small label above a heading */
.sos-label{
  font-size:12px;
  font-weight:700;
  letter-spacing:.2em;
  text-transform:uppercase;
  line-height:1.2;
  color:var(--sos-caption);
  margin-bottom:8px;
}

/* 4 · Accent underline on a text link */
.sos-link a,a.sos-link{
  text-decoration:underline;
  text-decoration-color:var(--sos-accent);
  text-decoration-thickness:2px;
  text-underline-offset:5px;
}

/* 5 · The one primary action per view */
.sos-go .kb-button,a.sos-go,button.sos-go{
  background:var(--sos-accent);
  color:var(--sos-deep);
  transition:background .2s ease;
}
.sos-go .kb-button:hover,a.sos-go:hover,button.sos-go:hover{
  background:var(--sos-accent-hover);
  color:var(--sos-deep);
}
/* on a phone, when the bottom bar is present, the bar's button is the one green action:
   the page's own sos-go renders navy. Tickets and Checkout have no bar, so their pay step stays green. */
@media (max-width:767px){
  body:has(.sos-bar) :is(.sos-go .kb-button,a.sos-go,button.sos-go):not(.sos-bar *){
    background:var(--sos-ink);
    color:var(--sos-on-dark);
  }
}

/* 6 · Reverse sections */
.sos-navy{background:var(--sos-ink);color:var(--sos-on-dark)}
.sos-navy h1,.sos-navy h2,.sos-navy h3,
.sos-navy p,.sos-navy li,.sos-navy a{color:var(--sos-on-dark)}
.sos-navy .sos-label{color:var(--sos-accent)}

/* 7 · Mount around a photo */
.sos-print{
  background:var(--sos-card);
  padding:8px 8px 0;
  box-shadow:0 6px 20px var(--sos-shadow);
}
.sos-print figcaption,
.sos-print .kb-gallery-caption{
  margin:0;
  padding:8px 0 16px;
  font-size:12px;
  font-weight:700;
  letter-spacing:.2em;
  text-transform:uppercase;
  line-height:1.2;
  text-align:left;
  color:var(--sos-caption);
}

/* 8 · The card that holds rows of label and value */
.sos-docket{
  position:relative;
  background:var(--sos-card);
  padding:24px;
  box-shadow:0 6px 20px var(--sos-shadow);
}
.sos-docket table{width:100%;border-collapse:collapse}
.sos-docket td{
  border:0;
  padding:8px 0;
  background:none;
  font-size:16px;
  font-weight:700;
  line-height:1.3;
  color:var(--sos-ink);
}
.sos-docket td:last-child{
  text-align:right;
  font-size:14px;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--sos-caption);
}
.sos-docket:where(:not(.sos-plain)) tr:last-child td{
  border-top:2px solid var(--sos-ink);
  padding-top:16px;
  font-size:14px;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--sos-ink);
}
.sos-docket:where(:not(.sos-plain)) tr:last-child td:last-child{font-size:14px;color:var(--sos-ink)}
/* add sos-plain when the card has no total row: its last row stays an ordinary row */

/* 9 · Numbered contents, on the Table of Contents block */
.sos-toc{counter-reset:sos-toc}
.sos-toc ul,
.sos-toc ol{list-style:none;margin:0;padding:0}
.sos-toc li{
  counter-increment:sos-toc;
  display:flex;
  align-items:baseline;
  gap:8px;
  padding:8px 0;
}
.sos-toc li::before{
  content:counter(sos-toc,decimal-leading-zero);
  font-size:12px;
  font-weight:700;
  letter-spacing:.08em;
  color:var(--sos-caption);
}
.sos-toc li a{
  font-size:14px;
  font-weight:700;
  line-height:1.3;
  color:var(--sos-ink);
  text-decoration:none;
}
.sos-toc li a:hover{text-decoration:underline}

/* 10 · Filter chips wrap, they never scroll sideways */
.sos-chips{display:flex;flex-wrap:wrap;gap:8px}
.sos-chips > *{white-space:nowrap}
/* the one strip that does swipe (Questions) shows no scrollbar */
.sos-swipe{overflow-x:auto;scrollbar-width:none}
.sos-swipe::-webkit-scrollbar{display:none}

/* 11 · The mobile action bar */
.sos-bar{display:none}
@media (max-width:767px){
  .sos-bar{
    display:flex;
    position:fixed;
    left:0;right:0;bottom:0;
    z-index:60;
    box-sizing:border-box;
    min-height:72px;
    padding:0 24px env(safe-area-inset-bottom,0px);
    align-items:center;
    justify-content:space-between;
    gap:16px;
    background:var(--sos-deep);
    color:var(--sos-on-dark);
  }
  .sos-bar p{
    margin:0;
    font-size:12px;
    font-weight:700;
    letter-spacing:.18em;
    text-transform:uppercase;
    line-height:1.3;
    color:var(--sos-on-dark);
  }
  body:has(.sos-bar){padding-bottom:calc(72px + env(safe-area-inset-bottom,0px))}
}
/* 12 · A card that is one link: the photo mount plus the name. The name carries
   the accent underline (sos-link); the card gets the photo hover as one unit. */
a.sos-card{display:flex;flex-direction:column;gap:16px;text-decoration:none;color:inherit}
a.sos-card:focus-visible{outline-offset:4px;box-shadow:none}

/* 13 · Included and not included rows on the ticket cards: a glyph plus the word,
   no dotted leader. Each row is a two-column Row Layout or a Group carrying sos-yes or sos-no
   (the Table block cannot take a class per row). */
.sos-yes,.sos-no{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:14px;font-weight:700;line-height:1.2}
.sos-yes>*:last-child,.sos-no>*:last-child{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.sos-yes>*:last-child::before,.sos-no>*:last-child::before{content:"";width:12px;height:12px;flex-shrink:0;background:currentColor}
.sos-yes>*:last-child::before{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='square'%3E%3Cpath d='M2 7.5l3.2 3.2L12 3.5'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='square'%3E%3Cpath d='M2 7.5l3.2 3.2L12 3.5'/%3E%3C/svg%3E") center/contain no-repeat}
.sos-no>*:last-child::before{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='square'%3E%3Cpath d='M3 3l8 8M11 3l-8 8'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='square'%3E%3Cpath d='M3 3l8 8M11 3l-8 8'/%3E%3C/svg%3E") center/contain no-repeat}
.sos-no{color:var(--sos-caption)}
.sos-yes{color:var(--sos-ink)}

/* 14 · The tablet breakpoint (768 to 1024) is set in the block settings, never here; the values are in Build Guide part 2, D2b. */

/* 15 · Choice cards: radio options drawn as cards (Gravity Forms Radio Buttons field).
   Put sos-choice in the field's Custom CSS Class. Two per row by default; add
   sos-choice-3 for three per row, or sos-choice-list for one per row on a light grey row.
   On phones every group stacks, except sos-choice-pair (a Yes / No pair), which stays two across. */
.gform_wrapper .sos-choice .gfield_radio{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.gform_wrapper .sos-choice-3 .gfield_radio{grid-template-columns:repeat(3,minmax(0,1fr))}
.gform_wrapper .sos-choice-list .gfield_radio{grid-template-columns:minmax(0,1fr)}
@media (max-width:767px){.gform_wrapper .sos-choice:not(.sos-choice-pair) .gfield_radio{grid-template-columns:minmax(0,1fr)}}
.gform_wrapper .sos-choice .gchoice{
  position:relative;
  display:flex;
  align-items:center;
  gap:16px;
  min-height:48px;
  margin:0;
  padding:0 16px;
  box-sizing:border-box;
  border:2px solid var(--sos-ink);
  background:var(--sos-field);
  color:var(--sos-ink);
  cursor:pointer;
  transition:background-color .12s ease,color .12s ease;
}
.gform_wrapper .sos-choice-list .gchoice{border-color:transparent;background:var(--sos-card)}
.gform_wrapper .sos-choice .gchoice:hover{box-shadow:inset 0 0 0 1px var(--sos-ink)}
.gform_wrapper .sos-choice .gchoice label{flex:1;margin:0;font-size:16px;font-weight:700;line-height:1.3;color:inherit;cursor:pointer}
.gform_wrapper .sos-choice-list .gchoice label{font-weight:400}
/* the whole card is the click target, not only the words */
.gform_wrapper .sos-choice .gchoice label::after{content:"";position:absolute;inset:0}
.gform_wrapper .sos-choice .gchoice input{
  appearance:none;
  -webkit-appearance:none;
  flex-shrink:0;
  width:20px;
  height:20px;
  margin:0;
  border:2px solid currentColor;
  border-radius:50%;
  background:var(--sos-field);
  cursor:pointer;
}
.gform_wrapper .sos-choice .gchoice input:checked{background:var(--sos-ink);box-shadow:inset 0 0 0 3px var(--sos-field)}
.gform_wrapper .sos-choice .gchoice:has(input:checked){background:var(--sos-ink);border-color:var(--sos-ink);color:var(--sos-on-dark)}
.gform_wrapper .sos-choice .gchoice:has(input:checked) input{border-color:var(--sos-on-dark)}
/* the focus ring sits on the whole card */
.gform_wrapper .sos-choice .gchoice input:focus-visible{outline:none;box-shadow:none}
.gform_wrapper .sos-choice .gchoice input:checked:focus-visible{box-shadow:inset 0 0 0 3px var(--sos-field)}
.gform_wrapper .sos-choice .gchoice:has(input:focus-visible){outline:3px solid var(--sos-on-dark);outline-offset:0;box-shadow:0 0 0 6px var(--sos-deep)}
/* 16 · The one small explanatory line: under a heading, above a form, or the
   "Filled in from ticket 1" line on Checkout. Caption grey, 14px, one gap below. */
.sos-caption{font-size:14px;line-height:1.4;color:var(--sos-caption);margin:0 0 16px}
/* 17 · Pages pasted in as plain WordPress blocks (Group, Columns, Heading, Paragraph,
   Image, Table, Buttons, Embed, Query Loop, Details). All the layout lives here, so the blocks carry
   classes only and no sizes of their own. Page settings: Kadence Fullwidth, Unboxed, title off.
   Every value comes from the two scales. No colours: role names only. */

/* 17a · Sections: full width, the rhythm's padding and gap (rule 0) */
/* sections sit edge to edge: Kadence gives every group a 32 bottom margin in a stylesheet that loads after this one,
   which showed as a grey strip between bands (Meg's Podcast note), so the section rule carries .wp-block-group too (v15.5) */
/* width:auto (v15.15, S12): Kadence sizes .alignfull by 100vw less half the scrollbar, so with a desktop scrollbar a band ran past or
   stopped short of the page edge and left a thin strip of page grey at the right (Meg's notes at 1339); a section now takes its parent's width */
.entry-content > .sos-section.wp-block-group,.sos-section{box-sizing:border-box;width:auto;max-width:none;margin:0;padding:var(--sos-pad) var(--sos-gutter)}
.sos-section.sos-hero{padding-top:32px}
.sos-section > * + *{margin-top:var(--sos-gap)}
.sos-section.sos-oncard{background:var(--sos-card)}

/* 17b · Headings and the lines around them */
.sos-section h2{margin:0;font-size:56px;line-height:.95;font-weight:900}
.sos-section .sos-label + h2{margin-top:0}
.sos-section h3{margin:0;font-size:24px;line-height:.95;font-weight:900}
@media (max-width:767px){.sos-section h2{font-size:40px}}
.sos-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:24px}
.sos-head > *{margin:0}
.sos-head p.sos-link{display:flex;flex-wrap:wrap;gap:32px}
.sos-section p{margin:0}
.sos-section p + p,.sos-section h2 + p{margin-top:16px}

/* 17c · The page title. sos-h1 is the home size (up to 168); add sos-inner for every other page (up to 120).
   Both scale with the column they sit in (container units), so the longest word always fits beside a photo
   at every width and nothing runs under it. Under the home title the date line gets 48 of clearance. */
.sos-hero .wp-block-column{container-type:inline-size}
.sos-h1{word-break:normal;overflow-wrap:normal;margin:8px 0 0!important;font-size:clamp(56px,20cqi,168px);line-height:.86;font-weight:900;letter-spacing:.01em;color:var(--sos-ink)}
.sos-h1.sos-inner{font-size:clamp(48px,min(6vw,15cqi),88px);line-height:.88}
.sos-h1 + .wp-block-buttons{margin-top:32px!important}
.sos-dateline{margin-top:32px!important;font-size:14px;font-weight:700;letter-spacing:.24em;text-transform:uppercase;line-height:1.3;color:var(--sos-caption)}
.sos-h1:not(.sos-inner) + .sos-dateline{margin-top:48px!important}
.sos-lead{margin-top:32px!important;max-width:48ch;font-size:20px;line-height:1.5}
.sos-marker{display:flex;align-items:center;gap:8px;margin-top:32px!important;font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;line-height:1.2;color:var(--sos-ink)}
.sos-marker::before{content:"";width:8px;height:8px;flex-shrink:0;background:currentColor}
.sos-marker + .sos-marker{margin-top:8px!important}
.sos-hero .wp-block-shortcode,.sos-hero-form{margin-top:16px}
.sos-hero .sos-marker + .wp-block-buttons{margin-top:16px!important}
.sos-hero-photos{display:flex;gap:16px;align-items:flex-start}
.sos-hero-photos > *{flex:1 1 0;min-width:0}
.sos-hero-photos > *:nth-child(2){margin-top:48px}
@media (max-width:767px){
  .sos-dateline,.sos-lead,.sos-marker,.sos-h1:not(.sos-inner) + .sos-dateline{margin-top:24px!important}
  .sos-lead{font-size:16px}
  .sos-hero-photos > *:nth-child(2){display:none}
}

/* 17d · Column rows: gap 48, and the split used for film and docket, text and receipt */
.sos-section .wp-block-columns{margin-inline:0;margin-bottom:0;gap:48px}
.sos-split{align-items:flex-start}
@media (min-width:782px){
  .sos-split > .wp-block-column:first-child{flex:3 1 0}
  .sos-split > .wp-block-column:last-child{flex:2 1 0}
  .sos-split > .sos-tickets-cta{align-self:flex-end}
}
.sos-stack > * + *{margin-top:24px}

/* 17e · A photo in its mount, on a core Image or Featured Image block. Add sos-duo beside it
   for the soft greyscale. The caption sits on the card, under the photo. The frame is 8 (v15.10, Meg: "the white border
   on the photos is still so thick"); the caption rule names .wp-element-caption too, so Kadence's centred 80% caption
   (.wp-block-image figcaption, loaded later) no longer wins. */
.sos-photo{position:relative;box-sizing:border-box;margin:0;border:8px solid var(--sos-card);border-bottom-width:0;box-shadow:0 6px 20px var(--sos-shadow);line-height:0}
.sos-photo:not(:has(figcaption)){border-bottom-width:8px}
.sos-photo img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.sos-photo :is(figcaption,.wp-element-caption){margin:0;padding:8px 0 12px;background:var(--sos-card);font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;line-height:1.2;text-align:left;color:var(--sos-caption)}
.sos-photo.is-portrait img{aspect-ratio:3/4}

/* 17f · The photo wall: three columns, staggered, gap 16; three photos on a phone */
.sos-wall{gap:16px!important}
.sos-wall > .wp-block-column > * + *{margin-top:48px}
@media (min-width:782px){
  .sos-wall > .wp-block-column:nth-child(1){flex:5 1 0}
  .sos-wall > .wp-block-column:nth-child(2){flex:4 1 0;margin-top:48px}
  .sos-wall > .wp-block-column:nth-child(3){flex:3 1 0;margin-top:8px}
}
@media (max-width:781px){.sos-wall > .wp-block-column > *:nth-child(2){display:none}}

/* 17g · Film: the core YouTube Embed in a mount. The caption names .wp-element-caption too, so Kadence's 80% embed
   caption (loaded later, same weight) no longer wins; film credits are long lines, so they stay in sentence case at 12
   (v15.15, QA Q4: one caption size, 12, on every photo and film) */
.sos-film{margin:0;background:var(--sos-card);padding:8px 8px 0;box-shadow:0 6px 20px var(--sos-shadow)}
.sos-film :is(figcaption,.wp-element-caption){margin:0;padding:8px 0 16px;font-size:12px;font-weight:700;line-height:1.5;text-align:left;color:var(--sos-caption)}

/* 17h · Receipts built from a Group plus a core Table */
.sos-docket .wp-block-table{margin:0}
.sos-docket .wp-block-table table{table-layout:auto}
.sos-docket > .sos-label{margin:0 0 16px}
@media (min-width:1181px){.sos-docket td:last-child{white-space:nowrap}}
.sos-docket .wp-block-table{overflow-x:visible}
.sos-quote{font-size:20px;line-height:1.5;color:var(--sos-ink)!important;margin:0 0 16px!important}
/* one quote on its own (row w-39, one quote per page): the receipt keeps a reading measure */
.sos-quote-solo{max-width:760px}
.sos-section .sos-docket{margin-top:9px}
/* a receipt sitting on navy keeps its own colours: caption-grey label, ink text */
.sos-navy .sos-docket .sos-label{color:var(--sos-caption)}
.sos-navy .sos-docket p{color:var(--sos-ink)}
/* sos-wide: long values that wrap and read as words, not as a caption (the group and not-for-profit card) */
.sos-docket.sos-wide td:last-child{white-space:normal;text-align:right;text-transform:none;letter-spacing:0;font-size:16px;color:var(--sos-ink)}
.sos-section:not(.sos-navy) .sos-docket td a{color:var(--sos-ink);text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
.sos-docket .sos-strong{font-size:16px;font-weight:700;line-height:1.5;color:var(--sos-ink);margin:0 0 16px!important}

/* 17i · Card rows on the core Query Loop: four across, two on a phone; the whole row
   disappears by itself while it has nothing to show (sos-hide-empty on the section) */
.sos-cards .wp-block-post-template{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:48px 16px;margin:0;padding:0;list-style:none}
.sos-cards .wp-block-post{display:flex;flex-direction:column;gap:16px;margin:0}
.sos-cards .wp-block-post-featured-image{margin:0}
.sos-cards .wp-block-post-featured-image img{aspect-ratio:1/1}
@media (max-width:767px){
  .sos-cards .wp-block-post-template{grid-template-columns:repeat(2,minmax(0,1fr))}
  .sos-cards:not(.sos-roster) .wp-block-post:nth-child(n+3){display:none}
}
.sos-hide-empty:not(:has(.wp-block-post,.wp-block-image img[src])){display:none}

/* 17j · Three across (quotes), two on a tablet, one on a phone; the third hides on a phone (never on the Testimonials wall, 17p).
   Quote cards in a row share one height, the attribution row on the foot (v15.6). sos-even gives any row of receipts the same
   equal heights with the total row on the foot (Getting to Perth's three options, v15.19) */
:is(.sos-three,.sos-even) > .wp-block-column{display:flex;flex-direction:column}
:is(.sos-three,.sos-even) .sos-docket{flex:1 1 auto;display:flex;flex-direction:column}
:is(.sos-three,.sos-even) .sos-docket > .wp-block-table{margin-top:auto}
@media (max-width:767px){:not(.sos-quotes) > .sos-three > .wp-block-column:nth-child(3){display:none}}

/* 17p · The Testimonials wall (v15.19, S27, overnight pick on row w-59, Meg: "every inch of it needs a rethink"): the quotes flow as one
   masonry, each card at its own height, three columns (two on a tablet, one on a phone, where all 21 now show), the first quote leading larger */
.sos-quotes{column-count:3;column-gap:16px}
.sos-quotes > .sos-head{column-span:all;margin-bottom:32px}
.sos-quotes > .sos-three{display:contents}
.sos-quotes .sos-three > .wp-block-column{break-inside:avoid;margin:0 0 16px}
.sos-quotes > .sos-head + .sos-three > .wp-block-column:first-child .sos-quote{font-size:32px;line-height:1.25}
@media (max-width:1180px){.sos-quotes{column-count:2}}
@media (max-width:767px){.sos-quotes{column-count:1}}

/* 17k · Buttons from the core Buttons block. Navy by default, sos-go for the one green action,
   the Outline style for a second choice beside a solid one */
.sos-section .wp-block-button__link{display:inline-flex;align-items:center;min-height:48px;box-sizing:border-box;padding:0 24px;border-radius:0;background:var(--sos-ink);color:var(--sos-on-dark);font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-decoration:none}
.wp-block-button.sos-go .wp-block-button__link{background:var(--sos-accent);color:var(--sos-deep);transition:background .2s ease}
.wp-block-button.sos-go .wp-block-button__link:hover{background:var(--sos-accent-hover);color:var(--sos-deep)}
.sos-section .wp-block-button.is-style-outline > .wp-block-button__link,.sos-section .wp-block-button.is-style-outline > .wp-block-button__link:visited{background:transparent;color:var(--sos-ink);border:2px solid var(--sos-ink);padding:0 24px}
@media (max-width:767px){
  body:has(.sos-bar) .wp-block-button.sos-go:not(.sos-bar *) .wp-block-button__link{background:var(--sos-ink);color:var(--sos-on-dark)}
}
.sos-section .wp-block-buttons{gap:24px;align-items:center}

/* 17l · Logo walls on a core Gallery: logos as supplied, no greyscale, no captions */
.sos-logos.wp-block-gallery{gap:32px!important}
.sos-logos img{object-fit:contain!important;height:110px!important;width:auto!important}

/* 17m · Kadence and WordPress table and heading defaults, overruled inside SOS sections (v8.1, 28 Sep 2026:
   the clone showed full cell borders on every receipt and a large gap above the home h1) */
.sos-docket table,.sos-docket td,.sos-docket th{border-top:0!important;border-left:0!important;border-right:0!important;background:none!important}
.sos-docket td{border-bottom:1px dotted var(--sos-leader)!important;padding:8px 0!important}
.sos-docket:where(:not(.sos-plain)) tr:last-child td{border-bottom:0!important;border-top:2px solid var(--sos-ink)!important;padding-top:16px!important}
.sos-section:not(.sos-navy) .sos-link a{color:var(--sos-ink)}
/* full-width sections keep their side gutter whatever the theme does to alignfull */
.entry-content .sos-section.alignfull{padding-left:var(--sos-gutter)!important;padding-right:var(--sos-gutter)!important}

/* 17n · Ticket cards: a receipt per ticket, the same rows in the same order, equal heights,
   the On sale or Total row and the button pinned to the foot. sos-pick is the one card with the
   green banner across its top (a Paragraph with sos-stamp as the card's first block). */
.sos-tickets{align-items:stretch!important}
.sos-tickets > .wp-block-column{display:flex;flex-direction:column}
.sos-ticket{display:flex;flex-direction:column;gap:16px;flex:1 1 auto;box-sizing:border-box}
.sos-section .sos-ticket > *{margin:0!important}
.sos-ticket.sos-pick{padding-top:56px}
.sos-ticket > .sos-stamp{position:absolute;top:0;left:0;right:0;transform:none;text-align:center;font-size:12px;line-height:1.2;padding:8px 16px}
.sos-ticket > .sos-label{margin:0!important}
.sos-section .sos-ticket :is(h2,h3){font-size:40px;line-height:1}
.sos-ticket .sos-tagline{margin-top:-8px!important;padding-bottom:16px;border-bottom:1px solid var(--sos-leader);font-size:16px;line-height:1.4;color:var(--sos-ink)}
.sos-ticket .wp-block-table{margin-top:auto!important}
.sos-ticket .wp-block-button,.sos-ticket .wp-block-button__link{width:100%;justify-content:center}
.sos-section .sos-yes p,.sos-section .sos-no p{margin:0!important}
@media (max-width:1024px) and (min-width:782px){.sos-section .sos-ticket :is(h2,h3){font-size:24px}}

/* 17o · Questions on the core Details block, one per question, inside a Group with sos-faq */
.sos-faq .wp-block-details{margin:0!important;border-bottom:1px dotted var(--sos-leader)}
.sos-faq summary{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;padding:12px 0;font-size:20px;font-weight:700;line-height:1.3;color:var(--sos-ink);cursor:pointer;list-style:none}
.sos-faq summary::-webkit-details-marker{display:none}
.sos-faq summary::after{content:"+";flex-shrink:0;font-size:24px;line-height:1}
.sos-faq details[open] > summary::after{content:"\2212"}
.sos-faq details > p{max-width:60ch;margin:0 0 16px!important;font-size:16px;line-height:1.5}

/* 18 · Header and footer (v9, 29 Sep 2026). The header is Kadence's own builder, set in Customise
   (Build Guide part 2, D4); these rules only add what the Customiser cannot. The footer is one synced
   pattern, SOS footer, in the Footer 1 widget area (D5), styled here. */

/* 18a · Header: logo height, the green underline on the current page, and no header button on Home
   while the hero holds the waitlist form (needs the G4 snippet, which adds sos-phase-waitlist to the body) */
.main-navigation .current-menu-item > a,.main-navigation .current_page_item > a{text-decoration:underline!important;text-decoration-color:var(--sos-accent)!important;text-decoration-thickness:2px!important;text-underline-offset:8px}
body.home.sos-phase-waitlist [data-section="kadence_customizer_header_button"]{display:none}

/* 18b · Footer: navy, five columns (two on a phone, the first full width),
   white links, a white sign-up button, and the Acknowledgement and legal links in a strip underneath */
.site-footer .widget:has(.sos-footer){margin:0;padding:0}
.sos-footer-cols{flex-wrap:wrap!important}
@media (min-width:782px){.sos-footer-cols > .wp-block-column:first-child{flex:2 1 0}}
.sos-footer .sos-label{margin:0 0 16px!important}
.sos-footer .sos-footer-links p{margin:0!important}
.sos-footer .sos-footer-links a,.sos-footer .sos-footer-base .sos-link a{font-size:14px;font-weight:700;text-decoration:none}
.sos-footer .sos-footer-links a:hover{text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
.sos-footer .sos-footer-logo{margin:0 0 24px}
.sos-footer .sos-footer-logo img{height:96px;width:auto;max-width:none}
.sos-footer .sos-dateline{margin-top:0!important;color:var(--sos-on-dark)}
.sos-footer .sos-dateline + .sos-label{margin-top:32px!important}
.sos-footer :is(button,input[type=submit],.kb-forms-submit,.wp-block-button__link){background:var(--sos-on-dark)!important;color:var(--sos-ink)!important;border-radius:0}
.sos-footer-base{padding-top:32px;border-top:1px solid color-mix(in srgb,var(--sos-on-dark) 25%,transparent)}
.sos-footer-base .sos-ack{max-width:80ch;font-size:14px;line-height:1.5}
.sos-footer-base .sos-link{display:flex;flex-wrap:wrap;gap:8px 32px;margin-top:24px!important;padding-right:56px}
/* 19 · Round 36 (v10, 28 Sep 2026): the header fixes from Meg's screenshots, and the pieces the
   batch 1 to 3 pages need (panels, chips, prose, hero side column, closing band, query empty states). */

/* 19a · Header: full width with the page's own 96 / 24 gutter, the logo held to 56 / 40 whatever
   Kadence sets on the image, and the current menu item as navy text with the green underline */
#masthead .site-header-row-container-inner > .site-container{max-width:none;padding-left:var(--sos-gutter);padding-right:var(--sos-gutter)}
#masthead .site-branding a.brand img,#masthead .site-branding .custom-logo{max-height:56px!important;width:auto!important;max-width:none!important;height:auto}
@media (max-width:1024px){#masthead .site-branding a.brand img,#masthead .site-branding .custom-logo{max-height:40px!important}}
.main-navigation .menu > .menu-item > a{background:transparent!important;color:var(--sos-ink)!important}
.main-navigation .menu > .menu-item > a:hover{color:var(--sos-deep)!important}

/* 19b · Panels: a white card with no torn edge (link cards, the three things, format cards) */
.sos-panels{gap:24px!important}
.sos-panel{box-sizing:border-box;height:100%;display:flex;flex-direction:column;gap:16px;padding:24px;background:var(--sos-field)}
.sos-section .sos-panel > *{margin:0!important}
.sos-panel .sos-link{margin-top:auto!important}
.sos-panel p:not(.sos-label,.sos-link,.sos-prose p){font-size:16px;line-height:1.5;max-width:40ch}
.sos-panels > .wp-block-column{display:flex;flex-direction:column}

/* 19c · Chips as links: 48 tall, navy outline, wrap onto a second line on a phone */
.sos-chips a{display:inline-flex;align-items:center;min-height:48px;box-sizing:border-box;padding:0 16px;border:2px solid var(--sos-ink);color:var(--sos-ink);font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-decoration:none}
.sos-chips a:hover{background:var(--sos-ink);color:var(--sos-on-dark)}
p.sos-chips{display:flex;flex-wrap:wrap;gap:8px}
/* the chip for the page you are on (v15): tag and edition archives mark it, Insights marks All */
.sos-chips a[aria-current],.blog .sos-chips a[href="/news/"]{background:var(--sos-ink);color:var(--sos-on-dark)}

/* 19d · Prose: long text in a readable column (plain pages, info text sections, answers) */
.sos-prose{max-width:720px}
.sos-prose > * + *{margin-top:16px!important}
.sos-prose h2{font-size:40px;margin-top:48px!important}
.sos-prose h2:first-child{margin-top:0!important}
.sos-prose h3{margin-top:32px!important}
.sos-prose p,.sos-prose li{font-size:16px;line-height:1.6}
.sos-prose ul,.sos-prose ol{margin:16px 0 0;padding-left:24px}
.sos-prose li + li{margin-top:8px}
.sos-prose a{color:var(--sos-ink);text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
.sos-sub{font-size:16px;line-height:1.5;max-width:60ch;margin-top:16px!important}
@media (max-width:767px){.sos-prose h2{font-size:32px;margin-top:48px!important}}

/* 19e · Hero with a side column (a receipt or photos beside the title) */
@media (min-width:782px){.sos-hero .sos-split > .sos-hero-side{padding-top:24px}}
.sos-hero-side > * + *{margin-top:24px}
/* a heading in the side column is a section heading, a step under the page title (v15.19, S19 Program: "How it runs" read as a second headline) */
.sos-hero-side h2{font-size:40px}

/* 19f · The closing navy band: the date line as its label, one big line, two buttons */
.sos-closing .sos-closing-h{font-size:96px;line-height:.9;max-width:14ch}
@media (max-width:767px){.sos-closing .sos-closing-h{font-size:48px}}
.sos-navy .wp-block-button.is-style-outline > .wp-block-button__link,.sos-navy .wp-block-button.is-style-outline > .wp-block-button__link:visited{color:var(--sos-on-dark);border-color:var(--sos-on-dark)}
.sos-navy .wp-block-button:not(.sos-go):not(.is-style-outline) .wp-block-button__link{background:var(--sos-on-dark);color:var(--sos-ink)}

/* 19g · Query Loop empty states and speaker cards (Speakers, Home) */
.sos-empty{max-width:60ch;font-size:20px;line-height:1.5}
.sos-cards .wp-block-post-title{margin:0;font-size:20px;line-height:1.2}
.sos-cards .wp-block-post-title a{color:var(--sos-ink);text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
.sos-nogreen .sos-cards .wp-block-post-title a{text-decoration-color:var(--sos-accent)}

/* 19h · Receipts: a stamp in the total row's place, and receipts inside a column sitting flush */
.sos-docket .sos-stamp{align-self:flex-start;margin-top:16px!important;font-size:14px}
.sos-docket > .wp-block-buttons{margin-top:24px}
.sos-docket .sos-note{font-size:14px;line-height:1.5;color:var(--sos-caption);margin-top:16px!important}
.sos-rows > * + *{margin-top:24px}

/* 19i · Numbered jump list inside a receipt (Questions, plain pages) */
.sos-jump td:first-child a{color:var(--sos-ink);text-decoration:none}
.sos-jump td:first-child a:hover{text-decoration:underline;text-decoration-color:var(--sos-accent)}
@media (min-width:1025px){.sos-sticky{position:sticky;top:120px}}

/* 19j · Questions groups: a numbered label and heading above each Details list */
.sos-faq-group + .sos-faq-group{margin-top:48px}
.sos-faq-group > .sos-label{margin:0 0 8px!important}
.sos-faq-group > h2{margin:0 0 24px!important;font-size:40px}
.sos-faq .wp-block-details > * + *:not(summary){margin-top:0}
.sos-faq details > .wp-block-table,.sos-faq details > .sos-docket{margin:8px 0 16px!important;max-width:60ch}

/* 19k · Split variants: sos-flip swaps the 3:2 ratio to 2:3; sos-side is a text column beside a fixed
   aside (the jump list on Questions, the contents receipt on plain pages) */
@media (min-width:782px){
  .sos-split.sos-flip > .wp-block-column:first-child{flex:2 1 0}
  .sos-split.sos-flip > .wp-block-column:last-child{flex:3 1 0}
  .sos-split.sos-side > .wp-block-column{flex:1 1 0}
  .sos-split.sos-side > .sos-aside{flex:0 0 360px}
}
.sos-stack .sos-gap{margin-top:48px!important}
.sos-after-lead{margin-top:16px!important}

/* 19l · Partner cards and logo walls: the logo sits on white at its own shape, never cropped or greyed.
   On a card the logo takes one 2:1 frame up to 280 wide (every logo is a 600 x 300 file) and the blurb reads to 56ch (v15.7) */
.sos-partner-logo{margin:0!important;line-height:0}
.sos-partner-logo img{display:block;width:100%;max-width:280px;height:auto;aspect-ratio:2/1;object-fit:contain}
/* on a partner card the logo sits centred in one full-width card tile, so every partner gets the same frame (v15.20, S18 part 4) */
.sos-panel .sos-partner-logo{padding:16px;background:var(--sos-card)}
.sos-panel .sos-partner-logo :is(a,img){display:block;width:min(280px,100%);margin-inline:auto}
.sos-logos.wp-block-gallery .wp-block-image{flex:0 0 auto!important;width:auto!important;margin:0!important}
.sos-logos.wp-block-gallery .wp-block-image img{max-width:180px}
.sos-panel .sos-prose{max-width:56ch}

/* 19q · Award marks (Our partners 315, v15.15, S07): every mark in the same white tile, contained and centred, starting on the text edge;
   five across, three on a tablet, two on a phone. :not(#sos) matches the weight of core's column-width rule for galleries. */
.wp-block-gallery.sos-awards{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px;margin:0}
.wp-block-gallery.sos-awards.has-nested-images figure.wp-block-image:not(#sos){width:auto;margin:0;aspect-ratio:1/1;padding:24px;box-sizing:border-box;background:var(--sos-field);justify-content:center}
.wp-block-gallery.sos-awards.has-nested-images figure.wp-block-image:not(#sos) img{width:100%;height:100%;max-width:none;object-fit:contain}
@media (max-width:1024px){.wp-block-gallery.sos-awards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:767px){.wp-block-gallery.sos-awards{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* 19r · The to-do cards (Getting to Perth, v15.19, the Zander pass): numbered 01 to 03 in the label style above each heading, each card
   tall enough to read as a card, not a strip, the link on its foot (19b) */
.sos-todo{counter-reset:sos-todo}
.sos-todo .sos-panel{counter-increment:sos-todo;min-height:240px}
.sos-todo .sos-panel::before{content:counter(sos-todo,decimal-leading-zero);font-size:12px;font-weight:700;letter-spacing:.2em;line-height:1.2;color:var(--sos-caption)}

/* 19m · Phone only: the mobile email captures (Tickets, Make the case) show under 768 and nowhere else */
.sos-mobile-only{display:none!important}
@media (max-width:767px){.sos-mobile-only{display:block!important}}

/* 19n · The letter on Make the case: a white sheet, set like a letter, not a receipt */
.sos-letter{background:var(--sos-field);color:var(--sos-ink);padding:32px;max-width:640px;box-shadow:0 6px 20px var(--sos-shadow)}
.sos-letter p{color:var(--sos-ink)!important;font-size:16px;line-height:1.6}
.sos-letter > * + *{margin-top:16px!important}
@media (max-width:767px){.sos-letter{padding:24px}}

/* 19o · Archive rows: the edition on the left, its links on the right, wrapping on a phone */
.sos-archive td:last-child a{margin-left:16px;color:var(--sos-ink);text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
.sos-archive td:last-child{white-space:normal!important}
.sos-archive td:first-child{white-space:nowrap}

/* 19p · Ticket matrix (Plan your trip): a receipt with a header row and three value columns.
   The last row is a normal row here, not a total. */
.sos-docket.sos-matrix th{padding:0 0 16px 16px!important;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;text-align:right;color:var(--sos-caption);border-bottom:2px solid var(--sos-ink)!important}
.sos-docket.sos-matrix th:first-child{padding-left:0!important;text-align:left}
.sos-docket.sos-matrix td:not(:first-child),
.sos-docket.sos-matrix tr:last-child td:not(:first-child){padding-left:16px!important;text-align:right;white-space:nowrap;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--sos-caption)}
.sos-docket.sos-matrix tr:last-child td{border-top:0!important;border-bottom:1px dotted var(--sos-leader)!important;padding-top:8px!important}
.sos-docket.sos-matrix tr:last-child td:first-child{font-size:16px;letter-spacing:0;text-transform:none;color:var(--sos-ink)}
@media (max-width:767px){.sos-docket.sos-matrix td:first-child{font-size:14px}.sos-docket.sos-matrix td:not(:first-child),.sos-docket.sos-matrix th{padding-left:8px!important}}
/* 20 · Round 38 (v11, 28 Sep 2026): fixes found by rendering the clone's own pages */

/* 20a · Links keep the green underline. Kadence's "no underline" link style (.link-style-no-underline
   .entry-content a) outranks the core link rules, so the underline is restated here. */
.entry-content :is(.sos-link a,a.sos-link,.sos-prose a,.sos-cards .wp-block-post-title a,.sos-panel td a),
.entry-content .sos-section:not(.sos-navy) .sos-docket:not(.sos-jump) td a{
  text-decoration:underline solid var(--sos-accent) 2px!important;
  text-underline-offset:5px;
}
.entry-content .sos-navy .sos-link a{text-decoration:underline solid var(--sos-accent) 2px!important;text-underline-offset:5px}

/* 20b · Spacing the blocks do not get on their own: a Group straight after a heading (prose, stacks),
   and the Buttons straight after the hero lead when there is no marker line */
.sos-section h2 + .wp-block-group{margin-top:24px}
.sos-hero :is(.sos-lead,.sos-dateline) + .wp-block-buttons{margin-top:32px!important}
@media (max-width:767px){.sos-hero :is(.sos-lead,.sos-dateline) + .wp-block-buttons{margin-top:24px!important}}

/* 20c · A plain Table inside a panel reads as receipt rows, never a boxed grid */
.sos-panel .wp-block-table{margin:0}
.sos-panel .wp-block-table table{border-collapse:collapse;width:100%;table-layout:auto}
.sos-panel .wp-block-table td{border:0!important;border-bottom:1px dotted var(--sos-leader)!important;padding:8px 0!important;background:none;font-size:14px;font-weight:700;line-height:1.3;color:var(--sos-ink)}
.sos-panel .wp-block-table td:last-child{padding-left:16px!important;text-align:right;white-space:nowrap;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--sos-caption)}

/* 20d · Receipt text wraps between words, never inside one (WordPress sets break-word on fixed-layout tables) */
.sos-docket :is(td,th),.sos-panel td{word-break:normal!important;overflow-wrap:normal!important;hyphens:manual}
@media (max-width:767px){
  .sos-docket.sos-matrix{padding:24px 16px}
  .sos-docket.sos-matrix tr:last-child td:first-child{font-size:14px}
  .sos-docket.sos-matrix td:not(:first-child),.sos-docket.sos-matrix tr:last-child td:not(:first-child),.sos-docket.sos-matrix th{white-space:normal;font-size:10px;letter-spacing:.04em;padding-left:6px!important}
}

/* 20e · Footer: the navy band runs edge to edge; the Gravity Forms required note is hidden */
#colophon .site-footer-row-container-inner > .site-container:has(.sos-footer){padding-left:0;padding-right:0;max-width:none}
.sos-footer .gform_required_legend{display:none}

/* 20f · Two or more links in one link line sit apart (outside a section head they ran together) */
.sos-section p.sos-link:has(> a + a){display:flex;flex-wrap:wrap;gap:8px 32px}

/* 20g · A white panel on a navy section keeps ink text (Become a partner steps, Speak picking rules) */
.sos-navy .sos-panel :is(h2,h3,p,li,a){color:var(--sos-ink)}
.sos-navy .sos-panel .sos-label{color:var(--sos-caption)}

/* 20h · Long-form pages (the SOS story): centred images shrink to the column on a phone */
.sos-longform .wp-block-image .aligncenter{display:block;max-width:100%}
.sos-longform .wp-block-image img{margin-inline:auto;max-width:100%;height:auto}

/* 20i · Archive rows on a phone: the edition on its own line, its links underneath */
@media (max-width:767px){
  .sos-archive td{display:block;width:100%;text-align:left!important}
  .sos-archive td:first-child{white-space:normal!important;border-bottom:0!important;padding-bottom:0!important}
  .sos-archive td:last-child a{margin:0 24px 0 0}
}

/* 20j · The speaker page (Kadence element 7119, every single speaker): square portrait, the session receipt,
   and social links that only show when the speaker has that link */
.sos-photo.sos-speaker-photo img{aspect-ratio:1/1}
.sos-socials a[href=""]{display:none}
.sos-docket > .kt-inside-inner-col > .sos-label{margin:0 0 16px!important}
.sos-session p{margin:0;font-size:16px;line-height:1.5;color:var(--sos-ink)}
.sos-session p + p{margin-top:16px}
.sos-session strong{display:block;margin-bottom:8px;font-size:20px;line-height:1.25;font-weight:900}
/* the speaker post type uses Kadence's normal width and top padding; the SOS sections need the full width */
.single-speaker .content-container.site-container{max-width:none;padding:0}
.single-speaker .content-area{margin-top:0;margin-bottom:0}
.sos-session strong + br{display:none}

/* 20k · Search results (Kadence's own archive list): the SOS page frame, white result cards, the title as the link */
.search .content-area{margin:0}
.search .content-container.site-container{max-width:none;padding:32px var(--sos-gutter) var(--sos-pad)}
.search .search-archive-title{margin:0 0 48px}
.search .search-title{margin:0;font-size:56px;line-height:.95;font-weight:900;color:var(--sos-ink)}
@media (max-width:767px){.search .search-title{font-size:40px}}
.search #archive-container{margin:0;gap:16px;max-width:880px}
.search .loop-entry{background:var(--sos-field);box-shadow:none;border-radius:0}
.search .loop-entry.entry .entry-content-wrap{padding:32px}
@media (max-width:767px){.search .loop-entry.entry .entry-content-wrap{padding:24px}}
.search .loop-entry .post-thumbnail,.search .loop-entry .entry-meta,.search .loop-entry .entry-footer{display:none}
.search .loop-entry .entry-header{margin:0}
.search .loop-entry h2.entry-title{font-size:24px;line-height:1.15;font-weight:900}
.search .loop-entry .entry-title a{color:var(--sos-ink);text-decoration:underline solid var(--sos-accent) 2px;text-underline-offset:5px}
.search .loop-entry .entry-summary{margin-top:16px}
.search .loop-entry .entry-summary p{margin:0;font-size:16px;line-height:1.5;color:var(--sos-ink);max-width:70ch}
/* v15.17 (S08): one full-width card per result (Kadence sets an image-beside grid and the hidden thumbnail kept its column, so the text spans it; the card padding
   names .entry too, as Kadence's unboxed search rule set it to 0), a Page label where a post has its category, and the page numbers as 48 square SOS buttons */
.search .loop-entry .entry-content-wrap{grid-column:1 / -1}
.search .loop-entry.type-page .entry-header::before{content:"Page";display:block;margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--sos-caption)}
.search .pagination .page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:48px;min-height:48px;box-sizing:border-box;border:2px solid var(--sos-ink);border-radius:0;color:var(--sos-ink);font-weight:700;text-decoration:none}
.search .pagination .page-numbers.current{background:var(--sos-ink);color:var(--sos-on-dark)}
.search .loop-entry .entry-taxonomies{margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase}
.search .loop-entry .entry-taxonomies a{color:var(--sos-caption);text-decoration:none}

/* 20l · Insights (the posts page, /news/) and the edition and topic archives: the SOS frame on Kadence's archive.
   The chips and lead come from the posts page's own content (page 853), which Kadence shows under the title. */
:is(.blog,.category,.tag) .entry-hero-container-inner{background:transparent}
:is(.blog,.category,.tag) .hero-container.site-container{max-width:none;padding:32px var(--sos-gutter) 0}
:is(.blog,.category,.tag) .entry-hero .entry-header{min-height:0;display:block;text-align:left;margin:0}
:is(.blog,.category,.tag) .archive-title{margin:8px 0 0;font-size:clamp(36px,6vw,88px);line-height:.9;font-weight:900;color:var(--sos-ink);max-width:16ch}
:is(.blog,.category,.tag) .entry-hero .entry-header > p{margin:0}
:is(.blog,.category,.tag) .entry-hero .entry-header > p.sos-lead{margin:24px 0 0}
:is(.blog,.category,.tag) .entry-hero .entry-header > p.sos-label{margin:24px 0 8px}
:is(.blog,.category,.tag) .entry-hero p:empty{display:none}
:is(.blog,.category,.tag) .entry-hero .sos-chips a{min-height:44px;font-size:12px}
/* v15.18 (overnight pick, Meg's note "a lot of boxes at the very top", row w-56): on Insights and the tag and edition pages the two filter
   rows read as quiet text links in the label style, the picked one in ink with the green underline, instead of twelve boxed chips */
:is(.blog,.category,.tag) .entry-hero .sos-chips{gap:0 24px}
:is(.blog,.category,.tag) .entry-hero .sos-chips a{padding:0;border:0;background:none;color:var(--sos-caption);letter-spacing:.16em}
:is(.blog,.category,.tag) .entry-hero .sos-chips a:hover,
:is(.blog,.category,.tag) .entry-hero .sos-chips a[aria-current],.blog .entry-hero .sos-chips a[href="/news/"]{background:none;color:var(--sos-ink);text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:6px}
:is(.blog,.category,.tag) .content-area{margin:0}
:is(.blog,.category,.tag) .content-container.site-container{max-width:none;padding:32px var(--sos-gutter) var(--sos-pad)}
:is(.blog,.category,.tag) #archive-container{gap:48px 24px}
:is(.blog,.category,.tag) .loop-entry{background:transparent;box-shadow:none;border-radius:0}
:is(.blog,.category,.tag) .loop-entry .post-thumbnail{margin:0 0 16px;border:8px solid var(--sos-card);box-shadow:0 6px 20px var(--sos-shadow)}
:is(.blog,.category,.tag) .loop-entry .entry-content-wrap{padding:0}
:is(.blog,.category,.tag) .loop-entry .entry-taxonomies{margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase}
:is(.blog,.category,.tag) .loop-entry .entry-taxonomies a{color:var(--sos-caption);text-decoration:none}
:is(.blog,.category,.tag) .loop-entry h2.entry-title{font-size:24px;line-height:1.15;font-weight:900}
:is(.blog,.category,.tag) .loop-entry .entry-title a{color:var(--sos-ink);text-decoration:underline solid var(--sos-accent) 2px;text-underline-offset:5px}
:is(.blog,.category,.tag) .loop-entry .entry-meta{margin:8px 0 0;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--sos-caption)}
:is(.blog,.category,.tag) .loop-entry .entry-summary{margin-top:16px}
:is(.blog,.category,.tag) .loop-entry .entry-summary p{margin:0;font-size:16px;line-height:1.5;color:var(--sos-ink)}
:is(.blog,.category,.tag) .loop-entry .entry-footer{display:none}
/* the newest (sticky) post leads Insights on its first page: one wide card, photo left, words right, the title at 40 (v15.22, S20, the prototype's
   featured post, overnight pick on row w-60) */
@media (min-width:768px){
  .blog:not(.paged) #archive-container > li:first-child{grid-column:1 / -1}
  .blog:not(.paged) #archive-container > li:first-child > .loop-entry{display:grid;grid-template-columns:3fr 2fr;gap:32px;align-items:center}
  .blog:not(.paged) #archive-container > li:first-child .post-thumbnail{margin:0}
  .blog:not(.paged) #archive-container > li:first-child h2.entry-title{font-size:40px;line-height:1}
}

/* 20m · Speaker rosters (v15.9, Meg 28 Sep: every speaker on one page, "Meet <first name>", no cut bios).
   The cards from [sos_speakers] and the speaker-year archives (snippet 55) carry sos-roster: every card shows on a phone
   (17i hides the rest of a teaser row), three across on a tablet, the lines 8 apart, the Meet link on one baseline per row. */
.sos-roster .wp-block-post{gap:8px}
.sos-roster .wp-block-post > *{margin:0}
.sos-roster .wp-block-post > .wp-block-post-featured-image{margin-bottom:8px}
.sos-roster .sos-card-role{font-size:14px;line-height:1.4;color:var(--sos-ink)}
.sos-roster .wp-block-post > .sos-link{margin-top:auto;padding-top:8px}
@media (min-width:768px) and (max-width:1180px){.sos-roster .wp-block-post-template{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* 21 · Round 41 (v13, 28 Sep 2026): the 404 page and the year gallery pages */

/* 21a · The 404 page. Kadence builds the 404 at the normal content width, so the SOS sections sat
   inside a 1088 column and ran off the right edge. Open the container the way the SOS pages are
   set (full width, no gutter, no vertical padding) and keep the search box to one line. */
body.error404 .content-container.site-container{max-width:none!important;padding:0!important}
body.error404 .content-area{margin:0!important}
body.error404 .content-wrap>.sos-section{width:100%!important;max-width:none!important;margin-left:0!important;margin-right:0!important}
body.error404 .sos-search-wrap{max-width:720px}
/* the 404 sections sit outside .entry-content, so Kadence's .alignfull padding 0 had won: the gutter and padding back (v15.24) */
body.error404 .content-wrap>.sos-section{padding:var(--sos-pad) var(--sos-gutter)}
body.error404 .content-wrap>.sos-hero{padding-top:32px}
body.error404 .sos-search-wrap .wp-block-search__inside-wrapper{gap:8px}

/* 21b · Year gallery pages (SOS18 to SOS26). The credit lines sit under the section head with a
   little air, and the carried-over gallery (Jetpack Tiled Gallery or core Gallery) keeps its own
   layout: no SOS photo treatment, no crop, no grey. */
.sos-section>.sos-head+.sos-caption{margin-top:24px}
.sos-section>.sos-caption+.sos-caption{margin-top:8px}
.sos-section>.sos-caption+.sos-gallery{margin-top:32px}
.sos-gallery img{filter:none!important;border-radius:0}
/* a core Gallery: one even grid, 3 across, 2 on a tablet */
.sos-gallery .wp-block-gallery{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px!important;margin:0}
.sos-gallery .wp-block-gallery .wp-block-image{width:auto!important;margin:0!important}
.sos-gallery .wp-block-gallery img{display:block;width:100%!important;height:auto!important;aspect-ratio:3/2;object-fit:cover}
@media (max-width:1024px){.sos-gallery .wp-block-gallery{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:767px){.sos-gallery .wp-block-gallery{gap:8px!important}}
/* the old Jetpack Tiled Gallery (v15.8, Meg: "used to be a tile gallery, now the crops are all wrong"). Jetpack's own
   stylesheet does not load, so its rows are laid out here as Jetpack does: each column at the width Jetpack saved
   (its flex-basis), each photo whole at its own shape */
.sos-gallery .tiled-gallery__row{display:flex;gap:8px}
.sos-gallery .tiled-gallery__row + .tiled-gallery__row{margin-top:8px}
.sos-gallery .tiled-gallery__col{display:flex;flex-direction:column;gap:8px;min-width:0}
.sos-gallery .tiled-gallery__item{flex:1 1 auto;margin:0;overflow:hidden;line-height:0}
.sos-gallery .tiled-gallery__item img{display:block;width:100%;height:100%;object-fit:cover}
@media (max-width:767px){.sos-gallery .tiled-gallery__row,.sos-gallery .tiled-gallery__col{gap:4px}.sos-gallery .tiled-gallery__row + .tiled-gallery__row{margin-top:4px}}

/* 21c · Jetpack Slideshow blocks in old posts (v15.17, S10, What to pack for SOS26). Jetpack's slideshow styles and script do not load
   on the clone, so the twelve star sign graphics stacked full size as a bulleted list. Until Jetpack's script starts the slideshow
   (it adds swiper-initialized), the slides read as one swipe strip: one graphic at a time at its own 3:4 shape, snap scrolling inside
   the strip, no bullets, and the arrows and dots (which need the script) hidden. */
.wp-block-jetpack-slideshow{max-width:480px;margin-inline:auto}
.wp-block-jetpack-slideshow_container:not(.swiper-initialized) .wp-block-jetpack-slideshow_swiper-wrapper{display:flex;gap:16px;margin:0;padding:0;list-style:none;overflow-x:auto;scroll-snap-type:x mandatory}
.wp-block-jetpack-slideshow_container:not(.swiper-initialized) .wp-block-jetpack-slideshow_slide{flex:0 0 100%;margin:0;scroll-snap-align:start}
.wp-block-jetpack-slideshow_container:not(.swiper-initialized) figure{margin:0}
.wp-block-jetpack-slideshow_container:not(.swiper-initialized) img{display:block;width:100%;height:auto;aspect-ratio:3/4;object-fit:contain}
.wp-block-jetpack-slideshow_container:not(.swiper-initialized) :is(.swiper-button-prev,.swiper-button-next,.wp-block-jetpack-slideshow_button-pause,.swiper-pagination){display:none}

/* 25 · Single posts (v15.17, S09, Meg: "blog posts still need css"). Kadence's single post, in the SOS pieces only: the post in a 720
   reading column on the page's gutter, the post's own opening h2 (posts hide Kadence's title) as the headline, 40 to 64, the first
   paragraph as the 20 lead, body 16 on 1.6, h2 40 and h3 24, links with the green underline, images in the 8 white mount at full
   colour, and the previous and next links as one link line under a dotted rule. The contents box keeps Kadence's own look for now. */
.single-post .content-container.site-container{max-width:none;padding:32px var(--sos-gutter) var(--sos-pad)}
.single-post .content-area{margin:0}
.single-post .content-wrap > article,.single-post .post-navigation{max-width:720px}
.single-post .entry-content-wrap{padding:0}
.single-post .single-content > :is(p,ul,ol){font-size:16px;line-height:1.6}
.single-post .single-content > :is(h1,h2):first-child{margin:8px 0 0;font-size:clamp(40px,4.5vw,64px);line-height:.95;font-weight:900}
.single-post .single-content > :is(h1,h2):first-child + p{margin-top:24px;font-size:20px;line-height:1.5}
.single-post .single-content > h2:not(:first-child){margin-top:48px;font-size:40px;line-height:1;font-weight:900}
.single-post .single-content h3{margin-top:32px;font-size:24px;line-height:1.1;font-weight:900}
.single-post .single-content :is(p,li) a{color:var(--sos-ink);text-decoration:underline solid var(--sos-accent) 2px;text-underline-offset:5px}
.single-post .single-content .wp-block-image img{box-sizing:border-box;border:8px solid var(--sos-card);box-shadow:0 6px 20px var(--sos-shadow)}
.single-post .post-navigation{margin:48px 0 0;padding-top:24px;border-top:1px dotted var(--sos-leader)}
.single-post .post-navigation a{color:var(--sos-ink);font-weight:700;text-decoration:underline solid var(--sos-accent) 2px;text-underline-offset:5px}
.single-post .post-navigation .post-navigation-sub{display:block;margin-bottom:8px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--sos-caption)}
@media (max-width:767px){.single-post .single-content > h2:not(:first-child){font-size:32px}}

/* 26 · WooCommerce account, cart and checkout (v15.20, sprint inbox S25 and S18 part 2, Meg: "do we need to css?"): the SOS page frame
   and pieces on Woo's own markup: section headings, forms and totals on the card, 48 fields with the 2px navy line, square SOS buttons,
   tables with dotted leaders, the account menu as a plain list with the green underline on the page you are on */
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .content-container.site-container{max-width:none;padding:32px var(--sos-gutter) var(--sos-pad)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .entry-content-wrap{padding:0}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .content-bg{background:transparent;box-shadow:none}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(h2,h3){margin:0 0 24px;font-size:40px;line-height:1;font-weight:900;color:var(--sos-ink)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(form.login,form.register,form.lost_reset_password,.cart_totals,#order_review){margin:0;padding:24px;border:0;border-radius:0;background:var(--sos-card);box-shadow:0 6px 20px var(--sos-shadow)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(input.input-text,select,textarea){min-height:48px;box-sizing:border-box;padding:0 16px;border:2px solid var(--sos-ink);border-radius:0;background:var(--sos-field);color:var(--sos-ink)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(label,p,td,th,li){font-size:16px;line-height:1.5;color:var(--sos-ink)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce .required{color:var(--sos-alert)}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(a.button,button.button,input.button,.button){display:inline-flex;align-items:center;justify-content:center;min-height:48px;box-sizing:border-box;padding:0 24px;border:0;border-radius:0;background:var(--sos-ink);color:var(--sos-on-dark);font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-decoration:none}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce :is(.woocommerce-info,.woocommerce-message,.woocommerce-error){margin:0 0 24px;padding:24px;border:0;border-radius:0;background:var(--sos-card);color:var(--sos-ink);font-size:20px;line-height:1.4}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce table.shop_table{border:0;border-radius:0;border-collapse:collapse}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce table.shop_table :is(th,td){padding:12px 0;border:0;border-bottom:1px dotted var(--sos-leader);background:none}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce-MyAccount-navigation ul{margin:0;padding:0;list-style:none}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce-MyAccount-navigation a{display:inline-flex;align-items:center;min-height:44px;font-weight:700;color:var(--sos-ink);text-decoration:none}
:is(.woocommerce-account,.woocommerce-cart,.woocommerce-checkout) .woocommerce-MyAccount-navigation .is-active a{text-decoration:underline solid var(--sos-accent) 2px;text-underline-offset:5px}

/* 22 · Round 43 (v14, 28 Sep 2026): the clone rendered with its real stylesheets for the first time,
   page by page against the prototype. These are the gaps that made it look unfinished. */

/* 22a · Type: the base and heading font (brandon-grotesque, Adobe Fonts kit dox5gsp) is set in the Kadence
   Customiser; this only adds the fallback fonts Kadence leaves off. Form controls do not inherit a font by
   default, so they are told to. Body weight 500 is the Customiser's (Medium 500). */
:root{--global-body-font-family:brandon-grotesque,"Brandon Grotesque",Helvetica,Arial,sans-serif;--global-heading-font-family:var(--global-body-font-family)}
button,input,select,textarea{font-family:inherit}
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.sos-section p,.sos-section li,.sos-section td{font-weight:500}
/* one body size (v15.24, copy sprint B CB-08, overnight pick; Meg's size notes all said the text was too small): body text is 18 from 768 up
   (plain paragraphs keep Kadence's 18; sos-sub, prose, answers, panels and posts come up to it) and 16 on a phone. Lead 20 and every label stay */
@media (max-width:767px){:where(.sos-section) :where(p,li):not(:where(.sos-yes,.sos-no) *){font-size:16px}}
@media (min-width:768px){.sos-sub,.sos-prose p:not([class*="sos-"]),.sos-prose li,.sos-faq details > p,.sos-panel p:not(.sos-label,.sos-link,.sos-prose p),.single-post .single-content > :is(p,ul,ol){font-size:18px}}
.sos-section :is(.sos-label,.sos-marker,.sos-dateline,.sos-caption,strong,b){font-weight:700}
.sos-section td:first-child{font-weight:700}

/* 22b · The header button reads like every other button: capitals, tracked, 48 tall */
#main-header .header-button,.mobile-header-button-wrap .mobile-header-button{
  display:inline-flex;align-items:center;min-height:48px;box-sizing:border-box;padding:0 24px;
  font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;line-height:1;text-decoration:none;
}
.main-navigation .menu > .menu-item > a{font-weight:700}

/* 22c · Footer. Kadence centres a one-column footer row and colours footer links navy, so on the
   navy band the links, the legal line and the Acknowledgement vanished or sat centred. Left aligned,
   white links, two columns on a phone (first full width), the sign-up as one white field with its
   button inside, and on desktop the Acknowledgement left with the legal links right. */
#colophon .sos-footer,#colophon .sos-footer *{text-align:left}
#colophon .sos-footer a:not(.wp-block-button__link),
#colophon .sos-footer .sos-footer-links a,
#colophon .sos-footer .sos-footer-base .sos-link a{color:var(--sos-on-dark)!important}
#colophon .sos-footer .sos-footer-base .sos-link a{text-decoration:underline!important;text-decoration-color:var(--sos-accent)!important;text-decoration-thickness:2px!important;text-underline-offset:5px}
#colophon .sos-footer .sos-footer-links > p + p{margin-top:0!important}
/* the footer sits on the deep navy so a navy closing band above it reads as its own band (v15.10, Meg: "the bottom all melds together") */
#colophon .sos-footer.sos-section{padding-top:48px;padding-bottom:32px;background:var(--sos-deep)}
/* tablet: the logo, dateline and sign-up across the top, the four link columns in one row under it */
@media (min-width:782px) and (max-width:1180px){
  #colophon .sos-footer .sos-footer-cols.wp-block-columns{gap:32px 24px!important}
  #colophon .sos-footer .sos-footer-cols.wp-block-columns > .wp-block-column{flex:1 1 0!important}
  #colophon .sos-footer .sos-footer-cols.wp-block-columns > .wp-block-column:first-child{flex:0 0 100%!important}
}
#colophon .sos-footer .sos-footer-cols{margin:0}
@media (max-width:781px){
  #colophon .sos-footer .sos-footer-cols.wp-block-columns{gap:32px 16px!important}
  #colophon .sos-footer .sos-footer-cols.wp-block-columns > .wp-block-column{flex:0 0 calc(50% - 8px)!important;flex-basis:calc(50% - 8px)!important}
  #colophon .sos-footer .sos-footer-cols.wp-block-columns > .wp-block-column:first-child{flex:0 0 100%!important;flex-basis:100%!important}
  #colophon .sos-footer.sos-section{padding-top:40px;padding-bottom:24px}
}
#colophon .sos-footer .sos-dateline{font-size:12px;letter-spacing:.2em}
/* the Contact column as four icons, each a 44 tap target with its name for screen readers (v15.4) */
#colophon .sos-footer .sos-social-icons{display:grid;grid-template-columns:repeat(2,44px);gap:8px 16px;margin:0 0 0 -10px}
#colophon .sos-footer .sos-social-icons a{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px}
#colophon .sos-footer .sos-social-icons svg{width:24px;height:24px;fill:currentColor}
#colophon .sos-footer .sos-social-icons a:hover svg{fill:var(--sos-accent)}
/* the Gravity Forms sign-up: one white field, the button inside it on the right */
#colophon .sos-footer .gform_wrapper{max-width:380px;margin:0}
#colophon .sos-footer .gform_wrapper .gform_fields{display:flex!important;flex-wrap:nowrap;gap:0!important;background:var(--sos-field)}
#colophon .sos-footer .gform_wrapper .gfield{flex:1 1 auto;min-width:0;margin:0!important;padding:0!important}
#colophon .sos-footer .gform_wrapper .gfield--type-honeypot,
#colophon .sos-footer .gform_wrapper .gfield--type-captcha{display:none!important}
#colophon .sos-footer .gform_wrapper .gfield--type-submit{flex:0 0 auto;display:flex;align-items:stretch}
#colophon .sos-footer .gform_wrapper .gfield_label{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
#colophon .sos-footer .gform_wrapper input[type=email]{width:100%;height:48px;margin:0;padding:0 16px;border:0!important;border-radius:0;background:var(--sos-field);color:var(--sos-ink);font-size:14px;font-weight:500;box-shadow:none}
#colophon .sos-footer .gform_wrapper input[type=email]::placeholder{color:var(--sos-caption);opacity:1}
#colophon .sos-footer .gform_wrapper .gform-button,
#colophon .sos-footer .gform_wrapper button[type=submit]{width:auto!important;height:48px;min-height:48px;margin:0!important;padding:0 16px!important;border:0!important;border-radius:0!important;background:var(--sos-field)!important;color:var(--sos-ink)!important;font-size:12px!important;font-weight:700!important;letter-spacing:.16em;text-transform:uppercase;line-height:1;box-shadow:none!important}
#colophon .sos-footer .gform_wrapper .gform-button:hover{color:var(--sos-deep)!important;text-decoration:underline;text-decoration-color:var(--sos-accent);text-decoration-thickness:2px;text-underline-offset:5px}
#colophon .sos-footer .gform_wrapper .gform_footer{margin:0;padding:0}
#colophon .sos-footer .gform_wrapper .gform_validation_errors,#colophon .sos-footer .gform_wrapper .validation_message{margin:8px 0 0;padding:8px 12px;font-size:14px}
#colophon .sos-footer .gform_confirmation_message{color:var(--sos-on-dark);font-size:16px;font-weight:700}
@media (min-width:782px){
  #colophon .sos-footer .sos-footer-base{display:flex;justify-content:space-between;align-items:flex-end;gap:48px}
  #colophon .sos-footer .sos-footer-base .sos-ack{flex:0 1 60ch;margin:0!important}
  #colophon .sos-footer .sos-footer-base .sos-link{margin-top:0!important;justify-content:flex-end}
}

/* 22d · Hero photos: the pair beside the title fills its column the way the prototype does, the first
   print larger, the second smaller and dropped below it */
@media (min-width:782px){
  .sos-hero .sos-split > .sos-hero-photos:last-child{flex:2 1 0}
  .sos-hero-photos > *:first-child{flex:3 1 0}
  .sos-hero-photos > *:nth-child(2){flex:2 1 0;margin-top:64px}
}

/* 22g · Tablet (782 to 1180, v15.15, Meg: Home at tablet "doesn't look like the prototype"): a hero with a photo pair stacks, the text
   full width first, then the two prints side by side in 3:2, so no tall empty column sits under two small prints. flex-wrap needs
   !important against core's nowrap on columns. */
@media (min-width:782px) and (max-width:1180px){
  .sos-hero .sos-split:has(.sos-hero-photos){flex-wrap:wrap!important}
  .sos-hero .sos-split:has(.sos-hero-photos) > .wp-block-column{flex:1 1 100%}
  .sos-hero-photos .sos-photo img{aspect-ratio:3/2}
}

/* 22f · Photos on a phone: the hero print is landscape (a full-width portrait ran 460 tall), and the
   Home evidence wall keeps its prints to the prototype's proportions on desktop */
@media (max-width:767px){.sos-hero-photos .sos-photo img{aspect-ratio:3/2}}
@media (min-width:782px){
  .sos-wall .sos-photo img{aspect-ratio:3/2}
  .sos-wall .sos-photo.is-portrait img{aspect-ratio:4/5}
  .sos-wall > .wp-block-column:nth-child(1) .sos-photo img{aspect-ratio:4/3}
}
/* 23 · v15 (28 Sep 2026, Meg's tidy pass): forms, a lone hero print, tablet.
   23a · Forms: a split that holds a form stacks under 1100 (heading above, the form at full width); on desktop
   the form takes the wider column and short fields pair up two to a row. Choice cards never break a word. */
@media (min-width:1101px){
  .sos-split:has(.gform_wrapper) > .wp-block-column:first-child{flex:2 1 0}
  .sos-split:has(.gform_wrapper) > .wp-block-column:last-child{flex:3 1 0}
  .sos-section .gform_wrapper.gravity-theme .gform_fields > .gfield:is(.gfield--type-text,.gfield--type-email,.gfield--type-website,.gfield--type-phone,.gfield--type-select){grid-column:span 6}
}
@media (max-width:1100px){
  .sos-split:has(.gform_wrapper){flex-wrap:wrap!important}
  .sos-split:has(.gform_wrapper) > .wp-block-column{flex:1 1 100%!important}
}
.gform_wrapper .sos-choice .gchoice label{word-break:normal;overflow-wrap:normal;hyphens:manual}

/* 23b · One print beside a hero title (the SOS story): larger, tilted a touch, level with the label */
@media (min-width:782px){
  .sos-hero .sos-split:has(> .sos-hero-side > .sos-photo:only-child) > .wp-block-column{flex:1 1 0}
  /* the text sits level with the middle of the print, not above a tall empty space (v15.15, Archive hero) */
  .sos-hero .sos-split:has(> .sos-hero-side > .sos-photo:only-child) > .wp-block-column:first-child{align-self:center}
  .sos-hero .sos-hero-side:has(> .sos-photo:only-child){padding-top:8px}
  .sos-hero .sos-hero-side > .sos-photo:only-child{transform:rotate(2deg)}
}
/* 23c · v15.13 (Meg's note: a red on the cool side of the wheel): required markers and form errors in the
   alert crimson #A8254A (theme A), in place of Gravity Forms' own orange red #C02B0A, which fails AA on the
   page grey. #A8254A reads 6.93:1 on white, 6.03:1 on the card and 4.91:1 on the page grey. */
.gform_wrapper.gravity-theme :is(.gfield_required,.gfield_validation_message,.validation_message,.gform_validation_errors > h2){color:var(--sos-alert)}
.gform_wrapper.gravity-theme :is(.gfield_validation_message,.validation_message,.gform_validation_errors),
.gform_wrapper.gravity-theme .gfield_error [aria-invalid=true]{border-color:var(--sos-alert)}
/* 23d · v15.16 (29 Sep 2026, sprint inbox S13): My ticket 1944, Box Office's [my_ticket] form in the SOS frame. The page's own inline
   style block moved here: labels above their fields, the required mark in the alert crimson (not #cf2e2e), text fields full width to 400. */
.edit-ticket label{display:block;color:var(--sos-ink)}
.edit-ticket .required{color:var(--sos-alert)}
.edit-ticket input[type=text]{width:100%;max-width:400px}
/* 24 · v15.4 (28 Sep 2026, Meg's note on the pop-up): Hustle in the SOS frame. Meg set the Vanilla theme in
   Hustle, which leaves the waitlist pop-up with no panel and Hustle's Open Sans type; this is its whole look,
   and any Hustle embed or slide-in (the mobile bar, row w-27) takes the same. Label above the heading,
   one field per row, the green button. */
.hustle-ui.hustle-popup .hustle-popup-mask{background:color-mix(in srgb,var(--sos-deep) 80%,transparent)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout{background:var(--sos-card);color:var(--sos-ink);font-family:var(--global-body-font-family);box-shadow:0 6px 20px var(--sos-shadow)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-content{padding:32px 32px 0}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-content .hustle-content-wrap{padding:0}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-group-title{display:flex;flex-direction:column-reverse}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-title{margin:0;font:900 40px/.95 var(--global-body-font-family);color:var(--sos-ink)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-subtitle{margin:0 0 8px;font:700 12px/1.2 var(--global-body-font-family);letter-spacing:.2em;text-transform:uppercase;color:var(--sos-caption)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-group-content{margin:16px 0 0;color:var(--sos-ink)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-group-content p:not([class*="forminator-"]){font:500 16px/1.5 var(--global-body-font-family);color:var(--sos-ink)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout-form{padding:24px 32px 32px;background:none}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-form-fields{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-field{margin:0;min-width:0}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-field .hustle-input{box-sizing:border-box;width:100%;height:48px;margin:0;padding:0 16px;border:2px solid var(--sos-ink);border-radius:0;background:var(--sos-field);color:var(--sos-ink);font:500 16px/1 var(--global-body-font-family)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-field .hustle-input-label{padding:0 16px;color:var(--sos-caption);font:500 16px/1 var(--global-body-font-family)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-field .hustle-input-label [class*="hustle-icon-"]{display:none}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form button.hustle-button-submit{width:100%;min-height:48px;margin:8px 0 0;padding:0 24px;border:0;border-radius:0;background:var(--sos-accent);color:var(--sos-deep);font:700 14px/1 var(--global-body-font-family);letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form button.hustle-button-submit:hover{background:var(--sos-accent-hover)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-main-wrapper{padding:0}
.hustle-ui:is(.hustle-popup,.hustle-slidein) .hustle-button-close{position:absolute;top:8px;right:8px;z-index:1;width:44px;height:44px;color:var(--sos-ink)}
.hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-form .hustle-field .hustle-input-label{top:2px;bottom:2px;height:auto;display:flex;align-items:center}
@media (max-width:767px){
  .hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-content{padding:24px 24px 0}
  .hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout-form{padding:16px 24px 24px}
  .hustle-ui:is(.hustle-popup,.hustle-inline,.hustle-slidein) .hustle-layout .hustle-title{font-size:32px}
}
/* 27 · The recap film pop-up (v15.23, Job W6): snippet 74 opens a native dialog carrying theme F's sos-modal from any a.sos-film link.
   The dialog's own frame goes; a bar holds the film's name and the Close film button; the backdrop is the deep navy at 85% */
dialog.sos-modal{max-width:none;max-height:none;border:0;color:var(--sos-on-dark)}
dialog.sos-modal::backdrop{background:color-mix(in srgb,var(--sos-deep) 85%,transparent)}
.sos-film-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 16px}
.sos-film-bar .sos-label{margin:0;color:var(--sos-accent)}
.sos-film-close{padding:0 24px;border:2px solid var(--sos-on-dark);border-radius:0;background:transparent;color:var(--sos-on-dark);font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.sos-film-close:hover{background:var(--sos-on-dark);color:var(--sos-ink)}
/* the placeholder only logged-in editors see (snippet 73, [sos_token] and a price not yet set): a dashed caption-grey tag */
.sos-token{display:inline-block;padding:4px 8px;border:1px dashed var(--sos-caption);color:var(--sos-caption);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;line-height:1.4}
/* ============ end of SOS CORE ============ */
