@layer tokens, base, components, sections, page, utility;

/* Layer order. Repeated in every file so a CSS combiner cannot reorder it. */
@layer tokens, base, components, sections, page, utility;

@layer page {
/* ============================================================
   PPCBud — homepage & signature components (v5.0)

   The structural device across this page is the search results
   page, because the mark is one: three stacked bars with the top
   one highlighted. Rank, position and bar-length carry meaning
   wherever they appear — they are not decoration.
   ============================================================ */

/* ============================================================
   HERO — asymmetric: argument on the left, proof on the right
   ============================================================ */
.pb-hero-v5 {
  background-color: var(--pb-paper);
  background:
    radial-gradient(1100px 520px at 78% -10%, rgba(18,201,126,.10), transparent 60%),
    radial-gradient(900px 460px at 8% 0%, rgba(11,42,91,.07), transparent 62%),
    var(--pb-paper);
  padding: 76px 0 88px;
  border-bottom: 1px solid var(--pb-line-soft);
  overflow: hidden;
}
.pb-hero-grid {
  display: grid; grid-template-columns: 1.05fr .95fr;
  gap: 64px; align-items: center;
}
@media (max-width: 980px) {
  .pb-hero-grid { grid-template-columns: 1fr; gap: 48px; }
}
.pb-hero-v5 h1 {
  font-size: clamp(36px, 4.6vw, 60px);
  line-height: 1.04;
  max-width: 19ch;
  margin-bottom: 22px;
}
.pb-hero-v5 h1 em {
  font-style: normal;
  position: relative;
  white-space: nowrap;
}
/* The underline is a position-one bar, not a flourish. */
.pb-hero-v5 h1 em::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: .06em;
  height: .14em; background: var(--pb-brand); border-radius: 2px; z-index: -1;
}
.pb-hero-v5 .pb-lead { font-size: 18.5px; max-width: 46ch; }
.pb-hero-meta {
  display: flex; gap: 26px; flex-wrap: wrap; margin-top: 30px;
  font-family: var(--pb-font-data); font-size: 12.5px; color: var(--pb-slate);
}
.pb-hero-meta span { display: flex; align-items: center; gap: 8px; }
.pb-hero-meta span::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: var(--pb-brand); flex: none;
}

/* ---------------------------------------------- the SERP proof card */
.pb-serp {
  background: #fff; border: 1px solid var(--pb-line);
  border-radius: 18px; padding: 18px; box-shadow: var(--pb-shadow-lg);
  position: relative;
}
.pb-serp-query {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--pb-line); border-radius: 99px;
  padding: 11px 16px; margin-bottom: 16px;
  font-family: var(--pb-font-data); font-size: 13px; color: var(--pb-body);
}
.pb-serp-query::before {
  content: ""; width: 13px; height: 13px; border-radius: 50%;
  border: 2px solid var(--pb-faint); flex: none;
  box-shadow: 4px 4px 0 -2.5px var(--pb-faint);
}
.pb-serp-caret {
  display: inline-block; width: 1px; height: 15px;
  background: var(--pb-navy); margin-left: 1px;
  animation: pb-caret 1.1s step-end infinite;
}
@keyframes pb-caret { 0%, 50% { opacity: 1 } 50.01%, 100% { opacity: 0 } }

.pb-serp-list { position: relative; display: grid; gap: 12px; }
.pb-serp-row {
  border: 1px solid var(--pb-line); border-radius: 12px;
  padding: 15px 17px 15px 20px; background: #fff; position: relative;
  min-height: 96px;
}
.pb-serp-row::before {
  content: ""; position: absolute; left: 0; top: 14px; bottom: 14px;
  width: 3px; border-radius: 0 3px 3px 0; background: var(--pb-line);
}
.pb-serp-rank {
  font-family: var(--pb-font-data); font-size: 10.5px; letter-spacing: .14em;
  color: var(--pb-faint); display: block; margin-bottom: 7px;
}
.pb-serp-title { font-size: 14.5px; font-weight: 600; color: var(--pb-slate); margin: 0 0 5px; }
.pb-serp-url { font-family: var(--pb-font-data); font-size: 11.5px; color: var(--pb-faint); margin: 0 0 6px; }
.pb-serp-desc { font-size: 12.5px; color: var(--pb-faint); margin: 0; line-height: 1.5; }

/* Position one */
.pb-serp-row--won { border-color: rgba(18,201,126,.45); background: var(--pb-brand-wash); }
.pb-serp-row--won::before { background: var(--pb-brand); }
.pb-serp-row--won .pb-serp-title { color: var(--pb-ink); font-weight: 700; }
.pb-serp-row--won .pb-serp-desc { color: var(--pb-body); }
.pb-serp-row--won .pb-serp-rank { color: var(--pb-brand-deep); font-weight: 600; }
.pb-serp-tag {
  display: inline-block; font-family: var(--pb-font-data); font-size: 10px;
  letter-spacing: .12em; background: var(--pb-brand); color: var(--pb-brand-ink);
  border-radius: 4px; padding: 2px 7px; margin-right: 8px; font-weight: 600;
}

/* The one orchestrated moment: the ad climbs from three to one. */
.pb-serp-row--won { animation: pb-climb 1.15s cubic-bezier(.22,.9,.24,1) .35s both; }
.pb-serp-row--a   { animation: pb-drop  1.15s cubic-bezier(.22,.9,.24,1) .35s both; }
.pb-serp-row--b   { animation: pb-drop  1.15s cubic-bezier(.22,.9,.24,1) .42s both; }
@keyframes pb-climb {
  from { transform: translateY(216px); opacity: .35; }
  to   { transform: translateY(0);     opacity: 1; }
}
@keyframes pb-drop {
  from { transform: translateY(-108px); }
  to   { transform: translateY(0); }
}
.pb-serp-foot {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 14px; padding-top: 13px; border-top: 1px solid var(--pb-line-soft);
  font-family: var(--pb-font-data); font-size: 11.5px; color: var(--pb-faint);
}
.pb-serp-foot b { color: var(--pb-brand-deep); font-weight: 600; }

@media (prefers-reduced-motion: reduce) {
  .pb-serp-row--won, .pb-serp-row--a, .pb-serp-row--b { animation: none; }
  .pb-serp-caret { animation: none; }
}

/* ============================================================
   TICKER — live-market band, mono, quiet
   ============================================================ */
.pb-ticker {
  background: var(--pb-ink); color: #fff; overflow: hidden;
  padding: 13px 0; border-bottom: 1px solid var(--pb-dark-line);
}
.pb-ticker-track {
  display: flex; gap: 46px; white-space: nowrap; width: max-content;
  animation: pb-marquee 42s linear infinite;
  font-family: var(--pb-font-data); font-size: 12.5px; letter-spacing: .04em;
}
.pb-ticker-track span { color: rgba(255,255,255,.62); }
.pb-ticker-track b { color: var(--pb-brand); font-weight: 500; }
@keyframes pb-marquee { to { transform: translateX(-50%); } }
.pb-ticker:hover .pb-ticker-track { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) {
  .pb-ticker-track { animation: none; }
}

/* ============================================================
   BENTO — unequal cells, because the arguments are unequal
   ============================================================ */
.pb-bento {
  display: grid; grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(168px, auto); gap: 16px;
}
@media (max-width: 900px) { .pb-bento { grid-template-columns: 1fr 1fr; } }
@media (max-width: 620px) { .pb-bento { grid-template-columns: 1fr; } }
.pb-bento-cell {
  background: #fff; border: 1px solid var(--pb-line); border-radius: 16px;
  padding: 28px; display: flex; flex-direction: column; justify-content: space-between;
  transition: border-color .18s, box-shadow .18s;
}
.pb-bento-cell:hover { border-color: var(--pb-navy); box-shadow: var(--pb-shadow); }
.pb-bento-wide { grid-column: span 2; }
@media (max-width: 620px) { .pb-bento-wide { grid-column: span 1; } }
.pb-bento-cell h3 { margin-bottom: 8px; }
.pb-bento-cell p { font-size: 14.5px; color: var(--pb-slate); margin: 0; }
.pb-bento-num {
  font-family: var(--pb-font-data); font-size: 46px; font-weight: 500;
  color: var(--pb-navy); line-height: 1; letter-spacing: -.03em; margin-bottom: 12px;
}
.pb-bento-dark { background: var(--pb-navy); border-color: var(--pb-navy); }
.pb-bento-dark h3 { color: #fff; }
.pb-bento-dark p { color: #C3D3EA; }
.pb-bento-dark .pb-bento-num { color: var(--pb-brand); }

/* ============================================================
   RANK TIMELINE — bar length encodes stage, so the bars mean something
   ============================================================ */
.pb-rank-steps { display: grid; gap: 0; border-top: 1px solid var(--pb-line); }
.pb-rank-step {
  display: grid; grid-template-columns: 92px 1fr 1.3fr; gap: 28px;
  padding: 26px 0; border-bottom: 1px solid var(--pb-line); align-items: start;
}
@media (max-width: 820px) {
  .pb-rank-step { grid-template-columns: 1fr; gap: 10px; }
}
.pb-rank-week {
  font-family: var(--pb-font-data); font-size: 11.5px; letter-spacing: .12em;
  color: var(--pb-faint); padding-top: 4px;
}
.pb-rank-step h3 { margin: 0 0 6px; }
.pb-rank-step p { margin: 0; font-size: 15px; color: var(--pb-slate); }
.pb-rank-bar { height: 8px; border-radius: 4px; background: var(--pb-line); margin-top: 9px; }
.pb-rank-bar i { display: block; height: 100%; border-radius: 4px; background: var(--pb-brand); }

/* ============================================================
   MARKET ROW
   ============================================================ */
.pb-markets { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
@media (max-width: 980px) { .pb-markets { grid-template-columns: repeat(2, 1fr); } }
.pb-market {
  border: 1px solid var(--pb-line); border-radius: 14px; padding: 22px;
  background: #fff; text-decoration: none; display: block;
  transition: border-color .18s, transform .18s;
}
.pb-market:hover { border-color: var(--pb-brand); transform: translateY(-2px); }
.pb-market-flag { font-size: 26px; line-height: 1; }
.pb-market-name { display: block; margin-top: 12px; font-weight: 600; color: var(--pb-ink); font-size: 15px; }
.pb-market-cur {
  display: block; margin-top: 4px; font-family: var(--pb-font-data);
  font-size: 11.5px; color: var(--pb-faint);
}

/* ============================================================
   RESULT BAND — one claim, given room
   ============================================================ */
.pb-result-band { background: var(--pb-dark); padding: 88px 0; }
.pb-result-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
@media (max-width: 900px) { .pb-result-grid { grid-template-columns: 1fr; gap: 36px; } }
.pb-result-band h2 { color: #fff; }
.pb-result-quote { font-size: 21px; line-height: 1.55; color: #fff; margin: 0 0 20px; font-weight: 500; }
.pb-result-cite { font-family: var(--pb-font-data); font-size: 12.5px; color: var(--pb-dark-muted); }
.pb-result-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.pb-result-metric {
  background: var(--pb-dark-2); border: 1px solid var(--pb-dark-line);
  border-radius: 14px; padding: 24px;
}
.pb-result-metric b {
  display: block; font-family: var(--pb-font-data); font-size: 34px;
  font-weight: 500; color: var(--pb-brand); line-height: 1; letter-spacing: -.02em;
}
.pb-result-metric span { display: block; margin-top: 8px; font-size: 12.5px; color: var(--pb-dark-muted); }

/* ============================================================
   SECTION LABEL — numbered only where order is real
   ============================================================ */
.pb-sec-label {
  display: flex; align-items: baseline; gap: 14px; margin-bottom: 12px;
}
.pb-sec-label i {
  font-style: normal; font-family: var(--pb-font-data); font-size: 11.5px;
  letter-spacing: .16em; color: var(--pb-brand-deep); font-weight: 500;
}
.pb-sec-label i::before { content: ""; display: inline-block; width: 22px; height: 2px;
  background: var(--pb-brand); vertical-align: middle; margin-right: 10px; border-radius: 2px; }


/* ============================================================
   SERVICE PAGES — metric column and fault list
   ============================================================ */
.pb-svc-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.pb-svc-metric {
  background: #fff; border: 1px solid var(--pb-line); border-radius: 14px;
  padding: 26px; box-shadow: var(--pb-shadow);
}
.pb-svc-metric b {
  display: block; font-family: var(--pb-font-data); font-size: 32px; font-weight: 500;
  color: var(--pb-navy); line-height: 1; letter-spacing: -.02em;
}
.pb-svc-metric span { display: block; margin-top: 9px; font-size: 12.5px; color: var(--pb-slate); }

.pb-fault-list { display: grid; gap: 0; border-top: 1px solid var(--pb-line); }
.pb-fault {
  display: grid; grid-template-columns: 64px 1fr; gap: 22px;
  padding: 26px 0; border-bottom: 1px solid var(--pb-line); align-items: start;
}
@media (max-width: 620px) { .pb-fault { grid-template-columns: 1fr; gap: 8px; } }
.pb-fault-n {
  font-family: var(--pb-font-data); font-size: 13px; color: var(--pb-brand-deep);
  font-weight: 600; padding-top: 3px;
}
.pb-fault h3 { margin: 0 0 6px; }
.pb-fault p { margin: 0; font-size: 15px; color: var(--pb-slate); max-width: 74ch; }

}
