/* ==========================================================================
   StoreShot
   A restrained, typography-led system. Hairline rules instead of shadows,
   one accent colour, a strict type scale, and a lot of air.
   ========================================================================== */

@font-face {
  font-family: "DM Sans";
  src: url("/static/fonts/DMSans.woff2") format("woff2");
  font-weight: 100 1000;
  font-style: normal;
  font-display: swap;
}

:root {
  --bg:        #ffffff;
  --bg-alt:    #f5f5f7;
  --bg-sunk:   #fafafc;
  --text:      #1d1d1f;
  --muted:     #6e6e73;
  --faint:     #86868b;
  --line:      #d2d2d7;
  --hairline:  rgba(0,0,0,.08);
  --accent:    #0066cc;
  --accent-tx: #ffffff;
  --panel:     #ffffff;
  --chrome:    rgba(255,255,255,.72);
  --tick:      #1d1d1f;

  --max:       980px;
  --wide:      1240px;
  --radius:    18px;
  --radius-sm: 12px;

  --f-sans: "DM Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --f-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
}

/* Theme is chosen per-surface via <html data-theme="..."> (see tokens.css),
   never by the OS. No prefers-color-scheme override here on purpose. */

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

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--f-sans);
  font-size: 17px;
  line-height: 1.55;
  letter-spacing: -.01em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

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

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

::selection { background: var(--accent); color: #fff; }

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

/* --------------------------------------------------------------- type scale */

h1, h2, h3, h4 {
  margin: 0;
  font-weight: 600;
  letter-spacing: -.022em;
  line-height: 1.08;
}
h1 { font-size: clamp(38px, 5.4vw, 60px); }
h2 { font-size: clamp(28px, 3.4vw, 40px); letter-spacing: -.02em; }
h3 { font-size: 22px; letter-spacing: -.015em; line-height: 1.25; }
h4 { font-size: 17px; letter-spacing: -.01em; }

p { margin: 0 0 1.1em; }

.eyebrow {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: .02em;
  color: var(--accent);
  text-transform: none;
  margin: 0 0 12px;
}

.lede {
  font-size: clamp(19px, 2vw, 23px);
  line-height: 1.45;
  color: var(--muted);
  letter-spacing: -.012em;
}

.small { font-size: 14px; color: var(--muted); }

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

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 24px; }
.wrap-wide { max-width: var(--wide); margin: 0 auto; padding: 0 24px; }

section { padding: 88px 0; }
section.tight { padding: 56px 0; }
.alt { background: var(--bg-alt); }
.rule { border-top: 1px solid var(--hairline); }

.center { text-align: center; }
.center .lede { margin-left: auto; margin-right: auto; max-width: 620px; }

/* ---------------------------------------------------------------------- nav */

header.nav {
  position: sticky; top: 0; z-index: 50;
  background: var(--chrome);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  border-bottom: 1px solid var(--hairline);
}
.nav-in {
  max-width: var(--wide); margin: 0 auto; padding: 0 24px;
  height: 48px; display: flex; align-items: center; gap: 30px;
}
.brand {
  font-size: 19px; font-weight: 600; letter-spacing: -.02em;
  color: var(--text); text-decoration: none; display: flex; align-items: center; gap: 8px;
}
.brand:hover { text-decoration: none; }
.brand .mark {
  width: 20px; height: 20px; border-radius: 5px;
  border: 1.5px solid var(--text);
  position: relative; flex: none;
}
.brand .mark::after {
  content: ""; position: absolute; inset: 4px 4px auto 4px; height: 2px;
  background: var(--text); border-radius: 1px;
  box-shadow: 0 4px 0 var(--text), 0 8px 0 var(--text);
}
.nav-links { display: flex; gap: 26px; margin-left: auto; align-items: center; }
.nav-links a {
  font-size: 13.5px; color: var(--text); opacity: .85; text-decoration: none;
  letter-spacing: -.005em;
}
.nav-links a:hover { opacity: 1; text-decoration: none; }
.nav-links a.cta {
  background: var(--accent); color: var(--accent-tx); opacity: 1;
  padding: 6px 14px; border-radius: 980px; font-weight: 500;
}
@media (max-width: 700px) {
  .nav-links { gap: 16px; }
  .nav-links a.hide-sm { display: none; }
}
.cta .dot { background: #fff; color: var(--accent); }

/* nav dropdowns (language + account) */
.nav-links .dd { position: relative; display: inline-flex; align-items: center; }
.dd-btn {
  display: inline-flex; align-items: center; gap: 6px; line-height: 1;
  background: none; border: 0; cursor: pointer; font: inherit; color: var(--text);
  padding: 5px 8px; border-radius: 8px;
}
.dd-btn:hover { background: var(--bg-alt); }
.dd-caret { width: 10px; height: 6px; opacity: .5; }
.dd-menu {
  position: absolute; top: calc(100% + 8px); right: 0; min-width: 178px;
  padding: 6px; background: var(--panel); border: 1px solid var(--line);
  border-radius: 12px; box-shadow: 0 14px 34px -14px rgba(0, 0, 0, .3);
  display: none; z-index: 60;
}
.dd.open .dd-menu { display: block; }
.dd-item {
  display: flex; align-items: center; gap: 9px; padding: 8px 10px; opacity: 1;
  border-radius: 8px; font-size: 13.5px; color: var(--text);
  text-decoration: none; white-space: nowrap;
}
.dd-item:hover { background: var(--bg-alt); text-decoration: none; opacity: 1; }
.dd-item.on { color: var(--accent); font-weight: 500; }
.flag {
  height: 14px; width: auto; border-radius: 2px; display: block; flex: none;
  box-shadow: 0 0 0 .5px rgba(0, 0, 0, .14);
}
.dd-item .flag { height: 16px; }

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

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border-radius: 980px; border: 0;
  background: var(--accent); color: var(--accent-tx);
  font-family: inherit; font-size: 16px; font-weight: 500; letter-spacing: -.01em;
  cursor: pointer; transition: opacity .16s ease, transform .06s ease;
}
.btn:hover { opacity: .88; text-decoration: none; }
.btn:active { transform: scale(.985); }
.btn:disabled { opacity: .4; cursor: default; }
.btn.ghost {
  background: transparent; color: var(--text);
  border: 1px solid var(--line);
}
.btn.sm { padding: 8px 16px; font-size: 14px; }
.btn.link {
  background: none; color: var(--accent); padding: 0; border: 0;
}
.btn.link:hover { text-decoration: underline; }

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

.hero { padding: 84px 0 56px; text-align: center; }
.hero h1 { margin-bottom: 18px; }
.hero .lede { max-width: 640px; margin: 0 auto 8px; }
.hero .disclaim { font-size: 13px; color: var(--faint); margin-top: 22px; }

.article-hero { width: 100%; height: auto; aspect-ratio: 1200 / 630; border-radius: 14px;
  display: block; margin: 4px 0 34px; border: 1px solid var(--hairline); }

/* --------------------------------------------------------------------- tool */

.tool {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 26px;
}
.tool form { display: flex; gap: 10px; }
.tool input[type=url] {
  flex: 1; min-width: 0;
  padding: 13px 16px;
  font-family: inherit; font-size: 15px; letter-spacing: -.01em;
  color: var(--text); background: var(--bg-sunk);
  border: 1px solid var(--line); border-radius: 11px;
}
.tool input[type=url]::placeholder { color: var(--faint); }
.tool input[type=url]:focus { outline: none; border-color: var(--accent); }
.tool .hint { margin: 14px 0 0; font-size: 13px; color: var(--faint); }
.tool .hint a { cursor: pointer; }
@media (max-width: 620px) {
  .tool form { flex-direction: column; }
}

.msg { padding: 13px 16px; border-radius: 11px; font-size: 14.5px; margin-top: 18px; }
.msg.err { background: color-mix(in srgb, #ff3b30 12%, transparent);
           border: 1px solid color-mix(in srgb, #ff3b30 40%, transparent); }
.msg.info { background: var(--bg-alt); border: 1px solid var(--hairline); color: var(--muted); }

/* results */

.resbar {
  display: flex; align-items: center; gap: var(--space-12); flex-wrap: wrap;
  padding: var(--space-16) 0; margin-top: var(--space-24);
  border-top: 1px solid var(--hairline);
}
.resbar .app { font-weight: var(--weight-semibold); letter-spacing: -.015em; }
.resbar .count { font-size: var(--size-sm); color: var(--muted); }
.resbar .sp { flex: 1; }

.group-h {
  font-size: var(--size-xs); font-weight: var(--weight-semibold); letter-spacing: .04em; text-transform: uppercase;
  color: var(--faint); margin: var(--space-32) 0 var(--space-16);
}
.grid {
  display: grid; gap: 16px;
  grid-template-columns: repeat(auto-fill, minmax(146px, 1fr));
}
.shot {
  position: relative; cursor: pointer;
  border-radius: var(--radius-sm);
  border: 1px solid var(--line);
  background: var(--bg-sunk);
  overflow: hidden;
  transition: border-color .14s ease;
}
.shot:hover { border-color: var(--faint); }
.shot.on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
.shot img {
  width: 100%; aspect-ratio: 9/19.5; object-fit: contain; background: var(--bg-alt);
}
.shot.sq img   { aspect-ratio: 1; }
.shot.wide img { aspect-ratio: 2/1; }
.shot .dim {
  padding: 8px 10px; font-size: 11px; color: var(--faint);
  font-family: var(--f-mono); letter-spacing: 0;
  border-top: 1px solid var(--hairline);
}
.shot .tick {
  position: absolute; top: 9px; right: 9px;
  width: 21px; height: 21px; border-radius: 50%;
  background: rgba(0,0,0,.42); border: 1px solid rgba(255,255,255,.5);
  display: grid; place-items: center;
  color: #fff; font-size: 12px; line-height: 1;
  opacity: 0; transition: opacity .12s ease;
}
.shot.on .tick { opacity: 1; background: var(--accent); border-color: var(--accent); }
.shot .one {
  position: absolute; top: 9px; left: 9px;
  padding: 3px 8px; border-radius: 7px;
  background: rgba(0,0,0,.55); color: #fff; font-size: 11px;
  text-decoration: none; opacity: 0; transition: opacity .12s ease;
}
.shot:hover .one { opacity: 1; }

.spin {
  display: inline-block; width: 13px; height: 13px;
  border: 2px solid currentColor; border-top-color: transparent;
  border-radius: 50%; animation: spin .7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* --------------------------------------------------- product showcase shots */
/* Placeholder product imagery on the homepage. Designers swap the files under
   static/img/placeholders/ at the same dimensions and these frames hold. */
.showcase {
  display: block; width: 100%; height: auto;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--bg-alt);
  box-shadow: 0 24px 60px -34px rgba(0, 0, 0, .42);
}
.showcase-lead { margin-top: 4px; }
.split {
  display: grid; gap: 48px; align-items: center;
  grid-template-columns: 1fr 1fr;
}
.split .eyebrow { margin-top: 0; }
@media (max-width: 860px) {
  .split { grid-template-columns: 1fr; gap: 30px; }
  .split .showcase { order: -1; }
}

/* ------------------------------------------------------------------- pieces */

.cols { display: grid; gap: 30px; grid-template-columns: repeat(3, 1fr); }
.cols.two { grid-template-columns: repeat(2, 1fr); }
@media (max-width: 860px) { .cols, .cols.two { grid-template-columns: 1fr; } }

.piece h3 { margin-bottom: 8px; }
.piece p { color: var(--muted); margin: 0; font-size: 15.5px; }
.piece .num {
  font-family: var(--f-mono); font-size: 12px; color: var(--faint);
  display: block; margin-bottom: 12px;
}

.card {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 26px;
}

/* guide cards */

.guide-card {
  display: block; padding: 26px 0;
  border-top: 1px solid var(--hairline);
  color: var(--text); text-decoration: none;
}
.guide-card:hover { text-decoration: none; }
.guide-card:hover h3 { color: var(--accent); }
.guide-card h3 { transition: color .14s ease; margin-bottom: 7px; }
.guide-card p { color: var(--muted); margin: 0 0 10px; font-size: 15.5px; }
.guide-card .meta { font-size: 13px; color: var(--faint); }

/* article index grid (featured-image cards) */
.post-grid {
  display: grid; gap: 34px 26px;
  grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
}
.post-card { display: flex; flex-direction: column; color: var(--text); text-decoration: none; }
.post-card:hover { text-decoration: none; }
.post-card .thumb {
  width: 100%; height: auto; display: block;
  border-radius: var(--radius-sm); border: 1px solid var(--line);
  background: var(--bg-alt); transition: border-color .14s ease;
}
.post-card:hover .thumb { border-color: var(--faint); }
.post-card .eyebrow-sm {
  font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
  color: var(--accent); margin: 16px 0 0;
}
.post-card h3 { font-size: 18.5px; line-height: 1.3; margin: 6px 0 8px; transition: color .14s ease; }
.post-card:hover h3 { color: var(--accent); }
.post-card .dek {
  color: var(--muted); font-size: 14.5px; line-height: 1.5; margin: 0 0 12px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.post-card .meta { font-size: 13px; color: var(--faint); margin-top: auto; }
@media (max-width: 620px) { .post-grid { grid-template-columns: 1fr; } }

/* ------------------------------------------------------------------ article */

.article { max-width: 700px; margin: 0 auto; padding: 0 24px; }
/* Contains the article (header, hero, body+rail) instead of letting it run
   full-bleed. Wide enough for the reading column plus the 240px TOC rail. */
.article-shell { max-width: 1060px; margin: 0 auto; padding: 0 24px; }
.article-head { padding: 64px 0 34px; text-align: center; }
.article-head h1 { font-size: clamp(32px, 4.4vw, 48px); margin-bottom: 16px; }
.article-head .lede { max-width: 640px; margin-left: auto; margin-right: auto; }
.article-head .meta { font-size: 13.5px; color: var(--faint); margin-top: 20px; }

.prose { font-size: 18px; line-height: 1.62; }
.prose h2 { font-size: 27px; margin: 46px 0 14px; letter-spacing: -.018em; }
.prose h3 { font-size: 20px; margin: 34px 0 10px; }
.prose p  { margin: 0 0 1.15em; }
.prose ul, .prose ol { margin: 0 0 1.3em; padding-left: 22px; }
.prose li { margin-bottom: .5em; }
.prose strong { font-weight: 600; }
.prose code {
  font-family: var(--f-mono); font-size: .86em;
  background: var(--bg-alt); border: 1px solid var(--hairline);
  padding: 1px 5px; border-radius: 5px;
}
.prose pre {
  background: var(--bg-alt); border: 1px solid var(--hairline);
  border-radius: var(--radius-sm); padding: 16px 18px;
  overflow-x: auto; font-size: 13.5px; line-height: 1.6;
  margin: 0 0 1.4em;
}
.prose pre code { background: none; border: 0; padding: 0; font-size: inherit; }
.prose blockquote {
  margin: 0 0 1.4em; padding: 2px 0 2px 20px;
  border-left: 3px solid var(--line); color: var(--muted);
}
.prose table {
  width: 100%; border-collapse: collapse; margin: 0 0 1.5em; font-size: 15px;
}
.prose th, .prose td {
  text-align: left; padding: 11px 12px;
  border-bottom: 1px solid var(--hairline);
}
.prose th { font-weight: 600; font-size: 13px; color: var(--muted); }
.prose td code { font-size: .9em; }
.table-scroll { overflow-x: auto; margin: 0 0 1.5em; }
.table-scroll table { margin: 0; }

.callout {
  border: 1px solid var(--line); border-radius: var(--radius-sm);
  padding: 18px 20px; margin: 0 0 1.5em;
  background: var(--bg-alt); font-size: 16px;
}
.callout p:last-child { margin-bottom: 0; }
.callout strong { display: block; margin-bottom: 4px; }

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

footer.site {
  border-top: 1px solid var(--hairline);
  background: var(--bg-alt);
  padding: 44px 0 34px;
  font-size: 13px; color: var(--muted);
}
.foot-cols {
  display: grid; gap: 28px;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  padding-bottom: 28px;
}
@media (max-width: 760px) { .foot-cols { grid-template-columns: 1fr 1fr; } }
.foot-cols h4 { font-size: 12px; margin-bottom: 12px; color: var(--text); }
.foot-cols ul { list-style: none; margin: 0; padding: 0; }
.foot-cols li { margin-bottom: 8px; }
.foot-cols a { color: var(--muted); }
.foot-cols a:hover { color: var(--text); text-decoration: none; }
.foot-legal {
  border-top: 1px solid var(--hairline);
  padding-top: 22px;
  display: flex; gap: 18px; flex-wrap: wrap; align-items: center;
  font-size: 12px; color: var(--faint);
}
.foot-legal .sp { flex: 1; }
.foot-note { max-width: 620px; line-height: 1.55; }

/* --------------------------------------------------------------------- misc */

details.faq {
  border-bottom: 1px solid var(--hairline);
  padding: 20px 0;
}
details.faq summary {
  cursor: pointer; list-style: none;
  font-size: 18px; font-weight: 500; letter-spacing: -.012em;
  display: flex; align-items: center; gap: 14px;
}
details.faq summary::-webkit-details-marker { display: none; }
details.faq summary::after {
  content: "+"; margin-left: auto; font-size: 21px; color: var(--faint);
  font-weight: 400; line-height: 1; transition: transform .18s ease;
}
details.faq[open] summary::after { transform: rotate(45deg); }
details.faq p {
  margin: 12px 0 0; color: var(--muted); font-size: 16px; max-width: 62ch;
}

.chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 34px; }
.chip {
  padding: 6px 14px; border-radius: 980px; font-size: 13px;
  border: 1px solid var(--line); color: var(--muted);
  background: none; cursor: pointer; font-family: inherit;
}
.chip.on { background: var(--text); color: var(--bg); border-color: var(--text); }
/* chips are <button> on /articles and <a> on the dashboard filter — keep them identical */
a.chip { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; }
a.chip:hover { border-color: var(--faint); text-decoration: none; }
a.chip.on:hover { border-color: var(--text); }
.chip-n { font-size: 11px; opacity: .6; font-variant-numeric: tabular-nums; }

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

/* ========================================================================
   Tracker (dashboard, watch detail, auth, pricing)
   ======================================================================== */

.field {
  width: 100%; padding: 12px 14px; border-radius: 11px;
  border: 1px solid var(--line); background: var(--bg-sunk); color: var(--text);
  font-family: inherit; font-size: 15px; letter-spacing: -.01em;
}
.field:focus { outline: none; border-color: var(--accent); }
.field::placeholder { color: var(--faint); }
.field-label {
  display: block; font-size: 12px; font-weight: 600; letter-spacing: .01em;
  color: var(--muted); margin-bottom: 6px;
}

.dot {
  display: inline-block; min-width: 17px; padding: 0 5px; height: 17px; line-height: 17px;
  text-align: center; font-size: 11px; font-weight: 600;
  background: var(--accent); color: #fff; border-radius: 999px; vertical-align: 1px;
}

/* watch rows */
.watch-row {
  display: flex; align-items: center; gap: var(--space-16); padding: var(--space-16);
  border: 1px solid var(--line); border-radius: var(--radius-md);
  margin-bottom: var(--space-8); color: var(--text); text-decoration: none;
  background: var(--panel); transition: border-color .14s ease;
}
.watch-row:hover { border-color: var(--faint); text-decoration: none; }
.watch-store {
  width: 34px; height: 34px; border-radius: var(--radius-sm); flex: none;
  display: grid; place-items: center; font-weight: 700; font-size: var(--size-sm); color: var(--accent-tx);
}
.watch-store.apple { background: var(--store-apple); }
.watch-store.play  { background: var(--store-play); }
.watch-main { flex: 1; min-width: 0; }
.watch-name { font-weight: 600; letter-spacing: -.01em; white-space: nowrap;
              overflow: hidden; text-overflow: ellipsis; }
.watch-sub { color: var(--faint); }
.watch-cta { color: var(--accent); white-space: nowrap; }

/* storefront code, e.g. GB — an uppercase code rather than a flag emoji, which
   Windows renders as bare letters and would read as a duplicate of the code */
.watch-cc {
  display: inline-block; vertical-align: middle; margin-left: var(--space-8);
  padding: 1px 6px; border-radius: var(--radius-sm); flex: none;
  border: 1px solid var(--line); background: var(--bg);
  font-size: 11px; font-weight: 600; letter-spacing: .04em;
  color: var(--muted); text-transform: uppercase;
}

/* change feed (dashboard side column) */
.feed-row { display: flex; gap: var(--space-12); padding: var(--space-12) 0; border-top: 1px solid var(--hairline);
            color: var(--text); text-decoration: none; }
.feed-row:hover { text-decoration: none; }
.feed-row:hover .feed-app { color: var(--accent); }
.feed-icon { width: 22px; height: 22px; flex: none; border-radius: var(--radius-xs);
             background: var(--bg-alt); display: grid; place-items: center;
             font-size: var(--size-xs); color: var(--muted); margin-top: 1px; }
.feed-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.feed-app { font-weight: var(--weight-semibold); font-size: var(--size-sm); letter-spacing: -.01em; }
.feed-sum { color: var(--muted); }
.feed-time { font-size: var(--size-xs); color: var(--faint); font-family: var(--font-mono); }

/* timeline */
.tl-item { border: 1px solid var(--line); border-radius: var(--radius-sm);
           padding: 16px 18px; margin-bottom: 14px; background: var(--panel); }
.tl-head { display: flex; align-items: center; gap: 10px; }
.tl-sum { font-weight: 500; letter-spacing: -.01em; }
.tl-time { color: var(--faint); font-family: var(--f-mono); white-space: nowrap; }

.ck { font-size: 10.5px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase;
      padding: 3px 8px; border-radius: 6px; white-space: nowrap; }
.ck-add  { background: #34c75922; color: #1a8c3c; }
.ck-rem  { background: #ff3b3022; color: #c62f27; }
.ck-rep  { background: #0a84ff22; color: #0a63c9; }
.ck-ord  { background: #ff9f0a22; color: #b5730a; }
.ck-meta { background: #8e8e9322; color: #6a6a70; }

/* before / after diff */
.diff { display: grid; grid-template-columns: 1fr auto 1fr; gap: 14px; align-items: center;
        margin-top: 14px; }
.diff-label { font-size: 11px; color: var(--faint); text-transform: uppercase;
              letter-spacing: .05em; margin-bottom: 8px; }
.diff-imgs { display: flex; gap: 8px; flex-wrap: wrap; }
.diff-imgs img { height: 150px; width: auto; border-radius: 8px; border: 1px solid var(--line);
                 background: var(--bg-alt); }
.diff-imgs img.sq { height: 72px; }
.diff-arrow { color: var(--faint); font-size: 20px; }
.diff-none { height: 150px; width: 70px; border: 1px dashed var(--line); border-radius: 8px;
             display: grid; place-items: center; color: var(--faint); }

/* mini current-assets grid */
.mini-grid { display: flex; gap: 6px; flex-wrap: wrap; }
.mini { height: 78px; width: auto; border-radius: 6px; border: 1px solid var(--line);
        background: var(--bg-alt); }
.mini.sq { height: 40px; }

.switch { display: flex; align-items: center; gap: 10px; font-size: 15px; cursor: pointer; }
.switch input { width: 18px; height: 18px; accent-color: var(--accent); }

/* pricing */
.price { position: relative; display: flex; flex-direction: column; }
.price.featured { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
.price h3 { font-size: 18px; margin-bottom: 6px; }
.price-tag { font-size: 40px; font-weight: 600; letter-spacing: -.03em; margin-bottom: 18px; }
.price-tag span { font-size: 15px; font-weight: 400; color: var(--muted); letter-spacing: 0; }
.price-list { list-style: none; padding: 0; margin: 0 0 22px; flex: 1; }
.price-list li { padding: 8px 0 8px 24px; position: relative; font-size: 15px;
                 border-top: 1px solid var(--hairline); }
.price-list li:first-child { border-top: 0; }
.price-list li::before { content: "✓"; position: absolute; left: 0; color: var(--accent);
                         font-weight: 600; }
.price-badge { position: absolute; top: -10px; right: 18px; background: var(--accent);
               color: #fff; font-size: 11px; font-weight: 600; padding: 3px 10px;
               border-radius: 999px; }

/* ========================================================================
   Positioning + article system (SaaS content)
   ======================================================================== */

.hero-cta { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 8px; }

.cta-band { background: var(--bg-alt); border-top: 1px solid var(--hairline); padding: 80px 0; }

/* breadcrumbs */
.crumbs { padding-top: 20px; }
.crumbs ol { list-style: none; display: flex; flex-wrap: wrap; gap: 0; margin: 0; padding: 0;
             font-size: 13px; color: var(--faint); }
.crumbs li { display: flex; align-items: center; }
.crumbs a { color: var(--muted); }
.crumbs .sep { margin: 0 8px; color: var(--faint); }
.crumbs [aria-current] { color: var(--text); }

/* byline */
.byline { display: flex; align-items: center; gap: 12px; justify-content: center;
          margin-top: 24px; text-align: left; }
.byline-av, .author-card-av, .author-hero-av {
  display: grid; place-items: center; flex: none;
  background: var(--accent); color: #fff; font-weight: 600; border-radius: 50%;
  text-decoration: none;
}
.byline-av { width: 40px; height: 40px; font-size: 17px; }
.byline > div { font-size: 14px; }
.byline a { font-weight: 600; }
.byline-meta { display: block; color: var(--faint); font-size: 13px; }

/* key points */
.keypoints {
  border: 1px solid var(--line); border-left: 3px solid var(--accent);
  border-radius: var(--radius-sm); padding: 20px 22px; margin: 0 0 32px;
  background: var(--bg-alt);
}
.keypoints h2 { font-size: 13px; text-transform: uppercase; letter-spacing: .05em;
                color: var(--muted); margin: 0 0 12px; }
.keypoints ul { margin: 0; padding-left: 20px; }
.keypoints li { margin-bottom: 8px; font-size: 15.5px; line-height: 1.5; }
.keypoints li:last-child { margin-bottom: 0; }

/* table of contents (inline, on narrow) */
.toc { margin: 0 0 32px; }
.toc-h { font-size: 12px; text-transform: uppercase; letter-spacing: .05em;
         color: var(--faint); margin: 0 0 10px; font-weight: 600; }
.toc ol { list-style: none; margin: 0; padding: 0; counter-reset: toc; }
.toc > ol > li { counter-increment: toc; margin-bottom: 8px; }
.toc > ol > li > a::before { content: counter(toc) ". "; color: var(--faint); }
.toc ol ol { padding-left: 18px; margin-top: 6px; }
.toc ol ol li { margin-bottom: 5px; font-size: 14px; }
.toc a { color: var(--muted); }
.toc a:hover { color: var(--accent); }
/* Body + sidebar rail. Without the grid the aside simply stacks under the article,
   which put the desktop TOC below everything it was meant to navigate. */
.with-rail { display: grid; grid-template-columns: minmax(0, 1fr); }
.rail { display: none; }
.rail-toc { display: block; }
@media (min-width: 1081px) {
  .with-rail { grid-template-columns: minmax(0, 1fr) 240px; gap: 64px; align-items: start; }
  .rail { display: block; }
  /* one TOC at a time: inline on narrow, rail on wide */
  .with-rail > div > .toc:not(.rail-toc) { display: none; }
  .sticky { position: sticky; top: 88px; }
}
.prose :is(h2, h3) { scroll-margin-top: 68px; }

/* author cards */
.author-card {
  display: flex; gap: 14px; align-items: center;
  border-top: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline);
  padding: 22px 0; margin-top: 40px;
}
.author-card-av { width: 46px; height: 46px; font-size: 19px; }
.author-card-name { margin: 0 0 2px; font-weight: 600; }

.author-hero { display: flex; align-items: center; gap: 18px; }
.author-hero-av { width: 64px; height: 64px; font-size: 27px; }
.expertise { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 20px; }

/* ========================================================================
   App detail — "app snapshot" (redesign, 2026-07)
   Self-contained, light-only product surface. All colours are declared
   locally on .appd so this block is immune to the global dark-mode media
   query and can't leak into other pages.
   ======================================================================== */

.appd {
  --a: #2a71f6; --a-d: #1f60e6;
  --tx: #111318; --mut: #565d6b; --fnt: #8b93a1;
  --ln: #e7e9ee; --ln2: #d7dbe2; --ln3: #e2e5ea;
  --sunk: #f7f8fa; --pg: #f5f6f8;
  --grn: #17a673; --grn-bg: #e7f7f0; --grn-ln: #cdeadd;
  --red: #c0473f;
  background: var(--pg);
  color: var(--tx);
  padding: 36px 0 80px;
}
.appd .wrap-wide { max-width: 1200px; }

.appd-crumb { display: inline-block; color: var(--mut); font-size: 14px; font-weight: 500; }
.appd-crumb:hover { color: var(--tx); text-decoration: none; }

/* header */
.appd-head { display: flex; align-items: flex-start; gap: 20px; margin-top: 18px; }
.appd-id { display: flex; align-items: center; gap: 16px; flex: 1; min-width: 0; }
.appd-icon {
  width: 56px; height: 56px; border-radius: 14px; flex: none; overflow: hidden;
  display: grid; place-items: center; color: #fff; font-weight: 700; font-size: 20px;
  background: #12233b;
}
.appd-icon img { width: 100%; height: 100%; object-fit: cover; }
.appd-icon-play { background: #0b8043; }
.appd-name { font-size: 24px; font-weight: 700; letter-spacing: -.01em; line-height: 1.15; color: var(--tx); }
.appd-meta { font-size: 14px; color: var(--fnt); margin-top: 4px; }
.appd-actions { display: flex; align-items: center; gap: 10px; flex: none; }
.appd-actions form { margin: 0; }

/* buttons */
.appd-btn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 40px; padding: 0 18px; border-radius: 10px; border: 1px solid transparent;
  font-family: inherit; font-size: 14px; font-weight: 500; cursor: pointer;
  text-decoration: none; transition: background .15s ease, opacity .15s ease;
}
.appd-btn:hover { text-decoration: none; }
.appd-btn.primary { background: var(--a); color: #fff; }
.appd-btn.primary:hover { background: var(--a-d); }
.appd-btn.ghost { background: #fff; color: var(--tx); border-color: var(--ln2); }
.appd-btn.ghost:hover { background: var(--sunk); }
.appd-btn.icon { width: 40px; padding: 0; background: #fff; color: var(--mut);
                 border-color: var(--ln2); font-size: 17px; letter-spacing: 1px; }

/* overflow menu */
.appd-menu { position: relative; }
.appd-menu > summary { list-style: none; }
.appd-menu > summary::-webkit-details-marker { display: none; }
.appd-menu-pop {
  position: absolute; right: 0; top: 46px; z-index: 20; min-width: 180px;
  background: #fff; border: 1px solid var(--ln); border-radius: 12px; padding: 6px;
  display: flex; flex-direction: column; box-shadow: 0 12px 32px rgba(16,19,26,.12);
}
.appd-menu-pop a, .appd-menu-pop button {
  text-align: left; background: none; border: 0; font-family: inherit; font-size: 14px;
  color: var(--tx); padding: 9px 12px; border-radius: 8px; cursor: pointer; text-decoration: none;
}
.appd-menu-pop a:hover, .appd-menu-pop button:hover { background: var(--sunk); text-decoration: none; }
.appd-menu-pop button.danger { color: var(--red); }

/* status strip */
.appd-strip { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 22px; }
.appd-chip {
  display: inline-flex; align-items: center; gap: 8px; height: 30px; padding: 0 12px;
  border-radius: 8px; background: #fff; border: 1px solid var(--ln);
  font-size: 13px; font-weight: 500; color: var(--mut);
}
.appd-chip .appd-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.appd-chip.green { background: var(--grn-bg); border-color: var(--grn-ln); color: var(--grn); }
.appd-chip.amber { background: #fff7e8; border-color: #f3e2be; color: #b5730a; }

/* cards */
.appd-card {
  background: #fff; border: 1px solid var(--ln); border-radius: 16px;
  padding: 28px; margin-top: 24px;
}
.appd-card-h { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
.appd-card-t { font-size: 17px; font-weight: 700; color: var(--tx); }
.appd-card-hint { font-size: 13px; color: var(--fnt); }

/* change history — empty state */
.appd-empty { text-align: center; padding: 20px 0 12px; }
.appd-empty-h { font-size: 18px; font-weight: 700; color: var(--tx); margin-top: 20px; }
.appd-empty-b { font-size: 14px; color: var(--mut); max-width: 520px; margin: 12px auto 0; }
.appd-empty-cap { font-size: 12px; font-weight: 500; letter-spacing: .04em; color: var(--fnt); margin-top: 26px; }
.appd-diffprev {
  display: inline-flex; align-items: center; gap: 24px; margin-top: 16px;
  background: var(--sunk); border: 1px solid var(--ln); border-radius: 14px; padding: 22px 32px;
}
.appd-diffprev-col { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.appd-diffprev-col span { font-size: 12px; font-weight: 500; color: var(--fnt); }
.appd-diffprev-col span.now { color: var(--a); }
.appd-diffprev-arrow { color: var(--fnt); font-size: 22px; }
.appd-ph { width: 100px; height: 200px; border-radius: 14px; background: #dfe3ea; }
.appd-ph.now { background: #d4ddff; border: 1px solid var(--a); }

/* change history — populated timeline */
.appd-changes { margin-top: 20px; display: flex; flex-direction: column; gap: 14px; }
.appd-change { border: 1px solid var(--ln); border-radius: 12px; padding: 16px 18px; }
.appd-change-h { display: flex; align-items: center; gap: 10px; }
.appd-change-sum { font-size: 14px; font-weight: 500; color: var(--tx); }
.appd-change-time { margin-left: auto; font-size: 12px; color: var(--fnt);
                    font-family: var(--f-mono); white-space: nowrap; }
.appd-ck { font-size: 10.5px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase;
           padding: 3px 8px; border-radius: 6px; white-space: nowrap; }
.appd-ck-add  { background: #e7f7f0; color: #17a673; }
.appd-ck-rem  { background: #fde8e6; color: #c0473f; }
.appd-ck-rep  { background: #e6efff; color: #2a71f6; }
.appd-ck-ord  { background: #fff2df; color: #b5730a; }
.appd-ck-meta { background: #eef0f4; color: #565d6b; }
.appd-diff { display: grid; grid-template-columns: 1fr auto 1fr; gap: 14px;
             align-items: center; margin-top: 14px; }
.appd-diff-lbl { font-size: 11px; text-transform: uppercase; letter-spacing: .05em;
                 color: var(--fnt); margin-bottom: 8px; }
.appd-diff-lbl.now { color: var(--a); }
.appd-diff-imgs { display: flex; gap: 12px; flex-wrap: wrap; }
.appd-diff-imgs img { height: clamp(280px, 34vw, 400px); width: auto; border-radius: 14px;
                      border: 1px solid var(--ln); background: var(--sunk); }
.appd-diff-imgs img.sq { height: clamp(120px, 16vw, 168px); border-radius: 18px; }
.appd-diff-imgs img.now { border-color: var(--a); }
.appd-diff-arrow { color: var(--fnt); font-size: 24px; }
.appd-diff-none { height: clamp(280px, 34vw, 400px); width: 96px; border: 1px dashed var(--ln2);
                  border-radius: 14px; display: grid; place-items: center; color: var(--fnt); font-size: 13px; }

/* current creative */
.appd-tabs { display: inline-flex; gap: 4px; background: #eef1f6; border-radius: 8px; padding: 4px; }
.appd-tab { border: 0; background: none; font-family: inherit; font-size: 13px; font-weight: 500;
            color: var(--mut); padding: 6px 16px; border-radius: 8px; cursor: pointer; }
.appd-tab.on { background: #fff; color: var(--tx); box-shadow: 0 1px 2px rgba(16,19,26,.08); }
.appd-gallery { display: none; gap: 16px; margin-top: 24px; overflow-x: auto; padding-bottom: 6px; }
.appd-gallery.on { display: flex; }
.appd-shot { height: clamp(220px, 30vw, 340px); width: auto; flex: none;
             border-radius: 18px; background: #0e1b30; object-fit: cover; }
.appd-shot.sq { height: clamp(150px, 18vw, 200px); border-radius: 22px; }
.appd-tracked {
  display: flex; gap: 40px; flex-wrap: wrap; margin-top: 24px;
  background: var(--sunk); border: 1px solid var(--ln); border-radius: 12px; padding: 16px 22px;
}
.appd-tf-l { font-size: 11px; font-weight: 600; letter-spacing: .04em; color: var(--fnt); }
.appd-tf-v { font-size: 15px; font-weight: 500; color: var(--tx); margin-top: 4px; }

/* alerts */
.appd-alerts { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 22px; }
.appd-alerts form { margin: 0; }
.appd-check { display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 500; cursor: pointer; }
.appd-check input { width: 18px; height: 18px; accent-color: var(--a); }
.appd-input { flex: 1; min-width: 200px; height: 42px; padding: 0 14px; border-radius: 10px;
              border: 1px solid var(--ln3); background: var(--sunk); color: var(--tx);
              font-family: inherit; font-size: 14px; }
.appd-input::placeholder { color: var(--fnt); }
.appd-input:focus { outline: none; border-color: var(--a); }

/* stop tracking */
.appd-stop { margin-top: 20px; }
.appd-stop button { background: none; border: 0; font-family: inherit; font-size: 14px;
                    font-weight: 500; color: var(--red); cursor: pointer; padding: 0; }
.appd-stop button:hover { text-decoration: underline; }

@media (max-width: 760px) {
  .appd-head { flex-direction: column; }
  .appd-actions { width: 100%; }
  .appd-card { padding: 20px; }
  .appd-card-h { flex-direction: column; align-items: flex-start; gap: 10px; }
  .appd-diff { grid-template-columns: 1fr; }
  .appd-diff-arrow { display: none; }
  .appd-tracked { gap: 20px; }
}
