/* ShotPorter — homepage-only layout styles, shared by / and /ru/ (site.css carries the
   rest of the site). Reused as-is by both language homepages: EN and RU must not
   fork this file — fix things here once, for both. */

/* hero */
.hero{padding:52px 0 26px;position:relative;overflow:hidden}
.hero-grid{display:grid;grid-template-columns:1fr 1fr;gap:52px;align-items:flex-start}
@media(max-width:940px){.hero-grid{grid-template-columns:1fr;gap:40px}}
/* .hero-copy is a size container so h1 can scale off its OWN column width (cqi)
   instead of the full viewport (vw) — a 2-column desktop row hands the heading half
   the viewport, and vw-based sizing doesn't know that, so it kept the font too big
   for the column and wrapped into a cramped 4-5 line stack right below the 940px
   breakpoint. cqi fixes that at every width, including the 1-column transition. */
.hero-copy{container-type:inline-size}
h1{font-size:clamp(38px,12cqi,62px);font-weight:680}
h1 .amber{color:var(--accent)}
.lede{margin-top:14px;font-size:clamp(17px,2.1vw,20px);color:var(--muted);max-width:33ch}
/* below the 2-col breakpoint the copy column is much wider than the 33ch desktop lede
   was ever sized for (that value nearly fills the ~510px 2-col column, so it was never
   a true bug there) — left unchanged it stays ~400px while the column grows to
   700-900px, stranding a large empty strip to its right. 52ch matches the wider
   single-column lede value already used on this site (see faq/index.php's
   .page-hero .lede) instead of inventing a new number. Must come AFTER the base
   .lede rule (same specificity) so it actually wins at these widths. */
@media(max-width:940px){.lede{max-width:52ch}}
/* the hero CTA reuses the shared .trial-stack (site.css) — same column/gap/max-width
   as the page-centered instance in .trial-band lower down. That shared rule centers
   its children (align-items:center), which is correct when the whole stack is a
   standalone, page-centered island (.trial-band) but wrong here: the hero column is
   left-aligned (h1/lede start at the column's left edge), so the CTA button follows
   that column. The small purchase alternative is centered under the button itself;
   once the hero becomes one column, the complete fixed-width CTA is centered too. */
.hero-cta.trial-stack{align-items:flex-start;margin-top:20px}
.hero-cta.trial-stack .trial-buy-link{align-self:center}
@media(max-width:940px){
  .hero-cta.trial-stack{align-items:center;margin-inline:auto}
}
/* hero animation embed — self-contained /assets/hero-animation.html (isolated in an iframe so its CSS/JS can't collide with the page).
   Height is one fixed value (not tiered by breakpoint): the embedded card's own height barely
   moves across widths (577-598px including its internal responsive padding — 598px is the
   worst case, hit in the narrow 2-col squeeze just above the 940px breakpoint), so a single
   number (598 + 30px top + 30px bottom, matching hero-animation.html's own body padding)
   fits everywhere without a tiered override. The 30px on each side is also what gives the
   card's box-shadow and ambient glow (see hero-animation.html) room to fall off before the
   iframe's edge, so no rectangular seam shows around the floating card. hero-animation.html's
   body top-aligns the card (not centers it), so this height change is what actually removes
   the dead space above the card that centering used to leave. */
.hero-anim{position:relative;width:100%}
.hero-anim iframe{display:block;width:100%;height:658px;border:0;background:transparent}

/* purpose block — the "what it does" statement, right under the hero */
.purpose{margin-top:0;margin-bottom:32px}
.purpose-in{max-width:78ch}
.purpose-lead{font-size:clamp(18px,2.2vw,21px);line-height:1.5;color:var(--text)}
.purpose-list{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:7px}
.purpose-list li{position:relative;padding-left:0;font-size:16px;line-height:1.5;color:var(--text)}
.purpose-list li::before{content:"";position:absolute;left:-18px;top:.6em;width:6px;height:6px;border-radius:50%;background:var(--verify)}
@media(max-width:1140px){
  .purpose-list li{padding-left:18px}
  .purpose-list li::before{left:0}
}
.purpose-companion{margin-top:20px;color:var(--muted);font-size:15.5px;line-height:1.7;max-width:74ch}
#how{padding:52px 0}
main > .promise{margin-top:32px}
main > .promise .promise-in{align-items:flex-start}
.feature-compare{display:grid;place-items:center;min-height:180px;padding:26px;text-align:center}
.feature-compare a{max-width:34ch;color:var(--accent-text);font-size:15px;line-height:1.5;text-decoration:underline;text-underline-offset:3px}
.about-copy a{color:var(--accent-text);text-decoration:underline;text-underline-offset:3px}
@media(max-width:720px){.feature-compare{min-height:0;padding:18px 8px 0}}

/* (the fake app-window mock formerly here — .window/.titlebar/.lights/.rows/.row/
   .progress etc — was only ever used by the two #screenshots placeholders below.
   Removed now that #screenshots shows real product screenshots, which already
   carry their own native macOS window chrome baked into the PNG; wrapping them
   in this mock chrome would double-frame them.) */

/* steps */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:32px;
  border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
@media(max-width:820px){.steps{grid-template-columns:1fr 1fr}}
@media(max-width:480px){.steps{grid-template-columns:1fr}}
.step{padding:26px 24px;border-right:1px solid var(--border);position:relative}
.step:last-child{border-right:0}
@media(max-width:820px){.step:nth-child(2){border-right:0}.step:nth-child(1),.step:nth-child(2){border-bottom:1px solid var(--border)}}
.step .n{font-family:var(--mono);font-size:12px;color:var(--accent);letter-spacing:.1em}
.step h3{font-size:17px;margin-top:12px}
.step p{color:var(--muted);font-size:14px;margin-top:8px}
@media(max-width:720px){
  .purpose{margin-bottom:24px}
  #how{padding:44px 0}
  .steps{margin-top:28px}
  main > .promise{margin-top:24px}
}

/* Real app screenshots. Preview assets have one fixed contract: 1240px wide,
   with any proportional height. The browser scales every preview to the same
   column width and never crops it, so later product screenshots can replace the
   draft PNGs without a markup or CSS change. */
.shots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:48px 18px;margin-top:38px;align-items:start}
@media(max-width:820px){.shots{grid-template-columns:1fr}}
.shot{margin:0;min-width:0;width:100%}
.shot-open{display:block;position:relative;width:100%;cursor:zoom-in}
.shot-open img{display:block;width:100%;height:auto}
.shot-open:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
.shot-open::after{content:"+";position:absolute;right:12px;bottom:12px;width:34px;height:34px;
  display:grid;place-items:center;border-radius:50%;background:rgba(12,16,23,.78);color:#fff;
  font:600 22px/1 var(--font);box-shadow:0 4px 18px rgba(0,0,0,.24);transition:transform .18s ease,background .18s ease}
.shot-open:hover::after,.shot-open:focus-visible::after{transform:scale(1.08);background:var(--accent);color:var(--accent-ink)}
.shot figcaption{width:90%;max-width:90%;margin:0 auto;font-size:14px;color:var(--muted);
  overflow-wrap:break-word}

/* Full-size screenshot dialog. The links still open the _FullSize PNG in a new
   tab when <dialog> is unavailable or JavaScript is disabled. */
.shot-lightbox{inset:0;width:100vw;height:100vh;max-width:none;max-height:none;margin:0;padding:0;
  border:0;background:transparent;overflow:hidden}
.shot-lightbox::backdrop{background:rgba(8,11,17,.88);backdrop-filter:blur(4px)}
.shot-lightbox-inner{width:100%;height:100%;display:grid;place-items:center;padding:32px}
.shot-lightbox-image{display:block;width:auto;height:auto;max-width:calc(100vw - 64px);
  max-height:calc(100vh - 64px);object-fit:contain;border-radius:var(--radius);box-shadow:0 28px 80px rgba(0,0,0,.55)}
.shot-lightbox-close{position:fixed;z-index:1;top:16px;right:16px;width:44px;height:44px;
  display:grid;place-items:center;border:1px solid rgba(255,255,255,.28);border-radius:50%;
  background:rgba(12,16,23,.82);color:#fff;font:400 30px/1 var(--font);cursor:pointer}
.shot-lightbox-close:hover,.shot-lightbox-close:focus-visible{background:var(--accent);color:var(--accent-ink);outline:0}
@media(max-width:720px){
  .shot-lightbox-inner{padding:16px}
  .shot-lightbox-image{max-width:calc(100vw - 32px);max-height:calc(100vh - 32px)}
}

/* pricing */
.price-wrap{display:grid;grid-template-columns:1.1fr .9fr;gap:34px;align-items:center;margin-top:38px}
@media(max-width:820px){.price-wrap{grid-template-columns:1fr}}
.plan{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:32px;box-shadow:var(--shadow);
  position:relative;overflow:hidden}
.plan::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-soft))}
.plan .amt{display:flex;align-items:baseline;gap:8px;margin:6px 0 4px}
.plan .amt b{font-family:var(--mono);font-size:52px;font-weight:660;letter-spacing:-.03em}
.plan .amt .amt-note{color:var(--muted);font-size:15px}
.plan .once{font-size:13px;color:var(--faint);font-family:var(--mono);letter-spacing:.04em}
.incl{list-style:none;padding:0;margin:22px 0 26px;display:grid;gap:11px}
.incl li{display:flex;align-items:flex-start;gap:11px;font-size:15px;color:var(--text)}
.incl li svg{width:17px;height:17px;color:var(--verify);flex:0 0 auto;margin-top:3px}
.plan .buy{display:flex;gap:12px;flex-wrap:wrap}
.plan .buy .btn{flex:1;justify-content:center;min-width:130px}
.pnote{font-size:13px;color:var(--faint);margin-top:16px;text-align:center}
.price-aside h3{font-size:20px}
.price-aside p{color:var(--muted);margin-top:12px;font-size:15px}
.price-aside .kv{margin-top:20px;display:grid;gap:10px}
.price-aside .kv div{display:flex;justify-content:space-between;font-size:14px;
  padding-bottom:10px;border-bottom:1px solid var(--border)}
.price-aside .kv span:first-child{color:var(--muted)}
.price-aside .kv span:last-child{font-family:var(--mono);font-variant-numeric:tabular-nums}
