/* =========================================================
   Wistudi — landing page styles
   Design reference: Wistudy.fig (7 exported sections)
   ========================================================= */

:root {
  /* Colors below are sampled directly from the decoded Figma node
     data (exact fill values), not eyeballed from the PNG exports. */
  --orange: #ff6e00;
  --orange-light: #ffa460;
  --navy: #081b2b;
  --navy-soft: #7d889e;
  --gray-muted: #a3a3a3;
  --cream: #fcf7f3;
  --cream-2: #fcf3ea;
  --white: #ffffff;
  --footer-bg: #1a2434;
  --footer-input: #303b4c;
  --grad-start: #9d0172;
  --grad-end: #3822ba;
  --border-soft: #f0dfd0;
  --shadow-card: 0 10px 30px rgba(20, 20, 40, 0.06);
  --shadow-card-lg: 0 20px 50px rgba(20, 20, 40, 0.08);
  --radius-lg: 27px;
  --radius-md: 20px;
  --radius-sm: 8px;
  /* 1288 = the design's 1240px content width + 24px side padding
     on each edge, so .container's content area is exactly 1240px
     wide once the viewport is that large (matches the decoded
     Figma frame widths), while still getting edge padding below
     that breakpoint instead of touching the viewport edges. */
  --container: 1288px;
  /* Gentle deceleration curve (easeOutQuint-ish) for load/reveal
     animations — smoother, less mechanical than the default "ease". */
  --ease-smooth: cubic-bezier(.16, 1, .3, 1);
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; scroll-padding-top: 20px; }

body {
  margin: 0;
  font-family: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;
  color: var(--navy);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

img { max-width: 100%; display: block; height: auto; }

/* Prevent grid/flex items from refusing to shrink below the
   intrinsic size of an image they contain (classic min-width:auto
   overflow bug) so layouts never force horizontal scroll. */
.hero-inner,
.hero-inner > *,
.journey-inner,
.journey-inner > *,
.feature-panel,
.feature-panel > *,
.scale-row,
.scale-row > *,
.footer-inner,
.footer-inner > *,
.creator-grid,
.creator-grid > *,
.benefit-grid > *,
.orbit,
.orbit-node {
  min-width: 0;
}

a { color: inherit; text-decoration: none; }

ul { list-style: none; margin: 0; padding: 0; }

h1, h2, h3, h4, p { margin: 0; }

.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 24px;
}

.accent { color: var(--orange); }

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

.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--orange);
  color: #fff;
  padding: 12px 18px;
  z-index: 2000;
  border-radius: 0 0 8px 0;
}
.skip-link:focus { left: 0; }

.logo-wi { color: var(--orange); font-weight: 800; }
.logo-studi { color: var(--navy); font-weight: 800; }

/* =========================================================
   Buttons
   ========================================================= */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 24px;
  /* 8px, not a pill — verified against the decoded node data
     (cornerRadius: 8) and a pixel-level crop of Header.png. */
  border-radius: var(--radius-sm);
  font-weight: 600;
  font-size: 16px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform .18s ease, box-shadow .18s ease, background .18s ease, opacity .18s ease;
  white-space: nowrap;
}
.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }
.btn:focus-visible { outline: 3px solid var(--orange-light); outline-offset: 2px; }

.btn-primary {
  background: var(--orange);
  color: var(--cream);
  box-shadow: 0 8px 20px rgba(255, 110, 0, 0.28);
}
.btn-primary:hover { background: #ff7a1a; box-shadow: 0 12px 26px rgba(255, 110, 0, 0.36); }

.btn-outline {
  background: #fff;
  color: var(--navy);
  border-color: #e7ded6;
}
.btn-outline:hover { border-color: var(--orange); color: var(--orange); }

.btn-gradient {
  background: linear-gradient(90deg, var(--grad-start), var(--grad-end));
  color: var(--cream);
  box-shadow: 0 10px 24px rgba(56, 34, 186, 0.25);
}

.btn-sm { padding: 10px 18px; font-size: 13.5px; }

/* =========================================================
   Icons — the design uses real icon assets (extracted from the
   Figma file), pre-tinted to the design's colors (brand gradient
   or solid orange) as plain PNGs and rendered as normal <img>
   elements. (An earlier CSS mask-image version broke under the
   file:// protocol — Chrome runs mask-image through a CORS-like
   check that same-directory <img>/background-image aren't subject
   to — so the color is now baked into the asset instead.)
   ========================================================= */

/* =========================================================
   Logo (sits inline at the top of the hero — the design has no
   separate site header bar)
   ========================================================= */

.logo {
  display: inline-block;
  font-size: 35px;
  letter-spacing: 0;
  margin-bottom: 10px;
}

/* =========================================================
   Hero
   ========================================================= */

.hero {
  position: relative;
  background: linear-gradient(180deg, #fef4ea 0%, #fdf0e4 55%, #fbe8d8 100%);
  padding: 64px 0 80px;
  overflow: hidden;
}

.hero-bg { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
.hero-bg .blob {
  position: absolute;
  border-radius: 40px;
  background: rgba(255, 148, 77, 0.14);
}
.blob-1 { width: 260px; height: 260px; left: -80px; top: 60px; transform: rotate(18deg); border-radius: 50px; }
.blob-2 { width: 180px; height: 180px; right: 6%; top: 8%; border-radius: 34px; background: rgba(174, 129, 255, 0.16); }
.hero-bg .dots {
  position: absolute;
  width: 140px; height: 140px;
  background-image: radial-gradient(rgba(255,140,66,0.35) 1.6px, transparent 1.6px);
  background-size: 14px 14px;
}
.dots-1 { left: 4%; top: 4%; }
.dots-2 { right: 10%; bottom: 8%; }
.hero-bg .ring {
  position: absolute;
  right: -60px; bottom: -60px;
  width: 260px; height: 260px;
  border-radius: 50%;
  border: 40px solid rgba(255, 173, 120, 0.12);
}

.hero-inner {
  position: relative;
  z-index: 1;
  display: grid;
  /* Matches the design's actual column split: text column 735px,
     illustration column 531px (735:531 ≈ 1.4:1), not an even 50/50. */
  grid-template-columns: 1.4fr 1fr;
  gap: 33px;
  align-items: center;
}


.hero-title {
  /* 68px at the design's native ~1920px canvas width */
  font-size: clamp(32px, 4.6vw, 68px);
  line-height: 1.2;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--navy);
  margin-bottom: 28px;
}

.hero-points {
  display: flex;
  gap: 16px;
  margin-bottom: 28px;
}
.hero-point {
  display: flex;
  gap: 12px;
  background: rgba(255,255,255,0.7);
  border: 1px solid rgba(255,255,255,0.9);
  border-radius: var(--radius-md);
  padding: 16px 18px;
  /* Design has these two cards at 422px and 291px (≈ 1.45:1),
     not an even split. */
  flex: 1.45 1 0;
}
.hero-point + .hero-point { flex: 1 1 0; }
.hero-point-icon { width: 20px; height: 20px; flex-shrink: 0; margin-top: 2px; }
.hero-point p { font-size: 14px; line-height: 1.55; color: var(--navy); }

.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }

.hero-media img {
  width: 100%;
  filter: drop-shadow(0 30px 50px rgba(70, 40, 10, 0.14));
}

/* =========================================================
   Journey (Section 2)
   ========================================================= */

.journey { padding: 90px 0; background: var(--white); }

.journey-inner {
  display: grid;
  /* Matches the design: image column 648px, text column 531px
     (648:531 ≈ 1.22:1). */
  grid-template-columns: 1fr 1fr;
  gap: 30px;
  align-items: center;
}

.journey-media img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card-lg);
}

.journey-copy h2 {
  /* 42px at the design's native canvas width */
  font-size: clamp(26px, 3.5vw, 42px);
  font-weight: 800;
  line-height: 1.28;
  margin-bottom: 18px;
}

.journey-desc {
  color: var(--navy);
  font-size: 16px;
  line-height: 1.7;
  margin-bottom: 26px;
}

.journey-list { display: flex; flex-direction: column; gap: 18px; }
.journey-list li {
  position: relative;
  padding: 2px 0 2px 16px;
}

/* Track (static) + fill (animated 0 -> 100% height while a li is
   .active, then handed off to the next li — see script.js). */
.journey-bar {
  position: absolute;
  left: 0; top: 0;
  width: 3px;
  height: 100%;
  background: var(--border-soft);
  border-radius: 2px;
  overflow: hidden;
}
.journey-bar::after {
  content: "";
  position: absolute;
  left: 0; top: 0;
  width: 100%;
  height: 0%;
  background: var(--orange);
}
.journey-list li.active .journey-bar::after {
  animation: journeyFill var(--journey-duration, 4s) linear forwards;
}

.journey-list h3 { font-size: 16px; font-weight: 700; margin-bottom: 4px; color: var(--navy-soft); transition: color .3s ease; }
.journey-list p { font-size: 14px; color: var(--gray-muted); transition: color .3s ease; }
.journey-list li.active h3 { color: var(--orange); }
.journey-list li.active p { color: var(--navy); }

@keyframes journeyFill {
  from { height: 0%; }
  to { height: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .journey-list li.active .journey-bar::after { animation: none; height: 100%; }
}

/* =========================================================
   Benefits (Section 3)
   ========================================================= */

.benefits { padding: 90px 0; background: var(--cream-2); }

.section-title {
  text-align: center;
  /* 42px at the design's native canvas width */
  font-size: clamp(26px, 3.5vw, 42px);
  font-weight: 800;
  line-height: 1.3;
  /* 780px was too tight — "Tối ưu quá trình sáng tạo cùng Wistudi"
     needs ~799px at 42px and was wrapping to 2 lines when the
     design has it on one. */
  max-width: 900px;
  margin: 0 auto 18px;
}

.section-subtitle {
  text-align: center;
  max-width: 700px;
  margin: 0 auto 50px;
  color: var(--navy);
  font-size: 16px;
  line-height: 1.7;
}

.benefits .section-title { margin-bottom: 44px; }

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

.benefit-card {
  background: var(--white);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-lg);
  padding: 34px 26px;
  text-align: center;
  transition: transform .2s ease, box-shadow .2s ease;
}
.benefit-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-card); }

.check-badge {
  display: inline-block;
  width: 36px; height: 36px;
  margin-bottom: 18px;
}

.benefit-card h3 { font-size: 16.5px; font-weight: 700; margin-bottom: 10px; }
.benefit-card p { font-size: 14px; color: var(--navy); line-height: 1.6; }

.benefit-cta { display: flex; justify-content: center; margin-top: 46px; }

/* =========================================================
   Design your way (Section 4)
   ========================================================= */

.design-way { padding: 90px 0; background: var(--white); }
.design-way .section-title { margin-bottom: 14px; }
.design-way .section-subtitle { margin-bottom: 56px; }

.feature-panel {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 50px;
  align-items: center;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-lg);
  padding: 60px;
  margin-bottom: 30px;
  background: linear-gradient(180deg, #fff, #fffaf6);
}

.feature-panel-reverse .feature-copy { order: 2; }
.feature-panel-reverse .feature-media { order: 1; }

/* Full-width row above the two columns (verified against the
   decoded Figma geometry: the heading+button row is 1120px wide,
   a sibling of the two-column content, not nested inside the text
   column). */
.feature-heading {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 18px;
  flex-wrap: wrap;
}
.feature-heading h3 { font-size: 28px; font-weight: 800; }

.feature-desc { color: var(--navy); font-size: 16px; line-height: 1.7; margin-bottom: 26px; }

.feature-list { display: flex; flex-direction: column; gap: 18px; }
.feature-list li { position: relative; padding: 2px 0 2px 16px; }

/* Same auto-cycling left bar as .journey-bar — track (static) +
   fill (animated 0 -> 100% height while .active, duration set
   per-<li> from its data-duration attribute by script.js). */
.feature-bar {
  position: absolute;
  left: 0; top: 0;
  width: 3px;
  height: 100%;
  background: var(--border-soft);
  border-radius: 2px;
  overflow: hidden;
}
.feature-bar::after {
  content: "";
  position: absolute;
  left: 0; top: 0;
  width: 100%;
  height: 0%;
  background: var(--orange);
}
.feature-list li.active .feature-bar::after {
  animation: journeyFill var(--journey-duration, 3s) linear forwards;
}

.feature-list h4 { font-size: 15px; font-weight: 700; margin-bottom: 4px; color: var(--navy-soft); transition: color .3s ease; }
.feature-list p { font-size: 14px; color: var(--gray-muted); line-height: 1.6; transition: color .3s ease; }
.feature-list li.active h4 { color: var(--orange); }
.feature-list li.active p { color: var(--navy); }

@media (prefers-reduced-motion: reduce) {
  .feature-list li.active .feature-bar::after { animation: none; height: 100%; }
}

.feature-media img {
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card-lg);
  border: 1px solid var(--border-soft);
}

/* =========================================================
   Scale (Section 5)
   ========================================================= */

.scale { padding: 90px 0 100px; background: var(--cream-2); }
.scale .section-title { margin-bottom: 40px; }

.scale-row {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1fr;
  /* The two cards sit 26px apart; the play button is NOT sized to
     that gap — it's a wider 70px circle that overlaps ~22px into
     each card, floating on top of the seam (verified against the
     decoded Figma geometry: cards 607px wide, 26px apart, button
     70px wide centered on the gap). */
  gap: 26px;
  align-items: center;
  margin-bottom: 24px;
}

.scale-card {
  background: var(--white);
  border-radius: var(--radius-lg);
  padding: 30px 34px;
  box-shadow: var(--shadow-card);
}
.scale-card h3 { font-size: 24px; font-weight: 700; margin-bottom: 10px; }
.scale-card p { font-size: 16px; color: var(--navy); line-height: 1.65; }

.play-btn {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 70px; height: 70px;
  border-radius: 50%;
  background: var(--orange);
  border: none;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  box-shadow: 0 10px 26px rgba(255,106,0,0.32);
  z-index: 1;
  transition: transform .2s ease;
}
.play-btn:hover { transform: translate(-50%, -50%) scale(1.08); }
.play-btn svg { margin-left: 3px; }

.orbit {
  position: relative;
  max-width: 966px;
  margin: 0 auto;
  min-height: 480px;
}

/* Hub: 4 concentric layers, matching the decoded Figma group
   (radial-gradient glow → solid ring → dashed ring → white circle
   with a warm drop shadow) instead of a single flat box-shadow. */
.orbit-glow {
  position: absolute;
  /* Anchored above the container's true center (not 50%) so the
     top cluster sits close to the cards above it; centering at 50%
     of a tall-enough-for-the-bottom-row container left a large,
     unwanted gap above the circle. Kept in sync with .node-1/.node-2
     below so the connector lines the JS draws stay horizontal. */
  left: 50%; top: 38%;
  transform: translate(-50%, -50%);
  width: 305px; height: 305px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,216,186,0.9) 0%, rgba(255,206,169,0) 100%);
  display: flex; align-items: center; justify-content: center;
  z-index: 2;
}
.orbit-ring-solid {
  width: 263px; height: 263px;
  border-radius: 50%;
  background: var(--white);
  border: 1px solid #ffcea9;
  display: flex; align-items: center; justify-content: center;
}
.orbit-ring-dashed {
  width: 231px; height: 231px;
  border-radius: 50%;
  background: var(--white);
  border: 1px dashed #ffcea9;
  display: flex; align-items: center; justify-content: center;
}
.orbit-center {
  width: 200px; height: 200px;
  border-radius: 50%;
  background: var(--white);
  box-shadow: 0 4px 20px 2px rgba(255,206,168,0.55);
  display: flex; align-items: center; justify-content: center;
  font-size: 24px;
  font-weight: 800;
}

.orbit-node {
  position: absolute;
  width: 190px;
  background: var(--white);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
  padding: 20px 16px;
  text-align: center;
  z-index: 1;
}
.orbit-icon { width: 32px; height: 32px; display: block; margin: 0 auto 10px; }
.orbit-node p { font-size: 16px; font-weight: 700; }

/* Top nodes are vertically centered on the hub so their connector
   lines land perfectly horizontal (matches the design, where both
   sit on the hub's own center line). */
.node-1 { left: 0;   top: 38%; transform: translateY(-50%); }
.node-2 { right: 0;  top: 38%; transform: translateY(-50%); }
.node-3 { left: 0;   bottom: 0; }
.node-4 { left: 50%; bottom: 0; width: 320px; transform: translateX(-50%); }
.node-4 p { white-space: nowrap; }
.node-5 { right: 0;  bottom: 0; }

/* Dotted connector lines between the center hub and each node, drawn
   by JS (script.js) once real layout positions are known — precise
   percentage/pixel math here would break the moment card heights
   change (font load, i18n, zoom). */
.orbit-lines {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
  overflow: visible;
}

/* =========================================================
   Creators (Section 6)
   ========================================================= */

.creators { padding: 90px 0; background: var(--white); }
.creators .section-title { margin-bottom: 48px; }

.creator-slider { overflow: hidden; }

.creator-track {
  display: flex;
  transition: transform .45s cubic-bezier(.65,0,.35,1);
}

.creator-slide {
  flex: 0 0 100%;
  min-width: 0;
}

.creator-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-bottom: 20px;
}

.creator-card {
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--white);
  transition: transform .2s ease, box-shadow .2s ease;
}
.creator-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-card); }
.creator-card img { width: 100%; }
.creator-card-body { position: relative; padding: 18px 20px 22px; }
.creator-card-body h3 {
  font-size: 15px; font-weight: 700; line-height: 1.45; margin-bottom: 12px; min-height: 44px; padding-right: 28px;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
}
.creator-card-body h3 a { color: inherit; }
.creator-card-body h3 a:hover,
.creator-card-body h3 a:focus-visible { color: var(--orange); }
.creator-card-body p { font-size: 13.5px; color: var(--navy-soft); }

/* 2x2 grid glyph in the card's top-right corner (present on every
   card in the design, e.g. next to "The most important piece of
   technology..."); inlined as an SVG data URI since it's a tiny
   generic UI icon with no separate asset in the Figma file. */
.creator-card-body::after {
  content: "";
  position: absolute;
  top: 20px;
  right: 20px;
  width: 20px;
  height: 20px;
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Crect x='0.75' y='0.75' width='8.5' height='8.5' rx='2.5' stroke='%23a3a3a3' stroke-width='1.2'/%3E%3Ccircle cx='5' cy='5' r='1' fill='%23a3a3a3'/%3E%3Crect x='10.75' y='0.75' width='8.5' height='8.5' rx='2.5' stroke='%23a3a3a3' stroke-width='1.2'/%3E%3Ccircle cx='15' cy='5' r='1' fill='%23a3a3a3'/%3E%3Crect x='0.75' y='10.75' width='8.5' height='8.5' rx='2.5' stroke='%23a3a3a3' stroke-width='1.2'/%3E%3Ccircle cx='5' cy='15' r='1' fill='%23a3a3a3'/%3E%3Crect x='10.75' y='10.75' width='8.5' height='8.5' rx='2.5' stroke='%23a3a3a3' stroke-width='1.2'/%3E%3Ccircle cx='15' cy='15' r='1' fill='%23a3a3a3'/%3E%3C/svg%3E");
}

.creator-tags {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  padding: 0 2px;
}
.creator-tags a { font-size: 16px; font-weight: 700; color: var(--navy); }
.creator-tags a:hover { color: var(--orange); }

.creator-dots { display: flex; justify-content: center; gap: 10px; margin-top: 30px; }
.dot {
  width: 9px; height: 9px;
  border-radius: 50%;
  border: none;
  background: var(--orange);
  opacity: .33;
  cursor: pointer;
  padding: 0;
  transition: opacity .2s ease, transform .2s ease;
}
.dot.active { opacity: 1; transform: scale(1.2); }

.creator-cta { display: flex; justify-content: center; margin-top: 40px; }

/* =========================================================
   Footer
   ========================================================= */

.site-footer { background: var(--footer-bg); color: #fff; padding: 90px 0 0; }

.footer-inner {
  display: grid;
  grid-template-columns: 1.2fr 1fr 0.7fr 0.8fr;
  gap: 40px;
  padding-bottom: 70px;
}

.footer-brand h2 { font-size: 32px; font-weight: 800; line-height: 1.35; margin-bottom: 18px; }
.footer-brand p { color: var(--cream); font-size: 16px; line-height: 1.7; max-width: 380px; }

.footer-col h3 { font-size: 24px; font-weight: 700; margin-bottom: 18px; }
.footer-col h3.footer-sub { margin-top: 22px; }
/* wp_nav_menu always wraps each item in <li>; drop that box from the
   layout so the <a> underneath lays out exactly like the other
   (li-less) footer links below it. */
.footer-col li { display: contents; list-style: none; }
.footer-col a { display: flex; align-items: center; gap: 10px; color: var(--cream); font-size: 16px; margin-bottom: 12px; }
.footer-col a:hover { color: var(--orange); }
.footer-icon { width: 18px; height: 18px; flex-shrink: 0; }

.footer-form form { display: flex; flex-direction: column; gap: 12px; }
.footer-form input,
.footer-form textarea {
  background: var(--footer-input);
  border: 1px solid transparent;
  border-radius: 10px;
  padding: 13px 16px;
  color: #fff;
  font-size: 14.5px;
  font-family: inherit;
  resize: none;
  width: 100%;
}
.footer-form input::placeholder,
.footer-form textarea::placeholder { color: #80848b; }
.footer-form input:focus,
.footer-form textarea:focus { outline: none; border-color: var(--orange); }
.footer-form .btn { align-self: flex-start; margin-top: 4px; }
.form-note { font-size: 13.5px; color: var(--orange-light); min-height: 18px; margin: 4px 0 0; }

/* Contact Form 7 wraps every field in one shared <p> with its own
   <br> line breaks (no per-field gap like the original flex layout
   had), so restore that spacing here instead. */
.footer-form form br { display: none; }
.footer-form .wpcf7-form-control-wrap { display: block; margin-bottom: 12px; }
.footer-form .wpcf7-form-control-wrap:last-of-type { margin-bottom: 0; }
.footer-form .wpcf7-not-valid-tip { display: block; color: #ff8a8a; font-size: 12.5px; margin-top: 4px; }
.footer-form .wpcf7-response-output { font-size: 13.5px; color: var(--orange-light); min-height: 18px; margin: 8px 0 0 !important; border: none !important; padding: 0 !important; }

.footer-bottom {
  border-top: 1px solid rgba(255,255,255,0.08);
  padding: 22px 0;
}
.footer-bottom p { font-size: 13px; color: #80848b; text-align: center; }

/* =========================================================
   Video modal
   ========================================================= */

.video-modal {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.video-modal[hidden] { display: none; }
.video-modal-backdrop {
  position: absolute; inset: 0;
  background: rgba(11, 31, 58, 0.72);
  backdrop-filter: blur(4px);
}
.video-modal-content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  background: var(--navy);
  border-radius: var(--radius-lg);
  padding: 60px 30px;
  text-align: center;
  color: #fff;
}
.video-modal-frame { font-size: 17px; }
.video-modal-close {
  position: absolute;
  top: -46px; right: 0;
  width: 38px; height: 38px;
  border-radius: 50%;
  background: rgba(255,255,255,0.12);
  color: #fff;
  border: none;
  font-size: 16px;
  cursor: pointer;
}
.video-modal-close:hover { background: rgba(255,255,255,0.22); }

/* =========================================================
   Back to top
   ========================================================= */

.back-to-top {
  position: fixed;
  right: 22px; bottom: 22px;
  width: 46px; height: 46px;
  border-radius: 50%;
  background: var(--orange);
  color: #fff;
  border: none;
  font-size: 18px;
  cursor: pointer;
  box-shadow: 0 10px 24px rgba(255,106,0,0.3);
  z-index: 400;
  transition: opacity .2s ease, transform .2s ease;
}
.back-to-top[hidden] { display: none; }
.back-to-top:hover { transform: translateY(-3px); }

/* =========================================================
   Page preloader
   ========================================================= */

.page-preloader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--white);
  transition: opacity .7s var(--ease-smooth), visibility .7s var(--ease-smooth);
}
.page-preloader.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.page-preloader-inner {
  position: relative;
  width: 96px;
  height: 96px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.page-preloader-spinner {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 3px solid var(--border-soft);
  border-top-color: var(--orange);
  animation: page-preloader-spin .9s linear infinite;
}
.page-preloader-mark {
  font-size: 15px;
  font-weight: 800;
  letter-spacing: -0.01em;
}

@keyframes page-preloader-spin {
  to { transform: rotate(360deg); }
}

/* =========================================================
   Scroll reveal
   ========================================================= */

/* Content stays fully visible by default (progressive enhancement):
   only once JS confirms it can animate (js-anim on <html>) do reveal
   targets start hidden, so a JS failure/crawler never hides content.

   Both .reveal.in-view and .load-reveal use @keyframes, not
   `transition`. A transition needs the browser to actually paint the
   "before" state before it can animate to the "after" one — but any
   .reveal element that's already on-screen when IntersectionObserver
   starts (e.g. Journey sitting just below a short Hero on a tall
   viewport) can get "in-view" added on the very first callback, with
   no paint in between "hidden" and "shown". A @keyframes animation
   has no such requirement: it always plays its declared timeline
   from 0% once triggered, whether that trigger was instant or not. */
.js-anim .reveal {
  opacity: 0;
  transform: translateY(20px);
}
.js-anim .reveal.reveal-left { transform: translateX(-70px); }
.js-anim .reveal.reveal-right { transform: translateX(70px); }
.js-anim .reveal.in-view { animation: reveal-up 3s var(--ease-smooth) both; }
.js-anim .reveal.reveal-left.in-view { animation-name: reveal-left; }
.js-anim .reveal.reveal-right.in-view { animation-name: reveal-right; }

.js-anim .load-reveal { animation: reveal-up 3s var(--ease-smooth) both; }
.js-anim .load-reveal.reveal-left { animation-name: reveal-left; }
.js-anim .load-reveal.reveal-right { animation-name: reveal-right; }

@keyframes reveal-up {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes reveal-left {
  from { opacity: 0; transform: translateX(-70px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes reveal-right {
  from { opacity: 0; transform: translateX(70px); }
  to { opacity: 1; transform: translateX(0); }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1 !important; transform: none !important; animation: none !important; }
  .load-reveal { opacity: 1 !important; transform: none !important; animation: none !important; }
  .page-preloader { transition: none; }
  .page-preloader-spinner { animation: none; border-top-color: var(--border-soft); }
  .btn, .creator-card, .benefit-card { transition: none; }
}
@media (min-width: 1024px) {
  .scale-card {
    height: 178px;
}
}
/* =========================================================
   Tablet ( <= 1024px )
   ========================================================= */

@media (max-width: 1024px) {
  .hero-inner { grid-template-columns: 1fr; gap: 48px; }
  .hero-media { max-width: 520px; margin: 0 auto; }
  .hero-copy { text-align: center; }
  .hero-points { flex-direction: column; }
  .hero-actions { justify-content: center; }

  .journey-inner { grid-template-columns: 1fr; gap: 40px; }
  .journey-media { order: -1; }
  .journey-copy { text-align: center; }
  .journey-list { text-align: left; }
  .journey-list li { margin: 0 auto; }

  .benefit-grid { grid-template-columns: repeat(2, 1fr); }

  .feature-panel { grid-template-columns: 1fr; padding: 32px; gap: 34px; }
  .feature-panel-reverse .feature-copy { order: 1; }
  .feature-panel-reverse .feature-media { order: 2; }
  .feature-heading { justify-content: flex-start; }

  /* Stacked layout: the overlapping-circle treatment only works
     with two side-by-side cards, so the button drops back into
     normal flow as a centered divider between the stacked cards. */
  .scale-row { grid-template-columns: 1fr; text-align: center; }
  .play-btn { position: static; transform: none; margin: 0 auto; }
  .play-btn:hover { transform: scale(1.08); }

  .orbit { min-height: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 18px; max-width: 640px; }
  .orbit-glow { position: static; transform: none; width: 100%; max-width: 220px; height: 220px; margin: 0 auto 10px; flex-basis: 100%; flex-shrink: 0; }
  .orbit-ring-solid { width: 190px; height: 190px; }
  .orbit-ring-dashed { width: 167px; height: 167px; }
  .orbit-center { width: 144px; height: 144px; font-size: 18px; }
  .orbit-node { position: static; width: calc(50% - 9px); transform: none !important; }
  .node-4 p { white-space: normal; }
  .orbit-lines { display: none; }

  .creator-grid { grid-template-columns: repeat(2, 1fr); }
  .creator-tags { grid-template-columns: repeat(2, 1fr); }
  .creator-card:nth-child(3) { display: none; }
  .creator-tags a:nth-child(3) { display: none; }

  .footer-inner { grid-template-columns: 1fr 1fr; gap: 40px 30px; }
  .footer-brand { grid-column: 1 / -1; }
}

/* =========================================================
   Mobile ( <= 640px )
   ========================================================= */

@media (max-width: 640px) {
  .container { padding: 0 18px; }

  /* Long CTA labels (e.g. the creators-section button) must be able
     to wrap on narrow screens instead of forcing the pill wider than
     the viewport. */
  .btn { white-space: normal; text-align: center; }

  .hero { padding: 40px 0 56px; }
  .hero-title { font-size: 30px; margin-bottom: 22px; }
  .hero-actions { flex-direction: column; align-items: stretch; }
  .hero-actions .btn { width: 100%; }

  .journey { padding: 60px 0; }
  .journey-bar { width: 2px; }

  .benefits { padding: 60px 0; }
  .benefit-grid { grid-template-columns: 1fr; }

  .design-way { padding: 60px 0; }
  .feature-panel { padding: 24px; border-radius: var(--radius-md); }
  .feature-heading { flex-direction: column; align-items: flex-start; gap: 14px; }
  .feature-heading .btn-sm { width: 100%; }

  .scale { padding: 60px 0 70px; }
  .orbit-node { width: 100%; }
  .orbit-glow { width: 100%; max-width: 180px; height: 180px; }
  .orbit-ring-solid { width: 155px; height: 155px; }
  .orbit-ring-dashed { width: 136px; height: 136px; }
  .orbit-center { width: 118px; height: 118px; font-size: 16px; }

  .creators { padding: 60px 0; }
  .creator-grid { grid-template-columns: 1fr; }
  .creator-tags { grid-template-columns: 1fr; }
  .creator-card:nth-child(2) { display: block; }
  .creator-tags a:nth-child(2) { display: block; }
  .creator-card:nth-child(3) { display: none; }
  .creator-tags a:nth-child(3) { display: none; }

  .site-footer { padding: 60px 0 0; }
  .footer-inner { grid-template-columns: 1fr; gap: 36px; padding-bottom: 50px; }
  .footer-brand h2 { font-size: 22px; }
  .footer-form .btn { align-self: stretch; }

  .back-to-top { right: 14px; bottom: 14px; width: 42px; height: 42px; }
}

/* Small phones */
@media (max-width: 380px) {
  .hero-title { font-size: 26px; }
  .section-title { font-size: 24px; }
}
