/* Chrome Banana Studio — landing page.
   Palette, type and gradients come from assets/tokens/chrome-banana.css, which is a
   vendored copy of the brand package. Never hardcode a palette value here that the
   tokens already carry — add a semantic variable below instead. */

@import url("./tokens/chrome-banana.css");

/* ---------------------------------------------------------------- fonts ---- */
/* Both faces are SIL OFL 1.1 and free to embed. Licences ship in assets/fonts/. */

@font-face {
  font-family: "Inter";
  src: url("./fonts/Inter-Regular.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter";
  src: url("./fonts/Inter-Medium.woff2") format("woff2");
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter";
  src: url("./fonts/Inter-SemiBold.woff2") format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter";
  src: url("./fonts/Inter-Bold.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Michroma";
  src: url("./fonts/Michroma-Regular.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}

/* ----------------------------------------------------- page-level tokens ---- */
/* The site is dark-ground only, by brand rule: cyan is AAA on #0A0A0C and fails
   outright on paper, so a light theme would need the whole accent system swapped.
   <html data-theme="dark"> pins the token file to its dark block. */

:root {
  /* Grounds. Between chrome-950 and chrome-800; sampled from the approved artboards. */
  --ground:          #0A0A0C;
  --ground-sunk:     #08080A;
  --surface:         #14161E;
  --surface-raised:  #101219;
  --surface-deep:    #0D0F15;
  --hairline:        #1A1D26;
  --line:            #1E212B;
  --line-strong:     #333747;

  --text:            var(--cb-chrome-50);
  --text-muted:      var(--cb-chrome-400);
  /* chrome-400 is the floor for text on this ground: chrome-500 measures
     3.2:1 and chrome-600 2.4:1, both below AA at the sizes used here. Levels
     below --text-muted recede by size and weight, not by going dimmer.
     --text-faint is for decoration and scaffolding only — never for a string
     the reader has to make out. */
  --text-faint:      var(--cb-chrome-600);

  --accent:          var(--cb-accent-cyan);
  --accent-orchid:   var(--cb-accent-orchid);
  --rim:             var(--cb-gradient-rim);
  --wordmark:        var(--cb-gradient-wordmark-on-dark);

  --gutter:          clamp(20px, 5vw, 72px);
  --measure:         1296px;

  --r-sm: 9px;
  --r-md: 14px;
  --r-lg: 18px;
  --r-xl: 20px;

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

/* ------------------------------------------------------------- baseline ---- */

*, *::before, *::after { box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  scroll-padding-top: 96px;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--ground);
  color: var(--text);
  font-family: var(--cb-font-ui);
  font-size: 1rem;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

h1, h2, h3, h4, p, figure, ul, ol { margin: 0; }
ul, ol { padding: 0; list-style: none; }
img, svg { display: block; max-width: 100%; }
a { color: var(--accent); text-decoration: none; transition: color 0.18s var(--ease); }
a:hover { color: var(--cb-chrome-200); }
.window .img img {
  margin-inline: auto;
}

:focus-visible {
  outline: 2px solid var(--cb-ring);
  outline-offset: 3px;
  border-radius: 4px;
}

::selection { background: rgba(0, 248, 252, 0.24); color: var(--text); }

.skip-link {
  position: absolute; top: 8px; left: 8px;
  transform: translateY(-200%);
  background: var(--accent); color: var(--ground);
  font-weight: 600; padding: 12px 18px; border-radius: var(--r-sm);
  z-index: 100;
}
.skip-link:focus { transform: translateY(0); color: var(--ground); }

.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;
}

/* ------------------------------------------------------------- type ------- */
/* Scale from brand/GUIDELINES.md, made fluid. Michroma is logotype-only. */

.display {
  font-size: clamp(2.1rem, 1.32rem + 3.35vw, 3.5rem);
  line-height: 1.05; letter-spacing: -0.02em; font-weight: 600;
  text-wrap: pretty;
}
.h1 {
  font-size: clamp(1.85rem, 1.35rem + 2.1vw, 2.5rem);
  line-height: 1.15; letter-spacing: -0.02em; font-weight: 600;
  text-wrap: pretty;
}
.h2 {
  font-size: clamp(1.5rem, 1.24rem + 1.1vw, 1.875rem);
  line-height: 1.2; letter-spacing: -0.01em; font-weight: 600;
  text-wrap: pretty;
}
.h3 {
  font-size: 1.375rem; line-height: 1.3; letter-spacing: -0.01em; font-weight: 600;
  text-wrap: pretty;
}
.lede {
  font-size: clamp(1rem, 0.94rem + 0.28vw, 1.125rem);
  line-height: 1.6; color: var(--text-muted); text-wrap: pretty;
}
.body { line-height: 1.6; color: var(--text-muted); text-wrap: pretty; }
.small { font-size: 0.875rem; line-height: 1.5; }
.eyebrow {
  font-size: 0.75rem; line-height: 1.4; letter-spacing: 0.18em;
  font-weight: 500; text-transform: uppercase; color: var(--accent-orchid);
}

/* ------------------------------------------------------------ wordmark ---- */
/* Set live rather than placed as a raster so it stays sharp at any size.
   "Chrome" is paper; "Banana" carries the on-dark ramp. */

.wordmark {
  display: flex; align-items: baseline; gap: 0.3em;
  font-family: var(--cb-font-logotype);
  letter-spacing: 0.005em; white-space: nowrap;
  line-height: 1.1;
}
.wordmark .chrome { color: var(--cb-chrome-50); }
.wordmark .banana {
  background: var(--wordmark);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.suffix {
  font-family: var(--cb-font-logotype);
  letter-spacing: 0.34em; color: var(--text-muted);
  /* The tracking adds a trailing space; nudge back so the block optically centres. */
  padding-left: 0.34em;
}

/* The mark has one fixed pose at 503:372. Width only — never set both axes. */
.mark { width: 44px; height: auto; }

/* ------------------------------------------------------------- layout ----- */

.wrap {
  width: 100%; max-width: var(--measure);
  margin-inline: auto; padding-inline: var(--gutter);
}
section { position: relative; }
.section { padding-bottom: clamp(56px, 8vw, 100px); }
/* Only the first section after the hero opens a gap at the top; every later
   section inherits its top space from the one above it. */
.section-lead { padding-top: clamp(56px, 8vw, 100px); }
.section-head {
  display: flex; flex-direction: column; gap: 14px;
  max-width: 640px; margin-bottom: clamp(32px, 4vw, 44px);
}

/* ------------------------------------------------------------ buttons ----- */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  font-size: 1rem; font-weight: 600; line-height: 1;
  padding: 15px 26px; border-radius: var(--r-sm);
  border: 1px solid transparent; cursor: pointer;
  font-family: inherit; white-space: nowrap;
  min-height: 48px;
  transition: background-color 0.18s var(--ease), border-color 0.18s var(--ease),
              color 0.18s var(--ease), transform 0.18s var(--ease);
}
.btn-primary { background: var(--accent); color: var(--ground); }
.btn-primary:hover { background: #7CFBFD; color: var(--ground); transform: translateY(-1px); }
.btn-primary:active { transform: translateY(0); }
.btn-ghost { background: transparent; color: var(--text); border-color: var(--line-strong); }
.btn-ghost:hover { color: var(--text); border-color: var(--cb-chrome-500); background: rgba(255, 255, 255, 0.02); }
.btn-sm { font-size: 0.9375rem; padding: 11px 22px; min-height: 44px; }
.btn svg { flex: none; }

/* -------------------------------------------------------------- header ---- */

.site-header {
  position: sticky; top: 0; z-index: 50;
  border-bottom: 1px solid var(--hairline);
  background: rgba(10, 10, 12, 0.82);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
.header-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px; padding-block: 16px;
}
/* min-height keeps the logo link a 44px tap target on touch. */
.brand-lockup { display: flex; align-items: center; gap: 14px; min-height: 44px; }
.brand-lockup .mark { width: 40px; }
.brand-lockup .wordmark { font-size: 0.9375rem; }
.brand-lockup .suffix { font-size: 0.5rem; margin-top: 3px; }
.brand-names { display: flex; flex-direction: column; gap: 3px; }

.site-nav { display: flex; align-items: center; gap: clamp(20px, 2.4vw, 36px); }
/* :not(.btn) matters — without it this rule outranks .btn-primary on
   specificity and repaints the header CTA's label light-on-cyan. */
.site-nav a:not(.btn) { font-size: 1rem; font-weight: 500; color: var(--text-muted); }
.site-nav a:not(.btn):hover { color: var(--text); }
.nav-toggle { display: none; }

/* --------------------------------------------------------------- glows ---- */
/* Kept faint: nothing may sit directly behind the mark's rim light, and the
   ground must stay effectively #0A0A0C. */

.glow {
  position: absolute; inset: 0 0 auto 0; height: 620px;
  pointer-events: none; z-index: 0;
}
.glow-hero  { background: radial-gradient(50% 60% at 50% 16%, rgba(0, 157, 253, 0.11), rgba(0, 157, 253, 0) 72%); }
.glow-sounds{ background: radial-gradient(46% 62% at 76% 30%, rgba(132, 72, 192, 0.17), rgba(132, 72, 192, 0) 72%); }
.glow-cta   { background: radial-gradient(52% 70% at 50% 62%, rgba(0, 248, 252, 0.075), rgba(0, 248, 252, 0) 72%); }
.above { position: relative; z-index: 1; }

/* ---------------------------------------------------------------- hero ---- */

.hero { padding-block: clamp(56px, 8vw, 96px) clamp(48px, 6vw, 72px); }
.hero-inner {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(26px, 3.4vw, 34px); text-align: center;
}
.hero-lockup { display: flex; flex-direction: column; align-items: center; gap: 20px; }
.hero-lockup .mark { width: clamp(112px, 13vw, 168px); }
.hero-names { display: flex; flex-direction: column; align-items: center; gap: 9px; }
.hero-names .wordmark { font-size: clamp(19px, 2.1vw, 30px); }
.hero-names .suffix { font-size: clamp(10px, 1.05vw, 15px); }

.hero-copy {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(20px, 2.4vw, 26px); max-width: 800px;
}
.hero-copy .lede { max-width: 660px; }
.hero-actions {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: 14px; padding-top: 4px;
}
.hero-note { font-size: 0.875rem; line-height: 1.5; color: var(--text-muted); }

.status-pill {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 0.8125rem; font-weight: 500; letter-spacing: 0.01em;
  color: var(--cb-chrome-300);
  border: 1px solid var(--line-strong); border-radius: 999px;
  padding: 7px 16px 7px 12px;
}
.status-dot {
  width: 7px; height: 7px; border-radius: 999px; background: var(--accent); flex: none;
  box-shadow: 0 0 0 0 rgba(0, 248, 252, 0.5);
  animation: pulse 2.6s var(--ease) infinite;
}
@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(0, 248, 252, 0.45); }
  70%  { box-shadow: 0 0 0 7px rgba(0, 248, 252, 0); }
  100% { box-shadow: 0 0 0 0 rgba(0, 248, 252, 0); }
}

/* -------------------------------------------------------- app screenshot -- */

.window {
  display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-lg); overflow: hidden;
}
.window-bar {
  display: flex; align-items: center; gap: 22px;
  padding: 15px 20px; border-bottom: 1px solid var(--line);
  background: var(--surface-raised);
}
.window-dots { display: flex; align-items: center; gap: 8px; flex: none; }
.window-dots span { width: 11px; height: 11px; border-radius: 999px; background: var(--line-strong); }
.window-title {
  font-size: 0.75rem; line-height: 1.4; letter-spacing: 0.01em;
  font-weight: 500; color: var(--text-muted);
}
.window-body {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 12px; aspect-ratio: 16 / 9; min-height: 220px; max-height: 460px;
  background: var(--surface-deep);
}
.placeholder-label {
  font-size: 0.875rem; line-height: 1.5; font-weight: 500; color: var(--text-faint);
}

/* -------------------------------------------------------------- cards ----- */

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

.card {
  display: flex; flex-direction: column; gap: 18px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-md); padding: clamp(24px, 3vw, 36px);
  transition: border-color 0.2s var(--ease), background-color 0.2s var(--ease);
}
.card:hover { border-color: var(--line-strong); background: #171A23; }
.card-text { display: flex; flex-direction: column; gap: 10px; }
.card-icon { color: var(--accent); flex: none; }

/* Feature detail lists inside a card. */
.detail { display: flex; flex-direction: column; gap: 9px; margin-top: 2px; }
.detail li {
  position: relative; padding-left: 20px;
  font-size: 0.875rem; line-height: 1.5; color: var(--cb-chrome-300);
}
.detail li::before {
  content: ""; position: absolute; left: 0; top: 0.52em;
  width: 6px; height: 6px; border-radius: 999px;
  background: var(--cb-accent-azure);
}

/* ------------------------------------------------------- song builder ----- */

.band {
  display: flex; align-items: center; gap: clamp(32px, 5vw, 72px);
  background: var(--surface-raised); border: 1px solid var(--line);
  border-radius: var(--r-xl); padding: clamp(32px, 4vw, 56px) clamp(24px, 4vw, 60px);
}
.band-copy { display: flex; flex-direction: column; gap: 16px; flex: 1 1 auto; }
.band-copy .body { max-width: 560px; }
.band-note { color: var(--text-muted); }
.band-aside { display: flex; flex-direction: column; gap: 10px; flex: none; width: 300px; }

.section-row {
  display: flex; align-items: center; gap: 12px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: 10px; padding: 14px 16px;
  font-size: 0.875rem; line-height: 1.5; font-weight: 500; color: var(--cb-chrome-200);
}
.section-row .swatch { width: 6px; height: 26px; border-radius: 3px; flex: none; }
.swatch-cyan   { background: var(--cb-accent-cyan); }
.swatch-azure  { background: var(--cb-accent-azure); }
.swatch-violet { background: var(--cb-accent-violet); }
.section-row.is-active { border-color: var(--line-strong); color: var(--text); }
.section-row.is-add {
  background: transparent; border-style: dashed; border-color: var(--line-strong);
  color: var(--text-faint);
}

/* --------------------------------------------------------- also-in strip -- */

.strip {
  display: grid; gap: 1px;
  background: var(--hairline); border: 1px solid var(--line);
  border-radius: var(--r-md); overflow: hidden;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.strip-item {
  display: flex; flex-direction: column; gap: 8px;
  background: var(--surface); padding: 26px;
}
.strip-item h3 { font-size: 1rem; font-weight: 600; color: var(--text); }
.strip-item p { font-size: 0.875rem; line-height: 1.5; color: var(--text-muted); }

/* -------------------------------------------------------------- boundaries */

.boundaries {
  display: grid; gap: clamp(28px, 4vw, 56px);
  grid-template-columns: repeat(2, minmax(0, 1fr));
  background: var(--surface-raised); border: 1px solid var(--line);
  border-radius: var(--r-xl); padding: clamp(28px, 4vw, 52px) clamp(24px, 4vw, 56px);
}
.check-list { display: flex; flex-direction: column; gap: 13px; }
.check-list li {
  display: flex; align-items: flex-start; gap: 12px;
  font-size: 0.9375rem; line-height: 1.55; color: var(--cb-chrome-300);
}
.check-list svg { flex: none; margin-top: 3px; }
.list-title {
  font-size: 0.75rem; letter-spacing: 0.18em; font-weight: 500;
  text-transform: uppercase; color: var(--text-muted); margin-bottom: 18px;
}
.list-title-tight { margin-bottom: 0; }

/* ------------------------------------------------------------- pricing ---- */

.price-card {
  display: flex; flex-direction: column; gap: 18px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-md); padding: clamp(24px, 3vw, 34px);
  position: relative; overflow: hidden;
}
.price-card.is-featured { border-color: var(--line-strong); background: var(--surface-raised); }
.price-card.is-featured::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 2px;
  background: var(--rim);
}
/* min-height keeps the three bodies on one baseline whether the qualifier
   wraps or not. */
.price-head { display: flex; flex-direction: column; gap: 6px; min-height: 74px; }
.price-name { font-size: 1.125rem; font-weight: 600; color: var(--text); }
.price-figure {
  display: flex; align-items: baseline; gap: 10px;
  font-size: 1.75rem; line-height: 1.2; font-weight: 600; letter-spacing: -0.02em;
  color: var(--cb-chrome-300); flex-wrap: wrap;
}
.price-figure .qualifier {
  font-size: 0.875rem; font-weight: 500; letter-spacing: 0; color: var(--text-muted);
}
.price-note { font-size: 0.9375rem; line-height: 1.55; color: var(--text-muted); }

.tbc-banner {
  display: flex; align-items: flex-start; gap: 16px;
  border: 1px dashed var(--line-strong); border-radius: var(--r-md);
  padding: 22px 26px; margin-top: 28px;
}
.tbc-banner svg { flex: none; margin-top: 2px; color: var(--accent-orchid); }
.tbc-banner p { font-size: 0.9375rem; line-height: 1.6; color: var(--text-muted); }
.tbc-banner strong { color: var(--cb-chrome-200); font-weight: 600; }

/* -------------------------------------------------------------- sounds ---- */

.sounds { display: flex; align-items: center; gap: clamp(36px, 5vw, 80px); }
.sounds-copy { display: flex; flex-direction: column; gap: 24px; flex: 1 1 auto; max-width: 660px; }
.sounds-names { display: flex; flex-direction: column; gap: 9px; }
.sounds-names .wordmark { font-size: 20px; }
.sounds-names .suffix { font-size: 10px; padding-left: 0; }
.sounds-art { flex: none; width: min(380px, 40%); }

.art-tile {
  position: relative; aspect-ratio: 1; border-radius: var(--r-lg);
  border: 1px solid var(--line); background: var(--surface);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 12px; overflow: hidden;
}
.art-tile::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 3px; background: var(--rim);
}

.socials { display: flex; flex-wrap: wrap; gap: 12px; }
.socials-column { flex-direction: column; flex-wrap: nowrap; }
.socials-column .social { justify-content: flex-start; }
.social {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 0.875rem; font-weight: 600; color: var(--text);
  border: 1px solid var(--line-strong); border-radius: var(--r-sm);
  padding: 13px 20px; min-height: 46px;
  transition: border-color 0.18s var(--ease), background-color 0.18s var(--ease);
}
.social:hover { color: var(--text); border-color: var(--cb-chrome-500); background: rgba(255, 255, 255, 0.02); }
.social svg { color: var(--text-muted); flex: none; }
.social:hover svg { color: var(--cb-chrome-200); }

/* ------------------------------------------------------------ signup ------ */

.signup-inner {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(20px, 2.6vw, 26px); text-align: center;
}
.signup-inner .lede { max-width: 560px; }

.signup-form { display: flex; gap: 10px; width: 100%; max-width: 470px; padding-top: 6px; }
.signup-form input[type="email"] {
  flex: 1 1 auto; min-width: 0; height: 52px; padding: 0 18px;
  border: 1px solid var(--line-strong); border-radius: var(--r-sm);
  background: var(--surface); color: var(--text);
  font-family: inherit; font-size: 1rem;
  transition: border-color 0.18s var(--ease);
}
.signup-form input[type="email"]::placeholder { color: var(--text-muted); }
.signup-form input[type="email"]:hover { border-color: var(--cb-chrome-500); }
.signup-form input[type="email"]:focus { border-color: var(--accent); outline: none; }
.signup-form .btn { height: 52px; padding-inline: 26px; }

/* Honeypot. Off-screen rather than display:none — some bots skip hidden fields. */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.form-status {
  font-size: 0.875rem; line-height: 1.5; min-height: 1.5em;
  color: var(--text-muted); text-align: center;
}
.form-status[data-state="error"] { color: #FF9B9B; }
.form-status[data-state="ok"] { color: var(--accent); }
.signup-fineprint { font-size: 0.8125rem; line-height: 1.5; color: var(--text-muted); }

/* ------------------------------------------------------------- footer ----- */

.site-footer {
  border-top: 1px solid var(--hairline);
  background: var(--ground-sunk);
  padding-block: 40px;
}
.footer-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 32px; flex-wrap: wrap;
}
.footer-brand { display: flex; align-items: center; gap: 12px; }
.footer-brand .mark { width: 32px; }
.footer-brand p { font-size: 0.875rem; line-height: 1.5; color: var(--text-muted); }
.footer-links { display: flex; align-items: center; flex-wrap: wrap; gap: 4px clamp(18px, 2.4vw, 32px); }
/* Padding rather than height: the links stay on the text baseline while the
   hit area reaches 44px. */
.footer-links a {
  font-size: 0.875rem; color: var(--text-muted);
  display: inline-flex; align-items: center; min-height: 44px;
}
.footer-links a:hover { color: var(--text); }
.copyright {
  font-size: 0.75rem; line-height: 1.4; letter-spacing: 0.01em;
  font-weight: 500; color: var(--text-muted);
}

/* ---------------------------------------------------------- responsive ---- */

@media (max-width: 1080px) {
  .band { flex-direction: column; align-items: stretch; }
  .band-aside { width: 100%; }
  .sounds { flex-direction: column; align-items: stretch; }
  .sounds-art { width: 100%; max-width: 380px; }
}

@media (max-width: 900px) {
  .strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .boundaries { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 760px) {
  /* Nav collapses to the CTA only. Five links do not fit, and a hamburger for a
     one-page site would hide four anchors behind a tap for no gain. */
  .site-nav a:not(.btn) { display: none; }
  .grid-2, .grid-3 { grid-template-columns: minmax(0, 1fr); }
  .strip { grid-template-columns: minmax(0, 1fr); }
  .footer-inner { flex-direction: column; align-items: flex-start; gap: 24px; }
}

@media (max-width: 520px) {
  .signup-form { flex-direction: column; }
  .signup-form .btn { width: 100%; }
  .hero-actions { flex-direction: column; width: 100%; }
  .hero-actions .btn { width: 100%; }
  .window-body { aspect-ratio: 4 / 3; }
}

/* --------------------------------------------------------- motion ---------- */

.reveal {
  opacity: 0; transform: translateY(14px);
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.reveal.is-visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .reveal { opacity: 1; transform: none; }
}
