/* ==========================================================================
   REEGo design system
   Monochrome interface. Photography carries the colour.
   ========================================================================== */

:root {
  --ink: #121212;
  --ink-soft: #3d3d3d;
  --mid: #6f6c66;
  --hairline: #e4e1da;
  --paper: #faf9f6;
  --paper-raised: #f2f0ea;
  --surface: #ffffff;
  --gold: #c08a2d;
  --gold-deep: #8f6516;
  --gold-tint: #f6ecd9;
  --radius: 8px;
  --radius-sm: 6px;
  --shadow:
    0 1px 2px rgba(18, 18, 18, 0.04),
    0 10px 24px rgba(18, 18, 18, 0.06),
    0 24px 48px rgba(18, 18, 18, 0.07);
  --shadow-soft:
    0 1px 3px rgba(18, 18, 18, 0.07),
    0 8px 20px rgba(18, 18, 18, 0.08);

  --serif: "Fraunces", Georgia, serif;
  --sans: "Inter", system-ui, sans-serif;

  --shell: 1240px;
  --gutter: clamp(16px, 4vw, 40px);

  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html { scroll-behavior: smooth; }

/* Background test (Workstream H): clean-white variant vs the creamy paper.
   Toggled from the design lab; the class lands on <html> before first paint. */
html.bg-white {
  --paper: #ffffff;
  --paper-raised: #f5f4f1;
  --hairline: #e9e7e2;
}

body {
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink);
  background: var(--paper);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

::selection { background: var(--ink); color: var(--paper); }

:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }

/* Form fields carry their own focus ring (border + soft halo) */
.field-input:focus-visible,
.otp-box:focus-visible,
.search-bar :focus-visible,
.phone-group :focus-visible,
.ghs-input :focus-visible { outline: none; }

a, button, input, select, textarea, label { touch-action: manipulation; }
a, button { -webkit-tap-highlight-color: transparent; }

[id] { scroll-margin-top: 84px; }

img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
svg { display: block; }

.shell {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* --------------------------------------------------------------------------
   Motion safety
   Cross-document view transitions (the old "drop-in") were removed on
   purpose — navigation is instant. Do not reintroduce them.
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
}

/* --------------------------------------------------------------------------
   Type helpers
   -------------------------------------------------------------------------- */

.display {
  font-family: var(--serif);
  font-weight: 480;
  letter-spacing: 0;
  line-height: 1.04;
}

.micro {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

/* --------------------------------------------------------------------------
   Wordmark
   -------------------------------------------------------------------------- */

.wordmark {
  font-family: var(--serif);
  font-size: 24px;
  font-weight: 600;
  letter-spacing: 0;
  white-space: nowrap;
}

.wordmark-go { font-style: italic; font-weight: 480; }

/* --------------------------------------------------------------------------
   Header
   -------------------------------------------------------------------------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(250, 249, 246, 0.9);
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
  backdrop-filter: blur(14px) saturate(1.4);
  border-bottom: 1px solid var(--hairline);
  transition: box-shadow 0.25s var(--ease-out);
}

/* Once the page scrolls, the header floats — it may cast a shadow */
.site-header.is-scrolled { box-shadow: 0 8px 24px rgba(18, 18, 18, 0.05); }

.header-row {
  display: flex;
  align-items: center;
  gap: 28px;
  min-height: 64px;
  min-width: 0;
}

.site-nav {
  display: flex;
  gap: 24px;
  margin-inline: auto;
  font-weight: 500;
  font-size: 14px;
  min-width: 0;
}

.site-nav a {
  position: relative;
  padding-block: 4px;
  color: var(--ink-soft);
  transition: color 0.15s;
}

.site-nav a:hover,
.site-nav a.is-active { color: var(--ink); }

.site-nav a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 100%;
  bottom: 0;
  border-bottom: 1.5px solid var(--ink);
  transition: right 0.25s var(--ease-out);
}

.site-nav a:hover::after,
.site-nav a.is-active::after { right: 0; }

.nav-runway .live-dot {
  display: inline-block;
  width: 5px;
  height: 5px;
  margin-left: 6px;
  vertical-align: super;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

/* A ring breathes out from the dot instead of the dot blinking —
   quieter, and it reads as "live" rather than "error". */
@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(192, 138, 45, 0.45); }
  70% { box-shadow: 0 0 0 5px rgba(192, 138, 45, 0); }
  100% { box-shadow: 0 0 0 0 rgba(192, 138, 45, 0); }
}

.header-actions {
  display: flex;
  align-items: center;
  gap: 16px;
}

.ghost-link {
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-soft);
}

.ghost-link:hover { color: var(--ink); }

/* --------------------------------------------------------------------------
   Buttons and chips
   -------------------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 40px;
  padding: 9px 18px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  border: 1px solid var(--ink);
  white-space: nowrap;
  transition: background 0.18s, color 0.18s, transform 0.18s var(--ease-out);
}

.btn:hover { transform: translateY(-1px); }
.btn-ink { background: var(--ink); color: var(--paper); }
.btn-ink:hover { background: #000; }
.btn-line { background: transparent; color: var(--ink); }
.btn-line:hover { background: var(--ink); color: var(--paper); }
.btn-paper { background: var(--paper); color: var(--ink); border-color: var(--paper); }

.chip-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding-block: 4px;
  scrollbar-width: none;
}

.chip-row::-webkit-scrollbar { display: none; }

.chip {
  flex: none;
  min-height: 34px;
  padding: 7px 15px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 500;
  color: var(--ink-soft);
  background: var(--paper);
  transition: border-color 0.15s, background 0.15s, color 0.15s;
}

.chip:hover { border-color: var(--ink); color: var(--ink); }
.chip.is-active { background: var(--ink); border-color: var(--ink); color: var(--paper); }

/* --------------------------------------------------------------------------
   Hero
   -------------------------------------------------------------------------- */

.hero { padding-block: 72px 56px; }

.hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(280px, 1fr);
  gap: clamp(32px, 5vw, 72px);
  align-items: center;
}

.hero-title { font-size: clamp(38px, 5.4vw, 60px); }

.hero-title em {
  font-style: italic;
  font-weight: 420;
}

.hero-sub {
  margin-top: 18px;
  max-width: 52ch;
  font-size: 16px;
  color: var(--mid);
}

.search-bar {
  margin-top: 30px;
  display: flex;
  align-items: center;
  max-width: 620px;
  border: 1.5px solid var(--ink);
  border-radius: var(--radius);
  background: #fff;
  overflow: hidden;
  transition: box-shadow 0.18s;
}

.search-bar:focus-within { box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.07); }

.search-scope {
  border: 0;
  background: transparent;
  font: 500 14px var(--sans);
  color: var(--ink-soft);
  padding: 14px 8px 14px 18px;
  outline: none;
  cursor: pointer;
}

.search-bar input {
  flex: 1;
  min-width: 0;
  border: 0;
  padding: 14px 8px;
  font: 400 15px var(--sans);
  background: transparent;
  outline: none;
}

.search-bar input::placeholder { color: var(--mid); }

.search-submit {
  align-self: stretch;
  padding: 0 18px;
  display: grid;
  place-items: center;
}

.search-submit svg { width: 20px; height: 20px; }

.stitch {
  margin-top: 34px;
  width: min(420px, 80%);
  height: 18px;
  overflow: visible;
}

.stitch-path {
  fill: none;
  stroke: var(--ink);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-dasharray: 10 8;
}

.stitch-needle { opacity: 0; }

.stitch.is-animating .stitch-path {
  stroke-dashoffset: 600;
  animation: stitch-draw 2.4s var(--ease-out) forwards;
}

.stitch.is-animating .stitch-needle {
  opacity: 1;
  offset-path: path("M2 9 C 60 2, 120 16, 178 9 S 300 2, 358 9 S 420 16, 418 9");
  animation: needle-run 2.4s var(--ease-out) forwards;
}

@keyframes stitch-draw { to { stroke-dashoffset: 0; } }

@keyframes needle-run {
  from { offset-distance: 0%; }
  95% { opacity: 1; }
  to { offset-distance: 100%; opacity: 0; }
}

.hero-side {
  display: grid;
  gap: 14px;
}

.runway-card {
  position: relative;
  display: block;
  overflow: hidden;
  min-height: 320px;
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.runway-card img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: grayscale(10%);
  transition: transform 0.6s var(--ease-out);
}

.runway-card:hover img { transform: scale(1.04); }

.runway-card-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.05) 30%, rgba(0,0,0,0.72) 100%);
}

.runway-card-body {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 6px;
  min-height: 320px;
  padding: 22px;
  color: #fff;
}

.runway-card-body .micro { color: rgba(255,255,255,0.78); }

.runway-theme {
  font-family: var(--serif);
  font-size: 28px;
  font-weight: 500;
  line-height: 1.1;
}

.runway-meta { font-size: 13px; color: rgba(255,255,255,0.86); }

.runway-cta {
  margin-top: 10px;
  font-size: 14px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.arrow { transition: transform 0.25s var(--ease-out); }
.runway-card:hover .runway-cta .arrow { transform: translateX(4px); }

.promo-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 22px;
  border-radius: var(--radius);
  background: var(--ink);
  color: var(--paper);
}

.promo-card p { font-size: 14px; }
.promo-card strong { font-family: var(--serif); font-size: 16px; font-weight: 500; display: block; }
.promo-card .arrow { flex: none; }
.promo-card:hover .arrow { transform: translateX(4px); }

/* --------------------------------------------------------------------------
   Homepage portals
   -------------------------------------------------------------------------- */

.portals { padding-block: 8px 82px; }

.portals-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 18px;
}

.portal-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

/* Worlds are slots: with one switched off, the rest stretch to fill the row */
.portal-grid--2 { grid-template-columns: repeat(2, 1fr); }
.portal-grid--1 { grid-template-columns: 1fr; }

.portal {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  overflow: hidden;
  background: #fff;
  transition: border-color 0.2s, transform 0.2s var(--ease-out);
}

.portal:hover {
  border-color: var(--ink);
  transform: translateY(-1px);
}

.portal-media {
  display: grid;
  grid-template-columns: 1.6fr 1fr;
  gap: 4px;
  padding: 4px;
  height: 300px;
}

.portal-media img {
  width: 100%;
  height: 100%;
  min-height: 0;
  object-fit: cover;
  border-radius: var(--radius-sm);
  transition: transform 0.6s var(--ease-out), filter 0.4s;
  filter: grayscale(8%);
}

.portal-media .stack {
  display: grid;
  gap: 4px;
  grid-template-rows: 1fr 1fr;
  overflow: hidden;
}

.portal:hover .portal-media img { transform: scale(1.03); filter: grayscale(0%); }

.portal-body { padding: 20px 22px 24px; }

.portal-title {
  font-family: var(--serif);
  font-size: 28px;
  font-weight: 500;
  letter-spacing: 0;
}

.portal-desc {
  margin-top: 6px;
  font-size: 14px;
  color: var(--mid);
  max-width: 34ch;
}

.portal-enter {
  margin-top: 16px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  font-weight: 600;
}

.portal:hover .portal-enter .arrow { transform: translateX(4px); }

/* Challenge winner banner — Forest Green 2 from the design lab */

.winner-banner-section { padding-block: 0 82px; }

.winner-banner {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(240px, 0.85fr);
  min-height: 340px;
  overflow: hidden;
  border-radius: var(--radius);
  background: #1E4D3B;
  color: #fff;
}

.winner-banner-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
  padding: clamp(24px, 4vw, 52px);
}

.winner-banner-copy .micro { color: #fff; opacity: 0.78; }

.winner-banner-title {
  font-family: var(--serif);
  font-weight: 480;
  font-size: clamp(30px, 3.6vw, 46px);
  line-height: 1.05;
}

.winner-banner-sub {
  font-size: 15px;
  color: rgba(255, 255, 255, 0.82);
  max-width: 44ch;
}

.winner-banner-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 16px;
}

.banner-btn {
  display: inline-flex;
  align-items: center;
  min-height: 42px;
  padding: 10px 22px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  border: 1px solid #fff;
  transition: transform 0.18s var(--ease-out), background 0.18s, color 0.18s;
}

.banner-btn:hover { transform: translateY(-1px); }
.banner-btn-solid { background: var(--ink); color: var(--paper); }
.banner-btn-line { color: #fff; }
.banner-btn-line:hover { background: #fff; color: #1E4D3B; }

.winner-banner-media { position: relative; min-height: 260px; }

.winner-banner-media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Homepage rows — horizontally scrolling rails, eBay-style */

.row-section { padding-block: 0 52px; }

.row-head {
  display: flex;
  align-items: flex-end;
  gap: 18px;
  margin-bottom: 16px;
}

/* Title block pushes everything after it (see-all, rail arrows) right */
.row-head > :first-child { margin-right: auto; }

.row-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 27px;
  line-height: 1.1;
}

.row-sub {
  margin-top: 3px;
  font-size: 13.5px;
  color: var(--mid);
}

.row-see-all {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding-bottom: 2px;
  font-size: 14px;
  font-weight: 600;
}

.row-see-all:hover .arrow { transform: translateX(4px); }

.rail {
  display: flex;
  gap: 14px;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  padding-bottom: 8px;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.rail::-webkit-scrollbar { display: none; }

.rail-card {
  flex: none;
  width: 225px;
  scroll-snap-align: start;
}

.rail-media {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.rail-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease-out);
}

.rail-card:hover .rail-media img { transform: scale(1.03); }

.rail-kind {
  display: block;
  margin-top: 10px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.rail-title {
  margin-top: 5px;
  font-family: var(--serif);
  font-size: 16.5px;
  font-weight: 500;
  line-height: 1.25;
}

.rail-kind + .rail-title { margin-top: 3px; }

.rail-sub {
  margin-top: 2px;
  font-size: 13px;
  color: var(--mid);
}

.rail-price {
  margin-top: 5px;
  font-size: 14.5px;
  font-weight: 600;
}

.rail-price small { font-weight: 400; color: var(--mid); }

.occasion {
  flex: none;
  width: 150px;
  scroll-snap-align: start;
  text-align: center;
}

.occasion-media {
  aspect-ratio: 1;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.occasion-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease-out);
}

.occasion:hover .occasion-media img { transform: scale(1.05); }

.occasion span {
  display: block;
  margin-top: 9px;
  font-size: 14px;
  font-weight: 600;
}

/* Interspersed promo banners (ad slot, seasonal slot) */

.home-banner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 0.9fr);
  align-items: center;
  gap: clamp(20px, 3vw, 44px);
  min-height: 260px;
  padding: clamp(24px, 4vw, 48px);
  border-radius: var(--radius);
  overflow: hidden;
}

.home-banner--ink { background: var(--ink); color: var(--paper); }
.home-banner--ink .micro { color: rgba(250, 249, 246, 0.6); }
.home-banner--ink p { color: rgba(250, 249, 246, 0.75); }

.home-banner--tint { background: var(--gold-tint); color: var(--ink); }
.home-banner--tint .micro { color: var(--gold-deep); }
.home-banner--tint p { color: rgba(18, 18, 18, 0.72); }

.home-banner-copy h2 {
  font-family: var(--serif);
  font-weight: 480;
  font-size: clamp(26px, 3vw, 38px);
  line-height: 1.08;
  margin-top: 8px;
}

.home-banner-copy p {
  margin-top: 8px;
  font-size: 14.5px;
  max-width: 46ch;
}

.home-banner-copy .banner-btn { margin-top: 20px; }
.home-banner:hover .banner-btn { transform: translateY(-1px); }

.banner-btn-paper {
  background: var(--paper);
  color: var(--ink);
  border-color: var(--paper);
}

.home-banner-collage {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  align-items: center;
}

.home-banner-collage img {
  width: 100%;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  border-radius: var(--radius-sm);
  transition: transform 0.5s var(--ease-out);
}

.home-banner-collage img.lift { transform: translateY(-14px); }
.home-banner:hover .home-banner-collage img { transform: translateY(-4px); }
.home-banner:hover .home-banner-collage img.lift { transform: translateY(-18px); }

/* --------------------------------------------------------------------------
   Menu overlay — full-screen ink takeover
   -------------------------------------------------------------------------- */

.menu-toggle {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: 40px;
  padding: 9px 16px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  transition: border-color 0.15s;
}

.menu-toggle:hover { border-color: var(--ink); }

.menu-toggle-icon {
  display: grid;
  gap: 4px;
  width: 15px;
}

.menu-toggle-icon span {
  height: 1.5px;
  background: currentColor;
  border-radius: 1px;
}

.menu-overlay {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: flex;
  flex-direction: column;
  background: var(--ink);
  color: var(--paper);
  opacity: 0;
  visibility: hidden;
  overscroll-behavior: contain;
  transition: opacity 0.3s var(--ease-out), visibility 0s linear 0.3s;
}

.menu-overlay.is-open {
  opacity: 1;
  visibility: visible;
  transition: opacity 0.3s var(--ease-out);
}

body.menu-open { overflow: hidden; }

.menu-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 72px;
}

.menu-head .wordmark { color: var(--paper); }

.menu-close {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(250, 249, 246, 0.3);
  border-radius: 50%;
  color: var(--paper);
  transition: border-color 0.15s, transform 0.2s var(--ease-out);
}

.menu-close:hover { border-color: var(--paper); transform: rotate(90deg); }

.menu-close svg {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
}

.menu-worlds {
  display: grid;
  margin-top: 5vh;
}

.menu-worlds a {
  display: flex;
  align-items: baseline;
  gap: 18px;
  padding-block: 8px;
  font-family: var(--serif);
  font-weight: 480;
  font-size: clamp(34px, 6.5vw, 58px);
  line-height: 1.12;
  color: var(--paper);
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 0.45s var(--ease-out), transform 0.45s var(--ease-out), color 0.2s;
}

.menu-overlay.is-open .menu-worlds a { opacity: 1; transform: none; }
.menu-overlay.is-open .menu-worlds a:nth-child(1) { transition-delay: 0.06s; }
.menu-overlay.is-open .menu-worlds a:nth-child(2) { transition-delay: 0.13s; }
.menu-overlay.is-open .menu-worlds a:nth-child(3) { transition-delay: 0.2s; }
.menu-overlay.is-open .menu-worlds a:nth-child(4) { transition-delay: 0.27s; }

.menu-worlds a:hover { font-style: italic; color: var(--gold); }

.menu-num {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: rgba(250, 249, 246, 0.45);
}

.menu-worlds .live-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

.menu-foot {
  margin-top: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px 26px;
  padding-block: 26px;
  border-top: 1px solid rgba(250, 249, 246, 0.16);
}

.menu-foot a {
  font-size: 14px;
  font-weight: 500;
  color: rgba(250, 249, 246, 0.72);
  transition: color 0.15s;
}

.menu-foot a:hover { color: var(--paper); }

/* --------------------------------------------------------------------------
   World pages
   -------------------------------------------------------------------------- */

.world-hero { padding-block: 56px 26px; }
.world-hero .micro { display: block; margin-bottom: 10px; }
.world-title { font-size: 52px; }

.world-lede {
  margin-top: 12px;
  max-width: 56ch;
  font-size: 15px;
  color: var(--mid);
}

.world-lede a {
  text-decoration: underline;
  text-underline-offset: 3px;
  color: var(--ink);
}

/* Two-column hero: title + lede left, one clear call to action right.
   The action fills the space that used to sit empty beside the heading. */
.world-hero-row {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 28px;
  flex-wrap: wrap;
}

/* Copy shrink-wraps to its own text so the action sits right beside it — not
   flung to the far edge — and drops below cleanly as the screen narrows. */
.world-hero-copy { flex: 0 1 auto; min-width: 0; width: fit-content; max-width: 100%; }

.world-hero-btn {
  flex: none;
  min-height: 50px;
  padding: 14px 24px;
  font-size: 15px;
}

.world-hero-btn .arrow { margin-left: 2px; }
.world-hero-btn:hover .arrow { transform: translateX(4px); }

.world-toolbar {
  position: sticky;
  top: 64px;
  z-index: 40;
  background: rgba(250, 249, 246, 0.96);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--hairline);
  padding-block: 12px;
}

.world-body { padding-block: 28px 82px; }

/* --------------------------------------------------------------------------
   Lookbook feed
   -------------------------------------------------------------------------- */

.lookboard-body {
  background: #f5f3ee;
}

.lookboard-shell {
  max-width: 700px;
}

.lookboard-feed {
  display: grid;
  gap: 20px;
}

.feed-card {
  overflow: hidden;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: #fff;
  box-shadow: var(--shadow);
}

.feed-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 12px 14px;
}

.feed-profile {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.feed-profile img {
  width: 42px;
  height: 42px;
  flex: none;
  border-radius: 50%;
  object-fit: cover;
}

.feed-profile span {
  min-width: 0;
  display: grid;
}

.feed-profile strong {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 14px;
}

.feed-profile small {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--mid);
  font-size: 12px;
}

.feed-tag {
  flex: none;
  padding: 5px 9px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink-soft);
}

.feed-media {
  display: block;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--paper-raised);
}

.feed-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.feed-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 14px 0;
}

.feed-action {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 36px;
  min-height: 36px;
  color: var(--ink);
  font-size: 13px;
  font-weight: 600;
}

.feed-action svg {
  width: 21px;
  height: 21px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform 0.2s var(--ease-out);
}

.feed-action.liked svg {
  fill: var(--ink);
  transform: scale(1.08);
}

.feed-action-icon { margin-left: auto; justify-content: flex-end; }

.feed-copy {
  display: block;
  padding: 14px 20px 22px;
}

.feed-copy h2 {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 520;
  line-height: 1.2;
}

.feed-copy p {
  margin-top: 4px;
  color: var(--ink-soft);
  font-size: 14px;
}

/* --------------------------------------------------------------------------
   Card grids
   -------------------------------------------------------------------------- */

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 16px;
}

.tile {
  position: relative;
  display: block;
  min-width: 0;
}

.tile-media {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.tile-media > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease-out);
}

.tile:hover .tile-media > img { transform: scale(1.03); }

.fav-btn {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 4;
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(255,255,255,0.92);
  color: var(--ink);
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 0.2s, transform 0.25s var(--ease-out);
}

.tile:hover .fav-btn,
.fav-btn:focus-visible,
.fav-btn.liked {
  opacity: 1;
  transform: translateY(0);
}

.fav-btn svg {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
}

.fav-btn.liked svg { fill: var(--ink); }

.tile-body {
  display: block;
  padding: 12px 2px 4px;
}

.tile-name {
  font-family: var(--serif);
  font-size: 18px;
  font-weight: 500;
  line-height: 1.25;
}

.tile-sub {
  margin-top: 3px;
  font-size: 13px;
  color: var(--mid);
}

.tile-row {
  margin-top: 8px;
  display: flex;
  justify-content: space-between;
  gap: 10px;
  font-size: 12.5px;
  color: var(--ink-soft);
}

.tile-price {
  font-weight: 600;
  font-size: 15px;
  color: var(--ink);
}

.tile-price small { font-weight: 400; color: var(--mid); }

/* Designers */

.designer-grid {
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}

.designer-tile {
  padding: 0;
}

.designer-media .tile-click {
  position: absolute;
  inset: 0;
  display: block;
}

.carousel-image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transform: scale(1.01);
  transition: opacity 0.22s ease, transform 0.6s var(--ease-out);
}

.carousel-image.is-active {
  opacity: 1;
  transform: scale(1);
}

.designer-tile:hover .carousel-image.is-active { transform: scale(1.03); }

.designer-profile-chip {
  position: absolute;
  top: 10px;
  left: 10px;
  z-index: 3;
  display: flex;
  align-items: center;
  gap: 9px;
  max-width: calc(100% - 64px);
  padding: 7px 9px;
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.94);
  box-shadow: var(--shadow-soft);
}

.designer-profile-chip img {
  width: 34px;
  height: 34px;
  flex: none;
  border-radius: 50%;
  object-fit: cover;
}

.designer-profile-chip span {
  display: grid;
  min-width: 0;
}

.designer-profile-chip strong,
.designer-profile-chip small {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.designer-profile-chip strong { font-size: 13px; }
.designer-profile-chip small { color: var(--mid); font-size: 11px; }

.carousel-btn {
  position: absolute;
  top: 50%;
  z-index: 5;
  width: 36px;
  height: 42px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, 0.94);
  color: var(--ink);
  opacity: 0;
  transform: translateY(-50%);
  transition: opacity 0.18s, transform 0.18s var(--ease-out);
}

.carousel-prev { left: 10px; }
.carousel-next { right: 10px; }

.carousel-btn svg {
  width: 22px;
  height: 22px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.designer-tile:hover .carousel-btn,
.designer-tile:focus-within .carousel-btn {
  opacity: 1;
}

.designer-tile:hover .carousel-prev,
.designer-tile:focus-within .carousel-prev { transform: translate(-2px, -50%); }

.designer-tile:hover .carousel-next,
.designer-tile:focus-within .carousel-next { transform: translate(2px, -50%); }

/* --------------------------------------------------------------------------
   CTA band
   -------------------------------------------------------------------------- */

.cta-band { background: var(--ink); color: var(--paper); }

.cta-band-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding-block: 52px;
  flex-wrap: wrap;
}

.cta-band h2 {
  font-family: var(--serif);
  font-weight: 460;
  font-size: 34px;
  letter-spacing: 0;
}

.cta-band p {
  margin-top: 6px;
  font-size: 14px;
  color: rgba(250,249,246,0.72);
  max-width: 52ch;
}

/* --------------------------------------------------------------------------
   Design lab index
   -------------------------------------------------------------------------- */

.lab { padding-block: 64px; }
.lab-title { font-size: 46px; }
.lab-lede { margin-top: 10px; color: var(--mid); max-width: 60ch; }

.lab-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin-top: 20px;
}

.lab-controls .lab-note { color: var(--mid); font-size: 13px; }

.lab-toggle { display: inline-flex; gap: 8px; }

.lab-list {
  margin-top: 32px;
  border-top: 1px solid var(--hairline);
}

.lab-row {
  display: grid;
  grid-template-columns: minmax(200px, 1.2fr) 100px minmax(0, 2fr);
  gap: 18px;
  align-items: center;
  padding-block: 16px;
  border-bottom: 1px solid var(--hairline);
}

.lab-row a {
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 3px;
}

.lab-row .muted { color: var(--mid); font-weight: 500; }
.lab-note { font-size: 13.5px; color: var(--mid); }

.status {
  justify-self: start;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid var(--ink);
}

.status-review { background: var(--ink); color: var(--paper); }
.status-planned { color: var(--mid); border-color: var(--hairline); }

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */

/* The hem of the page is stitched, like the onboarding thread */
.site-footer {
  border-top: 1px dashed var(--hairline);
  background: var(--paper);
  margin-top: 0;
}

.footer-grid {
  display: grid;
  /* Brand + four nav columns. The fourth is Legal (2026-08-11) — without this
     fifth track it would have wrapped onto an implicit second row under the
     wordmark. The narrower breakpoints below already reflow by count. */
  grid-template-columns: 2fr 1fr 1fr 1fr 1fr;
  gap: 32px;
  padding-block: 48px 36px;
}

.footer-tag {
  margin-top: 10px;
  font-size: 13.5px;
  color: var(--mid);
}

.footer-col h4 {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  margin-bottom: 12px;
}

.footer-col a {
  display: block;
  padding-block: 4px;
  font-size: 14px;
  color: var(--ink-soft);
}

.footer-col a:hover { color: var(--ink); }

.footer-legal {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding-block: 18px;
  border-top: 1px solid var(--hairline);
  font-size: 12.5px;
  color: var(--mid);
}

.footer-legal a {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 960px) {
  .hero { padding-block: 56px 44px; }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-side { grid-template-columns: 1fr 1fr; align-items: stretch; }
  .portal-grid { grid-template-columns: 1fr; }
  .portal-media { height: 240px; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .winner-banner { min-height: 300px; }
}

@media (max-width: 760px) {
  :root { --gutter: 16px; }

  .header-row {
    min-height: 60px;
    justify-content: space-between;
  }

  /* On small screens the menu overlay IS the navigation */
  .site-nav { display: none; }
  .header-actions { margin-left: auto; gap: 10px; }
  .ghost-link { display: none; }
  .btn { min-height: 36px; padding: 8px 13px; font-size: 13px; }
  .menu-toggle { min-height: 36px; padding: 8px 13px; font-size: 13px; }

  .world-toolbar { top: 60px; padding-block: 10px; }
  .world-hero { padding-block: 40px 20px; }
  .world-title { font-size: 40px; }
  .world-hero-row { align-items: stretch; }
  .world-hero-btn {
    width: 100%;
    margin-top: 4px;
  }

  .hero-side { grid-template-columns: 1fr; }

  .search-bar {
    display: grid;
    grid-template-columns: 1fr auto;
  }

  .search-scope {
    grid-column: 1 / -1;
    width: 100%;
    padding: 12px 14px;
    border-bottom: 1px solid var(--hairline);
  }

  .search-bar input { padding: 13px 14px; }
  .search-submit { min-width: 52px; }

  .runway-card,
  .runway-card-body { min-height: 280px; }

  .winner-banner { grid-template-columns: 1fr; }
  .winner-banner-media { order: -1; min-height: 240px; }
  .winner-banner-section { padding-block: 0 56px; }

  .home-banner { grid-template-columns: 1fr; min-height: 0; }
  .home-banner-collage img.lift,
  .home-banner:hover .home-banner-collage img.lift { transform: translateY(-6px); }

  .card-grid,
  .designer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  .carousel-btn,
  .fav-btn {
    opacity: 1;
    transform: none;
  }

  .carousel-btn { transform: translateY(-50%); }
  .designer-tile:hover .carousel-prev,
  .designer-tile:focus-within .carousel-prev,
  .designer-tile:hover .carousel-next,
  .designer-tile:focus-within .carousel-next { transform: translateY(-50%); }
}

@media (max-width: 560px) {
  .header-actions .ghost-link, .header-actions .btn-ink { display: none; }
  .hero { padding-block: 38px 34px; }
  .hero-sub { font-size: 15px; }
  .stitch { width: 100%; }
  .portal-media { height: 210px; }
  .portal-body { padding: 18px; }
  .portal-title { font-size: 25px; }

  .row-title { font-size: 22px; }
  .row-sub { font-size: 12.5px; }
  .rail-card { width: 180px; }
  .occasion { width: 122px; }
  .row-section { padding-block: 0 40px; }

  .lookboard-shell { padding-inline: 10px; }
  .feed-card { box-shadow: none; }
  .feed-head { padding-inline: 12px; }
  .feed-media { aspect-ratio: 3 / 4; }
  .feed-copy h2 { font-size: 19px; }

  .card-grid,
  .designer-grid { grid-template-columns: 1fr; }

  .tile-row { flex-wrap: wrap; }
  .footer-grid { grid-template-columns: 1fr; gap: 22px; }
  .footer-legal { flex-direction: column; }
  .lab-row { grid-template-columns: 1fr; gap: 6px; }
}

/* ==========================================================================
   Workstream A — Auth & onboarding
   Join, sign in, OTP, business + customer onboarding, dashboard stub.
   Tokens only, one easing (--ease-out). All motion here is disabled by the
   global prefers-reduced-motion rule near the top of this file; every element
   rests in its visible state so nothing disappears when motion is off.
   ========================================================================== */

@keyframes reveal-up {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}

@keyframes otp-tick {
  0% { transform: scale(0.9); }
  55% { transform: scale(1.07); }
  100% { transform: scale(1); }
}

@keyframes onb-shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-5px); }
  75% { transform: translateX(5px); }
}

/* Header — signed-in avatar chip + sign out */

.avatar-chip {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: 40px;
  padding: 4px 15px 4px 4px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  transition: border-color 0.15s, transform 0.18s var(--ease-out);
}

.avatar-chip:hover { border-color: var(--ink); transform: translateY(-1px); }
/* author display:inline-flex would otherwise defeat the [hidden] toggle */
.avatar-chip[hidden] { display: none; }

.avatar-initial {
  width: 32px;
  height: 32px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--serif);
  font-size: 15px;
  font-weight: 500;
}

.menu-signout {
  font-size: 14px;
  font-weight: 500;
  color: rgba(250, 249, 246, 0.72);
  transition: color 0.15s;
}

.menu-signout:hover { color: var(--paper); }

/* Auth page shell + editorial side panel */

.auth { padding-block: clamp(28px, 5vw, 60px) 72px; }

.auth-split {
  display: grid;
  grid-template-columns: minmax(0, 460px) minmax(0, 520px);
  justify-content: center;
  gap: clamp(28px, 5vw, 72px);
  align-items: center;
}

.auth-main { width: 100%; }

.auth-head { margin-bottom: 22px; }
.auth-head-tight { margin-bottom: 16px; }
.auth-head .micro { display: block; margin-bottom: 12px; }

.auth-title { font-size: clamp(30px, 4.5vw, 40px); }

.auth-lede {
  margin-top: 10px;
  color: var(--mid);
  font-size: 15px;
}

.auth-lede strong { color: var(--ink); font-weight: 600; }

.auth-aside {
  position: relative;
  height: clamp(440px, 62vh, 560px);
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}

.auth-aside img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: grayscale(8%);
}

.auth-aside-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.04) 40%, rgba(0, 0, 0, 0.66) 100%);
}

.auth-aside-body {
  position: absolute;
  inset: auto 0 0 0;
  padding: 26px;
  color: #fff;
}

.auth-aside-body .micro { color: rgba(255, 255, 255, 0.8); display: block; margin-bottom: 8px; }

.auth-aside-line {
  font-family: var(--serif);
  font-size: 24px;
  font-weight: 500;
  line-height: 1.15;
}

/* Role chooser cards (staggered entrance) */

.role-list { display: grid; gap: 12px; }

.role-card {
  position: relative;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 15px 18px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  cursor: pointer;
  transition: border-color 0.18s, background 0.18s, box-shadow 0.2s, transform 0.18s var(--ease-out);
  animation: reveal-up 0.5s var(--ease-out) both;
}

.role-card:nth-child(1) { animation-delay: 0.04s; }
.role-card:nth-child(2) { animation-delay: 0.1s; }
.role-card:nth-child(3) { animation-delay: 0.16s; }

.role-card:hover { border-color: var(--ink); }

.role-card input {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
}

.role-card:focus-within {
  border-color: var(--ink);
  box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06);
}

.role-card.is-selected {
  border-color: var(--ink);
  box-shadow: 0 10px 30px rgba(18, 18, 18, 0.07);
}

.role-icon {
  flex: none;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--paper-raised);
  transition: background 0.18s;
}

.role-icon svg {
  width: 22px;
  height: 22px;
  fill: none;
  stroke: var(--ink);
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: stroke 0.18s;
}

.role-card.is-selected .role-icon { background: var(--ink); }
.role-card.is-selected .role-icon svg { stroke: var(--paper); }

.role-text { flex: 1 1 auto; display: grid; gap: 2px; min-width: 0; }
.role-name { font-family: var(--serif); font-size: 18px; font-weight: 500; }
.role-desc { font-size: 13px; color: var(--mid); }

.role-check {
  flex: none;
  width: 24px;
  height: 24px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  border: 1.5px solid var(--hairline);
  transition: background 0.18s, border-color 0.18s;
}

.role-check svg {
  width: 14px;
  height: 14px;
  fill: none;
  stroke: var(--paper);
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0;
  transition: opacity 0.18s;
}

.role-card.is-selected .role-check { background: var(--ink); border-color: var(--ink); }
.role-card.is-selected .role-check svg { opacity: 1; }

/* Primary auth button + form scaffolding */

.auth-submit { width: 100%; margin-top: 22px; }
.auth-submit[disabled] { opacity: 0.45; cursor: not-allowed; }
.auth-submit[disabled]:hover { transform: none; }

.auth-form { display: grid; gap: 16px; }

.field { display: grid; gap: 8px; }

.field-label {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.field-input {
  width: 100%;
  min-height: 48px;
  padding: 13px 16px;
  border: 1.5px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  font: 400 15px var(--sans);
  color: var(--ink);
  transition: border-color 0.18s, box-shadow 0.18s;
}

.field-input::placeholder { color: var(--mid); }
.field-input:hover { border-color: var(--ink-soft); }
.field-input:focus {
  outline: none;
  border-color: var(--ink);
  box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06);
}

select.field-input {
  appearance: none;
  cursor: pointer;
  padding-right: 42px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236f6c66' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 16px;
}

.field.is-invalid .field-input,
.is-invalid { animation: onb-shake 0.3s var(--ease-out); }
.is-invalid.field-input,
.field-input.is-invalid { border-color: var(--ink); box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.08); }

/* Phone number group */

.phone-group {
  display: flex;
  align-items: stretch;
  border: 1.5px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
  transition: border-color 0.18s, box-shadow 0.18s;
}

.phone-group:focus-within {
  border-color: var(--ink);
  box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06);
}

.phone-cc {
  display: flex;
  align-items: center;
  padding: 0 14px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  background: var(--paper-raised);
  border-right: 1px solid var(--hairline);
}

.phone-group .field-input { border: 0; border-radius: 0; box-shadow: none; }
.phone-group .field-input:focus { box-shadow: none; }

/* OTP boxes */

/* ⚑ W12-16 · `min-width: 0` here is load-bearing, not tidying. Owner report,
   2026-08-07: on /join/verify/ the six boxes and the Confirm button ran off
   the page and under the aside image, on wide AND narrow screens.

   Measured in a browser rather than reasoned about: the column (.auth-main)
   and the form (.auth-form) were a correct 460px and .otp was **1944px**.
   .auth-form is `display: grid`, so .otp is a grid ITEM, and grid items
   default to `min-width: auto` — their min-content size. The min-content
   size of a flex row whose items are `flex-grow: 1` is not the sum of their
   minimums; it is (largest max-content contribution ÷ flex-grow) × Σ
   flex-grow. Each box's max-content contribution is an <input>'s default
   intrinsic width at this rule's 28px serif — 314px — so the row demanded
   6 × 314 + gaps = 1944px and the track was floored there. The boxes' own
   `flex: 1 1 0; min-width: 0` never got a chance: they WERE filling their
   container. The container was wrong.

   Which is why it showed on this one screen. Everywhere else the partial
   sits in a plain block, whose width is just the column's; W12-2 put it
   inside .auth-form, and a grid consults intrinsic sizes where a block never
   does. Both lines below, so the same trap cannot re-open one level down. */

.otp { margin-top: 4px; min-width: 0; }

.otp-boxes { display: flex; gap: clamp(6px, 2.5vw, 12px); min-width: 0; }

.otp-box {
  flex: 1 1 0;
  min-width: 0;
  height: clamp(52px, 14vw, 62px);
  text-align: center;
  font-family: var(--serif);
  font-size: clamp(22px, 6vw, 28px);
  font-weight: 500;
  color: var(--ink);
  border: 1.5px solid var(--hairline);
  border-radius: var(--radius-sm);
  background: var(--surface);
  transition: border-color 0.18s, box-shadow 0.18s, background 0.18s;
}

.otp-box:focus {
  outline: none;
  border-color: var(--ink);
  box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06);
}

.otp-box.is-filled {
  border-color: var(--ink);
  animation: otp-tick 0.28s var(--ease-out);
}

.otp-hint { margin-top: 14px; font-size: 13px; color: var(--mid); }

/* JS-injected auth error line (real /api/v1/ failures — backend W1) */
.auth-error {
  margin: 0 0 14px;
  font-size: 13px;
  font-weight: 600;
  color: #8a2020;
}

/* Small inline text button (resend, change number, back) */

.link-btn {
  display: inline;
  padding: 0;
  font: inherit;
  font-weight: 600;
  color: var(--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  cursor: pointer;
  transition: color 0.15s;
}

.link-btn:hover { color: var(--ink-soft); }

/* "or" divider + alt links */

.auth-or {
  display: flex;
  align-items: center;
  gap: 14px;
  margin: 22px 0;
  color: var(--mid);
}

.auth-or::before,
.auth-or::after { content: ""; flex: 1; height: 1px; background: var(--hairline); }

.auth-or span {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.auth-alt { margin-top: 22px; font-size: 14px; color: var(--mid); }
.auth-alt a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
.auth-alt-sep { margin: 0 8px; color: var(--hairline); }

/* Social buttons (monochrome outline) */

.social-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }

.social-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 500;
  color: var(--ink);
  background: var(--surface);
  transition: border-color 0.15s, transform 0.18s var(--ease-out);
}

.social-btn:hover { border-color: var(--ink); transform: translateY(-1px); }
.social-btn svg { width: 18px; height: 18px; fill: var(--ink); flex: none; }

/* Sign-in method tabs */

.auth-tabs {
  display: inline-flex;
  gap: 4px;
  padding: 4px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  margin-bottom: 24px;
}

.auth-tab {
  min-height: 36px;
  padding: 8px 24px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  color: var(--mid);
  transition: background 0.18s, color 0.18s;
}

.auth-tab.is-active { background: var(--ink); color: var(--paper); }

/* --------------------------------------------------------------------------
   Onboarding — business setup + customer preferences
   -------------------------------------------------------------------------- */

.onb-shell { max-width: 620px; }
.onb { padding-block: clamp(20px, 4vw, 40px) 0; }

/* Progress indicator drawn as a thin stitch line with step nodes */

.onb-progress {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  margin-bottom: clamp(26px, 5vw, 44px);
}

.onb-node {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  text-align: center;
}

/* author display:flex would otherwise defeat the [hidden] role filter */
.onb-node[hidden] { display: none; }

.onb-node i {
  position: relative;
  z-index: 1;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--paper);
  border: 2px solid var(--hairline);
  transition: background 0.25s, border-color 0.25s, box-shadow 0.25s;
}

.onb-node em {
  font-style: normal;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  transition: color 0.25s;
}

/* the stitch connector into each node from the previous one */
.onb-node::before {
  content: "";
  position: absolute;
  top: 5px;
  right: 50%;
  width: 100%;
  height: 0;
  border-top: 2px dashed var(--hairline);
  z-index: 0;
  transition: border-color 0.25s;
}

.onb-node:first-child::before { display: none; }

.onb-node.is-complete i { background: var(--ink); border-color: var(--ink); }
.onb-node.is-complete em { color: var(--ink-soft); }
.onb-node.is-complete::before,
.onb-node.is-current::before { border-top-style: solid; border-color: var(--ink); }

.onb-node.is-current i {
  background: var(--surface);
  border-color: var(--ink);
  box-shadow: 0 0 0 4px rgba(18, 18, 18, 0.06);
}

.onb-node.is-current em { color: var(--ink); }

/* Steps */

.onb-step { animation: reveal-up 0.45s var(--ease-out) both; }
.onb-step > .micro { display: block; }
.onb-title { font-size: clamp(28px, 4.5vw, 38px); margin-top: 10px; }
.onb-lede { margin-top: 10px; color: var(--mid); max-width: 48ch; }

.onb-chips {
  flex-wrap: wrap;
  overflow: visible;
  margin-top: 22px;
}

.onb-chips.is-invalid { border-radius: var(--radius); }

.onb-actions {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-top: 30px;
  flex-wrap: wrap;
}

.onb-actions .auth-submit { width: auto; margin-top: 0; flex: 1 1 auto; }
.onb-back { color: var(--mid); }

/* Location placeholder — a tasteful static map stand-in, never a broken map */

.map-placeholder {
  position: relative;
  height: 150px;
  margin-bottom: 18px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}

.map-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(var(--hairline) 1px, transparent 1px),
    linear-gradient(90deg, var(--hairline) 1px, transparent 1px);
  background-size: 34px 34px;
  opacity: 0.7;
}

.map-pin {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -110%);
}

.map-pin svg { width: 30px; height: 30px; fill: var(--ink); }
.map-pin circle { fill: var(--paper); }

.map-tag {
  position: absolute;
  top: calc(50% + 6px);
  left: 50%;
  transform: translateX(-50%);
  padding: 3px 11px;
  border-radius: 999px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
}

/* Final "page is live" / "all set" moment */

.live-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  border-radius: 999px;
  background: var(--gold-tint);
  color: var(--gold-deep);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.live-badge .live-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

.onb-final-title { font-size: clamp(34px, 6.5vw, 54px); margin-top: 16px; line-height: 1.04; }
.onb-final-title em { font-style: italic; font-weight: 420; }
.onb-final-lede { margin-top: 14px; }
.onb-actions-final { margin-top: 28px; }
.onb-actions-final .auth-submit { flex: 0 0 auto; }

/* --------------------------------------------------------------------------
   Dashboard stub
   -------------------------------------------------------------------------- */

.dash { padding-block: clamp(56px, 9vw, 108px); }
.dash-inner { max-width: 720px; margin-inline: auto; text-align: center; }
.dash .micro { display: block; margin-bottom: 14px; }
.dash-title { font-size: clamp(38px, 7vw, 62px); }
.dash-title em { font-style: italic; font-weight: 420; }

.dash-lede {
  margin-top: 16px;
  margin-inline: auto;
  max-width: 48ch;
  color: var(--mid);
  font-size: 16px;
}

.dash-stitch { margin: 30px auto 0; width: min(420px, 90%); }

.dash-worlds {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: 44px;
  text-align: left;
}

.dash-world {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  transition: border-color 0.2s, transform 0.2s var(--ease-out);
}

.dash-world:hover { border-color: var(--ink); transform: translateY(-1px); }
.dash-world-num { font-size: 12px; font-weight: 600; letter-spacing: 0.14em; color: var(--mid); }
.dash-world-name { font-family: var(--serif); font-size: 20px; font-weight: 500; }

.dash-world-go {
  margin-top: 8px;
  font-size: 13px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.dash-world:hover .dash-world-go .arrow { transform: translateX(4px); }

.dash-foot { margin-top: 36px; }
.dash-foot a { font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

/* --------------------------------------------------------------------------
   Auth & onboarding — responsive
   -------------------------------------------------------------------------- */

@media (max-width: 760px) {
  .auth-split { grid-template-columns: minmax(0, 1fr); justify-content: stretch; }
  .auth-main { max-width: 480px; margin-inline: auto; }
  .auth-aside { display: none; }
  .dash-worlds { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
  .social-btn span { display: none; }
  .social-btn { padding: 10px; }
  .otp-boxes { gap: 6px; }
  .onb-node em { display: none; }
  .avatar-chip-label { display: none; }
  .avatar-chip { padding: 4px; }
}

/* ==========================================================================
   Workstream B + D — Lookbook depth + detail pages
   Look / designer / product / seller detail, save-to-Closet controls, the
   post composer, toasts, heart-burst, lightbox and gallery. Tokens only, one
   easing (--ease-out), durations 0.15-0.6s. All motion sits under the global
   prefers-reduced-motion rule near the top of this file.
   ========================================================================== */

@keyframes heart-burst {
  0% { opacity: 0; transform: scale(0.6); }
  30% { opacity: 0.95; transform: scale(1.05); }
  60% { opacity: 0.9; transform: scale(1); }
  100% { opacity: 0; transform: scale(1.12); }
}

@keyframes toast-in {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: none; }
}

/* Composer trigger styled as the world-lede inline link */
.world-lede-link {
  font: inherit;
  color: var(--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  cursor: pointer;
}
.world-lede-link:hover { color: var(--ink-soft); }

/* --------------------------------------------------------------------------
   Save-to-Closet control (bookmark) on media — cards, feed, rails
   -------------------------------------------------------------------------- */

.feed-media, .feed-media-static { position: relative; }
.rail-media { position: relative; }
.feed-media-static { cursor: default; }

.save-btn {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 4;
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.92);
  color: var(--ink);
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 0.2s, transform 0.25s var(--ease-out);
}

.rail-card:hover .save-btn,
.feed-media:hover .save-btn,
.feed-card:hover .save-btn,
.save-btn:focus-visible,
.save-btn.is-saved { opacity: 1; transform: translateY(0); }

.save-btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linejoin: round; }
.save-btn.is-saved svg { fill: var(--ink); }

/* --------------------------------------------------------------------------
   Shared detail-page scaffolding
   -------------------------------------------------------------------------- */

.detail { padding-block: clamp(20px, 4vw, 40px) clamp(56px, 8vw, 96px); }

.detail-back {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--mid);
}
.detail-back:hover { color: var(--ink); }
.detail-back .arrow { transition: transform 0.25s var(--ease-out); }
.detail-back:hover .arrow { transform: translateX(-3px); }

.detail-section-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(22px, 3vw, 28px);
  line-height: 1.1;
  margin-bottom: 16px;
  display: flex;
  align-items: baseline;
  gap: 10px;
}
.detail-count { font-family: var(--sans); font-size: 14px; font-weight: 600; color: var(--mid); }

.detail-related { margin-top: clamp(40px, 6vw, 68px); }

/* Detail action buttons (pill, icon + label) */
.detail-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 22px; }

.detail-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 40px;
  padding: 9px 16px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
  transition: border-color 0.18s, background 0.18s, color 0.18s, transform 0.18s var(--ease-out);
}
.detail-btn:hover { border-color: var(--ink); transform: translateY(-1px); }

.detail-btn svg {
  width: 19px;
  height: 19px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform 0.2s var(--ease-out);
}

.detail-btn.liked { border-color: var(--ink); }
.detail-btn.liked svg { fill: var(--ink); transform: scale(1.06); }
.detail-btn.is-saved { border-color: var(--ink); }
.detail-btn.is-saved svg { fill: var(--ink); }

.detail-btn-icon { padding: 9px 12px; }
.detail-btn-icon svg { width: 20px; height: 20px; }

/* Overflow "..." menu */
.overflow { position: relative; }

.overflow-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  z-index: 20;
  min-width: 180px;
  padding: 6px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: var(--shadow);
}

.overflow-item {
  display: block;
  width: 100%;
  text-align: left;
  padding: 10px 12px;
  border-radius: var(--radius-sm);
  font-size: 13.5px;
  font-weight: 500;
  color: var(--ink-soft);
  transition: background 0.15s, color 0.15s;
}
.overflow-item:hover { background: var(--paper-raised); color: var(--ink); }

/* --------------------------------------------------------------------------
   Look detail
   -------------------------------------------------------------------------- */

.look-detail-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: clamp(20px, 4vw, 52px);
  align-items: start;
  margin-top: 18px;
}

.look-detail-media {
  position: relative;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}
.look-detail-media img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; }

.heart-burst {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 104px;
  height: 104px;
  margin: -52px 0 0 -52px;
  display: grid;
  place-items: center;
  opacity: 0;
  transform: scale(0.6);
  pointer-events: none;
}
.heart-burst svg { width: 104px; height: 104px; fill: var(--gold); }
.heart-burst.is-bursting { animation: heart-burst 0.6s var(--ease-out) forwards; }

.look-detail-panel { position: sticky; top: 88px; }

.look-detail-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 16px;
}
.look-detail-author img { width: 46px; height: 46px; }
.look-detail-author strong { font-size: 15px; }

.look-detail-title { font-size: clamp(30px, 4.5vw, 44px); }
.look-detail-caption { margin-top: 12px; font-size: 16px; color: var(--ink-soft); max-width: 42ch; }
.look-detail-hint { margin-top: 16px; font-size: 12.5px; color: var(--mid); }

/* Comments */
.look-comments { margin-top: clamp(40px, 6vw, 64px); max-width: 640px; }
.comment-list { display: grid; gap: 18px; }
.comment { display: flex; gap: 12px; }
.comment-avatar { width: 40px; height: 40px; flex: none; border-radius: 50%; object-fit: cover; }
.comment-body { min-width: 0; }
.comment-meta { font-size: 13px; }
.comment-meta strong { font-weight: 600; }
.comment-meta span { margin-left: 8px; color: var(--mid); font-size: 12px; }
.comment-text { margin-top: 2px; font-size: 14.5px; color: var(--ink-soft); }
.comment-note { margin-top: 22px; font-size: 12.5px; color: var(--mid); }

/* --------------------------------------------------------------------------
   Designer profile
   -------------------------------------------------------------------------- */

.profile-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(20px, 4vw, 52px);
  align-items: center;
  margin-top: 18px;
}

.profile-hero {
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}
.profile-hero img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; }

.profile-info .micro { display: block; margin-bottom: 10px; }
.profile-name { font-size: clamp(32px, 5vw, 50px); }
.profile-loc { margin-top: 8px; font-size: 15px; color: var(--mid); }

.profile-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 22px;
  margin-top: 18px;
  padding-block: 16px;
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
  font-size: 13px;
  color: var(--mid);
}
.profile-stat strong { font-family: var(--serif); font-size: 19px; font-weight: 500; color: var(--ink); margin-right: 4px; }

.spec-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.spec-chip {
  padding: 7px 14px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 500;
  color: var(--ink-soft);
}

.profile-contact { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 22px; }
.btn-glyph { width: 17px; height: 17px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.detail-btn-heart.liked .btn-glyph { fill: currentColor; }

.profile-request-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 20px;
  font-size: 14px;
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.profile-request-link:hover .arrow { transform: translateX(4px); }

.profile-about { margin-top: clamp(40px, 6vw, 64px); max-width: 640px; }
.profile-about-text { font-size: 16px; color: var(--ink-soft); }

.profile-portfolio { margin-top: clamp(40px, 6vw, 64px); }
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 14px;
}
.gallery-cell {
  display: block;
  padding: 0;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
  cursor: zoom-in;
}
.gallery-cell img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; transition: transform 0.6s var(--ease-out); }
.gallery-cell:hover img { transform: scale(1.03); }

.profile-two-col {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: clamp(24px, 4vw, 52px);
  margin-top: clamp(40px, 6vw, 64px);
  align-items: start;
}
.profile-location { min-width: 0; }
.profile-location .map-placeholder { height: 220px; margin-bottom: 0; }

/* Request-a-design card */
.request-card {
  padding: clamp(20px, 3vw, 32px);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.request-card .micro { display: block; margin-bottom: 10px; }
.request-title { font-family: var(--serif); font-weight: 500; font-size: clamp(22px, 3vw, 28px); line-height: 1.1; margin-bottom: 18px; }
.request-form .auth-submit { width: 100%; }

.ghs-input {
  display: flex;
  align-items: stretch;
  border: 1.5px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
  transition: border-color 0.18s, box-shadow 0.18s;
}
.ghs-input:focus-within { border-color: var(--ink); box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06); }
.ghs-prefix {
  display: flex;
  align-items: center;
  padding: 0 14px;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
  background: var(--paper-raised);
  border-right: 1px solid var(--hairline);
}
.ghs-input .field-input { border: 0; border-radius: 0; box-shadow: none; }
.ghs-input .field-input:focus { box-shadow: none; }
.request-notes { resize: vertical; min-height: 84px; }

.request-success .live-badge { margin-bottom: 14px; }
.request-success-title { font-family: var(--serif); font-weight: 500; font-size: 26px; }
.request-success-text { margin-top: 8px; font-size: 14.5px; color: var(--mid); }

/* Lightbox */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 120;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: clamp(16px, 4vw, 48px);
  background: rgba(18, 18, 18, 0.92);
}
.lightbox[hidden] { display: none; }
.lightbox-img { max-width: min(760px, 100%); max-height: 86vh; object-fit: contain; border-radius: var(--radius-sm); }
.lightbox-close {
  position: absolute;
  top: 18px;
  right: 18px;
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(250, 249, 246, 0.3);
  border-radius: 50%;
  color: var(--paper);
  transition: border-color 0.15s, transform 0.2s var(--ease-out);
}
.lightbox-close:hover { border-color: var(--paper); transform: rotate(90deg); }
.lightbox-close svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.lightbox-nav {
  flex: none;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(250, 249, 246, 0.3);
  border-radius: 50%;
  color: var(--paper);
  transition: border-color 0.15s, transform 0.18s var(--ease-out);
}
.lightbox-nav:hover { border-color: var(--paper); }
.lightbox-nav svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

/* --------------------------------------------------------------------------
   Product detail
   -------------------------------------------------------------------------- */

.product-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(20px, 4vw, 52px);
  align-items: start;
  margin-top: 18px;
}

.gallery-main {
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}
.gallery-main img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; }

.gallery-thumbs { display: flex; gap: 10px; margin-top: 10px; }
.gallery-thumb {
  flex: 0 0 84px;
  border-radius: var(--radius-sm);
  overflow: hidden;
  border: 1.5px solid transparent;
  background: var(--paper-raised);
  transition: border-color 0.18s;
}
.gallery-thumb img { width: 100%; aspect-ratio: 1; object-fit: cover; }
.gallery-thumb:hover { border-color: var(--hairline); }
.gallery-thumb.is-active { border-color: var(--ink); }

.product-info { position: sticky; top: 88px; }
.product-info .micro { display: block; margin-bottom: 10px; }
.product-title { font-size: clamp(28px, 4vw, 40px); }
.product-price { margin-top: 14px; font-size: 24px; font-weight: 600; }
.product-price small { font-size: 14px; font-weight: 400; color: var(--mid); }
.product-desc { margin-top: 14px; font-size: 15.5px; color: var(--ink-soft); max-width: 46ch; }

.seller-card {
  margin-top: 26px;
  padding: 20px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.seller-card-head .micro { display: block; margin-bottom: 6px; }
.seller-card-name { font-family: var(--serif); font-size: 20px; font-weight: 500; text-decoration: underline; text-underline-offset: 3px; }
.seller-card-loc { margin-top: 2px; font-size: 13px; color: var(--mid); }
.seller-card-contact { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }
.seller-card-shop {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 16px;
  font-size: 14px;
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.seller-card-shop:hover .arrow { transform: translateX(4px); }

/* --------------------------------------------------------------------------
   Seller profile
   -------------------------------------------------------------------------- */

.shop-head {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.7fr);
  gap: clamp(20px, 4vw, 52px);
  align-items: center;
  margin-top: 18px;
  margin-bottom: clamp(36px, 5vw, 56px);
}
.shop-info .micro { display: block; margin-bottom: 10px; }
.shop-name { font-size: clamp(32px, 5vw, 50px); }
.shop-loc { margin-top: 8px; font-size: 15px; color: var(--mid); }
.shop-blurb { margin-top: 14px; font-size: 16px; color: var(--ink-soft); max-width: 48ch; }
.shop-contact { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }
.shop-map .map-placeholder { height: 220px; margin-bottom: 0; }
.shop-listings { margin-top: 8px; }

/* --------------------------------------------------------------------------
   Post composer modal
   -------------------------------------------------------------------------- */

.composer {
  position: fixed;
  inset: 0;
  z-index: 110;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.composer[hidden] { display: none; }

.composer-backdrop { position: absolute; inset: 0; background: rgba(18, 18, 18, 0.55); }

.composer-panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 540px;
  max-height: 92vh;
  overflow-y: auto;
  padding: clamp(20px, 4vw, 32px);
  border-radius: var(--radius) var(--radius) 0 0;
  background: var(--paper);
  animation: reveal-up 0.35s var(--ease-out) both;
}

.composer-head { display: flex; align-items: center; justify-content: space-between; }
.composer-close {
  width: 40px;
  height: 40px;
  display: grid;
  place-items: center;
  border: 1px solid var(--hairline);
  border-radius: 50%;
  transition: border-color 0.15s, transform 0.2s var(--ease-out);
}
.composer-close:hover { border-color: var(--ink); transform: rotate(90deg); }
.composer-close svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }

.composer-title { font-size: clamp(24px, 4vw, 32px); margin: 10px 0 20px; }
.composer-form { display: grid; gap: 16px; }

.composer-photos { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.composer-photo {
  position: relative;
  display: block;
  border-radius: var(--radius-sm);
  overflow: hidden;
  border: 1.5px solid transparent;
  cursor: pointer;
  transition: border-color 0.18s;
}
.composer-photo img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; }
.composer-photo input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.composer-photo-check {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 22px;
  height: 22px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ink);
  opacity: 0;
  transform: scale(0.8);
  transition: opacity 0.18s, transform 0.18s var(--ease-out);
}
.composer-photo-check svg { width: 13px; height: 13px; fill: none; stroke: var(--paper); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.composer-photo:has(input:checked) { border-color: var(--ink); }
.composer-photo:has(input:checked) .composer-photo-check { opacity: 1; transform: scale(1); }

.composer-caption { resize: vertical; min-height: 60px; }
.composer-chips { flex-wrap: wrap; overflow: visible; }
.composer-actions { display: flex; align-items: center; justify-content: flex-end; gap: 16px; margin-top: 4px; }

/* Fresh (just-composed) feed card */
.feed-card.is-fresh { border-color: var(--ink); }
.feed-avatar-initial {
  width: 42px;
  height: 42px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--serif);
  font-size: 17px;
  font-weight: 500;
}

/* --------------------------------------------------------------------------
   Toasts
   -------------------------------------------------------------------------- */

.toast-wrap {
  position: fixed;
  left: 50%;
  bottom: 24px;
  z-index: 200;
  transform: translateX(-50%);
  display: grid;
  gap: 8px;
  width: max-content;
  max-width: calc(100vw - 32px);
  pointer-events: none;
}

.toast {
  padding: 11px 18px;
  border-radius: 999px;
  background: var(--ink);
  color: var(--paper);
  font-size: 13.5px;
  font-weight: 500;
  text-align: center;
  box-shadow: var(--shadow);
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 0.3s var(--ease-out), transform 0.3s var(--ease-out);
}
.toast.is-in { opacity: 1; transform: none; }

/* --------------------------------------------------------------------------
   Workstream B + D — responsive
   -------------------------------------------------------------------------- */

@media (max-width: 960px) {
  .look-detail-grid,
  .profile-head,
  .product-grid,
  .profile-two-col,
  .shop-head { grid-template-columns: 1fr; }
  .look-detail-panel,
  .product-info { position: static; }
  .look-detail-media img,
  .profile-hero img,
  .gallery-main img { aspect-ratio: 4 / 5; }
  .shop-map { max-width: 460px; }
}

@media (max-width: 760px) {
  .save-btn { opacity: 1; transform: none; }
  .detail-actions { gap: 8px; }
  .detail-btn { padding: 8px 13px; font-size: 12.5px; }
  .gallery-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .composer-photos { grid-template-columns: repeat(4, 1fr); }
}

@media (max-width: 560px) {
  .composer-photos { grid-template-columns: repeat(2, 1fr); }
  .look-detail-title { font-size: 30px; }
  .gallery-thumb { flex-basis: 68px; }
}

/* ==========================================================================
   Workstream C + E + F — Challenges deck, Winners wall, Dashboard, Closet,
   and the static pages. Tokens only, one easing (--ease-out). Gold appears
   only on the champion micro-label and the live dot (One Accent Rule); the
   ink stamps and the subscription meter stay monochrome. All motion sits
   under the global prefers-reduced-motion rule near the top of this file.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Challenges — hero
   -------------------------------------------------------------------------- */

.chal-hero { padding-block: clamp(40px, 6vw, 72px) clamp(20px, 3vw, 32px); }
.chal-hero-inner { max-width: 720px; }
.chal-hero-copy .live-badge { margin-bottom: 16px; }
.chal-title { font-size: clamp(40px, 8vw, 72px); }
.chal-brief { margin-top: 16px; max-width: 52ch; font-size: 17px; color: var(--ink-soft); }

.chal-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 12px;
  margin-top: 20px;
  font-size: 14px;
  color: var(--mid);
}
.chal-meta-item strong { font-family: var(--serif); font-weight: 500; font-size: 16px; color: var(--ink); margin-right: 4px; }
.chal-meta-dot { color: var(--hairline); }
.chal-hero-ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 26px; }

/* --------------------------------------------------------------------------
   Challenges — the swipe voting deck
   -------------------------------------------------------------------------- */

.chal-vote { padding-block: clamp(28px, 5vw, 56px) clamp(56px, 8vw, 96px); }
.chal-vote-inner { max-width: 560px; margin-inline: auto; text-align: center; }
.chal-vote-head .micro { display: block; margin-bottom: 10px; }
.chal-vote-title { font-family: var(--serif); font-weight: 500; font-size: clamp(22px, 3.4vw, 30px); line-height: 1.12; }
.chal-vote-sub { margin-top: 8px; font-size: 14px; color: var(--mid); }

.deck {
  position: relative;
  margin: clamp(24px, 4vw, 40px) auto 0;
  width: min(380px, 100%);
}

.deck-stack {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 5;
}

.vote-card {
  position: absolute;
  inset: 0;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
  box-shadow: var(--shadow);
  will-change: transform;
  user-select: none;
  -webkit-user-select: none;
}

.vote-card.is-current { cursor: grab; touch-action: pan-y; }
.vote-card.is-current:active { cursor: grabbing; }

.vote-media { position: relative; width: 100%; height: 100%; }
.vote-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  -webkit-user-drag: none;
  pointer-events: none;
}

.vote-media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0) 45%, rgba(0,0,0,0.68) 100%);
  pointer-events: none;
}

/* Ink-on-paper stamps — monochrome, not gold */
.vote-stamp {
  position: absolute;
  top: 22px;
  z-index: 2;
  padding: 7px 16px;
  border: 2.5px solid var(--ink);
  border-radius: var(--radius-sm);
  background: rgba(250, 249, 246, 0.86);
  color: var(--ink);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  opacity: 0;
  pointer-events: none;
}
.vote-stamp-in { left: 20px; transform: rotate(-11deg); }
.vote-stamp-out { right: 20px; transform: rotate(11deg); }

.vote-caption {
  position: absolute;
  inset: auto 0 0 0;
  z-index: 1;
  padding: 20px;
  text-align: left;
  color: #fff;
}
.vote-caption-loc {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.78);
}
.vote-caption-title { margin-top: 4px; font-family: var(--serif); font-size: 22px; font-weight: 500; line-height: 1.15; }
.vote-caption-author { margin-top: 2px; font-size: 13px; color: rgba(255,255,255,0.85); }

/* Closing state */
.deck-done {
  position: absolute;
  inset: 0;
  z-index: 5;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 28px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  text-align: center;
}
.deck-done[hidden] { display: none; }
.deck-done .micro { display: block; margin-bottom: 6px; }
.deck-done-title { font-family: var(--serif); font-weight: 500; font-size: 28px; line-height: 1.08; }
.deck-done-tally { margin-top: 8px; font-size: 15px; font-weight: 600; }
.deck-done-sub { margin-top: 4px; font-size: 13.5px; color: var(--mid); max-width: 30ch; }
.deck-done-ctas { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 18px; }

/* Controls */
.deck-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 22px;
  margin-top: 26px;
}
.deck-controls[hidden] { display: none; }

.deck-btn {
  width: 58px;
  height: 58px;
  display: grid;
  place-items: center;
  border: 1.5px solid var(--hairline);
  border-radius: 50%;
  color: var(--ink);
  background: var(--surface);
  transition: border-color 0.18s, transform 0.18s var(--ease-out), background 0.18s, color 0.18s;
}
.deck-btn:hover { border-color: var(--ink); transform: translateY(-2px); }
.deck-btn:active { transform: scale(0.94); }
.deck-btn svg { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.deck-btn-in:hover { background: var(--ink); color: var(--paper); border-color: var(--ink); }

.deck-progress {
  min-width: 64px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.deck-footnote {
  margin: 26px auto 0;
  max-width: 46ch;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--mid);
}

/* --------------------------------------------------------------------------
   Winners wall
   -------------------------------------------------------------------------- */

.winners-head { margin-top: 18px; max-width: 640px; }
.winners-head .micro { display: block; margin-bottom: 10px; }
.winners-title { font-size: clamp(32px, 5vw, 52px); }
.winners-lede { margin-top: 12px; font-size: 15px; color: var(--mid); }

/* Monthly champion — elevated, with the one allowed gold micro-label */
.champion {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(20px, 4vw, 44px);
  align-items: center;
  margin-top: clamp(28px, 4vw, 44px);
  padding: clamp(16px, 2.5vw, 24px);
  border: 1px solid var(--ink);
  border-radius: var(--radius);
  background: var(--surface);
  transition: transform 0.2s var(--ease-out), box-shadow 0.2s;
}
.champion:hover { transform: translateY(-2px); box-shadow: var(--shadow); }

.champion-media {
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: var(--paper-raised);
}
.champion-media img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; transition: transform 0.6s var(--ease-out); }
.champion:hover .champion-media img { transform: scale(1.03); }

.champion-label {
  display: inline-flex;
  align-self: start;
  padding: 5px 13px;
  border-radius: 999px;
  background: var(--gold-tint);
  color: var(--gold-deep);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.champion-name { margin-top: 14px; font-family: var(--serif); font-weight: 500; font-size: clamp(28px, 4vw, 40px); line-height: 1.05; }
.champion-piece { margin-top: 8px; font-size: 16px; color: var(--ink-soft); }
.champion-votes { margin-top: 10px; font-size: 13px; color: var(--mid); }
.champion-cta { margin-top: 18px; display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; }
.champion:hover .champion-cta .arrow { transform: translateX(4px); }

.winners-grid-title { margin-top: clamp(44px, 6vw, 68px); }
.winners-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 18px;
}
.winner-cell { display: block; }
.winner-cell-media {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--paper-raised);
}
.winner-cell-media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s var(--ease-out); }
.winner-cell:hover .winner-cell-media img { transform: scale(1.03); }
.winner-cell-week {
  display: block;
  margin-top: 11px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}
.winner-cell-name { margin-top: 4px; font-family: var(--serif); font-size: 18px; font-weight: 500; line-height: 1.2; }
.winner-cell-piece { margin-top: 2px; font-size: 13.5px; color: var(--ink-soft); }
.winner-cell-votes { margin-top: 4px; font-size: 12.5px; color: var(--mid); }

/* --------------------------------------------------------------------------
   Dashboard (Workstream E)
   -------------------------------------------------------------------------- */

.dash2 { padding-block: clamp(32px, 5vw, 56px) clamp(56px, 8vw, 96px); }

/* Signed-out prompt */
.dash-guest { max-width: 560px; margin-inline: auto; text-align: center; padding-block: clamp(40px, 8vw, 88px); }
.dash-guest[hidden] { display: none; }
.dash-guest .micro { display: block; margin-bottom: 14px; }
.dash-guest-title { font-size: clamp(32px, 6vw, 52px); }
.dash-guest-lede { margin: 16px auto 0; max-width: 44ch; color: var(--mid); font-size: 16px; }
.dash-guest-ctas { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin-top: 26px; }

.dash-main[hidden] { display: none; }

.dash-top {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 20px;
  flex-wrap: wrap;
  padding-bottom: clamp(24px, 4vw, 36px);
  border-bottom: 1px solid var(--hairline);
}
.dash-top-copy .micro { display: block; margin-bottom: 12px; }
.dash2-title { font-size: clamp(34px, 6vw, 54px); }
.dash2-title em { font-style: italic; font-weight: 420; }
.dash2-shop { margin-top: 10px; font-size: 15px; color: var(--mid); }
.dash2-shop strong { color: var(--ink); font-weight: 600; }
.dash2-shop[hidden] { display: none; }

/* Role segmented toggle */
.dash-seg-wrap {
  display: inline-flex;
  gap: 4px;
  padding: 4px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
}
.dash-seg-wrap[hidden] { display: none; }
.dash-seg {
  min-height: 38px;
  padding: 8px 22px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  color: var(--mid);
  transition: background 0.18s, color 0.18s;
}
.dash-seg.is-active { background: var(--ink); color: var(--paper); }

.dash-panel { margin-top: clamp(28px, 4vw, 40px); }
.dash-panel[hidden] { display: none; }

/* Customer-only card */
.dash-empty-card {
  max-width: 620px;
  padding: clamp(28px, 4vw, 44px);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.dash-empty-card .micro { display: block; margin-bottom: 12px; }
.dash-empty-title { font-family: var(--serif); font-weight: 500; font-size: clamp(24px, 3.6vw, 34px); line-height: 1.1; }
.dash-empty-lede { margin-top: 12px; font-size: 15px; color: var(--mid); max-width: 46ch; }
.dash-empty-ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 22px; }
.dash-upsell-line { margin-top: 20px; font-size: 13.5px; color: var(--mid); }
.dash-upsell-line a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

/* Analytics stat strip */
.stat-strip {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-bottom: clamp(24px, 4vw, 36px);
}
.stat-tile {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 20px 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.stat-value { font-family: var(--serif); font-weight: 500; font-size: clamp(26px, 3.4vw, 34px); line-height: 1; }
.stat-label { margin-top: 8px; font-size: 13px; font-weight: 600; }
.stat-note { font-size: 12px; color: var(--mid); }

/* Two-column layout (manager + subscription) */
.dash-cols {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 320px);
  gap: clamp(18px, 3vw, 32px);
  align-items: start;
}
.dash-col-main { display: grid; gap: clamp(18px, 3vw, 28px); min-width: 0; }
.dash-col-side { position: sticky; top: 88px; }

.dash-block {
  padding: clamp(18px, 2.5vw, 26px);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.dash-panel > .dash-block { margin-bottom: clamp(18px, 3vw, 28px); }
.dash-block-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 18px;
}
.dash-block-title { font-family: var(--serif); font-weight: 500; font-size: 22px; line-height: 1.1; }
.dash-block-meta { font-size: 12px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--mid); }

/* Portfolio / listings manager grid */
.manage-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 14px;
}
.manage-add {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  aspect-ratio: 4 / 5;
  border: 1.5px dashed var(--hairline);
  border-radius: var(--radius);
  color: var(--mid);
  font-size: 13px;
  font-weight: 600;
  transition: border-color 0.18s, color 0.18s, background 0.18s;
}
.manage-add:hover { border-color: var(--ink); color: var(--ink); background: var(--paper-raised); }
.manage-add-plus { font-family: var(--serif); font-size: 30px; line-height: 1; }

.manage-card { position: relative; animation: reveal-up 0.35s var(--ease-out) both; }
.manage-card.is-fresh .manage-media { border: 1px solid var(--ink); }
.manage-media {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--paper-raised);
}
.manage-media img { width: 100%; height: 100%; object-fit: cover; }

.manage-remove {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 3;
  width: 30px;
  height: 30px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.94);
  color: var(--ink);
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 0.18s, transform 0.2s var(--ease-out), background 0.18s, color 0.18s;
}
.manage-card:hover .manage-remove,
.manage-remove:focus-visible { opacity: 1; transform: translateY(0); }
.manage-remove:hover { background: var(--ink); color: var(--paper); }
.manage-remove svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }

.manage-cap { display: grid; gap: 1px; margin-top: 8px; }
.manage-tag { font-size: 10.5px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--mid); }
.manage-price { font-size: 14px; font-weight: 600; }
.manage-price small { font-weight: 400; color: var(--mid); }
.manage-name { font-size: 13px; color: var(--ink-soft); line-height: 1.25; }

/* Enquiries */
.enq-list { display: grid; gap: 4px; }
.enq {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 14px 0;
  border-top: 1px solid var(--hairline);
}
.enq:first-child { border-top: 0; padding-top: 0; }
.enq-avatar {
  flex: none;
  width: 38px;
  height: 38px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--paper-raised);
  font-family: var(--serif);
  font-size: 16px;
  font-weight: 500;
}
.enq-body { flex: 1 1 auto; min-width: 0; }
.enq-meta { font-size: 13px; }
.enq-meta strong { font-weight: 600; }
.enq-meta span { margin-left: 8px; color: var(--mid); font-size: 12px; }
.enq-msg { margin-top: 2px; font-size: 14px; color: var(--ink-soft); }
.enq-reply {
  flex: none;
  align-self: center;
  min-height: 36px;
  padding: 7px 16px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  transition: border-color 0.18s, background 0.18s, color 0.18s;
}
.enq-reply:hover { border-color: var(--ink); }
.enq-reply.is-replied { color: var(--mid); border-color: var(--hairline); cursor: default; }

/* Settings form */
.dash-settings { display: grid; gap: 16px; max-width: 460px; }
.dash-spec-chips { flex-wrap: wrap; overflow: visible; }

/* Subscription card — ink meter, never gold */
.sub-card { padding: clamp(20px, 2.5vw, 26px); }
.sub-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
.sub-head .micro { margin: 0; }
.sub-plan {
  padding: 4px 12px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.sub-body[hidden], .sub-teaser[hidden] { display: none; }
.sub-title { font-family: var(--serif); font-weight: 500; font-size: 20px; }
.sub-meter {
  height: 8px;
  margin-top: 12px;
  border-radius: 999px;
  background: var(--paper-raised);
  overflow: hidden;
}
.sub-meter-bar { height: 100%; border-radius: 999px; background: var(--ink); transition: width 0.4s var(--ease-out); }
.sub-count { margin-top: 10px; font-size: 14px; }
.sub-count strong { font-family: var(--serif); font-weight: 500; }
.sub-note { margin-top: 8px; font-size: 13px; color: var(--mid); }
.sub-upgrade { width: 100%; margin-top: 18px; }

.sub-teaser .micro { display: block; margin-bottom: 8px; }
.sub-price { font-size: 15px; color: var(--mid); }
.sub-price strong { font-family: var(--serif); font-size: 30px; font-weight: 500; color: var(--ink); margin-right: 4px; }
.sub-list { list-style: none; display: grid; gap: 8px; margin-top: 16px; }
.sub-list li { position: relative; padding-left: 20px; font-size: 13.5px; color: var(--ink-soft); }
.sub-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 7px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  border: 1.5px solid var(--ink);
}
.sub-teaser .btn { width: 100%; margin-top: 18px; }
.sub-fineprint { margin-top: 14px; font-size: 12px; color: var(--mid); }

/* Listing add form */
.listing-add { display: grid; grid-template-columns: 2fr 1fr 1fr auto; gap: 12px; align-items: end; }
.listing-add .btn { min-height: 48px; }

/* --------------------------------------------------------------------------
   Account — the Closet (Workstream F)
   -------------------------------------------------------------------------- */

.closet-head { margin-top: 18px; max-width: 620px; }
.closet-head .micro { display: block; margin-bottom: 10px; }
.closet-title { font-size: clamp(32px, 5vw, 52px); }
.closet-lede { margin-top: 12px; font-size: 15px; color: var(--mid); }

.closet-tabs {
  display: flex;
  gap: 6px;
  margin-top: clamp(24px, 4vw, 36px);
  margin-bottom: clamp(20px, 3vw, 28px);
  border-bottom: 1px solid var(--hairline);
}
.closet-tab {
  position: relative;
  padding: 12px 4px;
  margin-right: 20px;
  font-size: 15px;
  font-weight: 500;
  color: var(--mid);
  transition: color 0.18s;
}
.closet-tab:hover { color: var(--ink); }
.closet-tab.is-active { color: var(--ink); }
.closet-tab::after {
  content: "";
  position: absolute;
  left: 0;
  right: 100%;
  bottom: -1px;
  border-bottom: 2px solid var(--ink);
  transition: right 0.25s var(--ease-out);
}
.closet-tab.is-active::after { right: 0; }
.closet-count {
  display: inline-grid;
  place-items: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  margin-left: 4px;
  border-radius: 999px;
  background: var(--paper-raised);
  font-size: 11px;
  font-weight: 600;
  color: var(--ink-soft);
  vertical-align: middle;
}
.closet-tab.is-active .closet-count { background: var(--ink); color: var(--paper); }

.closet-panel[hidden] { display: none; }
.closet-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px 14px;
}
.closet-grid .rail-card { width: auto; }
.closet-item[hidden] { display: none; }

.closet-empty {
  padding: clamp(36px, 6vw, 64px) 24px;
  border: 1px dashed var(--hairline);
  border-radius: var(--radius);
  text-align: center;
}
.closet-empty[hidden] { display: none; }
.closet-empty-line { font-family: var(--serif); font-weight: 500; font-size: clamp(22px, 3.4vw, 30px); line-height: 1.1; }
.closet-empty-sub { margin-top: 8px; font-size: 14.5px; color: var(--mid); max-width: 40ch; margin-inline: auto; }
.closet-empty .btn { margin-top: 20px; }

.closet-section { margin-top: clamp(44px, 6vw, 68px); }
.closet-prefs-filled[hidden], .closet-prefs-empty[hidden] { display: none; }
.closet-pref-rows { display: grid; gap: 14px; }
.closet-pref-label {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  margin-bottom: 6px;
}
.closet-pref-val { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; }
.closet-redo {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 18px;
  font-size: 14px;
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.closet-redo:hover .arrow { transform: translateX(4px); }
.closet-prefs-empty .closet-empty-sub { margin-inline: 0; }
.closet-prefs-empty .btn { margin-top: 16px; }

.closet-entries-grid[hidden] { display: none; }
.closet-entry { cursor: default; }
.closet-entries-empty[hidden] { display: none; }
.closet-entries-empty .closet-empty-sub { margin-inline: 0; }
.closet-entries-empty .btn { margin-top: 16px; }

/* --------------------------------------------------------------------------
   Static pages — About / Community rules / Contact / Advertise
   -------------------------------------------------------------------------- */

.doc { padding-block: clamp(40px, 6vw, 72px) clamp(52px, 8vw, 88px); }
.doc-shell { max-width: 760px; }
.doc .micro { display: block; margin-bottom: 14px; }
.doc-title { font-size: clamp(34px, 6vw, 56px); }
.doc-lede { margin-top: 16px; font-size: 17px; color: var(--ink-soft); max-width: 58ch; }

.doc-worlds {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: clamp(28px, 4vw, 40px);
}
.doc-world {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  transition: border-color 0.2s, transform 0.2s var(--ease-out);
}
.doc-world:hover { border-color: var(--ink); transform: translateY(-1px); }
.doc-world-num { font-size: 12px; font-weight: 600; letter-spacing: 0.14em; color: var(--mid); }
.doc-world-name { font-family: var(--serif); font-size: 20px; font-weight: 500; }
.doc-world-desc { margin-top: 4px; font-size: 13.5px; color: var(--mid); }

.doc-body { margin-top: clamp(36px, 5vw, 56px); max-width: 62ch; }
.doc-h2 { font-family: var(--serif); font-weight: 500; font-size: clamp(22px, 3vw, 28px); line-height: 1.15; margin-top: 32px; margin-bottom: 10px; }
.doc-body p { font-size: 15.5px; color: var(--ink-soft); }
.doc-foot { margin-top: clamp(32px, 5vw, 48px); font-size: 14px; color: var(--mid); }
.doc-foot a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

.doc-rules { margin-top: clamp(28px, 4vw, 44px); display: grid; gap: 4px; }
.doc-rule { padding: 22px 0; border-top: 1px solid var(--hairline); }
.doc-rule:first-child { border-top: 0; padding-top: 0; }
.doc-rule-title { font-family: var(--serif); font-weight: 500; font-size: 21px; line-height: 1.15; margin-bottom: 6px; }
.doc-rule p { font-size: 15px; color: var(--ink-soft); max-width: 62ch; }

/* The policy set — Terms, Delivery, Refunds, Privacy (2026-08-11, after
   Paystack's activation review asked for all four). The `.doc` block above was
   built for editorial pages (About, Community rules): a lede, headings, and
   paragraphs. Policy prose additionally needs a list, a dateline, an identity
   block and one hard-edged safety callout, and `* { padding: 0 }` at the top of
   this file means a bare <ul> renders its markers outside the column.
   Everything here is scoped under `.doc`, so no existing screen moves a pixel.
   No new colour: the accent stays out of legal text entirely. */
.doc-h3 {
  font-family: var(--sans);
  font-weight: 600;
  font-size: 16px;
  line-height: 1.3;
  margin-top: 24px;
  margin-bottom: 6px;
}
.doc-list { margin-top: 12px; padding-left: 20px; display: grid; gap: 8px; }
.doc-list li { font-size: 15.5px; color: var(--ink-soft); max-width: 62ch; }
.doc-list li::marker { color: var(--mid); }
.doc-list strong { color: var(--ink); font-weight: 600; }
.doc-body a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
.doc-meta { margin-top: 20px; font-size: 13px; color: var(--mid); }

/* Who REEGo legally is. The same block, from the same constants, on all four
   pages — Act 772 s.47 asks for name, legal status, address, phone and
   registration number, and a payment reviewer matches it against the account. */
.doc-id {
  margin-top: clamp(28px, 4vw, 40px);
  padding: 20px 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  display: grid;
  gap: 4px;
  font-size: 14px;
  color: var(--ink-soft);
  max-width: 62ch;
}
.doc-id strong { color: var(--ink); font-weight: 600; }
.doc-id a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

/* The safety rules. One ink border, because this is the block that has to stop
   a person mid-scroll before they send money to a stranger. */
.doc-safety {
  margin-top: clamp(28px, 4vw, 40px);
  padding: clamp(20px, 3vw, 28px);
  border: 1px solid var(--ink);
  border-radius: var(--radius);
}
.doc-safety-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(20px, 3vw, 24px);
  line-height: 1.15;
}
.doc-safety p { margin-top: 8px; font-size: 15px; color: var(--ink-soft); }

/* The payment-flow callout — Terms clause 10 and Refund Policy Part A
   (2026-08-14, after Paystack's second review asked for the payment flow to be
   set out in the Terms; the owner's instruction was "please make sure this is
   highlighted well"). Same hard-edged frame as the safety block because it does
   the same job — stop the scroll at the paragraph that matters — and still no
   accent colour, legal text carrying none. A separate class rather than a
   second `.doc-safety`: the advisories are asserted byte-identical across two
   documents, and sharing the class name would make that guard read this block
   on one page and the advisories on the other. */
.doc-callout {
  margin-top: clamp(24px, 3vw, 32px);
  padding: clamp(20px, 3vw, 28px);
  border: 1px solid var(--ink);
  border-radius: var(--radius);
}
.doc-callout-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(19px, 2.6vw, 22px);
  line-height: 1.15;
}
.doc-callout p { margin-top: 10px; font-size: 15px; color: var(--ink-soft); }
.doc-callout strong { color: var(--ink); font-weight: 600; }

/* Contact */
.contact-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
  gap: clamp(24px, 4vw, 52px);
  margin-top: clamp(32px, 5vw, 48px);
  align-items: start;
}
.contact-lines { display: grid; gap: 24px; }
.contact-line .micro { margin-bottom: 6px; }
.contact-email {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 500;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-thickness: 1px;
}
.contact-email:hover { color: var(--ink-soft); }
.contact-where { font-size: 15px; }

/* Advertise */
.ad-example { margin-top: clamp(28px, 4vw, 44px); }
.ad-example-banner {
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--ink);
  color: var(--paper);
  padding: clamp(28px, 4vw, 48px);
}
.ad-example-copy .micro { color: rgba(250, 249, 246, 0.6); margin-bottom: 8px; }
.ad-example-title { font-family: var(--serif); font-weight: 480; font-size: clamp(26px, 3.4vw, 38px); line-height: 1.08; }
.ad-example-copy p { margin-top: 8px; font-size: 14.5px; color: rgba(250, 249, 246, 0.75); max-width: 46ch; }
.ad-example-tag {
  display: inline-block;
  margin-top: 18px;
  padding: 5px 13px;
  border: 1px solid rgba(250, 249, 246, 0.3);
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(250, 249, 246, 0.85);
}
.ad-example-note { margin-top: 14px; font-size: 13px; color: var(--mid); max-width: 60ch; }

.ad-slots { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 18px; }
.ad-slot {
  padding: 24px 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}
.ad-slot-num { font-size: 12px; font-weight: 600; letter-spacing: 0.14em; color: var(--mid); }
.ad-slot-name { font-family: var(--serif); font-weight: 500; font-size: 20px; margin-top: 6px; }
.ad-slot p { margin-top: 8px; font-size: 13.5px; color: var(--mid); }

/* --------------------------------------------------------------------------
   Workstream C + E + F — responsive
   -------------------------------------------------------------------------- */

@media (max-width: 960px) {
  .dash-cols { grid-template-columns: 1fr; }
  .dash-col-side { position: static; }
  .champion { grid-template-columns: 1fr; }
  .champion-media { max-width: 360px; }
}

@media (max-width: 760px) {
  .manage-remove { opacity: 1; transform: none; }
  .listing-add { grid-template-columns: 1fr 1fr; }
  .listing-add .btn { grid-column: 1 / -1; }
  .contact-grid { grid-template-columns: 1fr; }
  .doc-worlds { grid-template-columns: 1fr; }
  .ad-slots { grid-template-columns: 1fr; }
  .stat-strip { gap: 10px; }
  .dash-top { align-items: flex-start; }
}

@media (max-width: 560px) {
  .stat-strip { grid-template-columns: 1fr; }
  .stat-tile { flex-direction: row; align-items: baseline; gap: 10px; padding: 16px 18px; }
  .stat-value { font-size: 24px; }
  .stat-label { margin-top: 0; }
  .listing-add { grid-template-columns: 1fr; }
  .manage-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .closet-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .deck-controls { gap: 16px; }
  .chal-title { font-size: 40px; }
}

/* --------------------------------------------------------------------------
   Workstream G — search results + branded 404
   -------------------------------------------------------------------------- */

.search-bar-page { margin-top: 24px; }

.world-title em { font-style: italic; font-weight: 420; }

.search-suggest {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 20px;
}

.search-suggest .chip-row { flex: 1; }

.search-section { padding-block: 12px 40px; }

.search-empty {
  padding-block: 24px 60px;
  max-width: 60ch;
}

.search-empty-line {
  font-family: var(--serif);
  font-weight: 480;
  font-size: 26px;
}

.search-empty-line em { font-style: italic; }

.search-empty p { margin-top: 8px; color: var(--mid); font-size: 14.5px; }

.search-empty-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 20px;
}

.notfound { padding-block: clamp(64px, 14vh, 140px); }

.notfound-inner {
  max-width: 640px;
  margin-inline: auto;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

.notfound-title { font-size: clamp(30px, 4.4vw, 48px); }

.notfound-sub { color: var(--mid); font-size: 15px; }

.notfound-ctas {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin-top: 12px;
}

.notfound-stitch { margin-top: 28px; }

/* ==========================================================================
   Premium polish pass
   Craft details only: no new colors, fonts or radii. Tokens only, one easing
   (--ease-out). Everything here sits under the global prefers-reduced-motion
   rule near the top of this file, and every JS-driven state (reveal, image
   fade) rests in its visible state when scripting is unavailable.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Type craft
   -------------------------------------------------------------------------- */

h1, h2, h3, .display { text-wrap: balance; }
p { text-wrap: pretty; }

/* Prices, counts and meters set like a price tag: digits share one width,
   so nothing jitters when a number changes. (.dash-block-meta joined the
   list in WFD-8 — the Studio manager heads carry JS-updated counts: the
   moved used-of-cap line and the pre-existing "N live" listing count,
   which rode this class without tabular-nums since W3.) */
.rail-price, .tile-price, .product-price, .stat-value, .like-count,
.deck-progress, .closet-count, .sub-count, .detail-count,
.chal-meta-item strong, .profile-stat strong, .champion-votes,
.winner-cell-votes, .manage-price, .dash-block-meta,
.console-gate-now, .console-gate-target, .console-stat-value,
.console-stat-note, .console-series-total, .console-series-bar-value,
.console-todo-count, .console-chip-count, .console-money-input,
.console-number-input, .console-promo-count, .console-arm-row dd,
.console-list-order, .console-elsewhere-value, .console-audit-when,
.console-savebar-count {
  font-variant-numeric: tabular-nums lining-nums;
}

/* --------------------------------------------------------------------------
   Press feedback — every pill acknowledges the finger
   -------------------------------------------------------------------------- */

.btn:active, .banner-btn:active, .detail-btn:active, .social-btn:active,
.menu-toggle:active, .avatar-chip:active, .enq-reply:active {
  transform: translateY(0) scale(0.98);
}

.chip {
  transition: border-color 0.15s, background 0.15s, color 0.15s,
    transform 0.15s var(--ease-out);
}
.chip:active { transform: scale(0.96); }

.save-btn:active, .fav-btn:active { transform: scale(0.88); }

/* --------------------------------------------------------------------------
   Media plates — a whisper of a border keeps light photos from
   dissolving into the paper background
   -------------------------------------------------------------------------- */

.rail-media, .tile-media, .occasion-media, .gallery-main, .gallery-cell,
.manage-media, .champion-media, .winner-cell-media, .look-detail-media,
.profile-hero {
  position: relative;
}

.rail-media::after, .tile-media::after, .occasion-media::after,
.gallery-main::after, .gallery-cell::after, .manage-media::after,
.champion-media::after, .winner-cell-media::after, .look-detail-media::after,
.profile-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border: 1px solid rgba(18, 18, 18, 0.06);
  border-radius: inherit;
  pointer-events: none;
}

/* --------------------------------------------------------------------------
   Rail arrows — desktop affordance for the scrolling rows
   (injected by reego.js next to "See all"; touch screens just swipe)
   -------------------------------------------------------------------------- */

.rail-nav { display: flex; align-items: center; gap: 8px; }
.rail-nav[hidden] { display: none; }

.rail-btn {
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  border: 1px solid var(--hairline);
  border-radius: 50%;
  color: var(--ink);
  background: var(--surface);
  transition: border-color 0.15s, opacity 0.15s, transform 0.15s var(--ease-out);
}

.rail-btn:hover { border-color: var(--ink); }
.rail-btn:active { transform: scale(0.92); }
.rail-btn[disabled] { opacity: 0.35; cursor: default; }
.rail-btn[disabled]:hover { border-color: var(--hairline); }

.rail-btn svg {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

@media (max-width: 760px) {
  .rail-nav { display: none; }
}

/* --------------------------------------------------------------------------
   Image loading — shimmer skeleton
   reego.js tags each lazy image .img-loading until it arrives, then adds
   .img-loaded. While loading, the empty <img> box shows a moving shimmer so
   people can see something is on the way; the photo paints over it on arrival.
   Already-cached images and no-JS visits are never tagged — they rest visible.
   -------------------------------------------------------------------------- */

img.img-loading {
  background-color: var(--hairline);
  background-image: linear-gradient(
    100deg,
    rgba(255, 255, 255, 0) 30%,
    rgba(255, 255, 255, 0.7) 50%,
    rgba(255, 255, 255, 0) 70%
  );
  background-repeat: no-repeat;
  background-size: 200% 100%;
  background-position: 180% 0;
  animation: img-shimmer 1.25s ease-in-out infinite;
}

/* Photo has arrived — stop the shimmer and let the pixels show. */
img.img-loading.img-loaded {
  background-image: none;
  animation: none;
  transition: opacity 0.4s var(--ease-out);
}

@keyframes img-shimmer {
  from { background-position: 180% 0; }
  to { background-position: -80% 0; }
}

/* Reduced motion: keep the skeleton tint, drop the sweep. */
@media (prefers-reduced-motion: reduce) {
  img.img-loading { animation: none; background-image: none; }
}

/* --------------------------------------------------------------------------
   Filter chip icons — monochrome line glyphs from _chip_icon.html.
   Same icon language as the rest of the site: stroke on currentColor,
   round caps. Never emoji, never colored, never a second style.
   -------------------------------------------------------------------------- */

.chip { display: inline-flex; align-items: center; gap: 7px; }

.chip-glyph {
  width: 15px;
  height: 15px;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0.7;
  transition: opacity 0.15s;
}

.chip:hover .chip-glyph,
.chip.is-active .chip-glyph { opacity: 1; }

/* --------------------------------------------------------------------------
   Small refinements
   -------------------------------------------------------------------------- */

.lightbox-img { animation: reveal-up 0.3s var(--ease-out); }

.world-toolbar {
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
  backdrop-filter: blur(14px) saturate(1.4);
}

/* Dynamic viewport units where mobile browser chrome eats 100vh
   (browsers without dvh keep the vh values set earlier) */
.composer-panel { max-height: 92dvh; }
.lightbox-img { max-height: 86dvh; }

/* --------------------------------------------------------------------------
   Mobile first — most REEGo users are on phones
   -------------------------------------------------------------------------- */

@media (max-width: 760px) {
  /* iOS zooms into any focused field under 16px */
  .field-input, .search-bar input, .search-scope { font-size: 16px; }

  /* Touch targets: nothing interactive below ~36px on phones */
  .chip { min-height: 38px; padding-block: 9px; }
  .save-btn, .fav-btn { width: 38px; height: 38px; }
  .manage-remove { width: 36px; height: 36px; }
}

/* ================================================================
   The pitch deck (/pitch/) — full-screen ink takeover, 8 slides
   ================================================================ */

.is-pitch { background: var(--ink); }
.is-pitch .site-header,
.is-pitch .site-footer { display: none; }

.pitch-deck {
  position: fixed;
  inset: 0;
  background: var(--ink);
  color: var(--paper);
  overflow: hidden;
}

.pitch-progress {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: rgba(250, 249, 246, 0.12);
  z-index: 3;
}

.pitch-progress-fill {
  display: block;
  height: 100%;
  width: 12.5%;
  background: var(--gold);
  transition: width 0.45s var(--ease-out);
}

.pitch-slide {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  padding-block: 72px 110px;
  padding-inline: max(var(--gutter), calc((100vw - 1060px) / 2));
  overflow-y: auto;
  opacity: 0;
  visibility: hidden;
  transform: translateY(20px);
  transition:
    opacity 0.4s var(--ease-out),
    transform 0.4s var(--ease-out),
    visibility 0s 0.4s;
}

.pitch-slide.is-current {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition:
    opacity 0.5s var(--ease-out) 0.12s,
    transform 0.5s var(--ease-out) 0.12s,
    visibility 0s;
}

.pitch-kicker {
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--gold);
  margin-bottom: 22px;
}

.pitch-title {
  font-family: var(--serif);
  font-weight: 420;
  font-size: clamp(30px, 4.6vw, 56px);
  line-height: 1.08;
  letter-spacing: -0.01em;
  max-width: 18em;
}

.pitch-title em { font-style: italic; }
.pitch-gold { color: var(--gold); }

.pitch-wordmark {
  font-family: var(--serif);
  font-weight: 560;
  font-size: clamp(72px, 13vw, 150px);
  line-height: 1;
  letter-spacing: -0.02em;
  margin-bottom: 26px;
}

.pitch-wordmark .wordmark-ree { color: var(--paper); }
.pitch-wordmark .wordmark-go { color: var(--gold); font-style: italic; }
.pitch-wordmark-close { font-size: clamp(56px, 9vw, 104px); }

.pitch-lede {
  font-size: clamp(16px, 1.8vw, 20px);
  line-height: 1.6;
  color: rgba(250, 249, 246, 0.78);
  max-width: 34em;
  margin-top: 24px;
}

.pitch-lede-title {
  font-family: var(--serif);
  font-size: clamp(20px, 2.6vw, 30px);
  line-height: 1.3;
  color: rgba(250, 249, 246, 0.9);
  margin-top: 0;
}

.pitch-lede-title em { color: var(--gold); }

.pitch-note {
  font-size: 14px;
  color: rgba(250, 249, 246, 0.55);
  margin-top: 30px;
  max-width: 46em;
}

.pitch-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(24px, 4vw, 56px);
  margin-top: 44px;
}

.pitch-half h3,
.pitch-cell h3 {
  font-family: var(--serif);
  font-weight: 480;
  font-size: 21px;
  margin-bottom: 10px;
}

.pitch-half p,
.pitch-cell p {
  font-size: 15px;
  line-height: 1.6;
  color: rgba(250, 249, 246, 0.66);
}

.pitch-steps {
  list-style: none;
  margin-top: 40px;
  width: 100%;
  max-width: 760px;
}

.pitch-steps li {
  display: flex;
  align-items: baseline;
  gap: 20px;
  padding-block: 16px;
  border-top: 1px solid rgba(250, 249, 246, 0.14);
  font-family: var(--serif);
  font-size: clamp(17px, 2vw, 22px);
  line-height: 1.35;
}

.pitch-steps li:last-child { border-bottom: 1px solid rgba(250, 249, 246, 0.14); }

.pitch-num {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--gold);
  flex-shrink: 0;
}

.pitch-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-top: 40px;
  width: 100%;
}

.pitch-grid-3 { grid-template-columns: 1fr 1fr 1fr; }

.pitch-cell {
  border: 1px solid rgba(250, 249, 246, 0.16);
  border-radius: var(--radius);
  padding: 22px 24px;
}

.pitch-cell h3 { display: flex; align-items: center; gap: 8px; }

.pitch-cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 34px;
  background: var(--gold);
  color: var(--ink);
  border: none;
  border-radius: 999px;
  padding: 14px 28px;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.2s var(--ease-out), transform 0.2s var(--ease-out);
}

.pitch-cta:hover { background: #d09a3a; transform: translateY(-1px); }

.pitch-controls {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-block: 20px;
  padding-inline: max(var(--gutter), calc((100vw - 1060px) / 2));
  z-index: 2;
}

.pitch-counter,
.pitch-hint {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: rgba(250, 249, 246, 0.55);
}

.pitch-counter [data-pitch-count] { color: var(--paper); }

.pitch-buttons { display: flex; gap: 10px; }

.pitch-btn {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid rgba(250, 249, 246, 0.3);
  background: transparent;
  color: var(--paper);
  font-size: 17px;
  cursor: pointer;
  transition: border-color 0.2s var(--ease-out), color 0.2s var(--ease-out);
}

.pitch-btn:hover { border-color: var(--gold); color: var(--gold); }

.pitch-exit {
  position: absolute;
  top: 18px;
  right: var(--gutter);
  z-index: 2;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: rgba(250, 249, 246, 0.55);
  text-decoration: none;
}

.pitch-exit:hover { color: var(--paper); }

@media (max-width: 720px) {
  .pitch-slide {
    justify-content: flex-start;
    padding-top: 84px;
    padding-bottom: 120px;
  }
  .pitch-split,
  .pitch-grid,
  .pitch-grid-3 { grid-template-columns: 1fr; }
  .pitch-hint { display: none; }
}

/* ==========================================================================
   THE FLOW SCREENS — the referral engine's own surfaces
   Appended, additive-only; nothing above this line changes. These classes
   serve the request wizard, the tracking page and the Studio family. Tokens
   only, one easing, hairline borders, radius + shadow tokens only. Gold
   appears as: the monthly recap banner, the live badge, and the current
   step in a job timeline. Everything else stays monochrome.
   ========================================================================== */

/* ---- trust line: "37 jobs · 94% on time", computed from tracked jobs ---- */

.wedge-trust-line { color: var(--ink-soft); }
.wedge-trust-line strong { color: var(--ink); font-weight: 600; }

.wedge-trust-line,
.wedge-job-price,
.wedge-recap-nums,
.wedge-measure dd {
  font-variant-numeric: tabular-nums lining-nums;
}

/* ---- verified-commission badge: quiet, monochrome, glyph-led ---- */

.wedge-verified {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 10px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: var(--surface);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  white-space: nowrap;
}

.wedge-verified svg {
  width: 11px;
  height: 11px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.wedge-portfolio-cell { position: relative; }

.wedge-verified-float {
  position: absolute;
  left: 10px;
  bottom: 10px;
  box-shadow: var(--shadow-soft); /* floats over the photo */
}

.wedge-verified-note,
.wedge-poster-line,
.wedge-ledger-note {
  margin-top: 10px;
  font-size: 13px;
  color: var(--mid);
}

.wedge-ledger-note a { color: var(--ink); }

/* ---- tagged-designer chip: "Made by …" with avatar ---- */

.wedge-made-by {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 18px;
  padding: 12px 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  text-decoration: none;
  color: inherit;
  transition: border-color 0.2s var(--ease-out);
}

.wedge-made-by:hover { border-color: var(--ink); }

.wedge-made-by img {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.wedge-made-by > span:not(.wedge-verified) {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.wedge-made-by strong { font-size: 14px; font-weight: 600; }
.wedge-made-by small { font-size: 12px; color: var(--mid); }
.wedge-made-by .wedge-verified { margin-left: auto; }

.wedge-request-source img { border-radius: var(--radius-sm); }

.wedge-request-cta { margin-top: 18px; }

/* ---- request flow scaffold ---- */

.wedge-request-sub { margin-top: 6px; font-size: 13px; color: var(--mid); }

.wedge-step-label {
  display: block;
  margin-top: 26px;
  color: var(--mid);
}

.wedge-form-intro { margin-top: 8px; font-size: 13px; color: var(--ink-soft); }

.wedge-optional {
  font-size: 11px;
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  color: var(--mid);
}

/* ---- reviews scoped to fit + deadline ---- */

.wedge-reviews {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: 16px;
}

.wedge-review {
  margin: 0;
  padding: 18px 20px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-review-scope { color: var(--mid); }

.wedge-review-text {
  margin-top: 8px;
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.35;
}

.wedge-review-meta { margin-top: 10px; font-size: 12px; color: var(--mid); }

/* ---- job timeline (buyer tracking + studio job detail) ---- */

.wedge-timeline {
  list-style: none;
  margin: 18px 0 0;
  padding: 0;
}

.wedge-step {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 0;
  border-top: 1px solid var(--hairline);
  font-size: 14px;
  color: var(--mid);
}

.wedge-step:last-child { border-bottom: 1px solid var(--hairline); }

.wedge-step-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1px solid var(--hairline);
  background: var(--paper);
  flex-shrink: 0;
}

.wedge-step.is-done { color: var(--ink-soft); }
.wedge-step.is-done .wedge-step-dot { background: var(--ink); border-color: var(--ink); }

.wedge-step.is-current { color: var(--ink); font-weight: 600; }
.wedge-step.is-current .wedge-step-dot {
  background: var(--gold); /* the small "something is happening" indicator */
  border-color: var(--gold);
}

.wedge-step-now { margin-left: auto; color: var(--mid); }

/* ---- buyer tracking page ---- */

.wedge-track-shell { padding-block: 12px 40px; }

.wedge-track-title { margin-top: 10px; font-size: clamp(30px, 5vw, 46px); }

.wedge-track-meta { margin-top: 10px; color: var(--ink-soft); }

.wedge-track-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 40px;
  margin-top: 34px;
}

.wedge-track-delivery .wedge-step.is-current .wedge-step-dot { background: var(--gold); }

.wedge-track-band { margin-top: 44px; }

/* ---- for-designers: the loop + pitch blocks + pricing ---- */

.wedge-loop {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin: 0;
  padding: 0;
}

.wedge-loop-step {
  padding: 20px 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-loop-title {
  margin-top: 10px;
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 520;
  line-height: 1.15;
}

.wedge-loop-text { margin-top: 8px; font-size: 14px; color: var(--ink-soft); }

.wedge-pitch-blocks {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(20px, 3vw, 40px);
}

.wedge-pitch-title {
  margin-top: 10px;
  font-family: var(--serif);
  font-size: clamp(22px, 2.6vw, 30px);
  font-weight: 500;
  line-height: 1.1;
}

.wedge-pitch-text { margin-top: 10px; font-size: 14px; color: var(--ink-soft); }

.wedge-pricing-row {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: clamp(24px, 4vw, 56px);
  align-items: start;
}

.wedge-pricing-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.wedge-price-card {
  padding: 22px 24px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-price-card-main { border-color: var(--ink); }

.wedge-price {
  margin-top: 10px;
  font-family: var(--serif);
  font-size: 30px;
  font-weight: 520;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-price small {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  color: var(--mid);
}

.wedge-price-lines {
  list-style: none;
  margin: 14px 0 0;
  padding: 0;
}

.wedge-price-lines li {
  padding: 8px 0;
  border-top: 1px solid var(--hairline);
  font-size: 13px;
  color: var(--ink-soft);
}

.wedge-price-card [data-wedge-trial-off],
.wedge-price-card [data-wedge-trial-state] { margin-top: 16px; }

.wedge-price-note { margin-top: 10px; font-size: 12px; color: var(--mid); }
.wedge-price-note a { color: var(--ink); }

/* ---- the monthly recap: the one gold banner ---- */

.wedge-recap {
  margin-block: 10px 26px;
  padding: clamp(24px, 4vw, 40px);
  border-radius: var(--radius);
  background: var(--gold);
  color: var(--ink);
}

.wedge-recap .micro { color: rgba(18, 18, 18, 0.62); }

.wedge-recap-headline {
  margin-top: 12px;
  font-family: var(--serif);
  font-size: clamp(24px, 3.4vw, 38px);
  font-weight: 520;
  line-height: 1.08;
  max-width: 22ch;
}

.wedge-recap-sub { margin-top: 10px; font-size: 14px; color: rgba(18, 18, 18, 0.78); }

.wedge-recap-list {
  list-style: none;
  margin: 20px 0 0;
  padding: 0;
}

.wedge-recap-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 10px 0;
  border-top: 1px solid rgba(18, 18, 18, 0.18);
  font-size: 14px;
}

.wedge-recap-look { font-weight: 600; }
.wedge-recap-look a { color: inherit; }
.wedge-recap-look small { font-weight: 400; color: rgba(18, 18, 18, 0.65); }
.wedge-recap-nums { white-space: nowrap; color: rgba(18, 18, 18, 0.82); }

/* ---- the Studio: enquiries, jobs board, tools ---- */

.wedge-enq-source { margin-top: 4px; font-size: 12px; color: var(--mid); }
.wedge-enq-source a { color: var(--ink); }

.wedge-job-list,
.wedge-client-orders {
  list-style: none;
  margin: 0;
  padding: 0;
}

.wedge-job-row {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 0;
  border-top: 1px solid var(--hairline);
  text-decoration: none;
  color: inherit;
  transition: color 0.2s var(--ease-out);
}

.wedge-job-list li:last-child .wedge-job-row,
.wedge-client-orders li:last-child .wedge-job-row { border-bottom: 1px solid var(--hairline); }

.wedge-job-code {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--mid);
  flex-shrink: 0;
}

.wedge-job-main {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1;
}

.wedge-job-main strong { font-size: 14px; font-weight: 600; }
.wedge-job-main small { font-size: 12px; color: var(--mid); }

.wedge-job-price { font-size: 13px; font-weight: 600; white-space: nowrap; }

.wedge-status {
  padding: 3px 11px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-soft);
  white-space: nowrap;
  flex-shrink: 0;
}

.wedge-status-ready { background: var(--ink); border-color: var(--ink); color: var(--paper); }
.wedge-status-delivery { border-color: var(--ink); color: var(--ink); }
.wedge-status-delivered { color: var(--mid); }

.wedge-status-updater {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}

.wedge-tool-links { display: flex; flex-direction: column; }

.wedge-tool-links a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 0;
  border-top: 1px solid var(--hairline);
  font-size: 14px;
  font-weight: 500;
  text-decoration: none;
  color: var(--ink);
}

.wedge-tool-links a:first-child { border-top: 0; padding-top: 4px; }
.wedge-tool-links a:hover .arrow { transform: translateX(3px); }
.wedge-tool-links .arrow { transition: transform 0.2s var(--ease-out); }

/* ---- client book ---- */

.wedge-client-list {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.wedge-client-cols {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: clamp(20px, 3vw, 40px);
  margin-top: 14px;
}

.wedge-measure-list { margin: 10px 0 0; }

.wedge-measure {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 0;
  border-top: 1px solid var(--hairline);
}

.wedge-measure dt { font-size: 13px; color: var(--mid); }
.wedge-measure dd { margin: 0; font-size: 13px; font-weight: 600; }

.wedge-notes-label { display: block; margin-top: 18px; }
.wedge-client-notes { margin-top: 8px; font-size: 13px; color: var(--ink-soft); }

/* ---- measurement form editor scaffold ---- */

.wedge-form-kinds { margin-block: 4px 22px; }
.wedge-form-kinds .chip { text-decoration: none; }

.wedge-field-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.wedge-field-row {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 0;
  border-top: 1px solid var(--hairline);
}

.wedge-field-row:last-child { border-bottom: 1px solid var(--hairline); }

.wedge-field-order {
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--hairline);
  border-radius: 50%;
  font-size: 11px;
  font-weight: 600;
  color: var(--mid);
  flex-shrink: 0;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-field-main {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1;
}

.wedge-field-main strong { font-size: 14px; font-weight: 600; }
.wedge-field-main small { font-size: 12px; color: var(--mid); }

.wedge-field-req {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  white-space: nowrap;
}

/* ---- wedge responsive: the 960 / 760 / 560 breakpoints only ---- */

@media (max-width: 960px) {
  .wedge-reviews,
  .wedge-pitch-blocks { grid-template-columns: 1fr; gap: 14px; }
  .wedge-pricing-row { grid-template-columns: 1fr; }
}

@media (max-width: 760px) {
  .wedge-track-cols { grid-template-columns: 1fr; gap: 28px; }
  .wedge-loop { grid-template-columns: 1fr; }
  .wedge-pricing-cards { grid-template-columns: 1fr; }
  .wedge-client-cols { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
  .wedge-job-price { display: none; }
  .wedge-recap-row { flex-direction: column; gap: 2px; }
  .wedge-made-by .wedge-verified { display: none; }
}

/* ---- W2 · buyer surfaces ------------------------------------------------ */

/* Home hero: the referral moment itself — copy left, a tagged look right */

.wedge-hero { padding-block: clamp(36px, 6vw, 72px) clamp(10px, 2vw, 24px); }

.wedge-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(280px, 0.9fr);
  gap: clamp(28px, 5vw, 64px);
  align-items: center;
}

.wedge-hero-copy .micro { display: block; margin-bottom: 12px; color: var(--mid); }

.wedge-hero-title { font-size: clamp(42px, 6vw, 68px); }

.wedge-hero-sub {
  margin-top: 16px;
  max-width: 46ch;
  font-size: 16px;
  color: var(--ink-soft);
}

.wedge-hero-ctas { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; }

.wedge-hero-card {
  position: relative;
  display: block;
  max-width: 460px;
  justify-self: end;
  width: 100%;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--paper-raised);
}

.wedge-hero-card > img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  transition: transform 0.6s var(--ease-out);
}

.wedge-hero-card:hover > img { transform: scale(1.03); }

/* Media plate for the hero card (the shared plate list sits outside the
   wedge section, so the rule is mirrored here). */
.wedge-hero-card::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border: 1px solid rgba(18, 18, 18, 0.06);
  border-radius: inherit;
  pointer-events: none;
}

.wedge-hero-card .designer-profile-chip { top: auto; bottom: 12px; }
.wedge-hero-card .wedge-verified-float { top: 12px; left: 12px; bottom: auto; }

/* Tagged-designer chip as a link (looks feed): floats above the card's
   cover link, so the name is tappable on its own */

a.designer-profile-chip {
  text-decoration: none;
  color: inherit;
  transition: transform 0.2s var(--ease-out), box-shadow 0.2s var(--ease-out);
}

a.designer-profile-chip:hover,
a.designer-profile-chip:focus-visible {
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

/* Mini chip on rail look cards: the name travels with the look everywhere */

.wedge-rail-chip { gap: 7px; padding: 5px 9px 5px 5px; max-width: calc(100% - 20px); }
.wedge-rail-chip img { width: 26px; height: 26px; }
.wedge-rail-chip strong { font-size: 11.5px; }

/* New on REEGo — the day-1 state: never a zero ledger */

.wedge-new-badge,
.wedge-scout-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--gold-tint);
  color: var(--gold-deep);
  font-family: var(--sans);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  white-space: nowrap;
}

.wedge-trust-line .wedge-new-badge { margin-right: 6px; vertical-align: 1px; }

.wedge-trust-line-new { display: inline-flex; align-items: center; }

.wedge-new-state { margin-top: 18px; }
.wedge-new-line { margin-top: 10px; font-size: 14px; color: var(--ink-soft); }

/* Ledger evidence: every stat taps through to the record behind it */

a.profile-stat { color: var(--ink-soft); }

.wedge-stat-link {
  text-decoration: underline;
  text-decoration-color: var(--hairline);
  text-underline-offset: 5px;
  transition: color 0.15s, text-decoration-color 0.15s;
}

.wedge-stat-link:hover,
.wedge-stat-link:focus-visible {
  color: var(--ink);
  text-decoration-color: var(--ink);
}

.wedge-ledger-state {
  flex: none;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink);
  white-space: nowrap;
}

.wedge-ledger-state.is-late { color: var(--mid); font-weight: 500; }

/* Capacity: the availability line, with the small live indicator */

.wedge-capacity {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 14px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--ink-soft);
}

.wedge-capacity .live-dot {
  width: 7px;
  height: 7px;
  flex: none;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

/* Style scout: the poster's referral stat — social currency, not cash */

.wedge-scout {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 18px;
  padding: 14px 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-scout img {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.wedge-scout p { margin-top: 6px; font-size: 13.5px; color: var(--ink-soft); }

/* The trust legend: a tappable "?" beside verified badges */

.wedge-legend {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  margin-left: 4px;
  padding: 0;
  border: 1px solid var(--hairline);
  border-radius: 50%;
  background: var(--surface);
  color: var(--mid);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  vertical-align: middle;
  transition: color 0.15s, border-color 0.15s, transform 0.15s var(--ease-out);
}

.wedge-legend:hover,
.wedge-legend:focus-visible { color: var(--ink); border-color: var(--ink); }
.wedge-legend:active { transform: scale(0.94); }

/* Portfolio cells double as lightbox buttons; the badge rides along */

.wedge-portfolio-cell { border: 0; text-align: inherit; }
.wedge-portfolio-cell .wedge-verified-float { pointer-events: none; }

.wedge-tile-row { flex-wrap: wrap; }

.wedge-ledger .wedge-ledger-note { margin-bottom: 4px; }

/* W2 responsive — the 960 / 760 / 560 breakpoints only */

@media (max-width: 960px) {
  .wedge-hero-grid { grid-template-columns: minmax(0, 1fr) minmax(240px, 0.9fr); }
}

@media (max-width: 760px) {
  .wedge-hero { padding-block: 28px 8px; }
  .wedge-hero-grid { grid-template-columns: 1fr; gap: 24px; }
  .wedge-hero-card { justify-self: start; max-width: 420px; }
  .wedge-legend { width: 36px; height: 36px; } /* touch target */
}

@media (max-width: 560px) {
  .wedge-hero-title { font-size: 42px; }
  .wedge-hero-sub { font-size: 15px; }
}

/* ==========================================================================
   WEDGE DEMO — W3 · request flow + order tracking
   Appended additive-only. The 4-step request wizard reuses the onboarding
   stitch progress (.onb / .onb-node / .onb-step); these rules only add the
   pieces the wizard needs — the inspiration picker, the units toggle, the
   measurement + contact fields — plus the tracking page's unknown-code state.
   Tokens only; the one gold accent is the current step's dot, already defined.
   ========================================================================== */

/* Wizard field rhythm — onboarding used one field per step; the wizard stacks
   several, so the fields need their own vertical spacing. One column. */
.wedge-request-wizard .field { margin-top: 16px; }

.wedge-field-note {
  margin-top: 8px;
  font-size: 12.5px;
  color: var(--mid);
}

/* Inspiration picker (step 2) */
.wedge-inspo-attached { margin-top: 20px; }

.wedge-inspo-label { display: block; margin-top: 22px; margin-bottom: 12px; }

.wedge-inspo-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.wedge-inspo {
  position: relative;
  padding: 0;
  border: 1px solid var(--hairline);
  border-radius: var(--radius-sm);
  background: var(--paper-raised);
  overflow: hidden;
  cursor: pointer;
  transition: border-color 0.18s var(--ease-out), transform 0.18s var(--ease-out);
}

.wedge-inspo img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
}

.wedge-inspo:hover { border-color: var(--ink-soft); }
.wedge-inspo:active { transform: scale(0.98); }
.wedge-inspo.is-picked { border-color: var(--ink); }

.wedge-inspo-check {
  position: absolute;
  top: 8px;
  right: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--ink);
  color: var(--paper);
  opacity: 0;
  transform: scale(0.7);
  transition: opacity 0.18s var(--ease-out), transform 0.18s var(--ease-out);
}

.wedge-inspo.is-picked .wedge-inspo-check { opacity: 1; transform: scale(1); }

.wedge-inspo-check svg {
  width: 14px;
  height: 14px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.wedge-inspo-note { margin-top: 12px; font-size: 12.5px; color: var(--mid); }

/* Measurement step controls: units toggle + "use my saved measurements" */
.wedge-measure-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 22px;
}

.wedge-units {
  display: inline-flex;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  overflow: hidden;
  background: var(--surface);
}

.wedge-unit-btn {
  min-width: 46px;
  min-height: 36px;
  padding: 0 14px;
  border: 0;
  background: transparent;
  color: var(--mid);
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease-out), color 0.18s var(--ease-out), transform 0.15s var(--ease-out);
}

.wedge-unit-btn.is-active { background: var(--ink); color: var(--paper); }
.wedge-unit-btn:active { transform: scale(0.97); }

.wedge-use-saved { color: var(--ink); }

.wedge-measure-later { display: block; margin-top: 16px; color: var(--mid); }

/* Confirmation extras (reuses .onb-final) */
.wedge-request-final .wedge-timeline { margin-top: 22px; }
.wedge-final-note { margin-top: 18px; }

/* Tracking — the unknown-code state: designed, never a dead end */
.wedge-track-missing { padding-block: 12px 40px; max-width: 560px; }
.wedge-track-missing .onb-actions { margin-top: 24px; }

@media (max-width: 560px) {
  .wedge-inspo-grid { gap: 8px; }
  .wedge-measure-controls { justify-content: flex-start; }
}

/* ==========================================================================
   WEDGE DEMO — W4 · the Studio (dashboard, client book, job detail)
   Appended additive-only. The designer's side of the wedge. Reuses the
   dashboard shell (.dash2 / .dash-cols / .dash-block / .stat-strip / .enq /
   .sub-card) and the wedge job/status/measure classes above. Gold shows only
   as: the recap banner (already defined), the trial live badge, the job
   timeline's current dot, and the "posted" confirmation badge — small
   accents, one banner. Everything else stays monochrome. Tokens only.
   ========================================================================== */

/* ---- Studio header + the recap's money-first hierarchy ---- */

.wedge-viewing { margin-top: 10px; font-size: 13px; color: var(--mid); }

.wedge-recap-figure {
  margin-top: 14px;
  font-family: var(--serif);
  font-weight: 520;
  font-size: clamp(44px, 8vw, 76px);
  line-height: 0.98;
  letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-recap-count {
  margin-top: 8px;
  font-size: 16px;
  font-weight: 600;
  color: var(--ink);
}

.wedge-recap-renew {
  margin-top: 16px;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink);
  font-variant-numeric: tabular-nums lining-nums;
}

/* ---- enquiries inbox: source tag, accept, and new (session) requests ---- */

.wedge-block-note { margin: 0 0 14px; font-size: 13px; color: var(--mid); }

.wedge-enq-accept.is-done { color: var(--mid); border-color: var(--hairline); cursor: default; }
.wedge-enq.is-accepted .enq-body { opacity: 0.55; }

.wedge-enq-new {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--ink);
  color: var(--paper);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  vertical-align: 1px;
}

.wedge-enq-live { margin-bottom: 4px; }

/* ---- jobs board grouped by status ---- */

.wedge-board { display: grid; gap: 22px; }

.wedge-job-group-head {
  margin-bottom: 2px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.wedge-job-group.is-empty { display: none; }

.wedge-job-li { list-style: none; }

.wedge-job-row-static { cursor: default; }
.wedge-job-row-static:hover { color: inherit; }

/* ---- Studio subscription card tweak ---- */

.sub-card .live-badge { margin-top: 4px; }
.sub-card .live-badge + .sub-note { margin-top: 12px; }

/* ---- client book: an expandable, searchable list (the daily-use tool) ---- */

.wedge-client-search { margin-block: 4px 18px; max-width: 420px; }

.wedge-clients {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.wedge-client-item {
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
  transition: border-color 0.2s var(--ease-out);
}

.wedge-client-item.is-open { border-color: var(--ink); }

.wedge-client-summary {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 16px 18px;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
  color: inherit;
  transition: background 0.18s var(--ease-out);
}

.wedge-client-summary:hover { background: var(--paper-raised); }
.wedge-client-summary:active { transform: scale(0.996); }

.wedge-client-id { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.wedge-client-id strong { font-size: 15px; font-weight: 600; }
.wedge-client-id small { font-size: 12px; color: var(--mid); }

.wedge-client-caret {
  display: inline-flex;
  flex: none;
  color: var(--mid);
  transition: transform 0.2s var(--ease-out);
}

.wedge-client-caret svg {
  width: 20px;
  height: 20px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.wedge-client-summary[aria-expanded="true"] .wedge-client-caret { transform: rotate(180deg); }

.wedge-client-detail { padding: 0 18px 18px; }
.wedge-client-detail .wedge-client-cols { margin-top: 0; }

.wedge-client-empty { margin-top: 18px; color: var(--mid); }

/* ---- job detail: the courier quote, decline, and completion post ---- */

.wedge-quote {
  margin-top: 14px;
  padding: 16px 18px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-quote-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.wedge-quote-name { font-size: 14px; font-weight: 600; }

.wedge-quote-fee {
  font-family: var(--serif);
  font-size: 18px;
  font-weight: 600;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-quote-note { margin-top: 6px; font-size: 12.5px; color: var(--mid); }

.wedge-track-delivery .btn { margin-top: 14px; }

[data-wedge-complete] .btn { margin-top: 14px; }
.wedge-posted-line { margin-top: 8px; }

.wedge-decline-row { margin-top: 24px; }

.wedge-decline {
  padding: 0;
  border: 0;
  background: none;
  color: var(--mid);
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
  transition: color 0.15s;
}

.wedge-decline:hover { color: var(--ink); }

.wedge-declined {
  margin-top: 16px;
  padding: 16px 18px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-declined .micro { display: block; margin-bottom: 6px; color: var(--mid); }
.wedge-declined a { color: var(--ink); font-weight: 600; }

/* ---- completion modal (reuses .composer) ---- */

.wedge-post-preview { margin-block: 4px 14px; border-radius: var(--radius-sm); overflow: hidden; }

.wedge-post-preview img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 5;
  max-height: 340px;
  object-fit: cover;
}

.wedge-post-photo-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  aspect-ratio: 3 / 2;
  border: 1px dashed var(--hairline);
  border-radius: var(--radius-sm);
  background: var(--paper-raised);
  color: var(--mid);
  font-size: 13px;
}

.wedge-post-photo-empty svg {
  width: 30px;
  height: 30px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.wedge-post-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }

.wedge-post-tag {
  display: inline-flex;
  align-items: center;
  padding: 3px 10px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: var(--surface);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink);
}

/* ---- W4 responsive: the 760 breakpoint only ---- */

@media (max-width: 760px) {
  .wedge-board { gap: 18px; }
  .wedge-client-summary { padding: 14px 15px; }
  .wedge-client-detail { padding: 0 15px 15px; }
}

/* ==========================================================================
   WEDGE DEMO — W5 · for-designers sales page + measurement form editor
   Appended additive-only. Screen 8 (the voice acceptance bar) and screen 12
   (the form-engine demo). Reuses the sales blocks defined above
   (.wedge-loop-*, .wedge-pitch-*, .wedge-pricing-*, .wedge-recap, .wedge-price-*)
   and the dashboard shell (.dash2 / .dash-block / .field / .field-input).
   Gold stays inside its budget: the recap banner is the one gold moment;
   the trial live badge is the only small accent. Everything else is mono.
   Tokens, radius tokens and the two shadow tokens only; static content here
   carries no shadow. ========================================================= */

/* ---- the referral loop, drawn (screen 8) ---- */

.wedge-flow {
  display: flex;
  align-items: stretch;
  gap: 10px;
  margin-top: 4px;
}

.wedge-flow-node {
  flex: 1 1 0;
  min-width: 0;
  padding: 20px 22px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-flow-node .micro { color: var(--mid); }

.wedge-flow-title {
  margin-top: 10px;
  font-family: var(--serif);
  font-size: 19px;
  font-weight: 520;
  line-height: 1.14;
}

.wedge-flow-text { margin-top: 8px; font-size: 13.5px; color: var(--ink-soft); }

.wedge-flow-arrow {
  align-self: center;
  flex-shrink: 0;
  font-size: 22px;
  line-height: 1;
  color: var(--mid);
}

.wedge-flow-loop {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin-top: 18px;
  font-size: 13px;
  font-weight: 600;
  color: var(--mid);
}

.wedge-flow-loop svg {
  width: 20px;
  height: 20px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  flex-shrink: 0;
}

/* ---- feature rows: pitch copy beside a monochrome proof card ---- */

.wedge-feature {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(24px, 4vw, 56px);
  align-items: center;
}

.wedge-feature-flip .wedge-feature-copy { order: 2; }
.wedge-feature-flip .wedge-proof { order: 1; }

.wedge-feature-note { margin-top: 14px; font-size: 14px; color: var(--ink-soft); }
.wedge-feature-note strong { color: var(--ink); font-weight: 600; }

.wedge-proof {
  padding: 22px 24px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-proof-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}

.wedge-proof-stat {
  font-size: 15px;
  font-weight: 600;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-proof-since {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  white-space: nowrap;
}

.wedge-proof-sub { margin-top: 6px; font-size: 12px; color: var(--mid); }

.wedge-proof-list {
  list-style: none;
  margin: 14px 0 0;
  padding: 0;
}

.wedge-proof-list li {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: baseline;
  gap: 4px 12px;
  padding: 10px 0;
  border-top: 1px solid var(--hairline);
}

.wedge-proof-code {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--mid);
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-proof-title { font-size: 13.5px; font-weight: 600; }

.wedge-proof-when {
  grid-column: 2;
  font-size: 12px;
  color: var(--mid);
}

.wedge-proof-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 16px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
  text-decoration: none;
}

.wedge-proof-link .arrow { transition: transform 0.2s var(--ease-out); }
.wedge-proof-link:hover .arrow { transform: translateX(3px); }

/* ---- client book preview (screen 8) ---- */

.wedge-client-preview {
  list-style: none;
  margin: 12px 0 0;
  padding: 0;
}

.wedge-client-preview li {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  border-top: 1px solid var(--hairline);
}

.wedge-client-preview-avatar {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--paper-raised);
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-soft);
}

.wedge-client-preview-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.wedge-client-preview-main strong { font-size: 14px; font-weight: 600; }
.wedge-client-preview-main small { font-size: 12px; color: var(--mid); }

/* ---- the 0% promise, given its own room (monochrome by design) ---- */

.wedge-zero {
  text-align: center;
  padding: clamp(28px, 5vw, 56px);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-zero-line {
  font-family: var(--serif);
  font-size: clamp(28px, 5vw, 50px);
  font-weight: 520;
  line-height: 1.05;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.wedge-zero-num { font-variant-numeric: tabular-nums lining-nums; }

.wedge-zero-sub {
  margin: 16px auto 0;
  max-width: 48ch;
  font-size: 15px;
  color: var(--ink-soft);
}

/* ---- pricing flag: monochrome ribbon on the default tier ---- */

.wedge-price-flag {
  display: inline-block;
  margin-bottom: 12px;
  padding: 4px 11px;
  border-radius: 999px;
  background: var(--ink);
  color: var(--paper);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

/* ==========================================================================
   Measurement form editor (screen 12)
   The field list and the preview are both rendered by reego.js from the
   field defs — this CSS only dresses the containers and controls.
   ========================================================================== */

.wedge-form-editor { align-items: start; }

/* field rows carry controls on the right; reuses .wedge-field-row/.wedge-field-order */

.wedge-field-list .wedge-field-main small { text-transform: none; letter-spacing: 0; }

.wedge-field-controls {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}

.wedge-field-btn {
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: var(--surface);
  color: var(--ink);
  cursor: pointer;
  transition: border-color 0.18s var(--ease-out), color 0.18s var(--ease-out), transform 0.15s var(--ease-out);
}

.wedge-field-btn svg {
  width: 17px;
  height: 17px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.9;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.wedge-field-btn:hover { border-color: var(--ink); }
.wedge-field-btn:active { transform: scale(0.94); }
.wedge-field-btn:disabled { color: var(--hairline); cursor: not-allowed; }
.wedge-field-btn:disabled:hover { border-color: var(--hairline); }

.wedge-field-empty {
  padding: 22px 0;
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
  font-size: 13px;
  color: var(--mid);
}

/* add-a-field controls */

.wedge-field-add {
  margin-top: 22px;
  padding: 20px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.wedge-field-add > .micro { display: block; margin-bottom: 12px; color: var(--mid); }

.wedge-field-add-grid {
  display: grid;
  grid-template-columns: 1fr 150px;
  gap: 12px;
}

.wedge-field-add-options { margin-top: 12px; }

.wedge-field-add-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin-top: 14px;
}

.wedge-check {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: 36px;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  cursor: pointer;
}

.wedge-check input {
  width: 20px;
  height: 20px;
  accent-color: var(--ink);
  cursor: pointer;
}

.wedge-form-editor-foot { margin-top: 18px; }

.wedge-preview-empty {
  margin: 0;
  font-size: 13px;
  color: var(--mid);
}

.wedge-form-preview .wedge-preview-send { margin-top: 4px; }

/* ---- W5 responsive: 960 / 760 only ---- */

@media (max-width: 960px) {
  .wedge-feature { grid-template-columns: 1fr; gap: 22px; }
  .wedge-feature-flip .wedge-feature-copy { order: 1; }
  .wedge-feature-flip .wedge-proof { order: 2; }
}

@media (max-width: 760px) {
  .wedge-flow { flex-direction: column; gap: 8px; }
  .wedge-flow-arrow { transform: rotate(90deg); }
  .wedge-field-add-grid { grid-template-columns: 1fr; }
}

/* ==========================================================================
   THE FLOW SCREENS — W6 · mobile 360 pass
   Appended additive-only. Hardens the flow screens at the 360px design
   width: the thumbnail grid must be able to shrink below the photo's
   intrinsic width, and the standalone text-link controls are lifted to the
   36px touch-target floor on phones. Existing 960 / 760 / 560 breakpoints
   only. Tokens only — no new colours, radii or shadows; nothing above this
   line changes. ========================================================== */

/* Inspiration picker: guarantee the three thumbnail tracks can shrink below
   their images' intrinsic width so a 360px screen never scrolls sideways. */
.wedge-inspo-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }

/* Touch targets: standalone text-link controls (decline a job, the two
   measurement-step escape hatches, reset the form) sit under 36px as inline
   links. On phones give them the tap floor the manual requires; desktop keeps
   the quiet inline-link look. */
@media (max-width: 760px) {
  .wedge-decline,
  .wedge-use-saved,
  [data-wedge-form-reset] {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
  }
  .wedge-measure-later {
    display: flex;
    align-items: center;
    min-height: 36px;
  }
}

/* ==========================================================================
   WEDGE DEMO — screens 13 + 14 (plan §8.2): the paywall + the enquiry thread
   Appended additive-only. Reuses the dashboard shell (.dash2 / .dash-block /
   .field / .ghs-input), the recap banner, the .composer modal, and the
   .btn / .wedge-verified / .wedge-made-by components. Gold stays where the
   law puts it: the recap banner (one per screen) and small live dots only —
   everything new here is monochrome, tokens only, 960/760/560 breakpoints.
   ========================================================================== */

/* ---- Screen 14: the enquiry thread ---- */

.wedge-thread {
  list-style: none;
  margin: 4px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.wedge-msg {
  max-width: 84%;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.wedge-msg-buyer { align-self: flex-start; align-items: flex-start; }
.wedge-msg-designer { align-self: flex-end; align-items: flex-end; }

.wedge-msg-meta { font-size: 12px; color: var(--mid); }
.wedge-msg-meta strong { font-weight: 600; color: var(--ink); }
.wedge-msg-meta span { margin-left: 6px; }

.wedge-msg-text {
  margin: 0;
  padding: 12px 15px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  font-size: 14px;
  color: var(--ink-soft);
}

.wedge-msg-designer .wedge-msg-text {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--paper);
}

.wedge-msg-attach { display: block; width: 148px; max-width: 62vw; }

.wedge-msg-attach img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--radius-sm);
  border: 1px solid var(--hairline);
}

.wedge-msg-attach small { display: block; margin-top: 5px; font-size: 11px; color: var(--mid); }

/* the quote composer + the accept + the now-a-job state */

.wedge-quote-card .wedge-field-spaced { margin-top: 12px; }
.wedge-quote-send { width: 100%; margin-top: 16px; }

.wedge-quote-accept { margin-top: 14px; }
.wedge-quote-accept .micro { display: block; margin-bottom: 6px; }
.wedge-quote-accept .btn { width: 100%; margin-top: 12px; }
.wedge-quote-accept .link-btn { margin-top: 12px; }

.wedge-quote-done { margin-top: 14px; }
.wedge-quote-done .btn { width: 100%; margin-top: 12px; }

[data-wedge-quote-shown],
[data-wedge-quote-final] { font-variant-numeric: tabular-nums lining-nums; }

/* the "open · quote" link the JS drops onto each Studio enquiry */

.wedge-enq-open {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 36px;
  margin-top: 2px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink);
  text-decoration: none;
}

.wedge-enq-open .arrow { transition: transform 0.2s var(--ease-out); }
.wedge-enq-open:hover .arrow { transform: translateX(3px); }

/* the "see plans" button the JS drops into the Studio subscription card */

.wedge-see-plans { width: 100%; margin-top: 14px; }

/* ---- Screen 13: the paywall / conversion moment ---- */

.wedge-upgrade .wedge-recap { margin-top: 0; }
.wedge-upgrade-choose { margin-top: 8px; }

.wedge-plans {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-top: 18px;
}

.wedge-plan {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 20px;
  border: 1.5px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  cursor: pointer;
  transition: border-color 0.18s var(--ease-out), box-shadow 0.18s var(--ease-out);
}

.wedge-plan:hover { border-color: var(--ink-soft); }

.wedge-plan-radio { position: absolute; opacity: 0; width: 1px; height: 1px; }

.wedge-plan:has(.wedge-plan-radio:checked) {
  border-color: var(--ink);
  box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.06);
}

.wedge-plan:has(.wedge-plan-radio:focus-visible) { border-color: var(--ink); }

.wedge-plan-flag {
  position: absolute;
  top: -10px;
  left: 18px;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--ink);
  color: var(--paper);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.wedge-plan-head { display: flex; flex-direction: column; gap: 4px; }

.wedge-plan-price {
  font-family: var(--serif);
  font-size: 26px;
  font-weight: 520;
  font-variant-numeric: tabular-nums lining-nums;
}

.wedge-plan-price small { font-family: var(--sans); font-size: 12px; font-weight: 500; color: var(--mid); }
.wedge-plan-per { font-size: 12px; color: var(--mid); }
.wedge-plan-note { font-size: 13px; color: var(--ink-soft); }

.wedge-plan-tick {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 22px;
  height: 22px;
  display: grid;
  place-items: center;
  border: 1.5px solid var(--hairline);
  border-radius: 50%;
  color: var(--paper);
  opacity: 0;
  transition: opacity 0.18s var(--ease-out);
}

.wedge-plan-tick svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }

.wedge-plan:has(.wedge-plan-radio:checked) .wedge-plan-tick {
  opacity: 1;
  background: var(--ink);
  border-color: var(--ink);
}

.wedge-upgrade-keeps { margin-top: 22px; }
.wedge-upgrade-pay { width: 100%; margin-top: 18px; }
[data-wedge-pay-amount],
[data-wedge-pay-sheet-amount],
[data-wedge-pay-btn-amount] { font-variant-numeric: tabular-nums lining-nums; }

.wedge-upgrade-done .wedge-pitch-title { margin-top: 12px; }
.wedge-upgrade-done .enq-msg { margin-top: 8px; }
.wedge-upgrade-done .onb-actions-final { margin-top: 20px; }

.wedge-deactivate-list { list-style: none; margin: 8px 0 0; padding: 0; }

.wedge-deactivate-list li {
  position: relative;
  padding: 9px 0 9px 22px;
  border-top: 1px solid var(--hairline);
  font-size: 13.5px;
  color: var(--ink-soft);
}

.wedge-deactivate-list li:first-child { border-top: 0; }

.wedge-deactivate-list li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 16px;
  width: 8px;
  height: 8px;
  border: 1.5px solid var(--mid);
  border-radius: 50%;
}

/* the fake Paystack sheet */

.wedge-pay-panel { max-width: 360px; text-align: left; }

.wedge-pay-amount {
  margin-top: 14px;
  font-family: var(--serif);
  font-weight: 520;
  font-size: 44px;
  line-height: 1;
}

.wedge-pay-plan { margin-top: 6px; font-size: 13px; color: var(--mid); }

.wedge-pay-method {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: 18px;
  padding: 14px 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.wedge-pay-method-label { font-size: 11px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--mid); }
.wedge-pay-method-value { font-size: 13px; font-weight: 600; }

.wedge-pay-confirm { width: 100%; margin-top: 18px; }
.wedge-pay-note { margin-top: 12px; font-size: 12px; color: var(--mid); }

@media (max-width: 560px) {
  .wedge-plans { grid-template-columns: 1fr; }
  .wedge-msg { max-width: 92%; }
}

/* ==========================================================================
   W7-0 — the owner console (DESIGN.md Workstream I · plan Phase 11)
   A working back office, held to the same manual as the shop window: two
   typefaces, the token palette, one accent.

   The accent budget for the whole console, spent deliberately:
     1. the live dot in the top bar,
     2. the live dot on the nav entry that has something waiting,
     3. two `.live-badge` chips — "5 waiting" on moderation and the running
        A/B on billing.
   Nothing else here is gold. Status is carried by weight, fill and a word —
   never by colour, because a back office read on a phone in daylight has to
   survive without it.

   Density is the point: rows over cards where a list is long, hairlines over
   boxes, numbers set in tabular figures so a column of them lines up. 360px
   first; the nav is a scrolling rail on phones and a sidebar from 960px.
   ========================================================================== */

.console-body {
  --console-bar-h: 54px;
  background: var(--paper);
}

/* Panels, rows and the save bar are shown and hidden with the `hidden`
   attribute, so it has to beat the layout `display` on their own classes.
   Without JS every one of them rests in its resting state - closed panels
   stay closed, the save bar stays away, nothing is stranded invisible. */
.console-body [hidden] { display: none; }

.console-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* ---- top bar ----------------------------------------------------------- */

.console-bar {
  position: sticky;
  top: 0;
  z-index: 40;
  background: rgba(250, 249, 246, 0.9);
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
  backdrop-filter: blur(14px) saturate(1.4);
  border-bottom: 1px solid var(--hairline);
}

.console-bar-row {
  width: 100%;
  max-width: var(--shell);
  min-height: var(--console-bar-h);
  margin-inline: auto;
  padding-inline: var(--gutter);
  display: flex;
  align-items: center;
  gap: 14px;
}

.console-brand { display: flex; align-items: center; }
.console-brand .wordmark { font-size: 20px; }

.console-brand-tag {
  margin-left: 10px;
  padding-left: 10px;
  border-left: 1px solid var(--hairline);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.console-bar-meta {
  display: none;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--mid);
}

.console-live { display: inline-flex; align-items: center; gap: 7px; color: var(--ink); font-weight: 500; }

.console-live .live-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

.console-bar-sep { color: var(--hairline); }

.console-bar-end {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 14px;
}

.console-out {
  display: none;
  align-items: center;
  min-height: 36px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-soft);
}

.console-out:hover { color: var(--ink); }
.console-out:hover .arrow { transform: translateX(3px); }

.console-who { display: inline-flex; align-items: center; gap: 8px; }

.console-who-mark {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--ink);
  color: var(--paper);
  display: grid;
  place-items: center;
  font-family: var(--serif);
  font-size: 14px;
}

.console-who-name { display: none; font-size: 13px; font-weight: 500; }

/* ---- frame + nav ------------------------------------------------------- */

.console-frame {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--gutter);
  padding-bottom: 64px;
}

.console-nav {
  position: sticky;
  top: var(--console-bar-h);
  z-index: 30;
  margin-inline: calc(var(--gutter) * -1);
  padding: 8px var(--gutter);
  background: var(--paper);
  border-bottom: 1px solid var(--hairline);
}

.console-nav-scroll {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  scrollbar-width: none;
}

.console-nav-scroll::-webkit-scrollbar { display: none; }

.console-nav-item {
  flex: none;
  min-height: 38px;
  display: inline-flex;
  align-items: center;
  padding: 0 15px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: var(--surface);
  font-size: 13px;
  font-weight: 500;
  white-space: nowrap;
  transition: background 0.15s, border-color 0.15s, color 0.15s,
    transform 0.15s var(--ease-out);
}

.console-nav-item:hover { border-color: var(--ink); }
.console-nav-item:active { transform: scale(0.97); }

.console-nav-item.is-active {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--paper);
}

.console-nav-label { display: inline-flex; align-items: center; gap: 7px; }
.console-nav-blurb { display: none; }

/* the one "something is happening" dot the manual allows */
.console-nav-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold);
  animation: pulse 2.2s infinite;
}

.console-main { padding-top: 22px; }

.console-foot {
  margin-top: 48px;
  padding-top: 16px;
  border-top: 1px solid var(--hairline);
  font-size: 12px;
  color: var(--mid);
}

.console-foot a { text-decoration: underline; text-decoration-color: var(--hairline); text-underline-offset: 3px; }

/* ---- page head --------------------------------------------------------- */

.console-title { margin-top: 8px; font-size: clamp(28px, 7vw, 40px); }

.console-lede {
  margin-top: 10px;
  max-width: 64ch;
  font-size: 14.5px;
  color: var(--ink-soft);
}

.console-badge-row { margin-top: 14px; }

/* ---- the two containers: a bordered card, and a plain block ------------- */

.console-card {
  margin-top: 26px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
}

.console-card-head {
  padding: 16px;
  border-bottom: 1px solid var(--hairline);
}

.console-card-title { margin-top: 6px; font-family: var(--serif); font-weight: 500; font-size: 20px; line-height: 1.15; }
.console-card-note { margin-top: 8px; max-width: 62ch; font-size: 12.5px; color: var(--mid); }

.console-block { margin-top: 30px; }

.console-block-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px 16px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--hairline);
}

.console-block-title { font-family: var(--serif); font-weight: 500; font-size: 20px; }
.console-block-meta { flex: 1 1 auto; max-width: 62ch; font-size: 12.5px; color: var(--mid); }

.console-panel-note { margin-top: 12px; max-width: 66ch; font-size: 13px; color: var(--ink-soft); }
.console-hint { margin-top: 10px; max-width: 66ch; font-size: 12.5px; color: var(--mid); }

.console-empty {
  margin-top: 18px;
  padding: 26px 20px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  text-align: center;
  font-size: 13.5px;
  color: var(--mid);
}

/* Designed zero states (R1): every list renders its day-1 truth server-side,
   as an {% empty %} branch — no JS required. `is-row` sits inside a list
   that already carries the border. */
li.console-empty { list-style: none; }
.console-empty.is-row { margin-top: 0; border: 0; border-radius: 0; }
.console-empty-title { font-family: var(--serif); font-weight: 500; font-size: 16px; color: var(--ink); }
.console-empty-sub { margin-top: 5px; font-size: 12.5px; color: var(--mid); }

/* ---- the state pill: monochrome, the word carries the meaning ----------- */

.console-state {
  flex: none;
  display: inline-flex;
  align-items: center;
  padding: 4px 10px 4px 11px;
  border-radius: 999px;
  border: 1px solid var(--hairline);
  background: var(--surface);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
  white-space: nowrap;
}

.console-state.is-met,
.console-state.is-active { border-color: var(--ink); color: var(--ink); }
.console-state.is-watch,
.console-state.is-trialing,
.console-state.is-free,
.console-state.is-scheduled { border-color: var(--hairline); color: var(--mid); }
.console-state.is-past_due,
.console-state.is-live { border-color: var(--ink-soft); color: var(--ink-soft); }
.console-state.is-lapsed,
.console-state.is-ended,
.console-state.is-used_up { background: var(--paper-raised); border-color: var(--paper-raised); color: var(--mid); }
.console-state.is-fail { background: var(--ink); border-color: var(--ink); color: var(--paper); }

.console-tag {
  display: inline-flex;
  align-items: center;
  padding: 3px 9px 3px 10px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-soft);
  white-space: nowrap;
}

/* ---- the meter: one bar, one fill, no colour --------------------------- */

.console-meter {
  height: 6px;
  border-radius: 999px;
  background: var(--paper-raised);
  overflow: hidden;
}

.console-meter-fill {
  display: block;
  height: 100%;
  width: var(--fill, 0%);
  border-radius: inherit;
  background: var(--ink);
}

/* ---- screen 1 · the pilot gates ---------------------------------------- */

.console-gates { margin-top: 22px; }
.console-gate-list { list-style: none; }

.console-gate { padding: 16px; border-top: 1px solid var(--hairline); }
.console-gate:first-child { border-top: 0; }

.console-gate-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.console-gate-title { font-family: var(--serif); font-weight: 500; font-size: 17px; line-height: 1.15; }
.console-gate-where { margin-top: 3px; font-size: 12.5px; color: var(--mid); }

.console-gate-figures { margin-top: 12px; display: grid; gap: 10px; }
.console-gate-figure dd { margin-top: 3px; }
.console-gate-now { font-size: 15px; font-weight: 600; }
.console-gate-target { font-size: 13px; color: var(--ink-soft); }

.console-gate .console-meter { margin-top: 14px; }
.console-gate.is-watch .console-meter-fill { background: var(--ink-soft); }
.console-gate.is-fail .console-meter-fill { background: var(--mid); }

.console-gate-note { margin-top: 10px; font-size: 12.5px; color: var(--mid); }

/* ---- screen 1 · the numbers -------------------------------------------- */

.console-stats {
  margin-top: 14px;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--hairline);
  overflow: hidden;
}

.console-stat { display: grid; align-content: start; gap: 2px; padding: 14px; background: var(--surface); }
.console-stat:last-child:nth-child(odd) { grid-column: 1 / -1; }

.console-stat-value {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(24px, 5vw, 30px);
  line-height: 1;
}

.console-stat-label { margin-top: 8px; font-size: 13px; font-weight: 600; }
.console-stat-note { font-size: 12px; color: var(--mid); }

/* ---- screen 1 · the series --------------------------------------------- */

.console-seg {
  display: inline-flex;
  gap: 3px;
  padding: 3px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: var(--surface);
}

.console-seg-btn {
  min-height: 36px;
  padding: 0 15px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--mid);
  transition: background 0.15s, color 0.15s, transform 0.15s var(--ease-out);
}

.console-seg-btn:hover { color: var(--ink); }
.console-seg-btn:active { transform: scale(0.97); }
.console-seg-btn.is-active { background: var(--ink); color: var(--paper); }

.console-series { margin-top: 18px; display: grid; gap: 22px; }
.console-series-caption { font-size: 12px; color: var(--mid); }

.console-series-label { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.console-series-name { font-size: 13px; font-weight: 600; }
.console-series-total { font-size: 12px; color: var(--mid); }

.console-series-bars { margin-top: 10px; display: flex; align-items: stretch; gap: 6px; }

/* the middle row is a fixed height on purpose: `height: var(--fill)` on the
   fill needs a definite containing block, and a 1fr row is not one */
.console-series-bar {
  flex: 1;
  min-width: 0;
  display: grid;
  grid-template-rows: auto 68px auto;
  gap: 5px;
}

.console-series-bar-value {
  font-size: 10.5px;
  color: var(--mid);
  text-align: center;
}

.console-series-bar-fill {
  align-self: end;
  width: 100%;
  height: var(--fill, 0%);
  min-height: 2px;
  background: var(--ink);
}

.console-series-bar-label { font-size: 10px; color: var(--mid); text-align: center; white-space: nowrap; }

/* ---- screen 1 · needs you ---------------------------------------------- */

.console-todo { list-style: none; }

.console-todo-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 14px;
  padding: 14px 0;
  border-top: 1px solid var(--hairline);
}

.console-todo-row:first-child { border-top: 0; }

.console-todo-count {
  flex: none;
  min-width: 30px;
  font-family: var(--serif);
  font-weight: 500;
  font-size: 26px;
  line-height: 1;
}

.console-todo-body { flex: 1 1 160px; min-width: 0; }
.console-todo-text { display: block; font-size: 14px; font-weight: 500; }
.console-todo-sub { display: block; font-size: 12.5px; color: var(--mid); }

.console-todo-go {
  flex: none;
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 600;
}

.console-todo-go:hover .arrow { transform: translateX(3px); }

/* ---- toolbar, search, filter chips ------------------------------------- */

.console-toolbar { margin-top: 22px; display: grid; gap: 10px; }
.console-search { position: relative; display: block; }

.console-search-glyph {
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  width: 17px;
  height: 17px;
  fill: none;
  stroke: var(--mid);
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

.console-search-input { padding-left: 42px; min-height: 46px; }
.console-toolbar-note { font-size: 12.5px; color: var(--mid); }

.console-chips { margin-top: 14px; }
.console-chip-count { color: var(--mid); }
.chip.is-active .console-chip-count { color: var(--hairline); }

/* ---- screen 2 · the cohort book ---------------------------------------- */

.console-people {
  list-style: none;
  margin-top: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
}

.console-person { border-top: 1px solid var(--hairline); }
.console-person:first-child { border-top: 0; }
.console-person.is-suspended { background: var(--paper-raised); }

.console-person-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 12px;
  padding: 14px;
}

.console-mark {
  flex: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--paper-raised);
  display: grid;
  place-items: center;
  font-family: var(--serif);
  font-size: 17px;
  color: var(--ink-soft);
}

.console-mark.is-small { width: 22px; height: 22px; font-size: 11px; }

.console-person-id { flex: 1 1 170px; min-width: 0; }
.console-person-name { font-family: var(--serif); font-weight: 500; font-size: 17px; line-height: 1.15; }
.console-person-line { margin-top: 3px; font-size: 13px; }
.console-person-sub { margin-top: 2px; font-size: 12.5px; color: var(--mid); }

.console-person-states { flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: 6px; }

.console-expand {
  flex: none;
  margin-left: auto;
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 0 13px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 600;
  transition: border-color 0.15s, transform 0.15s var(--ease-out);
}

.console-expand:hover { border-color: var(--ink); }
.console-expand:active { transform: scale(0.97); }
.console-expand-close { display: none; }
.console-expand[aria-expanded="true"] .console-expand-open { display: none; }
.console-expand[aria-expanded="true"] .console-expand-close { display: inline; }

.console-expand-glyph {
  width: 14px;
  height: 14px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform 0.2s var(--ease-out);
}

.console-expand[aria-expanded="true"] .console-expand-glyph { transform: rotate(180deg); }

.console-person-panel { margin: 0 14px; padding: 14px 0 16px; border-top: 1px solid var(--hairline); }

.console-facts { display: grid; gap: 12px; }
.console-fact dd { margin-top: 4px; font-size: 13.5px; }
.console-fact-sub { display: block; font-size: 12px; color: var(--mid); }

.console-person-actions { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 8px; }
.console-action { min-height: 38px; padding: 8px 16px; font-size: 13px; }
.console-danger { border-color: var(--ink-soft); }

.console-suspended {
  margin-top: 4px;
  padding: 14px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-suspended-line { margin-top: 6px; font-size: 14px; font-weight: 600; }
.console-suspended-note { margin-top: 4px; font-size: 13px; color: var(--ink-soft); }
.console-suspended .console-action { margin-top: 12px; }

/* the suspension flow — the reason is not optional, so the button waits */

.console-suspend {
  margin-top: 14px;
  padding: 16px;
  border: 1px solid var(--ink);
  border-radius: var(--radius);
  background: var(--paper-raised);
}

.console-suspend-title { font-family: var(--serif); font-weight: 500; font-size: 18px; }
.console-suspend-head .console-hint { margin-top: 6px; }

.console-reasons { border: 0; margin-top: 16px; display: grid; gap: 8px; }
.console-reasons legend { margin-bottom: 8px; }

.console-reason {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  min-height: 44px;
  padding: 11px 13px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  cursor: pointer;
  transition: border-color 0.15s;
}

.console-reason:hover { border-color: var(--ink-soft); }
.console-reason:has(.console-reason-radio:checked) { border-color: var(--ink); }

.console-reason-radio { flex: none; width: 16px; height: 16px; margin-top: 3px; accent-color: var(--ink); }
.console-reason-body { display: grid; gap: 2px; }
.console-reason-label { font-size: 13.5px; font-weight: 600; }
.console-reason-help { font-size: 12.5px; color: var(--mid); }

.console-suspend-note { margin-top: 16px; }
.console-textarea { min-height: 88px; padding: 12px 14px; resize: vertical; }
.console-suspend-note .console-hint { margin-top: 6px; }

.console-notice {
  margin-top: 16px;
  padding: 14px;
  border-left: 2px solid var(--ink);
  border-radius: 0 var(--radius) var(--radius) 0;
  background: var(--surface);
}

.console-notice-body { margin-top: 7px; font-size: 13.5px; color: var(--ink-soft); }
.console-notice-body em { font-style: italic; color: var(--ink); }

.console-suspend-guard { margin-top: 14px; }
.console-suspend-guard.is-clear { color: var(--ink); }
.console-suspend-actions { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 8px; }
.console-suspend-actions .btn[disabled] { opacity: 0.45; cursor: not-allowed; }
.console-suspend-actions .btn[disabled]:hover { transform: none; }

/* ---- screen 3 · moderation --------------------------------------------- */

.console-tabs {
  margin-top: 22px;
  display: flex;
  gap: 2px;
  border-bottom: 1px solid var(--hairline);
  overflow-x: auto;
  scrollbar-width: none;
}

.console-tabs::-webkit-scrollbar { display: none; }

.console-tab {
  flex: none;
  min-height: 44px;
  padding: 0 14px;
  border-bottom: 2px solid transparent;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--mid);
  white-space: nowrap;
  transition: color 0.15s, border-color 0.15s;
}

.console-tab:hover { color: var(--ink); }
.console-tab.is-active { color: var(--ink); border-bottom-color: var(--ink); }

.console-flags { list-style: none; margin-top: 16px; display: grid; gap: 12px; }

.console-flag {
  padding: 14px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-flag-row { display: flex; gap: 13px; }

.console-flag-plate {
  position: relative;
  flex: none;
  width: 72px;
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-sm);
  background: var(--paper-raised);
  overflow: hidden;
}

/* the manual's media plate, restated locally rather than editing the shared
   polish selector list (board §3b: annotate in your own block) */
.console-flag-plate::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border: 1px solid rgba(18, 18, 18, 0.06);
  border-radius: inherit;
  pointer-events: none;
}

.console-flag-plate img { width: 100%; height: 100%; object-fit: cover; }
.console-flag-plate.is-empty { display: grid; place-items: center; padding: 6px; text-align: center; }

.console-flag-body { flex: 1; min-width: 0; }
.console-flag-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.console-flag-ref { font-size: 11.5px; color: var(--mid); }
.console-flag-title { margin-top: 7px; font-family: var(--serif); font-weight: 500; font-size: 16px; line-height: 1.2; }
.console-flag-poster { margin-top: 3px; font-size: 13px; }
.console-flag-sub { margin-top: 2px; font-size: 12px; color: var(--mid); }
.console-flag-note { margin-top: 8px; font-size: 13px; color: var(--ink-soft); }

.console-flag-actions { margin-top: 13px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; }
.console-flag-hint { margin-top: 0; flex: 1 1 220px; }

.console-quiet-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 36px;
  min-width: 36px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-soft);
  text-decoration: underline;
  text-decoration-color: var(--hairline);
  text-underline-offset: 4px;
  transition: color 0.15s;
}

.console-quiet-link:hover { color: var(--ink); text-decoration-color: var(--ink); }
.console-quiet-link:hover .arrow { transform: translateX(3px); }

.console-confirm {
  margin-top: 13px;
  padding: 14px;
  border: 1px solid var(--ink);
  border-radius: var(--radius);
  background: var(--paper-raised);
}

/* muted grey on the raised panels lands just under AA at this size, so the
   copy inside a confirm or suspend panel steps up to --ink-soft */
.console-confirm .console-hint,
.console-suspend .console-hint { color: var(--ink-soft); }
.console-confirm .console-hint { margin-top: 0; }
.console-confirm-actions { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 8px; }

/* ---- screen 4 · plans, promos, the A/B --------------------------------- */

.console-plans { list-style: none; margin-top: 16px; display: grid; gap: 12px; }

.console-plan {
  padding: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-plan.is-default { border-color: var(--ink); }
.console-plan-head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px; }
.console-plan-head > div { flex: 1 1 160px; }
.console-plan-name { font-family: var(--serif); font-weight: 500; font-size: 17px; line-height: 1.15; }
.console-plan-key { margin-top: 3px; font-size: 11.5px; color: var(--mid); }
.console-plan-body { margin-top: 14px; display: grid; gap: 14px; }
.console-plan-note { margin-top: 12px; font-size: 12.5px; color: var(--mid); }
.console-plan-set { margin-top: 10px; }

.console-money { display: flex; align-items: center; gap: 9px; }

.console-money-unit {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mid);
}

.console-money-input { width: 96px; font-weight: 600; }
.console-money-per { font-size: 12.5px; color: var(--mid); }

.console-fields { display: grid; gap: 16px; }
.console-fields .console-hint { margin-top: 0; }
.console-input-row { display: flex; align-items: center; gap: 9px; }
.console-number-input { width: 92px; text-align: right; font-weight: 600; }
.console-unit { font-size: 12.5px; color: var(--mid); white-space: nowrap; }
.console-upper { width: 160px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.14em; }

.console-panel {
  margin-top: 14px;
  padding: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-promos { list-style: none; margin-top: 16px; display: grid; gap: 10px; }

.console-promo {
  padding: 14px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-promo.is-ended,
.console-promo.is-used_up { background: var(--paper-raised); }

.console-promo-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.console-promo-code { font-size: 14px; font-weight: 600; letter-spacing: 0.14em; }
.console-promo-line { margin-top: 6px; font-size: 13px; color: var(--ink-soft); }
.console-promo-use { margin-top: 11px; display: flex; align-items: center; gap: 10px; }
.console-promo-use .console-meter { flex: 1; min-width: 60px; }
.console-promo-count { flex: none; font-size: 12px; color: var(--mid); }
.console-promo-note { margin-top: 8px; font-size: 12.5px; color: var(--mid); }

.console-arms { margin-top: 16px; display: grid; gap: 12px; }

.console-arm {
  padding: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-arm.is-leading { border-color: var(--ink); }
.console-arm-head { display: flex; align-items: flex-start; gap: 12px; }

.console-arm-letter {
  flex: none;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 1px solid var(--ink);
  display: grid;
  place-items: center;
  font-family: var(--serif);
  font-size: 15px;
}

.console-arm-frame { font-family: var(--serif); font-weight: 500; font-size: 17px; line-height: 1.15; }
.console-arm-sub { margin-top: 3px; font-size: 12.5px; color: var(--mid); }
.console-arm-assigned { margin-top: 12px; font-size: 12.5px; color: var(--mid); }
.console-arm-rows { margin-top: 8px; display: grid; gap: 6px; }

.console-arm-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding-top: 6px;
  border-top: 1px solid var(--hairline);
  font-size: 13px;
}

.console-arm-row dd { font-weight: 600; }

.console-arm-lead {
  margin-top: 12px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

/* ---- screen 5 · the catalog lists and the switches ---------------------- */

.console-list { list-style: none; }

.console-list-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  padding: 10px 16px;
  border-top: 1px solid var(--hairline);
}

.console-list-order { flex: none; width: 16px; font-size: 11.5px; color: var(--mid); }
.console-list-name { font-size: 14px; font-weight: 500; }
.console-list-usage { font-size: 12.5px; color: var(--mid); }
.console-list-row.is-hidden-row .console-list-name { color: var(--mid); }
.console-list-tools { margin-left: auto; display: flex; align-items: center; gap: 6px; }

.console-icon-btn {
  width: 36px;
  height: 36px;
  border-radius: 999px;
  border: 1px solid var(--hairline);
  display: grid;
  place-items: center;
  transition: border-color 0.15s, transform 0.15s var(--ease-out);
}

.console-icon-btn:hover { border-color: var(--ink); }
.console-icon-btn:active { transform: scale(0.94); }

.console-icon-btn svg {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.console-add { display: flex; flex-wrap: wrap; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--hairline); }
.console-add-field { flex: 1 1 200px; }

.console-switches {
  list-style: none;
  margin-top: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
}

.console-switch-row {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 58px;
  padding: 11px 14px;
  border-top: 1px solid var(--hairline);
}

.console-switch-row:first-child { border-top: 0; }
.console-switch-row.is-locked { background: var(--paper-raised); }
.console-switch-body { flex: 1; min-width: 0; }
.console-switch-label { display: block; font-size: 14px; font-weight: 500; }
.console-switch-state { display: block; margin-top: 2px; font-size: 12.5px; color: var(--mid); }

.console-switch { position: relative; flex: none; display: inline-flex; align-items: center; padding: 6px; cursor: pointer; }
.console-switch-input { position: absolute; width: 1px; height: 1px; opacity: 0; }

.console-switch-track {
  position: relative;
  width: 44px;
  height: 26px;
  border-radius: 999px;
  border: 1px solid var(--hairline);
  background: var(--paper-raised);
  transition: background 0.18s var(--ease-out), border-color 0.18s;
}

.console-switch-knob {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1px solid var(--hairline);
  background: var(--surface);
  transition: transform 0.18s var(--ease-out);
}

.console-switch-input:checked + .console-switch-track { background: var(--ink); border-color: var(--ink); }
.console-switch-input:checked + .console-switch-track .console-switch-knob { transform: translateX(18px); border-color: var(--ink); }
.console-switch-input:focus-visible + .console-switch-track { outline: 2px solid var(--ink); outline-offset: 3px; }

/* ---- screen 6 · the settings rows and the locked providers ------------- */

.console-settings { list-style: none; }

.console-setting {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 10px 14px;
  padding: 14px 16px;
  border-top: 1px solid var(--hairline);
}

.console-setting:first-child { border-top: 0; }
.console-setting-copy { flex: 1 1 200px; min-width: 0; }
.console-setting-label { font-size: 14px; font-weight: 600; }
.console-setting-help { margin-top: 3px; max-width: 54ch; font-size: 12.5px; color: var(--mid); }

.console-setting-meta {
  margin-top: 7px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 7px;
  font-size: 11.5px;
  color: var(--mid);
}

/* the "who last moved it" link is a touch target too (manual §8: ≥ 36px) —
   the padding grows the tap area, the negative margin keeps the line height */
.console-setting-meta a {
  display: inline-flex;
  align-items: center;
  min-height: 36px;
  min-width: 36px;
  padding: 0 4px;
  margin: -11px -4px;
  text-decoration: underline;
  text-decoration-color: var(--hairline);
  text-underline-offset: 3px;
}
.console-setting-meta a:hover { color: var(--ink); }

.console-key {
  padding: 2px 7px;
  border-radius: var(--radius-sm);
  background: var(--paper-raised);
  font-size: 11.5px;
  color: var(--mid);
}

.console-setting-control { flex: none; margin-left: auto; }
.console-elsewhere { display: grid; gap: 4px; justify-items: end; text-align: right; }
.console-elsewhere-value { font-size: 14px; font-weight: 600; }

.console-locked { background: var(--paper-raised); }
.console-locked .console-card-head { background: var(--surface); }

.console-env { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--hairline); }
.console-env-value { font-size: 13px; font-weight: 600; }

.console-provider-list { list-style: none; }
.console-provider { display: flex; flex-wrap: wrap; gap: 10px 16px; padding: 14px 16px; border-top: 1px solid var(--hairline); }
.console-provider:first-child { border-top: 0; }
.console-provider-copy { flex: 1 1 240px; min-width: 0; }
.console-provider-label { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; }

.console-lock {
  width: 15px;
  height: 15px;
  fill: none;
  stroke: var(--mid);
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.console-path {
  display: inline-block;
  margin-top: 6px;
  padding: 5px 9px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-size: 12.5px;
  color: var(--ink-soft);
  word-break: break-all;
}

.console-path.is-quiet { background: transparent; color: var(--mid); }
.console-provider-note { margin-top: 6px; font-size: 12.5px; color: var(--mid); }
.console-provider-live { flex: 1 1 160px; }

/* ---- screen 7 · the audit log ------------------------------------------ */

.console-audit {
  list-style: none;
  margin-top: 16px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
}

.console-audit-row { display: flex; flex-wrap: wrap; gap: 6px 16px; padding: 14px 16px; border-top: 1px solid var(--hairline); }
.console-audit-row:first-child { border-top: 0; }
.console-audit-when { flex: 1 1 100%; font-size: 11.5px; color: var(--mid); }
.console-audit-body { flex: 1 1 220px; min-width: 0; }
.console-audit-what { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; font-size: 14px; }
.console-audit-actor { font-weight: 600; }
.console-audit-verb { color: var(--mid); }
.console-audit-object { font-weight: 500; }
.console-audit-sub { margin-top: 4px; font-size: 12.5px; color: var(--mid); }

.console-diffs { list-style: none; margin-top: 9px; display: grid; gap: 5px; }
.console-diff { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12.5px; }
.console-diff-old { color: var(--mid); text-decoration: line-through; text-decoration-color: var(--hairline); }
.console-diff-arrow { color: var(--mid); }
.console-diff-new { font-weight: 600; }

.console-more { margin-top: 18px; }

/* ---- the unsaved-changes bar (floats, so it may carry a shadow) -------- */

.console-savebar {
  position: sticky;
  bottom: 12px;
  z-index: 20;
  margin-top: 26px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
  border: 1px solid var(--ink);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: var(--shadow-soft);
}

.console-savebar-count { flex: 1 1 auto; font-size: 13px; font-weight: 600; }
.console-savebar-actions { display: flex; gap: 8px; margin-left: auto; }

/* ---- console responsive: the 560 / 760 / 960 breakpoints only ---------- */

@media (max-width: 560px) {
  /* eight weekly bars cannot carry eight labels at 360px — the first and
     the last read as the range; a six-bar month row keeps all of them */
  .console-series-bars:has(.console-series-bar:nth-child(7)) .console-series-bar-label { visibility: hidden; }
  .console-series-bars:has(.console-series-bar:nth-child(7)) .console-series-bar:first-child .console-series-bar-label,
  .console-series-bars:has(.console-series-bar:nth-child(7)) .console-series-bar:last-child .console-series-bar-label { visibility: visible; }
}

@media (min-width: 560px) {
  .console-gate-figures { grid-template-columns: 1fr 1fr; }
  .console-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 760px) {
  .console-body { --console-bar-h: 60px; }
  .console-bar-meta { display: flex; }
  .console-out { display: inline-flex; }
  .console-who-name { display: inline; }
  .console-toolbar { grid-template-columns: minmax(0, 340px) 1fr; align-items: center; }
  .console-stats { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .console-stat:last-child:nth-child(odd) { grid-column: auto; }
  .console-person-states { flex: 0 1 auto; margin-left: auto; justify-content: flex-end; }
  .console-expand { margin-left: 0; }
  .console-audit-when { flex: 0 0 106px; }
  .console-fields { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .console-promos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .console-arms { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .console-flag-plate { width: 88px; }
}

@media (min-width: 960px) {
  .console-frame {
    display: grid;
    grid-template-columns: 236px minmax(0, 1fr);
    gap: 40px;
    align-items: start;
  }

  .console-nav {
    position: sticky;
    top: calc(var(--console-bar-h) + 22px);
    margin: 0;
    padding: 22px 0 0;
    background: none;
    border-bottom: 0;
  }

  .console-nav-scroll { flex-direction: column; gap: 2px; overflow: visible; }

  .console-nav-item {
    display: grid;
    gap: 2px;
    width: 100%;
    min-height: 46px;
    padding: 9px 13px;
    border-color: transparent;
    border-radius: var(--radius);
    background: none;
    white-space: normal;
  }

  .console-nav-item:hover { border-color: transparent; background: var(--paper-raised); }
  .console-nav-item.is-active { background: var(--ink); border-color: var(--ink); }
  .console-nav-blurb { display: block; font-size: 11.5px; color: var(--mid); }
  .console-nav-item.is-active .console-nav-blurb { color: var(--hairline); }

  .console-facts { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .console-plans { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ==========================================================================
   W10-1 — the owner door (/owner/) and the console's sign-out control

   The console surface is unfrozen from W10-0, so this block may grow; the
   design manual is not, so it does not diverge. Two typefaces, the token
   palette, and — deliberately — NO gold at all on the door. The manual
   spends the accent on big banners, live dots and occasional highlights; a
   sign-in form is none of those, and a lock rendered in gold reads as a
   promotion rather than a boundary.

   360px first. Every target here clears 36px: the two inputs are the shared
   .field-input (48px) and the submit button is set to 48px explicitly.
   ========================================================================== */

.console-door-body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px 20px;
  background: var(--paper);
}

.console-door {
  width: 100%;
  max-width: 420px;
  display: grid;
  gap: 18px;
}

.console-door-card {
  padding: 26px 22px 24px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.console-door-brand {
  display: flex;
  align-items: baseline;
  gap: 9px;
  margin-bottom: 22px;
}

.console-door-title {
  font-family: var(--serif);
  font-size: 25px;
  font-weight: 500;
  letter-spacing: -0.01em;
}

.console-door-lede {
  margin-top: 7px;
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--ink-soft);
}

/* One refusal style for every refusal. Ink on a raised panel with a heavy
   left rule — read as "stop" by weight and position, never by colour, which
   is the manual's rule for status everywhere in the console. It also means
   the message survives a daylight phone screen and a colour-blind reader. */
.console-door-error {
  margin-top: 16px;
  padding: 11px 13px;
  border-left: 3px solid var(--ink);
  background: var(--paper-raised);
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink);
}

.console-door-form {
  margin-top: 20px;
  display: grid;
  gap: 15px;
}

.console-door-field { display: grid; gap: 6px; }

.console-door-label {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--mid);
}

/* The code field only. `letter-spacing` on a DATA input is the defect W10-4
   is opening on (`.console-upper` renders REEGO over a stored Reego), so it
   is worth saying why this one is safe: spacing changes where the glyphs
   sit, never which glyphs they are, and there is no `text-transform` here —
   what is typed is what is submitted, character for character. Recovery
   codes are uppercased by the SERVER (`normalize_second_factor`), not by
   CSS pretending to. */
.console-door-code {
  font-size: 17px;
  font-weight: 600;
  letter-spacing: 0.22em;
}

.console-door-submit {
  width: 100%;
  min-height: 48px;
  margin-top: 3px;
}

.console-door-note {
  margin-top: 16px;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--mid);
}

.console-door-foot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  font-size: 12.5px;
  color: var(--mid);
}

.console-door-foot a { color: var(--ink-soft); }
.console-door-foot a:hover { color: var(--ink); }

/* ---- the console bar's sign-out ---------------------------------------- */

.console-signout { display: flex; }

.console-signout-btn {
  min-height: 36px;
  padding: 0 11px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: none;
  font: inherit;
  font-size: 12px;
  color: var(--ink-soft);
  cursor: pointer;
}

.console-signout-btn:hover { border-color: var(--ink-soft); color: var(--ink); }

/* --------------------------------------------------------------------------
   W11-4 · For designers — the pitch page, one story
   --------------------------------------------------------------------------
   Appended block (board §3b). Nothing above this line is edited.

   The page reuses the shared inventory wherever one fits — `.world-hero`,
   `.world-title`, `.world-lede`, `.row-section`, `.row-head`, `.row-title`,
   `.row-sub`, `.micro`, `.btn`, `.cta-band` — so only three things are new,
   and each is a shape the site did not already own: the numbered spine
   (`.fd-steps`), the plain what-you-get list (`.fd-holds`) and the money
   block (`.fd-money`). Monochrome throughout: no gold, no shadow (nothing
   here floats), radius tokens only, 360px first.
   -------------------------------------------------------------------------- */

.fd-hero { max-width: 60ch; }

.fd-hero-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px 18px;
  margin-top: 26px;
}

.fd-hero-btn {
  min-height: 48px;
  padding: 13px 22px;
  font-size: 15px;
}

.fd-hero-btn .arrow { margin-left: 2px; }
.fd-hero-btn:hover .arrow { transform: translateX(4px); }

.fd-hero-note { font-size: 13.5px; color: var(--mid); }

.fd-hero-note a {
  color: var(--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* The spine: four beats, one line each. A numbered column on a phone, four
   columns once there is room — the reading order never changes. */
.fd-steps {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--hairline);
  list-style: none;
}

.fd-step {
  padding-block: 20px;
  border-bottom: 1px solid var(--hairline);
}

.fd-step-num {
  display: block;
  margin-bottom: 8px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--mid);
  font-variant-numeric: tabular-nums lining-nums;
}

.fd-step-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 22px;
  line-height: 1.1;
}

.fd-step-text {
  margin-top: 7px;
  max-width: 46ch;
  font-size: 14.5px;
  color: var(--ink-soft);
}

.fd-loop {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  margin-top: 18px;
  max-width: 52ch;
  font-size: 13.5px;
  color: var(--mid);
}

.fd-loop svg {
  flex: none;
  width: 18px;
  height: 18px;
  margin-top: 1px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* What you get: described, never illustrated with someone's invented data. */
.fd-holds {
  display: grid;
  gap: 22px;
  list-style: none;
}

.fd-hold {
  padding-left: 15px;
  border-left: 1px solid var(--hairline);
}

.fd-hold-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 19px;
  line-height: 1.15;
}

.fd-hold-text {
  margin-top: 6px;
  max-width: 44ch;
  font-size: 14.5px;
  color: var(--ink-soft);
}

/* The money block. The only claim that is always true leads it. */
.fd-money {
  padding: 26px 20px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.fd-money .micro { display: block; color: var(--mid); }

.fd-money-title {
  margin-top: 10px;
  font-family: var(--serif);
  font-weight: 500;
  font-size: 30px;
  line-height: 1.06;
}

.fd-money-lede {
  margin-top: 10px;
  max-width: 52ch;
  font-size: 14.5px;
  color: var(--ink-soft);
}

.fd-plans {
  display: grid;
  gap: 14px;
  margin-top: 22px;
  list-style: none;
}

.fd-plan {
  padding: 16px 18px;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--paper);
}

.fd-plan .micro { display: block; color: var(--mid); }

.fd-plan-price {
  margin-top: 8px;
  font-family: var(--serif);
  font-weight: 520;
  font-size: 28px;
  line-height: 1.05;
  font-variant-numeric: tabular-nums lining-nums;
}

.fd-plan-price small {
  display: block;
  margin-top: 4px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: 12.5px;
  color: var(--mid);
}

.fd-plan-per {
  margin-top: 8px;
  font-size: 13.5px;
  color: var(--ink-soft);
  font-variant-numeric: tabular-nums lining-nums;
}

/* No plan row in the database → a designed sentence, never a price nobody
   set (Workstream H: a section renders only what actually exists). */
.fd-money-empty {
  margin-top: 20px;
  padding: 16px 18px;
  max-width: 52ch;
  border: 1px dashed var(--hairline);
  border-radius: var(--radius);
  font-size: 14px;
  color: var(--ink-soft);
}

.fd-money-foot {
  margin-top: 16px;
  max-width: 52ch;
  font-size: 13.5px;
  color: var(--mid);
  font-variant-numeric: tabular-nums lining-nums;
}

@media (min-width: 760px) {
  .fd-steps { grid-template-columns: repeat(4, minmax(0, 1fr)); }

  .fd-step {
    padding: 22px 20px 26px 0;
    border-bottom: 0;
  }

  .fd-step + .fd-step { padding-left: 22px; border-left: 1px solid var(--hairline); }
  .fd-steps { border-bottom: 1px solid var(--hairline); }

  .fd-holds { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px 34px; }

  .fd-money { padding: 34px 32px; }
  .fd-plans { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 560px; }
}

@media (min-width: 960px) {
  .fd-holds { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 30px; }

  /* The money block reads as one statement with the figures set beside it,
     so a wide screen does not leave half the card empty. */
  .fd-money {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 460px);
    gap: 44px;
    align-items: start;
    padding: 40px;
  }

  .fd-money-plans > :first-child { margin-top: 0; }
  .fd-plans { max-width: none; }
}

/* ==========================================================================
   W11-1 · The studio first-run
   Appended as its own block (board §3b) so the parallel W11 branches merge
   cleanly. Two rules only: the first-run reuses the onboarding screens'
   whole vocabulary (.onb, .onb-step, .field, .chip-row.onb-chips, .chip,
   .btn.btn-ink, .auth-error) and needs nothing new except a heading for the
   chip row, which the onboarding steps never had (their chips follow a
   <h1> + lede instead).
   ========================================================================== */

.setup-chips-label {
  display: block;
  margin: 26px 0 0;
}

.setup-chips-label + .onb-chips { margin-top: 10px; }

/* ==========================================================================
   W11-3 · PRODUCTION TRUTH — the designed empty states
   (`wave-kickoffs/W11.md`; appended block, board §3b.)

   Wave W11 retires every demo fallback from production rendering, so pages
   that used to be filled with fabricated content can now be honestly empty.
   Workstream H's law says a section renders only when content exists — and
   where a whole page would go quiet, one designed sentence and a way forward
   take its place. These are those two places. Monochrome, existing tokens,
   existing radius, no new colours, no shadows (nothing here floats).
   ========================================================================== */

/* The homepage with nothing published yet — every portal and rail is a slot,
   so on a young site the page between hero and footer is otherwise blank. */
.home-empty-section { padding-block: 0 clamp(52px, 7vw, 82px); }

.home-empty {
  max-width: 620px;
  padding: clamp(28px, 4vw, 44px);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background: var(--surface);
}

.home-empty .micro { display: block; margin-bottom: 12px; }

.home-empty-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(24px, 3.6vw, 34px);
  line-height: 1.1;
}

.home-empty-sub {
  margin-top: 12px;
  font-size: 15px;
  color: var(--mid);
  max-width: 46ch;
}

.home-empty-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 22px;
}

/* The contact card, now that the pass-through form (and its fake "Sent"
   badge) is retired — the real addresses are the whole answer. */
.contact-note {
  margin-bottom: 20px;
  font-size: 15px;
  line-height: 1.55;
  color: var(--mid);
  max-width: 42ch;
}

/* The designer profile hero with no photo yet (W11-3, the launch-day window:
   profile created, first upload not made). The <img> is guarded away, so the
   <figure> needs the ratio the image used to give it — the box keeps its
   --paper-raised placeholder surface and the two-column profile head holds
   its shape instead of collapsing. No stand-in photograph: a stock image
   under a real designer's name is the fabrication this wave removes. */
.profile-hero.is-blank { aspect-ratio: 4 / 5; }

/* ==========================================================================
   W13-1 — the account menu, the header heart, and the sign-out that was
   never there

   The avatar chip was a bare link to /dashboard/. It opens a menu now:
   Designer space · My shop · Your Closet · Sign out. All three places are
   always listed (owner ruling, 2026-08-07) and a place that is not set up
   carries a Set-up chip beside its label.

   ⚑ NO GOLD. The One Accent Rule allows gold in exactly three kinds of
   place — big banner cards, the live dot, occasional highlights — and a
   navigation menu is none of them. Everything below is ink, paper and
   hairline.

   ⚑ NO POLISH. A designer is being brought in for the visual layer after
   these waves; this is honest structure at 360px with ≥40px targets, and
   the paint comes later and will overrule it.

   The panel is the ONE thing here allowed a shadow: it floats over the page,
   which is exactly the popover case the shadow rule names, and it uses the
   --shadow-soft token rather than an ad-hoc value.
   ========================================================================== */

/* The heart. It carries NO COUNT — not here, not injected by reego.js.
   Saves are private by decision (WFD-5) and no surface in REEGo prints a
   save count, so a plain heart that opens Your Closet keeps that intact. */
.header-heart {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  flex: none;
  border: 1px solid var(--hairline);
  border-radius: 50%;
  color: var(--ink);
  transition: border-color 0.15s, transform 0.18s var(--ease-out);
}

/* display:grid would otherwise defeat the [hidden] toggle — the same reason
   .avatar-chip carries this rule. */
.header-heart[hidden] { display: none; }
.header-heart:hover { border-color: var(--ink); transform: translateY(-1px); }
.header-heart:active { transform: translateY(0) scale(0.98); }

.header-heart svg {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.account-menu {
  position: relative;
  display: inline-flex;
}

.account-menu[hidden] { display: none; }

.account-menu-panel {
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  z-index: 60;
  min-width: 232px;
  max-width: min(288px, calc(100vw - 32px));
  display: grid;
  gap: 2px;
  padding: 6px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  box-shadow: var(--shadow-soft);
}

.account-menu-panel[hidden] { display: none; }

.account-menu-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  min-height: 40px;
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  text-align: left;
  transition: background 0.15s;
}

.account-menu-item:hover,
.account-menu-item:focus-visible { background: var(--paper-raised); }
.account-menu-item:active { transform: scale(0.99); }

/* "Set up" — a .micro label (11px, 600, uppercase, the mandatory 0.14em
   tracking) in a hairline pill. Monochrome: this is a state, not a
   celebration. */
.account-menu-chip {
  flex: none;
  padding: 3px 9px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
}

.account-menu-signout {
  margin-top: 4px;
  padding-top: 12px;
  border-top: 1px solid var(--hairline);
  border-radius: 0;
  color: var(--ink-soft);
}

.account-menu-signout:hover { color: var(--ink); }

@media (max-width: 560px) {
  /* 360px is the design width: the row is wordmark + heart + chip + Menu,
     and the chip has already dropped its label at this breakpoint. 36px is
     the floor for a touch target and this stays on it. */
  .header-heart { width: 36px; height: 36px; }
  .header-heart svg { width: 17px; height: 17px; }
  .account-menu-panel { min-width: 208px; }
}
