/* ============================================================
   The public shop page.

   One markup, five themes. The words are identical in every one of
   them -- a theme dresses the page, it never changes what it says --
   so everything here is presentation keyed off [data-shop-theme] on
   the root, and the template stays a single file.

   Poster is the look this page has always had and stays the default:
   nobody's advertised page changes because the app learned new clothes.

   Where a theme wants the tennis season, it reads --accent, which the
   portal already sets from the workshop's own accent choice.
   ============================================================ */

:root {
  --shop-font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI Variable Text",
               "Segoe UI", system-ui, Roboto, "Helvetica Neue", sans-serif;
  --shop-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
  --shop-serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
  --shop-garamond: "Hoefler Text", Garamond, "Times New Roman", serif;

  --shop-bg: #edeceb;
  --shop-surface: #ffffff;
  --shop-line: rgba(0, 0, 0, 0.09);
  --shop-line-strong: rgba(0, 0, 0, 0.14);
  --shop-text: #1d1d1f;
  --shop-text-2: #6e6e73;
  --shop-text-3: #8e8e93;
  --shop-r: 14px;
  --measure: 940px;
  --edge: 22px;
  --shop-shadow: 0 0 0 0.5px var(--shop-line-strong), 0 1px 2px rgba(0, 0, 0, 0.04);

  /*
    The workshop's accent, in both weights every theme needs: --accent for
    a light ground, --accent-bright for a dark one. The same hue at the
    same lightness disappears on one or shouts on the other, so each pair
    is the light/dark pair the rest of the app already ships.
  */
  --accent: #1f6f4f;
  --accent-bright: #46a97d;
  --accent-on: #ffffff;
  --accent-on-bright: #10241b;
  color-scheme: light;
}

:root[data-accent="wimbledon"] { --accent: #5b3a8e; --accent-bright: #a98ad6; --accent-on-bright: #1d1330; }
:root[data-accent="roland_garros"] { --accent: #bd5027; --accent-bright: #e08a5c; --accent-on-bright: #2b1409; }
:root[data-accent="us_open"] { --accent: #1e5aa8; --accent-bright: #5b9be8; --accent-on-bright: #0a1a2e; }
:root[data-accent="australian_open"] { --accent: #0f7f96; --accent-bright: #3fb6cd; --accent-on-bright: #06222a; }

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: var(--shop-font);
  font-size: 16px;
  line-height: 1.45;
  background: var(--shop-bg);
  color: var(--shop-text);
  -webkit-font-smoothing: antialiased;
}

a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

.visually-hidden {
  position: absolute; width: 1px; height: 1px; margin: -1px;
  padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.shop-page { width: 100%; margin: 0 auto; padding: 0 0 48px; }

/*
  One gutter rule serves every theme: a band's background reaches the window
  while its words stop at a readable measure. `max()` keeps the phone edge
  when there is no slack to share.
*/
.shop-page > * { padding-inline: max(var(--edge), calc((100% - var(--measure)) / 2)); }

.shop-language { display: flex; justify-content: flex-end; gap: 8px; padding-block: 14px; }
.shop-language select {
  font-family: inherit; font-size: 14px; min-height: 34px; padding: 4px 8px;
  border-radius: 8px; border: 0.5px solid var(--shop-line-strong);
  background: var(--shop-surface); color: var(--shop-text);
}
.shop-language .button { display: none; }

.shop-hero { padding-block: 6px 26px; }
.shop-eyebrow {
  margin: 0 0 12px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px;
  font-size: 12px; font-weight: 600; letter-spacing: 0.09em;
  text-transform: uppercase; color: var(--accent);
}
/* The surface the tour is on, said out loud beside the workshop's name. */
.shop-season { position: relative; padding-left: 14px; opacity: 0.75; }
.shop-season::before {
  content: ""; position: absolute; left: 0; top: 50%; width: 6px; height: 6px;
  margin-top: -3px; border-radius: 999px; background: currentColor;
}
/* Every headline scales with the window: these are read on a phone in a
   club car park and on a laptop at a kitchen table, and one size cannot
   carry both. */
.shop-headline { margin: 0; font-size: clamp(38px, 7vw, 62px); line-height: 1.02; letter-spacing: -0.03em; font-weight: 600; text-wrap: balance; }
.shop-tagline { margin: 8px 0 0; font-size: 17px; color: var(--shop-text-2); }

/*
  The frame the rest of the app draws, at a size that decorates rather than
  instructs -- the marks are off, so it is a picture of a racquet here.

  Every class the bed macro emits needs a rule, including the ones this page
  never shows: SVG fills an unstyled path black and closes an open one to do
  it, which turns the hoop into a solid blob and the bumper into a cap over
  the crown. Missing exactly these two is what put a black spot on the
  service page.
*/
.shop-racquet-slot { width: 96px; flex-shrink: 0; opacity: 0.5; }
.shop-racquet-slot .racquet-bed { display: block; width: 100%; height: auto; overflow: visible; }
.shop-racquet-slot .bed-mains path { fill: none; stroke: currentColor; stroke-width: 0.8; opacity: 0.34; }
.shop-racquet-slot .bed-crosses path { fill: none; stroke: currentColor; stroke-width: 0.8; opacity: 0.2; }
.shop-racquet-slot .bed-frame { fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; }
.shop-racquet-slot .bed-frame-inner { fill: none; stroke: currentColor; stroke-width: 0.7; opacity: 0.3; }
.shop-racquet-slot .bed-bumper { fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; opacity: 0.75; }
.shop-racquet-slot .bed-wrap { fill: none; stroke: currentColor; stroke-width: 0.6; opacity: 0.34; }
.shop-racquet-slot .bed-mark { display: none; }
.shop-racquet-slot text { display: none; }
.shop-poster-racquet { display: none; }
.shop-court { display: none; }

.shop-section { padding-block: 0; margin: 0 0 18px; }
.shop-section h2:not(.shop-offer-title) {
  margin: 0 0 10px; font-size: 12px; font-weight: 600; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--shop-text-3);
}

.shop-offer-title {
  margin: 0 0 12px;
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: inherit;
}
.shop-highlights { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; }
.shop-prices { margin: 0; display: flex; flex-direction: column; }
.shop-price-row { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
.shop-price-row dt { margin: 0; }
.shop-price-row dd { margin: 0; font-family: var(--shop-mono); font-variant-numeric: tabular-nums; }
.shop-note { margin: 10px 0 0; font-size: 14px; color: var(--shop-text-2); }
.shop-strings { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; }

/* The rate: one figure, its caption, and whatever else is priced. */
.shop-rate-head { display: flex; flex-direction: column; gap: 2px; }
.shop-rate-figure {
  margin: 0; font-family: var(--shop-mono); font-size: 40px; font-weight: 500;
  line-height: 1.05; letter-spacing: -0.02em; font-variant-numeric: tabular-nums;
}
.shop-rate-caption { margin: 0; font-size: 14px; color: var(--shop-text-2); }

/* The figure is the heading in every theme but Poster, which had one. */
/* The figure is the heading. Only Clay keeps a label above it. */
[data-shop-theme="card"] .shop-rate > h2,
[data-shop-theme="season"] .shop-rate > h2 { display: none; }

.shop-act { padding-block: 6px 0; }
.shop-button {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 58px; padding: 0 26px; border-radius: 10px;
  background: var(--accent); color: var(--accent-on);
  font-size: 17px; font-weight: 600; letter-spacing: -0.01em;
}
.shop-button::after { content: "→"; font-weight: 400; }
.shop-button:hover { text-decoration: none; filter: brightness(1.06); }

.shop-contact { padding-block: 22px 0; }
.shop-contact-line { margin: 0; display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 16px; }
.shop-contact-detail { color: var(--accent); }


/* ============================================================
   Card — quiet and exact.

   For the player who wants to know what it costs and whether their
   frame is safe, and wants that in ten seconds. The bed drawing is the
   hero rather than a watermark: it is the one picture this workshop
   owns, it is a picture of the actual job, and nobody else's club page
   has one.
   ============================================================ */

[data-shop-theme="card"] { --measure: 940px; }
[data-shop-theme="card"] body { background: var(--shop-bg); }

[data-shop-theme="card"] .shop-hero {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 260px);
  gap: 30px; align-items: center; padding-block: 10px 30px;
}
[data-shop-theme="card"] .shop-hero-copy { min-width: 0; }
[data-shop-theme="card"] .shop-tagline { font-size: clamp(17px, 2.2vw, 21px); margin-top: 12px; }
[data-shop-theme="card"] .shop-racquet-slot {
  position: static; width: 100%; max-width: 260px; justify-self: end; opacity: 1;
}
[data-shop-theme="card"] .shop-racquet-slot .racquet-bed { width: 100%; height: auto; }
[data-shop-theme="card"] .shop-racquet-slot .bed-frame { stroke-width: 1.2; }

/* The price is the question, so it is the largest thing under the hero. */
[data-shop-theme="card"] .shop-rate {
  background: var(--shop-surface); border-radius: var(--shop-r);
  box-shadow: var(--shop-shadow); overflow: hidden; margin-bottom: 14px;
  padding-inline: 0; margin-inline: max(var(--edge), calc((100% - var(--measure)) / 2));
}
[data-shop-theme="card"] .shop-rate > h2 { display: none; }
[data-shop-theme="card"] .shop-rate-figures {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
}
[data-shop-theme="card"] .shop-rate-head,
[data-shop-theme="card"] .shop-rate-figures .shop-price-row {
  display: flex; flex-direction: column; gap: 6px; padding: 26px 26px 24px; border: 0;
}
[data-shop-theme="card"] .shop-rate-figures .shop-price-row { border-left: 0.5px solid var(--shop-line); }
[data-shop-theme="card"] .shop-rate-figures .shop-prices { display: contents; }
[data-shop-theme="card"] .shop-rate-figure,
[data-shop-theme="card"] .shop-rate-figures .shop-price-row dd {
  order: 2; font-family: var(--shop-font); font-size: clamp(40px, 6vw, 56px); font-weight: 600;
  line-height: 1; letter-spacing: -0.035em; color: var(--shop-text);
}
[data-shop-theme="card"] .shop-rate-caption,
[data-shop-theme="card"] .shop-rate-figures .shop-price-row dt {
  order: 1; font-size: 13px; font-weight: 600; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--accent);
}
[data-shop-theme="card"] .shop-rate .shop-note {
  margin: 0; padding: 14px 26px; border-top: 0.5px solid var(--shop-line);
  font-size: 14px; color: var(--shop-text-2);
}

[data-shop-theme="card"] .shop-section h2:not(.shop-offer-title),
[data-shop-theme="card"] .shop-offer-title {
  font-size: 12px; font-weight: 600; letter-spacing: 0.09em; text-transform: uppercase;
  color: var(--shop-text-3); margin: 0 0 12px;
}
[data-shop-theme="card"] .shop-highlights,
[data-shop-theme="card"] .shop-strings {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px;
}
[data-shop-theme="card"] .shop-highlights li,
[data-shop-theme="card"] .shop-strings li {
  background: var(--shop-surface); border-radius: var(--shop-r); box-shadow: var(--shop-shadow);
  padding: 17px 20px; font-size: 16px; line-height: 1.35;
}
/* A tick, because these are assurances -- the thing the reader is checking. */
[data-shop-theme="card"] .shop-highlights li {
  display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 12px; align-items: start;
}
[data-shop-theme="card"] .shop-highlights li::before {
  content: ""; width: 18px; height: 18px; margin-top: 2px; border-radius: 999px;
  background: var(--accent-wash, rgba(0, 0, 0, 0.06)) no-repeat center / 11px 11px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m3.4 8.4 3 3 6.2-6.6' fill='none' stroke='%231f6f4f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
[data-shop-theme="card"] .shop-string-gauge { font-family: var(--shop-mono); font-size: 14px; color: var(--shop-text-2); }

[data-shop-theme="card"] .shop-act { padding-top: 8px; }
[data-shop-theme="card"] .shop-contact {
  margin-top: 12px; padding-top: 20px; border-top: 0.5px solid var(--shop-line-strong);
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 16px;
}
[data-shop-theme="card"] .shop-contact .shop-eyebrow { margin: 0; }
[data-shop-theme="card"] .shop-contact-line { font-size: 17px; font-weight: 600; }
[data-shop-theme="card"] .shop-contact-detail { font-weight: 400; color: var(--shop-text-2); }

/* ============================================================
   Clay — a poster for the clubhouse wall.

   Read across a room, from a phone held at arm's length in a car park.
   One surface, chalk lines, and numbers big enough that the price is
   settled before you have finished reading the headline.
   ============================================================ */

[data-shop-theme="clay"] {
  --clay: #c2542c; --clay-deep: #a8451f; --cream: #fffaf2; --ink: #241c15;
  --measure: 980px;
  --shop-mono: "IBM Plex Mono", ui-monospace, monospace;
}
[data-shop-theme="clay"] body {
  background: var(--cream); color: var(--ink); font-family: Archivo, system-ui, sans-serif;
}
[data-shop-theme="clay"] a { color: var(--ink); }

[data-shop-theme="clay"] .shop-language,
[data-shop-theme="clay"] .shop-hero { background: var(--clay); color: var(--cream); }
[data-shop-theme="clay"] .shop-language { padding-top: 18px; padding-bottom: 0; }
[data-shop-theme="clay"] .shop-language select {
  font-family: Archivo, sans-serif; font-weight: 600; font-size: 12px; letter-spacing: 0.1em;
  text-transform: uppercase; background: none; color: var(--cream); border-radius: 0;
  border: 1.5px solid rgba(255, 250, 242, 0.45);
}

[data-shop-theme="clay"] .shop-hero { padding-top: 34px; padding-bottom: 46px; position: relative; overflow: hidden; }
/* The chalk: a baseline the headline sits on, tramlines down the edges. */
[data-shop-theme="clay"] .shop-hero::before {
  content: ""; position: absolute; left: 0; right: 0; top: 104px; height: 3px;
  background: rgba(255, 250, 242, 0.45);
}
[data-shop-theme="clay"] .shop-hero::after {
  content: ""; position: absolute; top: 104px; bottom: 0;
  left: max(var(--edge), calc((100% - var(--measure)) / 2));
  right: max(var(--edge), calc((100% - var(--measure)) / 2));
  border-left: 3px solid rgba(255, 250, 242, 0.22);
  border-right: 3px solid rgba(255, 250, 242, 0.22);
}
[data-shop-theme="clay"] .shop-hero-copy { position: relative; z-index: 1; }
[data-shop-theme="clay"] .shop-eyebrow { color: var(--cream); font-weight: 700; letter-spacing: 0.22em; }
[data-shop-theme="clay"] .shop-headline {
  font-size: clamp(54px, 13vw, 128px); line-height: 0.86; letter-spacing: -0.045em;
  font-weight: 800; text-transform: uppercase;
}
[data-shop-theme="clay"] .shop-tagline {
  margin-top: 20px; max-width: 34ch; font-size: clamp(16px, 2.1vw, 20px);
  line-height: 1.45; color: rgba(255, 250, 242, 0.9);
}
[data-shop-theme="clay"] .shop-racquet-slot { display: none; }

/* The scoreline. Two numbers, nothing between them but a rule. */
[data-shop-theme="clay"] .shop-rate { padding-top: 34px; padding-bottom: 30px; margin: 0; }
[data-shop-theme="clay"] .shop-rate > h2 {
  font-weight: 700; font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase;
  color: var(--clay); margin: 0 0 22px;
}
[data-shop-theme="clay"] .shop-rate-figures {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  border-top: 3px solid var(--ink);
}
[data-shop-theme="clay"] .shop-rate-head,
[data-shop-theme="clay"] .shop-rate-figures .shop-price-row {
  display: flex; flex-direction: column; gap: 8px; padding: 24px 0 0; border: 0;
}
[data-shop-theme="clay"] .shop-rate-figures .shop-price-row {
  border-left: 1px solid rgba(36, 28, 21, 0.18); padding-left: 26px;
}
[data-shop-theme="clay"] .shop-rate-figures .shop-prices { display: contents; }
[data-shop-theme="clay"] .shop-rate-figure,
[data-shop-theme="clay"] .shop-rate-figures .shop-price-row dd {
  order: 2; font-family: Archivo, sans-serif; font-weight: 800;
  font-size: clamp(56px, 9vw, 96px); line-height: 0.85; letter-spacing: -0.05em;
}
[data-shop-theme="clay"] .shop-rate-figures .shop-price-row dd { color: var(--clay); }
[data-shop-theme="clay"] .shop-rate-caption,
[data-shop-theme="clay"] .shop-rate-figures .shop-price-row dt {
  order: 1; font-weight: 700; font-size: 11px; letter-spacing: 0.2em;
  text-transform: uppercase; color: rgba(36, 28, 21, 0.6);
}
[data-shop-theme="clay"] .shop-rate .shop-note {
  margin: 22px 0 0; font-family: var(--shop-mono); font-size: 13px; color: rgba(36, 28, 21, 0.6);
}

[data-shop-theme="clay"] .shop-section h2:not(.shop-offer-title),
[data-shop-theme="clay"] .shop-offer-title {
  font-weight: 700; font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase;
  color: var(--clay); margin: 0 0 16px;
}
[data-shop-theme="clay"] .shop-offer { padding-top: 8px; }
[data-shop-theme="clay"] .shop-highlights { counter-reset: clay-item; gap: 0; }
[data-shop-theme="clay"] .shop-highlights li {
  display: grid; grid-template-columns: 42px minmax(0, 1fr); gap: 4px; align-items: baseline;
  padding: 18px 0; border-bottom: 1px solid rgba(36, 28, 21, 0.16);
  font-weight: 600; font-size: clamp(17px, 2.4vw, 22px); line-height: 1.25; letter-spacing: -0.015em;
}
[data-shop-theme="clay"] .shop-highlights li::before {
  counter-increment: clay-item; content: counter(clay-item, decimal-leading-zero);
  font-family: var(--shop-mono); font-weight: 400; font-size: 13px; color: var(--clay);
}
[data-shop-theme="clay"] .shop-strings {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px;
}
[data-shop-theme="clay"] .shop-strings li { display: block; border: 3px solid var(--ink); padding: 18px; }
[data-shop-theme="clay"] .shop-string-name { display: block; font-weight: 700; font-size: 19px; line-height: 1.15; }
[data-shop-theme="clay"] .shop-string-gauge {
  display: block; margin-top: 12px; font-family: var(--shop-mono); font-size: 13px; color: rgba(36, 28, 21, 0.6);
}

[data-shop-theme="clay"] .shop-act { padding-top: 12px; }
[data-shop-theme="clay"] .shop-button {
  border-radius: 0; background: var(--ink); color: var(--cream);
  font-weight: 700; font-size: 18px; letter-spacing: -0.01em; min-height: 66px;
}
[data-shop-theme="clay"] .shop-contact {
  margin-top: 18px; background: var(--clay); color: var(--cream);
  padding-top: 26px; padding-bottom: 26px;
}
[data-shop-theme="clay"] .shop-contact .shop-eyebrow { color: rgba(255, 250, 242, 0.72); margin-bottom: 8px; }
[data-shop-theme="clay"] .shop-contact-line { font-weight: 800; font-size: clamp(22px, 3.4vw, 32px); letter-spacing: -0.03em; }
[data-shop-theme="clay"] .shop-contact-detail { font-family: var(--shop-mono); font-weight: 400; font-size: 15px; color: rgba(255, 250, 242, 0.78); }

/* ============================================================
   Season — dressed for the surface the tour is on.

   The one nobody else has. The ground is the court the tour is playing
   on today, named in words beside the workshop, and it changes four
   times a year on its own. The court's own markings carry the layout:
   the baseline runs under the headline, the service line under the
   price, so the lines mean something rather than decorate.
   ============================================================ */

[data-shop-theme="season"] {
  --measure: 940px;
  --ink: #ffffff;
  --shop-serif: "Instrument Serif", "Iowan Old Style", Georgia, serif;
  --shop-mono: "IBM Plex Mono", ui-monospace, monospace;
}
[data-shop-theme="season"] body {
  background: var(--accent); color: var(--ink);
  font-family: var(--shop-font);
}
[data-shop-theme="season"] a { color: var(--ink); }
[data-shop-theme="season"] .shop-page { position: relative; overflow: hidden; }

/* The court, drawn to its own proportions and cropped rather than
   stretched -- a squashed court reads as arbitrary rectangles. */
[data-shop-theme="season"] .shop-court {
  display: block; position: absolute; inset: 0; opacity: 0.14; pointer-events: none;
}
[data-shop-theme="season"] .shop-court svg { display: block; width: 100%; height: 100%; }
[data-shop-theme="season"] .shop-language,
[data-shop-theme="season"] .shop-hero,
[data-shop-theme="season"] .shop-section,
[data-shop-theme="season"] .shop-act,
[data-shop-theme="season"] .shop-contact { position: relative; }

[data-shop-theme="season"] .shop-language select {
  font-family: var(--shop-mono); font-size: 12px; letter-spacing: 0.06em;
  background: rgba(255, 255, 255, 0.12); color: var(--ink);
  border: 1px solid rgba(255, 255, 255, 0.32); border-radius: 3px;
}

[data-shop-theme="season"] .shop-hero { padding-top: 26px; padding-bottom: 34px; }
[data-shop-theme="season"] .shop-eyebrow {
  font-family: var(--shop-mono); font-weight: 400; font-size: 12px; letter-spacing: 0.16em;
  color: rgba(255, 255, 255, 0.82);
}
[data-shop-theme="season"] .shop-headline {
  font-family: var(--shop-serif); font-weight: 400; font-size: clamp(52px, 11vw, 108px);
  line-height: 0.9; letter-spacing: -0.02em; max-width: 14ch;
}
[data-shop-theme="season"] .shop-tagline {
  margin-top: 18px; max-width: 32ch; font-size: clamp(16px, 2.1vw, 20px);
  line-height: 1.5; color: rgba(255, 255, 255, 0.84);
}
[data-shop-theme="season"] .shop-racquet-slot {
  position: absolute; right: max(var(--edge), calc((100% - var(--measure)) / 2));
  top: 4%; width: min(30%, 230px); opacity: 0.2; color: var(--ink);
}
[data-shop-theme="season"] .shop-racquet-slot .racquet-bed { width: 100%; height: auto; }

/* The scoreline, on the service line. */
[data-shop-theme="season"] .shop-rate {
  padding-top: 26px; padding-bottom: 30px; margin: 0;
  border-top: 1px solid rgba(255, 255, 255, 0.34);
  border-bottom: 1px solid rgba(255, 255, 255, 0.34);
}
[data-shop-theme="season"] .shop-rate-figures {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px 34px;
}
[data-shop-theme="season"] .shop-rate-head,
[data-shop-theme="season"] .shop-rate-figures .shop-price-row {
  display: flex; flex-direction: column; gap: 6px; border: 0; padding: 0;
}
[data-shop-theme="season"] .shop-rate-figures .shop-prices { display: contents; }
[data-shop-theme="season"] .shop-rate-figure,
[data-shop-theme="season"] .shop-rate-figures .shop-price-row dd {
  order: 2; font-family: var(--shop-serif); font-weight: 400;
  font-size: clamp(50px, 8vw, 84px); line-height: 0.86; letter-spacing: -0.02em;
}
[data-shop-theme="season"] .shop-rate-caption,
[data-shop-theme="season"] .shop-rate-figures .shop-price-row dt {
  order: 1; font-family: var(--shop-mono); font-size: 11px; letter-spacing: 0.16em;
  text-transform: uppercase; color: rgba(255, 255, 255, 0.72);
}
[data-shop-theme="season"] .shop-rate .shop-note {
  margin: 20px 0 0; font-family: var(--shop-mono); font-size: 13px; color: rgba(255, 255, 255, 0.72);
}

[data-shop-theme="season"] .shop-section { padding-top: 26px; }
[data-shop-theme="season"] .shop-section h2:not(.shop-offer-title),
[data-shop-theme="season"] .shop-offer-title {
  display: flex; align-items: center; gap: 12px;
  font-family: var(--shop-mono); font-weight: 400; font-size: 11px; letter-spacing: 0.16em;
  text-transform: uppercase; color: rgba(255, 255, 255, 0.72); margin: 0 0 16px;
}
[data-shop-theme="season"] .shop-section h2:not(.shop-offer-title)::after,
[data-shop-theme="season"] .shop-offer-title::after {
  content: ""; flex: 1; height: 1px; background: rgba(255, 255, 255, 0.26);
}
[data-shop-theme="season"] .shop-highlights,
[data-shop-theme="season"] .shop-strings {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0 34px;
}
[data-shop-theme="season"] .shop-highlights li,
[data-shop-theme="season"] .shop-strings li {
  padding: 15px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.22);
  font-size: clamp(16px, 2vw, 19px); line-height: 1.35;
}
[data-shop-theme="season"] .shop-string-name { font-family: var(--shop-serif); font-size: clamp(20px, 2.6vw, 26px); }
[data-shop-theme="season"] .shop-string-gauge { font-family: var(--shop-mono); font-size: 13px; color: rgba(255, 255, 255, 0.72); }

[data-shop-theme="season"] .shop-act { padding-top: 26px; }
[data-shop-theme="season"] .shop-button {
  border-radius: 3px; background: var(--ink); color: var(--accent);
  font-weight: 600; font-size: 18px; min-height: 62px;
}
[data-shop-theme="season"] .shop-contact {
  margin-top: 22px; padding-top: 22px; border-top: 1px solid rgba(255, 255, 255, 0.34);
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 18px;
}
[data-shop-theme="season"] .shop-contact .shop-eyebrow { margin: 0; }
[data-shop-theme="season"] .shop-contact-line { font-family: var(--shop-serif); font-size: clamp(24px, 3.2vw, 32px); }
[data-shop-theme="season"] .shop-contact-detail { font-family: var(--shop-mono); font-size: 14px; color: rgba(255, 255, 255, 0.8); }
