/* Batch 42 (2026-10-04): Tickets route, handoff R2 rows TK-06 to TK-26 and TK-29. Tickets only, loads after batch 34 and after the batch 41 background and motion tokens.
   Sections: A top art float (TK-06 to TK-08), B tree-led hero and band (TK-09 to TK-12, TK-29), C hero photo stage (TK-13 to TK-15),
   D one frame component for every tier (TK-16 to TK-19), E compact bodies and outlined prices (TK-20 to TK-22), F Know before you buy (TK-23 to TK-26).
   Reuses the batch 41 system: .om41-support and the motion tokens (--om41-hero-float-y and -ms). Batch 58 retired the plate (.om41-tree, .om41-plate) and the batch 41 drift script on this route: the wall lives inside the boxes (tree-box-batch58).
   Ruling "Bright and still": the plaid is never dimmed here; every dark layer is local (hero support, heading pool, answer surfaces).
   No ticket, price, time or policy sentence is written here; every string comes from the sales facts through the template. */

/* ---------- A. Top OH10 art: one float-in, once (TK-06 to TK-08) ----------
   The figure is the dedicated artwork wrapper. The art is visible by default. The hidden start state exists only when the head guard added html.rv33-js
   (not for reduced motion, not for ?static=1, not without IntersectionObserver), so no state can leave the art invisible without scripts running. The script
   starts the float when the image is decoded (or after 1.8 s); a CSS failsafe shows the art at rest after 2.2 s if the script never runs.
   The wrapper transforms only (translate, scale, opacity); its box never moves, so the hero below never shifts. */
.ticket-preview .ticket-lead.om42-float{
  --om42-float-y:var(--om41-hero-float-y,32px);--om42-float-ms:var(--om41-hero-float-ms,950ms);
  --om42-float-ease:cubic-bezier(.22,1,.36,1);--om42-float-delay:140ms;--om42-float-scale:.98;
  --om42-lead-gap:40px;
}
@media(max-width:760px){.ticket-preview .ticket-lead.om42-float{--om42-float-y:20px;--om42-lead-gap:28px}}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-lead.om42-float{margin:0 0 var(--om42-lead-gap)!important;padding:12px 0 0}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-lead.om42-float .ticket-intro-wordmark{display:block;width:100%;height:auto;aspect-ratio:2172/724;object-fit:contain}
@keyframes om42-float{from{opacity:0;translate:0 var(--om42-float-y);scale:var(--om42-float-scale)}to{opacity:1;translate:0 0;scale:1}}
@keyframes om42-float-failsafe{to{opacity:1;translate:0 0;scale:1}}
html.rv33-js .ticket-preview .ticket-lead.om42-float:not([data-om42-float="go"]):not([data-om42-float="done"]){
  opacity:0;translate:0 var(--om42-float-y);scale:var(--om42-float-scale);animation:om42-float-failsafe 1ms linear 2200ms forwards}
html.rv33-js .ticket-preview .ticket-lead.om42-float[data-om42-float="go"]{animation:om42-float var(--om42-float-ms) var(--om42-float-ease) var(--om42-float-delay) 1 both}
@media(prefers-reduced-motion:reduce){
  .ticket-preview .ticket-lead.om42-float{animation:none!important;opacity:1!important;translate:none!important;scale:none!important}
}

/* ---------- B. Ornament wall inside the hero box (TK-09, TK-10, TK-11, TK-12, TK-29; corrected in batch 58) ----------
   Batch 58 (2026-10-06, Justin: the wall belongs INSIDE the hero box, not spanning the gutters): the batch 42 plate on the hero region and the band that carried it under the comparison heading
   are gone. Back to front: the root plaid (bright again around the box), the box's own wall layer (z -2, clipped to the box, covers it, drifts with the scroll; assets/tree-box-batch58-20261006.css
   and .js), the directional near-black support on the box (::before, z -1, local to the copy), then the copy and the photo frame. The hero box keeps its red edge. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero{
  --om41-support-radius:11px;--tb58-host-travel:24;position:relative;isolation:isolate;
  margin-bottom:56px!important;background:transparent!important;background-image:none!important;
}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero::before{--om41-support-a:.88;--om41-support-b:.5;--om41-support-angle:100deg;--om41-support-fx:0%;--om41-support-fy:0%}
@media(max-width:767px){
  body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero{margin-bottom:44px!important}
  body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero::before{--om41-support-a:.86;--om41-support-b:.66}
}
/* The comparison section keeps its own stacking level above the hero box. Batch 58: the comparison heading no longer crosses a plate band, so its feathered 90 percent pool is gone; it sits on the bright plaid like the other display headings (red fill, white outline). */
body.om-mvp .ticket-preview #tickets{position:relative;z-index:1}
/* TK-11: "Shopping Party" in the Ohio Made green (mint) Backline script. Weight 400 and no synthesis (the font ships one face), so the eyes stay open; "Pick Your" keeps its red fill and white outline.
   Two older sheets force this span white with !important through selector lists that include an id, so the span carries its own id and this rule outranks them by class count. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro h1>#ticket-shopping-party{color:#68f8b3!important;font-weight:400!important;font-synthesis:none;text-shadow:0 2px 0 rgba(0,0,0,.55),0 0 14px rgba(0,0,0,.5)!important}
/* The red hero boundary is drawn above the wall layer (same 2px red as the other framed boxes, hairline glow); the wall is clipped to the box. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero::after{content:"";position:absolute;inset:-1px;border:2px solid #ef2435;border-radius:12px;pointer-events:none;box-shadow:0 0 18px rgba(239,36,53,.28)}

/* ---------- C. Hero photo stage (TK-13 to TK-15) ----------
   A 4:3 stage with a stable height at every width (aspect-ratio), photos are the baked 4:3 crops of batch 42 (whole heads, headroom recorded per image), cover with the
   per-image focal point set inline (object-position). Crossfade, hold, hover and focus behavior are the existing rotor's; there is no control. */
/* An older sheet sets max-width:none with !important on the stage; it is capped at 560px here so a stacked hero (under 960px) does not grow a 730px photo, and the 1200px file is at least 2x of the largest stage. */
body.om-mvp .ticket-preview .ticket-intro .ticket-intro-photo{width:100%!important;max-width:560px!important;aspect-ratio:4/3;height:auto;margin-inline:auto}
body.om-mvp .ticket-preview .ticket-intro .ticket-intro-photo .approved-event-picture img{width:100%;height:100%;aspect-ratio:4/3;object-fit:cover}
@media(max-width:600px){body.om-mvp .ticket-preview .ticket-intro .ticket-intro-photo{max-width:100%!important}}

/* ---------- D. One frame component for every tier (TK-16 to TK-19) ----------
   Same stage height, border, radius, crop policy, overlay, reveal and hover on OG, VIP, Early Access and General Admission (the four cards differ only by their art).
   Ring: the approved weave tile (journey-weave-tile.jpg) scaled so one check is as wide as the ring (the tile holds two by two checks, so it is drawn at twice the ring width).
   Ring width 16px on a desktop, 10px on a phone. The 3px red edge is the only red frame. Art is contained inside the stage and never cropped by the ring.
   FRAME SLOT (TK-19): .om42-frame-slot is an empty, aria-hidden span reserved for a later approved frame master. Until a master exists it paints nothing. To adopt one, set on .om42-frame:
   --om42-frame-master (the master file as a CSS url function value, written in the new rule and never in this comment, because the package scanner reads every url written in a comment as a real dependency); --om42-frame-slice:<number>; --om42-frame-width:<length> (then drop the ring padding to match). Corners and proportions are kept by border-image slicing. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers{--om42-frame:16px;--om42-stage-h:192px;--t34-lid-h:calc(var(--om42-stage-h) + 2 * (var(--om42-frame) + 3px))}
@media(max-width:899px){body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers{--om42-frame:12px;--om42-stage-h:176px}}
@media(max-width:760px){body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers{--om42-frame:10px;--om42-stage-h:150px}}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-art.om42-frame,
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers :is(#ticket-og,#ticket-vip,#ticket-early,#ticket-general) .ticket-choice-art.om42-frame{
  padding:var(--om42-frame)!important;
  background-color:#c4101f!important;background-repeat:no-repeat,no-repeat,repeat!important;
  background-image:linear-gradient(rgba(0,0,0,.55),rgba(0,0,0,.8)),url('./ticket-og-tree-wide-20260923.webp'),url('./journey-weave-tile.jpg')!important;
  background-size:auto,cover,calc(var(--om42-frame) * 2) calc(var(--om42-frame) * 2)!important;
  background-position:0 0,center,0 0!important;
  background-clip:content-box,content-box,padding-box!important;background-origin:content-box,content-box,padding-box!important}
body.om-mvp .ticket-preview .ticket-choice-art.om42-frame .om42-frame-slot{position:absolute;inset:0;z-index:3;pointer-events:none;border:0 solid transparent;border-image:var(--om42-frame-master,none) var(--om42-frame-slice,30) / var(--om42-frame-width,0px) stretch}
body.om-mvp .ticket-preview .ticket-choice-art.om42-frame .ticket-logo{position:relative;z-index:1;justify-self:center;width:auto!important;max-width:100%!important;height:100%!important;object-fit:contain}

/* ---------- E. Compact bodies, equal rows, outlined prices (TK-20 to TK-22) ----------
   Batch 34 shared one set of row tracks across a card row (subgrid), so a one-line description in one card inherited the two-line height of its neighbour and left a blank band
   before the price. Here the card is a flex column: every block takes its natural height, the paired cards share the tallest card's total height (grid stretch), and Get Tickets
   sits at the bottom of each card (margin-top:auto). Under 900px the cards are one column and keep their own heights. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer],
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice.ticket-choice-og[data-offer]{
  display:flex!important;flex-direction:column;align-items:stretch!important;grid-row:auto!important;grid-template-rows:none!important;--t34-pad:22px}
@media(max-width:899px){body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer],body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice.ticket-choice-og[data-offer]{--t34-pad:18px}}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy{display:flex!important;flex-direction:column;flex:1 1 auto;min-height:0!important;min-width:0;
  /* Batch 19 styled the copy block as its own well (fill, shadow, radius, padding). Batch 34 neutralized that with display:contents, which no longer applies, so the box is reset here: the card is the one box. */
  margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:none!important;box-shadow:none!important}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-date{margin:0 0 8px!important;padding-top:32px;align-self:auto}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-arrival{margin:0 0 18px!important;align-self:auto}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy h3{margin:0 0 14px!important;align-self:auto}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-mood{margin:0 0 18px!important;min-height:0!important}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-price{margin:0 0 18px!important;align-self:flex-start}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-perks{margin:0 0 22px!important;align-self:auto}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-perks li{padding:0 0 12px}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-perks li:last-child{padding-bottom:0}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-action{margin:auto 0 0!important;align-self:stretch;justify-self:auto}
/* A spacer-free way to keep a gap above the button when the benefits are the tallest block: the perks bottom margin (22px) is the minimum, margin-top:auto adds the rest. */
/* Prices: red fill with a white outline on the whole price (dollar sign and decimals), every tier. The stroke is drawn behind the fill (paint-order), so 2.5px of stroke shows
   1.25px outside the letters and the counters stay open; the line box is taller than the glyphs so the outline is never clipped. Amounts come from the sales facts, unchanged. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-price{
  color:#ef2435!important;-webkit-text-stroke:2.5px #fff;paint-order:stroke fill;line-height:1.2!important;padding:2px 3px;font-synthesis:none;text-shadow:none}
@media(max-width:760px){
  body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-price{-webkit-text-stroke:2px #fff}
}

/* ---------- F. Know before you buy: tree labels and plaid answers (TK-23 to TK-26) ----------
   Five paired blocks. Desktop: the label panel is 28 percent of the row (26 to 30 asked) and the answer panel the rest. Label panels: the ornament wall (one master, a different
   crop per row) under a dark overlay, label in the green Backline script in sentence case, two balanced lines allowed. Answer panels: the bright plaid under a near-black
   translucent surface (88 to 56 percent, strongest under the start of the text), white copy in the page sans, the opening rule bold (the template's strong). Under 900px the label sits
   above its answer inside each row, so labels and answers never separate. The rows are the existing definition list: every sentence and link is unchanged. */
body.om-mvp .ticket-preview .ticket-know .ticket-know-list{display:grid;gap:14px;margin:0 0 14px}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row,
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:last-child{
  display:grid;grid-template-columns:minmax(0,1fr);gap:0;padding:0;border:2px solid #ef2435;border-radius:10px;overflow:hidden;align-items:stretch}
@media(min-width:900px){body.om-mvp .ticket-preview .ticket-know .ticket-know-row,body.om-mvp .ticket-preview .ticket-know .ticket-know-row:last-child{grid-template-columns:28% minmax(0,1fr);align-items:stretch}}
body.om-mvp .ticket-preview .ticket-know dt{
  --om42-lx:50%;--om42-ly:50%;display:flex;align-items:center;margin:0;padding:18px 18px;min-width:0;
  font:400 clamp(28px,2.6vw,36px)/1.1 "OMHM Backline",cursive;font-synthesis:none;letter-spacing:0;text-transform:none;text-wrap:balance;color:#68f8b3;
  text-shadow:0 2px 0 rgba(0,0,0,.65),0 0 12px rgba(0,0,0,.6);
  position:relative;isolation:isolate;overflow:hidden;--tb58-host-travel:12;
  background:#050505;
  /* Batch 58: the ornament-wall-b crop and the 64 to 72 percent dark overlay are painted on the label's drift layer (tree-box-batch58-20261006.css), same crop; only the scroll drift is new. */
  border-bottom:2px solid #ef2435}
/* journey-fonts.css forces the page sans on every element inside the journey wrapper with !important, so the script family is restated at the same weight. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dt{font-family:"OMHM Backline",cursive!important;font-weight:400!important}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:nth-child(1) dt{--om42-lx:8%;--om42-ly:12%}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:nth-child(2) dt{--om42-lx:72%;--om42-ly:42%}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:nth-child(3) dt{--om42-lx:24%;--om42-ly:88%}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:nth-child(4) dt{--om42-lx:92%;--om42-ly:18%}
body.om-mvp .ticket-preview .ticket-know .ticket-know-row:nth-child(5) dt{--om42-lx:46%;--om42-ly:64%}
body.om-mvp .ticket-preview .ticket-know dd{
  display:flex;align-items:center;margin:0;padding:16px 18px;min-width:0;
  background:linear-gradient(90deg,rgba(5,5,5,.86) 0%,rgba(5,5,5,.66) 55%,rgba(5,5,5,.5) 100%),url('./journey-weave-tile.jpg') 0 0 / 187px 186px repeat}
body.om-mvp .ticket-preview .ticket-know dd p,body.om-mvp .ticket-preview .ticket-know .ticket-know-row .ticket-children{color:#fff!important;max-width:none!important}
body.om-mvp .ticket-preview .ticket-know dd p strong{color:#fff;font-weight:800}
@media(min-width:900px){
  body.om-mvp .ticket-preview .ticket-know dt{padding:22px 22px;border-bottom:0;border-right:2px solid #ef2435}
  body.om-mvp .ticket-preview .ticket-know dd{padding:22px 24px}
}

/* ---------- G. Wave E walkthrough corrections (2026-10-07, Justin's walkthrough, paste 2: T1 to T4) ----------
   Tickets only (this sheet loads on this route only). Tokens: --ee-stroke is the heavier white outline for every outlined text on the route (the heading rule is min(6px,.1em); the Holiday headings use min(8px,.14em));
   --ee-plaid-w and --ee-plaid-h are the Tickets plaid tile (the base plaid is 187px by 186px and stays that everywhere else).
   Rules that must outrank the batch 58 sheet (it loads after this one) carry html and the journey root classes. */
:root{--ee-stroke:min(8px,.14em);--ee-plaid-w:128px;--ee-plaid-h:127px}

/* T4: a smaller buffalo plaid on this route only. The shared root plaid layer is the batch 41 body::before; only its tile size changes here. The Know before you buy answer panels use the same tile. */
html body.om-mvp::before{background-size:var(--ee-plaid-w) var(--ee-plaid-h)}

/* T1a: hero box. The dark support sits only behind the text column (the first child of the box), feathered on its right and its top and bottom edges, so the wall and the pine read at full strength around the photo
   and past the text. The old box-wide directional support (88 to 50 percent) is replaced. Phone (stacked): the support covers the text block and feathers into the photo area. */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero::before{display:none}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero>div:not(.ticket-intro-art){position:relative}
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero>div:not(.ticket-intro-art)::before{
  content:"";position:absolute;z-index:-1;pointer-events:none;inset:-28px -72px -28px -36px;border-radius:11px 0 0 11px;background:rgba(5,5,5,.7);
  -webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 80px),transparent 100%),linear-gradient(to bottom,transparent 0,#000 24px,#000 calc(100% - 24px),transparent 100%);
  mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 80px),transparent 100%),linear-gradient(to bottom,transparent 0,#000 24px,#000 calc(100% - 24px),transparent 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect}
@media(max-width:959px){
  body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero>div:not(.ticket-intro-art)::before{
    inset:-18px -16px -20px -16px;border-radius:11px 11px 0 0;
    -webkit-mask-image:linear-gradient(to bottom,#000 0,#000 calc(100% - 28px),transparent 100%);mask-image:linear-gradient(to bottom,#000 0,#000 calc(100% - 28px),transparent 100%)}
}

/* T1b: ticket card headers. The 55 to 80 percent black layer over the wall is replaced by a soft pool behind the lockup only; the wall reads at full strength toward the edges. No text lives in this header (the lockup is art). */
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-art.om42-frame,
body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers :is(#ticket-og,#ticket-vip,#ticket-early,#ticket-general) .ticket-choice-art.om42-frame{
  background-image:radial-gradient(ellipse 50% 86% at 50% 50%,rgba(5,5,5,.46) 0%,rgba(5,5,5,.3) 58%,rgba(5,5,5,0) 100%),url('./ticket-og-tree-wide-20260923.webp'),url('./journey-weave-tile.jpg')!important}

/* T2: one heavier white outline on every outlined text of the route (tier names and prices; the h1 and h2 headings moved to the site-wide heading rule in wave F). The stroke is painted behind the fill, so half of it shows outside the letters.
   The Backline dates and the mint "Shopping Party" keep their own look. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview :is(.ticket-offers .ticket-choice[data-offer] .ticket-choice-copy h3,.ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-price){
  -webkit-text-stroke-width:var(--ee-stroke)!important;paint-order:stroke fill!important;stroke-linejoin:round}
/* Wave F (F-T3): the hero, comparison and Know headings (h1 and h2) take the site-wide heading rule (the Home lane global heading sheet, F-H1); the route-only stroke override that fought it is gone. */

body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-copy .ticket-price{padding:3px 4px}
/* Phone: smaller type keeps its counters open (the base heading rule does the same: 0.1em on small type). */
@media(max-width:760px){:root{--ee-stroke:min(8px,.12em)}}

/* T3: Know before you buy. Label panels: the dark layer sits only behind the label text (a per-row column in percent of the panel, the widest the label reaches at 1440 or 390 plus a margin), feathered to the right (no vertical feather: the script line boxes of these labels are nearly as tall as the panels, and the contrast pass measures the whole line box), so the wall reads past the text.
   Answer panels: the dark layer over the plaid is much lighter and the plaid uses the smaller route tile; the white copy stays above 4.5:1 (measured). */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dt{--ee-col:72%;--tb58-shade:linear-gradient(90deg,rgba(5,5,5,.68) 0,rgba(5,5,5,.68) var(--ee-col),rgba(5,5,5,.08) calc(var(--ee-col) + 26%))}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row:nth-child(2) dt{--ee-col:98%}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row:nth-child(3) dt{--ee-col:56%}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row:nth-child(4) dt{--ee-col:36%}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row:nth-child(5) dt{--ee-col:66%}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dd{
  background:linear-gradient(90deg,rgba(5,5,5,.4) 0%,rgba(5,5,5,.3) 55%,rgba(5,5,5,.22) 100%),url('./journey-weave-tile.jpg') 0 0 / var(--ee-plaid-w) var(--ee-plaid-h) repeat}

/* ---------- H. Wave F (2026-10-07 night, Justin's second walkthrough): F-T1 to F-T3 ----------
   Glossary (night amendment): box = 3px black edge, 10px radius; the red edge and the red glow are retired on this route.
   Tickets only (this sheet loads on this route only). The Know panel plaid is panel-scoped (--wf-know-plaid-*); the root plaid token pair (--ee-plaid-*) is not touched. */
:root{--wf-know-plaid-w:56px;--wf-know-plaid-h:55.7px;--wf-mint:#68f8b3;--wf-label-stroke:min(8px,.2em)}

/* F-T3: every box on the route takes the black 3px edge. Hero box: the ::after line is the edge (it also covers the 1px border of the box). */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero{border-color:#000!important;border-radius:10px!important}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-intro.om42-hero::after{inset:-1px;border:3px solid #000;border-radius:10px;box-shadow:none}
/* Ticket cards (hover included: the red glow retires, the 2px lift stays). */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer],
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice.ticket-choice-og[data-offer]{
  border:3px solid #000!important;border-radius:10px!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.12)!important}
@media(hover:hover) and (pointer:fine){
  html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 10px 22px -8px rgba(0,0,0,.6)!important}
}
/* Know before you buy: the box, its five rows and the label divider. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-notes.ticket-know{border:3px solid #000!important;border-radius:10px!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.12)!important}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row,
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know .ticket-know-row:last-child{border:3px solid #000;border-radius:10px}
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dt{border-bottom:3px solid #000}
@media(min-width:900px){
  html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dt{border-bottom:0;border-right:3px solid #000}
}

/* F-T1: card headers (OG, VIP, Early Access, General Admission). The plaid ring is gone: the ornament wall fills the whole header inside a black 3px edge.
   The padding stays so the lockup keeps its breathing room and the header keeps its height (--t34-lid-h). Layers: the soft pool behind the lockup, then the wall. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers .ticket-choice[data-offer] .ticket-choice-art.om42-frame,
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-offers :is(#ticket-og,#ticket-vip,#ticket-early,#ticket-general) .ticket-choice-art.om42-frame{
  border:3px solid #000!important;border-radius:10px!important;background-color:#080808!important;
  background-image:radial-gradient(ellipse 50% 86% at 50% 50%,rgba(5,5,5,.46) 0%,rgba(5,5,5,.3) 58%,rgba(5,5,5,0) 100%),url('./ticket-og-tree-wide-20260923.webp')!important;
  background-repeat:no-repeat!important;background-size:auto,cover!important;
  background-clip:padding-box!important;background-origin:padding-box!important}

/* F-T2: Know before you buy labels. Black fill, mint (#68f8b3) outline painted behind the fill, so the black letters stay whole and the mint shows outside them.
   The older dark text shadow is dropped (it was the legibility aid for the mint fill). */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dt{
  color:#000!important;-webkit-text-fill-color:#000;-webkit-text-stroke:var(--wf-label-stroke) var(--wf-mint);paint-order:stroke fill;stroke-linejoin:round;text-shadow:none!important}
/* Answer panels: a panel-scoped, smaller plaid tile (more than two rows of checks show). Same near-black layer as wave E, so the white copy keeps its contrast. */
html body.om-mvp .omhm26-root.omhm26-journey .ticket-preview .ticket-know dd{
  background:linear-gradient(90deg,rgba(5,5,5,.4) 0%,rgba(5,5,5,.3) 55%,rgba(5,5,5,.22) 100%),url('./journey-weave-tile.jpg') 0 0 / var(--wf-know-plaid-w) var(--wf-know-plaid-h) repeat}
