/* Clips Studio website — the desktop app's own design tokens.
   Kept byte-identical to ui/src/renderer/src/theme.css so the site and the
   app are recognisably the same product. Update both together. */

:root {
  --base: #0a1628;
  --surface: #13243d;
  --raised: #1c3354;
  --accent: #38bdf8;
  --accent-strong: #0ea5e9;
  --ink: #f1f5f9;
  --muted: #94a3b8;
  --success: #34d399;
  --warn: #fbbf24;

  --wrap: 1080px;
  --radius: 14px;
}

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

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  background: var(--base);
  color: var(--ink);
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

/* Same accessibility floor as the app: a visible focus ring on everything
   interactive, and motion honoured as a preference rather than a default. */
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 4px;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

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

a {
  color: var(--accent);
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}

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

/* ---------------------------------------------------------------- header */
header.site {
  border-bottom: 1px solid rgb(28 51 84 / 0.6);
  background: rgb(10 22 40 / 0.9);
  backdrop-filter: blur(8px);
  position: sticky;
  top: 0;
  z-index: 20;
}
header.site .wrap {
  display: flex;
  align-items: center;
  gap: 22px;
  min-height: 62px;
  flex-wrap: wrap;
}
/* Matches the app's sidebar: name on top, "local-first AI clipping" under
   it in muted small type. Someone arriving from the site should see the same
   lockup when they open the app. */
.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--ink);
}
.brand:hover {
  text-decoration: none;
}
.brand img {
  width: 34px;
  height: 34px;
}
.brand .name {
  font-weight: 700;
  font-size: 1.05rem;
  line-height: 1.15;
  display: block;
}
.brand .name span {
  color: var(--accent);
}
.brand .tagline {
  display: block;
  font-size: 0.72rem;
  color: var(--muted);
  font-weight: 400;
  margin-top: 1px;
}
nav.site {
  display: flex;
  gap: 18px;
  margin-left: auto;
  font-size: 0.92rem;
  flex-wrap: wrap;
}
nav.site a {
  color: var(--muted);
}
nav.site a:hover,
nav.site a[aria-current='page'] {
  color: var(--ink);
  text-decoration: none;
}
/* Donate sits in the sticky header so it is reachable from anywhere on the
   page, not only by someone who scrolled to the end. Styled as an outlined
   pill rather than a solid button so it never competes with the download. */
nav.site a.donate {
  color: var(--accent);
  border: 1px solid rgb(56 189 248 / 0.45);
  background: rgb(56 189 248 / 0.1);
  border-radius: 999px;
  padding: 3px 13px;
  font-weight: 600;
}
nav.site a.donate:hover {
  color: var(--base);
  background: var(--accent);
  text-decoration: none;
}

/* ---------------------------------------------------------------- hero */
.hero {
  padding: 72px 0 56px;
  border-bottom: 1px solid rgb(28 51 84 / 0.5);
}
.hero-grid {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 40px;
  align-items: center;
}
.hero h1 {
  font-size: clamp(2rem, 4.6vw, 3.1rem);
  line-height: 1.12;
  margin: 0 0 18px;
  letter-spacing: -0.02em;
}
.hero p.lead {
  font-size: 1.15rem;
  color: var(--muted);
  margin: 0 0 12px;
  max-width: 62ch;
}
.hero img.mascot {
  width: 210px;
}

.eyebrow {
  display: inline-block;
  font-size: 0.74rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--accent);
  background: rgb(56 189 248 / 0.12);
  border: 1px solid rgb(56 189 248 / 0.3);
  padding: 4px 10px;
  border-radius: 999px;
  margin-bottom: 18px;
}

.cta-row {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 26px;
  align-items: center;
}
.btn {
  display: inline-block;
  padding: 11px 20px;
  border-radius: 10px;
  font-weight: 600;
  transition: background-color 0.15s;
}
.btn:hover {
  text-decoration: none;
}
.btn-accent {
  background: var(--accent);
  color: var(--base);
}
.btn-accent:hover {
  background: var(--accent-strong);
}
.btn-ghost {
  background: var(--raised);
  color: var(--ink);
}
.btn-ghost:hover {
  background: rgb(28 51 84 / 0.7);
}
.cta-note {
  font-size: 0.85rem;
  color: var(--muted);
}

/* The star ask. Deliberately a line of text under the buttons rather than a
   third button: starring is a favour, not a thing someone came here to do,
   and a button competing with Download would cost more than it gained. */
.star-note {
  margin: 16px 0 0;
  font-size: 0.88rem;
  color: var(--muted);
  max-width: 56ch;
}
.star-note a {
  font-weight: 600;
}

/* ---------------------------------------------------------------- sections */
section {
  padding: 56px 0;
  border-bottom: 1px solid rgb(28 51 84 / 0.35);
}
section:last-of-type {
  border-bottom: 0;
}
h2 {
  font-size: clamp(1.45rem, 2.6vw, 1.9rem);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
h3 {
  font-size: 1.05rem;
  margin: 0 0 6px;
}
.section-lead {
  color: var(--muted);
  margin: 0 0 28px;
  max-width: 68ch;
}

.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.card {
  background: var(--surface);
  border: 1px solid rgb(28 51 84 / 0.6);
  border-radius: var(--radius);
  padding: 20px;
}
.card p {
  color: var(--muted);
  margin: 0;
  font-size: 0.94rem;
}

/* Pipeline: a real list, styled as a flow. Screen readers get the steps in
   order; everyone else gets the diagram. */
ol.pipeline {
  list-style: none;
  counter-reset: step;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 10px;
}
ol.pipeline li {
  counter-increment: step;
  background: var(--surface);
  border: 1px solid rgb(28 51 84 / 0.6);
  border-radius: var(--radius);
  padding: 14px 18px 14px 56px;
  position: relative;
}
ol.pipeline li::before {
  content: counter(step);
  position: absolute;
  left: 16px;
  top: 14px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: rgb(56 189 248 / 0.15);
  color: var(--accent);
  font-size: 0.8rem;
  font-weight: 700;
  display: grid;
  place-items: center;
}
ol.pipeline strong {
  display: block;
}
ol.pipeline span {
  color: var(--muted);
  font-size: 0.92rem;
}

table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.94rem;
}
.table-scroll {
  overflow-x: auto;
}
th,
td {
  text-align: left;
  padding: 10px 14px;
  border-bottom: 1px solid rgb(28 51 84 / 0.5);
  vertical-align: top;
}
th {
  color: var(--muted);
  font-weight: 600;
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
td code {
  color: var(--accent);
}

code {
  font-family: ui-monospace, 'Cascadia Code', Consolas, monospace;
  font-size: 0.88em;
  background: rgb(28 51 84 / 0.5);
  padding: 2px 6px;
  border-radius: 5px;
}
pre {
  background: var(--surface);
  border: 1px solid rgb(28 51 84 / 0.6);
  border-radius: var(--radius);
  padding: 16px;
  overflow-x: auto;
}
pre code {
  background: none;
  padding: 0;
  color: var(--ink);
}

.note {
  background: rgb(56 189 248 / 0.08);
  border: 1px solid rgb(56 189 248 / 0.25);
  border-radius: var(--radius);
  padding: 16px 18px;
  color: var(--muted);
  font-size: 0.94rem;
}
.note strong {
  color: var(--ink);
}

ul.ticks {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 9px;
}
ul.ticks li {
  padding-left: 26px;
  position: relative;
  color: var(--muted);
}
ul.ticks li::before {
  content: '✓';
  position: absolute;
  left: 0;
  color: var(--accent);
  font-weight: 700;
}
ul.ticks strong {
  color: var(--ink);
}
/* Honest-fit markers. A limitation must never wear a green checkmark — on the
   "what it's built for" list that would read as a feature and cause exactly
   the surprise the section exists to prevent. */
ul.ticks li.partial::before {
  content: '~';
  color: var(--warn);
}
ul.ticks li.weak::before {
  content: '!';
  color: var(--muted);
}

/* ---------------------------------------------------------------- support
   Deliberately the same card as the one pinned to the bottom of the app's
   Dashboard: accent gradient, accent border, headline and a large button on
   the right. Someone who has used the app should recognise it. */
.support {
  background: linear-gradient(
    to right,
    rgb(56 189 248 / 0.15),
    rgb(56 189 248 / 0.25)
  );
  border: 1px solid rgb(56 189 248 / 0.4);
  border-radius: var(--radius);
  padding: 22px 26px;
  display: flex;
  gap: 24px;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}
.support .body {
  flex: 1 1 340px;
}
.support .title {
  font-weight: 700;
  font-size: 1.25rem;
  color: var(--ink);
  margin: 0;
}
.support p {
  margin: 6px 0 0;
  color: rgb(241 245 249 / 0.8);
  font-size: 1rem;
}
.support .btn {
  flex-shrink: 0;
  font-size: 1.05rem;
  padding: 13px 32px;
  font-weight: 600;
}

/* ---------------------------------------------------------------- footer */
footer.site {
  border-top: 1px solid rgb(28 51 84 / 0.6);
  padding: 32px 0 44px;
  color: var(--muted);
  font-size: 0.9rem;
}
footer.site .cols {
  display: flex;
  gap: 28px;
  flex-wrap: wrap;
  align-items: center;
}
footer.site nav {
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
  margin-left: auto;
}

@media (max-width: 720px) {
  .hero-grid {
    grid-template-columns: 1fr;
  }
  .hero img.mascot {
    width: 130px;
  }
  nav.site {
    width: 100%;
    margin-left: 0;
    gap: 14px;
  }
}
